From 88a548372de92e488f9ccdce4b1f491684f1cf96 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Thu, 13 Feb 2020 14:41:24 +0100 Subject: [PATCH] Improved jump system & elevator. --- platform.g3a | Bin 54004 -> 54036 bytes src/main.c | 59 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/platform.g3a b/platform.g3a index 45d3e1dd8db442227d3cda94fed9c12f640557ea..b80a10fc5425430a5d057f760b21d24a45d07ad8 100644 GIT binary patch delta 2530 zcmY*beN0=|6+hPxgIzlWu#HV%wfSh51h2VG=~r5Touy$N6bz&ZA6aC;1_mgD6c|y- z>@`lH0fyP7G&G4~jijI`Dy?3WF^wr`Oj{;Zs$YWuWf3zA#9HV!s532puz2VB0b$QN z@7#}b&*$&l=SNq$fls-;*RKC=%-i)z@15`y{9Stz4x5)>f-TQ6VU&=k^XfSES!^Op zCOQu8X#4F!E-Q=jMWkUHvy&KpBKG|%7gfZi+VF@QXr*__6gg}HS{1hhO_C;BMVH9a zF#xeC;zU8`X@E)(P#n_jUZ9#dps{m6b1g`ZfJSFXq`V>V?WL6^&D*WYzpYx8FQ@mC zX0kxo&E`w;dq67=@TDiZWyHi5Tizo*d}-_ZGP1^|e_E|XZ{FmOv#gTl0a*Ss~y zP#0Pt23@GeT!G4<6ZSbnj!Mtlk>k+8EV$f?tK7z5-h4k5MH$6I}mN;iatm+^ky%>yPbxF+9|p=9 zX9ZWLRRv06w_(tV3clVokiB1JOfxBpzs-JlJXrZpWBh*AVw*|PD=S*9yx&ZYYlPJ7 zi!~u*e4E)hWmP%un-oQ>-SFf4{*(t`j1Pii*rIasmiS&((W))f72Wqj5Nx5QurJ%l zLGsvdL0J=WPPLgG=s+uRq3Uk}(LQSAWNPTQCc_z^N*hoG*6Z1Eq@6hT0W}(c#w-HW z1%U3r+U!`vc>z$1+ut+OyJ=Ku3;EAEhG)*rc8hM*a}63>$fW4IWea&cXe*{BB%BfR z*k)+eU?yD&o=!13QK*~vJ}NqW*R`PjOGf|<8Y4GiX>DfA6caPmCoBHem(ZAA5WgJmhGpWa zpK2W5H(`uNGs7EVz5gy+eF)1i|D#}=WWFGByfDK zhH1!)5vBMKp9(wfI71dyt64bo6f;6`WV{n)GJ^H%dUr{RV**6Tt3lAMSC#qSM)k*wz@sOP?6K#sNp69|R^XOkkXSMu39ueenwzbhxxZ}%=!+Jl zCL|vVoc*ILF^-LP?ncH>cXEXI*j!i6HjG4Ud;KG^?fHxk86o*>{9HP|@13hvuI*`C zQ17V;0E_F^GJCg?tnu#d3R!ALPofs1KWIXZQ63B+$4mO44|9J2`6OHG{g?bY(AOTb zm0twW<+;B1&}P0jSAG=es~7q6-e@9ARWM)wEi%dMzYHZ!q7FaO^bIU5%0%Q)gO)Y2 z2K*+>F)aU_sFF8*WF+y$Kr<9rMe!4s1@t)!vkfk9u4ail;wqp2@dct2g}+=s@N{eK ze4*?+xE#BoYjX>zU5#Yo>n`-IpO(x>CL`w5m!@=H6hh;6(^g0L#Y?$_6f^VX-#_yL zf?*pi|o-zwY16~9X%qGqo>wMe*7A@F`T@9Sw=dTeJoFj zg?=*tbiaw+_`jL`^Ab7ky=7)wM{lwJejdBN9`{8jvGeD@_$mr9PNzy~-Nw!N#z0)7nHw%{tfKs`6rkTTZ!Xa1n<8UzedEC~yC=Ls>X_l{yE0+)e=|cG A!2kdN delta 2511 zcmY)we^8U>`FRtN#4jL_5Q3lyKXjbJc&q5_m6e2|u!@BUo&1^&8h$8g2NsyN)MNvM zmN3AVQfaZxh83^p72U@Eh?oU0+=N?NC?S#~tIoXZZX2na`KZ<-@w?=&c|^p0AHBurEW@ESf|} z;m%^WXGKuZ$%!c*-M0&KSKZDQdI>)(}-X*Thb<8t)=x&^4p!Sttpxmo2FNUP7c z2-H{#G`9fg4|{;-o7wW|e6-IylOBe_2m$y(>Y^@q;4yTE59V_>mz4f66t}dylc@CU!%)*aa%2+Mw z{gp>N6_1rADiVXOk*`SR#{w!A0De=HBR3Lx7RTEx0?#i!V z1}j%^&UskRf!t-(^cv8~oxC1<2B(eF$qs*;_O<0tWq;9zWpJ|%I$4Lr_@r#CmROXo z?6m$0uQse9seIhPna6Z8bK4`<{!91Yn%6WZQCt5h%6<+7d^Kkd&6>da3 zam<(p4twJgJ0#XqJ_l&yo14*nP=(jESIDtJQ?JAng=}Gi;*b*DK@8|a;*2FzyG?vKCDfQEAOn&{7t#nz||+YUVA5ci^ZhQCC~79NJ>lDA$!4UB6F;&YDbiSBeB92REUPut_HBHrP$>CZo4`VvC@V&PY%noMh6O%nXj>Klv;(WB2We3^8qay z_1|-}@DD%>ALCkuphv(lQe`84fPnW`(INtdRg5E3j5@`M2uTR32$=|V2$!CLO^5gz z!W07fC{ZBKgjgevWnn)=(xL)%R)x^!B13@Xz=9O@v(TnaQo}o%q6ryhH=B2CR=e}O zF6mdK9b6K_PEjxN3Q)ECd`l$BVVahIM44RDd2mYSpqJ=(n!~{@<`ZXPq36B{b^?6? zBYGhZ!FIm&kCKQ5_EqZ+MEqi_ln@(x+Lj)Sc?d@+azZ#leCGR%kR&$sK|H>fKd6*X zr!;sJDHU#Dv|Yt)?OHO;JK9Smv88sk$_(@XR$YZT9vDSzM{L8&Cm?pPn4kYU5IOs% zSZL=wM*Ot%ZQRq+l@*u<^m~o`NY@4;(LG?J-M=FaW;^eVa-a_fi zRpSTXDZ}QE2rha3hguT03uycU%$Xu!FShAeP4A;MZmJ*=xV+_~Pe=qRCtO`IcrJ?R z%av?FcF3x)H4)G^9s@N2-}Xu8inX|nxTSx)q>Ez_HK?Q#6xRpB2Yi}E$S#)i+3ze;`twhg{T)!QFGthS92#I0t8^z)H_Wtp(UB(I;P5x0ov?pH6|8qLs%4LrUDV~J&hycM7qkZj>PEq^aI@+ zAj(S8M6AIhsrfVdj?hy4ZVM09UGQT78QNt6jm2S&%j6e+Js4G= 0 && collide_solid(player_x, player_y + 1, level)) on_ground = 6; else { - if (vspd > MIN_VSPD) vspd += GRAV; + if (on_ground != 6 && vspd < MAX_VSPD) vspd += GRAV; if (on_ground) on_ground--; } //vertical movement @@ -81,30 +85,43 @@ int main(void) if (jump_buffer && on_ground) { vspd = JUMP_SPD; on_ground = 0; - jump_hold = 10; + jump_hold = JUMP_SCALE; } else if (jump_hold && keydown(KEY_SHIFT)) { jump_hold--; - vspd -= GRAV / 2; + vspd += JUMP_REDUCTION; } else jump_hold = 0; + //elevator collision and raise + if ((collide(player_x - 1, player_y, level, '^') || + collide(player_x + 1, player_y, level, '^')) && vspd > MIN_VSPD) + { + if (vspd > -1) + { + vspd -= GRAV; + } + vspd -= GRAV; + } //vertical collision { int trunc_vspd = vspd; //truncate vspd - if (!collide_solid(player_x, player_y + trunc_vspd, level)) - { - player_y += trunc_vspd; - } - else - { - int sign_vspd = sgn(trunc_vspd); - while (!collide_solid(player_x, player_y + sign_vspd, level)) - { - player_y += sign_vspd; - } - vspd = 0; - } + if (trunc_vspd) + { + if (!collide_solid(player_x, player_y + trunc_vspd, level)) + { + player_y += trunc_vspd; + } + else + { + int sign_vspd = sgn(trunc_vspd); + while (!collide_solid(player_x, player_y + sign_vspd, level)) + { + player_y += sign_vspd; + } + vspd = 0; + } + } } //spike collision and death if (collide(player_x, player_y, level, 'v')) @@ -113,12 +130,6 @@ int main(void) player_y = start_y; vspd = 0; } - //elevator collision and raise - if (collide(player_x - 1, player_y, level, '^') || - collide(player_x + 1, player_y, level, '^')) - { - if (vspd < 8) vspd -= GRAV; - } //borders collision if (player_x <= 11) {