* 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.
This commit is contained in:
XaviDCR92 2017-06-27 00:58:12 +02:00
parent d1f55e8b45
commit f9f9924566
31 changed files with 370 additions and 52327 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

View File

@ -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)

View File

@ -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;
}

File diff suppressed because it is too large Load Diff

View File

@ -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)

View File

@ -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
/* *************************************

View File

@ -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]] );
}
}

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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)
{

View File

@ -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);

View File

@ -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;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.