2010-02-02 16:25:35 +00:00
|
|
|
/* ScummVM - Graphic Adventure Engine
|
|
|
|
*
|
|
|
|
* ScummVM is the legal property of its developers, whose names
|
|
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
|
|
* file distributed with this source distribution.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
2014-02-18 02:34:24 +01:00
|
|
|
*
|
2010-02-02 16:25:35 +00:00
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
2014-02-18 02:34:24 +01:00
|
|
|
*
|
2010-02-02 16:25:35 +00:00
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef SCI_GRAPHICS_FRAMEOUT_H
|
|
|
|
#define SCI_GRAPHICS_FRAMEOUT_H
|
|
|
|
|
2017-05-05 23:05:12 -05:00
|
|
|
#include "engines/util.h" // for initGraphics
|
2017-07-03 15:26:24 -05:00
|
|
|
#include "sci/event.h"
|
2016-01-18 00:12:47 -06:00
|
|
|
#include "sci/graphics/plane32.h"
|
|
|
|
#include "sci/graphics/screen_item32.h"
|
2010-02-02 16:25:35 +00:00
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
namespace Sci {
|
|
|
|
typedef Common::Array<DrawList> ScreenItemListList;
|
|
|
|
typedef Common::Array<RectList> EraseListList;
|
|
|
|
|
2016-07-31 13:41:05 -05:00
|
|
|
class GfxCursor32;
|
2016-07-25 11:06:27 -05:00
|
|
|
class GfxTransitions32;
|
2016-08-01 23:56:32 +03:00
|
|
|
struct PlaneShowStyle;
|
2013-01-13 17:28:09 +02:00
|
|
|
|
2010-02-05 15:48:45 +00:00
|
|
|
/**
|
2016-01-14 10:58:37 -06:00
|
|
|
* Frameout class, kFrameout and relevant functions for SCI32 games.
|
|
|
|
* Roughly equivalent to GraphicsMgr in the actual SCI engine.
|
2010-02-05 15:48:45 +00:00
|
|
|
*/
|
2010-02-02 16:25:35 +00:00
|
|
|
class GfxFrameout {
|
SCI32: Fix slow SCI2.1mid transitions
SSCI transitions code sends a large number of small show rects
to the graphics manager, one at a time, for each division of a
transition. Each time a rect is submitted, a call to showBits
is made. This design was used when transitions for SCI32 were
first implemented in ScummVM, and it worked OK because the
hardware surface was updated by EventManager::getSciEvent,
not showBits, so the large number of calls to showBits from the
transitions code did not adversely affect engine performance.
Later in SCI32 engine development, hardware surface updates
were changed to occur in showBits so that the hardware surface
would be updated at frame-out time, instead of at input-in time.
This change meant that now the large number of calls to showBits
from transitions became very expensive, and the engine would
stall constantly refreshing the entire hardware surface.
To fix this problem, the transitions code now (1) maximises the
size of rects coming from transitions, when possible, and (2) only
calls showBits when all the rects from one frame of a transition
have been calculated and added to the show rects list.
Additionally, there were some arithmetic errors in the
implementation of pixel dissolve that have been corrected in this
changeset.
Fixes Trac#9614.
2016-10-22 12:41:39 -05:00
|
|
|
friend class GfxTransitions32;
|
2016-01-18 00:12:47 -06:00
|
|
|
private:
|
2016-07-31 13:41:05 -05:00
|
|
|
GfxCursor32 *_cursor;
|
2016-01-18 00:12:47 -06:00
|
|
|
GfxPalette32 *_palette;
|
|
|
|
SegManager *_segMan;
|
|
|
|
|
2016-09-09 16:17:41 -05:00
|
|
|
/**
|
|
|
|
* Determines whether the current game should be rendered in
|
|
|
|
* high resolution.
|
|
|
|
*/
|
|
|
|
bool gameIsHiRes() const;
|
|
|
|
|
2010-02-02 16:25:35 +00:00
|
|
|
public:
|
2016-08-19 11:53:04 -05:00
|
|
|
GfxFrameout(SegManager *segMan, GfxPalette32 *palette, GfxTransitions32 *transitions, GfxCursor32 *cursor);
|
2010-02-02 16:25:35 +00:00
|
|
|
~GfxFrameout();
|
|
|
|
|
2016-07-28 14:49:13 -05:00
|
|
|
bool _isHiRes;
|
|
|
|
|
2011-02-14 22:38:12 -05:00
|
|
|
void clear();
|
2016-01-18 00:12:47 -06:00
|
|
|
void run();
|
2012-06-07 11:26:32 +03:00
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
#pragma mark -
|
|
|
|
#pragma mark Screen items
|
|
|
|
private:
|
2016-03-15 21:05:01 +02:00
|
|
|
void remapMarkRedraw();
|
2017-07-09 17:25:17 +02:00
|
|
|
bool getNowSeenRect(const reg_t screenItemObject, Common::Rect &result) const;
|
2012-06-07 11:26:32 +03:00
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
public:
|
2016-07-02 19:11:46 -05:00
|
|
|
/**
|
|
|
|
* Adds a screen item.
|
|
|
|
*/
|
|
|
|
void addScreenItem(ScreenItem &screenItem) const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Updates a screen item.
|
|
|
|
*/
|
|
|
|
void updateScreenItem(ScreenItem &screenItem) const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Deletes a screen item.
|
|
|
|
*/
|
|
|
|
void deleteScreenItem(ScreenItem &screenItem);
|
|
|
|
|
2016-06-18 20:48:10 -05:00
|
|
|
/**
|
|
|
|
* Deletes a screen item from the given plane.
|
|
|
|
*/
|
2016-07-02 19:11:46 -05:00
|
|
|
void deleteScreenItem(ScreenItem &screenItem, Plane &plane);
|
2016-06-18 20:48:10 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Deletes a screen item from the given plane.
|
|
|
|
*/
|
2016-07-02 19:11:46 -05:00
|
|
|
void deleteScreenItem(ScreenItem &screenItem, const reg_t plane);
|
2016-06-18 20:48:10 -05:00
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
void kernelAddScreenItem(const reg_t object);
|
|
|
|
void kernelUpdateScreenItem(const reg_t object);
|
|
|
|
void kernelDeleteScreenItem(const reg_t object);
|
2016-07-31 15:19:48 -05:00
|
|
|
bool kernelSetNowSeen(const reg_t screenItemObject) const;
|
2017-07-09 17:25:17 +02:00
|
|
|
int16 kernelObjectIntersect(const reg_t object1, const reg_t object2) const;
|
2010-07-26 14:41:19 +00:00
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
#pragma mark -
|
|
|
|
#pragma mark Planes
|
2010-02-02 16:25:35 +00:00
|
|
|
private:
|
2016-01-18 00:12:47 -06:00
|
|
|
/**
|
|
|
|
* The list of planes (i.e. layers) that have been added
|
|
|
|
* to the screen.
|
|
|
|
*
|
|
|
|
* @note This field is on `GraphicsMgr.screen` in SCI
|
|
|
|
* engine.
|
|
|
|
*/
|
|
|
|
PlaneList _planes;
|
2016-01-20 20:06:45 -06:00
|
|
|
|
2016-03-05 23:56:38 -06:00
|
|
|
/**
|
|
|
|
* Updates an existing plane with properties from the
|
|
|
|
* given VM object.
|
|
|
|
*/
|
|
|
|
void updatePlane(Plane &plane);
|
|
|
|
|
|
|
|
public:
|
2016-01-18 00:12:47 -06:00
|
|
|
/**
|
|
|
|
* Creates and adds a new plane to the plane list, or
|
|
|
|
* cancels deletion and updates an already-existing
|
|
|
|
* plane if a plane matching the given plane VM object
|
|
|
|
* already exists within the current plane list.
|
|
|
|
*
|
|
|
|
* @note This method is on Screen in SCI engine, but it
|
|
|
|
* is only ever called on `GraphicsMgr.screen`.
|
|
|
|
*/
|
|
|
|
void addPlane(Plane &plane);
|
2011-11-17 22:08:36 +02:00
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
/**
|
2016-03-05 23:56:38 -06:00
|
|
|
* Deletes a plane within the current plane list.
|
|
|
|
*
|
|
|
|
* @note This method is on Screen in SCI engine, but it
|
|
|
|
* is only ever called on `GraphicsMgr.screen`.
|
2016-01-18 00:12:47 -06:00
|
|
|
*/
|
2016-03-05 23:56:38 -06:00
|
|
|
void deletePlane(Plane &plane);
|
2010-02-02 16:25:35 +00:00
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
const PlaneList &getPlanes() const {
|
|
|
|
return _planes;
|
|
|
|
}
|
2016-03-05 23:56:38 -06:00
|
|
|
const PlaneList &getVisiblePlanes() const {
|
|
|
|
return _visiblePlanes;
|
|
|
|
}
|
2016-01-18 00:12:47 -06:00
|
|
|
void kernelAddPlane(const reg_t object);
|
|
|
|
void kernelUpdatePlane(const reg_t object);
|
|
|
|
void kernelDeletePlane(const reg_t object);
|
2016-03-10 15:48:48 -06:00
|
|
|
void kernelMovePlaneItems(const reg_t object, const int16 deltaX, const int16 deltaY, const bool scrollPics);
|
2016-01-18 00:12:47 -06:00
|
|
|
int16 kernelGetHighPlanePri();
|
|
|
|
|
|
|
|
#pragma mark -
|
|
|
|
#pragma mark Pics
|
|
|
|
public:
|
2016-07-25 13:40:51 -05:00
|
|
|
void kernelAddPicAt(const reg_t planeObject, const GuiResourceId pictureId, const int16 pictureX, const int16 pictureY, const bool mirrorX, const bool deleteDuplicate);
|
2016-01-18 00:12:47 -06:00
|
|
|
|
|
|
|
#pragma mark -
|
|
|
|
#pragma mark Rendering
|
|
|
|
private:
|
2017-05-22 18:40:52 -05:00
|
|
|
/**
|
|
|
|
* The last time the hardware screen was updated.
|
|
|
|
*/
|
|
|
|
uint32 _lastScreenUpdateTick;
|
|
|
|
|
2016-07-25 11:06:27 -05:00
|
|
|
GfxTransitions32 *_transitions;
|
|
|
|
|
2016-07-01 19:47:15 -05:00
|
|
|
/**
|
|
|
|
* State tracker to provide more accurate 60fps
|
|
|
|
* video throttling.
|
|
|
|
*/
|
|
|
|
uint8 _throttleState;
|
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
/**
|
|
|
|
* The internal display pixel buffer. During frameOut,
|
|
|
|
* this buffer is drawn into according to the draw and
|
|
|
|
* erase rects calculated by `calcLists`, then drawn out
|
|
|
|
* to the hardware surface according to the `_showList`
|
|
|
|
* rects (which are also calculated by `calcLists`).
|
|
|
|
*/
|
|
|
|
Buffer _currentBuffer;
|
|
|
|
|
|
|
|
/**
|
2016-07-01 19:47:34 -05:00
|
|
|
* When true, a change to the remap zone in the palette
|
|
|
|
* has occurred and screen items with remap data need to
|
|
|
|
* be redrawn.
|
2016-01-18 00:12:47 -06:00
|
|
|
*/
|
|
|
|
bool _remapOccurred;
|
2010-06-20 17:17:46 +00:00
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
/**
|
|
|
|
* TODO: Document
|
|
|
|
* TODO: Depending upon if the engine ever modifies this
|
|
|
|
* rect, it may be stupid to store it separately instead
|
|
|
|
* of just getting width/height from GfxScreen.
|
|
|
|
*
|
|
|
|
* @note This field is on `GraphicsMgr.screen` in SCI
|
|
|
|
* engine.
|
|
|
|
*/
|
|
|
|
Common::Rect _screenRect;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A list of rectangles, in display coordinates, that
|
|
|
|
* represent portions of the internal screen buffer that
|
|
|
|
* should be drawn to the hardware display surface.
|
|
|
|
*
|
|
|
|
* @note This field is on `GraphicsMgr.screen` in SCI
|
|
|
|
* engine.
|
|
|
|
*/
|
|
|
|
RectList _showList;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The amount of extra overdraw that is acceptable when
|
|
|
|
* merging two show list rectangles together into a
|
|
|
|
* single larger rectangle.
|
|
|
|
*
|
|
|
|
* @note This field is on `GraphicsMgr.screen` in SCI
|
|
|
|
* engine.
|
|
|
|
*/
|
|
|
|
int _overdrawThreshold;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A list of planes that are currently drawn to the
|
|
|
|
* hardware display surface. Used to calculate
|
|
|
|
* differences in plane properties between the last
|
|
|
|
* frame and current frame.
|
|
|
|
*
|
|
|
|
* @note This field is on `GraphicsMgr.visibleScreen` in
|
|
|
|
* SCI engine.
|
|
|
|
*/
|
|
|
|
PlaneList _visiblePlanes;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Calculates the location and dimensions of dirty rects
|
|
|
|
* over the entire screen for rendering the next frame.
|
|
|
|
* The draw and erase lists in `drawLists` and
|
|
|
|
* `eraseLists` each represent one plane on the screen.
|
2016-06-30 13:24:46 -05:00
|
|
|
* The optional `eraseRect` argument allows a specific
|
|
|
|
* area of the screen to be erased.
|
2016-01-18 00:12:47 -06:00
|
|
|
*/
|
2016-06-30 13:24:46 -05:00
|
|
|
void calcLists(ScreenItemListList &drawLists, EraseListList &eraseLists, const Common::Rect &eraseRect = Common::Rect());
|
2016-01-18 00:12:47 -06:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Erases the areas in the given erase list from the
|
|
|
|
* visible screen buffer by filling them with the color
|
|
|
|
* from the corresponding plane. This is an optimisation
|
2016-02-19 02:50:16 +02:00
|
|
|
* for colored-type planes only; other plane types have
|
2016-01-18 00:12:47 -06:00
|
|
|
* to be redrawn from pixel data.
|
|
|
|
*/
|
|
|
|
void drawEraseList(const RectList &eraseList, const Plane &plane);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Draws all screen items from the given draw list to
|
|
|
|
* the visible screen buffer.
|
|
|
|
*/
|
|
|
|
void drawScreenItemList(const DrawList &screenItemList);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a new rectangle to the list of regions to write
|
|
|
|
* out to the hardware. The provided rect may be merged
|
|
|
|
* into an existing rectangle to reduce the number of
|
|
|
|
* blit operations.
|
|
|
|
*/
|
|
|
|
void mergeToShowList(const Common::Rect &drawRect, RectList &showList, const int overdrawThreshold);
|
|
|
|
|
|
|
|
/**
|
2017-05-22 18:40:52 -05:00
|
|
|
* Sends all dirty rects from the internal frame buffer to the backend,
|
|
|
|
* then updates the hardware screen.
|
2016-01-18 00:12:47 -06:00
|
|
|
*/
|
|
|
|
void showBits();
|
|
|
|
|
2016-07-25 11:06:27 -05:00
|
|
|
/**
|
|
|
|
* Validates whether the given palette index in the
|
|
|
|
* style range should copy a color from the next
|
|
|
|
* palette to the source palette during a palette
|
|
|
|
* morph operation.
|
|
|
|
*/
|
|
|
|
inline bool validZeroStyle(const uint8 style, const int i) const {
|
|
|
|
if (style != 0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: Cannot check Shivers or MGDX until those executables can be
|
|
|
|
// unwrapped
|
|
|
|
switch (g_sci->getGameId()) {
|
|
|
|
case GID_KQ7:
|
|
|
|
case GID_PHANTASMAGORIA:
|
|
|
|
case GID_SQ6:
|
|
|
|
return (i > 71 && i < 104);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
public:
|
2017-05-22 18:40:52 -05:00
|
|
|
/**
|
|
|
|
* Updates the hardware screen, no more than once per tick.
|
|
|
|
*
|
|
|
|
* @param delta An additional number of ticks that should elapse
|
|
|
|
* since the last time the screen was updated before it gets updated now.
|
|
|
|
* This is used for updating the screen within run_vm, where we normally
|
|
|
|
* expect that a call to kFrameOut will occur later during the current
|
|
|
|
* frame, but if it does not, then update the screen on the second frame
|
|
|
|
* anyway since the game is doing something bad.
|
|
|
|
*/
|
|
|
|
void updateScreen(const int delta = 0);
|
|
|
|
|
2017-07-22 23:27:24 -05:00
|
|
|
/**
|
|
|
|
* Resets the pixel format of the hardware surface to the given format.
|
|
|
|
*/
|
2017-05-05 23:05:12 -05:00
|
|
|
void setPixelFormat(const Graphics::PixelFormat &format) const {
|
|
|
|
initGraphics(_currentBuffer.screenWidth, _currentBuffer.screenHeight, _isHiRes, &format);
|
|
|
|
}
|
|
|
|
|
2017-07-22 23:26:39 -05:00
|
|
|
/**
|
|
|
|
* Whether or not to throttle kFrameOut calls.
|
|
|
|
*/
|
|
|
|
bool _throttleKernelFrameOut;
|
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
/**
|
|
|
|
* Whether palMorphFrameOut should be used instead of
|
|
|
|
* frameOut for rendering. Used by kMorphOn to
|
|
|
|
* explicitly enable palMorphFrameOut for one frame.
|
|
|
|
*/
|
|
|
|
bool _palMorphIsOn;
|
|
|
|
|
2016-07-01 19:46:39 -05:00
|
|
|
inline const Buffer &getCurrentBuffer() const {
|
2016-01-18 00:12:47 -06:00
|
|
|
return _currentBuffer;
|
|
|
|
}
|
|
|
|
|
2016-03-02 14:02:15 -06:00
|
|
|
void kernelFrameOut(const bool showBits);
|
2016-01-18 00:12:47 -06:00
|
|
|
|
2016-07-02 19:11:59 -05:00
|
|
|
/**
|
|
|
|
* Throttles the engine as necessary to maintain
|
|
|
|
* 60fps output.
|
|
|
|
*/
|
|
|
|
void throttle();
|
|
|
|
|
2016-03-05 23:56:38 -06:00
|
|
|
/**
|
|
|
|
* Updates the internal screen buffer for the next
|
|
|
|
* frame. If `shouldShowBits` is true, also sends the
|
2016-06-30 13:24:46 -05:00
|
|
|
* buffer to hardware. If `eraseRect` is non-empty,
|
|
|
|
* it is added to the erase list for this frame.
|
2016-03-05 23:56:38 -06:00
|
|
|
*/
|
2016-06-30 13:24:46 -05:00
|
|
|
void frameOut(const bool shouldShowBits, const Common::Rect &eraseRect = Common::Rect());
|
2016-03-05 23:56:38 -06:00
|
|
|
|
2016-07-25 11:06:27 -05:00
|
|
|
/**
|
|
|
|
* TODO: Documentation
|
|
|
|
*/
|
|
|
|
void palMorphFrameOut(const int8 *styleRanges, PlaneShowStyle *showStyle);
|
|
|
|
|
2017-07-03 20:12:39 -05:00
|
|
|
/**
|
|
|
|
* Draws the given rect from the internal screen buffer to hardware without
|
|
|
|
* processing any other graphics updates except for cursor changes.
|
|
|
|
*/
|
|
|
|
void directFrameOut(const Common::Rect &showRect);
|
|
|
|
|
|
|
|
#ifdef USE_RGB_COLOR
|
|
|
|
/**
|
|
|
|
* Sends the entire internal screen buffer and palette to hardware.
|
|
|
|
*/
|
|
|
|
void resetHardware();
|
|
|
|
#endif
|
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
/**
|
|
|
|
* Modifies the raw pixel data for the next frame with
|
|
|
|
* new palette indexes based on matched style ranges.
|
|
|
|
*/
|
|
|
|
void alterVmap(const Palette &palette1, const Palette &palette2, const int8 style, const int8 *const styleRanges);
|
|
|
|
|
|
|
|
// NOTE: This function is used within ScreenItem subsystem and assigned
|
|
|
|
// to various booleanish fields that seem to represent the state of the
|
|
|
|
// screen item (created, updated, deleted). In GK1/DOS, Phant1/m68k,
|
|
|
|
// SQ6/DOS, SQ6/Win, and Phant2/Win, this function simply returns 1. If
|
|
|
|
// you know of any game/environment where this function returns some
|
|
|
|
// value other than 1, or if you used to work at Sierra and can explain
|
|
|
|
// why this is a thing (and if anyone needs to care about it), please
|
|
|
|
// open a ticket!!
|
|
|
|
inline int getScreenCount() const {
|
|
|
|
return 1;
|
|
|
|
};
|
|
|
|
|
2016-08-02 09:49:04 -05:00
|
|
|
/**
|
|
|
|
* Shakes the screen.
|
|
|
|
*/
|
|
|
|
void shakeScreen(const int16 numShakes, const ShakeDirection direction);
|
|
|
|
|
2016-03-08 10:27:15 -06:00
|
|
|
#pragma mark -
|
|
|
|
#pragma mark Mouse cursor
|
|
|
|
private:
|
2017-07-03 15:26:24 -05:00
|
|
|
void updateMousePositionForRendering() const {
|
|
|
|
// In SSCI, mouse events were received via hardware interrupt, so the
|
|
|
|
// mouse cursor would always get updated immediately when the user moved
|
|
|
|
// the mouse. ScummVM must poll for mouse events from the backend
|
|
|
|
// instead, so we poll just before rendering so that the latest mouse
|
|
|
|
// position is rendered instead of whatever position it was at the last
|
|
|
|
// time kGetEvent was called. Without this, the mouse appears stuck
|
|
|
|
// during loops that do not make calls to kGetEvent, like transitions.
|
|
|
|
g_sci->getEventManager()->getSciEvent(SCI_EVENT_PEEK);
|
|
|
|
}
|
|
|
|
|
2016-03-08 10:27:15 -06:00
|
|
|
/**
|
|
|
|
* Determines whether or not the point given by
|
|
|
|
* `position` is inside of the given screen item.
|
|
|
|
*/
|
|
|
|
bool isOnMe(const ScreenItem &screenItem, const Plane &plane, const Common::Point &position, const bool checkPixel) const;
|
|
|
|
|
|
|
|
public:
|
|
|
|
reg_t kernelIsOnMe(const reg_t object, const Common::Point &position, const bool checkPixel) const;
|
2016-02-20 05:38:22 +01:00
|
|
|
|
2016-01-18 00:12:47 -06:00
|
|
|
#pragma mark -
|
|
|
|
#pragma mark Debugging
|
|
|
|
public:
|
|
|
|
void printPlaneList(Console *con) const;
|
|
|
|
void printVisiblePlaneList(Console *con) const;
|
|
|
|
void printPlaneListInternal(Console *con, const PlaneList &planeList) const;
|
|
|
|
void printPlaneItemList(Console *con, const reg_t planeObject) const;
|
2016-03-07 16:41:57 -06:00
|
|
|
void printVisiblePlaneItemList(Console *con, const reg_t planeObject) const;
|
|
|
|
void printPlaneItemListInternal(Console *con, const ScreenItemList &screenItemList) const;
|
2010-02-02 16:25:35 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
} // End of namespace Sci
|
|
|
|
|
|
|
|
#endif
|