亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? g_main.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
字號(hào):
/*
Copyright (C) 1997-2001 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/

#include "g_local.h"

game_locals_t	game;
level_locals_t	level;
game_import_t	gi;
game_export_t	globals;
spawn_temp_t	st;

int	sm_meat_index;
int	snd_fry;
int meansOfDeath;

edict_t		*g_edicts;

cvar_t	*deathmatch;
cvar_t	*coop;
cvar_t	*dmflags;
cvar_t	*skill;
cvar_t	*fraglimit;
cvar_t	*timelimit;
//ZOID
cvar_t	*capturelimit;
cvar_t	*instantweap;
//ZOID
cvar_t	*password;
cvar_t	*maxclients;
cvar_t	*maxentities;
cvar_t	*g_select_empty;
cvar_t	*dedicated;

cvar_t	*filterban;

cvar_t	*sv_maxvelocity;
cvar_t	*sv_gravity;

cvar_t	*sv_rollspeed;
cvar_t	*sv_rollangle;
cvar_t	*gun_x;
cvar_t	*gun_y;
cvar_t	*gun_z;

cvar_t	*run_pitch;
cvar_t	*run_roll;
cvar_t	*bob_up;
cvar_t	*bob_pitch;
cvar_t	*bob_roll;

cvar_t	*sv_cheats;

cvar_t	*flood_msgs;
cvar_t	*flood_persecond;
cvar_t	*flood_waitdelay;

cvar_t	*sv_maplist;

void SpawnEntities (char *mapname, char *entities, char *spawnpoint);
void ClientThink (edict_t *ent, usercmd_t *cmd);
qboolean ClientConnect (edict_t *ent, char *userinfo);
void ClientUserinfoChanged (edict_t *ent, char *userinfo);
void ClientDisconnect (edict_t *ent);
void ClientBegin (edict_t *ent);
void ClientCommand (edict_t *ent);
void RunEntity (edict_t *ent);
void WriteGame (char *filename, qboolean autosave);
void ReadGame (char *filename);
void WriteLevel (char *filename);
void ReadLevel (char *filename);
void InitGame (void);
void G_RunFrame (void);


//===================================================================


void ShutdownGame (void)
{
	gi.dprintf ("==== ShutdownGame ====\n");

	gi.FreeTags (TAG_LEVEL);
	gi.FreeTags (TAG_GAME);
}


/*
=================
GetGameAPI

Returns a pointer to the structure with all entry points
and global variables
=================
*/
game_export_t *GetGameAPI (game_import_t *import)
{
	gi = *import;

	globals.apiversion = GAME_API_VERSION;
	globals.Init = InitGame;
	globals.Shutdown = ShutdownGame;
	globals.SpawnEntities = SpawnEntities;

	globals.WriteGame = WriteGame;
	globals.ReadGame = ReadGame;
	globals.WriteLevel = WriteLevel;
	globals.ReadLevel = ReadLevel;

	globals.ClientThink = ClientThink;
	globals.ClientConnect = ClientConnect;
	globals.ClientUserinfoChanged = ClientUserinfoChanged;
	globals.ClientDisconnect = ClientDisconnect;
	globals.ClientBegin = ClientBegin;
	globals.ClientCommand = ClientCommand;

	globals.RunFrame = G_RunFrame;

	globals.ServerCommand = ServerCommand;

	globals.edict_size = sizeof(edict_t);

	return &globals;
}

#ifndef GAME_HARD_LINKED
// this is only here so the functions in q_shared.c and q_shwin.c can link
void Sys_Error (char *error, ...)
{
	va_list		argptr;
	char		text[1024];

	va_start (argptr, error);
	vsprintf (text, error, argptr);
	va_end (argptr);

	gi.error (ERR_FATAL, "%s", text);
}

void Com_Printf (char *msg, ...)
{
	va_list		argptr;
	char		text[1024];

	va_start (argptr, msg);
	vsprintf (text, msg, argptr);
	va_end (argptr);

	gi.dprintf ("%s", text);
}

#endif

//======================================================================


