From e2b6eac34bafe7bc74f858359c2e0462409c282f Mon Sep 17 00:00:00 2001 From: Milang Date: Sat, 15 Feb 2020 19:35:49 +0100 Subject: [PATCH] fix keyboard bug, lighten interface & clean some parts of the code --- INIT/CasioRAM.mem | Bin 81108 -> 52908 bytes SuperCbr.dlw | 6 +- SuperCbr.g1a | Bin 64044 -> 64180 bytes include/base.h | 6 +- include/keyboard.h | 12 ++-- include/save.h | 10 ++-- src/base.c | 28 ++++----- src/keyboard.c | 64 ++++++++++----------- src/levelchanger.c | 39 +++++-------- src/mario.c | 137 +++++++++++++-------------------------------- src/save.c | 14 ++--- src/world.c | 8 ++- 12 files changed, 129 insertions(+), 195 deletions(-) diff --git a/INIT/CasioRAM.mem b/INIT/CasioRAM.mem index a8777767434798e6f3e9525c47a5f790a3809b40..47c46dabdc97a5c3c8146554e0a398363a03baf3 100644 GIT binary patch delta 5936 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 SlMtIsm!KyBJGYxB0XY>Kv~rXH delta 34341 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 RnTVN(o;>KDoP4cG_J4Fcb1MJ< diff --git a/SuperCbr.dlw b/SuperCbr.dlw index b0fd2ef..7d77d80 100644 --- a/SuperCbr.dlw +++ b/SuperCbr.dlw @@ -2,7 +2,7 @@ [_1] Type=5 -Order=3 +Order=0 Top=15 Left=2235 Height=4740 @@ -25,7 +25,7 @@ OptionB=15 [_3] Type=6 -Order=0 +Order=2 Top=4740 Left=7800 Height=6390 @@ -91,7 +91,7 @@ OptionA=0 [_9] Type=15 -Order=2 +Order=3 Top=4740 Left=2235 Height=6345 diff --git a/SuperCbr.g1a b/SuperCbr.g1a index 25c9d74565b6f256458df57c0bb52ed7a3b78afc..0db422eb2dc307d14578404775d2f2e6b1794472 100644 GIT binary patch delta 7150 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 diff --git a/include/base.h b/include/base.h index a773e88..18966f9 100644 --- a/include/base.h +++ b/include/base.h @@ -1,5 +1,5 @@ #ifndef BASE_FUNCTIONS_H -#define BASE_FUNCTIONS_H +#define BASE_FUNCTIONS_H // On va essayer de grapiller quelques octets d'executable avec ça @@ -9,8 +9,10 @@ int min(const int x, const int y); int sgn(const int x); +int abs(const int x); + void* malloc_prof(int size); void free_prof(void * p); -#endif \ No newline at end of file +#endif diff --git a/include/keyboard.h b/include/keyboard.h index 3882855..81ee2dd 100755 --- a/include/keyboard.h +++ b/include/keyboard.h @@ -1,10 +1,10 @@ // v0.3 #ifndef MARIO_KEYBOARD_H -#define MARIO_KEYBOARD_H +#define MARIO_KEYBOARD_H #define KONAMI -/* Reduced keyboard +/* Reduced keyboard It simulates a nes controller */ typedef enum { @@ -12,9 +12,9 @@ typedef enum MK_LEFT=0, MK_RIGHT, MK_DOWN, - MK_UP, + MK_UP, MK_JUMP, // Shift - MK_RUN // Alpha + MK_RUN // Alpha } mkb_t; /* This function has been coded to replace the following array @@ -23,7 +23,7 @@ typedef enum 2=newly pressed 1=currently down 0=up -*/ +*/ int mkb_getstate(mkb_t const k); // Update the keyboard, should be called at each frame @@ -36,4 +36,4 @@ void mkb_clear(); // /!\ return gint keycodes int mkb_getkey(); -#endif \ No newline at end of file +#endif diff --git a/include/save.h b/include/save.h index 8c979dd..c0edeba 100644 --- a/include/save.h +++ b/include/save.h @@ -8,15 +8,15 @@ void load_save(); // Ho calme toi pas tt de suite ! Utilisera BFile lorsque le h void flash_save(); // Non plus :E int get_highscore(int world, int level); -void set_highscore(int world, int level, int score); +void set_highscore(int world, int level, unsigned int score); int get_best_time(int world, int level); -void set_best_time(int world, int level, int score); +void set_best_time(int world, int level, unsigned int time); int get_highcoins(int world, int level); -void set_highcoins(int world, int level, int coins); +void set_highcoins(int world, int level, unsigned int coins); -int get_progress_status(); +unsigned int GetProgressStatus(); -#endif \ No newline at end of file +#endif diff --git a/src/base.c b/src/base.c index 875464c..906e852 100644 --- a/src/base.c +++ b/src/base.c @@ -14,15 +14,18 @@ int min(const int x, const int y) int sgn(const int x) { - if (x>0) - return 1; - else if (x<0) - return -1; - else - return 0; + if (x>0) return 1; + else if (x<0) return -1; + else return 0; } -static int ram_used=0; +int abs(const int x) +{ + if (x>0) return x; + else return -x; +} + +static int ram_used=0; void* malloc_prof(int size) { @@ -32,13 +35,10 @@ void* malloc_prof(int size) ll_sendp(LEVEL_INFO, "\n[std] malloc %d OK", size); ram_used++; ll_sendp(LEVEL_INFO, "\n[std] number of zones %d", ram_used); - return p; - } - if (p) - { - ll_sendp(LEVEL_CRITICAL, "\n[std] malloc %d FAILED", size); - return p; } + else ll_sendp(LEVEL_CRITICAL, "\n[std] malloc %d FAILED", size); + + return p; } void free_prof(void * p) @@ -47,4 +47,4 @@ void free_prof(void * p) ll_sendp(LEVEL_INFO, "\n[std] free called"); ram_used--; ll_sendp(LEVEL_INFO, "\n[std] number of zones %d", ram_used); -} \ No newline at end of file +} diff --git a/src/keyboard.c b/src/keyboard.c index 389fb8c..0c81122 100755 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -13,14 +13,14 @@ static mkb_t keys[6]={0}; int mkb_getstate(mkb_t const k) { if (k!=MK_NONE) - return keys[k]; + return keys[k]; return 0; } void mkb_clear() { for (int i=0; i<6; i++) - keys[i]=0; + keys[i]=0; clearevents(); } @@ -32,16 +32,16 @@ int mkb_getkey() { key_event_t const e=pollevent(); if (e.key==KEY_ARROW) - ll_pause(); + ll_pause(); if (e.type==KEYEV_DOWN) // Returns only whan a key is down - return e.key; + return e.key; else - sleep(); // Processor friendly :) + sleep(); // Processor friendly :) } } static int menu_pause() // 1 exit, 0 continue -{ +{ extern image_t img_menu_pause; extern image_t img_select_arrow; @@ -52,7 +52,7 @@ static int menu_pause() // 1 exit, 0 continue int x=64-img_menu_pause.width/2; int y=32-img_menu_pause.height/2; for (int i=0; i<6; i++) - keys[i]=0; + keys[i]=0; while (1) { dimage(x,y,&img_menu_pause); @@ -70,19 +70,19 @@ static int menu_pause() // 1 exit, 0 continue // fall through case KEY_EXE: if (choice==2) - configmenu(); + configmenu(); return choice & 1; case KEY_UP: if (choice>0) - choice--; + choice--; break; case KEY_DOWN: if (choice<2) - choice++; + choice++; break; -#ifdef KONAMI + #ifdef KONAMI case KEY_F1: for (int a=0; a<10; a++) @@ -92,16 +92,16 @@ static int menu_pause() // 1 exit, 0 continue { static int const konami[]={KEY_UP,KEY_UP,KEY_DOWN,KEY_DOWN,KEY_LEFT,KEY_RIGHT,KEY_LEFT,KEY_RIGHT,KEY_ALPHA,KEY_SHIFT}; if (e.key!=konami[a]) - break; + break; } if (keydown(KEY_EXIT)) - break; + break; if (a==10) // Cheat code { mario_bigger(); mario_has_bullets=1; - for (int i=0; i<20; i++) - lifes_add(); + + LifesAdd(20); extern image_t img_dev; dimage(0,0,&img_dev); dupdate(); @@ -109,9 +109,9 @@ static int menu_pause() // 1 exit, 0 continue return 0; } else - e=pollevent(); + e=pollevent(); } -#endif + #endif } } } @@ -121,33 +121,34 @@ void mkb_update() key_event_t e; e=pollevent(); int menu=0, log=0; - for (int i=0; i<6; i++) - if (keys[i]==2) keys[i]=1; + for (int i=0; i<6; i++) if (keys[i]==2) keys[i]=1; else if (keys[i]<0 || keys[i]>2) keys[i]=0; while(e.type!=KEYEV_NONE) { mkb_t k = MK_NONE; if(e.key==KEY_LEFT) - k=MK_LEFT; + k=MK_LEFT; if(e.key==KEY_RIGHT) - k=MK_RIGHT; + k=MK_RIGHT; if(e.key==KEY_SHIFT) - k=MK_JUMP; + k=MK_JUMP; + if(e.key==KEY_COS) + k=MK_JUMP; if(e.key==KEY_UP) - k=MK_UP; + k=MK_UP; if(e.key==KEY_DOWN) - k=MK_DOWN; + k=MK_DOWN; if(e.key==KEY_OPTN) - k=MK_RUN; + k=MK_RUN; if(keydown(KEY_EXIT)) - menu=1; // Displays menu after updating the keyboard + menu=1; // Displays menu after updating the keyboard if (e.key==KEY_ARROW) - log=1; + log=1; if (k!=MK_NONE) { @@ -166,14 +167,9 @@ void mkb_update() { int t=menu_pause(); if (t==1) - finish_level=-1; // Exits the level + finish_level=-1; // Exits the level return; } if (log) - ll_pause(); + ll_pause(); } - - - - - diff --git a/src/levelchanger.c b/src/levelchanger.c index c0d83dc..de2330a 100644 --- a/src/levelchanger.c +++ b/src/levelchanger.c @@ -17,34 +17,26 @@ #include #include +int PlayLevel(int, int); // déclaration de la fonction codée plus bas + static void LevelChanger(int world) { - int play_level(int, int); // déclaration de la fonction codée plus bas - - extern image_t img_levelchanger; - + mkb_clear(); // clear keyboard unsigned int choice=0; - // x y, first button coordinates and size - const int xt = 19, yt = 7, wt = 6, ht = 6; - while (1) { - mkb_clear(); - dimage(0,0,&img_levelchanger); - - drect(xt+(2+wt)*choice, yt, xt+(wt+2)*choice+wt,yt+ht, C_INVERT); + extern image_t img_levelchanger; + dimage(0,0,&img_levelchanger); // Draw menu + drect(19+8*choice, 7, 25+8*choice, 13, C_INVERT); // Invert color of selected level char str[8]; if (choice != 8) { sprintf(str, "%d", choice+1); - dtext(45,19, str, C_BLACK, C_WHITE); - } - else - { - dtext(13,19, "MODE COURSE :", C_BLACK, C_WHITE); + dtext(45,19, str, C_BLACK, C_WHITE); // Maybe later replace it by level names } + else dtext(13,19, "MODE COURSE :", C_BLACK, C_WHITE); if (get_best_time(world,choice)) { @@ -75,8 +67,6 @@ static void LevelChanger(int world) dupdate(); - - //int key=getkey_opt(GETKEY_REP_ARROWS,0).key; switch (mkb_getkey()) { @@ -94,8 +84,7 @@ static void LevelChanger(int world) if (choice==8) { new_game(); - mario_smaller(); - mario_immunity=0; + for (int i=0; i<7; i+=0) { extern image_t img_new_level; @@ -109,7 +98,7 @@ static void LevelChanger(int world) dupdate(); sleep_ms(3,2000); - int a=play_level(world, i); + int a=PlayLevel(world, i); if (a==0) LifesAdd(-1); if (a==1) i++; if (a==-1) break; @@ -140,7 +129,7 @@ static void LevelChanger(int world) playagain: new_game(); - switch (play_level(world, choice)) + switch (PlayLevel(world, choice)) { case 1: // if level completed set_best_time(world, choice, get_time_spent()); @@ -188,7 +177,7 @@ void LaunchUI() // Main Menu //Show unlocked worlds extern image_t img_w1, img_w2, img_w3, img_w4, img_w5; - switch (get_progress_status()) + switch (GetProgressStatus()) { case 4: dimage(xt, yt+24, &img_w5); @@ -250,7 +239,7 @@ void LaunchUI() // Main Menu return; default: - if (4*choice_y+choice_x<=get_progress_status()) + if (4*choice_y+choice_x<=GetProgressStatus()) LevelChanger(4*choice_y+choice_x); } break; @@ -268,7 +257,7 @@ void LaunchUI() // Main Menu int frame_id; -int play_level(int w, int l) +int PlayLevel(int w, int l) { init_refresh(); diff --git a/src/mario.c b/src/mario.c index 5d1e3e9..90a05c4 100755 --- a/src/mario.c +++ b/src/mario.c @@ -8,16 +8,7 @@ #include "bonus.h" #include #include - -static int sgn(int x) -{ - if (x>0) - return 1; - else if (x<0) - return -1; - else - return 0; -} +#include int id_frame=0; @@ -53,7 +44,7 @@ void mario_smaller() mario.size=M_SMALL; mario_has_bullets=0; if (mario_immunity==0) - mario_immunity=1; + mario_immunity=1; //mario.p.vy=5; } @@ -63,21 +54,18 @@ void mario_draw() { if (mario.size==M_SMALL) { - if (mario.p.vx*sgn(mario.p.vx)>=3) - draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_small, 2*last_vx_sign+(id_frame/4)%2, 0); - else if (mario.p.vx*sgn(mario.p.vx)>=1) - draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_small, 2*last_vx_sign+(id_frame/8)%2, 0); - else - draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_small, 2*last_vx_sign, 0); + if (mario.p.vx*sgn(mario.p.vx)>=3) draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_small, 2*last_vx_sign+(id_frame/4)%2, 0); + else if (mario.p.vx*sgn(mario.p.vx)>=1) draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_small, 2*last_vx_sign+(id_frame/8)%2, 0); + else draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_small, 2*last_vx_sign, 0); } else { if (mario.p.vx*sgn(mario.p.vx)>=3) - draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_big, 4*last_vx_sign+(id_frame/4)%2, mario_has_bullets); + draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_big, 4*last_vx_sign+(id_frame/4)%2, mario_has_bullets); else if (mario.p.vx*sgn(mario.p.vx)>=1) - draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_big, 4*last_vx_sign+(id_frame/8)%2, mario_has_bullets); + draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_big, 4*last_vx_sign+(id_frame/8)%2, mario_has_bullets); else - draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_big, 3*last_vx_sign, mario_has_bullets); + draw_tile(mario.p.x-camera_x(mario.p.x), mario.p.y-camera_y(mario.p.y), &mario_big, 3*last_vx_sign, mario_has_bullets); } } } @@ -90,14 +78,14 @@ int test_sol_le_plus_proche(int x, int y) { int type_sol = world_get_ctg(x, y-1); if (type_sol==CTG_SOIL) - t=1; + t=1; if (type_sol==CTG_DEATH) - return distance+1; + return distance+1; type_sol = world_get_ctg(x+7, y-1); if (type_sol==CTG_SOIL) - t=1; + t=1; if (type_sol==CTG_DEATH) - return distance+1; + return distance+1; y--; distance++; } @@ -113,43 +101,36 @@ void mario_move() { mario_star_mode++; if (mario_star_mode==200) - mario_star_mode=0; + mario_star_mode=0; } if (mario_immunity) { mario_immunity++; if (mario_immunity==60) - mario_immunity=0; + mario_immunity=0; } id_frame++; - if (mario_has_bullets==1 && mkb_getstate(MK_RUN)==2) - { - bullet_throw(); - } + if (mario_has_bullets==1 && mkb_getstate(MK_RUN)==2) bullet_throw(); static int jump_buffering=0; static int coyote_time=0; if (mkb_getstate(MK_JUMP)==2 || jump_buffering) //|| keys[MK_JUMP2]==2) { - if (mario.p.vx*sgn(mario.p.vx)>=6) - box_jump(&mario.p, 9); - else - box_jump(&mario.p, 8); + if (mario.p.vx*sgn(mario.p.vx)>=6) box_jump(&mario.p, 9); + else box_jump(&mario.p, 8); if (mario.p.vy<=0 && mkb_getstate(MK_JUMP)==2 && coyote_time<4) // n'a pas sauté alors que la touche était enfoncée et coyote time { - if (mario.p.vx*sgn(mario.p.vx)>=6) - mario.p.vy=9; - else - mario.p.vy=8; + if (mario.p.vx*sgn(mario.p.vx)>=6) mario.p.vy=9; + else mario.p.vy=8; } else if (mario.p.vy<=0 && mkb_getstate(MK_JUMP)==2) // n'a pas sauté alors que la touche était enfoncée - jump_buffering=5; + jump_buffering=5; } if (jump_buffering) - jump_buffering--; + jump_buffering--; for (int i=0; i=2 && mkb_getstate(MK_JUMP)==0) - mario.p.vy--; + mario.p.vy-=2; int vx=sgn(mkb_getstate(MK_RIGHT) - mkb_getstate(MK_LEFT)); int c1=world_get_ctg(mario.p.x, mario.p.y-1/*+mario.p.h*/); int c2=world_get_ctg(mario.p.x+mario.p.w-1, mario.p.y-1/*+mario.p.h*/); - if (vx) + mario_time_accel=1-mario_time_accel; + if (vx==-sgn(mario.p.vx)) mario_time_accel=1; + if (mario_time_accel) { - if (vx==sgn(mario.p.vx) || vx==0) - mario_time_accel++; - else if (vx==-sgn(mario.p.vx)) - mario_time_accel=0; - - mario_time_accel%=2; - if (mario_time_accel==0) + if (vx) { - if (mkb_getstate(MK_RUN) && (c1==CTG_SOIL || c2==CTG_SOIL)) - { - if(mario.p.vx*vx<=8) - mario.p.vx+=vx; - } - else - { - if (mario.p.vx*vx<4) - mario.p.vx+=vx; - - } - if (mkb_getstate(MK_RUN)==0) - { - if (mario.p.vx*vx>4) - mario.p.vx-=vx; - } + // sprinte et est sur le sol + if (mkb_getstate(MK_RUN) && (c1==CTG_SOIL || c2==CTG_SOIL) && (abs(mario.p.vx)<=7 || sgn(mario.p.vx)!=vx)) mario.p.vx+=vx; + else if (abs(mario.p.vx+vx) <= 4) mario.p.vx+=vx; + // ralentissement si au dela de la vitesse sans sprint + else if (mkb_getstate(MK_RUN)==0 && abs(mario.p.vx)>4) mario.p.vx-=sgn(mario.p.vx); } - } - else - { - if (mario.p.vx) - { - if (mario_accel) - { - mario_time_accel++; - mario_time_accel%=4; - if (mario_time_accel==0) - { - mario.p.vx-=sgn(mario.p.vx); - mario_accel=-sgn(mario.p.vx); - } - } - else - { - mario.p.vx-=sgn(mario.p.vx); - mario_accel=-sgn(mario.p.vx); - } - - } - else - mario_time_accel=0; + else mario.p.vx-=sgn(mario.p.vx); } if (vx>0 && (c1==CTG_SOIL || c2==CTG_SOIL)) - last_vx_sign=1; + last_vx_sign=1; if (vx<0 && (c1==CTG_SOIL || c2==CTG_SOIL)) - last_vx_sign=0; + last_vx_sign=0; if (mario.p.x+mario.p.vx + gravity if (mario.p.y<0) - mario_dead=1; + mario_dead=1; if (mario.p.vx==0) - mario_time_accel=0; + mario_time_accel=0; // coins coin_t* c; c=(coin_t*)world_get(mario.p.x, mario.p.y); if (c->type==COIN && c->taken==0) - {score_add_coin();c->taken=1;} + {score_add_coin();c->taken=1;} c=(coin_t*)world_get(mario.p.x+mario.p.w-1, mario.p.y); if (c->type==COIN && c->taken==0) - {score_add_coin();c->taken=1;} + {score_add_coin();c->taken=1;} c=(coin_t*)world_get(mario.p.x, mario.p.y+mario.p.h-1); if (c->type==COIN && c->taken==0) - {score_add_coin();c->taken=1;} + {score_add_coin();c->taken=1;} c=(coin_t*)world_get(mario.p.x+mario.p.w-1, mario.p.y+mario.p.h-1); if (c->type==COIN && c->taken==0) - {score_add_coin();c->taken=1;} + {score_add_coin();c->taken=1;} end_level_t *e1=(end_level_t*)world_get(mario.p.x, mario.p.y), *e2=(end_level_t*)world_get(mario.p.x+mario.p.w-1, mario.p.y); if (e1->type==END_LEVEL) diff --git a/src/save.c b/src/save.c index 74aa4dd..b3af225 100644 --- a/src/save.c +++ b/src/save.c @@ -24,7 +24,7 @@ int get_highscore(int world, int level) return level_scores[world%NB_MONDES][level%WORLD_RUN_ENTRY]; } -void set_highscore(int world, int level, int score) +void set_highscore(int world, int level, unsigned int score) { if (score>level_scores[world%NB_MONDES][level%WORLD_RUN_ENTRY]) level_scores[world%NB_MONDES][level%WORLD_RUN_ENTRY]=score; @@ -36,7 +36,7 @@ int get_highcoins(int world, int level) return level_coins[world%NB_MONDES][level%WORLD_RUN_ENTRY]; } -void set_highcoins(int world, int level, int coins) +void set_highcoins(int world, int level, unsigned int coins) { if (coins>level_coins[world%NB_MONDES][level%WORLD_RUN_ENTRY]) level_coins[world%NB_MONDES][level%WORLD_RUN_ENTRY]=coins; @@ -48,13 +48,13 @@ int get_best_time(int world, int level) return level_times[world%NB_MONDES][level%WORLD_RUN_ENTRY]; } -void set_best_time(int world, int level, int score) +void set_best_time(int world, int level, unsigned int time) { - if (level_times[world%NB_MONDES][level%WORLD_RUN_ENTRY]==0 || scorestart_x = x; mario.p.y = map_current->start_y = y; memcpy(map_current->data, a, sizeof(cell_t)*w*h); -} \ No newline at end of file +}