⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game.cpp

📁 一个96K的3D游戏源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#include "stdio.h"
#include <math.h>
#include <windows.h>
#include <gl\glaux.h>												// Header File For The GLu32 Library
#include "MainNeHe.h"												// Header File For NeHeGL
#include "MainGame.h"
#include "SYSTEMIO.h"
#include "vectors.h"
#include "objekt.h"
#include "animation.h"
#include "Level.h"
#include "Partikel.h"
#include "Game.h"
#include "texditor\TexCommander.h"
#include "BClopd3d\Anis.h"
#include "bcls.h"
#include "GameDefines.h"
#include "BClopd3D\tcms.h"
#include "wglext.h"
#include "InGame2.h"
#include "InGame3.h"
#include "Bosstune.h"
#include "emptysong.h"
#include "intro.h"
#include "Dead.h"
#include "Credits.h"
#include "texditor\PapFilter.h"
#include "Menu.h"
#include "Levelend.h"

//#define DebugVersion
//#define GodMode
//#define PlCont 1
long	ContCnt;

// Prevent errors with Texditor
tImage *LoadedImage=NULL;
tLayer *TempLayer=NULL;
#ifdef DebugVersion
tGrund *Cube;
#endif
// 
HDC hDC;

bool IntroOn=true;
long IntroCnt;
bool CamClip=true;
float InFadePos;
float InFadeAdd;
float InMovePos;
float InMoveZiel;
float InMoveSpeed;

/*
tSector *BestSec;
float    BestAb;
*/

long TestNodeNr=25;
#define _SFX_Min 1
#define _SFX_Max 33
/*
#define PlHand 4
#define PlHead 11
*/
#define PlHand 4
#define PlHead 5
#define FallDead 130

#define SynthMukke

#define PlayerEnergy 10000
#define PlayerPower  1000

#define BMZMax	15000
#define BMZAdd	20
#define BMZSub	30
long BMZPos;
long MouseSens=50;
bool BMAvailable=true;

tP3D ContinuePos,PlStartPos;
bool ContinueOn;

bool BulletModeBool,BulletModeLast;
float BulletTime;
char mouselklick;
#ifdef DebugVersion
bool StatsOn=true;
#else
bool StatsOn=false;
#endif
bool SynthInit=true;
bool MusicOn=false;
bool DoMusic=true;
bool MenuOn=false;
bool MainMenu=true;
long MenuPos=0,MenuItems=4;
//char NextLevel[15];
unsigned char *NextLevel;
float NextLevelSize=10.0f;
float BlackFade=1;

long BMLevel=0;
long BMLevelDown=0;
float BlurPos=0;
#define BMMax 15
#define BMMaxSkip 4

bool EndGegner=false;
long EndCnt;
bool LastLoopBool;
long LoadMax,LoadCnt;
bool PlDead;
bool LevComplete;
long PlDeadCnt=0;
long Lives;
#define StartLives 2

#ifdef SynthMukke

#include "tf_main.h"

using namespace Tunefish;

#include "instruments.h"
#include "effects.h"

   Tunefish::Song  *song  ;
   Tunefish::Synth *synth ;

   bool more;

#endif

bool GameStarted=false;
bool QuitGameBool=false;
bool NextLevelBool=false;
/*
#define AUX_RGB             0
#define AUX_RGBA            AUX_RGB
#define GL_RGBA                           0x1908
*/
tAnimation  *Anim;

float SunLightPos[] = { 0.0f, 5.0f,-4.0f, 1.0f};			// Light Position
float SunLightAmb[] = { 0.3f, 0.3f, 0.3f, 1.0f};			// Ambient Light Values
float SunLightDif[] = { 0.0f, 0.0f, 0.0f, 1.0f};			// Diffuse Light Values
float SunLightSpc[] = { 0.0f, 0.0f, 0.0f, 1.0f};			// Specular Light Values
float PlLightPos[] = { 0.0f, 5.0f,-4.0f, 1.0f};			// Light Position
float PlLightAmb[] = { 0.0f, 0.0f, 0.0f, 1.0f};			// Ambient Light Values
float PlLightDif[] = { 1.0f, 1.0f, 1.0f, 1.0f};			// Diffuse Light Values
float PlLightSpc[] = { 1.0f, 1.0f, 1.0f, 1.0f};			// Specular Light Values
/*
float SunLightPos[] = { 0.0f, 5.0f,-4.0f, 1.0f};			// Light Position
float SunLightAmb[] = { 0.2f, 0.2f, 0.2f, 1.0f};			// Ambient Light Values
float SunLightDif[] = { 0.6f, 0.6f, 0.6f, 1.0f};			// Diffuse Light Values
float SunLightSpc[] = {-0.2f, -0.2f, -0.2f, 1.0f};			// Specular Light Values
*/

//#define		MyScale 0.2

