* (Bugfix): ptrPlayer->SelectedAircraft was not being updated correctly when new aircraft appeared.

* (Bugfix): PltParser was casting remaining time to uint8_t instead of uint16_t.
* Reduced file buffer size to original value.
* GfxDrawButton(): L1/R1/L2/R2 text is now printed on top of Lx/Rx button.
* Other minor changes.
This commit is contained in:
XaviDCR92 2017-08-19 16:51:00 +02:00
parent b1aad213d4
commit e778deb2c0
6 changed files with 129 additions and 71 deletions

View File

@ -149,6 +149,7 @@ enum
* *************************************/
static void GameInit(void);
static bool GameExit(void);
static void GameLoadLevel(void);
static bool GamePause(void);
static void GameFinished(uint8_t i);
@ -295,26 +296,10 @@ void Game(bool two_players)
while(1)
{
if(GameFinishedFlag == true)
{
// Exit game on level finished.
if(GameGuiFinishedDialog(&PlayerData[PLAYER_ONE]) == true)
{
break;
}
}
if(GamePause() == true)
{
// Exit game if player desires to exit.
break;
}
if(GameAircraftCollisionFlag == true)
{
GameGuiAircraftCollision(&PlayerData[PLAYER_ONE]);
break;
}
if(GameExit() == true)
{
break;
}
GameEmergencyMode();
@ -331,8 +316,46 @@ void Game(bool two_players)
GfxDisableSplitScreen();
EndAnimation();
SfxPlayTrack(INTRO_TRACK);
}
/* ***************************************************************************************
*
* @name: bool GameExit(void)
*
* @author: Xavier Del Campo
*
* @brief:
* Evaluates special conditions which end current game and return to main menu.
*
* @returns:
* True if game has to be exitted, false otherwise.
*
* ***************************************************************************************/
bool GameExit(void)
{
if(GameFinishedFlag == true)
{
// Exit game on level finished.
if(GameGuiFinishedDialog(&PlayerData[PLAYER_ONE]) == true)
{
return true;
}
}
if(GamePause() == true)
{
// Exit game if player desires to exit.
return true;
}
if(GameAircraftCollisionFlag == true)
{
GameGuiAircraftCollision(&PlayerData[PLAYER_ONE]);
return true;
}
return false;
}
/* ***************************************************************************************
@ -856,7 +879,7 @@ void GameCalculations(void)
{
GamePlayerHandler(&PlayerData[i], &FlightData);
}
}
}
}
/* ***************************************************************************************
@ -886,15 +909,16 @@ void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
// which use this are currently active.
ptrPlayer->InvalidPath = false; // Do the same thing for "InvalidPath".
ptrPlayer->FlightDataSelectedAircraft = ptrPlayer->ActiveAircraftList[ptrPlayer->SelectedAircraft];
// Recalculate ptrPlayer->SelectedAircraft. In case new aircraft appear, we may be pointing
// to a incorrect instance.
GameActiveAircraftList(ptrPlayer, ptrFlightData);
if(GameAircraftCollisionFlag == true)
{
TYPE_ISOMETRIC_POS IsoPos = AircraftGetIsoPos(GameAircraftCollisionIdx);
CameraMoveToIsoPos(ptrPlayer, IsoPos);
}
GameActiveAircraftList(ptrPlayer, ptrFlightData);
GameStateUnboarding(ptrPlayer, ptrFlightData);
GameStateLockTarget(ptrPlayer, ptrFlightData);
GameStateSelectRunway(ptrPlayer, ptrFlightData);
@ -1411,8 +1435,6 @@ void GameAircraftState(uint8_t i)
target[0] = FlightData.Parking[i];
Serial_printf("Target assigned = %d\n", target[0]);
Serial_printf("2\n");
if(AircraftAddNew(&FlightData, i, target) == false)
{
@ -2530,8 +2552,6 @@ void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli
targets[0] = assignedRwy;
targets[1] = rwyExit;
Serial_printf("1\n");
if( AircraftAddNew(ptrFlightData,
aircraftIndex,
@ -3767,7 +3787,7 @@ void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightD
// Clear all pointers for aircraft data first.
// Then, rebuild aircraft list for player.
lastFlightDataIdx = ptrPlayer->FlightDataSelectedAircraft;
lastFlightDataIdx = ptrPlayer->ActiveAircraftList[ptrPlayer->SelectedAircraft];
memset(ptrPlayer->ActiveAircraftList, 0, GAME_MAX_AIRCRAFT);
ptrPlayer->ActiveAircraft = 0;
@ -3783,7 +3803,7 @@ void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightD
}
}
currentFlightDataIdx = ptrPlayer->FlightDataSelectedAircraft;
currentFlightDataIdx = ptrPlayer->ActiveAircraftList[ptrPlayer->SelectedAircraft];
if(GameAircraftCreatedFlag == true)
{
@ -3791,18 +3811,26 @@ void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightD
if(ptrPlayer->ActiveAircraft > 1)
{
dprintf("currentFlightDataIdx = %d, lastFlightDataIdx = %d\n",
currentFlightDataIdx,
lastFlightDataIdx );
if(currentFlightDataIdx != lastFlightDataIdx)
{
for(ptrPlayer->SelectedAircraft = 0; ptrPlayer->SelectedAircraft < FlightData.nAircraft; ptrPlayer->SelectedAircraft++)
{
if(ptrPlayer->FlightDataSelectedAircraft == lastFlightDataIdx)
if(ptrPlayer->ActiveAircraftList[ptrPlayer->SelectedAircraft] == lastFlightDataIdx)
{
dprintf("Recalculated ptrPlayer->SelectedAircraft from %d to %d.\n",
currentFlightDataIdx,
ptrPlayer->SelectedAircraft );
break;
}
}
}
}
}
ptrPlayer->FlightDataSelectedAircraft = ptrPlayer->ActiveAircraftList[ptrPlayer->SelectedAircraft];
}
/* *******************************************************************************************

View File

@ -80,14 +80,6 @@ enum
AIRCRAFT_LOCK_TARGET_TEXT_Y = AIRCRAFT_LOCK_TARGET_Y + 4,
};
enum
{
AIRCRAFT_STOP_X = 192,
AIRCRAFT_STOP_TEXT_X = AIRCRAFT_STOP_X + 16,
AIRCRAFT_STOP_Y = AIRCRAFT_LOCK_TARGET_Y,
AIRCRAFT_STOP_TEXT_Y = AIRCRAFT_STOP_Y + 4
};
enum
{
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R0 = NORMAL_LUMINANCE,
@ -412,6 +404,14 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
GAME_GUI_REMAINING_AIRCRAFT_X_2PLAYER = AIRCRAFT_DATA_GSGPOLY4_X0_2PLAYER + 16,
GAME_GUI_REMAINING_AIRCRAFT_Y_2PLAYER = AIRCRAFT_DATA_GSGPOLY4_Y2_2PLAYER - 16
};
enum
{
AIRCRAFT_STOP_X = 128,
AIRCRAFT_STOP_TEXT_X = AIRCRAFT_STOP_X + 32,
AIRCRAFT_STOP_Y = AIRCRAFT_LOCK_TARGET_Y,
AIRCRAFT_STOP_TEXT_Y = AIRCRAFT_STOP_Y + 4
};
if(ptrPlayer->ShowAircraftData == true)
{
@ -543,7 +543,7 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
GsSortGPoly4(&SelectedAircraftGPoly4);
PageUpDownSpr.attribute |= GFX_1HZ_FLASH;
PageUpDownSpr.attribute |= GFX_2HZ_FLASH;
if(ptrPlayer->ActiveAircraft > (GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * (ptrPlayer->FlightDataPage + 1) ) )
{
@ -609,6 +609,7 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
}
else if(ptrFlightData->State[ptrPlayer->FlightDataSelectedAircraft] == STATE_TAXIING)
{
GfxDrawButton(AIRCRAFT_STOP_X, AIRCRAFT_STOP_Y, PAD_L1);
FontPrintText(&SmallFont, AIRCRAFT_STOP_TEXT_X, AIRCRAFT_STOP_TEXT_Y, "Stop immediately");
}
}

View File

@ -443,6 +443,12 @@ void GfxButtonRemoveFlags(uint8_t flags)
void GfxDrawButton(short x, short y, unsigned short btn)
{
enum
{
LR_BUTTON_TEXT_OFFSET_X = 4,
LR_BUTTON_TEXT_OFFSET_Y = 4
};
static bool first_entered = true;
static short orig_u;
static short orig_v;
@ -539,6 +545,37 @@ void GfxDrawButton(short x, short y, unsigned short btn)
GfxSortSprite(&PSXButtons);
switch(btn)
{
case PAD_L1:
FontPrintText( &SmallFont,
x + LR_BUTTON_TEXT_OFFSET_X,
y + LR_BUTTON_TEXT_OFFSET_Y,
"L1" );
break;
case PAD_L2:
FontPrintText( &SmallFont,
x + LR_BUTTON_TEXT_OFFSET_X,
y + LR_BUTTON_TEXT_OFFSET_Y,
"L2" );
break;
case PAD_R1:
FontPrintText( &SmallFont,
x + LR_BUTTON_TEXT_OFFSET_X,
y + LR_BUTTON_TEXT_OFFSET_Y,
"R1" );
break;
case PAD_R2:
FontPrintText( &SmallFont,
x + LR_BUTTON_TEXT_OFFSET_X,
y + LR_BUTTON_TEXT_OFFSET_Y,
"R2" );
break;
}
PSXButtons.attribute &= ~H_FLIP;
PSXButtons.rotate = 0;
}

View File

@ -369,6 +369,8 @@ void MainMenuRestoreInitValues(void)
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0;
GfxSetGlobalLuminance(NORMAL_LUMINANCE);
SfxPlayTrack(INTRO_TRACK);
}
void MainMenuButtonHandler(void)

View File

@ -16,23 +16,6 @@
* Structs and enums *
* *************************************/
enum
{
DEPARTURE_ARRIVAL_INDEX = 0,
FLIGHT_NUMBER_INDEX,
PASSENGERS_INDEX,
HOURS_MINUTES_INDEX,
PARKING_INDEX,
REMAINING_TIME_INDEX
};
enum
{
PLT_HOUR_MINUTE_CHARACTERS = 2,
PLT_FIRST_LINE_CHARACTERS = 5,
PLT_COLON_POSITION = 2
};
/* *************************************
* Local Variables
* *************************************/
@ -44,6 +27,23 @@ static void PltParserResetBuffers(TYPE_FLIGHT_DATA* ptrFlightData);
bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
{
enum
{
DEPARTURE_ARRIVAL_INDEX = 0,
FLIGHT_NUMBER_INDEX,
PASSENGERS_INDEX,
HOURS_MINUTES_INDEX,
PARKING_INDEX,
REMAINING_TIME_INDEX
};
enum
{
PLT_HOUR_MINUTE_CHARACTERS = 2,
PLT_FIRST_LINE_CHARACTERS = 5,
PLT_COLON_POSITION = 2
};
uint8_t i;
uint8_t j;
uint8_t aircraftIndex;
@ -136,16 +136,6 @@ bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
while(lineBufferPtr != NULL)
{
/*
* enum
{
DEPARTURE_ARRIVAL_INDEX = 0,
FLIGHT_NUMBER_INDEX,
PASSENGERS_INDEX,
HOURS_MINUTES_INDEX,
PARKING_INDEX,
REMAINING_TIME_INDEX
};*/
switch(i)
{
case DEPARTURE_ARRIVAL_INDEX:
@ -212,7 +202,7 @@ bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
break;
case REMAINING_TIME_INDEX:
ptrFlightData->RemainingTime[aircraftIndex] = (uint8_t)atoi(lineBufferPtr);
ptrFlightData->RemainingTime[aircraftIndex] = (uint16_t)atoi(lineBufferPtr);
Serial_printf("ptrFlightData->RemainingTime[%d] = %d\n", aircraftIndex, ptrFlightData->RemainingTime[aircraftIndex]);
break;

View File

@ -14,7 +14,7 @@
* Defines
* *************************************/
#define FILE_BUFFER_SIZE 0x4AA60
#define FILE_BUFFER_SIZE 0x20014
#define END_STACK_PATTERN (uint32_t) 0x18022015
#define BEGIN_STACK_ADDRESS (uint32_t*) 0x801FFF00