/*
=================
ClientEndServerFrames
=================
*/
void ClientEndServerFrames (void)
{
	int		i;
	edict_t	*ent;

	// calc the player views now that all pushing
	// and damage has been added
	for (i=0 ; i<maxclients->value ; i++)
	{
		ent = g_edicts + 1 + i;
		if (!ent->inuse || !ent->client)
			continue;
		ClientEndServerFrame (ent);
	}

}

/*
=================
CreateTargetChangeLevel

Returns the created target changelevel
=================
*/
edict_t *CreateTargetChangeLevel(char *map)
{
	edict_t *ent;

	ent = G_Spawn ();
	ent->classname = "target_changelevel";
	Com_sprintf(level.nextmap, sizeof(level.nextmap), "%s", map);
	ent->map = level.nextmap;
	return ent;
}

/*
=================
EndDMLevel

The timelimit or fraglimit has been exceeded
=================
*/
void EndDMLevel (void)
{
	edict_t		*ent;
	char *s, *t, *f;
	static const char *seps = " ,\n\r";

	// stay on same level flag
	if ((int)dmflags->value & DF_SAME_LEVEL)
	{
		BeginIntermission (CreateTargetChangeLevel (level.mapname) );
		return;
	}

	if (*level.forcemap) {
		BeginIntermission (CreateTargetChangeLevel (level.forcemap) );
		return;
	}

	// see if it's in the map list
	if (*sv_maplist->string) {
		s = strdup(sv_maplist->string);
		f = NULL;
		t = strtok(s, seps);
		while (t != NULL) {
			if (Q_stricmp(t, level.mapname) == 0) {
				// it's in the list, go to the next one
				t = strtok(NULL, seps);
				if (t == NULL) { // end of list, go to first one
					if (f == NULL) // there isn't a first one, same level
						BeginIntermission (CreateTargetChangeLevel (level.mapname) );
					else
						BeginIntermission (CreateTargetChangeLevel (f) );
				} else
					BeginIntermission (CreateTargetChangeLevel (t) );
				free(s);
				return;
			}
			if (!f)
				f = t;
			t = strtok(NULL, seps);
		}
		free(s);
	}

	if (level.nextmap[0]) // go to a specific map
		BeginIntermission (CreateTargetChangeLevel (level.nextmap) );
	else {	// search for a changelevel
		ent = G_Find (NULL, FOFS(classname), "target_changelevel");
		if (!ent)
		{	// the map designer didn't include a changelevel,
			// so create a fake ent that goes back to the same level
			BeginIntermission (CreateTargetChangeLevel (level.mapname) );
			return;
		}
		BeginIntermission (ent);
	}
}

/*
=================
CheckDMRules
=================
*/
void CheckDMRules (void)
{
	int			i;
	gclient_t	*cl;

	if (level.intermissiontime)
		return;

	if (!deathmatch->value)
		return;

//ZOID
	if (ctf->value && CTFCheckRules()) {
		EndDMLevel ();
		return;
	}
	if (CTFInMatch())
		return; // no checking in match mode
//ZOID

	if (timelimit->value)
	{
		if (level.time >= timelimit->value*60)
		{
			gi.bprintf (PRINT_HIGH, "Timelimit hit.\n");
			EndDMLevel ();
			return;
		}
	}

	if (fraglimit->value)
		for (i=0 ; i<maxclients->value ; i++)
		{
			cl = game.clients + i;
			if (!g_edicts[i+1].inuse)
				continue;

			if (cl->resp.score >= fraglimit->value)
			{
				gi.bprintf (PRINT_HIGH, "Fraglimit hit.\n");
				EndDMLevel ();
				return;
			}
		}
}


/*
=============
ExitLevel
=============
*/
void ExitLevel (void)
{
	int		i;
	edict_t	*ent;
	char	command [256];

	level.exitintermission = 0;
	level.intermissiontime = 0;

	if (CTFNextMap())
		return;

	Com_sprintf (command, sizeof(command), "gamemap \"%s\"\n", level.changemap);
	gi.AddCommandString (command);
	ClientEndServerFrames ();

	level.changemap = NULL;

	// clear some things before going to next level
	for (i=0 ; i<maxclients->value ; i++)
	{
		ent = g_edicts + 1 + i;
		if (!ent->inuse)
			continue;
		if (ent->health > ent->client->pers.max_health)
			ent->health = ent->client->pers.max_health;
	}
}

