;TRACK3.ACT ;Rudimentary PM cursor positioning ;using Track-Ball peripheral ;PM routines added ;Single line rez. ;9/87 BYTE ARRAY player_base BYTE ARRAY shposp(4) ;pm horiz shadow array. CHAR ARRAY imagep=[ $F0 $90 $90 $90 $90 $90 $90 $F0 $00 $18 $18 $7E $7E $18 $18 $00 ] ;************************************ ;Move specified player to the ;ABSOLUTE x location (0 to ?). PROC MovePlayerHor(BYTE pl_num BYTE pl_x) BYTE ARRAY hposp=53248 shposp(pl_num)=48+pl_x hposp(pl_num)=shposp(pl_num) RETURN ;************************************ MODULE BYTE ARRAY old_pl_y(4)=[0 0 0 0] ;Move specified player to the ;ABSOLUTE y location. (from 0 to ?.) PROC MovePlayerVer(CARD pl_num BYTE pl_y) BYTE playery CARD pl_offset pl_offset=player_base+$400+pl_num LSH 7 Zero(pl_offset+old_pl_y(pl_num),8) playery=15+pl_y MoveBlock(pl_offset+playery, imagep+pl_num LSH 3,8) old_pl_y(pl_num)=playery RETURN ;************************************ ;Move player to absolute x,y ;x=0 to ?, y=0 to ? PROC MovePlayer(BYTE pl_num,pl_x,pl_y) MovePlayerHor(pl_num,pl_x) MovePlayerVer(pl_num,pl_y) RETURN ;************************************ PROC PlayerCursor() BYTE pmbase=54279,gractl=53277, gprior=623 BYTE ARRAY pl_color=704, PMWidth(5)=$D008 BYTE ramtop=106,sdmactl=$22F ramtop=$A0-8 ;presumes 40K of memory Graphics(0) player_base=(ramtop)*256 pmbase=player_base/256 sdmactl=32+8+2+16 ;no missles... gractl=2 ;again no missles. Zero(player_base,$800) pl_color(0)=110 ;pl_color(1)=70 gprior=1 MovePlayer(0,0,0) ;MovePlayer(1,4,10) RETURN ;************************************ PROC ClearPM() BYTE ramtop=106,sdmactl=$22F BYTE cursor=752 BYTE pmbase=54279,gractl=53277, gprior=623 cursor=0 gractl=0 sdmactl=32+2 ;Zero(hposp,4) ramtop=$A0 Graphics(0) RETURN ;************************************ PROC Main() BYTE cursor=752,consol=53279, left_margin=82 BYTE lastx,lasty,vx,vy,st INT x,y,oldx=[0],oldy=[0] PlayerCursor() cursor=1 left_margin=0 SetColor(2,9,0) PutE() PrintE("This is a line of normal text.") PutE() PrintE("This is a line of inverse text.") X=0 Y=0 lastx=0 lasty=0 WHILE consol&$01 DO st=stick(0) vx=st&$02 vy=st&$08 IF lastx<>vx THEN IF st&$01 THEN x==+1 ELSE x==-1 FI FI IF lasty<>vy THEN IF st&$04 THEN y==+1 ELSE y==-1 FI FI lastx=vx lasty=vy IF x>157 THEN x=157 FI IF y>201 THEN y=201 FI IF x<0 THEN x=0 FI IF y<17 THEN y=17 FI IF oldx<>x OR oldy<>y THEN MovePlayer(0,X,Y) FI IF STRIG(0) THEN ELSE Position(0,10) PrintF("X=%I %EY=%I %E",X,Y) FI oldx=x oldy=y OD ClearPM() Graphics(0) left_margin=2 cursor=0 RETURN