From 597a5ad5eaa6afb5ac15cf06a0f4d21b1a386a40 Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Fri, 5 Feb 2021 21:20:00 +0000 Subject: [PATCH] Enemies now re-spawn with new attributes. Clearer debug. Collisions record damage to NPC and player. --- !TheEscape/!RunImage,ffb | Bin 12847 -> 13751 bytes !TheEscape/!RunImage,ffb.bas | 77 +++++++++++++++++++++++------------ 2 files changed, 52 insertions(+), 25 deletions(-) diff --git a/!TheEscape/!RunImage,ffb b/!TheEscape/!RunImage,ffb index 962c50dce625d0343dbb13b924891779e2cc6c3d..1d1e9ac60a3540bef9618018a8dc60731ca342f9 100644 GIT binary patch literal 13751 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 diff --git a/!TheEscape/!RunImage,ffb.bas b/!TheEscape/!RunImage,ffb.bas index 5457eff..5447faf 100644 --- a/!TheEscape/!RunImage,ffb.bas +++ b/!TheEscape/!RunImage,ffb.bas @@ -1,11 +1,15 @@ SCREENMODE%=32 SCREENGFXWIDTH%=1600 SCREENGFXHEIGHT%=1200 +MaxEnemies% = 10 +PlayerYHeightDivide%=8 IF INKEY(-42) THEN SCREENMODE%=28 SCREENGFXWIDTH%=1280 SCREENGFXHEIGHT%=960 + MaxEnemies% = 5 + PlayerYHeightDivide%=6 ENDIF X = 0 @@ -20,7 +24,7 @@ DEF PROC_main DIM PlayerLocation%(1) PlayerLocation%(X) = SCREENGFXWIDTH%/2 - PlayerLocation%(Y) = SCREENGFXHEIGHT%/30 + PlayerLocation%(Y) = SCREENGFXHEIGHT%/PlayerYHeightDivide% PlayerVelocity%=0 PlayerShields%=100 PlayerStructuralIntegrity%=100 @@ -50,26 +54,17 @@ DEF PROC_main XMovePerCent%=5 ResetShipSprite% = 0 - MaxEnemies% = 10 DIM EnemyLocations%(MaxEnemies% - 1,1) DIM EnemySprites$(MaxEnemies% - 1) DIM EnemyHitboxID%(MaxEnemies% - 1) DIM EnemyVelocity%(MaxEnemies% - 1,1) + DIM EnemyHealth%(MaxEnemies% - 1) + DIM EnemyCollidable%(MaxEnemies% -1) + DIM EnemyCollideForce%(MaxEnemies% -1) REM Random it up for now FOR Enemy%=0 TO MaxEnemies% - 1 - EnemyLocations%(Enemy%,X) = RND(SCREENGFXWIDTH%) - EnemyLocations%(Enemy%,Y) = SCREENGFXHEIGHT% + (RND(SCREENGFXHEIGHT%/2) * (Enemy% + 1)) - EnemySprites$(Enemy%) = "durno_ship" - EnemyVelocity%(Enemy%,X) = 0 - EnemyVelocity%(Enemy%,Y) = RND(3) + 2 - EnemyHitboxID%(Enemy%) = RND(2)-1 - IF EnemyHitboxID%(Enemy%) = 1 THEN - EnemySprites$(Enemy%) = "durno_ship2" - EnemyVelocity%(Enemy%,X) = RND(3) - 2 - EnemyVelocity%(Enemy%,Y) = RND(10) + 6 - ENDIF - + PROCrespawn_enemy(Enemy%) NEXT Enemy% REM Show/hide debug display @@ -103,8 +98,9 @@ DEF PROC_main REM NPCs PROCenemy_ship_move PROCenemy_ship_collide_player - PROCenemy_ship_collide_npc + REM PROCenemy_ship_collide_npc PROCplayer_arc_calculatetarget + PROCenemy_ship_handle_damage REM Still not sure about this bollocks, but it does seem to work now SYS "OS_Byte",19 @@ -136,6 +132,28 @@ DEF PROC_main ENDPROC +DEF PROCenemy_ship_handle_damage +ENDPROC + +DEF PROCrespawn_enemy(Enemy%) + EnemyLocations%(Enemy%,X) = RND(SCREENGFXWIDTH%) + EnemyLocations%(Enemy%,Y) = SCREENGFXHEIGHT% + (RND(SCREENGFXHEIGHT%/2) * (Enemy% + 1)) + EnemySprites$(Enemy%) = "durno_ship" + EnemyVelocity%(Enemy%,X) = 0 + EnemyVelocity%(Enemy%,Y) = RND(3) + 2 + EnemyHitboxID%(Enemy%) = RND(2)-1 + EnemyHealth%(Enemy%) = 100 + EnemyCollidable%(Enemy%) = 1 + EnemyCollideForce%(Enemy%) = 1000 + IF EnemyHitboxID%(Enemy%) = 1 THEN + EnemySprites$(Enemy%) = "durno_ship2" + EnemyVelocity%(Enemy%,X) = RND(3) - 2 + EnemyVelocity%(Enemy%,Y) = RND(10) + 6 + EnemyHealth%(Enemy%) = 30 + EnemyCollideForce%(Enemy%) = 30 + ENDIF +ENDPROC + DEF PROCspecks_draw REM Specks / stars FOR Speck%=0 TO 49 @@ -157,8 +175,7 @@ DEF PROCenemy_ship_move EnemyLocations%(Enemy%,X) = EnemyLocations%(Enemy%,X) - ((Cents% - LastCents%) * EnemyVelocity%(Enemy%,X)) IF EnemyLocations%(Enemy%,Y) <= 0 THEN - EnemyLocations%(Enemy%,Y) = SCREENGFXHEIGHT% + RND(SCREENGFXHEIGHT%) - EnemyLocations%(Enemy%,X) = RND(SCREENGFXWIDTH%) + PROCrespawn_enemy(Enemy%) ENDIF NEXT Enemy% ENDPROC @@ -214,7 +231,7 @@ DEF PROCenemy_ship_collide_npc NEXT Enemy% ENDPROC -REM Handle enemy collisions with anything +REM Handle enemy collisions with player DEF PROCenemy_ship_collide_player FOR Enemy%=0 TO MaxEnemies% - 1 @@ -231,11 +248,14 @@ DEF PROCenemy_ship_collide_player h2 = PlayerHitbox%(3) IF FNcollide(x1, y1, w1, h1, x2, y2, w2, h2) = 1 THEN MOVE x1+w1,y1+h1 - PlayerVelocity% = 0 - PRINT "BOOM" - REM IF DebugOut% = 1 THEN - REM PRINT " hits player" - REM ENDIF + IF EnemyCollidable%(Enemy%) = 1 THEN + PlayerVelocity% = PlayerVelocity% / 2 + EnemyHealth%(Enemy%) = EnemyHealth%(Enemy%) - 30 + PlayerStructuralIntegrity% = PlayerStructuralIntegrity% - EnemyCollideForce%(Enemy%) + EnemyCollidable%(Enemy%) = 0 + EnemyVelocity%(Enemy%,X) = 0 + EnemyVelocity%(Enemy%,Y) = 0 + ENDIF ENDIF NEXT Enemy% ENDPROC @@ -273,7 +293,7 @@ ENDPROC REM Calculate player ship's phaser arc DEF PROCplayer_arc_calculatetarget - NoseX% = PlayerLocation%(x) + PlayerHitbox%(0) + (PlayerHitbox%(2)/2) + NoseX% = PlayerLocation%(X) + PlayerHitbox%(0) + (PlayerHitbox%(2)/2) NoseXLeft% = PlayerLocation%(X) + PlayerHitbox%(0) NoseXRight% = PlayerLocation%(X) + PlayerHitbox%(0) + PlayerHitbox%(2) NoseY% = (PlayerLocation%(Y) + PlayerHitbox%(1) + PlayerHitbox%(3)) @@ -358,6 +378,13 @@ DEF PROCplayer_target_draw ENDIF ENDPROC +DEF FNpad(String$,Length%) + OutString$=String$ + WHILE LEN(OutString$) < Length% + OutString$ = OutString$ + " " + ENDWHILE +=OutString$ + REM Debug prints DEF PROCdebugoutput MOVE 0,500 @@ -368,7 +395,7 @@ DEF PROCdebugoutput PRINT "Right: " + STR$(RightID%) FOR Enemy%=0 TO MaxEnemies% - 1 - PRINT "ENEMY:" STR$(Enemy%) + " " + STR$(EnemyLocations%(Enemy%,X)) + "," + STR$(EnemyLocations%(Enemy%,Y)) + " " + STR$(EnemyVelocity%(Enemy%,X)) + " " + STR$(EnemyVelocity%(Enemy%,Y)) + PRINT "NPC:" STR$(Enemy%) + " " + FNpad(STR$(EnemyLocations%(Enemy%,X)),4) + " " + FNpad(STR$(EnemyLocations%(Enemy%,Y)),4) + " " + FNpad(STR$(EnemyVelocity%(Enemy%,X)),3) + " " + FNpad(STR$(EnemyVelocity%(Enemy%,Y)),3) + " " + FNpad(STR$(EnemyHealth%(Enemy%)),3) NEXT Enemy%