New LEVEL3.

Improvements.
This commit is contained in:
Xavier ASUS 2018-11-24 13:03:52 +01:00
parent ce0027e87f
commit 6c687dd30b
16 changed files with 160 additions and 74 deletions

Binary file not shown.

BIN
Levels/LEVEL3.LVL Normal file

Binary file not shown.

17
Levels/LEVEL3.PLT Normal file
View File

@ -0,0 +1,17 @@
#DEPARTURE/ARRIVAL;Flight number;Passengers;HH:MM;Parking (departure only);Remaining time
#This is a comment example.
#If DEPARTURE, parking must be set
#If ARRIVAL, set parking to zero
#First line must set initial time
#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;PHX1805;125;00:10;0;360
ARRIVAL;PHX1806;125;00:30;0;360
ARRIVAL;PHX1807;125;00:50;0;360
ARRIVAL;PHX1808;125;01:30;0;360
DEPARTURE;PHX1000;53;00:05;152;360
DEPARTURE;PHX1001;53;00:15;153;360
DEPARTURE;PHX1002;53;00:30;154;360
DEPARTURE;PHX1003;53;00:45;155;360

View File

@ -58,20 +58,17 @@ static TYPE_CARTESIAN_POS AircraftCenterPos;
static char* AircraftLiveryNamesTable[] = {"PHX", NULL};
static AIRCRAFT_LIVERY AircraftLiveryTable[] = {AIRCRAFT_LIVERY_0, AIRCRAFT_LIVERY_UNKNOWN};
static const char* GameFileList[] = { "DATA\\SPRITES\\UDNARROW.TIM",
"DATA\\SPRITES\\LFRARROW.TIM" };
static void* GameFileDest[] = { (GsSprite*)&UpDownArrowSpr,
(GsSprite*)&LeftRightArrowSpr };
// Used to quickly link FlightData indexes against AircraftData indexes.
static uint8_t flightDataIdxTable[GAME_MAX_AIRCRAFT];
static const fix16_t AircraftSpeedsTable[] = { [AIRCRAFT_SPEED_IDLE] = 0,
[AIRCRAFT_SPEED_GROUND] = 0x9999,
[AIRCRAFT_SPEED_TAKEOFF] = 0x20000,
[AIRCRAFT_SPEED_FINAL] = 0x10000,
[AIRCRAFT_SPEED_FINAL_Z] = 0x4000 };
static const fix16_t AircraftSpeedsTable[] =
{
[AIRCRAFT_SPEED_IDLE] = 0,
[AIRCRAFT_SPEED_GROUND] = 0x9999,
[AIRCRAFT_SPEED_TAKEOFF] = 0x20000,
[AIRCRAFT_SPEED_FINAL] = 0x10000,
[AIRCRAFT_SPEED_FINAL_Z] = 0x3000
};
/* *************************************
* Local prototypes
@ -115,12 +112,21 @@ void AircraftInit(void)
if (initialised == false)
{
static const char* const GameFileList[] =
{
"DATA\\SPRITES\\UDNARROW.TIM",
"DATA\\SPRITES\\LFRARROW.TIM"
};
static void* const GameFileDest[] =
{
&UpDownArrowSpr,
&LeftRightArrowSpr
};
initialised = true;
LoadMenu( GameFileList,
GameFileDest,
sizeof (GameFileList) / sizeof (GameFileList[0]),
sizeof (GameFileDest) / sizeof (GameFileDest[0]) );
LOAD_FILES(GameFileList, GameFileDest);
}
}
@ -157,7 +163,7 @@ bool AircraftAddNew( TYPE_FLIGHT_DATA* const ptrFlightData,
ptrAircraft->IsoPos.y = fix16_from_int(ptrAircraft->IsoPos.y);
ptrAircraft->IsoPos.z = targets[0] % level_columns;
ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 1;
ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 2;
ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z);
break;
@ -170,7 +176,7 @@ bool AircraftAddNew( TYPE_FLIGHT_DATA* const ptrFlightData,
ptrAircraft->IsoPos.y = 0;
ptrAircraft->IsoPos.z = targets[0] / level_columns;
ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 1;
ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 2;
ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z);
break;

View File

@ -28,34 +28,34 @@ long_line_behaviour=1
long_line_column=120
[files]
current_page=41
FILE_NAME_0=9500;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FAircraft.c;0;4
FILE_NAME_1=5298;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FCamera.c;0;4
current_page=4
FILE_NAME_0=6076;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FAircraft.c;0;4
FILE_NAME_1=266;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FCamera.c;0;4
FILE_NAME_2=4018;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FEndAnimation.c;0;4
FILE_NAME_3=6782;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FFont.c;0;4
FILE_NAME_4=34311;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGame.c;0;4
FILE_NAME_5=9784;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGameGui.c;0;4
FILE_NAME_6=17638;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGfx.c;0;4
FILE_NAME_4=108515;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGame.c;0;4
FILE_NAME_5=20231;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGameGui.c;0;4
FILE_NAME_6=18939;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGfx.c;0;4
FILE_NAME_7=11629;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FLoadMenu.c;0;4
FILE_NAME_8=746;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=26018;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMemCard.c;0;4
FILE_NAME_11=22534;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMenu.c;0;4
FILE_NAME_11=3987;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMenu.c;0;4
FILE_NAME_12=1486;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMessage.c;0;4
FILE_NAME_13=9847;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPad.c;0;4
FILE_NAME_13=7435;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPad.c;0;4
FILE_NAME_14=10669;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPltParser.c;0;4
FILE_NAME_15=8394;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPSXSDKIntro.c;0;4
FILE_NAME_16=1758;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSerial.c;0;4
FILE_NAME_17=1221;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSfx.c;0;4
FILE_NAME_18=22173;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSystem.c;0;4
FILE_NAME_18=23798;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSystem.c;0;4
FILE_NAME_19=2698;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FTimer.c;0;4
FILE_NAME_20=714;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FAircraft.h;0;4
FILE_NAME_20=451;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FAircraft.h;0;4
FILE_NAME_21=848;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FCamera.h;0;4
FILE_NAME_22=529;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FEndAnimation.h;0;4
FILE_NAME_23=1133;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FFont.h;0;4
FILE_NAME_24=1633;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGameGui.h;0;4
FILE_NAME_25=658;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGame.h;0;4
FILE_NAME_26=172;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGameStructures.h;0;4
FILE_NAME_25=413;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGame.h;0;4
FILE_NAME_26=3831;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGameStructures.h;0;4
FILE_NAME_27=3564;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGfx.h;0;4
FILE_NAME_28=406;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FGlobal_Inc.h;0;4
FILE_NAME_29=273;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FLoadMenu.h;0;4
@ -68,9 +68,10 @@ FILE_NAME_35=548;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPltPar
FILE_NAME_36=684;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FPSXSDKIntro.h;0;4
FILE_NAME_37=752;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSerial.h;0;4
FILE_NAME_38=831;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSfx.h;0;4
FILE_NAME_39=421;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FSystem.h;0;4
FILE_NAME_39=3384;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=3393;Make;0;EUTF-8;1;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMakefile;0;4
FILE_NAME_41=2364;Make;0;EUTF-8;1;1;0;%2Fhome%2Fxavier%2FAirport%2FSource%2FMakefile;0;4
FILE_NAME_42=623;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FAirport%2FLevels%2FLEVEL3.PLT;0;4
[VTE]
last_dir=/home/xavier/Airport/Bin

Binary file not shown.

Binary file not shown.

View File

@ -247,34 +247,6 @@ static SsVag BeepSnd;
// Instances for player-specific data
static TYPE_PLAYER PlayerData[MAX_PLAYERS];
static const char* const GameFileList[] =
{
"DATA\\SPRITES\\TILESET1.TIM",
"DATA\\SPRITES\\GAMEPLN.TIM",
"DATA\\SPRITES\\PLNBLUE.CLT",
"DATA\\SPRITES\\MOUSE.TIM",
"DATA\\SPRITES\\BLDNGS1.TIM",
"DATA\\SOUNDS\\RCPW1A1.VAG",
"DATA\\SOUNDS\\RCPM1A1.VAG",
"DATA\\SOUNDS\\RCTM1F1.VAG",
"DATA\\SOUNDS\\TAKEOFF1.VAG",
"DATA\\SOUNDS\\BEEP.VAG"
};
static void* GameFileDest[] =
{
&GameTilesetSpr,
&GamePlaneSpr,
NULL, // CLT files must use NULL pointers
&GameMouseSpr,
&GameBuildingSpr,
&ApproachSnds[SOUND_M1_INDEX],
&ApproachSnds[SOUND_W1_INDEX],
&TowerFinalSnds[SOUND_M1_INDEX],
&TakeoffSnd,
&BeepSnd
};
static void* GamePltDest[] = {(TYPE_FLIGHT_DATA*)&FlightData };
static uint16_t levelBuffer[GAME_MAX_MAP_SIZE];
@ -433,6 +405,34 @@ static bool GamePause(void)
* ***************************************************************************************/
void GameInit(const TYPE_GAME_CONFIGURATION* const pGameCfg)
{
static const char* const GameFileList[] =
{
"DATA\\SPRITES\\TILESET1.TIM",
"DATA\\SPRITES\\GAMEPLN.TIM",
"DATA\\SPRITES\\PLNBLUE.CLT",
"DATA\\SPRITES\\MOUSE.TIM",
"DATA\\SPRITES\\BLDNGS1.TIM",
"DATA\\SOUNDS\\RCPW1A1.VAG",
"DATA\\SOUNDS\\RCPM1A1.VAG",
"DATA\\SOUNDS\\RCTM1F1.VAG",
"DATA\\SOUNDS\\TAKEOFF1.VAG",
"DATA\\SOUNDS\\BEEP.VAG"
};
static void* GameFileDest[] =
{
&GameTilesetSpr,
&GamePlaneSpr,
NULL, // CLT files must use NULL pointers
&GameMouseSpr,
&GameBuildingSpr,
&ApproachSnds[SOUND_M1_INDEX],
&ApproachSnds[SOUND_W1_INDEX],
&TowerFinalSnds[SOUND_M1_INDEX],
&TakeoffSnd,
&BeepSnd
};
uint8_t i;
uint32_t track;
static bool loaded;
@ -1409,7 +1409,7 @@ static void GameLoadLevel(const char* path)
if (strncmp(LevelHeader,LEVEL_MAGIC_NUMBER_STRING,LEVEL_MAGIC_NUMBER_SIZE) != 0)
{
Serial_printf("Invalid level header! Read \"%s\" instead of \"ATC\"\n",LevelHeader);
Serial_printf("Invalid level header! Read \"%s\" instead of " LEVEL_MAGIC_NUMBER_STRING "\n", LevelHeader);
return;
}
@ -3177,6 +3177,7 @@ bool GamePathToTile(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_DATA* const ptrFli
TILE_PARKING,
TILE_RWY_MID,
TILE_RWY_EXIT,
TILE_RWY_EXIT_2,
TILE_TAXIWAY_CORNER_GRASS,
TILE_TAXIWAY_CORNER_GRASS_2,
TILE_TAXIWAY_GRASS,
@ -3315,6 +3316,7 @@ bool GamePathToTile(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_DATA* const ptrFli
TILE_PARKING | TILE_MIRROR_FLAG,
TILE_RWY_MID | TILE_MIRROR_FLAG,
TILE_RWY_EXIT | TILE_MIRROR_FLAG,
TILE_RWY_EXIT_2 | TILE_MIRROR_FLAG,
TILE_TAXIWAY_CORNER_GRASS | TILE_MIRROR_FLAG,
TILE_TAXIWAY_CORNER_GRASS_2 | TILE_MIRROR_FLAG,
TILE_TAXIWAY_GRASS | TILE_MIRROR_FLAG,

View File

@ -79,7 +79,15 @@ SOUND_OBJECTS = $(addprefix $(OBJ_SOUNDS_DIR)/, BELL.VAG \
# Level objects:
SRC_LEVELS_DIR = $(PROJECT_DIR)/Levels
OBJ_LEVELS_DIR = $(CDROM_ROOT)/DATA/LEVELS
LEVEL_OBJECTS = $(addprefix $(OBJ_LEVELS_DIR)/, LEVEL1.LVL LEVEL2.LVL LEVEL2.PLT LEVEL1.PLT EASY.PLT TUTORIA1.PLT)
LEVEL_OBJECTS = $(addprefix $(OBJ_LEVELS_DIR)/, \
LEVEL1.LVL \
LEVEL2.LVL \
LEVEL3.LVL \
LEVEL1.PLT \
LEVEL2.PLT \
LEVEL3.PLT \
EASY.PLT \
TUTORIA1.PLT)
# Sprite objects:
BMP2TIM = bmp2tim

View File

@ -4,13 +4,16 @@
#include <QGraphicsPixmapItem>
#include <QInputDialog>
#include <QMessageBox>
#include <QShortcut>
#define DEFAULT_AIRPORT_NAME QByteArray("Default Airport\0")
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
level_size(0),
selected_item(-1)
selected_item(-1),
tileSet(tr("Space"), this),
tileMoveUp(tr("Up"), this)
{
ui.setupUi(this);
this->setWindowTitle(APP_FULL_NAME);
@ -21,9 +24,13 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui.showNumbers_Checkbox, SIGNAL(stateChanged(int)), this, SLOT(onShowNumbers(int)));
connect(ui.airportName_Label, SIGNAL(textChanged(QString)), this, SLOT(onAirportNameModified(QString)));
connect(&gscene, SIGNAL(positionClicked(QPointF)), this, SLOT(onMapItemClicked(QPointF)));
connect(&gscene, SIGNAL(noItemSelected(void)), this, SLOT(onNoItemSelected(void)));
connect(&gscene, SIGNAL(updateSelectedItem(void)), this, SLOT(onListItemSelected(void)));
connect(&gscene, SIGNAL(positionClicked(QPointF)), this, SLOT(onMapItemClicked(QPointF)));
connect(&gscene, SIGNAL(noItemSelected(void)), this, SLOT(onNoItemSelected(void)));
connect(&gscene, SIGNAL(updateSelectedItem(void)), this, SLOT(onListItemSelected(void)));
// Configure keyboard shortcuts.
connect(&tileSet, SIGNAL(activated()), this, SLOT(onListItemSelected(void)));
connect(&tileMoveUp, SIGNAL(activated(void)), this, SLOT(moveUp(void)));
appSettings();
loadTilesetData();
@ -34,7 +41,10 @@ MainWindow::~MainWindow()
{
foreach (QGraphicsTextItem* it, textItems)
{
delete it;
if (it != nullptr)
{
delete it;
}
}
}
@ -477,6 +487,11 @@ void MainWindow::onAirportNameModified(QString name)
}
}
void MainWindow::moveUp(void)
{
}
void MainWindow::showError(const QString& error)
{
QMessageBox::critical(this, APP_FULL_NAME, error);

View File

@ -6,6 +6,7 @@
#include <QSettings>
#include <QDebug>
#include <QPixmap>
#include <QShortcut>
#include "mygraphicsscene.h"
#include "ui_mainwindow.h"
@ -46,6 +47,8 @@ private:
int selected_item;
QHash<int, QString> tilesetData;
QList<QGraphicsTextItem*> textItems;
QShortcut tileSet;
QShortcut tileMoveUp;
private slots:
void loadMap(void);
@ -58,6 +61,7 @@ private slots:
void onShowNumbers(int);
void onAirportNameModified(QString);
void showError(const QString& error);
void moveUp(void);
};
#endif // MAINWINDOW_H

View File

@ -77,7 +77,7 @@
<string>Show numbers on map</string>
</property>
<property name="checked">
<bool>true</bool>
<bool>false</bool>
</property>
</widget>
</item>

View File

@ -31,6 +31,7 @@ typedef enum t_levelId
{
LEVEL1 = 0,
LEVEL2,
LEVEL3,
MAX_LEVELS
}LEVEL_ID;
@ -154,17 +155,32 @@ static bool isLevelSelected;
static const char* MainMenuLevelList[] =
{
[LEVEL1] = "DATA\\LEVELS\\LEVEL1.LVL",
[LEVEL2] = "DATA\\LEVELS\\LEVEL2.LVL"
[LEVEL2] = "DATA\\LEVELS\\LEVEL2.LVL",
[LEVEL3] = "DATA\\LEVELS\\LEVEL3.LVL"
};
static const char* MainMenuLevel1Plt[] = { "DATA\\LEVELS\\TUTORIA1.PLT",
"DATA\\LEVELS\\LEVEL1.PLT",
"DATA\\LEVELS\\EASY.PLT",
NULL};
static const char** MainMenuPltList[] =
{
[LEVEL1] = (const char*[])
{
"DATA\\LEVELS\\TUTORIA1.PLT",
"DATA\\LEVELS\\LEVEL1.PLT",
"DATA\\LEVELS\\EASY.PLT",
NULL
},
static const char* MainMenuLevel2Plt[] = {"DATA\\LEVELS\\LEVEL2.PLT", NULL};
[LEVEL2] = (const char*[])
{
"DATA\\LEVELS\\LEVEL2.PLT",
NULL
},
static const char** MainMenuPltList[] = {[LEVEL1] = MainMenuLevel1Plt, [LEVEL2] = MainMenuLevel2Plt};
[LEVEL3] = (const char*[])
{
"DATA\\LEVELS\\LEVEL3.PLT",
NULL
}
};
static TYPE_GAME_CONFIGURATION GameCfg;

Binary file not shown.

View File

@ -0,0 +1,17 @@
#DEPARTURE/ARRIVAL;Flight number;Passengers;HH:MM;Parking (departure only);Remaining time
#This is a comment example.
#If DEPARTURE, parking must be set
#If ARRIVAL, set parking to zero
#First line must set initial time
#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;PHX1805;125;00:10;0;360
ARRIVAL;PHX1806;125;00:30;0;360
ARRIVAL;PHX1807;125;00:50;0;360
ARRIVAL;PHX1808;125;01:30;0;360
DEPARTURE;PHX1000;53;00:05;152;360
DEPARTURE;PHX1001;53;00:15;153;360
DEPARTURE;PHX1002;53;00:30;154;360
DEPARTURE;PHX1003;53;00:45;155;360

Binary file not shown.