#define		Pi				3.14159f
#define		PiHalb			Pi/2.0f
#define		CamSpeedAdd		0.09f
#define		CamBrems		0.9f
#define		CamPlSpeedAdd	0.09f
#define		CamPlBrems		0.9f
#define		CamSpeedMax		100*MyScale
#define		HandAcc			10.0f
tP3D		CPos,CLook,CLookZiel,CZiel,CSpeed,CLookSpeed,CPosSave,CLookSave;
float		CamH;
#define		MaxCamH1 60
#define		MaxCamH2 -30
tP3D		CSpeedSave,CLSpeedSave;
long		CamMode=0;

#define		VisBorder	600.0f
#define		AlphaAnfang (300.0f)

#define		Guns 2

#define		_Players 2
#define		MaxPlayers 100
//long		Players=_Players;
long		Players=0;

#define		_Create_Player_Abstand 200.0f
#define		_Act_Player_Abstand 100.0f

/*
#define		LevelName		"Rutsche.bcl"
#define		LevelSize		13.0
/**/

unsigned char		*LevelName=(unsigned char*)&BCLINTRO;
//unsigned char		*LevelName=(unsigned char*)&BCLTESTT;
//float		LevelSize=		4.0;
float		LevelSize=		25.0f;
/**/
/*
#define		LevelName		"plattform2.bcl"
#define		LevelSize		6.0
/**/
/*
#define		LevelName		"flach3.bcl"
#define		LevelSize		60.0
/**/

#define		WaterParts 10

/*
typedef tWaterFeld 
signed short	WaterFeld[WaterParts*2*WaterParts*2];
*/
float		ItemBrems=0.95f;
#define		_Fall_Speed_Item 0.05f

float		Roll=0;
float		CamSpeed=0.5f;
float		PSpeed=0.1f;
//float		PlayerSpeed=0.8;
float		PlayerSpeed=1.0f;
float		PTurnSpeed=0.1f;
float		ETurnSpeed=0.2f;
float		PBrems=0.90f;
//#define		_Fall_Speed 0.25
#define		_Fall_Speed_Minimal 0.001f
//#define		_Fall_Speed_Minimal 0
//#define		_Fall_Speed 0
#define		_Fall_Speed 0.12f
#define		_Min_Speed 0.3f
#define		_Ani_Stand_Grenze 0.3f
#define _Reflect_Min 0.25f
#define _Jump_Speed 3
#define MaxItems 10000

float		AniStep=1;

#define		WaterSteps 100
tGrund		*Water[WaterSteps];

tCommand	*CommandList;
tSector		*Level;
tItem		*Item;
tItem		*ItemList;
long		Items;

float GlMatrix[16];

#define FireSize 32
#define FireParts 16
#define FireBurnOut 5
#define FireNoBurnRange 7
#define FireBurnParts 200
#define FireAtOnce 2
long FireCounter;
unsigned long FirePalette[256];
unsigned long WaterPalette[256];

unsigned char *Fire[FireParts];
unsigned char *FireImage;
unsigned char *FireTexImage;
GLuint FireTexture;
GLuint WaterTexture;

long SinTable[1000];
#define SinGen 16384
#define SinPeriode 256

#define _Model_Player 0
#define _Model_Dog	  1
#define _Model_Enemy1 2
#define _Model_Spider 3
#define _Model_Echse  4

#define _Ani_Cnt 9
#define _Ani_Stand		0
#define _Ani_Walk		1
#define _Ani_Punch		2
#define _Ani_Kick		3
#define _Ani_Punch2		4
#define _Ani_Kick2		5
#define _Ani_Headmove	6
#define	_Ani_Jump		7
#define	_Ani_Shoot		8

#define _AttackRefresh  20

#define _Player_MinAbstand 5
//#define _Player_MinAbstand 10
#define _Player_Wegdrueck 0.0001f

//#define _KI_Entf 30
#define _KI_Entf 6
#define _KI_KloppEntf 12


#define Tiles 30
#define TileSize 5

long FramesPS=0;
long GlobalTimer=0;
long GlobalTimer2=0;
long MenuTimer=0;
long DisplayedPolys;

#define MaxManualDraw 100000
tP3D *MDPos;
tP3D *MDNormal;
tP2D *MDTex;
unsigned long *MDIndex;


float frustum[6][4];

tGrund *Sky;
//bool LoadTGA(Texture *, char *);

typedef struct
{
	bool			Active;
	bool			RealActive;
	bool			Shooting;
	long			Energy;
	long			Power;
	tP3D			Pos;
	tP3D			Rot;
	tP3D			Speed;
	tOMatrix		Matrix;
	tObjekt			*Obj;
	tSkelList       *NextPos;
	long			AniIndex;
	long			Gun;
	long			Ammo[Guns];
	tAnimation		*Ani;
	long			ModelType;
	long			AniCnt;
	long			AttackPower;
	long			AttackRefresh;
	long			AttackCnt;
	long			LastAction;

	tSector			*StandOnSector;
	tP3D			SOSPos;

	long			FallCnt;
	tP3D			LastPos;
	tP3D			LastSpeed;
	tP3D			LastRot,NextRot;
	char			JumpAble;
} tPlayer;

#define PlayerModels 5

