aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2018-11-29 01:07:06 +0100
committerXavier ASUS <xavi92psx@gmail.com>2018-11-29 01:07:06 +0100
commit9cbaf49e93758b50e82a4d7d42762de242e7f086 (patch)
treeccef6f3880f390783ded88fe844a18cba0fba30c
parent0b60fe23cdbca9df95c8cc2bf978874c29334e69 (diff)
Some important bugfixes.
Added BUILDING_ATC_LOC. Added more levels.
-rw-r--r--Source/Aircraft.c4
-rw-r--r--Source/Airport.geany12
-rwxr-xr-xSource/Exe/AIRPORT.elfbin380004 -> 380216 bytes
-rw-r--r--Source/Exe/AIRPORT.isobin1505280 -> 1513472 bytes
-rw-r--r--Source/Game.c223
-rw-r--r--Source/Game.h2
-rw-r--r--Source/GameGui.c42
-rw-r--r--Source/GameStructures.h12
-rw-r--r--Source/Global_Inc.h1
-rw-r--r--Source/Makefile4
-rw-r--r--Source/MapEditor/MapEditor.pro1
-rw-r--r--Source/MapEditor/MapEditor.pro.user6
-rw-r--r--Source/MapEditor/mainwindow.cpp15
-rw-r--r--Source/MapEditor/settings.ini2
-rw-r--r--Source/Menu.c23
-rw-r--r--Source/PltParser.c5
-rw-r--r--Source/Timer.c9
17 files changed, 226 insertions, 135 deletions
diff --git a/Source/Aircraft.c b/Source/Aircraft.c
index b4c527c..8e6e3ce 100644
--- a/Source/Aircraft.c
+++ b/Source/Aircraft.c
@@ -163,6 +163,7 @@ bool AircraftAddNew( TYPE_FLIGHT_DATA* const ptrFlightData,
ptrAircraft->IsoPos.z = targets[0] % level_columns;
ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 2;
+ ptrAircraft->IsoPos.z += 8;
ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z);
break;
@@ -176,6 +177,7 @@ bool AircraftAddNew( TYPE_FLIGHT_DATA* const ptrFlightData,
ptrAircraft->IsoPos.z = targets[0] / level_columns;
ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 2;
+ ptrAircraft->IsoPos.z += 8;
ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z);
break;
@@ -253,7 +255,7 @@ static AIRCRAFT_LIVERY AircraftLiveryFromFlightNumber(char* strFlightNumber)
int32_t liveryIndex;
char strLivery[4];
- memset(strLivery, 0, 4 * sizeof (char) );
+ memset(strLivery, 0, ARRAY_SIZE(strLivery) );
strncpy(strLivery, strFlightNumber, 3);
diff --git a/Source/Airport.geany b/Source/Airport.geany
index 3603a32..b03b580 100644
--- a/Source/Airport.geany
+++ b/Source/Airport.geany
@@ -28,19 +28,19 @@ long_line_behaviour=1
long_line_column=120
[files]
-current_page=4
+current_page=32
FILE_NAME_0=29974;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FAircraft.c;0;4
FILE_NAME_1=5265;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FCamera.c;0;4
FILE_NAME_2=4555;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FEndAnimation.c;0;4
FILE_NAME_3=6794;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FFont.c;0;4
-FILE_NAME_4=29884;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGame.c;0;4
-FILE_NAME_5=43334;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGameGui.c;0;4
+FILE_NAME_4=40052;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGame.c;0;4
+FILE_NAME_5=38072;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGameGui.c;0;4
FILE_NAME_6=3129;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGfx.c;0;4
FILE_NAME_7=14837;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FLoadMenu.c;0;4
FILE_NAME_8=717;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2Fmain.c;0;4
FILE_NAME_9=745;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMainMenuBtnAni.c;0;4
FILE_NAME_10=30632;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMemCard.c;0;4
-FILE_NAME_11=20468;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMenu.c;0;4
+FILE_NAME_11=3620;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMenu.c;0;4
FILE_NAME_12=3904;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMessage.c;0;4
FILE_NAME_13=11137;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPad.c;0;4
FILE_NAME_14=10976;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPltParser.c;0;4
@@ -61,7 +61,7 @@ FILE_NAME_28=424;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGlobal
FILE_NAME_29=630;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FLoadMenu.h;0;4
FILE_NAME_30=559;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMainMenuBtnAni.h;0;4
FILE_NAME_31=4622;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMemCard.h;0;4
-FILE_NAME_32=387;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMenu.h;0;4
+FILE_NAME_32=253;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMenu.h;0;4
FILE_NAME_33=806;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMessage.h;0;4
FILE_NAME_34=1731;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPad.h;0;4
FILE_NAME_35=762;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPltParser.h;0;4
@@ -70,7 +70,7 @@ FILE_NAME_37=490;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSerial
FILE_NAME_38=815;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSfx.h;0;4
FILE_NAME_39=4207;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSystem.h;0;4
FILE_NAME_40=1066;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FTimer.h;0;4
-FILE_NAME_41=3168;Make;0;EUTF-8;1;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMakefile;0;4
+FILE_NAME_41=2404;Make;0;EUTF-8;1;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMakefile;0;4
FILE_NAME_42=319;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FLevels%2FLEVEL3.PLT;0;4
FILE_NAME_43=319;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FLevels%2FEASY.PLT;0;4
FILE_NAME_44=319;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FLevels%2FLEVEL1.PLT;0;4
diff --git a/Source/Exe/AIRPORT.elf b/Source/Exe/AIRPORT.elf
index 59d0f21..2630e32 100755
--- 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 685c0b1..6e38b9c 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 f36b99e..d208dce 100644
--- a/Source/Game.c
+++ b/Source/Game.c
@@ -441,6 +441,8 @@ void GameInit(const TYPE_GAME_CONFIGURATION* const pGameCfg)
loaded = true;
LOAD_FILES(GameFileList, GameFileDest);
+
+ GameSpawnMinTime = TimerCreate(GAME_MINIMUM_PARKING_SPAWN_TIME, false, GameMinimumSpawnTimeout);
}
LoadMenu( &pGameCfg->PLTPath,
@@ -511,6 +513,7 @@ void GameInit(const TYPE_GAME_CONFIGURATION* const pGameCfg)
memset(&PlayerData[i].Waypoints, 0, sizeof (uint16_t) * PLAYER_MAX_WAYPOINTS);
PlayerData[i].WaypointIdx = 0;
PlayerData[i].LastWaypointIdx = 0;
+ PlayerData[i].RemainingAircraft = 0;
}
aircraftCreated = false;
@@ -535,11 +538,6 @@ void GameInit(const TYPE_GAME_CONFIGURATION* const pGameCfg)
GameMouseSpr.g = NORMAL_LUMINANCE;
GameMouseSpr.b = NORMAL_LUMINANCE;
- if (GameSpawnMinTime != NULL)
- {
- GameSpawnMinTime = TimerCreate(GAME_MINIMUM_PARKING_SPAWN_TIME, false, &GameMinimumSpawnTimeout);
- }
-
spawnMinTimeFlag = false;
GameScore = 0;
@@ -831,17 +829,14 @@ void GameClock(void)
{
if (System1SecondTick())
{
- GameMinutes++;
-
- if (GameMinutes >= 60)
+ if (++GameMinutes >= 60)
{
- GameHour++;
GameMinutes = 0;
- }
- if (GameHour >= 24)
- {
- GameHour = 0;
+ if (++GameHour >= 24)
+ {
+ GameHour = 0;
+ }
}
}
}
@@ -867,24 +862,27 @@ static void GameClockFlights(const uint8_t i)
{
if (System1SecondTick())
{
- if ( (FlightData.Minutes[i] == 0)
- &&
- (FlightData.Hours[i] > 0) )
+ if (FlightData.State[i] != STATE_IDLE)
{
- FlightData.Minutes[i] = 60;
- FlightData.Hours[i]--;
+ if (FlightData.RemainingTime[i] != 0)
+ {
+ FlightData.RemainingTime[i]--;
+ }
}
-
- if (FlightData.Minutes[i] > 0)
+ else
{
- FlightData.Minutes[i]--;
- }
+ if ((FlightData.Minutes[i] == 0)
+ &&
+ FlightData.Hours[i])
+ {
+ FlightData.Minutes[i] = 60;
+ FlightData.Hours[i]--;
+ }
- if ( (FlightData.State[i] != STATE_IDLE)
- &&
- (FlightData.RemainingTime[i] > 0) )
- {
- FlightData.RemainingTime[i]--;
+ if (FlightData.Minutes[i])
+ {
+ FlightData.Minutes[i]--;
+ }
}
}
}
@@ -1150,6 +1148,11 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
BUILDING_ATC_TOWER_V = 0,
BUILDING_ATC_TOWER_W = 29,
BUILDING_ATC_TOWER_H = 34,
+
+ BUILDING_ATC_LOC_U = 87,
+ BUILDING_ATC_LOC_V = 0,
+ BUILDING_ATC_LOC_W = 10,
+ BUILDING_ATC_LOC_H = 34
};
enum
@@ -1171,6 +1174,9 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
BUILDING_ATC_TOWER_ORIGIN_X = 12,
BUILDING_ATC_TOWER_ORIGIN_Y = 20,
+
+ BUILDING_ATC_LOC_ORIGIN_X = 6,
+ BUILDING_ATC_LOC_ORIGIN_Y = 32
};
static const struct
@@ -1201,6 +1207,13 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
{
.IsoPos.x = BUILDING_ATC_LOC_OFFSET_X,
.IsoPos.y = BUILDING_ATC_LOC_OFFSET_Y,
+ .orig_x = BUILDING_ATC_LOC_ORIGIN_X,
+ .orig_y = BUILDING_ATC_LOC_ORIGIN_Y,
+ .u = BUILDING_ATC_LOC_U,
+ .v = BUILDING_ATC_LOC_V,
+ .w = BUILDING_ATC_LOC_W,
+ .h = BUILDING_ATC_LOC_H,
+ // z coordinate set to 0 by default.
},
[BUILDING_ILS] =
@@ -1549,83 +1562,82 @@ static void GameAircraftState(const uint8_t i)
&&
(FlightData.State[i] == STATE_IDLE)
&&
- (FlightData.RemainingTime[i] > 0)
- &&
- (spawnMinTimeFlag == false))
+ (FlightData.RemainingTime[i] != 0))
{
- if ( (FlightData.FlightDirection[i] == DEPARTURE)
- &&
- (FlightData.Parking[i] != 0) )
+ Serial_printf("Aircraft %d should now start...\n", i);
+ if (spawnMinTimeFlag == false)
{
- uint8_t j;
- bool bParkingBusy = false;
-
- for (j = 0; j < FlightData.nAircraft; j++)
+ if ((FlightData.FlightDirection[i] == DEPARTURE)
+ &&
+ FlightData.Parking[i])
{
- if (AircraftFromFlightDataIndex(j)->State != STATE_IDLE)
- {
- const uint16_t* const targets = AircraftGetTargets(j);
+ uint8_t j;
+ bool bParkingBusy = false;
- if (targets != NULL)
+ for (j = 0; j < FlightData.nAircraft; j++)
+ {
+ if (AircraftFromFlightDataIndex(j)->State != STATE_IDLE)
{
- const uint16_t tile = AircraftGetTileFromFlightDataIndex(j);
+ const uint16_t* const targets = AircraftGetTargets(j);
- if (tile == FlightData.Parking[i])
- {
- bParkingBusy = true;
- }
- else if (SystemContains_u16(FlightData.Parking[i], targets, AIRCRAFT_MAX_TARGETS))
+ if (targets != NULL)
{
- bParkingBusy = true;
+ const uint16_t tile = AircraftGetTileFromFlightDataIndex(j);
+
+ if (tile == FlightData.Parking[i])
+ {
+ bParkingBusy = true;
+ }
+ else if (SystemContains_u16(FlightData.Parking[i], targets, AIRCRAFT_MAX_TARGETS))
+ {
+ bParkingBusy = true;
+ }
}
}
}
- }
-
- if (bParkingBusy == false)
- {
- uint16_t target[2] = {0};
- // Arrays are copied to AircraftAddNew, so we create a first and only
- // target which is the parking tile itself, and the second element
- // is just the NULL character.
- // Not an ideal solution, but the best one currently available.
- FlightData.State[i] = STATE_PARKED;
+ if (bParkingBusy == false)
+ {
+ uint16_t target[2] = {0};
+ // Arrays are copied to AircraftAddNew, so we create a first and only
+ // target which is the parking tile itself, and the second element
+ // is just the NULL character.
+ // Not an ideal solution, but the best one currently available.
- aircraftCreated = true;
+ FlightData.State[i] = STATE_PARKED;
- // Create notification request for incoming aircraft
- GameGuiBubbleShow();
+ aircraftCreated = true;
- target[0] = FlightData.Parking[i];
+ // Create notification request for incoming aircraft
+ GameGuiBubbleShow();
- Serial_printf("Target assigned = %d\n", target[0]);
+ target[0] = FlightData.Parking[i];
- if (AircraftAddNew(&FlightData, i, target, GameGetParkingDirection(levelBuffer[target[0]])) == false)
- {
- Serial_printf("Exceeded maximum aircraft number!\n");
- return;
+ if (AircraftAddNew(&FlightData, i, target, GameGetParkingDirection(levelBuffer[target[0]])) == false)
+ {
+ Serial_printf("Exceeded maximum aircraft number!\n");
+ return;
+ }
}
}
- }
- else if (FlightData.FlightDirection[i] == ARRIVAL)
- {
- const uint32_t idx = SystemRand(SOUND_M1_INDEX, ARRAY_SIZE(ApproachSnds));
+ else if (FlightData.FlightDirection[i] == ARRIVAL)
+ {
+ const uint32_t idx = SystemRand(SOUND_M1_INDEX, ARRAY_SIZE(ApproachSnds));
- Serial_printf("Flight %d set to STATE_APPROACH.\n", i);
- FlightData.State[i] = STATE_APPROACH;
- aircraftCreated = true;
+ FlightData.State[i] = STATE_APPROACH;
+ aircraftCreated = true;
- // Play chatter sound.
- SfxPlaySound(&ApproachSnds[idx]);
+ // Play chatter sound.
+ SfxPlaySound(&ApproachSnds[idx]);
- // Create notification request for incoming aircraft
- GameGuiBubbleShow();
+ // Create notification request for incoming aircraft
+ GameGuiBubbleShow();
+ }
}
}
else if ( (FlightData.State[i] != STATE_IDLE)
&&
- (FlightData.RemainingTime[i] == 0) )
+ (FlightData.RemainingTime[i] == 0))
{
// Player(s) lost a flight!
GameRemoveFlight(i, false);
@@ -2600,17 +2612,22 @@ static void GameSelectAircraftFromList(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT
}
else if (ptrPlayer->PadKeySinglePress_Callback(PAD_L1))
{
- FL_STATE* ptrAircraftState = &FlightData.State[ptrPlayer->FlightDataSelectedAircraft];
+ FL_STATE* const ptrAircraftState = &FlightData.State[ptrPlayer->FlightDataSelectedAircraft];
- if (*ptrAircraftState == STATE_TAXIING)
- {
- *ptrAircraftState = STATE_USER_STOPPED;
- }
- else if ( (*ptrAircraftState == STATE_USER_STOPPED)
- ||
- (*ptrAircraftState == STATE_AUTO_STOPPED) )
+ switch (*ptrAircraftState)
{
- *ptrAircraftState = STATE_TAXIING;
+ case STATE_TAXIING:
+ *ptrAircraftState = STATE_USER_STOPPED;
+ break;
+
+ case STATE_USER_STOPPED:
+ // Fall through.
+ case STATE_AUTO_STOPPED:
+ *ptrAircraftState = STATE_TAXIING;
+ break;
+
+ default:
+ break;
}
}
}
@@ -3767,6 +3784,8 @@ static void GameCreateTakeoffWaypoints(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT
return;
}
+ DEBUG_PRINT_VAR(AircraftGetTileFromFlightDataIndex(aircraftIdx));
+
for (currentTile = (AircraftGetTileFromFlightDataIndex(aircraftIdx) + rwyStep);
((levelBuffer[currentTile] & ~(TILE_MIRROR_FLAG)) != TILE_RWY_START_1)
&&
@@ -3786,14 +3805,15 @@ static void GameCreateTakeoffWaypoints(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT
}
for ( currentTile = (AircraftGetTileFromFlightDataIndex(aircraftIdx) + rwyStep);
- (levelBuffer[currentTile] & ~(TILE_MIRROR_FLAG)) != TILE_RWY_EXIT;
+ ((levelBuffer[currentTile] & ~(TILE_MIRROR_FLAG)) != TILE_RWY_EXIT)
+ &&
+ ((levelBuffer[currentTile] & ~(TILE_MIRROR_FLAG)) != TILE_RWY_EXIT_2);
currentTile += rwyStep )
{
}
targets[0] = currentTile;
-
AircraftAddTargets(AircraftFromFlightDataIndex(aircraftIdx), targets);
}
}
@@ -3820,7 +3840,7 @@ static void GameCreateTakeoffWaypoints(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT
static void GameGetRunwayEntryTile(uint8_t aircraftIdx, TYPE_RWY_ENTRY_DATA* ptrRwyEntry)
{
// Look for aircraft direction by searching TILE_RWY_EXIT
- uint16_t currentTile = AircraftGetTileFromFlightDataIndex(aircraftIdx) & (uint16_t)~(TILE_MIRROR_FLAG);
+ const uint16_t currentTile = AircraftGetTileFromFlightDataIndex(aircraftIdx);
int16_t step = 0;
uint16_t i;
@@ -3865,7 +3885,6 @@ static void GameGetRunwayEntryTile(uint8_t aircraftIdx, TYPE_RWY_ENTRY_DATA* ptr
ptrRwyEntry->rwyEntryTile = 0;
ptrRwyEntry->Direction = NO_DIRECTION;
ptrRwyEntry->rwyStep = 0;
- Serial_printf("GameGetRunwayEntryTile(): could not determine aircraft direction.\n");
return;
}
@@ -3958,7 +3977,7 @@ bool GameInsideLevelFromIsoPos(TYPE_ISOMETRIC_FIX16_POS* ptrIsoPos)
*
* *******************************************************************************************/
-void GameRemoveFlight(uint8_t idx, bool successful)
+void GameRemoveFlight(const uint8_t idx, const bool successful)
{
uint8_t i;
@@ -4019,6 +4038,13 @@ void GameRemoveFlight(uint8_t idx, bool successful)
if (FlightData.State[idx] != STATE_APPROACH)
{
+ if (FlightData.State[idx] == STATE_UNBOARDING)
+ {
+ ptrPlayer->Unboarding = false;
+ ptrPlayer->LockTarget = false;
+ ptrPlayer->LockedAircraft = FLIGHT_DATA_INVALID_IDX;
+ }
+
if (AircraftRemove(idx) == false)
{
Serial_printf("Something went wrong when removing aircraft!\n");
@@ -4106,6 +4132,7 @@ void GameActiveAircraftList(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_DATA* cons
// Then, rebuild aircraft list for current player.
memset(ptrPlayer->ActiveAircraftList, 0, GAME_MAX_AIRCRAFT);
ptrPlayer->ActiveAircraft = 0;
+ ptrPlayer->RemainingAircraft = 0;
for (i = 0; i < FlightData.nAircraft; i++)
{
@@ -4116,6 +4143,10 @@ void GameActiveAircraftList(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_DATA* cons
ptrPlayer->ActiveAircraftList[j++] = i;
ptrPlayer->ActiveAircraft++;
}
+ else if (ptrFlightData->State[i] == STATE_IDLE)
+ {
+ ptrPlayer->RemainingAircraft++;
+ }
}
currentFlightDataIdx = ptrPlayer->ActiveAircraftList[ptrPlayer->SelectedAircraft];
@@ -4162,7 +4193,7 @@ void GameActiveAircraftList(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_DATA* cons
*
* *******************************************************************************************/
-static void GameRemainingAircraft(uint8_t i)
+static void GameRemainingAircraft(const uint8_t i)
{
// Reset iterator when starting from first element.
@@ -4171,7 +4202,9 @@ static void GameRemainingAircraft(uint8_t i)
FlightData.nRemainingAircraft = FlightData.nAircraft;
}
- if (FlightData.Finished[i])
+ if ((FlightData.State[i] != STATE_IDLE)
+ ||
+ FlightData.Finished[i])
{
FlightData.nRemainingAircraft--;
}
diff --git a/Source/Game.h b/Source/Game.h
index 8e25753..107e767 100644
--- a/Source/Game.h
+++ b/Source/Game.h
@@ -51,7 +51,7 @@ uint16_t GameGetTileFromIsoPosition(const TYPE_ISOMETRIC_POS* const IsoPos);
FL_STATE GameGetFlightDataStateFromIdx(uint8_t FlightDataIdx);
uint32_t GameGetScore(void);
bool GameInsideLevelFromIsoPos(TYPE_ISOMETRIC_FIX16_POS* ptrIsoPos);
-void GameRemoveFlight(uint8_t idx, bool successful);
+void GameRemoveFlight(const uint8_t idx, const bool successful);
void GameCalculateRemainingAircraft(void);
void GameAircraftCollision(uint8_t AircraftIdx);
void GameStopFlight(uint8_t AicraftIdx);
diff --git a/Source/GameGui.c b/Source/GameGui.c
index df76051..35a1d3f 100644
--- a/Source/GameGui.c
+++ b/Source/GameGui.c
@@ -385,7 +385,7 @@ bool GameGuiPauseDialog(const TYPE_PLAYER* const ptrPlayer)
void GameGuiCalculateNextAircraftTime(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_DATA* const ptrFlightData)
{
uint8_t i;
- uint16_t minRemainingTime = 0;
+ uint16_t minRemainingTime = USHRT_MAX;
for (i = 0; i < GAME_MAX_AIRCRAFT; i++)
{
@@ -397,11 +397,9 @@ void GameGuiCalculateNextAircraftTime(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_
||
(ptrFlightData->Minutes[i] != 0) ) )
{
- uint16_t seconds = (ptrFlightData->Hours[i] * 60) + (ptrFlightData->Minutes[i]);
+ const uint16_t seconds = (ptrFlightData->Hours[i] * 60) + (ptrFlightData->Minutes[i]);
- if ( (minRemainingTime == 0)
- ||
- (seconds < minRemainingTime) )
+ if (seconds < minRemainingTime)
{
minRemainingTime = seconds;
}
@@ -591,17 +589,29 @@ void GameGuiAircraftList(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_DATA* const p
},
};
- FontPrintText(&SmallFont,
- posData.remainingTime.x,
- posData.remainingTime.y,
- "Remaining aircraft: %d",
- ptrFlightData->nRemainingAircraft);
-
- FontPrintText(&SmallFont,
- posData.aircraftTime.x,
- posData.aircraftTime.y,
- "Next aircraft: %d sec",
- ptrPlayer->NextAircraftTime);
+ if (ptrPlayer->RemainingAircraft
+ &&
+ (ptrPlayer->NextAircraftTime != USHRT_MAX))
+ {
+ FontPrintText(&SmallFont,
+ posData.remainingTime.x,
+ posData.remainingTime.y,
+ "Remaining aircraft: %d",
+ ptrPlayer->RemainingAircraft);
+
+ FontPrintText(&SmallFont,
+ posData.aircraftTime.x,
+ posData.aircraftTime.y,
+ "Next aircraft: %d sec",
+ ptrPlayer->NextAircraftTime);
+ }
+ else
+ {
+ FontPrintText(&SmallFont,
+ posData.remainingTime.x,
+ posData.remainingTime.y,
+ "No aircraft left");
+ }
if (ptrPlayer->ActiveAircraft != 0)
{
diff --git a/Source/GameStructures.h b/Source/GameStructures.h
index 7d271ed..abfe80f 100644
--- a/Source/GameStructures.h
+++ b/Source/GameStructures.h
@@ -36,7 +36,7 @@ typedef enum t_fldir
typedef enum t_flstate
{
- STATE_IDLE = 0,
+ STATE_IDLE,
STATE_PARKED,
STATE_UNBOARDING,
STATE_TAXIING,
@@ -113,11 +113,11 @@ typedef enum t_livery
typedef enum t_direction
{
- NO_DIRECTION = 0,
+ NO_DIRECTION,
DIR_NORTH,
DIR_SOUTH,
DIR_EAST,
- DIR_WEST,
+ DIR_WEST
}DIRECTION;
typedef enum t_aircraftAttitude
@@ -171,7 +171,7 @@ typedef struct
bool Unboarding;
// Stores indexes for player-specific active aircraft
- // Used to relate SelectedAircraft agains FlightData index
+ // Used to relate SelectedAircraft against FlightData index
uint8_t ActiveAircraftList[GAME_MAX_AIRCRAFT];
// Flight direction to be managed by player (see 2-player mode)
FL_DIR FlightDirection;
@@ -212,13 +212,15 @@ typedef struct
uint16_t RwyArray[GAME_MAX_RWY_LENGTH];
// Remaining time for next aircraft (if any).
uint16_t NextAircraftTime;
+ // Number of remaining aircraft in STATE_IDLE.
+ uint16_t RemainingAircraft;
// Pad callbacks.
bool (*const PadKeyPressed_Callback)(unsigned short);
bool (*const PadKeyReleased_Callback)(unsigned short);
bool (*const PadKeySinglePress_Callback)(unsigned short);
bool (*const PadDirectionKeyPressed_Callback)(void);
- unsigned short (*PadLastKeySinglePressed_Callback)(void);
+ unsigned short (*const PadLastKeySinglePressed_Callback)(void);
}TYPE_PLAYER;
typedef enum t_fontflags
diff --git a/Source/Global_Inc.h b/Source/Global_Inc.h
index be2bd43..d15f611 100644
--- a/Source/Global_Inc.h
+++ b/Source/Global_Inc.h
@@ -11,6 +11,7 @@
#include <string.h>
#include <types.h>
#include <fixmath.h>
+#include <limits.h>
#include "Serial.h"
/* *************************************
diff --git a/Source/Makefile b/Source/Makefile
index 2189e97..20027e2 100644
--- a/Source/Makefile
+++ b/Source/Makefile
@@ -83,9 +83,13 @@ LEVEL_OBJECTS = $(addprefix $(OBJ_LEVELS_DIR)/, \
LEVEL1.LVL \
LEVEL2.LVL \
LEVEL3.LVL \
+ LEVEL18.LVL \
+ XAMI.LVL \
LEVEL1.PLT \
LEVEL2.PLT \
LEVEL3.PLT \
+ LEVEL18.PLT \
+ XAMI.PLT \
EASY.PLT \
TUTORIA1.PLT)
diff --git a/Source/MapEditor/MapEditor.pro b/Source/MapEditor/MapEditor.pro
index 3d53cf5..ecb6f8b 100644
--- a/Source/MapEditor/MapEditor.pro
+++ b/Source/MapEditor/MapEditor.pro
@@ -10,7 +10,6 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MapEditor
TEMPLATE = app
-CONFIG += static
QMAKE_CXXFLAGS += -funsigned-char
diff --git a/Source/MapEditor/MapEditor.pro.user b/Source/MapEditor/MapEditor.pro.user
index a31f63f..4d40971 100644
--- a/Source/MapEditor/MapEditor.pro.user
+++ b/Source/MapEditor/MapEditor.pro.user
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.7.2, 2018-11-25T21:05:26. -->
+<!-- Written by QtCreator 4.7.2, 2018-11-27T22:49:44. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@@ -65,7 +65,7 @@
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.12.0 GCC 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.12.0 GCC 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5120.gcc_64_kit</value>
- <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
@@ -312,7 +312,7 @@
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">MapEditor.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory">/home/xavier/Airport/Source/MapEditor</value>
- <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">/home/xavier/Airport/Source/build-MapEditor-Desktop_Qt_5_12_0_GCC_64bit-Debug</value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">/home/xavier/Airport/Source/build-MapEditor-Desktop_Qt_5_12_0_GCC_64bit-Release</value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
diff --git a/Source/MapEditor/mainwindow.cpp b/Source/MapEditor/mainwindow.cpp
index 7282c6a..64f4678 100644
--- a/Source/MapEditor/mainwindow.cpp
+++ b/Source/MapEditor/mainwindow.cpp
@@ -482,6 +482,11 @@ void MainWindow::addBuilding(quint8 CurrentBuilding, const int i, const int j)
BUILDING_ATC_TOWER_V = 0,
BUILDING_ATC_TOWER_W = 29,
BUILDING_ATC_TOWER_H = 34,
+
+ BUILDING_ATC_LOC_U = 87,
+ BUILDING_ATC_LOC_V = 0,
+ BUILDING_ATC_LOC_W = 10,
+ BUILDING_ATC_LOC_H = 34
};
enum
@@ -503,6 +508,9 @@ void MainWindow::addBuilding(quint8 CurrentBuilding, const int i, const int j)
BUILDING_ATC_TOWER_ORIGIN_X = 12,
BUILDING_ATC_TOWER_ORIGIN_Y = 20,
+
+ BUILDING_ATC_LOC_ORIGIN_X = 6,
+ BUILDING_ATC_LOC_ORIGIN_Y = 32
};
static const struct
@@ -521,7 +529,7 @@ void MainWindow::addBuilding(quint8 CurrentBuilding, const int i, const int j)
BUILDING_DATA(BUILDING_HANGAR),
BUILDING_DATA(BUILDING_ILS),
BUILDING_DATA(BUILDING_ATC_TOWER),
- NODATA,
+ BUILDING_DATA(BUILDING_ATC_LOC),
BUILDING_DATA(BUILDING_TERMINAL),
BUILDING_DATA(BUILDING_TERMINAL_2),
BUILDING_DATA(BUILDING_GATE)
@@ -575,6 +583,11 @@ void MainWindow::addBuilding(quint8 CurrentBuilding, const int i, const int j)
cropped = cropped.convertToFormat(QImage::Format_ARGB32); // or maybe other format
+ if (CurrentBuilding & TILE_MIRROR_FLAG)
+ {
+ cropped = cropped.mirrored(true, false);
+ }
+
for (int i = 0; i < cropped.width(); i++)
{
for (int j = 0; j < cropped.height(); j++)
diff --git a/Source/MapEditor/settings.ini b/Source/MapEditor/settings.ini
index f1b65ed..99bbfbc 100644
--- a/Source/MapEditor/settings.ini
+++ b/Source/MapEditor/settings.ini
@@ -1,3 +1,3 @@
[app_settings]
-last_dir=/home/xavier/Airport/Levels/LEVEL2.LVL
+last_dir=/home/xavier/Airport/Levels/LEVEL18.LVL
window_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5U\0\0\x2\xdb\0\0\0\xa5\0\0\0\x1d\0\0\x4<\0\0\x2\xa4\0\0\0\0\x2\0\0\0\x5V\0\0\0\0\0\0\0\x1d\0\0\x5U\0\0\x2\xdb)
diff --git a/Source/Menu.c b/Source/Menu.c
index 74802c4..f3651e2 100644
--- a/Source/Menu.c
+++ b/Source/Menu.c
@@ -32,13 +32,16 @@ typedef enum t_levelId
LEVEL1 = 0,
LEVEL2,
LEVEL3,
+ LEVEL4,
+ LEVEL5,
+
MAX_LEVELS
}LEVEL_ID;
typedef struct t_lvlpltdata
{
LEVEL_ID levelID;
- const char** fileNames[];
+ const char* const* fileNames[];
}TYPE_LVL_PLT_DATA;
typedef enum
@@ -156,7 +159,9 @@ static const char* MainMenuLevelList[] =
{
[LEVEL1] = "DATA\\LEVELS\\LEVEL1.LVL",
[LEVEL2] = "DATA\\LEVELS\\LEVEL2.LVL",
- [LEVEL3] = "DATA\\LEVELS\\LEVEL3.LVL"
+ [LEVEL3] = "DATA\\LEVELS\\LEVEL3.LVL",
+ [LEVEL4] = "DATA\\LEVELS\\XAMI.LVL",
+ [LEVEL5] = "DATA\\LEVELS\\LEVEL18.LVL"
};
static const char** MainMenuPltList[] =
@@ -179,6 +184,18 @@ static const char** MainMenuPltList[] =
{
"DATA\\LEVELS\\LEVEL3.PLT",
NULL
+ },
+
+ [LEVEL4] = (const char*[])
+ {
+ "DATA\\LEVELS\\XAMI.PLT",
+ NULL
+ },
+
+ [LEVEL5] = (const char*[])
+ {
+ "DATA\\LEVELS\\LEVEL18.PLT",
+ NULL
}
};
@@ -542,7 +559,7 @@ static void MainMenuRenderLevelList(void)
for (i = LEVEL1; i < MAX_LEVELS; i++)
{
char baseName[32];
- const size_t maxLength = sizeof (baseName) / sizeof (baseName[0]);
+ const size_t maxLength = ARRAY_SIZE(baseName);
// Update "baseName" with file name + extension.
SystemGetFileBasename(MainMenuLevelList[i], baseName, maxLength);
diff --git a/Source/PltParser.c b/Source/PltParser.c
index 0d97739..a47e3c9 100644
--- a/Source/PltParser.c
+++ b/Source/PltParser.c
@@ -273,7 +273,7 @@ bool PltParserLoadFile(const char* strPath, TYPE_FLIGHT_DATA* const ptrFlightDat
ptrFlightData->Hours[aircraftIndex] = (uint8_t)atoi(strHour);
ptrFlightData->Minutes[aircraftIndex] = (uint8_t)atoi(strMinutes);
- Serial_printf("Aircraft %d time set to %.2d:%.2d.\n", aircraftIndex,
+ Serial_printf("Aircraft %d time set to %02d:%02d.\n", aircraftIndex,
ptrFlightData->Hours[aircraftIndex],
ptrFlightData->Minutes[aircraftIndex] );
break;
@@ -312,6 +312,8 @@ bool PltParserLoadFile(const char* strPath, TYPE_FLIGHT_DATA* const ptrFlightDat
void PltParserResetBuffers(TYPE_FLIGHT_DATA* const ptrFlightData)
{
+ bzero(ptrFlightData, sizeof (TYPE_FLIGHT_DATA));
+#if 0
uint8_t i;
for (i = 0; i < GAME_MAX_AIRCRAFT ; i++)
@@ -326,6 +328,7 @@ void PltParserResetBuffers(TYPE_FLIGHT_DATA* const ptrFlightData)
memset(ptrFlightData->State,STATE_IDLE,GAME_MAX_AIRCRAFT);
memset(ptrFlightData->Parking,0,GAME_MAX_AIRCRAFT);
memset(ptrFlightData->Finished,0,GAME_MAX_AIRCRAFT);
+#endif
}
uint8_t* PltParserGenerateFile(TYPE_PLT_CONFIG* ptrPltConfig)
diff --git a/Source/Timer.c b/Source/Timer.c
index a62723e..cc0f9da 100644
--- a/Source/Timer.c
+++ b/Source/Timer.c
@@ -149,7 +149,14 @@ void TimerHandler(void)
void TimerRestart(TYPE_TIMER* timer)
{
- timer->time = timer->orig_time;
+ if (timer != NULL)
+ {
+ timer->time = timer->orig_time;
+ }
+ else
+ {
+ Serial_printf("TimerRestart: invalid TYPE_TIMER instance\n");
+ }
}
/* *********************************************************************