From a84abde99703abcecd3300332eace71ef674091a Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Sun, 14 Feb 2021 17:16:17 +0000 Subject: [PATCH] Projectile support (movement and render). Re-balance. --- !TheEscape/!RunImage,ffb | Bin 18904 -> 22293 bytes !TheEscape/!RunImage,ffb.bas | 99 +++++++++++++++++++++++++++++++++-- !TheEscape/Spr,ff9 | Bin 54700 -> 56292 bytes README.md | 4 ++ 4 files changed, 98 insertions(+), 5 deletions(-) diff --git a/!TheEscape/!RunImage,ffb b/!TheEscape/!RunImage,ffb index 8313c8bbb469d3d346f6e057502e5fbf10d4400e..811cc8c738babe27fa1c80fe62441db13fa4cd55 100644 GIT binary patch literal 22293 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 E3pd?XoB#j- delta 6123 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%0A*p;JSzm-&3gr&;Znx)O#v5e7|%=`|IEkI zBg1$&yTdZSlM!`V6m>Q&s9X$%54a*^gkIUSzaL z1*k=fA-CA2#NvX^={CE?k7xMfITdRh8-^@Zuxa{1-h$n;r472;?alMdu@yjiTIbNVgkaX|qTyum3A- zo?Zc8wMFHY!?=9nCuG+NZ#?_&yaj8r~g$5hT5f%6@O4(l3>8tdSe#p|dGkBbkz?DhrK*aD=pg0t>`=FV!~ z`Wi|)Ae15NQ8?6jk+Z%9@vd^a_5HD%*LnugF5&k}hAOds_l*#cYkoOsXAfsv?>vG0 zKuT=fdYn@MZ=MT*%xQPoG`MDcTIg-`0L$Xc1paSx`iZSr@T#o>i5gi96}A~dt~0EC zMw@suVPh?@4eO{a27j2FAG8TAa9yWw(oNM|q8He^u9U;ZCGxTbCZ diff --git a/!TheEscape/!RunImage,ffb.bas b/!TheEscape/!RunImage,ffb.bas index 1fa2da0..61d62ce 100644 --- a/!TheEscape/!RunImage,ffb.bas +++ b/!TheEscape/!RunImage,ffb.bas @@ -56,7 +56,7 @@ DEF PROCfinal_gfx_setup IF SCREENMODE% = 28 THEN SCREENGFXWIDTH%=1280 SCREENGFXHEIGHT%=960 - MaxEnemies% = 5 + MaxEnemies% = 2 PlayerYHeightDivide%=20 ENDIF @@ -79,6 +79,9 @@ DEF PROCmain_scene1 REM Current graphics buffer Scr% = 1 + REM Make sure to reset this here so initial stuff is ok + Cents% = TIME + DIM PlayerLocation%(1) PlayerLocation%(X) = SCREENGFXWIDTH%/2 PlayerLocation%(Y) = SCREENGFXHEIGHT%/PlayerYHeightDivide% @@ -96,7 +99,7 @@ DEF PROCmain_scene1 PlayerPhaserOffset%(0,Y) = 75 PlayerPhaserOffset%(1,X) = 40 PlayerPhaserOffset%(1,Y) = 75 - PlayerPhaserDamagePerSecond% = 2 + PlayerPhaserDamagePerSecond% = 3 LeftID% = -1 RightID% = -1 @@ -125,11 +128,28 @@ DEF PROCmain_scene1 DIM EnemyCollideForce%(MaxEnemies% -1) DIM EnemyExplodeNextFrame%(MaxEnemies% -1) + MaxProjectiles% = 10 + DIM ProjectileLocations%(MaxProjectiles% - 1,1) + DIM ProjectileVelocity%(MaxProjectiles% - 1,1) + DIM ProjectileState%(MaxProjectiles% - 1) + DIM ProjectileFrame%(MaxProjectiles% - 1) + DIM ProjectileMaxFrame%(MaxProjectiles% - 1) + DIM ProjectileDamage%(MaxProjectiles% - 1) + DIM ProjectileSprite$(MaxProjectiles% - 1) + DIM ProjectileFrameInterval%(MaxProjectiles% - 1) + DIM ProjectileFrameNext%(MaxProjectiles% - 1) + REM Random it up for now FOR Enemy%=0 TO MaxEnemies% - 1 PROCrespawn_enemy(Enemy%) NEXT Enemy% + FOR Projectile%=0 TO MaxProjectiles% - 1 + ProjectileState%(MaxProjectiles% - 1) = 0 + NEXT Projectile% + + + DIM SpeckLocations%(49,1) FOR Speck%=0 TO 49 @@ -149,8 +169,9 @@ DEF PROCmain_scene1 PROCplayer_ship_handle_damage PROCenemy_ship_handle_damage - REM Enemy movement - even if player dead + REM Enemy/projectile movement - even if player dead PROCenemy_ship_move + PROCprojectile_move IF PlayerStructuralIntegrity% > 0 THEN REM Controls @@ -188,6 +209,7 @@ DEF PROCmain_scene1 REM Draw enemy stuff PROCenemy_ship_draw + PROCprojectile_draw IF PlayerStructuralIntegrity% > 0 THEN PROCplayer_weapons_draw @@ -204,6 +226,66 @@ DEF PROCmain_scene1 ENDPROC +DEF PROCprojectile_move + FOR Projectile%=0 TO MaxProjectiles% - 1 + IF ProjectileState%(Projectile%) > 0 THEN + + REM Calculate new locations from velocity + ProjectileLocations%(Projectile%,0) += ((Cents% - LastCents%) * ProjectileVelocity%(Projectile%,0)) + ProjectileLocations%(Projectile%,1) -= ((Cents% - LastCents%) * ProjectileVelocity%(Projectile%,1)) + + REM If they go out of bounds then disable + IF ProjectileLocations%(Projectile%,0) > SCREENGFXWIDTH% THEN + ProjectileState%(Projectile%) = 0 + ENDIF + IF ProjectileLocations%(Projectile%,1) < 0 THEN + ProjectileState%(Projectile%) = 0 + ENDIF + + ENDIF + NEXT Projectile% +ENDPROC + +DEF PROCprojectile_draw + FOR Projectile%=0 TO MaxProjectiles% - 1 + IF ProjectileState%(Projectile%) > 0 THEN + IF Cents% > ProjectileFrameNext%(Projectile%) THEN + ProjectileFrame%(Projectile%) = ProjectileFrame%(Projectile%) + 1 + ProjectileFrameNext%(Projectile%) = Cents% + ProjectileFrameInterval%(Projectile%) + ENDIF + IF ProjectileFrame%(Projectile%) > ProjectileMaxFrame%(Projectile%) THEN + ProjectileFrame%(Projectile%) = 1 + ENDIF + PROCdraw_sprite(ProjectileSprite$(Projectile%) + STR$(ProjectileFrame%(Projectile%)),ProjectileLocations%(Projectile%,0),ProjectileLocations%(Projectile%,1)) + ENDIF + NEXT Projectile% +ENDPROC + +DEF PROCspawn_projectile(Projectile%,Px%,Py%,Vx%,Vy%,Sprite$,Damage%) + IF Projectile% < 0 THEN + FOR P%=0 TO MaxProjectiles% - 1 + IF ProjectileState%(P%) = 0 THEN + Projectile% = P% + ENDIF + NEXT P% + ENDIF + + REM If no free IDs then we go without + IF Projectile% >= 0 THEN + ProjectileLocations%(Projectile%,X) = Px% + (Projectile% * 40) + ProjectileLocations%(Projectile%,Y) = Py% + ProjectileVelocity%(Projectile%,X) = Vx% + ProjectileVelocity%(Projectile%,Y) = Vy% + ProjectileState%(Projectile%) = 1 + ProjectileFrame%(Projectile%) = 1 + ProjectileMaxFrame%(Projectile%) = 2 + ProjectileSprite$(Projectile%) = Sprite$ + ProjectileDamage%(Projectile%) = Damage% + ProjectileFrameInterval%(Projectile%) = 10 + ProjectileFrameNext%(Projectile%) = Cents% + ProjectileFrameInterval%(Projectile%) + ENDIF +ENDPROC + DEF PROCplayer_weapons_damage IF LeftID% < 0 THEN LeftFiring% = 0 @@ -294,7 +376,7 @@ DEF PROCrespawn_enemy(Enemy%) EnemyLocations%(Enemy%,Y) = SCREENGFXHEIGHT% + (RND(SCREENGFXHEIGHT%/2) * (Enemy% + 1)) EnemySprites$(Enemy%) = "durno_ship" EnemyVelocity%(Enemy%,X) = 0 - EnemyVelocity%(Enemy%,Y) = RND(3) + 2 + EnemyVelocity%(Enemy%,Y) = RND(3) EnemyHitboxID%(Enemy%) = RND(2)-1 EnemyHealth%(Enemy%) = 1000 EnemyCollidable%(Enemy%) = 1 @@ -303,7 +385,7 @@ DEF PROCrespawn_enemy(Enemy%) IF EnemyHitboxID%(Enemy%) = 1 THEN EnemySprites$(Enemy%) = "durno_ship2" EnemyVelocity%(Enemy%,X) = RND(3) - 2 - EnemyVelocity%(Enemy%,Y) = RND(2) + 6 + EnemyVelocity%(Enemy%,Y) = RND(2) + 3 EnemyHealth%(Enemy%) = 30 EnemyCollideForce%(Enemy%) = 30 ENDIF @@ -533,6 +615,10 @@ DEF PROCinputs LeftFiring% = 1 RightFiring% = 1 ENDIF + IF INKEY(-34) THEN + PROCspawn_projectile(-1,SCREENGFXWIDTH%/2,SCREENGFXHEIGHT%/2,1,1,"photon",50) + ENDIF + IF INKEY(-17) THEN IF DebugOut% = 0 THEN DebugOut% = 1 ENDIF @@ -581,6 +667,9 @@ DEF PROCdebugoutput PRINT "H: " + FNpad(STR$(EnemyHealth%(Enemy%)),3) NEXT Enemy% + FOR P%=0 TO MaxProjectiles% - 1 + PRINT "P:" STR$(P%) + ": " + FNpad(STR$(ProjectileLocations%(P%,X)),4) + "," + FNpad(STR$(ProjectileLocations%(P%,Y)),4) + " V: " + FNpad(STR$(ProjectileVelocity%(P%,X)),2) + "," + FNpad(STR$(ProjectileVelocity%(P%,Y)),2) + STR$(ProjectileState%(P%)) + NEXT P% FOR Enemy%=0 TO MaxEnemies% - 1 RECT EnemyLocations%(Enemy%,X) + EnemyHitbox%(EnemyHitboxID%(Enemy%),X), EnemyLocations%(Enemy%,1) + EnemyHitbox%(EnemyHitboxID%(Enemy%),1), EnemyHitbox%(EnemyHitboxID%(Enemy%),2), EnemyHitbox%(EnemyHitboxID%(Enemy%),3) diff --git a/!TheEscape/Spr,ff9 b/!TheEscape/Spr,ff9 index 5abcbaf02b00f4692bb8b0aa5be8b47112693d79..26f41058bbbabcb05c2dd0dacaa92358e0add9d4 100644 GIT binary patch delta 561 zcmaJ-Ar8V&3@r@91fZs{1cL$dHHRPzH$aeWBzSOW_%|RpFjJ6l4ipx_Ek)n~+ubI=tZS(M&KE|y%o~=03hJ{*2~JFfMaqw-kGc!z0xdvAb!yFi!e$!sgtr3 af-PX;aJmq>eqk;s9|XamN+3-dFy{qbYWdax delta 21 bcmaE|oq5e_W-cBE1_l8j-f(pz*P^QcND~Iu diff --git a/README.md b/README.md index 5fd0779..32ddccc 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,12 @@ Up Arrow: Increase velocity Right Arrow: Decrease velocity +Space Bar: Fire phasers + Q: Display debug info +W: Projectile debug + Disclaimers: