gigatron/rom/Apps/Sprite/Sprite.gcl
2025-01-28 19:17:01 +03:00

97 lines
3.0 KiB
Plaintext

{-----------------------------------------------------------------------+
| |
| Demonstration of accelerated sprite rendering |
| |
+-----------------------------------------------------------------------}
gcl0x {GCL version for this program}
{-----------------------------------------------------------------------+
| RAM page 2 |
+-----------------------------------------------------------------------}
$800 p= {Top of screen}
\romType, \romTypeValue_ROMv3- {Test for ROMv3}
[if<0 [do p. 1+ loop]] {Halt and blink pixel on older ROM}
[def
{. . . . . .|. . . . . .
. . . . O O|O O O . . .
. . O O O O|O O O O O .
. O O O O .|O O O O . O
. O O O . @|@ O O . @ @
. O O O . @|@ O O . @ @
. O O O O .|O O O O . O
. O O O O O|O O O O O O
. O O O O O|O O O O O O
. O O . . O|O . O O . O
. O . . O O|. . O . . O
. . . . . .|. . . . . .}
0# 0# 0# 0# 0# 0# {Left side}
0# 0# 0# 0# 3# 3#
0# 0# 3# 3# 3# 3#
0# 3# 3# 3# 3# 63#
0# 3# 3# 3# 63# 48#
0# 3# 3# 3# 63# 48#
0# 3# 3# 3# 3# 63#
0# 3# 3# 3# 3# 3#
0# 3# 3# 3# 3# 3#
0# 3# 3# 0# 0# 3#
0# 3# 0# 0# 3# 3#
0# 0# 0# 0# 0# 0# 244#
0# 0# 0# 0# 0# 0# {Right side}
3# 3# 3# 0# 0# 0#
3# 3# 3# 3# 3# 0#
3# 3# 3# 3# 63# 3#
48# 3# 3# 63# 48# 48#
48# 3# 3# 63# 48# 48#
3# 3# 3# 3# 63# 3#
3# 3# 3# 3# 3# 3#
3# 3# 3# 3# 3# 3#
3# 0# 3# 3# 0# 3#
0# 0# 3# 0# 0# 3#
0# 0# 0# 0# 0# 0# 244#
] Image=
[def
\SYS_Sprite6_v3_64 \sysFn: {Normal sprite drawing}
0 o= {Origin correction}
1 u= {Direction}
ret
] FaceRight=
[def
\SYS_Sprite6x_v3_64 \sysFn: {X-flipped sprite drawing}
6 o= {Origin correction}
-1 u= {Direction}
ret
] FaceLeft=
{-----------------------------------------------------------------------+
|}\vLR>++ ret{ RAM page 3 |
+-----------------------------------------------------------------------}
$0300:
FaceRight! {Moving right}
256 v= {And moving down}
[do
[do \videoY, 179^ if<>0loop] {Wait for start of vertical blank}
Image \sysArgs0: p o+ {Setup SYS call}
64!! {Draw first half}
64!! {Draw second half}
p u+ v+ p= {Update position}
255& 148^ [if=0 FaceLeft!] {Reached right border}
p<, [if=0 FaceRight!] {Reached left border}
p>, 116^ [if=0 v- v=] {Reached bottom border}
p>, 8^ [if=0 v- v=] {Reached top border}
loop]