scummvm/engines/access/amazon/amazon_logic.h
2014-12-19 23:36:53 -05:00

253 lines
4.8 KiB
C++

/* 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.
*
* 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.
*
* 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 ACCESS_AMAZON_LOGIC_H
#define ACCESS_AMAZON_LOGIC_H
#include "common/scummsys.h"
#include "access/scripts.h"
#include "access/asurface.h"
namespace Access {
namespace Amazon {
class AmazonEngine;
#define PAN_SIZE 32
class AmazonManager {
protected:
AmazonEngine *_vm;
public:
AmazonManager(AmazonEngine *vm) : _vm(vm) {}
};
class PannedScene : public AmazonManager {
struct PanEntry {
SpriteResource *_pObject;
int _pImgNum;
int _pObjX;
int _pObjY;
int _pObjZ;
int _pObjXl;
int _pObjYl;
};
protected:
int _xCount;
int _xTrack;
int _yTrack;
int _zTrack;
int _xCam;
int _yCam;
int _zCam;
int _pNumObj;
PanEntry _pan[PAN_SIZE];
public:
PannedScene(AmazonEngine *vm);
void pan();
};
class CampScene : public PannedScene {
protected:
bool _skipStart;
public:
CampScene(AmazonEngine *vm);
void mWhileDoOpen();
};
class Opening : public CampScene {
private:
int _pCount;
void doTitle();
void doCredit();
void doCreditDemo();
void scrollTitle();
void doTent();
public:
Opening(AmazonEngine *vm);
void doIntroduction();
};
class Plane : public PannedScene {
public:
int _pCount;
Common::Point _position;
int _planeCount;
int _propCount;
void doFlyCell();
void doFallCell();
void scrollFly();
void scrollFall();
void mWhileFly();
void mWhileFall();
public:
Plane(AmazonEngine *vm);
};
#define JUNGLE_SIZE 3
class Jungle : public CampScene {
private:
void initJWalk2();
void jungleMove();
void scrollJWalk();
int _jCnt[JUNGLE_SIZE];
int _jungleX[JUNGLE_SIZE];
public:
Jungle(AmazonEngine *vm);
void mWhileJWalk();
void mWhileJWalk2();
};
class Guard : public PannedScene {
private:
int _guardCel;
Common::Point _position;
int _gCode1;
int _gCode2;
Common::Point _topLeft;
Common::Point _bottomRight;
int _xMid, _yMid;
void chkVLine();
void chkHLine();
void setVerticalCode();
void setHorizontalCode();
void guardSee();
void setGuardFrame();
public:
Guard(AmazonEngine *vm);
void doGuard();
void setPosition(const Common::Point &pt);
};
class Cast : public PannedScene {
public:
Cast(AmazonEngine *vm);
void doCast(int param1);
};
class River : public PannedScene {
private:
bool _chickenOutFl;
const byte *_mapPtr;
int _canoeVXPos;
int _canoeMoveCount;
int _canoeFrame;
RiverStruct *_topList;
RiverStruct *_botList;
int _canoeDir;
bool _saveRiver;
bool _deathFlag;
int _deathCount;
int _deathType;
int _maxHits;
// Saved fields
int _canoeLane;
int _canoeYPos;
int _hitCount;
int _riverIndex;
int _hitSafe;
int _rScrollRow;
int _rScrollCol;
int _rScrollX;
int _rScrollY;
int _mapOffset;
int _screenVertX;
int _oldScrollCol;
void initRiver();
void resetPositions();
void checkRiverPan();
bool riverJumpTest();
void riverSound();
void moveCanoe();
void moveCanoe2();
void updateObstacles();
void riverSetPhysX();
bool checkRiverCollide();
void plotRiver();
void scrollRiver();
void scrollRiver1();
void setRiverPan();
public:
River(AmazonEngine *vm);
void doRiver();
void mWhileDownRiver();
void synchronize(Common::Serializer &s);
};
enum AntDirection { ANT_RIGHT = 0, ANT_LEFT = 1 };
class Ant : public AmazonManager {
private:
AntDirection _antDirection;
AntDirection _pitDirection;
int _antCel;
int _torchCel;
int _pitCel;
int _stabCel;
Common::Point _antPos;
bool _antDieFl;
bool _antEatFl;
bool _stabFl;
Common::Point _pitPos;
void plotTorchSpear(int indx, const int *&buf);
void plotPit(int indx, const int *&buf);
int antHandleRight(int indx, const int *&buf);
int antHandleLeft(int indx, const int *&buf);
int antHandleStab(int indx, const int *&buf);
public:
Ant(AmazonEngine *vm);
void doAnt();
void synchronize(Common::Serializer &s);
};
class InactivePlayer : public ImageEntry {
public:
SpriteResource *_altSpritesPtr;
InactivePlayer() { _altSpritesPtr = nullptr; }
};
} // End of namespace Amazon
} // End of namespace Access
#endif /* ACCESS_AMAZON_LOGIC_H */