* Reduced tileset sprite size from 64x64 to 64x48.
* Modified rendering functions to keep up with this size reduction. * Sprites in TIM have been reordered inside VRAM. * Other minor changes.
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
|
@ -10,6 +10,7 @@
|
|||
|
||||
#define AIRCRAFT_SIZE 16
|
||||
#define AIRCRAFT_SIZE_FIX16 fix16_from_int(AIRCRAFT_SIZE)
|
||||
#define AIRCRAFT_INVALID_IDX 0xFF
|
||||
|
||||
/* *************************************
|
||||
* Structs and enums
|
||||
|
@ -17,9 +18,10 @@
|
|||
|
||||
enum
|
||||
{
|
||||
AIRCRAFT_SPRITE_SIZE = 24,
|
||||
AIRCRAFT_SPRITE_W = 24,
|
||||
AIRCRAFT_SPRITE_H = 16,
|
||||
AIRCRAFT_SPRITE_VRAM_X = 800,
|
||||
AIRCRAFT_SPRITE_VRAM_Y = 304,
|
||||
AIRCRAFT_SPRITE_VRAM_Y = 256,
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -49,6 +51,7 @@ 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 uint8_t AircraftFlightDataIdx_HashTable[GAME_MAX_AIRCRAFT];
|
||||
static const fix16_t AircraftSpeedsTable[] = { [AIRCRAFT_SPEED_IDLE] = 0,
|
||||
[AIRCRAFT_SPEED_GROUND] = 0x6666,
|
||||
[AIRCRAFT_SPEED_TAKEOFF] = 0x20000,
|
||||
|
@ -79,8 +82,8 @@ void AircraftInit(void)
|
|||
AircraftSpr.cx = PHX_LIVERY_CLUT_X;
|
||||
AircraftSpr.cy = PHX_LIVERY_CLUT_Y;
|
||||
|
||||
AircraftSpr.w = AIRCRAFT_SPRITE_SIZE;
|
||||
AircraftSpr.h = AIRCRAFT_SPRITE_SIZE;
|
||||
AircraftSpr.w = AIRCRAFT_SPRITE_W;
|
||||
AircraftSpr.h = AIRCRAFT_SPRITE_H;
|
||||
|
||||
/*AircraftSpr.tpage = 28;
|
||||
AircraftSpr.u = 64;
|
||||
|
@ -93,6 +96,10 @@ void AircraftInit(void)
|
|||
AircraftCenterIsoPos.z = 0;
|
||||
|
||||
AircraftCenterPos = GfxIsometricToCartesian(&AircraftCenterIsoPos);
|
||||
|
||||
memset( AircraftFlightDataIdx_HashTable,
|
||||
AIRCRAFT_INVALID_IDX,
|
||||
sizeof(AircraftFlightDataIdx_HashTable) / sizeof(AircraftFlightDataIdx_HashTable[0]) );
|
||||
}
|
||||
|
||||
bool AircraftAddNew( TYPE_FLIGHT_DATA* ptrFlightData,
|
||||
|
@ -139,6 +146,7 @@ bool AircraftAddNew( TYPE_FLIGHT_DATA* ptrFlightData,
|
|||
}
|
||||
|
||||
ptrAircraft->State = ptrFlightData->State[FlightDataIndex];
|
||||
AircraftFlightDataIdx_HashTable[FlightDataIndex] = AircraftIndex;
|
||||
|
||||
ptrAircraft->Direction = AIRCRAFT_DIR_NORTH; // Default to north direction
|
||||
|
||||
|
@ -499,7 +507,7 @@ void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA* ptrAircraft)
|
|||
switch(ptrAircraft->Direction)
|
||||
{
|
||||
case AIRCRAFT_DIR_NORTH:
|
||||
AircraftSpr.v += AircraftSpr.w;
|
||||
AircraftSpr.v += AircraftSpr.h;
|
||||
AircraftSpr.attribute |= H_FLIP;
|
||||
break;
|
||||
|
||||
|
@ -514,7 +522,7 @@ void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA* ptrAircraft)
|
|||
break;
|
||||
|
||||
case AIRCRAFT_DIR_WEST:
|
||||
AircraftSpr.v += AircraftSpr.w;
|
||||
AircraftSpr.v += AircraftSpr.h;
|
||||
AircraftSpr.attribute &= ~(H_FLIP);
|
||||
break;
|
||||
|
||||
|
@ -572,7 +580,16 @@ uint16_t AircraftGetTileFromFlightDataIndex(uint8_t index)
|
|||
|
||||
TYPE_AIRCRAFT_DATA* AircraftFromFlightDataIndex(uint8_t index)
|
||||
{
|
||||
uint8_t i;
|
||||
uint8_t idx = AircraftFlightDataIdx_HashTable[index];
|
||||
|
||||
if(idx == AIRCRAFT_INVALID_IDX)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return &AircraftData[idx];
|
||||
|
||||
/*uint8_t i;
|
||||
TYPE_AIRCRAFT_DATA* ptrAircraft;
|
||||
|
||||
for(i = 0; i < GAME_MAX_AIRCRAFT; i++)
|
||||
|
@ -585,7 +602,7 @@ TYPE_AIRCRAFT_DATA* AircraftFromFlightDataIndex(uint8_t index)
|
|||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return NULL;*/
|
||||
}
|
||||
|
||||
void AircraftFromFlightDataIndexAddTargets(uint8_t index, uint16_t* targets)
|
||||
|
|
|
@ -39,10 +39,6 @@ void CameraApplyCoordinatesToSprite(TYPE_PLAYER* ptrPlayer, GsSprite * spr)
|
|||
|
||||
void CameraApplyCoordinatesToRectangle(TYPE_PLAYER* ptrPlayer, GsRectangle * rect)
|
||||
{
|
||||
dprintf("Rectangle {%d, %d}\n",
|
||||
rect->x,
|
||||
rect->y );
|
||||
|
||||
rect->x += (short)ptrPlayer->Camera.X_Offset;
|
||||
rect->y += (short)ptrPlayer->Camera.Y_Offset;
|
||||
}
|
||||
|
|
52108
Source/Exe/AIRPORT.s
240
Source/Game.c
|
@ -39,49 +39,6 @@ typedef struct t_rwyentrydata
|
|||
uint16_t rwyHeader;
|
||||
}TYPE_RWY_ENTRY_DATA;
|
||||
|
||||
enum
|
||||
{
|
||||
TILE_GRASS = 0,
|
||||
TILE_ASPHALT_WITH_BORDERS,
|
||||
TILE_WATER,
|
||||
TILE_ASPHALT,
|
||||
TILE_HANGAR,
|
||||
TILE_ILS,
|
||||
TILE_ATC_TOWER,
|
||||
TILE_ATC_LOC,
|
||||
TILE_RWY_MID,
|
||||
TILE_RWY_START_1,
|
||||
TILE_RWY_START_2,
|
||||
TILE_PARKING,
|
||||
TILE_PARKING_2,
|
||||
TILE_TAXIWAY_INTERSECT_GRASS,
|
||||
TILE_TAXIWAY_GRASS,
|
||||
TILE_TAXIWAY_CORNER_GRASS,
|
||||
|
||||
LAST_TILE_TILESET1 = TILE_TAXIWAY_CORNER_GRASS
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
TILE_HALF_WATER_1 = LAST_TILE_TILESET1 + 1,
|
||||
TILE_HALF_WATER_2,
|
||||
TILE_RESERVED_2,
|
||||
TILE_RESERVED_3,
|
||||
TILE_AIRPORT_BUILDING,
|
||||
TILE_PLANE,
|
||||
TILE_RWY_HOLDING_POINT,
|
||||
TILE_RWY_HOLDING_POINT_2,
|
||||
TILE_RWY_EXIT,
|
||||
TILE_GATE,
|
||||
TILE_RESERVED_6,
|
||||
TILE_RESERVED_7,
|
||||
TILE_TAXIWAY_CORNER_GRASS_2,
|
||||
|
||||
LAST_TILE_TILESET2 = TILE_TAXIWAY_CORNER_GRASS_2,
|
||||
|
||||
TILE_NOTHING = 0xFF
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
MOUSE_W = 8,
|
||||
|
@ -110,6 +67,52 @@ enum
|
|||
UNBOARDING_PASSENGERS_PER_SEQUENCE = 100
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
BUILDING_HANGAR = 0,
|
||||
BUILDING_ILS,
|
||||
BUILDING_ATC_TOWER,
|
||||
BUILDING_ATC_LOC,
|
||||
BUILDING_TERMINAL,
|
||||
BUILDING_TERMINAL_2,
|
||||
BUILDING_GATE,
|
||||
|
||||
LAST_BUILDING = BUILDING_GATE
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
TILE_GRASS = 0,
|
||||
TILE_ASPHALT_WITH_BORDERS,
|
||||
TILE_WATER,
|
||||
TILE_ASPHALT,
|
||||
|
||||
TILE_RWY_MID,
|
||||
TILE_RWY_START_1,
|
||||
TILE_RWY_START_2,
|
||||
TILE_PARKING,
|
||||
|
||||
TILE_PARKING_2,
|
||||
TILE_TAXIWAY_INTERSECT_GRASS,
|
||||
TILE_TAXIWAY_GRASS,
|
||||
TILE_TAXIWAY_CORNER_GRASS,
|
||||
|
||||
TILE_HALF_WATER_1,
|
||||
TILE_HALF_WATER_2,
|
||||
TILE_RWY_HOLDING_POINT,
|
||||
TILE_RWY_HOLDING_POINT_2,
|
||||
|
||||
TILE_RWY_EXIT,
|
||||
TILE_TAXIWAY_CORNER_GRASS_2,
|
||||
|
||||
LAST_TILE_TILESET1 = TILE_TAXIWAY_CORNER_GRASS_2
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
LAST_TILE_TILESET2 = LAST_TILE_TILESET1
|
||||
};
|
||||
|
||||
/* *************************************
|
||||
* Local Prototypes
|
||||
* *************************************/
|
||||
|
@ -183,21 +186,19 @@ static uint8_t GameAircraftCollisionIdx;
|
|||
TYPE_PLAYER PlayerData[MAX_PLAYERS];
|
||||
|
||||
static char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\TILESET1.TIM;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\TILESET2.TIM;1" ,
|
||||
"cdrom:\\DATA\\LEVELS\\LEVEL1.PLT;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\GAMEPLN.TIM;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\PLNBLUE.CLT;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\MOUSE.TIM;1" };
|
||||
"cdrom:\\DATA\\LEVELS\\LEVEL1.PLT;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\GAMEPLN.TIM;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\PLNBLUE.CLT;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\MOUSE.TIM;1" };
|
||||
|
||||
static void * GameFileDest[] = { (GsSprite*)&GameTilesetSpr ,
|
||||
(GsSprite*)&GameTileset2Spr ,
|
||||
(TYPE_FLIGHT_DATA*)&FlightData ,
|
||||
(GsSprite*)&GamePlaneSpr ,
|
||||
NULL ,
|
||||
(GsSprite*)&GameMouseSpr };
|
||||
static void * GameFileDest[] = {(GsSprite*)&GameTilesetSpr ,
|
||||
(TYPE_FLIGHT_DATA*)&FlightData ,
|
||||
(GsSprite*)&GamePlaneSpr ,
|
||||
NULL ,
|
||||
(GsSprite*)&GameMouseSpr };
|
||||
|
||||
static char* GameLevelList[] = { "cdrom:\\DATA\\LEVELS\\LEVEL1.LVL;1"};
|
||||
static uint8_t GameLevelBuffer[GAME_MAX_MAP_SIZE];
|
||||
static uint16_t GameLevelBuffer[GAME_MAX_MAP_SIZE];
|
||||
|
||||
static uint8_t GameLevelColumns;
|
||||
static uint8_t GameLevelSize;
|
||||
|
@ -392,7 +393,7 @@ void GameInit(void)
|
|||
|
||||
GameSpawnMinTime = SystemCreateTimer(GAME_MINIMUM_PARKING_SPAWN_TIME, false, &GameMinimumSpawnTimeout);
|
||||
|
||||
spawnMinTimeFlag = true;
|
||||
spawnMinTimeFlag = false;
|
||||
|
||||
GameScore = 0;
|
||||
|
||||
|
@ -404,7 +405,7 @@ void GameInit(void)
|
|||
|
||||
LoadMenuEnd();
|
||||
|
||||
GfxSetGlobalLuminance(0);
|
||||
//GfxSetGlobalLuminance(0);
|
||||
|
||||
track = SystemRand(GAMEPLAY_FIRST_TRACK, GAMEPLAY_LAST_TRACK);
|
||||
|
||||
|
@ -543,7 +544,7 @@ void GameFirstLastAircraftIndex(void)
|
|||
bool first_set = false;
|
||||
uint8_t i;
|
||||
|
||||
for(i = 0; i < GAME_MAX_AIRCRAFT ; i++)
|
||||
for(i = 0; i < FlightData.nAircraft ; i++)
|
||||
{
|
||||
if(FlightData.State[i] != STATE_IDLE)
|
||||
{
|
||||
|
@ -552,6 +553,7 @@ void GameFirstLastAircraftIndex(void)
|
|||
firstActiveAircraft = i;
|
||||
first_set = true;
|
||||
}
|
||||
|
||||
lastActiveAircraft = i;
|
||||
}
|
||||
}
|
||||
|
@ -772,8 +774,7 @@ void GameLoadLevel(void)
|
|||
|
||||
i = LEVEL_HEADER_SIZE;
|
||||
|
||||
memcpy(GameLevelBuffer,&ptrBuffer[i],GameLevelSize);
|
||||
|
||||
memcpy(GameLevelBuffer, &ptrBuffer[i], GameLevelSize * sizeof(uint16_t)); // 2 bytes per tile
|
||||
}
|
||||
|
||||
char* GetGameLevelTitle(void)
|
||||
|
@ -801,8 +802,8 @@ void GameAircraftState(void)
|
|||
(FlightData.State[i] == STATE_IDLE)
|
||||
&&
|
||||
(FlightData.RemainingTime[i] > 0)
|
||||
/* &&
|
||||
(spawnMinTimeFlag == true) */)
|
||||
&&
|
||||
(spawnMinTimeFlag == false) )
|
||||
{
|
||||
if( (FlightData.FlightDirection[i] == DEPARTURE)
|
||||
&&
|
||||
|
@ -811,7 +812,7 @@ void GameAircraftState(void)
|
|||
uint8_t j;
|
||||
bool bParkingBusy = false;
|
||||
|
||||
for(j = 0; j < GAME_MAX_AIRCRAFT; j++)
|
||||
for(j = 0; j < FlightData.nAircraft; j++)
|
||||
{
|
||||
if(AircraftFromFlightDataIndex(j)->State != STATE_IDLE)
|
||||
{
|
||||
|
@ -837,7 +838,6 @@ void GameAircraftState(void)
|
|||
GameAircraftCreatedFlag = true;
|
||||
|
||||
// Create notification request for incoming aircraft
|
||||
dprintf("1!!!!\n");
|
||||
GameGuiBubbleShow();
|
||||
|
||||
target[0] = FlightData.Parking[i];
|
||||
|
@ -859,8 +859,6 @@ void GameAircraftState(void)
|
|||
FlightData.State[i] = STATE_APPROACH;
|
||||
GameAircraftCreatedFlag = true;
|
||||
|
||||
dprintf("2!!!!\n");
|
||||
|
||||
// Create notification request for incoming aircraft
|
||||
GameGuiBubbleShow();
|
||||
}
|
||||
|
@ -892,6 +890,7 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
|
|||
static bool rwy_sine_decrease = false;
|
||||
TYPE_ISOMETRIC_POS tileIsoPos;
|
||||
TYPE_CARTESIAN_POS tileCartPos;
|
||||
GsRectangle rct = {0};
|
||||
|
||||
// Prepare runway to be painted in blue if player is on runway selection mode
|
||||
if(ptrPlayer->SelectRunway == true)
|
||||
|
@ -909,6 +908,8 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
|
|||
|
||||
if(firstLevelRender == true)
|
||||
{
|
||||
// Avoid re-entrance.
|
||||
|
||||
firstLevelRender = false;
|
||||
|
||||
if(rwy_sine_decrease == false)
|
||||
|
@ -937,32 +938,41 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
|
|||
|
||||
for(i = 0 ; i < GameLevelSize; i++)
|
||||
{
|
||||
// GameLevelBuffer bits explanation:
|
||||
// X X X X X X X X
|
||||
// | | | | | | | |
|
||||
// | | | | | | | V
|
||||
// | | | | | | V Tile, bit 0
|
||||
// | | | | | V Tile, bit 1
|
||||
// | | | | V Tile, bit 2
|
||||
// | | | V Tile, bit 3
|
||||
// | | V Tile, bit 4
|
||||
// | V Tile, bit 5
|
||||
// V Tile, bit 6
|
||||
// Tile mirror flag
|
||||
|
||||
uint8_t CurrentTile = (uint8_t)(GameLevelBuffer[i] & 0x00FF);
|
||||
|
||||
// Flipped tiles have bit 7 enabled
|
||||
if(GameLevelBuffer[i] & TILE_MIRROR_FLAG)
|
||||
if(CurrentTile & TILE_MIRROR_FLAG)
|
||||
{
|
||||
flip_id = true;
|
||||
aux_id = GameLevelBuffer[i];
|
||||
GameLevelBuffer[i] &= ~(TILE_MIRROR_FLAG);
|
||||
aux_id = CurrentTile;
|
||||
CurrentTile &= ~(TILE_MIRROR_FLAG);
|
||||
}
|
||||
else
|
||||
{
|
||||
flip_id = false;
|
||||
}
|
||||
|
||||
if(GameLevelBuffer[i] == TILE_NOTHING)
|
||||
{
|
||||
// Skip empty tiles
|
||||
continue;
|
||||
}
|
||||
|
||||
if(GameLevelBuffer[i] <= LAST_TILE_TILESET1)
|
||||
if(CurrentTile <= LAST_TILE_TILESET1)
|
||||
{
|
||||
// Draw using GameTilesetSpr
|
||||
ptrTileset = &GameTilesetSpr;
|
||||
}
|
||||
else if( (GameLevelBuffer[i] > LAST_TILE_TILESET1)
|
||||
else if( (CurrentTile > LAST_TILE_TILESET1)
|
||||
&&
|
||||
(GameLevelBuffer[i] <= LAST_TILE_TILESET2) )
|
||||
(CurrentTile <= LAST_TILE_TILESET2) )
|
||||
{
|
||||
// Draw using GameTileset2Spr
|
||||
ptrTileset = &GameTileset2Spr;
|
||||
|
@ -970,15 +980,17 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
|
|||
else
|
||||
{
|
||||
ptrTileset = NULL;
|
||||
|
||||
continue;
|
||||
|
||||
if(flip_id == false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// if(flip_id == false)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
}
|
||||
|
||||
ptrTileset->w = TILE_SIZE;
|
||||
ptrTileset->h = TILE_SIZE;
|
||||
ptrTileset->h = TILE_SIZE_H;
|
||||
|
||||
used_rwy = false;
|
||||
|
||||
|
@ -1044,14 +1056,14 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
|
|||
}
|
||||
else if( (ptrPlayer->SelectTaxiwayRunway == true)
|
||||
&&
|
||||
( (GameLevelBuffer[i] == TILE_RWY_HOLDING_POINT)
|
||||
( (CurrentTile == TILE_RWY_HOLDING_POINT)
|
||||
||
|
||||
(GameLevelBuffer[i] == TILE_RWY_HOLDING_POINT_2) ) )
|
||||
(CurrentTile == TILE_RWY_HOLDING_POINT_2) ) )
|
||||
{
|
||||
uint16_t aircraftTile;
|
||||
bool bHoldingRwyBusy = false;
|
||||
|
||||
for(j = 0; j < GAME_MAX_AIRCRAFT; j++)
|
||||
for(j = 0; j < FlightData.nAircraft; j++)
|
||||
{
|
||||
uint16_t* targets = AircraftGetTargets(j);
|
||||
aircraftTile = AircraftGetTileFromFlightDataIndex(j);
|
||||
|
@ -1092,14 +1104,14 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
|
|||
}
|
||||
else if( (ptrPlayer->SelectTaxiwayParking == true)
|
||||
&&
|
||||
( (GameLevelBuffer[i] == TILE_PARKING)
|
||||
( (CurrentTile == TILE_PARKING)
|
||||
||
|
||||
(GameLevelBuffer[i] == TILE_PARKING_2) ) )
|
||||
(CurrentTile == TILE_PARKING_2) ) )
|
||||
{
|
||||
uint16_t aircraftTile;
|
||||
bool bParkingBusy = false;
|
||||
|
||||
for(j = 0; j < GAME_MAX_AIRCRAFT; j++)
|
||||
for(j = 0; j < FlightData.nAircraft; j++)
|
||||
{
|
||||
aircraftTile = AircraftGetTileFromFlightDataIndex(j);
|
||||
|
||||
|
@ -1136,9 +1148,16 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
|
|||
|
||||
// Set coordinate origin to left upper corner
|
||||
ptrTileset->x -= TILE_SIZE >> 1;
|
||||
ptrTileset->y -= TILE_SIZE >> 2;
|
||||
//ptrTileset->y -= TILE_SIZE_H >> 2;
|
||||
|
||||
rct.x = tileCartPos.x;
|
||||
rct.y = tileCartPos.y;
|
||||
rct.r = NORMAL_LUMINANCE;
|
||||
rct.g = 0;
|
||||
rct.b = 0;
|
||||
rct.w = rct.h = 2;
|
||||
|
||||
if(columns < GameLevelColumns -1 )
|
||||
if(columns < (GameLevelColumns - 1) )
|
||||
{
|
||||
columns++;
|
||||
}
|
||||
|
@ -1156,22 +1175,25 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
|
|||
}
|
||||
}
|
||||
|
||||
ptrTileset->u = (short)(GameLevelBuffer[i] % COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT;
|
||||
ptrTileset->v = (short)(GameLevelBuffer[i] / COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT;
|
||||
ptrTileset->u = (short)(CurrentTile % COLUMNS_PER_TILESET) << TILE_SIZE_BIT_SHIFT;
|
||||
ptrTileset->v = (short)(CurrentTile / COLUMNS_PER_TILESET) * TILE_SIZE_H;
|
||||
|
||||
ptrTileset->mx = ptrTileset->u + (TILE_SIZE >> 1);
|
||||
ptrTileset->my = ptrTileset->v + (TILE_SIZE >> 1);
|
||||
ptrTileset->my = ptrTileset->v + (TILE_SIZE_H >> 1);
|
||||
|
||||
if(flip_id == true)
|
||||
{
|
||||
flip_id = false;
|
||||
GameLevelBuffer[i] = aux_id;
|
||||
CurrentTile = aux_id;
|
||||
}
|
||||
|
||||
|
||||
// dprintf("Tile %d, attribute 0x%X\n",i,ptrTileset->attribute);
|
||||
|
||||
|
||||
CameraApplyCoordinatesToSprite(ptrPlayer, ptrTileset);
|
||||
GfxSortSprite(ptrTileset);
|
||||
|
||||
CameraApplyCoordinatesToRectangle(ptrPlayer, &rct);
|
||||
GsSortRectangle(&rct);
|
||||
|
||||
if(ptrTileset->attribute & H_FLIP)
|
||||
{
|
||||
|
@ -1518,7 +1540,7 @@ void GameGetRunwayArray(void)
|
|||
{
|
||||
if(GameLevelBuffer[i] == TILE_RWY_START_1)
|
||||
{
|
||||
if(SystemContains_u8(i, GameLevelBuffer, GAME_MAX_RUNWAYS) == false)
|
||||
if(SystemContains_u16(i, GameLevelBuffer, GAME_MAX_RUNWAYS) == false)
|
||||
{
|
||||
GameRwy[j++] = i;
|
||||
}
|
||||
|
@ -1812,7 +1834,7 @@ short GameGetXFromTile_short(uint16_t tile)
|
|||
|
||||
tile %= GameLevelColumns;
|
||||
|
||||
retVal = (fix16_t)(tile << TILE_SIZE_BIT_SHIFT);
|
||||
retVal = (tile << TILE_SIZE_BIT_SHIFT);
|
||||
|
||||
// Always point to tile center
|
||||
retVal += TILE_SIZE >> 1;
|
||||
|
@ -1826,9 +1848,11 @@ short GameGetYFromTile_short(uint16_t tile)
|
|||
|
||||
tile /= GameLevelColumns;
|
||||
|
||||
retVal = (fix16_t)(tile << TILE_SIZE_BIT_SHIFT);
|
||||
//retVal = (fix16_t)(tile << TILE_SIZE_BIT_SHIFT);
|
||||
retVal = (tile << TILE_SIZE_BIT_SHIFT);
|
||||
|
||||
// Always point to tile center
|
||||
//retVal += TILE_SIZE >> 1;
|
||||
retVal += TILE_SIZE >> 1;
|
||||
|
||||
return retVal;
|
||||
|
@ -1950,7 +1974,7 @@ bool GamePathToTile(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
|
|||
// If one of these tiles do not belong to desired tiles (i.e.: grass,
|
||||
// water, buildings...), then false is returned.
|
||||
|
||||
uint8_t AcceptedTiles[] = { TILE_ASPHALT, TILE_ASPHALT_WITH_BORDERS,
|
||||
uint8_t AcceptedTiles[] = { TILE_ASPHALT_WITH_BORDERS,
|
||||
TILE_PARKING, TILE_RWY_MID,
|
||||
TILE_RWY_EXIT, TILE_TAXIWAY_CORNER_GRASS,
|
||||
TILE_TAXIWAY_CORNER_GRASS_2, TILE_TAXIWAY_GRASS,
|
||||
|
@ -2019,7 +2043,7 @@ bool GamePathToTile(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
|
|||
|
||||
if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false)
|
||||
{
|
||||
for(i = 0; i < GAME_MAX_AIRCRAFT; i++)
|
||||
for(i = 0; i < FlightData.nAircraft; i++)
|
||||
{
|
||||
if( (ptrFlightData->State[i] != STATE_IDLE)
|
||||
&&
|
||||
|
@ -2054,7 +2078,7 @@ bool GamePathToTile(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
|
|||
|
||||
if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false)
|
||||
{
|
||||
for(i = 0; i < GAME_MAX_AIRCRAFT; i++)
|
||||
for(i = 0; i < FlightData.nAircraft; i++)
|
||||
{
|
||||
if( (ptrFlightData->State[i] != STATE_IDLE)
|
||||
&&
|
||||
|
@ -2092,7 +2116,7 @@ bool GamePathToTile(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
|
|||
|
||||
if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false)
|
||||
{
|
||||
for(i = 0; i < GAME_MAX_AIRCRAFT; i++)
|
||||
for(i = 0; i < FlightData.nAircraft; i++)
|
||||
{
|
||||
if( (ptrFlightData->State[i] != STATE_IDLE)
|
||||
&&
|
||||
|
@ -2128,7 +2152,7 @@ bool GamePathToTile(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
|
|||
|
||||
if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false)
|
||||
{
|
||||
for(i = 0; i < GAME_MAX_AIRCRAFT; i++)
|
||||
for(i = 0; i < FlightData.nAircraft; i++)
|
||||
{
|
||||
if( (ptrFlightData->State[i] != STATE_IDLE)
|
||||
&&
|
||||
|
@ -2228,7 +2252,7 @@ void GameDrawMouse(TYPE_PLAYER* ptrPlayer)
|
|||
|
||||
FL_STATE GameGetFlightDataStateFromIdx(uint8_t FlightDataIdx)
|
||||
{
|
||||
if(FlightDataIdx >= GAME_MAX_AIRCRAFT)
|
||||
if(FlightDataIdx >= FlightData.nAircraft)
|
||||
{
|
||||
return STATE_IDLE; // Error: could cause buffer overrun
|
||||
}
|
||||
|
@ -2549,7 +2573,7 @@ void GameRemoveFlight(uint8_t idx, bool successful)
|
|||
FlightData.State[ptrPlayer->ActiveAircraftList[j]] = STATE_IDLE;
|
||||
FlightData.Finished[ptrPlayer->ActiveAircraftList[j]] = true;
|
||||
|
||||
spawnMinTimeFlag = false;
|
||||
spawnMinTimeFlag = true;
|
||||
SystemTimerRestart(GameSpawnMinTime);
|
||||
|
||||
return;
|
||||
|
@ -2644,7 +2668,7 @@ bool GameFinished(void)
|
|||
|
||||
void GameMinimumSpawnTimeout(void)
|
||||
{
|
||||
spawnMinTimeFlag = true;
|
||||
spawnMinTimeFlag = false;
|
||||
}
|
||||
|
||||
void GameAircraftCollision(uint8_t AircraftIdx)
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#define MAX_PLAYERS (PLAYER_TWO + 1)
|
||||
|
||||
#define TILE_SIZE 64
|
||||
#define TILE_SIZE_H 48
|
||||
#define TILE_SIZE_BIT_SHIFT 6
|
||||
|
||||
/* *************************************
|
||||
|
|
161
Source/GameGui.c
|
@ -95,8 +95,8 @@ enum
|
|||
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B3 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B2,
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP = 8,
|
||||
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0 = AIRCRAFT_DATA_GSGPOLY4_X0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
|
||||
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1 = AIRCRAFT_DATA_GSGPOLY4_X1 - AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
|
||||
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0 = AIRCRAFT_DATA_GSGPOLY4_X0 + 24,
|
||||
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1 = AIRCRAFT_DATA_GSGPOLY4_X1 - 24,
|
||||
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0,
|
||||
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1,
|
||||
|
||||
|
@ -137,34 +137,38 @@ enum
|
|||
AIRCRAFT_DATA_PASSENGERS_X_2PLAYER = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X_2PLAYER + 64,
|
||||
AIRCRAFT_DATA_PASSENGERS_Y_2PLAYER = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y_2PLAYER,
|
||||
|
||||
AIRCRAFT_DATA_REMAINING_TIME_X = AIRCRAFT_DATA_DIRECTION_X,
|
||||
AIRCRAFT_DATA_REMAINING_TIME_X = AIRCRAFT_DATA_DIRECTION_X + 24,
|
||||
AIRCRAFT_DATA_REMAINING_TIME_Y = AIRCRAFT_DATA_DIRECTION_Y + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
|
||||
|
||||
AIRCRAFT_DATA_REMAINING_TIME_X_2PLAYER = AIRCRAFT_DATA_DIRECTION_X_2PLAYER,
|
||||
AIRCRAFT_DATA_REMAINING_TIME_Y_2PLAYER = AIRCRAFT_DATA_DIRECTION_Y_2PLAYER + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP
|
||||
AIRCRAFT_DATA_REMAINING_TIME_X_2PLAYER = AIRCRAFT_DATA_DIRECTION_X_2PLAYER + 24,
|
||||
AIRCRAFT_DATA_REMAINING_TIME_Y_2PLAYER = AIRCRAFT_DATA_DIRECTION_Y_2PLAYER + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_X = 96,
|
||||
AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y = 112,
|
||||
AIRCRAFT_DEPARTURE_ARRIVAL_ICON_SIZE = 16,
|
||||
AIRCRAFT_ARRIVAL_ICON_U = 0,
|
||||
AIRCRAFT_DEPARTURE_ICON_U = 16
|
||||
};
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_X_2PLAYER = 48,
|
||||
AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y_2PLAYER = 112,
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_U = 44,
|
||||
AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_V = 48,
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_X = 280,
|
||||
AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_Y = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y,
|
||||
enum
|
||||
{
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_X = 100,
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_Y = 112,
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_X_2PLAYER = 128,
|
||||
AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_Y_2PLAYER = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y_2PLAYER,
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_X_2PLAYER = 48,
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_Y_2PLAYER = 112,
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_U = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_U + 8,
|
||||
AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_V = 48,
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE = 8
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_UP_X = 268,
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_UP_Y = AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_Y,
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_UP_X_2PLAYER = 128,
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_UP_Y_2PLAYER = AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_Y_2PLAYER,
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_UP_U = 16,
|
||||
AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_U = 0,
|
||||
|
||||
AIRCRAFT_DATA_FLIGHT_PAGEUPDN_SIZE = 16
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -190,21 +194,24 @@ static void GameGuiBubbleStopVibration(void);
|
|||
static GsSprite BubbleSpr;
|
||||
static GsGPoly4 AircraftDataGPoly4;
|
||||
static GsGPoly4 SelectedAircraftGPoly4;
|
||||
static GsSprite ArrowsSpr;
|
||||
static GsGPoly4 PauseRect;
|
||||
static GsSprite SecondDisplay;
|
||||
static GsSprite DepArrSpr;
|
||||
static GsSprite PageUpDownSpr;
|
||||
static TYPE_TIMER* ShowAircraftPassengersTimer;
|
||||
static bool GameGuiClearPassengersLeft_Flag;
|
||||
static bool GameGuiBubbleShowFlag;
|
||||
static bool GameGuiBubbleVibrationFlag;
|
||||
|
||||
static char* GameFileList[] = {"cdrom:\\DATA\\SPRITES\\BUBBLE.TIM;1" ,
|
||||
static char* GameFileList[] = { "cdrom:\\DATA\\SPRITES\\BUBBLE.TIM;1" ,
|
||||
"cdrom:\\DATA\\FONTS\\FONT_1.FNT;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\ARROWS.TIM;1" };
|
||||
"cdrom:\\DATA\\SPRITES\\DEPARR.TIM;1" ,
|
||||
"cdrom:\\DATA\\SPRITES\\PAGEUPDN.TIM;1" };
|
||||
|
||||
static void * GameFileDest[] = {(GsSprite*)&BubbleSpr ,
|
||||
(TYPE_FONT*)&RadioFont ,
|
||||
(GsSprite*)&ArrowsSpr };
|
||||
static void * GameFileDest[] = {(GsSprite*)&BubbleSpr ,
|
||||
(TYPE_FONT*)&RadioFont ,
|
||||
(GsSprite*)&DepArrSpr ,
|
||||
(GsSprite*)&PageUpDownSpr };
|
||||
|
||||
static uint32_t slowScore; // It will update slowly to actual score value
|
||||
|
||||
|
@ -265,10 +272,9 @@ void GameGuiInit(void)
|
|||
|
||||
PauseRect.attribute |= ENABLE_TRANS | TRANS_MODE(0);
|
||||
|
||||
PageUpDownSpr.w = AIRCRAFT_DATA_FLIGHT_PAGEUPDN_SIZE;
|
||||
|
||||
ShowAircraftPassengersTimer = SystemCreateTimer(20, true, GameGuiClearPassengersLeft);
|
||||
|
||||
ArrowsSpr.w = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE;
|
||||
ArrowsSpr.h = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE;
|
||||
|
||||
slowScore = 0;
|
||||
|
||||
|
@ -364,6 +370,7 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
|
|||
{
|
||||
short y_offset;
|
||||
uint8_t page_aircraft;
|
||||
short orig_pageupdn_u;
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -502,47 +509,51 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
|
|||
SelectedAircraftGPoly4.y[3] += y_offset;
|
||||
|
||||
GsSortGPoly4(&SelectedAircraftGPoly4);
|
||||
|
||||
PageUpDownSpr.attribute |= GFX_1HZ_FLASH;
|
||||
|
||||
if(ptrPlayer->ActiveAircraft > (GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * (ptrPlayer->FlightDataPage + 1) ) )
|
||||
{
|
||||
orig_pageupdn_u = PageUpDownSpr.u;
|
||||
|
||||
PageUpDownSpr.u = orig_pageupdn_u + AIRCRAFT_DATA_FLIGHT_PAGE_UP_U;
|
||||
|
||||
if(GameTwoPlayersActive() == true)
|
||||
{
|
||||
ArrowsSpr.x = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_X_2PLAYER;
|
||||
ArrowsSpr.y = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_Y_2PLAYER;
|
||||
PageUpDownSpr.x = AIRCRAFT_DATA_FLIGHT_PAGE_UP_X_2PLAYER;
|
||||
PageUpDownSpr.y = AIRCRAFT_DATA_FLIGHT_PAGE_UP_Y_2PLAYER;
|
||||
}
|
||||
else
|
||||
{
|
||||
ArrowsSpr.x = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_X;
|
||||
ArrowsSpr.y = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_Y;
|
||||
PageUpDownSpr.x = AIRCRAFT_DATA_FLIGHT_PAGE_UP_X;
|
||||
PageUpDownSpr.y = AIRCRAFT_DATA_FLIGHT_PAGE_UP_Y;
|
||||
}
|
||||
|
||||
ArrowsSpr.u = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_U;
|
||||
ArrowsSpr.v = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_V;
|
||||
GfxSortSprite(&PageUpDownSpr);
|
||||
|
||||
ArrowsSpr.attribute |= GFX_1HZ_FLASH;
|
||||
|
||||
GfxSortSprite(&ArrowsSpr);
|
||||
PageUpDownSpr.u = orig_pageupdn_u;
|
||||
}
|
||||
|
||||
if(ptrPlayer->FlightDataPage != 0)
|
||||
{
|
||||
orig_pageupdn_u = PageUpDownSpr.u;
|
||||
|
||||
PageUpDownSpr.u = orig_pageupdn_u + AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_U;
|
||||
|
||||
if(GameTwoPlayersActive() == true)
|
||||
{
|
||||
ArrowsSpr.x = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_X_2PLAYER;
|
||||
ArrowsSpr.y = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y_2PLAYER;
|
||||
PageUpDownSpr.x = AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_X_2PLAYER;
|
||||
PageUpDownSpr.y = AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_Y_2PLAYER;
|
||||
}
|
||||
else
|
||||
{
|
||||
ArrowsSpr.x = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_X;
|
||||
ArrowsSpr.y = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y;
|
||||
PageUpDownSpr.x = AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_X;
|
||||
PageUpDownSpr.y = AIRCRAFT_DATA_FLIGHT_PAGE_DOWN_Y;
|
||||
}
|
||||
|
||||
GfxSortSprite(&PageUpDownSpr);
|
||||
|
||||
ArrowsSpr.u = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_U;
|
||||
ArrowsSpr.v = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_V;
|
||||
|
||||
ArrowsSpr.attribute |= GFX_1HZ_FLASH;
|
||||
|
||||
GfxSortSprite(&ArrowsSpr);
|
||||
PageUpDownSpr.u = orig_pageupdn_u;
|
||||
}
|
||||
|
||||
GameGuiShowAircraftData(ptrPlayer, ptrFlightData);
|
||||
|
@ -693,11 +704,12 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlight
|
|||
short AircraftDataDirection_Y;
|
||||
short AircraftDataFlightNumber_X;
|
||||
short AircraftDataFlightNumber_Y;
|
||||
short AircraftDataPassengers_X;
|
||||
short AircraftDataPassengers_Y;
|
||||
//short AircraftDataPassengers_X;
|
||||
//short AircraftDataPassengers_Y;
|
||||
short AircraftDataState_X_Offset;
|
||||
short AircraftDataRemainingTime_X;
|
||||
short AircraftDataRemainingTime_Y;
|
||||
short orig_DepArr_u = DepArrSpr.u;
|
||||
|
||||
if(GameTwoPlayersActive() == true)
|
||||
{
|
||||
|
@ -705,9 +717,9 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlight
|
|||
AircraftDataDirection_Y = AIRCRAFT_DATA_DIRECTION_Y_2PLAYER;
|
||||
AircraftDataFlightNumber_X = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X_2PLAYER;
|
||||
AircraftDataFlightNumber_Y = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y_2PLAYER;
|
||||
AircraftDataPassengers_X = AIRCRAFT_DATA_PASSENGERS_X_2PLAYER;
|
||||
AircraftDataPassengers_Y = AIRCRAFT_DATA_PASSENGERS_Y_2PLAYER;
|
||||
AircraftDataState_X_Offset = 54;
|
||||
//AircraftDataPassengers_X = AIRCRAFT_DATA_PASSENGERS_X_2PLAYER;
|
||||
//AircraftDataPassengers_Y = AIRCRAFT_DATA_PASSENGERS_Y_2PLAYER;
|
||||
AircraftDataState_X_Offset = 24;
|
||||
AircraftDataRemainingTime_X = AIRCRAFT_DATA_REMAINING_TIME_X_2PLAYER;
|
||||
AircraftDataRemainingTime_Y = AIRCRAFT_DATA_REMAINING_TIME_Y_2PLAYER;
|
||||
}
|
||||
|
@ -717,9 +729,9 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlight
|
|||
AircraftDataDirection_Y = AIRCRAFT_DATA_DIRECTION_Y;
|
||||
AircraftDataFlightNumber_X = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X;
|
||||
AircraftDataFlightNumber_Y = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y;
|
||||
AircraftDataPassengers_X = AIRCRAFT_DATA_PASSENGERS_X;
|
||||
AircraftDataPassengers_Y = AIRCRAFT_DATA_PASSENGERS_Y;
|
||||
AircraftDataState_X_Offset = 88;
|
||||
//AircraftDataPassengers_X = AIRCRAFT_DATA_PASSENGERS_X;
|
||||
//AircraftDataPassengers_Y = AIRCRAFT_DATA_PASSENGERS_Y;
|
||||
AircraftDataState_X_Offset = 24;
|
||||
AircraftDataRemainingTime_X = AIRCRAFT_DATA_REMAINING_TIME_X;
|
||||
AircraftDataRemainingTime_Y = AIRCRAFT_DATA_REMAINING_TIME_Y;
|
||||
}
|
||||
|
@ -739,34 +751,27 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlight
|
|||
AircraftDataFlightNumber_X,
|
||||
AircraftDataFlightNumber_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
|
||||
ptrFlightData->strFlightNumber[ptrPlayer->ActiveAircraftList[i]] );
|
||||
|
||||
DepArrSpr.x = AircraftDataDirection_X;
|
||||
DepArrSpr.y = AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j);
|
||||
DepArrSpr.w = AIRCRAFT_DEPARTURE_ARRIVAL_ICON_SIZE;
|
||||
|
||||
switch(ptrFlightData->FlightDirection[ptrPlayer->ActiveAircraftList[i]])
|
||||
{
|
||||
case ARRIVAL:
|
||||
FontPrintText( &SmallFont,
|
||||
AircraftDataDirection_X,
|
||||
AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
|
||||
"Arrival" );
|
||||
DepArrSpr.u = orig_DepArr_u + AIRCRAFT_ARRIVAL_ICON_U;
|
||||
break;
|
||||
case DEPARTURE:
|
||||
if(GameTwoPlayersActive() == true)
|
||||
{
|
||||
FontPrintText( &SmallFont,
|
||||
AircraftDataDirection_X,
|
||||
AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
|
||||
"Depart." );
|
||||
}
|
||||
else
|
||||
{
|
||||
FontPrintText( &SmallFont,
|
||||
AircraftDataDirection_X,
|
||||
AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
|
||||
"Departure" );
|
||||
}
|
||||
DepArrSpr.u = orig_DepArr_u + AIRCRAFT_DEPARTURE_ICON_U;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
GfxSortSprite(&DepArrSpr);
|
||||
|
||||
DepArrSpr.u = orig_DepArr_u;
|
||||
|
||||
FontSetFlags(&SmallFont, FONT_2HZ_FLASH);
|
||||
|
||||
|
@ -820,16 +825,16 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlight
|
|||
|
||||
FontSetFlags(&SmallFont, FONT_NOFLAGS);
|
||||
|
||||
FontPrintText( &SmallFont,
|
||||
/*FontPrintText( &SmallFont,
|
||||
AircraftDataPassengers_X,
|
||||
AircraftDataPassengers_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
|
||||
"%d pax.",
|
||||
ptrFlightData->Passengers[ptrPlayer->ActiveAircraftList[i]] );
|
||||
ptrFlightData->Passengers[ptrPlayer->ActiveAircraftList[i]] );*/
|
||||
|
||||
FontPrintText( &SmallFont,
|
||||
AircraftDataRemainingTime_X,
|
||||
AircraftDataRemainingTime_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
|
||||
"%d sec.",
|
||||
"%ds",
|
||||
ptrFlightData->RemainingTime[ptrPlayer->ActiveAircraftList[i]] );
|
||||
}
|
||||
}
|
||||
|
|
85
Source/Gfx.c
|
@ -35,6 +35,31 @@ enum
|
|||
|
||||
BUTTON_CIRCLE_U = 16,
|
||||
BUTTON_CIRCLE_V = 0,
|
||||
|
||||
BUTTON_DIRECTION_U = 64,
|
||||
BUTTON_DIRECTION_V = 0,
|
||||
|
||||
BUTTON_LR_U = 80,
|
||||
BUTTON_LR_V = 0,
|
||||
BUTTON_LR_SIZE = 24,
|
||||
|
||||
LETTER_SIZE = 8,
|
||||
|
||||
LETTER_L1_U = 104,
|
||||
LETTER_L1_V = 0,
|
||||
|
||||
LETTER_L2_U = 112,
|
||||
LETTER_L2_V = 0,
|
||||
|
||||
LETTER_R1_U = 104,
|
||||
LETTER_R1_V = 8,
|
||||
|
||||
LETTER_R2_U = 112,
|
||||
LETTER_R2_V = 8,
|
||||
|
||||
LETTER_OFFSET_INSIDE_BUTTON_LR_X = 8,
|
||||
LETTER_OFFSET_INSIDE_BUTTON_LR_Y = 6
|
||||
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -212,6 +237,10 @@ void GfxSortSprite(GsSprite * spr)
|
|||
{
|
||||
return;
|
||||
}
|
||||
else if(has_1hz_flash && Gfx1HzFlash() == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(global_lum != NORMAL_LUMINANCE)
|
||||
{
|
||||
|
@ -332,6 +361,12 @@ bool GfxSpriteFromFile(char* fname, GsSprite * spr)
|
|||
|
||||
GsSpriteFromImage(spr,&gsi,UPLOAD_IMAGE_FLAG);
|
||||
gfx_busy = false;
|
||||
|
||||
DEBUG_PRINT_VAR(spr->tpage);
|
||||
DEBUG_PRINT_VAR(spr->u);
|
||||
DEBUG_PRINT_VAR(spr->v);
|
||||
DEBUG_PRINT_VAR(spr->w);
|
||||
DEBUG_PRINT_VAR(spr->h);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -379,6 +414,16 @@ bool GfxIsSpriteInsideScreenArea(GsSprite * spr)
|
|||
return GfxIsInsideScreenArea(spr->x, spr->y, spr->w, spr->h);
|
||||
}
|
||||
|
||||
void GfxButtonSetFlags(uint8_t flags)
|
||||
{
|
||||
PSXButtons.attribute |= flags;
|
||||
}
|
||||
|
||||
void GfxButtonRemoveFlags(uint8_t flags)
|
||||
{
|
||||
PSXButtons.attribute &= ~flags;
|
||||
}
|
||||
|
||||
void GfxDrawButton(short x, short y, unsigned short btn)
|
||||
{
|
||||
static bool first_entered = true;
|
||||
|
@ -401,6 +446,8 @@ void GfxDrawButton(short x, short y, unsigned short btn)
|
|||
|
||||
PSXButtons.x = x;
|
||||
PSXButtons.y = y;
|
||||
PSXButtons.mx = PSXButtons.w >> 1;
|
||||
PSXButtons.my = PSXButtons.h >> 1;
|
||||
|
||||
switch(btn)
|
||||
{
|
||||
|
@ -423,13 +470,46 @@ void GfxDrawButton(short x, short y, unsigned short btn)
|
|||
PSXButtons.u = BUTTON_CIRCLE_U;
|
||||
PSXButtons.v = BUTTON_CIRCLE_V;
|
||||
break;
|
||||
|
||||
case PAD_RIGHT:
|
||||
PSXButtons.u = BUTTON_DIRECTION_U;
|
||||
PSXButtons.v = BUTTON_DIRECTION_V;
|
||||
break;
|
||||
|
||||
case PAD_UP:
|
||||
PSXButtons.u = BUTTON_DIRECTION_U;
|
||||
PSXButtons.v = BUTTON_DIRECTION_V;
|
||||
PSXButtons.rotate = 90 << ROTATE_BIT_SHIFT;
|
||||
break;
|
||||
|
||||
case PAD_DOWN:
|
||||
PSXButtons.u = BUTTON_DIRECTION_U;
|
||||
PSXButtons.v = BUTTON_DIRECTION_V;
|
||||
PSXButtons.rotate = 270 << ROTATE_BIT_SHIFT;
|
||||
break;
|
||||
|
||||
case PAD_LEFT:
|
||||
PSXButtons.u = BUTTON_DIRECTION_U;
|
||||
PSXButtons.v = BUTTON_DIRECTION_V;
|
||||
PSXButtons.attribute |= H_FLIP;
|
||||
break;
|
||||
|
||||
case PAD_L1:
|
||||
// Fall through
|
||||
case PAD_L2:
|
||||
// Fall through
|
||||
case PAD_R1:
|
||||
// Fall through
|
||||
case PAD_R2:
|
||||
PSXButtons.u = BUTTON_LR_U;
|
||||
PSXButtons.v = BUTTON_LR_V;
|
||||
PSXButtons.w = BUTTON_LR_SIZE;
|
||||
break;
|
||||
|
||||
case PAD_SELECT:
|
||||
// Fall through
|
||||
case PAD_START:
|
||||
// Fall through
|
||||
default:
|
||||
// Set null width and height so that sprite doesn't get sorted
|
||||
PSXButtons.w = 0;
|
||||
|
@ -441,6 +521,9 @@ void GfxDrawButton(short x, short y, unsigned short btn)
|
|||
PSXButtons.v += orig_v;
|
||||
|
||||
GfxSortSprite(&PSXButtons);
|
||||
|
||||
PSXButtons.attribute &= ~H_FLIP;
|
||||
PSXButtons.rotate = 0;
|
||||
}
|
||||
|
||||
void GfxSaveDisplayData(GsSprite *spr)
|
||||
|
@ -538,7 +621,7 @@ TYPE_ISOMETRIC_POS GfxCartesianToIsometric(TYPE_CARTESIAN_POS * ptrCartPos)
|
|||
IsoPos.x = ptrCartPos->x + (ptrCartPos->y << 1);
|
||||
IsoPos.y = (ptrCartPos->y << 1) - ptrCartPos->x;
|
||||
|
||||
// Explicitely suppose z = 0
|
||||
// Explicitly suppose z = 0
|
||||
IsoPos.z = 0;
|
||||
|
||||
return IsoPos;
|
||||
|
|
|
@ -76,6 +76,10 @@ void GfxSetGlobalLuminance(uint8_t value);
|
|||
|
||||
void GfxIncreaseGlobalLuminance(int8_t step);
|
||||
|
||||
void GfxButtonSetFlags(uint8_t flags);
|
||||
|
||||
void GfxButtonRemoveFlags(uint8_t flags);
|
||||
|
||||
int GfxRotateFromDegrees(int deg);
|
||||
|
||||
void GfxDrawButton(short x, short y, unsigned short btn);
|
||||
|
|
|
@ -88,6 +88,7 @@ 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 void * LoadMenuDest[] = {(GsSprite*)&LoadMenuPlaneSpr,
|
||||
(GsSprite*)&LoadMenuTitleSpr,
|
||||
(TYPE_FONT*)&SmallFont };
|
||||
|
@ -387,8 +388,8 @@ void ISR_LoadMenuVBlank(void)
|
|||
LoadMenuPlaneSpr.w = PLANE_SIZE;
|
||||
LoadMenuPlaneSpr.h = PLANE_SIZE;
|
||||
|
||||
LoadMenuPlaneSpr.u = PLANE_U;
|
||||
LoadMenuPlaneSpr.v = PLANE_V;
|
||||
//LoadMenuPlaneSpr.u = PLANE_U;
|
||||
//LoadMenuPlaneSpr.v = PLANE_V;
|
||||
|
||||
GsSortSprite(&LoadMenuPlaneSpr);
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@ CC = psx-gcc
|
|||
DEFINE= -DFIXMATH_FAST_SIN -D_PAL_MODE_
|
||||
DEFINE += -DPSXSDK_DEBUG
|
||||
DEFINE += -DNO_CDDA
|
||||
#DEFINE += -DNO_INTRO
|
||||
DEFINE += -DNO_INTRO
|
||||
LIBS= -lfixmath
|
||||
CC_FLAGS = -Wall -Werror -c -Os
|
||||
CC_FLAGS = -Wall -Werror -c -Os -Wfatal-errors
|
||||
LINKER = psx-gcc
|
||||
|
||||
PROJECT = AIRPORT
|
||||
|
@ -84,17 +84,18 @@ tiles:
|
|||
bmp2tim ../Sprites/Tileset2.bmp ../cdimg/DATA/SPRITES/TILESET2.TIM 16 -org=640,0 -mpink
|
||||
bmp2tim ../Sprites/MainMenu.bmp ../cdimg/DATA/SPRITES/MAINMENU.TIM 16 -org=768,384 -mpink
|
||||
bmp2tim ../Sprites/Loading.bmp ../cdimg/DATA/SPRITES/LOADING.TIM 4 -mpink -org=768,256 -clut=384,496
|
||||
bmp2tim ../Sprites/Plane.bmp ../cdimg/DATA/SPRITES/PLANE.TIM 16 -org=768,288 -mpink
|
||||
bmp2tim ../Sprites/Buttons.bmp ../cdimg/DATA/SPRITES/BUTTONS.TIM 16 -org=784,288 -mpink
|
||||
bmp2tim ../Sprites/GamePln.bmp ../cdimg/DATA/SPRITES/GAMEPLN.TIM 8 -mpink -org=800,304 -clut=384,497
|
||||
bmp2tim ../Sprites/Plane.bmp ../cdimg/DATA/SPRITES/PLANE.TIM 16 -org=536,240 -mpink
|
||||
bmp2tim ../Sprites/Buttons.bmp ../cdimg/DATA/SPRITES/BUTTONS.TIM 16 -org=384,240 -mpink
|
||||
bmp2tim ../Sprites/GamePln.bmp ../cdimg/DATA/SPRITES/GAMEPLN.TIM 8 -mpink -org=800,256 -clut=384,497
|
||||
bmp2tim ../Sprites/GamePln_Blue.bmp ../cdimg/DATA/SPRITES/PLNBLUE.CLT 8 -mpink -clut=384,501
|
||||
bmp2tim ../Sprites/Bubble.bmp ../cdimg/DATA/SPRITES/BUBBLE.TIM 8 -org=848,288 -mpink -clut=384,498
|
||||
bmp2tim ../Sprites/Bubble.bmp ../cdimg/DATA/SPRITES/BUBBLE.TIM 8 -org=584,240 -mpink -clut=384,498
|
||||
bmp2tim ../Sprites/Font_1_4bit.bmp ../cdimg/DATA/FONTS/FONT_1.FNT 4 -org=960,256 -mpink -clut=384,500
|
||||
bmp2tim ../Sprites/Font_2_4bit.bmp ../cdimg/DATA/FONTS/FONT_2.FNT 4 -org=768,304 -mpink -clut=384,499
|
||||
bmp2tim ../Sprites/Arrows.bmp ../cdimg/DATA/SPRITES/ARROWS.TIM 16 -org=812,304 -mpink
|
||||
bmp2tim ../Sprites/Font_2_4bit.bmp ../cdimg/DATA/FONTS/FONT_2.FNT 4 -org=768,288 -mpink -clut=384,499
|
||||
bmp2tim ../Sprites/GPL_4bit.bmp ../cdimg/DATA/SPRITES/GPL.TIM 4 -org=384,174 -mpink -clut=384,502
|
||||
bmp2tim ../Sprites/OpSrc_8bit.bmp ../cdimg/DATA/SPRITES/OPENSRC.TIM 8 -org=464,0 -mpink -clut=384,503
|
||||
bmp2tim ../Sprites/Mouse.bmp ../cdimg/DATA/SPRITES/MOUSE.TIM 16 -org=828,304 -mpink
|
||||
bmp2tim ../Sprites/Mouse.bmp ../cdimg/DATA/SPRITES/MOUSE.TIM 16 -org=596,240 -mpink
|
||||
bmp2tim ../Sprites/DepArr.bmp ../cdimg/DATA/SPRITES/DEPARR.TIM 16 -org=552,240 -mpink
|
||||
bmp2tim ../Sprites/PageUpDn.bmp ../cdimg/DATA/SPRITES/PAGEUPDN.TIM 16 -org=504,240 -mpink
|
||||
|
||||
sounds:
|
||||
rm -f ../cdimg/DATA/SOUNDS/*.VAG
|
||||
|
|
|
@ -19,13 +19,15 @@
|
|||
typedef enum
|
||||
{
|
||||
PLAY_OPTIONS_LEVEL = 0,
|
||||
ONE_TWO_PLAYERS_LEVEL
|
||||
ONE_TWO_PLAYERS_LEVEL,
|
||||
OPTIONS_LEVEL
|
||||
}MainMenuLevel;
|
||||
|
||||
enum
|
||||
{
|
||||
MAIN_MENU_PLAY_OPTIONS_LEVEL_BUTTONS = 2,
|
||||
MAIN_MENU_ONE_TWO_PLAYERS_LEVEL_BUTTONS = 2
|
||||
MAIN_MENU_ONE_TWO_PLAYERS_LEVEL_BUTTONS = 2,
|
||||
MAIN_MENU_OPTIONS_LEVEL_BUTTONS = 1
|
||||
};
|
||||
|
||||
typedef enum
|
||||
|
@ -260,10 +262,10 @@ void MainMenu(void)
|
|||
GfxSetGlobalLuminance(NORMAL_LUMINANCE);
|
||||
|
||||
while(1)
|
||||
{
|
||||
while(GfxIsGPUBusy() == true);
|
||||
|
||||
{
|
||||
MainMenuButtonHandler();
|
||||
|
||||
while(GfxIsGPUBusy() == true);
|
||||
|
||||
switch(menuLevel)
|
||||
{
|
||||
|
|
11
Source/Sfx.c
|
@ -21,11 +21,16 @@
|
|||
* Local Variables
|
||||
* *************************************/
|
||||
|
||||
static uint8_t voiceIndex = 0;
|
||||
static uint8_t voiceIndex;
|
||||
static uint16_t SfxGlobalVolumeReduction;
|
||||
|
||||
#ifndef NO_CDDA
|
||||
static uint16_t SfxCddaVolumeReduction;
|
||||
#endif // NO_CDDA
|
||||
|
||||
void SfxPlaySound(SsVag * sound)
|
||||
{
|
||||
SsPlayVag(sound, sound->cur_voice, MAX_VOLUME, MAX_VOLUME);
|
||||
SsPlayVag(sound, sound->cur_voice, MAX_VOLUME - SfxGlobalVolumeReduction, MAX_VOLUME - SfxGlobalVolumeReduction);
|
||||
}
|
||||
|
||||
bool SfxUploadSound(char* file_path, SsVag * vag)
|
||||
|
@ -56,7 +61,7 @@ bool SfxUploadSound(char* file_path, SsVag * vag)
|
|||
void SfxPlayTrack(MUSIC_TRACKS track)
|
||||
{
|
||||
#ifndef NO_CDDA
|
||||
SsCdVol(0x7FFF,0x7FFF);
|
||||
SsCdVol(0x7FFF - SfxCddaVolumeReduction,0x7FFF - SfxCddaVolumeReduction);
|
||||
SsEnableCd();
|
||||
CdPlayTrack(track);
|
||||
dprintf("Track number %d playing...\n",track);
|
||||
|
|
|
@ -722,9 +722,21 @@ void SystemUserTimersHandler(void)
|
|||
void SystemTimerRestart(TYPE_TIMER* timer)
|
||||
{
|
||||
timer->time = timer->orig_time;
|
||||
dprintf("Time set to %d seconds, timer 0x%08X\n", timer->time, timer);
|
||||
}
|
||||
|
||||
/* *********************************************************************
|
||||
*
|
||||
* @name void SystemTimerRemove(TYPE_TIMER* timer)
|
||||
*
|
||||
* @author: Xavier Del Campo
|
||||
*
|
||||
* @brief: Resets timer parameters to default values so timer instance
|
||||
* can be recycled.
|
||||
*
|
||||
* @remarks:
|
||||
*
|
||||
* *********************************************************************/
|
||||
|
||||
void SystemTimerRemove(TYPE_TIMER* timer)
|
||||
{
|
||||
timer->time = 0;
|
||||
|
|
Before Width: | Height: | Size: 438 B |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 180 KiB |
Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 24 KiB |