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

📄 p_setup.c

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 C
📖 第 1 页 / 共 2 页
字号:
// Emacs style mode select   -*- C++ -*- //-----------------------------------------------------------------------------//// $Id: p_setup.c,v 1.2 2003/09/08 22:34:30 jasonk Exp $//// Copyright (C) 1993-1996 by id Software, Inc.//// This source is available for distribution and/or modification// only under the terms of the DOOM Source Code License as// published by id Software. All rights reserved.//// The source is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License// for more details.//// $Log: p_setup.c,v $// Revision 1.2  2003/09/08 22:34:30  jasonk// Updated files because this fucker won't build for no fucking good reason.//// Revision 1.1.1.1  2003/09/04 21:08:13  jasonk// Initial import//// Revision 1.1  2000/12/08 21:07:54  jeffw// nxdoom initial entry -- No nxdoom/Makefile so it won't build automatically////// DESCRIPTION://	Do all the WAD I/O, get map description,//	set up initial state and misc. LUTs.////-----------------------------------------------------------------------------static const charrcsid[] = "$Id: p_setup.c,v 1.2 2003/09/08 22:34:30 jasonk Exp $";#include <math.h>#include "z_zone.h"#include "m_swap.h"#include "m_bbox.h"#include "g_game.h"#include "i_system.h"#include "w_wad.h"#include "doomdef.h"#include "p_local.h"#include "s_sound.h"#include "doomstat.h"void	P_SpawnMapThing (mapthing_t*	mthing);//// MAP related Lookup tables.// Store VERTEXES, LINEDEFS, SIDEDEFS, etc.//int		numvertexes;vertex_t*	vertexes;int		numsegs;seg_t*		segs;int		numsectors;sector_t*	sectors;int		numsubsectors;subsector_t*	subsectors;int		numnodes;node_t*		nodes;int		numlines;line_t*		lines;int		numsides;side_t*		sides;// BLOCKMAP// Created from axis aligned bounding box// of the map, a rectangular array of// blocks of size ...// Used to speed up collision detection// by spatial subdivision in 2D.//// Blockmap size.int		bmapwidth;int		bmapheight;	// size in mapblocksshort*		blockmap;	// int for larger maps// offsets in blockmap are from hereshort*		blockmaplump;		// origin of block mapfixed_t		bmaporgx;fixed_t		bmaporgy;// for thing chainsmobj_t**	blocklinks;		// REJECT// For fast sight rejection.// Speeds up enemy AI by skipping detailed//  LineOf Sight calculation.// Without special effect, this could be//  used as a PVS lookup as well.//byte*		rejectmatrix;// Maintain single and multi player starting spots.#define MAX_DEATHMATCH_STARTS	10mapthing_t	deathmatchstarts[MAX_DEATHMATCH_STARTS];mapthing_t*	deathmatch_p;mapthing_t	playerstarts[MAXPLAYERS];//// P_LoadVertexes//void P_LoadVertexes (int lump){    byte*		data;    int			i;    mapvertex_t*	ml;    vertex_t*		li;    // Determine number of lumps:    //  total lump length / vertex record length.    numvertexes = W_LumpLength (lump) / sizeof(mapvertex_t);    // Allocate zone memory for buffer.    vertexes = Z_Malloc (numvertexes*sizeof(vertex_t),PU_LEVEL,0);	    // Load data into cache.    data = W_CacheLumpNum (lump,PU_STATIC);	    ml = (mapvertex_t *)data;    li = vertexes;    // Copy and convert vertex coordinates,    // internal representation as fixed.    for (i=0 ; i<numvertexes ; i++, li++, ml++)    {	li->x = SHORT(ml->x)<<FRACBITS;	li->y = SHORT(ml->y)<<FRACBITS;    }    // Free buffer memory.    Z_Free (data);}//// P_LoadSegs//void P_LoadSegs (int lump){    byte*		data;    int			i;    mapseg_t*		ml;    seg_t*		li;    line_t*		ldef;    int			linedef;    int			side;	    numsegs = W_LumpLength (lump) / sizeof(mapseg_t);    segs = Z_Malloc (numsegs*sizeof(seg_t),PU_LEVEL,0);	    memset (segs, 0, numsegs*sizeof(seg_t));    data = W_CacheLumpNum (lump,PU_STATIC);	    ml = (mapseg_t *)data;    li = segs;    for (i=0 ; i<numsegs ; i++, li++, ml++)    {	li->v1 = &vertexes[SHORT(ml->v1)];	li->v2 = &vertexes[SHORT(ml->v2)];						li->angle = (SHORT(ml->angle))<<16;	li->offset = (SHORT(ml->offset))<<16;	linedef = SHORT(ml->linedef);	ldef = &lines[linedef];	li->linedef = ldef;	side = SHORT(ml->side);	li->sidedef = &sides[ldef->sidenum[side]];	li->frontsector = sides[ldef->sidenum[side]].sector;	if (ldef-> flags & ML_TWOSIDED)	    li->backsector = sides[ldef->sidenum[side^1]].sector;	else	    li->backsector = 0;    }	    Z_Free (data);}//// P_LoadSubsectors//void P_LoadSubsectors (int lump){    byte*		data;    int			i;    mapsubsector_t*	ms;    subsector_t*	ss;	    numsubsectors = W_LumpLength (lump) / sizeof(mapsubsector_t);    subsectors = Z_Malloc (numsubsectors*sizeof(subsector_t),PU_LEVEL,0);	    data = W_CacheLumpNum (lump,PU_STATIC);	    ms = (mapsubsector_t *)data;    memset (subsectors,0, numsubsectors*sizeof(subsector_t));    ss = subsectors;        for (i=0 ; i<numsubsectors ; i++, ss++, ms++)    {	ss->numlines = SHORT(ms->numsegs);	ss->firstline = SHORT(ms->firstseg);    }	    Z_Free (data);}//// P_LoadSectors//void P_LoadSectors (int lump){    byte*		data;    int			i;    mapsector_t*	ms;    sector_t*		ss;	    numsectors = W_LumpLength (lump) / sizeof(mapsector_t);    sectors = Z_Malloc (numsectors*sizeof(sector_t),PU_LEVEL,0);	    memset (sectors, 0, numsectors*sizeof(sector_t));    data = W_CacheLumpNum (lump,PU_STATIC);	    ms = (mapsector_t *)data;    ss = sectors;    for (i=0 ; i<numsectors ; i++, ss++, ms++)    {	ss->floorheight = SHORT(ms->floorheight)<<FRACBITS;	ss->ceilingheight = SHORT(ms->ceilingheight)<<FRACBITS;	ss->floorpic = R_FlatNumForName(ms->floorpic);	ss->ceilingpic = R_FlatNumForName(ms->ceilingpic);	ss->lightlevel = SHORT(ms->lightlevel);	ss->special = SHORT(ms->special);	ss->tag = SHORT(ms->tag);	ss->thinglist = NULL;    }	    Z_Free (data);}//// P_LoadNodes//void P_LoadNodes (int lump){    byte*	data;    int		i;    int		j;    int		k;    mapnode_t*	mn;    node_t*	no;	    numnodes = W_LumpLength (lump) / sizeof(mapnode_t);    nodes = Z_Malloc (numnodes*sizeof(node_t),PU_LEVEL,0);	    data = W_CacheLumpNum (lump,PU_STATIC);	    mn = (mapnode_t *)data;    no = nodes;        for (i=0 ; i<numnodes ; i++, no++, mn++)    {	no->x = SHORT(mn->x)<<FRACBITS;	no->y = SHORT(mn->y)<<FRACBITS;	no->dx = SHORT(mn->dx)<<FRACBITS;	no->dy = SHORT(mn->dy)<<FRACBITS;	for (j=0 ; j<2 ; j++)	{	    no->children[j] = SHORT(mn->children[j]);	    for (k=0 ; k<4 ; k++)		no->bbox[j][k] = SHORT(mn->bbox[j][k])<<FRACBITS;	}    }	    Z_Free (data);}//// P_LoadThings//void P_LoadThings (int lump){    byte*		data;    int			i;    mapthing_t*		mt;    int			numthings;    boolean		spawn;	    data = W_CacheLumpNum (lump,PU_STATIC);    numthings = W_LumpLength (lump) / sizeof(mapthing_t);	    mt = (mapthing_t *)data;    for (i=0 ; i<numthings ; i++, mt++)    {	spawn = true;	// Do not spawn cool, new monsters if !commercial	if ( gamemode != commercial)	{	    switch(mt->type)	    {	      case 68:	// Arachnotron	      case 64:	// Archvile	      case 88:	// Boss Brain	      case 89:	// Boss Shooter	      case 69:	// Hell Knight	      case 67:	// Mancubus	      case 71:	// Pain Elemental	      case 65:	// Former Human Commando	      case 66:	// Revenant	      case 84:	// Wolf SS		spawn = false;		break;	    }	}	if (spawn == false)	    break;	// Do spawn all other stuff. 	mt->x = SHORT(mt->x);	mt->y = SHORT(mt->y);	mt->angle = SHORT(mt->angle);	mt->type = SHORT(mt->type);	mt->options = SHORT(mt->options);		P_SpawnMapThing (mt);    }	    Z_Free (data);}

⌨️ 快捷键说明

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