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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? p_inter.c

?? 游戲類程序源代碼---WinDoom 3D源程序.zip
?? C
?? 第 1 頁 / 共 2 頁
字號:
// 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:
//	Handling interactions (i.e., collisions).
//
//-----------------------------------------------------------------------------


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


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

#include "doomstat.h"

#include "m_random.h"
#include "i_system.h"

#include "am_map.h"

#include "p_local.h"

#include "s_sound.h"

#ifdef __GNUG__
#pragma implementation "p_inter.h"
#endif
#include "p_inter.h"


#define BONUSADD	6




// a weapon is found with two clip loads,
// a big item has five clip loads
int	maxammo[NUMAMMO] = {200, 50, 300, 50};
int	clipammo[NUMAMMO] = {10, 4, 20, 1};


//
// GET STUFF
//

//
// P_GiveAmmo
// Num is the number of clip loads,
// not the individual count (0= 1/2 clip).
// Returns false if the ammo can't be picked up at all
//

boolean
P_GiveAmmo
( player_t*	player,
  ammotype_t	ammo,
  int		num )
{
    int		oldammo;
	
    if (ammo == am_noammo)
	return false;
		
    if (ammo < 0 || ammo > NUMAMMO)
	I_Error ("P_GiveAmmo: bad type %i", ammo);
		
    if ( player->ammo[ammo] == player->maxammo[ammo]  )
	return false;
		
    if (num)
	num *= clipammo[ammo];
    else
	num = clipammo[ammo]/2;
    
    if (gameskill == sk_baby
	|| gameskill == sk_nightmare)
    {
	// give double ammo in trainer mode,
	// you'll need in nightmare
	num <<= 1;
    }
    
		
    oldammo = player->ammo[ammo];
    player->ammo[ammo] += num;

    if (player->ammo[ammo] > player->maxammo[ammo])
	player->ammo[ammo] = player->maxammo[ammo];

    // If non zero ammo, 
    // don't change up weapons,
    // player was lower on purpose.
    if (oldammo)
	return true;	

    // We were down to zero,
    // so select a new weapon.
    // Preferences are not user selectable.
    switch (ammo)
    {
      case am_clip:
	if (player->readyweapon == wp_fist)
	{
	    if (player->weaponowned[wp_chaingun])
		player->pendingweapon = wp_chaingun;
	    else
		player->pendingweapon = wp_pistol;
	}
	break;
	
      case am_shell:
	if (player->readyweapon == wp_fist
	    || player->readyweapon == wp_pistol)
	{
	    if (player->weaponowned[wp_shotgun])
		player->pendingweapon = wp_shotgun;
	}
	break;
	
      case am_cell:
	if (player->readyweapon == wp_fist
	    || player->readyweapon == wp_pistol)
	{
	    if (player->weaponowned[wp_plasma])
		player->pendingweapon = wp_plasma;
	}
	break;
	
      case am_misl:
	if (player->readyweapon == wp_fist)
	{
	    if (player->weaponowned[wp_missile])
		player->pendingweapon = wp_missile;
	}
      default:
	break;
    }
	
    return true;
}


//
// P_GiveWeapon
// The weapon name may have a MF_DROPPED flag ored in.
//
boolean
P_GiveWeapon
( player_t*	player,
  weapontype_t	weapon,
  boolean	dropped )
{
    boolean	gaveammo;
    boolean	gaveweapon;
	
    if (netgame
	&& (deathmatch!=2)
	 && !dropped )
    {
	// leave placed weapons forever on net games
	if (player->weaponowned[weapon])
	    return false;

	player->bonuscount += BONUSADD;
	player->weaponowned[weapon] = true;

	if (deathmatch)
	    P_GiveAmmo (player, weaponinfo[weapon].ammo, 5);
	else
	    P_GiveAmmo (player, weaponinfo[weapon].ammo, 2);
	player->pendingweapon = weapon;

	if (player == &players[consoleplayer])
	    S_StartSound (NULL, sfx_wpnup);
	return false;
    }
	
    if (weaponinfo[weapon].ammo != am_noammo)
    {
	// give one clip with a dropped weapon,
	// two clips with a found weapon
	if (dropped)
	    gaveammo = P_GiveAmmo (player, weaponinfo[weapon].ammo, 1);
	else
	    gaveammo = P_GiveAmmo (player, weaponinfo[weapon].ammo, 2);
    }
    else
	gaveammo = false;
	
    if (player->weaponowned[weapon])
	gaveweapon = false;
    else
    {
	gaveweapon = true;
	player->weaponowned[weapon] = true;
	player->pendingweapon = weapon;
    }
	
    return (gaveweapon || gaveammo);
}

 

