aboutsummaryrefslogtreecommitdiff
path: root/Source/Game.c
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2018-11-25 21:07:28 +0100
committerXavier ASUS <xavi92psx@gmail.com>2018-11-25 21:07:28 +0100
commitf8f976763b4d272b4801f8b99eb542caa12fc3fe (patch)
treeb7be6622c4a69d7a809305fe16a2b255090d2830 /Source/Game.c
parent64dbf5cdd5c16ab6ccdadcfd66949aba5b8fa1e2 (diff)
downloadairport-f8f976763b4d272b4801f8b99eb542caa12fc3fe.tar.gz
Removed city background.
Fixed some serious issues regarding building and tile data.
Diffstat (limited to 'Source/Game.c')
-rw-r--r--Source/Game.c156
1 files changed, 112 insertions, 44 deletions
diff --git a/Source/Game.c b/Source/Game.c
index 71267d3..ecaff3a 100644
--- a/Source/Game.c
+++ b/Source/Game.c
@@ -49,17 +49,6 @@ typedef struct t_rwyentrydata
uint16_t rwyHeader;
}TYPE_RWY_ENTRY_DATA;
-typedef struct t_buildingdata
-{
- TYPE_ISOMETRIC_POS IsoPos; // Offset inside tile
- short orig_x; // Coordinate X origin inside building sprite
- short orig_y; // Coordinate Y origin inside building sprite
- short w; // Building width
- short h; // Building height
- short u; // Building X offset inside texture page
- short v; // Building Y offset inside texture page
-}TYPE_BUILDING_DATA;
-
typedef struct t_GameLevelBuffer_UVData
{
short u;
@@ -96,21 +85,6 @@ enum
enum
{
- BUILDING_NONE,
- BUILDING_HANGAR,
- BUILDING_ILS,
- BUILDING_ATC_TOWER,
- BUILDING_ATC_LOC,
- BUILDING_TERMINAL,
- BUILDING_TERMINAL_2,
- BUILDING_GATE,
-
- LAST_BUILDING = BUILDING_GATE,
- MAX_BUILDING_ID
-};
-
-enum
-{
TILE_GRASS,
TILE_ASPHALT_WITH_BORDERS,
TILE_WATER,
@@ -1108,6 +1082,21 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
{
enum
{
+ BUILDING_NONE,
+ BUILDING_HANGAR,
+ BUILDING_ILS,
+ BUILDING_ATC_TOWER,
+ BUILDING_ATC_LOC,
+ BUILDING_TERMINAL,
+ BUILDING_TERMINAL_2,
+ BUILDING_GATE,
+
+ LAST_BUILDING = BUILDING_GATE,
+ MAX_BUILDING_ID
+ };
+
+ enum
+ {
BUILDING_ATC_LOC_OFFSET_X = TILE_SIZE >> 1,
BUILDING_ATC_LOC_OFFSET_Y = TILE_SIZE >> 1,
@@ -1120,6 +1109,12 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
BUILDING_HANGAR_OFFSET_X = 4,
BUILDING_HANGAR_OFFSET_Y = TILE_SIZE >> 1,
+ BUILDING_TERMINAL_OFFSET_X = 0,
+ BUILDING_TERMINAL_OFFSET_Y = TILE_SIZE >> 1,
+
+ BUILDING_TERMINAL_2_OFFSET_X = BUILDING_TERMINAL_OFFSET_X,
+ BUILDING_TERMINAL_2_OFFSET_Y = BUILDING_TERMINAL_OFFSET_Y,
+
BUILDING_ATC_TOWER_OFFSET_X = TILE_SIZE >> 2,
BUILDING_ATC_TOWER_OFFSET_Y = TILE_SIZE >> 1,
};
@@ -1137,9 +1132,19 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
BUILDING_GATE_H = 25,
BUILDING_HANGAR_U = 0,
- BUILDING_HANGAR_V = 34,
- BUILDING_HANGAR_W = 51,
- BUILDING_HANGAR_H = 36,
+ BUILDING_HANGAR_V = 0,
+ BUILDING_HANGAR_W = 34,
+ BUILDING_HANGAR_H = 28,
+
+ BUILDING_TERMINAL_U = 0,
+ BUILDING_TERMINAL_V = 34,
+ BUILDING_TERMINAL_W = 51,
+ BUILDING_TERMINAL_H = 36,
+
+ BUILDING_TERMINAL_2_U = 51,
+ BUILDING_TERMINAL_2_V = BUILDING_TERMINAL_V,
+ BUILDING_TERMINAL_2_W = BUILDING_TERMINAL_W,
+ BUILDING_TERMINAL_2_H = BUILDING_TERMINAL_H,
BUILDING_ATC_TOWER_U = 58,
BUILDING_ATC_TOWER_V = 0,
@@ -1155,14 +1160,29 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
BUILDING_GATE_ORIGIN_X = 20,
BUILDING_GATE_ORIGIN_Y = 8,
- BUILDING_HANGAR_ORIGIN_X = 20,
- BUILDING_HANGAR_ORIGIN_Y = 11,
+ BUILDING_TERMINAL_ORIGIN_X = 20,
+ BUILDING_TERMINAL_ORIGIN_Y = 11,
+
+ BUILDING_TERMINAL_2_ORIGIN_X = BUILDING_TERMINAL_ORIGIN_X,
+ BUILDING_TERMINAL_2_ORIGIN_Y = BUILDING_TERMINAL_ORIGIN_Y,
+
+ BUILDING_HANGAR_ORIGIN_X = 16,
+ BUILDING_HANGAR_ORIGIN_Y = 12,
BUILDING_ATC_TOWER_ORIGIN_X = 12,
BUILDING_ATC_TOWER_ORIGIN_Y = 20,
};
- static const TYPE_BUILDING_DATA GameBuildingData[MAX_BUILDING_ID] =
+ static const struct
+ {
+ TYPE_ISOMETRIC_POS IsoPos; // Offset inside tile
+ short orig_x; // Coordinate X origin inside building sprite
+ short orig_y; // Coordinate Y origin inside building sprite
+ short w; // Building width
+ short h; // Building height
+ short u; // Building X offset inside texture page
+ short v; // Building Y offset inside texture page
+ } GameBuildingData[MAX_BUILDING_ID] =
{
[BUILDING_GATE] =
{
@@ -1210,6 +1230,34 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
.h = BUILDING_HANGAR_H,
},
+ [BUILDING_TERMINAL] =
+ {
+ // BUILDING_TERMINAL coordinates inside tile.
+ .IsoPos.x = BUILDING_TERMINAL_OFFSET_X,
+ .IsoPos.y = BUILDING_TERMINAL_OFFSET_Y,
+ // z coordinate set to 0 by default.
+ .orig_x = BUILDING_TERMINAL_ORIGIN_X,
+ .orig_y = BUILDING_TERMINAL_ORIGIN_Y,
+ .u = BUILDING_TERMINAL_U,
+ .v = BUILDING_TERMINAL_V,
+ .w = BUILDING_TERMINAL_W,
+ .h = BUILDING_TERMINAL_H,
+ },
+
+ [BUILDING_TERMINAL_2] =
+ {
+ // BUILDING_TERMINAL_2 coordinates inside tile.
+ .IsoPos.x = BUILDING_TERMINAL_2_OFFSET_X,
+ .IsoPos.y = BUILDING_TERMINAL_2_OFFSET_Y,
+ // z coordinate set to 0 by default.
+ .orig_x = BUILDING_TERMINAL_2_ORIGIN_X,
+ .orig_y = BUILDING_TERMINAL_2_ORIGIN_Y,
+ .u = BUILDING_TERMINAL_2_U,
+ .v = BUILDING_TERMINAL_2_V,
+ .w = BUILDING_TERMINAL_2_W,
+ .h = BUILDING_TERMINAL_2_H,
+ },
+
[BUILDING_ATC_TOWER] =
{
// BUILDING_ATC_TOWER coordinates inside tile.
@@ -1230,7 +1278,13 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
.IsoPos.x = BUILDING_GATE_OFFSET_X,
.IsoPos.y = BUILDING_GATE_OFFSET_Y,
// z coordinate set to 0 by default.
- }
+ .orig_x = BUILDING_GATE_ORIGIN_X,
+ .orig_y = BUILDING_GATE_ORIGIN_Y,
+ .u = BUILDING_GATE_U,
+ .v = BUILDING_GATE_V,
+ .w = BUILDING_GATE_W,
+ .h = BUILDING_GATE_H,
+ },
};
uint16_t tileNr;
@@ -1305,9 +1359,12 @@ void GameRenderBuildingAircraft(TYPE_PLAYER* const ptrPlayer)
short orig_u = GameBuildingSpr.u;
short orig_v = GameBuildingSpr.v;
- TYPE_ISOMETRIC_POS buildingIsoPos = { .x = (columns << (TILE_SIZE_BIT_SHIFT)) + x_bldg_offset,
- .y = (rows << (TILE_SIZE_BIT_SHIFT)) + y_bldg_offset,
- .z = z_bldg_offset };
+ TYPE_ISOMETRIC_POS buildingIsoPos =
+ {
+ .x = (columns << (TILE_SIZE_BIT_SHIFT)) + x_bldg_offset,
+ .y = (rows << (TILE_SIZE_BIT_SHIFT)) + y_bldg_offset,
+ .z = z_bldg_offset
+ };
// Isometric -> Cartesian conversion
TYPE_CARTESIAN_POS buildingCartPos = GfxIsometricToCartesian(&buildingIsoPos);
@@ -1446,15 +1503,31 @@ static void GameLoadLevel(const char* path)
Serial_printf("Game level title: %s\n",GameLevelTitle);
- DEBUG_PRINT_VAR(GameLevelSize);
-
i += LEVEL_TITLE_SIZE;
memset(levelBuffer, 0, GAME_MAX_MAP_SIZE);
i = LEVEL_HEADER_SIZE;
- memcpy(levelBuffer, &ptrBuffer[i], GameLevelSize * sizeof (uint16_t)); // 2 bytes per tile
+ {
+ size_t j;
+ size_t k;
+
+ for (j = LEVEL_HEADER_SIZE, k = 0; k < GameLevelSize; j += sizeof (uint16_t), k++)
+ {
+ levelBuffer[k] = ptrBuffer[j + 1];
+ levelBuffer[k] |= (ptrBuffer[j] << 8);
+ }
+ }
+
+ {
+ size_t i;
+
+ for (i = 0; i < (GameLevelSize * sizeof (uint16_t)); i++)
+ {
+ Serial_printf("levelBuffer[%d] = 0x%02X\n", i, levelBuffer[i]);
+ }
+ }
}
/* ******************************************************************************************
@@ -2699,12 +2772,8 @@ void GameGetSelectedRunwayArray(uint16_t rwyHeader, uint16_t* rwyArray, size_t s
}
}
- //DEBUG_PRINT_VAR(i);
-
rwyArray[i++] = last_tile;
- //DEBUG_PRINT_VAR(rwyArray[i -1]);
-
switch(dir)
{
case DIR_EAST:
@@ -2727,7 +2796,6 @@ void GameGetSelectedRunwayArray(uint16_t rwyHeader, uint16_t* rwyArray, size_t s
// Fall through
default:
Serial_printf("Invalid runway direction.\n");
- DEBUG_PRINT_VAR(rwyHeader);
return;
}