#include <limits>
#include <ctime>
+#include <dirent.h>
#include "Game.h"
#include "openal_wrapper.h"
#include "Settings.h"
#include "Input.h"
#include "Animation.h"
#include "Awards.h"
+#include "Menu.h"
#include <algorithm>
using namespace std;
+using namespace Game;
// Added more evilness needed for MSVC
#ifdef _MSC_VER
extern bool debugmode;
static int leveltheme;
extern int mainmenu;
+extern int oldmainmenu;
extern bool visibleloading;
extern XYZ envsound[30];
extern float envsoundvol[30];
extern int maptype;
extern int editoractive;
extern int editorpathtype;
+extern TGAImageRec texture;
extern float hostiletime;
extern bool gamestarted;
extern int numhotspots;
-extern int winhotspot;
-extern int windialogue;
extern int killhotspot;
extern XYZ hotspot[40];
extern int hotspottype[40];
extern bool campaign;
+
+
+void Loadlevel(int which);
+void Loadlevel(const char *name);
+
+
+
+class CampaignLevel {
+private:
+ int width;
+ struct Position { int x,y; };
+public:
+ std::string mapname;
+ std::string description;
+ int choosenext;
+ /*
+ 0 = Immediately load next level at the end of this one.
+ 1 = Go back to the world map.
+ 2 = Don't bring up the Fiery loading screen. Maybe other things, I've not investigated.
+ */
+ //int numnext; // 0 on final level. As David said: he meant to add story branching, but he eventually hadn't.
+ std::vector<int> nextlevel;
+ Position location;
+ CampaignLevel() : width(10) {
+ choosenext = 1;
+ location.x = 0;
+ location.y = 0;
+ }
+ int getStartX() { return 30+120+location.x*400/512; }
+ int getStartY() { return 30+30+(512-location.y)*400/512; }
+ int getEndX() { return getStartX()+width; }
+ int getEndY() { return getStartY()+width; }
+ XYZ getCenter() {
+ XYZ center;
+ center.x=getStartX()+width/2;
+ center.y=getStartY()+width/2;
+ return center;
+ }
+ int getWidth() { return width; }
+ istream& operator<< (istream& is) {
+ is.ignore(256,':');
+ is.ignore(256,':');
+ is.ignore(256,' ');
+ is >> mapname;
+ is.ignore(256,':');
+ is >> description;
+ for(int pos = description.find('_');pos!=string::npos;pos = description.find('_',pos)) {
+ description.replace(pos,1,1,' ');
+ }
+ is.ignore(256,':');
+ is >> choosenext;
+ is.ignore(256,':');
+ int numnext,next;
+ is >> numnext;
+ for(int j=0;j<numnext;j++) {
+ is.ignore(256,':');
+ is >> next;
+ nextlevel.push_back(next-1);
+ }
+ is.ignore(256,':');
+ is >> location.x;
+ is.ignore(256,':');
+ is >> location.y;
+ return is;
+ }
+ friend istream& operator>> (istream& is, CampaignLevel& cl) {
+ return cl << is;
+ }
+};
+
+int indemo = 0;
+bool won = false;
+int entername = 0;
+vector<CampaignLevel> campaignlevels;
+int whichchoice = 0;
+int actuallevel = 0;
+bool winhotspot = false;
+bool windialogue = false;
+bool realthreat = 0;
+XYZ cameraloc;
+float cameradist = 0;
+bool oldattackkey = 0;
+int whichlevel = 0;
+float musicvolume[4] = {};
+float oldmusicvolume[4] = {};
+int musicselected = 0;
+
+
+
static const char *rabbitskin[] = {
":Data:Textures:Fur3.jpg",
":Data:Textures:Fur.jpg",
}
static const char *cmd_names[] = {
-#define DECLARE_COMMAND(cmd) #cmd " ",
+#define DECLARE_COMMAND(cmd) #cmd,
#include "ConsoleCmds.h"
#undef DECLARE_COMMAND
};
-typedef void (*console_handler)(Game *game, const char *args);
+typedef void (*console_handler)(const char *args);
-#define DECLARE_COMMAND(cmd) static void ch_##cmd(Game *game, const char *args);
+#define DECLARE_COMMAND(cmd) static void ch_##cmd(const char *args);
#include "ConsoleCmds.h"
#undef DECLARE_COMMAND
-// added utility functions -sf17k =============================================================
+// utility functions
-//TODO: try to hide these variables completely with a better interface
-inline void setAnimation(int playerid,int animation){
- player[playerid].targetanimation=animation;
- player[playerid].targetframe=0;
- player[playerid].target=0;
-}
-
-//TODO: this is incorrect but I'm afraid to change it and break something,
-//probably causes quirky behavior that I might want to preserve
+// TODO: this is slightly incorrect
inline float roughDirection(XYZ vec){
Normalise(&vec);
float angle=-asin(-vec.x)*180/M_PI;
inline float roughDirectionTo(XYZ start, XYZ end){
return roughDirection(end-start);
}
-
-//TODO: gotta be a better way
-inline float pitch(XYZ vec){
+inline float pitchOf(XYZ vec){
Normalise(&vec);
return -asin(vec.y)*180/M_PI;
}
inline float pitchTo(XYZ start, XYZ end){
- return pitch(end-start);
+ return pitchOf(end-start);
}
-
-//change these to a Person method
-inline Joint& playerJoint(int playerid, int bodypart){
- return player[playerid].skeleton.joints[player[playerid].skeleton.jointlabels[bodypart]]; }
-inline Joint& playerJoint(Person* pplayer, int bodypart){
- return pplayer->skeleton.joints[pplayer->skeleton.jointlabels[bodypart]]; }
-
-inline float sq(float n){ return n*n; }
-
+inline float sq(float n) { return n*n; }
inline float stepTowardf(float from, float to, float by){
if(fabs(from-to)<by) return to;
else if(from>to) return from-by;
emit_sound_at(sound, temppos);
}
-// end added utility functions ================================================================
+// ================================================================
+
+bool AddClothes(const char *fileName, GLubyte *array) {
+ LOGFUNC;
+ //Load Image
+ unsigned char fileNamep[256];
+ CopyCStringToPascal(fileName,fileNamep);
+ bool opened;
+ opened=upload_image( fileNamep ,1);
+
+ float alphanum;
+ //Is it valid?
+ if(opened){
+ if(tintr>1)tintr=1;
+ if(tintg>1)tintg=1;
+ if(tintb>1)tintb=1;
+
+ if(tintr<0)tintr=0;
+ if(tintg<0)tintg=0;
+ if(tintb<0)tintb=0;
+
+ int bytesPerPixel=texture.bpp/8;
+
+ int tempnum=0;
+ alphanum=255;
+ for(int i=0;i<(int)(texture.sizeY*texture.sizeX*bytesPerPixel);i++){
+ if(bytesPerPixel==3)alphanum=255;
+ else if((i+1)%4==0)alphanum=texture.data[i];
+ //alphanum/=2;
+ if((i+1)%4||bytesPerPixel==3){
+ if((i%4)==0)texture.data[i]*=tintr;
+ if((i%4)==1)texture.data[i]*=tintg;
+ if((i%4)==2)texture.data[i]*=tintb;
+ array[tempnum]=(float)array[tempnum]*(1-alphanum/255)+(float)texture.data[i]*(alphanum/255);
+ tempnum++;
+ }
+ }
+ }
+ else return 0;
+ return 1;
+}
-static void ch_quit(Game *game, const char *args)
+static void ch_quit(const char *args)
{
- game->tryquit = 1;
+ tryquit = 1;
}
-static void ch_map(Game *game, const char *args)
+static void ch_map(const char *args)
{
- game->Loadlevel(args);
- game->whichlevel = -2;
+ Loadlevel(args);
+ whichlevel = -2;
campaign = 0;
}
-static void ch_save(Game *game, const char *args){
+static void ch_save(const char *args){
char buf[64];
snprintf(buf, 63, ":Data:Maps:%s", args);
fpackf(tfile, "Bb Bf Bf Bf", skyboxtexture, skyboxr, skyboxg, skyboxb);
fpackf(tfile, "Bf Bf Bf", skyboxlightr, skyboxlightg, skyboxlightb);
fpackf(tfile, "Bf Bf Bf Bf Bf Bi", player[0].coords.x, player[0].coords.y, player[0].coords.z,
- player[0].rotation, player[0].targetrotation, player[0].num_weapons);
+ player[0].yaw, player[0].targetyaw, player[0].num_weapons);
if(player[0].num_weapons>0&&player[0].num_weapons<5)
for(int j=0;j<player[0].num_weapons;j++)
fpackf(tfile, "Bi", weapons[player[0].weaponids[j]].getType());
fpackf(tfile, "Bi", dialoguetype[k]);
for(int l=0;l<10;l++){
fpackf(tfile, "Bf Bf Bf", participantlocation[k][l].x, participantlocation[k][l].y, participantlocation[k][l].z);
- fpackf(tfile, "Bf", participantrotation[k][l]);
+ fpackf(tfile, "Bf", participantyaw[k][l]);
}
for(int l=0;l<numdialogueboxes[k];l++){
fpackf(tfile, "Bi", dialogueboxlocation[k][l]);
for(int m=0;m<10;m++)
fpackf(tfile, "Bf Bf Bf", participantfacing[k][l][m].x, participantfacing[k][l][m].y, participantfacing[k][l][m].z);
- fpackf(tfile, "Bf Bf",dialoguecamerarotation[k][l],dialoguecamerarotation2[k][l]);
+ fpackf(tfile, "Bf Bf",dialoguecamerayaw[k][l],dialoguecamerapitch[k][l]);
}
}
fpackf(tfile, "Bi", objects.numobjects);
for(int k=0;k<objects.numobjects;k++)
- fpackf(tfile, "Bi Bf Bf Bf Bf Bf Bf", objects.type[k], objects.rotation[k], objects.rotation2[k],
+ fpackf(tfile, "Bi Bf Bf Bf Bf Bf Bf", objects.type[k], objects.yaw[k], objects.pitch[k],
objects.position[k].x, objects.position[k].y, objects.position[k].z, objects.scale[k]);
fpackf(tfile, "Bi", numhotspots);
for(int j=1;j<numplayers;j++){
fpackf(tfile, "Bi Bi Bf Bf Bf Bi Bi Bf Bb Bf", player[j].whichskin, player[j].creature,
player[j].coords.x, player[j].coords.y, player[j].coords.z,
- player[j].num_weapons, player[j].howactive, player[j].scale, player[j].immobile, player[j].rotation);
+ player[j].num_weapons, player[j].howactive, player[j].scale, player[j].immobile, player[j].yaw);
if(player[j].num_weapons<5)
for(int k=0;k<player[j].num_weapons;k++)
fpackf(tfile, "Bi", weapons[player[j].weaponids[k]].getType());
}
}
- fpackf(tfile, "Bi", game->numpathpoints);
- for(int j=0;j<game->numpathpoints;j++){
- fpackf(tfile, "Bf Bf Bf Bi", game->pathpoint[j].x, game->pathpoint[j].y, game->pathpoint[j].z, game->numpathpointconnect[j]);
- for(int k=0;k<game->numpathpointconnect[j];k++)
- fpackf(tfile, "Bi", game->pathpointconnect[j][k]);
+ fpackf(tfile, "Bi", numpathpoints);
+ for(int j=0;j<numpathpoints;j++){
+ fpackf(tfile, "Bf Bf Bf Bi", pathpoint[j].x, pathpoint[j].y, pathpoint[j].z, numpathpointconnect[j]);
+ for(int k=0;k<numpathpointconnect[j];k++)
+ fpackf(tfile, "Bi", pathpointconnect[j][k]);
}
- fpackf(tfile, "Bf Bf Bf Bf", game->mapcenter.x, game->mapcenter.y, game->mapcenter.z, game->mapradius);
+ fpackf(tfile, "Bf Bf Bf Bf", mapcenter.x, mapcenter.y, mapcenter.z, mapradius);
fclose(tfile);
}
-static void ch_cellar(Game *game, const char *args)
+static void ch_cellar(const char *args)
{
- game->LoadTextureSave(":Data:Textures:Furdarko.jpg",&player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:Furdarko.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
}
-static void ch_tint(Game *game, const char *args)
+static void ch_tint(const char *args)
{
sscanf(args, "%f%f%f", &tintr, &tintg, &tintb);
}
-static void ch_tintr(Game *game, const char *args)
+static void ch_tintr(const char *args)
{
tintr = atof(args);
}
-static void ch_tintg(Game *game, const char *args)
+static void ch_tintg(const char *args)
{
tintg = atof(args);
}
-static void ch_tintb(Game *game, const char *args)
+static void ch_tintb(const char *args)
{
tintb = atof(args);
}
-static void ch_speed(Game *game, const char *args)
+static void ch_speed(const char *args)
{
player[0].speedmult = atof(args);
}
-static void ch_strength(Game *game, const char *args)
+static void ch_strength(const char *args)
{
player[0].power = atof(args);
}
-static void ch_power(Game *game, const char *args)
+static void ch_power(const char *args)
{
player[0].power = atof(args);
}
-static void ch_size(Game *game, const char *args)
+static void ch_size(const char *args)
{
player[0].scale = atof(args) * .2;
}
-static int find_closest()
-{
- int closest = 0;
- float closestdist = std::numeric_limits<float>::max();
-
- for (int i = 1; i < numplayers; i++) {
- float distance;
- distance = findDistancefast(&player[i].coords,&player[0].coords);
- if (distance < closestdist) {
- closestdist = distance;
- closest = i;
+static int findClosestPlayer(){
+ int closest = -1;
+ float closestdist = std::numeric_limits<float>::max();
+
+ for(int i=1; i<numplayers; i++){
+ float distance = distsq(&player[i].coords, &player[0].coords);
+ if(distance < closestdist){
+ closestdist = distance;
+ closest = i;
+ }
}
- }
- return closest;
+ return closest;
}
-static void ch_sizenear(Game *game, const char *args)
-{
- int closest = find_closest();
+static int findClosestObject(){
+ int closest = -1;
+ float closestdist = std::numeric_limits<float>::max();
- if (closest)
+ for(int i=0; i<objects.numobjects; i++){
+ float distance = distsq(&objects.position[i], &player[0].coords);
+ if(distance < closestdist){
+ closestdist = distance;
+ closest = i;
+ }
+ }
+ return closest;
+}
+
+static void ch_sizenear(const char *args)
+{
+ int closest = findClosestPlayer();
+ if(closest>=0)
player[closest].scale = atof(args) * .2;
}
}
}
-static void ch_proportion(Game *game, const char *args)
+static void ch_proportion(const char *args)
{
set_proportion(0, args);
}
-static void ch_proportionnear(Game *game, const char *args)
+static void ch_proportionnear(const char *args)
{
- int closest = find_closest();
- if (closest)
+ int closest = findClosestPlayer();
+ if(closest>=0)
set_proportion(closest, args);
}
player[pnum].protectionlow = low;
}
-static void ch_protection(Game *game, const char *args)
+static void ch_protection(const char *args)
{
set_protection(0, args);
}
-static void ch_protectionnear(Game *game, const char *args)
+static void ch_protectionnear(const char *args)
{
- int closest = find_closest();
- if (closest)
+ int closest = findClosestPlayer();
+ if(closest>=0)
set_protection(closest, args);
}
player[pnum].armorlow = low;
}
-static void ch_armor(Game *game, const char *args)
+static void ch_armor(const char *args)
{
set_armor(0, args);
}
-static void ch_armornear(Game *game, const char *args)
+static void ch_armornear(const char *args)
{
- int closest = find_closest();
- if (closest)
+ int closest = findClosestPlayer();
+ if(closest>=0)
set_armor(closest, args);
}
-static void ch_protectionreset(Game *game, const char *args)
+static void ch_protectionreset(const char *args)
{
set_protection(0, "1 1 1");
set_armor(0, "1 1 1");
player[pnum].metallow = low;
}
-static void ch_metal(Game *game, const char *args)
+static void ch_metal(const char *args)
{
set_metal(0, args);
}
-static void set_noclothes(int pnum, Game *game, const char *args)
+static void set_noclothes(int pnum, const char *args)
{
player[pnum].numclothes = 0;
- game->LoadTextureSave(creatureskin[player[pnum].creature][player[pnum].whichskin],
- &player[pnum].skeleton.drawmodel.textureptr,1,
- &player[pnum].skeleton.skinText[0],&player[pnum].skeleton.skinsize);
+ player[pnum].skeleton.drawmodel.textureptr.load(
+ creatureskin[player[pnum].creature][player[pnum].whichskin],1,
+ &player[pnum].skeleton.skinText[0],&player[pnum].skeleton.skinsize);
}
-static void ch_noclothes(Game *game, const char *args)
+static void ch_noclothes(const char *args)
{
- set_noclothes(0, game, args);
+ set_noclothes(0, args);
}
-static void ch_noclothesnear(Game *game, const char *args)
+static void ch_noclothesnear(const char *args)
{
- int closest = find_closest();
- if (closest)
- set_noclothes(closest, game, args);
+ int closest = findClosestPlayer();
+ if(closest>=0)
+ set_noclothes(closest, args);
}
-static void set_clothes(int pnum, Game *game, const char *args)
+static void set_clothes(int pnum, const char *args)
{
char buf[64];
snprintf(buf, 63, ":Data:Textures:%s.png", args);
- if (!game->AddClothes(buf,&player[pnum].skeleton.skinText[pnum]))
+ if (!AddClothes(buf,&player[pnum].skeleton.skinText[pnum]))
return;
player[pnum].DoMipmaps();
player[pnum].numclothes++;
}
-static void ch_clothes(Game *game, const char *args)
+static void ch_clothes(const char *args)
{
- set_clothes(0, game, args);
+ set_clothes(0, args);
}
-static void ch_clothesnear(Game *game, const char *args)
+static void ch_clothesnear(const char *args)
{
- int closest = find_closest();
- if (closest)
- set_clothes(closest, game, args);
+ int closest = findClosestPlayer();
+ if(closest>=0)
+ set_clothes(closest, args);
}
-static void ch_belt(Game *game, const char *args)
+static void ch_belt(const char *args)
{
player[0].skeleton.clothes = !player[0].skeleton.clothes;
}
-static void ch_cellophane(Game *game, const char *args)
+static void ch_cellophane(const char *args)
{
cellophane = !cellophane;
float mul = cellophane ? 0 : 1;
}
}
-static void ch_funnybunny(Game *game, const char *args)
+static void ch_funnybunny(const char *args)
{
player[0].skeleton.id=0;
player[0].skeleton.Load(":Data:Skeleton:Basic Figure",":Data:Skeleton:Basic Figurelow",
":Data:Models:Body4.solid",":Data:Models:Body5.solid",
":Data:Models:Body6.solid",":Data:Models:Body7.solid",
":Data:Models:Bodylow.solid",":Data:Models:Belt.solid",1);
- game->LoadTextureSave(":Data:Textures:fur3.jpg",&player[0].skeleton.drawmodel.textureptr,1,
- &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:fur3.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
player[0].creature=rabbittype;
player[0].scale=.2;
player[0].headless=0;
set_proportion(0, "1 1 1 1");
}
-static void ch_wolfie(Game *game, const char *args)
+static void ch_wolfie(const char *args)
{
player[0].skeleton.id=0;
player[0].skeleton.Load(":Data:Skeleton:Basic Figure Wolf",":Data:Skeleton:Basic Figure Wolf Low",
":Data:Models:Wolf4.solid",":Data:Models:Wolf5.solid",
":Data:Models:Wolf6.solid",":Data:Models:Wolf7.solid",
":Data:Models:Wolflow.solid",":Data:Models:Belt.solid",0);
- game->LoadTextureSave(":Data:Textures:Wolf.jpg",&player[0].skeleton.drawmodel.textureptr,1,
- &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:Wolf.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
player[0].creature=wolftype;
player[0].damagetolerance=300;
set_proportion(0, "1 1 1 1");
}
-static void ch_wolfieisgod(Game *game, const char *args)
+static void ch_wolfieisgod(const char *args)
{
- ch_wolfie(game, args);
+ ch_wolfie(args);
}
-static void ch_wolf(Game *game, const char *args)
+static void ch_wolf(const char *args)
{
- game->LoadTextureSave(":Data:Textures:Wolf.jpg",&player[0].skeleton.drawmodel.textureptr,1,
- &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:Wolf.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
}
-static void ch_snowwolf(Game *game, const char *args)
+static void ch_snowwolf(const char *args)
{
- game->LoadTextureSave(":Data:Textures:SnowWolf.jpg",&player[0].skeleton.drawmodel.textureptr,1,
- &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:SnowWolf.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
}
-static void ch_darkwolf(Game *game, const char *args)
+static void ch_darkwolf(const char *args)
{
- game->LoadTextureSave(":Data:Textures:DarkWolf.jpg",&player[0].skeleton.drawmodel.textureptr,1,
- &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:DarkWolf.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
}
-static void ch_lizardwolf(Game *game, const char *args)
+static void ch_lizardwolf(const char *args)
{
- game->LoadTextureSave(":Data:Textures:Lizardwolf.jpg",&player[0].skeleton.drawmodel.textureptr,1,
- &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:Lizardwolf.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
}
-static void ch_white(Game *game, const char *args)
+static void ch_white(const char *args)
{
- game->LoadTextureSave(":Data:Textures:fur.jpg",&player[0].skeleton.drawmodel.textureptr,1,
- &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:fur.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
}
-static void ch_brown(Game *game, const char *args)
+static void ch_brown(const char *args)
{
- game->LoadTextureSave(":Data:Textures:fur3.jpg",&player[0].skeleton.drawmodel.textureptr,1,
- &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:fur3.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
}
-static void ch_black(Game *game, const char *args)
+static void ch_black(const char *args)
{
- game->LoadTextureSave(":Data:Textures:fur2.jpg",&player[0].skeleton.drawmodel.textureptr,1,
- &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(":Data:Textures:fur2.jpg",1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
}
-static void ch_sizemin(Game *game, const char *args)
+static void ch_sizemin(const char *args)
{
for (int i = 1; i < numplayers; i++)
if (player[i].scale < 0.8 * 0.2)
player[i].scale = 0.8 * 0.2;
}
-static void ch_tutorial(Game *game, const char *args)
+static void ch_tutorial(const char *args)
{
tutoriallevel = atoi(args);
}
-static void ch_hostile(Game *game, const char *args)
+static void ch_hostile(const char *args)
{
hostile = atoi(args);
}
-static void ch_indemo(Game *game, const char *args)
+static void ch_indemo(const char *args)
{
- game->indemo=1;
+ indemo=1;
hotspot[numhotspots]=player[0].coords;
hotspotsize[numhotspots]=0;
hotspottype[numhotspots]=-111;
numhotspots++;
}
-static void ch_notindemo(Game *game, const char *args)
+static void ch_notindemo(const char *args)
{
- game->indemo=0;
+ indemo=0;
numhotspots--;
}
-static void ch_type(Game *game, const char *args)
+static void ch_type(const char *args)
{
int n = sizeof(editortypenames) / sizeof(editortypenames[0]);
for (int i = 0; i < n; i++)
}
}
-static void ch_path(Game *game, const char *args)
+static void ch_path(const char *args)
{
int n = sizeof(pathtypenames) / sizeof(pathtypenames[0]);
for (int i = 0; i < n; i++)
}
}
-static void ch_hs(Game *game, const char *args)
+static void ch_hs(const char *args)
{
hotspot[numhotspots]=player[0].coords;
numhotspots++;
}
-static void ch_dialogue(Game *game, const char *args)
+static void ch_dialogue(const char *args)
{
int dlg;
char buf1[32], buf2[64];
numdialogues++;
}
-static void ch_fixdialogue(Game *game, const char *args)
+static void ch_fixdialogue(const char *args)
{
char buf1[32], buf2[64];
int whichdi;
ipstream.close();
}
-static void ch_fixtype(Game *game, const char *args)
+static void ch_fixtype(const char *args)
{
int dlg;
sscanf(args, "%d", &dlg);
dialoguetype[0] = dlg;
}
-static void ch_fixrotation(Game *game, const char *args)
+static void ch_fixrotation(const char *args)
{
- participantrotation[whichdialogue][participantfocus[whichdialogue][indialogue]]=player[participantfocus[whichdialogue][indialogue]].rotation;
+ participantyaw[whichdialogue][participantfocus[whichdialogue][indialogue]]=player[participantfocus[whichdialogue][indialogue]].yaw;
}
-static void ch_ddialogue(Game *game, const char *args)
+static void ch_ddialogue(const char *args)
{
if (numdialogues)
numdialogues--;
}
-static void ch_dhs(Game *game, const char *args)
+static void ch_dhs(const char *args)
{
if (numhotspots)
numhotspots--;
}
-static void ch_immobile(Game *game, const char *args)
+static void ch_immobile(const char *args)
{
player[0].immobile = 1;
}
-static void ch_allimmobile(Game *game, const char *args)
+static void ch_allimmobile(const char *args)
{
for (int i = 1; i < numplayers; i++)
player[i].immobile = 1;
}
-static void ch_mobile(Game *game, const char *args)
+static void ch_mobile(const char *args)
{
player[0].immobile = 0;
}
-static void ch_default(Game *game, const char *args)
+static void ch_default(const char *args)
{
player[0].armorhead=1;
player[0].armorhigh=1;
}
player[0].numclothes=0;
- game->LoadTextureSave(creatureskin[player[0].creature][player[0].whichskin],
- &player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],
- &player[0].skeleton.skinsize);
+ player[0].skeleton.drawmodel.textureptr.load(
+ creatureskin[player[0].creature][player[0].whichskin],1,
+ &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize);
editoractive=typeactive;
player[0].immobile=0;
}
-static void ch_play(Game *game, const char *args)
+static void ch_play(const char *args)
{
int dlg;
sscanf(args, "%d", &dlg);
for(int i=0;i<numdialogueboxes[whichdialogue];i++){
player[participantfocus[whichdialogue][i]].coords=participantlocation[whichdialogue][participantfocus[whichdialogue][i]];
- player[participantfocus[whichdialogue][i]].rotation=participantrotation[whichdialogue][participantfocus[whichdialogue][i]];
- player[participantfocus[whichdialogue][i]].targetrotation=participantrotation[whichdialogue][participantfocus[whichdialogue][i]];
+ player[participantfocus[whichdialogue][i]].yaw=participantyaw[whichdialogue][participantfocus[whichdialogue][i]];
+ player[participantfocus[whichdialogue][i]].targetyaw=participantyaw[whichdialogue][participantfocus[whichdialogue][i]];
player[participantfocus[whichdialogue][i]].velocity=0;
- player[participantfocus[whichdialogue][i]].targetanimation=player[participantfocus[whichdialogue][i]].getIdle();
- player[participantfocus[whichdialogue][i]].targetframe=0;
+ player[participantfocus[whichdialogue][i]].animTarget=player[participantfocus[whichdialogue][i]].getIdle();
+ player[participantfocus[whichdialogue][i]].frameTarget=0;
}
directing=0;
playdialogueboxsound();
}
-static void ch_mapkilleveryone(Game *game, const char *args)
+static void ch_mapkilleveryone(const char *args)
{
maptype = mapkilleveryone;
}
-static void ch_mapkillmost(Game *game, const char *args)
+static void ch_mapkillmost(const char *args)
{
maptype = mapkillmost;
}
-static void ch_mapkillsomeone(Game *game, const char *args)
+static void ch_mapkillsomeone(const char *args)
{
maptype = mapkillsomeone;
}
-static void ch_mapgosomewhere(Game *game, const char *args)
+static void ch_mapgosomewhere(const char *args)
{
maptype = mapgosomewhere;
}
-static void ch_viewdistance(Game *game, const char *args)
+static void ch_viewdistance(const char *args)
{
viewdistance = atof(args)*100;
}
-static void ch_fadestart(Game *game, const char *args)
+static void ch_fadestart(const char *args)
{
fadestart = atof(args);
}
-static void ch_slomo(Game *game, const char *args)
+static void ch_slomo(const char *args)
{
slomospeed = atof(args);
slomo = !slomo;
slomodelay = 1000;
}
-static void ch_slofreq(Game *game, const char *args)
+static void ch_slofreq(const char *args)
{
slomofreq = atof(args);
}
-static void ch_skytint(Game *game, const char *args)
+static void ch_skytint(const char *args)
{
sscanf(args, "%f%f%f", &skyboxr, &skyboxg, &skyboxb);
skyboxlightg=skyboxg;
skyboxlightb=skyboxb;
- game->SetUpLighting();
+ SetUpLighting();
terrain.DoShadows();
objects.DoShadows();
}
-static void ch_skylight(Game *game, const char *args)
+static void ch_skylight(const char *args)
{
sscanf(args, "%f%f%f", &skyboxlightr, &skyboxlightg, &skyboxlightb);
- game->SetUpLighting();
+ SetUpLighting();
terrain.DoShadows();
objects.DoShadows();
}
-static void ch_skybox(Game *game, const char *args)
+static void ch_skybox(const char *args)
{
skyboxtexture = !skyboxtexture;
- game->SetUpLighting();
+ SetUpLighting();
terrain.DoShadows();
objects.DoShadows();
}
-static void cmd_dispatch(Game *game, const char *cmd)
+static void cmd_dispatch(const string cmd)
{
int i, n_cmds = sizeof(cmd_names) / sizeof(cmd_names[0]);
for (i = 0; i < n_cmds; i++)
- if (stripfx(cmd, cmd_names[i]))
+ if (cmd.substr(0,cmd.find(' '))==string(cmd_names[i]))
{
- cmd_handlers[i](game, cmd + strlen(cmd_names[i]));
- break;
+ cout << "|" << cmd.substr(cmd.find(' ')+1) << "|" << endl;
+ cmd_handlers[i](cmd.substr(cmd.find(' ')+1).c_str());
+ break;
}
emit_sound_np(i < n_cmds ? consolesuccesssound : consolefailsound);
}
light.ambient[2]*=(skyboxlightb+average)/2;
}
-int Game::findPathDist(int start,int end){
+int findPathDist(int start,int end){
int smallestcount,count,connected;
int last,last2,last3,last4;
int closest;
objects.type[i]!=firetype){
colviewer=startpoint;
coltarget=endpoint;
- if(objects.model[i].LineCheck(&colviewer,&coltarget,&colpoint,&objects.position[i],&objects.rotation[i])!=-1)return i;
+ if(objects.model[i].LineCheck(&colviewer,&coltarget,&colpoint,&objects.position[i],&objects.yaw[i])!=-1)return i;
}
}
}
colviewer=startpoint;
coltarget=endpoint;
//FIXME: i/what
- if(objects.model[what].LineCheck(&colviewer,&coltarget,&colpoint,&objects.position[what],&objects.rotation[what])!=-1)return i;
+ if(objects.model[what].LineCheck(&colviewer,&coltarget,&colpoint,&objects.position[what],&objects.yaw[what])!=-1)return i;
}
}
}
return -1;
}
-void Game::Setenvironment(int which)
+void Setenvironment(int which)
{
LOGFUNC;
if(ambientsound)
emit_stream_np(stream_wind);
- LoadTexture(":Data:Textures:snowtree.png",&objects.treetextureptr,0,1);
- LoadTexture(":Data:Textures:bushsnow.png",&objects.bushtextureptr,0,1);
- LoadTexture(":Data:Textures:bouldersnow.jpg",&objects.rocktextureptr,1,0);
- LoadTexture(":Data:Textures:snowbox.jpg",&objects.boxtextureptr,1,0);
+ objects.treetextureptr.load(":Data:Textures:snowtree.png",0,1);
+ objects.bushtextureptr.load(":Data:Textures:bushsnow.png",0,1);
+ objects.rocktextureptr.load(":Data:Textures:bouldersnow.jpg",1,0);
+ objects.boxtextureptr.load(":Data:Textures:snowbox.jpg",1,0);
footstepsound = footstepsn1;
footstepsound2 = footstepsn2;
footstepsound3 = footstepst1;
footstepsound4 = footstepst2;
- LoadTexture(":Data:Textures:snow.jpg",&terraintexture,1,0);
-
- LoadTexture(":Data:Textures:rock.jpg",&terraintexture2,1,0);
+ terraintexture.load(":Data:Textures:snow.jpg",1,0);
+ terraintexture2.load(":Data:Textures:rock.jpg",1,0);
//LoadTexture(":Data:Textures:detailgrain.png",&terraintexture3,1);
temptexdetail=texdetail;
if(texdetail>1)texdetail=4;
- skybox.load( ":Data:Textures:Skybox(snow):Front.jpg",
+ skybox->load( ":Data:Textures:Skybox(snow):Front.jpg",
":Data:Textures:Skybox(snow):Left.jpg",
":Data:Textures:Skybox(snow):Back.jpg",
":Data:Textures:Skybox(snow):Right.jpg",
} else if(environment==desertenvironment){
windvector=0;
windvector.z=2;
- LoadTexture(":Data:Textures:deserttree.png",&objects.treetextureptr,0,1);
- LoadTexture(":Data:Textures:bushdesert.png",&objects.bushtextureptr,0,1);
- LoadTexture(":Data:Textures:boulderdesert.jpg",&objects.rocktextureptr,1,0);
- LoadTexture(":Data:Textures:desertbox.jpg",&objects.boxtextureptr,1,0);
+ objects.treetextureptr.load(":Data:Textures:deserttree.png",0,1);
+ objects.bushtextureptr.load(":Data:Textures:bushdesert.png",0,1);
+ objects.rocktextureptr.load(":Data:Textures:boulderdesert.jpg",1,0);
+ objects.boxtextureptr.load(":Data:Textures:desertbox.jpg",1,0);
if(ambientsound)
footstepsound3 = footstepsn1;
footstepsound4 = footstepsn2;
- LoadTexture(":Data:Textures:sand.jpg",&terraintexture,1,0);
-
- LoadTexture(":Data:Textures:sandslope.jpg",&terraintexture2,1,0);
+ terraintexture.load(":Data:Textures:sand.jpg",1,0);
+ terraintexture2.load(":Data:Textures:sandslope.jpg",1,0);
//LoadTexture(":Data:Textures:detailgrain.png",&terraintexture3,1);
temptexdetail=texdetail;
if(texdetail>1)texdetail=4;
- skybox.load( ":Data:Textures:Skybox(sand):Front.jpg",
+ skybox->load( ":Data:Textures:Skybox(sand):Front.jpg",
":Data:Textures:Skybox(sand):Left.jpg",
":Data:Textures:Skybox(sand):Back.jpg",
":Data:Textures:Skybox(sand):Right.jpg",
} else if(environment==grassyenvironment){
windvector=0;
windvector.z=2;
- LoadTexture(":Data:Textures:tree.png",&objects.treetextureptr,0,1);
- LoadTexture(":Data:Textures:bush.png",&objects.bushtextureptr,0,1);
- LoadTexture(":Data:Textures:boulder.jpg",&objects.rocktextureptr,1,0);
- LoadTexture(":Data:Textures:grassbox.jpg",&objects.boxtextureptr,1,0);
+ objects.treetextureptr.load(":Data:Textures:tree.png",0,1);
+ objects.bushtextureptr.load(":Data:Textures:bush.png",0,1);
+ objects.rocktextureptr.load(":Data:Textures:boulder.jpg",1,0);
+ objects.boxtextureptr.load(":Data:Textures:grassbox.jpg",1,0);
if(ambientsound)
emit_stream_np(stream_wind, 100.);
footstepsound3 = footstepst1;
footstepsound4 = footstepst2;
- LoadTexture(":Data:Textures:grassdirt.jpg",&terraintexture,1,0);
-
- LoadTexture(":Data:Textures:mossrock.jpg",&terraintexture2,1,0);
+ terraintexture.load(":Data:Textures:grassdirt.jpg",1,0);
+ terraintexture2.load(":Data:Textures:mossrock.jpg",1,0);
//LoadTexture(":Data:Textures:detail.png",&terraintexture3,1);
temptexdetail=texdetail;
if(texdetail>1)texdetail=4;
- skybox.load( ":Data:Textures:Skybox(grass):Front.jpg",
+ skybox->load( ":Data:Textures:Skybox(grass):Front.jpg",
":Data:Textures:Skybox(grass):Left.jpg",
":Data:Textures:Skybox(grass):Back.jpg",
":Data:Textures:Skybox(grass):Right.jpg",
texdetail=temptexdetail;
}
-void Game::Loadlevel(int which){
+void LoadCampaign() {
+ if(!accountactive)
+ return;
+ ifstream ipstream(ConvertFileName((":Data:Campaigns:"+accountactive->getCurrentCampaign()+".txt").c_str()));
+ ipstream.ignore(256,':');
+ int numlevels;
+ ipstream >> numlevels;
+ campaignlevels.clear();
+ for(int i=0;i<numlevels;i++) {
+ CampaignLevel cl;
+ ipstream >> cl;
+ campaignlevels.push_back(cl);
+ }
+ ipstream.close();
+
+ ifstream test(ConvertFileName((":Data:Textures:"+accountactive->getCurrentCampaign()+":World.png").c_str()));
+ if(test.good()) {
+ Mainmenuitems[7].load((":Data:Textures:"+accountactive->getCurrentCampaign()+":World.png").c_str(),0,0);
+ } else {
+ Mainmenuitems[7].load(":Data:Textures:World.png",0,0);
+ }
+
+ if(accountactive->getCampaignChoicesMade()==0) {
+ accountactive->setCampaignScore(0);
+ accountactive->resetFasttime();
+ }
+}
+
+vector<string> ListCampaigns() {
+ DIR *campaigns = opendir(ConvertFileName(":Data:Campaigns"));
+ struct dirent *campaign = NULL;
+ if(!campaigns) {
+ perror("Problem while loading campaigns");
+ cerr << "campaign folder was : " << ConvertFileName(":Data:Campaigns") << endl;
+ exit(EXIT_FAILURE);
+ }
+ vector<string> campaignNames;
+ while ((campaign = readdir(campaigns)) != NULL) {
+ string name(campaign->d_name);
+ if(name.length()<5)
+ continue;
+ if(!name.compare(name.length()-4,4,".txt")) {
+ campaignNames.push_back(name.substr(0,name.length()-4));
+ }
+ }
+ closedir(campaigns);
+ return campaignNames;
+}
+
+void Loadlevel(int which) {
stealthloading=0;
whichlevel=which;
- if(which == -1){
+ if(which == -1) {
tutoriallevel = -1;
Loadlevel("tutorial");
- }else if(which >= 0 && which <= 15){
+ } else if(which >= 0 && which <= 15) {
char buf[32];
snprintf(buf, 32, "map%d", which + 1); // challenges
Loadlevel(buf);
- }else
+ } else
Loadlevel("mapsave");
}
-void Game::Loadlevel(const char *name){
+void Loadlevel(const char *name) {
int templength;
float lamefloat;
static const char *pfx = ":Data:Maps:";
gamestarted=1;
numenvsounds=0;
- //visibleloading=1;
+
if(tutoriallevel!=-1)
tutoriallevel=0;
else
if(tutoriallevel==1)
tutorialstage=0;
- if(tutorialstage==0){
+ if(tutorialstage==0) {
tutorialstagetime=0;
tutorialmaxtime=1;
}
int mapvers;
FILE *tfile;
+ //~ char* buff=getcwd(NULL,0);
+ //~ cout << buff << " " << FixedFN << endl;
+ //~ free(buff);
tfile=fopen( FixedFN, "rb" );
- if(tfile){
+ if(tfile) {
pause_sound(stream_firesound);
scoreadded=0;
- windialogue=0;
+ windialogue=false;
hostiletime=0;
won=0;
if(accountactive)
difficulty=accountactive->getDifficulty();
- if(difficulty!=2)
- minimap=1;
- else
- minimap=0;
-
numhotspots=0;
currenthotspot=-1;
bonustime=1;
skyboxlightb=skyboxb;
}
if(!stealthloading)
- funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &player[0].coords.x,&player[0].coords.y,&player[0].coords.z,&player[0].rotation,&player[0].targetrotation, &player[0].num_weapons);
+ funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &player[0].coords.x,&player[0].coords.y,&player[0].coords.z,&player[0].yaw,&player[0].targetyaw, &player[0].num_weapons);
if(stealthloading)
funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &lamefloat,&lamefloat,&lamefloat,&lamefloat,&lamefloat, &player[0].num_weapons);
player[0].originalcoords=player[0].coords;
funpackf(tfile, "Bi", &dialoguetype[k]);
for(int l=0;l<10;l++){
funpackf(tfile, "Bf Bf Bf", &participantlocation[k][l].x, &participantlocation[k][l].y, &participantlocation[k][l].z);
- funpackf(tfile, "Bf", &participantrotation[k][l]);
+ funpackf(tfile, "Bf", &participantyaw[k][l]);
}
for(int l=0;l<numdialogueboxes[k];l++){
funpackf(tfile, "Bi", &dialogueboxlocation[k][l]);
for(m=0;m<10;m++)
funpackf(tfile, "Bf Bf Bf", &participantfacing[k][l][m].x, &participantfacing[k][l][m].y, &participantfacing[k][l][m].z);
- funpackf(tfile, "Bf Bf",&dialoguecamerarotation[k][l],&dialoguecamerarotation2[k][l]);
+ funpackf(tfile, "Bf Bf",&dialoguecamerayaw[k][l],&dialoguecamerapitch[k][l]);
}
}
}else
funpackf(tfile, "Bi", &objects.numobjects);
for(int i=0;i<objects.numobjects;i++){
- funpackf(tfile, "Bi Bf Bf Bf Bf Bf Bf", &objects.type[i],&objects.rotation[i],&objects.rotation2[i], &objects.position[i].x, &objects.position[i].y, &objects.position[i].z,&objects.scale[i]);
+ funpackf(tfile, "Bi Bf Bf Bf Bf Bf Bf", &objects.type[i],&objects.yaw[i],&objects.pitch[i], &objects.position[i].x, &objects.position[i].y, &objects.position[i].z,&objects.scale[i]);
if(objects.type[i]==treeleavestype)
objects.scale[i]=objects.scale[i-1];
}
float tempdist;
//~ int whichclosest;
for(int i=0;i<objects.numobjects;i++){
- tempdist=findDistancefast(&objects.center,&objects.position[i]);
+ tempdist=distsq(&objects.center,&objects.position[i]);
if(tempdist>maxdistance){
//~ whichclosest=i;
maxdistance=tempdist;
else
player[i-howmanyremoved].immobile=0;
if(mapvers>=12)
- funpackf(tfile, "Bf",&player[i-howmanyremoved].rotation);
+ funpackf(tfile, "Bf",&player[i-howmanyremoved].yaw);
else
- player[i-howmanyremoved].rotation=0;
- player[i-howmanyremoved].targetrotation=player[i-howmanyremoved].rotation;
+ player[i-howmanyremoved].yaw=0;
+ player[i-howmanyremoved].targetyaw=player[i-howmanyremoved].yaw;
if(player[i-howmanyremoved].num_weapons<0||player[i-howmanyremoved].num_weapons>5){
removeanother=1;
howmanyremoved++;
int j=objects.numobjects;
objects.numobjects=0;
for(int i=0;i<j;i++){
- objects.MakeObject(objects.type[i],objects.position[i],objects.rotation[i],objects.rotation2[i],objects.scale[i]);
+ objects.MakeObject(objects.type[i],objects.position[i],objects.yaw[i],objects.pitch[i],objects.scale[i]);
if(visibleloading)
LoadingScreen();
}
(char *)":Data:Models:Body7.solid",
(char *)":Data:Models:Bodylow.solid",
(char *)":Data:Models:Belt.solid",1);
- LoadTexture(":Data:Textures:Belt.png",&player[i].skeleton.drawmodelclothes.textureptr,1,1);
+ player[i].skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png",1,1);
}
if(player[i].creature==wolftype){
player[i].skeleton.Load(
//~ 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);
+ player[i].skeleton.drawmodel.textureptr.load(creatureskin[player[i].creature][player[i].whichskin],1,&player[i].skeleton.skinText[0],&player[i].skeleton.skinsize);
if(player[i].numclothes){
for(int j=0;j<player[i].numclothes;j++){
player[i].DoMipmaps();
}
- player[i].currentanimation=bounceidleanim;
- player[i].targetanimation=bounceidleanim;
- player[i].currentframe=0;
- player[i].targetframe=1;
+ player[i].animCurrent=bounceidleanim;
+ player[i].animTarget=bounceidleanim;
+ player[i].frameCurrent=0;
+ player[i].frameTarget=1;
player[i].target=0;
player[i].speed=1+(float)(Random()%100)/1000;
if(difficulty==0)
player[0].armorlow*=1.5;
cameraloc=player[0].coords;
cameraloc.y+=5;
- rotation=player[0].rotation;
+ yaw=player[0].yaw;
hawkcoords=player[0].coords;
hawkcoords.y+=30;
if(!firstload)
firstload=1;
+ } else {
+ perror("Problem");
}
leveltime=0;
loadingstuff=0;
visibleloading=0;
}
-void Game::doTutorial(){
+void doTutorial(){
if(tutorialstagetime>tutorialmaxtime){
tutorialstage++;
tutorialsuccess=0;
if(Random()%2==0){
if(!player[1].skeleton.free)temp2=(player[1].coords-player[1].oldcoords)/multiplier/2;//velocity/2;
if(player[1].skeleton.free)temp2=player[1].skeleton.joints[i].velocity*player[1].scale/2;
- if(!player[1].skeleton.free)temp=DoRotation(DoRotation(DoRotation(player[1].skeleton.joints[i].position,0,0,player[1].tilt),player[1].tilt2,0,0),0,player[1].rotation,0)*player[1].scale+player[1].coords;
+ if(!player[1].skeleton.free)temp=DoRotation(DoRotation(DoRotation(player[1].skeleton.joints[i].position,0,0,player[1].tilt),player[1].tilt2,0,0),0,player[1].yaw,0)*player[1].scale+player[1].coords;
if(player[1].skeleton.free)temp=player[1].skeleton.joints[i].position*player[1].scale+player[1].coords;
Sprite::MakeSprite(breathsprite, temp,temp2, 1,1,1, .6+(float)abs(Random()%100)/200-.25, 1);
}
weapons[player[0].weaponids[player[0].weaponactive]].setType(staff);
else
weapons[0].setType(staff);
-
- //~ weapons.size()++;
break; case 49:
canattack=0;
cananger=0;
weapons[1].position=1000;
weapons[1].tippoint=1000;
- //~ weapons.size()=1;
weapons[0].setType(knife);
- //~ weapons.size()++;
weapons[0].owner=0;
player[1].weaponactive=-1;
player[1].num_weapons=0;
if(Random()%2==0){
if(!player[1].skeleton.free)temp2=(player[1].coords-player[1].oldcoords)/multiplier/2;//velocity/2;
if(player[1].skeleton.free)temp2=player[1].skeleton.joints[i].velocity*player[1].scale/2;
- if(!player[1].skeleton.free)temp=DoRotation(DoRotation(DoRotation(player[1].skeleton.joints[i].position,0,0,player[1].tilt),player[1].tilt2,0,0),0,player[1].rotation,0)*player[1].scale+player[1].coords;
+ if(!player[1].skeleton.free)temp=DoRotation(DoRotation(DoRotation(player[1].skeleton.joints[i].position,0,0,player[1].tilt),player[1].tilt2,0,0),0,player[1].yaw,0)*player[1].scale+player[1].coords;
if(player[1].skeleton.free)temp=player[1].skeleton.joints[i].position*player[1].scale+player[1].coords;
Sprite::MakeSprite(breathsprite, temp,temp2, 1,1,1, .6+(float)abs(Random()%100)/200-.25, 1);
}
break; case 4: if(player[0].forwardkeydown||player[0].backkeydown||player[0].leftkeydown||player[0].rightkeydown)tutorialsuccess+=multiplier;
break; case 5: if(player[0].jumpkeydown)tutorialsuccess=1;
break; case 6: if(player[0].isCrouch())tutorialsuccess=1;
- break; case 7: if(player[0].targetanimation==rollanim)tutorialsuccess=1;
- break; case 8: if(player[0].targetanimation==sneakanim)tutorialsuccess+=multiplier;
- break; case 9: if(player[0].targetanimation==rabbitrunninganim||player[0].targetanimation==wolfrunninganim)tutorialsuccess+=multiplier;
+ break; case 7: if(player[0].animTarget==rollanim)tutorialsuccess=1;
+ break; case 8: if(player[0].animTarget==sneakanim)tutorialsuccess+=multiplier;
+ break; case 9: if(player[0].animTarget==rabbitrunninganim||player[0].animTarget==wolfrunninganim)tutorialsuccess+=multiplier;
break; case 11: if(player[0].isWallJump())tutorialsuccess=1;
- break; case 12: if(player[0].targetanimation==flipanim)tutorialsuccess=1;
- break; case 15: if(player[0].targetanimation==upunchanim||player[0].targetanimation==winduppunchanim)tutorialsuccess=1;
- break; case 16: if(player[0].targetanimation==winduppunchanim)tutorialsuccess=1;
- break; case 17: if(player[0].targetanimation==spinkickanim)tutorialsuccess=1;
- break; case 18: if(player[0].targetanimation==sweepanim)tutorialsuccess=1;
- break; case 19: if(player[0].targetanimation==dropkickanim)tutorialsuccess=1;
- break; case 20: if(player[0].targetanimation==rabbitkickanim)tutorialsuccess=1;
+ break; case 12: if(player[0].animTarget==flipanim)tutorialsuccess=1;
+ break; case 15: if(player[0].animTarget==upunchanim||player[0].animTarget==winduppunchanim)tutorialsuccess=1;
+ break; case 16: if(player[0].animTarget==winduppunchanim)tutorialsuccess=1;
+ break; case 17: if(player[0].animTarget==spinkickanim)tutorialsuccess=1;
+ break; case 18: if(player[0].animTarget==sweepanim)tutorialsuccess=1;
+ break; case 19: if(player[0].animTarget==dropkickanim)tutorialsuccess=1;
+ break; case 20: if(player[0].animTarget==rabbitkickanim)tutorialsuccess=1;
break; case 21: if(bonus==cannon)tutorialsuccess=1;
break; case 22: if(bonus==spinecrusher)tutorialsuccess=1;
- break; case 23: if(player[0].targetanimation==walljumprightkickanim||player[0].targetanimation==walljumpleftkickanim)tutorialsuccess=1;
- break; case 24: if(player[0].targetanimation==rabbittacklinganim)tutorialsuccess=1;
- break; case 25: if(player[0].targetanimation==backhandspringanim)tutorialsuccess=1;
- break; case 28: if(animation[player[0].targetanimation].attack==reversed&&player[0].feint)tutorialsuccess=1;
+ break; case 23: if(player[0].animTarget==walljumprightkickanim||player[0].animTarget==walljumpleftkickanim)tutorialsuccess=1;
+ break; case 24: if(player[0].animTarget==rabbittacklinganim)tutorialsuccess=1;
+ break; case 25: if(player[0].animTarget==backhandspringanim)tutorialsuccess=1;
+ break; case 28: if(animation[player[0].animTarget].attack==reversed&&player[0].feint)tutorialsuccess=1;
break; case 29:
- if(player[0].escapednum==2){
+ if(player[0].escapednum==2) {
tutorialsuccess=1;
reversaltrain=0;
cananger=0;
player[1].aitype=passivetype;
}
- break; case 33: if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1;
- break; case 34: if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1;
+ break; case 33: if(animation[player[0].animTarget].attack==reversal)tutorialsuccess=1;
+ break; case 34: if(animation[player[0].animTarget].attack==reversal)tutorialsuccess=1;
break; case 35:
- if(animation[player[0].targetanimation].attack==reversal){
+ if(animation[player[0].animTarget].attack==reversal){
tutorialsuccess=1;
reversaltrain=0;
cananger=0;
}
break; case 40: if(player[0].num_weapons>0)tutorialsuccess=1;
break; case 41: if(player[0].weaponactive==-1&&player[0].num_weapons>0)tutorialsuccess=1;
- break; case 43: if(player[0].targetanimation==knifeslashstartanim)tutorialsuccess=1;
- break; case 44: if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1;
- break; case 45: if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1;
- break; case 46: if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1;
+ break; case 43: if(player[0].animTarget==knifeslashstartanim)tutorialsuccess=1;
+ break; case 44: if(animation[player[0].animTarget].attack==reversal)tutorialsuccess=1;
+ break; case 45: if(animation[player[0].animTarget].attack==reversal)tutorialsuccess=1;
+ break; case 46: if(animation[player[0].animTarget].attack==reversal)tutorialsuccess=1;
break; case 49: if(player[1].weaponstuck!=-1)tutorialsuccess=1;
break; default: break;
}
}
}
-void Game::doDebugKeys(){
+void doDebugKeys(){
float headprop,bodyprop,armprop,legprop;
if(debugmode){
if(Input::isKeyPressed(SDLK_h)){
}
if(Input::isKeyPressed(SDLK_x)&&Input::isKeyDown(SDLK_LSHIFT)){
- int closest=-1;
- float closestdist=-1;
- float distance;
- if(numplayers>1)
- for(int i=1;i<numplayers;i++){
- distance=findDistancefast(&player[i].coords,&player[0].coords);
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- }
- }
- if(closest!=-1){
+ int closest=findClosestPlayer();
+ if(closest>=0){
if(player[closest].num_weapons){
if(weapons[player[closest].weaponids[0]].getType()==sword)
weapons[player[closest].weaponids[0]].setType(staff);
}
if(Input::isKeyDown(SDLK_u)){
- int closest=-1;
- float closestdist=-1;
- float distance;
- if(numplayers>1)
- for(int i=1;i<numplayers;i++){
- distance=findDistancefast(&player[i].coords,&player[0].coords);
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- }
- }
- player[closest].rotation+=multiplier*50;
- player[closest].targetrotation=player[closest].rotation;
+ int closest=findClosestPlayer();
+ if(closest>=0){
+ player[closest].yaw+=multiplier*50;
+ player[closest].targetyaw=player[closest].yaw;
+ }
}
if(Input::isKeyPressed(SDLK_o)&&!Input::isKeyDown(SDLK_LSHIFT)){
- int closest=-1;
- float closestdist=-1;
- float distance;
- if(numplayers>1)
- for(int i=1;i<numplayers;i++){
- distance=findDistancefast(&player[i].coords,&player[0].coords);
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- }
- }
- if(Input::isKeyDown(SDLK_LCTRL))closest=0;
+ int closest=findClosestPlayer();
+ if(Input::isKeyDown(SDLK_LCTRL))
+ closest=0;
- if(closest!=-1){
+ if(closest>=0){
player[closest].whichskin++;
if(player[closest].whichskin>9)
player[closest].whichskin=0;
if(player[closest].whichskin>2&&player[closest].creature==wolftype)
player[closest].whichskin=0;
- LoadTextureSave(creatureskin[player[closest].creature][player[closest].whichskin],
- &player[closest].skeleton.drawmodel.textureptr,1,&player[closest].skeleton.skinText[0],&player[closest].skeleton.skinsize);
+ player[closest].skeleton.drawmodel.textureptr.load(creatureskin[player[closest].creature][player[closest].whichskin],1,
+ &player[closest].skeleton.skinText[0],&player[closest].skeleton.skinsize);
}
if(player[closest].numclothes){
}
if(Input::isKeyPressed(SDLK_o)&&Input::isKeyDown(SDLK_LSHIFT)){
- int closest=-1;
- float closestdist=-1;
- float distance;
- if(numplayers>1)
- for(int i=1;i<numplayers;i++){
- distance=findDistancefast(&player[i].coords,&player[0].coords);
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- }
- }
- if(closest!=-1){
+ int closest=findClosestPlayer();
+ if(closest>=0){
if(player[closest].creature==wolftype){
headprop=player[closest].proportionhead.x/1.1;
bodyprop=player[closest].proportionbody.x/1.1;
if(player[closest].creature==rabbittype){
player[closest].skeleton.id=closest;
player[closest].skeleton.Load((char *)":Data:Skeleton:Basic Figure Wolf",(char *)":Data:Skeleton:Basic Figure Wolf Low",(char *)":Data:Skeleton:Rabbitbelt",(char *)":Data:Models:Wolf.solid",(char *)":Data:Models:Wolf2.solid",(char *)":Data:Models:Wolf3.solid",(char *)":Data:Models:Wolf4.solid",(char *)":Data:Models:Wolf5.solid",(char *)":Data:Models:Wolf6.solid",(char *)":Data:Models:Wolf7.solid",(char *)":Data:Models:Wolflow.solid",(char *)":Data:Models:Belt.solid",0);
- LoadTextureSave(":Data:Textures:Wolf.jpg",&player[closest].skeleton.drawmodel.textureptr,1,&player[closest].skeleton.skinText[closest],&player[closest].skeleton.skinsize);
+ player[closest].skeleton.drawmodel.textureptr.load(":Data:Textures:Wolf.jpg",1,&player[closest].skeleton.skinText[closest],&player[closest].skeleton.skinsize);
player[closest].whichskin=0;
player[closest].creature=wolftype;
{
player[closest].skeleton.id=closest;
player[closest].skeleton.Load((char *)":Data:Skeleton:Basic Figure",(char *)":Data:Skeleton:Basic Figurelow",(char *)":Data:Skeleton:Rabbitbelt",(char *)":Data:Models:Body.solid",(char *)":Data:Models:Body2.solid",(char *)":Data:Models:Body3.solid",(char *)":Data:Models:Body4.solid",(char *)":Data:Models:Body5.solid",(char *)":Data:Models:Body6.solid",(char *)":Data:Models:Body7.solid",(char *)":Data:Models:Bodylow.solid",(char *)":Data:Models:Belt.solid",1);
- LoadTextureSave(":Data:Textures:Fur3.jpg",&player[closest].skeleton.drawmodel.textureptr,1,&player[closest].skeleton.skinText[0],&player[closest].skeleton.skinsize);
+ player[closest].skeleton.drawmodel.textureptr.load(":Data:Textures:Fur3.jpg",1,&player[closest].skeleton.skinText[0],&player[closest].skeleton.skinsize);
player[closest].whichskin=0;
player[closest].creature=rabbittype;
if(((Input::isKeyPressed(SDLK_i)&&!Input::isKeyDown(SDLK_LSHIFT)))){
- int closest=-1;
- float closestdist=-1;
- float distance;
+ int closest = -1;
+ float closestdist = std::numeric_limits<float>::max();
+
+ for(int i=1; i<numplayers; i++){
+ float distance = distsq(&player[i].coords, &player[0].coords);
+ if(!player[i].headless)
+ if(distance < closestdist){
+ closestdist = distance;
+ closest = i;
+ }
+ }
+
XYZ flatfacing2,flatvelocity2;
XYZ blah;
- if(numplayers>1)
- for(int i=1;i<numplayers;i++){
- distance=findDistancefast(&player[i].coords,&player[0].coords);
- if(distance<144&&!player[i].headless)
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- blah = player[i].coords;
- }
- }
-
- if(closest!=-1){
+ if(closest!=-1 && distsq(&player[closest].coords, &player[0].coords)<144){
+ blah = player[closest].coords;
XYZ headspurtdirection;
//int i = player[closest].skeleton.jointlabels[head];
- Joint& headjoint=playerJoint(closest,head);
+ Joint& headjoint= player[closest].getJointFor(head);
for(int k=0;k<player[closest].skeleton.num_joints; k++){
if(!player[closest].skeleton.free)
flatvelocity2=player[closest].velocity;
if(player[closest].skeleton.free)
flatvelocity2=headjoint.velocity;
if(!player[closest].skeleton.free)
- flatfacing2=DoRotation(DoRotation(DoRotation(headjoint.position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].rotation,0)*player[closest].scale+player[closest].coords;
+ flatfacing2=DoRotation(DoRotation(DoRotation(headjoint.position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].yaw,0)*player[closest].scale+player[closest].coords;
if(player[closest].skeleton.free)
flatfacing2=headjoint.position*player[closest].scale+player[closest].coords;
flatvelocity2.x+=(float)(abs(Random()%100)-50)/10;
flatvelocity2.y+=(float)(abs(Random()%100)-50)/10;
flatvelocity2.z+=(float)(abs(Random()%100)-50)/10;
- headspurtdirection=headjoint.position-playerJoint(closest,neck).position;
+ headspurtdirection=headjoint.position-player[closest].getJointFor(neck).position;
Normalise(&headspurtdirection);
Sprite::MakeSprite(bloodflamesprite, flatfacing2,flatvelocity2, 1,1,1, .6, 1);
flatvelocity2+=headspurtdirection*8;
}
if(((Input::isKeyPressed(SDLK_i)&&Input::isKeyDown(SDLK_LSHIFT)))){
- int closest=-1;
- float closestdist=-1;
- float distance;
+ int closest=findClosestPlayer();
XYZ flatfacing2,flatvelocity2;
XYZ blah;
- if(numplayers>1)
- for(int i=1;i<numplayers;i++){
- distance=findDistancefast(&player[i].coords,&player[0].coords);
- if(distance<144)
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- blah=player[i].coords;
- }
- }
-
- if(closest!=-1){
+ if(closest>=0 && distsq(&player[closest].coords,&player[0].coords)<144){
+ blah=player[closest].coords;
emit_sound_at(splattersound, blah);
-
emit_sound_at(breaksound2, blah);
for(int i=0;i<player[closest].skeleton.num_joints; i++){
if(!player[closest].skeleton.free)flatvelocity2=player[closest].velocity;
if(player[closest].skeleton.free)flatvelocity2=player[closest].skeleton.joints[i].velocity;
- if(!player[closest].skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].rotation,0)*player[closest].scale+player[closest].coords;
+ if(!player[closest].skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].yaw,0)*player[closest].scale+player[closest].coords;
if(player[closest].skeleton.free)flatfacing2=player[closest].skeleton.joints[i].position*player[closest].scale+player[closest].coords;
flatvelocity2.x+=(float)(abs(Random()%100)-50)/10;
flatvelocity2.y+=(float)(abs(Random()%100)-50)/10;
for(int i=0;i<player[closest].skeleton.num_joints; i++){
if(!player[closest].skeleton.free)flatvelocity2=player[closest].velocity;
if(player[closest].skeleton.free)flatvelocity2=player[closest].skeleton.joints[i].velocity;
- if(!player[closest].skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].rotation,0)*player[closest].scale+player[closest].coords;
+ if(!player[closest].skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].yaw,0)*player[closest].scale+player[closest].coords;
if(player[closest].skeleton.free)flatfacing2=player[closest].skeleton.joints[i].position*player[closest].scale+player[closest].coords;
flatvelocity2.x+=(float)(abs(Random()%100)-50)/10;
flatvelocity2.y+=(float)(abs(Random()%100)-50)/10;
for(int i=0;i<player[closest].skeleton.num_joints; i++){
if(!player[closest].skeleton.free)flatvelocity2=player[closest].velocity;
if(player[closest].skeleton.free)flatvelocity2=player[closest].skeleton.joints[i].velocity;
- if(!player[closest].skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].rotation,0)*player[closest].scale+player[closest].coords;
+ if(!player[closest].skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].yaw,0)*player[closest].scale+player[closest].coords;
if(player[closest].skeleton.free)flatfacing2=player[closest].skeleton.joints[i].position*player[closest].scale+player[closest].coords;
flatvelocity2.x+=(float)(abs(Random()%100)-50)/10;
flatvelocity2.y+=(float)(abs(Random()%100)-50)/10;
for(int i=0;i<player[closest].skeleton.num_joints; i++){
if(!player[closest].skeleton.free)flatvelocity2=player[closest].velocity;
if(player[closest].skeleton.free)flatvelocity2=player[closest].skeleton.joints[i].velocity;
- if(!player[closest].skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].rotation,0)*player[closest].scale+player[closest].coords;
+ if(!player[closest].skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position,0,0,player[closest].tilt),player[closest].tilt2,0,0),0,player[closest].yaw,0)*player[closest].scale+player[closest].coords;
if(player[closest].skeleton.free)flatfacing2=player[closest].skeleton.joints[i].position*player[closest].scale+player[closest].coords;
flatvelocity2.x+=(float)(abs(Random()%100)-50)/10;
flatvelocity2.y+=(float)(abs(Random()%100)-50)/10;
XYZ temppos;
for(int j=0;j<numplayers; j++){
if(j!=closest){
- if(findDistancefast(&player[j].coords,&player[closest].coords)<25){
- player[j].DoDamage((25-findDistancefast(&player[j].coords,&player[closest].coords))*60);
+ if(distsq(&player[j].coords,&player[closest].coords)<25){
+ player[j].DoDamage((25-distsq(&player[j].coords,&player[closest].coords))*60);
if(player[j].skeleton.free==2)
player[j].skeleton.free=1;
player[j].skeleton.longdead=0;
player[j].RagDoll(0);
for(int i=0;i<player[j].skeleton.num_joints; i++){
temppos=player[j].skeleton.joints[i].position+player[j].coords;
- if(findDistancefast(&temppos,&player[closest].coords)<25){
+ if(distsq(&temppos,&player[closest].coords)<25){
flatvelocity2=temppos-player[closest].coords;
Normalise(&flatvelocity2);
- player[j].skeleton.joints[i].velocity+=flatvelocity2*((20-findDistancefast(&temppos,&player[closest].coords))*20);
+ player[j].skeleton.joints[i].velocity+=flatvelocity2*((20-distsq(&temppos,&player[closest].coords))*20);
}
}
}
if(editorenabled){
if(Input::isKeyPressed(SDLK_DELETE)&&Input::isKeyDown(SDLK_LSHIFT)){
- int closest=-1;
- float closestdist=-1;
- float distance;
- if(numplayers>1)
- for(int i=1;i<numplayers;i++){
- distance=findDistancefast(&player[i].coords,&player[0].coords);
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- }
- }
- if(closestdist>0&&closest>=0){
+ int closest=findClosestPlayer();
+ if(closest>=0){
//player[closest]=player[numplayers-1];
//player[closest].skeleton=player[numplayers-1].skeleton;
numplayers--;
}
if(Input::isKeyPressed(SDLK_DELETE)&&Input::isKeyDown(SDLK_LCTRL)){
- int closest=-1;
- float closestdist=-1;
- float distance;
- if(max_objects>1)
- for(int i=1;i<max_objects;i++){
- distance=findDistancefast(&objects.position[i],&player[0].coords);
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- }
- }
- if(closestdist>0&&closest>=0){
+ int closest=findClosestObject();
+ if(closest>=0)
objects.position[closest].y-=500;
- }
}
if(Input::isKeyPressed(SDLK_m)&&Input::isKeyDown(SDLK_LSHIFT)){
if(editortype==firetype)boxcoords.y=player[0].coords.y-.5;
//objects.MakeObject(abs(Random()%3),boxcoords,Random()%360);
float temprotat,temprotat2;
- temprotat=editorrotation;
- temprotat2=editorrotation2;
+ temprotat=editoryaw;
+ temprotat2=editorpitch;
if(temprotat<0||editortype==bushtype)temprotat=Random()%360;
if(temprotat2<0)temprotat2=Random()%360;
objects.MakeObject(editortype,boxcoords,(int)temprotat-((int)temprotat)%30,(int)temprotat2,editorsize);
if(editortype==treetrunktype)
- objects.MakeObject(treeleavestype,boxcoords,Random()%360*(temprotat2<2)+(int)editorrotation-((int)editorrotation)%30,editorrotation2,editorsize);
+ objects.MakeObject(treeleavestype,boxcoords,Random()%360*(temprotat2<2)+(int)editoryaw-((int)editoryaw)%30,editorpitch,editorsize);
}
}
int k=abs(Random()%2)+1;
if(k==0){
- LoadTextureSave(":Data:Textures:Fur3.jpg",&player[numplayers].skeleton.drawmodel.textureptr,1,&player[numplayers].skeleton.skinText[0],&player[numplayers].skeleton.skinsize);
+ player[numplayers].skeleton.drawmodel.textureptr.load(":Data:Textures:Fur3.jpg",1,&player[numplayers].skeleton.skinText[0],&player[numplayers].skeleton.skinsize);
player[numplayers].whichskin=0;
}
else if(k==1){
- LoadTextureSave(":Data:Textures:Fur.jpg",&player[numplayers].skeleton.drawmodel.textureptr,1,&player[numplayers].skeleton.skinText[0],&player[numplayers].skeleton.skinsize);
+ player[numplayers].skeleton.drawmodel.textureptr.load(":Data:Textures:Fur.jpg",1,&player[numplayers].skeleton.skinText[0],&player[numplayers].skeleton.skinsize);
player[numplayers].whichskin=1;
}
else {
- LoadTextureSave(":Data:Textures:Fur2.jpg",&player[numplayers].skeleton.drawmodel.textureptr,1,&player[numplayers].skeleton.skinText[0],&player[numplayers].skeleton.skinsize);
+ player[numplayers].skeleton.drawmodel.textureptr.load(":Data:Textures:Fur2.jpg",1,&player[numplayers].skeleton.skinText[0],&player[numplayers].skeleton.skinsize);
player[numplayers].whichskin=2;
}
- LoadTexture(":Data:Textures:Belt.png",&player[numplayers].skeleton.drawmodelclothes.textureptr,1,1);
+ player[numplayers].skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png",1,1);
player[numplayers].power=1;
player[numplayers].speedmult=1;
- player[numplayers].currentanimation=bounceidleanim;
- player[numplayers].targetanimation=bounceidleanim;
- player[numplayers].currentframe=0;
- player[numplayers].targetframe=1;
+ player[numplayers].animCurrent=bounceidleanim;
+ player[numplayers].animTarget=bounceidleanim;
+ player[numplayers].frameCurrent=0;
+ player[numplayers].frameTarget=1;
player[numplayers].target=0;
player[numplayers].bled=0;
player[numplayers].speed=1+(float)(Random()%100)/1000;
- player[numplayers].targetrotation=player[0].targetrotation;
- player[numplayers].rotation=player[0].rotation;
+ player[numplayers].targetyaw=player[0].targetyaw;
+ player[numplayers].yaw=player[0].yaw;
player[numplayers].velocity=0;
player[numplayers].coords=player[0].coords;
connected=0;
if(numpathpoints>1)
for(int i=0;i<numpathpoints;i++){
- if(findDistancefast(&pathpoint[i],&player[0].coords)<.5&&i!=pathpointselected&&!connected){
+ if(distsq(&pathpoint[i],&player[0].coords)<.5&&i!=pathpointselected&&!connected){
alreadyconnected=0;
for(int j=0;j<numpathpointconnect[pathpointselected];j++){
if(pathpointconnect[pathpointselected][j]==i)alreadyconnected=1;
}
if(Input::isKeyDown(SDLK_LEFT)&&!Input::isKeyDown(SDLK_LSHIFT)&&!Input::isKeyDown(SDLK_LCTRL)){
- editorrotation-=multiplier*100;
- if(editorrotation<-.01)editorrotation=-.01;
+ editoryaw-=multiplier*100;
+ if(editoryaw<-.01)editoryaw=-.01;
}
if(Input::isKeyDown(SDLK_RIGHT)&&!Input::isKeyDown(SDLK_LSHIFT)&&!Input::isKeyDown(SDLK_LCTRL)){
- editorrotation+=multiplier*100;
+ editoryaw+=multiplier*100;
}
if(Input::isKeyDown(SDLK_UP)&&!Input::isKeyDown(SDLK_LCTRL)){
mapradius+=multiplier*10;
}
if(Input::isKeyDown(SDLK_UP)&&Input::isKeyDown(SDLK_LCTRL)){
- editorrotation2+=multiplier*100;
+ editorpitch+=multiplier*100;
}
if(Input::isKeyDown(SDLK_DOWN)&&Input::isKeyDown(SDLK_LCTRL)){
- editorrotation2-=multiplier*100;
- if(editorrotation2<-.01)editorrotation2=-.01;
+ editorpitch-=multiplier*100;
+ if(editorpitch<-.01)editorpitch=-.01;
}
if(Input::isKeyPressed(SDLK_DELETE)&&objects.numobjects&&Input::isKeyDown(SDLK_LSHIFT)){
- int closest=-1;
- float closestdist=-1;
- float distance;
- for(int i=0;i<objects.numobjects;i++){
- distance=findDistancefast(&objects.position[i],&player[0].coords);
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- }
- }
- if(closestdist>0&&closest>=0)objects.DeleteObject(closest);
+ int closest=findClosestObject();
+ if(closest>=0)
+ objects.DeleteObject(closest);
}
}
}
}
-void Game::doJumpReversals(){
+void doJumpReversals(){
for(int k=0;k<numplayers;k++)
for(int i=k;i<numplayers;i++){
if(i==k)continue;
if( player[k].skeleton.free==0&&
player[i].skeleton.oldfree==0&&
- (player[i].targetanimation==jumpupanim||
- player[k].targetanimation==jumpupanim)&&
+ (player[i].animTarget==jumpupanim||
+ player[k].animTarget==jumpupanim)&&
(player[i].aitype==playercontrolled||
player[k].aitype==playercontrolled)&&
(player[i].aitype==attacktypecutoff&&player[i].stunned<=0||
player[k].aitype==attacktypecutoff&&player[k].stunned<=0)){
- if( findDistancefast(&player[i].coords,&player[k].coords)<10*sq((player[i].scale+player[k].scale)*2.5)&&
- findDistancefastflat(&player[i].coords,&player[k].coords)<2*sq((player[i].scale+player[k].scale)*2.5)){
+ if( distsq(&player[i].coords,&player[k].coords)<10*sq((player[i].scale+player[k].scale)*2.5)&&
+ distsqflat(&player[i].coords,&player[k].coords)<2*sq((player[i].scale+player[k].scale)*2.5)){
//TODO: refactor two huge similar ifs
- if(player[i].targetanimation==jumpupanim&&
- player[k].targetanimation!=getupfrombackanim&&
- player[k].targetanimation!=getupfromfrontanim&&
- animation[player[k].targetanimation].height==middleheight&&
+ if(player[i].animTarget==jumpupanim&&
+ player[k].animTarget!=getupfrombackanim&&
+ player[k].animTarget!=getupfromfrontanim&&
+ animation[player[k].animTarget].height==middleheight&&
normaldotproduct(player[i].velocity,player[k].coords-player[i].coords)<0&&
(player[k].aitype==playercontrolled&&player[k].attackkeydown||
player[k].aitype!=playercontrolled)){
player[i].victim=&player[k];
player[i].velocity=0;
- player[i].currentanimation=jumpreversedanim;
- player[i].targetanimation=jumpreversedanim;
- player[i].currentframe=0;
- player[i].targetframe=1;
+ player[i].animCurrent=jumpreversedanim;
+ player[i].animTarget=jumpreversedanim;
+ player[i].frameCurrent=0;
+ player[i].frameTarget=1;
player[i].targettilt2=0;
player[k].victim=&player[i];
player[k].velocity=0;
- player[k].currentanimation=jumpreversalanim;
- player[k].targetanimation=jumpreversalanim;
- player[k].currentframe=0;
- player[k].targetframe=1;
+ player[k].animCurrent=jumpreversalanim;
+ player[k].animTarget=jumpreversalanim;
+ player[k].frameCurrent=0;
+ player[k].frameTarget=1;
player[k].targettilt2=0;
if(player[i].coords.y<player[k].coords.y+1){
- player[i].currentanimation=rabbitkickreversedanim;
- player[i].targetanimation=rabbitkickreversedanim;
- player[i].currentframe=1;
- player[i].targetframe=2;
- player[k].currentanimation=rabbitkickreversalanim;
- player[k].targetanimation=rabbitkickreversalanim;
- player[k].currentframe=1;
- player[k].targetframe=2;
+ player[i].animCurrent=rabbitkickreversedanim;
+ player[i].animTarget=rabbitkickreversedanim;
+ player[i].frameCurrent=1;
+ player[i].frameTarget=2;
+ player[k].animCurrent=rabbitkickreversalanim;
+ player[k].animTarget=rabbitkickreversalanim;
+ player[k].frameCurrent=1;
+ player[k].frameTarget=2;
}
player[i].target=0;
player[k].oldcoords=player[k].coords;
player[i].coords=player[k].coords;
- player[k].targetrotation=player[i].targetrotation;
- player[k].rotation=player[i].targetrotation;
+ player[k].targetyaw=player[i].targetyaw;
+ player[k].yaw=player[i].targetyaw;
if(player[k].aitype==attacktypecutoff)
player[k].stunned=.5;
}
- if(player[k].targetanimation==jumpupanim&&
- player[i].targetanimation!=getupfrombackanim&&
- player[i].targetanimation!=getupfromfrontanim&&
- animation[player[i].targetanimation].height==middleheight&&
+ if(player[k].animTarget==jumpupanim&&
+ player[i].animTarget!=getupfrombackanim&&
+ player[i].animTarget!=getupfromfrontanim&&
+ animation[player[i].animTarget].height==middleheight&&
normaldotproduct(player[k].velocity,player[i].coords-player[k].coords)<0&&
((player[i].aitype==playercontrolled&&player[i].attackkeydown)||
player[i].aitype!=playercontrolled)){
player[k].victim=&player[i];
player[k].velocity=0;
- player[k].currentanimation=jumpreversedanim;
- player[k].targetanimation=jumpreversedanim;
- player[k].currentframe=0;
- player[k].targetframe=1;
+ player[k].animCurrent=jumpreversedanim;
+ player[k].animTarget=jumpreversedanim;
+ player[k].frameCurrent=0;
+ player[k].frameTarget=1;
player[k].targettilt2=0;
player[i].victim=&player[k];
player[i].velocity=0;
- player[i].currentanimation=jumpreversalanim;
- player[i].targetanimation=jumpreversalanim;
- player[i].currentframe=0;
- player[i].targetframe=1;
+ player[i].animCurrent=jumpreversalanim;
+ player[i].animTarget=jumpreversalanim;
+ player[i].frameCurrent=0;
+ player[i].frameTarget=1;
player[i].targettilt2=0;
if(player[k].coords.y<player[i].coords.y+1){
- player[k].targetanimation=rabbitkickreversedanim;
- player[k].currentanimation=rabbitkickreversedanim;
- player[i].currentanimation=rabbitkickreversalanim;
- player[i].targetanimation=rabbitkickreversalanim;
- player[k].currentframe=1;
- player[k].targetframe=2;
- player[i].currentframe=1;
- player[i].targetframe=2;
+ player[k].animTarget=rabbitkickreversedanim;
+ player[k].animCurrent=rabbitkickreversedanim;
+ player[i].animCurrent=rabbitkickreversalanim;
+ player[i].animTarget=rabbitkickreversalanim;
+ player[k].frameCurrent=1;
+ player[k].frameTarget=2;
+ player[i].frameCurrent=1;
+ player[i].frameTarget=2;
}
player[k].target=0;
player[i].oldcoords=player[i].coords;
player[k].coords=player[i].coords;
- player[i].targetrotation=player[k].targetrotation;
- player[i].rotation=player[k].targetrotation;
+ player[i].targetyaw=player[k].targetyaw;
+ player[i].yaw=player[k].targetyaw;
if(player[i].aitype==attacktypecutoff)
player[i].stunned=.5;
}
}
}
-void Game::doAerialAcrobatics(){
+void doAerialAcrobatics(){
static XYZ facing,flatfacing;
for(int k=0;k<numplayers;k++){
player[k].turnspeed=500;
if((player[k].isRun()&&
- ((player[k].targetrotation!=rabbitrunninganim&&
- player[k].targetrotation!=wolfrunninganim)||
- player[k].targetframe==4))||
- player[k].targetanimation==removeknifeanim||
- player[k].targetanimation==crouchremoveknifeanim||
- player[k].targetanimation==flipanim||
- player[k].targetanimation==fightsidestep||
- player[k].targetanimation==walkanim){
- player[k].rotation=stepTowardf(player[k].rotation, player[k].targetrotation, multiplier*player[k].turnspeed);
+ ((player[k].targetyaw!=rabbitrunninganim&&
+ player[k].targetyaw!=wolfrunninganim)||
+ player[k].frameTarget==4))||
+ player[k].animTarget==removeknifeanim||
+ player[k].animTarget==crouchremoveknifeanim||
+ player[k].animTarget==flipanim||
+ player[k].animTarget==fightsidestep||
+ player[k].animTarget==walkanim){
+ player[k].yaw=stepTowardf(player[k].yaw, player[k].targetyaw, multiplier*player[k].turnspeed);
}
if(player[k].isStop()||
player[k].isLanding()||
- player[k].targetanimation==staggerbackhighanim||
- (player[k].targetanimation==sneakanim&&player[k].currentanimation==sneakanim)||
- player[k].targetanimation==staggerbackhardanim||
- player[k].targetanimation==backhandspringanim||
- player[k].targetanimation==dodgebackanim||
- player[k].targetanimation==rollanim||
- (animation[player[k].targetanimation].attack&&
- player[k].targetanimation!=rabbitkickanim&&
- (player[k].targetanimation!=crouchstabanim||player[k].hasvictim)&&
- (player[k].targetanimation!=swordgroundstabanim||player[k].hasvictim))){
- player[k].rotation=stepTowardf(player[k].rotation, player[k].targetrotation, multiplier*player[k].turnspeed*2);
+ player[k].animTarget==staggerbackhighanim||
+ (player[k].animTarget==sneakanim&&player[k].animCurrent==sneakanim)||
+ player[k].animTarget==staggerbackhardanim||
+ player[k].animTarget==backhandspringanim||
+ player[k].animTarget==dodgebackanim||
+ player[k].animTarget==rollanim||
+ (animation[player[k].animTarget].attack&&
+ player[k].animTarget!=rabbitkickanim&&
+ (player[k].animTarget!=crouchstabanim||player[k].hasvictim)&&
+ (player[k].animTarget!=swordgroundstabanim||player[k].hasvictim))){
+ player[k].yaw=stepTowardf(player[k].yaw, player[k].targetyaw, multiplier*player[k].turnspeed*2);
}
- if(player[k].targetanimation==sneakanim&&player[k].currentanimation!=sneakanim){
- player[k].rotation=stepTowardf(player[k].rotation, player[k].targetrotation, multiplier*player[k].turnspeed*4);
+ if(player[k].animTarget==sneakanim&&player[k].animCurrent!=sneakanim){
+ player[k].yaw=stepTowardf(player[k].yaw, player[k].targetyaw, multiplier*player[k].turnspeed*4);
}
- /*if(player[k].aitype!=passivetype||(findDistancefast(&player[k].coords,&viewer)<viewdistance*viewdistance))*/
+ /*if(player[k].aitype!=passivetype||(distsq(&player[k].coords,&viewer)<viewdistance*viewdistance))*/
player[k].DoStuff();
if(player[k].immobile&&k!=0)
player[k].coords=player[k].realoldcoords;
//if player's position has changed (?)
- if(findDistancefast(&player[k].coords,&player[k].realoldcoords)>0&&
+ if(distsq(&player[k].coords,&player[k].realoldcoords)>0&&
!player[k].skeleton.free&&
- player[k].targetanimation!=climbanim&&
- player[k].targetanimation!=hanganim){
+ player[k].animTarget!=climbanim&&
+ player[k].animTarget!=hanganim){
XYZ lowpoint,lowpointtarget,lowpoint2,lowpointtarget2,lowpoint3,lowpointtarget3,lowpoint4,lowpointtarget4,lowpoint5,lowpointtarget5,lowpoint6,lowpointtarget6,lowpoint7,lowpointtarget7,colpoint,colpoint2;
int whichhit;
bool tempcollide=0;
objects.scale[i]>.5&&player[k].aitype==playercontrolled||
objects.position[i].y>player[k].coords.y){
lowpoint=player[k].coords;
- if(player[k].targetanimation!=jumpupanim&&
- player[k].targetanimation!=jumpdownanim&&
+ if(player[k].animTarget!=jumpupanim&&
+ player[k].animTarget!=jumpdownanim&&
!player[k].isFlip())
lowpoint.y+=1.25;
else
if( player[k].coords.y<terrain.getHeight(player[k].coords.x,player[k].coords.z)&&
player[k].coords.y>terrain.getHeight(player[k].coords.x,player[k].coords.z)-.1)
player[k].coords.y=terrain.getHeight(player[k].coords.x,player[k].coords.z);
- if(player[k].SphereCheck(&lowpoint, 1.3, &colpoint, &objects.position[i], &objects.rotation[i], &objects.model[i])!=-1){
+ if(player[k].SphereCheck(&lowpoint, 1.3, &colpoint, &objects.position[i], &objects.yaw[i], &objects.model[i])!=-1){
flatfacing=lowpoint-player[k].coords;
player[k].coords=lowpoint;
player[k].coords.y-=1.3;
//wall jumps
//TODO: refactor four similar blocks
if(player[k].aitype==playercontrolled&&
- (player[k].targetanimation==jumpupanim||
- player[k].targetanimation==jumpdownanim||
+ (player[k].animTarget==jumpupanim||
+ player[k].animTarget==jumpdownanim||
player[k].isFlip())&&
!player[k].jumptogglekeydown&&
player[k].jumpkeydown){
lowpointtarget=lowpoint+DoRotation(player[k].facing,0,-90,0)*1.5;
XYZ tempcoords1=lowpoint;
- whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]);
+ whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.yaw[i]);
if(whichhit!=-1&&fabs(objects.model[i].facenormals[whichhit].y)<.3){
- setAnimation(k,walljumpleftanim);
+ player[k].setAnimation(walljumpleftanim);
emit_sound_at(movewhooshsound, player[k].coords);
if(k==0)
pause_sound(whooshsound);
- lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0);
- player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI;
+ lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.yaw[i],0);
+ player[k].yaw=-asin(0-lowpointtarget.x)*180/M_PI;
if(lowpointtarget.z<0)
- player[k].rotation=180-player[k].rotation;
- player[k].targetrotation=player[k].rotation;
- player[k].lowrotation=player[k].rotation;
+ player[k].yaw=180-player[k].yaw;
+ player[k].targetyaw=player[k].yaw;
+ player[k].lowyaw=player[k].yaw;
if(k==0)
numwallflipped++;
}
{
lowpoint=tempcoords1;
lowpointtarget=lowpoint+DoRotation(player[k].facing,0,90,0)*1.5;
- whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]);
+ whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.yaw[i]);
if(whichhit!=-1&&fabs(objects.model[i].facenormals[whichhit].y)<.3){
- setAnimation(k,walljumprightanim);
+ player[k].setAnimation(walljumprightanim);
emit_sound_at(movewhooshsound, player[k].coords);
if(k==0)pause_sound(whooshsound);
- lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0);
- player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI;
- if(lowpointtarget.z<0)player[k].rotation=180-player[k].rotation;
- player[k].targetrotation=player[k].rotation;
- player[k].lowrotation=player[k].rotation;
+ lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.yaw[i],0);
+ player[k].yaw=-asin(0-lowpointtarget.x)*180/M_PI;
+ if(lowpointtarget.z<0)player[k].yaw=180-player[k].yaw;
+ player[k].targetyaw=player[k].yaw;
+ player[k].lowyaw=player[k].yaw;
if(k==0)numwallflipped++;
}
else
{
lowpoint=tempcoords1;
lowpointtarget=lowpoint+player[k].facing*2;
- whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]);
+ whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.yaw[i]);
if(whichhit!=-1&&fabs(objects.model[i].facenormals[whichhit].y)<.3){
- setAnimation(k,walljumpbackanim);
+ player[k].setAnimation(walljumpbackanim);
emit_sound_at(movewhooshsound, player[k].coords);
if(k==0)pause_sound(whooshsound);
- lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0);
- player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI;
- if(lowpointtarget.z<0)player[k].rotation=180-player[k].rotation;
- player[k].targetrotation=player[k].rotation;
- player[k].lowrotation=player[k].rotation;
+ lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.yaw[i],0);
+ player[k].yaw=-asin(0-lowpointtarget.x)*180/M_PI;
+ if(lowpointtarget.z<0)player[k].yaw=180-player[k].yaw;
+ player[k].targetyaw=player[k].yaw;
+ player[k].lowyaw=player[k].yaw;
if(k==0)numwallflipped++;
}
else
{
lowpoint=tempcoords1;
lowpointtarget=lowpoint-player[k].facing*2;
- whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]);
+ whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.yaw[i]);
if(whichhit!=-1&&fabs(objects.model[i].facenormals[whichhit].y)<.3){
- setAnimation(k,walljumpfrontanim);
+ player[k].setAnimation(walljumpfrontanim);
emit_sound_at(movewhooshsound, player[k].coords);
if(k==0)pause_sound(whooshsound);
- lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0);
- player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI;
- if(lowpointtarget.z<0)player[k].rotation=180-player[k].rotation;
- player[k].rotation+=180;
- player[k].targetrotation=player[k].rotation;
- player[k].lowrotation=player[k].rotation;
+ lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.yaw[i],0);
+ player[k].yaw=-asin(0-lowpointtarget.x)*180/M_PI;
+ if(lowpointtarget.z<0)player[k].yaw=180-player[k].yaw;
+ player[k].yaw+=180;
+ player[k].targetyaw=player[k].yaw;
+ player[k].lowyaw=player[k].yaw;
if(k==0)numwallflipped++;
}
}
lowpoint2=player[k].coords;
lowpoint=player[k].coords;
lowpoint.y+=2;
- if(objects.model[i].LineCheck(&lowpoint,&lowpoint2,&colpoint,&objects.position[i],&objects.rotation[i])!=-1){
+ if(objects.model[i].LineCheck(&lowpoint,&lowpoint2,&colpoint,&objects.position[i],&objects.yaw[i])!=-1){
player[k].coords=colpoint;
player[k].collide=1;
tempcollide=1;
- if(player[k].targetanimation==jumpdownanim||player[k].isFlip()){
+ if(player[k].animTarget==jumpdownanim||player[k].isFlip()){
//flipped into a rock
- if(player[k].isFlip()&&animation[player[k].targetanimation].label[player[k].targetframe]==7)
+ if(player[k].isFlip()&&animation[player[k].animTarget].label[player[k].frameTarget]==7)
player[k].RagDoll(0);
- if(player[k].targetanimation==jumpupanim){
+ if(player[k].animTarget==jumpupanim){
player[k].jumppower=-4;
- player[k].targetanimation=player[k].getIdle();
+ player[k].animTarget=player[k].getIdle();
}
player[k].target=0;
- player[k].targetframe=0;
+ player[k].frameTarget=0;
player[k].onterrain=1;
if(player[k].id==0){
}
//landing
- if((player[k].targetanimation==jumpdownanim||player[k].isFlip())&&!player[k].wasLanding()){
+ if((player[k].animTarget==jumpdownanim||player[k].isFlip())&&!player[k].wasLanding()){
if(player[k].isFlip())
player[k].jumppower=-4;
- player[k].targetanimation=player[k].getLanding();
+ player[k].animTarget=player[k].getLanding();
emit_sound_at(landsound, player[k].coords, 128.);
if(k==0){
envsound[numenvsounds]=player[k].coords;
lowpoint=player[k].coords;
lowpoint.y+=1.35;
if(objects.type[i]!=rocktype)
- if(player[k].SphereCheck(&lowpoint,1.33,&colpoint,&objects.position[i],&objects.rotation[i],&objects.model[i])!=-1){
- if(player[k].targetanimation!=jumpupanim&&
- player[k].targetanimation!=jumpdownanim&&
+ if(player[k].SphereCheck(&lowpoint,1.33,&colpoint,&objects.position[i],&objects.yaw[i],&objects.model[i])!=-1){
+ if(player[k].animTarget!=jumpupanim&&
+ player[k].animTarget!=jumpdownanim&&
player[k].onterrain)
player[k].avoidcollided=1;
player[k].coords=lowpoint;
player[k].collide=1;
if((player[k].grabdelay<=0||player[k].aitype!=playercontrolled)&&
- (player[k].currentanimation!=climbanim&&
- player[k].currentanimation!=hanganim&&
+ (player[k].animCurrent!=climbanim&&
+ player[k].animCurrent!=hanganim&&
!player[k].isWallJump()||
- player[k].targetanimation==jumpupanim||
- player[k].targetanimation==jumpdownanim)){
+ player[k].animTarget==jumpupanim||
+ player[k].animTarget==jumpdownanim)){
lowpoint=player[k].coords;
- objects.model[i].SphereCheckPossible(&lowpoint, 1.5, &objects.position[i], &objects.rotation[i]);
+ objects.model[i].SphereCheckPossible(&lowpoint, 1.5, &objects.position[i], &objects.yaw[i]);
lowpoint=player[k].coords;
lowpoint.y+=.05;
facing=0;
facing.z=-1;
- facing=DoRotation(facing,0,player[k].targetrotation+180,0);
+ facing=DoRotation(facing,0,player[k].targetyaw+180,0);
lowpointtarget=lowpoint+facing*1.4;
- whichhit=objects.model[i].LineCheckPossible(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]);
+ whichhit=objects.model[i].LineCheckPossible(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.yaw[i]);
if(whichhit!=-1){
lowpoint=player[k].coords;
lowpoint.y+=.1;
lowpointtarget6.y+=45/13;
lowpointtarget6+=facing*.6;
lowpointtarget7.y+=90/13;
- whichhit=objects.model[i].LineCheckPossible(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]);
+ whichhit=objects.model[i].LineCheckPossible(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.yaw[i]);
if(objects.friction[i]>.5)
if(whichhit!=-1){
- if(whichhit!=-1&&player[k].targetanimation!=jumpupanim&&player[k].targetanimation!=jumpdownanim)
+ if(whichhit!=-1&&player[k].animTarget!=jumpupanim&&player[k].animTarget!=jumpdownanim)
player[k].collided=1;
if(checkcollide(lowpoint7,lowpointtarget7)==-1)
if(checkcollide(lowpoint6,lowpointtarget6)==-1)
if( objects.model[i].LineCheckPossible(&lowpoint2,&lowpointtarget2,
- &colpoint,&objects.position[i],&objects.rotation[i])!=-1&&
+ &colpoint,&objects.position[i],&objects.yaw[i])!=-1&&
objects.model[i].LineCheckPossible(&lowpoint3,&lowpointtarget3,
- &colpoint,&objects.position[i],&objects.rotation[i])!=-1&&
+ &colpoint,&objects.position[i],&objects.yaw[i])!=-1&&
objects.model[i].LineCheckPossible(&lowpoint4,&lowpointtarget4,
- &colpoint,&objects.position[i],&objects.rotation[i])!=-1&&
+ &colpoint,&objects.position[i],&objects.yaw[i])!=-1&&
objects.model[i].LineCheckPossible(&lowpoint5,&lowpointtarget5,
- &colpoint,&objects.position[i],&objects.rotation[i])!=-1)
+ &colpoint,&objects.position[i],&objects.yaw[i])!=-1)
for(int j=0;j<45;j++){
lowpoint=player[k].coords;
lowpoint.y+=(float)j/13;
lowpointtarget=lowpoint+facing*1.4;
if(objects.model[i].LineCheckPossible(&lowpoint,&lowpointtarget,
- &colpoint2,&objects.position[i],&objects.rotation[i])==-1){
- if(j<=6||j<=25&&player[k].targetanimation==jumpdownanim)
+ &colpoint2,&objects.position[i],&objects.yaw[i])==-1){
+ if(j<=6||j<=25&&player[k].animTarget==jumpdownanim)
break;
- if(player[k].targetanimation==jumpupanim||player[k].targetanimation==jumpdownanim){
- lowpoint=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[k],0);
+ if(player[k].animTarget==jumpupanim||player[k].animTarget==jumpdownanim){
+ lowpoint=DoRotation(objects.model[i].facenormals[whichhit],0,objects.yaw[k],0);
lowpoint=player[k].coords;
lowpoint.y+=(float)j/13;
lowpointtarget=lowpoint+facing*1.3;
flatfacing=player[k].coords;
- player[k].coords=colpoint-DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[k],0)*.01;
+ player[k].coords=colpoint-DoRotation(objects.model[i].facenormals[whichhit],0,objects.yaw[k],0)*.01;
player[k].coords.y=lowpointtarget.y-.07;
player[k].currentoffset=(flatfacing-player[k].coords)/player[k].scale;
if(j>10||!player[k].isRun()){
- if(player[k].targetanimation==jumpdownanim||player[k].targetanimation==jumpupanim){
+ if(player[k].animTarget==jumpdownanim||player[k].animTarget==jumpupanim){
if(k==0)
pause_sound(whooshsound);
}
emit_sound_at(jumpsound, player[k].coords, 128.);
- lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0);
- player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI;
+ lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.yaw[i],0);
+ player[k].yaw=-asin(0-lowpointtarget.x)*180/M_PI;
if(lowpointtarget.z<0)
- player[k].rotation=180-player[k].rotation;
- player[k].targetrotation=player[k].rotation;
- player[k].lowrotation=player[k].rotation;
+ player[k].yaw=180-player[k].yaw;
+ player[k].targetyaw=player[k].yaw;
+ player[k].lowyaw=player[k].yaw;
//player[k].velocity=lowpointtarget*.03;
player[k].velocity=0;
//climb ledge (?)
- if(player[k].targetanimation==jumpupanim){
- player[k].targetanimation=climbanim;
+ if(player[k].animTarget==jumpupanim){
+ player[k].animTarget=climbanim;
player[k].jumppower=0;
player[k].jumpclimb=1;
}
player[k].transspeed=6;
player[k].target=0;
- player[k].targetframe=1;
+ player[k].frameTarget=1;
//hang ledge (?)
if(j>25){
- setAnimation(k,hanganim);
+ player[k].setAnimation(hanganim);
player[k].jumppower=0;
}
}
if(player[k].collide<=0){
//in the air
if(!player[k].onterrain&&
- player[k].targetanimation!=jumpupanim&&
- player[k].targetanimation!=jumpdownanim&&
- player[k].targetanimation!=climbanim&&
- player[k].targetanimation!=hanganim&&
+ player[k].animTarget!=jumpupanim&&
+ player[k].animTarget!=jumpdownanim&&
+ player[k].animTarget!=climbanim&&
+ player[k].animTarget!=hanganim&&
!player[k].isWallJump()&&
!player[k].isFlip()){
- if(player[k].currentanimation!=climbanim&&
- player[k].currentanimation!=tempanim&&
- player[k].targetanimation!=backhandspringanim&&
- (player[k].targetanimation!=rollanim||
- player[k].targetframe<2||
- player[k].targetframe>6)){
+ if(player[k].animCurrent!=climbanim&&
+ player[k].animCurrent!=tempanim&&
+ player[k].animTarget!=backhandspringanim&&
+ (player[k].animTarget!=rollanim||
+ player[k].frameTarget<2||
+ player[k].frameTarget>6)){
//stagger off ledge (?)
- if(player[k].targetanimation==staggerbackhighanim||player[k].targetanimation==staggerbackhardanim)
+ if(player[k].animTarget==staggerbackhighanim||player[k].animTarget==staggerbackhardanim)
player[k].RagDoll(0);
- setAnimation(k,jumpdownanim);
+ player[k].setAnimation(jumpdownanim);
if(!k)
emit_sound_at(whooshsound, player[k].coords, 128.);
}
}
-void Game::doAttacks(){
+void doAttacks(){
static XYZ relative;
static int randattack;
static bool playerrealattackkeydown=0;
!oldattackkey&&
!player[0].backkeydown){
for(int k=0;k<numplayers;k++){
- if((player[k].targetanimation==swordslashanim||
- player[k].targetanimation==staffhitanim||
- player[k].targetanimation==staffspinhitanim)&&
- player[0].currentanimation!=dodgebackanim&&
+ if((player[k].animTarget==swordslashanim||
+ player[k].animTarget==staffhitanim||
+ player[k].animTarget==staffspinhitanim)&&
+ player[0].animCurrent!=dodgebackanim&&
!player[k].skeleton.free)
player[k].Reverse();
}
for(int k=0;k<numplayers;k++){
if(indialogue!=-1)player[k].attackkeydown=0;
- if(player[k].targetanimation!=rabbitrunninganim&&player[k].targetanimation!=wolfrunninganim){
+ if(player[k].animTarget!=rabbitrunninganim&&player[k].animTarget!=wolfrunninganim){
if(player[k].aitype!=playercontrolled)
player[k].victim=&player[0];
//attack key pressed
if(player[k].attackkeydown){
//dodge backward
if(player[k].backkeydown&&
- player[k].targetanimation!=backhandspringanim&&
+ player[k].animTarget!=backhandspringanim&&
(player[k].isIdle()||
player[k].isStop()||
player[k].isRun()||
- player[k].targetanimation==walkanim)){
+ player[k].animTarget==walkanim)){
if(player[k].jumppower<=1){
player[k].jumppower-=2;
}else{
for(int i=0;i<numplayers;i++){
if(i==k)continue;
- if(player[i].targetanimation==swordslashanim||
- player[i].targetanimation==knifeslashstartanim||
- player[i].targetanimation==staffhitanim||
- player[i].targetanimation==staffspinhitanim)
- if(findDistancefast(&player[k].coords,&player[i].coords)<6.5&&!player[i].skeleton.free){
- setAnimation(k,dodgebackanim);
- player[k].targetrotation=roughDirectionTo(player[k].coords,player[i].coords);
+ if(player[i].animTarget==swordslashanim||
+ player[i].animTarget==knifeslashstartanim||
+ player[i].animTarget==staffhitanim||
+ player[i].animTarget==staffspinhitanim)
+ if(distsq(&player[k].coords,&player[i].coords)<6.5&&!player[i].skeleton.free){
+ player[k].setAnimation(dodgebackanim);
+ player[k].targetyaw=roughDirectionTo(player[k].coords,player[i].coords);
player[k].targettilt2=pitchTo(player[k].coords,player[i].coords);
}
}
- if(player[k].targetanimation!=dodgebackanim){
+ if(player[k].animTarget!=dodgebackanim){
if(k==0)numflipped++;
- setAnimation(k,backhandspringanim);
- player[k].targetrotation=-rotation+180;
+ player[k].setAnimation(backhandspringanim);
+ player[k].targetyaw=-yaw+180;
if(player[k].leftkeydown)
- player[k].targetrotation-=45;
+ player[k].targetyaw-=45;
if(player[k].rightkeydown)
- player[k].targetrotation+=45;
- player[k].rotation=player[k].targetrotation;
+ player[k].targetyaw+=45;
+ player[k].yaw=player[k].targetyaw;
player[k].jumppower-=2;
}
}
}
//attack
- if(!animation[player[k].targetanimation].attack&&
+ if(!animation[player[k].animTarget].attack&&
!player[k].backkeydown&&
(player[k].isIdle()||
player[k].isRun()||
- player[k].targetanimation==walkanim||
- player[k].targetanimation==sneakanim||
+ player[k].animTarget==walkanim||
+ player[k].animTarget==sneakanim||
player[k].isCrouch())){
const int attackweapon=player[k].weaponactive==-1?0:weapons[player[k].weaponids[player[k].weaponactive]].getType();
//normal attacks (?)
for(int i=0;i<numplayers;i++){
if(i==k||!(k==0||i==0))continue;
if(!player[k].hasvictim)
- if(animation[player[k].targetanimation].attack!=reversal){
+ if(animation[player[k].animTarget].attack!=reversal){
//choose an attack
- const float distance=findDistancefast(&player[k].coords,&player[i].coords);
+ const float distance=distsq(&player[k].coords,&player[i].coords);
if(distance<4.5&&
!player[i].skeleton.free&&
player[i].howactive<typedead1&&
- player[i].targetanimation!=jumpreversedanim&&
- player[i].targetanimation!=rabbitkickreversedanim&&
- player[i].targetanimation!=rabbitkickanim&&
- player[k].targetanimation!=rabbitkickanim&&
- player[i].targetanimation!=getupfrombackanim&&
- (player[i].targetanimation!=staggerbackhighanim&&
- (player[i].targetanimation!=staggerbackhardanim||
- animation[staggerbackhardanim].label[player[i].targetframe]==6))&&
- player[i].targetanimation!=jumpdownanim&&
- player[i].targetanimation!=jumpupanim&&
- player[i].targetanimation!=getupfromfrontanim){
+ player[i].animTarget!=jumpreversedanim&&
+ player[i].animTarget!=rabbitkickreversedanim&&
+ player[i].animTarget!=rabbitkickanim&&
+ player[k].animTarget!=rabbitkickanim&&
+ player[i].animTarget!=getupfrombackanim&&
+ (player[i].animTarget!=staggerbackhighanim&&
+ (player[i].animTarget!=staggerbackhardanim||
+ animation[staggerbackhardanim].label[player[i].frameTarget]==6))&&
+ player[i].animTarget!=jumpdownanim&&
+ player[i].animTarget!=jumpupanim&&
+ player[i].animTarget!=getupfromfrontanim){
player[k].victim=&player[i];
player[k].hasvictim=1;
if(player[k].aitype==playercontrolled){ //human player
//sweep
if(distance<2.5*sq(player[k].scale*5)&&
player[k].crouchkeydown&&
- animation[player[i].targetanimation].height!=lowheight)
- player[k].targetanimation=sweepanim;
+ animation[player[i].animTarget].height!=lowheight)
+ player[k].animTarget=sweepanim;
//winduppunch
else if(distance<1.5*sq(player[k].scale*5)&&
- animation[player[i].targetanimation].height!=lowheight&&
+ animation[player[i].animTarget].height!=lowheight&&
!player[k].forwardkeydown&&
!player[k].leftkeydown&&
!player[k].rightkeydown&&
!player[k].crouchkeydown&&
!attackweapon&&
!reversaltrain)
- player[k].targetanimation=winduppunchanim;
+ player[k].animTarget=winduppunchanim;
//upunch
else if(distance<2.5*sq(player[k].scale*5)&&
- animation[player[i].targetanimation].height!=lowheight&&
+ animation[player[i].animTarget].height!=lowheight&&
!player[k].forwardkeydown&&
!player[k].leftkeydown&&
!player[k].rightkeydown&&
!player[k].crouchkeydown&&
!attackweapon)
- player[k].targetanimation=upunchanim;
+ player[k].animTarget=upunchanim;
//knifefollow
else if(distance<2.5*sq(player[k].scale*5)&&
player[i].staggerdelay>0&&
attackweapon==knife&&
player[i].bloodloss>player[i].damagetolerance/2)
- player[k].targetanimation=knifefollowanim;
+ player[k].animTarget=knifefollowanim;
//knifeslashstart
else if(distance<2.5*sq(player[k].scale*5)&&
- animation[player[i].targetanimation].height!=lowheight&&
+ animation[player[i].animTarget].height!=lowheight&&
!player[k].forwardkeydown&&
!player[k].leftkeydown&&
!player[k].rightkeydown&&
!player[k].crouchkeydown&&
attackweapon==knife&&
player[k].weaponmissdelay<=0)
- player[k].targetanimation=knifeslashstartanim;
+ player[k].animTarget=knifeslashstartanim;
//swordslash
else if(distance<4.5*sq(player[k].scale*5)&&
- animation[player[i].targetanimation].height!=lowheight&&
+ animation[player[i].animTarget].height!=lowheight&&
!player[k].crouchkeydown&&
attackweapon==sword&&
player[k].weaponmissdelay<=0)
- player[k].targetanimation=swordslashanim;
+ player[k].animTarget=swordslashanim;
//staffhit
else if(distance<4.5*sq(player[k].scale*5)&&
- animation[player[i].targetanimation].height!=lowheight&&
+ animation[player[i].animTarget].height!=lowheight&&
!player[k].crouchkeydown&&
attackweapon==staff&&
player[k].weaponmissdelay<=0&&
!player[k].leftkeydown&&
!player[k].rightkeydown&&
!player[k].forwardkeydown)
- player[k].targetanimation=staffhitanim;
+ player[k].animTarget=staffhitanim;
//staffspinhit
else if(distance<4.5*sq(player[k].scale*5)&&
- animation[player[i].targetanimation].height!=lowheight&&
+ animation[player[i].animTarget].height!=lowheight&&
!player[k].crouchkeydown&&
attackweapon==staff&&
player[k].weaponmissdelay<=0)
- player[k].targetanimation=staffspinhitanim;
+ player[k].animTarget=staffspinhitanim;
//spinkick
else if(distance<2.5*sq(player[k].scale*5)&&
- animation[player[i].targetanimation].height!=lowheight)
- player[k].targetanimation=spinkickanim;
+ animation[player[i].animTarget].height!=lowheight)
+ player[k].animTarget=spinkickanim;
//lowkick
else if(distance<2.5*sq(player[k].scale*5)&&
- animation[player[i].targetanimation].height==lowheight&&
- animation[player[k].targetanimation].attack!=normalattack)
- player[k].targetanimation=lowkickanim;
+ animation[player[i].animTarget].height==lowheight&&
+ animation[player[k].animTarget].attack!=normalattack)
+ player[k].animTarget=lowkickanim;
} else { //AI player
if(distance<4.5*sq(player[k].scale*5)){
randattack=abs(Random()%5);
if(!attackweapon&&distance<2.5*sq(player[k].scale*5)){
//sweep
- if(randattack==0&&animation[player[i].targetanimation].height!=lowheight)
- player[k].targetanimation=sweepanim;
+ if(randattack==0&&animation[player[i].animTarget].height!=lowheight)
+ player[k].animTarget=sweepanim;
//upunch
- else if(randattack==1&&animation[player[i].targetanimation].height!=lowheight&&
+ else if(randattack==1&&animation[player[i].animTarget].height!=lowheight&&
!attackweapon)
- player[k].targetanimation=upunchanim;
+ player[k].animTarget=upunchanim;
//spinkick
- else if(randattack==2&&animation[player[i].targetanimation].height!=lowheight)
- player[k].targetanimation=spinkickanim;
+ else if(randattack==2&&animation[player[i].animTarget].height!=lowheight)
+ player[k].animTarget=spinkickanim;
//lowkick
- else if(animation[player[i].targetanimation].height==lowheight)
- player[k].targetanimation=lowkickanim;
+ else if(animation[player[i].animTarget].height==lowheight)
+ player[k].animTarget=lowkickanim;
}
if(attackweapon){
//sweep
if((tutoriallevel!=1||!attackweapon)&&
distance<2.5*sq(player[k].scale*5)&&
randattack==0&&
- animation[player[i].targetanimation].height!=lowheight)
- player[k].targetanimation=sweepanim;
+ animation[player[i].animTarget].height!=lowheight)
+ player[k].animTarget=sweepanim;
//knifeslashstart
else if(distance<2.5*sq(player[k].scale*5)&&
attackweapon==knife&&
player[k].weaponmissdelay<=0)
- player[k].targetanimation=knifeslashstartanim;
+ player[k].animTarget=knifeslashstartanim;
//swordslash
else if(!(player[0].victim==&player[i]&&
player[0].hasvictim&&
- player[0].targetanimation==swordslashanim)&&
+ player[0].animTarget==swordslashanim)&&
attackweapon==sword&&
player[k].weaponmissdelay<=0)
- player[k].targetanimation=swordslashanim;
+ player[k].animTarget=swordslashanim;
//staffhit
else if(!(player[0].victim==&player[i]&&
player[0].hasvictim&&
- player[0].targetanimation==swordslashanim)&&
+ player[0].animTarget==swordslashanim)&&
attackweapon==staff&&
player[k].weaponmissdelay<=0&&
randattack<3)
- player[k].targetanimation=staffhitanim;
+ player[k].animTarget=staffhitanim;
//staffspinhit
else if(!(player[0].victim==&player[i]&&
player[0].hasvictim&&
- player[0].targetanimation==swordslashanim)&&
+ player[0].animTarget==swordslashanim)&&
attackweapon==staff&&
player[k].weaponmissdelay<=0&&
randattack>=3)
- player[k].targetanimation=staffspinhitanim;
+ player[k].animTarget=staffspinhitanim;
//spinkick
else if((tutoriallevel!=1||!attackweapon)&&
distance<2.5*sq(player[k].scale*5)&&
randattack==1&&
- animation[player[i].targetanimation].height!=lowheight)
- player[k].targetanimation=spinkickanim;
+ animation[player[i].animTarget].height!=lowheight)
+ player[k].animTarget=spinkickanim;
//lowkick
else if(distance<2.5*sq(player[k].scale*5)&&
- animation[player[i].targetanimation].height==lowheight&&
- animation[player[k].targetanimation].attack!=normalattack)
- player[k].targetanimation=lowkickanim;
+ animation[player[i].animTarget].height==lowheight&&
+ animation[player[k].animTarget].attack!=normalattack)
+ player[k].animTarget=lowkickanim;
}
}
}
//upunch becomes wolfslap
- if(player[k].targetanimation==upunchanim&&player[k].creature==wolftype)
- player[k].targetanimation=wolfslapanim;
+ if(player[k].animTarget==upunchanim&&player[k].creature==wolftype)
+ player[k].animTarget=wolfslapanim;
}
//sneak attacks
if((k==0)&&(tutoriallevel!=1||tutorialstage==22)&&
player[i].howactive<typedead1&&
distance<1.5*sq(player[k].scale*5)&&
!player[i].skeleton.free&&
- player[i].targetanimation!=getupfrombackanim&&
- player[i].targetanimation!=getupfromfrontanim&&
+ player[i].animTarget!=getupfrombackanim&&
+ player[i].animTarget!=getupfromfrontanim&&
(player[i].stunned>0&&player[k].madskills||
player[i].surprised>0||
player[i].aitype==passivetype||
normaldotproduct(player[i].facing,player[i].coords-player[k].coords)>0){
//sneakattack
if(!attackweapon){
- player[k].currentanimation=sneakattackanim;
- player[k].targetanimation=sneakattackanim;
- player[i].currentanimation=sneakattackedanim;
- player[i].targetanimation=sneakattackedanim;
+ player[k].animCurrent=sneakattackanim;
+ player[k].animTarget=sneakattackanim;
+ player[i].animCurrent=sneakattackedanim;
+ player[i].animTarget=sneakattackedanim;
player[k].oldcoords=player[k].coords;
player[k].coords=player[i].coords;
}
//knifesneakattack
if(attackweapon==knife){
- player[k].currentanimation=knifesneakattackanim;
- player[k].targetanimation=knifesneakattackanim;
- player[i].currentanimation=knifesneakattackedanim;
- player[i].targetanimation=knifesneakattackedanim;
+ player[k].animCurrent=knifesneakattackanim;
+ player[k].animTarget=knifesneakattackanim;
+ player[i].animCurrent=knifesneakattackedanim;
+ player[i].animTarget=knifesneakattackedanim;
player[i].oldcoords=player[i].coords;
player[i].coords=player[k].coords;
}
//swordsneakattack
if(attackweapon==sword){
- player[k].currentanimation=swordsneakattackanim;
- player[k].targetanimation=swordsneakattackanim;
- player[i].currentanimation=swordsneakattackedanim;
- player[i].targetanimation=swordsneakattackedanim;
+ player[k].animCurrent=swordsneakattackanim;
+ player[k].animTarget=swordsneakattackanim;
+ player[i].animCurrent=swordsneakattackedanim;
+ player[i].animTarget=swordsneakattackedanim;
player[i].oldcoords=player[i].coords;
player[i].coords=player[k].coords;
}
player[k].victim=&player[i];
player[k].hasvictim=1;
player[i].targettilt2=0;
- player[i].targetframe=1;
- player[i].currentframe=0;
+ player[i].frameTarget=1;
+ player[i].frameCurrent=0;
player[i].target=0;
player[i].velocity=0;
player[k].targettilt2=player[i].targettilt2;
- player[k].currentframe=player[i].currentframe;
- player[k].targetframe=player[i].targetframe;
+ player[k].frameCurrent=player[i].frameCurrent;
+ player[k].frameTarget=player[i].frameTarget;
player[k].target=player[i].target;
player[k].velocity=0;
- player[k].targetrotation=player[i].rotation;
- player[k].rotation=player[i].rotation;
- player[i].targetrotation=player[i].rotation;
+ player[k].targetyaw=player[i].yaw;
+ player[k].yaw=player[i].yaw;
+ player[i].targetyaw=player[i].yaw;
}
}
- if(animation[player[k].targetanimation].attack==normalattack&&
+ if(animation[player[k].animTarget].attack==normalattack&&
player[k].victim==&player[i]&&
(!player[i].skeleton.free)){
oldattackkey=1;
- player[k].targetframe=0;
+ player[k].frameTarget=0;
player[k].target=0;
- player[k].targetrotation=roughDirectionTo(player[k].coords,player[i].coords);
+ player[k].targetyaw=roughDirectionTo(player[k].coords,player[i].coords);
player[k].targettilt2=pitchTo(player[k].coords,player[i].coords);
player[k].lastattack3=player[k].lastattack2;
player[k].lastattack2=player[k].lastattack;
- player[k].lastattack=player[k].targetanimation;
+ player[k].lastattack=player[k].animTarget;
}
- if(player[k].targetanimation==knifefollowanim&&
+ if(player[k].animTarget==knifefollowanim&&
player[k].victim==&player[i]){
oldattackkey=1;
- player[k].targetrotation=roughDirectionTo(player[k].coords,player[i].coords);
+ player[k].targetyaw=roughDirectionTo(player[k].coords,player[i].coords);
player[k].targettilt2=pitchTo(player[k].coords,player[i].coords);
player[k].victim=&player[i];
player[k].hasvictim=1;
- player[i].targetanimation=knifefollowedanim;
- player[i].currentanimation=knifefollowedanim;
+ player[i].animTarget=knifefollowedanim;
+ player[i].animCurrent=knifefollowedanim;
player[i].targettilt2=0;
player[i].targettilt2=player[k].targettilt2;
- player[i].targetframe=1;
- player[i].currentframe=0;
+ player[i].frameTarget=1;
+ player[i].frameCurrent=0;
player[i].target=0;
player[i].velocity=0;
- player[k].currentanimation=knifefollowanim;
- player[k].targetanimation=knifefollowanim;
+ player[k].animCurrent=knifefollowanim;
+ player[k].animTarget=knifefollowanim;
player[k].targettilt2=player[i].targettilt2;
- player[k].currentframe=player[i].currentframe;
- player[k].targetframe=player[i].targetframe;
+ player[k].frameCurrent=player[i].frameCurrent;
+ player[k].frameTarget=player[i].frameTarget;
player[k].target=player[i].target;
player[k].velocity=0;
player[k].oldcoords=player[k].coords;
player[i].coords=player[k].coords;
- player[i].targetrotation=player[k].targetrotation;
- player[i].rotation=player[k].targetrotation;
- player[k].rotation=player[k].targetrotation;
- player[i].rotation=player[k].targetrotation;
+ player[i].targetyaw=player[k].targetyaw;
+ player[i].yaw=player[k].targetyaw;
+ player[k].yaw=player[k].targetyaw;
+ player[i].yaw=player[k].targetyaw;
}
}
}
for(int i=0;i<numplayers;i++){
if(i==k)continue;
if((playerrealattackkeydown||player[i].dead||!hasstaff)&&
- animation[player[k].targetanimation].attack==neutral){
- const float distance=findDistancefast(&player[k].coords,&player[i].coords);
+ animation[player[k].animTarget].attack==neutral){
+ const float distance=distsq(&player[k].coords,&player[i].coords);
if(!player[i].dead||!realthreat||(!attackweapon&&player[k].crouchkeydown))
if(player[i].skeleton.free)
if(distance<3.5*sq(player[k].scale*5)&&
if(attackweapon&&tutoriallevel!=1){
//crouchstab
if(player[k].crouchkeydown&&attackweapon==knife&&distance<1.5*sq(player[k].scale*5))
- player[k].targetanimation=crouchstabanim;
+ player[k].animTarget=crouchstabanim;
//swordgroundstab
if(player[k].crouchkeydown&&distance<1.5*sq(player[k].scale*5)&&attackweapon==sword)
- player[k].targetanimation=swordgroundstabanim;
+ player[k].animTarget=swordgroundstabanim;
//staffgroundsmash
if(distance<3.5*sq(player[k].scale*5)&&attackweapon==staff)
- player[k].targetanimation=staffgroundsmashanim;
+ player[k].animTarget=staffgroundsmashanim;
}
if(distance<2.5&&
player[k].crouchkeydown&&
- player[k].targetanimation!=crouchstabanim&&
+ player[k].animTarget!=crouchstabanim&&
!attackweapon&&
player[i].dead&&
player[i].skeleton.free&&
player[i].skeleton.longdead>1000){
- player[k].targetanimation=killanim;
+ player[k].animTarget=killanim;
//TODO: refactor this out, what does it do?
for(int j=0;j<terrain.numdecals;j++){
if((terrain.decaltype[j]==blooddecal||terrain.decaltype[j]==blooddecalslow)&&
player[k].lastattack!=spinkickanim&&
player[i].skeleton.free)&&
(!player[i].dead||musictype!=stream_fighttheme)){
- player[k].targetanimation=dropkickanim;
+ player[k].animTarget=dropkickanim;
for(int j=0;j<terrain.numdecals;j++){
if((terrain.decaltype[j]==blooddecal||terrain.decaltype[j]==blooddecalslow)&&
terrain.decalalivetime[j]<2){
}
}
}
- if(animation[player[k].targetanimation].attack==normalattack&&
+ if(animation[player[k].animTarget].attack==normalattack&&
player[k].victim==&player[i]&&
(!player[i].skeleton.free||
- player[k].targetanimation==killanim||
- player[k].targetanimation==crouchstabanim||
- player[k].targetanimation==swordgroundstabanim||
- player[k].targetanimation==staffgroundsmashanim||
- player[k].targetanimation==dropkickanim)){
+ player[k].animTarget==killanim||
+ player[k].animTarget==crouchstabanim||
+ player[k].animTarget==swordgroundstabanim||
+ player[k].animTarget==staffgroundsmashanim||
+ player[k].animTarget==dropkickanim)){
oldattackkey=1;
- player[k].targetframe=0;
+ player[k].frameTarget=0;
player[k].target=0;
XYZ targetpoint=player[i].coords;
- if(player[k].targetanimation==crouchstabanim||
- player[k].targetanimation==swordgroundstabanim||
- player[k].targetanimation==staffgroundsmashanim){
- targetpoint+=(playerJoint(i,abdomen).position+
- playerJoint(i,neck).position)/2*
+ if(player[k].animTarget==crouchstabanim||
+ player[k].animTarget==swordgroundstabanim||
+ player[k].animTarget==staffgroundsmashanim){
+ targetpoint+=(player[i].getJointFor(abdomen).position+
+ player[i].getJointFor(neck).position)/2*
player[i].scale;
}
- player[k].targetrotation=roughDirectionTo(player[k].coords,targetpoint);
+ player[k].targetyaw=roughDirectionTo(player[k].coords,targetpoint);
player[k].targettilt2=pitchTo(player[k].coords,targetpoint);
- if(player[k].targetanimation==crouchstabanim||player[k].targetanimation==swordgroundstabanim){
- player[k].targetrotation+=(float)(abs(Random()%100)-50)/4;
+ if(player[k].animTarget==crouchstabanim||player[k].animTarget==swordgroundstabanim){
+ player[k].targetyaw+=(float)(abs(Random()%100)-50)/4;
}
- if(player[k].targetanimation==staffgroundsmashanim)
+ if(player[k].animTarget==staffgroundsmashanim)
player[k].targettilt2+=10;
player[k].lastattack3=player[k].lastattack2;
player[k].lastattack2=player[k].lastattack;
- player[k].lastattack=player[k].targetanimation;
+ player[k].lastattack=player[k].animTarget;
- if(player[k].targetanimation==swordgroundstabanim){
- player[k].targetrotation+=30;
+ if(player[k].animTarget==swordgroundstabanim){
+ player[k].targetyaw+=30;
}
}
}
if(i==k||!(i==0||k==0))continue;
if(!player[i].skeleton.free){
if(player[k].hasvictim){
- if(findDistancefast(&player[k].coords,&player[i].coords)<
- findDistancefast(&player[k].coords,&player[k].victim->coords))
+ if(distsq(&player[k].coords,&player[i].coords)<
+ distsq(&player[k].coords,&player[k].victim->coords))
player[k].victim=&player[i];
}else{
player[k].victim=&player[i];
player[k].isRun()&&
player[k].wasRun()&&
((player[k].hasvictim&&
- findDistancefast(&player[k].coords,&player[k].victim->coords)<12*sq(player[k].scale*5)&&
- findDistancefast(&player[k].coords,&player[k].victim->coords)>7*sq(player[k].scale*5)&&
+ distsq(&player[k].coords,&player[k].victim->coords)<12*sq(player[k].scale*5)&&
+ distsq(&player[k].coords,&player[k].victim->coords)>7*sq(player[k].scale*5)&&
!player[k].victim->skeleton.free&&
- player[k].victim->targetanimation!=getupfrombackanim&&
- player[k].victim->targetanimation!=getupfromfrontanim&&
- animation[player[k].victim->targetanimation].height!=lowheight&&
+ player[k].victim->animTarget!=getupfrombackanim&&
+ player[k].victim->animTarget!=getupfromfrontanim&&
+ animation[player[k].victim->animTarget].height!=lowheight&&
player[k].aitype!=playercontrolled&& //wat???
normaldotproduct(player[k].facing,player[k].victim->coords-player[k].coords)>0&&
player[k].rabbitkickenabled)||
player[k].jumpkeydown)){
oldattackkey=1;
- setAnimation(k,rabbitkickanim);
+ player[k].setAnimation(rabbitkickanim);
}
//update counts
- if(animation[player[k].targetanimation].attack&&k==0){
+ if(animation[player[k].animTarget].attack&&k==0){
numattacks++;
switch(attackweapon){
case 0: numunarmedattack++; break;
}
}
-void Game::doPlayerCollisions(){
+void doPlayerCollisions(){
static XYZ rotatetarget;
static float collisionradius;
if(numplayers>1)
for(int k=0;k<numplayers;k++)
for(int i=k+1;i<numplayers;i++){
//neither player is part of a reversal
- if((animation[player[i].targetanimation].attack!=reversed&&
- animation[player[i].targetanimation].attack!=reversal&&
- animation[player[k].targetanimation].attack!=reversed&&
- animation[player[k].targetanimation].attack!=reversal)||(i!=0&&k!=0))
- if((animation[player[i].currentanimation].attack!=reversed&&
- animation[player[i].currentanimation].attack!=reversal&&
- animation[player[k].currentanimation].attack!=reversed&&
- animation[player[k].currentanimation].attack!=reversal)||(i!=0&&k!=0))
+ if((animation[player[i].animTarget].attack!=reversed&&
+ animation[player[i].animTarget].attack!=reversal&&
+ animation[player[k].animTarget].attack!=reversed&&
+ animation[player[k].animTarget].attack!=reversal)||(i!=0&&k!=0))
+ if((animation[player[i].animCurrent].attack!=reversed&&
+ animation[player[i].animCurrent].attack!=reversal&&
+ animation[player[k].animCurrent].attack!=reversed&&
+ animation[player[k].animCurrent].attack!=reversal)||(i!=0&&k!=0))
//neither is sleeping
if(player[i].howactive<=typesleeping&&player[k].howactive<=typesleeping)
if(player[i].howactive!=typesittingwall&&player[k].howactive!=typesittingwall)
player[i].whichpatchz==player[k].whichpatchz&&
player[k].skeleton.oldfree==player[k].skeleton.free&&
player[i].skeleton.oldfree==player[i].skeleton.free&&
- player[i].targetanimation!=climbanim&&
- player[i].targetanimation!=hanganim&&
- player[k].targetanimation!=climbanim&&
- player[k].targetanimation!=hanganim)
+ player[i].animTarget!=climbanim&&
+ player[i].animTarget!=hanganim&&
+ player[k].animTarget!=climbanim&&
+ player[k].animTarget!=hanganim)
//players are close (bounding box test)
if(player[i].coords.y>player[k].coords.y-3)
if(player[i].coords.y<player[k].coords.y+3)
if(player[i].coords.z>player[k].coords.z-3)
if(player[i].coords.z<player[k].coords.z+3){
//spread fire from player to player
- if(findDistancefast(&player[i].coords,&player[k].coords)
+ if(distsq(&player[i].coords,&player[k].coords)
<3*sq((player[i].scale+player[k].scale)*2.5)){
if(player[i].onfire||player[k].onfire){
if(!player[i].onfire)player[i].CatchFire();
XYZ tempcoords1=player[i].coords;
XYZ tempcoords2=player[k].coords;
if(!player[i].skeleton.oldfree)
- tempcoords1.y+=playerJoint(i,abdomen).position.y*player[i].scale;
+ tempcoords1.y+=player[i].getJointFor(abdomen).position.y*player[i].scale;
if(!player[k].skeleton.oldfree)
- tempcoords2.y+=playerJoint(k,abdomen).position.y*player[k].scale;
+ tempcoords2.y+=player[k].getJointFor(abdomen).position.y*player[k].scale;
collisionradius=1.2*sq((player[i].scale+player[k].scale)*2.5);
if(player[0].hasvictim)
- if(player[0].targetanimation==rabbitkickanim&&(k==0||i==0)&&!player[0].victim->skeleton.free)
+ if(player[0].animTarget==rabbitkickanim&&(k==0||i==0)&&!player[0].victim->skeleton.free)
collisionradius=3;
if((!player[i].skeleton.oldfree||!player[k].skeleton.oldfree)&&
- (findDistancefast(&tempcoords1,&tempcoords2)<collisionradius||
- findDistancefast(&player[i].coords,&player[k].coords)<collisionradius)){
+ (distsq(&tempcoords1,&tempcoords2)<collisionradius||
+ distsq(&player[i].coords,&player[k].coords)<collisionradius)){
//jump down on a dead body
if(k==0||i==0){
int l=i?i:k;
- if(player[0].targetanimation==jumpdownanim&&
+ if(player[0].animTarget==jumpdownanim&&
!player[0].skeleton.oldfree&&
!player[0].skeleton.free&&
player[l].skeleton.oldfree&&
player[l].dead&&
player[0].lastcollide<=0&&
fabs(player[l].coords.y-player[0].coords.y)<.2&&
- findDistancefast(&player[0].coords,&player[l].coords)<.7*sq((player[l].scale+player[0].scale)*2.5)){
+ distsq(&player[0].coords,&player[l].coords)<.7*sq((player[l].scale+player[0].scale)*2.5)){
player[0].coords.y=player[l].coords.y;
player[l].velocity=player[0].velocity;
player[l].skeleton.free=0;
- player[l].rotation=0;
+ player[l].yaw=0;
player[l].RagDoll(0);
player[l].DoDamage(20);
camerashake+=.3;
(player[k].skeleton.oldfree==1&&findLengthfast(&player[k].velocity)>1)||
(player[i].skeleton.oldfree==0&&player[k].skeleton.oldfree==0)){
rotatetarget=player[k].velocity-player[i].velocity;
- if((player[i].targetanimation!=getupfrombackanim&&player[i].targetanimation!=getupfromfrontanim||
+ if((player[i].animTarget!=getupfrombackanim&&player[i].animTarget!=getupfromfrontanim||
player[i].skeleton.free)&&
- (player[k].targetanimation!=getupfrombackanim&&player[k].targetanimation!=getupfromfrontanim||
+ (player[k].animTarget!=getupfrombackanim&&player[k].animTarget!=getupfromfrontanim||
player[k].skeleton.free))
if((((k!=0&&findLengthfast(&rotatetarget)>150||
k==0&&findLengthfast(&rotatetarget)>50&&player[0].rabbitkickragdoll)&&
normaldotproduct(rotatetarget,player[k].coords-player[i].coords)>0)&&
(k==0||
- k!=0&&player[i].skeleton.oldfree==1&&animation[player[k].currentanimation].attack==neutral||
- /*i!=0&&*/player[k].skeleton.oldfree==1&&animation[player[i].currentanimation].attack==neutral))||
- (player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip())&&
- (player[k].targetanimation==jumpupanim||player[k].targetanimation==jumpdownanim||player[k].isFlip())&&
+ k!=0&&player[i].skeleton.oldfree==1&&animation[player[k].animCurrent].attack==neutral||
+ /*i!=0&&*/player[k].skeleton.oldfree==1&&animation[player[i].animCurrent].attack==neutral))||
+ (player[i].animTarget==jumpupanim||player[i].animTarget==jumpdownanim||player[i].isFlip())&&
+ (player[k].animTarget==jumpupanim||player[k].animTarget==jumpdownanim||player[k].isFlip())&&
k==0&&!player[i].skeleton.oldfree&&!player[k].skeleton.oldfree){
//If hit by body
if( (i!=0||player[i].skeleton.free)&&
(k!=0||player[k].skeleton.free)||
- (animation[player[i].targetanimation].height==highheight&&
- animation[player[k].targetanimation].height==highheight)){
+ (animation[player[i].animTarget].height==highheight&&
+ animation[player[k].animTarget].height==highheight)){
if(tutoriallevel!=1){
emit_sound_at(heavyimpactsound, player[i].coords);
}
}
}
- if( (animation[player[i].targetanimation].attack==neutral||
- animation[player[i].targetanimation].attack==normalattack)&&
- (animation[player[k].targetanimation].attack==neutral||
- animation[player[k].targetanimation].attack==normalattack)){
+ if( (animation[player[i].animTarget].attack==neutral||
+ animation[player[i].animTarget].attack==normalattack)&&
+ (animation[player[k].animTarget].attack==neutral||
+ animation[player[k].animTarget].attack==normalattack)){
//If bumped
if(player[i].skeleton.oldfree==0&&player[k].skeleton.oldfree==0){
- if(findDistancefast(&player[k].coords,&player[i].coords)<.5*sq((player[i].scale+player[k].scale)*2.5)){
+ if(distsq(&player[k].coords,&player[i].coords)<.5*sq((player[i].scale+player[k].scale)*2.5)){
rotatetarget=player[k].coords-player[i].coords;
Normalise(&rotatetarget);
player[k].coords=(player[k].coords+player[i].coords)/2;
if(player[k].howactive==typeactive||hostile)
if(player[k].isIdle()){
if(player[k].howactive<typesleeping)
- setAnimation(k,player[k].getStop());
+ player[k].setAnimation(player[k].getStop());
else if(player[k].howactive==typesleeping)
- setAnimation(k,getupfromfrontanim);
+ player[k].setAnimation(getupfromfrontanim);
if(!editorenabled)
player[k].howactive=typeactive;
}
if(player[i].howactive==typeactive||hostile)
if(player[i].isIdle()){
if(player[i].howactive<typesleeping)
- setAnimation(i,player[k].getStop());
+ player[i].setAnimation(player[k].getStop());
else
- setAnimation(i,getupfromfrontanim);
+ player[i].setAnimation(getupfromfrontanim);
if(!editorenabled)
player[i].howactive=typeactive;
}
}
//jump down on player
if(hostile){
- if(k==0&&i!=0&&player[k].targetanimation==jumpdownanim&&
+ if(k==0&&i!=0&&player[k].animTarget==jumpdownanim&&
!player[i].isCrouch()&&
- player[i].targetanimation!=rollanim&&
+ player[i].animTarget!=rollanim&&
!player[k].skeleton.oldfree&&!
player[k].skeleton.free&&
player[k].lastcollide<=0&&
player[k].lastcollide=1;
award_bonus(k, AboveBonus);
}
- if(i==0&&k!=0&&player[i].targetanimation==jumpdownanim&&
+ if(i==0&&k!=0&&player[i].animTarget==jumpdownanim&&
!player[k].isCrouch()&&
- player[k].targetanimation!=rollanim&&
+ player[k].animTarget!=rollanim&&
!player[i].skeleton.oldfree&&
!player[i].skeleton.free&&
player[i].lastcollide<=0&&
}
}
-void Game::doAI(int i){
+void doAI(int i){
static bool connected;
if(player[i].aitype!=playercontrolled&&indialogue==-1){
player[i].jumpclimb=0;
player[i].stunned=1;
player[i].pause=0;
- if(findDistancefastflat(&player[0].coords,&player[i].coords)<30&&
+ if(distsqflat(&player[0].coords,&player[i].coords)<30&&
player[0].coords.y>player[i].coords.y+2&&
!player[0].onterrain)
player[i].pause=1;
closest=-1;
closestdistance=-1;
for(int j=0;j<numpathpoints;j++)
- if(closest==-1||findDistancefast(&player[i].finalfinaltarget,&pathpoint[j])<closestdistance){
- closestdistance=findDistancefast(&player[i].finalfinaltarget,&pathpoint[j]);
+ if(closest==-1||distsq(&player[i].finalfinaltarget,&pathpoint[j])<closestdistance){
+ closestdistance=distsq(&player[i].finalfinaltarget,&pathpoint[j]);
closest=j;
player[i].finaltarget=pathpoint[j];
}
if(player[i].lastpathfindpoint==-1){
for(int j=0;j<numpathpoints;j++){
if(j!=player[i].lastpathfindpoint)
- if(closest==-1||(findDistancefast(&player[i].coords,&pathpoint[j])<closestdistance)){
- closestdistance=findDistancefast(&player[i].coords,&pathpoint[j]);
+ if(closest==-1||(distsq(&player[i].coords,&pathpoint[j])<closestdistance)){
+ closestdistance=distsq(&player[i].coords,&pathpoint[j]);
closest=j;
}
}
}
player[i].losupdatedelay-=multiplier;
- player[i].targetrotation=roughDirectionTo(player[i].coords,pathpoint[player[i].targetpathfindpoint]);
- player[i].lookrotation=player[i].targetrotation;
+ player[i].targetyaw=roughDirectionTo(player[i].coords,pathpoint[player[i].targetpathfindpoint]);
+ player[i].lookyaw=player[i].targetyaw;
//reached target point
- if(findDistancefastflat(&player[i].coords,&pathpoint[player[i].targetpathfindpoint])<.6){
+ if(distsqflat(&player[i].coords,&pathpoint[player[i].targetpathfindpoint])<.6){
player[i].lastpathfindpoint4=player[i].lastpathfindpoint3;
player[i].lastpathfindpoint3=player[i].lastpathfindpoint2;
player[i].lastpathfindpoint2=player[i].lastpathfindpoint;
player[i].lastpathfindpoint4=player[i].lastpathfindpoint3;
player[i].targetpathfindpoint=-1;
}
- if( findDistancefastflat(&player[i].coords,&player[i].finalfinaltarget)<
- findDistancefastflat(&player[i].coords,&player[i].finaltarget)||
- findDistancefastflat(&player[i].coords,&player[i].finaltarget)<.6*sq(player[i].scale*5)||
- player[i].lastpathfindpoint==player[i].finalpathfindpoint){
+ if( distsqflat(&player[i].coords,&player[i].finalfinaltarget)<
+ distsqflat(&player[i].coords,&player[i].finaltarget)||
+ distsqflat(&player[i].coords,&player[i].finaltarget)<.6*sq(player[i].scale*5)||
+ player[i].lastpathfindpoint==player[i].finalpathfindpoint) {
player[i].aitype=passivetype;
}
player[i].attackkeydown=0;
player[i].throwkeydown=0;
- if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8)
- player[i].targetrotation+=90*(player[i].whichdirection*2-1);
+ if(player[i].avoidcollided>.8 && !player[i].jumpkeydown && player[i].collided<.8)
+ player[i].targetyaw+=90*(player[i].whichdirection*2-1);
- if(player[i].collided<1||player[i].targetanimation!=jumpupanim)
+ if(player[i].collided<1||player[i].animTarget!=jumpupanim)
player[i].jumpkeydown=0;
if((player[i].collided>.8&&player[i].jumppower>=5))
player[i].jumpkeydown=1;
if((tutoriallevel!=1||cananger)&&
hostile&&
!player[0].dead&&
- findDistancefast(&player[i].coords,&player[0].coords)<400&&
+ distsq(&player[i].coords,&player[0].coords)<400&&
player[i].occluded<25){
- if(findDistancefast(&player[i].coords,&player[0].coords)<12&&
- animation[player[0].targetanimation].height!=lowheight&&
+ if(distsq(&player[i].coords,&player[0].coords)<12&&
+ animation[player[0].animTarget].height!=lowheight&&
!editorenabled&&
(player[0].coords.y<player[i].coords.y+5||player[0].onterrain))
player[i].aitype=attacktypecutoff;
- if(findDistancefast(&player[i].coords,&player[0].coords)<30&&
- animation[player[0].targetanimation].height==highheight&&
+ if(distsq(&player[i].coords,&player[0].coords)<30&&
+ animation[player[0].animTarget].height==highheight&&
!editorenabled)
player[i].aitype=attacktypecutoff;
player[i].losupdatedelay=.2;
for(int j=0;j<numplayers;j++)
if(j==0||player[j].skeleton.free||player[j].aitype!=passivetype)
- if(abs(Random()%2)||animation[player[j].targetanimation].height!=lowheight||j!=0)
- if(findDistancefast(&player[i].coords,&player[j].coords)<400)
+ if(abs(Random()%2)||animation[player[j].animTarget].height!=lowheight||j!=0)
+ if(distsq(&player[i].coords,&player[j].coords)<400)
if(normaldotproduct(player[i].facing,player[j].coords-player[i].coords)>0)
if(player[j].coords.y<player[i].coords.y+5||player[j].onterrain)
if(!player[j].isWallJump()&&-1==checkcollide(
- DoRotation(playerJoint(i,head).position,0,player[i].rotation,0)
+ DoRotation(player[i].getJointFor(head).position,0,player[i].yaw,0)
*player[i].scale+player[i].coords,
- DoRotation(playerJoint(j,head).position,0,player[j].rotation,0)
+ DoRotation(player[j].getJointFor(head).position,0,player[j].yaw,0)
*player[j].scale+player[j].coords)||
- (player[j].targetanimation==hanganim&&
+ (player[j].animTarget==hanganim&&
normaldotproduct(player[j].facing,player[i].coords-player[j].coords)<0)){
player[i].aitype=searchtype;
player[i].lastchecktime=12;
if(player[i].aiupdatedelay<0){
if(player[i].numwaypoints>1&&player[i].howactive==typeactive&&player[i].pausetime<=0){
- player[i].targetrotation=roughDirectionTo(player[i].coords,player[i].waypoints[player[i].waypoint]);
- player[i].lookrotation=player[i].targetrotation;
+ player[i].targetyaw=roughDirectionTo(player[i].coords,player[i].waypoints[player[i].waypoint]);
+ player[i].lookyaw=player[i].targetyaw;
player[i].aiupdatedelay=.05;
- if(findDistancefastflat(&player[i].coords,&player[i].waypoints[player[i].waypoint])<1){
+ if(distsqflat(&player[i].coords,&player[i].waypoints[player[i].waypoint])<1){
if(player[i].waypointtype[player[i].waypoint]==wppause)
player[i].pausetime=4;
player[i].waypoint++;
if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){
if(!player[i].avoidsomething)
- player[i].targetrotation+=90*(player[i].whichdirection*2-1);
+ player[i].targetyaw+=90*(player[i].whichdirection*2-1);
else{
XYZ leftpos,rightpos;
float leftdist,rightdist;
leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0);
rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0);
- leftdist = findDistancefast(&leftpos, &player[i].avoidwhere);
- rightdist = findDistancefast(&rightpos, &player[i].avoidwhere);
+ leftdist = distsq(&leftpos, &player[i].avoidwhere);
+ rightdist = distsq(&rightpos, &player[i].avoidwhere);
if(leftdist<rightdist)
- player[i].targetrotation+=90;
+ player[i].targetyaw+=90;
else
- player[i].targetrotation-=90;
+ player[i].targetyaw-=90;
}
}
}
- if(player[i].collided<1||player[i].targetanimation!=jumpupanim)
+ if(player[i].collided<1||player[i].animTarget!=jumpupanim)
player[i].jumpkeydown=0;
if((player[i].collided>.8&&player[i].jumppower>=5))
player[i].jumpkeydown=1;
if(numenvsounds>0&&(tutoriallevel!=1||cananger)&&hostile)
for(int j=0;j<numenvsounds;j++){
float vol=player[i].howactive==typesleeping?envsoundvol[j]-14:envsoundvol[j];
- if(vol>0&&findDistancefast(&player[i].coords,&envsound[j])<
+ if(vol>0&&distsq(&player[i].coords,&envsound[j])<
2*(vol+vol*(player[i].creature==rabbittype)*3))
player[i].aitype=attacktypecutoff;
}
if(player[i].aitype!=passivetype){
if(player[i].howactive==typesleeping)
- setAnimation(i,getupfromfrontanim);
+ player[i].setAnimation(getupfromfrontanim);
player[i].howactive=typeactive;
}
}
if(player[i].howactive<typesleeping&&
((tutoriallevel!=1||cananger)&&hostile)&&
!player[0].dead&&
- findDistancefast(&player[i].coords,&player[0].coords)<400&&
+ distsq(&player[i].coords,&player[0].coords)<400&&
player[i].occluded<25){
- if(findDistancefast(&player[i].coords,&player[0].coords)<12&&
- animation[player[0].targetanimation].height!=lowheight&&!editorenabled)
+ if(distsq(&player[i].coords,&player[0].coords)<12&&
+ animation[player[0].animTarget].height!=lowheight&&!editorenabled)
player[i].aitype=attacktypecutoff;
- if(findDistancefast(&player[i].coords,&player[0].coords)<30&&
- animation[player[0].targetanimation].height==highheight&&!editorenabled)
+ if(distsq(&player[i].coords,&player[0].coords)<30&&
+ animation[player[0].animTarget].height==highheight&&!editorenabled)
player[i].aitype=attacktypecutoff;
//wolf smell
windsmell=windvector;
Normalise(&windsmell);
windsmell=windsmell*2+player[j].coords;
- if(findDistancefast(&player[i].coords,&windsmell)<smelldistance&&!editorenabled)
+ if(distsq(&player[i].coords,&windsmell)<smelldistance&&!editorenabled)
player[i].aitype=attacktypecutoff;
}
}
player[i].losupdatedelay=.2;
for(int j=0;j<numplayers;j++){
if(j==0||player[j].skeleton.free||player[j].aitype!=passivetype){
- if(abs(Random()%2)||animation[player[j].targetanimation].height!=lowheight||j!=0)
- if(findDistancefast(&player[i].coords,&player[j].coords)<400)
+ if(abs(Random()%2)||animation[player[j].animTarget].height!=lowheight||j!=0)
+ if(distsq(&player[i].coords,&player[j].coords)<400)
if(normaldotproduct(player[i].facing,player[j].coords-player[i].coords)>0)
if((-1==checkcollide(
- DoRotation(playerJoint(i,head).position,0,player[i].rotation,0)*
+ DoRotation(player[i].getJointFor(head).position,0,player[i].yaw,0)*
player[i].scale+player[i].coords,
- DoRotation(playerJoint(j,head).position,0,player[j].rotation,0)*
+ DoRotation(player[j].getJointFor(head).position,0,player[j].yaw,0)*
player[j].scale+player[j].coords)&&
!player[j].isWallJump())||
- (player[j].targetanimation==hanganim&&
+ (player[j].animTarget==hanganim&&
normaldotproduct(player[j].facing,player[i].coords-player[j].coords)<0)){
player[i].lastseentime-=.2;
- if(j==0&&animation[player[j].targetanimation].height==lowheight)
+ if(j==0&&animation[player[j].animTarget].height==lowheight)
player[i].lastseentime-=.4;
else
player[i].lastseentime-=.6;
j=checkcollide(test2,test);
if(j==-1){
player[i].velocity=0;
- setAnimation(i,player[i].getStop());
- player[i].targetrotation+=180;
+ player[i].setAnimation(player[i].getStop());
+ player[i].targetyaw+=180;
player[i].stunned=.5;
//player[i].aitype=passivetype;
player[i].aitype=pathfindtype;
}
//check out last seen location
if(player[i].aiupdatedelay<0){
- player[i].targetrotation=roughDirectionTo(player[i].coords,player[i].lastseen);
- player[i].lookrotation=player[i].targetrotation;
+ player[i].targetyaw=roughDirectionTo(player[i].coords,player[i].lastseen);
+ player[i].lookyaw=player[i].targetyaw;
player[i].aiupdatedelay=.05;
player[i].forwardkeydown=1;
- if(findDistancefastflat(&player[i].coords,&player[i].lastseen)<1*sq(player[i].scale*5)||player[i].lastchecktime<0){
+ if(distsqflat(&player[i].coords,&player[i].lastseen)<1*sq(player[i].scale*5)||player[i].lastchecktime<0){
player[i].forwardkeydown=0;
player[i].aiupdatedelay=1;
player[i].lastseen.x+=(float(Random()%100)-50)/25;
player[i].throwkeydown=0;
if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){
- if(!player[i].avoidsomething)player[i].targetrotation+=90*(player[i].whichdirection*2-1);
+ if(!player[i].avoidsomething)player[i].targetyaw+=90*(player[i].whichdirection*2-1);
else{
XYZ leftpos,rightpos;
float leftdist,rightdist;
leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0);
rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0);
- leftdist = findDistancefast(&leftpos, &player[i].avoidwhere);
- rightdist = findDistancefast(&rightpos, &player[i].avoidwhere);
- if(leftdist<rightdist)player[i].targetrotation+=90;
- else player[i].targetrotation-=90;
+ leftdist = distsq(&leftpos, &player[i].avoidwhere);
+ rightdist = distsq(&rightpos, &player[i].avoidwhere);
+ if(leftdist<rightdist)player[i].targetyaw+=90;
+ else player[i].targetyaw-=90;
}
}
}
- if(player[i].collided<1||player[i].targetanimation!=jumpupanim)
+ if(player[i].collided<1||player[i].animTarget!=jumpupanim)
player[i].jumpkeydown=0;
if((player[i].collided>.8&&player[i].jumppower>=5))
player[i].jumpkeydown=1;
if(numenvsounds>0&&((tutoriallevel!=1||cananger)&&hostile))
for(int k=0;k<numenvsounds;k++){
- if(findDistancefast(&player[i].coords,&envsound[k])<2*(envsoundvol[k]+envsoundvol[k]*(player[i].creature==rabbittype)*3)){
+ if(distsq(&player[i].coords,&envsound[k])<2*(envsoundvol[k]+envsoundvol[k]*(player[i].creature==rabbittype)*3)){
player[i].aitype=attacktypecutoff;
}
}
player[i].occluded<2&&
((tutoriallevel!=1||cananger)&&hostile)){
player[i].losupdatedelay=.2;
- if(findDistancefast(&player[i].coords,&player[0].coords)<4&&animation[player[i].targetanimation].height!=lowheight){
+ if(distsq(&player[i].coords,&player[0].coords)<4&&animation[player[i].animTarget].height!=lowheight){
player[i].aitype=attacktypecutoff;
player[i].lastseentime=1;
}
- if(abs(Random()%2)||animation[player[i].targetanimation].height!=lowheight)
+ if(abs(Random()%2)||animation[player[i].animTarget].height!=lowheight)
//TODO: factor out canSeePlayer()
- if(findDistancefast(&player[i].coords,&player[0].coords)<400)
+ if(distsq(&player[i].coords,&player[0].coords)<400)
if(normaldotproduct(player[i].facing,player[0].coords-player[i].coords)>0)
if((checkcollide(
- DoRotation(playerJoint(i,head).position,0,player[i].rotation,0)*
+ DoRotation(player[i].getJointFor(head).position,0,player[i].yaw,0)*
player[i].scale+player[i].coords,
- DoRotation(playerJoint(0,head).position,0,player[0].rotation,0)*
+ DoRotation(player[0].getJointFor(head).position,0,player[0].yaw,0)*
player[0].scale+player[0].coords)==-1)||
- (player[0].targetanimation==hanganim&&normaldotproduct(
+ (player[0].animTarget==hanganim&&normaldotproduct(
player[0].facing,player[i].coords-player[0].coords)<0)){
/* //TODO: changed j to 0 on a whim, make sure this is correct
- (player[j].targetanimation==hanganim&&normaldotproduct(
+ (player[j].animTarget==hanganim&&normaldotproduct(
player[j].facing,player[i].coords-player[j].coords)<0)
*/
player[i].aitype=attacktypecutoff;
player[i].runninghowlong=0;
//get help from buddies
- if(player[i].aitype==gethelptype){
+ if(player[i].aitype==gethelptype) {
player[i].runninghowlong+=multiplier;
player[i].aiupdatedelay-=multiplier;
- if(player[i].aiupdatedelay<0||player[i].ally==0){
+ if(player[i].aiupdatedelay<0||player[i].ally==0) {
player[i].aiupdatedelay=.2;
//find closest ally
//TODO: factor out closest search somehow
- if(!player[i].ally){
+ if(!player[i].ally) {
int closest=-1;
float closestdist=-1;
- for(int k=0;k<numplayers;k++){
+ for(int k=0;k<numplayers;k++) {
if(k!=i&&k!=0&&!player[k].dead&&
player[k].howactive<typedead1&&
!player[k].skeleton.free&&
- player[k].aitype==passivetype){
- float distance=findDistancefast(&player[i].coords,&player[k].coords);
- if(closestdist==-1||distance<closestdist){
+ player[k].aitype==passivetype) {
+ float distance=distsq(&player[i].coords,&player[k].coords);
+ if(closestdist==-1||distance<closestdist) {
closestdist=distance;
closest=k;
}
XYZ facing=player[i].coords;
XYZ flatfacing=player[player[i].ally].coords;
- facing.y+=playerJoint(i,head).position.y*player[i].scale;
- flatfacing.y+=playerJoint(player[i].ally,head).position.y*player[player[i].ally].scale;
+ facing.y+=player[i].getJointFor(head).position.y*player[i].scale;
+ flatfacing.y+=player[player[i].ally].getJointFor(head).position.y*player[player[i].ally].scale;
if(-1!=checkcollide(facing,flatfacing))
player[i].lastseentime-=.1;
//seek out ally
if(player[i].ally>0){
- player[i].targetrotation=roughDirectionTo(player[i].coords,player[player[i].ally].coords);
- player[i].lookrotation=player[i].targetrotation;
+ player[i].targetyaw=roughDirectionTo(player[i].coords,player[player[i].ally].coords);
+ player[i].lookyaw=player[i].targetyaw;
player[i].aiupdatedelay=.05;
player[i].forwardkeydown=1;
- if(findDistancefastflat(&player[i].coords,&player[player[i].ally].coords)<3){
+ if(distsqflat(&player[i].coords,&player[player[i].ally].coords)<3){
player[i].aitype=searchtype;
player[i].lastseentime=12;
player[player[i].ally].aitype=searchtype;
if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){
if(!player[i].avoidsomething)
- player[i].targetrotation+=90*(player[i].whichdirection*2-1);
+ player[i].targetyaw+=90*(player[i].whichdirection*2-1);
else{
XYZ leftpos,rightpos;
float leftdist,rightdist;
leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0);
rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0);
- leftdist = findDistancefast(&leftpos, &player[i].avoidwhere);
- rightdist = findDistancefast(&rightpos, &player[i].avoidwhere);
+ leftdist = distsq(&leftpos, &player[i].avoidwhere);
+ rightdist = distsq(&rightpos, &player[i].avoidwhere);
if(leftdist<rightdist)
- player[i].targetrotation+=90;
+ player[i].targetyaw+=90;
else
- player[i].targetrotation-=90;
+ player[i].targetyaw-=90;
}
}
}
player[i].crouchkeydown=0;
player[i].attackkeydown=0;
}
- if(player[i].collided<1||player[i].targetanimation!=jumpupanim)
+ if(player[i].collided<1||player[i].animTarget!=jumpupanim)
player[i].jumpkeydown=0;
if(player[i].collided>.8&&player[i].jumppower>=5)
player[i].jumpkeydown=1;
float closestdist=-1;
for(int k=0;k<weapons.size();k++)
if(weapons[k].owner==-1){
- float distance=findDistancefast(&player[i].coords,&weapons[k].position);
+ float distance=distsq(&player[i].coords,&weapons[k].position);
if(closestdist==-1||distance<closestdist){
closestdist=distance;
closest=k;
if(!player[0].dead)
if(player[i].ally>=0){
if(weapons[player[i].ally].owner!=-1||
- findDistancefast(&player[i].coords,&weapons[player[i].ally].position)>16){
+ distsq(&player[i].coords,&weapons[player[i].ally].position)>16){
player[i].aitype=attacktypecutoff;
player[i].lastseentime=1;
}
//TODO: factor these out as moveToward()
- player[i].targetrotation=roughDirectionTo(player[i].coords,weapons[player[i].ally].position);
- player[i].lookrotation=player[i].targetrotation;
+ player[i].targetyaw=roughDirectionTo(player[i].coords,weapons[player[i].ally].position);
+ player[i].lookyaw=player[i].targetyaw;
player[i].aiupdatedelay=.05;
player[i].forwardkeydown=1;
if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){
if(!player[i].avoidsomething)
- player[i].targetrotation+=90*(player[i].whichdirection*2-1);
+ player[i].targetyaw+=90*(player[i].whichdirection*2-1);
else{
XYZ leftpos,rightpos;
float leftdist,rightdist;
leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0);
rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0);
- leftdist = findDistancefast(&leftpos, &player[i].avoidwhere);
- rightdist = findDistancefast(&rightpos, &player[i].avoidwhere);
+ leftdist = distsq(&leftpos, &player[i].avoidwhere);
+ rightdist = distsq(&rightpos, &player[i].avoidwhere);
if(leftdist<rightdist)
- player[i].targetrotation+=90;
+ player[i].targetyaw+=90;
else
- player[i].targetrotation-=90;
+ player[i].targetyaw-=90;
}
}
}
player[i].attackkeydown=0;
player[i].throwkeydown=1;
player[i].crouchkeydown=0;
- if(player[i].targetanimation!=crouchremoveknifeanim&&
- player[i].targetanimation!=removeknifeanim)
+ if(player[i].animTarget!=crouchremoveknifeanim&&
+ player[i].animTarget!=removeknifeanim)
player[i].throwtogglekeydown=0;
player[i].drawkeydown=0;
}
- if(player[i].collided<1||player[i].targetanimation!=jumpupanim)
+ if(player[i].collided<1||player[i].animTarget!=jumpupanim)
player[i].jumpkeydown=0;
if((player[i].collided>.8&&player[i].jumppower>=5))
player[i].jumpkeydown=1;
player[i].aiupdatedelay-=multiplier;
//dodge or reverse rabbit kicks, knife throws, flips
if(player[i].damage<player[i].damagetolerance*2/3)
- if((player[0].targetanimation==rabbitkickanim||
- player[0].targetanimation==knifethrowanim||
+ if((player[0].animTarget==rabbitkickanim||
+ player[0].animTarget==knifethrowanim||
(player[0].isFlip()&&
normaldotproduct(player[0].facing,player[0].coords-player[i].coords)<0))&&
!player[0].skeleton.free&&
player[i].attackkeydown=0;
if(player[i].isIdle())
player[i].crouchkeydown=1;
- if(player[0].targetanimation!=rabbitkickanim&&player[0].weaponactive!=-1){
+ if(player[0].animTarget!=rabbitkickanim&&player[0].weaponactive!=-1){
if(weapons[player[0].weaponids[0]].getType()==knife){
if(player[i].isIdle()||player[i].isCrouch()||player[i].isRun()||player[i].isFlip()){
if(abs(Random()%2==0))
- setAnimation(i,backhandspringanim);
+ player[i].setAnimation(backhandspringanim);
else
- setAnimation(i,rollanim);
- player[i].targetrotation+=90*(abs(Random()%2)*2-1);
+ player[i].setAnimation(rollanim);
+ player[i].targetyaw+=90*(abs(Random()%2)*2-1);
player[i].wentforweapon=0;
}
- if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim)
- setAnimation(i,flipanim);
+ if(player[i].animTarget==jumpupanim||player[i].animTarget==jumpdownanim)
+ player[i].setAnimation(flipanim);
}
}
player[i].forwardkeydown=0;
//get confused by flips
if(player[0].isFlip()&&
!player[0].skeleton.free&&
- player[0].targetanimation!=walljumprightkickanim&&
- player[0].targetanimation!=walljumpleftkickanim){
- if(findDistancefast(&player[0].coords,&player[i].coords)<25)
+ player[0].animTarget!=walljumprightkickanim&&
+ player[0].animTarget!=walljumpleftkickanim){
+ if(distsq(&player[0].coords,&player[i].coords)<25)
if((1-player[i].damage/player[i].damagetolerance)>.5)
player[i].stunned=1;
}
weapons[i].velocity.x==0&&
weapons[i].velocity.z==0&&
weapons[i].velocity.y==0){
- if(findDistancefast(&player[i].coords,&weapons[k].position)<16){
+ if(distsq(&player[i].coords,&weapons[k].position)<16) {
player[i].wentforweapon++;
player[i].lastchecktime=6;
player[i].aitype=getweapontype;
}
//dodge/reverse walljump kicks
if(player[i].damage<player[i].damagetolerance/2)
- if(animation[player[i].targetanimation].height!=highheight)
+ if(animation[player[i].animTarget].height!=highheight)
if(player[i].damage<player[i].damagetolerance*.5&&
- ((player[0].targetanimation==walljumprightkickanim||
- player[0].targetanimation==walljumpleftkickanim)&&
+ ((player[0].animTarget==walljumprightkickanim||
+ player[0].animTarget==walljumpleftkickanim)&&
((player[i].aiupdatedelay<.15&&
difficulty==2)||
(player[i].aiupdatedelay<.08&&
j=checkcollide(test2,test,player[i].laststanding);
if(j==-1)
j=checkcollide(test2,test);
- if(j==-1){
+ if(j==-1) {
player[i].velocity=0;
- setAnimation(i,player[i].getStop());
- player[i].targetrotation+=180;
+ player[i].setAnimation(player[i].getStop());
+ player[i].targetyaw+=180;
player[i].stunned=.5;
player[i].aitype=pathfindtype;
player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint];
player[i].lastpathfindpoint2=-1;
player[i].lastpathfindpoint3=-1;
player[i].lastpathfindpoint4=-1;
- }else
+ } else
player[i].laststanding=j;
}
//lose sight of player in the air (?)
if(player[0].coords.y>player[i].coords.y+5&&
- animation[player[0].targetanimation].height!=highheight&&
+ animation[player[0].animTarget].height!=highheight&&
!player[0].onterrain){
player[i].aitype=pathfindtype;
player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint];
}
//it's time to think (?)
if(player[i].aiupdatedelay<0&&
- !animation[player[i].targetanimation].attack&&
- player[i].targetanimation!=staggerbackhighanim&&
- player[i].targetanimation!=staggerbackhardanim&&
- player[i].targetanimation!=backhandspringanim&&
- player[i].targetanimation!=dodgebackanim){
+ !animation[player[i].animTarget].attack&&
+ player[i].animTarget!=staggerbackhighanim&&
+ player[i].animTarget!=staggerbackhardanim&&
+ player[i].animTarget!=backhandspringanim&&
+ player[i].animTarget!=dodgebackanim){
//draw weapon
if(player[i].weaponactive==-1&&player[i].num_weapons>0)
player[i].drawkeydown=Random()%2;
//chase player
XYZ rotatetarget=player[0].coords+player[0].velocity;
XYZ targetpoint=player[0].coords;
- if(findDistancefast(&player[0].coords,&player[i].coords)<
- findDistancefast(&rotatetarget,&player[i].coords))
+ if(distsq(&player[0].coords,&player[i].coords)<
+ distsq(&rotatetarget,&player[i].coords))
targetpoint+=player[0].velocity*
findDistance(&player[0].coords,&player[i].coords)/findLength(&player[i].velocity);
- player[i].targetrotation=roughDirectionTo(player[i].coords,targetpoint);
- player[i].lookrotation=player[i].targetrotation;
+ player[i].targetyaw=roughDirectionTo(player[i].coords,targetpoint);
+ player[i].lookyaw=player[i].targetyaw;
player[i].aiupdatedelay=.2+fabs((float)(Random()%100)/1000);
- if(findDistancefast(&player[i].coords,&player[0].coords)>5&&(player[0].weaponactive==-1||player[i].weaponactive!=-1))
+ if(distsq(&player[i].coords,&player[0].coords)>5&&(player[0].weaponactive==-1||player[i].weaponactive!=-1))
player[i].forwardkeydown=1;
- else if((findDistancefast(&player[i].coords,&player[0].coords)>16||
- findDistancefast(&player[i].coords,&player[0].coords)<9)&&
+ else if((distsq(&player[i].coords,&player[0].coords)>16||
+ distsq(&player[i].coords,&player[0].coords)<9)&&
player[0].weaponactive!=-1)
player[i].forwardkeydown=1;
else if(Random()%6==0||(player[i].creature==wolftype&&Random()%3==0))
player[i].throwkeydown=0;
if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8)
- player[i].targetrotation+=90*(player[i].whichdirection*2-1);
+ player[i].targetyaw+=90*(player[i].whichdirection*2-1);
//attack!!!
if(Random()%2==0||player[i].weaponactive!=-1||player[i].creature==wolftype)
player[i].attackkeydown=1;
else
player[i].attackkeydown=0;
- if(player[i].isRun()&&Random()%6&&findDistancefast(&player[i].coords,&player[0].coords)>7)
+ if(player[i].isRun()&&Random()%6&&distsq(&player[i].coords,&player[0].coords)>7)
player[i].attackkeydown=0;
//TODO: wat
Random()%2==0&&difficulty==2||
Random()%4==0&&difficulty==1||
Random()%8==0&&difficulty==0||
- player[j].lastattack2==player[j].targetanimation&&
- player[j].lastattack3==player[j].targetanimation&&
+ player[j].lastattack2==player[j].animTarget&&
+ player[j].lastattack3==player[j].animTarget&&
(Random()%2==0||difficulty==2)||
(player[i].isIdle()||player[i].isRun())&&
player[j].weaponactive!=-1||
- player[j].targetanimation==swordslashanim&&
+ player[j].animTarget==swordslashanim&&
player[i].weaponactive!=-1||
- player[j].targetanimation==staffhitanim||
- player[j].targetanimation==staffspinhitanim))
- if(findDistancefast(&player[j].coords,&player[j].victim->coords)<4&&
+ player[j].animTarget==staffhitanim||
+ player[j].animTarget==staffspinhitanim))
+ if(distsq(&player[j].coords,&player[j].victim->coords)<4&&
player[j].victim==&player[i]&&
- (player[j].targetanimation==sweepanim||
- player[j].targetanimation==spinkickanim||
- player[j].targetanimation==staffhitanim||
- player[j].targetanimation==staffspinhitanim||
- player[j].targetanimation==winduppunchanim||
- player[j].targetanimation==upunchanim||
- player[j].targetanimation==wolfslapanim||
- player[j].targetanimation==knifeslashstartanim||
- player[j].targetanimation==swordslashanim&&
- (findDistancefast(&player[j].coords,&player[i].coords)<2||
+ (player[j].animTarget==sweepanim||
+ player[j].animTarget==spinkickanim||
+ player[j].animTarget==staffhitanim||
+ player[j].animTarget==staffspinhitanim||
+ player[j].animTarget==winduppunchanim||
+ player[j].animTarget==upunchanim||
+ player[j].animTarget==wolfslapanim||
+ player[j].animTarget==knifeslashstartanim||
+ player[j].animTarget==swordslashanim&&
+ (distsq(&player[j].coords,&player[i].coords)<2||
player[i].weaponactive!=-1))){
if(target>=0)
target=-1;
if(player[i].collided<1)
player[i].jumpkeydown=0;
if(player[i].collided>.8&&player[i].jumppower>=5||
- findDistancefast(&player[i].coords,&player[0].coords)>400&&
+ distsq(&player[i].coords,&player[0].coords)>400&&
player[i].onterrain&&
player[i].creature==rabbittype)
player[i].jumpkeydown=1;
//TODO: why are we controlling the human?
if(normaldotproduct(player[i].facing,player[0].coords-player[i].coords)>0)
player[0].jumpkeydown=0;
- if(player[0].targetanimation==jumpdownanim&&
- findDistancefast(&player[0].coords,&player[i].coords)<40)
+ if(player[0].animTarget==jumpdownanim&&
+ distsq(&player[0].coords,&player[i].coords)<40)
player[i].crouchkeydown=1;
if(player[i].jumpkeydown)
player[i].attackkeydown=0;
XYZ facing=player[i].coords;
XYZ flatfacing=player[0].coords;
- facing.y+=playerJoint(i,head).position.y*player[i].scale;
- flatfacing.y+=playerJoint(0,head).position.y*player[0].scale;
+ facing.y+=player[i].getJointFor(head).position.y*player[i].scale;
+ flatfacing.y+=player[0].getJointFor(head).position.y*player[0].scale;
if(player[i].occluded>=2)
if(-1!=checkcollide(facing,flatfacing)){
if(!player[i].pause)
player[i].lastseentime=1;
}
}
- if(animation[player[0].targetanimation].height==highheight&&
+ if(animation[player[0].animTarget].height==highheight&&
(player[i].aitype==attacktypecutoff||
player[i].aitype==searchtype))
if(player[0].coords.y>terrain.getHeight(player[0].coords.x,player[0].coords.z)+10){
player[i].pause&&player[i].damage>player[i].superpermanentdamage){
if(player[i].pause)
player[i].lastseentime=1;
- player[i].targetrotation=player[i].rotation;
+ player[i].targetyaw=player[i].yaw;
player[i].forwardkeydown=0;
player[i].leftkeydown=0;
player[i].backkeydown=0;
facing=0;
facing.z=-1;
- XYZ flatfacing=DoRotation(facing,0,player[i].rotation+180,0);
+ XYZ flatfacing=DoRotation(facing,0,player[i].yaw+180,0);
facing=flatfacing;
if(player[i].aitype==attacktypecutoff){
- player[i].targetheadrotation=180-roughDirectionTo(player[i].coords,player[0].coords);
- player[i].targetheadrotation2=pitchTo(player[i].coords,player[0].coords);
+ player[i].targetheadyaw=180-roughDirectionTo(player[i].coords,player[0].coords);
+ player[i].targetheadpitch=pitchTo(player[i].coords,player[0].coords);
}else if(player[i].howactive>=typesleeping){
- player[i].targetheadrotation=player[i].targetrotation;
- player[i].targetheadrotation2=0;
+ player[i].targetheadyaw=player[i].targetyaw;
+ player[i].targetheadpitch=0;
}else{
if(player[i].interestdelay<=0){
player[i].interestdelay=.7+(float)(abs(Random()%100))/100;
player[i].headtarget.y+=(float)(abs(Random()%200)-100)/300;
player[i].headtarget+=player[i].facing*1.5;
}
- player[i].targetheadrotation=180-roughDirectionTo(player[i].coords,player[i].headtarget);
- player[i].targetheadrotation2=pitchTo(player[i].coords,player[i].headtarget);
+ player[i].targetheadyaw=180-roughDirectionTo(player[i].coords,player[i].headtarget);
+ player[i].targetheadpitch=pitchTo(player[i].coords,player[i].headtarget);
}
}
}
+
+
+void updateSettingsMenu(){
+ char sbuf[256];
+ if((float)newscreenwidth>(float)newscreenheight*1.61||(float)newscreenwidth<(float)newscreenheight*1.59)
+ sprintf (sbuf, "Resolution: %d*%d",(int)newscreenwidth,(int)newscreenheight);
+ else
+ sprintf (sbuf, "Resolution: %d*%d (widescreen)",(int)newscreenwidth,(int)newscreenheight);
+ Menu::setText(0,sbuf);
+ if(newdetail==0) Menu::setText(1,"Detail: Low");
+ if(newdetail==1) Menu::setText(1,"Detail: Medium");
+ if(newdetail==2) Menu::setText(1,"Detail: High");
+ if(bloodtoggle==0) Menu::setText(2,"Blood: Off");
+ if(bloodtoggle==1) Menu::setText(2,"Blood: On, low detail");
+ if(bloodtoggle==2) Menu::setText(2,"Blood: On, high detail (slower)");
+ if(difficulty==0) Menu::setText(3,"Difficulty: Easier");
+ if(difficulty==1) Menu::setText(3,"Difficulty: Difficult");
+ if(difficulty==2) Menu::setText(3,"Difficulty: Insane");
+ Menu::setText(4,ismotionblur?"Blur Effects: Enabled (less compatible)":"Blur Effects: Disabled (more compatible)");
+ Menu::setText(5,decals?"Decals: Enabled (slower)":"Decals: Disabled");
+ Menu::setText(6,musictoggle?"Music: Enabled":"Music: Disabled");
+ Menu::setText(9,invertmouse?"Invert mouse: Yes":"Invert mouse: No");
+ sprintf (sbuf, "Mouse Speed: %d", (int)(usermousesensitivity*5));
+ Menu::setText(10,sbuf);
+ sprintf (sbuf, "Volume: %d%%", (int)(volume*100));
+ Menu::setText(11,sbuf);
+ Menu::setText(13,showdamagebar?"Damage Bar: On":"Damage Bar: Off");
+ if(newdetail==detail&&newscreenheight==(int)screenheight&&newscreenwidth==(int)screenwidth)
+ sprintf (sbuf, "Back");
+ else
+ sprintf (sbuf, "Back (some changes take effect next time Lugaru is opened)");
+ Menu::setText(8,sbuf);
+}
+
+void updateStereoConfigMenu(){
+ char sbuf[256];
+ sprintf(sbuf, "Stereo mode: %s", StereoModeName(newstereomode));
+ Menu::setText(0,sbuf);
+ sprintf(sbuf, "Stereo separation: %.3f", stereoseparation);
+ Menu::setText(1,sbuf);
+ sprintf(sbuf, "Reverse stereo: %s", stereoreverse ? "Yes" : "No");
+ Menu::setText(2,sbuf);
+}
+
+void updateControlsMenu(){
+ Menu::setText(0,(string)"Forwards: "+(keyselect==0?"_":Input::keyToChar(forwardkey)));
+ Menu::setText(1,(string)"Back: " +(keyselect==1?"_":Input::keyToChar(backkey)));
+ Menu::setText(2,(string)"Left: " +(keyselect==2?"_":Input::keyToChar(leftkey)));
+ Menu::setText(3,(string)"Right: " +(keyselect==3?"_":Input::keyToChar(rightkey)));
+ Menu::setText(4,(string)"Crouch: " +(keyselect==4?"_":Input::keyToChar(crouchkey)));
+ Menu::setText(5,(string)"Jump: " +(keyselect==5?"_":Input::keyToChar(jumpkey)));
+ Menu::setText(6,(string)"Draw: " +(keyselect==6?"_":Input::keyToChar(drawkey)));
+ Menu::setText(7,(string)"Throw: " +(keyselect==7?"_":Input::keyToChar(throwkey)));
+ Menu::setText(8,(string)"Attack: " +(keyselect==8?"_":Input::keyToChar(attackkey)));
+ if(debugmode)
+ Menu::setText(9,(string)"Console: "+(keyselect==9?"_":Input::keyToChar(consolekey)));
+}
+
/*
Values of mainmenu :
1 Main menu
11 Same that 9 ??? => unused
18 stereo configuration
*/
-
-void Game::MenuTick(){
+
+void Game::LoadMenu(){
+ Menu::clearMenu();
+ switch(mainmenu) {
+ case 1:
+ case 2:
+ Menu::addImage(0,Mainmenuitems[0],150,480-128,256,128);
+ Menu::addButtonImage(1,Mainmenuitems[mainmenu==1?1:5],18,480-152-32,128,32);
+ Menu::addButtonImage(2,Mainmenuitems[2],18,480-228-32,112,32);
+ Menu::addButtonImage(3,Mainmenuitems[mainmenu==1?3:6],18,480-306-32,mainmenu==1?68:132,32);
+ break;
+ case 3:
+ Menu::addButton( 0,"",10+20,440);
+ Menu::addButton( 1,"",10+60,405);
+ Menu::addButton( 2,"",10+70,370);
+ Menu::addButton( 3,"",10+20-1000,335-1000);
+ Menu::addButton( 4,"",10 ,335);
+ Menu::addButton( 5,"",10+60,300);
+ Menu::addButton( 6,"",10+70,265);
+ Menu::addButton( 9,"",10 ,230);
+ Menu::addButton(10,"",20 ,195);
+ Menu::addButton(11,"",10+60,160);
+ Menu::addButton(13,"",30 ,125);
+ Menu::addButton( 7,"-Configure Controls-",10+15, 90);
+ Menu::addButton(12,"-Configure Stereo -",10+15, 55);
+ Menu::addButton(8,"Back",10,10);
+ updateSettingsMenu();
+ break;
+ case 4:
+ Menu::addButton(0,"",10 ,400);
+ Menu::addButton(1,"",10+40,360);
+ Menu::addButton(2,"",10+40,320);
+ Menu::addButton(3,"",10+30,280);
+ Menu::addButton(4,"",10+20,240);
+ Menu::addButton(5,"",10+40,200);
+ Menu::addButton(6,"",10+40,160);
+ Menu::addButton(7,"",10+30,120);
+ Menu::addButton(8,"",10+20,80);
+ if(debugmode)
+ Menu::addButton(9,"",10+10,40);
+ Menu::addButton(debugmode?10:9,"Back",10,10);
+ updateControlsMenu();
+ break;
+ case 5: {
+ LoadCampaign();
+ Menu::addLabel(-1,accountactive->getName(),5,400);
+ Menu::addButton(1,"Tutorial",5,300);
+ Menu::addButton(2,"Challenge",5,240);
+ Menu::addButton(3,"Delete User",400,10);
+ Menu::addButton(4,"Main Menu",5,10);
+ Menu::addButton(5,"Change User",5,180);
+ Menu::addButton(6,"Campaign : "+accountactive->getCurrentCampaign(),200,420);
+
+ //show campaign map
+ //with (2,-5) offset from old code
+ Menu::addImage(-1,Mainmenuitems[7],150+2,60-5,400,400);
+ //show levels
+ int numlevels = accountactive->getCampaignChoicesMade();
+ numlevels += numlevels>0 ? campaignlevels[numlevels-1].nextlevel.size() : 1;
+ for(int i=0;i<numlevels;i++){
+ XYZ midpoint=campaignlevels[i].getCenter();
+ float itemsize=campaignlevels[i].getWidth();
+ const bool active=i>=accountactive->getCampaignChoicesMade();
+ if(!active)
+ itemsize/=2;
+
+ if(i>=1){
+ XYZ start=campaignlevels[i-1].getCenter();
+ Menu::addMapLine(start.x,start.y,midpoint.x-start.x,midpoint.y-start.y,0.5,active?1:0.5,active?1:0.5,0,0);
+ }
+ Menu::addMapMarker(NB_CAMPAIGN_MENU_ITEM+i, Mapcircletexture,
+ midpoint.x-itemsize/2, midpoint.y-itemsize/2, itemsize, itemsize, active?1:0.5, 0, 0);
+
+ if(active){
+ Menu::addMapLabel(-2,campaignlevels[i].description,
+ campaignlevels[i].getStartX()+10,
+ campaignlevels[i].getStartY()-4);
+ }
+ }
+ } break;
+ case 6:
+ Menu::addLabel(-1,"Are you sure you want to delete this user?",10,400);
+ Menu::addButton(1,"Yes",10,360);
+ Menu::addButton(2,"No",10,320);
+ break;
+ case 7:
+ if(Account::getNbAccounts()<8)
+ Menu::addButton(0,"New User",10,400);
+ else
+ Menu::addLabel(0,"No More Users",10,400);
+ Menu::addLabel(-2,"",20,400);
+ Menu::addButton(Account::getNbAccounts()+1,"Back",10,10);
+ for(int i=0;i<Account::getNbAccounts();i++)
+ Menu::addButton(i+1,Account::get(i)->getName(),10,340-20*(i+1));
+ break;
+ case 8:
+ Menu::addButton(0,"Easier",10,400);
+ Menu::addButton(1,"Difficult",10,360);
+ Menu::addButton(2,"Insane",10,320);
+ break;
+ case 9:
+ for(int i=0;i<numchallengelevels;i++){
+ char temp[255];
+ string name="";
+ sprintf (temp, "Level %d",i+1);
+ for(int j=strlen(temp);j<17;j++)
+ strcat(temp," ");
+ name+=temp;
+ sprintf (temp, "%d",(int)accountactive->getHighScore(i));
+ for(int j=strlen(temp);j<(32-17);j++)
+ strcat(temp," ");
+ name+=temp;
+ sprintf (temp, "%d:",(int)(((int)accountactive->getFastTime(i)-(int)(accountactive->getFastTime(i))%60)/60));
+ if((int)(accountactive->getFastTime(i))%60<10)strcat(temp,"0");
+ name+=temp;
+ sprintf (temp, "%d",(int)(accountactive->getFastTime(i))%60);
+ name+=temp;
+
+ Menu::addButton(i,name,10,400-i*25,i>accountactive->getProgress()?0.5:1,0,0);
+ }
+
+ Menu::addButton(-1," High Score Best Time",10,440);
+ Menu::addButton(numchallengelevels,"Back",10,10);
+ break;
+ case 10: {
+ Menu::addLabel(0,"Congratulations!",220,330);
+ Menu::addLabel(1,"You have avenged your family and",140,300);
+ Menu::addLabel(2,"restored peace to the island of Lugaru.",110,270);
+ Menu::addButton(3,"Back",10,10);
+ char sbuf[256];
+ sprintf(sbuf,"Your score: %d",(int)accountactive->getCampaignScore());
+ Menu::addLabel(4,sbuf,190,200);
+ sprintf(sbuf,"Highest score: %d",(int)accountactive->getCampaignHighScore());
+ Menu::addLabel(5,sbuf,190,180);
+ } break;
+ case 18:
+ Menu::addButton(0,"",70,400);
+ Menu::addButton(1,"",10,360);
+ Menu::addButton(2,"",40,320);
+ Menu::addButton(3,"Back",10,10);
+ updateStereoConfigMenu();
+ break;
+ }
+}
+
+extern SDL_Rect **resolutions;
+
+void MenuTick(){
//menu buttons
-
+ selected=Menu::getSelected(mousecoordh*640/screenwidth,480-mousecoordv*480/screenheight);
+
// some specific case where we do something even if the left mouse button is not pressed.
if((mainmenu==5) && (endgame==2)) {
accountactive->endGame();
}
if(mainmenu==10)
endgame=2;
- if( (mainmenu==18) && Input::isKeyPressed(MOUSEBUTTON2) && (selected==1) )
+ if(mainmenu==18 && Input::isKeyPressed(MOUSEBUTTON2) && selected==1){
stereoseparation-=0.001;
-
+ updateStereoConfigMenu();
+ }
+
+ static int oldmainmenu=mainmenu;
+
+ char sbuf[256];
+
if(Input::MouseClicked() && (selected >= 0)) { // handling of the left mouse clic in menus
switch(mainmenu) {
case 1:
bool isCustomResolution,found;
switch(selected){
case 0:
- extern SDL_Rect **resolutions;
isCustomResolution = true;
found = false;
for(int i = 0; (!found) && (resolutions[i]); i++) {
break;
case 6:
musictoggle = !musictoggle;
-
if(musictoggle) {
emit_stream_np(stream_menutheme);
} else {
musicvolume[i]=0;
}
}
-
break;
case 7: // controls
flash();
break;
case 8:
flash();
-
- SaveSettings(*this);
+ SaveSettings();
mainmenu=gameon?2:1;
break;
case 9:
break;
case 10:
usermousesensitivity+=.2;
- if(usermousesensitivity>2) usermousesensitivity=.2;
+ if(usermousesensitivity>2)
+ usermousesensitivity=.2;
break;
case 11:
volume+=.1f;
- if(volume>1.0001f) volume=0;
+ if(volume>1.0001f)
+ volume=0;
OPENAL_SetSFXMasterVolume((int)(volume*255));
break;
case 12:
flash();
-
newstereomode = stereomode;
mainmenu=18;
keyselect=-1;
showdamagebar = !showdamagebar;
break;
}
+ updateSettingsMenu();
break;
case 4:
if(!waiting) {
fireSound();
- if(selected<9 && keyselect==-1)
+ if(selected<(debugmode?10:9) && keyselect==-1)
keyselect=selected;
if(keyselect!=-1)
setKeySelected();
- if(selected==9){
+ if(selected==(debugmode?10:9)){
flash();
-
mainmenu=3;
}
}
+ updateControlsMenu();
break;
case 5:
fireSound();
flash();
- if((selected-NB_CAMPAIGN_MENU_ITEM-1 >= accountactive->getCampaignChoicesMade())) {
+ if((selected-NB_CAMPAIGN_MENU_ITEM >= accountactive->getCampaignChoicesMade())) {
startbonustotal=0;
loading=2;
TickOnceAfter();
else
LoadStuff();
- whichchoice=selected-NB_CAMPAIGN_MENU_ITEM-1-accountactive->getCampaignChoicesMade();
- actuallevel=(accountactive->getCampaignChoicesMade()>0?campaignnextlevel[accountactive->getCampaignChoicesMade()-1][whichchoice]:0);
+ whichchoice=selected-NB_CAMPAIGN_MENU_ITEM-accountactive->getCampaignChoicesMade();
+ actuallevel=(accountactive->getCampaignChoicesMade()>0?campaignlevels[accountactive->getCampaignChoicesMade()-1].nextlevel[whichchoice]:0);
visibleloading=1;
stillloading=1;
- Loadlevel(campaignmapname[actuallevel]);
+ Loadlevel(campaignlevels[actuallevel].mapname.c_str());
campaign=1;
mainmenu=0;
gameon=1;
targetlevel=-1;
if(firstload) {
TickOnceAfter();
- Loadlevel(-1);
} else
LoadStuff();
+ Loadlevel(-1);
mainmenu=0;
gameon=1;
c=campaigns.begin();
accountactive->setCurrentCampaign(*c);
}
- if(Mainmenuitems[7])
- glDeleteTextures(1,&Mainmenuitems[7]); // we delete the world texture so load campaign will reload it
- Mainmenuitems[7] = 0;
- LoadCampaign();
+ LoadMenu();
break;
}
break;
accountactive=Account::get(selected-1);
} else if (selected == Account::getNbAccounts()+1) {
flash();
- mainmenu=5;
+ if(accountactive)
+ mainmenu=5;
+ else
+ mainmenu=1;
for(int j=0;j<255;j++){
displaytext[0][j]=0;
}
loading=2;
loadtime=0;
targetlevel=selected;
- if(firstload)TickOnceAfter();
- if(!firstload)LoadStuff();
- else Loadlevel(selected);
+ if(firstload)
+ TickOnceAfter();
+ else
+ LoadStuff();
+ Loadlevel(selected);
campaign=0;
mainmenu=0;
InitStereo(stereomode);
}
}
+ updateStereoConfigMenu();
break;
}
}
if(Input::isKeyDown(SDLK_q) && Input::isKeyDown(SDLK_LMETA)){
tryquit=1;
if(mainmenu==3) {
- SaveSettings(*this);
+ SaveSettings();
}
}
OPENAL_SetFrequency(channels[stream_menutheme], 22050);
- if(entername) {
+ if(entername){
inputText(displaytext[0],&displayselected,&displaychars[0]);
if(!waiting) { // the input as finished
if(displaychars[0]){ // with enter
displayselected=0;
}
entername=0;
+ LoadMenu();
}
displayblinkdelay-=multiplier;
displayblink=1-displayblink;
}
}
+
+ if(entername){
+ Menu::setText(0,displaytext[0],20,400,-1,-1);
+ Menu::setText(-2,displayblink?"_":"",20+displayselected*10,400,-1,-1);
+ }
+
+ if(oldmainmenu!=mainmenu)
+ LoadMenu();
+ oldmainmenu=mainmenu;
+
}
void Game::Tick(){
if(mainmenu&&endgame==1)
mainmenu=10;
//go to level select after completing a campaign level
- if(campaign&&winfreeze&&mainmenu==0&&campaignchoosenext[actuallevel]==1) {
+ if(campaign&&winfreeze&&mainmenu==0&&campaignlevels[actuallevel].choosenext==1) {
mainmenu=5;
gameon=0;
winfreeze=0;
emit_stream_np(stream_menutheme);
pause_sound(leveltheme);
}
- LoadCampaign();
+ LoadMenu();
}
//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)&&
(gameon||mainmenu==0||(mainmenu>=3&&mainmenu!=8&&!(mainmenu==7&&entername)))) {
selected=-1;
}
//finished with settings menu
if(mainmenu==3){
- SaveSettings(*this);
+ SaveSettings();
}
//effects
if(mainmenu>=3&&mainmenu!=8){
if(chatting)
keyboardfrozen=true;
- if(Input::isKeyPressed(SDLK_BACKQUOTE)&&debugmode){
+ if(Input::isKeyPressed(consolekey)&&debugmode) {
console=!console;
- if(console){
+ if(console) {
OPENAL_SetFrequency(OPENAL_ALL, 0.001);
} else {
freeze=0;
if(console)
freeze=1;
- if(console&&!Input::isKeyDown(SDLK_LMETA)){
+ if(console&&!Input::isKeyDown(SDLK_LMETA)) {
inputText(consoletext[0],&consoleselected,&consolechars[0]);
if(!waiting) {
- archiveselected=0;
- if(consolechars[0]>0){
- consoletext[0][consolechars[0]]=' ';
- cmd_dispatch(this, consoletext[0]);
- for(int k=14;k>=1;k--){
+ if(consolechars[0]>0) {
+ consoletext[0][consolechars[0]]='\0';
+ cmd_dispatch(consoletext[0]);
+ for(int k=14;k>=1;k--) {
for(int j=0;j<255;j++)
consoletext[k][j]=consoletext[k-1][j];
consolechars[k]=consolechars[k-1];
}
consoleblinkdelay-=multiplier;
- if(consoleblinkdelay<=0){
+ if(consoleblinkdelay<=0) {
consoleblinkdelay=.3;
consoleblink=1-consoleblink;
}
if(Input::isKeyDown(SDLK_q)&&Input::isKeyDown(SDLK_LMETA)){
tryquit=1;
if(mainmenu==3) {
- SaveSettings(*this);
+ SaveSettings();
}
}
- //TODO: what is this test?
if(!freeze&&!winfreeze&&!(mainmenu&&gameon)&&(gameon||!gamestarted)){
//dialogues
+ static float talkdelay = 0;
+
if(indialogue!=-1)
talkdelay=1;
talkdelay-=multiplier;
- if(talkdelay<=0&&indialogue==-1&&animation[player[0].targetanimation].height!=highheight)
+ if(talkdelay<=0&&indialogue==-1&&animation[player[0].animTarget].height!=highheight)
for(int i=0;i<numdialogues;i++){
int realdialoguetype;
bool special;
realdialoguetype>0&&
(dialoguegonethrough[i]==0||!special)&&
(special||Input::isKeyPressed(attackkey))){
- if(findDistancefast(&player[0].coords,&player[realdialoguetype].coords)<6||
+ if(distsq(&player[0].coords,&player[realdialoguetype].coords)<6||
player[realdialoguetype].howactive>=typedead1||
dialoguetype[i]>40&&dialoguetype[i]<50){
whichdialogue=i;
for(int j=0;j<numdialogueboxes[whichdialogue];j++){
player[participantfocus[whichdialogue][j]].coords=participantlocation[whichdialogue][participantfocus[whichdialogue][j]];
- player[participantfocus[whichdialogue][j]].rotation=participantrotation[whichdialogue][participantfocus[whichdialogue][j]];
- player[participantfocus[whichdialogue][j]].targetrotation=participantrotation[whichdialogue][participantfocus[whichdialogue][j]];
+ player[participantfocus[whichdialogue][j]].yaw=participantyaw[whichdialogue][participantfocus[whichdialogue][j]];
+ player[participantfocus[whichdialogue][j]].targetyaw=participantyaw[whichdialogue][participantfocus[whichdialogue][j]];
player[participantfocus[whichdialogue][j]].velocity=0;
- player[participantfocus[whichdialogue][j]].targetanimation=player[participantfocus[whichdialogue][j]].getIdle();
- player[participantfocus[whichdialogue][j]].targetframe=0;
+ player[participantfocus[whichdialogue][j]].animTarget=player[participantfocus[whichdialogue][j]].getIdle();
+ player[participantfocus[whichdialogue][j]].frameTarget=0;
}
directing=0;
indialogue=0;
facing=0;
facing.z=-1;
- facing=DoRotation(facing,-rotation2,0,0);
- facing=DoRotation(facing,0,0-rotation,0);
+ facing=DoRotation(facing,-pitch,0,0);
+ facing=DoRotation(facing,0,0-yaw,0);
flatfacing=0;
flatfacing.z=-1;
- flatfacing=DoRotation(flatfacing,0,-rotation,0);
+ flatfacing=DoRotation(flatfacing,0,-yaw,0);
if(Input::isKeyDown(forwardkey))
viewer+=facing*multiplier*4;
if(whichend!=-1){
participantfocus[whichdialogue][indialogue]=whichend;
participantlocation[whichdialogue][whichend]=player[whichend].coords;
- participantrotation[whichdialogue][whichend]=player[whichend].rotation;
+ participantyaw[whichdialogue][whichend]=player[whichend].yaw;
}
if(whichend==-1){
participantfocus[whichdialogue][indialogue]=-1;
cameramode=0;
}
dialoguecamera[whichdialogue][indialogue]=viewer;
- dialoguecamerarotation[whichdialogue][indialogue]=rotation;
- dialoguecamerarotation2[whichdialogue][indialogue]=rotation2;
+ dialoguecamerayaw[whichdialogue][indialogue]=yaw;
+ dialoguecamerapitch[whichdialogue][indialogue]=pitch;
indialogue++;
if(indialogue<numdialogueboxes[whichdialogue]){
if(dialogueboxsound[whichdialogue][indialogue]!=0){
pause_sound(whooshsound);
viewer=dialoguecamera[whichdialogue][indialogue];
viewer.y=max((double)viewer.y,terrain.getHeight(viewer.x,viewer.z)+.1);
- rotation=dialoguecamerarotation[whichdialogue][indialogue];
- rotation2=dialoguecamerarotation2[whichdialogue][indialogue];
+ yaw=dialoguecamerayaw[whichdialogue][indialogue];
+ pitch=dialoguecamerapitch[whichdialogue][indialogue];
if(dialoguetime>0.5)
if( Input::isKeyPressed(SDLK_1)||
Input::isKeyPressed(SDLK_2)||
hostile=1;
}
if(dialoguetype[whichdialogue]>29&&dialoguetype[whichdialogue]<40){
- windialogue=1;
+ windialogue=true;
}
if(dialoguetype[whichdialogue]>49&&dialoguetype[whichdialogue]<60){
hostile=1;
player[0].jumptogglekeydown=0;
}
if(player[0].jumpkeydown&&
- player[0].targetanimation!=jumpupanim&&
- player[0].targetanimation!=jumpdownanim&&
+ player[0].animTarget!=jumpupanim&&
+ player[0].animTarget!=jumpdownanim&&
!player[0].isFlip())
player[0].jumptogglekeydown=1;
dialoguetime+=multiplier;
- hawkrotation+=multiplier*25;
+ hawkyaw+=multiplier*25;
realhawkcoords=0;
realhawkcoords.x=25;
- realhawkcoords=DoRotation(realhawkcoords,0,hawkrotation,0)+hawkcoords;
+ realhawkcoords=DoRotation(realhawkcoords,0,hawkyaw,0)+hawkcoords;
hawkcalldelay-=multiplier/2;
if(hawkcalldelay<=0){
//?
for(int i=0;i<numplayers;i++){
- static float oldtargetrotation;
+ static float oldtargetyaw;
if(!player[i].skeleton.free){
- oldtargetrotation=player[i].targetrotation;
+ oldtargetyaw=player[i].targetyaw;
if(i==0&&indialogue==-1){
//TODO: refactor repetitive code
- if(!animation[player[0].targetanimation].attack&&
- player[0].targetanimation!=staggerbackhighanim&&
- player[0].targetanimation!=staggerbackhardanim&&
- player[0].targetanimation!=crouchremoveknifeanim&&
- player[0].targetanimation!=removeknifeanim&&
- player[0].targetanimation!=backhandspringanim&&
- player[0].targetanimation!=dodgebackanim&&
- player[0].targetanimation!=walljumprightkickanim&&
- player[0].targetanimation!=walljumpleftkickanim){
+ if(!animation[player[0].animTarget].attack&&
+ player[0].animTarget!=staggerbackhighanim&&
+ player[0].animTarget!=staggerbackhardanim&&
+ player[0].animTarget!=crouchremoveknifeanim&&
+ player[0].animTarget!=removeknifeanim&&
+ player[0].animTarget!=backhandspringanim&&
+ player[0].animTarget!=dodgebackanim&&
+ player[0].animTarget!=walljumprightkickanim&&
+ player[0].animTarget!=walljumpleftkickanim){
if(cameramode)
- player[0].targetrotation=0;
+ player[0].targetyaw=0;
else
- player[0].targetrotation=-rotation+180;
+ player[0].targetyaw=-yaw+180;
}
facing=0;
facing.z=-1;
- flatfacing=DoRotation(facing,0,player[i].rotation+180,0);
+ flatfacing=DoRotation(facing,0,player[i].yaw+180,0);
if(cameramode){
facing=flatfacing;
}else{
- facing=DoRotation(facing,-rotation2,0,0);
- facing=DoRotation(facing,0,0-rotation,0);
+ facing=DoRotation(facing,-pitch,0,0);
+ facing=DoRotation(facing,0,0-yaw,0);
}
- player[0].lookrotation=-rotation;
+ player[0].lookyaw=-yaw;
- player[i].targetheadrotation=rotation;
- player[i].targetheadrotation2=rotation2;
+ player[i].targetheadyaw=yaw;
+ player[i].targetheadpitch=pitch;
}
if(i!=0&&player[i].aitype==playercontrolled&&indialogue==-1){
- if(!animation[player[i].targetanimation].attack&&
- player[i].targetanimation!=staggerbackhighanim&&
- player[i].targetanimation!=staggerbackhardanim&&
- player[i].targetanimation!=crouchremoveknifeanim&&
- player[i].targetanimation!=removeknifeanim&&
- player[i].targetanimation!=backhandspringanim&&
- player[i].targetanimation!=dodgebackanim&&
- player[i].targetanimation!=walljumprightkickanim&&
- player[i].targetanimation!=walljumpleftkickanim){
- player[i].targetrotation=-player[i].lookrotation+180;
+ if(!animation[player[i].animTarget].attack&&
+ player[i].animTarget!=staggerbackhighanim&&
+ player[i].animTarget!=staggerbackhardanim&&
+ player[i].animTarget!=crouchremoveknifeanim&&
+ player[i].animTarget!=removeknifeanim&&
+ player[i].animTarget!=backhandspringanim&&
+ player[i].animTarget!=dodgebackanim&&
+ player[i].animTarget!=walljumprightkickanim&&
+ player[i].animTarget!=walljumpleftkickanim){
+ player[i].targetyaw=-player[i].lookyaw+180;
}
facing=0;
facing.z=-1;
- flatfacing=DoRotation(facing,0,player[i].rotation+180,0);
+ flatfacing=DoRotation(facing,0,player[i].yaw+180,0);
- facing=DoRotation(facing,-player[i].lookrotation2,0,0);
- facing=DoRotation(facing,0,0-player[i].lookrotation,0);
+ facing=DoRotation(facing,-player[i].lookpitch,0,0);
+ facing=DoRotation(facing,0,0-player[i].lookyaw,0);
- player[i].targetheadrotation=player[i].lookrotation;
- player[i].targetheadrotation2=player[i].lookrotation2;
+ player[i].targetheadyaw=player[i].lookyaw;
+ player[i].targetheadpitch=player[i].lookpitch;
}
if(indialogue!=-1){
- player[i].targetheadrotation=180-roughDirection(participantfacing[whichdialogue][indialogue][i]);
- player[i].targetheadrotation2=pitch(participantfacing[whichdialogue][indialogue][i]);
+ player[i].targetheadyaw=180-roughDirection(participantfacing[whichdialogue][indialogue][i]);
+ player[i].targetheadpitch=pitchOf(participantfacing[whichdialogue][indialogue][i]);
}
if(leveltime<.5)
//avoid flaming things
for(int j=0;j<objects.numobjects;j++)
if(objects.onfire[j])
- if(findDistancefast(&player[i].coords,&objects.position[j])<sq(objects.scale[j])*200)
- if( findDistancefast(&player[i].coords,&objects.position[j])<
- findDistancefast(&player[i].coords,&player[0].coords)){
+ if(distsq(&player[i].coords,&objects.position[j])<sq(objects.scale[j])*200)
+ if( distsq(&player[i].coords,&objects.position[j])<
+ distsq(&player[i].coords,&player[0].coords)){
player[i].collided=0;
player[i].avoidcollided=1;
if(player[i].avoidsomething==0||
- findDistancefast(&player[i].coords,&objects.position[j])<
- findDistancefast(&player[i].coords,&player[i].avoidwhere)){
+ distsq(&player[i].coords,&objects.position[j])<
+ distsq(&player[i].coords,&player[i].avoidwhere)){
player[i].avoidwhere=objects.position[j];
player[i].avoidsomething=1;
}
//avoid flaming players
for(int j=0;j<numplayers;j++)
if(player[j].onfire)
- if(findDistancefast(&player[j].coords,&player[i].coords)<sq(0.3)*200)
- if( findDistancefast(&player[i].coords,&player[j].coords)<
- findDistancefast(&player[i].coords,&player[0].coords)){
+ if(distsq(&player[j].coords,&player[i].coords)<sq(0.3)*200)
+ if( distsq(&player[i].coords,&player[j].coords)<
+ distsq(&player[i].coords,&player[0].coords)){
player[i].collided=0;
player[i].avoidcollided=1;
if(player[i].avoidsomething==0||
- findDistancefast(&player[i].coords,&player[j].coords)<
- findDistancefast(&player[i].coords,&player[i].avoidwhere)){
+ distsq(&player[i].coords,&player[j].coords)<
+ distsq(&player[i].coords,&player[i].avoidwhere)){
player[i].avoidwhere=player[j].coords;
player[i].avoidsomething=1;
}
doAI(i);
- if(animation[player[i].targetanimation].attack==reversed){
- //player[i].targetrotation=player[i].rotation;
+ if(animation[player[i].animTarget].attack==reversed){
+ //player[i].targetyaw=player[i].yaw;
player[i].forwardkeydown=0;
player[i].leftkeydown=0;
player[i].backkeydown=0;
player[i].aitype==attacktypecutoff&&
!player[i].dead&&
!player[i].skeleton.free&&
- animation[player[i].targetanimation].attack==neutral)
+ animation[player[i].animTarget].attack==neutral)
numresponded=1;
if(!player[i].throwkeydown)
player[i].num_weapons<2&&
(player[i].isIdle()||
player[i].isCrouch()||
- player[i].targetanimation==sneakanim||
- player[i].targetanimation==rollanim||
- player[i].targetanimation==backhandspringanim||
+ player[i].animTarget==sneakanim||
+ player[i].animTarget==rollanim||
+ player[i].animTarget==backhandspringanim||
player[i].isFlip()||
player[i].isFlip()||
player[i].aitype!=playercontrolled)){
player[i].aitype==playercontrolled)&&
weapons[j].owner==-1&&
player[i].weaponactive==-1)
- if(findDistancefastflat(&player[i].coords,&weapons[j].position)<2){
- if(findDistancefast(&player[i].coords,&weapons[j].position)<2){
+ if(distsqflat(&player[i].coords,&weapons[j].position)<2){
+ if(distsq(&player[i].coords,&weapons[j].position)<2){
if(player[i].isCrouch()||
- player[i].targetanimation==sneakanim||
+ player[i].animTarget==sneakanim||
player[i].isRun()||
player[i].isIdle()||
player[i].aitype!=playercontrolled){
player[i].throwtogglekeydown=1;
- setAnimation(i,crouchremoveknifeanim);
- player[i].targetrotation=roughDirectionTo(player[i].coords,weapons[j].position);
+ player[i].setAnimation(crouchremoveknifeanim);
+ player[i].targetyaw=roughDirectionTo(player[i].coords,weapons[j].position);
player[i].hasvictim=0;
}
- if(player[i].targetanimation==rollanim||player[i].targetanimation==backhandspringanim){
+ if(player[i].animTarget==rollanim||player[i].animTarget==backhandspringanim){
player[i].throwtogglekeydown=1;
player[i].hasvictim=0;
weapons[j].owner==-1||
player[i].victim&&
weapons[j].owner==player[i].victim->id)
- if(findDistancefastflat(&player[i].coords,&weapons[j].position)<2&&player[i].weaponactive==-1)
- if(findDistancefast(&player[i].coords,&weapons[j].position)<1||player[i].victim){
+ if(distsqflat(&player[i].coords,&weapons[j].position)<2&&player[i].weaponactive==-1)
+ if(distsq(&player[i].coords,&weapons[j].position)<1||player[i].victim){
if(weapons[j].getType()!=staff)
emit_sound_at(knifedrawsound, player[i].coords, 128.);
}else if((player[i].isIdle()||
player[i].isFlip()||
player[i].aitype!=playercontrolled)&&
- findDistancefast(&player[i].coords,&weapons[j].position)<5&&
+ distsq(&player[i].coords,&weapons[j].position)<5&&
player[i].coords.y<weapons[j].position.y){
if(!player[i].isFlip()){
player[i].throwtogglekeydown=1;
- setAnimation(i,removeknifeanim);
- player[i].targetrotation=roughDirectionTo(player[i].coords,weapons[j].position);
+ player[i].setAnimation(removeknifeanim);
+ player[i].targetyaw=roughDirectionTo(player[i].coords,weapons[j].position);
}
if(player[i].isFlip()){
player[i].throwtogglekeydown=1;
weapons[k].owner==-1||
player[i].victim&&
weapons[k].owner==player[i].victim->id)
- if(findDistancefastflat(&player[i].coords,&weapons[k].position)<3&&
+ if(distsqflat(&player[i].coords,&weapons[k].position)<3&&
player[i].weaponactive==-1){
if(weapons[k].getType()!=staff)
emit_sound_at(knifedrawsound, player[i].coords, 128.);
}
}
if(player[i].isCrouch()||
- player[i].targetanimation==sneakanim||
+ player[i].animTarget==sneakanim||
player[i].isRun()||
- player[i].isIdle()||player[i].targetanimation==rollanim||
- player[i].targetanimation==backhandspringanim){
+ player[i].isIdle()||player[i].animTarget==rollanim||
+ player[i].animTarget==backhandspringanim){
if(numplayers>1)
for(int j=0;j<numplayers;j++){
if(player[i].weaponactive==-1)
if(j!=i)
if(player[j].num_weapons&&
player[j].skeleton.free&&
- findDistancefast(&player[i].coords,&player[j].coords)<2/*&&player[j].dead*/&&
+ distsq(&player[i].coords,&player[j].coords)<2/*&&player[j].dead*/&&
(((player[j].skeleton.forward.y<0&&
player[j].weaponstuckwhere==0)||
(player[j].skeleton.forward.y>0&&
player[j].weaponstuckwhere==1))||
player[j].weaponstuck==-1||
player[j].num_weapons>1)){
- if(player[i].targetanimation!=rollanim&&player[i].targetanimation!=backhandspringanim){
+ if(player[i].animTarget!=rollanim&&player[i].animTarget!=backhandspringanim){
player[i].throwtogglekeydown=1;
player[i].victim=&player[j];
player[i].hasvictim=1;
- setAnimation(i,crouchremoveknifeanim);
- player[i].targetrotation=roughDirectionTo(player[i].coords,player[j].coords);
+ player[i].setAnimation(crouchremoveknifeanim);
+ player[i].targetyaw=roughDirectionTo(player[i].coords,player[j].coords);
}
- if(player[i].targetanimation==rollanim||player[i].targetanimation==backhandspringanim){
+ if(player[i].animTarget==rollanim||player[i].animTarget==backhandspringanim){
player[i].throwtogglekeydown=1;
player[i].victim=&player[j];
player[i].hasvictim=1;
player[i].victim->weaponactive=-1;
- playerJoint(player[i].victim,abdomen).velocity+=relative*6;
- playerJoint(player[i].victim,neck).velocity+=relative*6;
- playerJoint(player[i].victim,rightshoulder).velocity+=relative*6;
- playerJoint(player[i].victim,leftshoulder).velocity+=relative*6;
+ player[i].victim->getJointFor(abdomen).velocity+=relative*6;
+ player[i].victim->getJointFor(neck).velocity+=relative*6;
+ player[i].victim->getJointFor(rightshoulder).velocity+=relative*6;
+ player[i].victim->getJointFor(leftshoulder).velocity+=relative*6;
}
weapons[k].owner=i;
if(player[i].num_weapons>0){
if(player[i].isIdle()||
player[i].isRun()||
player[i].isCrouch()||
- player[i].targetanimation==sneakanim||
+ player[i].animTarget==sneakanim||
player[i].isFlip())
if(numplayers>1)
for(int j=0;j<numplayers;j++){
if(tutoriallevel!=1||tutorialstage==49)
if(hostile)
if(normaldotproduct(player[i].facing,player[i].coords-player[j].coords)<0&&
- findDistancefast(&player[i].coords,&player[j].coords)<100&&
- findDistancefast(&player[i].coords,&player[j].coords)>1.5&&
+ distsq(&player[i].coords,&player[j].coords)<100&&
+ distsq(&player[i].coords,&player[j].coords)>1.5&&
!player[j].skeleton.free&&
- -1==checkcollide(DoRotation(playerJoint(j,head).position,0,player[j].rotation,0)*player[j].scale+player[j].coords,DoRotation(playerJoint(i,head).position,0,player[i].rotation,0)*player[i].scale+player[i].coords)){
+ -1==checkcollide(DoRotation(player[j].getJointFor(head).position,0,player[j].yaw,0)*player[j].scale+player[j].coords,DoRotation(player[i].getJointFor(head).position,0,player[i].yaw,0)*player[i].scale+player[i].coords)){
if(!player[i].isFlip()){
player[i].throwtogglekeydown=1;
player[i].victim=&player[j];
- setAnimation(i,knifethrowanim);
- player[i].targetrotation=roughDirectionTo(player[i].coords,player[j].coords);
+ player[i].setAnimation(knifethrowanim);
+ player[i].targetyaw=roughDirectionTo(player[i].coords,player[j].coords);
player[i].targettilt2=pitchTo(player[i].coords,player[j].coords);
}
if(player[i].isFlip()){
player[i].victim=&player[j];
XYZ aim;
weapons[player[i].weaponids[0]].owner=-1;
- aim=player[i].victim->coords+DoRotation(playerJoint(player[i].victim,abdomen).position,0,player[i].victim->rotation,0)*player[i].victim->scale+player[i].victim->velocity*findDistance(&player[i].victim->coords,&player[i].coords)/50-(player[i].coords+DoRotation(playerJoint(i,righthand).position,0,player[i].rotation,0)*player[i].scale);
+ aim=player[i].victim->coords+DoRotation(player[i].victim->getJointFor(abdomen).position,0,player[i].victim->yaw,0)*player[i].victim->scale+player[i].victim->velocity*findDistance(&player[i].victim->coords,&player[i].coords)/50-(player[i].coords+DoRotation(player[i].getJointFor(righthand).position,0,player[i].yaw,0)*player[i].scale);
Normalise(&aim);
aim=DoRotation(aim,(float)abs(Random()%30)-15,(float)abs(Random()%30)-15,0);
}
}
if(player[i].weaponactive!=-1&&player[i].aitype==playercontrolled){
- if(player[i].isCrouch()||player[i].targetanimation==sneakanim){
+ if(player[i].isCrouch()||player[i].animTarget==sneakanim){
player[i].throwtogglekeydown=1;
weapons[player[i].weaponids[0]].owner=-1;
weapons[player[i].weaponids[0]].velocity=player[i].velocity*.2;
isgood=false;
if(isgood&&player[i].creature!=wolftype){
if(player[i].isIdle()&&player[i].num_weapons&&weapons[player[i].weaponids[0]].getType()==knife){
- setAnimation(i,drawrightanim);
+ player[i].setAnimation(drawrightanim);
player[i].drawtogglekeydown=1;
}
if((player[i].isIdle()||
player[i].isRun()))&&
player[i].num_weapons&&
weapons[player[i].weaponids[0]].getType()==sword){
- setAnimation(i,drawleftanim);
+ player[i].setAnimation(drawleftanim);
player[i].drawtogglekeydown=1;
}
if(player[i].isCrouch()&&player[i].num_weapons&&weapons[player[i].weaponids[0]].getType()==knife){
- setAnimation(i,crouchdrawrightanim);
+ player[i].setAnimation(crouchdrawrightanim);
player[i].drawtogglekeydown=1;
}
}
player[i].attackkeydown&&
musictype!=stream_fighttheme) {
if(weapons[player[i].weaponids[player[i].weaponactive]].getType()==knife)
- setAnimation(i,crouchstabanim);
+ player[i].setAnimation(crouchstabanim);
if(weapons[player[i].weaponids[player[i].weaponactive]].getType()==sword)
- setAnimation(i,swordgroundstabanim);
+ player[i].setAnimation(swordgroundstabanim);
player[i].hasvictim=0;
}
}
absflatfacing=0;
absflatfacing.z=-1;
- absflatfacing=DoRotation(absflatfacing,0,-rotation,0);
+ absflatfacing=DoRotation(absflatfacing,0,-yaw,0);
} else
absflatfacing=flatfacing;
}
movekey=0;
//Do controls
- if(!animation[player[i].targetanimation].attack&&
- player[i].targetanimation!=staggerbackhighanim&&
- player[i].targetanimation!=staggerbackhardanim&&
- player[i].targetanimation!=backhandspringanim&&
- player[i].targetanimation!=dodgebackanim){
+ if(!animation[player[i].animTarget].attack&&
+ player[i].animTarget!=staggerbackhighanim&&
+ player[i].animTarget!=staggerbackhardanim&&
+ player[i].animTarget!=backhandspringanim&&
+ player[i].animTarget!=dodgebackanim){
if(!player[i].forwardkeydown)
player[i].forwardstogglekeydown=0;
if(player[i].crouchkeydown){
if(numplayers>1)
for(int j=0;j<numplayers;j++)
if(j!=i&&!player[j].skeleton.free&&player[j].aitype==passivetype)
- if(findDistancefast(&player[j].coords,&player[i].coords)<16)
+ if(distsq(&player[j].coords,&player[i].coords)<16)
player[i].superruntoggle=0;
}
if(numplayers>1)
for(int j=0;j<numplayers;j++){
if(j!=i&&!player[j].skeleton.free&&player[j].victim&&player[i].lowreversaldelay<=0){
- if(findDistancefast(&player[j].coords,&player[j].victim->coords)<3&&
+ if(distsq(&player[j].coords,&player[j].victim->coords)<3&&
player[j].victim==&player[i]&&
- (player[j].targetanimation==sweepanim||
- player[j].targetanimation==upunchanim||
- player[j].targetanimation==wolfslapanim||
- ((player[j].targetanimation==swordslashanim||
- player[j].targetanimation==knifeslashstartanim||
- player[j].targetanimation==staffhitanim||
- player[j].targetanimation==staffspinhitanim)&&
- findDistancefast(&player[j].coords,&player[i].coords)<2))){
+ (player[j].animTarget==sweepanim||
+ player[j].animTarget==upunchanim||
+ player[j].animTarget==wolfslapanim||
+ ((player[j].animTarget==swordslashanim||
+ player[j].animTarget==knifeslashstartanim||
+ player[j].animTarget==staffhitanim||
+ player[j].animTarget==staffspinhitanim)&&
+ distsq(&player[j].coords,&player[i].coords)<2))){
if(target>=0)
target=-1;
else
player[i].lowreversaldelay=.5;
if(player[i].isIdle()){
- setAnimation(i,player[i].getCrouch());
+ player[i].setAnimation(player[i].getCrouch());
player[i].transspeed=10;
}
if(player[i].isRun()||
player[i].rightkeydown||
player[i].forwardkeydown||
player[i].backkeydown))){
- setAnimation(i,rollanim);
+ player[i].setAnimation(rollanim);
player[i].transspeed=20;
}
}
if(!player[i].crouchkeydown){
//Uncrouch
- if(!player[i].isRun()&&player[i].targetanimation!=sneakanim&&i==0)player[i].superruntoggle=0;
+ if(!player[i].isRun()&&player[i].animTarget!=sneakanim&&i==0)player[i].superruntoggle=0;
target=-2;
if(player[i].isCrouch()){
if(numplayers>1)
!player[j].skeleton.free&&
player[j].victim&&
player[i].highreversaldelay<=0){
- if(findDistancefast(&player[j].coords,&player[j].victim->coords)<3&&
+ if(distsq(&player[j].coords,&player[j].victim->coords)<3&&
player[j].victim==&player[i]&&
- (player[j].targetanimation==spinkickanim)&&
+ (player[j].animTarget==spinkickanim)&&
player[i].isCrouch()){
if(target>=0)
target=-1;
if(player[i].isCrouch()){
if(!player[i].wasCrouch()){
- player[i].currentanimation=player[i].getCrouch();
- player[i].currentframe=0;
+ player[i].animCurrent=player[i].getCrouch();
+ player[i].frameCurrent=0;
}
- setAnimation(i,player[i].getIdle());
+ player[i].setAnimation(player[i].getIdle());
player[i].transspeed=10;
}
}
- if(player[i].targetanimation==sneakanim){
- setAnimation(i,player[i].getIdle());
+ if(player[i].animTarget==sneakanim){
+ player[i].setAnimation(player[i].getIdle());
player[i].transspeed=10;
}
}
if(player[i].forwardkeydown){
if(player[i].isIdle()||
(player[i].isStop()&&
- player[i].targetrotation==player[i].rotation)||
+ player[i].targetyaw==player[i].yaw)||
(player[i].isLanding()&&
- player[i].targetframe>0&&
+ player[i].frameTarget>0&&
!player[i].jumpkeydown)||
(player[i].isLandhard()&&
- player[i].targetframe>0&&
+ player[i].frameTarget>0&&
!player[i].jumpkeydown&&
player[i].crouchkeydown)){
if(player[i].aitype==passivetype)
- setAnimation(i,walkanim);
+ player[i].setAnimation(walkanim);
else
- setAnimation(i,player[i].getRun());
+ player[i].setAnimation(player[i].getRun());
}
if(player[i].isCrouch()){
- player[i].targetanimation=sneakanim;
+ player[i].animTarget=sneakanim;
if(player[i].wasCrouch())
player[i].target=0;
- player[i].targetframe=0;
+ player[i].frameTarget=0;
}
- if(player[i].targetanimation==hanganim/*&&(!player[i].forwardstogglekeydown||player[i].aitype!=playercontrolled)*/){
- setAnimation(i,climbanim);
- player[i].targetframe=1;
+ if(player[i].animTarget==hanganim/*&&(!player[i].forwardstogglekeydown||player[i].aitype!=playercontrolled)*/){
+ player[i].setAnimation(climbanim);
+ player[i].frameTarget=1;
player[i].jumpclimb=1;
}
- if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){
+ if(player[i].animTarget==jumpupanim||player[i].animTarget==jumpdownanim||player[i].isFlip()){
player[i].velocity+=absflatfacing*5*multiplier;
}
player[i].forwardstogglekeydown=1;
if (player[i].rightkeydown){
if(player[i].isIdle()||
(player[i].isStop()&&
- player[i].targetrotation==player[i].rotation)||
+ player[i].targetyaw==player[i].yaw)||
(player[i].isLanding()&&
- player[i].targetframe>0&&
+ player[i].frameTarget>0&&
!player[i].jumpkeydown)||
(player[i].isLandhard()&&
- player[i].targetframe>0&&
+ player[i].frameTarget>0&&
!player[i].jumpkeydown&&
player[i].crouchkeydown)){
- setAnimation(i,player[i].getRun());
+ player[i].setAnimation(player[i].getRun());
}
if(player[i].isCrouch()){
- player[i].targetanimation=sneakanim;
+ player[i].animTarget=sneakanim;
if(player[i].wasCrouch())
player[i].target=0;
- player[i].targetframe=0;
+ player[i].frameTarget=0;
}
- if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){
+ if(player[i].animTarget==jumpupanim||player[i].animTarget==jumpdownanim||player[i].isFlip()){
player[i].velocity+=DoRotation(absflatfacing*5*multiplier,0,-90,0);
}
- player[i].targetrotation-=90;
- if(player[i].forwardkeydown)player[i].targetrotation+=45;
- if(player[i].backkeydown)player[i].targetrotation-=45;
+ player[i].targetyaw-=90;
+ if(player[i].forwardkeydown)player[i].targetyaw+=45;
+ if(player[i].backkeydown)player[i].targetyaw-=45;
movekey=1;
}
if ( player[i].leftkeydown){
if(player[i].isIdle()||
(player[i].isStop()&&
- player[i].targetrotation==player[i].rotation)||
+ player[i].targetyaw==player[i].yaw)||
(player[i].isLanding()&&
- player[i].targetframe>0&&
+ player[i].frameTarget>0&&
!player[i].jumpkeydown)||
(player[i].isLandhard()&&
- player[i].targetframe>0&&
+ player[i].frameTarget>0&&
!player[i].jumpkeydown&&
player[i].crouchkeydown)){
- setAnimation(i,player[i].getRun());
+ player[i].setAnimation(player[i].getRun());
}
if(player[i].isCrouch()){
- player[i].targetanimation=sneakanim;
+ player[i].animTarget=sneakanim;
if(player[i].wasCrouch())
player[i].target=0;
- player[i].targetframe=0;
+ player[i].frameTarget=0;
}
- if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){
+ if(player[i].animTarget==jumpupanim||player[i].animTarget==jumpdownanim||player[i].isFlip()){
player[i].velocity-=DoRotation(absflatfacing*5*multiplier,0,-90,0);
}
- player[i].targetrotation+=90;
- if(player[i].forwardkeydown)player[i].targetrotation-=45;
- if(player[i].backkeydown)player[i].targetrotation+=45;
+ player[i].targetyaw+=90;
+ if(player[i].forwardkeydown)player[i].targetyaw-=45;
+ if(player[i].backkeydown)player[i].targetyaw+=45;
movekey=1;
}
if(player[i].backkeydown){
if(player[i].isIdle()||
(player[i].isStop()&&
- player[i].targetrotation==player[i].rotation)||
+ player[i].targetyaw==player[i].yaw)||
(player[i].isLanding()&&
- player[i].targetframe>0&&
+ player[i].frameTarget>0&&
!player[i].jumpkeydown)||
(player[i].isLandhard()&&
- player[i].targetframe>0&&
+ player[i].frameTarget>0&&
!player[i].jumpkeydown&&
player[i].crouchkeydown)){
- setAnimation(i,player[i].getRun());
+ player[i].setAnimation(player[i].getRun());
}
if(player[i].isCrouch()){
- player[i].targetanimation=sneakanim;
+ player[i].animTarget=sneakanim;
if(player[i].wasCrouch())
player[i].target=0;
- player[i].targetframe=0;
+ player[i].frameTarget=0;
}
- if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){
+ if(player[i].animTarget==jumpupanim||player[i].animTarget==jumpdownanim||player[i].isFlip()){
player[i].velocity-=absflatfacing*5*multiplier;
}
- if(player[i].targetanimation==hanganim){
- player[i].currentanimation=jumpdownanim;
- player[i].targetanimation=jumpdownanim;
+ if(player[i].animTarget==hanganim){
+ player[i].animCurrent=jumpdownanim;
+ player[i].animTarget=jumpdownanim;
player[i].target=0;
- player[i].currentframe=0;
- player[i].targetframe=1;
+ player[i].frameCurrent=0;
+ player[i].frameTarget=1;
player[i].velocity=0;
player[i].velocity.y+=gravity;
player[i].coords.y-=1.4;
player[i].grabdelay=1;
}
if ( !player[i].leftkeydown&&!player[i].rightkeydown)
- player[i].targetrotation+=180;
+ player[i].targetyaw+=180;
movekey=1;
}
if((player[i].jumpkeydown&&!player[i].jumpclimb)||player[i].jumpstart){
- if((((player[i].isLanding()&&player[i].targetframe>=3)||
+ if((((player[i].isLanding()&&player[i].frameTarget>=3)||
player[i].isRun()||
- player[i].targetanimation==walkanim||
+ player[i].animTarget==walkanim||
player[i].isCrouch()||
- player[i].targetanimation==sneakanim)&&
+ player[i].animTarget==sneakanim)&&
player[i].jumppower>1)&&
- ((player[i].targetanimation!=rabbitrunninganim&&
- player[i].targetanimation!=wolfrunninganim)||i!=0)){
+ ((player[i].animTarget!=rabbitrunninganim&&
+ player[i].animTarget!=wolfrunninganim)||i!=0)){
player[i].jumpstart=0;
- setAnimation(i,jumpupanim);
- player[i].rotation=player[i].targetrotation;
+ player[i].setAnimation(jumpupanim);
+ player[i].yaw=player[i].targetyaw;
player[i].transspeed=20;
player[i].FootLand(0,1);
player[i].FootLand(1,1);
facing=0;
facing.z=-1;
- flatfacing=DoRotation(facing,0,player[i].targetrotation+180,0);
+ flatfacing=DoRotation(facing,0,player[i].targetyaw+180,0);
if(movekey)player[i].velocity=flatfacing*player[i].speed*45*player[i].scale;
if(!movekey)player[i].velocity=0;
if(numplayers>1)
for(int j=0;j<numplayers;j++){
if(j!=i&&!player[j].skeleton.free&&player[j].victim){
- if(findDistancefast(&player[j].coords,&player[j].victim->coords)<3&&
+ if(distsq(&player[j].coords,&player[j].victim->coords)<3&&
player[j].victim==&player[i]&&
- (player[j].targetanimation==sweepanim)){
+ (player[j].animTarget==sweepanim)){
if(target>=0)target=-1;
else target=j;
}
emit_sound_at(jumpsound, player[i].coords, 128.);
}
if((player[i].isIdle())&&player[i].jumppower>1){
- setAnimation(i,player[i].getLanding());
- player[i].targetframe=2;
+ player[i].setAnimation(player[i].getLanding());
+ player[i].frameTarget=2;
player[i].landhard=0;
player[i].jumpstart=1;
player[i].tempdeltav=deltav;
}
- if(player[i].targetanimation==jumpupanim&&
+ if(player[i].animTarget==jumpupanim&&
(((!floatjump&&
!editorenabled)||
!debugmode)||
}
if(!movekey){
- if(player[i].isRun()||player[i].targetanimation==walkanim)
- setAnimation(i,player[i].getStop());
- if(player[i].targetanimation==sneakanim){
- player[i].targetanimation=player[i].getCrouch();
- if(player[i].currentanimation==sneakanim)
+ if(player[i].isRun()||player[i].animTarget==walkanim)
+ player[i].setAnimation(player[i].getStop());
+ if(player[i].animTarget==sneakanim){
+ player[i].animTarget=player[i].getCrouch();
+ if(player[i].animCurrent==sneakanim)
player[i].target=0;
- player[i].targetframe=0;
+ player[i].frameTarget=0;
}
}
- if(player[i].targetanimation==walkanim&&
+ if(player[i].animTarget==walkanim&&
(player[i].aitype==attacktypecutoff||
player[i].aitype==searchtype||
(player[i].aitype==passivetype&&
player[i].numwaypoints<=1)))
- setAnimation(i,player[i].getStop());
+ player[i].setAnimation(player[i].getStop());
if(player[i].isRun()&&(player[i].aitype==passivetype))
- setAnimation(i,player[i].getStop());
+ player[i].setAnimation(player[i].getStop());
}
}
- if(player[i].targetanimation==rollanim)
- player[i].targetrotation=oldtargetrotation;
+ if(player[i].animTarget==rollanim)
+ player[i].targetyaw=oldtargetyaw;
}
//Rotation
for(int k=0;k<numplayers;k++){
- if(fabs(player[k].rotation-player[k].targetrotation)>180){
- if(player[k].rotation>player[k].targetrotation)
- player[k].rotation-=360;
+ if(fabs(player[k].yaw-player[k].targetyaw)>180){
+ if(player[k].yaw>player[k].targetyaw)
+ player[k].yaw-=360;
else
- player[k].rotation+=360;
+ player[k].yaw+=360;
}
//stop to turn in right direction
- if(fabs(player[k].rotation-player[k].targetrotation)>90&&(player[k].isRun()||player[k].targetanimation==walkanim))
- setAnimation(k,player[k].getStop());
+ if(fabs(player[k].yaw-player[k].targetyaw)>90&&(player[k].isRun()||player[k].animTarget==walkanim))
+ player[k].setAnimation(player[k].getStop());
- if(player[k].targetanimation==backhandspringanim||player[k].targetanimation==dodgebackanim)
+ if(player[k].animTarget==backhandspringanim||player[k].animTarget==dodgebackanim)
player[k].targettilt=0;
- if(player[k].targetanimation!=jumpupanim&&
- player[k].targetanimation!=backhandspringanim&&
- player[k].targetanimation!=jumpdownanim&&
+ if(player[k].animTarget!=jumpupanim&&
+ player[k].animTarget!=backhandspringanim&&
+ player[k].animTarget!=jumpdownanim&&
!player[k].isFlip()){
player[k].targettilt=0;
if(player[k].jumppower<0&&!player[k].jumpkeydown)
}
if(player[k].isRun())
- player[k].targettilt=(player[k].rotation-player[k].targetrotation)/4;
+ player[k].targettilt=(player[k].yaw-player[k].targetyaw)/4;
player[k].tilt=stepTowardf(player[k].tilt,player[k].targettilt,multiplier*150);
player[k].grabdelay-=multiplier;
oldtemp=temp;
oldtemp2=temp2;
if(tutorialstage>=51)
- if(findDistancefast(&temp,&player[0].coords)>=findDistancefast(&temp,&temp2)-1||findDistancefast(&temp3,&player[0].coords)<4){
+ if(distsq(&temp,&player[0].coords)>=distsq(&temp,&temp2)-1||distsq(&temp3,&player[0].coords)<4){
OPENAL_StopSound(OPENAL_ALL); // hack...OpenAL renderer isn't stopping music after tutorial goes to level menu...
OPENAL_SetFrequency(OPENAL_ALL, 0.001);
flash();
}
if(tutorialstage<51)
- if(findDistancefast(&temp,&player[0].coords)>=findDistancefast(&temp,&temp2)-1||findDistancefast(&temp3,&player[0].coords)<4){
+ if(distsq(&temp,&player[0].coords)>=distsq(&temp,&temp2)-1||distsq(&temp3,&player[0].coords)<4){
emit_sound_at(fireendsound, player[0].coords);
player[0].coords=(oldtemp+oldtemp2)/2;
flash();
}
if(tutorialstage>=14&&tutorialstage<50)
- if(findDistancefast(&temp,&player[1].coords)>=findDistancefast(&temp,&temp2)-1||findDistancefast(&temp3,&player[1].coords)<4){
+ if(distsq(&temp,&player[1].coords)>=distsq(&temp,&temp2)-1||distsq(&temp3,&player[1].coords)<4){
emit_sound_at(fireendsound, player[1].coords);
for(int i=0;i<player[1].skeleton.num_joints;i++){
if(Random()%2==0){
if(!player[1].skeleton.free)temp2=(player[1].coords-player[1].oldcoords)/multiplier/2;//velocity/2;
if(player[1].skeleton.free)temp2=player[1].skeleton.joints[i].velocity*player[1].scale/2;
- if(!player[1].skeleton.free)temp=DoRotation(DoRotation(DoRotation(player[1].skeleton.joints[i].position,0,0,player[1].tilt),player[1].tilt2,0,0),0,player[1].rotation,0)*player[1].scale+player[1].coords;
+ if(!player[1].skeleton.free)temp=DoRotation(DoRotation(DoRotation(player[1].skeleton.joints[i].position,0,0,player[1].tilt),player[1].tilt2,0,0),0,player[1].yaw,0)*player[1].scale+player[1].coords;
if(player[1].skeleton.free)temp=player[1].skeleton.joints[i].position*player[1].scale+player[1].coords;
Sprite::MakeSprite(breathsprite, temp,temp2, 1,1,1, .6+(float)abs(Random()%100)/200-.25, 1);
}
if(Random()%2==0){
if(!player[1].skeleton.free)temp2=(player[1].coords-player[1].oldcoords)/multiplier/2;//velocity/2;
if(player[1].skeleton.free)temp2=player[1].skeleton.joints[i].velocity*player[1].scale/2;
- if(!player[1].skeleton.free)temp=DoRotation(DoRotation(DoRotation(player[1].skeleton.joints[i].position,0,0,player[1].tilt),player[1].tilt2,0,0),0,player[1].rotation,0)*player[1].scale+player[1].coords;
+ if(!player[1].skeleton.free)temp=DoRotation(DoRotation(DoRotation(player[1].skeleton.joints[i].position,0,0,player[1].tilt),player[1].tilt2,0,0),0,player[1].yaw,0)*player[1].scale+player[1].coords;
if(player[1].skeleton.free)temp=player[1].skeleton.joints[i].position*player[1].scale+player[1].coords;
Sprite::MakeSprite(breathsprite, temp,temp2, 1,1,1, .6+(float)abs(Random()%100)/200-.25, 1);
}
upvector=0;
upvector.z=-1;
- upvector=DoRotation(upvector,-rotation2+90,0,0);
- upvector=DoRotation(upvector,0,0-rotation,0);
+ upvector=DoRotation(upvector,-pitch+90,0,0);
+ upvector=DoRotation(upvector,0,0-yaw,0);
facing=0;
facing.z=-1;
- facing=DoRotation(facing,-rotation2,0,0);
- facing=DoRotation(facing,0,0-rotation,0);
+ facing=DoRotation(facing,-pitch,0,0);
+ facing=DoRotation(facing,0,0-yaw,0);
static float ori[6];
void Game::TickOnce(){
if(mainmenu)
- rotation+=multiplier*5;
+ yaw+=multiplier*5;
else
if(directing||indialogue==-1) {
- rotation+=deltah*.7;
+ yaw+=deltah*.7;
if(!invertmouse)
- rotation2+=deltav*.7;
+ pitch+=deltav*.7;
if(invertmouse)
- rotation2-=deltav*.7;
- if(rotation2>90)
- rotation2=90;
- if(rotation2<-70)
- rotation2=-70;
+ pitch-=deltav*.7;
+ if(pitch>90)
+ pitch=90;
+ if(pitch<-70)
+ pitch=-70;
}
}
static float cameraspeed;
if(!mainmenu){
+ static int oldmusictype=musictype;
if(environment==snowyenvironment)
leveltheme=stream_snowtheme;
player[i].aitype==gethelptype||
player[i].aitype==searchtype)&&
!player[i].dead/*&&player[i].surprised<=0*/&&
- (player[i].targetanimation!=sneakattackedanim&&
- player[i].targetanimation!=knifesneakattackedanim&&
- player[i].targetanimation!=swordsneakattackedanim)){
+ (player[i].animTarget!=sneakattackedanim&&
+ player[i].animTarget!=knifesneakattackedanim&&
+ player[i].animTarget!=swordsneakattackedanim)){
musictype=stream_fighttheme;
realthreat=1;
}
killhotspot=0;
- winhotspot=0;
+ winhotspot=false;
for(int i=0;i<numhotspots;i++)
if(hotspottype[i]==-1)
- if(findDistancefast(&player[0].coords,&hotspot[i])<hotspotsize[i])
- winhotspot=1;
+ if(distsq(&player[0].coords,&hotspot[i])<hotspotsize[i])
+ winhotspot=true;
int numalarmed=0;
for(int i=1;i<numplayers;i++)
changedelay=1;
targetlevel=whichlevel;
}
- alldead=1;
- for(int i=1;i<numplayers;i++)
- if(!player[i].dead&&player[i].howactive<typedead1)
- alldead=0;
+ alldead=true;
+ for(int i=1;i<numplayers;i++) {
+ if(!player[i].dead&&player[i].howactive<typedead1) {
+ alldead=false;
+ break;
+ }
+ }
- if(alldead&&!player[0].dead&&maptype==mapkilleveryone){
+ if(alldead&&!player[0].dead&&maptype==mapkilleveryone) {
changedelay=1;
targetlevel=whichlevel+1;
if(targetlevel>numchallengelevels-1)targetlevel=0;
}
- if(winhotspot||windialogue){
+ if(winhotspot||windialogue) {
changedelay=0.1;
targetlevel=whichlevel+1;
if(targetlevel>numchallengelevels-1)targetlevel=0;
if(leveltime<1){
loading=0;
changedelay=.1;
- alldead=0;
- winhotspot=0;
+ alldead=false;
+ winhotspot=false;
killhotspot=0;
}
fireSound(firestartsound);
- Loadlevel(campaignmapname[accountactive->getCampaignChoicesMade()]);
+ Loadlevel(campaignlevels[accountactive->getCampaignChoicesMade()].mapname.c_str());
fireSound();
// 0 = load next level
// 1 = go back to level select screen
// 2 = stealthload next level
- if(mainmenu==0&&winfreeze&&(campaignchoosenext[actuallevel])==1){
- if(campaignnumnext[actuallevel]==0)
+ if(mainmenu==0&&winfreeze&&(campaignlevels[actuallevel].choosenext)==1) {
+ if(campaignlevels[actuallevel].nextlevel.empty())
endgame=1;
} else if(mainmenu==0&&winfreeze) {
- stealthloading = (campaignchoosenext[actuallevel]==2);
+ stealthloading = (campaignlevels[actuallevel].choosenext==2);
if(!stealthloading){
fireSound(firestartsound);
if(!firstload)
LoadStuff();
whichchoice=0;
- actuallevel=campaignnextlevel[actuallevel][0];
+ actuallevel=campaignlevels[actuallevel].nextlevel.front();
visibleloading=1;
stillloading=1;
- Loadlevel(campaignmapname[actuallevel]);
+ Loadlevel(campaignlevels[actuallevel].mapname.c_str());
campaign=1;
mainmenu=0;
gameon=1;
facing=0;
facing.z=-1;
- facing=DoRotation(facing,-rotation2,0,0);
- facing=DoRotation(facing,0,0-rotation,0);
+ facing=DoRotation(facing,-pitch,0,0);
+ facing=DoRotation(facing,0,0-yaw,0);
viewerfacing=facing;
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;
+ if((animation[player[0].animTarget].attack!=3&&animation[player[0].animCurrent].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;
target.y+=.1;
if(player[0].skeleton.free){
}
target.y+=.1;
}
- if(player[0].skeleton.free!=2&&!autocam){
+ if(player[0].skeleton.free!=2/*&&!autocam*/){
cameraspeed=20;
if(findLengthfast(&player[0].velocity)>400){
cameraspeed=20+(findLength(&player[0].velocity)-20)*.96;
}
- if(player[0].skeleton.free==0&&player[0].targetanimation!=hanganim&&player[0].targetanimation!=climbanim)target.y+=1.4;
+ if(player[0].skeleton.free==0&&player[0].animTarget!=hanganim&&player[0].animTarget!=climbanim)target.y+=1.4;
coltarget=target-cameraloc;
if(findLengthfast(&coltarget)<multiplier*multiplier*400)cameraloc=target;
else {
Normalise(&coltarget);
- if(player[0].targetanimation!=hanganim&&player[0].targetanimation!=climbanim&&player[0].currentanimation!=climbanim&&player[0].currentoffset.x==0)cameraloc=cameraloc+coltarget*multiplier*cameraspeed;
+ if(player[0].animTarget!=hanganim&&player[0].animTarget!=climbanim&&player[0].animCurrent!=climbanim&&player[0].currentoffset.x==0)cameraloc=cameraloc+coltarget*multiplier*cameraspeed;
else cameraloc=cameraloc+coltarget*multiplier*8;
}
if(editorenabled)cameraloc=target;
int i=terrain.patchobjects[player[0].whichpatchx][player[0].whichpatchz][j];
colviewer=viewer;
coltarget=cameraloc;
- if(objects.model[i].LineCheckPossible(&colviewer,&coltarget,&col,&objects.position[i],&objects.rotation[i])!=-1)viewer=col;
+ if(objects.model[i].LineCheckPossible(&colviewer,&coltarget,&col,&objects.position[i],&objects.yaw[i])!=-1)viewer=col;
}
if(terrain.patchobjectnum[player[0].whichpatchx][player[0].whichpatchz])
for(int j=0;j<terrain.patchobjectnum[player[0].whichpatchx][player[0].whichpatchz];j++){
int i=terrain.patchobjects[player[0].whichpatchx][player[0].whichpatchz][j];
colviewer=viewer;
- if(objects.model[i].SphereCheck(&colviewer,.15,&col,&objects.position[i],&objects.rotation[i])!=-1){
+ if(objects.model[i].SphereCheck(&colviewer,.15,&col,&objects.position[i],&objects.yaw[i])!=-1){
viewer=colviewer;
}
}
cameraloc.y=terrain.getHeight(cameraloc.x,cameraloc.z);
}
}
+ /*
+ //what did autocam do?
if(player[0].skeleton.free!=2&&autocam){
cameraspeed=20;
if(findLengthfast(&player[0].velocity)>400){
cameraspeed=20+(findLength(&player[0].velocity)-20)*.96;
}
- if(player[0].skeleton.free==0&&player[0].targetanimation!=hanganim&&player[0].targetanimation!=climbanim)target.y+=1.4;
+ if(player[0].skeleton.free==0&&player[0].animTarget!=hanganim&&player[0].animTarget!=climbanim)target.y+=1.4;
cameradist+=multiplier*5;
if(cameradist>3.3)cameradist=3.3;
coltarget=target-cameraloc;
else if(findLengthfast(&coltarget)>1)
{
Normalise(&coltarget);
- if(player[0].targetanimation!=hanganim&&player[0].targetanimation!=climbanim&&player[0].currentanimation!=climbanim&&player[0].currentoffset.x==0)cameraloc=cameraloc+coltarget*multiplier*cameraspeed;
+ if(player[0].animTarget!=hanganim&&player[0].animTarget!=climbanim&&player[0].animCurrent!=climbanim&&player[0].currentoffset.x==0)cameraloc=cameraloc+coltarget*multiplier*cameraspeed;
else cameraloc=cameraloc+coltarget*multiplier*8;
}
if(editorenabled)cameraloc=target;
int i=terrain.patchobjects[player[0].whichpatchx][player[0].whichpatchz][j];
colviewer=viewer;
coltarget=cameraloc;
- if(objects.model[i].LineCheckPossible(&colviewer,&coltarget,&col,&objects.position[i],&objects.rotation[i])!=-1)viewer=col;
+ if(objects.model[i].LineCheckPossible(&colviewer,&coltarget,&col,&objects.position[i],&objects.yaw[i])!=-1)viewer=col;
}
if(terrain.patchobjectnum[player[0].whichpatchx][player[0].whichpatchz])
for(int j=0;j<terrain.patchobjectnum[player[0].whichpatchx][player[0].whichpatchz];j++){
int i=terrain.patchobjects[player[0].whichpatchx][player[0].whichpatchz][j];
colviewer=viewer;
- if(objects.model[i].SphereCheck(&colviewer,.15,&col,&objects.position[i],&objects.rotation[i])!=-1){
+ if(objects.model[i].SphereCheck(&colviewer,.15,&col,&objects.position[i],&objects.yaw[i])!=-1){
viewer=colviewer;
}
}
cameraloc.y=terrain.getHeight(cameraloc.x,cameraloc.z);
}
}
+ */
if(camerashake>.8)camerashake=.8;
//if(woozy>10)woozy=10;
//woozy+=multiplier;