From 7f856467a086ec9a3ebd1ccdf12e578dffb9c98b Mon Sep 17 00:00:00 2001 From: Simponic Date: Sat, 8 Aug 2020 18:16:34 -0600 Subject: [PATCH] Player added --- GBA-Dash.elf | Bin 208888 -> 211852 bytes GBA-Dash.gba | Bin 1932 -> 2036 bytes build/GBA-Dash.map | 183 ++++++++++++++++++------------------ build/main.d | 14 +++ build/main.o | Bin 6748 -> 11528 bytes include/.playerObject.h.swp | Bin 0 -> 12288 bytes include/fixed.h | 77 +++++++++++++++ include/playerObject.h | 73 ++++++++++++++ include/point.h | 28 ++++++ include/velocity.h | 35 +++++++ source/.main.c.swp | Bin 0 -> 12288 bytes source/main.c | 22 ++++- 12 files changed, 337 insertions(+), 95 deletions(-) create mode 100644 include/.playerObject.h.swp create mode 100644 include/fixed.h create mode 100644 include/playerObject.h create mode 100644 include/point.h create mode 100644 include/velocity.h create mode 100644 source/.main.c.swp diff --git a/GBA-Dash.elf b/GBA-Dash.elf index 57222454e12fadf0610c9dc28c03ce9ef68a0e8e..1a156a8528c6abe75748f7c909b961ceb1597542 100755 GIT binary patch delta 7773 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 a+V55h_K^8vho}$UxmvI(dXlqO4*frzad&?J delta 4788 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 delta 257 zcmeyu-^0J*0;63GI|GLb3j?zb5QEqZ3=GU5+yZ2SFi0Fk1I3s?SOLgqU|?bT%FMuF z$UK>kX%=I}1$9(NSH^Agg zCpYa5;RfrD+s+RZX0y)bWmGa`IKZOa!0^HU$E)WuK+6>v5*%cJ7RdoI8_+fbMg|sv ztqn?Cp4=V`A6kBZSd$pIfb6;-4T_vVT1fRrgL0G7ZI&QLsf7REcmF@&_JalFYDTsS YRv^v9zzQ;W@*UtkzcsweB|TAycYt!>?{W`DnL{&%=g zJ^G#V-QWNHec%6k+{4>*`UH2qIHs~%{U-N5E>+3U}$>y2J^ffb=x-Q4h+2=})+IDr(YM#FG z${(-%;(3M(s6dAfi;JU_)n+J*{Hqs!oP1MqPjYK=y7uygH9OX9r_Xfl>Kz|Yt2Mp) zhUuC{rKQW?S$oOqF%}(3>}p1DK9YQBx&{4d*>x^yEPtXwt++SYwEJbl+q16ZqL~|$ zi>B*$Ek^G;l8ddXl5@tnQgeE5(%EoEVo)pmWn+DywIUS!Bo#-sB3w4s4_YfKgP)>e zNGoDxV*{YIVyW^o4;V^5Jw6oztNfY3+u5J+bzsc4655164vER+nu)7&i<22*gI2WULpthB@Tr55UPD(P2OVAui{kPn zl>2G0)itm%}oK(>-L1~l*4nSn1qJukdF+!zx79`~sC#GUO z1V)3+ezR~G#`zHTY~}aC8i}$Z7=*P>sfFW3O0B1SS}SAk#b%D3gYa4KKSYha&&%8f z=0!+fK&_g_Wzi=fS@_TXe3Xg@A+qXy-Hh^c2usj<05$ewFts4!WWMLsd=1P-NH?IW z#WUd8pK4xsuvpE$*h3KRgSv;#e+P#9FGJ>oU~UC*5*4NTci_JP!h8Z3W3{aDy z*wtX30r8)xOTQ)NCVd#y+Tgp6E<^{0=$8Kwao6Dp+P`%ce0LRDtmmlK(Sm8 zGpz3%hrt`?nZvr9m66{_fx0P>#r04H>T;O@Wkia3;Ho+tOGadYrt9@Ojh1m6I;cwB zrxzG0L_^d{`_pJbFR*(t)O%3%0{b+Geke6qeTdHchX@Fs=2Q^zh3qZqSAoINPmJlN&T|+p29<<1ZPdx|&wzXQ}1cU{!Bq zzEb- zY1AZ7PrX^i?%Bxr^fhxRXAV1yS!T&IG;>w+eFZwiUK zvDKhgye4>ckgT&#ON$^4%}V`-u_IzYU0efoE7}c2j9@TtKzXp#W4{6V z5^ZSXHXbp|P%t=Sc&tO-=+NM14gW$f=pSC|33z?grYhW=y*BWoS$P?T#(qcGLkQWK z=v-eP_HRYPxV~z3L<@{^rz7^^&MKN$dd+9ykS-KshH0PV|DzYq|7K__J@z3Uap}IIVAgr-4~+ z*Ar56$2$$&6V7yEkhQJ?$E$a|b4FW-(H1gYjTF|;89u@^Brs$7sa;VO*8^W+du9Wh z!fUZ3lDApuje`{omqI((2#G?3I2vt9C{F5VDBqG&tL6%>h7Im6b4v%G`ST-aluYP(N_YF6qf92>ZsxtfYae8^$-+RsWYw9@e>tmnt6 z)-gH|$5j4-g2SxXr?&hF>HIJ_-VlP-r`ikloGvE(aa4rA>%MP-UvIG&A1Jw0+``3iuT;+7W2j$5{W9v~sI>Lw#kIX3@{gms zZXUexnvqCTImo=v_`gu8GEm@yYP1ezN7Ajs*`uk^)}xtR>$c9#tG1*jhFT}GljHqq z^%wN5i9~B=w10SV;IA^B7#q*z(i2LJq%xz4e)b@j%?|fvZ%zzx#biduCUbdmY&bQQ z9`EjZOS)eqcwo!+XL3`b&*Jx&JUN)TIX#dkb5mpK32y+<*tnbeCNsmiRhiNJ?Ar^J zjnro{ z^YlsjQ=6RN z5Wz8_e)Bq-6`PNqbkq1X1pV`QG#&F_C6CpfJnm#3?Rum$ZrATbeAuPq$Y`Be$7yyP z^RNN7#4$H)V)`p|pB9_j;&wv$EHhzS&b4+qf|$azmD}|Vf{RqAD_>BS}~4eenE2h6`ez8*D|NZ zIY`B0Q0V^WbR@Hc=`zh6Tdy!n^a8=?a)uo+Pi*3%F!PJzdUn*tn#fyjH|%gt+^$$= zm)F|iWxgsblkxiI`yUo2YdS_2M5#RYTKUu@vio(;_YpT_C#BJ)ky!?_^OA*AY-ZF;dCzD+m{+WruKI4*t1W<VF~59cG#Q4OSWDK#;a9nZz*$a|49oLHIB-jOuYG=-kw zhhEM`e->Om$7AE^OlCM%a2PWR%ch`)4r%PE{18ylY5Hl8|;!&MCq zXH$B*dvQ=B2l^P^hkz66z}DT}T|4$2QhI^x+t)KYOr7ZbIGDMv?%mxzYA}N_CwCm& zxk;tT{cL-dwg<-z1b|b3B_%%$v20hr|frG?>0~S-fL_L#bzA5)VKyf z-sLxkVz)W7R>@G~OyKt7JN$RzmyOLUVU$Xz`ZD-!2c*4rpK^SDqu407qDFz8!i3gGA^;vD9y_6c`ZZ94&eM9#Akb@#tE3($!K!{|K<9VBw9fpHAl4JKFx) zf_H6nTrO%DgQ67tG`F&g&_rs_<}ZFFKE3 zs6Q-l)STCHW8yF8G3K83o4{AN_f;~FT(OGMID0;#`Y9)DmS z-#3pR79P!`eaxpE4|O?JH=tLxJ`oCskY|^9&Lhw9Pk(pE6>cQn10_%M&}1ynokBmQ z2aq7H7yc}=n~0xQ_7WH2LWH~=7^ucC)q>m`fhG81ln8&WA0L#@5wQV&MTFl=M8tWO zh`88R3J*zoKl%`qvrXiz5@DizNNNoc%2ttcPN=_DQ1=)7F5!Cw4+*9PnQQvtl+bvK z;G=^7Ciq{1FAG|jYx;!+R|#GtxLt6+V4vWa;NJ?~DfockzX(1h$cJ&ZQz}>`STEQv zctEgU@D4$K?xX)j!5<1fFZhz6AIpq(O@g}whXf~yn6F!eKTV9|#a#H05^>HwEc_!x zyqJDL@Nv<9orw8+M&v&d{HfqC1b-{|ir{NR_yw>j*iIP{{4yfiSuWTj*d}dj&rx_zA&> z1TPTL&gY4U_YIMMOYjGRmjs^^{F&g3MEJi#gujWgk@pk9hlO87#JDyJCIt@(4hl{P zo)Ub&;CaCZ1uqDGS@7F}ynV8r6@qI84+#zmo)WxW@Dah61+NG$!KVVoyGC$};C8`o z!8Z!tDA+5A6y(>RU_x-UV5eYGP@lIL3%^Qpo#=BGctZI12%ZuAgy2JhUljbZpuUg5 z|FZBe3hHwi@;{Kry5h%Swx`c$V6E^Cg8V8>J-=NMw-VvUPr>953i4|(d44n}-YWPm z!Mlj?@EO4$2|hph_L79Udn3( z8%54wDeX~9#1{38j+$1k4T2OksU=TP#W734=y^8A`c z{2md0KN0??g8be|{cD0I&vn>gyXo=h^#vV7x_ zY!qw}+#t9~utRW*;C8{?f(Hc;3my?15F8R57911I2~HD{-&2A!f_DkNU+`|hdj!u5 zJ}CIG;HL#YEBHCV#{{1c{HEZOg5MW>TJTxHp9%g-@CCt_1YZ?=O^^?|9FKnf0rHub zyu07{Ujy>hf^oq*!8SquV}*A7X9jVTV29uq!M#MxuilqHcV8YBJ^#%^eGrv#qU9pmN|4gO2qgL@Ch{y5@JWs5Cdb4e z-8Xp@KgtYdRboKXslGn`5|DS-68uo=WmDs+(W7{Q_gK7MGMpJryAjbfmFUlojHK~0 z@9`QOPmRC`FS7~0nP>VY^{=@Y6%4vN(2eMgtIsE0{Nu>|=&9Y??F5I&A)`Z#Fj zm;SW#qplPl+gTT`Yc~c3E?p1W8?OWL=+Aicb>s25o^m(d-JlCWJS6AWI}X}$O}fQx zm*excyB+Orhm7s=>~Y)Wmj{o#IuGV39i_NB-rv0O-j8_qSW=*D{xG=17oSw32+)V6u~qy96fUc2Y;LRm)#Db%rE6a?tv$2;l~ zp$TqR9|P^}-;?NH95VKg@2qbB{sT0+GX~IQ2=SU+2FNy9h@R!4?uK0$0(4VTQs@#f`@tdF@_6|9<2e0bRTQ2gg)ls{jB1 literal 6748 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 C#~tYa diff --git a/include/.playerObject.h.swp b/include/.playerObject.h.swp new file mode 100644 index 0000000000000000000000000000000000000000..00a18a7344ccba871db7c144e280730f6f2b2716 GIT binary patch literal 12288 zcmeI2O>Epm6vwAXKo=+=I3WajZKQUWZuTQBB~sf+n`E1A2}wvcDdl2$?b%&Z$K%@L zG~4oVq1=%;0Yc)yg$q|I!~uj5cRmhCd0zXgx>Ml{&-M!;F19UA4T&-(#O2Wy}{nJ5cspd}+Uxxm$QK_NsQQ_B>f# zm~BkX+i}0@1&*J%yc+uUfJe)nm$)M<{aa3D91H6 zN7ip=2IFf87y^cXAz%m?0)~JgUH+xNNTR>ux5mZ?@c$qHCvJ#=l!N%lDn-oQ_LL^xTI$HItlI;)nsJDmQF%y zl9Gq$~Mi+(3#c?*4o+DnRf2hAb0C#5v3U*uu(+u5yFz5^hCf4 zpi;2I&>t*B_Le6HX(Vd85iT!2mu!Y!&;zYHZg4;5bagm31GL5ciaUTqZG2=XE6TR8 zy1c$LZ!I=Anu~Pm)J{St)ke*W;E1H20LMrqy*~AD3EZ0mpy$V^<-i}1jvW3vbi%$5 zw}HHv0wGC?#ObTJ)edE|!fS+E$2U%xX7bUNRGx|6<`v-uvUoU4IFw}?eL(hmY(NT` zM3?L=vf*$ROIvyld4cZ*oVJALQo4$M`;m&{Z$Z*i!%<~Qj!orYs_;}{g9mDjTI6b$ zm+e3$PcFB8y6nk5IYLCP7pQ7=`gYI*lnS+lAm6?+(Bs>EK*K+qE^{w(F(TOFfhrO; zQ{UcF1XIp1sgl?E!R~qy-qnO>dFP0w^>Fkwb$ww=OA4#&ZF9G{u-e#YwJ)T&8mjcL zW;Qie1)5>>8MD1$jhF1+urf3emq~F?GWqq@PTG)Nsw8srKqC(f_ zLt(Fo8Gcv9+*NJYGth*|N@5_we&* zFO%4|p6(Vrh!a$>Bcdn?_2#;Q$EwQ<$4MeqP{EEW3|XtsDMmeAD{%R?%3!!r`rgnh zS6b>c?6?je(X5c$J3U<^dl<)RPSv}Hn5m0{ix<$*;?Y>MO4LJEv$C`|@i3CCu(I4* zYEvi?EuLb_bLe4;^+_fNA$NI~Vi_e4>SL^IRd=4iJ=NpWzDKpnGf(eWcm0ww;dPOD q_lDnHCeoMV>5y)smHr{NW0FGn9kHD^W@V7KhN=+rCKZ0HO#cD_c1wo< literal 0 HcmV?d00001 diff --git a/include/fixed.h b/include/fixed.h new file mode 100644 index 0000000..80d3ee9 --- /dev/null +++ b/include/fixed.h @@ -0,0 +1,77 @@ +#include "types.h" + +#ifndef FIXED_H +#define FIXED_H + +#define FIX_SHIFT 8 +#define HALF_FIX_SHIFT 4 +#define FIX_SCALE ( 1 << FIX_SHIFT ) +#define FIX_SCALE_FLOAT ((float)(FIX_SCALE)) + +typedef s32 FIXED; + +static inline FIXED fixed_OverMultiply(FIXED a, FIXED b) { + // This should multiply two fixed-point numbers sacrificing a little + // accuracy in exchange for less chance of an overflow + + return ((a >> HALF_FIX_SHIFT) * (b >> HALF_FIX_SHIFT)); +} + +static inline FIXED fixed_multiply (FIXED a, FIXED b) { + // Multiply two fixed numbers. Possibility of overflow. + return (a * b) >> FIX_SHIFT; +} + +static inline FIXED fixed_divide(FIXED a, FIXED b) { + // Divide two fixed point numbers + if (b != 0){ + return (a * FIX_SCALE) / b; + } + else { + // Return a large number if division by zero + // Hopefully this won't break anything :P + return 100000 << FIX_SHIFT; + } +} + +static inline FIXED float_to_fixed(float a) { + // Convert a float to fixed point + return ((FIXED)(a * FIX_SCALE_FLOAT)); +} + +static inline float fixed_to_float(FIXED a) { + // Convert fixed point to float + return (a / FIX_SCALE_FLOAT); +} + +static inline void swapFixed(FIXED *a, FIXED *b) { + // Swap two fixed point integer pointers + FIXED temp; + temp = *a; + *a = *b; + *b = temp; +} + +static inline FIXED fixed_sqrt(FIXED a, int iterations) { + // Calculate square root of a fixed-point number using Binary-Search + FIXED low = 0; + FIXED high = a; + FIXED mid; + FIXED midSquared; + for (int i = 0; i < iterations; i++) { + mid = fixed_divide((low + high), 2 << FIX_SHIFT); + midSquared = fixed_OverMultiply(mid, mid); + if (midSquared == a) { + return mid; + } + else if (midSquared > a) { + high = mid; + } + else { + low = mid; + } + } + return mid; +} + +#endif // FIXED_H diff --git a/include/playerObject.h b/include/playerObject.h new file mode 100644 index 0000000..9394c4f --- /dev/null +++ b/include/playerObject.h @@ -0,0 +1,73 @@ +#include "types.h" +#include "point.h" +#include "velocity.h" +#include "toolbox.h" +#include "fixed.h" + +#ifndef PLAYEROBJECT_H +#define PLAYEROBJECT_H + +#define GRAVITY 0.75 + +typedef struct playerObject { + VELOCITY vel; + POINT pt; + u32 rotation; // Rotation amount + OBJ_ATTR *obj; // Attributes of the object for GBA + int pallete_bank; // Index of pallete + int tile_id; // Index of player tile + int isJumping; +} ALIGN(4) playerObject; // Word-align to ensure corruption doesn't occur + +static inline void initializePlayerObject (playerObject *object) { + // Initialize the point and velocity of an object + object->vel = createVelocity(0, 0); + object->pt = createPoint(20 << FIX_SHIFT, 100 << FIX_SHIFT); +} + +static inline playerObject createPlayerObject (OBJ_ATTR *obj_buffer, int pallete_bank, int tile_id) { + // Create a player object from data + playerObject temp; + initializePlayerObject(&temp); + temp.rotation = 0; + temp.obj = obj_buffer; + temp.pallete_bank = pallete_bank; + temp.tile_id = tile_id; + temp.isJumping = 0; + obj_set_attr(temp.obj, + ATTR0_SQUARE, // Set attribute 1 to be a square + ATTR1_SIZE_16, // Set size to 16 x 16 + ATTR2_PALBANK(pallete_bank) | tile_id // Which pallete to use, as we are in + // 16-color mode + ); + obj_set_pos(temp.obj, temp.pt.x >> FIX_SHIFT, temp.pt.y >> FIX_SHIFT); + return temp; +} + +static inline void applyGravity (playerObject *object) { + // Apply a gravity constant to a player + object->vel.dy += float_to_fixed(GRAVITY); + // This is a weird convention to have gravity in the positive direction, + // but I don't want to deal with coordinate changing. Too lazy +} + +static inline void updatePlayer (playerObject *object, u32 GROUND_LEVEL) { + // Update the position of a player object + updatePoint(&object->pt, &object->vel); + if (object->pt.y >> FIX_SHIFT >= GROUND_LEVEL) { + // Only apply gravity if player is not touching the ground + object->isJumping = 0; + object->pt.y = GROUND_LEVEL << FIX_SHIFT; // Don't go through ground + object->vel.dy = 0; + } + else { + object->isJumping = 1; + applyGravity(object); + } + // Update the player object's attributes' position + obj_set_pos(object->obj, object->pt.x >> FIX_SHIFT, object->pt.y >> FIX_SHIFT); + // Update the player's second attribute (tile and pallete bank) + object->obj->attr2 = ATTR2_BUILD(object->tile_id, object->pallete_bank, 0); +} + +#endif // PLAYEROBJECT_H diff --git a/include/point.h b/include/point.h new file mode 100644 index 0000000..5c69422 --- /dev/null +++ b/include/point.h @@ -0,0 +1,28 @@ +#include "types.h" +#include "fixed.h" + +#ifndef POINT_H +#define POINT_H + +typedef struct POINT { + FIXED x; + FIXED y; +} ALIGN(4) POINT; + +static inline POINT createPoint (FIXED x, FIXED y) { + // Create a point from data + POINT temp; + temp.x = x; + temp.y = y; + return temp; +} + +static inline POINT addPoint (POINT *a, POINT *b) { + // Add two points + POINT temp; + temp.x = a->x + b->x; + temp.y = a->y + b->y; + return temp; +} + +#endif // POINT_H diff --git a/include/velocity.h b/include/velocity.h new file mode 100644 index 0000000..278226c --- /dev/null +++ b/include/velocity.h @@ -0,0 +1,35 @@ +#include "types.h" +#include "fixed.h" +#include "point.h" + +#ifndef VELOCITY_H +#define VELOCITY_H + +typedef struct VELOCITY { + FIXED dx; + FIXED dy; +} ALIGN(4) VELOCITY; + +static inline VELOCITY createVelocity (FIXED dx, FIXED dy) { + // Create velocity from data + VELOCITY temp; + temp.dx = dx; + temp.dy = dy; + return temp; +} + +static inline VELOCITY addVelocities (VELOCITY *a, VELOCITY *b) { + // Add two velocities + VELOCITY temp; + temp.dx = a->dx + b->dx; + temp.dy = a->dy + b->dy; + return temp; +} + +static inline void updatePoint (POINT *pt, VELOCITY *vel) { + // Update a point with a velocity + pt->x += vel->dx; + pt->y += vel->dy; +} + +#endif // VELOCITY_H diff --git a/source/.main.c.swp b/source/.main.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..b3f5f6dde24ac582923b6629df9de7b31c4e3eef GIT binary patch literal 12288 zcmeI2L2nyH6vrnV0IL*Gkw9>orjoUe9Iw}@AjNScr?FeNC2?aH0U=tgz2kV(_3q*w zr!gdOp%*wH@d5Y<9N@rb00j4*xN?94z0h8O|Lm+CiZBtqMS83Jvi7_;v+w<894SgV z#Wx#o@a2NVa6Ql1nM;B*?0(H#2-r9Y9Dznb3X{&7#=(v1v|0Wv@a$N(8217v^(Y$?yNaJjd9N;7jlscn@rWn_vl?1HV3t9Pk798uWkwEpQdQ z1~_!pU*J%2lx$q1MY&4fdDQjgV(`B z^zZ=u4t@sr!1v%ga2GgW2fPbb!7Jb;@FI8`Bo0pD9#Y9qyb`ov|1i z*(kXqcCm;k!fKg}9xdz(zu=DfVufGgD=WO-c*|~GZPeRp8L!6;jtt`$kgQzUSKe@i^$Jx2nH8 zea{z$l_ayYs?E-x=t`~^ifKPOW@L}M-Y)Lsc@bZ#JGJCi?TWqLXf-cyv@3ia z-|fw{Yy5Ef(ze#qOy$rE(8uv=@Kjo!tOUPZsE!=pRvC$IT~*WZ^J#&2c|!zgJL!z9 zL{}<*`{GVgpPtpmXgryhywNkgKyvlp#zvw+Z@m7l`Z;;anMzaF-(~9&&i_-nN>Z)G zLSmO>vJ<&Dyb(|)Xqm8+;CzKa8|5h znUD3IWt3OdNtx}3o|`l(MJ%=EOkx4$=+|+66D@`Xg8H`9i^rqoIcqOx;_dKmTYrO-;l4Ni&o1*$um% z9M4RMLI_aNe}4#$rz?6hXUlOU;+auQ9yrm=una@L6CTWrdqFfxN}JkQiRBPKH46Pz F_7{Rhyuknf literal 0 HcmV?d00001 diff --git a/source/main.c b/source/main.c index a36688d..ae0cf05 100644 --- a/source/main.c +++ b/source/main.c @@ -4,13 +4,18 @@ #include "../include/memmap.h" #include "../include/types.h" #include "../include/memdef.h" + +#include "../include/point.h" +#include "../include/velocity.h" +#include "../include/playerObject.h" #include "../sprites/player.h" OBJ_ATTR obj_buffer[128]; OBJ_AFFINE *obj_aff_buffer= (OBJ_AFFINE*)obj_buffer; // Object affine-buffer void obj_test() { - int x= 96, y= 32; + int x, y; + x = 10; y = 10; u32 tid= 0, pb= 0; OBJ_ATTR *player = &obj_buffer[0]; @@ -38,9 +43,20 @@ int main() { REG_DISPCNT= DCNT_OBJ | DCNT_OBJ_1D; - obj_test(); + playerObject player = createPlayerObject(&obj_buffer[0], 0, 0); - while(1); + + while(1) { + vid_vsync(); + key_poll(); + + if ((key_is_down(KEY_A) || key_hit(KEY_A)) && !player.isJumping) { + player.vel.dy -= 9 << FIX_SHIFT; + } + + updatePlayer(&player, 140); + oam_copy(oam_mem, obj_buffer, 1); + } return 0; }