aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2018-01-03 21:17:28 +0100
committerXaviDCR92 <xavi.dcr@gmail.com>2018-01-03 21:17:28 +0100
commit7d14b5036066d9391d52ab73ca4b26c03e3cb6c2 (patch)
treeffb09d916304aa361946cad00858b178071164e2 /Source
parentb094335404446183954eb1ccaba33f5f4888eacf (diff)
downloadairport-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.c69
-rw-r--r--Source/Exe/AIRPORT.elfbin330072 -> 330500 bytes
-rw-r--r--Source/Exe/AIRPORT.isobin1478656 -> 1480704 bytes
-rw-r--r--Source/Game.c26
-rw-r--r--Source/GameGui.c60
-rw-r--r--Source/GameGui.h2
-rw-r--r--Source/GameStructures.h4
-rw-r--r--Source/Makefile3
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
index bae28c4..33a2f5e 100644
--- a/Source/Exe/AIRPORT.elf
+++ b/Source/Exe/AIRPORT.elf
Binary files differ
diff --git a/Source/Exe/AIRPORT.iso b/Source/Exe/AIRPORT.iso
index 7e7b4cf..34ceefa 100644
--- a/Source/Exe/AIRPORT.iso
+++ b/Source/Exe/AIRPORT.iso
Binary files differ
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 )