From 2a85f98b93cb0b6e1b26d6e72299c294b42885bc Mon Sep 17 00:00:00 2001 From: Milang Date: Fri, 3 Apr 2020 19:20:03 +0200 Subject: [PATCH] add spikes (25%) --- SuperCbr.g1a | Bin 68068 -> 68328 bytes assets-fx/img/spikes.png | Bin 0 -> 584 bytes include/ennemi.h | 3 ++- include/tile.h | 2 +- include/world.h | 1 + src/box.c | 2 +- src/bullet.c | 2 +- src/ennemi.c | 56 +++++++++++++++++++++------------------ src/tile.c | 3 +++ src/tuyau.c | 2 +- src/world.c | 8 +++--- 11 files changed, 45 insertions(+), 34 deletions(-) create mode 100644 assets-fx/img/spikes.png diff --git a/SuperCbr.g1a b/SuperCbr.g1a index fcab2bef6ecb4d5e55536337d16e56947ca750ca..014e159dff56ce90146e3d8fc25347924b0a639c 100644 GIT binary patch delta 5675 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�b7 zXXmDdVhglh8tgA`!`*=}^kDDloP;F;OA%6Y#t17wm`W+;U29K?$ATREq%BY9(C8Pj zYrW&rE9*=&0e9@vNSjo>K$x&~#r*2}uOIdzDywj(tSgo}i{GR(1u)BkJQcEW>F^PZTpr|BhN0IJ>x)~$amy0zI~W)Df=>(rZ$lg zLf8>CFWRwp#)D>UYNV@k$6f^zBlFJZYKa*bBX`=KU>C&@jD6QssyKVUH z+FhwhwIA!#+4qJCKfBw=!@Es1we7ht6}zwT!RMALcHfZFo)6MY#0HHHP!slSHOc{C z5E%e+fS=TLQ{-J)1Exr>HSRh>eb?la0r$Ft-j>zfdmZ(BpcrrgwLmfevnf;nOs7Z% zSS0K?Xg0>WfPVm*fXl#eNKs-fH;8~uG?1GeqC{(1`QthtbswO;+*9$m?G#?Xckvc( z4Bqkf3cAr=@O7euj^eTE)AM&KPCW6_u-tV*FNPzIBBU654sYEsa0j>xtJl`zy?d3r zJhP)C)iKHMX;I)})K{+6Q8i6P-X!v@u;i({s8~=t0&&>HCm2dVJeyBos*zm~h1pMZ z<6J@PiOW*nzJ(M~7rUC*?7v4FcvND2nii5w@q!WYfUuan?r8hVB63$1n$>5NAyv7dT%VzTFkUTG?C6f0 zqG{3Jp`lop-)-nqeW|)5N()|%5%E~7EC52T!SL{?C}S!4yDXMd4hV$J7g_@Q-)zV+~3xzen5ef;ON=0z@@yXTI&y#FIewGb=o zS6R%00xwY77uy%(?x~|zeR;pzZ!tFnETo|xI0-ZWjlj#mDWC~B4g4H91H1w>1Fr%t zd6z6C*qP5OdhXd&?*5Oi*=oL|R$_BmUA7vlKKQS*hb@EaWBq) zw3o0Nk97TrfhrE&=DoGsM3H;+t+`vrdZJ3xH^txqOAWIu)*fZK_0R;-S`9cOBYfoO zVofq?kaIMd=N>yUFBv{55-s!&qs$8_EGs87HjP>zi}9m*{Khd;!ca)j9~CCp;#PtY z%@7|ywuTP#qT~DHh6Fb-0%|Y6dc07Bh`2RO*s&(A_C9ZczUpgoqFkm9DLjU$8N{r| z*YYOs`Zy#6a*Ht6WghlsEfGm#lbB1qdxW$Qy{U+VAm%;?TbLglIYA@pE`zL_RP@v5 z6tU5`5MDY9tduVOY{9g4_@!f1Z0IuIcDjpS_E}@2YsKbA2)WwYnzGQLa1mB%CakI~ z(v5#JHIeTT)+%uhD{n^n95gLbvK?WBn6B2=nI=bcwcJ%bFv*5+@jcWy0Fxiczu@QAa8_DSL zmdu{4PqsTRO>bXi)7!rH#Nq|Z;GdnUu~b>zVf5-;U6h*b;~34P`C&0 zkcab8vXK2EX>4Tx04R}tkv&MmKpe$iKcpfR1v`jz$WWauh>8d0jg#h z>10C4=2nH!D}o51A2Wzb%+%*ZF$K@@bq^n3@8Uem``n+SSIL_U@Cn4TOgAjz4dSUy zOXs{#9APC%AwDM_HRyuGk6f2se&bwp*v~T~MkYN^93d8p9V~Y+D;X;BBymhpHOlvA zT~;`6aaJoe*19KuVK}d?EOVV^6iF;%2_gi@sG*DsEW~NmNHLM7{e*{q$nlHhlF3yD zBgX=&P$4;f@IUz7ty!2Dcay>ipzFo9KZb$OF3_yo_V=-EH&1}TGjOG~{nZ9A{YiSg zt;LRjzHQ**x~<83z~v4w_@qmQ=cameraX()+127) bullets[i].type=0; // delete a bullet if it is out of the screen // contact with ennemies - for (int a=0; a +/** properties **/ const int ennemi_widths [NOMBRE_ENNEMIS] = {0, 8, 8, 8, 8 , 8, 8}; -//const int ennemi_heights[NOMBRE_ENNEMIS] = {0, 8, 12, 9, 12, 9, 8}; const int ennemi_heights[NOMBRE_ENNEMIS] = {0, 8, 8, 8, 8, 8, 8}; +/** ram storage **/ +ennemi_t * ennemis_global=0; +static int ennemis_global_size=0; +int ennemiesNumber() { return ennemis_global_size; } + +void ennemiesInit(ennemi_t * table, int s) +{ + if (ennemis_global) freeProf(ennemis_global); + + ennemis_global_size = ennemis_global = 0; // reset + + if (s==0) return; + int const size = sizeof(ennemi_t) * s; + if ((ennemis_global = mallocProf(size)) == 0) mallocError(); + + ennemis_global_size = s; + memcpy(ennemis_global, table, size); +} + + void ennemiDisplay(ennemi_t const * e) { - if (e->type==NONE) return; - if (e->b.x<=cameraX(0)-e->b.w || e->b.x>=cameraX(0)+127) return; // do not draw if out of the screen + if (e->type == NONE) return; + if (e->b.x <= cameraX(0) - e->b.w || e->b.x >= cameraX(0) + 127) return; // do not draw if out of the screen {// draw int tx=0, ty=0, dsx=0, dsy=0; - tileset_t t={0,ennemi_widths[e->type], ennemi_heights[e->type],1}; + tileset_t t={0, ennemi_widths[e->type], ennemi_heights[e->type], 1}; switch (e->type) { case GOOMBA_ID: @@ -86,16 +106,15 @@ void plante_tour(ennemi_t *e) { e->p1++; e->p1%=PLANTE_NLAPS; - if (0<=e->p1 && e->p1<35) // (plante en bas, en attente) - { - if (abs(mario.p.x-e->b.x)<15) e->p1=0; - } + // En attente + if (0<=e->p1 && e->p1<35) if (abs(mario.p.x-e->b.x)<15) e->p1=0; + if (35<=e->p1 && e->p1<58) { if ((e->p1+1)%3==0) e->b.y++; } - if (58<=e->p1 && e->p1<75){} // plante en attente en haut - if (75<=e->p1 && e->p1<98) + if (58 <= e->p1 && e->p1 < 75){} // plante en attente en haut + if (75 <= e->p1 && e->p1 < 98) { if (e->p1%3==0) e->b.y--; } @@ -332,24 +351,9 @@ void ennemiMove(ennemi_t *e) } } -// Global variables for ennemies -ennemi_t * ennemis_global=0; -int ennemis_global_size=0; + void ennemiesDisplay() { for (int i=0; i #include -#include - #include #include #include @@ -65,6 +63,10 @@ void cellDraw(int cx, int cy, int sx, int sy, int plan) tileDraw(sx, sy, &bloc, 0, 0); break; + case SPIKES: + tileDraw(sx, sy, &spikes, 0, 0); + break; + case BRICK: if (((brick_t*)cell)->time_hit_id) // calculate collision animation { @@ -177,7 +179,7 @@ void worldDraw() void worldMove() { MKB_update(); - for (int i=0; i