From 32659a4b16eea50de747bf678e209cffc68cfe0a Mon Sep 17 00:00:00 2001 From: Milang Date: Tue, 7 Jan 2020 21:31:34 +0100 Subject: [PATCH] add menu selection (incomplete) --- SuperCbr.g1a | Bin 56012 -> 56332 bytes assets-fx/img/mainmenu.png | Bin 0 -> 1184 bytes build-fx/SuperCbr.bin | Bin 55500 -> 55820 bytes build-fx/SuperCbr.elf | Bin 71788 -> 72500 bytes build-fx/map | 1023 +++++++++++++++++---------------- build-fx/src/bonus.c.o | Bin 3256 -> 3256 bytes build-fx/src/levelchanger.c.d | 12 + build-fx/src/levelchanger.c.o | Bin 0 -> 560 bytes build-fx/src/save.c.d | 3 + build-fx/src/save.c.o | Bin 0 -> 1256 bytes include/levelchanger.h | 6 + include/save.h | 16 + src/bonus.c | 149 ++--- src/levelchanger.c | 103 ++++ src/main.c | 70 +-- src/save.c | 38 ++ 16 files changed, 780 insertions(+), 640 deletions(-) create mode 100644 assets-fx/img/mainmenu.png create mode 100644 build-fx/src/levelchanger.c.d create mode 100644 build-fx/src/levelchanger.c.o create mode 100644 build-fx/src/save.c.d create mode 100644 build-fx/src/save.c.o create mode 100644 include/levelchanger.h create mode 100644 include/save.h create mode 100644 src/levelchanger.c create mode 100644 src/save.c diff --git a/SuperCbr.g1a b/SuperCbr.g1a index 2c909b2904df256c0d1ec2739a4c83ea8f87cef3..dd7567b364dbe514d6eafd73cfd90ce24caaa3ab 100644 GIT binary patch delta 3603 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 delta 3277 zcmZ8jZ%kC#6+iDWycvPwIExh7DZ&#Kk<}|IqG4Se5c#K$Izdq4f($GbYN;U&ZAsyS zF_Q+(;PnH6Sz|V~OLk2=?XwAM*@kRgW43HMLs?}FX<4hrG^8blw0s~-f9E|w=$o9J zd(J)o&$;(b&rrYvI7B=txS?~JY>aP92Egw|WC!@x! za$f2By2s&+jSwkqBqrR?)5-e8*FDdv?e!Yl<_A7eY{cPY>aRsae<>zG6rlf1lJL%v zI5AD)cskY&5-nj8t%W4wA{K0`v#@vQxc-g3Yi3{aRryuS+p0EeB-yUnG;P-5)aK-% zV~f_<941jbNaARz^u<@HTARERpQ?Jo@?m^=GC{%aMO^K` zh$-Gp!V@;K5_C1sW5$8K91>sF0%ws3G0p@o1}>!y}wjSUd=uW(%ly8TO zBS@k|kSOXQ5i?4nANu{stG|>)BlJ+e#lWJmPZu)uXzX=chW?bIHj2;Cl_0Hw?M&%) zX1lZ;n05f5MhReN$sXq!73ih&mB#}o?BH<;UG#2)Nd&$lW2!aZM(z z^%R;;+^&P_;bB?px~Wk+q&t51#?x4R0M&7!A_LV>o}h&p7#U~=iCYN9rX_YlE>;*`1oqh3`xKHZeU!VlOJ@KA@c77z)b(3oYS{hbtsmZoAfxdBs@L^hIi8yC65ZOmt{)O`LC^H zgsoV$R?Y=`mEAaNu-3r=05=;6o4-(Yunuuf+-U^+7G{I@-5ex>W;>jFD$kD3ux;HE zlc%*}?PVG^W2}U&B*80$eBT1mS~~^?Ne8XO(}rYScHZ)l`V?Z;kunCePbys@oF4xy ziG(Z?r<;lXr}jXn{6znjAA)w*ga^jdk#XMw1)LV zlwd7r9&jG?$0MDhMR@=@ULfB>FM)6Kv)f>BU=#v)1y=+Zbh-GcvW@kcs zWMEel5Bbb4-DUQe`(h@<$;iyyUu%Mm<{J~aSJX7(Rl0$C~DCqS?&2O`JIP+_p%0Cu*9?;DT;EF%@mOqr^u2q{nbU3$`e07b|HwzdW6JghA)eIKdW^*u1X2QFZ8R#^WHT7p>PIM(MQk~UNu zE?T@s!ZJ&7z95pZ0YPX!J`6;)o^-Ou<>1L~C)pxjM^8T4)YE6$!I(v|j@9Y?m zkyU#w27_k|y^B5;kHS(niAOUeYUhoYbuL9c*Cyxds~Gvtf1rE9W3k??C+rz1R~6TH zGxV{Tdi_TW6tBC`rv&tDM5Z+4#@Pig5pG!e8ZKtXj$jw<;eQtOVXPg%k*J#CiK^B- zTKn}8Io*)vvfHBS)7UBE=bs;cyG^?N9?i7kkbeJ#L_3a#-2p(A&pYL$-xFuIp&6(| zL%PgrJg4(C@E;GpE{jK^s^7K372G#W$-&0*#1aI`(KJl)AEWC{*$2$K6=TKr{B>+E zs*GDvisLZqABrjn%wq+{>pC=*T`g%*m!HwfjMp}Nw zZR%*PQmbcWq*af5G;QvPv%cQm4ZFn{hUC-`2_OD!m|q}3|Ap;S&%kT7M57@Kmmu$w z&febj8^xn%7OSSy#JH28b{o$QW}qfwbpBw+j;=qrvB#k}0eDS6$yubC2l_!Fux$}Q ze=veI?^)rCdvmMl&x=>npDf8P%HQl;wcjN^z jiaGjNRQ~Y2^z-tUPqvzs#Dfs*?cEk5js}hSCr;&mrA!$P diff --git a/assets-fx/img/mainmenu.png b/assets-fx/img/mainmenu.png new file mode 100644 index 0000000000000000000000000000000000000000..398b572985f19ea3ea0eab88ae569f3d93350e19 GIT binary patch literal 1184 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 delta 3243 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 diff --git a/build-fx/SuperCbr.elf b/build-fx/SuperCbr.elf index bc0e5a763a19eaadd354a2f5285a2026c2893f8d..a8b037788c409f3634ce7ddb2862cebdf7ac5efd 100755 GIT binary patch delta 12914 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 delta 12257 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 Z;5R|(4Cp=w&rv`lsk@-=vIzO9djNx*BcK2P literal 0 HcmV?d00001 diff --git a/build-fx/src/save.c.d b/build-fx/src/save.c.d new file mode 100644 index 0000000..b78c0d5 --- /dev/null +++ b/build-fx/src/save.c.d @@ -0,0 +1,3 @@ +build-fx/src/save.c.o: src/save.c include/save.h + +include/save.h: diff --git a/build-fx/src/save.c.o b/build-fx/src/save.c.o new file mode 100644 index 0000000000000000000000000000000000000000..22de1f334ae53c6dd734a6f5170fe8b0a1ab8651 GIT binary patch literal 1256 zcmd5*!EVz)5S@(;B(#T8xYd*(Boq)@IcY1kJ*A`&4hT4a;D9ij)JZBir1CBmNJ!0r zGvdG}aNq;_Bl(1?KLCgWxAMl>bzH%rM@D(xc{6XHo%Q(O-oyK%Bq$F-w~-eL-Wc4Y z)l5;N3YBRNS75SmOs`w3S4$V~USDY+QDa%%*eW-I$y``ln^vE@YCUKK%G)Z}gSA>1 zO#JX=lYN$Zy<)8%UaVCfH9yx=qKZ57uZ8>< z(Y&pT?L3$I{m`fmNo~^UI&fJUCrX<5ogulSj3U|5nq+r09L8@9-|6g8g_Q4o-fqDc zDIVCI7d~%}C4loLfbg#1!ehnzct7{%ft!}wc@ZCM4@(x#?+zHxi_?vf9|A6%u8sox z+YuIH=world_get_real_x0()+127) - bullets[i].type=0; - for (int a=0; adiscovered && t->type!=NONE) - { - bool x_collide= (bullets[i].b.x<=t->b.x && t->b.xb.x+t->b.w-1 && t->b.x+t->b.wb.y && t->b.yb.y+t->b.h-1 && t->b.y+t->b.hlife=DEAD; - bullets[i].type=0; - score_add(100); - break; - } - } - } - } - - } - -} - void bonus_set(int type, int x, int y) { @@ -121,7 +49,6 @@ void bonus_move() //+collision if (bonus.type==BONUS_NONE) return; - if (bonus.type==BONUS_STAR) { box_jump(&bonus.b,4); @@ -191,4 +118,80 @@ void bonus_draw() draw_tile(bonus.b.x-world_get_real_x0(), bonus.b.y-world_get_real_y0(mario.p.y), &life_1up, 0,0); if (bonus.type==BONUS_STAR) draw_tile(bonus.b.x-world_get_real_x0(), bonus.b.y-world_get_real_y0(mario.p.y), &mario_starman, 0,0); +} + + + + +/* Les balles ont les memes propriétés que les boulets et sont donc gérées ici */ + +static bonus_t bullets[2] = +{ + {0, {0,0,TILE_W/2,TILE_H/2,0,0,0,1}, 0}, + {0, {0,0,TILE_W/2,TILE_H/2,0,0,0,1}, 0} +}; + +void lance_bullet() +{ + for (int i=0; i<2; i++) + { + if (bullets[i].type==0) + { + bullets[i].type=BULLET; + bullets[i].b.x=mario.p.x; + bullets[i].b.y=mario.p.y+8; + if (last_vx_sign==0) + bullets[i].b.vx=-6; + else + bullets[i].b.vx=6; + bullets[i].b.vy=0; + bullets[i].p1=last_vx_sign; + return; + } + } +} + +void bullet_display() +{ + for (int i=0; i<2; i++) + { + if (bullets[i].type==BULLET) + draw_tile(bullets[i].b.x-world_get_real_x0(), bullets[i].b.y-world_get_real_y0(), &bullet, (1+sgn(bullets[i].b.vy))/2, 0); + } +} + +void bullet_move() +{ + for (int i=0; i<2; i++) + { + if (bullets[i].type==BULLET) + { + box_jump(&bullets[i].b,4); + box_move(&bullets[i].b); + if (bullets[i].b.vx==0) + bullets[i].type=0; + if (bullets[i].b.y<0) + bullets[i].type=0; + if (bullets[i].b.x<=world_get_real_x0()-bullets[i].b.w || bullets[i].b.x>=world_get_real_x0()+127) + bullets[i].type=0; + for (int a=0; adiscovered && t->type!=NONE) + { + bool x_collide= (bullets[i].b.x<=t->b.x && t->b.xb.x+t->b.w-1 && t->b.x+t->b.wb.y && t->b.yb.y+t->b.h-1 && t->b.y+t->b.hlife=DEAD; + bullets[i].type=0; + score_add(100); + break; + } + } + } + } + + } + } \ No newline at end of file diff --git a/src/levelchanger.c b/src/levelchanger.c new file mode 100644 index 0000000..9c9291c --- /dev/null +++ b/src/levelchanger.c @@ -0,0 +1,103 @@ +#include + +#include +#include +#include + +#include +#include +#include + +extern image_t img_mainmenu; + +void launch_ui() +{ + keyboard_clear(); + extern image_t img_mainmenu; + while (1) + { + keyboard_clear(); + dimage(0,0,&img_mainmenu); + dupdate(); + int key=getkey().key; + if (key==KEY_EXIT) + break; + + } + +} + + + +extern image_t img_error; +GNORETURN void system_error(uint32_t code) +{ + timer_stop(0); + dimage(0,0,&img_error); + dupdate(); + while(1) getkey(); +} + +int frame_id; +int callback(volatile void *arg) +{ + volatile int *has_ticked = arg; + *has_ticked = 1; + + return 0; +} + + + +void play_level(int l) +{ + volatile int has_ticked = 1; + set_level(l); + while(global_quit==0) + { + if (has_ticked) + { + has_ticked=0; + frame_id++; + //mario_move(); + + world_move(); + dclear(C_WHITE); + world_draw(mario.p.x,mario.p.y); + score_display(); + + dupdate(); + if (mario_dead==1) + { + mario_dead=0; + finish_level=0; + + } + if (finish_level==0) + { + lifes--; + mario_smaller(); + set_level(current_level); + extern image_t img_new_level; + dimage(0,0,&img_new_level); + char lvl[4]; + get_lvl_id(current_level, lvl); + dtext(57,28, lvl, C_WHITE, C_BLACK); + sprintf(lvl, "%d", lifes); + dtext(65,54, lvl, C_WHITE, C_BLACK); + dupdate(); + sleep_ms(3,1000); + sleep_ms(3,1000); + sleep_ms(3,1000); + dclear(C_BLACK); + } + if (finish_level>=1) + { + current_level+=finish_level; + set_level(current_level); + } + } + else + sleep_ms(3,1); + } +} \ No newline at end of file diff --git a/src/main.c b/src/main.c index 9fa5dda..1688227 100755 --- a/src/main.c +++ b/src/main.c @@ -3,6 +3,8 @@ #include #include +#include + #include "world.h" #include "mario.h" #include "level.h" @@ -15,83 +17,19 @@ #include #include -extern image_t img_error; -GNORETURN void system_error(uint32_t code) -{ - timer_stop(0); - dimage(0,0,&img_error); - dupdate(); - while(1) getkey(); -} - -int frame_id; -int callback(volatile void *arg) -{ - volatile int *has_ticked = arg; - *has_ticked = 1; - - return 0; -} - int main(void) { extern font_t font_mario; dfont(&font_mario); //gint_panic_set(system_error); ll_set_panic(); - volatile int has_ticked = 1; + timer_setup(0, timer_delay(0, 50000), timer_Po_4, callback, &has_ticked); timer_start(0); set_level(0); int current_level=0; - while(global_quit==0) - { - if (has_ticked) - { - has_ticked=0; - frame_id++; - //mario_move(); - - world_move(); - dclear(C_WHITE); - world_draw(mario.p.x,mario.p.y); - score_display(); - - dupdate(); - if (mario_dead==1) - { - mario_dead=0; - finish_level=0; - - } - if (finish_level==0) - { - lifes--; - mario_smaller(); - set_level(current_level); - extern image_t img_new_level; - dimage(0,0,&img_new_level); - char lvl[4]; - get_lvl_id(current_level, lvl); - dtext(57,28, lvl, C_WHITE, C_BLACK); - sprintf(lvl, "%d", lifes); - dtext(65,54, lvl, C_WHITE, C_BLACK); - dupdate(); - sleep_ms(3,1000); - sleep_ms(3,1000); - sleep_ms(3,1000); - dclear(C_BLACK); - } - if (finish_level>=1) - { - current_level+=finish_level; - set_level(current_level); - } - } - else - sleep_ms(3,1); - } + launch_ui(); timer_stop(0); } diff --git a/src/save.c b/src/save.c new file mode 100644 index 0000000..dbff7ec --- /dev/null +++ b/src/save.c @@ -0,0 +1,38 @@ +#include + +#include + + + +uint32_t level_highscores [NB_MONDES] [WORLD_RUN_ENTRY]={0}; + +uint32_t level_best_times [NB_MONDES] [WORLD_RUN_ENTRY]; + +uint32_t progress_status=1; // world 1 only + +static uint32_t checksum1; + +static uint32_t const file_size = sizeof(level_highscores)+sizeof(level_best_times)+sizeof(progress_status)+sizeof(checksum1); + +void load_save(){}; +void flash_save(){}; + +int get_highscore(int world, int level) +{ + return level_highscores[world%NB_MONDES][level%WORLD_RUN_ENTRY]; +} + +void set_highscore(int world, int level, int score) +{ + level_highscores[world%NB_MONDES][level%WORLD_RUN_ENTRY]=score; +} + +int get_best_time(int world, int level) +{ + return level_best_times[world%NB_MONDES][level%WORLD_RUN_ENTRY]; +} + +void set_best_time(int world, int level, int score) +{ + level_best_times[world%NB_MONDES][level%WORLD_RUN_ENTRY]=score; +} \ No newline at end of file