Bugfix: ptrPlayer->SelectedAircraft was being substracted when == 0 and caused a game crash. Bugfix: aircraft did not stop when DIR_SOUTH.

This commit is contained in:
XaviDCR92 2017-09-23 01:32:26 +02:00
parent 286d13d71d
commit e6d41c59ff
12 changed files with 143 additions and 125 deletions

Binary file not shown.

View File

@ -6,28 +6,30 @@
#For example:
14:55
#Aircraft arrival (or departure) must be set relative to initial time, in HH:MM format.
ARRIVAL;PHX1802;100;00:10;0;360
ARRIVAL;PHX2015;100;00:10;0;360
ARRIVAL;PHX2016;100;00:40;0;360
ARRIVAL;PHX2017;100;00:50;0;360
ARRIVAL;PHX2018;100;01:40;0;360
ARRIVAL;PHX2019;100;01:20;0;360
ARRIVAL;PHX2020;100;02:00;0;360
ARRIVAL;PHX2021;100;00:05;0;360
ARRIVAL;PHX2022;100;00:15;0;360
ARRIVAL;PHX2023;100;00:45;0;360
ARRIVAL;PHX2024;100;01:45;0;360
ARRIVAL;PHX2025;100;01:20;0;360
ARRIVAL;PHX2026;100;01:10;0;360
DEPARTURE;PHX1000;100;00:05;19;180
DEPARTURE;PHX1001;100;00:15;19;180
DEPARTURE;PHX1002;100;00:30;19;180
DEPARTURE;PHX1003;100;00:45;19;180
DEPARTURE;PHX1004;100;01:10;19;180
DEPARTURE;PHX1280;100;01:30;19;180
DEPARTURE;PHX1332;100;00:50;21;180
DEPARTURE;PHX1333;100;01:00;19;180
DEPARTURE;PHX1334;100;01:15;21;180
DEPARTURE;PHX1336;100;01:20;21;180
ARRIVAL;PHX2026;120;00:05;0;360
ARRIVAL;PHX2026;80;00:10;0;360
#ARRIVAL;PHX1802;100;00:10;0;360
#ARRIVAL;PHX2015;100;00:10;0;360
#ARRIVAL;PHX2016;100;00:40;0;360
#ARRIVAL;PHX2017;100;00:50;0;360
#ARRIVAL;PHX2018;100;01:40;0;360
#ARRIVAL;PHX2019;100;01:20;0;360
#ARRIVAL;PHX2020;100;02:00;0;360
#ARRIVAL;PHX2021;100;00:05;0;360
#ARRIVAL;PHX2022;100;00:15;0;360
#ARRIVAL;PHX2023;100;00:45;0;360
#ARRIVAL;PHX2024;100;01:45;0;360
#ARRIVAL;PHX2025;100;01:20;0;360
#ARRIVAL;PHX2026;100;01:10;0;360
#DEPARTURE;PHX1000;100;00:05;19;180
#DEPARTURE;PHX1001;100;00:15;19;180
#DEPARTURE;PHX1002;100;00:30;19;180
#DEPARTURE;PHX1003;100;00:45;19;180
#DEPARTURE;PHX1004;100;01:10;19;180
#DEPARTURE;PHX1280;100;01:30;19;180
#DEPARTURE;PHX1332;100;00:50;21;180
#DEPARTURE;PHX1333;100;01:00;19;180
#DEPARTURE;PHX1334;100;01:15;21;180
#DEPARTURE;PHX1336;100;01:20;21;180
#ARRIVAL;PHX2026;120;00:05;0;360
#ARRIVAL;PHX2026;80;00:10;0;360
DEPARTURE;PHX2026;80;00:05;19;180
DEPARTURE;PHX2026;80;00:05;21;180

View File

