diff --git a/CMakeLists.txt b/CMakeLists.txt
index 90433c0..128fc78 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,6 +11,7 @@ find_package(LibProf 2.4 REQUIRED)
set(SOURCES
src/main.cc
+ src/clock.cc
src/src/segment.cc
src/src/camera.cc
src/src/circuit.cc
diff --git a/CppOutRun.cbp b/CppOutRun.cbp
index be0a7d4..2bf627d 100644
--- a/CppOutRun.cbp
+++ b/CppOutRun.cbp
@@ -29,6 +29,8 @@
+
+
@@ -52,6 +54,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/CppOutRun.layout b/CppOutRun.layout
index 5ac5f65..a5dd53e 100644
--- a/CppOutRun.layout
+++ b/CppOutRun.layout
@@ -2,9 +2,22 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12,9 +25,39 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -27,44 +70,19 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
@@ -72,6 +90,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -99,62 +154,19 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/clock.cc b/src/clock.cc
new file mode 100644
index 0000000..bec007c
--- /dev/null
+++ b/src/clock.cc
@@ -0,0 +1,198 @@
+#include "clock.h"
+#include
+#include
+#include
+#include
+#include
+
+
+#define FLLFRQ_default 0x00004384
+#define FRQCR_default 0x0F011112
+
+#define CS0BCR_default 0x36DA0400 // CG50
+#define CS2BCR_default 0x36DA3400 // CG50
+#define CS3BCR_default 0x36DB4400 // CG50
+#define CS4BCR_default 0x36DB0400
+#define CS5aBCR_default 0x17DF0400
+#define CS5bBCR_default 0x17DF0400
+#define CS6aBCR_default 0x34D30200
+#define CS6bBCR_default 0x34D30200
+
+#define CS0WCR_default 0x000003C0 // CG50
+#define CS2WCR_default 0x000003C0 // CG50
+#define CS3WCR_default 0x000024D1 // CG50
+#define CS4WCR_default 0x00000540
+#define CS5aWCR_default 0x000203C1
+#define CS5bWCR_default 0x000203C1
+#define CS6aWCR_default 0x000302C0
+#define CS6bWCR_default 0x000302C0
+#define SDCR_default 0x00000A08
+
+#define PLL_32x 0b011111 //
+#define PLL_26x 0b011001 //
+#define PLL_16x 0b001111 // default
+
+#define DIV_2 0b0000 // 1/2
+#define DIV_4 0b0001 // 1/4
+#define DIV_8 0b0010 // 1/8
+#define DIV16 0b0011 // 1/16
+
+#define WAIT18 0b1011
+
+#define CPG SH7305_CPG
+#define BSC SH7305_BSC
+#define SDMR3_CL2 *(volatile uint8_t *)0xFEC15040 // SDMR2 Address
+#define SDMR3_CL3 *(volatile uint8_t *)0xFEC15060 // SDMR2 Address
+
+static overclock_level current_clock_state = OC_Default;
+bool overclock_config_changed = false;
+
+
+void SetOCDefault( void )
+{
+ BSC.CS0WCR.WR = WAIT18;
+
+ CPG.FLLFRQ.lword = FLLFRQ_default;
+ CPG.FRQCR.lword = FRQCR_default;
+
+ CPG.FRQCR.KICK = 1 ;
+ while((CPG.LSTATS & 1)!=0)
+
+ BSC.CS0BCR.lword = CS0BCR_default;
+ BSC.CS0WCR.lword = CS0WCR_default;
+ BSC.CS2BCR.lword = CS2BCR_default;
+ BSC.CS2WCR.lword = CS2WCR_default;
+ BSC.CS3BCR.lword = CS3BCR_default;
+ BSC.CS3WCR.lword = CS3WCR_default;
+
+ if ( BSC.CS3WCR.A3CL == 1 ) SDMR3_CL2 = 0; else SDMR3_CL3 = 0;
+
+ BSC.CS5ABCR.lword = CS5aBCR_default;
+ BSC.CS5AWCR.lword = CS5aWCR_default;
+}
+
+void SetOCPtuneF2( void )
+{
+ BSC.CS0WCR.WR = WAIT18;
+
+ CPG.FLLFRQ.lword = 0x00004000+900;
+ CPG.FRQCR.lword = (PLL_16x<<24)+(DIV_4<<20)+(DIV_8<<12)+(DIV_8<<8)+DIV_8;
+
+ CPG.FRQCR.KICK = 1 ;
+ while((CPG.LSTATS & 1)!=0)
+
+ BSC.CS0BCR.lword = 0x24920400;
+ BSC.CS0WCR.lword = 0x00000340;
+ BSC.CS2BCR.lword = 0x24923400;
+ BSC.CS2WCR.lword = CS2WCR_default;
+ BSC.CS3BCR.lword = 0x24924400;
+ BSC.CS3WCR.lword = CS3WCR_default;
+
+ if ( BSC.CS3WCR.A3CL == 1 ) SDMR3_CL2 = 0; else SDMR3_CL3 = 0;
+
+ BSC.CS5ABCR.lword = CS5aBCR_default;
+ BSC.CS5AWCR.lword = CS5aWCR_default;
+}
+
+void SetOCPtuneF3( void )
+{
+ BSC.CS0WCR.WR = WAIT18;
+
+ CPG.FLLFRQ.lword = 0x00004000+900;
+ CPG.FRQCR.lword = (PLL_26x<<24)+(DIV_4<<20)+(DIV_8<<12)+(DIV_8<<8)+DIV_8;
+
+ CPG.FRQCR.KICK = 1 ;
+ while((CPG.LSTATS & 1)!=0)
+
+ BSC.CS0BCR.lword = 0x24920400;
+ BSC.CS0WCR.lword = 0x00000240;
+ BSC.CS2BCR.lword = 0x24923400;
+ BSC.CS2WCR.lword = CS2WCR_default;
+ BSC.CS3BCR.lword = 0x24924400;
+ BSC.CS3WCR.lword = CS3WCR_default;
+
+ if ( BSC.CS3WCR.A3CL == 1 ) SDMR3_CL2 = 0; else SDMR3_CL3 = 0;
+
+ BSC.CS5ABCR.lword = CS5aBCR_default;
+ BSC.CS5AWCR.lword = CS5aWCR_default;
+}
+
+void SetOCPtuneF4( void )
+{
+ BSC.CS0WCR.WR = WAIT18;
+
+ CPG.FLLFRQ.lword = 0x00004000+900;
+ CPG.FRQCR.lword = (PLL_32x<<24)+(DIV_2<<20)+(DIV_4<<12)+(DIV_8<<8)+DIV16;
+
+ CPG.FRQCR.KICK = 1 ;
+ while((CPG.LSTATS & 1)!=0)
+
+
+ BSC.CS0BCR.lword = 0x24920400;
+ BSC.CS0WCR.lword = 0x000002C0;
+ BSC.CS2BCR.lword = 0x24923400;
+ BSC.CS2WCR.lword = CS2WCR_default;
+ BSC.CS3BCR.lword = 0x24924400;
+ BSC.CS3WCR.lword = CS3WCR_default;
+ BSC.CS5ABCR.lword = CS5aBCR_default;
+ BSC.CS5AWCR.lword = CS5aWCR_default;
+}
+
+void SetOCPtuneF5( void )
+{
+ BSC.CS0WCR.WR = WAIT18;
+
+ CPG.FLLFRQ.lword = 0x00004000+900;
+ CPG.FRQCR.lword = (PLL_26x<<24)+(DIV_2<<20)+(DIV_4<<12)+(DIV_4<<8)+DIV_8;
+
+ CPG.FRQCR.KICK = 1 ;
+ while((CPG.LSTATS & 1)!=0)
+
+ BSC.CS0BCR.lword = 0x24920400;
+ BSC.CS0WCR.lword = 0x00000440;
+ BSC.CS2BCR.lword = 0x24923400;
+ BSC.CS2WCR.lword = CS2WCR_default;
+ BSC.CS3BCR.lword = 0x24924400;
+ BSC.CS3WCR.lword = CS3WCR_default;
+
+ if ( BSC.CS3WCR.A3CL == 1 ) SDMR3_CL2 = 0; else SDMR3_CL3 = 0;
+
+ BSC.CS5ABCR.lword = CS5aBCR_default;
+ BSC.CS5AWCR.lword = CS5aWCR_default;
+}
+
+
+// return 0 if no need to change
+// return 1 if successful change
+// return -1 on error
+
+int clock_overclock( overclock_level level )
+{
+ uint32_t count=0;
+
+ if(gint[HWCALC] == HWCALC_FXCG50 && current_clock_state!=level)
+ {
+ cpu_atomic_start();
+
+ if (level == OC_Default && current_clock_state!=OC_Default) SetOCDefault(), current_clock_state= OC_Default, overclock_config_changed=true;
+ if (level == OC_PtuneF2 && current_clock_state!=OC_PtuneF2) SetOCPtuneF2(), current_clock_state= OC_PtuneF2, overclock_config_changed=true;
+ if (level == OC_PtuneF3 && current_clock_state!=OC_PtuneF3) SetOCPtuneF3(), current_clock_state= OC_PtuneF3, overclock_config_changed=true;
+ if (level == OC_PtuneF4 && current_clock_state!=OC_PtuneF4) SetOCPtuneF4(), current_clock_state= OC_PtuneF4, overclock_config_changed=true;
+ if (level == OC_PtuneF5 && current_clock_state!=OC_PtuneF5) SetOCPtuneF5(), current_clock_state= OC_PtuneF5, overclock_config_changed=true;
+/*
+ if (overclock_config_changed==true)
+ {
+ CPG.FRQCR.KICK = 1 ;
+ while((CPG.LSTATS & 1)!=0 && count<=1000)
+ { count++; }
+ }
+*/
+ cpu_atomic_end();
+
+// if (count >= 1000) return -1;
+// else return 1;
+ return 1;
+ }
+ else return 0;
+}
+
diff --git a/src/clock.h b/src/clock.h
new file mode 100644
index 0000000..fcebe12
--- /dev/null
+++ b/src/clock.h
@@ -0,0 +1,31 @@
+#ifndef OVERCLOCK_H
+#define OVERCLOCK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum
+{
+ OC_Default = 0, // Default (118MHz)
+ OC_PtuneF2 = 1, // 59MHz
+ OC_PtuneF3 = 2, // 96MHz
+ OC_PtuneF4 = 3, // 236MHz
+ OC_PtuneF5 = 4 // 191MHz
+} overclock_level;
+
+
+// return 0 if no need to change
+// return 1 if successful change
+// return -1 on error
+
+int clock_overclock( overclock_level level );
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* OVERCLOCK_H */
diff --git a/src/main.cc b/src/main.cc
index 873b0fe..f4e5941 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -31,10 +31,12 @@
#include
+#include "clock.h"
+
#define DEBUGXXX 0
-char version[5] = {'V','1','.','0','3'};
+char version[5] = {'V','1','.','0','4'};
extern bopti_image_t player;
@@ -100,6 +102,9 @@ bool BDrawCars = true;
bool BDrawBack = true;
bool BDrawFPS = false;
+bool isOCPossible = false;
+bool isOCActivated = false;
+
bool OptionMode = false;
bool PauseMode = false;
bool SkipTime = false;
@@ -405,6 +410,13 @@ int main(void)
bool canWeAllocate3Mb = false;
+ //Check if we can overclock i.e. if we have a CG50/Graph 90+E
+ if (gint[HWCALC] == HWCALC_FXCG50)
+ isOCPossible = true;
+ else
+ isOCPossible = false;
+
+
if((!strncmp(osv, "03.", 3) && osv[3] <= '6') && gint[HWCALC] == HWCALC_FXCG50) // CG-50
{
extended_ram.name = "extram";
@@ -526,6 +538,9 @@ int main(void)
PlayerPara[0].PlayerName[2]=PlayerName[2];
gint_world_switch( GINT_CALL( saveparameters ) );
+
+ if (gint[HWCALC] == HWCALC_FXCG50 && isOCActivated == true) clock_overclock( OC_PtuneF4 );
+ else if (gint[HWCALC] == HWCALC_FXCG50 && isOCActivated == false) clock_overclock( OC_Default );
}
else if (mode==3)
{
@@ -1356,12 +1371,20 @@ int main(void)
}
while (exitToOS==false);
+
+
+
+
+
prof_quit();
#if IS_FXLIB==1
usb_close();
#endif
+ if (gint[HWCALC] == HWCALC_FXCG50 && isOCActivated == true) clock_overclock( OC_Default );
+
+
delete cam;
diff --git a/src/src/menus.cc b/src/src/menus.cc
index 782554d..57a9f01 100644
--- a/src/src/menus.cc
+++ b/src/src/menus.cc
@@ -16,6 +16,8 @@ extern BestRanking HallOfFame[10][5];
extern uint8_t NB_CARS_TRAFFIC;
+extern bool isOCPossible;
+extern bool isOCActivated;
extern bopti_image_t mainscreen;
extern bopti_image_t africa1, desert1, finland1, plains1, usa1;
@@ -722,79 +724,124 @@ void drawGameOptions( void )
if (DiffLevel==0)
{
- dprint_opt(94, 22, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL " );
- if (GameOptionsSelection!=0) dprint_opt(92, 20, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL " );
- else dprint_opt(92, 20, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL " );
+ dprint_opt(94, 22, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL EASY >" );
+ if (GameOptionsSelection!=0) dprint_opt(92, 20, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL EASY >" );
+ else dprint_opt(92, 20, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL EASY >" );
}
else if (DiffLevel==1)
{
- dprint_opt(94, 22, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL " );
- if (GameOptionsSelection!=0) dprint_opt(92, 20, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL " );
- else dprint_opt(92, 20, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL " );
+ dprint_opt(94, 22, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL < NORMAL >" );
+ if (GameOptionsSelection!=0) dprint_opt(92, 20, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL < NORMAL >" );
+ else dprint_opt(92, 20, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL < NORMAL >" );
}
else if (DiffLevel==2)
{
- dprint_opt(94, 22, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL " );
- if (GameOptionsSelection!=0) dprint_opt(92, 20, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL " );
- else dprint_opt(92, 20, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL " );
+ dprint_opt(94, 22, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL < HARD" );
+ if (GameOptionsSelection!=0) dprint_opt(92, 20, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL < HARD" );
+ else dprint_opt(92, 20, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "LVL < HARD" );
}
if (CarsNumb==0)
{
- dprint_opt(94, 52, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <50>" );
- if (GameOptionsSelection!=1) dprint_opt(92, 50, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <50>" );
- else dprint_opt(92, 50, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <50>" );
+ dprint_opt(94, 52, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS 50 >" );
+ if (GameOptionsSelection!=1) dprint_opt(92, 50, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS 50 >" );
+ else dprint_opt(92, 50, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS 50 >" );
}
else if (CarsNumb==1)
{
- dprint_opt(94, 52, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <100>" );
- if (GameOptionsSelection!=1) dprint_opt(92, 50, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <100>" );
- else dprint_opt(92, 50, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <100>" );
+ dprint_opt(94, 52, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS < 100 >" );
+ if (GameOptionsSelection!=1) dprint_opt(92, 50, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS < 100 >" );
+ else dprint_opt(92, 50, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS < 100 >" );
}
else if (CarsNumb==2)
{
- dprint_opt(94, 52, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <200>" );
- if (GameOptionsSelection!=1) dprint_opt(92, 50, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <200>" );
- else dprint_opt(92, 50, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <200>" );
+ dprint_opt(94, 52, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS < 200 >" );
+ if (GameOptionsSelection!=1) dprint_opt(92, 50, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS < 200 >" );
+ else dprint_opt(92, 50, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS < 200 >" );
}
else if (CarsNumb==3)
{
- dprint_opt(94, 52, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <300>" );
- if (GameOptionsSelection!=1) dprint_opt(92, 50, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <300>" );
- else dprint_opt(92, 50, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS <300>" );
+ dprint_opt(94, 52, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS < 300" );
+ if (GameOptionsSelection!=1) dprint_opt(92, 50, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS < 300" );
+ else dprint_opt(92, 50, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CARS < 300" );
}
-
+/*
dprint_opt(94, 82, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "PLAYER" );
dprint_opt(92, 80, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "PLAYER" );
+*/
+
+ dprint_opt(94, 82, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "PLAYER NAME" );
+ if (GameOptionsSelection!=2) dprint_opt(92, 80, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "PLAYER NAME" );
+ else dprint_opt(92, 80, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "PLAYER NAME" );
+
+ if(nameCurrentlyWritten==true)
+ {
+ dfont(&autofont);
+
+ dprint_opt(124, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[0] );
+ if (selectedChar!=0) dprint_opt(122, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[0] );
+ else dprint_opt(122, 110, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[0] );
+
+ dprint_opt(154, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[1] );
+ if (selectedChar!=1) dprint_opt(152, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[1] );
+ else dprint_opt(152, 110, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[1] );
+
+ dprint_opt(184, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[2] );
+ if (selectedChar!=2) dprint_opt(182, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[2] );
+ else dprint_opt(182, 110, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[2] );
+
+ dfont(&speedfont);
+ dprint_opt(214, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "@" );
+ if (selectedChar!=3) dprint_opt(212, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "@" );
+ else dprint_opt(212, 110, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "@" );
+ }
+ else
+ {
+ dfont(&autofont);
+ dprint_opt(124, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[0] );
+ dprint_opt(122, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[0] );
+ dprint_opt(154, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[1] );
+ dprint_opt(152, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[1] );
+ dprint_opt(184, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[2] );
+ dprint_opt(182, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[2] );
+
+ dfont(&speedfont);
+ dprint_opt(214, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "@" );
+ dprint_opt(212, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "@" );
+ }
- dprint_opt(124, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[0] );
- if (GameOptionsSelection!=2 || selectedChar!=0) dprint_opt(122, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[0] );
- else if (GameOptionsSelection==2 && selectedChar==0) dprint_opt(122, 110, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[0] );
- dprint_opt(154, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[1] );
- if (GameOptionsSelection!=2 || selectedChar!=1) dprint_opt(152, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[1] );
- else if (GameOptionsSelection==2 && selectedChar==1) dprint_opt(152, 110, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[1] );
+ dfont(&autofont);
+ if(isOCPossible)
+ {
+ if (isOCActivated==false)
+ {
+ dprint_opt(94, 142, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "OVERCLOCK [N]" );
+ if (GameOptionsSelection!=3) dprint_opt(92, 140, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "OVERCLOCK [N]" );
+ else dprint_opt(92, 140, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "OVERCLOCK [N]" );
+ }
+ else
+ {
+ dprint_opt(94, 142, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "OVERCLOCK [Y]" );
+ if (GameOptionsSelection!=3) dprint_opt(92, 140, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "OVERCLOCK [Y]" );
+ else dprint_opt(92, 140, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "OVERCLOCK [Y]" );
+ }
+ }
- dprint_opt(184, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[2] );
- if (GameOptionsSelection!=2 || selectedChar!=2) dprint_opt(182, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[2] );
- else if (GameOptionsSelection==2 && selectedChar==2) dprint_opt(182, 110, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%c", PlayerName[2] );
- dfont(&speedfont);
- dprint_opt(214, 112, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "@" );
- if (GameOptionsSelection!=2 || selectedChar!=3) dprint_opt(212, 110, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "@" );
- else if (GameOptionsSelection==2 && selectedChar==3) dprint_opt(212, 110, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "@" );
dfont(&autofont);
dprint_opt(94, 172, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "BACK TO GAME" );
- if (GameOptionsSelection!=3) dprint_opt(92, 170, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "BACK TO GAME" );
+ if (GameOptionsSelection!=4) dprint_opt(92, 170, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "BACK TO GAME" );
else dprint_opt(92, 170, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "BACK TO GAME" );
if (GameOptionsSelection==0) dimage( 2, 5, &flag );
else if (GameOptionsSelection==1) dimage( 2, 35, &flag );
else if (GameOptionsSelection==2) dimage( 2, 65, &flag );
- else if (GameOptionsSelection==3) dimage( 2, 155, &flag );
+ else if (GameOptionsSelection==3) dimage( 2, 125, &flag );
+ else if (GameOptionsSelection==4) dimage( 2, 155, &flag );
// CODE HERE TO PRINT WELCOME MENU
@@ -836,14 +883,25 @@ void getInputGameOptions( void )
if (key==KEY_EXE)
{
- if (GameOptionsSelection==2) nameCurrentlyWritten=false;
-
- if (GameOptionsSelection==3) doneGameOptions=true;
+ if (GameOptionsSelection==2 && nameCurrentlyWritten==false)
+ {
+ nameCurrentlyWritten=true;
+ selectedChar=0;
+ }
+ else if (GameOptionsSelection==2 && nameCurrentlyWritten==true && selectedChar<3) selectedChar++;
+ else if (GameOptionsSelection==2 && nameCurrentlyWritten==true && selectedChar==3)
+ {
+ nameCurrentlyWritten=false;
+ selectedChar=0;
+ }
+ if (GameOptionsSelection==3 && isOCPossible==true) isOCActivated=!isOCActivated;
+ else if (GameOptionsSelection==4) doneGameOptions=true;
}
if (key==KEY_UP && !nameCurrentlyWritten)
{
- if (GameOptionsSelection==0) GameOptionsSelection=3;
+ if (GameOptionsSelection==0) GameOptionsSelection=4;
+ else if (GameOptionsSelection==4 && isOCPossible==false) GameOptionsSelection=2;
else GameOptionsSelection--;
}
@@ -862,7 +920,8 @@ void getInputGameOptions( void )
if (key==KEY_DOWN && !nameCurrentlyWritten)
{
- if (GameOptionsSelection==3) GameOptionsSelection=0;
+ if (GameOptionsSelection==4) GameOptionsSelection=0;
+ else if (GameOptionsSelection==2 && isOCPossible==false) GameOptionsSelection=4;
else GameOptionsSelection++;
}
@@ -889,6 +948,7 @@ void getInputGameOptions( void )
if (GameOptionsSelection==0 && DiffLevel>0) DiffLevel--;
else if (GameOptionsSelection==1 && CarsNumb>0) CarsNumb--;
+ else if (GameOptionsSelection==3) isOCActivated=false;
}
if (key==KEY_RIGHT)
@@ -901,6 +961,7 @@ void getInputGameOptions( void )
if (GameOptionsSelection==0 && DiffLevel<2) DiffLevel++;
else if (GameOptionsSelection==1 && CarsNumb<3) CarsNumb++;
+ else if (GameOptionsSelection==3) isOCActivated=true;
}
#if IS_FXLIB==1