From f004e664612362c00c085cc1e8239812a97470ec Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Sat, 15 May 2021 20:20:56 +0100 Subject: [PATCH] Correctly handle all 8 directions --- !TheEsc/!MapEdit,ff8 | Bin 10264 -> 10488 bytes !TheEsc/!RunImage,ff8 | Bin 21740 -> 22344 bytes !TheEsc/Spr,ff9 | Bin 115236 -> 116880 bytes !TheEsc/c/Graphics | 30 +++++++++++ !TheEsc/c/Mission2 | 123 ++++++++++++++++++++++++++++++++---------- 5 files changed, 124 insertions(+), 29 deletions(-) diff --git a/!TheEsc/!MapEdit,ff8 b/!TheEsc/!MapEdit,ff8 index 236539368cdf9b477ef7698c2416d005df283bcd..a897ba47407e7fe3426d9b4868dcc6db81d64604 100644 GIT binary patch delta 2163 zcmZuy3v82B6h8Owd#t71)@^NB|7{)XGISfr7!nmx@x{a844~kHuuaGi%bbtIAe(ef z;*^a88xkW`QL0hYfJTKFkRYgNMifO*?8860RRj#i4QJ|i$4^*{O-^sWbH4AKb5HMo z|IM|7^V~#{xU@{7)EXZ)1qmlD4p>pJd{n`)(5>=El8U!2(V*+Q`G8@9B@e~tED5ngRG0|6 zd4tQ1)5LjhFa{N$m7g<~uDJq&dS^J1LG6i*!bnmUI|Q7g;|ajC)NsPD;~=odA5N6% z7~P~+BR)yTDsT_*RXX+ozYTn&j?q$T67;nfus4|vM;wH^bVAiKU%vx=5AqySz?HDj z?q|)E>VrK4`-Hjl$>nPg948@M?1a^M1*^Ks?Sv<~q^H zb1WU=20m)(P>Ribk9Dr%F!K)UT+HMj>vS=|SKBJZNq)d~lNjdrY>$h#cw$Dc=-|&X z9u!S{<(OVElaGv6$Iw~04oZV+d9yj>N)@=W`5oR)TbllX+s z+Vkv3O_W+p+q6a_rCw*ZV|~F}@Pv!PF=O$QF{LOHS3;4v*%^sEUX3JMi)O^EILtlRv0|W(?Na?Vh&_cj zV}=kR!Pg3<3W)~J;P8c_e7mb$X^HX^F0axT(iLzWhqtC8 zk~B##YJbEcYrA-pU(fQ1b$lReX>}(UM(C_)Ub5z+kQw;!JXMo;20B{{j=wORu<4wo ze0O$JR=ut?!7JOWQ22PZzhWWW`)`XRWzyGBQux|Nb}##1QU78c;Y&s9+sO~`n?GDja?Mg(( z;@Nu{mqn5uDxxpPM^+6+_SBfs`-?fowHbz?)YNlGO zH$J$s1y3E_5#=533UQEsbO*%-Hsz`fU*PYPvcItI|6+c^WMBM>h3I$~MdaY*IH;;u zt3k27I`=oMMtUkiU6Hsp;tOj;lkvBZ_YtXs=4$YF>HHY4%dNo`vM)E7ai@VU-e-U0 zek*44XL*6!^Ffrw=-PH|q#zo~9udcqMD3axSjLU`E#uX|V-Q!cTCeTVMznftF?>b? zUz6{552F{Ns$?j-$TlP>CD7AUUX_2F;xO&+7{^D1x6n&nVe zqQ1y%O%QcpD4R7Gb@U$#sG0?RS0Hwutbo19AsHzWKbTJcuO_qPlBP~>r0Y_?vQe=! zO}_qF=nuW|P2L%~;TBbs+^KC?_4*r2_(iWbYcooXPP4a!KljeRXWYXV6n&!E#o3x;T;=P!{;m*Wk)%=97)c*n~27Lgh5tfJYB4v-HO*Gz{oGjivAO>TqHnfydC^niuAT1| z)rpx^+lbDqBK6Otx`!OlS$vjkHmvJZwc%)_?@^9-h7GZ a9hm&cH0NN0u;Fc76l~(EpoKewo&N%lGd}nL delta 1979 zcmZ8i3v5$m6h8m$?PFsd?Y53~9lhNO+hjT>0*i!aP(XQ&4c(Nv_y8s0;n0y71l^=# z(+~$7*d_)k&kc+~+%(1~6E&za!5C4&N86hl-6}Hi2?p!;Zj{>Q!j zb4f?JhbR)0mPVAA>!5_2=wj}6PrGv7vHe)SyAvT--7cdoy-FWNwEMvJSZ4Zn2wqMm z2XZ@!Zs}x2JZNil(7@6&yjF}85q?gD#;!JnR%ex-1>s6NCG0`;D&1u$BU|Iv(GmS1 z$HYUn+aT@viWe!9#T0H*#*4f76=inbmnbf%A%2?5^$W@5>pm1vA*@DW46KLQXQ>p$ zyv7om^apZs%EG>?xQl8+4m7-E`?ujp=+*@yx{}ivzrobs#qV2+?cdpHVBvjroGwbN zgw-73aq1NDF0W7v72VFyss&H}h2qOy;dm-F#Z!Y3T{b%noMqx)fah!Bc)-LLfqj8+ zyvW1};7!O+F!A@mZNO7atOFkho?~K+l$Zd0`7qAW&m#~6;ck;qy3*f&7IS-fp*7?_ zYNt2uz*;+Cm9RE$v{vT52hDQumt)|hE25tSKK&p3CjVw_7Atv^Erk8vXR8vk`LeB2 zl<-1(vq zAErJmZsMCqvBYRal(&Stvp5dRJ zqnvxJl&GPDMu|#^b?ixR9laira9%j7=06ox@***%E)ui3BC)N?USn!^Z@OKX@FU1p zWkvLg7SS8>WAWvBCRzZRr!i5N4&)zw-)#mVqb7x z+%82Z@H|98q5)SI(Y8*maF0`VcJdSM9A&VRcf0f5$02aw0?TSr(8`~=iyoMOHw zb5+LmrqYV29P@X<=Q0B&L4;2&j_9)JVYC$f#-UaGEruKYgqS6_F`kA?e_3!r)(ew9 zx6m66=z9wG1gsZ!2v#~@Gs;ZxzOsmE~PhS~XYmgYGLWgYD`1TrJ>*6qh< z;zho};~#x5^ao(Iuzj!v*zHWT^ntO5S9n4Nx@GuHrLJZDJv)h30-JcZ(Jwq|Q9*p$5kf9m5q<5p+Q0XxyT1!y8SPHqR4wi{(=)?#vd z;8ofZr)`ngOGB}+K{OG^LOIi=4w`A;Z#4N`{B(91J|4ZA z6;ZPp&1^D;8e;9|5hIG~L`{YbSPrA&x6Drh{tS5q-Z8VykU7bdxf;a!6rS!4c-|W- zQL5KB8L{dd+*t=9}09&CU&Qwzpu zh8?q&V73vm1Ll>Rq*5ey^nYa@`ww?;mA^kJXdwS2E?(c(c*jJp%`FJL35vxmcM)lM z#MdZaOG-Asmg~x(vH#M(1r4WvF82d$`M%M|m93MxB2b{5DBul&Daznvel?IUT>Mo) z%b8fF84lWPq+{ANc-6Jppx|a>ULj{_Q?gs;%7w`j$Kl)?(PvS(zoUxp*BH$=J0=VsH0# kW4bMY(tSjI5u!6N`N%R^FfT0kAd8|^>?*SJ>Y}ax09n7}aR2}S diff --git a/!TheEsc/!RunImage,ff8 b/!TheEsc/!RunImage,ff8 index d7cdaa5daa35ce6ef271b8992465e64e40c8d5e9..736ae3aad58d06c0b9325f22c903d6f0b4d3456a 100644 GIT binary patch delta 5466 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 EA0*SEg8%>k delta 53 zcmbO*k$p)EJC_^-1A_n%YaD9i+RDY~xs{25Vfw+{jOyEKwlX@iF&E{ROxHWasI>jb IZbk<-0Dg%N(EtDd diff --git a/!TheEsc/c/Graphics b/!TheEsc/c/Graphics index 8861e1c..923e6b1 100644 --- a/!TheEsc/c/Graphics +++ b/!TheEsc/c/Graphics @@ -139,6 +139,36 @@ void draw_sprite(char* spritename,int x, int y) _kernel_swi(OS_SpriteOp,&inreg,&outreg); } +void draw_sprite_flippedhv(char* spritename,int x, int y) +{ + // SpriteOp 32 + inreg.r[0] = 256+33; + inreg.r[1] = (int) buffer; + inreg.r[2] = (int) spritename; + _kernel_swi(OS_SpriteOp,&inreg,&outreg); + + // SpriteOp 47 + inreg.r[0] = 256+47; + inreg.r[1] = (int) buffer; + inreg.r[2] = (int) spritename; + _kernel_swi(OS_SpriteOp,&inreg,&outreg); + + draw_sprite(spritename,x,y); + + // SpriteOp 47 + inreg.r[0] = 256+47; + inreg.r[1] = (int) buffer; + inreg.r[2] = (int) spritename; + _kernel_swi(OS_SpriteOp,&inreg,&outreg); + + // SpriteOp 32 + inreg.r[0] = 256+33; + inreg.r[1] = (int) buffer; + inreg.r[2] = (int) spritename; + _kernel_swi(OS_SpriteOp,&inreg,&outreg); + +} + void draw_sprite_flippedh(char* spritename,int x, int y) { // SpriteOp 32 diff --git a/!TheEsc/c/Mission2 b/!TheEsc/c/Mission2 index 37c1baf..d6c8f96 100644 --- a/!TheEsc/c/Mission2 +++ b/!TheEsc/c/Mission2 @@ -37,10 +37,12 @@ struct Area_s { struct Area_s Areas[AREAS]; -#define DIRECTION_DOWN 0 -#define DIRECTION_UP 1 -#define DIRECTION_LEFT 2 -#define DIRECTION_RIGHT 3 +#define DIRECTION_NONE 0 +#define DIRECTION_N 0 +#define DIRECTION_E 1 +#define DIRECTION_S 2 +#define DIRECTION_W 3 + struct TilePlayer_s { struct EntityLocation_s location; @@ -54,6 +56,7 @@ struct TilePlayer_s { struct EntityLocation_s localtile; int rawtile; unsigned char direction; + unsigned char facedirection; }; struct TilePlayer_s TilePlayer; @@ -276,8 +279,9 @@ void game2_setup() TilePlayer.drawbox_tr.X = 80; TilePlayer.drawbox_tr.Y = 80; - TilePlayer.direction = DIRECTION_DOWN; - + TilePlayer.direction = DIRECTION_NONE; + TilePlayer.facedirection = 1; + memset(map[0],0xFF,100); memset(map[1],0xFF,100); memset(map[2],0xFF,100); @@ -319,7 +323,62 @@ int game2_check_collide() void game2_tick_input() { - char movedy = 0; + int movex = 0; + int movey = 0; + + TilePlayer.direction = 0; + + if(input_readkey(57)) // UP + TilePlayer.direction |= 1 << DIRECTION_N; + if(input_readkey(41)) // DOWN + TilePlayer.direction |= 1 << DIRECTION_S; + if(input_readkey(121)) // RIGHT + TilePlayer.direction |= 1 << DIRECTION_E; + if(input_readkey(25)) // LEFT + TilePlayer.direction |= 1 << DIRECTION_W; + + // If Up & Down then cancel both + if((TilePlayer.direction & (1 << DIRECTION_N)) && (TilePlayer.direction & (1 << DIRECTION_S))) + TilePlayer.direction -= 5; + // If Left & Right then cancel both + if((TilePlayer.direction & (1 << DIRECTION_E)) && (TilePlayer.direction & (1 << DIRECTION_W))) + TilePlayer.direction -= 10; + + // If N + if(TilePlayer.direction & (1 << DIRECTION_N)) + movey += 3; + // If S + if(TilePlayer.direction & (1 << DIRECTION_S)) + movey -= 3; + // If W + if(TilePlayer.direction & (1 << DIRECTION_W)) + movex -= 3; + // If E + if(TilePlayer.direction & (1 << DIRECTION_E)) + movex += 3; + + // Handle diagonals by reducing to sin(45) * 3 (conveniently about 2) + if((movex == 3) && (movey == 3)) // NE + { + movex = 2; + movey = 2; + }else if((movex == 3) && (movey == -3)) // SW + { + movex = 2; + movey = -2; + }else if((movex == -3) && (movey == 3)) // NW + { + movex = -2; + movey = 3; + }else if((movex == -3) && (movey == -3)) // SE + { + movex = -2; + movey = -2; + } + + // Store the last movement so we know where to face an idle player + if(TilePlayer.direction > 0) + TilePlayer.facedirection = TilePlayer.direction; // Store in case we have a vertical collide TilePlayer.lastlocation.X = TilePlayer.location.X; @@ -327,22 +386,20 @@ void game2_tick_input() TilePlayer.lastmapoffset.X = TilePlayer.mapoffset.X; TilePlayer.lastmapoffset.Y = TilePlayer.mapoffset.Y; - if(input_readkey(57))// Up arrow + if(movey > 0) { - TilePlayer.location.Y += 3 * (tick - lasttick); + TilePlayer.location.Y += movey * (tick - lasttick); if(TilePlayer.location.Y > (910)) { TilePlayer.location.Y = 100; TilePlayer.mapoffset.Y += 10; game2_fillmap(TilePlayer.mapoffset.X,TilePlayer.mapoffset.Y); } - movedy = 1; - TilePlayer.direction = DIRECTION_UP; } - else if(input_readkey(41))// Down arrow + else if(movey < 0) { - TilePlayer.location.Y -= 3 * (tick - lasttick); - if(TilePlayer.location.Y < (10)) + TilePlayer.location.Y += movey * (tick - lasttick); + if(TilePlayer.location.Y < (10)) { if(TilePlayer.mapoffset.Y > 0) { @@ -353,11 +410,8 @@ void game2_tick_input() TilePlayer.location.Y = TilePlayer.lastlocation.Y; } } - TilePlayer.direction = DIRECTION_DOWN; - movedy = 1; } - if(game2_check_collide()) { TilePlayer.location.X = TilePlayer.lastlocation.X; @@ -366,28 +420,23 @@ void game2_tick_input() TilePlayer.mapoffset.Y = TilePlayer.lastmapoffset.Y; } - // Dont allow horizontal and vertical - makes movement sketchy - if(movedy == 1) - return; - // Store in case we have a horizontal collide TilePlayer.lastlocation.X = TilePlayer.location.X; TilePlayer.lastlocation.Y = TilePlayer.location.Y; - if(input_readkey(121))// Right arrow + if(movex > 0) { - TilePlayer.location.X += 3 * (tick - lasttick); + TilePlayer.location.X += movex * (tick - lasttick); if(TilePlayer.location.X > (910)) { TilePlayer.location.X = 100; TilePlayer.mapoffset.X += 10; game2_fillmap(TilePlayer.mapoffset.X,TilePlayer.mapoffset.Y); } - TilePlayer.direction = DIRECTION_RIGHT; } - else if(input_readkey(25))// Left arrow + else if(movex < 0) { - TilePlayer.location.X -= 3 * (tick - lasttick); + TilePlayer.location.X += movex * (tick - lasttick); if(TilePlayer.location.X < (10)) { if(TilePlayer.mapoffset.X > 0) @@ -399,7 +448,6 @@ void game2_tick_input() TilePlayer.location.X = TilePlayer.lastlocation.X; } } - TilePlayer.direction = DIRECTION_LEFT; } if(game2_check_collide()) @@ -427,7 +475,7 @@ int game2_tick() draw_spritetext("#############", 1020, 950); draw_spritetext(areaname, 1020, 950); - + for(x = 0; x < TILESX; x++) { for(y = 0; y < TILESY; y++) @@ -487,6 +535,23 @@ int game2_tick() game2_tick_input(); + if((TilePlayer.facedirection & (1 << DIRECTION_N)) && (TilePlayer.facedirection & (1 << DIRECTION_E))) //NE + draw_sprite_flippedh("man_se",TilePlayer.location.X,TilePlayer.location.Y); + else if((TilePlayer.facedirection & (1 << DIRECTION_S)) && (TilePlayer.facedirection & (1 << DIRECTION_E))) // SE + draw_sprite("man_se",TilePlayer.location.X,TilePlayer.location.Y); + else if((TilePlayer.facedirection & (1 << DIRECTION_S)) && (TilePlayer.facedirection & (1 << DIRECTION_W))) // SW + draw_sprite_flippedv("man_se",TilePlayer.location.X,TilePlayer.location.Y); + else if((TilePlayer.facedirection & (1 << DIRECTION_N)) && (TilePlayer.facedirection & (1 << DIRECTION_W))) // NW + draw_sprite_flippedhv("man_se",TilePlayer.location.X,TilePlayer.location.Y); + else if(TilePlayer.facedirection & (1 << DIRECTION_N)) // N + draw_sprite_flippedh("man_s",TilePlayer.location.X,TilePlayer.location.Y); + else if(TilePlayer.facedirection & (1 << DIRECTION_S)) // N + draw_sprite("man_s",TilePlayer.location.X,TilePlayer.location.Y); + else if(TilePlayer.facedirection & (1 << DIRECTION_E)) // N + draw_sprite("man_e",TilePlayer.location.X,TilePlayer.location.Y); + else if(TilePlayer.facedirection & (1 << DIRECTION_W)) // N + draw_sprite_flippedv("man_e",TilePlayer.location.X,TilePlayer.location.Y); +/* if(TilePlayer.direction == DIRECTION_DOWN) { draw_sprite("man",TilePlayer.location.X,TilePlayer.location.Y); @@ -502,7 +567,7 @@ int game2_tick() else if(TilePlayer.direction == DIRECTION_LEFT) { draw_sprite_flippedv("manrot",TilePlayer.location.X,TilePlayer.location.Y); - } + }*/ #ifdef M2_DEBUG_HITBOXES draw_rectangle(