//
// P_GiveBody
// Returns false if the body isn't needed at all
//
boolean
P_GiveBody
( player_t*	player,
  int		num )
{
    if (player->health >= MAXHEALTH)
	return false;
		
    player->health += num;
    if (player->health > MAXHEALTH)
	player->health = MAXHEALTH;
    player->mo->health = player->health;
	
    return true;
}



//
// P_GiveArmor
// Returns false if the armor is worse
// than the current armor.
//
boolean
P_GiveArmor
( player_t*	player,
  int		armortype )
{
    int		hits;
	
    hits = armortype*100;
    if (player->armorpoints >= hits)
	return false;	// don't pick up
		
    player->armortype = armortype;
    player->armorpoints = hits;
	
    return true;
}



//
// P_GiveCard
//
void
P_GiveCard
( player_t*	player,
  card_t	card )
{
    if (player->cards[card])
	return;
    
    player->bonuscount = BONUSADD;
    player->cards[card] = 1;
}


//
// P_GivePower
//
boolean
P_GivePower
( player_t*	player,
  int /*powertype_t*/	power )
{
    if (power == pw_invulnerability)
    {
	player->powers[power] = INVULNTICS;
	return true;
    }
    
    if (power == pw_invisibility)
    {
	player->powers[power] = INVISTICS;
	player->mo->flags |= MF_SHADOW;
	return true;
    }
    
    if (power == pw_infrared)
    {
	player->powers[power] = INFRATICS;
	return true;
    }
    
    if (power == pw_ironfeet)
    {
	player->powers[power] = IRONTICS;
	return true;
    }
    
    if (power == pw_strength)
    {
	P_GiveBody (player, 100);
	player->powers[power] = 1;
	return true;
    }
	
    if (player->powers[power])
	return false;	// already got it
		
    player->powers[power] = 1;
    return true;
}



