From 08244235457aca77e2e7086f79a66531a3a99dd2 Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Wed, 13 Apr 2022 23:33:33 +0200 Subject: [PATCH] corrected bug in name entering + working on OC option --- CMakeLists.txt | 1 + CppOutRun.cbp | 11 +++ CppOutRun.layout | 180 ++++++++++++++++++++++-------------------- src/clock.cc | 198 +++++++++++++++++++++++++++++++++++++++++++++++ src/clock.h | 31 ++++++++ src/main.cc | 25 +++++- src/src/menus.cc | 145 ++++++++++++++++++++++++---------- 7 files changed, 464 insertions(+), 127 deletions(-) create mode 100644 src/clock.cc create mode 100644 src/clock.h 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