|
|
1.1 ! root 1: #include <jerq.h> ! 2: #include "event.h" ! 3: extern Bitmap *buildimage(); ! 4: extern Rectangle scaler(); ! 5: char expl4[]={ ! 6: 'R', -4, -4, 4+1, 4+1, ! 7: 'p', 0, -1, ! 8: 'p', 3, 0, ! 9: 'p', 0, 0, ! 10: 'p', 1, 3, ! 11: 'p', 0, 0, ! 12: 'p', 1, -1, ! 13: 'p', 3, 0, ! 14: 'p', 1, 0, ! 15: 'p', 4, 1, ! 16: 'p', 3, 2, ! 17: 'p', 2, 0, ! 18: 'p', -3, 0, ! 19: 'p', -1, 3, ! 20: 'p', 1, 0, ! 21: 'p', -1, -1, ! 22: 'p', 0, 1, ! 23: 'p', 0, 0, ! 24: 'p', 3, -1, ! 25: 'p', 0, 0, ! 26: 'p', 1, 3, ! 27: 'p', 3, 1, ! 28: 'p', -1, 1, ! 29: 'p', 2, 3, ! 30: 'p', 0, 3, ! 31: 'p', 3, 2, ! 32: 0}; ! 33: char expl8[]={ ! 34: 'R', -8, -8, 8+1, 8+1, ! 35: 'p', -1, -3, ! 36: 'p', 7, 1, ! 37: 'p', -1, 0, ! 38: 'p', 3, 7, ! 39: 'p', 0, -1, ! 40: 'p', 2, -3, ! 41: 'p', 6, 0, ! 42: 'p', 2, -1, ! 43: 'p', 8, 3, ! 44: 'p', 7, 5, ! 45: 'p', 5, 0, ! 46: 'p', -6, 1, ! 47: 'p', -3, 7, ! 48: 'p', 2, 0, ! 49: 'p', -2, -3, ! 50: 'p', 0, 3, ! 51: 'p', 1, 1, ! 52: 'p', 6, -3, ! 53: 'p', 0, 0, ! 54: 'p', 2, 6, ! 55: 'p', 7, 2, ! 56: 'p', -2, 2, ! 57: 'p', 4, 6, ! 58: 'p', -1, 6, ! 59: 'p', 6, 4, ! 60: 0}; ! 61: char expl12[]={ ! 62: 'R', -12, -12, 12+1, 12+1, ! 63: 'p', -2, -4, ! 64: 'p', 10, 2, ! 65: 'p', -2, 1, ! 66: 'p', 5, 11, ! 67: 'p', 0, -2, ! 68: 'p', 3, -5, ! 69: 'p', 9, 1, ! 70: 'p', 3, -2, ! 71: 'p', 12, 4, ! 72: 'p', 10, 8, ! 73: 'p', 8, 0, ! 74: 'p', -9, 2, ! 75: 'p', -5, 11, ! 76: 'p', 4, 0, ! 77: 'p', -4, -4, ! 78: 'p', 1, 5, ! 79: 'p', 1, 2, ! 80: 'p', 10, -5, ! 81: 'p', 0, 0, ! 82: 'p', 3, 9, ! 83: 'p', 11, 3, ! 84: 'p', -3, 3, ! 85: 'p', 7, 9, ! 86: 'p', -1, 9, ! 87: 'p', 9, 6, ! 88: 0}; ! 89: char expl16[]={ ! 90: 'R', -16, -16, 16+1, 16+1, ! 91: 'p', -3, -6, ! 92: 'p', 14, 3, ! 93: 'p', -3, 1, ! 94: 'p', 7, 14, ! 95: 'p', 0, -3, ! 96: 'p', 4, -7, ! 97: 'p', 12, 1, ! 98: 'p', 4, -3, ! 99: 'p', 16, 6, ! 100: 'p', 14, 10, ! 101: 'p', 11, 0, ! 102: 'p', -12, 3, ! 103: 'p', -7, 14, ! 104: 'p', 5, 1, ! 105: 'p', -5, -6, ! 106: 'p', 1, 7, ! 107: 'p', 2, 3, ! 108: 'p', 13, -7, ! 109: 'p', 0, -1, ! 110: 'p', 5, 12, ! 111: 'p', 15, 5, ! 112: 'p', -4, 4, ! 113: 'p', 9, 12, ! 114: 'p', -2, 12, ! 115: 'p', 12, 8, ! 116: 0}; ! 117: char expl20[]={ ! 118: 'R', -20, -20, 20+1, 20+1, ! 119: 'p', -4, -8, ! 120: 'p', 17, 4, ! 121: 'p', -4, 2, ! 122: 'p', 8, 18, ! 123: 'p', 0, -4, ! 124: 'p', 5, -9, ! 125: 'p', 15, 2, ! 126: 'p', 5, -4, ! 127: 'p', 20, 8, ! 128: 'p', 17, 13, ! 129: 'p', 14, 0, ! 130: 'p', -16, 4, ! 131: 'p', -8, 18, ! 132: 'p', 7, 1, ! 133: 'p', -7, -8, ! 134: 'p', 2, 8, ! 135: 'p', 3, 4, ! 136: 'p', 16, -9, ! 137: 'p', 0, -1, ! 138: 'p', 6, 15, ! 139: 'p', 19, 6, ! 140: 'p', -5, 5, ! 141: 'p', 12, 16, ! 142: 'p', -3, 15, ! 143: 'p', 15, 11, ! 144: 0}; ! 145: char expl25[]={ ! 146: 'R', -25, -25, 25+1, 25+1, ! 147: 'p', -6, -10, ! 148: 'p', 22, 6, ! 149: 'p', -6, 3, ! 150: 'p', 11, 23, ! 151: 'p', -1, -6, ! 152: 'p', 7, -12, ! 153: 'p', 19, 3, ! 154: 'p', 7, -6, ! 155: 'p', 25, 10, ! 156: 'p', 22, 17, ! 157: 'p', 18, 0, ! 158: 'p', -20, 5, ! 159: 'p', -11, 23, ! 160: 'p', 9, 2, ! 161: 'p', -9, -10, ! 162: 'p', 3, 11, ! 163: 'p', 4, 6, ! 164: 'p', 21, -12, ! 165: 'p', 1, -2, ! 166: 'p', 8, 19, ! 167: 'p', 24, 8, ! 168: 'p', -7, 7, ! 169: 'p', 15, 20, ! 170: 'p', -4, 19, ! 171: 'p', 19, 14, ! 172: 0}; ! 173: char *exim[]={ ! 174: expl4, expl8, expl12, expl16, expl20, expl25, 0 ! 175: }; ! 176: #define NIMAGE (sizeof exim/sizeof (char *) -1) ! 177: Bitmap *exseq[sizeof exim/sizeof (char *)]; ! 178: typedef struct{ ! 179: Point p; ! 180: char image; ! 181: char allocated; ! 182: }Explosion; ! 183: #define NEXPL 16 /* known in event type */ ! 184: #define EXPLTICKS 32 ! 185: Explosion ex[NEXPL]; ! 186: int exadvance(); ! 187: initexplosion() ! 188: { ! 189: register i; ! 190: for(i=0; i<NIMAGE; i++) ! 191: exseq[i]=buildimage(exim[i]); ! 192: for(i=0; i<NEXPL; i++) ! 193: ex[i].allocated=0; ! 194: } ! 195: exfree() ! 196: { ! 197: register Bitmap **b; ! 198: for(b=exseq; b<&exseq[NIMAGE]; b++) ! 199: bfree(*b); ! 200: } ! 201: explode(p) ! 202: Point p; ! 203: { ! 204: register i; ! 205: register Explosion *e; ! 206: for(i=0, e=ex; i<NEXPL; i++, e++) ! 207: if(e->allocated==0){ ! 208: if(addevent(newevent(), EXPLTICKS, exadvance, EEXPL|i)){ ! 209: e->p=p; ! 210: e->allocated=1; ! 211: e->image=0; ! 212: exdraw(i); ! 213: } ! 214: break; ! 215: } ! 216: } ! 217: exdraw(i) ! 218: { ! 219: register Bitmap *b=exseq[ex[i].image]; ! 220: bitblt(b, b->rect, &display, add(transform(ex[i].p), b->rect.origin), F_XOR); ! 221: } ! 222: exadvance(x) ! 223: { ! 224: register Explosion *e= &ex[x&=~EEXPL]; ! 225: extern notdrawn; ! 226: exdraw(x); ! 227: if(++e->image >= NIMAGE){ ! 228: e->allocated=0; ! 229: return 0; ! 230: } ! 231: exdraw(x); ! 232: --notdrawn; /* minor kludge to keep time smooth */ ! 233: return 1; ! 234: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.