tPlayer		*Player[MaxPlayers];
tAnimation  *ModelAni[PlayerModels][_Ani_Cnt];
tAnimation  *BaseAni[PlayerModels];
tObjekt		*Model[PlayerModels];

tSector		*GunModel[Guns+1];
tMeshList	*GunMesh[Guns+1];
float		GunSize[]={0.3f,0.2f};
long		GunReload[]={2,0};
tSector		*BulletModel[Guns+1];
tMeshList	*BulletMesh[Guns+1];
float		BulletSize[]={0.3f,1.4f};
float		BulletPower[]={800,100};
tP3D		BulletStart[Guns+1];

#define ItemMeshes 5
#define IMBox		0
#define IMMediKit	1
#define IMContinue	2
tSector		*ItemModel[ItemMeshes];
tMeshList   *ItemMesh[ItemMeshes];

float		ModelAbstand[]={0,2,0,3.5f,2};
float		ModelSize[]={6.6f,2.5f,4,7.5f,7.5f};
long		ModelEnergy[]={10000,10000,10000,80000,10000};
long		ModelPower[]={100,150,200,170,100};
long		MediHeal=3000;
bool		 Key[256];
bool		 KeyPr[256];

tP3D ViewVek,ViewX,ViewY;
tP2D ViewTex,EnvAdd;
tOMatrix ViewMatrix;

typedef struct													// Create A Structure
{
	unsigned char	*imageData;											// Image Data (UP To 32 Bits)
	unsigned int	bPP;												// Image Color DePth In Bits Per Pixel.
	unsigned int	width;												// Image Width
	unsigned int	height;												// Image Height
	unsigned int	texID;												// Texture ID Used To Select A Texture
} TextureImage;													// Structure Name

TextureImage textures[100];										// Storage For 10 Textures
GLuint ScreenTex;
GLuint BlackTex;

unsigned int		base;												// Font DisPlay List

#define _SFX_Start_Channel 16
#define _SFX_Channels 6
#define _SFX_Test 0
#define _SFX_Punch 1
#define _SFX_BulletMode 2
#define _SFX_Jump 3
#define _SFX_Flamer 4
#define _SFX_Bumper 5
#define _SFX_Pickup 6
#define _SFX_Hit 7
#define _SFX_Gun 8
#define _SFX_Beat 9
#define _SFX_Die 10

typedef struct
{
	bool	IsOn;
	long	Life;
	long	MaxLife;
	long	Cnt;
	long	Vol;
	long	Note;
	long	Instr;
	long	Panning;
} tSFX;

tSFX SFX[_SFX_Channels];

void SetAlpha(float F)
{
	glColor4f(1,1,1,F);
}

float FRandom()
{
	return((float)Random(10000)/10000.0f);
}
float FRandom3()
{
	return(FRandom()-0.5f);
}
float FRandom2()
{
	return(2.0f*FRandom3());
}

void GetCorrVectors(tP3D V1,tP3D *V2,tP3D *V3)
{
	*V2=vCross(V1,v111);
	Norm3(V3,vCross(V1,*V2));
	Norm3(V2,vCross(V1,*V3));
}

tP3D SpreadVek(tP3D P1,float Amount)
{
	tP3D V1,V2;
	GetCorrVectors(P1,&V1,&V2);
	return(vAdd5(&P1,vAdd(vMulK(V1,FRandom2()*Amount),vMulK(V2,FRandom2()*Amount))));
}

long GetFreeChannel()
{
	long I=0,Best,BestCnt;
	while((I<_SFX_Channels)&&(SFX[I].IsOn)) I++;
	Best=I;
	if(I==_SFX_Channels)
	{
		Best=0;
		BestCnt=0;
		for(I=0;I<_SFX_Channels;I++)
		{
			if(SFX[I].Cnt>BestCnt)
			{
				Best=I;
				BestCnt=SFX[I].Cnt;
			}
		}
	}
	return(Best);
}

void SetSFX(long Nr,long Life,long Note,long Instr,long Vol,long Pan)
{
	SFX[Nr].IsOn=true;
	SFX[Nr].Cnt=0;
	SFX[Nr].Life=Life;
	SFX[Nr].MaxLife=Life;
	SFX[Nr].Vol=Vol;
	SFX[Nr].Instr=Instr;
	SFX[Nr].Note=Note;
	SFX[Nr].Panning=Pan;
#ifdef SynthMukke
	synth->triggerInstrument(_SFX_Start_Channel+Nr,
							 Note,
							 Instr,
							 Vol,
							 Pan);
#endif
}

void AddSFX(long Type,tP3D *Pos)
{
	long Nr,Vol,Pan;
	float F;
	tP3D SRel,SVek=vSub(*Pos,CPos);
	F=(vLength2(SVek)/200.0f)*255.0f;
	Vol=255.0f-F;
/*
	if(Vol<0)Vol=0;
	if(Vol>255)Vol=255;
*/
	lRange(&Vol,0,255);
	SRel=CalcRelPosition(SVek,&ViewMatrix);
	Pan=128;

	Nr=GetFreeChannel();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -