亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
激情小说欧美图片| 日本vs亚洲vs韩国一区三区二区| 欧美日韩视频在线一区二区| 色婷婷综合久久久| 91网站在线播放| 91福利精品视频| 欧美性视频一区二区三区| 欧美性一级生活| 欧美一级片免费看| 精品国产乱码久久久久久图片 | 久久精品日产第一区二区三区高清版| 在线不卡免费欧美| 日韩欧美卡一卡二| 国产日韩欧美在线一区| 国产精品天天看| 一区二区在线观看视频| 亚洲电影激情视频网站| 蜜臀久久99精品久久久久久9| 蜜臀av性久久久久蜜臀av麻豆 | 国产精品免费久久| 亚洲精品视频免费看| 亚洲一二三专区| 另类欧美日韩国产在线| 国产aⅴ综合色| 在线日韩国产精品| 日韩亚洲欧美中文三级| 国产女人aaa级久久久级 | 午夜精品久久久久久久久久| 日本丰满少妇一区二区三区| 精品综合久久久久久8888| 一本到不卡精品视频在线观看| 精品久久久久一区| 久久99久久精品欧美| 欧美一区二区不卡视频| 午夜不卡av在线| 欧美日韩高清一区| 日韩高清不卡在线| 日韩欧美一区二区三区在线| 视频一区免费在线观看| 91麻豆精品国产91久久久久久久久| 亚洲综合小说图片| 欧美男男青年gay1069videost| 亚洲成在人线在线播放| 在线播放国产精品二区一二区四区 | 91在线视频在线| 亚洲天堂2014| 在线观看av一区| 蜜臀久久久久久久| 国产性色一区二区| 91蜜桃免费观看视频| 亚洲成人免费观看| 精品福利一二区| 99久久婷婷国产综合精品电影 | 91在线观看免费视频| 亚洲免费在线视频| 欧美精品久久天天躁| 精品夜夜嗨av一区二区三区| 国产日韩欧美电影| 欧美性大战久久| 狠狠狠色丁香婷婷综合激情| 中文字幕乱码久久午夜不卡| 欧美综合欧美视频| 国产一区二区成人久久免费影院| 国产精品久久久久久久久晋中| 欧美三级中文字幕| 国产一区二三区| 一区二区三区四区视频精品免费| 日韩西西人体444www| 成人福利视频网站| 青青草成人在线观看| 国产精品国产自产拍高清av| 欧美一区二区三区视频在线观看| 9i看片成人免费高清| 日韩国产精品久久久| 国产精品久久久久久一区二区三区| 欧美亚洲另类激情小说| 国产成人在线视频免费播放| 亚洲综合激情小说| 欧美激情一区二区三区全黄| 欧美男人的天堂一二区| www.久久久久久久久| 精品写真视频在线观看| 亚洲综合免费观看高清完整版| 久久久久久久久99精品| 91麻豆精品国产自产在线 | 国产精品乱码久久久久久| 欧美体内she精视频| 成人a免费在线看| 国产呦萝稀缺另类资源| 午夜一区二区三区视频| 最好看的中文字幕久久| 国产日韩v精品一区二区| 91精品视频网| 欧美日韩免费高清一区色橹橹| 99久久精品一区二区| 精品一区精品二区高清| 日韩avvvv在线播放| 亚洲一区二区精品3399| 自拍偷拍欧美精品| 国产女人18水真多18精品一级做| 日韩午夜激情视频| 日韩一区二区免费视频| 欧美丰满高潮xxxx喷水动漫| 欧美性猛交xxxx乱大交退制版 | 国内成人精品2018免费看| 无码av免费一区二区三区试看| 亚洲婷婷综合久久一本伊一区 | 亚洲精品一区二区精华| 91麻豆精品久久久久蜜臀| 欧美日韩精品欧美日韩精品一综合 | 777久久久精品| 欧美日韩情趣电影| 欧美久久久久免费| 欧美久久久久久久久中文字幕| 欧美优质美女网站| 在线观看视频91| 欧美日韩精品一区二区三区蜜桃 | xf在线a精品一区二区视频网站| 欧美一区二区啪啪| 日韩欧美中文一区| 2021国产精品久久精品| 精品国产髙清在线看国产毛片| 欧美一二三四在线| 亚洲精品一线二线三线无人区| 2024国产精品视频| 国产精品每日更新| 一区二区三区四区中文字幕| 亚洲国产欧美一区二区三区丁香婷 | 国内精品久久久久影院薰衣草| 九九九久久久精品| 国产成人亚洲综合a∨婷婷| 成人av在线电影| 色偷偷成人一区二区三区91| 欧美日韩一区二区电影| 欧美一区二区三区小说| 国产亚洲一区二区三区四区| 国产精品天美传媒沈樵| 有码一区二区三区| 奇米精品一区二区三区在线观看 | 久久99精品久久久久久国产越南| 国产精品一区二区x88av| 成人av网站在线| 欧美日韩一级片网站| 久久―日本道色综合久久 | 国产精品素人视频| 一区二区高清免费观看影视大全| 青青草97国产精品免费观看无弹窗版| 国产麻豆9l精品三级站| 99久久婷婷国产| 日韩一区二区免费高清| 国产精品色一区二区三区| 亚洲成人免费av| 成人久久久精品乱码一区二区三区| 91久久国产最好的精华液| 精品日韩在线观看| 亚洲猫色日本管| 蜜桃av一区二区在线观看| 成人免费三级在线| 欧美一级高清片| 亚洲免费成人av| 国产精品资源在线| 3751色影院一区二区三区| 国产精品国产三级国产aⅴ无密码| 亚洲福利视频一区| 99视频热这里只有精品免费| 日韩欧美一区二区久久婷婷| 亚洲欧美日韩成人高清在线一区| 美腿丝袜一区二区三区| 欧美综合久久久| 国产精品视频在线看| 激情综合色播激情啊| 欧美精品一卡二卡| 亚洲乱码日产精品bd| 丁香六月综合激情| 精品久久久三级丝袜| 日韩激情一二三区| 色婷婷av一区二区三区之一色屋| 精品日韩欧美在线| 日本网站在线观看一区二区三区 | 日韩美女视频19| 国产不卡在线视频| 精品嫩草影院久久| 蜜臀av一级做a爰片久久| 欧美视频中文一区二区三区在线观看| 国产精品久久久久三级| 处破女av一区二区| 国产欧美日韩另类一区| 美日韩一区二区| 日韩一区二区免费电影| 日韩在线a电影| 51精品秘密在线观看| 天天综合色天天综合色h| 91成人网在线| 亚洲国产欧美在线| 欧美日韩成人高清| 日韩不卡在线观看日韩不卡视频| 欧美性xxxxxx少妇| 亚洲成a人v欧美综合天堂下载 | 久久精品亚洲麻豆av一区二区| 久久99久久久欧美国产|