diff --git a/!TheEscape/!RunImage,ffb b/!TheEscape/!RunImage,ffb index 8a15151..8afed5f 100644 Binary files a/!TheEscape/!RunImage,ffb and b/!TheEscape/!RunImage,ffb differ diff --git a/!TheEscape/!RunImage,ffb.bas b/!TheEscape/!RunImage,ffb.bas index 6699e3b..23b79c6 100644 --- a/!TheEscape/!RunImage,ffb.bas +++ b/!TheEscape/!RunImage,ffb.bas @@ -4,22 +4,23 @@ END DEF PROC_main REM Current graphics buffer - DIM SCR 0 + DIM Scr% 0 - REM Player location - LOCATIONX=0 - LOCATIONY=0 + DIM PlayerLocation%(1) + PlayerLocation%(0) = 800 + PlayerLocation%(1) = 100 + PlayerVelocity%=0 + PlayerShields%=100 + PlayerStructuralIntegrity%=100 + XMovePerCent%=5 - REM Player ship attributes - VELOCITY=0 - SHIELDS=100 - STRUCTURALINTEGRITY=100 - XPERCENT=5 + REM Show/hide debug display + DebugOut%=0 REM Used for centiseconds per frame calcs - CENTS = TIME + Cents% = TIME - REM 800x600 GFX Area 1600x1200 + REM 800x600x256 GFX Area 1600x1200 MODE 32 REM Sprite set @@ -27,69 +28,100 @@ DEF PROC_main REPEAT REM Store current time and last time - LASTCENTS = CENTS - CENTS = TIME + LastCents% = Cents% + Cents% = TIME - REM Set grpahics buffer - SYS "OS_Byte",112,SCR - - KEY = INKEY(0) - - IF KEY = 100 THEN - LOCATIONX = LOCATIONX + (XPERCENT * (CENTS - LASTCENTS)) - ENDIF - IF KEY = 97 THEN - LOCATIONX = LOCATIONX - (XPERCENT * (CENTS - LASTCENTS)) - ENDIF - - CLS - - SYS "OS_SpriteOp",34+256,sprite_area%,"lcars",0,940,0 + REM Set grpahics buffer to one that's not in use + SYS "OS_Byte",112,Scr% -REM PRINT "X: " + STR$(LOCATIONX) -REM IF KEY <> -1 THEN -REM PRINT "Key: " + STR$(KEY) -REM ELSE -REM PRINT "Key:" -REM ENDIF -REM PRINT "CPF: " + STR$(CENTS - LASTCENTS) + CLS - SYS "OS_SpriteOp",34+256,sprite_area%,"player_ship",LOCATIONX,0,0 + REM Draw LCARS in top left + PROCdraw_sprite("lcars",0,940) - VDU 5 + IF DebugOut% = 1 THEN + PROCdebugoutput + ENDIF - GCOL 0,0 - MOVE 75,1150 - PRINT "Sheilds" - MOVE 75,1120 - PRINT "Integrity" - MOVE 75,1090 - PRINT "Velocity" + REM Handle Key inputs + PROCinputs - GCOL 0,7 - MOVE 130,1150 - PRINT SHIELDS - MOVE 130,1120 - PRINT STRUCTURALINTEGRITY - MOVE 130,1090 - PRINT VELOCITY + REM Use graphics cursor for text (TODO: Is this needed in loop?_) + VDU 5 - WAIT + GCOL 0,0 + MOVE 75,1150 + PRINT "Sheilds" + MOVE 75,1120 + PRINT "Integrity" + MOVE 75,1090 + PRINT "Velocity" - SYS "OS_Byte",113,SCR + GCOL 0,7 + MOVE 130,1150 + PRINT PlayerShields% + MOVE 130,1120 + PRINT PlayerStructuralIntegrity% + MOVE 130,1090 + PRINT PlayerVelocity% - IF SCR=0 THEN SCR=1 ELSE SCR=0 + REM Draw player ship + PROCdraw_sprite("player_ship",PlayerLocation%(0),PlayerLocation%(1)) + + REM Wait for rendering to complete + WAIT + + REM Display edited buffer + SYS "OS_Byte",113,Scr% + + REM Switch draw buffer + IF Scr%=0 THEN Scr%=1 ELSE Scr%=0 UNTIL FALSE ENDPROC +REM Input handling +DEF PROCinputs + REM TODO: Scan individual keys so we can handle specials (e.g. arrows) + KEY = INKEY(0) + + IF KEY = 100 THEN + PlayerLocation%(0) = PlayerLocation%(0) + (XMovePerCent% * (Cents% - LastCents%)) + ENDIF + IF KEY = 97 THEN + PlayerLocation%(0) = PlayerLocation%(0) - (XMovePerCent% * (Cents% - LastCents%)) + ENDIF + IF KEY = 113 THEN + IF DebugOut% = 1 THEN DebugOut% = 0 ELSE DebugOut% = 1 + ENDIF +ENDPROC + +REM Debug prints +DEF PROCdebugoutput + MOVE 0,500 + PRINT "X: " + STR$(PlayerLocation%(0)) " Y: " STR$(PlayerLocation%(1)) + IF KEY <> -1 THEN + PRINT "Key: " + STR$(KEY) + ELSE + PRINT "Key:" + ENDIF + PRINT "CPF: " + STR$(Cents% - LastCents%) +ENDPROC + +REM Delay routine - thanks Sophie DEF PROCdelay(n) T%=TIME+n:REPEAT UNTIL TIME > T% ENDPROC +REM Shorthand for sprite drawing SWI +DEF PROCdraw_sprite(name$,x%,y%) + SYS "OS_SpriteOp",34+256,sprite_area%,name$,x%,y%,0 +ENDPROC + +REM Loads sprite file - stolen off a forum somewhere DEF FNload_sprites(sprite_file$) LOCAL length%, area_ptr% SYS "OS_File",13,sprite_file$ TO ,,,,length% diff --git a/!TheEscape/!Sprites22,ff9 b/!TheEscape/!Sprites22,ff9 index f19c3f5..5c3ce06 100644 Binary files a/!TheEscape/!Sprites22,ff9 and b/!TheEscape/!Sprites22,ff9 differ