aboutsummaryrefslogtreecommitdiff
path: root/Source/Game.c
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Game.c')
-rw-r--r--Source/Game.c81
1 files changed, 45 insertions, 36 deletions
diff --git a/Source/Game.c b/Source/Game.c
index 84114c4..4b642a6 100644
--- a/Source/Game.c
+++ b/Source/Game.c
@@ -120,35 +120,35 @@ static bool GamePause(void);
static bool GameFinished(void);
static void GameEmergencyMode(void);
static void GameCalculations(void);
-static void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
+static void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
static void GamePlayerAddWaypoint(TYPE_PLAYER* ptrPlayer);
static void GamePlayerAddWaypoint_Ex(TYPE_PLAYER* ptrPlayer, uint16_t tile);
static void GameGraphics(void);
static void GameRenderLevel(TYPE_PLAYER* ptrPlayer);
-//static void GameLoadPilots(char * strPath);
+//static void GameLoadPilots(char* strPath);
static void GameClock(void);
static void GameClockFlights(void);
static void GameAircraftState(void);
static void GameActiveAircraft(void);
-static void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
+static void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
static void GameFirstLastAircraftIndex(void);
-static void GameSelectAircraftFromList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
-static void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
-static void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
-static void GameStateSelectTaxiwayParking(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
+static void GameSelectAircraftFromList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
+static void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
+static void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
+static void GameStateSelectTaxiwayParking(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
static void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
static TYPE_ISOMETRIC_POS GameSelectAircraft(TYPE_PLAYER* ptrPlayer);
static void GameSelectAircraftWaypoint(TYPE_PLAYER* ptrPlayer);
static void GameGetRunwayArray(void);
static void GameGetSelectedRunwayArray(uint16_t rwyHeader);
-static void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
+static void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
static bool GamePathToTile(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
static void GameDrawMouse(TYPE_PLAYER* ptrPlayer);
static void GameStateUnboarding(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
static void GameGenerateUnboardingSequence(TYPE_PLAYER* ptrPlayer);
static void GameCreateTakeoffWaypoints(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData, uint8_t aircraftIdx);
static void GameGetRunwayEntryTile(uint8_t aircraftIdx, TYPE_RWY_ENTRY_DATA* ptrRwyEntry);
-static void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
+static void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
static void GameRemainingAircraft(void);
static void GameMinimumSpawnTimeout(void);
@@ -176,11 +176,13 @@ static bool firstLevelRender; // Used to avoid reentrance issues on GameRenderLe
static TYPE_TIMER* GameSpawnMinTime;
static bool spawnMinTimeFlag;
static bool GameAircraftCreatedFlag;
+static bool GameAircraftCollisionFlag;
+static uint8_t GameAircraftCollisionIdx;
// Instances for player-specific data
TYPE_PLAYER PlayerData[MAX_PLAYERS];
-static char * GameFileList[] = { "cdrom:\\DATA\\SPRITES\\TILESET1.TIM;1" ,
+static char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\TILESET1.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\TILESET2.TIM;1" ,
"cdrom:\\DATA\\LEVELS\\LEVEL1.PLT;1" ,
"cdrom:\\DATA\\SPRITES\\GAMEPLN.TIM;1" ,
@@ -194,7 +196,7 @@ static void * GameFileDest[] = { (GsSprite*)&GameTilesetSpr ,
NULL ,
(GsSprite*)&GameMouseSpr };
-static char * GameLevelList[] = { "cdrom:\\DATA\\LEVELS\\LEVEL1.LVL;1"};
+static char* GameLevelList[] = { "cdrom:\\DATA\\LEVELS\\LEVEL1.LVL;1"};
static uint8_t GameLevelBuffer[GAME_MAX_MAP_SIZE];
static uint8_t GameLevelColumns;
@@ -222,12 +224,19 @@ void Game(bool two_players)
{
if(GameFinished() == true)
{
+ // Exit game on level finished.
break;
}
if(GamePause() == true)
{
- // Exit game
+ // Exit game if player desires to exit.
+ break;
+ }
+
+ if(GameAircraftCollisionFlag == true)
+ {
+ GameGuiAircraftCollision(&PlayerData[PLAYER_ONE]);
break;
}
@@ -360,6 +369,8 @@ void GameInit(void)
firstActiveAircraft = 0;
lastActiveAircraft = 0;
GameAircraftCreatedFlag = false;
+ GameAircraftCollisionFlag = false;
+ GameAircraftCollisionIdx = 0;
if(GameTwoPlayersActive() == true)
{
@@ -556,7 +567,7 @@ uint8_t GameGetLastActiveAircraft(void)
return lastActiveAircraft;
}
-void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
ptrPlayer->SelectedTile = 0; // Reset selected tile if no states
// which use this are currently active.
@@ -564,6 +575,12 @@ void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
ptrPlayer->FlightDataSelectedAircraft = ptrPlayer->ActiveAircraftList[ptrPlayer->SelectedAircraft];
+ if(GameAircraftCollisionFlag == true)
+ {
+ TYPE_ISOMETRIC_POS IsoPos = AircraftGetIsoPos(GameAircraftCollisionIdx);
+ CameraMoveToIsoPos(ptrPlayer, IsoPos);
+ }
+
GameActiveAircraftList(ptrPlayer, ptrFlightData);
GameStateUnboarding(ptrPlayer, ptrFlightData);
GameStateLockTarget(ptrPlayer, ptrFlightData);
@@ -633,7 +650,7 @@ void GameGraphics(void)
int i;
bool split_screen = false;
- while(GfxIsGPUBusy() == true);
+ while( (SystemRefreshNeeded() == false) || (GfxIsGPUBusy() == true) );
if(TwoPlayersActive == true)
{
@@ -1103,7 +1120,7 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
}
}
- // TODO: Isometric -> Cartesian conversion
+ // Isometric -> Cartesian conversion
tileIsoPos.x = columns << (TILE_SIZE_BIT_SHIFT);
tileIsoPos.y = rows << (TILE_SIZE_BIT_SHIFT);
tileIsoPos.z = 0;
@@ -1117,12 +1134,6 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
ptrTileset->x -= TILE_SIZE >> 1;
ptrTileset->y -= TILE_SIZE >> 2;
- /*ptrTileset->x = columns << (TILE_SIZE_BIT_SHIFT - 1);
- ptrTileset->x -= rows << (TILE_SIZE_BIT_SHIFT - 1);
-
- ptrTileset->y = rows << (TILE_SIZE_BIT_SHIFT - 2);
- ptrTileset->y += columns << (TILE_SIZE_BIT_SHIFT - 2);*/
-
if(columns < GameLevelColumns -1 )
{
columns++;
@@ -1163,14 +1174,6 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
ptrTileset->attribute &= ~(H_FLIP);
}
}
-
- /*if(PadOneKeyReleased(PAD_CROSS) == true)
- {
- for(i = 0; i < GameLevelSize; i++)
- {
- dprintf("Tile number %d, ID: %d\n",i,GameLevelBuffer[i]);
- }
- }*/
}
void GameSetTime(uint8_t hour, uint8_t minutes)
@@ -1194,7 +1197,7 @@ void GameActiveAircraft(void)
}
}
-void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
if(ptrPlayer->ShowAircraftData == true)
{
@@ -1256,7 +1259,7 @@ void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
}
}
-void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer);
uint8_t i;
@@ -1343,7 +1346,7 @@ void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptr
}
}
-void GameStateSelectTaxiwayParking(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+void GameStateSelectTaxiwayParking(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer);
uint8_t i;
@@ -1428,7 +1431,7 @@ void GameStateSelectTaxiwayParking(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * pt
}
}
-void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
uint8_t i;
bool success;
@@ -1533,7 +1536,7 @@ void GameGetRunwayArray(void)
dprintf("\n");
}
-void GameSelectAircraftFromList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+void GameSelectAircraftFromList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
uint8_t AircraftIdx = ptrPlayer->FlightDataSelectedAircraft;
FL_STATE aircraftState = ptrFlightData->State[AircraftIdx];
@@ -1690,7 +1693,7 @@ void GameGetSelectedRunwayArray(uint16_t rwyHeader)
GameGetSelectedRunwayArray(0);
}
-void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
uint16_t assignedRwy = GameRwy[ptrPlayer->SelectedRunway];
uint8_t aircraftIndex = ptrPlayer->FlightDataSelectedAircraft;
@@ -2556,7 +2559,7 @@ void GameRemoveFlight(uint8_t idx, bool successful)
}
}
-void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
uint8_t i;
uint8_t j = 0;
@@ -2639,3 +2642,9 @@ void GameMinimumSpawnTimeout(void)
{
spawnMinTimeFlag = true;
}
+
+void GameAircraftCollision(uint8_t AircraftIdx)
+{
+ GameAircraftCollisionFlag = true;
+ GameAircraftCollisionIdx = AircraftIdx;
+}