aboutsummaryrefslogtreecommitdiff
path: root/sword2/function.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sword2/function.cpp')
-rw-r--r--sword2/function.cpp325
1 files changed, 115 insertions, 210 deletions
diff --git a/sword2/function.cpp b/sword2/function.cpp
index 748de8bec4..51931417b2 100644
--- a/sword2/function.cpp
+++ b/sword2/function.cpp
@@ -21,19 +21,21 @@
#include "common/stdafx.h"
#include "common/file.h"
#include "common/system.h"
+
#include "sword2/sword2.h"
#include "sword2/defs.h"
+#include "sword2/build_display.h"
#include "sword2/console.h"
#include "sword2/controls.h"
#include "sword2/interpreter.h"
#include "sword2/logic.h"
#include "sword2/maketext.h"
#include "sword2/memory.h"
+#include "sword2/mouse.h"
#include "sword2/resman.h"
#include "sword2/router.h"
#include "sword2/sound.h"
#include "sword2/driver/animation.h"
-#include "sword2/driver/d_draw.h"
#include "sword2/driver/render.h"
namespace Sword2 {
@@ -65,7 +67,8 @@ int32 Logic::fnInitBackground(int32 *params) {
// params: 0 res id of normal background layer - cannot be 0
// 1 1 yes 0 no for a new palette
- return _vm->initBackground(params[0], params[1]);
+ _vm->_screen->initBackground(params[0], params[1]);
+ return IR_CONT;
}
/**
@@ -106,7 +109,9 @@ int32 Logic::fnRegisterMouse(int32 *params) {
// params: 0 pointer to ObjectMouse or 0 for no write to mouse
// list
- _vm->registerMouse((ObjectMouse *) _vm->_memory->decodePtr(params[0]));
+ ObjectMouse *ob_mouse = (ObjectMouse *) _vm->_memory->decodePtr(params[0]);
+
+ _vm->_mouse->registerMouse(ob_mouse, NULL);
return IR_CONT;
}
@@ -244,15 +249,15 @@ int32 Logic::fnChoose(int32 *params) {
for (i = 0; i < _scriptVars[IN_SUBJECT]; i++) {
icon = _vm->_resman->openResource(_subjectList[i].res) + sizeof(StandardHeader) + RDMENU_ICONWIDE * RDMENU_ICONDEEP;
- _vm->_graphics->setMenuIcon(RDMENU_BOTTOM, i, icon);
+ _vm->_mouse->setMenuIcon(RDMENU_BOTTOM, i, icon);
_vm->_resman->closeResource(_subjectList[i].res);
}
for (; i < 15; i++)
- _vm->_graphics->setMenuIcon(RDMENU_BOTTOM, (uint8) i, NULL);
+ _vm->_mouse->setMenuIcon(RDMENU_BOTTOM, (uint8) i, NULL);
- _vm->_graphics->showMenu(RDMENU_BOTTOM);
- _vm->setMouse(NORMAL_MOUSE_ID);
+ _vm->_mouse->showMenu(RDMENU_BOTTOM);
+ _vm->_mouse->setMouse(NORMAL_MOUSE_ID);
_choosing = true;
return IR_REPEAT;
}
@@ -261,13 +266,16 @@ int32 Logic::fnChoose(int32 *params) {
// about left clicks.
MouseEvent *me = _vm->mouseEvent();
+ int mouseX, mouseY;
- if (!me || !(me->buttons & RD_LEFTBUTTONDOWN) || _vm->_mouseY < 400)
+ _vm->_mouse->getPos(mouseX, mouseY);
+
+ if (!me || !(me->buttons & RD_LEFTBUTTONDOWN) || mouseY < 400)
return IR_REPEAT;
// Check for click on a menu.
- int hit = _vm->menuClick(_scriptVars[IN_SUBJECT]);
+ int hit = _vm->_mouse->menuClick(_scriptVars[IN_SUBJECT]);
if (hit < 0)
return IR_REPEAT;
@@ -276,7 +284,7 @@ int32 Logic::fnChoose(int32 *params) {
for (i = 0; i < _scriptVars[IN_SUBJECT]; i++) {
if ((int) i != hit) {
icon = _vm->_resman->openResource(_subjectList[i].res) + sizeof(StandardHeader);
- _vm->_graphics->setMenuIcon(RDMENU_BOTTOM, i, icon);
+ _vm->_mouse->setMenuIcon(RDMENU_BOTTOM, i, icon);
_vm->_resman->closeResource(_subjectList[i].res);
}
}
@@ -288,7 +296,7 @@ int32 Logic::fnChoose(int32 *params) {
_choosing = false;
_scriptVars[IN_SUBJECT] = 0;
- _vm->setMouse(0);
+ _vm->_mouse->setMouse(0);
return IR_CONT | (_subjectList[hit].ref << 3);
}
@@ -371,7 +379,7 @@ int32 Logic::fnWalk(int32 *params) {
// Walk is about to start, so set the mega's graphic resource
ob_graph->anim_resource = ob_mega->megaset_res;
- } else if (_scriptVars[EXIT_FADING] && _vm->_graphics->getFadeStatus() == RDFADE_BLACK) {
+ } else if (_scriptVars[EXIT_FADING] && _vm->_screen->getFadeStatus() == RDFADE_BLACK) {
// Double clicked an exit so quit the walk when screen is black
// ok, thats it - back to script and change screen
@@ -687,8 +695,9 @@ int32 Logic::fnMegaTableAnim(int32 *params) {
int32 Logic::fnAddMenuObject(int32 *params) {
// params: 0 pointer to a MenuObject structure to copy down
+ MenuObject *menuObject = (MenuObject *) _vm->_memory->decodePtr(params[0]);
- _vm->addMenuObject((MenuObject *) _vm->_memory->decodePtr(params[0]));
+ _vm->_mouse->addMenuObject(menuObject);
return IR_CONT;
}
@@ -704,12 +713,7 @@ int32 Logic::fnAddMenuObject(int32 *params) {
int32 Logic::fnStartConversation(int32 *params) {
// params: none
- if (_scriptVars[TALK_FLAG] == 0) {
- // See fnChooser & speech scripts
- _scriptVars[CHOOSER_COUNT_FLAG] = 0;
- }
-
- fnNoHuman(params);
+ _vm->_mouse->startConversation();
return IR_CONT;
}
@@ -720,16 +724,7 @@ int32 Logic::fnStartConversation(int32 *params) {
int32 Logic::fnEndConversation(int32 *params) {
// params: none
- _vm->_graphics->hideMenu(RDMENU_BOTTOM);
-
- if (_vm->_mouseY > 399) {
- // Will wait for cursor to move off the bottom menu
- _vm->_mouseMode = MOUSE_holding;
- }
-
- // In case DC forgets
- _scriptVars[TALK_FLAG] = 0;
-
+ _vm->_mouse->endConversation();
return IR_CONT;
}
@@ -789,7 +784,12 @@ int32 Logic::fnRegisterFrame(int32 *params) {
// 1 pointer to graphic structure
// 2 pointer to mega structure or NULL if not a mega
- return _vm->registerFrame(params);
+ ObjectMouse *ob_mouse = (ObjectMouse *) _vm->_memory->decodePtr(params[0]);
+ ObjectGraphic *ob_graph = (ObjectGraphic *) _vm->_memory->decodePtr(params[1]);
+ ObjectMega *ob_mega = (ObjectMega *) _vm->_memory->decodePtr(params[2]);
+
+ _vm->_screen->registerFrame(ob_mouse, ob_graph, ob_mega);
+ return IR_CONT;
}
int32 Logic::fnNoSprite(int32 *params) {
@@ -824,15 +824,16 @@ int32 Logic::fnUpdatePlayerStats(int32 *params) {
// params: 0 pointer to mega structure
ObjectMega *ob_mega = (ObjectMega *) _vm->_memory->decodePtr(params[0]);
+ ScreenInfo *screenInfo = _vm->_screen->getScreenInfo();
- _vm->_thisScreen.player_feet_x = ob_mega->feet_x;
- _vm->_thisScreen.player_feet_y = ob_mega->feet_y;
+ screenInfo->player_feet_x = ob_mega->feet_x;
+ screenInfo->player_feet_y = ob_mega->feet_y;
// for the script
_scriptVars[PLAYER_FEET_X] = ob_mega->feet_x;
_scriptVars[PLAYER_FEET_Y] = ob_mega->feet_y;
_scriptVars[PLAYER_CUR_DIR] = ob_mega->current_dir;
- _scriptVars[SCROLL_OFFSET_X] = _vm->_thisScreen.scroll_offset_x;
+ _scriptVars[SCROLL_OFFSET_X] = screenInfo->scroll_offset_x;
debug(5, "fnUpdatePlayerStats: %d %d", ob_mega->feet_x, ob_mega->feet_y);
@@ -856,13 +857,14 @@ int32 Logic::fnInitFloorMouse(int32 *params) {
// params: 0 pointer to object's mouse structure
ObjectMouse *ob_mouse = (ObjectMouse *) _vm->_memory->decodePtr(params[0]);
+ ScreenInfo *screenInfo = _vm->_screen->getScreenInfo();
// floor is always lowest priority
ob_mouse->x1 = 0;
ob_mouse->y1 = 0;
- ob_mouse->x2 = _vm->_thisScreen.screen_wide - 1;
- ob_mouse->y2 = _vm->_thisScreen.screen_deep - 1;
+ ob_mouse->x2 = screenInfo->screen_wide - 1;
+ ob_mouse->y2 = screenInfo->screen_deep - 1;
ob_mouse->priority = 9;
ob_mouse->pointer = NORMAL_MOUSE_ID;
return IR_CONT;
@@ -939,95 +941,14 @@ int32 Logic::fnEndSession(int32 *params) {
int32 Logic::fnNoHuman(int32 *params) {
// params: none
- _vm->noHuman();
- _vm->clearPointerText();
-
- // must be normal mouse situation or a largely neutral situation -
- // special menus use noHuman
-
- // dont hide menu in conversations
- if (_scriptVars[TALK_FLAG] == 0)
- _vm->_graphics->hideMenu(RDMENU_BOTTOM);
-
- if (_vm->_mouseMode == MOUSE_system_menu) {
- // close menu
- _vm->_mouseMode = MOUSE_normal;
- _vm->_graphics->hideMenu(RDMENU_TOP);
- }
-
+ _vm->_mouse->noHuman();
return IR_CONT;
}
int32 Logic::fnAddHuman(int32 *params) {
// params: none
- // for logic scripts
- _scriptVars[MOUSE_AVAILABLE] = 1;
-
- // off
- if (_vm->_mouseStatus) {
- _vm->_mouseStatus = false; // on
- _vm->_mouseTouching = 1; // forces engine to choose a cursor
- }
-
- // clear this to reset no-second-click system
- _scriptVars[CLICKED_ID] = 0;
-
- // this is now done outside the OBJECT_HELD check in case it's set to
- // zero before now!
-
- // unlock the mouse from possible large object lock situtations - see
- // syphon in rm 3
-
- _vm->_mouseModeLocked = false;
-
- if (_scriptVars[OBJECT_HELD]) {
- // was dragging something around
- // need to clear this again
- _scriptVars[OBJECT_HELD] = 0;
-
- // and these may also need clearing, just in case
- _vm->_examiningMenuIcon = false;
- Logic::_scriptVars[COMBINE_BASE] = 0;
-
- _vm->setLuggage(0);
- }
-
- // if mouse is over menu area
- if (_vm->_mouseY > 399) {
- if (_vm->_mouseMode != MOUSE_holding) {
- // VITAL - reset things & rebuild the menu
- _vm->_mouseMode = MOUSE_normal;
- _vm->setMouse(NORMAL_MOUSE_ID);
- } else
- _vm->setMouse(NORMAL_MOUSE_ID);
- }
-
- // enabled/disabled from console; status printed with on-screen debug
- // info
-
- if (_vm->_debugger->_testingSnR) {
- uint8 black[4] = { 0, 0, 0, 0 };
- uint8 white[4] = { 255, 255, 255, 0 };
-
- // testing logic scripts by simulating an instant Save &
- // Restore
-
- _vm->_graphics->setPalette(0, 1, white, RDPAL_INSTANT);
-
- // stops all fx & clears the queue - eg. when leaving a
- // location
-
- _vm->_sound->clearFxQueue();
-
- // Trash all object resources so they load in fresh & restart
- // their logic scripts
-
- _vm->_resman->killAllObjects(false);
-
- _vm->_graphics->setPalette(0, 1, black, RDPAL_INSTANT);
- }
-
+ _vm->_mouse->addHuman();
return IR_CONT;
}
@@ -1265,8 +1186,8 @@ int32 Logic::fnFadeDown(int32 *params) {
// params: none
- if (_vm->_graphics->getFadeStatus() == RDFADE_NONE)
- _vm->_graphics->fadeDown();
+ if (_vm->_screen->getFadeStatus() == RDFADE_NONE)
+ _vm->_screen->fadeDown();
return IR_CONT;
}
@@ -1562,9 +1483,13 @@ int32 Logic::fnISpeak(int32 *params) {
// Ok, all is running along smoothly - but a click means stop
// unnaturally
+ int mouseX, mouseY;
+
+ _vm->_mouse->getPos(mouseX, mouseY);
+
// So that we can go to the options panel while text & speech is
// being tested
- if (_scriptVars[SYSTEM_TESTING_TEXT] == 0 || _vm->_mouseY > 0) {
+ if (_scriptVars[SYSTEM_TESTING_TEXT] == 0 || mouseY > 0) {
MouseEvent *me = _vm->mouseEvent();
// Note that we now have TWO click-delays - one for LEFT
@@ -2299,8 +2224,10 @@ int32 Logic::fnSetScrollCoordinate(int32 *params) {
// feet_x & feet_y refer to the physical screen coords where the
// system will try to maintain George's feet
- _vm->_thisScreen.feet_x = params[0];
- _vm->_thisScreen.feet_y = params[1];
+ ScreenInfo *screenInfo = _vm->_screen->getScreenInfo();
+
+ screenInfo->feet_x = params[0];
+ screenInfo->feet_y = params[1];
return IR_CONT;
}
@@ -2350,16 +2277,17 @@ int32 Logic::fnSetScrollLeftMouse(int32 *params) {
// params: 0 pointer to object's mouse structure
ObjectMouse *ob_mouse = (ObjectMouse *) _vm->_memory->decodePtr(params[0]);
+ ScreenInfo *screenInfo = _vm->_screen->getScreenInfo();
// Highest priority
ob_mouse->x1 = 0;
ob_mouse->y1 = 0;
- ob_mouse->x2 = _vm->_thisScreen.scroll_offset_x + SCROLL_MOUSE_WIDTH;
- ob_mouse->y2 = _vm->_thisScreen.screen_deep - 1;
+ ob_mouse->x2 = screenInfo->scroll_offset_x + SCROLL_MOUSE_WIDTH;
+ ob_mouse->y2 = screenInfo->screen_deep - 1;
ob_mouse->priority = 0;
- if (_vm->_thisScreen.scroll_offset_x > 0) {
+ if (screenInfo->scroll_offset_x > 0) {
// not fully scrolled to the left
ob_mouse->pointer = SCROLL_LEFT_MOUSE_ID;
} else {
@@ -2374,16 +2302,17 @@ int32 Logic::fnSetScrollRightMouse(int32 *params) {
// params: 0 pointer to object's mouse structure
ObjectMouse *ob_mouse = (ObjectMouse *) _vm->_memory->decodePtr(params[0]);
+ ScreenInfo *screenInfo = _vm->_screen->getScreenInfo();
// Highest priority
- ob_mouse->x1 = _vm->_thisScreen.scroll_offset_x + _vm->_graphics->_screenWide - SCROLL_MOUSE_WIDTH;
+ ob_mouse->x1 = screenInfo->scroll_offset_x + _vm->_screen->getScreenWide() - SCROLL_MOUSE_WIDTH;
ob_mouse->y1 = 0;
- ob_mouse->x2 = _vm->_thisScreen.screen_wide - 1;
- ob_mouse->y2 = _vm->_thisScreen.screen_deep - 1;
+ ob_mouse->x2 = screenInfo->screen_wide - 1;
+ ob_mouse->y2 = screenInfo->screen_deep - 1;
ob_mouse->priority = 0;
- if (_vm->_thisScreen.scroll_offset_x < _vm->_thisScreen.max_scroll_offset_x) {
+ if (screenInfo->scroll_offset_x < screenInfo->max_scroll_offset_x) {
// not fully scrolled to the right
ob_mouse->pointer = SCROLL_RIGHT_MOUSE_ID;
} else {
@@ -2405,19 +2334,19 @@ int32 Logic::fnColour(int32 *params) {
// what colour?
switch (params[0]) {
case BLACK:
- _vm->_graphics->setPalette(0, 1, black, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, black, RDPAL_INSTANT);
break;
case WHITE:
- _vm->_graphics->setPalette(0, 1, white, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, white, RDPAL_INSTANT);
break;
case RED:
- _vm->_graphics->setPalette(0, 1, red, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, red, RDPAL_INSTANT);
break;
case GREEN:
- _vm->_graphics->setPalette(0, 1, green, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, green, RDPAL_INSTANT);
break;
case BLUE:
- _vm->_graphics->setPalette(0, 1, blue, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, blue, RDPAL_INSTANT);
break;
}
#endif
@@ -2450,25 +2379,25 @@ int32 Logic::fnFlash(int32 *params) {
// what colour?
switch (params[0]) {
case WHITE:
- _vm->_graphics->setPalette(0, 1, white, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, white, RDPAL_INSTANT);
break;
case RED:
- _vm->_graphics->setPalette(0, 1, red, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, red, RDPAL_INSTANT);
break;
case GREEN:
- _vm->_graphics->setPalette(0, 1, green, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, green, RDPAL_INSTANT);
break;
case BLUE:
- _vm->_graphics->setPalette(0, 1, blue, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, blue, RDPAL_INSTANT);
break;
}
// There used to be a busy-wait loop here, so I don't know how long
// the delay was meant to be. Probably doesn't matter much.
- _vm->_graphics->updateDisplay();
+ _vm->_screen->updateDisplay();
_vm->_system->delayMillis(250);
- _vm->_graphics->setPalette(0, 1, black, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 1, black, RDPAL_INSTANT);
#endif
return IR_CONT;
@@ -2736,14 +2665,14 @@ int32 Logic::fnPlaySequence(int32 *params) {
// now clear the screen in case the Sequence was quitted (using ESC)
// rather than fading down to black
- _vm->_graphics->clearScene();
+ _vm->_screen->clearScene();
// zero the entire palette in case we're about to fade up!
byte pal[4 * 256];
memset(pal, 0, sizeof(pal));
- _vm->_graphics->setPalette(0, 256, pal, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 256, pal, RDPAL_INSTANT);
debug(5, "fnPlaySequence FINISHED");
return IR_CONT;
@@ -2764,10 +2693,10 @@ int32 Logic::fnUnshadedSprite(int32 *params) {
int32 Logic::fnFadeUp(int32 *params) {
// params: none
- _vm->_graphics->waitForFade();
+ _vm->_screen->waitForFade();
- if (_vm->_graphics->getFadeStatus() == RDFADE_BLACK)
- _vm->_graphics->fadeUp();
+ if (_vm->_screen->getFadeStatus() == RDFADE_BLACK)
+ _vm->_screen->fadeUp();
return IR_CONT;
}
@@ -2785,7 +2714,7 @@ int32 Logic::fnDisplayMsg(int32 *params) {
// +2 to skip the encoded text number in the first 2 chars; 3 is
// duration in seconds
- _vm->displayMsg(_vm->fetchTextLine(_vm->_resman->openResource(text_res), local_text) + 2, 3);
+ _vm->_screen->displayMsg(_vm->fetchTextLine(_vm->_resman->openResource(text_res), local_text) + 2, 3);
_vm->_resman->closeResource(text_res);
return IR_CONT;
@@ -2793,14 +2722,9 @@ int32 Logic::fnDisplayMsg(int32 *params) {
int32 Logic::fnSetObjectHeld(int32 *params) {
// params: 0 luggage icon to set
+ uint32 res = (uint32) params[0];
- _vm->setLuggage(params[0]);
-
- _scriptVars[OBJECT_HELD] = params[0];
- _vm->_currentLuggageResource = params[0];
-
- // mode locked - no menu available
- _vm->_mouseModeLocked = true;
+ _vm->_mouse->setObjectHeld(res);
return IR_CONT;
}
@@ -2824,6 +2748,8 @@ int32 Logic::fnResetGlobals(int32 *params) {
// params: none
+ ScreenInfo *screenInfo = _vm->_screen->getScreenInfo();
+
int32 size;
uint32 *globals;
@@ -2846,7 +2772,7 @@ int32 Logic::fnResetGlobals(int32 *params) {
// - this is taken from fnInitBackground
// switch on scrolling (2 means first time on screen)
- _vm->_thisScreen.scroll_flag = 2;
+ screenInfo->scroll_flag = 2;
return IR_CONT;
}
@@ -2855,7 +2781,7 @@ int32 Logic::fnSetPalette(int32 *params) {
// params: 0 resource number of palette file, or 0 if it's to be
// the palette from the current screen
- _vm->setFullPalette(params[0]);
+ _vm->_screen->setFullPalette(params[0]);
return IR_CONT;
}
@@ -2866,13 +2792,7 @@ int32 Logic::fnSetPalette(int32 *params) {
int32 Logic::fnRegisterPointerText(int32 *params) {
// params: 0 local id of text line to use as pointer text
- assert(_vm->_curMouse < TOTAL_mouse_list);
-
- // current object id - used for checking pointer_text when mouse area
- // registered (in fnRegisterMouse and fnRegisterFrame)
-
- _vm->_mouseList[_vm->_curMouse].id = _scriptVars[ID];
- _vm->_mouseList[_vm->_curMouse].pointer_text = params[0];
+ _vm->_mouse->registerPointerText(params[0]);
return IR_CONT;
}
@@ -2940,18 +2860,9 @@ int32 Logic::fnCheckPlayerActivity(int32 *params) {
// params: 0 threshold delay in seconds, ie. what we want to
// check the actual delay against
- uint32 threshold = params[0] * 12; // in game cycles
-
- // if the actual delay is at or above the given threshold
- if (_vm->_playerActivityDelay >= threshold) {
- // reset activity delay counter, now that we've got a
- // positive check
-
- _vm->_playerActivityDelay = 0;
- _scriptVars[RESULT] = 1;
- } else
- _scriptVars[RESULT] = 0;
+ uint32 seconds = (uint32) params[0];
+ _vm->_mouse->checkPlayerActivity(seconds);
return IR_CONT;
}
@@ -2961,7 +2872,7 @@ int32 Logic::fnResetPlayerActivityDelay(int32 *params) {
// params: none
- _vm->_playerActivityDelay = 0;
+ _vm->_mouse->resetPlayerActivityDelay();
return IR_CONT;
}
@@ -3005,6 +2916,7 @@ struct CreditsLine {
#define CREDITS_LINE_SPACING 20
int32 Logic::fnPlayCredits(int32 *params) {
+ ScreenInfo *screenInfo = _vm->_screen->getScreenInfo();
uint32 loopingMusicId = _vm->_sound->getLoopingMusicId();
// This function just quits the game if this is the playable demo, ie.
@@ -3019,16 +2931,16 @@ int32 Logic::fnPlayCredits(int32 *params) {
// Prepare for the credits by fading down, stoping the music, etc.
- _vm->setMouse(0);
+ _vm->_mouse->setMouse(0);
_vm->_sound->muteFx(true);
_vm->_sound->muteSpeech(true);
- _vm->_graphics->waitForFade();
- _vm->_graphics->fadeDown();
- _vm->_graphics->waitForFade();
+ _vm->_screen->waitForFade();
+ _vm->_screen->fadeDown();
+ _vm->_screen->waitForFade();
- _vm->_graphics->closeMenuImmediately();
+ _vm->_mouse->closeMenuImmediately();
// There are three files which I believe are involved in showing the
// credits:
@@ -3093,7 +3005,7 @@ int32 Logic::fnPlayCredits(int32 *params) {
palette[14 * 4 + 3] = 0;
}
- _vm->_graphics->setPalette(0, 256, palette, RDPAL_INSTANT);
+ _vm->_screen->setPalette(0, 256, palette, RDPAL_INSTANT);
// Read the credits text
@@ -3206,8 +3118,8 @@ int32 Logic::fnPlayCredits(int32 *params) {
pars[1] = FX_SPOT;
fnPlayMusic(pars);
- _vm->_graphics->clearScene();
- _vm->_graphics->fadeUp(0);
+ _vm->_screen->clearScene();
+ _vm->_screen->fadeUp(0);
spriteInfo.scale = 0;
spriteInfo.scaledWidth = 0;
@@ -3232,7 +3144,7 @@ int32 Logic::fnPlayCredits(int32 *params) {
while (scrollPos < scrollSteps && !_vm->_quit) {
bool foundStartLine = false;
- _vm->_graphics->clearScene();
+ _vm->_screen->clearScene();
for (i = startLine; i < lineCount; i++) {
// Free any sprites that have scrolled off the screen
@@ -3284,23 +3196,23 @@ int32 Logic::fnPlayCredits(int32 *params) {
}
if (spriteInfo.data)
- _vm->_graphics->drawSprite(&spriteInfo);
+ _vm->_screen->drawSprite(&spriteInfo);
} else
break;
}
- _vm->_graphics->updateDisplay();
+ _vm->_screen->updateDisplay();
KeyboardEvent *ke = _vm->keyboardEvent();
if (ke && ke->keycode == 27) {
if (!abortCredits) {
abortCredits = true;
- _vm->_graphics->fadeDown();
+ _vm->_screen->fadeDown();
}
}
- if (abortCredits && _vm->_graphics->getFadeStatus() == RDFADE_BLACK)
+ if (abortCredits && _vm->_screen->getFadeStatus() == RDFADE_BLACK)
break;
_vm->sleepUntil(musicStart + (musicLength * scrollPos) / scrollSteps);
@@ -3325,7 +3237,7 @@ int32 Logic::fnPlayCredits(int32 *params) {
// wait for it to really happen.
while (_vm->_sound->musicTimeRemaining() && !_vm->_quit) {
- _vm->_graphics->updateDisplay(false);
+ _vm->_screen->updateDisplay(false);
_vm->_system->delayMillis(100);
}
}
@@ -3343,13 +3255,13 @@ int32 Logic::fnPlayCredits(int32 *params) {
} else
fnStopMusic(NULL);
- _vm->_thisScreen.new_palette = 99;
+ screenInfo->new_palette = 99;
- if (!_vm->_mouseStatus || _choosing)
- _vm->setMouse(NORMAL_MOUSE_ID);
+ if (!_vm->_mouse->getMouseStatus() || _choosing)
+ _vm->_mouse->setMouse(NORMAL_MOUSE_ID);
if (_scriptVars[DEAD])
- _vm->buildSystemMenu();
+ _vm->_mouse->buildSystemMenu();
return IR_CONT;
}
@@ -3357,24 +3269,24 @@ int32 Logic::fnPlayCredits(int32 *params) {
int32 Logic::fnSetScrollSpeedNormal(int32 *params) {
// params: none
- _vm->_scrollFraction = 16;
+ _vm->_screen->setScrollFraction(16);
return IR_CONT;
}
int32 Logic::fnSetScrollSpeedSlow(int32 *params) {
// params: none
- _vm->_scrollFraction = 32;
+ _vm->_screen->setScrollFraction(32);
return IR_CONT;
}
-// called from speech scripts to remove the chooser bar when it's not
+// Called from speech scripts to remove the chooser bar when it's not
// appropriate to keep it displayed
int32 Logic::fnRemoveChooser(int32 *params) {
// params: none
- _vm->_graphics->hideMenu(RDMENU_BOTTOM);
+ _vm->_mouse->hideMenu(RDMENU_BOTTOM);
return IR_CONT;
}
@@ -3413,34 +3325,27 @@ int32 Logic::fnRestoreGame(int32 *params) {
}
int32 Logic::fnRefreshInventory(int32 *params) {
- // called from 'menu_look_or_combine' script in 'menu_master' object
+ // Called from 'menu_look_or_combine' script in 'menu_master' object
// to update the menu to display a combined object while George runs
// voice-over. Note that 'object_held' must be set to the graphic of
// the combined object
// params: none
- // can reset this now
- _scriptVars[COMBINE_BASE] = 0;
-
- // so that the icon in 'object_held' is coloured while the rest are
- // grey
- _vm->_examiningMenuIcon = true;
- _vm->buildMenu();
- _vm->_examiningMenuIcon = false;
-
+ _vm->_mouse->refreshInventory();
return IR_CONT;
}
int32 Logic::fnChangeShadows(int32 *params) {
// params: none
+ ScreenInfo *screenInfo = _vm->_screen->getScreenInfo();
// if last screen was using a shading mask (see below)
- if (_vm->_thisScreen.mask_flag) {
- uint32 rv = _vm->_graphics->closeLightMask();
+ if (screenInfo->mask_flag) {
+ uint32 rv = _vm->_screen->closeLightMask();
if (rv)
error("Driver Error %.8x", rv);
- _vm->_thisScreen.mask_flag = false;
+ screenInfo->mask_flag = false;
}
return IR_CONT;