|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T b
Length: 3714 (0xe82) Types: TextFile Names: »bursts.c«
└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen └─⟦this⟧ »cph85dist/search/bursts.c« └─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Search/bursts.c«
#ifndef lint static char rcsid[] = "$Header: bursts.c,v 1.2 85/07/08 17:22:19 matt Exp $"; #endif /* * * search * * multi-player and multi-system search and destroy. * * Original by Greg Ordy 1979 * Rewrite by Sam Leffler 1981 * Socket code by Dave Pare 1983 * Ported & improved * by Matt Crawford 1985 * * routines to manipulate shrapnel * * Copyright (c) 1979 * */ #include "defines.h" #include "structs.h" /* * Create a burst of shrapnel upon death of a player. */ void makeburst(bx, by) char bx, by; { extern t_burst bursts[NBURST]; register t_burst *bp; register t_burst *last; last = &bursts[NBURST]; for (bp = bursts; bp < last; bp++) { if (bp->cbactive != 0) continue; bp->cbactive++; bp->cbx = bx; bp->cby = by; bp->shrap[0][0] = bx; bp->shrap[0][1] = by; bp->cbcnt = 100; return; } } /* * Update shrapnel position and display */ void moveburst() { extern int nplayer; extern char xxi, yyi; extern t_burst bursts[NBURST]; void getdir(); register int j; register t_burst *bp, *last; register char xi, yi, qrt; last = &bursts[NBURST]; for (bp = bursts; bp < last; bp++) { if (bp->cbactive == 0) continue; if (bp->cbcnt == 100) { bp->cbcnt--; break; } if (bp->cbcnt == 98) { bp->cbcnt = 50; for (j=1; j != 4; j++) { qrt = (rand()>>4)%8; xi = bp->cbx; yi = bp->cby; switch (qrt) { case 0: xi++; break; case 1: xi++; yi--; break; case 2: yi--; break; case 3: xi--; yi--; break; case 4: xi--; break; case 5: xi--; yi++; break; case 6: yi++; break; case 7: xi++; yi++; break; } bp->shrap[j][0] = xi; bp->shrap[j][1] = yi; bp->shrapd[j] = qrt; } break; } if (bp->cbcnt > 48) { bp->cbcnt--; break; } if (bp->cbcnt == 48) { bp->cbcnt = (rand()>>4)%(16-nplayer); qrt = bp->shrapd[1]; xi = bp->shrap[1][0]; yi = bp->shrap[1][1]; getdir(qrt, xi, yi); bp->shrap[0][0] = xxi; bp->shrap[0][1] = yyi; getdir(qrt, xi, yi); bp->shrap[4][0] = xxi; bp->shrap[4][1] = yyi; qrt = bp->shrapd[2]; xi = bp->shrap[2][0]; yi = bp->shrap[2][1]; getdir(qrt, xi, yi); bp->shrap[5][0] = xxi; bp->shrap[5][1] = yyi; getdir(qrt, xi, yi); bp->shrap[6][0] = xxi; bp->shrap[6][1] = yyi; qrt = bp->shrapd[3]; xi = bp->shrap[3][0]; yi = bp->shrap[3][1]; getdir(qrt, xi, yi); bp->shrap[7][0] = xxi; bp->shrap[7][1] = yyi; getdir(qrt, xi, yi); bp->shrap[8][0] = xxi; bp->shrap[8][1] = yyi; break; } bp->cbcnt--; if (bp->cbcnt == 3) { for (j = 1; j != 4; j++) { bp->shrap[j][0] = 0; bp->shrap[j][1] = 0; } bp->shrap[0][0] = 0; bp->shrap[0][1] = 0; break; } if (bp->cbcnt == 0) { for (j = 4; j != 9; j++) { bp->shrap[j][0] = 0; bp->shrap[j][1] = 0; } bp->cbactive = 0; break; } } } /* * Furnish random movement for shrapnel pieces */ static void getdir(dir, xi, yi) char dir, xi, yi; { extern int rand(); extern char xxi, yyi; register char dx, dy; dx = ((rand()>>3)%3)-1; dy = ((rand()>>3)%3)-1; switch (dir) { case 0: if (dx < 0) dx = 2; break; case 1: if (dx < 0) dx = 2; if (dy > 0) dy = -2; break; case 2: if (dy > 0) dy = -2; break; case 3: if (dx > 0) dx = -2; if (dy > 0) dy = -2; break; case 4: if (dx > 0) dx = -2; break; case 5: if (dx > 0) dx = -2; if (dy < 0) dy = 2; break; case 6: if (dy < 0) dy = 2; break; case 7: if (dx < 0) dx = 2; if (dy < 0) dy = 2; break; } xxi = xi+dx; yyi = yi+dy; }