1462d11b880cba72584c135397c0a82618ab63217Jason Sams// Fountain test script
2462d11b880cba72584c135397c0a82618ab63217Jason Sams
3462d11b880cba72584c135397c0a82618ab63217Jason Sams#pragma version(1)
4462d11b880cba72584c135397c0a82618ab63217Jason Sams#pragma stateVertex(orthoWindow)
5462d11b880cba72584c135397c0a82618ab63217Jason Sams#pragma stateRaster(flat)
6462d11b880cba72584c135397c0a82618ab63217Jason Sams#pragma stateFragment(PgmFragBackground)
75235cf3f41cfcfe39c7072fddf1ead52db31292dJason Sams#pragma stateStore(MyBlend)
8462d11b880cba72584c135397c0a82618ab63217Jason Sams
9462d11b880cba72584c135397c0a82618ab63217Jason Sams
10462d11b880cba72584c135397c0a82618ab63217Jason Samsint main(void* con, int ft, int launchID) {
11462d11b880cba72584c135397c0a82618ab63217Jason Sams    int count, touch, x, y, rate, maxLife, lifeShift;
12462d11b880cba72584c135397c0a82618ab63217Jason Sams    int life;
13462d11b880cba72584c135397c0a82618ab63217Jason Sams    int ct, ct2;
14462d11b880cba72584c135397c0a82618ab63217Jason Sams    int newPart;
15462d11b880cba72584c135397c0a82618ab63217Jason Sams    int drawCount;
16462d11b880cba72584c135397c0a82618ab63217Jason Sams    int dx, dy, idx;
17462d11b880cba72584c135397c0a82618ab63217Jason Sams    int posx,posy;
18462d11b880cba72584c135397c0a82618ab63217Jason Sams    int c;
19462d11b880cba72584c135397c0a82618ab63217Jason Sams    int srcIdx;
20462d11b880cba72584c135397c0a82618ab63217Jason Sams    int dstIdx;
21462d11b880cba72584c135397c0a82618ab63217Jason Sams
22462d11b880cba72584c135397c0a82618ab63217Jason Sams    count = loadI32(con, 0, 1);
23462d11b880cba72584c135397c0a82618ab63217Jason Sams    touch = loadI32(con, 0, 2);
24462d11b880cba72584c135397c0a82618ab63217Jason Sams    x = loadI32(con, 0, 3);
25462d11b880cba72584c135397c0a82618ab63217Jason Sams    y = loadI32(con, 0, 4);
26462d11b880cba72584c135397c0a82618ab63217Jason Sams
27462d11b880cba72584c135397c0a82618ab63217Jason Sams    rate = 4;
28462d11b880cba72584c135397c0a82618ab63217Jason Sams    maxLife = (count / rate) - 1;
29462d11b880cba72584c135397c0a82618ab63217Jason Sams    lifeShift = 0;
30462d11b880cba72584c135397c0a82618ab63217Jason Sams    {
31462d11b880cba72584c135397c0a82618ab63217Jason Sams        life = maxLife;
32462d11b880cba72584c135397c0a82618ab63217Jason Sams        while (life > 255) {
33462d11b880cba72584c135397c0a82618ab63217Jason Sams            life = life >> 1;
34462d11b880cba72584c135397c0a82618ab63217Jason Sams            lifeShift ++;
35462d11b880cba72584c135397c0a82618ab63217Jason Sams        }
36462d11b880cba72584c135397c0a82618ab63217Jason Sams    }
37462d11b880cba72584c135397c0a82618ab63217Jason Sams
38462d11b880cba72584c135397c0a82618ab63217Jason Sams    drawRect(con, 0, 256, 0, 512);
39462d11b880cba72584c135397c0a82618ab63217Jason Sams    contextBindProgramFragment(con, NAMED_PgmFragParts);
40462d11b880cba72584c135397c0a82618ab63217Jason Sams
41462d11b880cba72584c135397c0a82618ab63217Jason Sams    if (touch) {
42462d11b880cba72584c135397c0a82618ab63217Jason Sams        newPart = loadI32(con, 2, 0);
43462d11b880cba72584c135397c0a82618ab63217Jason Sams        for (ct2=0; ct2<rate; ct2++) {
44462d11b880cba72584c135397c0a82618ab63217Jason Sams            dx = scriptRand(con, 0x10000) - 0x8000;
45462d11b880cba72584c135397c0a82618ab63217Jason Sams            dy = scriptRand(con, 0x10000) - 0x8000;
46462d11b880cba72584c135397c0a82618ab63217Jason Sams
47462d11b880cba72584c135397c0a82618ab63217Jason Sams            idx = newPart * 5 + 1;
48462d11b880cba72584c135397c0a82618ab63217Jason Sams            storeI32(con, 2, idx, dx);
49462d11b880cba72584c135397c0a82618ab63217Jason Sams            storeI32(con, 2, idx + 1, dy);
50462d11b880cba72584c135397c0a82618ab63217Jason Sams            storeI32(con, 2, idx + 2, maxLife);
51462d11b880cba72584c135397c0a82618ab63217Jason Sams            storeI32(con, 2, idx + 3, x << 16);
52462d11b880cba72584c135397c0a82618ab63217Jason Sams            storeI32(con, 2, idx + 4, y << 16);
53462d11b880cba72584c135397c0a82618ab63217Jason Sams
54462d11b880cba72584c135397c0a82618ab63217Jason Sams            newPart++;
55462d11b880cba72584c135397c0a82618ab63217Jason Sams            if (newPart >= count) {
56462d11b880cba72584c135397c0a82618ab63217Jason Sams                newPart = 0;
57462d11b880cba72584c135397c0a82618ab63217Jason Sams            }
58462d11b880cba72584c135397c0a82618ab63217Jason Sams        }
59462d11b880cba72584c135397c0a82618ab63217Jason Sams        storeI32(con, 2, 0, newPart);
60462d11b880cba72584c135397c0a82618ab63217Jason Sams    }
61462d11b880cba72584c135397c0a82618ab63217Jason Sams
62462d11b880cba72584c135397c0a82618ab63217Jason Sams    drawCount = 0;
63462d11b880cba72584c135397c0a82618ab63217Jason Sams    for (ct=0; ct < count; ct++) {
64462d11b880cba72584c135397c0a82618ab63217Jason Sams        srcIdx = ct * 5 + 1;
65462d11b880cba72584c135397c0a82618ab63217Jason Sams
66462d11b880cba72584c135397c0a82618ab63217Jason Sams        dx = loadI32(con, 2, srcIdx);
67462d11b880cba72584c135397c0a82618ab63217Jason Sams        dy = loadI32(con, 2, srcIdx + 1);
68462d11b880cba72584c135397c0a82618ab63217Jason Sams        life = loadI32(con, 2, srcIdx + 2);
69462d11b880cba72584c135397c0a82618ab63217Jason Sams        posx = loadI32(con, 2, srcIdx + 3);
70462d11b880cba72584c135397c0a82618ab63217Jason Sams        posy = loadI32(con, 2, srcIdx + 4);
71462d11b880cba72584c135397c0a82618ab63217Jason Sams
72462d11b880cba72584c135397c0a82618ab63217Jason Sams        if (life) {
73462d11b880cba72584c135397c0a82618ab63217Jason Sams            if (posy < (480 << 16)) {
74462d11b880cba72584c135397c0a82618ab63217Jason Sams                dstIdx = drawCount * 9;
75462d11b880cba72584c135397c0a82618ab63217Jason Sams                c = 0xffafcf | ((life >> lifeShift) << 24);
76462d11b880cba72584c135397c0a82618ab63217Jason Sams
77462d11b880cba72584c135397c0a82618ab63217Jason Sams                storeU32(con, 1, dstIdx, c);
78462d11b880cba72584c135397c0a82618ab63217Jason Sams                storeI32(con, 1, dstIdx + 1, posx);
79462d11b880cba72584c135397c0a82618ab63217Jason Sams                storeI32(con, 1, dstIdx + 2, posy);
80462d11b880cba72584c135397c0a82618ab63217Jason Sams
81462d11b880cba72584c135397c0a82618ab63217Jason Sams                storeU32(con, 1, dstIdx + 3, c);
82462d11b880cba72584c135397c0a82618ab63217Jason Sams                storeI32(con, 1, dstIdx + 4, posx + 0x10000);
83462d11b880cba72584c135397c0a82618ab63217Jason Sams                storeI32(con, 1, dstIdx + 5, posy + dy * 4);
84462d11b880cba72584c135397c0a82618ab63217Jason Sams
85462d11b880cba72584c135397c0a82618ab63217Jason Sams                storeU32(con, 1, dstIdx + 6, c);
86462d11b880cba72584c135397c0a82618ab63217Jason Sams                storeI32(con, 1, dstIdx + 7, posx - 0x10000);
87462d11b880cba72584c135397c0a82618ab63217Jason Sams                storeI32(con, 1, dstIdx + 8, posy + dy * 4);
88462d11b880cba72584c135397c0a82618ab63217Jason Sams                drawCount ++;
89462d11b880cba72584c135397c0a82618ab63217Jason Sams            } else {
90462d11b880cba72584c135397c0a82618ab63217Jason Sams                if (dy > 0) {
91462d11b880cba72584c135397c0a82618ab63217Jason Sams                    dy = (-dy) >> 1;
92462d11b880cba72584c135397c0a82618ab63217Jason Sams                }
93462d11b880cba72584c135397c0a82618ab63217Jason Sams            }
94462d11b880cba72584c135397c0a82618ab63217Jason Sams
95462d11b880cba72584c135397c0a82618ab63217Jason Sams            posx = posx + dx;
96462d11b880cba72584c135397c0a82618ab63217Jason Sams            posy = posy + dy;
97462d11b880cba72584c135397c0a82618ab63217Jason Sams            dy = dy + 0x400;
98462d11b880cba72584c135397c0a82618ab63217Jason Sams            life --;
99462d11b880cba72584c135397c0a82618ab63217Jason Sams
100462d11b880cba72584c135397c0a82618ab63217Jason Sams            //storeI32(con, 2, srcIdx, dx);
101462d11b880cba72584c135397c0a82618ab63217Jason Sams            storeI32(con, 2, srcIdx + 1, dy);
102462d11b880cba72584c135397c0a82618ab63217Jason Sams            storeI32(con, 2, srcIdx + 2, life);
103462d11b880cba72584c135397c0a82618ab63217Jason Sams            storeI32(con, 2, srcIdx + 3, posx);
104462d11b880cba72584c135397c0a82618ab63217Jason Sams            storeI32(con, 2, srcIdx + 4, posy);
105462d11b880cba72584c135397c0a82618ab63217Jason Sams        }
106462d11b880cba72584c135397c0a82618ab63217Jason Sams    }
107462d11b880cba72584c135397c0a82618ab63217Jason Sams
108462d11b880cba72584c135397c0a82618ab63217Jason Sams    drawTriangleArray(con, NAMED_PartBuffer, drawCount);
109462d11b880cba72584c135397c0a82618ab63217Jason Sams    return 1;
110462d11b880cba72584c135397c0a82618ab63217Jason Sams}
111