/* GravFigs.c: Figure defs and routines for Gravity Well Copyright (c) 1986-8 Randall H. Wilson */ #include "GW.h" extern long backgr1, backgr2; /* ship figure */ Ship_Pic *ship_masks, *ship_defs; Shard_Pic *shard_images, **shard_defs, **shard_masks; Bunker_Pic *bunker_defs; Bunker_Pic *bunker_masks; Bunker_Pic *bunker_images[2]; /* holds bunker eors */ Fuel_Pic *fuel_defs; Fuel_Pic *fuel_masks; Fuel_Pic *fuel_images[2]; /* holds fuel eors */ Crater_Pic crater_def, crater_mask, crater_images[2]; char flames[32][7] = { {0x5A, 0xAC, 0x5A, 0x54, 0x38, 0x08, 0x10}, {0x80, 0x6C, 0xB4, 0xC8, 0x50, 0x50, 0x20}, {0x40, 0xA8, 0x7A, 0x94, 0x68, 0x50, 0x40}, {0x80, 0x70, 0xA8, 0x54, 0x98, 0x60, 0x80}, {0x30, 0x14, 0x4C, 0x36, 0x4A, 0x58, 0x80}, {0x00, 0x10, 0x28, 0x34, 0x4C, 0x54, 0xAA}, {0x08, 0x10, 0x2C, 0x58, 0x2C, 0xEA, 0x14}, {0x00, 0x0C, 0x14, 0x68, 0x9C, 0x64, 0x1A}, {0x0A, 0x14, 0x6E, 0xBA, 0x24, 0x1A, 0x04}, {0x1A, 0x64, 0x9C, 0x68, 0x14, 0x0C, 0x00}, {0x14, 0xEA, 0x2C, 0x58, 0x2C, 0x10, 0x08}, {0xAA, 0x54, 0x4C, 0x34, 0x28, 0x10, 0x00}, {0x80, 0x58, 0x4A, 0x36, 0x4C, 0x14, 0x30}, {0x80, 0x60, 0x98, 0x54, 0xA8, 0x70, 0x80}, {0x40, 0x50, 0x68, 0x94, 0x7A, 0xA8, 0x40}, {0x20, 0x50, 0x50, 0xC8, 0xB4, 0x6C, 0x80}, {0x10, 0x08, 0x38, 0x54, 0x5A, 0xAC, 0x5A}, {0x08, 0x14, 0x14, 0x2A, 0x5A, 0x6C, 0x02}, {0x04, 0x14, 0x2C, 0x52, 0xBC, 0x2A, 0x04}, {0x02, 0x0C, 0x32, 0x54, 0x2A, 0x1C, 0x02}, {0x02, 0x34, 0xA4, 0xD8, 0x64, 0x50, 0x18}, {0xAA, 0x54, 0x64, 0x58, 0x28, 0x10, 0x00}, {0x50, 0xAE, 0x68, 0x34, 0x68, 0x10, 0x20}, {0xB0, 0x4C, 0x72, 0x2C, 0x50, 0x60, 0x00}, {0x40, 0xB0, 0x48, 0xBA, 0xEC, 0x50, 0xA0}, {0x00, 0x60, 0x50, 0x2C, 0x72, 0x4C, 0xB0}, {0x20, 0x10, 0x68, 0x34, 0x68, 0xAE, 0x50}, {0x00, 0x10, 0x28, 0x58, 0x64, 0x54, 0xAA}, {0x18, 0x50, 0x64, 0xD8, 0xA4, 0x34, 0x02}, {0x02, 0x1C, 0x2A, 0x54, 0x32, 0x0C, 0x02}, {0x04, 0x2A, 0xBC, 0x52, 0x2C, 0x14, 0x04}, {0x02, 0x6C, 0x5A, 0x2A, 0x14, 0x14, 0x08} }; int shield_def[SHIPHT*2]; /* = { 0x01FC, 0x0000, 0x0603, 0x0000, 0x0800, 0x8000, 0x1000, 0x4000, 0x2000, 0x2000, 0x4000, 0x1000, 0x4000, 0x1000, 0x8000, 0x0800, 0x8000, 0x0800, 0x8000, 0x0800, 0x8000, 0x0800, 0x8000, 0x0800, 0x8000, 0x0800, 0x8000, 0x0800, 0x4000, 0x1000, 0x4000, 0x1000, 0x2000, 0x2000, 0x1000, 0x4000, 0x0800, 0x8000, 0x0603, 0x0000, 0x01FC, 0x0000 }; */ int xbshotstart[BUNKKINDS][16] = { {2, 13, 18, 22, 24, 21, 16, 10, -2, -13, -18, -22, -24, -21, -16, -10}, {0, 3, 15, 31, 24, 31, 17, 3, 0, -3, -15, -31, -24, -31, -17, -3}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} }; int ybshotstart[BUNKKINDS][16] = { {-24, -21, -16, -10, 2, 13, 18, 22, 24, 21, 16, 10, -2, -13, -18, -22}, {-24, -31, -17, -3, 0, 3, 15, 31, 24, 31, 17, 3, 0, -3, -15, -31}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} }; int xbcenter[BUNKKINDS][16] = { {24, 24, 24, 23, 22, 22, 22, 24, 24, 24, 24, 25, 26, 26, 26, 24}, {25, 22, 21, 14, 10, 13, 18, 22, 23, 26, 27, 34, 38, 35, 30, 26}, {24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24}, {24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24}, {24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24} }; int ybcenter[BUNKKINDS][16] = { {26, 26, 26, 24, 24, 24, 24, 23, 22, 22, 22, 24, 24, 24, 24, 25}, {38, 35, 30, 26, 25, 22, 21, 14, 10, 13, 18, 22, 23, 26, 27, 34}, {24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24}, {24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24}, {24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24} }; char strafe_defs[16][STRAFEHT]= { {0x24, 0x95, 0x5A, 0x3C, 0x3C, 0x00, 0x00, 0x00}, {0x48, 0x2B, 0x3C, 0x3F, 0x0C, 0x00, 0x00, 0x00}, {0x24, 0x15, 0x1A, 0x1E, 0x0D, 0x00, 0x00, 0x00}, {0x0A, 0x0A, 0x1C, 0x1F, 0x0C, 0x0E, 0x01, 0x00}, {0x02, 0x04, 0x19, 0x1E, 0x1C, 0x1B, 0x04, 0x02}, {0x00, 0x01, 0x0E, 0x0C, 0x1F, 0x1C, 0x0A, 0x0A}, {0x00, 0x00, 0x00, 0x0D, 0x1E, 0x1A, 0x15, 0x24}, {0x00, 0x00, 0x00, 0x0C, 0x3F, 0x3C, 0x2B, 0x48}, {0x00, 0x00, 0x00, 0x3C, 0x3C, 0x5A, 0x95, 0x24}, {0x00, 0x00, 0x00, 0x30, 0xFD, 0x3C, 0xD4, 0x12}, {0x00, 0x00, 0x00, 0xB0, 0x78, 0x78, 0xA4, 0x24}, {0x00, 0x80, 0x70, 0x30, 0xF8, 0x38, 0x50, 0x50}, {0x40, 0x20, 0x98, 0x78, 0x38, 0xD8, 0x20, 0x40}, {0x50, 0x50, 0x38, 0xF8, 0x30, 0x70, 0x80, 0x00}, {0x24, 0xA4, 0x78, 0x78, 0xB0, 0x00, 0x00, 0x00}, {0x12, 0xD4, 0x3C, 0xFD, 0x30, 0x00, 0x00, 0x00} }; char digits[SPACECHAR+1][DIGHEIGHT] = { {0xC3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xC3}, /* 0 */ {0xE7, 0xC7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7}, /* 1 */ {0xC3, 0xB9, 0xF9, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x81}, /* 2 */ {0x81, 0xF3, 0xE7, 0xC3, 0xF9, 0xF9, 0xF9, 0xB9, 0xC3}, /* 3 */ {0xF9, 0xF1, 0xE9, 0xD9, 0xB9, 0x80, 0xF9, 0xF9, 0xF9}, /* 4 */ {0x81, 0x9F, 0x9F, 0x83, 0xF9, 0xF9, 0xF9, 0xB9, 0xC3}, /* 5 */ {0xE3, 0xCF, 0x9F, 0x83, 0x99, 0x99, 0x99, 0x99, 0xC3}, /* 6 */ {0x81, 0xF9, 0xF9, 0xF9, 0xF3, 0xE7, 0xE7, 0xE7, 0xE7}, /* 7 */ {0xC3, 0x99, 0x99, 0x99, 0xC3, 0x99, 0x99, 0x99, 0xC3}, /* 8 */ {0xC3, 0x99, 0x99, 0x99, 0x99, 0xC1, 0xF9, 0xF3, 0xC7}, /* 9 */ {0xC3, 0x99, 0x99, 0x99, 0x81, 0x99, 0x99, 0x99, 0x99}, {0x83, 0x99, 0x99, 0x99, 0x83, 0x99, 0x99, 0x99, 0x83}, {0xC3, 0x9D, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9D, 0xC3}, {0x83, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x83}, {0x81, 0x9F, 0x9F, 0x9F, 0x87, 0x9F, 0x9F, 0x9F, 0x81}, {0x81, 0x9F, 0x9F, 0x9F, 0x87, 0x9F, 0x9F, 0x9F, 0x9F}, /* F */ {0xC3, 0x9D, 0x9F, 0x9F, 0x91, 0x99, 0x99, 0x99, 0xC3}, {0x99, 0x99, 0x99, 0x99, 0x81, 0x99, 0x99, 0x99, 0x99}, {0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7}, {0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0x99, 0x99, 0x99, 0xC3}, {0x9C, 0x99, 0x93, 0x87, 0x8F, 0x87, 0x93, 0x99, 0x9C}, {0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xC1}, {0xBE, 0x9C, 0x88, 0x80, 0x80, 0x94, 0x9C, 0x9C, 0x9C}, /* M */ {0xBC, 0x9C, 0x8C, 0x84, 0x80, 0x90, 0x98, 0x9C, 0x9E}, {0xC3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xC3}, {0x83, 0x99, 0x99, 0x99, 0x83, 0x9F, 0x9F, 0x9F, 0x9F}, {0xC3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x89, 0x93, 0xC5}, {0x83, 0x99, 0x99, 0x99, 0x83, 0x99, 0x99, 0x99, 0x99}, /* R */ {0xC7, 0x9B, 0x9F, 0x8F, 0xC7, 0xE3, 0xF3, 0xB3, 0xC7}, {0x81, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7}, {0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xC3}, {0x99, 0x99, 0x99, 0x99, 0x99, 0xC3, 0xC3, 0xE7, 0xE7}, /* V */ {0x9C, 0x9C, 0x9C, 0x9C, 0x94, 0x80, 0x88, 0x9C, 0xB3}, {0x99, 0x99, 0x99, 0x99, 0xC3, 0x99, 0x99, 0x99, 0x99}, {0x99, 0x99, 0x99, 0x99, 0xC3, 0xE7, 0xE7, 0xE7, 0xE7}, {0x81, 0xF9, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x9F, 0x81}, /* Z */ {0xF7, 0xF7, 0xE3, 0xE3, 0xE3, 0xC1, 0xC1, 0x80, 0xBE}, /* ship */ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} /* space */ }; /* Function Rotate Figures: fills in the rest of the definitions, starting with the first 5 (3 for most things) positions. Now gets bunkers and other figures from a macpaint file. */ rotate_figures() { extern char *whitestorage, *whites; /* you ugly spasm */ /* allocate space for the bitmaps */ whitestorage = (char *) NewPtr((NUMLINES*2+20)*12L); whites = (char *) NewPtr((NUMLINES*6+20L)*12 /* sizeof(whiterec) */); ship_defs = (Ship_Pic *) NewPtr((long) 32*sizeof(Ship_Pic)); ship_masks = (Ship_Pic *) NewPtr((long) 32*sizeof(Ship_Pic)); bunker_defs = (Bunker_Pic *) NewPtr((long) BUNKKINDS*sizeof(Bunker_Pic)); bunker_masks= (Bunker_Pic *) NewPtr((long) BUNKKINDS*sizeof(Bunker_Pic)); bunker_images[0]= (Bunker_Pic *) NewPtr((long) BUNKKINDS*sizeof(Bunker_Pic)); bunker_images[1]= (Bunker_Pic *) NewPtr((long) BUNKKINDS*sizeof(Bunker_Pic)); fuel_defs = (Fuel_Pic *) NewPtr((long) (FUELFRAMES+1) * sizeof(Fuel_Pic)); fuel_masks = (Fuel_Pic *) NewPtr((long) (FUELFRAMES+1) * sizeof(Fuel_Pic)); fuel_images[0] = (Fuel_Pic *) NewPtr((long) (FUELFRAMES+1) * sizeof(Fuel_Pic)); fuel_images[1] = (Fuel_Pic *) NewPtr((long) (FUELFRAMES+1) * sizeof(Fuel_Pic)); shard_images = (Shard_Pic *) NewPtr((long) SHARDKINDS * sizeof(Shard_Pic)); shard_defs = /* temporary, until transfered to images */ (Shard_Pic **)NewHandle((long) SHARDKINDS * sizeof(Shard_Pic)); shard_masks = /* temporary */ (Shard_Pic **)NewHandle((long) SHARDKINDS * sizeof(Shard_Pic)); if (shard_masks == NULL) memory_error(); load_figs(); rotate_ship(ship_defs); rotate_ship(ship_masks); load_sbar(); } rotate_ship(ships) register Ship_Pic *ships; { register int x, y, k, *p; #define SIZE (2*SCENTER) /* clear out the remaining ships */ for (x=5; x<32; x++) for(y=0, p=ships[x]; y < SHIPHT*2; y++, p++) *p = 0; /* make positions 5-8 */ for (k=0; k < 4; k++) for (x=0; x> x; } } back[0] = (int) backgr1; back[1] = (int) backgr2; for (align=0; align<2; align++) { for (j=0; j>1) + align) & 1] & crater_mask[i]) ^ crater_def[i]; } #define SBARFILESIZE 10000 load_sbar() { register char *p; BitMap sbarbmap; extern char *sbarptr; Handle sbarh; /* extern char sbarfile[]; int f; long length; if (!(sbarh = NewHandle((long) SBARFILESIZE))) memory_error(); if (FSOpen(sbarfile, 0, &f)) ExitToShell(); SetFPos(f, fsFromStart, 512L); length = macread(f, SBARFILESIZE, *sbarh); FSClose(f); SetHandleSize(sbarh, length); AddResource(sbarh, 'MISC', M_SBAR, NULL); */ sbarh = GetResource('MISC', M_SBAR); expandtitlepage(sbarh, &sbarbmap, SBARHT); ReleaseResource(sbarh); sbarptr = sbarbmap.baseAddr; /* reverse the characters (to black on white) */ for (p=digits[0]; p < digits[0] + sizeof(digits); p++) *p ^= 0xFF; }