⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p_setup.c

📁 制作游戏 魔法师传奇 源代码设计 MOFASHICHUANQI 经典老游戏
💻 C
📖 第 1 页 / 共 2 页
字号:
			{				*linebuffer++ = li;				M_AddToBox (bbox, li->v1->x, li->v1->y);				M_AddToBox (bbox, li->v2->x, li->v2->y);			}		}		if (linebuffer - sector->lines != sector->linecount)			I_Error ("P_GroupLines: miscounted");		// set the degenmobj_t to the middle of the bounding box		sector->soundorg.x = (bbox[BOXRIGHT]+bbox[BOXLEFT])/2;		sector->soundorg.y = (bbox[BOXTOP]+bbox[BOXBOTTOM])/2;		// adjust bounding box to map blocks		block = (bbox[BOXTOP]-bmaporgy+MAXRADIUS)>>MAPBLOCKSHIFT;		block = block >= bmapheight ? bmapheight-1 : block;		sector->blockbox[BOXTOP]=block;		block = (bbox[BOXBOTTOM]-bmaporgy-MAXRADIUS)>>MAPBLOCKSHIFT;		block = block < 0 ? 0 : block;		sector->blockbox[BOXBOTTOM]=block;		block = (bbox[BOXRIGHT]-bmaporgx+MAXRADIUS)>>MAPBLOCKSHIFT;		block = block >= bmapwidth ? bmapwidth-1 : block;		sector->blockbox[BOXRIGHT]=block;		block = (bbox[BOXLEFT]-bmaporgx-MAXRADIUS)>>MAPBLOCKSHIFT;		block = block < 0 ? 0 : block;		sector->blockbox[BOXLEFT]=block;	}}//=============================================================================/*=================== P_SetupLevel==================*/#ifdef __WATCOMC__	extern boolean i_CDMusic;#endifvoid P_SetupLevel(int episode, int map, int playermask, skill_t skill){	int i;	int parm;	char lumpname[9];	char auxName[128];	int lumpnum;	mobj_t *mobj;	for(i = 0; i < MAXPLAYERS; i++)	{		players[i].killcount = players[i].secretcount			= players[i].itemcount = 0;	}	players[consoleplayer].viewz = 1; // will be set by player think#ifdef __WATCOMC__	if(i_CDMusic == false)	{		S_StartSongName("chess", true); // Waiting-for-level-load song	}#endif	Z_FreeTags(PU_LEVEL, PU_PURGELEVEL-1);	P_InitThinkers();	leveltime = 0;	if(DevMaps)	{		sprintf(auxName, "%sMAP%02d.WAD", DevMapsDir, map);		W_OpenAuxiliary(auxName);	}	sprintf(lumpname, "MAP%02d", map);	lumpnum = W_GetNumForName(lumpname);	//	// Begin processing map lumps	// Note: most of this ordering is important	//	P_LoadBlockMap(lumpnum+ML_BLOCKMAP);	P_LoadVertexes(lumpnum+ML_VERTEXES);	P_LoadSectors(lumpnum+ML_SECTORS);	P_LoadSideDefs(lumpnum+ML_SIDEDEFS);	P_LoadLineDefs(lumpnum+ML_LINEDEFS);	P_LoadSubsectors(lumpnum+ML_SSECTORS);	P_LoadNodes(lumpnum+ML_NODES);	P_LoadSegs(lumpnum+ML_SEGS);	rejectmatrix = W_CacheLumpNum(lumpnum+ML_REJECT, PU_LEVEL);	P_GroupLines();	bodyqueslot = 0;	po_NumPolyobjs = 0;	deathmatch_p = deathmatchstarts;	P_LoadThings(lumpnum+ML_THINGS);	PO_Init(lumpnum+ML_THINGS); // Initialize the polyobjs	P_LoadACScripts(lumpnum+ML_BEHAVIOR); // ACS object code	//	// End of map lump processing	//	if(DevMaps)	{		// Close the auxiliary file, but don't free its loaded lumps.		// The next call to W_OpenAuxiliary() will do a full shutdown		// of the current auxiliary WAD (free lumps and info lists).		W_CloseAuxiliaryFile();		W_UsePrimary();	}	// If deathmatch, randomly spawn the active players	TimerGame = 0;	if(deathmatch)	{		for (i=0 ; i<MAXPLAYERS ; i++)		{			if (playeringame[i])			{   // must give a player spot before deathmatchspawn				mobj = P_SpawnMobj (playerstarts[0][i].x<<16,					playerstarts[0][i].y<<16,0, MT_PLAYER_FIGHTER);				players[i].mo = mobj;				G_DeathMatchSpawnPlayer (i);				P_RemoveMobj (mobj);			}		}		parm = M_CheckParm("-timer");		if(parm && parm < myargc-1)		{			TimerGame = atoi(myargv[parm+1])*35*60;		}	}// set up world state	P_SpawnSpecials ();// build subsector connect matrix//      P_ConnectSubsectors ();// Load colormap and set the fullbright flag	i = P_GetMapFadeTable(gamemap);	W_ReadLump(i, colormaps);	if(i == W_GetNumForName("COLORMAP"))	{		LevelUseFullBright = true;	}	else	{ // Probably fog ... don't use fullbright sprites		LevelUseFullBright = false;	}// preload graphics	if (precache)		R_PrecacheLevel ();	// Check if the level is a lightning level	P_InitLightning();	S_StopAllSound();	SN_StopAllSequences();	S_StartSong(gamemap, true);//printf ("free memory: 0x%x\n", Z_FreeMemory());}//==========================================================================//// InitMapInfo////==========================================================================static void InitMapInfo(void){	int map;	int mapMax;	int mcmdValue;	mapInfo_t *info;	char songMulch[10];	mapMax = 1;	// Put defaults into MapInfo[0]	info = MapInfo;	info->cluster = 0;	info->warpTrans = 0;	info->nextMap = 1; // Always go to map 1 if not specified	info->cdTrack = 1;	info->sky1Texture = R_TextureNumForName(DEFAULT_SKY_NAME);	info->sky2Texture = info->sky1Texture;	info->sky1ScrollDelta = 0;	info->sky2ScrollDelta = 0;	info->doubleSky = false;	info->lightning = false;	info->fadetable = W_GetNumForName(DEFAULT_FADE_TABLE);	strcpy(info->name, UNKNOWN_MAP_NAME);//	strcpy(info->songLump, DEFAULT_SONG_LUMP);	SC_Open(MAPINFO_SCRIPT_NAME);	while(SC_GetString())	{		if(SC_Compare("MAP") == false)		{			SC_ScriptError(NULL);		}		SC_MustGetNumber();		if(sc_Number < 1 || sc_Number > 99)		{ // 			SC_ScriptError(NULL);		}		map = sc_Number;		info = &MapInfo[map];		// Save song lump name		strcpy(songMulch, info->songLump);		// Copy defaults to current map definition		memcpy(info, &MapInfo[0], sizeof(*info));		// Restore song lump name		strcpy(info->songLump, songMulch);		// The warp translation defaults to the map number		info->warpTrans = map;		// Map name must follow the number		SC_MustGetString();		strcpy(info->name, sc_String);		// Process optional tokens		while(SC_GetString())		{			if(SC_Compare("MAP"))			{ // Start next map definition				SC_UnGet();				break;			}			mcmdValue = MapCmdIDs[SC_MustMatchString(MapCmdNames)];			switch(mcmdValue)			{				case MCMD_CLUSTER:					SC_MustGetNumber();					info->cluster = sc_Number;					break;				case MCMD_WARPTRANS:					SC_MustGetNumber();					info->warpTrans = sc_Number;					break;				case MCMD_NEXT:					SC_MustGetNumber();					info->nextMap = sc_Number;					break;				case MCMD_CDTRACK:					SC_MustGetNumber();					info->cdTrack = sc_Number;					break;				case MCMD_SKY1:					SC_MustGetString();					info->sky1Texture = R_TextureNumForName(sc_String);					SC_MustGetNumber();					info->sky1ScrollDelta = sc_Number<<8;					break;				case MCMD_SKY2:					SC_MustGetString();					info->sky2Texture = R_TextureNumForName(sc_String);					SC_MustGetNumber();					info->sky2ScrollDelta = sc_Number<<8;					break;				case MCMD_DOUBLESKY:					info->doubleSky = true;					break;				case MCMD_LIGHTNING:					info->lightning = true;					break;				case MCMD_FADETABLE:					SC_MustGetString();					info->fadetable = W_GetNumForName(sc_String);					break;				case MCMD_CD_STARTTRACK:				case MCMD_CD_END1TRACK:				case MCMD_CD_END2TRACK:				case MCMD_CD_END3TRACK:				case MCMD_CD_INTERTRACK:				case MCMD_CD_TITLETRACK:					SC_MustGetNumber();					cd_NonLevelTracks[mcmdValue-MCMD_CD_STARTTRACK] = 						sc_Number;					break;			}		}		mapMax = map > mapMax ? map : mapMax;	}	SC_Close();	MapCount = mapMax;}//==========================================================================//// P_GetMapCluster////==========================================================================int P_GetMapCluster(int map){	return MapInfo[QualifyMap(map)].cluster;}//==========================================================================//// P_GetMapCDTrack////==========================================================================int P_GetMapCDTrack(int map){	return MapInfo[QualifyMap(map)].cdTrack;}//==========================================================================//// P_GetMapWarpTrans////==========================================================================int P_GetMapWarpTrans(int map){	return MapInfo[QualifyMap(map)].warpTrans;}//==========================================================================//// P_GetMapNextMap////==========================================================================int P_GetMapNextMap(int map){	return MapInfo[QualifyMap(map)].nextMap;}//==========================================================================//// P_TranslateMap//// Returns the actual map number given a warp map number.////==========================================================================int P_TranslateMap(int map){	int i;	for(i = 1; i < 99; i++) // Make this a macro	{		if(MapInfo[i].warpTrans == map)		{			return i;		}	}	// Not found	return -1;}//==========================================================================//// P_GetMapSky1Texture////==========================================================================int P_GetMapSky1Texture(int map){	return MapInfo[QualifyMap(map)].sky1Texture;}//==========================================================================//// P_GetMapSky2Texture////==========================================================================int P_GetMapSky2Texture(int map){	return MapInfo[QualifyMap(map)].sky2Texture;}//==========================================================================//// P_GetMapName////==========================================================================char *P_GetMapName(int map){	return MapInfo[QualifyMap(map)].name;}//==========================================================================//// P_GetMapSky1ScrollDelta////==========================================================================fixed_t P_GetMapSky1ScrollDelta(int map){	return MapInfo[QualifyMap(map)].sky1ScrollDelta;}//==========================================================================//// P_GetMapSky2ScrollDelta////==========================================================================fixed_t P_GetMapSky2ScrollDelta(int map){	return MapInfo[QualifyMap(map)].sky2ScrollDelta;}//==========================================================================//// P_GetMapDoubleSky////==========================================================================boolean P_GetMapDoubleSky(int map){	return MapInfo[QualifyMap(map)].doubleSky;}//==========================================================================//// P_GetMapLightning////==========================================================================boolean P_GetMapLightning(int map){	return MapInfo[QualifyMap(map)].lightning;}//==========================================================================//// P_GetMapFadeTable////==========================================================================boolean P_GetMapFadeTable(int map){	return MapInfo[QualifyMap(map)].fadetable;}//==========================================================================//// P_GetMapSongLump////==========================================================================char *P_GetMapSongLump(int map){	if(!strcasecmp(MapInfo[QualifyMap(map)].songLump, DEFAULT_SONG_LUMP))	{		return NULL;	}	else	{		return MapInfo[QualifyMap(map)].songLump;	}}//==========================================================================//// P_PutMapSongLump////==========================================================================void P_PutMapSongLump(int map, char *lumpName){	if(map < 1 || map > MapCount)	{		return;	}	strcpy(MapInfo[map].songLump, lumpName);}//==========================================================================//// P_GetCDStartTrack////==========================================================================int P_GetCDStartTrack(void){	return cd_NonLevelTracks[MCMD_CD_STARTTRACK-MCMD_CD_STARTTRACK];}//==========================================================================//// P_GetCDEnd1Track////==========================================================================int P_GetCDEnd1Track(void){	return cd_NonLevelTracks[MCMD_CD_END1TRACK-MCMD_CD_STARTTRACK];}//==========================================================================//// P_GetCDEnd2Track////==========================================================================int P_GetCDEnd2Track(void){	return cd_NonLevelTracks[MCMD_CD_END2TRACK-MCMD_CD_STARTTRACK];}//==========================================================================//// P_GetCDEnd3Track////==========================================================================int P_GetCDEnd3Track(void){	return cd_NonLevelTracks[MCMD_CD_END3TRACK-MCMD_CD_STARTTRACK];}//==========================================================================//// P_GetCDIntermissionTrack////==========================================================================int P_GetCDIntermissionTrack(void){	return cd_NonLevelTracks[MCMD_CD_INTERTRACK-MCMD_CD_STARTTRACK];}//==========================================================================//// P_GetCDTitleTrack////==========================================================================int P_GetCDTitleTrack(void){	return cd_NonLevelTracks[MCMD_CD_TITLETRACK-MCMD_CD_STARTTRACK];}//==========================================================================//// QualifyMap////==========================================================================static int QualifyMap(int map){	return (map < 1 || map > MapCount) ? 0 : map;}//==========================================================================//// P_Init////==========================================================================void P_Init(void){	InitMapInfo();	P_InitSwitchList();	P_InitFTAnims(); // Init flat and texture animations	P_InitTerrainTypes();	P_InitLava();	R_InitSprites(sprnames);}// Special early initializer needed to start sound before R_Init()void InitMapMusicInfo(void){	int i;	for (i=0; i<99; i++)	{		strcpy(MapInfo[i].songLump, DEFAULT_SONG_LUMP);	}	MapCount = 98;}/*void My_Debug(void){	int i;	printf("My debug stuff ----------------------\n");	printf("gamemap=%d\n",gamemap);	for (i=0; i<10; i++)	{		printf("i=%d  songlump=%s\n",i,MapInfo[i].songLump);	}}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -