save_image(temp);
}
-
-
void Game::SetUpLighting(){
if(environment==snowyenvironment)
light.setColors(.65,.65,.7,.4,.4,.44);
return -1;
}
-void Game::Setenvironment(int which)
+void Game::Setenvironment(int which)
{
LOGFUNC;
texdetail=temptexdetail;
- }
- if(environment==desertenvironment){
+ } else if(environment==desertenvironment){
windvector=0;
windvector.z=2;
LoadTexture(":Data:Textures:deserttree.png",&objects.treetextureptr,0,1);
texdetail=temptexdetail;
- }
- if(environment==grassyenvironment){
+ } else if(environment==grassyenvironment){
windvector=0;
windvector.z=2;
LoadTexture(":Data:Textures:tree.png",&objects.treetextureptr,0,1);
texdetail=temptexdetail;
}
-
void Game::Loadlevel(int which){
stealthloading=0;
whichlevel=which;
}
void Game::Loadlevel(const char *name){
- static int oldlevel;
int templength;
float lamefloat;
- int lameint;
static const char *pfx = ":Data:Maps:";
char *buf;
tutorialmaxtime=1;
}
loadingstuff=1;
- if(!firstload)
- oldlevel=50;
pause_sound(whooshsound);
pause_sound(stream_firesound);
funpackf(tfile, "Bf", &dialogueboxcolor[k][l][2]);
funpackf(tfile, "Bi", &dialogueboxsound[k][l]);
- bool doneread;
-
funpackf(tfile, "Bi",&templength);
if(templength>128||templength<=0)
templength=128;
float maxdistance=0;
float tempdist;
- int whichclosest;
+ //~ int whichclosest;
for(int i=0;i<objects.numobjects;i++){
tempdist=findDistancefast(&objects.center,&objects.position[i]);
if(tempdist>maxdistance){
- whichclosest=i;
+ //~ whichclosest=i;
maxdistance=tempdist;
}
}
fclose(tfile);
- oldlevel=whichlevel;
-
-
if(numplayers>maxplayers-1)
numplayers=maxplayers-1;
for(int i=0;i<numplayers;i++){
}
- int texsize;
- texsize=512*512*3/texdetail/texdetail;
+ //~ int texsize;
+ //~ texsize=512*512*3/texdetail/texdetail;
LoadTextureSave(creatureskin[player[i].creature][player[i].whichskin],&player[i].skeleton.drawmodel.textureptr,1,&player[i].skeleton.skinText[0],&player[i].skeleton.skinsize);
visibleloading=0;
}
-
-
/*
Values of mainmenu :
1 Main menu
if(difficulty>2) difficulty=0;
break;
case 4:
- ismotionblur = 1-ismotionblur;
+ ismotionblur = !ismotionblur;
break;
case 5:
- decals = 1-decals;
+ decals = !decals;
break;
case 6:
- musictoggle = 1-musictoggle;
+ musictoggle = !musictoggle;
- if(musictoggle)
+ if(musictoggle) {
emit_stream_np(stream_menutheme);
- else {
+ } else {
pause_sound(leveltheme);
pause_sound(stream_fighttheme);
pause_sound(stream_menutheme);
break;
case 8:
flash();
-
- if(newdetail>2) newdetail=detail;
- if(newdetail<0) newdetail=detail;
- if(newscreenwidth<0) newscreenwidth=screenwidth;
- if(newscreenheight<0) newscreenheight=screenheight;
-
+
SaveSettings(*this);
mainmenu=gameon?2:1;
break;
case 9:
- invertmouse = 1-invertmouse;
+ invertmouse = !invertmouse;
break;
case 10:
usermousesensitivity+=.2;
flash();
mainmenu=3;
-
- if(newdetail>2) newdetail=detail;
- if(newdetail<0) newdetail=detail;
- if(newscreenwidth>3000) newscreenwidth=screenwidth;
- if(newscreenwidth<0) newscreenwidth=screenwidth;
- if(newscreenheight>3000) newscreenheight=screenheight;
- if(newscreenheight<0) newscreenheight=screenheight;
}
}
break;
if(Input::isKeyDown(SDLK_q) && Input::isKeyDown(SDLK_LMETA)){
tryquit=1;
- if(mainmenu==3){
- if(newdetail>2) newdetail=detail;
- if(newdetail<0) newdetail=detail;
- if(newscreenwidth<0) newscreenwidth=screenwidth;
- if(newscreenheight<0) newscreenheight=screenheight;
-
+ if(mainmenu==3) {
SaveSettings(*this);
}
}
- if(mainmenu==1||mainmenu==2){
- if(loaddistrib>4)
- transition+=multiplier/8;
- if(transition>1){
- transition=0;
- anim++;
- if(anim>4) anim=0;
- loaddistrib=0;
- }
- }
OPENAL_SetFrequency(channels[stream_menutheme], 22050);
if(entername) {
}
}
-
-
void Game::doDebugKeys(){
float headprop,bodyprop,armprop,legprop;
if(debugmode){
}
if(Input::isKeyPressed(SDLK_n)&&Input::isKeyDown(SDLK_LCTRL)){
- int closest=-1;
- float closestdist=-1;
- float distance;
for(int i=0;i<objects.numobjects;i++){
if(objects.type[i]==treeleavestype){
objects.scale[i]*=.9;
}
}
-
-
void Game::doJumpReversals(){
for(int k=0;k<numplayers;k++)
for(int i=k;i<numplayers;i++){
}
}
-
-
void Game::doAI(int i){
static bool connected;
if(player[i].aitype!=playercontrolled&&indialogue==-1){
}
}
-
-
void Game::Tick(){
static XYZ facing,flatfacing;
static int target;
- int templength;
-
for(int i=0;i<15;i++){
displaytime[i]+=multiplier;
}
//campaign over?
if(mainmenu&&endgame==1)
mainmenu=10;
+ //go to level select after completing a campaign level
+ if(campaign&&winfreeze&&mainmenu==0&&campaignchoosenext[campaignchoicewhich[whichchoice]]==1){
+ mainmenu=5;
+ gameon=0;
+ winfreeze=0;
+ fireSound();
+ flash();
+ if(musictoggle){
+ OPENAL_SetFrequency(OPENAL_ALL, 0.001);
+ emit_stream_np(stream_menutheme);
+ pause_sound(leveltheme);
+ }
+ }
//escape key pressed
//TODO: there must be code somewhere else that handles clicking the Back button, merge it with this
if(Input::isKeyPressed(SDLK_ESCAPE)&&
selected=-1;
if(mainmenu==0&&!winfreeze)
mainmenu=2; //pause
- else if(mainmenu==0&&winfreeze&&campaignchoosenext[campaignchoicewhich[whichchoice]]==1){
- mainmenu=100;
- gameon=0;
- winfreeze=0;
- }else if(mainmenu==1||mainmenu==2)
+ else if(mainmenu==1||mainmenu==2){
mainmenu=0; //unpause
+ }
//play menu theme
- if(musictoggle&&(mainmenu==1||mainmenu==2||mainmenu==100)){
+ if(musictoggle&&(mainmenu==1||mainmenu==2)){
OPENAL_SetFrequency(OPENAL_ALL, 0.001);
emit_stream_np(stream_menutheme);
pause_sound(leveltheme);
}
//finished with settings menu
if(mainmenu==3){
- if(newdetail>2)
- newdetail=detail;
- if(newdetail<0)
- newdetail=detail;
- if(newscreenwidth<0)
- newscreenwidth=screenwidth;
- if(newscreenheight<0)
- newscreenheight=screenheight;
SaveSettings(*this);
}
//effects
mainmenu=gameon?2:1; break;
case 4: case 18:
mainmenu=3; break;
- case 6: case 7: case 9: case 10: case 100:
+ case 6: case 7: case 9: case 10:
mainmenu=5; break;
}
}
if(Input::isKeyDown(SDLK_q)&&Input::isKeyDown(SDLK_LMETA)){
tryquit=1;
- if(mainmenu==3){
- if(newdetail>2)newdetail=detail;
- if(newdetail<0)newdetail=detail;
- if(newscreenwidth<0)newscreenwidth=screenwidth;
- if(newscreenheight<0)newscreenheight=screenheight;
-
+ if(mainmenu==3) {
SaveSettings(*this);
}
}
}
}
- static float keyrefreshdelay=0,bigrefreshdelay=0;
-
if(!player[0].jumpkeydown){
player[0].jumptogglekeydown=0;
}
hawkcalldelay=16+abs(Random()%8);
}
- static float temptexdetail;
-
doDebugKeys();
player[i].targetheadrotation2=pitch(participantfacing[whichdialogue][indialogue][i]);
}
- bool pause;
-
if(leveltime<.5)
numenvsounds=0;
Screenshot();
}
-
-
-void Game::TickOnce(){
+void Game::TickOnce(){
if(mainmenu)
rotation+=multiplier*5;
else
}
}
-void Game::TickOnceAfter(){
+void Game::TickOnceAfter(){
static XYZ colviewer;
static XYZ coltarget;
static XYZ target;
static XYZ col;
- static float brotate;
static XYZ facing;
static float changedelay;
static bool alldead;
if(targetlevel>numchallengelevels-1)targetlevel=0;
}
- if(changedelay>0&&!player[0].dead&&!won){
+ if(changedelay>0&&!player[0].dead&&!won) {
//high scores, awards, win
- if(campaign){
+ if(campaign) {
accountactive->winCampaignLevel(whichchoice, bonustotal, leveltime);
scoreadded=1;
- }else{
+ } else {
accountactive->winLevel(whichlevel,bonustotal-startbonustotal,leveltime);
}
won=1;
}
}
- if(campaign)
- if(mainmenu==0&&winfreeze&&(campaignchoosenext[campaignchoicewhich[whichchoice]])==1)
+ if(campaign){
+ // campaignchoosenext determines what to do when the level is complete:
+ // 0 = load next level
+ // 1 = go back to level select screen
+ // 2 = stealthload next level
+ if(mainmenu==0&&winfreeze&&(campaignchoosenext[campaignchoicewhich[whichchoice]])==1){
if(campaignnumnext[campaignchoicewhich[whichchoice]]==0)
endgame=1;
- else if(mainmenu==0&&winfreeze){
+ }else if(mainmenu==0&&winfreeze){
if(campaignchoosenext[campaignchoicewhich[whichchoice]]==2)
stealthloading=1;
else
stealthloading=0;
if(!stealthloading){
- float gLoc[3]={0,0,0};
- float vel[3]={0,0,0};
fireSound(firestartsound);
flash();
startbonustotal=0;
- ifstream ipstream(ConvertFileName(":Data:Campaigns:main.txt"));
- ipstream.ignore(256,':');
- ipstream >> campaignnumlevels;
- for(int i=0;i<campaignnumlevels;i++){
- ipstream.ignore(256,':');
- ipstream.ignore(256,':');
- ipstream.ignore(256,' ');
- ipstream >> campaignmapname[i];
- ipstream.ignore(256,':');
- ipstream >> campaigndescription[i];
- for(int j=0;j<256;j++){
- if(campaigndescription[i][j]=='_')campaigndescription[i][j]=' ';
- }
- ipstream.ignore(256,':');
- ipstream >> campaignchoosenext[i];
- ipstream.ignore(256,':');
- ipstream >> campaignnumnext[i];
- for(int j=0;j<campaignnumnext[i];j++){
- ipstream.ignore(256,':');
- ipstream >> campaignnextlevel[i][j];
- campaignnextlevel[i][j]-=1;
- }
- ipstream.ignore(256,':');
- ipstream >> campaignlocationx[i];
- ipstream.ignore(256,':');
- ipstream >> campaignlocationy[i];
- }
- ipstream.close();
-
- for(int i=0;i<campaignnumlevels;i++){
- levelvisible[i]=0;
- levelhighlight[i]=0;
- }
-
-
- for(int i=0;i<campaignnumlevels;i++){
- levelvisible[i]=0;
- levelhighlight[i]=0;
- }
-
- levelorder[0]=0;
- levelvisible[0]=1;
- for(int i=0;i<accountactive->getCampaignChoicesMade();i++){
- levelorder[i+1]=campaignnextlevel[levelorder[i]][accountactive->getCampaignChoice(i)];
- levelvisible[levelorder[i+1]]=1;
- }
- int whichlevelstart;
- whichlevelstart=accountactive->getCampaignChoicesMade()-1;
- if(whichlevelstart<0){
- campaignchoicenum=1;
- campaignchoicewhich[0]=0;
- }
- else
- {
- campaignchoicenum=campaignnumnext[levelorder[whichlevelstart]];
- for(int i=0;i<campaignchoicenum;i++){
- campaignchoicewhich[i]=campaignnextlevel[levelorder[whichlevelstart]][i];
- levelvisible[campaignnextlevel[levelorder[whichlevelstart]][i]]=1;
- levelhighlight[campaignnextlevel[levelorder[whichlevelstart]][i]]=1;
- }
- }
+ LoadCampaign();
loading=2;
loadtime=0;
stealthloading=0;
}
+ }
if(loading==3)
loading=0;
facing=DoRotation(facing,0,0-rotation,0);
viewerfacing=facing;
- brotate=0;
if(!cameramode){
if((animation[player[0].targetanimation].attack!=3&&animation[player[0].currentanimation].attack!=3)||player[0].skeleton.free)target=player[0].coords+player[0].currentoffset*(1-player[0].target)*player[0].scale+player[0].targetoffset*player[0].target*player[0].scale-player[0].facing*.05;
else target=player[0].oldcoords+player[0].currentoffset*(1-player[0].target)*player[0].scale+player[0].targetoffset*player[0].target*player[0].scale-player[0].facing*.05;