mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-04 17:29:11 +00:00
SCI: priority band specific stuff now gets called directly w/o SciGui
svn-id: r47916
This commit is contained in:
parent
9b5363c0e4
commit
71fb77a5aa
@ -296,7 +296,7 @@ reg_t kGraph(EngineState *s, int argc, reg_t *argv) {
|
||||
case K_GRAPH_ADJUST_PRIORITY:
|
||||
// Seems to be only implemented for SCI0/SCI01 games
|
||||
debugC(2, kDebugLevelGraphics, "adjust_priority(%d, %d)", argv[1].toUint16(), argv[2].toUint16());
|
||||
s->_gui->graphAdjustPriority(argv[1].toUint16(), argv[2].toUint16());
|
||||
s->_gfxPorts->kernelGraphAdjustPriority(argv[1].toUint16(), argv[2].toUint16());
|
||||
break;
|
||||
|
||||
case K_GRAPH_SAVE_UPSCALEDHIRES_BOX:
|
||||
@ -372,17 +372,17 @@ reg_t kCoordPri(EngineState *s, int argc, reg_t *argv) {
|
||||
int16 y = argv[0].toSint16();
|
||||
|
||||
if ((argc < 2) || (y != 1)) {
|
||||
return make_reg(0, s->_gui->coordinateToPriority(y));
|
||||
return make_reg(0, s->_gfxPorts->kernelCoordinateToPriority(y));
|
||||
} else {
|
||||
int16 priority = argv[1].toSint16();
|
||||
return make_reg(0, s->_gui->priorityToCoordinate(priority));
|
||||
return make_reg(0, s->_gfxPorts->kernelPriorityToCoordinate(priority));
|
||||
}
|
||||
}
|
||||
|
||||
reg_t kPriCoord(EngineState *s, int argc, reg_t *argv) {
|
||||
int16 priority = argv[0].toSint16();
|
||||
|
||||
return make_reg(0, s->_gui->priorityToCoordinate(priority));
|
||||
return make_reg(0, s->_gfxPorts->kernelPriorityToCoordinate(priority));
|
||||
}
|
||||
|
||||
reg_t kDirLoop(EngineState *s, int argc, reg_t *argv) {
|
||||
|
@ -241,7 +241,7 @@ void GfxAnimate::fill(byte &old_picNotValid) {
|
||||
|
||||
// Calculate current priority according to y-coordinate
|
||||
if (!(signal & kSignalFixedPriority)) {
|
||||
listEntry->priority = _ports->coordinateToPriority(listEntry->y);
|
||||
listEntry->priority = _ports->kernelCoordinateToPriority(listEntry->y);
|
||||
PUT_SEL32V(_s->_segMan, curObject, priority, listEntry->priority);
|
||||
}
|
||||
|
||||
@ -315,7 +315,7 @@ void GfxAnimate::update() {
|
||||
signal &= 0xFFFF ^ (kSignalStopUpdate | kSignalViewUpdated | kSignalNoUpdate | kSignalForceUpdate);
|
||||
if ((signal & kSignalIgnoreActor) == 0) {
|
||||
rect = listEntry->celRect;
|
||||
rect.top = CLIP<int16>(_ports->priorityToCoordinate(listEntry->priority) - 1, rect.top, rect.bottom - 1);
|
||||
rect.top = CLIP<int16>(_ports->kernelPriorityToCoordinate(listEntry->priority) - 1, rect.top, rect.bottom - 1);
|
||||
_paint16->fillRect(rect, SCI_SCREEN_MASK_CONTROL, 0, 0, 15);
|
||||
}
|
||||
listEntry->signal = signal;
|
||||
@ -360,7 +360,7 @@ void GfxAnimate::update() {
|
||||
|
||||
if ((signal & kSignalIgnoreActor) == 0) {
|
||||
rect = listEntry->celRect;
|
||||
rect.top = CLIP<int16>(_ports->priorityToCoordinate(listEntry->priority) - 1, rect.top, rect.bottom - 1);
|
||||
rect.top = CLIP<int16>(_ports->kernelPriorityToCoordinate(listEntry->priority) - 1, rect.top, rect.bottom - 1);
|
||||
_paint16->fillRect(rect, SCI_SCREEN_MASK_CONTROL, 0, 0, 15);
|
||||
}
|
||||
}
|
||||
@ -556,7 +556,7 @@ void GfxAnimate::addToPicDrawCels() {
|
||||
curObject = listEntry->object;
|
||||
|
||||
if (listEntry->priority == -1)
|
||||
listEntry->priority = _ports->coordinateToPriority(listEntry->y);
|
||||
listEntry->priority = _ports->kernelCoordinateToPriority(listEntry->y);
|
||||
|
||||
// Get the corresponding view
|
||||
view = _cache->getView(listEntry->viewId);
|
||||
@ -567,7 +567,7 @@ void GfxAnimate::addToPicDrawCels() {
|
||||
// draw corresponding cel
|
||||
_paint16->drawCel(listEntry->viewId, listEntry->loopNo, listEntry->celNo, listEntry->celRect, listEntry->priority, listEntry->paletteNo);
|
||||
if ((listEntry->signal & kSignalIgnoreActor) == 0) {
|
||||
listEntry->celRect.top = CLIP<int16>(_ports->priorityToCoordinate(listEntry->priority) - 1, listEntry->celRect.top, listEntry->celRect.bottom - 1);
|
||||
listEntry->celRect.top = CLIP<int16>(_ports->kernelPriorityToCoordinate(listEntry->priority) - 1, listEntry->celRect.top, listEntry->celRect.bottom - 1);
|
||||
_paint16->fillRect(listEntry->celRect, SCI_SCREEN_MASK_CONTROL, 0, 0, 15);
|
||||
}
|
||||
|
||||
|
@ -89,22 +89,8 @@ void SciGui::resetEngineState(EngineState *s) {
|
||||
}
|
||||
|
||||
void SciGui::init(bool usesOldGfxFunctions) {
|
||||
_usesOldGfxFunctions = usesOldGfxFunctions;
|
||||
|
||||
_ports->init(this, _paint16, _text16, _s->_gameId);
|
||||
_ports->init(usesOldGfxFunctions, this, _paint16, _text16, _s->_gameId);
|
||||
_paint16->init(_animate, _text16);
|
||||
initPriorityBands();
|
||||
}
|
||||
|
||||
void SciGui::initPriorityBands() {
|
||||
if (_usesOldGfxFunctions) {
|
||||
_ports->priorityBandsInit(15, 42, 200);
|
||||
} else {
|
||||
if (getSciVersion() >= SCI_VERSION_1_1)
|
||||
_ports->priorityBandsInit(14, 0, 190);
|
||||
else
|
||||
_ports->priorityBandsInit(14, 42, 190);
|
||||
}
|
||||
}
|
||||
|
||||
void SciGui::wait(int16 ticks) {
|
||||
@ -118,14 +104,6 @@ void SciGui::wait(int16 ticks) {
|
||||
kernel_sleep(_s->_event, ticks * 1000 / 60);
|
||||
}
|
||||
|
||||
int16 SciGui::coordinateToPriority(int16 y) {
|
||||
return _ports->coordinateToPriority(y);
|
||||
}
|
||||
|
||||
int16 SciGui::priorityToCoordinate(int16 priority) {
|
||||
return _ports->priorityToCoordinate(priority);
|
||||
}
|
||||
|
||||
#define SCI_DISPLAY_MOVEPEN 100
|
||||
#define SCI_DISPLAY_SETALIGNMENT 101
|
||||
#define SCI_DISPLAY_SETPENCOLOR 102
|
||||
@ -248,14 +226,6 @@ void SciGui::textColors(int argc, reg_t *argv) {
|
||||
_text16->CodeSetColors(argc, argv);
|
||||
}
|
||||
|
||||
void SciGui::graphAdjustPriority(int top, int bottom) {
|
||||
if (_usesOldGfxFunctions) {
|
||||
_ports->priorityBandsInit(15, top, bottom);
|
||||
} else {
|
||||
_ports->priorityBandsInit(14, top, bottom);
|
||||
}
|
||||
}
|
||||
|
||||
void SciGui::shakeScreen(uint16 shakeCount, uint16 directions) {
|
||||
while (shakeCount--) {
|
||||
if (directions & SCI_SHAKE_DIRECTION_VERTICAL)
|
||||
|
@ -52,8 +52,6 @@ public:
|
||||
virtual void init(bool usesOldGfxFunctions);
|
||||
|
||||
virtual void wait(int16 ticks);
|
||||
virtual int16 coordinateToPriority(int16 y);
|
||||
virtual int16 priorityToCoordinate(int16 priority);
|
||||
|
||||
virtual void display(const char *text, int argc, reg_t *argv);
|
||||
|
||||
@ -61,8 +59,6 @@ public:
|
||||
virtual void textFonts(int argc, reg_t *argv);
|
||||
virtual void textColors(int argc, reg_t *argv);
|
||||
|
||||
virtual void graphAdjustPriority(int top, int bottom);
|
||||
|
||||
virtual void shakeScreen(uint16 shakeCount, uint16 directions);
|
||||
|
||||
virtual reg_t portraitLoad(Common::String resourceName);
|
||||
@ -86,8 +82,6 @@ protected:
|
||||
GfxPaint16 *_paint16;
|
||||
|
||||
private:
|
||||
virtual void initPriorityBands();
|
||||
|
||||
AudioPlayer *_audio;
|
||||
GfxAnimate *_animate;
|
||||
GfxControls *_controls;
|
||||
|
@ -54,9 +54,10 @@ GfxPorts::~GfxPorts() {
|
||||
delete _menuPort;
|
||||
}
|
||||
|
||||
void GfxPorts::init(SciGui *gui, GfxPaint16 *paint16, GfxText16 *text16, Common::String gameId) {
|
||||
void GfxPorts::init(bool usesOldGfxFunctions, SciGui *gui, GfxPaint16 *paint16, GfxText16 *text16, Common::String gameId) {
|
||||
int16 offTop = 10;
|
||||
|
||||
_usesOldGfxFunctions = usesOldGfxFunctions;
|
||||
_gui = gui;
|
||||
_paint16 = paint16;
|
||||
_text16 = text16;
|
||||
@ -103,6 +104,8 @@ void GfxPorts::init(SciGui *gui, GfxPaint16 *paint16, GfxText16 *text16, Common:
|
||||
_picWind = newWindow(Common::Rect(0, offTop, _screen->getWidth(), _screen->getHeight()), 0, 0, SCI_WINDOWMGR_STYLE_TRANSPARENT | SCI_WINDOWMGR_STYLE_NOFRAME, 0, true);
|
||||
|
||||
priorityBandsMemoryActive = false;
|
||||
|
||||
kernelInitPriorityBands();
|
||||
}
|
||||
|
||||
void GfxPorts::kernelSetActive(uint16 portId) {
|
||||
@ -510,7 +513,26 @@ void GfxPorts::priorityBandsRecall() {
|
||||
}
|
||||
}
|
||||
|
||||
byte GfxPorts::coordinateToPriority(int16 y) {
|
||||
void GfxPorts::kernelInitPriorityBands() {
|
||||
if (_usesOldGfxFunctions) {
|
||||
priorityBandsInit(15, 42, 200);
|
||||
} else {
|
||||
if (getSciVersion() >= SCI_VERSION_1_1)
|
||||
priorityBandsInit(14, 0, 190);
|
||||
else
|
||||
priorityBandsInit(14, 42, 190);
|
||||
}
|
||||
}
|
||||
|
||||
void GfxPorts::kernelGraphAdjustPriority(int top, int bottom) {
|
||||
if (_usesOldGfxFunctions) {
|
||||
priorityBandsInit(15, top, bottom);
|
||||
} else {
|
||||
priorityBandsInit(14, top, bottom);
|
||||
}
|
||||
}
|
||||
|
||||
byte GfxPorts::kernelCoordinateToPriority(int16 y) {
|
||||
if (y < _priorityTop)
|
||||
return _priorityBands[_priorityTop];
|
||||
if (y > _priorityBottom)
|
||||
@ -518,7 +540,7 @@ byte GfxPorts::coordinateToPriority(int16 y) {
|
||||
return _priorityBands[y];
|
||||
}
|
||||
|
||||
int16 GfxPorts::priorityToCoordinate(byte priority) {
|
||||
int16 GfxPorts::kernelPriorityToCoordinate(byte priority) {
|
||||
int16 y;
|
||||
if (priority <= _priorityBandCount) {
|
||||
for (y = 0; y <= _priorityBottom; y++)
|
||||
|
@ -45,7 +45,7 @@ public:
|
||||
GfxPorts(SegManager *segMan, GfxScreen *screen);
|
||||
~GfxPorts();
|
||||
|
||||
void init(SciGui *gui, GfxPaint16 *paint16, GfxText16 *text16, Common::String gameId);
|
||||
void init(bool usesOldGfxFunctions, SciGui *gui, GfxPaint16 *paint16, GfxText16 *text16, Common::String gameId);
|
||||
|
||||
void kernelSetActive(uint16 portId);
|
||||
Common::Rect kernelGetPicWindow(int16 &picTop, int16 &picLeft);
|
||||
@ -83,8 +83,11 @@ public:
|
||||
void priorityBandsInit(byte *data);
|
||||
void priorityBandsRemember(byte *data);
|
||||
void priorityBandsRecall();
|
||||
byte coordinateToPriority(int16 y);
|
||||
int16 priorityToCoordinate(byte priority);
|
||||
|
||||
void kernelInitPriorityBands();
|
||||
void kernelGraphAdjustPriority(int top, int bottom);
|
||||
byte kernelCoordinateToPriority(int16 y);
|
||||
int16 kernelPriorityToCoordinate(byte priority);
|
||||
|
||||
Port *_wmgrPort;
|
||||
Window *_picWind;
|
||||
@ -104,6 +107,8 @@ private:
|
||||
GfxScreen *_screen;
|
||||
GfxText16 *_text16;
|
||||
|
||||
bool _usesOldGfxFunctions;
|
||||
|
||||
/** The list of open 'windows' (and ports), in visual order. */
|
||||
PortList _windowList;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user