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

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

?? box.cpp

?? this keik game source
?? CPP
字號:
//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/box.cpp                          $
// $Revision:: 36                                                             $
//   $Author:: Markd                                                          $
//     $Date:: 11/15/98 7:51p                                                 $
//
// Copyright (C) 1997 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/box.cpp                               $
// 
// 36    11/15/98 7:51p Markd
// fixed boxes so that they wouldn't be case as Item's 
// 
// 35    11/13/98 2:41p Markd
// fixed box precaching
// 
// 34    11/09/98 12:13a Aldie
// Do a modelindex on stuff in boxes
// 
// 33    10/26/98 12:28a Markd
// Put in no jc support
// 
// 32    10/25/98 2:38a Markd
// put in dialog time in box code
// 
// 31    10/25/98 12:47a Markd
// fixed mutant flag for dialog
// 
// 30    10/25/98 12:24a Markd
// Put in sounds when blade blows up boxes
// 
// 29    10/19/98 12:10a Jimdose
// made all code use fast checks for inheritance (no text lookups when
// possible)
// isSubclassOf no longer requires ::_classinfo()
// 
// 28    10/17/98 7:35p Jimdose
// Changed G_CallSpawn to G_CallSpawn2
// 
// 27    8/29/98 5:27p Markd
// added specialfx, replaced misc with specialfx where appropriate
// 
// 26    8/18/98 11:08p Markd
// Added new Alias System
// 
// 25    8/18/98 5:50p Aldie
// Added target activation to box killed function
// 
// 24    8/12/98 3:18p Aldie
// 
// 23    8/09/98 6:10p Aldie
// New box behavior
// 
// 22    8/08/98 9:02p Aldie
// Removed unused var
// 
// 21    8/08/98 8:22p Markd
// Took out random items from box code
// 
// 20    7/14/98 6:56p Aldie
// Updated healths
// 
// 19    6/24/98 12:39p Markd
// Added default tesselation percentage
// 
// 18    6/18/98 5:41p Markd
// Fixed crash with boxes
// 
// 17    6/18/98 2:00p Markd
// rewrote tesselation code
// 
// 16    6/10/98 1:19p Markd
// Removed 357 bullets
// 
// 15    5/27/98 9:04p Markd
// weighted boxes with more ammo
// 
// 14    5/27/98 8:34p Markd
// Put more health in boxes
// 
// 13    5/27/98 5:01a Markd
// Put in dynamic spawning of goodies when box is destroyed
// 
// 12    5/25/98 7:51p Jimdose
// Made TellNeighborsToFall use G_NextEntity to check all entities
// 
// 11    5/24/98 8:46p Jimdose
// Made a lot of functions more str-friendly.
// Got rid of a lot of char * based strings
// Cleaned up get spawn arg functions and sound functions
// sound functions now use consistant syntax
// 
// 10    5/24/98 1:03a Jimdose
// Added breaking sound event when killed
// 
// 9     5/11/98 3:51p Markd
// Changed crate blowup sound
// 
// 8     5/01/98 11:09a Markd
// Added sound to tesselation event
// 
// 7     4/14/98 6:55p Markd
// Added thickness to tesselation
// 
// 6     4/08/98 4:19p Jimdose
// Converted to Q2
// 
// 4     10/31/97 7:18p Markd
// Changed triagulate call and added a hidemodel call when blowing up
// 
// 3     10/31/97 4:32p Markd
// Added shatter sound and also fixed a swapped MOVETYPE/SOLIDTYPE bug
// 
// 2     10/30/97 7:42p Jimdose
// Created file
//
// DESCRIPTION:
// Explodable box that falls when boxes below it are destroyed.
// 

#include "g_local.h"
#include "entity.h"
#include "box.h"
#include "ammo.h"
#include "health.h"
#include "specialfx.h"

Event EV_Box_Think( "think" );

ResponseDef Box::Responses[] =
	{
	   { &EV_Box_Think,			( Response )Box::Falling },
	   { &EV_Killed,				( Response )Box::Killed },
		{ NULL, NULL }
	};

/*****************************************************************************/
/*SINED func_box (0 .5 .8) ?

  Explodable box that falls when boxes below it are destroyed.  
"items" - List of classnames to spawn when the box is destroyed.  Separate
each classname by spaces (E.g. Adrenaline RocketLauncher).  Default is NULL.
"angles" - Orientation of the item that is spawned.
"health" - Health of the box ( default is 60 )
/*****************************************************************************/

