From 404ebcbf39ce19aef4a485ee05a9abe9fad29f22 Mon Sep 17 00:00:00 2001 From: milangames-art Date: Wed, 20 Nov 2019 18:31:20 +0100 Subject: [PATCH] add physical engine --- MARIOBRS.g1a | Bin 22044 -> 23328 bytes build-fx/map | 687 +++++++++++++++++++------------------- build-fx/src/MARIOBRS.bin | Bin 21532 -> 22816 bytes build-fx/src/main.o | Bin 1512 -> 1668 bytes build-fx/src/world.o | Bin 1860 -> 1848 bytes src/main.c | 16 +- src/world.c | 63 ++-- src/world.h | 2 +- 8 files changed, 385 insertions(+), 383 deletions(-) diff --git a/MARIOBRS.g1a b/MARIOBRS.g1a index 5e5badf8fe618f667ce8be4dada7e49a4e7cb4eb..86b68d016002e237af290db3b2b882543d481602 100644 GIT binary patch delta 3812 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 delta 2573 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 delta 2538 zcmY)we@q+a^?hd>4xbYaJAeTv1{(+j()-Mh03i$Kku;<+m^6?e4Q(cc0u8B5$~L-Y zGaZyV%3P`*LQ$7LkTOw}Msl>9s!l=^UD4D^`NK|I>Qp4di6I1KT~{bY8k6^qD+xX6 z-S>Wc@8|cvcQ^iLa&?m2JWYH}b1biG1R&EuPgxeSL49b`+yZ!?;^Zj~plf7#MbvNt z;5ipi06(nF0k!l2-Q5K=^D5A+A)w+sP^TBDKBPi2RaZ+{+o|4UXVU%uIOQ*hp6Gz( z6SY!|$xk?V6KMUU%xg@9fSjwX(D^D~sC^|ddZ08dkmI(YV&a2m9R~tg51{lI)qk28 z{a@*sGQ$yzg45QHTG0~LA7#s1%MGEVqinlTmFxLHw+ZNvATR*$vt_@g48b33e9Q;tW`)HDw=F-YGsT7l{R>%VHwecN;G;+;;pwZh_W6X#N2KIOJ`U#nXBUA*Igi))wt zB%tlm_%(r~`S=oS@;>tuJPM6R@)CFc%WLP?de+XZy|mW7rW{2;SK#+t3*4nk!EYcb z`1O2TiNa^-QXD=4VPYASl>gX1SL(L8uu-xgA<|uFtSve7VMX zXe+tR_L5GMWB)Oz_zj~k>3^8O{F=#h6aZ((zQo(E-FN-^``8{t7+V0hEe0WrZ+)!X znj&JD9hy*P+e)wY%Zx=3j3O6#FQzt|B{qcHlFDC9|g4`I@lLiWQyr~-BmR*ZX>Z+tot;R7YrjC$8JR)rwLNNlxWZp&?RqOyQwS>q5 zh($3g&~&r3o>rk7Rd&c_>D8q922dRi-}*{5^gW2Xt|B1cg;j8Uj^TK`ztx;+?q zrubRH@Dq~ZnU7PiZdMy(Q4FZN60S(GXG&9l$Vtgh$x|^e#H3=uPNt+r!HRFMV9%Ix z+d^93hHydTI#;$n3P9EBX-nX5WR)2CH2NB4g!-)j% zPgl(u;+3XrZ2AV}Oz~7pTcy{}8EPL$o2{qA=Ye(GXTX$uI@69qq} zUHDtGU4C@q$MlItsr~fVKK%dLzD>nN8Xe`UHM5zcku4nEC>KVhi3U0#v_&D>RJYT=@wN zwYVXWU&=509iv_A9fPU)A8Q?(%5vWpbfya!iO1Fsua%2Zx7-PUU)s zFOMC`omBhPzCXWRt63a=eG9w9cGXi9Q~Y)YlK2h_jC&$HfjlX-WTqMqmp~hkJSXiS zH+n3>t0#z}w4aICMBWMxjhEhPx=#pHp0&UvV@<9@_Y%o_3? zORRc))&mvKg@IahT~KQ(zJZ0tx~nDIvUtU#Uiil~hkhc5dg(9jMnPh+(0x28aY2Z9 zGjZR5bq?;GcwhK6;q1XFINj@LKGppK;F$*R{>|@%j7Ry2c&j*RP=5U=2wbQdV(YkK zt%Ls%cb4)yi&*4qtZi`%A$d2)^Uu8zka2OHO-0TK5JY?{Lzf T{iaa}`Ngpp;SxFF8uy!U20^JZsfFI>K;gcQ_G zK`-eBM^is>7$<5ODMZosu60d0q^?2?yp2pLV;$*Z!#I5_)HX2vtvOT)b)_lmpo&%= z(Yv^~)OUYP>09`Mkpt^k**E)h;beC_6Gf{TUg;7)rkdXG`HDU@6J19&@i8$-{fC6O zyFc-;rMjDGHZsza-#~PHqdR_yv((YfYaLZ}kmjhy8=f)ND>0hMO-ANFuPLuTrPRZ* z+RFd;F+4PME}0s>I(j5|R!eJKgg;olPEGjry)ho%QbR5v|2B=FX_IQfZ2@i}j`+TQ z)tiqx&-_g#eO#shkMHpre*AcVGXcI5;L!kQ16&MnIly-UJRjhN06*WtmdF>i9Q2$h z6tW^W0liqZOvl!5IKncaa~!&xC!cPZ1u-L`WV+?aI=I4dp&Pk^DIDly1v@JW`cyej zPH$|>E?*nvNkh1`f2BO#vTu@}FlP+A;#DC<$0N`GHqa*Z zJs>Le1E59fIiOwYN5FQe9|Jq2egf>2`Y8~T`WX`7aHwUK+Bd&(CS_qL4~BcYB}4o%%UsL>L2?g9gLTFWgwIn?XH)wRzH=Po^|7Dl^Y^GENZ0SHALBT;5H;TvTCZ}QfWMb~=Xt)E e&vFlhp*eaiQIp2=u*Io0>-U;;E$=r~;jX9v diff --git a/build-fx/src/world.o b/build-fx/src/world.o index e0b90e001b07fe51388a520982986168d4058daf..d0516dfd68027c8571c993f830cb1be1a85bc823 100644 GIT binary patch delta 927 zcmZ9KUuaTM9LImxtKO^EoNlWvCT!}^R>5`7Mr%ZhQW9eZD}oqJr#9WcY=2m_=x#NJ zBShoGUV2EWM}PyM12*cPWJ;YKj?Dguf3Rf?A-crHz4xwL9w9zSZ5SDNG%RhIb- z`F)kOLPLzmt`_4N5h^ZUJ4EM=1+$Nf5!{K%vj6#P!GL~^oJUduE+K)Ah?-Vm!&pfe zbS-Rz&TvIKVk)WHof(~PZ$@3D!gcAt(3Vn#9Dp%ben%`Ns@(x?PoxyJQ+n8+TKAfl z0DlEWAc?!gFNXd6a%!D_=r!}t5`FwDzQBJ9*)o(+E`rEdbyqKnBXvP@hMFyZfp5&= zrNI{yUT4J<#~QM~qCaO@QRr^C z^HpF&j&W&B8kI(*VM(qJ?}Z{(s(JOOil^FwwTNihum`cfm)V7SyP0;TZjz&$gw`0esMvsw!;@fRS}&(kWUEpjR}Dx1?wTfI-n%<{m}YV_J%C1gKH8 z1;C_etiN*B_T#6@04%w$nWMIdMeC$;B%rlZE|Ng~o#eL1HLXKSVK6oK#Bn`IE;p)3ibaC!|g*6+4m!hUei@AG}0AJ0E-&G_E< zj1|5B01ggh0nPyheM!LUbok6=%v4%_Z^0-tqR+H zA&;vyTh~W+`ML}rsXj8u<_Q zH@j&y0yK)?NlmUHv(GVUBB|pha`lXila)Ei$GGoJUs>eaqE&kGPCmg`1V&|5tZw^urph zWGJ6%){z=LUZZDFGX~^yRjV!_eG6%0MYq5U}NY9CPh<4prXlyVV6Q>E* zG&LRbPs2cP!ap-G6&VeQ%fx`-L%*^zta5k&QsrF$y~=w4bt?Y?pjAEqFsNJvs8{(2 zbysEOYEYR#OH!ExIDxoHsf*n>E{1IZP-0pe$96=Mt{rOpdba5mf?o8gr(EkFSHj +#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 callback(volatile void *arg) { volatile int *has_ticked = arg; *has_ticked = 1; - numero_frame=(numero_frame+1)%6; return 0; } int main(void) { + gint_panic_set(system_error); volatile int has_ticked = 1; timer_setup(0, timer_delay(0, 10000), timer_Po_4, callback, &has_ticked); @@ -35,8 +47,6 @@ int main(void) //keyboard_reload(); mario_move(); - - if(keydown(KEY_EXIT)) global_quit = 1; } timer_stop(0); diff --git a/src/world.c b/src/world.c index b71e872..ad8df84 100644 --- a/src/world.c +++ b/src/world.c @@ -2,8 +2,7 @@ #include "tile.h" #include -#define min(x,y) (x>y?y:x) -#define max(x,y) (xtype==TUYAU) + draw_tile(sx, sy, &tuyau, cell->p1, cell->p2); - if (cell.type==EARTH) - draw_tile(sx, sy, &earth, cell.p1, cell.p2); + if (cell->type==EARTH) + draw_tile(sx, sy, &earth, cell->p1, cell->p2); - if (cell.type==BRICK) - draw_tile(sx, sy, &brick, 0, cell.p1); + if (cell->type==BRICK) + draw_tile(sx, sy, &brick, 0, cell->p1); - if (cell.type==GIFT) - draw_tile(sx, sy, &gift, cell.p1, 0); + if (cell->type==GIFT) + draw_tile(sx, sy, &gift, cell->p1, 0); - if (cell.type==COIN) - draw_tile(sx, sy, &coin, cell.p1, 0); + if (cell->type==COIN) + draw_tile(sx, sy, &coin, cell->p1, 0); } int world_get_ctg(int x, int y) { - world_t c=world_get(x,y); - if (c.type==DEATH) + world_t *c=world_get(x,y); + if (c==0) { return CTG_DEATH; } - switch (c.type) + switch (c->type) { case COIN: case EMPTY: @@ -84,33 +83,17 @@ int world_get_ctg(int x, int y) return CTG_EMPTY; } } -/* -static world_get_leftx(int x) -{ - int r = max(x-63,0)%8;// if (r>0) r-=8; - return r; -} -static world_get_bottomy(int x) +static int max(const int x, const int y) { - int r = max(x-31,0)%8;// if (r>0) r-=8; - return r; + return (x