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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? g_game.c

?? 游戲類(lèi)程序源代碼---WinDoom 3D源程序.zip
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
// Emacs style mode select   -*- C++ -*- 
//-----------------------------------------------------------------------------
//
// $Id:$
//
// 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:$
//
// DESCRIPTION:  none
//
//-----------------------------------------------------------------------------


static const char
rcsid[] = "$Id: g_game.c,v 1.8 1997/02/03 22:45:09 b1 Exp $";

#include <string.h>
#include <stdlib.h>

#include "doomdef.h" 
#include "doomstat.h"

#include "z_zone.h"
#include "f_finale.h"
#include "m_argv.h"
#include "m_misc.h"
#include "m_menu.h"
#include "m_random.h"
#include "i_system.h"

#include "p_setup.h"
#include "p_saveg.h"
#include "p_tick.h"

#include "d_main.h"

#include "wi_stuff.h"
#include "hu_stuff.h"
#include "st_stuff.h"
#include "am_map.h"

// Needs access to LFB.
#include "v_video.h"

#include "w_wad.h"

#include "p_local.h" 

#include "s_sound.h"

// Data.
#include "dstrings.h"
#include "sounds.h"

// SKY handling - still the wrong place.
#include "r_data.h"
#include "r_sky.h"



#include "g_game.h"


#define SAVEGAMESIZE	0x2c000
#define SAVESTRINGSIZE	24

void WriteDebug(char *);
char MsgText[256];

boolean	G_CheckDemoStatus (void); 
void	G_ReadDemoTiccmd (ticcmd_t* cmd); 
void	G_WriteDemoTiccmd (ticcmd_t* cmd); 
void	G_PlayerReborn (int player); 
void	G_InitNew (skill_t skill, int episode, int map); 
 
void	G_DoReborn (int playernum); 
 
void	G_DoLoadLevel (void); 
void	G_DoNewGame (void); 
void	G_DoLoadGame (void); 
void	G_DoPlayDemo (void); 
void	G_DoPlayDemo_II(void); 
void	G_DoCompleted (void); 
void	G_DoVictory (void); 
void	G_DoWorldDone (void); 
void	G_DoSaveGame (void); 
 
 
gameaction_t    gameaction; 
gamestate_t     gamestate; 
skill_t         gameskill; 
boolean		respawnmonsters;
int             gameepisode; 
int             gamemap; 
 
boolean         paused; 
boolean         sendpause;             	// send a pause event next tic 
boolean         sendsave;             	// send a save event next tic 
boolean         usergame;               // ok to save / end game 
 
boolean         timingdemo;             // if true, exit with report on completion 
boolean         nodrawers;              // for comparative timing purposes 
boolean         noblit;                 // for comparative timing purposes 
int             starttime;          	// for comparative timing purposes  	 
 
boolean         viewactive; 
 
boolean         deathmatch;           	// only if started as net death 
boolean         netgame;                // only true if packets are broadcast 
boolean         playeringame[MAXPLAYERS]; 
player_t        players[MAXPLAYERS]; 
 
int             consoleplayer;          // player taking events and displaying 
int             displayplayer;          // view being displayed 
int             gametic; 
int             levelstarttic;          // gametic at level start 
int             totalkills, totalitems, totalsecret;    // for intermission 
 
char            demoname[32]; 
int             demotype; 
boolean         demorecording; 
boolean         demoplayback; 
boolean		netdemo; 
byte*		demobuffer;
byte*		demo_p;
byte*		demoend; 
boolean         singledemo;            	// quit after playing a demo from cmdline 
 
boolean         precache = true;        // if true, load all graphics at start 
 
wbstartstruct_t wminfo;               	// parms for world map / intermission 
 
short		consistancy[MAXPLAYERS][BACKUPTICS]; 
 
byte*		savebuffer;
 
 
// 
// controls (have defaults) 
// 
int     key_right;
int		key_left;

int		key_up;
int		key_down; 
int     key_strafeleft;
int	    key_straferight; 
int     key_fire;
int		key_use;
int		key_strafe;
int     key_speed; 

int     key_mvert;
 
int     mousebfire; 
int     mousebstrafe; 
int     mousebforward; 
 
int     mouseb1;
int     mouseb2;
int     mouseb3;

int     joybfire; 
int     joybstrafe; 
int     joybuse; 
int     joybspeed; 