CLASS_DECLARATION( Entity, Box, "func_box" );

EXPORT_FROM_DLL void Box::StartFalling
	(
	void
	)

	{
	movetime = 0;
	velocity += "0 0 100";
	setMoveType( MOVETYPE_TOSS );
	setSolidType( SOLID_BBOX );
	setOrigin( worldorigin + Vector( 0, 0, 1 ) );
	PostEvent( EV_Box_Think, FRAMETIME );
	}

EXPORT_FROM_DLL void Box::Falling
	(
	Event *ev
	)

	{
	if ( velocity != vec_zero )
		{
		movetime = level.time + 1;
		}

	if ( movetime < level.time )
		{
		setMoveType( MOVETYPE_PUSH );
		setSolidType( SOLID_BSP );
		}
	else
		{
		PostEvent( EV_Box_Think, FRAMETIME );
		}
	}

void Box::TellNeighborsToFall
	(
	void
	)

	{
	Entity	*ent;
	//Event		*e;
	Vector	min;
	Vector	max;
	Entity	*next;

	min = absmin + Vector( 6, 6, 6 );
	max = absmax + Vector( -6, -6, 0 );

	for( ent = G_NextEntity( world ); ent != NULL; ent = next )
		{
		next = G_NextEntity( ent );

		if ( ( ent != this ) && ent->isSubclassOf( Box ) )
			{
			if ( !( ( ent->absmax[ 0 ] < min[ 0 ] ) ||
				( ent->absmax[ 1 ] < min[ 1 ] ) ||
				( ent->absmax[ 2 ] < min[ 2 ] ) ||
				( ent->absmin[ 0 ] > max[ 0 ] ) ||
				( ent->absmin[ 1 ] > max[ 1 ] ) ||
				( ent->absmin[ 2 ] > max[ 2 ] ) ) )

				{
				if ( ent->takedamage != DAMAGE_NO )
					( ( Box * )ent )->StartFalling();
				// Ok, it's a hack.
				//if ( ent->takedamage != DAMAGE_NO )
				//	{
				//	e = new Event( ev );
				//	ent->ProcessEvent( e );
				//	}
				}
			}
		}
	}

void Box::Killed
	(
	Event *ev
	)

	{
   Entity      *attacker;
   Vector      dir;
   Vector      org;
   Entity      *ent;
   const char  *s;
   const char  *token;
   int         width = 0;
   int         depth = 0;
   int         boxwidth;
   char        temp[ 128 ];
   const char	*name;
   int         num;
   Event       *event;
   qboolean    spawned;
   static float last_dialog_time = 0;

   hideModel();
	RandomGlobalSound( "impact_crateexplo", 1, CHAN_BODY, ATTN_NORM );

	takedamage = DAMAGE_NO;

	TellNeighborsToFall();
	
	ProcessEvent( EV_BreakingSound );

   attacker = ev->GetEntity( 1 );
   dir = worldorigin - attacker->worldorigin;
   TesselateModel
      (
      this,
      tess_min_size,
      tess_max_size,
      dir,
      ev->GetInteger( 2 ),
      tess_percentage,
      tess_thickness,
      vec3_origin
      );

   //
   // fire off targets
   //
	name = Target();
	if ( name && strcmp( name, "" ) )
		{
		num = 0;
		do
			{
			num = G_FindTarget( num, name );
			if ( !num )
				{
				break;
				}

			ent = G_GetEntity( num );
		
			event = new Event( EV_Activate );
			event->AddEntity( attacker );
			ent->PostEvent( event, 0 );
			}
		while ( 1 );
		}



   // items holds the list of def files to spawn
   s = items.c_str();
   
   G_InitSpawnArguments();

   if ( setangles )
      {
      sprintf( temp, "%f %f %f", angles[ 0 ],angles[ 1 ],angles[ 2 ] );
      G_SetSpawnArg( "angles", temp );
      }

   spawned = false;
   boxwidth = maxs[0];
   while (1)
      {
      token = COM_Parse(&s);
      
      if (!token[0])
         break;

      G_SetSpawnArg( "model", token );

      if ( ( width * 32 ) > boxwidth )
         {
         width = 0;
         depth++;
         }

      // Calculate and set the origin
      org = worldorigin + Vector("0 0 32") + Vector("32 0 0") * width + Vector("0 32 0") * depth;
      width++;
      sprintf( temp, "%f %f %f", org[ 0 ], org[ 1 ], org[ 2 ] );
      G_SetSpawnArg( "origin", temp );
      
      // Create the item
      ent = ( Entity * )G_CallSpawn();
      spawned = true;

      // Postpone the Drop because the box is still there.
      ent->PostponeEvent( EV_Item_DropToFloor, 0.1f );
      }   
   G_InitSpawnArguments();

   if ( 
         spawned && 
         attacker->isClient() && 
         ( last_dialog_time < level.time ) &&
         ( !( attacker->flags & FL_SP_MUTANT ) ) && 
         ( !deathmatch->value )
      )
      {
      char name[ 128 ];
      int num;

      last_dialog_time = level.time + 25;
      if ( level.no_jc )
         {
         num = (int)G_Random( 3 ) + 1;
         }
      else
         {
         num = (int)G_Random( 5 ) + 1;
         }
      sprintf( name, "global/universal_script.scr::blade_finds_item%d", num );
      ExecuteThread( name, true );
      }
   PostEvent( EV_Remove, 0 );
	}

