diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..35e2636 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/obj +/*.bin +/*.elf +/*.g1a +/images diff --git a/Makefile b/Makefile index ffbe99a..84d8d9f 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ $(NAME).g1a: $(NAME).bin ## Clean up your mess clean: - $(RM) $(ALLOBJ) + $(RM) $(OBJDIR) $(RM) $(NAME).elf $(RM) $(NAME).bin diff --git a/Makefile.config b/Makefile.config index 80f719b..a17cafd 100644 --- a/Makefile.config +++ b/Makefile.config @@ -11,14 +11,13 @@ SRCDIR = ./src INCDIR = ./include OBJDIR = ./obj LIBDIR = ./lib -SCPTDIR = ./scripts IMGDIR = ./img # TOOLCHAIN ## Directory maker MD = mkdir -p ## File remover -RM = rm -f +RM = rm -rf ## Assembler AS = sh3eb-elf-as ## C compiler diff --git a/README.md b/README.md index e69de29..ed4b160 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +Adaptation du jeu F1 compilé avec Gcc \ No newline at end of file diff --git a/img/menu.bmp b/img/menu.bmp index b4fa99c..da14220 100644 Binary files a/img/menu.bmp and b/img/menu.bmp differ diff --git a/include/voiture.h b/include/voiture.h index b77eb7d..7ccc23d 100644 --- a/include/voiture.h +++ b/include/voiture.h @@ -1,22 +1,24 @@ #ifndef _VOITURE #define _VOITURE - + unsigned int key; + char decal=1; + char obstacles[100]; // permet d'avoir de l'aléatoire pondéré pour les obstacles/bonus - - - + + + typedef struct Obstacles { char num_obst; short coordx; - }Obstacles; - + } Obstacles; + int Menu(void); int Jeu(void); void draw_lines(int decalx); void init_obstacle(void); void mort(int score, int type); void garage(void); - -#endif \ No newline at end of file + +#endif diff --git a/src/voiture.c b/src/voiture.c index 5ea2a80..2fcc3a8 100644 --- a/src/voiture.c +++ b/src/voiture.c @@ -4,58 +4,79 @@ #include "keyboard.h" #include "stdio.h" #include "clock.h" - -static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070}; -static int (*SysCall)(int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode; - -int RTC_getTicks() -{ - return (*SysCall)(0, 0, 0, 0, 0x3B); -} +#include "timer.h" Obstacles obstacle[4]; +void new_frame() +{ + + extern Image img_formel1; + extern Image img_obstacle; + + dclear(); + + dimage(19, 11*decal, &img_formel1); + dimage(1, 1, &img_obstacle); + + dupdate(); + + +} + +int Jeu() +{ + while(1) + { + timer_start(TIMER_USER, 25, Clock_Hz, new_frame, 0); + while(1) + { + key = getkey(); + + switch(key) + { + case KEY_UP : decal=(decal<=1 ? 1 : decal-1); break; + case KEY_DOWN : decal=(decal>=4 ? 4 : decal+1); break; + case KEY_EXIT : timer_stop(TIMER_USER); return 1; + } + } + } +} + int main(void) { - //if(!memory_exists("\\\\fls0\\F1rush.sav")) memory_createfile("\\\\fls0\\F1rush.sav",10); // on creer le fichier + short menu=0; - Menu(); + extern Image img_menu; - return 1; -} + while(1) + { + dclear(); -int Menu() -{ -short menu=0; -char key=0; + dimage(0, 0, &img_menu); -extern Image img_menu; + dreverse_area(62+16*menu,23+21*menu,108+16*menu,39+21*menu); -while(1) - { - dclear(); + dupdate(); - dimage(0, 0, &img_menu); + key=getkey(); - dreverse_area(62+16*menu,23+21*menu,108+16*menu,39+21*menu); - - key=getkey(); - - switch(key) - { - case KEY_UP : case KEY_DOWN : menu=!menu; break; - case KEY_EXE : - - switch(menu) + switch(key) { - case 0 : Jeu(); break; - case 1 : /*garage();*/ break; - } + case KEY_UP : case KEY_DOWN : menu=!menu; break; + case KEY_EXE : + + switch(menu) + { + case 0 : Jeu(); break; + case 1 : /*garage();*/ break; + } + break; + case KEY_EXIT : return 1; + } + } - case KEY_EXIT : return 1; - } - } } /*void garage(void) @@ -102,8 +123,7 @@ PrintMini(11,17,buffer,0); } }*/ - -int Jeu() +/*int Jeu() { extern Image img_formel1; @@ -116,7 +136,7 @@ int speed=50; unsigned int i=0,j=0; char appuie=0; int score=0; -char vie=1; +char vie=10; int max=100; int money=0; short essence=100; @@ -139,7 +159,6 @@ for(j=0;j<4;j++) if(obstacle[j].coordx<0) { - srand(RTC_getTicks()); obstacle[j].num_obst=obstacles[rand()%100]; obstacle[j].coordx=128+40*j; } @@ -158,16 +177,16 @@ for(j=0;j<4;j++) case 2 : speed+=25; break; case 3 : speed-=25; break; case 4 : vie++; break; - case 5 : decalx_car=74; start_time=RTC_getTicks(); obstacle[decal-1].num_obst=0;break; + // case 5 : decalx_car=74; obstacle[decal-1].num_obst=0;break; case 6 : essence=max; break; case 7 : money++; break; case 8 : money+=2; break; } - if(decalx_car==74 && (int)(RTC_getTicks()-start_time)>192) - { - decalx_car=24; - } + // if(decalx_car==74 && (int)(RTC_getTicks()-start_time)>192) + // { + // decalx_car=24; + // } obstacle[decal-1].num_obst=0; } @@ -178,47 +197,44 @@ for(j=0;j<4;j++) } essence=(i%26==0 ? essence-10 : essence); //chaque seconde 10 d'essence partent - dupdate(); - - - if(getkey_opt(0x00, 1)==KEY_UP && appuie==0) // KEY_CTRL_UP - { - decal=(decal<=1 ? 1 : decal-1); - appuie=1; - } - else if(getkey_opt(0x00, 1)==KEY_DOWN && appuie==0) //KEY_CTRL_DOWN - { - decal=(decal>=4 ? 4 : decal+1); - appuie=1; - } - else if (getkey_opt(0x00, 1)==KEY_NONE) // permet de ne pas rester appuiyer sur la touche (simule le Getkey()) - { - appuie=0; - } - - if(getkey_opt(0x00, 1)==KEY_EXIT) //KEY_CTRL_EXIT - { - return 1; - } - /*sprintf(buffer,"metre : %d vie : %d", score, vie); - PrintMini(1,1,buffer,0);*/ - + //dupdate(); dprint(1, 1, "metre : %d vie : %d", score, vie); -/* sprintf(buffer,"essence %d/%d Argent %d ", essence, max, money); - PrintMini(1,56,buffer,0);*/ - dprint(1,56,"essence %d/%d Argent %d ", essence, max, money); -dupdate(); + timer_start(TIMER_USER, 80, Clock_Hz, vide, 0); - sleep_us(75000); + //while(1) { + + if(key==KEY_UP && appuie==0) // KEY_CTRL_UP + { + decal=(decal<=1 ? 1 : decal-1); + appuie=1; + break; + } + else if(key==KEY_DOWN && appuie==0) //KEY_CTRL_DOWN + { + decal=(decal>=4 ? 4 : decal+1); + appuie=1; + break; + } + else if (key==KEY_NONE) // permet de ne pas rester appuiyer sur la touche (simule le Getkey()) + { + appuie=0; + break; + } + if(key==KEY_EXIT) //KEY_CTRL_EXIT + { + timer_stop(TIMER_USER); + return 1; + } + //} i+=3; score=(i%4==0 ? score+2: score); } return 1; -} +}*/ void mort(int score , int type) { @@ -240,23 +256,19 @@ return; void init_obstacle() { -int i=0; +int i=0,j=0; +char proba[10]={0,30,70,75,80,83,86,95,98,100}; -while(i<100) +while(j<9) { -if(i<30) obstacles[i]=0; // vide -else if (i>=30 && i<70) obstacles[i]=1; -else if (i>=70 && i<75) obstacles[i]=2; -else if (i>=75 && i<80) obstacles[i]=3; -else if (i>=80 && i<83) obstacles[i]=4; -else if (i>=83 && i<86) obstacles[i]=5; -else if (i>=86 && i<95) obstacles[i]=6; -else if (i>=95 && i<98) obstacles[i]=7; -else if (i>=98 /*&& i<100*/) obstacles[i]=8; -i++; +for(i=proba[j];i