From 819c808c50f18dbf4f35dc38e6ab560127d1a396 Mon Sep 17 00:00:00 2001 From: slederer Date: Sun, 8 Mar 2026 23:34:27 +0100 Subject: [PATCH] examples/animate: tweak rocket movement, add audio - fix duplicate symbol in sprites.s/pcmaudio.s --- examples/animate.pas | 62 ++++++++++++++++++++++++++++++++++---------- examples/sprites.s | 6 ++--- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/examples/animate.pas b/examples/animate.pas index f262c46..1ed379e 100644 --- a/examples/animate.pas +++ b/examples/animate.pas @@ -1,5 +1,5 @@ program animate; -uses sprites; +uses sprites,pcmaudio; type PictData = record magic,mode:integer; @@ -29,8 +29,33 @@ var pic:PictData; rocket2:Sprite; rocket3:Sprite; + buf:SndBufPtr; + + procedure WaitVSync; external; +function readAudioFile(fname:string):SndBufPtr; +var i,size:integer; + c:char; + buf:SndBufPtr; + f:file; +begin + open(f, fname, ModeReadOnly); + size := FileSize(f); + new(buf, size); + + buf^ := ''; + write('Reading ', size, ' bytes from ', fname); + for i := 1 to size do + begin + read(f,c); + AppendChar(buf^,c); + end; + writeln; + close(f); + readAudioFile := buf; +end; + procedure loadPalette(var pic:PictData); var i:integer; begin @@ -87,10 +112,13 @@ begin if aSprite.x > 608 then aSprite.x := 0; - if aSprite.y < 0 then + if aSprite.ydelta <> 0 then begin - aSprite.y := 200; - aSprite.x := 0; + if aSprite.y < 3 then + aSprite.ydelta := -aSprite.ydelta + else + if aSprite.y > 130 then + aSprite.ydelta := -aSprite.yDelta; end; end; @@ -106,7 +134,7 @@ var i:integer; r3oldX,r3oldY:integer; begin stickMan.x := 0; - stickMan.y := 322; + stickMan.y := 205; stickMan.frameTime := 6; stickMan.frameLeft := stickMan.frameTime; stickMan.curFrame := 0; @@ -116,30 +144,30 @@ begin stickman.moveLeft := stickMan.moveTime; rocket.x := 0; - rocket.y := 200; + rocket.y := 50; rocket.frameTime := 5; rocket.frameLeft := rocket.frameTime; rocket.curFrame := 0; rocket.xdelta := 3; - rocket.ydelta := -1; + rocket.ydelta := 1; rocket.moveTime := 1; rocket.moveLeft := rocket.moveTime; rocket2.x := 50; - rocket2.y := 100; + rocket2.y := 190; rocket2.frameTime := 5; rocket2.frameLeft := rocket2.frameTime; - rocket2.curFrame := 0; + rocket2.curFrame := 1; rocket2.xdelta := 3; - rocket2.ydelta := -1; + rocket2.ydelta := 0; rocket2.moveTime := 1; rocket2.moveLeft := rocket2.moveTime; rocket3.x :=100; - rocket3.y := 50; + rocket3.y := 90; rocket3.frameTime := 5; rocket3.frameLeft := rocket3.frameTime; - rocket3.curFrame := 0; + rocket3.curFrame := 2; rocket3.xdelta := 3; rocket3.ydelta := -1; rocket3.moveTime := 1; @@ -204,8 +232,14 @@ begin loadSpriteFrame(rocket, 3, infile, 3); close(infile); - rocket2 := rocket; rocket2.curFrame := 1; - rocket3 := rocket; rocket3.curFrame := 2; + rocket2 := rocket; + rocket3 := rocket; + buf := readAudioFile('footsteps.tdrau'); + SampleQStart(buf, true, 16000); + animLoop; + + SampleQStop; + dispose(buf); end. diff --git a/examples/sprites.s b/examples/sprites.s index 5f50081..01e2616 100644 --- a/examples/sprites.s +++ b/examples/sprites.s @@ -53,9 +53,9 @@ CALC_VMEM_ADDR: .EQU PS_SPILL 24 .EQU PS_STRIPE_C 28 .EQU PS_BPSAVE 32 - .EQU PS_FS 36 + .EQU PS_FS_ 36 PUTSPRITE: - FPADJ -PS_FS + FPADJ -PS_FS_ STORE PS_SPRITE_DATA STORE PS_Y STORE PS_X @@ -175,7 +175,7 @@ PS_L_XT: LOAD PS_BPSAVE STOREREG BP - FPADJ PS_FS + FPADJ PS_FS_ RET ; undraw a sprite, i.e. draw background data