int     joyb1;
int     joyb2;
int     joyb3;
int     joyb4;
 
int     always_run;
int     swap_stereo;
int     mvert;
int     keylink;
int     link_alt;
 
#define MAXPLMOVE		(forwardmove[1]) 
 
#define TURBOTHRESHOLD	0x32

fixed_t		forwardmove[2] = {0x19, 0x32};
fixed_t		sidemove[2] = {0x18, 0x28}; 
fixed_t		angleturn[3] = {640, 1280, 320};	// + slow turn 

#define SLOWTURNTICS	6 
 
#define NUMKEYS		256 

boolean         gamekeydown[NUMKEYS]; 
int             turnheld;				// for accelerative turning 
 
boolean		mousearray[4]; 
boolean*	mousebuttons = &mousearray[1];		// allow [-1]

// mouse values are used once 
int             mousex;
int		mousey;         

int             dclicktime;
int		dclickstate;
int		dclicks; 
int             dclicktime2;
int		dclickstate2;
int		dclicks2;

// joystick values are repeated 
int             joyxmove;
int		joyymove;
boolean         joyarray[5]; 
boolean*	joybuttons = &joyarray[1];		// allow [-1] 
 
int		savegameslot; 
char		savedescription[32]; 
 
 
#define	BODYQUESIZE	32

mobj_t*		bodyque[BODYQUESIZE]; 
int		bodyqueslot; 
 
void*		statcopy;				// for statistics driver

// DQ start addition 
extern int gEyePixelOffset;
extern long ScreensYLookup[];
extern BUFFER gRenderBuffer;
// DQ end addition
 
 
int G_CmdChecksum (ticcmd_t* cmd) 
{ 
    int		i;
    int		sum = 0; 
	 
    for (i=0 ; i< sizeof(*cmd)/4 - 1 ; i++) 
	sum += ((int *)cmd)[i]; 
		 
    return sum; 
} 
 

