From 880cbba93abfdb11826ddb0bad253053d5aa1fb2 Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Sun, 14 Feb 2021 19:19:47 +0000 Subject: [PATCH] Enemy photons - WEIRD physics --- !TheEscape/!RunImage,ffb | Bin 22754 -> 24401 bytes !TheEscape/!RunImage,ffb.bas | 72 +++++++++++++++++++++++++++++------ 2 files changed, 61 insertions(+), 11 deletions(-) diff --git a/!TheEscape/!RunImage,ffb b/!TheEscape/!RunImage,ffb index 3e87664aa73fc0f94ed07e92f986b6c0daa9f8ec..7c7eaa0c437b5564bff88c97dc6f3e1d19d4006f 100644 GIT binary patch delta 8465 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 delta 7369 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 SCREENGFXWIDTH% THEN ProjectileState%(Projectile%) = 0 ENDIF + IF ProjectileLocations%(Projectile%,0) < 0 THEN + ProjectileState%(Projectile%) = 0 + ENDIF + IF ProjectileLocations%(Projectile%,1) > (SCREENGFXHEIGHT% * 2) THEN + ProjectileState%(Projectile%) = 0 + ENDIF IF ProjectileLocations%(Projectile%,1) < 0 THEN ProjectileState%(Projectile%) = 0 ENDIF @@ -271,15 +279,14 @@ DEF PROCspawn_projectile(Projectile%,Px%,Py%,Vx%,Vy%,Sprite$,Damage%) ENDIF REM If no velocity X specified we're targetting the player - REM This actually has some inaccuracy in due to integers, so no need - REM to try and do that.. It's a feature! - IF Vx = 0 THEN - Velocity% = Vy% + REM TODO: This is baaaaadly broken. Suspect something floating point.. + IF Vx% = 0 THEN + Velocity% = 10 Xdistance% = PlayerLocation%(X) - Px% Ydistance% = Py% - PlayerLocation%(Y) distance% = SQR((Xdistance%^2) + (Ydistance%^2)) - Vx% = Xdistance% / (distance% / 10 * Velocity%) - Vy% = Ydistance% / (distance% / 10 * Velocity%) + Vx% = Xdistance% / (distance% / Velocity%) + Vy% = Ydistance% / (distance% / Velocity%) ENDIF REM If no free IDs then we go without @@ -296,6 +303,7 @@ DEF PROCspawn_projectile(Projectile%,Px%,Py%,Vx%,Vy%,Sprite$,Damage%) ProjectileFrameInterval%(Projectile%) = 10 ProjectileFrameNext%(Projectile%) = Cents% + ProjectileFrameInterval%(Projectile%) ENDIF + ENDPROC DEF PROCplayer_weapons_damage @@ -363,6 +371,7 @@ DEF PROCenemy_ship_handle_damage FOR Enemy%=0 TO MaxEnemies% - 1 REM Destruction IF EnemyHealth%(Enemy%) <= 0 THEN + EnemyNextFire%(Enemy%) = 0 EnemyCollidable%(Enemy%) = 0 IF EnemySprites$(Enemy%) = "durno_ship2" THEN SOUND 2,-5,0,50 @@ -388,18 +397,22 @@ 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) + EnemyVelocity%(Enemy%,Y) = RND(3) + 2 EnemyHitboxID%(Enemy%) = RND(2)-1 EnemyHealth%(Enemy%) = 1000 EnemyCollidable%(Enemy%) = 1 EnemyCollideForce%(Enemy%) = 1000 - EnemyExplodeNextFrame% = 0 + EnemyExplodeNextFrame%(Enemy%) = 0 + EnemyNextFire%(Enemy%) = Cents% + EnemyFireInterval%(Enemy%) = 100 + IF EnemyHitboxID%(Enemy%) = 1 THEN EnemySprites$(Enemy%) = "durno_ship2" EnemyVelocity%(Enemy%,X) = RND(3) - 2 - EnemyVelocity%(Enemy%,Y) = RND(2) + 3 + EnemyVelocity%(Enemy%,Y) = RND(2) + 6 EnemyHealth%(Enemy%) = 30 EnemyCollideForce%(Enemy%) = 30 + EnemyNextFire%(Enemy%) = 0 ENDIF ENDPROC @@ -429,9 +442,21 @@ DEF PROCenemy_ship_move EnemyLocations%(Enemy%,X) = EnemyLocations%(Enemy%,X) - ((Cents% - LastCents%) * EnemyVelocity%(Enemy%,X)) + IF EnemyLocations%(Enemy%,Y) < SCREENGFXHEIGHT%/2 THEN + EnemyNextFire%(Enemy%) = 0 + ENDIF + + IF EnemyNextFire%(Enemy%) > 0 THEN + IF EnemyNextFire%(Enemy%) < Cents% THEN + PROCspawn_projectile(-1,EnemyLocations%(Enemy%,X),EnemyLocations%(Enemy%,Y),0,EnemyVelocity%(Enemy%,Y),"photon",10) + EnemyNextFire%(Enemy%) = Cents% + EnemyFireInterval%(Enemy%) + ENDIF + ENDIF + IF EnemyLocations%(Enemy%,Y) <= 0 THEN PROCrespawn_enemy(Enemy%) ENDIF + NEXT Enemy% ENDPROC @@ -520,6 +545,31 @@ DEF PROCenemy_ship_collide_player NEXT Enemy% ENDPROC +REM Handle enemy collisions with player +DEF PROCprojectile_collide_player + FOR P%=0 TO MaxProjectiles% - 1 + + REM This is our hitbox + x1 = ProjectileLocations%(P%,X) + y1 = ProjectileLocations%(P%,Y) + w1 = 10 + h1 = 10 + + REM Collision with a player + x2 = PlayerLocation%(X) + PlayerHitbox%(0) + y2 = PlayerLocation%(Y) + PlayerHitbox%(1) + w2 = PlayerHitbox%(2) + h2 = PlayerHitbox%(3) + IF FNcollide(x1, y1, w1, h1, x2, y2, w2, h2) = 1 THEN + MOVE x1+w1,y1+h1 + PlayerVelocity% = PlayerVelocity% * 0.75 + PlayerStructuralIntegrity% = PlayerStructuralIntegrity% - ProjectileDamage%(P%) + ProjectileState%(P%) = 0 + ProjectileLocations%(P%,0) = 0 + ENDIF + NEXT P% +ENDPROC + DEF FNcollide(x1,y1,w1,h1,x2,y2,w2,h2) collide% = 0 IF (x1 + w1) >= x2 THEN