* Added more comments.
* Radio chatter sounds. * Created aircraft state STATE_STOPPED, to be used when L1 is pressed on aircraft selection mode.
This commit is contained in:
parent
150cc8adc0
commit
b1aad213d4
|
@ -9,3 +9,20 @@ http://freesound.org/people/Hard3eat/sounds/351780/
|
|||
|
||||
CD sound obtained from:
|
||||
http://freesound.org/people/cmorris035/sounds/207276/
|
||||
|
||||
Takeoff1.wav:
|
||||
http://freesound.org/people/hannagreen/sounds/346570/
|
||||
|
||||
Beep.wav:
|
||||
http://freesound.org/people/jobro/sounds/33778/
|
||||
|
||||
R C P M 1 A 1
|
||||
| | | | | | V
|
||||
| | | | | V Message number
|
||||
| | | | V A = Approach, D = Departure
|
||||
| | | V Voice number
|
||||
| | V M = Man, W = Woma
|
||||
| V P = Pilot, T = Tower
|
||||
| Chatter
|
||||
V
|
||||
Radio
|
||||
|
|
|
@ -269,6 +269,10 @@ void AircraftSpeed(TYPE_AIRCRAFT_DATA* ptrAircraft)
|
|||
{
|
||||
switch(ptrAircraft->State)
|
||||
{
|
||||
case STATE_STOPPED:
|
||||
ptrAircraft->Speed = 0;
|
||||
break;
|
||||
|
||||
case STATE_FINAL:
|
||||
ptrAircraft->Speed = AircraftSpeedsTable[AIRCRAFT_SPEED_FINAL];
|
||||
break;
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
* *************************************/
|
||||
|
||||
#define FONT_INTERNAL_TEXT_BUFFER_MAX_SIZE 200
|
||||
#define FONT_DEFAULT_CHAR_SIZE 16
|
||||
#define FONT_DEFAULT_INIT_CHAR '!'
|
||||
|
||||
/* *************************************
|
||||
* Local Prototypes
|
||||
|
|
|
@ -12,9 +12,6 @@
|
|||
* Defines
|
||||
* *************************************/
|
||||
|
||||
#define FONT_DEFAULT_CHAR_SIZE 16
|
||||
#define FONT_DEFAULT_INIT_CHAR '!'
|
||||
|
||||
/* **************************************
|
||||
* Structs and enums *
|
||||
* *************************************/
|
||||
|
|
278
Source/Game.c
278
Source/Game.c
|
@ -136,6 +136,14 @@ enum
|
|||
LAST_TILE_TILESET2 = LAST_TILE_TILESET1
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
SOUND_M1_INDEX = 0,
|
||||
SOUND_W1_INDEX,
|
||||
|
||||
MAX_RADIO_CHATTER_SOUNDS
|
||||
}RADIO_CHATTER_VOICE_NUMBERS;
|
||||
|
||||
/* *************************************
|
||||
* Local Prototypes
|
||||
* *************************************/
|
||||
|
@ -211,6 +219,16 @@ static uint8_t GameAircraftCollisionIdx;
|
|||
static TYPE_BUILDING_DATA GameBuildingData[MAX_BUILDING_ID];
|
||||
static uint8_t GameAircraftTilemap[GAME_MAX_MAP_SIZE][GAME_MAX_AIRCRAFT_PER_TILE];
|
||||
|
||||
// Radio chatter
|
||||
static SsVag ApproachSnds[MAX_RADIO_CHATTER_SOUNDS];
|
||||
static SsVag TowerFinalSnds[MAX_RADIO_CHATTER_SOUNDS];
|
||||
|
||||
// Takeoff sounds
|
||||
static SsVag TakeoffSnd;
|
||||
|
||||
// Beep sounds (taxiway/parking accept)
|
||||
static SsVag BeepSnd;
|
||||
|
||||
// Instances for player-specific data
|
||||
static TYPE_PLAYER PlayerData[MAX_PLAYERS];
|
||||
|
||||
|
@ -218,18 +236,28 @@ static char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\TILESET1.TIM;1" ,
|
|||
"cdrom:\\DATA\\SPRITES\\GAMEPLN.TIM;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\PLNBLUE.CLT;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\MOUSE.TIM;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\BLDNGS1.TIM;1" };
|
||||
"cdrom:\\DATA\\SPRITES\\BLDNGS1.TIM;1" ,
|
||||
"cdrom:\\DATA\\SOUNDS\\RCPW1A1.VAG;1" ,
|
||||
"cdrom:\\DATA\\SOUNDS\\RCPM1A1.VAG;1" ,
|
||||
"cdrom:\\DATA\\SOUNDS\\RCTM1F1.VAG;1" ,
|
||||
"cdrom:\\DATA\\SOUNDS\\TAKEOFF1.VAG;1" ,
|
||||
"cdrom:\\DATA\\SOUNDS\\BEEP.VAG;1" };
|
||||
|
||||
static void* GameFileDest[] = { (GsSprite*)&GameTilesetSpr ,
|
||||
(GsSprite*)&GamePlaneSpr ,
|
||||
NULL,
|
||||
(GsSprite*)&GameMouseSpr ,
|
||||
(GsSprite*)&GameBuildingSpr };
|
||||
static void* GameFileDest[] = { (GsSprite*)&GameTilesetSpr ,
|
||||
(GsSprite*)&GamePlaneSpr ,
|
||||
NULL , // CLT files must use NULL pointers
|
||||
(GsSprite*)&GameMouseSpr ,
|
||||
(GsSprite*)&GameBuildingSpr ,
|
||||
(SsVag*)&ApproachSnds[SOUND_M1_INDEX] ,
|
||||
(SsVag*)&ApproachSnds[SOUND_W1_INDEX] ,
|
||||
(SsVag*)&TowerFinalSnds[SOUND_M1_INDEX] ,
|
||||
(SsVag*)&TakeoffSnd ,
|
||||
(SsVag*)&BeepSnd };
|
||||
|
||||
static char* GamePlt[] = { "cdrom:\\DATA\\LEVELS\\LEVEL1.PLT;1" };
|
||||
static void* GamePltDest[] = {(TYPE_FLIGHT_DATA*)&FlightData ,};
|
||||
static void* GamePltDest[] = {(TYPE_FLIGHT_DATA*)&FlightData };
|
||||
|
||||
static char* GameLevelList[] = { "cdrom:\\DATA\\LEVELS\\LEVEL1.LVL;1"};
|
||||
static char* GameLevelList[] = {"cdrom:\\DATA\\LEVELS\\LEVEL1.LVL;1"};
|
||||
static uint16_t GameLevelBuffer[GAME_MAX_MAP_SIZE];
|
||||
|
||||
static uint8_t GameLevelColumns;
|
||||
|
@ -866,13 +894,6 @@ void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
|
|||
CameraMoveToIsoPos(ptrPlayer, IsoPos);
|
||||
}
|
||||
|
||||
if(System1SecondTick() == true)
|
||||
{
|
||||
dprintf("ptrPlayer = 0x%08X\n", ptrPlayer);
|
||||
DEBUG_PRINT_VAR(ptrPlayer->ActiveAircraft);
|
||||
DEBUG_PRINT_VAR(ptrPlayer->FlightDataPage);
|
||||
}
|
||||
|
||||
GameActiveAircraftList(ptrPlayer, ptrFlightData);
|
||||
GameStateUnboarding(ptrPlayer, ptrFlightData);
|
||||
GameStateLockTarget(ptrPlayer, ptrFlightData);
|
||||
|
@ -1181,9 +1202,6 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* ptrPlayer)
|
|||
GameBuildingSpr.w = GameBuildingData[CurrentBuilding].w;
|
||||
GameBuildingSpr.h = GameBuildingData[CurrentBuilding].h;
|
||||
|
||||
//DEBUG_PRINT_VAR(buildingIsoPos.x);
|
||||
//DEBUG_PRINT_VAR(buildingIsoPos.y);
|
||||
|
||||
CameraApplyCoordinatesToSprite(ptrPlayer, &GameBuildingSpr);
|
||||
|
||||
for(k = 0; k < GAME_MAX_AIRCRAFT_PER_TILE; k++)
|
||||
|
@ -1409,6 +1427,8 @@ void GameAircraftState(uint8_t i)
|
|||
FlightData.State[i] = STATE_APPROACH;
|
||||
GameAircraftCreatedFlag = true;
|
||||
|
||||
SfxPlaySound(&ApproachSnds[SystemRand(SOUND_M1_INDEX, MAX_RADIO_CHATTER_SOUNDS - 1)]);
|
||||
|
||||
// Create notification request for incoming aircraft
|
||||
GameGuiBubbleShow();
|
||||
}
|
||||
|
@ -1908,6 +1928,8 @@ void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrF
|
|||
}
|
||||
|
||||
target_tile = GameLevelBuffer[ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]];
|
||||
|
||||
SfxPlaySound(&BeepSnd);
|
||||
|
||||
switch(target_tile)
|
||||
{
|
||||
|
@ -2021,6 +2043,8 @@ void GameStateSelectTaxiwayParking(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptr
|
|||
Serial_printf("target_tile = %d, TILE_PARKING = %d\n",
|
||||
target_tile,
|
||||
TILE_PARKING);
|
||||
|
||||
SfxPlaySound(&BeepSnd);
|
||||
|
||||
if( (target_tile == TILE_PARKING)
|
||||
||
|
||||
|
@ -2262,6 +2286,7 @@ void GameSelectAircraftFromList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli
|
|||
case STATE_READY_FOR_TAKEOFF:
|
||||
ptrFlightData->State[AircraftIdx] = STATE_TAKEOFF;
|
||||
GameCreateTakeoffWaypoints(ptrPlayer, ptrFlightData, AircraftIdx);
|
||||
SfxPlaySound(&TakeoffSnd);
|
||||
break;
|
||||
|
||||
case STATE_HOLDING_RWY:
|
||||
|
@ -2298,6 +2323,19 @@ void GameSelectAircraftFromList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli
|
|||
Serial_printf("aircraftState = %d\n", aircraftState);
|
||||
Serial_printf("AircraftIdx = %d\n", AircraftIdx);
|
||||
}
|
||||
else if(ptrPlayer->PadKeySinglePress_Callback(PAD_L1) == true)
|
||||
{
|
||||
FL_STATE* AircraftState = &FlightData.State[ptrPlayer->FlightDataSelectedAircraft];
|
||||
|
||||
if(*AircraftState == STATE_TAXIING)
|
||||
{
|
||||
*AircraftState = STATE_STOPPED;
|
||||
}
|
||||
else if(*AircraftState == STATE_STOPPED)
|
||||
{
|
||||
*AircraftState = STATE_TAXIING;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2456,15 +2494,6 @@ void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli
|
|||
// Remember that ptrPlayer->SelectedAircraft contains an index to
|
||||
// be used with ptrFlightData.
|
||||
|
||||
/*typedef enum t_flstate
|
||||
{
|
||||
STATE_IDLE = 0,
|
||||
STATE_PARKED,
|
||||
STATE_TAXIING,
|
||||
STATE_APPROACH,
|
||||
STATE_FINAL
|
||||
}FL_STATE;*/
|
||||
|
||||
Serial_printf("aircraftIndex = %d\n",aircraftIndex);
|
||||
|
||||
if(ptrFlightData->State[aircraftIndex] == STATE_APPROACH)
|
||||
|
@ -2511,6 +2540,8 @@ void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli
|
|||
Serial_printf("Exceeded maximum aircraft number!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
SfxPlaySound(&TowerFinalSnds[SystemRand(SOUND_M1_INDEX, MAX_RADIO_CHATTER_SOUNDS - 1)]);
|
||||
}
|
||||
else if(ptrFlightData->State[aircraftIndex] == STATE_HOLDING_RWY)
|
||||
{
|
||||
|
@ -3297,6 +3328,8 @@ void GameStateUnboarding(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
|
|||
}
|
||||
|
||||
Serial_printf("ptrPlayer->UnboardingSequenceIdx = %d\n", ptrPlayer->UnboardingSequenceIdx);
|
||||
|
||||
SfxPlaySound(&BeepSnd);
|
||||
}
|
||||
else if(ptrPlayer->PadLastKeySinglePressed_Callback() != 0)
|
||||
{
|
||||
|
@ -3348,6 +3381,29 @@ void GameGenerateUnboardingSequence(TYPE_PLAYER* ptrPlayer)
|
|||
Serial_printf("\n");
|
||||
}
|
||||
|
||||
/* *********************************************************************************************************************
|
||||
*
|
||||
* @name: void GameCreateTakeoffWaypoints(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData, uint8_t aircraftIdx)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @param:
|
||||
* TYPE_PLAYER* ptrPlayer:
|
||||
* Pointer to a player structure
|
||||
*
|
||||
* TYPE_FLIGHT_DATA* ptrFlightData:
|
||||
* In the end, pointer to FlightData data table, which contains
|
||||
* information about all available flights.
|
||||
*
|
||||
* uint8_t aircraftIdx:
|
||||
* Index from FlightData.
|
||||
*
|
||||
* @brief:
|
||||
* Given input aircraft from FlightData, it automatically looks for selected runway and creates an array
|
||||
* of waypoints to be then executed by corresponding TYPE_AIRCRAFT_DATA instance.
|
||||
*
|
||||
* *********************************************************************************************************************/
|
||||
|
||||
void GameCreateTakeoffWaypoints(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData, uint8_t aircraftIdx)
|
||||
{
|
||||
// Look for aircraft direction by searching TILE_RWY_EXIT
|
||||
|
@ -3415,6 +3471,25 @@ void GameCreateTakeoffWaypoints(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli
|
|||
AircraftAddTargets(AircraftFromFlightDataIndex(aircraftIdx), targets);
|
||||
}
|
||||
|
||||
/* *******************************************************************************************
|
||||
*
|
||||
* @name: void GameGetRunwayEntryTile(uint8_t aircraftIdx, TYPE_RWY_ENTRY_DATA* ptrRwyEntry)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @param:
|
||||
*
|
||||
* uint8_t aircraftIdx:
|
||||
* Index from FlightData. Used to determine target tile.
|
||||
*
|
||||
* TYPE_RWY_ENTRY_DATA* ptrRwyEntry:
|
||||
* Instance to be filled with runway data.
|
||||
*
|
||||
* @brief:
|
||||
* Fills a TYPE_RWY_ENTRY_DATA instance with information about runway.
|
||||
*
|
||||
* *******************************************************************************************/
|
||||
|
||||
void GameGetRunwayEntryTile(uint8_t aircraftIdx, TYPE_RWY_ENTRY_DATA* ptrRwyEntry)
|
||||
{
|
||||
// Look for aircraft direction by searching TILE_RWY_EXIT
|
||||
|
@ -3484,6 +3559,22 @@ void GameGetRunwayEntryTile(uint8_t aircraftIdx, TYPE_RWY_ENTRY_DATA* ptrRwyEntr
|
|||
}
|
||||
}
|
||||
|
||||
/* *******************************************************************************************
|
||||
*
|
||||
* @name: bool GameInsideLevelFromIsoPos(TYPE_ISOMETRIC_FIX16_POS* ptrIsoPos)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @param:
|
||||
*
|
||||
* TYPE_ISOMETRIC_FIX16_POS* ptrIsoPos:
|
||||
* (x, y, z) coordinate data in an isometric system.
|
||||
*
|
||||
* @return:
|
||||
* Returns true if a (x, y, z) coordinate is inside level coordinates. False otherwise.
|
||||
*
|
||||
* *******************************************************************************************/
|
||||
|
||||
bool GameInsideLevelFromIsoPos(TYPE_ISOMETRIC_FIX16_POS* ptrIsoPos)
|
||||
{
|
||||
short x = (short)fix16_to_int(ptrIsoPos->x);
|
||||
|
@ -3512,6 +3603,28 @@ bool GameInsideLevelFromIsoPos(TYPE_ISOMETRIC_FIX16_POS* ptrIsoPos)
|
|||
return false;
|
||||
}
|
||||
|
||||
/* *******************************************************************************************
|
||||
*
|
||||
* @name: void GameRemoveFlight(uint8_t idx, bool successful)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @param:
|
||||
*
|
||||
* uint8_t idx:
|
||||
* Index from FlightData.
|
||||
*
|
||||
* bool successful:
|
||||
* False if flight was lost on timeout, true otherwise.
|
||||
*
|
||||
* @brief:
|
||||
* Actions to be performed when a flight ends, both successfully or not (lost flight).
|
||||
*
|
||||
* @remarks:
|
||||
* GameScore is updated here depending on player actions.
|
||||
*
|
||||
* *******************************************************************************************/
|
||||
|
||||
void GameRemoveFlight(uint8_t idx, bool successful)
|
||||
{
|
||||
uint8_t i;
|
||||
|
@ -3623,6 +3736,26 @@ void GameRemoveFlight(uint8_t idx, bool successful)
|
|||
}
|
||||
}
|
||||
|
||||
/* *******************************************************************************************
|
||||
*
|
||||
* @name: void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @param:
|
||||
*
|
||||
* TYPE_PLAYER* ptrPlayer:
|
||||
* Pointer to a player structure
|
||||
*
|
||||
* TYPE_FLIGHT_DATA* ptrFlightData:
|
||||
* In the end, pointer to FlightData data table, which contains
|
||||
* information about all available flights.
|
||||
*
|
||||
* @brief:
|
||||
* Rebuilds flight data arrray for a specific player.
|
||||
*
|
||||
* *******************************************************************************************/
|
||||
|
||||
void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
|
||||
{
|
||||
uint8_t i;
|
||||
|
@ -3634,7 +3767,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->ActiveAircraftList[ptrPlayer->SelectedAircraft];
|
||||
lastFlightDataIdx = ptrPlayer->FlightDataSelectedAircraft;
|
||||
|
||||
memset(ptrPlayer->ActiveAircraftList, 0, GAME_MAX_AIRCRAFT);
|
||||
ptrPlayer->ActiveAircraft = 0;
|
||||
|
@ -3650,7 +3783,7 @@ void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightD
|
|||
}
|
||||
}
|
||||
|
||||
currentFlightDataIdx = ptrPlayer->ActiveAircraftList[ptrPlayer->SelectedAircraft];
|
||||
currentFlightDataIdx = ptrPlayer->FlightDataSelectedAircraft;
|
||||
|
||||
if(GameAircraftCreatedFlag == true)
|
||||
{
|
||||
|
@ -3662,7 +3795,7 @@ void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightD
|
|||
{
|
||||
for(ptrPlayer->SelectedAircraft = 0; ptrPlayer->SelectedAircraft < FlightData.nAircraft; ptrPlayer->SelectedAircraft++)
|
||||
{
|
||||
if(ptrPlayer->ActiveAircraftList[ptrPlayer->SelectedAircraft] == lastFlightDataIdx)
|
||||
if(ptrPlayer->FlightDataSelectedAircraft == lastFlightDataIdx)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
@ -3672,6 +3805,26 @@ void GameActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightD
|
|||
}
|
||||
}
|
||||
|
||||
/* *******************************************************************************************
|
||||
*
|
||||
* @name: void GameRemainingAircraft(uint8_t i)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @param:
|
||||
*
|
||||
* uint8_t i:
|
||||
* Index from FlightData.
|
||||
*
|
||||
* @brief:
|
||||
* Reportedly, it updates FlightData.nRemainingAircraft depending on game status.
|
||||
*
|
||||
* @remarks:
|
||||
* This function is called nActiveAircraft times. See loop inside GameCalculations()
|
||||
* for further reference.
|
||||
*
|
||||
* *******************************************************************************************/
|
||||
|
||||
void GameRemainingAircraft(uint8_t i)
|
||||
{
|
||||
// Reset iterator when starting from first element.
|
||||
|
@ -3687,19 +3840,28 @@ void GameRemainingAircraft(uint8_t i)
|
|||
}
|
||||
}
|
||||
|
||||
/* *******************************************************************************************
|
||||
*
|
||||
* @name: void GameFinished(uint8_t i)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @param:
|
||||
*
|
||||
* uint8_t i:
|
||||
* Index from FlightData.
|
||||
*
|
||||
* @brief:
|
||||
* Sets GameFinishedFlag if there are no more active aircraft.
|
||||
*
|
||||
* @remarks:
|
||||
* This function is called nActiveAircraft times. See loop inside GameCalculations()
|
||||
* for further reference.
|
||||
*
|
||||
* *******************************************************************************************/
|
||||
|
||||
void GameFinished(uint8_t i)
|
||||
{
|
||||
/*uint8_t i;
|
||||
|
||||
for(i = 0; i < FlightData.nAircraft; i++)
|
||||
{
|
||||
if(FlightData.Finished[i] == false)
|
||||
{
|
||||
// At least one aircraft still not finished
|
||||
return false;
|
||||
}
|
||||
}*/
|
||||
|
||||
if(i == 0)
|
||||
{
|
||||
GameFinishedFlag = true;
|
||||
|
@ -3711,11 +3873,45 @@ void GameFinished(uint8_t i)
|
|||
}
|
||||
}
|
||||
|
||||
/* *******************************************************************************************
|
||||
*
|
||||
* @name: void GameMinimumSpawnTimeout(void)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @param:
|
||||
*
|
||||
* uint8_t i:
|
||||
* Index from FlightData.
|
||||
*
|
||||
* @brief:
|
||||
* Callback automatically executed on GameSpawnMinTime expired. spawnMinTimeFlag is used
|
||||
* to set a minimum time between flight ended and flight spawn.
|
||||
*
|
||||
* *******************************************************************************************/
|
||||
|
||||
void GameMinimumSpawnTimeout(void)
|
||||
{
|
||||
spawnMinTimeFlag = false;
|
||||
}
|
||||
|
||||
/* *******************************************************************************************
|
||||
*
|
||||
* @name: void GameAircraftCollision(uint8_t AircraftIdx)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @param:
|
||||
*
|
||||
* uint8_t AircraftIdx:
|
||||
* Index from FlightData.
|
||||
*
|
||||
* @brief:
|
||||
* Sets GameAircraftCollisionFlag when two or more aircraft collide. This flag is then
|
||||
* checked by Game().
|
||||
*
|
||||
* *******************************************************************************************/
|
||||
|
||||
void GameAircraftCollision(uint8_t AircraftIdx)
|
||||
{
|
||||
GameAircraftCollisionFlag = true;
|
||||
|
|
|
@ -80,6 +80,14 @@ 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,
|
||||
|
@ -593,6 +601,16 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
|
|||
{
|
||||
FontPrintText(&SmallFont, AIRCRAFT_LOCK_TARGET_TEXT_X, AIRCRAFT_LOCK_TARGET_TEXT_Y, "Lock target");
|
||||
}
|
||||
|
||||
if(ptrFlightData->State[ptrPlayer->FlightDataSelectedAircraft] == STATE_STOPPED)
|
||||
{
|
||||
GfxDrawButton(AIRCRAFT_STOP_X, AIRCRAFT_STOP_Y, PAD_L1);
|
||||
FontPrintText(&SmallFont, AIRCRAFT_STOP_TEXT_X, AIRCRAFT_STOP_TEXT_Y, "Resume taxiing");
|
||||
}
|
||||
else if(ptrFlightData->State[ptrPlayer->FlightDataSelectedAircraft] == STATE_TAXIING)
|
||||
{
|
||||
FontPrintText(&SmallFont, AIRCRAFT_STOP_TEXT_X, AIRCRAFT_STOP_TEXT_Y, "Stop immediately");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -843,6 +861,13 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlight
|
|||
AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
|
||||
"Holding" );
|
||||
break;
|
||||
|
||||
case STATE_STOPPED:
|
||||
FontPrintText( &SmallFont,
|
||||
AircraftDataDirection_X + AircraftDataState_X_Offset,
|
||||
AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
|
||||
"Stopped" );
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -46,6 +46,7 @@ typedef enum t_flstate
|
|||
STATE_CLIMBING,
|
||||
STATE_APPROACH,
|
||||
STATE_FINAL,
|
||||
STATE_STOPPED,
|
||||
STATE_LANDED
|
||||
}FL_STATE;
|
||||
|
||||
|
|
|
@ -426,7 +426,7 @@ void ISR_LoadMenuVBlank(void)
|
|||
LOADING_BAR_Y + LOADING_BAR_HEIGHT + 8,
|
||||
strCurrentFile );
|
||||
|
||||
FontSetFlags(&SmallFont, FONT_NOFLAGS);
|
||||
//FontSetFlags(&SmallFont, FONT_NOFLAGS);
|
||||
|
||||
GfxDrawScene_Fast();
|
||||
}
|
||||
|
|
|
@ -1,46 +1,77 @@
|
|||
# Project-wise definitions
|
||||
PROJECT = AIRPORT
|
||||
|
||||
# GNU Toolchain definitions
|
||||
CC = psx-gcc
|
||||
LINKER = psx-gcc
|
||||
GNU_SIZE = mipsel-unknown-elf-size
|
||||
|
||||
# Custom define flags for GCC
|
||||
DEFINE= -DFIXMATH_FAST_SIN -D_PAL_MODE_
|
||||
DEFINE += -DPSXSDK_DEBUG
|
||||
DEFINE += -DNO_CDDA
|
||||
DEFINE += -DNO_INTRO
|
||||
|
||||
#DEFINE += -DSERIAL_INTERFACE
|
||||
PSXSDK_PATH = /usr/local/psxsdk
|
||||
# Compiler flags
|
||||
LIBS= -lfixmath
|
||||
CC_FLAGS = -Wall -Werror -c -Os -Wfatal-errors
|
||||
LINKER = psx-gcc
|
||||
|
||||
# Path definitions
|
||||
PSXSDK_PATH = /usr/local/psxsdk
|
||||
PATH := $(PATH):$(PSXSDK_PATH)/bin/
|
||||
PROJECT_DIR = ~/$(PROJECT)
|
||||
|
||||
PROJECT = AIRPORT
|
||||
PROJECT_DIR = ~/Airport
|
||||
#Uncomment this DEFINE below to use Airport together with OpenSend + QPSXSerial toolchain.
|
||||
#DEFINE += -DSERIAL_INTERFACE
|
||||
|
||||
# PSXSDK tools definitions
|
||||
# ELF2EXE:
|
||||
ELF2EXE = elf2exe
|
||||
ELF2EXE_FLAGS = -mark="A homebrew game created with PSXSDK"
|
||||
LICENSE_FILE = /usr/local/psxsdk/share/licenses/infoeur.dat
|
||||
|
||||
PSXSDK_DIR = /usr/local/psxsdk/bin
|
||||
|
||||
# PCSX-R
|
||||
EMULATOR_DIR = ~/pcsxr
|
||||
EMULATOR = pcsxr.exe
|
||||
SOUND_INTERFACE =
|
||||
# Uncomment the line below if you get no sound output under Linux.
|
||||
#SOUND_INTERFACE += padsp
|
||||
EMULATOR_FLAGS = -nogui -psxout
|
||||
|
||||
# Objects definition
|
||||
# Compiled objects list
|
||||
OBJ_DIR = Obj
|
||||
SRC_DIR = .
|
||||
OBJECTS = $(addprefix $(OBJ_DIR)/,main.o System.o Menu.o Gfx.o Pad.o MainMenuBtnAni.o \
|
||||
LoadMenu.o GameGui.o Sfx.o Camera.o EndAnimation.o \
|
||||
PSXSDKIntro.o PltParser.o Game.o Font.o MemCard.o \
|
||||
Aircraft.o Serial.o Timer.o)
|
||||
|
||||
# Source dependencies:
|
||||
DEPS = $(OBJECTS:.o=.d)
|
||||
|
||||
# CD-DA objects:
|
||||
MUSIC_TRACKS = --track=../Bin/TRACK01.bin --track=../Bin/TRACK02.bin --track=../Bin/TRACK03.bin
|
||||
FFMPEG = ffmpeg
|
||||
FFMPEG_DIR = ../Music/ffmpeg/bin
|
||||
FFMPEG_FLAGS = -f s16le -acodec pcm_s16le
|
||||
|
||||
GNU_SIZE = mipsel-unknown-elf-size
|
||||
# VAG objects:
|
||||
SOURCE_SOUNDS_FOLDER = ../Sounds
|
||||
SOUNDS_FOLDER = ../cdimg/DATA/SOUNDS
|
||||
SOUND_OBJECTS = $(addprefix $(SOUNDS_FOLDER)/, BELL.VAG \
|
||||
ACCEPT.VAG \
|
||||
TRAYCL.VAG \
|
||||
SPINDISK.VAG \
|
||||
BEEP.VAG \
|
||||
TAKEOFF1.VAG \
|
||||
RCTM1F1.VAG \
|
||||
RCPW1A1.VAG \
|
||||
RCPM1A1.VAG )
|
||||
# ------------------------------------
|
||||
# Instructions
|
||||
# ------------------------------------
|
||||
|
||||
OBJECTS = $(addprefix $(OBJ_DIR)/,main.o System.o Menu.o Gfx.o Pad.o MainMenuBtnAni.o \
|
||||
LoadMenu.o GameGui.o Sfx.o Camera.o EndAnimation.o \
|
||||
PSXSDKIntro.o PltParser.o Game.o Font.o MemCard.o \
|
||||
Aircraft.o Serial.o Timer.o)
|
||||
|
||||
DEPS = $(OBJECTS:.o=.d)
|
||||
|
||||
build: levels $(PROJECT).bin
|
||||
build: sounds levels $(PROJECT).bin
|
||||
|
||||
rebuild: clean build
|
||||
|
||||
|
@ -50,6 +81,7 @@ music_objects: $(addprefix ../Music/, TRACK01.bin TRACK02.bin TRACK03.bin)
|
|||
|
||||
clean:
|
||||
rm -f Obj/*.o
|
||||
rm -f ../cdimg/DATA/SOUNDS/*.VAG
|
||||
|
||||
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(OBJ_DIR)/%.d
|
||||
$(CC) $< -o $@ $(DEFINE) $(CC_FLAGS) -MMD
|
||||
|
@ -105,13 +137,11 @@ tiles:
|
|||
bmp2tim ../Sprites/DepArr.bmp ../cdimg/DATA/SPRITES/DEPARR.TIM 16 -org=552,240 -mpink
|
||||
bmp2tim ../Sprites/PageUpDn.bmp ../cdimg/DATA/SPRITES/PAGEUPDN.TIM 16 -org=504,240 -mpink
|
||||
bmp2tim ../Sprites/Bldngs1.bmp ../cdimg/DATA/SPRITES/BLDNGS1.TIM 16 -org=640,128 -mpink
|
||||
|
||||
$(SOUNDS_FOLDER)/%.VAG: $(SOURCE_SOUNDS_FOLDER)/%.wav
|
||||
wav2vag $^ $@
|
||||
|
||||
sounds:
|
||||
rm -f ../cdimg/DATA/SOUNDS/*.VAG
|
||||
wav2vag ../Sounds/Bell.wav ../cdimg/DATA/SOUNDS/BELL.VAG
|
||||
wav2vag ../Sounds/Accept.wav ../cdimg/DATA/SOUNDS/ACCEPT.VAG
|
||||
wav2vag ../Sounds/TrayCl.wav ../cdimg/DATA/SOUNDS/TRAYCL.VAG
|
||||
wav2vag ../Sounds/SpinDisk.wav ../cdimg/DATA/SOUNDS/SPINDISK.VAG
|
||||
sounds: $(SOUND_OBJECTS)
|
||||
|
||||
levels: LEVEL1.LVL LEVEL1.PLT
|
||||
|
||||
|
|
|
@ -63,8 +63,6 @@ bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
|
|||
}
|
||||
|
||||
strPltBuffer = SystemGetBufferAddress();
|
||||
|
||||
dprintf("%s\n", strPltBuffer);
|
||||
|
||||
PltParserResetBuffers(ptrFlightData);
|
||||
|
||||
|
|
21
Source/Sfx.c
21
Source/Sfx.c
|
@ -30,11 +30,16 @@ static uint16_t SfxCddaVolumeReduction;
|
|||
|
||||
void SfxPlaySound(SsVag * sound)
|
||||
{
|
||||
SsPlayVag(sound, sound->cur_voice, MAX_VOLUME - SfxGlobalVolumeReduction, MAX_VOLUME - SfxGlobalVolumeReduction);
|
||||
if(sound->data_size != 0)
|
||||
{
|
||||
SsPlayVag(sound, sound->cur_voice, MAX_VOLUME - SfxGlobalVolumeReduction, MAX_VOLUME - SfxGlobalVolumeReduction);
|
||||
}
|
||||
}
|
||||
|
||||
bool SfxUploadSound(char* file_path, SsVag * vag)
|
||||
{
|
||||
static size_t SPUBytesUsed;
|
||||
|
||||
if(SystemLoadFile(file_path) == false)
|
||||
{
|
||||
return false;
|
||||
|
@ -51,6 +56,20 @@ bool SfxUploadSound(char* file_path, SsVag * vag)
|
|||
voiceIndex++;
|
||||
|
||||
Serial_printf("SPU voices used = %d\n", voiceIndex);
|
||||
|
||||
SPUBytesUsed += vag->data_size;
|
||||
|
||||
if(SPUBytesUsed != 0)
|
||||
{
|
||||
enum
|
||||
{
|
||||
SPU_MAX_ALLOWED_BYTES = 512 * 1024 // 512 KBytes
|
||||
};
|
||||
|
||||
uint16_t percentage = SPUBytesUsed * 100 / SPU_MAX_ALLOWED_BYTES;
|
||||
|
||||
dprintf("SPU usage: %d%%\n", percentage);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
* Defines
|
||||
* *************************************/
|
||||
|
||||
#define FILE_BUFFER_SIZE 0x20014
|
||||
#define FILE_BUFFER_SIZE 0x4AA60
|
||||
|
||||
#define END_STACK_PATTERN (uint32_t) 0x18022015
|
||||
#define BEGIN_STACK_ADDRESS (uint32_t*) 0x801FFF00
|
||||
|
|
Loading…
Reference in New Issue