1 // Fountain test script
4 #pragma stateVertex(orthoWindow)
5 #pragma stateRaster(flat)
6 #pragma stateFragment(PgmFragBackground)
7 #pragma stateStore(MyBlend)
10 int main(void* con, int ft, int launchID) {
11 int count, touch, x, y, rate, maxLife, lifeShift;
22 count = loadI32(con, 0, 1);
23 touch = loadI32(con, 0, 2);
24 x = loadI32(con, 0, 3);
25 y = loadI32(con, 0, 4);
28 maxLife = (count / rate) - 1;
38 drawRect(con, 0, 256, 0, 512);
39 contextBindProgramFragment(con, NAMED_PgmFragParts);
42 newPart = loadI32(con, 2, 0);
43 for (ct2=0; ct2<rate; ct2++) {
44 dx = scriptRand(con, 0x10000) - 0x8000;
45 dy = scriptRand(con, 0x10000) - 0x8000;
47 idx = newPart * 5 + 1;
48 storeI32(con, 2, idx, dx);
49 storeI32(con, 2, idx + 1, dy);
50 storeI32(con, 2, idx + 2, maxLife);
51 storeI32(con, 2, idx + 3, x << 16);
52 storeI32(con, 2, idx + 4, y << 16);
55 if (newPart >= count) {
59 storeI32(con, 2, 0, newPart);
63 for (ct=0; ct < count; ct++) {
66 dx = loadI32(con, 2, srcIdx);
67 dy = loadI32(con, 2, srcIdx + 1);
68 life = loadI32(con, 2, srcIdx + 2);
69 posx = loadI32(con, 2, srcIdx + 3);
70 posy = loadI32(con, 2, srcIdx + 4);
73 if (posy < (480 << 16)) {
74 dstIdx = drawCount * 9;
75 c = 0xffafcf | ((life >> lifeShift) << 24);
77 storeU32(con, 1, dstIdx, c);
78 storeI32(con, 1, dstIdx + 1, posx);
79 storeI32(con, 1, dstIdx + 2, posy);
81 storeU32(con, 1, dstIdx + 3, c);
82 storeI32(con, 1, dstIdx + 4, posx + 0x10000);
83 storeI32(con, 1, dstIdx + 5, posy + dy * 4);
85 storeU32(con, 1, dstIdx + 6, c);
86 storeI32(con, 1, dstIdx + 7, posx - 0x10000);
87 storeI32(con, 1, dstIdx + 8, posy + dy * 4);
100 //storeI32(con, 2, srcIdx, dx);
101 storeI32(con, 2, srcIdx + 1, dy);
102 storeI32(con, 2, srcIdx + 2, life);
103 storeI32(con, 2, srcIdx + 3, posx);
104 storeI32(con, 2, srcIdx + 4, posy);
108 drawTriangleArray(con, NAMED_PartBuffer, drawCount);