Пример #1
0
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);
}
Пример #2
0
/* 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);
}
Пример #3
0
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);
}
Пример #4
0
bool SavePaletteAs(bool silent, const char *name)
{
	AddPalette(CurrentPalette, name, true);
	return SavePalettes(silent);
}
Пример #5
0
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;
}