diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2018-01-03 21:17:28 +0100 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2018-01-03 21:17:28 +0100 |
| commit | 7d14b5036066d9391d52ab73ca4b26c03e3cb6c2 (patch) | |
| tree | ffb09d916304aa361946cad00858b178071164e2 /Source | |
| parent | b094335404446183954eb1ccaba33f5f4888eacf (diff) | |
| download | airport-7d14b5036066d9391d52ab73ca4b26c03e3cb6c2.tar.gz | |
* Aircraft.c: since "rotate" member != 0 would render ArrowSpr incorrectly, I have created two separate sprites: LeftRightArrowSpr and UpDownArrowSpr. Still, H_FLIP isn't working properly.
* GameGui.c: new function GameGuiCalculateNextAircraftTime(), which calculates remaining time for next aircraft on the list.
* GameStructures.h: new parameter NextAircraftTime for TYPE_PLAYER structures.
* Game.c: added call to new function GameGuiCalculateNextAircraftTime().
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Aircraft.c | 69 | ||||
| -rw-r--r-- | Source/Exe/AIRPORT.elf | bin | 330072 -> 330500 bytes | |||
| -rw-r--r-- | Source/Exe/AIRPORT.iso | bin | 1478656 -> 1480704 bytes | |||
| -rw-r--r-- | Source/Game.c | 26 | ||||
| -rw-r--r-- | Source/GameGui.c | 60 | ||||
| -rw-r--r-- | Source/GameGui.h | 2 | ||||
| -rw-r--r-- | Source/GameStructures.h | 4 | ||||
| -rw-r--r-- | Source/Makefile | 3 |
8 files changed, 125 insertions, 39 deletions
diff --git a/Source/Aircraft.c b/Source/Aircraft.c index 87685ba..8af8ad8 100644 --- a/Source/Aircraft.c +++ b/Source/Aircraft.c @@ -51,15 +51,18 @@ typedef enum t_aircraftSpeeds static TYPE_AIRCRAFT_DATA AircraftData[GAME_MAX_AIRCRAFT];
static uint8_t AircraftIndex;
static GsSprite AircraftSpr;
-static GsSprite ArrowSpr;
+static GsSprite UpDownArrowSpr;
+static GsSprite LeftRightArrowSpr;
static TYPE_ISOMETRIC_POS AircraftCenterIsoPos;
static TYPE_CARTESIAN_POS AircraftCenterPos;
static char* AircraftLiveryNamesTable[] = {"PHX", NULL};
static AIRCRAFT_LIVERY AircraftLiveryTable[] = {AIRCRAFT_LIVERY_0, AIRCRAFT_LIVERY_UNKNOWN};
-static const char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\ARROW.TIM;1" };
+static const char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\UDNARROW.TIM;1",
+ "cdrom:\\DATA\\SPRITES\\LFRARROW.TIM;1" };
-static void* GameFileDest[] = { (GsSprite*)&ArrowSpr };
+static void* GameFileDest[] = { (GsSprite*)&UpDownArrowSpr,
+ (GsSprite*)&LeftRightArrowSpr };
// Used to quickly link FlightData indexes against AircraftData indexes.
static uint8_t AircraftFlightDataIdx_HashTable[GAME_MAX_AIRCRAFT];
@@ -503,38 +506,68 @@ void AircraftRender(TYPE_PLAYER* ptrPlayer, uint8_t aircraftIdx) if (GfxIsSpriteInsideScreenArea(&AircraftSpr) == false)
{
+ bool showLRArrow = false;
+ bool showUPDNArrow = false;
// When aircraft can't be shown on screen,
// show an arrow indicating its position.
if (AircraftSpr.x < 0)
{ - ArrowSpr.x = 0;
+ LeftRightArrowSpr.x = 0;
+ LeftRightArrowSpr.attribute |= H_FLIP;
+ showLRArrow = true;
}
else if (AircraftSpr.x > X_SCREEN_RESOLUTION)
{ - ArrowSpr.x = X_SCREEN_RESOLUTION - ArrowSpr.w;
- ArrowSpr.mx = ArrowSpr.w >> 1;
- ArrowSpr.my = ArrowSpr.h >> 1;
+ LeftRightArrowSpr.x = X_SCREEN_RESOLUTION - (LeftRightArrowSpr.w << 1);
+ LeftRightArrowSpr.attribute &= ~(H_FLIP);
+ showLRArrow = true;
}
- else
- { - ArrowSpr.x = AircraftSpr.x;
- }
-
- if (AircraftSpr.y < 0)
+ else if (AircraftSpr.y < 0)
{
- ArrowSpr.y = 0;
+ UpDownArrowSpr.y = 0;
+ UpDownArrowSpr.attribute &= ~(V_FLIP);
+ showUPDNArrow = true;
}
else if (AircraftSpr.y > Y_SCREEN_RESOLUTION)
{
- ArrowSpr.y = Y_SCREEN_RESOLUTION;
+ UpDownArrowSpr.y = Y_SCREEN_RESOLUTION - (UpDownArrowSpr.h);
+ UpDownArrowSpr.attribute |= V_FLIP;
+ showUPDNArrow = true;
}
- else
+
+ if (showLRArrow != false)
{
- ArrowSpr.y = AircraftSpr.y;
+ LeftRightArrowSpr.y = AircraftSpr.y;
+
+ // First, saturate calculated Y values to {0, Y_SCREEN_RESOLUTION - LeftRightArrowSpr.h}.
+ if (LeftRightArrowSpr.y < 0)
+ { + LeftRightArrowSpr.y = 0; + }
+ else if (LeftRightArrowSpr.y > (Y_SCREEN_RESOLUTION - LeftRightArrowSpr.h) )
+ {
+ LeftRightArrowSpr.y = (Y_SCREEN_RESOLUTION - LeftRightArrowSpr.h);
+ }
+
+ GfxSortSprite(&LeftRightArrowSpr);
}
+ else if (showUPDNArrow != false)
+ {
+ UpDownArrowSpr.x = AircraftSpr.x;
+ + // First, saturate calculated Y values to {0, Y_SCREEN_RESOLUTION - UpDownArrowSpr.h}.
+ if (UpDownArrowSpr.x < 0)
+ {
+ UpDownArrowSpr.x = 0;
+ }
+ else if (UpDownArrowSpr.x > (X_SCREEN_RESOLUTION - (UpDownArrowSpr.w << 1) ) )
+ {
+ UpDownArrowSpr.x = (UpDownArrowSpr.w << 1);
+ }
- GfxSortSprite(&ArrowSpr);
+ GfxSortSprite(&UpDownArrowSpr); + }
}
}
diff --git a/Source/Exe/AIRPORT.elf b/Source/Exe/AIRPORT.elf Binary files differindex bae28c4..33a2f5e 100644 --- a/Source/Exe/AIRPORT.elf +++ b/Source/Exe/AIRPORT.elf diff --git a/Source/Exe/AIRPORT.iso b/Source/Exe/AIRPORT.iso Binary files differindex 7e7b4cf..34ceefa 100644 --- a/Source/Exe/AIRPORT.iso +++ b/Source/Exe/AIRPORT.iso diff --git a/Source/Game.c b/Source/Game.c index 866c6ed..2670dc0 100644 --- a/Source/Game.c +++ b/Source/Game.c @@ -220,7 +220,6 @@ static GsSprite GameMouseSpr; static GsSprite GameBuildingSpr; static GsSprite CityBg1Spr; - static uint16_t GameRwy[GAME_MAX_RUNWAYS]; static TYPE_FLIGHT_DATA FlightData; static uint16_t GameUsedRwy[GAME_MAX_RUNWAYS]; @@ -303,7 +302,6 @@ bool GameFinishedFlag; * @remarks: * * ***************************************************************************************/ - void Game(TYPE_GAME_CONFIGURATION* pGameCfg) { TwoPlayersActive = pGameCfg->TwoPlayers; @@ -346,7 +344,6 @@ void Game(TYPE_GAME_CONFIGURATION* pGameCfg) * True if game has to be exitted, false otherwise. * * ***************************************************************************************/ - bool GameExit(void) { //Serial_printf("GameFinishedFlag...\n"); @@ -388,7 +385,6 @@ bool GameExit(void) * @remarks: * * ***************************************************************************************/ - bool GamePause(void) { TYPE_PLAYER* ptrPlayer; @@ -440,7 +436,6 @@ bool GamePause(void) * Tilesets and buildings are only loaded on first game. Then, only PLT is loaded. * * ***************************************************************************************/ - void GameInit(TYPE_GAME_CONFIGURATION* pGameCfg) { uint8_t i; @@ -602,7 +597,6 @@ void GameInit(TYPE_GAME_CONFIGURATION* pGameCfg) * * * ***************************************************************************************/ - void GameBuildingsInit(void) { enum @@ -739,7 +733,6 @@ void GameBuildingsInit(void) * See PSX_PollPad(), defined on psx.h, and Pad module for further information. * * ***************************************************************************************/ - void GameEmergencyMode(void) { uint8_t i; @@ -841,7 +834,6 @@ void GameEmergencyMode(void) * @remarks: * * ***************************************************************************************/ - void GameGetAircraftTilemap(uint8_t i) { uint16_t tileNr; @@ -886,7 +878,6 @@ void GameGetAircraftTilemap(uint8_t i) * for all CPU-intensive tasks. * * ***************************************************************************************/ - void GameCalculations(void) { uint8_t i; @@ -938,7 +929,6 @@ void GameCalculations(void) * @remarks: * * ***************************************************************************************/ - void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData) { ptrPlayer->SelectedTile = 0; // Reset selected tile if no states @@ -955,6 +945,11 @@ void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData) CameraMoveToIsoPos(ptrPlayer, IsoPos); } + if (System1SecondTick() != false) + { + GameGuiCalculateNextAircraftTime(ptrPlayer, ptrFlightData); + } + GameStateUnboarding(ptrPlayer, ptrFlightData); GameStateLockTarget(ptrPlayer, ptrFlightData); GameStateSelectRunway(ptrPlayer, ptrFlightData); @@ -1080,8 +1075,6 @@ void GameGraphics(void) GfxIncreaseGlobalLuminance(1); } - //~ GsSortCls(0,0,GfxGetGlobalLuminance() >> 1); - while (GsIsDrawing()); for (i = 0; i < MAX_PLAYERS ; i++) @@ -1114,6 +1107,8 @@ void GameGraphics(void) GameGuiAircraftList(ptrPlayer, &FlightData); + GameGuiShowPassengersLeft(ptrPlayer); + GameDrawMouse(ptrPlayer); GameGuiDrawUnboardingSequence(ptrPlayer); @@ -1709,7 +1704,6 @@ void GameRenderTerrainPrecalculations(TYPE_PLAYER* ptrPlayer) TILE_SIZE, TILE_SIZE_H ) == false) { - ptrPlayer->TileData[i].ShowTile = false; continue; } @@ -4061,18 +4055,12 @@ 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->ActiveAircraftList[ptrPlayer->SelectedAircraft] == lastFlightDataIdx) { - dprintf("Recalculated ptrPlayer->SelectedAircraft from %d to %d.\n", - currentFlightDataIdx, - ptrPlayer->SelectedAircraft ); break; } } diff --git a/Source/GameGui.c b/Source/GameGui.c index bda17c2..ebaa6f5 100644 --- a/Source/GameGui.c +++ b/Source/GameGui.c @@ -367,6 +367,46 @@ bool GameGuiPauseDialog(TYPE_PLAYER* ptrPlayer) return false;
}
+
+/* ******************************************************************************************************
+ *
+ * @name: void GameGuiCalculateNextAircraftTime(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
+ *
+ * @author: Xavier Del Campo
+ *
+ * @brief:
+ * Updates ptrPlayer->NextAircraftTime with next aircraft remaining time.
+ *
+ * ******************************************************************************************************/
+void GameGuiCalculateNextAircraftTime(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
+{
+ uint8_t i;
+ uint16_t minRemainingTime = 0;
+ + for (i = 0; i < GAME_MAX_AIRCRAFT; i++)
+ {
+ if ( (ptrFlightData->State[i] == STATE_IDLE)
+ &&
+ ( (ptrPlayer->FlightDirection & ptrFlightData->FlightDirection[i]) != 0)
+ &&
+ ( (ptrFlightData->Hours[i] != 0)
+ ||
+ (ptrFlightData->Minutes[i] != 0) ) )
+ {
+ uint16_t seconds = (ptrFlightData->Hours[i] * 60) + (ptrFlightData->Minutes[i]);
+
+ if ( (minRemainingTime == 0)
+ ||
+ (seconds < minRemainingTime) )
+ {
+ minRemainingTime = seconds;
+ } + } + }
+
+ ptrPlayer->NextAircraftTime = minRemainingTime; +}
+
/* **********************************************************************************************
*
* @name: void GameGuiActiveAircraftPage(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
@@ -469,6 +509,14 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData };
enum
+ { + GAME_GUI_NEXT_AIRCRAFT_TIME_X = GAME_GUI_REMAINING_AIRCRAFT_X,
+ GAME_GUI_NEXT_AIRCRAFT_TIME_Y = GAME_GUI_REMAINING_AIRCRAFT_Y + 8,
+ GAME_GUI_NEXT_AIRCRAFT_TIME_X_2PLAYER = GAME_GUI_REMAINING_AIRCRAFT_X_2PLAYER - 6,
+ GAME_GUI_NEXT_AIRCRAFT_TIME_Y_2PLAYER = GAME_GUI_REMAINING_AIRCRAFT_Y_2PLAYER + 8, + };
+
+ enum
{
AIRCRAFT_STOP_X = 128,
AIRCRAFT_STOP_TEXT_X = AIRCRAFT_STOP_X + 32,
@@ -514,6 +562,12 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData GAME_GUI_REMAINING_AIRCRAFT_Y_2PLAYER,
"Rem. aircraft: %d",
ptrFlightData->nRemainingAircraft );
+
+ FontPrintText( &SmallFont,
+ GAME_GUI_NEXT_AIRCRAFT_TIME_X_2PLAYER,
+ GAME_GUI_NEXT_AIRCRAFT_TIME_Y_2PLAYER,
+ "Next aircraft: %d sec",
+ ptrPlayer->NextAircraftTime );
}
else
{
@@ -522,6 +576,12 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData GAME_GUI_REMAINING_AIRCRAFT_Y,
"Remaining aircraft: %d",
ptrFlightData->nRemainingAircraft );
+
+ FontPrintText( &SmallFont,
+ GAME_GUI_NEXT_AIRCRAFT_TIME_X,
+ GAME_GUI_NEXT_AIRCRAFT_TIME_Y,
+ "Next aircraft: %d sec",
+ ptrPlayer->NextAircraftTime );
}
if (ptrPlayer->ActiveAircraft != 0)
diff --git a/Source/GameGui.h b/Source/GameGui.h index 84542b8..7ad620d 100644 --- a/Source/GameGui.h +++ b/Source/GameGui.h @@ -38,5 +38,7 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData bool GameGuiFinishedDialog(TYPE_PLAYER* ptrPlayer);
void GameGuiAircraftCollision(TYPE_PLAYER* ptrPlayer);
void GameGuiBubbleShow(void);
+void GameGuiShowPassengersLeft(TYPE_PLAYER* ptrPlayer);
+void GameGuiCalculateNextAircraftTime(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData);
#endif //GAME_GUI_HEADER__
diff --git a/Source/GameStructures.h b/Source/GameStructures.h index 17fee7a..51ee103 100644 --- a/Source/GameStructures.h +++ b/Source/GameStructures.h @@ -81,7 +81,7 @@ typedef struct t_cartpos typedef struct t_tileData
{ - bool ShowTile;
+ bool ShowTile;
TYPE_CARTESIAN_POS CartPos;
unsigned char r;
unsigned char g;
@@ -209,6 +209,8 @@ typedef struct TYPE_CAMERA Camera;
// Array of tiles which will change their RGB values when displayed under certain player states.
uint16_t RwyArray[GAME_MAX_RWY_LENGTH];
+ // Remaining time for next aircraft (if any).
+ uint16_t NextAircraftTime;
// Pad callbacks.
bool (*PadKeyPressed_Callback)(unsigned short);
diff --git a/Source/Makefile b/Source/Makefile index 6d906ad..7de5746 100644 --- a/Source/Makefile +++ b/Source/Makefile @@ -101,7 +101,8 @@ SPRITE_OBJECTS = $(addprefix $(OBJ_SPRITES_PATH)/, PSXDISK.TIM \ DEPARR.TIM \ PAGEUPDN.TIM \ BLDNGS1.TIM \ - ARROW.TIM \ + LFRARROW.TIM \ + UDNARROW.TIM \ BCNGW.TIM \ CITYBG1.TIM \ MENUSTAR.TIM ) |