Box::Box()
	{
   const char  *text;
   const char  *s;
   char        token[ MAX_TOKEN_CHARS ];

   movetime = 0;
	showModel();
	setMoveType( MOVETYPE_PUSH );
	setSolidType( SOLID_BSP );
	setOrigin( origin );

	health = G_GetIntArg( "health", 60 );
	max_health = health;
	takedamage = DAMAGE_YES;
   tess_thickness = 20;
   text = G_GetSpawnArg( "items" );
   
   if ( text )
      {
      items = text;
      s = items.c_str();
      while ( 1 )
         {
         strcpy( token, COM_Parse(&s) );
         if ( !token[0] )
            break;
         modelIndex( token );
         }
      }

   setangles = ( G_GetSpawnArg( "angle" ) || G_GetSpawnArg( "angles" ) );
	if ( setangles )
		{
		float angle;
		angle = G_GetFloatArg( "angle", 0 );
		angles = G_GetVectorArg( "angles", Vector( 0, angle, 0 ) );
		}
   }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩在线观看一区二区 | 国产性天天综合网| 亚洲欧洲日韩女同| 久久精品免费看| 91久久国产综合久久| 欧美精品一区视频| 有码一区二区三区| 国产精品系列在线观看| 欧美精品在线一区二区三区| 综合av第一页| 狠狠色2019综合网| 欧美高清dvd| 亚洲人快播电影网| 国产福利电影一区二区三区| 日韩一区二区三区av| 亚洲一区二区三区四区五区中文| 国产精品一区二区不卡| 日韩亚洲欧美一区| 天天影视色香欲综合网老头| 一本到不卡精品视频在线观看| 国产蜜臀97一区二区三区| 久久99精品久久久久久久久久久久 | 欧美精品黑人性xxxx| 亚洲综合在线免费观看| 成人中文字幕合集| 欧美mv和日韩mv国产网站| 日韩电影免费在线| 欧美日韩成人在线| 亚洲国产欧美一区二区三区丁香婷| 91在线视频播放地址| 中文字幕av在线一区二区三区| 国模套图日韩精品一区二区| 欧美xxxxx裸体时装秀| 久久99久久久欧美国产| 日韩欧美一区二区免费| 日本欧美在线看| 日韩丝袜情趣美女图片| 精品一区二区三区在线播放视频| 91精品国产色综合久久| 免费看精品久久片| 亚洲精品在线电影| 粉嫩av一区二区三区在线播放 | 婷婷久久综合九色国产成人| 欧美乱熟臀69xxxxxx| 蜜桃视频一区二区三区在线观看| 91精品国产一区二区| 日本不卡123| 欧美大白屁股肥臀xxxxxx| 黄色日韩网站视频| 久久久www免费人成精品| 粉嫩av一区二区三区在线播放 | 99国产欧美久久久精品| 亚洲综合色婷婷| 欧美高清视频一二三区| 久久精品国产999大香线蕉| 精品日韩欧美在线| 粉嫩嫩av羞羞动漫久久久| 亚洲欧美日韩精品久久久久| 欧美日韩精品一区视频| 成人黄色av电影| 国产精品二三区| 欧美日韩国产一二三| 国产乱码精品一区二区三区av| **欧美大码日韩| 欧美精品在线观看播放| 狠狠网亚洲精品| 亚洲免费视频中文字幕| 欧美精品一区二区高清在线观看| 国产91精品欧美| 亚洲一区二区三区四区在线免费观看 | 亚洲精品免费看| 日韩欧美亚洲国产精品字幕久久久| 丁香婷婷综合五月| 首页国产丝袜综合| 欧美国产成人精品| 日韩欧美资源站| 日本丶国产丶欧美色综合| 久久99日本精品| 亚洲国产另类av| 国产精品污污网站在线观看 | 麻豆精品久久精品色综合| 中文字幕在线观看不卡| 欧美不卡一区二区三区四区| 色8久久人人97超碰香蕉987| 国产高清不卡二三区| 亚洲不卡av一区二区三区| 国产欧美一区二区三区在线看蜜臀| 欧美日韩精品福利| 99这里只有久久精品视频| 狠狠色丁香久久婷婷综合_中 | 亚洲精品少妇30p| 26uuu欧美日本| 91精品国产综合久久久蜜臀粉嫩 | 91蜜桃视频在线| 国产在线观看一区二区| 亚洲韩国精品一区| 久久综合狠狠综合久久综合88| 欧美写真视频网站| 国产成人午夜视频| 亚洲福利国产精品| 国产精品久久久久永久免费观看 | 日日夜夜一区二区| 日韩码欧中文字| 国产无一区二区| 91精品国产福利在线观看| av午夜精品一区二区三区| 亚洲日本va午夜在线影院| 国产女主播视频一区二区| 91精品国产色综合久久不卡蜜臀 | 色综合天天视频在线观看| 精品一区二区在线播放| 婷婷综合五月天| 亚洲精品视频一区| 中文字幕五月欧美| 欧美一区二区三区在线观看视频 | 欧美无砖砖区免费| 91片黄在线观看| 成人免费视频免费观看| 亚洲成人综合在线| 午夜视频久久久久久| 一卡二卡三卡日韩欧美| 综合自拍亚洲综合图不卡区| 国产欧美精品一区二区色综合朱莉| 日韩亚洲国产中文字幕欧美| 日韩一卡二卡三卡四卡| 欧美日韩不卡一区| fc2成人免费人成在线观看播放| 天天操天天干天天综合网| 亚洲免费在线观看视频| 1024国产精品| 亚洲欧美一区二区久久| 国产精品素人视频| 中文在线资源观看网站视频免费不卡| 日韩欧美国产电影| 日韩精品一区国产麻豆| 欧美岛国在线观看| 日韩欧美卡一卡二| 国产精品美女久久久久久久久| 国产清纯在线一区二区www| 久久久国产精品午夜一区ai换脸| 久久久久久久久99精品| 国产亚洲成av人在线观看导航| 欧美大片拔萝卜| 日韩毛片一二三区| 亚洲免费在线看| 亚洲午夜精品网| 午夜久久久久久久久| 美美哒免费高清在线观看视频一区二区 | 国产视频在线观看一区二区三区 | 国产乱码精品一区二区三| 国产成人精品免费网站| 波多野洁衣一区| 在线免费观看日本一区| 91麻豆视频网站| 日韩精品一区二区三区swag| 欧美极品aⅴ影院| 亚洲精品网站在线观看| 午夜视频在线观看一区二区| 久久成人羞羞网站| 色老综合老女人久久久| 制服视频三区第一页精品| 精品国产一区二区三区久久影院| 久久久久久久久97黄色工厂| 亚洲色图欧美偷拍| 丝袜亚洲另类欧美综合| 日本不卡一区二区三区| 国产一区二区三区免费| 97久久精品人人做人人爽| 欧美日韩不卡一区| 日本一区二区三区dvd视频在线| 亚洲男人电影天堂| 狠狠狠色丁香婷婷综合激情| 一本久久a久久免费精品不卡| 欧美一级日韩不卡播放免费| 欧美国产乱子伦| 一区二区三区av电影| 99免费精品视频| 欧美不卡一区二区三区四区| 亚洲精品日韩专区silk| 激情成人综合网| 欧美美女喷水视频| 日本一区二区电影| 日韩中文字幕91| 成人性生交大片| 日韩一级完整毛片| 日本系列欧美系列| 99热精品国产| 久久精品一区四区| 久久精品国产免费看久久精品| 91色视频在线| 中文字幕精品一区| 五月天激情综合网| 欧美猛男男办公室激情| 亚洲天堂a在线| 国产精品一卡二卡在线观看| 在线播放91灌醉迷j高跟美女| 亚洲国产精品久久人人爱蜜臀| 成人免费视频视频| 国产视频一区二区三区在线观看| 男人的天堂亚洲一区|