/* 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 */