00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _GAMEMANAGER_H
00021 #define _GAMEMANAGER_H
00022
00023 #include <PA9.h>
00024 #include <vector>
00025 #include <string>
00026 using std::vector;
00027 using std::string;
00028 #include "macros.h"
00029
00030 #include "spriteObject.h"
00031 #include "floorTile.h"
00032 #include "rope.h"
00033 #include "pickupSpawner.h"
00034
00035
00036 class Player;
00037 class Pickup;
00038 class menuBottom;
00039
00053 class gameManager : public spriteManager
00054 {
00055 public:
00062 gameManager(u8 newscreen = 0) : spriteManager(newscreen),
00063 p1score(0), p2score(0), pointsToWin(3), p1RoundScore(0), p2RoundScore(0),
00064 player1(NULL), player2(NULL), menuTop(NULL), gameBottom(NULL), menuBase(NULL),
00065 gameEndTimer(0), roundNumber(0), pauseSpawning(false)
00066 {
00067 player1Sprite.palleteID = -1;
00068 player2Sprite.palleteID = -1;
00069 tileSprite.palleteID = -1;
00070 pickupSprite.palleteID = -1;
00071 FXSprite.palleteID = -1;
00072 dunceHatSprite.palleteID = -1;
00073 bootsSprite.palleteID = -1;
00074 }
00075 virtual ~gameManager();
00076
00081 virtual void activate()
00082 {
00083 resetScores();
00084 gameEndTimer = 0;
00085 pickupMask.clear();
00086 spriteManager::activate();
00087 }
00088
00092 virtual void deactivate()
00093 {
00094 resetScores();
00095 spriteManager::deactivate();
00096 }
00097
00098 virtual void clearOutSprites(bool keepSound = false);
00099
00100
00101 void loadPlayer1SpriteSet(const unsigned short *p, const unsigned char *s);
00102 void loadPlayer2SpriteSet(const unsigned short *p, const unsigned char *s);
00103 void loadEnvSpriteSet(const unsigned short *p, const unsigned char *s);
00104 void loadPickupSpriteSet(const unsigned short *p, const unsigned char *s);
00105 void loadFXSpriteSet(const unsigned short *p, const unsigned char *s);
00106 void loadDunceSpriteSet(const unsigned short *p, const unsigned char *s);
00107 void loadBootsSpriteSet(const unsigned short *p, const unsigned char *s);
00108
00109
00110 void refreshPalletes();
00111
00112 void preloadGFX();
00113 void unloadGFX();
00114
00115 virtual void gameTick();
00116 void resetGame(bool ending = false);
00117
00118 void generateBricks();
00119 void generateRopes();
00120 void drawMallow();
00121 void generateSpawners();
00122
00123 void playerSank(Player *p);
00124 void playerDiedSilently(Player *p);
00125 void playerSkulled(Player *p);
00126 void playerLightningd(Player *p);
00127 void playerMined(Player *p);
00128 void playerDisintegrated(Player *p);
00129 void playerWeaseled(Player *p);
00130 void playerPucked(Player *p);
00131
00132 u8 p1score, p2score, pointsToWin;
00134 u8 p1RoundScore;
00136 u8 p2RoundScore;
00137
00139 void resetScores() {p1score = 0; p2score = 0; p1RoundScore = 0; p2RoundScore = 0; roundNumber = 0;}
00140
00141 bool isGamePaused();
00142
00143 #ifdef __WITHSOUND
00144
00145 soundData bigSplash, platformExplode, spawnPuff, gotPickup, teleport, skullLoop, skullPickup, lightningHit, lightningLoop, invisOn, invisOff, mineExp, mineDrop, gunFire, bootsJump, smallSplash, chutClose, chutOpen, hookHit, duncePickup, magnetLoop, netThrow, bulletReflect, boomerangLoop, throwSound;
00146
00147 soundData weaselSounds[7];
00148 #endif
00149
00150 spriteSet player1Sprite, player2Sprite, tileSprite, pickupSprite, FXSprite, dunceHatSprite, bootsSprite;
00151 u8 player1000VPallete;
00152 const short unsigned int* player1000VPalleteData;
00153
00155 struct pickupGraphics
00156 {
00158 u16 spawnGFX;
00160 u16 dieGFX;
00162 u16 blobGFX;
00164 u16 iconGFX;
00166 bool bInUse;
00167 };
00169 vector<pickupGraphics> pickupGFX;
00170
00171 pickupGraphics* getNextAvailablePickupGFXSet();
00172
00173 u16 spawnGFX[4];
00174 u16 dunceGFX[2];
00175 u16 bootsGFX[2];
00176
00178 pickupSpawner* pickupSpawners[3];
00180 Player *player1;
00182 Player *player2;
00184 vector <Pickup*> pickups;
00185
00186
00187 void addPickup(Pickup* p);
00188 void removePickup(Pickup* p);
00189
00195 bool allowPickupSpawning() {return !pauseSpawning;}
00196
00198 static const u8 MALLOWYPOS = 169;
00200 spriteManager *menuTop;
00202 spriteManager *gameBottom;
00204 menuBottom *menuBase;
00206 vector<u8> pickupMask;
00208 u8 statTimerID;
00209 private:
00210 void playerDied(Player* p, u8 weaponID = 18, bool skipKill = false);
00212 s8 gameEndTimer;
00214 u8 roundNumber;
00216 static const u8 ROUNDENDTIMEOUT = 60;
00218 bool pauseSpawning;
00219 };
00220
00221 #endif