aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2017-05-22 07:06:17 +0200
committerXaviDCR92 <xavi.dcr@gmail.com>2017-05-22 07:06:17 +0200
commitaefe5f8c1c45f4cdeafe08113953a9f03df3c644 (patch)
treec7f609ec694a2180237b77c182705a79f81f4725 /Source
parent3a8f91466126c97427d7cf0c86c36581662981be (diff)
downloadairport-aefe5f8c1c45f4cdeafe08113953a9f03df3c644.tar.gz
* Split screen from now on is only calling GsDrawList() once. The reason for this is that now DMA is used instead of GPIO for drawenv/dispenv management.
* (PSXSDK internals): incorrect bit shifting was being made on 0xE3 and 0xE4 GPU instructions (drawenv management). * (Bugfix): Timers were not being reset properly because pad1_cheat_timer and pad2_cheat_timer were being accidentally reset to NULL on calling memset() for cheatsArray. * Timers are now updated every 100 ms instead of every second. * Mouse sprite should be now drawn on X_SCREEN_RESOLUTION >> 2 in 2-player mode. TODO: check why this isn't working!
Diffstat (limited to 'Source')
-rw-r--r--Source/Aircraft.c3
-rw-r--r--Source/Game.c42
-rw-r--r--Source/GameGui.c129
-rw-r--r--Source/Gfx.c22
-rw-r--r--Source/Menu.c16
-rw-r--r--Source/Pad.c32
-rw-r--r--Source/Pad.h4
-rw-r--r--Source/System.c16
-rw-r--r--Source/System.h9
9 files changed, 176 insertions, 97 deletions
diff --git a/Source/Aircraft.c b/Source/Aircraft.c
index 3936f35..fb2b516 100644
--- a/Source/Aircraft.c
+++ b/Source/Aircraft.c
@@ -7,8 +7,7 @@
/* *************************************
* Defines
* *************************************/
-
-#define AIRCRAFT_SPEED_TABLE_SIZE 8
+
#define AIRCRAFT_SIZE 16
/* *************************************
diff --git a/Source/Game.c b/Source/Game.c
index 51f4a9e..bdb49f1 100644
--- a/Source/Game.c
+++ b/Source/Game.c
@@ -76,8 +76,10 @@ enum
{
MOUSE_W = 8,
MOUSE_H = 8,
- MOUSE_X = X_SCREEN_RESOLUTION - (X_SCREEN_RESOLUTION >> 1),
- MOUSE_Y = Y_SCREEN_RESOLUTION - (Y_SCREEN_RESOLUTION >> 1),
+ MOUSE_X = (X_SCREEN_RESOLUTION >> 1),
+ MOUSE_Y = (Y_SCREEN_RESOLUTION >> 1),
+ MOUSE_X_2PLAYER = (X_SCREEN_RESOLUTION >> 2),
+ MOUSE_Y_2PLAYER = (Y_SCREEN_RESOLUTION >> 1)
};
/* *************************************
@@ -305,8 +307,17 @@ void GameInit(void)
firstActiveAircraft = 0;
lastActiveAircraft = 0;
- GameMouseSpr.x = MOUSE_X;
- GameMouseSpr.y = MOUSE_Y;
+ if(GameTwoPlayersActive() == true)
+ {
+ GameMouseSpr.x = MOUSE_X;
+ GameMouseSpr.y = MOUSE_Y;
+ }
+ else
+ {
+ GameMouseSpr.x = MOUSE_X_2PLAYER;
+ GameMouseSpr.y = MOUSE_Y_2PLAYER;
+ }
+
GameMouseSpr.w = MOUSE_W;
GameMouseSpr.h = MOUSE_H;
GameMouseSpr.attribute = COLORMODE(COLORMODE_16BPP);
@@ -556,9 +567,7 @@ void GameGraphics(void)
int i;
bool split_screen = false;
- while( (GfxIsGPUBusy() == true)
- ||
- (SystemRefreshNeeded() == false) );
+ while(GfxIsGPUBusy() == true);
if(TwoPlayersActive == true)
{
@@ -583,15 +592,8 @@ void GameGraphics(void)
GameRenderLevel(&PlayerData[i]);
AircraftRender(&PlayerData[i]);
-
- /*for(i = 0; i < MAX_PLAYERS ; i++)
- {*/
- GameGuiAircraftList(&PlayerData[i], &FlightData);
- //}
-
- GfxDrawScene_NoSwap();
-
- while(GfxIsGPUBusy() == true);
+
+ GameGuiAircraftList(&PlayerData[i], &FlightData);
}
}
@@ -603,13 +605,7 @@ void GameGraphics(void)
GameGuiClock(GameHour,GameMinutes);
- GfxDrawScene_NoSwap();
-
- while(GfxIsGPUBusy() == true);
-
- GfxSwapBuffers();
-
- SystemCyclicHandler();
+ GfxDrawScene();
}
void GameLoadLevel(void)
diff --git a/Source/GameGui.c b/Source/GameGui.c
index e4d937f..d3855f9 100644
--- a/Source/GameGui.c
+++ b/Source/GameGui.c
@@ -150,7 +150,17 @@ enum
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 = AIRCRAFT_DATA_GSGPOLY4_Y0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0,
AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H,
- AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2,
+
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0_2PLAYER = AIRCRAFT_DATA_GSGPOLY4_X0_2PLAYER + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1_2PLAYER = AIRCRAFT_DATA_GSGPOLY4_X1_2PLAYER - AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2_2PLAYER = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0_2PLAYER,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3_2PLAYER = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1_2PLAYER,
+
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0_2PLAYER = AIRCRAFT_DATA_GSGPOLY4_Y0_2PLAYER + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1_2PLAYER = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0_2PLAYER,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2_2PLAYER = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0_2PLAYER + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3_2PLAYER = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2_2PLAYER
};
enum
@@ -158,11 +168,20 @@ enum
AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X_2PLAYER = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0_2PLAYER + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y_2PLAYER = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0_2PLAYER + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+
AIRCRAFT_DATA_DIRECTION_X = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X,
AIRCRAFT_DATA_DIRECTION_Y = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_DIRECTION_X_2PLAYER = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X_2PLAYER,
+ AIRCRAFT_DATA_DIRECTION_Y_2PLAYER = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y_2PLAYER + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+
AIRCRAFT_DATA_PASSENGERS_X = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X + 64,
- AIRCRAFT_DATA_PASSENGERS_Y = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y
+ AIRCRAFT_DATA_PASSENGERS_Y = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y,
+
+ 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
};
enum
@@ -339,8 +358,10 @@ void GameGuiAircraftNotificationRequest(TYPE_FLIGHT_DATA * ptrFlightData)
bool GameGuiPauseDialog(TYPE_PLAYER* ptrPlayer)
{
GfxSaveDisplayData(&SecondDisplay);
+
+ GfxSetGlobalLuminance(NORMAL_LUMINANCE);
- DrawFBRect(0, 0, X_SCREEN_RESOLUTION, VRAM_H, 0, 0, 0);
+ //DrawFBRect(0, 0, X_SCREEN_RESOLUTION, VRAM_H, 0, 0, 0);
while(GfxIsGPUBusy() == true);
@@ -518,10 +539,20 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightDat
SelectedAircraftGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0);
- SelectedAircraftGPoly4.x[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0;
- SelectedAircraftGPoly4.x[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1;
- SelectedAircraftGPoly4.x[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2;
- SelectedAircraftGPoly4.x[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3;
+ if(GameTwoPlayersActive() == true)
+ {
+ SelectedAircraftGPoly4.x[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0_2PLAYER;
+ SelectedAircraftGPoly4.x[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1_2PLAYER;
+ SelectedAircraftGPoly4.x[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2_2PLAYER;
+ SelectedAircraftGPoly4.x[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3_2PLAYER;
+ }
+ else
+ {
+ SelectedAircraftGPoly4.x[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0;
+ SelectedAircraftGPoly4.x[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1;
+ SelectedAircraftGPoly4.x[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2;
+ SelectedAircraftGPoly4.x[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3;
+ }
page_aircraft = (ptrPlayer->SelectedAircraft) - (ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE);
@@ -532,11 +563,26 @@ void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightDat
dprintf("ptrPlayer->FlightDataPage = %d\n",ptrPlayer->FlightDataPage);
dprintf("y_offset = %d\n",y_offset);*/
- SelectedAircraftGPoly4.y[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + y_offset;
- SelectedAircraftGPoly4.y[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1 + y_offset;
- SelectedAircraftGPoly4.y[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2 + y_offset;
- SelectedAircraftGPoly4.y[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3 + y_offset;
-
+ if(GameTwoPlayersActive() == true)
+ {
+ SelectedAircraftGPoly4.y[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0_2PLAYER;
+ SelectedAircraftGPoly4.y[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1_2PLAYER;
+ SelectedAircraftGPoly4.y[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2_2PLAYER;
+ SelectedAircraftGPoly4.y[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3_2PLAYER;
+ }
+ else
+ {
+ SelectedAircraftGPoly4.y[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0;
+ SelectedAircraftGPoly4.y[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1;
+ SelectedAircraftGPoly4.y[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2;
+ SelectedAircraftGPoly4.y[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3;
+ }
+
+ SelectedAircraftGPoly4.y[0] += y_offset;
+ SelectedAircraftGPoly4.y[1] += y_offset;
+ SelectedAircraftGPoly4.y[2] += y_offset;
+ SelectedAircraftGPoly4.y[3] += y_offset;
+
GsSortGPoly4(&SelectedAircraftGPoly4);
if(ptrPlayer->ActiveAircraft > (GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * (ptrPlayer->FlightDataPage + 1) ) )
@@ -688,6 +734,31 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFligh
uint8_t init_flight = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE;
uint8_t i;
uint8_t j;
+ short AircraftDataDirection_X;
+ short AircraftDataDirection_Y;
+ short AircraftDataFlightNumber_X;
+ short AircraftDataFlightNumber_Y;
+ short AircraftDataPassengers_X;
+ short AircraftDataPassengers_Y;
+
+ if(GameTwoPlayersActive() == true)
+ {
+ AircraftDataDirection_X = AIRCRAFT_DATA_DIRECTION_X_2PLAYER;
+ 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;
+ }
+ else
+ {
+ AircraftDataDirection_X = AIRCRAFT_DATA_DIRECTION_X;
+ 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;
+ }
FontSetFlags(&SmallFont,FONT_NOFLAGS);
@@ -701,22 +772,22 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFligh
}
FontPrintText( &SmallFont,
- AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X,
- AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ AircraftDataFlightNumber_X,
+ AircraftDataFlightNumber_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
ptrFlightData->strFlightNumber[i] );
switch(ptrFlightData->FlightDirection[i])
{
case ARRIVAL:
FontPrintText( &SmallFont,
- AIRCRAFT_DATA_DIRECTION_X,
- AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ AircraftDataDirection_X,
+ AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
"Arrival" );
break;
case DEPARTURE:
FontPrintText( &SmallFont,
- AIRCRAFT_DATA_DIRECTION_X,
- AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ AircraftDataDirection_X,
+ AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
"Departure" );
break;
default:
@@ -729,30 +800,30 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFligh
{
case STATE_FINAL:
FontPrintText( &SmallFont,
- AIRCRAFT_DATA_DIRECTION_X + 88,
- AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ AircraftDataDirection_X + 88,
+ AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
"Landing" );
break;
case STATE_LANDED:
FontPrintText( &SmallFont,
- AIRCRAFT_DATA_DIRECTION_X + 88,
- AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ AircraftDataDirection_X + 88,
+ AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
"Arrived" );
break;
case STATE_PARKED:
FontPrintText( &SmallFont,
- AIRCRAFT_DATA_DIRECTION_X + 88,
- AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ AircraftDataDirection_X + 88,
+ AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
"Parked" );
break;
case STATE_UNBOARDING:
FontPrintText( &SmallFont,
- AIRCRAFT_DATA_DIRECTION_X + 88,
- AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
- "Waiting for unboard" );
+ AircraftDataDirection_X + 88,
+ AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ "Unboard" );
break;
default:
@@ -762,8 +833,8 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFligh
FontSetFlags(&SmallFont, FONT_NOFLAGS);
FontPrintText( &SmallFont,
- AIRCRAFT_DATA_PASSENGERS_X,
- AIRCRAFT_DATA_PASSENGERS_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ AircraftDataPassengers_X,
+ AircraftDataPassengers_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
"%d pax.",
ptrFlightData->Passengers[i] );
}
diff --git a/Source/Gfx.c b/Source/Gfx.c
index 27646ee..d1d753b 100644
--- a/Source/Gfx.c
+++ b/Source/Gfx.c
@@ -14,6 +14,7 @@
#define MAX_LUMINANCE 0xFF
#define ROTATE_BIT_SHIFT 12
#define GPUSTAT (*(unsigned int*)0x1F801814)
+#define D2_CHCR (*(unsigned int*)0x1F8010A8)
/* *************************************
* Structs and enums
@@ -85,8 +86,8 @@ void GfxSwapBuffers(void)
DrawEnv.y = DOUBLE_BUFFERING_SWAP_Y;
}
- GsSetDispEnv(&DispEnv);
- GsSetDrawEnv(&DrawEnv);
+ GsSetDispEnv_DMA(&DispEnv);
+ GsSetDrawEnv_DMA(&DrawEnv);
}
}
@@ -122,14 +123,9 @@ void GfxDrawScene_Fast(void)
GsDrawList();
}
-void GfxDrawScene_NoSwap(void)
-{
- GsDrawList();
-}
-
bool GfxReadyForDMATransfer(void)
{
- return (GPUSTAT & 1<<28);
+ return ( (GPUSTAT & 1<<28) && !(D2_CHCR & 1<<24) );
}
void GfxDrawScene(void)
@@ -522,14 +518,12 @@ void GfxSetSplitScreen(uint8_t playerIndex)
{
switch(playerIndex)
{
- case 0:
- // PLAYER_ONE
+ case PLAYER_ONE:
DrawEnv.x = 0;
DrawEnv.w = X_SCREEN_RESOLUTION >> 1;
break;
- case 1:
- // PLAYER_TWO
+ case PLAYER_TWO:
DrawEnv.x = X_SCREEN_RESOLUTION >> 1;
DrawEnv.w = X_SCREEN_RESOLUTION >> 1;
break;
@@ -538,7 +532,7 @@ void GfxSetSplitScreen(uint8_t playerIndex)
break;
}
- GsSetDrawEnv(&DrawEnv);
+ GsSetDrawEnv_DMA(&DrawEnv);
}
void GfxDisableSplitScreen(void)
@@ -546,5 +540,5 @@ void GfxDisableSplitScreen(void)
DrawEnv.x = 0;
DrawEnv.w = X_SCREEN_RESOLUTION;
- GsSetDrawEnv(&DrawEnv);
+ GsSetDrawEnv_DMA(&DrawEnv);
}
diff --git a/Source/Menu.c b/Source/Menu.c
index 32d0e45..0a922c4 100644
--- a/Source/Menu.c
+++ b/Source/Menu.c
@@ -72,7 +72,6 @@ typedef enum
}MMBtn_Offset;
-#pragma pack(1)
typedef struct
{
MMBtn_Offset offset_u;
@@ -90,7 +89,6 @@ typedef struct
bool was_selected;
}TYPE_MMBtn;
-#pragma pack()
/* **************************************
* Local prototypes *
@@ -251,7 +249,8 @@ void MainMenuInit(void)
void MainMenu(void)
{
-
+ unsigned short* cheat_array;
+ uint8_t i;
MainMenuInit();
#ifndef NO_INTRO
@@ -271,6 +270,11 @@ void MainMenu(void)
GsSortCls(0,0,40);
MainMenuDrawButton(&MainMenuBtn[PLAY_BUTTON_INDEX]);
MainMenuDrawButton(&MainMenuBtn[OPTIONS_BUTTON_INDEX]);
+
+ for(cheat_array = PadGetPlayerOneCheatArray(), i = 0; *cheat_array != 0; cheat_array++, i += 16)
+ {
+ GfxDrawButton(i, 220, *cheat_array);
+ }
GfxDrawScene();
break;
@@ -280,6 +284,12 @@ void MainMenu(void)
GsSortCls(0,0,40);
MainMenuDrawButton(&MainMenuBtn[ONE_PLAYER_BUTTON_INDEX]);
MainMenuDrawButton(&MainMenuBtn[TWO_PLAYER_BUTTON_INDEX]);
+
+ for(cheat_array = PadGetPlayerOneCheatArray(), i = 0; *cheat_array != 0; cheat_array++, i += 16)
+ {
+ GfxDrawButton(i, 220, *cheat_array);
+ }
+
GfxDrawScene();
break;
diff --git a/Source/Pad.c b/Source/Pad.c
index 2a84304..1606535 100644
--- a/Source/Pad.c
+++ b/Source/Pad.c
@@ -10,7 +10,7 @@
#define PAD_ONE 0
#define PAD_TWO 1
-#define PAD_CHEAT_TIMEOUT 2
+#define PAD_CHEAT_TIMEOUT 20 // 2 units * 100 ms/unit = 2000 ms
#define PAD_MAX_CHEATS 16
/* **************************************
@@ -82,13 +82,13 @@ static uint8_t pad1_keys_repeat[NUMBER_OF_KEYS];
static uint8_t pad2_keys_repeat[NUMBER_OF_KEYS];
// These arrays include last 16 buttons pressed by user and keeps them
// for cheating purposes. They are cleaned if no keys are pressed during
-// PAD_CHEAT_TIMEOUT seconds.
+// PAD_CHEAT_TIMEOUT milliseconds.
static unsigned short pad1_cheat_array[CHEAT_ARRAY_SIZE];
static unsigned short pad2_cheat_array[CHEAT_ARRAY_SIZE];
// Pointers to timers which clean padX_cheat_array.
-static TYPE_TIMER * pad1_cheat_timer;
-static TYPE_TIMER * pad2_cheat_timer;
+static TYPE_TIMER* pad1_cheat_timer;
+static TYPE_TIMER* pad2_cheat_timer;
static TYPE_CHEAT * cheatsArray[PAD_MAX_CHEATS];
@@ -349,7 +349,7 @@ uint8_t PadGetKeyIndex(unsigned short key)
}
}
-unsigned short * PadOneGetAddress(void)
+unsigned short* PadOneGetAddress(void)
{
return &pad1;
}
@@ -367,7 +367,8 @@ void PadInit(void)
{
pad1_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadOneCleanCheatArray);
pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray);
- memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS);
+
+ memset(cheatsArray,0, sizeof(cheatsArray));
}
void PadCheatHandler(uint8_t n_pad)
@@ -380,23 +381,23 @@ void PadCheatHandler(uint8_t n_pad)
uint8_t keys_released = 0;
unsigned short key;
uint8_t j;
- bool (*released_callback)(unsigned short);
+ bool (*pressed_callback)(unsigned short);
void (*clean_callback)(void);
bool success = false;
- unsigned short * cheat_array;
- TYPE_TIMER * timer;
+ unsigned short* cheat_array;
+ TYPE_TIMER* timer;
switch(n_pad)
{
case PAD_ONE:
- released_callback = &PadOneKeyReleased;
+ pressed_callback = &PadOneKeySinglePress;
cheat_array = pad1_cheat_array;
clean_callback = &PadOneCleanCheatArray;
timer = pad1_cheat_timer;
break;
case PAD_TWO:
- released_callback = &PadTwoKeyReleased;
+ pressed_callback = &PadTwoKeySinglePress;
cheat_array = pad2_cheat_array;
clean_callback = &PadTwoCleanCheatArray;
timer = pad2_cheat_timer;
@@ -404,7 +405,7 @@ void PadCheatHandler(uint8_t n_pad)
default:
dprintf("Invalid pad called for PadCheatHandler()!\n");
- return;
+ return;
}
for(i = 0; i < PAD_MAX_CHEATS; i++)
@@ -430,7 +431,7 @@ void PadCheatHandler(uint8_t n_pad)
for(i = 0; i < sizeof(available_keys) / sizeof(unsigned short); i++)
{
- if(released_callback(available_keys[i]) == true)
+ if(pressed_callback(available_keys[i]) == true)
{
SystemTimerRestart(timer);
key = available_keys[i];
@@ -490,3 +491,8 @@ void PadTwoCleanCheatArray(void)
{
memset(pad2_cheat_array,0,sizeof(unsigned short) * CHEAT_ARRAY_SIZE);
}
+
+unsigned short* PadGetPlayerOneCheatArray(void)
+{
+ return pad1_cheat_array;
+}
diff --git a/Source/Pad.h b/Source/Pad.h
index 5e5588b..d887f86 100644
--- a/Source/Pad.h
+++ b/Source/Pad.h
@@ -51,7 +51,9 @@ bool PadTwoIsVibrationEnabled(void);
bool PadAddCheat(TYPE_CHEAT * cheat);
+unsigned short* PadGetPlayerOneCheatArray(void);
+
// Experimental (to be removed)
-unsigned short * PadOneGetAddress(void);
+unsigned short* PadOneGetAddress(void);
#endif //__PAD_HEADER__
diff --git a/Source/System.c b/Source/System.c
index 833c80f..6eeaf15 100644
--- a/Source/System.c
+++ b/Source/System.c
@@ -391,12 +391,12 @@ bool SystemContains_u16(uint16_t value, uint16_t * buffer, size_t sz)
return false;
}
-TYPE_TIMER * SystemCreateTimer(uint32_t seconds, bool rf, void (*timer_callback)(void) )
+TYPE_TIMER* SystemCreateTimer(uint32_t t, bool rf, void (*timer_callback)(void) )
{
bool success = false;
uint8_t i;
- if(seconds == 0)
+ if(t == 0)
{
dprintf("Cannot create timer with time == 0!\n");
return NULL;
@@ -407,8 +407,8 @@ TYPE_TIMER * SystemCreateTimer(uint32_t seconds, bool rf, void (*timer_callback)
if(timer_array[i].busy == false)
{
timer_array[i].Timeout_Callback = timer_callback;
- timer_array[i].time = seconds;
- timer_array[i].orig_time = seconds;
+ timer_array[i].time = t;
+ timer_array[i].orig_time = t;
timer_array[i].repeat_flag = rf;
timer_array[i].busy = true;
success = true;
@@ -447,7 +447,7 @@ void SystemUserTimersHandler(void)
{
if(timer_array[i].busy == true)
{
- if(System1SecondTick() == true)
+ if(System100msTick() == true)
{
timer_array[i].time--;
@@ -472,12 +472,12 @@ void SystemUserTimersHandler(void)
}
}
-void SystemTimerRestart(TYPE_TIMER * timer)
+void SystemTimerRestart(TYPE_TIMER* timer)
{
timer->time = timer->orig_time;
}
-void SystemTimerRemove(TYPE_TIMER * timer)
+void SystemTimerRemove(TYPE_TIMER* timer)
{
timer->time = 0;
timer->orig_time = 0;
@@ -486,7 +486,7 @@ void SystemTimerRemove(TYPE_TIMER * timer)
timer->repeat_flag = false;
}
-bool SystemArrayCompare(unsigned short * arr1, unsigned short * arr2, size_t sz)
+bool SystemArrayCompare(unsigned short* arr1, unsigned short* arr2, size_t sz)
{
size_t i;
diff --git a/Source/System.h b/Source/System.h
index b6ed48b..61ce6e2 100644
--- a/Source/System.h
+++ b/Source/System.h
@@ -89,7 +89,8 @@ bool SystemContains_u16(uint16_t value, uint16_t * buffer, size_t sz);
// Creates a timer instance wiht a determined value and associates it to a callback
// Once time expires, callback is automatically called right after GfxDrawScene().
-TYPE_TIMER * SystemCreateTimer(uint32_t seconds, bool rf, void (*timer_callback)(void) );
+// Time is expressed so that t = 100 ms e.g.: 2 seconds = 20.
+TYPE_TIMER* SystemCreateTimer(uint32_t t, bool rf, void (*timer_callback)(void) );
// Reportedly, sets all timer data to zero.
void SystemResetTimers(void);
@@ -98,13 +99,13 @@ void SystemResetTimers(void);
void SystemUserTimersHandler(void);
// Sets timer remaining time to initial value.
-void SystemTimerRestart(TYPE_TIMER * timer);
+void SystemTimerRestart(TYPE_TIMER* timer);
// Flushes a timer pointed to by timer.
-void SystemTimerRemove(TYPE_TIMER * timer);
+void SystemTimerRemove(TYPE_TIMER* timer);
// Compares two arrays of unsigned short type.
-bool SystemArrayCompare(unsigned short * arr1, unsigned short * arr2, size_t sz);
+bool SystemArrayCompare(unsigned short* arr1, unsigned short* arr2, size_t sz);
// Prints stack pointer address using dprintf()
void SystemPrintStackPointerAddress(void);