examples/animate: tweak rocket movement, add audio

- fix duplicate symbol in sprites.s/pcmaudio.s
This commit is contained in:
slederer 2026-03-08 23:34:27 +01:00
parent 82749f2b7d
commit 819c808c50
2 changed files with 51 additions and 17 deletions

View file

@ -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.

View file

@ -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