/*
================
G_RunFrame

Advances the world by 0.1 seconds
================
*/
void G_RunFrame (void)
{
	int		i;
	edict_t	*ent;

	level.framenum++;
	level.time = level.framenum*FRAMETIME;

	// choose a client for monsters to target this frame
	AI_SetSightClient ();

	// exit intermissions

	if (level.exitintermission)
	{
		ExitLevel ();
		return;
	}

	//
	// treat each object in turn
	// even the world gets a chance to think
	//
	ent = &g_edicts[0];
	for (i=0 ; i<globals.num_edicts ; i++, ent++)
	{
		if (!ent->inuse)
			continue;

		level.current_entity = ent;

		VectorCopy (ent->s.origin, ent->s.old_origin);

		// if the ground entity moved, make sure we are still on it
		if ((ent->groundentity) && (ent->groundentity->linkcount != ent->groundentity_linkcount))
		{
			ent->groundentity = NULL;
			if ( !(ent->flags & (FL_SWIM|FL_FLY)) && (ent->svflags & SVF_MONSTER) )
			{
				M_CheckGround (ent);
			}
		}

		if (i > 0 && i <= maxclients->value)
		{
			ClientBeginServerFrame (ent);
			continue;
		}

		G_RunEntity (ent);
	}

	// see if it is time to end a deathmatch
	CheckDMRules ();

	// build the playerstate_t structures for all players
	ClientEndServerFrames ();
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品自拍偷拍| 欧美三级日韩三级| 欧美精品一区二区三区四区| 日本三级亚洲精品| 5858s免费视频成人| 久久精工是国产品牌吗| 欧美videos中文字幕| 国产一区二区三区免费播放| 国产女人18毛片水真多成人如厕| 丁香啪啪综合成人亚洲小说 | 亚洲精品成人a在线观看| 不卡一区二区在线| 亚洲人一二三区| 欧美日韩免费一区二区三区| 久热成人在线视频| 国产欧美精品一区二区三区四区 | 亚洲精品视频在线观看网站| 欧美色图天堂网| 美女被吸乳得到大胸91| 国产欧美一二三区| 色又黄又爽网站www久久| 日产欧产美韩系列久久99| 26uuu国产一区二区三区| hitomi一区二区三区精品| 亚洲电影你懂得| 久久久久久电影| 色88888久久久久久影院野外 | **欧美大码日韩| 欧美精品一卡二卡| 丰满少妇在线播放bd日韩电影| 亚洲美腿欧美偷拍| 2024国产精品视频| 欧美性视频一区二区三区| 国产一区二区三区免费播放| 亚洲一区二区在线播放相泽| 久久青草国产手机看片福利盒子 | 亚洲最新在线观看| 久久久一区二区三区| 91黄视频在线| 国产精品一二一区| 日韩电影在线免费观看| 国产精品传媒视频| 欧美草草影院在线视频| 欧美性受xxxx| 波多野结衣亚洲| 精品一区二区影视| 午夜精品久久久久久久久| 国产精品久久久久久久久免费樱桃| 91精品国产综合久久蜜臀| 一本一道久久a久久精品| 国产成人综合在线| 日韩影院在线观看| 亚洲最新视频在线观看| 中文字幕av一区二区三区免费看| 在线成人免费视频| 欧美性三三影院| 风间由美一区二区av101| 久久国产乱子精品免费女| 五月婷婷综合在线| 亚洲自拍都市欧美小说| 亚洲精品写真福利| 亚洲视频免费在线观看| 国产精品天天摸av网| 久久久精品国产免费观看同学| 欧美一区二区在线看| 欧美精品亚洲二区| 欧美午夜电影网| 欧洲国内综合视频| 日本韩国欧美一区二区三区| 成人毛片视频在线观看| 成人一级视频在线观看| 国产激情视频一区二区三区欧美 | 国产精品自拍一区| 国产伦精品一区二区三区视频青涩| 青青青伊人色综合久久| 日韩国产欧美三级| 美女视频免费一区| 精品一区二区三区香蕉蜜桃| 美女任你摸久久| 狠狠色2019综合网| 国产一二三精品| 国产高清久久久久| www.日韩大片| 色婷婷亚洲婷婷| 欧美在线观看视频一区二区| 欧美日韩高清一区二区三区| 欧美日韩国产综合草草| 91麻豆精品国产91久久久| 欧美一区二区免费| 精品国产伦一区二区三区观看方式 | 国产九色sp调教91| 国产不卡在线一区| 91麻豆国产香蕉久久精品| 一本色道亚洲精品aⅴ| 欧美影视一区在线| 欧美久久一区二区| 精品国产凹凸成av人导航| 久久精品一区二区三区av | 国产精品国产自产拍在线| 综合色中文字幕| 婷婷亚洲久悠悠色悠在线播放| 日本亚洲免费观看| 国产成人精品一区二区三区四区| 不卡的av中国片| 欧美日韩精品一区二区| 久久综合成人精品亚洲另类欧美 | 国产成人在线视频免费播放| 成人精品小蝌蚪| 欧美日韩中文精品| 欧美精品一区二区三区蜜臀| 中文字幕av一区二区三区免费看| 一区二区三区精品视频在线| 捆绑紧缚一区二区三区视频| 成人午夜激情影院| 欧美日韩国产精选| 国产视频一区二区在线| 亚洲久本草在线中文字幕| 丝袜脚交一区二区| 风流少妇一区二区| 91精品中文字幕一区二区三区| 久久九九久精品国产免费直播| 亚洲免费看黄网站| 激情图区综合网| 色婷婷精品大视频在线蜜桃视频| 欧美电影免费观看高清完整版在线观看 | 日本高清不卡视频| 日韩精品一区二区三区视频| 中文字幕一区二区三区色视频| 日韩黄色一级片| av电影在线不卡| 日韩欧美你懂的| 亚洲精品国产一区二区精华液| 久久电影网电视剧免费观看| 欧美综合视频在线观看| 国产欧美精品区一区二区三区| 亚洲国产一区二区a毛片| 成人伦理片在线| 2022国产精品视频| 日本不卡一区二区| 欧美三级午夜理伦三级中视频| 国产网红主播福利一区二区| 日本aⅴ亚洲精品中文乱码| 91九色最新地址| 国产精品麻豆欧美日韩ww| 久久国产麻豆精品| 欧美一区二区三区免费在线看| 一区二区三区四区国产精品| 成人综合婷婷国产精品久久蜜臀| 欧美一区二区黄| 日韩电影在线一区| 欧美日韩国产另类不卡| 一区二区三区不卡视频在线观看| 国产成人精品亚洲日本在线桃色| 精品av久久707| 蜜桃久久久久久| 欧美精品视频www在线观看| 亚洲444eee在线观看| 在线国产亚洲欧美| 一区二区三区免费网站| 91女厕偷拍女厕偷拍高清| 欧美—级在线免费片| 高清不卡在线观看av| 国产精品嫩草99a| 成人美女视频在线看| 国产精品乱码一区二区三区软件| 久久99久久精品欧美| 亚洲精品一区二区三区福利| 久久国产人妖系列| 久久久国产精品不卡| 高清不卡一区二区在线| 国产精品久久久久aaaa| av成人免费在线观看| 亚洲欧美一区二区不卡| 色欧美片视频在线观看| 亚洲国产婷婷综合在线精品| 精品视频在线免费看| 三级精品在线观看| 日韩欧美高清一区| 国产一区二区免费视频| 国产免费成人在线视频| av不卡在线播放| 亚洲高清不卡在线| 日韩一区二区电影| 国产高清精品网站| 中文字幕一区二区三区在线播放| 91玉足脚交白嫩脚丫在线播放| 亚洲视频一二区| 欧美色综合网站| 美女网站在线免费欧美精品| 久久久久国产精品厨房| 91麻豆国产自产在线观看| 午夜伦理一区二区| 久久女同互慰一区二区三区| 99九九99九九九视频精品| 亚洲一区二区影院| 亚洲精品一区二区三区影院| 成人av先锋影音| 日韩精彩视频在线观看| 日本一区二区电影| 欧美日韩精品系列|