mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-19 10:41:55 +00:00
291 lines
7.0 KiB
C++
291 lines
7.0 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 GNAP_ARCADE_H
|
|
#define GNAP_ARCADE_H
|
|
|
|
#include "gnap/debugger.h"
|
|
|
|
namespace Gnap {
|
|
|
|
class GnapEngine;
|
|
class CutScene;
|
|
|
|
struct Scene49Obstacle {
|
|
int _currSequenceId;
|
|
int _closerSequenceId;
|
|
int _passedSequenceId;
|
|
int _splashSequenceId;
|
|
int _collisionSequenceId;
|
|
int _prevId;
|
|
int _currId;
|
|
int _laneNum;
|
|
};
|
|
|
|
struct ObstacleDef {
|
|
int _sequenceId;
|
|
int _ticks;
|
|
};
|
|
|
|
class Scene49: public Scene {
|
|
public:
|
|
Scene49(GnapEngine *vm);
|
|
~Scene49() {}
|
|
|
|
virtual int init();
|
|
virtual void updateHotspots();
|
|
virtual void run();
|
|
virtual void updateAnimations();
|
|
virtual void updateAnimationsCb() {};
|
|
|
|
private:
|
|
int _scoreBarPos;
|
|
int _scoreLevel;
|
|
bool _scoreBarFlash;
|
|
int _obstacleIndex;
|
|
Scene49Obstacle _obstacles[5];
|
|
int _truckSequenceId;
|
|
int _truckId;
|
|
int _truckLaneNum;
|
|
|
|
void checkObstacles();
|
|
void updateObstacle(int id);
|
|
void increaseScore(int amount);
|
|
void decreaseScore(int amount);
|
|
void refreshScoreBar();
|
|
void clearObstacle(int index);
|
|
};
|
|
|
|
/*****************************************************************************/
|
|
|
|
class Scene50: public Scene {
|
|
public:
|
|
Scene50(GnapEngine *vm);
|
|
~Scene50() {}
|
|
|
|
virtual int init();
|
|
virtual void updateHotspots();
|
|
virtual void run();
|
|
virtual void updateAnimations();
|
|
virtual void updateAnimationsCb() {};
|
|
|
|
private:
|
|
bool _fightDone;
|
|
int _timesPlayed;
|
|
int _timesPlayedModifier;
|
|
int _attackCounter;
|
|
int _roundNum;
|
|
int _timeRemaining;
|
|
int _leftTongueRoundsWon;
|
|
int _rightTongueRoundsWon;
|
|
int _leftTongueEnergyBarPos;
|
|
int _rightTongueEnergyBarPos;
|
|
int _leftTongueSequenceId;
|
|
int _leftTongueId;
|
|
int _leftTongueNextSequenceId;
|
|
int _leftTongueNextId;
|
|
int _leftTongueNextIdCtr;
|
|
int _rightTongueSequenceId;
|
|
int _rightTongueId;
|
|
int _rightTongueNextSequenceId;
|
|
int _rightTongueNextId;
|
|
int _rightTongueNextIdCtr;
|
|
int _leftTongueEnergy;
|
|
int _rightTongueEnergy;
|
|
|
|
bool tongueWinsRound(int tongueNum);
|
|
void playWinAnim(int tongueNum, bool fightOver);
|
|
void delayTicks();
|
|
void initRound();
|
|
bool updateCountdown();
|
|
void drawCountdown(int value);
|
|
void playTonguesIdle();
|
|
void playRoundAnim(int roundNum);
|
|
bool updateEnergyBars(int newLeftBarPos, int newRightBarPos);
|
|
void waitForAnim(int animationIndex);
|
|
int checkInput();
|
|
int getRightTongueAction();
|
|
int getRightTongueActionTicks();
|
|
int getLeftTongueNextId();
|
|
int getRightTongueNextId();
|
|
void playWinBadgeAnim(int tongueNum);
|
|
};
|
|
|
|
/*****************************************************************************/
|
|
|
|
struct Scene51Item {
|
|
int _currSequenceId;
|
|
int _droppedSequenceId;
|
|
int _x, _y;
|
|
int _collisionX;
|
|
bool _canCatch;
|
|
bool _isCollision;
|
|
int _x2;
|
|
int _id;
|
|
};
|
|
|
|
class Scene51: public Scene {
|
|
public:
|
|
Scene51(GnapEngine *vm);
|
|
~Scene51() {}
|
|
|
|
virtual int init();
|
|
virtual void updateHotspots();
|
|
virtual void run();
|
|
virtual void updateAnimations() {};
|
|
virtual void updateAnimationsCb() {};
|
|
|
|
private:
|
|
bool _dropLoseCash;
|
|
|
|
int _cashAmount;
|
|
int _digits[4];
|
|
int _digitSequenceIds[4];
|
|
int _guySequenceId;
|
|
int _guyNextSequenceId;
|
|
int _itemsCaughtCtr;
|
|
int _dropSpeedTicks;
|
|
int _nextDropItemKind;
|
|
int _itemInsertX;
|
|
int _itemInsertDirection;
|
|
int _platypusSequenceId;
|
|
int _platypusNextSequenceId;
|
|
int _platypusJumpSequenceId;
|
|
int _itemsCtr;
|
|
int _itemsCtr1;
|
|
int _itemsCtr2;
|
|
|
|
Scene51Item _items[6];
|
|
|
|
void clearItem(Scene51Item *item);
|
|
void dropNextItem();
|
|
void updateItemAnimations();
|
|
int checkCollision(int sequenceId);
|
|
void updateItemAnimation(Scene51Item *item, int index);
|
|
void removeCollidedItems();
|
|
int itemIsCaught(Scene51Item *item);
|
|
bool isJumpingRight(int sequenceId);
|
|
bool isJumpingLeft(int sequenceId);
|
|
bool isJumping(int sequenceId);
|
|
void waitForAnim(int animationIndex);
|
|
int getPosRight(int sequenceId);
|
|
int getPosLeft(int sequenceId);
|
|
void playIntroAnim();
|
|
void updateGuyAnimation();
|
|
int incCashAmount(int sequenceId);
|
|
void winMinigame();
|
|
void playCashAppearAnim();
|
|
void updateCash(int amount);
|
|
void drawDigit(int digit, int position);
|
|
void initCashDisplay();
|
|
};
|
|
|
|
/*****************************************************************************/
|
|
|
|
class Scene52: public Scene {
|
|
public:
|
|
Scene52(GnapEngine *vm);
|
|
~Scene52() {}
|
|
|
|
virtual int init();
|
|
virtual void updateHotspots();
|
|
virtual void run();
|
|
virtual void updateAnimations() {};
|
|
virtual void updateAnimationsCb() {};
|
|
|
|
private:
|
|
int _liveAlienRows;
|
|
int _gameScore;
|
|
bool _soundToggle;
|
|
int _arcadeScreenLeft;
|
|
int _arcadeScreenRight;
|
|
int _arcadeScreenBottom;
|
|
int _shipsLeft;
|
|
int _shieldSpriteIds[3];
|
|
int _shieldPosX[3];
|
|
int _shipPosX;
|
|
int _shipCannonPosX, _shipCannonPosY;
|
|
bool _shipCannonFiring;
|
|
bool _shipCannonFired;
|
|
int _shipCannonWidth, _shipCannonHeight;
|
|
int _shipCannonTopY;
|
|
int _shipMidX, _shipMidY;
|
|
bool _shipFlag;
|
|
bool _aliensInitialized;
|
|
int _alienSpeed, _alienDirection;
|
|
int _alienWidth, _alienHeight;
|
|
int _alienLeftX, _alienTopY;
|
|
int _alienRowDownCtr;
|
|
int _alienRowKind[7];
|
|
int _alienRowAnims[7];
|
|
int _alienRowIds[7];
|
|
int _alienRowXOfs[7];
|
|
int _alienCannonFired[3];
|
|
int _alienCannonPosX[3];
|
|
int _alienCannonPosY[3];
|
|
int _alienCannonSequenceIds[3];
|
|
int _alienCannonIds[3];
|
|
bool _alienWave, _alienSingle;
|
|
int _alienCounter;
|
|
bool _bottomAlienFlag;
|
|
int _aliensCount;
|
|
int _items[8][5];
|
|
int _nextUfoSequenceId, _ufoSequenceId;
|
|
|
|
void update();
|
|
void initShipCannon(int bottomY);
|
|
void initAlienCannons();
|
|
void fireShipCannon(int posX);
|
|
void fireAlienCannon();
|
|
int getFreeShipCannon();
|
|
int getFreeAlienCannon();
|
|
void updateShipCannon();
|
|
void updateAlienCannons();
|
|
void initAliens();
|
|
void initAlienRowKind(int rowNum, int alienKind);
|
|
void insertAlienRow(int rowNum);
|
|
void insertAlienRowAliens(int rowNum);
|
|
void updateAlienRow(int rowNum);
|
|
void moveDownAlienRow();
|
|
int updateHitAlien();
|
|
int getHitAlienNum(int rowNum);
|
|
int alienCannonHitShip(int cannonNum);
|
|
int alienCannonHitShield(int cannonNum);
|
|
bool shipCannonHitShield(int cannonNum);
|
|
bool shipCannonHitAlien();
|
|
void shipExplode();
|
|
bool checkAlienRow(int rowNum);
|
|
void updateAlienRowXOfs();
|
|
void initAlienSize();
|
|
void playSound();
|
|
void updateAliens();
|
|
void updateAlien(int rowNum);
|
|
void loseShip();
|
|
void initShields();
|
|
void initAnims();
|
|
void drawScore(int score);
|
|
};
|
|
|
|
} // End of namespace Gnap
|
|
|
|
#endif // GNAP_ARCADE_H
|