1 /* Sample for the putsprite command.
2    We draw some garbage on the screen,
3    then we put a masked arrow.
4    It can be moved using arrows; ENTER exits.
5    Improved version; the mask is drawn AFTER the sprite,
6    so we reduce the flicker, and being the mask just "a border",
7    it is put faster. */
8 
9 #pragma string name Sprite/Mouse test
10 #pragma output nostreams
11 #pragma data icon 0x00,0x60,0x70,0x78,0x7C,0x18,0x0C,0x00;
12 
13 #include <stdio.h>
14 #include <games.h>
15 
16 #if defined __TI82__ || defined __TI83__ || defined __TI8x__
17 #define SCREENX 96
18 #define SCREENY 64
19 #endif
20 
21 #if defined __TI85__ || defined __TI86__
22 #define SCREENX 128
23 #define SCREENY 64
24 #endif
25 
26 char bullet[] =
27 	{ 11,3,
28 		0xE0, 0xE0, /* defb @11100000, @11100000 */
29 		0xBF, 0xA0, /* defb @10111111, @10100000 */
30 		0xE0, 0xE0  /* defb @11100000, @11100000 */
31 	};
32 
33 char arrow[] =
34 	{ 8,8,
35 		0x00, /* defb @00000000 */
36 		0x60, /* defb @01100000 */
37 		0x70, /* defb @01110000 */
38 		0x78, /* defb @01111000 */
39 		0x7C, /* defb @01111100 */
40 		0x18, /* defb @00011000 */
41 		0x0C, /* defb @00001100 */
42 		0x00  /* defb @00000000 */
43 	};
44 
45 char arrow_mask[] =
46 	{ 8,8,
47 		0xE0, /* defb @11100000 */
48 		0x90, /* defb @10010000 */
49 		0x88, /* defb @10001000 */
50 		0x84, /* defb @10000100 */
51 		0x82, /* defb @10000010 */
52 		0xE6, /* defb @11100110 */
53 		0x12, /* defb @00010010 */
54 		0x1E  /* defb @00011110 */
55 	};
56 
57 char arrow_bk[] =
58 	{ 8,8,
59 	  0,0,
60 	  0,0,0,0,0,0,0,0,
61 	  0,0,0,0,0,0,0,0
62 	};
63 
main()64 main()
65 {
66 	int x,y,z;
67 	int flag  = 1;
68 	int speed = 1;
69 	char *ptr;
70 	for (x=10; x<39; x+=3)
71 	{
72 		putsprite(spr_or,2*x   ,x,bullet);
73 		putsprite(spr_or,2*x-10,x,bullet);
74 		putsprite(spr_or,2*x+10,x,bullet);
75 	}
76 
77 	x=40;
78 	y=20;
79 
80 	bksave(x,y,arrow_bk);
81 
82 	while(flag!=2)
83 	{
84 		switch(getk())
85 		{
86 			case 11: /* arrow up */
87 			  y-=speed;
88 			  flag=1;
89 			  break;
90 			case 10: /* arrow down */
91 			  y+=speed;
92 			  flag=1;
93 			  break;
94 			case 9:  /* arrow right */
95 			  x+=speed;
96 			  flag=1;
97 			  break;
98 			case 8:  /* arrow left */
99 			  x-=speed;
100 			  flag=1;
101 			  break;
102 			case 13: /* [Enter] */
103 			  flag=2;
104 			  break;
105 			default: /* reset speed */
106 			  speed=1;
107 			  break;
108 		}
109 		if(x<0) x=0;
110 		if(y<0) y=0;
111 		if(x>(SCREENX-8)) x=(SCREENX-8);
112 		if(y>(SCREENY-8)) y=(SCREENY-8);
113 		if(flag==1)
114 		{
115 			if(speed<3)
116 			speed++;
117 
118 			bkrestore(arrow_bk);
119 			bksave(x,y,arrow_bk);
120 			putsprite(spr_or,x,y,arrow);
121 			putsprite(spr_mask,x,y,arrow_mask);
122 			flag = 0;
123 		}
124 	}
125 }
126