@ -57,7 +57,7 @@ static TYPE_CARTESIAN_POS AircraftCenterPos;
static char* AircraftLiveryNamesTable[] = {"PHX", NULL};
static AIRCRAFT_LIVERY AircraftLiveryTable[] = {AIRCRAFT_LIVERY_0, AIRCRAFT_LIVERY_UNKNOWN};
static char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\ARROW.TIM;1" };
static const char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\ARROW.TIM;1" };
static void* GameFileDest[] = { (GsSprite*)&ArrowSpr };
@ -216,8 +216,6 @@ bool AircraftRemove(uint8_t aircraftIdx)
{
if (ptrAircraft->FlightDataIdx == aircraftIdx)
{
DEBUG_PRINT_VAR(ptrAircraft->FlightDataIdx);
DEBUG_PRINT_VAR(aircraftIdx);
ptrAircraft->State = STATE_IDLE;
Serial_printf("Flight %d removed\n", ptrAircraft->FlightDataIdx);
return true;
@ -247,7 +245,6 @@ void AircraftHandler(void)
AircraftSpeed(ptrAircraft);
// Check collision against all other aircraft.
for (j = 0; j < GAME_MAX_AIRCRAFT; j++)
{
TYPE_AIRCRAFT_DATA* ptrOtherAircraft = &AircraftData[j];
@ -293,7 +290,6 @@ void AircraftHandler(void)
{
GameResumeFlightFromAutoStop(ptrAircraft->FlightDataIdx);
}
ptrAircraft->State = GameGetFlightDataStateFromIdx(ptrAircraft->FlightDataIdx);
}
@ -320,7 +316,7 @@ bool AircraftCheckPath(TYPE_AIRCRAFT_DATA* ptrAircraft, TYPE_AIRCRAFT_DATA* ptrO
break;
case AIRCRAFT_DIR_SOUTH:
nextTile = currentTile - GameGetLevelColumns();
nextTile = currentTile + GameGetLevelColumns();
break;
case AIRCRAFT_DIR_NO_DIRECTION:
@ -639,9 +635,12 @@ void AircraftDirection(TYPE_AIRCRAFT_DATA* ptrAircraft)
ptrAircraft->IsoPos.z += AircraftSpeedsTable[AIRCRAFT_SPEED_FINAL_Z];
if (GameInsideLevelFromIsoPos(&ptrAircraft->IsoPos) == true)
if (GameInsideLevelFromIsoPos(&ptrAircraft->IsoPos) == false)
{
GameRemoveFlight(ptrAircraft->FlightDataIdx, true);
// Deactivate TYPE_AIRCRAFT instance.
ptrAircraft->State = STATE_IDLE;
}
}
}

Binary file not shown.

Binary file not shown.

View File

@ -233,16 +233,16 @@ static SsVag BeepSnd;
// Instances for player-specific data
static TYPE_PLAYER PlayerData[MAX_PLAYERS];
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\\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 const 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\\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 ,
@ -255,7 +255,7 @@ static void* GameFileDest[] = { (GsSprite*)&GameTilesetSpr ,
(SsVag*)&TakeoffSnd ,
(SsVag*)&BeepSnd };
static char* GamePlt[] = { "cdrom:\\DATA\\LEVELS\\LEVEL1.PLT;1" };
static const char* GamePlt[] = { "cdrom:\\DATA\\LEVELS\\LEVEL1.PLT;1" };
static void* GamePltDest[] = {(TYPE_FLIGHT_DATA*)&FlightData };
static char* GameLevelList[] = {"cdrom:\\DATA\\LEVELS\\LEVEL1.LVL;1"};
@ -914,23 +914,35 @@ void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
// Recalculate ptrPlayer->SelectedAircraft. In case new aircraft appear, we may be pointing
// to a incorrect instance.
dprintf("GameActiveAircraftList\n");
GameActiveAircraftList(ptrPlayer, ptrFlightData);
dprintf("GameAircraftCollisionFlag\n");
if (GameAircraftCollisionFlag == true)
{
TYPE_ISOMETRIC_POS IsoPos = AircraftGetIsoPos(GameAircraftCollisionIdx);
CameraMoveToIsoPos(ptrPlayer, IsoPos);
}
dprintf("GameStateUnboarding\n");
GameStateUnboarding(ptrPlayer, ptrFlightData);
dprintf("GameStateLockTarget\n");
GameStateLockTarget(ptrPlayer, ptrFlightData);
dprintf("GameStateSelectRunway\n");
GameStateSelectRunway(ptrPlayer, ptrFlightData);
dprintf("GameStateSelectTaxiwayRunway\n");
GameStateSelectTaxiwayRunway(ptrPlayer, ptrFlightData);
dprintf("GameStateSelectTaxiwayParking\n");
GameStateSelectTaxiwayParking(ptrPlayer, ptrFlightData);
dprintf("GameStateShowAircraft\n");
GameStateShowAircraft(ptrPlayer, ptrFlightData);
dprintf("CameraHandler\n");
CameraHandler(ptrPlayer);
dprintf("GameGuiActiveAircraftPage\n");
GameGuiActiveAircraftPage(ptrPlayer, ptrFlightData);
dprintf("GameSelectAircraftFromList\n");
GameSelectAircraftFromList(ptrPlayer, ptrFlightData);
dprintf("Finished GameHandler\n");
}
/* *******************************************************************
@ -1465,6 +1477,7 @@ void GameAircraftState(uint8_t i)
{
// Player(s) lost a flight!
GameRemoveFlight(i, false);
dprintf("Flight %d lost\n", i);
}
}
}
@ -2263,7 +2276,7 @@ void GameGetRunwayArray(void)
* information about all available flights.
*
* @brief:
* Determines actions for aircraft on PAD_CROSS pressed.
* Actions for ptrPlayer->ShowAircraftData.
*
* @remarks:
*
@ -3344,6 +3357,7 @@ void GameStateUnboarding(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
// Flight has finished. Remove aircraft and set finished flag
ptrPlayer->Unboarding = false;
GameRemoveFlight(ptrPlayer->FlightDataSelectedAircraft, true);
dprintf("YO\n");
}
ptrPlayer->UnboardingSequenceIdx = 0;
@ -3604,25 +3618,25 @@ bool GameInsideLevelFromIsoPos(TYPE_ISOMETRIC_FIX16_POS* ptrIsoPos)
if (x < 0)
{
return true;
return false;
}
if (x > (GameLevelColumns << TILE_SIZE_BIT_SHIFT))
{
return true;
return false;
}
if (y < 0)
{
return true;
return false;
}
if (y > (GameLevelColumns << TILE_SIZE_BIT_SHIFT) )
{
return true;
return false;
}
return false;
return true;
}
/* *******************************************************************************************
@ -3694,13 +3708,9 @@ void GameRemoveFlight(uint8_t idx, bool successful)
}
else
{
Serial_printf("1\n");
// GameRwyArray is filled with runway tiles.
GameGetSelectedRunwayArray(GameUsedRwy[k], rwyArray, GAME_MAX_RWY_LENGTH * sizeof(uint16_t) );
Serial_printf("2\n");
if (SystemContains_u16( AircraftGetTileFromFlightDataIndex(idx),
rwyArray,
sizeof(rwyArray) / sizeof(rwyArray[0]) ) == true)
@ -3723,8 +3733,11 @@ void GameRemoveFlight(uint8_t idx, bool successful)
// STATE_APPROACH is the only state which is not linked to a TYPE_AIRCRAFT_DATA instance.
}
ptrPlayer->LockTarget = false;
ptrPlayer->LockedAircraft = FLIGHT_DATA_INVALID_IDX;
if (ptrPlayer->LockedAircraft == idx)
{
ptrPlayer->LockTarget = false;
ptrPlayer->LockedAircraft = FLIGHT_DATA_INVALID_IDX;
}
if (successful == true)
{
@ -3735,9 +3748,12 @@ void GameRemoveFlight(uint8_t idx, bool successful)
GameScore = (GameScore < LOST_FLIGHT_PENALTY)? 0 : (GameScore - LOST_FLIGHT_PENALTY);
}
if (ptrPlayer->SelectedAircraft >= j)
if (ptrPlayer->SelectedAircraft != 0)
{
ptrPlayer->SelectedAircraft--;
if (ptrPlayer->SelectedAircraft >= j)
{
ptrPlayer->SelectedAircraft--;
}
}
FlightData.Passengers[idx] = 0;
@ -3968,7 +3984,7 @@ void GameAircraftCollision(uint8_t AircraftIdx)
void GameStopFlight(uint8_t AircraftIdx)
{
FL_STATE* ptrState = &FlightData.State[AircraftIdx];
if (*ptrState == STATE_TAXIING)
{
// Only allow auto stop under taxi
@ -3992,7 +4008,7 @@ void GameStopFlight(uint8_t AircraftIdx)
* that taxiing can be resumed.
*
* *******************************************************************************************/
void GameResumeFlightFromAutoStop(uint8_t AircraftIdx)
{
FL_STATE* ptrState = &FlightData.State[AircraftIdx];

View File

@ -206,10 +206,10 @@ static bool GameGuiClearPassengersLeft_Flag;
static bool GameGuiBubbleShowFlag;
static bool GameGuiBubbleVibrationFlag;
static char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\BUBBLE.TIM;1" ,
"cdrom:\\DATA\\FONTS\\FONT_1.FNT;1" ,
"cdrom:\\DATA\\SPRITES\\DEPARR.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\PAGEUPDN.TIM;1" };
static const char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\BUBBLE.TIM;1" ,
"cdrom:\\DATA\\FONTS\\FONT_1.FNT;1" ,
"cdrom:\\DATA\\SPRITES\\DEPARR.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\PAGEUPDN.TIM;1" };
static void* GameFileDest[] = {(GsSprite*)&BubbleSpr ,
(TYPE_FONT*)&RadioFont ,

View File

@ -78,7 +78,7 @@ static void LoadMenuInit(void);
static void ISR_LoadMenuVBlank(void);
static bool LoadMenuISRHasEnded(void);
static bool LoadMenuISRHasStarted(void);
static void LoadMenuLoadFileList( char* fileList[], void* dest[],
static void LoadMenuLoadFileList( const char* fileList[], void* dest[],
uint8_t szFileList, uint8_t szDestList);
/* *************************************
@ -91,9 +91,9 @@ static GsSprite LoadMenuTitleSpr;
static GsLine LoadMenuBarLines[LOADING_BAR_N_LINES];
static GsRectangle LoadMenuBarRect;
static char* LoadMenuFiles[] = { "cdrom:\\DATA\\SPRITES\\PLANE.TIM;1",
"cdrom:\\DATA\\SPRITES\\LOADING.TIM;1",
"cdrom:\\DATA\\FONTS\\FONT_2.FNT;1" };
static const char* LoadMenuFiles[] = { "cdrom:\\DATA\\SPRITES\\PLANE.TIM;1",
"cdrom:\\DATA\\SPRITES\\LOADING.TIM;1",
"cdrom:\\DATA\\FONTS\\FONT_2.FNT;1" };
static void* LoadMenuDest[] = { (GsSprite*)&LoadMenuPlaneSpr,
(GsSprite*)&LoadMenuTitleSpr,
@ -439,7 +439,7 @@ bool LoadMenuISRHasStarted(void)
return isr_started;
}
void LoadMenu( char* fileList[],
void LoadMenu( const char* fileList[],
void* dest[],
uint8_t szFileList , uint8_t szDestList)
{
@ -451,11 +451,10 @@ void LoadMenu( char* fileList[],
while (LoadMenuISRHasStarted() == false);
}
LoadMenuLoadFileList(fileList,dest,szFileList,szDestList);
LoadMenuLoadFileList(fileList, dest, szFileList, szDestList);
}
void LoadMenuLoadFileList( char* fileList[], void* dest[],
void LoadMenuLoadFileList( const char* fileList[], void* dest[],
uint8_t szFileList, uint8_t szDestList)
{
char aux_file_name[100];
@ -472,7 +471,7 @@ void LoadMenuLoadFileList( char* fileList[], void* dest[],
for (fileLoadedCount = 0; fileLoadedCount < szFileList ; fileLoadedCount++)
{
strCurrentFile = fileList[fileLoadedCount];
strCurrentFile = (char*)fileList[fileLoadedCount];
if (strCurrentFile == NULL)
{

View File

@ -15,7 +15,7 @@
* Global prototypes
* *************************************/
void LoadMenu( char* fileList[],
void LoadMenu( const char* fileList[],
void* dest[],
uint8_t szFileList , uint8_t szDestList);

View File

@ -38,9 +38,9 @@ EXE_PATH = Exe
# PCSX-R
EMULATOR_DIR = ~/pcsxr
EMULATOR = pcsxr.exe
EMULATOR = pcsxr
# Uncomment the line below if you get no sound output under Linux.
#SOUND_INTERFACE += padsp
SOUND_INTERFACE += padsp
EMULATOR_FLAGS = -nogui -psxout
# Objects definition
@ -110,11 +110,14 @@ SPRITE_OBJECTS += $(addprefix $(OBJ_FONTS_PATH)/, INTROFNT.TIM \
# Instructions
# ------------------------------------
build: $(BIN_TARGET_PATH)/$(PROJECT).bin
$(BIN_TARGET_PATH)/$(PROJECT).bin: $(EXE_PATH)/$(PROJECT).iso
#~ mkpsxiso $< $@ $(LICENSE_FILE) $(MUSIC_TRACKS)
mkpsxiso $< $@ $(LICENSE_FILE)
# $(PROJECT).cue is automatically generated by mkpsxiso
rebuild:
make clean
make build
make $(BIN_TARGET_PATH)/$(PROJECT).bin
-include $(DEPS)
@ -127,7 +130,7 @@ clean:
rm -f $(OBJ_LEVELS_DIR)/*.PLT
rm -f $(OBJ_SPRITES_PATH)/*.TIM
rm -f $(OBJ_FONTS_PATH)/*.TIM
$(OBJ_DIR)/%.d: $(SRC_DIR)/%.c
$(CC) $< $(DEFINE) $(CC_FLAGS) -MM > $@
@ -141,18 +144,14 @@ $(EXE_PATH)/$(PROJECT).elf: $(OBJECTS)
$(EXE_PATH)/$(PROJECT).iso: $(EXE_PATH)/$(PROJECT).exe $(SOUND_OBJECTS) $(LEVEL_OBJECTS) $(SPRITE_OBJECTS)
mkisofs -o $@ -V $(PROJECT) -sysid PLAYSTATION $(CDROM_ROOT)
$(BIN_TARGET_PATH)/$(PROJECT).bin: $(EXE_PATH)/$(PROJECT).iso
#~ mkpsxiso $< $@ $(LICENSE_FILE) $(MUSIC_TRACKS)
mkpsxiso $< $@ $(LICENSE_FILE)
# $(PROJECT).cue is automatically generated by mkpsxiso
$(EXE_PATH)/$(PROJECT).exe: $(EXE_PATH)/$(PROJECT).elf
$(ELF2EXE) $< $@ $(ELF2EXE_FLAGS)
cp $@ $(CDROM_ROOT)
#~ emulator:
#~ export PATH=$$PATH:$(EMULATOR_DIR)
#~ $(EMULATOR) -cdfile $(PROJECT_DIR)/Bin/$(PROJECT).bin $(EMULATOR_FLAGS)
run: $(BIN_TARGET_PATH)/$(PROJECT).bin
export PATH=$$PATH:$(EMULATOR_DIR)
$(EMULATOR) -cdfile $(PROJECT_DIR)/Bin/$(PROJECT).bin $(EMULATOR_FLAGS)
$(OBJ_SPRITES_PATH)/%.TIM: $(SRC_SPRITES_PATH)/%.bmp $(SRC_SPRITES_PATH)/%.flags
$(BMP2TIM) $< $@ `cat $(word 2,$^)`
@ -184,4 +183,4 @@ clean_music:
# ----------------------------------------
# Phony targets
# ----------------------------------------
.PHONY: build sounds clean music levels tiles
.PHONY: sounds clean music

View File

@ -131,20 +131,20 @@ static TYPE_CHEAT StackCheckCheat;
static TYPE_CHEAT DevMenuCheat;
static TYPE_CHEAT SerialCheat;
static char* MainMenuFiles[] = { "cdrom:\\DATA\\SPRITES\\MAINMENU.TIM;1" ,
"cdrom:\\DATA\\SOUNDS\\BELL.VAG;1" ,
"cdrom:\\DATA\\SOUNDS\\ACCEPT.VAG;1" ,
"cdrom:\\DATA\\SPRITES\\BUTTONS.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\MENUSTAR.TIM;1" ,
static const char* MainMenuFiles[] = { "cdrom:\\DATA\\SPRITES\\MAINMENU.TIM;1" ,
"cdrom:\\DATA\\SOUNDS\\BELL.VAG;1" ,
"cdrom:\\DATA\\SOUNDS\\ACCEPT.VAG;1" ,
"cdrom:\\DATA\\SPRITES\\BUTTONS.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\MENUSTAR.TIM;1" ,
#ifndef NO_INTRO
"cdrom:\\DATA\\SPRITES\\PSXDISK.TIM;1" ,
"cdrom:\\DATA\\FONTS\\INTROFNT.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\GPL.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\OPENSRC.TIM;1" ,
"cdrom:\\DATA\\SOUNDS\\TRAYCL.VAG;1" ,
"cdrom:\\DATA\\SOUNDS\\SPINDISK.VAG;1"
"cdrom:\\DATA\\SPRITES\\PSXDISK.TIM;1" ,
"cdrom:\\DATA\\FONTS\\INTROFNT.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\GPL.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\OPENSRC.TIM;1" ,
"cdrom:\\DATA\\SOUNDS\\TRAYCL.VAG;1" ,
"cdrom:\\DATA\\SOUNDS\\SPINDISK.VAG;1"
#endif // NO_INTRO
};
};
static void* MainMenuDest[] = { (GsSprite*)&MenuSpr ,
(SsVag*)&BellSnd ,
@ -207,7 +207,8 @@ void TwoPlayerMenu(void)
void MainMenuInit(void)
{
LoadMenu( MainMenuFiles,MainMenuDest,
LoadMenu( MainMenuFiles,
MainMenuDest,
sizeof(MainMenuFiles) / sizeof(char*) ,
sizeof(MainMenuDest) / sizeof(void*) );
@ -550,7 +551,7 @@ void MainMenuDrawButton(TYPE_MMBtn * btn)
default:
break;
}
MenuSpr.u += btn->offset_u;
MenuSpr.v += btn->offset_v;
MenuSpr.y -= MainMenuBtnAni[btn->timer];

View File

@ -6,28 +6,30 @@
#For example:
14:55
#Aircraft arrival (or departure) must be set relative to initial time, in HH:MM format.
ARRIVAL;PHX1802;100;00:10;0;360
ARRIVAL;PHX2015;100;00:10;0;360
ARRIVAL;PHX2016;100;00:40;0;360
ARRIVAL;PHX2017;100;00:50;0;360
ARRIVAL;PHX2018;100;01:40;0;360
ARRIVAL;PHX2019;100;01:20;0;360
ARRIVAL;PHX2020;100;02:00;0;360
ARRIVAL;PHX2021;100;00:05;0;360
ARRIVAL;PHX2022;100;00:15;0;360
ARRIVAL;PHX2023;100;00:45;0;360
ARRIVAL;PHX2024;100;01:45;0;360
ARRIVAL;PHX2025;100;01:20;0;360
ARRIVAL;PHX2026;100;01:10;0;360
DEPARTURE;PHX1000;100;00:05;19;180
DEPARTURE;PHX1001;100;00:15;19;180
DEPARTURE;PHX1002;100;00:30;19;180
DEPARTURE;PHX1003;100;00:45;19;180
DEPARTURE;PHX1004;100;01:10;19;180
DEPARTURE;PHX1280;100;01:30;19;180
DEPARTURE;PHX1332;100;00:50;21;180
DEPARTURE;PHX1333;100;01:00;19;180
DEPARTURE;PHX1334;100;01:15;21;180
DEPARTURE;PHX1336;100;01:20;21;180
ARRIVAL;PHX2026;120;00:05;0;360
ARRIVAL;PHX2026;80;00:10;0;360
#ARRIVAL;PHX1802;100;00:10;0;360
#ARRIVAL;PHX2015;100;00:10;0;360
#ARRIVAL;PHX2016;100;00:40;0;360
#ARRIVAL;PHX2017;100;00:50;0;360
#ARRIVAL;PHX2018;100;01:40;0;360
#ARRIVAL;PHX2019;100;01:20;0;360
#ARRIVAL;PHX2020;100;02:00;0;360
#ARRIVAL;PHX2021;100;00:05;0;360
#ARRIVAL;PHX2022;100;00:15;0;360
#ARRIVAL;PHX2023;100;00:45;0;360
#ARRIVAL;PHX2024;100;01:45;0;360
#ARRIVAL;PHX2025;100;01:20;0;360
#ARRIVAL;PHX2026;100;01:10;0;360
#DEPARTURE;PHX1000;100;00:05;19;180
#DEPARTURE;PHX1001;100;00:15;19;180
#DEPARTURE;PHX1002;100;00:30;19;180
#DEPARTURE;PHX1003;100;00:45;19;180
#DEPARTURE;PHX1004;100;01:10;19;180
#DEPARTURE;PHX1280;100;01:30;19;180
#DEPARTURE;PHX1332;100;00:50;21;180
#DEPARTURE;PHX1333;100;01:00;19;180
#DEPARTURE;PHX1334;100;01:15;21;180
#DEPARTURE;PHX1336;100;01:20;21;180
#ARRIVAL;PHX2026;120;00:05;0;360
#ARRIVAL;PHX2026;80;00:10;0;360
DEPARTURE;PHX2026;80;00:05;19;180
DEPARTURE;PHX2026;80;00:05;21;180