//
// P_TouchSpecialThing
//
void
P_TouchSpecialThing
( mobj_t*	special,
  mobj_t*	toucher )
{
    player_t*	player;
    int		i;
    fixed_t	delta;
    int		sound;
		
    delta = special->z - toucher->z;

    if (delta > toucher->height
	|| delta < -8*FRACUNIT)
    {
	// out of reach
	return;
    }
    
	
    sound = sfx_itemup;	
    player = toucher->player;

    // Dead thing touching.
    // Can happen with a sliding player corpse.
    if (toucher->health <= 0)
	return;

    // Identify by sprite.
    switch (special->sprite)
    {
	// armor
      case SPR_ARM1:
	if (!P_GiveArmor (player, 1))
	    return;
	player->message = GOTARMOR;
	break;
		
      case SPR_ARM2:
	if (!P_GiveArmor (player, 2))
	    return;
	player->message = GOTMEGA;
	break;
	
	// bonus items
      case SPR_BON1:
	player->health++;		// can go over 100%
	if (player->health > 200)
	    player->health = 200;
	player->mo->health = player->health;
	player->message = GOTHTHBONUS;
	break;
	
      case SPR_BON2:
	player->armorpoints++;		// can go over 100%
	if (player->armorpoints > 200)
	    player->armorpoints = 200;
	if (!player->armortype)
	    player->armortype = 1;
	player->message = GOTARMBONUS;
	break;
	
      case SPR_SOUL:
	player->health += 100;
	if (player->health > 200)
	    player->health = 200;
	player->mo->health = player->health;
	player->message = GOTSUPER;
	sound = sfx_getpow;
	break;
	
      case SPR_MEGA:
	if (gamemode != commercial)
	    return;
	player->health = 200;
	player->mo->health = player->health;
	P_GiveArmor (player,2);
	player->message = GOTMSPHERE;
	sound = sfx_getpow;
	break;
	
	// cards
	// leave cards for everyone
      case SPR_BKEY:
	if (!player->cards[it_bluecard])
	    player->message = GOTBLUECARD;
	P_GiveCard (player, it_bluecard);
	if (!netgame)
	    break;
	return;
	
      case SPR_YKEY:
	if (!player->cards[it_yellowcard])
	    player->message = GOTYELWCARD;
	P_GiveCard (player, it_yellowcard);
	if (!netgame)
	    break;
	return;
	
      case SPR_RKEY:
	if (!player->cards[it_redcard])
	    player->message = GOTREDCARD;
	P_GiveCard (player, it_redcard);
	if (!netgame)
	    break;
	return;
	
      case SPR_BSKU:
	if (!player->cards[it_blueskull])
	    player->message = GOTBLUESKUL;
	P_GiveCard (player, it_blueskull);
	if (!netgame)
	    break;
	return;
	
      case SPR_YSKU:
	if (!player->cards[it_yellowskull])
	    player->message = GOTYELWSKUL;
	P_GiveCard (player, it_yellowskull);
	if (!netgame)
	    break;
	return;
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一二三区在线| 亚洲精品视频观看| 国产一区二区毛片| 精品国产第一区二区三区观看体验| 亚洲成人久久影院| 欧美日高清视频| 日韩影院免费视频| 欧美va在线播放| 国产一区二区女| 欧美国产亚洲另类动漫| 99视频一区二区| 亚洲一区二区三区中文字幕在线| 欧美视频在线观看一区| 日产精品久久久久久久性色| 日韩精品一区二区三区swag| 国产精品一级片在线观看| 国产精品丝袜一区| 在线观看亚洲精品| 久久草av在线| 亚洲欧洲国产日韩| 欧美日韩不卡在线| 国产福利一区在线| 亚洲精品国产高清久久伦理二区| 欧美日韩国产首页| 国产老肥熟一区二区三区| 国产精品无圣光一区二区| 欧美综合在线视频| 久久99精品国产麻豆婷婷 | 亚洲精品久久久蜜桃| 欧美日韩一区不卡| 国产精品资源在线| 五月综合激情网| 欧美韩日一区二区三区| 欧美精品一二三| 成人午夜精品在线| 日韩不卡一区二区| 国产精品国产三级国产普通话三级 | 麻豆免费精品视频| 亚洲视频香蕉人妖| 精品国产凹凸成av人导航| 91麻豆视频网站| 国产伦精品一区二区三区视频青涩| 亚洲同性gay激情无套| 日韩美女视频在线| 色综合久久天天| 国产乱码精品1区2区3区| 亚洲香肠在线观看| 国产精品免费av| 日韩精品一区二区三区中文不卡 | 日韩激情在线观看| 亚洲丝袜美腿综合| 欧美激情一区二区三区不卡 | 日本久久一区二区| 国产风韵犹存在线视精品| 日韩精品亚洲一区二区三区免费| 中文字幕一区二区三区在线观看 | 欧美色偷偷大香| 本田岬高潮一区二区三区| 久久精品国产亚洲一区二区三区| 一区二区三区精品在线观看| 欧美激情一区二区| 国产欧美一区在线| 26uuu国产日韩综合| 欧美久久久久中文字幕| 91国产福利在线| 91老师片黄在线观看| 成人午夜激情影院| 国产99久久久国产精品潘金| 国内精品久久久久影院色| 日韩电影免费在线| 污片在线观看一区二区| 亚洲一卡二卡三卡四卡 | 亚洲自拍偷拍欧美| 亚洲黄色av一区| 亚洲免费观看高清完整版在线| 国产精品日产欧美久久久久| 久久色在线视频| 久久久亚洲综合| 国产午夜精品一区二区三区嫩草| 26uuu国产电影一区二区| www精品美女久久久tv| 2020国产精品久久精品美国| 欧美成人一区二区| 久久影院午夜论| 国产日韩精品一区| 日本一区二区不卡视频| 中文字幕一区日韩精品欧美| 国产精品久久久久久久久果冻传媒 | 欧美天堂一区二区三区| 欧美性受xxxx黑人xyx| 欧美日韩一区二区三区在线看| 欧美性感一区二区三区| 9191久久久久久久久久久| 69久久夜色精品国产69蝌蚪网| 6080国产精品一区二区| 精品少妇一区二区三区日产乱码| 久久一区二区三区四区| 欧美国产激情一区二区三区蜜月| 国产精品精品国产色婷婷| 亚洲女性喷水在线观看一区| 婷婷综合五月天| 精品一区二区三区欧美| 成人免费va视频| 欧美优质美女网站| 日韩欧美国产成人一区二区| 久久人人爽爽爽人久久久| 中文字幕在线观看不卡视频| 性久久久久久久久| 国产在线一区观看| 色综合一个色综合| 日韩一区二区三区视频在线观看| 国产午夜亚洲精品理论片色戒| 亚洲天堂福利av| 麻豆91在线看| 91视频你懂的| 欧美一区二区免费观在线| 国产日产欧美一区二区视频| 一区二区三区成人在线视频| 久久爱另类一区二区小说| 99在线热播精品免费| 欧美一区二区视频在线观看2022| 国产日韩欧美电影| 舔着乳尖日韩一区| 成人免费视频一区二区| 欧美美女激情18p| 国产精品视频一二三区| 五月天网站亚洲| 欧美日韩视频第一区| 久久午夜电影网| 天天射综合影视| 国产成人精品www牛牛影视| 欧美日韩视频专区在线播放| 国产日产欧美一区二区视频| 午夜精品免费在线观看| 春色校园综合激情亚洲| 91精品在线麻豆| 综合网在线视频| 国产精品一二三在| 337p亚洲精品色噜噜狠狠| 亚洲欧洲日本在线| 国产在线一区二区| 制服视频三区第一页精品| 综合自拍亚洲综合图不卡区| 欧美日韩精品综合在线| 国产精品影视网| 欧美一卡2卡三卡4卡5免费| 亚洲啪啪综合av一区二区三区| 国产精品一级在线| 日韩一区二区精品| 亚洲自拍偷拍图区| 91网站最新地址| 国产精品理伦片| 国产91在线观看丝袜| 久久―日本道色综合久久| 日韩av中文字幕一区二区| 欧美视频自拍偷拍| 一区二区三区成人| 色婷婷综合久久久久中文一区二区| 久久久久国产精品麻豆| 韩国av一区二区三区四区| 欧美一卡二卡三卡| 免费在线看一区| 欧美精品1区2区| 视频一区二区欧美| 欧美美女一区二区在线观看| 亚洲成人一二三| 欧美男女性生活在线直播观看 | 亚洲日本一区二区| 成人综合激情网| 中文字幕不卡一区| 成人黄色av电影| 亚洲天天做日日做天天谢日日欢 | 亚洲色图一区二区| 色婷婷激情一区二区三区| 亚洲精品日产精品乱码不卡| 91网站最新地址| 亚洲自拍偷拍九九九| 欧美日韩国产片| 日本亚洲一区二区| 日韩欧美电影一区| 韩国成人精品a∨在线观看| 久久伊99综合婷婷久久伊| 国产白丝网站精品污在线入口| 国产欧美日韩三区| av电影天堂一区二区在线| 一片黄亚洲嫩模| 91精品中文字幕一区二区三区| 免费观看91视频大全| 久久久亚洲欧洲日产国码αv| 国产大片一区二区| 亚洲人精品午夜| 欧美日产国产精品| 激情亚洲综合在线| 国产精品国产三级国产三级人妇| 91国偷自产一区二区使用方法| 亚洲福利视频一区二区| 7777精品伊人久久久大香线蕉超级流畅| 另类小说一区二区三区| 国产欧美日本一区视频| 色就色 综合激情|