removed some debug output I left in accidentally in my last checkin; removed some uses of g_scumm (see Endy, I promised I'd do it <g>); removed getSideOfLine(); some clean up
svn-id: r4378
This commit is contained in:
parent
de99ad11b6
commit
0620c9d66a
8 changed files with 142 additions and 146 deletions
171
actor.cpp
171
actor.cpp
|
@ -23,6 +23,7 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "scumm.h"
|
#include "scumm.h"
|
||||||
#include "actor.h"
|
#include "actor.h"
|
||||||
|
#include "akos.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
@ -76,16 +77,16 @@ void Actor::initActor(int mode)
|
||||||
walk_script = 0;
|
walk_script = 0;
|
||||||
talk_script = 0;
|
talk_script = 0;
|
||||||
|
|
||||||
if (_scumm->_features & GF_AFTER_V7) {
|
if (_vm->_features & GF_AFTER_V7) {
|
||||||
_scumm->_classData[number] = _scumm->_classData[0];
|
_vm->_classData[number] = _vm->_classData[0];
|
||||||
} else {
|
} else {
|
||||||
_scumm->_classData[number] = 0;
|
_vm->_classData[number] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Actor::stopActorMoving()
|
void Actor::stopActorMoving()
|
||||||
{
|
{
|
||||||
_scumm->stopScriptNr(walk_script);
|
_vm->stopScriptNr(walk_script);
|
||||||
moving = 0;
|
moving = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,7 +169,7 @@ int Actor::calcMovementFactor(int newX, int newY)
|
||||||
walkdata.xfrac = 0;
|
walkdata.xfrac = 0;
|
||||||
walkdata.yfrac = 0;
|
walkdata.yfrac = 0;
|
||||||
|
|
||||||
newDirection = _scumm->getAngleFromPos(XYFactor, YXFactor);
|
newDirection = _vm->getAngleFromPos(XYFactor, YXFactor);
|
||||||
|
|
||||||
return actorWalkStep();
|
return actorWalkStep();
|
||||||
}
|
}
|
||||||
|
@ -181,7 +182,7 @@ int Actor::remapDirection(int dir)
|
||||||
bool flipY;
|
bool flipY;
|
||||||
|
|
||||||
if (!ignoreBoxes) {
|
if (!ignoreBoxes) {
|
||||||
specdir = _scumm->_extraBoxFlags[walkbox];
|
specdir = _vm->_extraBoxFlags[walkbox];
|
||||||
if (specdir) {
|
if (specdir) {
|
||||||
if (specdir & 0x8000) {
|
if (specdir & 0x8000) {
|
||||||
dir = specdir & 0x3FFF;
|
dir = specdir & 0x3FFF;
|
||||||
|
@ -190,19 +191,19 @@ int Actor::remapDirection(int dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
flags = _scumm->getBoxFlags(walkbox);
|
flags = _vm->getBoxFlags(walkbox);
|
||||||
|
|
||||||
flipX = (walkdata.XYFactor > 0);
|
flipX = (walkdata.XYFactor > 0);
|
||||||
flipY = (walkdata.YXFactor > 0);
|
flipY = (walkdata.YXFactor > 0);
|
||||||
|
|
||||||
// Check for X-Flip
|
// Check for X-Flip
|
||||||
if ((flags & 0x08) || _scumm->getClass(number, 0x1E)) {
|
if ((flags & 0x08) || _vm->getClass(number, 0x1E)) {
|
||||||
dir = 360 - dir;
|
dir = 360 - dir;
|
||||||
flipX = !flipX;
|
flipX = !flipX;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for Y-Flip
|
// Check for Y-Flip
|
||||||
if ((flags & 0x10) || _scumm->getClass(number, 0x1D)) {
|
if ((flags & 0x10) || _vm->getClass(number, 0x1D)) {
|
||||||
dir = 180 - dir;
|
dir = 180 - dir;
|
||||||
flipY = !flipY;
|
flipY = !flipY;
|
||||||
}
|
}
|
||||||
|
@ -241,7 +242,7 @@ int Actor::updateActorDirection()
|
||||||
int num;
|
int num;
|
||||||
bool shouldInterpolate;
|
bool shouldInterpolate;
|
||||||
|
|
||||||
dirType = _scumm->akos_hasManyDirections(this);
|
dirType = _vm->akos_hasManyDirections(this);
|
||||||
|
|
||||||
from = Scumm::toSimpleDir(dirType, facing);
|
from = Scumm::toSimpleDir(dirType, facing);
|
||||||
dir = remapDirection(newDirection);
|
dir = remapDirection(newDirection);
|
||||||
|
@ -272,7 +273,7 @@ int Actor::updateActorDirection()
|
||||||
void Actor::setActorBox(int box)
|
void Actor::setActorBox(int box)
|
||||||
{
|
{
|
||||||
walkbox = box;
|
walkbox = box;
|
||||||
mask = _scumm->getMaskFromBox(box);
|
mask = _vm->getMaskFromBox(box);
|
||||||
|
|
||||||
setupActorScale();
|
setupActorScale();
|
||||||
}
|
}
|
||||||
|
@ -300,7 +301,7 @@ int Actor::actorWalkStep()
|
||||||
actorY = y;
|
actorY = y;
|
||||||
|
|
||||||
if (walkbox != walkdata.curbox &&
|
if (walkbox != walkdata.curbox &&
|
||||||
_scumm->checkXYInBoxBounds(walkdata.curbox, actorX, actorY)) {
|
_vm->checkXYInBoxBounds(walkdata.curbox, actorX, actorY)) {
|
||||||
setActorBox(walkdata.curbox);
|
setActorBox(walkdata.curbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,10 +345,10 @@ void Actor::setupActorScale()
|
||||||
|
|
||||||
// FIXME: Special 'no scaling' class for MI1 VGA Floppy
|
// FIXME: Special 'no scaling' class for MI1 VGA Floppy
|
||||||
// Not totally sure if this is correct.
|
// Not totally sure if this is correct.
|
||||||
if(_scumm->_gameId == GID_MONKEY_VGA && _scumm->getClass(number, 0x96))
|
if(_vm->_gameId == GID_MONKEY_VGA && _vm->getClass(number, 0x96))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_scumm->_features & GF_NO_SCALLING) {
|
if (_vm->_features & GF_NO_SCALLING) {
|
||||||
scalex = 0xFF;
|
scalex = 0xFF;
|
||||||
scaley = 0xFF;
|
scaley = 0xFF;
|
||||||
return;
|
return;
|
||||||
|
@ -356,14 +357,14 @@ void Actor::setupActorScale()
|
||||||
if (ignoreBoxes != 0)
|
if (ignoreBoxes != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(_scumm->getBoxFlags(walkbox) & 0x20)
|
if(_vm->getBoxFlags(walkbox) & 0x20)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
scale = _scumm->getBoxScale(walkbox);
|
scale = _vm->getBoxScale(walkbox);
|
||||||
|
|
||||||
if (scale & 0x8000) {
|
if (scale & 0x8000) {
|
||||||
scale = (scale & 0x7FFF) + 1;
|
scale = (scale & 0x7FFF) + 1;
|
||||||
resptr = _scumm->getResourceAddress(rtScaleTable, scale);
|
resptr = _vm->getResourceAddress(rtScaleTable, scale);
|
||||||
if (resptr == NULL)
|
if (resptr == NULL)
|
||||||
error("Scale table %d not defined", scale);
|
error("Scale table %d not defined", scale);
|
||||||
int theY = y;
|
int theY = y;
|
||||||
|
@ -378,7 +379,7 @@ void Actor::setupActorScale()
|
||||||
warning("Actor %d at %d, scale %d out of range", number, y, scale);
|
warning("Actor %d at %d, scale %d out of range", number, y, scale);
|
||||||
|
|
||||||
// FIXME - Quick fix to ft's fuel tower bug (by yazoo)
|
// FIXME - Quick fix to ft's fuel tower bug (by yazoo)
|
||||||
if(scale == 1 && _scumm->_currentRoom == 76)
|
if(scale == 1 && _vm->_currentRoom == 76)
|
||||||
scale = 0xFF;
|
scale = 0xFF;
|
||||||
|
|
||||||
scalex = (byte)scale;
|
scalex = (byte)scale;
|
||||||
|
@ -387,7 +388,7 @@ void Actor::setupActorScale()
|
||||||
|
|
||||||
void Actor::startAnimActor(int frame)
|
void Actor::startAnimActor(int frame)
|
||||||
{
|
{
|
||||||
if (_scumm->_features & GF_NEW_COSTUMES) {
|
if (_vm->_features & GF_NEW_COSTUMES) {
|
||||||
switch (frame) {
|
switch (frame) {
|
||||||
case 1001:
|
case 1001:
|
||||||
frame = initFrame;
|
frame = initFrame;
|
||||||
|
@ -412,7 +413,7 @@ void Actor::startAnimActor(int frame)
|
||||||
needBgReset = true;
|
needBgReset = true;
|
||||||
if (frame == initFrame)
|
if (frame == initFrame)
|
||||||
cost.reset();
|
cost.reset();
|
||||||
_scumm->akos_decodeData(this, frame, (uint) - 1);
|
_vm->akos_decodeData(this, frame, (uint) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -443,7 +444,7 @@ void Actor::startAnimActor(int frame)
|
||||||
cost.reset();
|
cost.reset();
|
||||||
|
|
||||||
if (frame != 0x3E) {
|
if (frame != 0x3E) {
|
||||||
_scumm->cost_decodeData(this, frame, (uint) - 1);
|
_vm->cost_decodeData(this, frame, (uint) - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,10 +471,10 @@ void Actor::setActorDirection(int direction)
|
||||||
vald = cost.frame[i];
|
vald = cost.frame[i];
|
||||||
if (vald == 0xFFFF)
|
if (vald == 0xFFFF)
|
||||||
continue;
|
continue;
|
||||||
if (_scumm->_features & GF_AFTER_V7)
|
if (_vm->_features & GF_AFTER_V7)
|
||||||
_scumm->akos_decodeData(this, vald, aMask);
|
_vm->akos_decodeData(this, vald, aMask);
|
||||||
else
|
else
|
||||||
_scumm->cost_decodeData(this, vald, aMask);
|
_vm->cost_decodeData(this, vald, aMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
needRedraw = true;
|
needRedraw = true;
|
||||||
|
@ -611,7 +612,7 @@ void Actor::adjustActorPos()
|
||||||
AdjustBoxResult abr;
|
AdjustBoxResult abr;
|
||||||
byte flags;
|
byte flags;
|
||||||
|
|
||||||
abr = _scumm->adjustXYToBeInBox(this, x, y, 0);
|
abr = _vm->adjustXYToBeInBox(this, x, y, 0);
|
||||||
|
|
||||||
x = abr.x;
|
x = abr.x;
|
||||||
y = abr.y;
|
y = abr.y;
|
||||||
|
@ -624,11 +625,11 @@ void Actor::adjustActorPos()
|
||||||
moving = 0;
|
moving = 0;
|
||||||
cost.animCounter2 = 0;
|
cost.animCounter2 = 0;
|
||||||
|
|
||||||
if (_scumm->_features & GF_AFTER_V7) {
|
if (_vm->_features & GF_AFTER_V7) {
|
||||||
stopActorMoving();
|
stopActorMoving();
|
||||||
}
|
}
|
||||||
|
|
||||||
flags = _scumm->getBoxFlags(walkbox);
|
flags = _vm->getBoxFlags(walkbox);
|
||||||
if (flags & 7) {
|
if (flags & 7) {
|
||||||
turnToDirection(facing);
|
turnToDirection(facing);
|
||||||
}
|
}
|
||||||
|
@ -664,12 +665,12 @@ void Actor::hideActor()
|
||||||
|
|
||||||
void Actor::showActor()
|
void Actor::showActor()
|
||||||
{
|
{
|
||||||
if (_scumm->_currentRoom == 0 || visible)
|
if (_vm->_currentRoom == 0 || visible)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
adjustActorPos();
|
adjustActorPos();
|
||||||
|
|
||||||
_scumm->ensureResourceLoaded(rtCostume, costume);
|
_vm->ensureResourceLoaded(rtCostume, costume);
|
||||||
|
|
||||||
if (costumeNeedsInit) {
|
if (costumeNeedsInit) {
|
||||||
startAnimActor(initFrame);
|
startAnimActor(initFrame);
|
||||||
|
@ -773,7 +774,7 @@ void Actor::startWalkAnim(int cmd, int angle)
|
||||||
args[2] = angle;
|
args[2] = angle;
|
||||||
args[0] = number;
|
args[0] = number;
|
||||||
args[1] = cmd;
|
args[1] = cmd;
|
||||||
_scumm->runScript(walk_script, 1, 0, args);
|
_vm->runScript(walk_script, 1, 0, args);
|
||||||
} else*/ {
|
} else*/ {
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case 1: /* start walk */
|
case 1: /* start walk */
|
||||||
|
@ -846,7 +847,7 @@ void Actor::walkActor()
|
||||||
|
|
||||||
walkdata.curbox = j;
|
walkdata.curbox = j;
|
||||||
|
|
||||||
if (_scumm->findPathTowards(this, walkbox, j, walkdata.destbox)) {
|
if (_vm->findPathTowards(this, walkbox, j, walkdata.destbox)) {
|
||||||
moving |= MF_LAST_LEG;
|
moving |= MF_LAST_LEG;
|
||||||
calcMovementFactor(walkdata.destx, walkdata.desty);
|
calcMovementFactor(walkdata.destx, walkdata.desty);
|
||||||
return;
|
return;
|
||||||
|
@ -856,43 +857,43 @@ void Actor::walkActor()
|
||||||
#if 1
|
#if 1
|
||||||
do {
|
do {
|
||||||
moving &= ~MF_NEW_LEG;
|
moving &= ~MF_NEW_LEG;
|
||||||
if ((!walkbox && (!(_scumm->_features & GF_SMALL_HEADER)))) {
|
if ((!walkbox && (!(_vm->_features & GF_SMALL_HEADER)))) {
|
||||||
setActorBox(walkdata.destbox);
|
setActorBox(walkdata.destbox);
|
||||||
walkdata.curbox = walkdata.destbox;
|
walkdata.curbox = walkdata.destbox;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (walkbox == walkdata.destbox)
|
if (walkbox == walkdata.destbox)
|
||||||
break;
|
break;
|
||||||
j = _scumm->getPathToDestBox(walkbox, walkdata.destbox);
|
j = _vm->getPathToDestBox(walkbox, walkdata.destbox);
|
||||||
if (j == -1 || j > 0xF0) {
|
if (j == -1 || j > 0xF0) {
|
||||||
walkdata.destbox = walkbox;
|
walkdata.destbox = walkbox;
|
||||||
moving |= MF_LAST_LEG;
|
moving |= MF_LAST_LEG;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
walkdata.curbox = j;
|
walkdata.curbox = j;
|
||||||
if (_scumm->_features & GF_OLD256) {
|
if (_vm->_features & GF_OLD256) {
|
||||||
_scumm->findPathTowardsOld(this, walkbox, j, walkdata.destbox);
|
_vm->findPathTowardsOld(this, walkbox, j, walkdata.destbox);
|
||||||
if (_scumm->gateLoc[2].x == 32000 && _scumm->gateLoc[3].x == 32000) {
|
if (_vm->gateLoc[2].x == 32000 && _vm->gateLoc[3].x == 32000) {
|
||||||
moving |= MF_LAST_LEG;
|
moving |= MF_LAST_LEG;
|
||||||
calcMovementFactor(walkdata.destx, walkdata.desty);
|
calcMovementFactor(walkdata.destx, walkdata.desty);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_scumm->gateLoc[2].x != 32000) {
|
if (_vm->gateLoc[2].x != 32000) {
|
||||||
if (calcMovementFactor(_scumm->gateLoc[2].x, _scumm->gateLoc[2].y)) {
|
if (calcMovementFactor(_vm->gateLoc[2].x, _vm->gateLoc[2].y)) {
|
||||||
walkdata.destx = _scumm->gateLoc[3].x;
|
walkdata.destx = _vm->gateLoc[3].x;
|
||||||
walkdata.desty = _scumm->gateLoc[3].y;
|
walkdata.desty = _vm->gateLoc[3].y;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (calcMovementFactor(_scumm->gateLoc[3].x, _scumm->gateLoc[3].y))
|
if (calcMovementFactor(_vm->gateLoc[3].x, _vm->gateLoc[3].y))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (_scumm->findPathTowards(this, walkbox, j, walkdata.destbox))
|
if (_vm->findPathTowards(this, walkbox, j, walkdata.destbox))
|
||||||
break;
|
break;
|
||||||
if (calcMovementFactor(_scumm->_foundPathX, _scumm->_foundPathY))
|
if (calcMovementFactor(_vm->_foundPathX, _vm->_foundPathY))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -945,19 +946,19 @@ void Scumm::processActors()
|
||||||
|
|
||||||
void Actor::drawActorCostume()
|
void Actor::drawActorCostume()
|
||||||
{
|
{
|
||||||
if (!(_scumm->_features & GF_AFTER_V7)) {
|
if (!(_vm->_features & GF_AFTER_V7)) {
|
||||||
CostumeRenderer cr;
|
CostumeRenderer cr;
|
||||||
|
|
||||||
if (!needRedraw)
|
if (!needRedraw)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_scumm->getClass(number, 20))
|
if (_vm->getClass(number, 20))
|
||||||
mask = 0;
|
mask = 0;
|
||||||
else if (_scumm->getClass(number, 21))
|
else if (_vm->getClass(number, 21))
|
||||||
forceClip = 1;
|
forceClip = 1;
|
||||||
|
|
||||||
// FIXME: ugly fix for samnmax inventory
|
// FIXME: ugly fix for samnmax inventory
|
||||||
if (_scumm->_gameId==GID_SAMNMAX && _scumm->getState(995))
|
if (_vm->_gameId==GID_SAMNMAX && _vm->getState(995))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
needRedraw = false;
|
needRedraw = false;
|
||||||
|
@ -967,21 +968,21 @@ void Actor::drawActorCostume()
|
||||||
/* First, zero initialize all fields */
|
/* First, zero initialize all fields */
|
||||||
memset(&cr, 0, sizeof(cr));
|
memset(&cr, 0, sizeof(cr));
|
||||||
|
|
||||||
cr._actorX = x - _scumm->virtscr->xstart;
|
cr._actorX = x - _vm->virtscr->xstart;
|
||||||
cr._actorY = y - elevation;
|
cr._actorY = y - elevation;
|
||||||
cr._scaleX = scalex;
|
cr._scaleX = scalex;
|
||||||
cr._scaleY = scaley;
|
cr._scaleY = scaley;
|
||||||
|
|
||||||
cr._outheight = _scumm->virtscr->height;
|
cr._outheight = _vm->virtscr->height;
|
||||||
cr._vm = _scumm;
|
cr._vm = _vm;
|
||||||
|
|
||||||
cr._zbuf = mask;
|
cr._zbuf = mask;
|
||||||
if (cr._zbuf > _scumm->gdi._numZBuffer)
|
if (cr._zbuf > _vm->gdi._numZBuffer)
|
||||||
cr._zbuf = (byte)_scumm->gdi._numZBuffer;
|
cr._zbuf = (byte)_vm->gdi._numZBuffer;
|
||||||
if (forceClip)
|
if (forceClip)
|
||||||
cr._zbuf = forceClip;
|
cr._zbuf = forceClip;
|
||||||
|
|
||||||
cr._shadow_table = _scumm->_shadowPalette;
|
cr._shadow_table = _vm->_shadowPalette;
|
||||||
|
|
||||||
cr.setCostume(costume);
|
cr.setCostume(costume);
|
||||||
cr.setPalette(palette);
|
cr.setPalette(palette);
|
||||||
|
@ -997,7 +998,7 @@ void Actor::drawActorCostume()
|
||||||
needRedraw = true;
|
needRedraw = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
AkosRenderer ar;
|
AkosRenderer ar(_vm);
|
||||||
|
|
||||||
if (!needRedraw)
|
if (!needRedraw)
|
||||||
return;
|
return;
|
||||||
|
@ -1009,24 +1010,24 @@ void Actor::drawActorCostume()
|
||||||
/* First, zero initialize all fields */
|
/* First, zero initialize all fields */
|
||||||
memset(&ar, 0, sizeof(ar));
|
memset(&ar, 0, sizeof(ar));
|
||||||
|
|
||||||
ar.x = x - _scumm->virtscr->xstart;
|
ar.x = x - _vm->virtscr->xstart;
|
||||||
ar.y = y - elevation;
|
ar.y = y - elevation;
|
||||||
ar.scale_x = scalex;
|
ar.scale_x = scalex;
|
||||||
ar.scale_y = scaley;
|
ar.scale_y = scaley;
|
||||||
ar.clipping = forceClip;
|
ar.clipping = forceClip;
|
||||||
if (ar.clipping == 100) {
|
if (ar.clipping == 100) {
|
||||||
ar.clipping = mask;
|
ar.clipping = mask;
|
||||||
if (ar.clipping > (byte)_scumm->gdi._numZBuffer)
|
if (ar.clipping > (byte)_vm->gdi._numZBuffer)
|
||||||
ar.clipping = _scumm->gdi._numZBuffer;
|
ar.clipping = _vm->gdi._numZBuffer;
|
||||||
}
|
}
|
||||||
ar.charsetmask = _scumm->_vars[_scumm->VAR_CHARSET_MASK] != 0;
|
ar.charsetmask = _vm->_vars[_vm->VAR_CHARSET_MASK] != 0;
|
||||||
|
|
||||||
ar.outptr = _scumm->virtscr->screenPtr + _scumm->virtscr->xstart;
|
ar.outptr = _vm->virtscr->screenPtr + _vm->virtscr->xstart;
|
||||||
ar.outwidth = _scumm->virtscr->width;
|
ar.outwidth = _vm->virtscr->width;
|
||||||
ar.outheight = _scumm->virtscr->height;
|
ar.outheight = _vm->virtscr->height;
|
||||||
|
|
||||||
ar.shadow_mode = shadow_mode;
|
ar.shadow_mode = shadow_mode;
|
||||||
ar.shadow_table = _scumm->_shadowPalette;
|
ar.shadow_table = _vm->_shadowPalette;
|
||||||
|
|
||||||
ar.setCostume(costume);
|
ar.setCostume(costume);
|
||||||
ar.setPalette(palette);
|
ar.setPalette(palette);
|
||||||
|
@ -1053,17 +1054,17 @@ void Actor::actorAnimate()
|
||||||
if (animProgress >= animSpeed) {
|
if (animProgress >= animSpeed) {
|
||||||
animProgress = 0;
|
animProgress = 0;
|
||||||
|
|
||||||
if (_scumm->_features & GF_AFTER_V7) {
|
if (_vm->_features & GF_AFTER_V7) {
|
||||||
byte *akos = _scumm->getResourceAddress(rtCostume, costume);
|
byte *akos = _vm->getResourceAddress(rtCostume, costume);
|
||||||
assert(akos);
|
assert(akos);
|
||||||
if (_scumm->akos_increaseAnims(akos, this)) {
|
if (_vm->akos_increaseAnims(akos, this)) {
|
||||||
needRedraw = true;
|
needRedraw = true;
|
||||||
needBgReset = true;
|
needBgReset = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LoadedCostume lc;
|
LoadedCostume lc;
|
||||||
_scumm->loadCostume(&lc, costume);
|
_vm->loadCostume(&lc, costume);
|
||||||
if (_scumm->cost_increaseAnims(&lc, this)) {
|
if (_vm->cost_increaseAnims(&lc, this)) {
|
||||||
needRedraw = true;
|
needRedraw = true;
|
||||||
needBgReset = true;
|
needBgReset = true;
|
||||||
}
|
}
|
||||||
|
@ -1160,8 +1161,6 @@ void Actor::setActorCostume(int c)
|
||||||
|
|
||||||
costumeNeedsInit = true;
|
costumeNeedsInit = true;
|
||||||
|
|
||||||
debug(1, "setActorCostume (actor=%d, costume=%d)", (int)number, (int)c);
|
|
||||||
|
|
||||||
if (visible) {
|
if (visible) {
|
||||||
hideActor();
|
hideActor();
|
||||||
cost.reset();
|
cost.reset();
|
||||||
|
@ -1180,7 +1179,7 @@ void Actor::startWalkActor(int destX, int destY, int dir)
|
||||||
{
|
{
|
||||||
AdjustBoxResult abr;
|
AdjustBoxResult abr;
|
||||||
|
|
||||||
abr = _scumm->adjustXYToBeInBox(this, destX, destY, walkbox);
|
abr = _vm->adjustXYToBeInBox(this, destX, destY, walkbox);
|
||||||
|
|
||||||
if (!isInCurrentRoom()) {
|
if (!isInCurrentRoom()) {
|
||||||
x = abr.x;
|
x = abr.x;
|
||||||
|
@ -1194,10 +1193,10 @@ void Actor::startWalkActor(int destX, int destY, int dir)
|
||||||
abr.dist = 0;
|
abr.dist = 0;
|
||||||
walkbox = 0;
|
walkbox = 0;
|
||||||
} else {
|
} else {
|
||||||
if (_scumm->checkXYInBoxBounds(walkdata.destbox, abr.x, abr.y)) {
|
if (_vm->checkXYInBoxBounds(walkdata.destbox, abr.x, abr.y)) {
|
||||||
abr.dist = walkdata.destbox;
|
abr.dist = walkdata.destbox;
|
||||||
} else {
|
} else {
|
||||||
abr = _scumm->adjustXYToBeInBox(this, abr.x, abr.y, walkbox);
|
abr = _vm->adjustXYToBeInBox(this, abr.x, abr.y, walkbox);
|
||||||
}
|
}
|
||||||
if (moving && walkdata.destdir == dir
|
if (moving && walkdata.destdir == dir
|
||||||
&& walkdata.destx == abr.x && walkdata.desty == abr.y)
|
&& walkdata.destx == abr.x && walkdata.desty == abr.y)
|
||||||
|
@ -1221,7 +1220,7 @@ void Actor::startWalkActor(int destX, int destY, int dir)
|
||||||
|
|
||||||
byte *Actor::getActorName()
|
byte *Actor::getActorName()
|
||||||
{
|
{
|
||||||
byte *ptr = _scumm->getResourceAddress(rtActorName, number);
|
byte *ptr = _vm->getResourceAddress(rtActorName, number);
|
||||||
if (ptr == NULL)
|
if (ptr == NULL)
|
||||||
return (byte *)" ";
|
return (byte *)" ";
|
||||||
return ptr;
|
return ptr;
|
||||||
|
@ -1240,12 +1239,12 @@ void Actor::remapActor(int r_fact, int g_fact, int b_fact,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (costume < 1 || costume >= _scumm->_numCostumes - 1) {
|
if (costume < 1 || costume >= _vm->_numCostumes - 1) {
|
||||||
warning("Remap actor %d invalid costume", number, costume);
|
warning("Remap actor %d invalid costume", number, costume);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
akos = _scumm->getResourceAddress(rtCostume, costume);
|
akos = _vm->getResourceAddress(rtCostume, costume);
|
||||||
akpl = findResource(MKID('AKPL'), akos);
|
akpl = findResource(MKID('AKPL'), akos);
|
||||||
|
|
||||||
//get num palette entries
|
//get num palette entries
|
||||||
|
@ -1279,7 +1278,7 @@ void Actor::remapActor(int r_fact, int g_fact, int b_fact,
|
||||||
g = (g * g_fact) >> 8;
|
g = (g * g_fact) >> 8;
|
||||||
if (b_fact != 256)
|
if (b_fact != 256)
|
||||||
b = (b * b_fact) >> 8;
|
b = (b * b_fact) >> 8;
|
||||||
palette[i] = _scumm->remapPaletteColor(r, g, b, threshold);
|
palette[i] = _vm->remapPaletteColor(r, g, b, threshold);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1309,7 +1308,7 @@ void Actor::walkActorOld()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
next_box = _scumm->getPathToDestBox(walkbox, walkdata.destbox);
|
next_box = _vm->getPathToDestBox(walkbox, walkdata.destbox);
|
||||||
|
|
||||||
if (next_box == -1) {
|
if (next_box == -1) {
|
||||||
moving |= MF_LAST_LEG;
|
moving |= MF_LAST_LEG;
|
||||||
|
@ -1318,27 +1317,27 @@ void Actor::walkActorOld()
|
||||||
|
|
||||||
walkdata.curbox = next_box;
|
walkdata.curbox = next_box;
|
||||||
|
|
||||||
_scumm->findPathTowardsOld(this, walkbox, next_box, walkdata.destbox);
|
_vm->findPathTowardsOld(this, walkbox, next_box, walkdata.destbox);
|
||||||
if (_scumm->gateLoc[2].x == 32000 && _scumm->gateLoc[3].x == 32000) {
|
if (_vm->gateLoc[2].x == 32000 && _vm->gateLoc[3].x == 32000) {
|
||||||
moving |= MF_LAST_LEG;
|
moving |= MF_LAST_LEG;
|
||||||
calcMovementFactor(walkdata.destx, walkdata.desty);
|
calcMovementFactor(walkdata.destx, walkdata.desty);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_scumm->gateLoc[2].x != 32000) {
|
if (_vm->gateLoc[2].x != 32000) {
|
||||||
if (calcMovementFactor(_scumm->gateLoc[2].x, _scumm->gateLoc[2].y)) {
|
if (calcMovementFactor(_vm->gateLoc[2].x, _vm->gateLoc[2].y)) {
|
||||||
// FIXME - why is the first actor used here?!? Somebody please add a comment
|
// FIXME - why is the first actor used here?!? Somebody please add a comment
|
||||||
_scumm->getFirstActor()->walkdata.point3x = _scumm->gateLoc[3].x;
|
_vm->getFirstActor()->walkdata.point3x = _vm->gateLoc[3].x;
|
||||||
_scumm->getFirstActor()->walkdata.point3y = _scumm->gateLoc[3].y;
|
_vm->getFirstActor()->walkdata.point3y = _vm->gateLoc[3].y;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (calcMovementFactor(_scumm->gateLoc[3].x, _scumm->gateLoc[3].y))
|
if (calcMovementFactor(_vm->gateLoc[3].x, _vm->gateLoc[3].y))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
walkbox = walkdata.destbox;
|
walkbox = walkdata.destbox;
|
||||||
mask = _scumm->getMaskFromBox(walkbox);
|
mask = _vm->getMaskFromBox(walkbox);
|
||||||
goto restart;
|
goto restart;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1373,7 +1372,7 @@ void Actor::walkActorOld()
|
||||||
}
|
}
|
||||||
|
|
||||||
walkbox = walkdata.curbox;
|
walkbox = walkdata.curbox;
|
||||||
mask = _scumm->getMaskFromBox(walkbox);
|
mask = _vm->getMaskFromBox(walkbox);
|
||||||
moving &= MF_IN_LEG;
|
moving &= MF_IN_LEG;
|
||||||
moving |= MF_NEW_LEG;
|
moving |= MF_NEW_LEG;
|
||||||
goto restart;
|
goto restart;
|
||||||
|
|
13
actor.h
13
actor.h
|
@ -29,6 +29,13 @@
|
||||||
|
|
||||||
class Scumm;
|
class Scumm;
|
||||||
|
|
||||||
|
enum MoveFlags {
|
||||||
|
MF_NEW_LEG = 1,
|
||||||
|
MF_IN_LEG = 2,
|
||||||
|
MF_TURN = 4,
|
||||||
|
MF_LAST_LEG = 8
|
||||||
|
};
|
||||||
|
|
||||||
struct ActorWalkData {
|
struct ActorWalkData {
|
||||||
int16 destx,desty; // Final destination
|
int16 destx,desty; // Final destination
|
||||||
byte destbox;
|
byte destbox;
|
||||||
|
@ -99,13 +106,13 @@ public:
|
||||||
byte palette[64];
|
byte palette[64];
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Scumm *_scumm;
|
Scumm *_vm;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructor, sets all data to 0
|
// Constructor, sets all data to 0
|
||||||
Actor() { memset(this, 0, sizeof(Actor)); }
|
Actor() { memset(this, 0, sizeof(Actor)); }
|
||||||
void initActorClass(Scumm *scumm) {_scumm = scumm;}
|
void initActorClass(Scumm *scumm) {_vm = scumm;}
|
||||||
//protected:
|
//protected:
|
||||||
void hideActor();
|
void hideActor();
|
||||||
void showActor();
|
void showActor();
|
||||||
|
@ -136,7 +143,7 @@ public:
|
||||||
void remapActor(int b, int c, int d, int e);
|
void remapActor(int b, int c, int d, int e);
|
||||||
void walkActorOld();
|
void walkActorOld();
|
||||||
|
|
||||||
bool isInCurrentRoom() { return room == _scumm->_currentRoom; }
|
bool isInCurrentRoom() { return room == _vm->_currentRoom; }
|
||||||
|
|
||||||
int getAnimVar(byte var) { return animVariable[var]; }
|
int getAnimVar(byte var) { return animVariable[var]; }
|
||||||
void setAnimVar(byte var, int value) { animVariable[var] = value; }
|
void setAnimVar(byte var, int value) { animVariable[var] = value; }
|
||||||
|
|
47
akos.cpp
47
akos.cpp
|
@ -22,6 +22,7 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "scumm.h"
|
#include "scumm.h"
|
||||||
#include "actor.h"
|
#include "actor.h"
|
||||||
|
#include "akos.h"
|
||||||
|
|
||||||
bool Scumm::akos_hasManyDirections(Actor * a)
|
bool Scumm::akos_hasManyDirections(Actor * a)
|
||||||
{
|
{
|
||||||
|
@ -155,8 +156,8 @@ void AkosRenderer::setPalette(byte *new_palette)
|
||||||
byte *the_akpl;
|
byte *the_akpl;
|
||||||
uint size, i;
|
uint size, i;
|
||||||
|
|
||||||
the_akpl = g_scumm->findResourceData(MKID('AKPL'), akos);
|
the_akpl = _vm->findResourceData(MKID('AKPL'), akos);
|
||||||
size = g_scumm->getResourceDataSize(akpl);
|
size = _vm->getResourceDataSize(akpl);
|
||||||
|
|
||||||
if (size > 256)
|
if (size > 256)
|
||||||
error("akos_setPalette: %d is too many colors", size);
|
error("akos_setPalette: %d is too many colors", size);
|
||||||
|
@ -168,21 +169,21 @@ void AkosRenderer::setPalette(byte *new_palette)
|
||||||
|
|
||||||
void AkosRenderer::setCostume(int costume)
|
void AkosRenderer::setCostume(int costume)
|
||||||
{
|
{
|
||||||
akos = g_scumm->getResourceAddress(rtCostume, costume);
|
akos = _vm->getResourceAddress(rtCostume, costume);
|
||||||
assert(akos);
|
assert(akos);
|
||||||
|
|
||||||
akhd = (AkosHeader *) g_scumm->findResourceData(MKID('AKHD'), akos);
|
akhd = (AkosHeader *) _vm->findResourceData(MKID('AKHD'), akos);
|
||||||
akof = (AkosOffset *) g_scumm->findResourceData(MKID('AKOF'), akos);
|
akof = (AkosOffset *) _vm->findResourceData(MKID('AKOF'), akos);
|
||||||
akci = g_scumm->findResourceData(MKID('AKCI'), akos);
|
akci = _vm->findResourceData(MKID('AKCI'), akos);
|
||||||
aksq = g_scumm->findResourceData(MKID('AKSQ'), akos);
|
aksq = _vm->findResourceData(MKID('AKSQ'), akos);
|
||||||
akcd = g_scumm->findResourceData(MKID('AKCD'), akos);
|
akcd = _vm->findResourceData(MKID('AKCD'), akos);
|
||||||
akpl = g_scumm->findResourceData(MKID('AKPL'), akos);
|
akpl = _vm->findResourceData(MKID('AKPL'), akos);
|
||||||
codec = READ_LE_UINT16(&akhd->codec);
|
codec = READ_LE_UINT16(&akhd->codec);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AkosRenderer::setFacing(Actor * a)
|
void AkosRenderer::setFacing(Actor * a)
|
||||||
{
|
{
|
||||||
mirror = (g_scumm->newDirToOldDir(a->facing) != 0 || akhd->flags & 1);
|
mirror = (_vm->newDirToOldDir(a->facing) != 0 || akhd->flags & 1);
|
||||||
if (a->flip)
|
if (a->flip)
|
||||||
mirror ^= 1;
|
mirror ^= 1;
|
||||||
}
|
}
|
||||||
|
@ -584,14 +585,14 @@ void AkosRenderer::codec1()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(g_scumm->isGlobInMemory(rtString,g_scumm->_vars[g_scumm->VAR_CUSTOMSCALETABLE])) {
|
if(_vm->isGlobInMemory(rtString,_vm->_vars[_vm->VAR_CUSTOMSCALETABLE])) {
|
||||||
v1.scaletable = g_scumm->getStringAddressVar(g_scumm->VAR_CUSTOMSCALETABLE);
|
v1.scaletable = _vm->getStringAddressVar(_vm->VAR_CUSTOMSCALETABLE);
|
||||||
} else {
|
} else {
|
||||||
v1.scaletable = default_scale_table;
|
v1.scaletable = default_scale_table;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup color decoding variables */
|
/* Setup color decoding variables */
|
||||||
num_colors = g_scumm->getResourceDataSize(akpl);
|
num_colors = _vm->getResourceDataSize(akpl);
|
||||||
if (num_colors == 32) {
|
if (num_colors == 32) {
|
||||||
v1.mask = (1 << 3) - 1;
|
v1.mask = (1 << 3) - 1;
|
||||||
v1.shl = 3;
|
v1.shl = 3;
|
||||||
|
@ -757,7 +758,7 @@ void AkosRenderer::codec1()
|
||||||
if (v1.skip_width <= 0 || height <= 0)
|
if (v1.skip_width <= 0 || height <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_scumm->updateDirtyRect(0, x_left, x_right, y_top, y_bottom, 1 << dirty_id);
|
_vm->updateDirtyRect(0, x_left, x_right, y_top, y_bottom, 1 << dirty_id);
|
||||||
|
|
||||||
y_clipping = ((uint) y_bottom > outheight || y_top < 0);
|
y_clipping = ((uint) y_bottom > outheight || y_top < 0);
|
||||||
|
|
||||||
|
@ -779,18 +780,18 @@ void AkosRenderer::codec1()
|
||||||
|
|
||||||
masking = false;
|
masking = false;
|
||||||
if (clipping) {
|
if (clipping) {
|
||||||
masking = g_scumm->isMaskActiveAt(x_left, y_top, x_right, y_bottom,
|
masking = _vm->isMaskActiveAt(x_left, y_top, x_right, y_bottom,
|
||||||
g_scumm->getResourceAddress(rtBuffer, 9) +
|
_vm->getResourceAddress(rtBuffer, 9) +
|
||||||
g_scumm->gdi._imgBufOffs[clipping] +
|
_vm->gdi._imgBufOffs[clipping] +
|
||||||
g_scumm->_screenStartStrip) != 0;
|
_vm->_screenStartStrip) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
v1.mask_ptr = NULL;
|
v1.mask_ptr = NULL;
|
||||||
|
|
||||||
if (masking || charsetmask || shadow_mode) {
|
if (masking || charsetmask || shadow_mode) {
|
||||||
v1.mask_ptr =
|
v1.mask_ptr =
|
||||||
g_scumm->getResourceAddress(rtBuffer, 9) + cur_y * 40 + g_scumm->_screenStartStrip;
|
_vm->getResourceAddress(rtBuffer, 9) + cur_y * 40 + _vm->_screenStartStrip;
|
||||||
v1.imgbufoffs = g_scumm->gdi._imgBufOffs[clipping];
|
v1.imgbufoffs = _vm->gdi._imgBufOffs[clipping];
|
||||||
if (!charsetmask && masking) {
|
if (!charsetmask && masking) {
|
||||||
v1.mask_ptr += v1.imgbufoffs;
|
v1.mask_ptr += v1.imgbufoffs;
|
||||||
v1.imgbufoffs = 0;
|
v1.imgbufoffs = 0;
|
||||||
|
@ -904,7 +905,7 @@ void AkosRenderer::codec5()
|
||||||
int top;
|
int top;
|
||||||
int bottom;
|
int bottom;
|
||||||
|
|
||||||
vs = &g_scumm->virtscr[0];
|
vs = &_vm->virtscr[0];
|
||||||
//setBlastObjectMode(shadow_mode); // not implemented yet
|
//setBlastObjectMode(shadow_mode); // not implemented yet
|
||||||
moveX=move_x_cur;
|
moveX=move_x_cur;
|
||||||
moveY=move_y_cur;
|
moveY=move_y_cur;
|
||||||
|
@ -930,7 +931,7 @@ void AkosRenderer::codec5()
|
||||||
draw_top = 0;
|
draw_top = 0;
|
||||||
draw_bottom = 200;
|
draw_bottom = 200;
|
||||||
|
|
||||||
g_scumm->updateDirtyRect(0, left, right+1, top, bottom+1, 1 << dirty_id);
|
_vm->updateDirtyRect(0, left, right+1, top, bottom+1, 1 << dirty_id);
|
||||||
|
|
||||||
bdd.dataptr = srcptr;
|
bdd.dataptr = srcptr;
|
||||||
bdd.out = vs->screenPtr;
|
bdd.out = vs->screenPtr;
|
||||||
|
@ -943,7 +944,7 @@ void AkosRenderer::codec5()
|
||||||
bdd.x = left+1;
|
bdd.x = left+1;
|
||||||
bdd.y = top;
|
bdd.y = top;
|
||||||
|
|
||||||
g_scumm->drawBomp(&bdd,0,bdd.dataptr,0,0);
|
_vm->drawBomp(&bdd,0,bdd.dataptr,0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AkosRenderer::codec16()
|
void AkosRenderer::codec16()
|
||||||
|
|
9
akos.h
9
akos.h
|
@ -104,8 +104,15 @@ struct AkosRenderer {
|
||||||
byte *akcd;
|
byte *akcd;
|
||||||
|
|
||||||
byte palette[256];
|
byte palette[256];
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Scumm *_vm;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// Constructor, sets all data to 0
|
||||||
|
AkosRenderer(Scumm *scumm) { memset(this, 0, sizeof(AkosRenderer)); _vm = scumm; }
|
||||||
|
|
||||||
bool drawCostume();
|
bool drawCostume();
|
||||||
void setPalette(byte *palette);
|
void setPalette(byte *palette);
|
||||||
void setCostume(int costume);
|
void setCostume(int costume);
|
||||||
|
|
32
boxes.cpp
32
boxes.cpp
|
@ -131,16 +131,16 @@ bool Scumm::checkXYInBoxBounds(int b, int x, int y)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!getSideOfLine(box.ul.x, box.ul.y, box.ur.x, box.ur.y, x, y, b))
|
if (!compareSlope(box.ul.x, box.ul.y, box.ur.x, box.ur.y, x, y))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!getSideOfLine(box.ur.x, box.ur.y, box.ll.x, box.ll.y, x, y, b))
|
if (!compareSlope(box.ur.x, box.ur.y, box.ll.x, box.ll.y, x, y))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!getSideOfLine(box.ll.x, box.ll.y, box.lr.x, box.lr.y, x, y, b))
|
if (!compareSlope(box.ll.x, box.ll.y, box.lr.x, box.lr.y, x, y))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!getSideOfLine(box.lr.x, box.lr.y, box.ul.x, box.ul.y, x, y, b))
|
if (!compareSlope(box.lr.x, box.lr.y, box.ul.x, box.ul.y, x, y))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -187,12 +187,6 @@ uint Scumm::distanceFromPt(int x, int y, int ptx, int pty)
|
||||||
return diffx + diffy;
|
return diffx + diffy;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Scumm::getSideOfLine(int x1, int y1, int x2, int y2, int x, int y,
|
|
||||||
int box)
|
|
||||||
{
|
|
||||||
return (x - x1) * (y2 - y1) <= (y - y1) * (x2 - x1);
|
|
||||||
}
|
|
||||||
|
|
||||||
ScummPoint Scumm::closestPtOnLine(int ulx, int uly, int llx, int lly, int x,
|
ScummPoint Scumm::closestPtOnLine(int ulx, int uly, int llx, int lly, int x,
|
||||||
int y)
|
int y)
|
||||||
{
|
{
|
||||||
|
@ -885,10 +879,10 @@ int Scumm::findPathTowardsOld(Actor * a, byte trap1, byte trap2,
|
||||||
gateLoc[4].y = actor->walkdata.desty;
|
gateLoc[4].y = actor->walkdata.desty;
|
||||||
|
|
||||||
if (getMaskFromBox(trap1) == getMaskFromBox(trap2) || 1) {
|
if (getMaskFromBox(trap1) == getMaskFromBox(trap2) || 1) {
|
||||||
if (CompareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[4].x, gateLoc[4].y, gate1ax, gate1ay) !=
|
if (compareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[4].x, gateLoc[4].y, gate1ax, gate1ay) !=
|
||||||
CompareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[4].x, gateLoc[4].y, gate1bx, gate1by) &&
|
compareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[4].x, gateLoc[4].y, gate1bx, gate1by) &&
|
||||||
CompareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[4].x, gateLoc[4].y, gate2ax, gate2ay) !=
|
compareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[4].x, gateLoc[4].y, gate2ax, gate2ay) !=
|
||||||
CompareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[4].x, gateLoc[4].y, gate2bx, gate2by)) {
|
compareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[4].x, gateLoc[4].y, gate2bx, gate2by)) {
|
||||||
return 0; /* same zplane and between both gates? */
|
return 0; /* same zplane and between both gates? */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -898,8 +892,8 @@ int Scumm::findPathTowardsOld(Actor * a, byte trap1, byte trap2,
|
||||||
gateLoc[3].x = pt.x;
|
gateLoc[3].x = pt.x;
|
||||||
gateLoc[3].y = pt.y;
|
gateLoc[3].y = pt.y;
|
||||||
|
|
||||||
if (CompareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[3].x, gateLoc[3].y, gate1ax, gate1ay) ==
|
if (compareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[3].x, gateLoc[3].y, gate1ax, gate1ay) ==
|
||||||
CompareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[3].x, gateLoc[3].y, gate1bx, gate1by)) {
|
compareSlope(gateLoc[1].x, gateLoc[1].y, gateLoc[3].x, gateLoc[3].y, gate1bx, gate1by)) {
|
||||||
closestPtOnLine(gate1ax, gate1ay, gate1bx, gate1by, gateLoc[1].x, gateLoc[1].y);
|
closestPtOnLine(gate1ax, gate1ay, gate1bx, gate1by, gateLoc[1].x, gateLoc[1].y);
|
||||||
gateLoc[2].x = pt.x; /* if point 2 between gates, ignore! */
|
gateLoc[2].x = pt.x; /* if point 2 between gates, ignore! */
|
||||||
gateLoc[2].y = pt.y;
|
gateLoc[2].y = pt.y;
|
||||||
|
@ -1009,11 +1003,9 @@ void Scumm::GetGates(int trap1, int trap2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Scumm::CompareSlope(int X1, int Y1, int X2, int Y2, int X3, int Y3)
|
bool Scumm::compareSlope(int X1, int Y1, int X2, int Y2, int X3, int Y3)
|
||||||
{
|
{
|
||||||
if ((Y2 - Y1) * (X3 - X1) > (Y3 - Y1) * (X2 - X1))
|
return (Y2 - Y1) * (X3 - X1) <= (Y3 - Y1) * (X2 - X1);
|
||||||
return (0);
|
|
||||||
return (1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scumm::SetGate(int line1, int line2, int polyx[8], int polyy[8])
|
void Scumm::SetGate(int line1, int line2, int polyx[8], int polyy[8])
|
||||||
|
|
1
gfx.cpp
1
gfx.cpp
|
@ -1267,7 +1267,6 @@ void Gdi::unkDecode3()
|
||||||
} while (--_tempNumLines);
|
} while (--_tempNumLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Gdi::unkDecode4()
|
void Gdi::unkDecode4()
|
||||||
{
|
{
|
||||||
byte *src = _smap_ptr;
|
byte *src = _smap_ptr;
|
||||||
|
|
|
@ -907,7 +907,7 @@ void Scumm::animateActor(int act, int anim)
|
||||||
a->startAnimActor(a->standFrame);
|
a->startAnimActor(a->standFrame);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
a->moving &= ~4;
|
a->moving &= ~MF_TURN;
|
||||||
a->setActorDirection(dir);
|
a->setActorDirection(dir);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
@ -933,7 +933,7 @@ void Scumm::animateActor(int act, int anim)
|
||||||
a->startAnimActor(a->standFrame);
|
a->startAnimActor(a->standFrame);
|
||||||
break;
|
break;
|
||||||
case 0x3E:
|
case 0x3E:
|
||||||
a->moving &= ~4;
|
a->moving &= ~MF_TURN;
|
||||||
a->setActorDirection(oldDirToNewDir(dir));
|
a->setActorDirection(oldDirToNewDir(dir));
|
||||||
break;
|
break;
|
||||||
case 0x3D:
|
case 0x3D:
|
||||||
|
|
11
scumm.h
11
scumm.h
|
@ -276,13 +276,6 @@ enum {
|
||||||
RF_USAGE_MAX = RF_USAGE
|
RF_USAGE_MAX = RF_USAGE
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MoveFlags {
|
|
||||||
MF_NEW_LEG = 1,
|
|
||||||
MF_IN_LEG = 2,
|
|
||||||
MF_TURN = 4,
|
|
||||||
MF_LAST_LEG = 8
|
|
||||||
};
|
|
||||||
|
|
||||||
#define _maxRooms res.num[rtRoom]
|
#define _maxRooms res.num[rtRoom]
|
||||||
#define _maxScripts res.num[rtScript]
|
#define _maxScripts res.num[rtScript]
|
||||||
#define _maxCostumes res.num[rtCostume]
|
#define _maxCostumes res.num[rtCostume]
|
||||||
|
@ -505,7 +498,6 @@ enum MouseButtonStatus {
|
||||||
|
|
||||||
#include "gfx.h"
|
#include "gfx.h"
|
||||||
#include "boxes.h"
|
#include "boxes.h"
|
||||||
#include "akos.h"
|
|
||||||
#include "smush.h"
|
#include "smush.h"
|
||||||
|
|
||||||
class Scumm {
|
class Scumm {
|
||||||
|
@ -1182,14 +1174,13 @@ public:
|
||||||
PathNode *unkMatrixProc2(PathVertex *vtx, int i);
|
PathNode *unkMatrixProc2(PathVertex *vtx, int i);
|
||||||
bool areBoxesNeighbours(int i, int j);
|
bool areBoxesNeighbours(int i, int j);
|
||||||
void addToBoxMatrix(byte b);
|
void addToBoxMatrix(byte b);
|
||||||
int CompareSlope(int X1,int Y1,int X2,int Y2,int X3,int Y3);
|
bool compareSlope(int X1,int Y1,int X2,int Y2,int X3,int Y3);
|
||||||
void SetGate(int line1,int line2, int polyx[8], int polyy[8]);
|
void SetGate(int line1,int line2, int polyx[8], int polyy[8]);
|
||||||
void *addToBoxVertexHeap(int size);
|
void *addToBoxVertexHeap(int size);
|
||||||
PathVertex *addPathVertex();
|
PathVertex *addPathVertex();
|
||||||
bool checkXYInBoxBounds(int box, int x, int y);
|
bool checkXYInBoxBounds(int box, int x, int y);
|
||||||
uint distanceFromPt(int x, int y, int ptx, int pty);
|
uint distanceFromPt(int x, int y, int ptx, int pty);
|
||||||
ScummPoint closestPtOnLine(int ulx, int uly, int llx, int lly, int x, int y);
|
ScummPoint closestPtOnLine(int ulx, int uly, int llx, int lly, int x, int y);
|
||||||
bool getSideOfLine(int x1,int y1, int x2, int y2, int x, int y, int box);
|
|
||||||
void getBoxCoordinates(int boxnum, BoxCoords *bc);
|
void getBoxCoordinates(int boxnum, BoxCoords *bc);
|
||||||
byte getMaskFromBox(int box);
|
byte getMaskFromBox(int box);
|
||||||
Box *getBoxBaseAddr(int box);
|
Box *getBoxBaseAddr(int box);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue