aboutsummaryrefslogtreecommitdiff
path: root/engines/cge/cge_main.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2011-07-13 21:04:44 +1000
committerPaul Gilbert2011-07-13 21:04:44 +1000
commit324ccb1760b4915d91b58e643bd0d079eaa095f6 (patch)
treee198f4f8f93eee890ed841b3cced2847b0c14c57 /engines/cge/cge_main.cpp
parentc3c8032c42958f73ef4370fb0476fd0f5a7e30dd (diff)
downloadscummvm-rg350-324ccb1760b4915d91b58e643bd0d079eaa095f6.tar.gz
scummvm-rg350-324ccb1760b4915d91b58e643bd0d079eaa095f6.tar.bz2
scummvm-rg350-324ccb1760b4915d91b58e643bd0d079eaa095f6.zip
CGE: Split pathfinding related code into walk.cpp
Diffstat (limited to 'engines/cge/cge_main.cpp')
-rw-r--r--engines/cge/cge_main.cpp238
1 files changed, 2 insertions, 236 deletions
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp
index 6e2721f8fc..0e2bcc451c 100644
--- a/engines/cge/cge_main.cpp
+++ b/engines/cge/cge_main.cpp
@@ -29,6 +29,7 @@
#include "common/memstream.h"
#include "common/savefile.h"
#include "common/serializer.h"
+#include "common/str.h"
#include "cge/general.h"
#include "cge/sound.h"
#include "cge/startup.h"
@@ -46,7 +47,7 @@
#include "cge/mixer.h"
#include "cge/cge_main.h"
#include "cge/cge.h"
-#include "common/str.h"
+#include "cge/walk.h"
namespace CGE {
@@ -60,7 +61,6 @@ uint16 _stklen = (STACK_SIZ * 2);
Vga *_vga;
Heart *_heart;
-WALK *_hero;
System *_sys;
Sprite *_pocLight;
EventManager *_eventManager;
@@ -102,74 +102,6 @@ Bar _barriers[1 + CAVE_MAX] = { { 0xFF, 0xFF } };
extern Dac _stdPal[58];
-uint8 Cluster::_map[MAP_ZCNT][MAP_XCNT];
-
-
-uint8 &Cluster::cell() {
- return _map[_b][_a];
-}
-
-
-bool Cluster::Protected() {
-/*
- if (A == Barriers[Now]._vert || B == Barriers[Now]._horz)
- return true;
-
- _DX = (MAP_ZCNT << 8) + MAP_XCNT;
- _BX = (uint16) this;
-
- asm mov ax,1
- asm mov cl,[bx].(COUPLE)A
- asm mov ch,[bx].(COUPLE)B
- asm test cx,0x8080 // (A < 0) || (B < 0)
- asm jnz xit
-
- asm cmp cl,dl
- asm jge xit
- asm cmp ch,dh
- asm jge xit
-
- // if (A < 0 || A >= MAP_XCNT || B < 0 || B >= MAP_ZCNT) return true;
-
- asm mov al,dl
- asm mul ch
- asm xor ch,ch
- asm add ax,cx
- asm mov bx,ax
- _BX += (uint16) Map;
- //asm add bx,offset CLUSTER::Map
- asm mov al,[bx]
- asm and ax,0xFF
- asm jz xit
- asm mov ax,1
-
- // return Map[B][A] != 0;
-
- xit: return _AX;
- */
-
- warning("STUB: CLUSTER::Protected()");
- return true;
-}
-
-
-Cluster XZ(int x, int y) {
- if (y < MAP_TOP)
- y = MAP_TOP;
-
- if (y > MAP_TOP + MAP_HIG - MAP_ZGRID)
- y = MAP_TOP + MAP_HIG - MAP_ZGRID;
-
- return Cluster(x / MAP_XGRID, (y - MAP_TOP) / MAP_ZGRID);
-}
-
-
-Cluster XZ(Couple xy) {
- signed char x, y;
- xy.split(x, y);
- return XZ(x, y);
-}
-
void CGEEngine::syncHeader(Common::Serializer &s) {
int i;
@@ -333,172 +265,6 @@ void CGEEngine::loadMapping() {
}
}
-
-Cluster Trace[MAX_FIND_LEVEL];
-int FindLevel;
-
-
-WALK::WALK(CGEEngine *vm, BMP_PTR *shpl)
- : Sprite(vm, shpl), Dir(NO_DIR), _tracePtr(-1), _vm(vm) {
-}
-
-
-void WALK::tick() {
- if (_flags._hide)
- return;
-
- _here = XZ(_x + _w / 2, _y + _h);
-
- if (Dir != NO_DIR) {
- Sprite *spr;
- _sys->funTouch();
- for (spr = _vga->_showQ->first(); spr; spr = spr->_next) {
- if (distance(spr) < 2) {
- if (!spr->_flags._near) {
- _vm->feedSnail(spr, kNear);
- spr->_flags._near = true;
- }
- } else {
- spr->_flags._near = false;
- }
- }
- }
-
- if (_flags._hold || _tracePtr < 0)
- park();
- else {
- if (_here == Trace[_tracePtr]) {
- if (--_tracePtr < 0)
- park();
- } else {
- signed char dx, dz;
- (Trace[_tracePtr] - _here).split(dx, dz);
- DIR d = (dx) ? ((dx > 0) ? EE : WW) : ((dz > 0) ? SS : NN);
- turn(d);
- }
- }
- step();
- if ((Dir == WW && _x <= 0) ||
- (Dir == EE && _x + _w >= SCR_WID) ||
- (Dir == SS && _y + _w >= WORLD_HIG - 2))
- park();
- else {
- signed char x; // dummy var
- _here.split(x, _z); // take current Z position
- SNPOST_(SNZTRIM, -1, 0, this); // update Hero's pos in show queue
- }
-}
-
-
-int WALK::distance(Sprite *spr) {
- int dx, dz;
- dx = spr->_x - (_x + _w - WALKSIDE);
- if (dx < 0)
- dx = (_x + WALKSIDE) - (spr->_x + spr->_w);
-
- if (dx < 0)
- dx = 0;
-
- dx /= MAP_XGRID;
- dz = spr->_z - _z;
- if (dz < 0)
- dz = - dz;
-
- dx = dx * dx + dz * dz;
- for (dz = 1; dz * dz < dx; dz++)
- ;
-
- return dz - 1;
-}
-
-
-void WALK::turn(DIR d) {
- DIR dir = (Dir == NO_DIR) ? SS : Dir;
- if (d != Dir) {
- step((d == dir) ? (1 + dir + dir) : (9 + 4 * dir + d));
- Dir = d;
- }
-}
-
-
-void WALK::park() {
- if (_time == 0)
- ++_time;
-
- if (Dir != NO_DIR) {
- step(9 + 4 * Dir + Dir);
- Dir = NO_DIR;
- _tracePtr = -1;
- }
-}
-
-
-void WALK::findWay(Cluster c) {
- warning("STUB: WALK::findWay");
- /*
- bool Find1Way();
- extern uint16 Target;
-
- if (c != Here) {
- for (FindLevel = 1; FindLevel <= MAX_FIND_LEVEL; FindLevel++) {
- signed char x, z;
- Here.Split(x, z);
- Target = (z << 8) | x;
- c.Split(x, z);
- _CX = (z << 8) | x;
- if (Find1Way())
- break;
- }
- TracePtr = (FindLevel > MAX_FIND_LEVEL) ? -1 : (FindLevel - 1);
- if (TracePtr < 0)
- NoWay();
- Time = 1;
- }
-*/
-}
-
-
-void WALK::findWay(Sprite *spr) {
- if (spr && spr != this) {
- int x = spr->_x;
- int z = spr->_z;
- if (spr->_flags._east)
- x += spr->_w + _w / 2 - WALKSIDE;
- else
- x -= _w / 2 - WALKSIDE;
- findWay(Cluster((x / MAP_XGRID),
- ((z < MAP_ZCNT - MAX_DISTANCE) ? (z + 1)
- : (z - 1))));
- }
-}
-
-
-bool WALK::lower(Sprite *spr) {
- return (spr->_y > _y + (_h * 3) / 5);
-}
-
-
-void WALK::reach(Sprite *spr, int mode) {
- if (spr) {
- _hero->findWay(spr);
- if (mode < 0) {
- mode = spr->_flags._east;
- if (lower(spr))
- mode += 2;
- }
- }
- // note: insert SNAIL commands in reverse order
- SNINSERT(SNPAUSE, -1, 64, NULL);
- SNINSERT(SNSEQ, -1, TSEQ + mode, this);
- if (spr) {
- SNINSERT(SNWAIT, -1, -1, _hero); /////--------$$$$$$$
- //SNINSERT(SNWALK, -1, -1, spr);
- }
- // sequence is not finished,
- // now it is just at sprite appear (disappear) point
-}
-
-
class SQUARE : public Sprite {
public:
SQUARE(CGEEngine *vm);