//
// G_BuildTiccmd
// Builds a ticcmd from all of the available inputs
// or reads it from the demo buffer. 
// If recording a demo, write it out 
// 
void G_BuildTiccmd (ticcmd_t* cmd) 
   { 
    int       i; 
    boolean   strafe;
    boolean   bstrafe; 
    int       speed;
    int       tspeed; 
    int       forward;
    int       side;
    ticcmd_t *base;


    base = I_BaseTiccmd ();		// empty, or external driver
    memcpy (cmd,base,sizeof(*cmd)); 
	
    cmd->consistancy = consistancy[consoleplayer][maketic%BACKUPTICS]; 
 
    strafe = gamekeydown[key_strafe] || mousebuttons[mousebstrafe] || joybuttons[joybstrafe]; 
    if ((joybspeed == 31) || (always_run == TRUE))
       speed = 1;
    else
       speed = gamekeydown[key_speed] || joybuttons[joybspeed];
    
 
    forward = side = 0;
    
    // use two stage accelerative turning on the keyboard and joystick
    if (joyxmove < 0 || joyxmove > 0 || gamekeydown[key_right] || gamekeydown[key_left]) 
        turnheld += ticdup; 
    else 
        turnheld = 0; 

    if (turnheld < SLOWTURNTICS) 
        tspeed = 2;             // slow turn 
    else 
        tspeed = speed;
    
    // let movement keys cancel each other out
    if (strafe) 
       { 
        if (gamekeydown[key_right]) 
           {
            // fprintf(stderr, "strafe right\n");
            side += sidemove[speed]; 
           }
        if (gamekeydown[key_left]) 
           {
            // fprintf(stderr, "strafe left\n");
            side -= sidemove[speed]; 
           }
        if (joyxmove > 0) 
            side += sidemove[speed]; 
        if (joyxmove < 0) 
            side -= sidemove[speed]; 
       } 
    else 
       { 
        if (gamekeydown[key_right]) 
            cmd->angleturn -= angleturn[tspeed]; 
        if (gamekeydown[key_left]) 
            cmd->angleturn += angleturn[tspeed]; 
        if (joyxmove > 0) 
            cmd->angleturn -= angleturn[tspeed]; 
        if (joyxmove < 0) 
            cmd->angleturn += angleturn[tspeed]; 
       } 
 
    if (gamekeydown[key_up]) 
       {
        // fprintf(stderr, "up\n");
        forward += forwardmove[speed]; 
       }
    if (gamekeydown[key_down]) 
       {
        // fprintf(stderr, "down\n");
        forward -= forwardmove[speed]; 
       }
    if (joyymove < 0) 
        forward += forwardmove[speed]; 
    if (joyymove > 0) 
        forward -= forwardmove[speed]; 
    if (gamekeydown[key_straferight]) 
        side += sidemove[speed]; 
    if (gamekeydown[key_strafeleft]) 
        side -= sidemove[speed];
    
    // buttons
    cmd->chatchar = HU_dequeueChatChar(); 
 
    if (gamekeydown[key_fire] || mousebuttons[mousebfire] || joybuttons[joybfire]) 
       {
        cmd->buttons |= BT_ATTACK;
       }
 
    if (gamekeydown[key_use] || joybuttons[joybuse] ) 
       { 
        cmd->buttons |= BT_USE;
        // clear double clicks if hit use button 
        dclicks = 0;                   
       } 

    // chainsaw overrides 
    for (i = 0; i < NUMWEAPONS-1; i++)
        if (gamekeydown[KEY_1+i])
           { 
            cmd->buttons |= BT_CHANGE; 
            cmd->buttons |= i<<BT_WEAPONSHIFT; 
            break; 
           }
    
    // mouse
    if (mousebuttons[mousebforward]) 
        forward += forwardmove[speed];
    
    // forward double click
    if (mousebuttons[mousebforward] != dclickstate && dclicktime > 1 ) 
       { 
        dclickstate = mousebuttons[mousebforward]; 
        if (dclickstate) 
            dclicks++; 
        if (dclicks == 2) 
           { 
            cmd->buttons |= BT_USE; 
            dclicks = 0; 
           } 
        else 
            dclicktime = 0; 
       } 
    else 
       { 
        dclicktime += ticdup; 
        if (dclicktime > 20) 
           { 
            dclicks = 0; 
            dclickstate = 0; 
           } 
       }
    
    // strafe double click
    bstrafe = mousebuttons[mousebstrafe] || joybuttons[joybstrafe]; 
    if (bstrafe != dclickstate2 && dclicktime2 > 1 ) 
       { 
        dclickstate2 = bstrafe; 
        if (dclickstate2) 
            dclicks2++; 
        if (dclicks2 == 2) 
           { 
            cmd->buttons |= BT_USE; 
            dclicks2 = 0; 
           } 
        else 
           dclicktime2 = 0; 
       } 
    else 
       { 
        dclicktime2 += ticdup; 
        if (dclicktime2 > 20) 
           { 
            dclicks2 = 0; 
            dclickstate2 = 0; 
           } 
       } 
 
    forward += mousey; 
    if (strafe) 
        side += mousex*2; 
    else 
        cmd->angleturn -= mousex*0x8; 

    mousex = mousey = 0;
	 
    if (forward > MAXPLMOVE) 
        forward = MAXPLMOVE; 
    else
    if (forward < -MAXPLMOVE) 
        forward = -MAXPLMOVE; 
    if (side > MAXPLMOVE) 
        side = MAXPLMOVE; 
    else
    if (side < -MAXPLMOVE) 
        side = -MAXPLMOVE; 
 
    cmd->forwardmove += forward; 
    cmd->sidemove += side;
    
    // special buttons
    if (sendpause)
       { 
        sendpause = false; 
        cmd->buttons = BT_SPECIAL | BTS_PAUSE; 
       } 
 
    if (sendsave)
       { 
        sendsave = false; 
        cmd->buttons = BT_SPECIAL | BTS_SAVEGAME | (savegameslot << BTS_SAVESHIFT); 
       } 
   } 
 

//
// G_DoLoadLevel 
//
extern  gamestate_t     wipegamestate; 
 
