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; program animate;
uses sprites; uses sprites,pcmaudio;
type PictData = record type PictData = record
magic,mode:integer; magic,mode:integer;
@ -29,8 +29,33 @@ var pic:PictData;
rocket2:Sprite; rocket2:Sprite;
rocket3:Sprite; rocket3:Sprite;
buf:SndBufPtr;
procedure WaitVSync; external; 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); procedure loadPalette(var pic:PictData);
var i:integer; var i:integer;
begin begin
@ -87,10 +112,13 @@ begin
if aSprite.x > 608 then aSprite.x := 0; if aSprite.x > 608 then aSprite.x := 0;
if aSprite.y < 0 then if aSprite.ydelta <> 0 then
begin begin
aSprite.y := 200; if aSprite.y < 3 then
aSprite.x := 0; aSprite.ydelta := -aSprite.ydelta
else
if aSprite.y > 130 then
aSprite.ydelta := -aSprite.yDelta;
end; end;
end; end;
@ -106,7 +134,7 @@ var i:integer;
r3oldX,r3oldY:integer; r3oldX,r3oldY:integer;
begin begin
stickMan.x := 0; stickMan.x := 0;
stickMan.y := 322; stickMan.y := 205;
stickMan.frameTime := 6; stickMan.frameTime := 6;
stickMan.frameLeft := stickMan.frameTime; stickMan.frameLeft := stickMan.frameTime;
stickMan.curFrame := 0; stickMan.curFrame := 0;
@ -116,30 +144,30 @@ begin
stickman.moveLeft := stickMan.moveTime; stickman.moveLeft := stickMan.moveTime;
rocket.x := 0; rocket.x := 0;
rocket.y := 200; rocket.y := 50;
rocket.frameTime := 5; rocket.frameTime := 5;
rocket.frameLeft := rocket.frameTime; rocket.frameLeft := rocket.frameTime;
rocket.curFrame := 0; rocket.curFrame := 0;
rocket.xdelta := 3; rocket.xdelta := 3;
rocket.ydelta := -1; rocket.ydelta := 1;
rocket.moveTime := 1; rocket.moveTime := 1;
rocket.moveLeft := rocket.moveTime; rocket.moveLeft := rocket.moveTime;
rocket2.x := 50; rocket2.x := 50;
rocket2.y := 100; rocket2.y := 190;
rocket2.frameTime := 5; rocket2.frameTime := 5;
rocket2.frameLeft := rocket2.frameTime; rocket2.frameLeft := rocket2.frameTime;
rocket2.curFrame := 0; rocket2.curFrame := 1;
rocket2.xdelta := 3; rocket2.xdelta := 3;
rocket2.ydelta := -1; rocket2.ydelta := 0;
rocket2.moveTime := 1; rocket2.moveTime := 1;
rocket2.moveLeft := rocket2.moveTime; rocket2.moveLeft := rocket2.moveTime;
rocket3.x :=100; rocket3.x :=100;
rocket3.y := 50; rocket3.y := 90;
rocket3.frameTime := 5; rocket3.frameTime := 5;
rocket3.frameLeft := rocket3.frameTime; rocket3.frameLeft := rocket3.frameTime;
rocket3.curFrame := 0; rocket3.curFrame := 2;
rocket3.xdelta := 3; rocket3.xdelta := 3;
rocket3.ydelta := -1; rocket3.ydelta := -1;
rocket3.moveTime := 1; rocket3.moveTime := 1;
@ -204,8 +232,14 @@ begin
loadSpriteFrame(rocket, 3, infile, 3); loadSpriteFrame(rocket, 3, infile, 3);
close(infile); close(infile);
rocket2 := rocket; rocket2.curFrame := 1; rocket2 := rocket;
rocket3 := rocket; rocket3.curFrame := 2; rocket3 := rocket;
buf := readAudioFile('footsteps.tdrau');
SampleQStart(buf, true, 16000);
animLoop; animLoop;
SampleQStop;
dispose(buf);
end. end.

View file

@ -53,9 +53,9 @@ CALC_VMEM_ADDR:
.EQU PS_SPILL 24 .EQU PS_SPILL 24
.EQU PS_STRIPE_C 28 .EQU PS_STRIPE_C 28
.EQU PS_BPSAVE 32 .EQU PS_BPSAVE 32
.EQU PS_FS 36 .EQU PS_FS_ 36
PUTSPRITE: PUTSPRITE:
FPADJ -PS_FS FPADJ -PS_FS_
STORE PS_SPRITE_DATA STORE PS_SPRITE_DATA
STORE PS_Y STORE PS_Y
STORE PS_X STORE PS_X
@ -175,7 +175,7 @@ PS_L_XT:
LOAD PS_BPSAVE LOAD PS_BPSAVE
STOREREG BP STOREREG BP
FPADJ PS_FS FPADJ PS_FS_
RET RET
; undraw a sprite, i.e. draw background data ; undraw a sprite, i.e. draw background data