ubyte *GrUsePaletteTable (char *pszFile, char *pszLevel) { CFILE *fp = NULL; int i, fsize; tPalette palette; #ifdef SWAP_0_255 ubyte c; #endif if (pszLevel) { char ifile_name [FILENAME_LEN]; ChangeFilenameExtension (ifile_name, pszLevel, ".pal"); fp = CFOpen (ifile_name, gameFolders.szDataDir, "rb", 0); } if (!fp) fp = CFOpen (pszFile, gameFolders.szDataDir, "rb", 0); // the following is a hack to enable the loading of d2 levels // even if only the d2 mac shareware datafiles are present. // However, if the pig file is present but the palette file isn't, // the textures in the level will look wierd... if (!fp) fp = CFOpen (DEFAULT_LEVEL_PALETTE, gameFolders.szDataDir, "rb", 0); if (!fp) { Error(TXT_PAL_FILES, pszFile, DEFAULT_LEVEL_PALETTE); return NULL; } fsize = CFLength (fp, 0); Assert (fsize == 9472); CFRead (palette, 256*3, 1, fp); CFRead (grFadeTable, 256*34, 1, fp); CFClose (fp); // This is the TRANSPARENCY COLOR for (i = 0; i < GR_FADE_LEVELS; i++) grFadeTable [i * 256 + 255] = 255; gameData.render.nComputedColors = 0; // Flush palette cache. #if defined(POLY_ACC) pa_update_clut (palette, 0, 256, 0); #endif // swap colors 0 and 255 of the palette along with fade table entries #ifdef SWAP_0_255 for (i = 0; i < 3; i++) { c = palette [i]; palette [i] = palette [765 + i]; palette [765 + i] = c; } for (i = 0; i < GR_FADE_LEVELS * 256; i++) if (grFadeTable [i] == 0) grFadeTable [i] = 255; for (i = 0; i < GR_FADE_LEVELS; i++) grFadeTable [i * 256] = TRANSPARENCY_COLOR; #endif return fadePalette = AddPalette (palette); }
/* calculate table to translate d1 bitmaps to current palette, * return -1 on error */ ubyte *LoadD1Palette (void) { tPalette palette; CFile cf; if (!cf.Open (D1_PALETTE, gameFolders.szDataDir, "rb", 1) || (cf.Length () != 9472)) return NULL; cf.Read (palette, 256, 3); cf.Close (); palette [254] = SUPER_TRANSP_COLOR; palette [255] = TRANSPARENCY_COLOR; return d1Palette = AddPalette (palette); }
void GrSetPalette (grsBitmap *bmP, ubyte *palette, int transparentColor, int superTranspColor, int *freq) { if ((transparentColor >= 0) && (transparentColor <= 255)) { //palette [255] = transparentColor; if (freq [transparentColor]) GrSetTransparent (bmP, 1); } if ((superTranspColor >= 0) && (superTranspColor <= 255)) { //palette [254] = transparentColor; if (freq [superTranspColor]) GrSetSuperTransparent (bmP, 0); } bmP->bm_palette = AddPalette (palette); }
bool SavePaletteAs(bool silent, const char *name) { AddPalette(CurrentPalette, name, true); return SavePalettes(silent); }
void InitHoardData (void) { ubyte palette [256*3]; CFILE *fp; int i, fPos, nBitmap; tVideoClip *vcP; eclip *ecP; powerupType_info *ptP; ubyte *bmDataP; if (gameOpts->app.bDemoData) { #ifdef RELEASE Warning ("Hoard data not available with demo data."); #endif return; } if (!(fp = CFOpen ("hoard.ham", gameFolders.szDataDir, "rb", 0))) { Warning ("Cannot open hoard data file <hoard.ham>."); return; } gameData.hoard.orb.nFrames = CFReadShort (fp); gameData.hoard.orb.nWidth = CFReadShort (fp); gameData.hoard.orb.nHeight = CFReadShort (fp); CalcHoardItemSizes (gameData.hoard.orb); fPos = CFTell (fp); CFSeek (fp, sizeof (palette) + gameData.hoard.orb.nSize, SEEK_CUR); gameData.hoard.goal.nFrames = CFReadShort (fp); CFSeek (fp, fPos, SEEK_SET); if (!gameData.hoard.bInitialized) { gameData.hoard.goal.nWidth = gameData.hoard.goal.nHeight = 64; CalcHoardItemSizes (gameData.hoard.goal); nBitmap = gameData.pig.tex.nBitmaps [0]; //Create orb tVideoClip gameData.hoard.orb.nClip = gameData.eff.nClips [0]++; Assert (gameData.eff.nClips [0] <= VCLIP_MAXNUM); vcP = &gameData.eff.vClips [0][gameData.hoard.orb.nClip]; vcP->xTotalTime = F1_0/2; vcP->nFrameCount = gameData.hoard.orb.nFrames; vcP->xFrameTime = vcP->xTotalTime / vcP->nFrameCount; vcP->flags = 0; vcP->nSound = -1; vcP->lightValue = F1_0; bmDataP = gameData.hoard.orb.bm.bm_texBuf = (ubyte *) d_malloc (gameData.hoard.orb.nSize); for (i = 0; i < gameData.hoard.orb.nFrames; i++, nBitmap++) { Assert (nBitmap < MAX_BITMAP_FILES); vcP->frames [i].index = nBitmap; InitHoardBitmap (&gameData.pig.tex.bitmaps [0][nBitmap], gameData.hoard.orb.nWidth, gameData.hoard.orb.nHeight, BM_FLAG_TRANSPARENT, bmDataP); bmDataP += gameData.hoard.orb.nFrameSize; } //Create hoard orb powerup ptP = gameData.objs.pwrUp.info + POW_HOARD_ORB; ptP->nClipIndex = gameData.hoard.orb.nClip; ptP->hitSound = -1; //gameData.objs.pwrUp.info [POW_SHIELD_BOOST].hitSound; ptP->size = gameData.objs.pwrUp.info [POW_SHIELD_BOOST].size; ptP->light = gameData.objs.pwrUp.info [POW_SHIELD_BOOST].light; //Create orb goal wall effect gameData.hoard.goal.nClip = gameData.eff.nEffects [0]++; Assert (gameData.eff.nEffects [0] < MAX_EFFECTS); ecP = gameData.eff.pEffects + gameData.hoard.goal.nClip; *ecP = gameData.eff.pEffects [94]; //copy from blue goal ecP->changing_wall_texture = gameData.pig.tex.nTextures [0]; ecP->vc.nFrameCount = gameData.hoard.goal.nFrames; i = gameData.pig.tex.nTextures [0]; gameData.pig.tex.pTMapInfo [i] = gameData.pig.tex.pTMapInfo [MultiFindGoalTexture (TMI_GOAL_BLUE)]; gameData.pig.tex.pTMapInfo [i].eclip_num = gameData.hoard.goal.nClip; gameData.pig.tex.pTMapInfo [i].flags = TMI_GOAL_HOARD; gameData.pig.tex.nTextures [0]++; Assert (gameData.pig.tex.nTextures [0] < MAX_TEXTURES); bmDataP = gameData.hoard.goal.bm.bm_texBuf = (ubyte *) d_malloc (gameData.hoard.goal.nSize); for (i = 0; i < gameData.hoard.goal.nFrames; i++, nBitmap++) { Assert (nBitmap < MAX_BITMAP_FILES); ecP->vc.frames [i].index = nBitmap; InitHoardBitmap (gameData.pig.tex.pBitmaps + nBitmap, gameData.hoard.goal.nWidth, gameData.hoard.goal.nHeight, 0, bmDataP); bmDataP += gameData.hoard.goal.nFrameSize; gameData.hoard.nBitmaps = nBitmap; } nBitmap = InitMonsterball (nBitmap); } else { ecP = gameData.eff.pEffects + gameData.hoard.goal.nClip; } //Load and remap bitmap data for orb CFRead (palette, 3, 256, fp); gameData.hoard.orb.palette = AddPalette (palette); vcP = &gameData.eff.vClips [0][gameData.hoard.orb.nClip]; for (i = 0; i < gameData.hoard.orb.nFrames; i++) { grsBitmap *bmP = &gameData.pig.tex.bitmaps [0][vcP->frames [i].index]; CFRead (bmP->bm_texBuf, 1, gameData.hoard.orb.nFrameSize, fp); GrRemapBitmapGood (bmP, gameData.hoard.orb.palette, 255, -1); } //Load and remap bitmap data for goal texture CFReadShort (fp); //skip frame count CFRead (palette, 3, 256, fp); gameData.hoard.goal.palette = AddPalette (palette); for (i = 0; i < gameData.hoard.goal.nFrames; i++) { grsBitmap *bmP = gameData.pig.tex.pBitmaps + ecP->vc.frames [i].index; CFRead (bmP->bm_texBuf, 1, gameData.hoard.goal.nFrameSize, fp); GrRemapBitmapGood (bmP, gameData.hoard.goal.palette, 255, -1); } //Load and remap bitmap data for HUD icons for (i = 0; i < 2; i++) { gameData.hoard.icon [i].nFrames = 1; gameData.hoard.icon [i].nHeight = CFReadShort (fp); gameData.hoard.icon [i].nWidth = CFReadShort (fp); CalcHoardItemSizes (gameData.hoard.icon [i]); if (!gameData.hoard.bInitialized) { gameData.hoard.icon [i].bm.bm_texBuf = (ubyte *) d_malloc (gameData.hoard.icon [i].nSize); InitHoardBitmap (&gameData.hoard.icon [i].bm, gameData.hoard.icon [i].nHeight, gameData.hoard.icon [i].nWidth, BM_FLAG_TRANSPARENT, gameData.hoard.icon [i].bm.bm_texBuf); } CFRead (palette, 3, 256, fp); gameData.hoard.icon [i].palette = AddPalette (palette); CFRead (gameData.hoard.icon [i].bm.bm_texBuf, 1, gameData.hoard.icon [i].nFrameSize, fp); GrRemapBitmapGood (&gameData.hoard.icon [i].bm, gameData.hoard.icon [i].palette, 255, -1); } if (!gameData.hoard.bInitialized) { //Load sounds for orb game for (i = 0; i < 4; i++) { int len = CFReadInt (fp); //get 11k len if (gameOpts->sound.digiSampleRate == SAMPLE_RATE_22K) { CFSeek (fp, len, SEEK_CUR); //skip over 11k sample len = CFReadInt (fp); //get 22k len } gameData.pig.snd.sounds [0][gameData.pig.snd.nSoundFiles [0] + i].length = len; gameData.pig.snd.sounds [0][gameData.pig.snd.nSoundFiles [0] + i].data = d_malloc (len); CFRead (gameData.pig.snd.sounds [0][gameData.pig.snd.nSoundFiles [0]+i].data, 1, len, fp); if (gameOpts->sound.digiSampleRate == SAMPLE_RATE_11K) { len = CFReadInt (fp); //get 22k len CFSeek (fp, len, SEEK_CUR); //skip over 22k sample } Sounds [0][SOUND_YOU_GOT_ORB+i] = gameData.pig.snd.nSoundFiles [0]+i; AltSounds [0][SOUND_YOU_GOT_ORB+i] = Sounds [0][SOUND_YOU_GOT_ORB+i]; } } CFClose (fp); gameData.hoard.bInitialized = 1; }