void G_DoLoadLevel (void) 
{ 
    int             i; 
	 BUFFER			  TempBuffer;

    // Set the sky map.
    // First thing, we have a dummy sky texture name,
    //  a flat. The data is in the WAD only because
    //  we look for an actual index, instead of simply
    //  setting one.
    skyflatnum = R_FlatNumForName ( SKYFLATNAME );

    // DOOM determines the sky texture to be used
    // depending on the current episode, and the game version.
    if ( (gamemode == commercial) // Doom II
	 || ( gamemode == addon_tnt )
	 || ( gamemode == addon_plut ) )
    {
	skytexture = R_TextureNumForName ("SKY3");
	if (gamemap < 12)
	    skytexture = R_TextureNumForName ("SKY1");
	else
	    if (gamemap < 21)
		skytexture = R_TextureNumForName ("SKY2");
    //WriteDebug("Sky set...\n");
    }

    levelstarttic = gametic;        // for time calculation
    
    if (wipegamestate == GS_LEVEL) 
	wipegamestate = -1;             // force a wipe 

    gamestate = GS_LEVEL; 

    for (i=0 ; i<MAXPLAYERS ; i++) 
    { 
	if (playeringame[i] && players[i].playerstate == PST_DEAD) 
	    players[i].playerstate = PST_REBORN; 
	memset (players[i].frags,0,sizeof(players[i].frags)); 
    } 
		 
    //WriteDebug("P_SetupLevel\n");
    P_SetupLevel (gameepisode, gamemap, 0, gameskill);    
    displayplayer = consoleplayer;		// view the guy you are playing    
    starttime = I_GetTime (); 
    gameaction = ga_nothing; 
    //WriteDebug("Z_CheckHeap\n");
    Z_CheckHeap ();
    
    // clear cmd building stuff
    memset (gamekeydown, 0, sizeof(gamekeydown)); 
    joyxmove = joyymove = 0; 
    mousex = mousey = 0; 
    sendpause = sendsave = paused = false; 
    memset (mousebuttons, 0, sizeof(mousebuttons)); 
    memset (joybuttons, 0, sizeof(joybuttons)); 
    //WriteDebug("G_DoLoadLevel done\n");
	 TempBuffer.Buffer = screens[1]; // DQ - background screens
	 TempBuffer.YLookup = ScreensYLookup; // DQ
    R_FillBackScreen(&TempBuffer/*DQ*/);

} 
 
 
//
// G_Responder  
// Get info needed to make ticcmd_ts for the players.
// 
boolean G_Responder(event_t* ev) 
   { 
    // allow spy mode changes even during the demo
    if (gamestate == GS_LEVEL && ev->type == ev_keydown && ev->data1 == KEY_F12 && (singledemo || !deathmatch))
       {
        // spy mode 
        do 
           { 
            displayplayer++; 
            if (displayplayer == MAXPLAYERS) 
                displayplayer = 0; 
            }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产美| 狠狠色狠狠色合久久伊人| 午夜电影一区二区三区| 久久99久国产精品黄毛片色诱| 国产成人免费在线观看| 91一区一区三区| 67194成人在线观看| 久久久av毛片精品| 亚洲曰韩产成在线| 精品在线播放午夜| 91免费版在线| 日韩一卡二卡三卡| 国产精品第13页| 日日摸夜夜添夜夜添国产精品| 国内精品伊人久久久久av一坑| 色综合婷婷久久| 日韩精品一区国产麻豆| 中文字幕在线观看不卡视频| 秋霞影院一区二区| 99久久精品情趣| 日韩区在线观看| 亚洲精品美腿丝袜| 激情欧美一区二区三区在线观看| 色综合一区二区| 久久精品网站免费观看| 午夜成人免费视频| 成人av午夜电影| 日韩一区二区在线播放| 亚洲人成网站精品片在线观看| 久久福利视频一区二区| 91精品福利视频| 国产欧美日韩在线视频| 日本最新不卡在线| 91在线视频观看| 欧美成人a在线| 亚洲国产欧美在线| 波多野结衣在线一区| 欧美电影免费提供在线观看| 亚洲一区二区三区在线看| 成人国产亚洲欧美成人综合网| 欧美岛国在线观看| 午夜精品123| 色丁香久综合在线久综合在线观看| 国产性做久久久久久| 日韩精品视频网站| 欧美午夜不卡在线观看免费| 国产精品乱人伦中文| 国内成人自拍视频| 日韩欧美国产午夜精品| 亚洲一区二区黄色| 色国产综合视频| 亚洲欧美日韩电影| 成人免费毛片片v| 久久综合色婷婷| 青青草原综合久久大伊人精品优势| 日本电影欧美片| 中文字幕在线一区| 不卡的av电影| 国产日韩精品视频一区| 国产精品中文字幕一区二区三区| 欧美一二三区在线| 日韩精品色哟哟| 在线不卡免费欧美| 午夜久久久久久久久久一区二区| 色噜噜狠狠成人中文综合| 亚洲天堂av老司机| 成人免费视频视频在线观看免费| 久久久噜噜噜久噜久久综合| 国产麻豆成人传媒免费观看| 精品国产自在久精品国产| 蜜桃视频免费观看一区| 欧美一区三区二区| 欧美a一区二区| 精品久久久久久久久久久久久久久久久| 丝袜a∨在线一区二区三区不卡| 欧美日韩国产a| 亚洲主播在线播放| 欧美午夜寂寞影院| 三级一区在线视频先锋 | 欧美一区二区在线免费播放| 亚洲国产成人porn| 欧美一区二区视频免费观看| 青青草国产成人av片免费| 日韩欧美一级精品久久| 久久狠狠亚洲综合| 久久精品亚洲精品国产欧美kt∨| 国产成人啪午夜精品网站男同| 国产精品欧美一区喷水| 99在线热播精品免费| 洋洋av久久久久久久一区| 欧美日本在线观看| 蜜臀久久久久久久| 久久先锋影音av鲁色资源| 国产成人精品影院| 亚洲欧美自拍偷拍| 欧美中文字幕久久| 美女精品一区二区| 国产日韩三级在线| 色综合网色综合| 视频一区欧美日韩| 亚洲精品在线一区二区| 国产aⅴ综合色| 亚洲综合色噜噜狠狠| 日韩一区和二区| 成人性色生活片| 亚洲成人tv网| 久久久久久久久久久久久夜| 99这里都是精品| 日韩激情在线观看| 欧美高清在线一区| 欧美午夜一区二区三区免费大片| 男女激情视频一区| 国产精品国产三级国产三级人妇| 欧美日韩一级黄| 国产精品自拍网站| 亚洲综合激情另类小说区| 亚洲精品一区二区三区蜜桃下载| 不卡影院免费观看| 日韩va欧美va亚洲va久久| 国产日产欧美一区二区三区| 一本色道亚洲精品aⅴ| 久久精品国产99久久6| 亚洲色图丝袜美腿| 欧美成人性福生活免费看| 91捆绑美女网站| 久久av老司机精品网站导航| 亚洲日本在线观看| 精品99一区二区三区| 91国在线观看| 国产ts人妖一区二区| 亚洲18影院在线观看| 国产精品色哟哟网站| 欧美福利视频一区| 成人黄色软件下载| 久久国产精品72免费观看| 亚洲在线观看免费视频| 国产欧美日韩另类一区| 777午夜精品视频在线播放| 97se亚洲国产综合在线| 激情深爱一区二区| 亚洲成人tv网| 亚洲人成网站精品片在线观看| 精品日产卡一卡二卡麻豆| 欧美在线观看视频一区二区| 成人免费视频网站在线观看| 麻豆精品新av中文字幕| 亚洲综合偷拍欧美一区色| 中文字幕av一区二区三区| 日韩欧美一区二区在线视频| 在线中文字幕一区| 成人动漫一区二区| 激情图区综合网| 日韩电影在线看| 亚洲一区二区成人在线观看| 国产精品伦理在线| 久久久久国产成人精品亚洲午夜| 69久久夜色精品国产69蝌蚪网| 91免费视频网| 国产成人综合亚洲网站| 九色|91porny| 美女视频一区在线观看| 天堂av在线一区| 亚洲国产精品一区二区久久恐怖片 | 欧美精品一区二区久久婷婷| 欧美日韩一级黄| 色88888久久久久久影院按摩| 高清shemale亚洲人妖| 激情综合网av| 久久99精品网久久| 久久成人免费电影| 久久精品国产一区二区三| 蜜臀av一级做a爰片久久| 日本不卡中文字幕| 日韩不卡一区二区| 日本视频一区二区三区| 丝袜脚交一区二区| 日韩精品久久理论片| 日日夜夜精品免费视频| 首页综合国产亚洲丝袜| 日韩国产欧美在线观看| 日韩电影免费在线看| 日本不卡中文字幕| 免费av成人在线| 毛片基地黄久久久久久天堂| 男男gaygay亚洲| 青青草精品视频| 久久精品久久精品| 国产美女视频一区| 国产福利不卡视频| proumb性欧美在线观看| 91同城在线观看| 91国模大尺度私拍在线视频| 欧美在线制服丝袜| 9191成人精品久久| 欧美一级高清片| 久久精品在这里| 最新久久zyz资源站| 一区二区三区精品在线| 亚洲444eee在线观看| 久久99蜜桃精品|