📄 game.cpp
字号:
#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 + -