*** empty log message ***
git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@904 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
@@ -45,67 +45,6 @@ void throttle()
|
||||
enet_peer_throttle_configure(curpeer, throttle_interval*1000, throttle_accel, throttle_decel);
|
||||
}
|
||||
|
||||
void newname(char *name)
|
||||
{
|
||||
if(name[0])
|
||||
{
|
||||
c2sinit = false;
|
||||
s_strncpy(player1->name, name, MAXNAMELEN+1);
|
||||
}
|
||||
else conoutf("your name is: %s", player1->name);
|
||||
}
|
||||
|
||||
int smallerteam()
|
||||
{
|
||||
int teamsize[2] = {0, 0};
|
||||
loopv(players) if(players[i]) teamsize[team_int(players[i]->team)]++;
|
||||
teamsize[team_int(player1->team)]++;
|
||||
if(teamsize[0] == teamsize[1]) return -1;
|
||||
return teamsize[0] < teamsize[1] ? 0 : 1;
|
||||
}
|
||||
|
||||
void changeteam(int team) // force team and respawn
|
||||
{
|
||||
c2sinit = false;
|
||||
if(m_ctf) tryflagdrop(NULL);
|
||||
s_strncpy(player1->team, team_string(team), MAXTEAMLEN+1);
|
||||
deathstate(player1);
|
||||
}
|
||||
|
||||
void newteam(char *name)
|
||||
{
|
||||
if(name[0])
|
||||
{
|
||||
if(m_teammode)
|
||||
{
|
||||
if(!strcmp(name, player1->team)) return; // same team
|
||||
if(!team_valid(name)) { conoutf("\f3\"%s\" is not a valid team name (try CLA or RVSF)", name); return; }
|
||||
|
||||
bool checkteamsize = autoteambalance && players.length() >= 1 && !m_botmode;
|
||||
int freeteam = smallerteam();
|
||||
|
||||
if(team_valid(name))
|
||||
{
|
||||
int team = team_int(name);
|
||||
if(checkteamsize && team != freeteam)
|
||||
{
|
||||
conoutf("\f3the %s team is already full", name);
|
||||
return;
|
||||
}
|
||||
changeteam(team);
|
||||
}
|
||||
else changeteam(checkteamsize ? (uint)freeteam : rnd(2)); // random assignement
|
||||
}
|
||||
}
|
||||
else conoutf("your team is: %s", player1->team);
|
||||
}
|
||||
|
||||
void newskin(int skin) { player1->nextskin = skin; }
|
||||
|
||||
COMMANDN(team, newteam, ARG_1STR);
|
||||
COMMANDN(name, newname, ARG_1STR);
|
||||
COMMANDN(skin, newskin, ARG_1INT);
|
||||
|
||||
string clientpassword = "";
|
||||
|
||||
void abortconnect()
|
||||
@@ -278,14 +217,6 @@ void addmsg(int type, const char *fmt, ...)
|
||||
int lastupdate = 0, lastping = 0;
|
||||
bool senditemstoserver = false; // after a map change, since server doesn't have map data
|
||||
|
||||
bool netmapstart() { senditemstoserver = true; return curpeer!=NULL; }
|
||||
|
||||
void initclientnet()
|
||||
{
|
||||
newname("unnamed");
|
||||
changeteam(rnd(2));
|
||||
}
|
||||
|
||||
void sendpackettoserv(int chan, ENetPacket *packet)
|
||||
{
|
||||
if(curpeer) enet_peer_send(curpeer, chan, packet);
|
||||
|
||||
+66
-65
@@ -20,10 +20,6 @@ bool autoteambalance = false;
|
||||
playerent *player1 = newplayerent(); // our client
|
||||
vector<playerent *> players; // other clients
|
||||
|
||||
VARP(sensitivity, 0, 30, 10000);
|
||||
VARP(sensitivityscale, 1, 10, 10000);
|
||||
VARP(invmouse, 0, 0, 1);
|
||||
|
||||
int lastmillis = 0;
|
||||
int curtime;
|
||||
string clientmap;
|
||||
@@ -32,7 +28,7 @@ extern int framesinmap;
|
||||
|
||||
char *getclientmap() { return clientmap; }
|
||||
|
||||
extern bool c2sinit;
|
||||
extern bool c2sinit, senditemstoserver;
|
||||
extern int dblend;
|
||||
|
||||
void setskin(playerent *pl, uint skin)
|
||||
@@ -43,6 +39,67 @@ void setskin(playerent *pl, uint skin)
|
||||
pl->skin = skin % (maxskin[team_int(pl->team)]+1);
|
||||
}
|
||||
|
||||
void newname(char *name)
|
||||
{
|
||||
if(name[0])
|
||||
{
|
||||
c2sinit = false;
|
||||
s_strncpy(player1->name, name, MAXNAMELEN+1);
|
||||
}
|
||||
else conoutf("your name is: %s", player1->name);
|
||||
}
|
||||
|
||||
int smallerteam()
|
||||
{
|
||||
int teamsize[2] = {0, 0};
|
||||
loopv(players) if(players[i]) teamsize[team_int(players[i]->team)]++;
|
||||
teamsize[team_int(player1->team)]++;
|
||||
if(teamsize[0] == teamsize[1]) return -1;
|
||||
return teamsize[0] < teamsize[1] ? 0 : 1;
|
||||
}
|
||||
|
||||
void changeteam(int team) // force team and respawn
|
||||
{
|
||||
c2sinit = false;
|
||||
if(m_ctf) tryflagdrop(NULL);
|
||||
s_strncpy(player1->team, team_string(team), MAXTEAMLEN+1);
|
||||
deathstate(player1);
|
||||
}
|
||||
|
||||
void newteam(char *name)
|
||||
{
|
||||
if(name[0])
|
||||
{
|
||||
if(m_teammode)
|
||||
{
|
||||
if(!strcmp(name, player1->team)) return; // same team
|
||||
if(!team_valid(name)) { conoutf("\f3\"%s\" is not a valid team name (try CLA or RVSF)", name); return; }
|
||||
|
||||
bool checkteamsize = autoteambalance && players.length() >= 1 && !m_botmode;
|
||||
int freeteam = smallerteam();
|
||||
|
||||
if(team_valid(name))
|
||||
{
|
||||
int team = team_int(name);
|
||||
if(checkteamsize && team != freeteam)
|
||||
{
|
||||
conoutf("\f3the %s team is already full", name);
|
||||
return;
|
||||
}
|
||||
changeteam(team);
|
||||
}
|
||||
else changeteam(checkteamsize ? (uint)freeteam : rnd(2)); // random assignement
|
||||
}
|
||||
}
|
||||
else conoutf("your team is: %s", player1->team);
|
||||
}
|
||||
|
||||
void newskin(int skin) { player1->nextskin = skin; }
|
||||
|
||||
COMMANDN(team, newteam, ARG_1STR);
|
||||
COMMANDN(name, newname, ARG_1STR);
|
||||
COMMANDN(skin, newskin, ARG_1INT);
|
||||
|
||||
extern void throw_nade(playerent *d, const vec &vel, bounceent *p);
|
||||
|
||||
void deathstate(playerent *pl)
|
||||
@@ -376,64 +433,6 @@ void spawnplayer(playerent *d) // place at random spawn
|
||||
d->state = CS_ALIVE;
|
||||
}
|
||||
|
||||
// movement input code
|
||||
|
||||
#define dir(name,v,d,s,os) void name(bool isdown) { player1->s = isdown; player1->v = isdown ? d : (player1->os ? -(d) : 0); player1->lastmove = lastmillis; }
|
||||
|
||||
dir(backward, move, -1, k_down, k_up);
|
||||
dir(forward, move, 1, k_up, k_down);
|
||||
dir(left, strafe, 1, k_left, k_right);
|
||||
dir(right, strafe, -1, k_right, k_left);
|
||||
|
||||
void attack(bool on)
|
||||
{
|
||||
if(intermission) return;
|
||||
if(editmode) editdrag(on);
|
||||
else if(player1->state==CS_DEAD) respawn();
|
||||
else player1->attacking = on;
|
||||
}
|
||||
|
||||
void jumpn(bool on)
|
||||
{
|
||||
if(intermission) return;
|
||||
if(player1->state==CS_DEAD)
|
||||
{
|
||||
if(on) respawn();
|
||||
}
|
||||
else player1->jumpnext = on;
|
||||
}
|
||||
|
||||
COMMAND(backward, ARG_DOWN);
|
||||
COMMAND(forward, ARG_DOWN);
|
||||
COMMAND(left, ARG_DOWN);
|
||||
COMMAND(right, ARG_DOWN);
|
||||
COMMANDN(jump, jumpn, ARG_DOWN);
|
||||
COMMAND(attack, ARG_DOWN);
|
||||
COMMAND(showscores, ARG_DOWN);
|
||||
|
||||
void fixcamerarange(physent *cam)
|
||||
{
|
||||
const float MAXPITCH = 90.0f;
|
||||
if(cam->pitch>MAXPITCH) cam->pitch = MAXPITCH;
|
||||
if(cam->pitch<-MAXPITCH) cam->pitch = -MAXPITCH;
|
||||
while(cam->yaw<0.0f) cam->yaw += 360.0f;
|
||||
while(cam->yaw>=360.0f) cam->yaw -= 360.0f;
|
||||
}
|
||||
|
||||
void mousemove(int dx, int dy)
|
||||
{
|
||||
if(intermission) return;
|
||||
const float SENSF = 33.0f; // try match quake sens
|
||||
camera1->yaw += (dx/SENSF)*(sensitivity/(float)sensitivityscale);
|
||||
camera1->pitch -= (dy/SENSF)*(sensitivity/(float)sensitivityscale)*(invmouse ? -1 : 1);
|
||||
fixcamerarange();
|
||||
if(camera1!=player1 && player1->state!=CS_DEAD)
|
||||
{
|
||||
player1->yaw = camera1->yaw;
|
||||
player1->pitch = camera1->pitch;
|
||||
}
|
||||
}
|
||||
|
||||
void showteamkill() { player1->lastteamkill = lastmillis; }
|
||||
|
||||
// damage arriving from the network, monsters, yourself, all ends up here.
|
||||
@@ -547,7 +546,8 @@ playerent *getclient(int cn) // ensure valid entity
|
||||
void initclient()
|
||||
{
|
||||
clientmap[0] = 0;
|
||||
initclientnet();
|
||||
newname("unnamed");
|
||||
changeteam(rnd(2));
|
||||
}
|
||||
|
||||
entity flagdummies[2]; // in case the map does not provide flags
|
||||
@@ -582,7 +582,7 @@ void startmap(char *name) // called just after a map load
|
||||
{
|
||||
clearminimap();
|
||||
//if(netmapstart()) { gamemode = 0;} //needs fixed to switch modes?
|
||||
netmapstart(); //should work
|
||||
senditemstoserver = true;
|
||||
//monsterclear();
|
||||
// Added by Rick
|
||||
kickallbots();
|
||||
@@ -727,3 +727,4 @@ void showmastermenu(int m) // 0=kick, 1=ban
|
||||
|
||||
COMMAND(showmastermenu, ARG_1INT);
|
||||
|
||||
|
||||
|
||||
@@ -72,64 +72,6 @@ void screenshot(char *imagepath)
|
||||
COMMAND(screenshot, ARG_NONE);
|
||||
COMMAND(quit, ARG_NONE);
|
||||
|
||||
static void bar(float bar, int w, int o, float r, float g, float b)
|
||||
{
|
||||
int side = 50;
|
||||
glColor3f(r, g, b);
|
||||
glVertex2f(side, o*FONTH);
|
||||
glVertex2f(bar*(w*3-2*side)+side, o*FONTH);
|
||||
glVertex2f(bar*(w*3-2*side)+side, (o+2)*FONTH);
|
||||
glVertex2f(side, (o+2)*FONTH);
|
||||
}
|
||||
|
||||
void show_out_of_renderloop_progress(float bar1, const char *text1, float bar2, const char *text2) // also used during loading
|
||||
{
|
||||
c2skeepalive();
|
||||
|
||||
int w = scr_w, h = scr_h;
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glOrtho(0, w*3, h*3, 0, -1, 1);
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
|
||||
if(text1)
|
||||
{
|
||||
bar(1, w, 1, 0.1f, 0.1f, 0.1f);
|
||||
bar(bar1, w, 1, 0.2f, 0.2f, 0.2f);
|
||||
}
|
||||
|
||||
if(bar2>0)
|
||||
{
|
||||
bar(1, w, 3, 0.1f, 0.1f, 0.1f);
|
||||
bar(bar2, w, 3, 0.2f, 0.2f, 0.2f);
|
||||
}
|
||||
|
||||
glEnd();
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
|
||||
if(text1) draw_text(text1, 70, 1*FONTH + FONTH/2);
|
||||
if(bar2>0) draw_text(text2, 70, 3*FONTH + FONTH/2);
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
glPopMatrix();
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPopMatrix();
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
SDL_GL_SwapBuffers();
|
||||
}
|
||||
|
||||
SDL_Surface *screen = NULL;
|
||||
|
||||
extern void setfullscreen(bool enable);
|
||||
|
||||
@@ -435,3 +435,64 @@ void addgib(playerent *d)
|
||||
}
|
||||
}
|
||||
|
||||
// movement input code
|
||||
|
||||
#define dir(name,v,d,s,os) void name(bool isdown) { player1->s = isdown; player1->v = isdown ? d : (player1->os ? -(d) : 0); player1->lastmove = lastmillis; }
|
||||
|
||||
dir(backward, move, -1, k_down, k_up);
|
||||
dir(forward, move, 1, k_up, k_down);
|
||||
dir(left, strafe, 1, k_left, k_right);
|
||||
dir(right, strafe, -1, k_right, k_left);
|
||||
|
||||
void attack(bool on)
|
||||
{
|
||||
if(intermission) return;
|
||||
if(editmode) editdrag(on);
|
||||
else if(player1->state==CS_DEAD) respawn();
|
||||
else player1->attacking = on;
|
||||
}
|
||||
|
||||
void jumpn(bool on)
|
||||
{
|
||||
if(intermission) return;
|
||||
if(player1->state==CS_DEAD)
|
||||
{
|
||||
if(on) respawn();
|
||||
}
|
||||
else player1->jumpnext = on;
|
||||
}
|
||||
|
||||
COMMAND(backward, ARG_DOWN);
|
||||
COMMAND(forward, ARG_DOWN);
|
||||
COMMAND(left, ARG_DOWN);
|
||||
COMMAND(right, ARG_DOWN);
|
||||
COMMANDN(jump, jumpn, ARG_DOWN);
|
||||
COMMAND(attack, ARG_DOWN);
|
||||
|
||||
void fixcamerarange(physent *cam)
|
||||
{
|
||||
const float MAXPITCH = 90.0f;
|
||||
if(cam->pitch>MAXPITCH) cam->pitch = MAXPITCH;
|
||||
if(cam->pitch<-MAXPITCH) cam->pitch = -MAXPITCH;
|
||||
while(cam->yaw<0.0f) cam->yaw += 360.0f;
|
||||
while(cam->yaw>=360.0f) cam->yaw -= 360.0f;
|
||||
}
|
||||
|
||||
VARP(sensitivity, 0, 30, 10000);
|
||||
VARP(sensitivityscale, 1, 10, 10000);
|
||||
VARP(invmouse, 0, 0, 1);
|
||||
|
||||
void mousemove(int dx, int dy)
|
||||
{
|
||||
if(intermission) return;
|
||||
const float SENSF = 33.0f; // try match quake sens
|
||||
camera1->yaw += (dx/SENSF)*(sensitivity/(float)sensitivityscale);
|
||||
camera1->pitch -= (dy/SENSF)*(sensitivity/(float)sensitivityscale)*(invmouse ? -1 : 1);
|
||||
fixcamerarange();
|
||||
if(camera1!=player1 && player1->state!=CS_DEAD)
|
||||
{
|
||||
player1->yaw = camera1->yaw;
|
||||
player1->pitch = camera1->pitch;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-7
@@ -62,9 +62,11 @@ struct Texture
|
||||
};
|
||||
extern Texture *crosshair;
|
||||
|
||||
extern void overbright(float amount);
|
||||
extern void createtexture(int tnum, int w, int h, void *pixels, int clamp, bool mipmap, GLenum format);
|
||||
extern Texture *textureload(const char *name, int clamp = 0);
|
||||
extern int lookuptexture(int tex, int &xs, int &ys);
|
||||
extern void draw_envbox(int fogdist);
|
||||
|
||||
// rendercubes
|
||||
extern void mipstats(int a, int b, int c);
|
||||
@@ -93,8 +95,6 @@ extern void gets2c();
|
||||
extern void c2sinfo(playerent *d);
|
||||
extern void c2skeepalive();
|
||||
extern void neterr(char *s);
|
||||
extern void initclientnet();
|
||||
extern bool netmapstart();
|
||||
extern int getclientnum();
|
||||
extern void changemapserv(char *name, int mode);
|
||||
extern void changeteam(int team);
|
||||
@@ -104,7 +104,6 @@ extern bool sendpwd;
|
||||
// clientgame
|
||||
extern flaginfo flaginfos[2];
|
||||
extern bool autoteambalance;
|
||||
extern void mousemove(int dx, int dy);
|
||||
extern void updateworld(int curtime, int lastmillis);
|
||||
extern void startmap(char *name);
|
||||
extern void changemap(char *name);
|
||||
@@ -121,7 +120,6 @@ extern void zapplayer(playerent *&d);
|
||||
extern playerent *getclient(int cn);
|
||||
extern playerent *newclient(int cn);
|
||||
extern void timeupdate(int timeremain);
|
||||
extern void fixcamerarange(physent *cam = camera1);
|
||||
extern void respawnself();
|
||||
extern void setskin(playerent *pl, uint skin);
|
||||
//game mode extras
|
||||
@@ -173,7 +171,6 @@ extern int isoccluded(float vx, float vy, float cx, float cy, float csize);
|
||||
// main
|
||||
extern void fatal(char *s, char *o = "");
|
||||
extern void keyrepeat(bool on);
|
||||
extern void show_out_of_renderloop_progress(float bar1, const char *text1, float bar2 = 0, const char *text2 = NULL);
|
||||
|
||||
// rendertext
|
||||
extern void draw_text(const char *str, int left, int top);
|
||||
@@ -181,7 +178,6 @@ extern void draw_textf(const char *fstr, int left, int top, ...);
|
||||
extern int char_width(int c, int x = 0);
|
||||
extern int text_width(const char *str, int limit = -1);
|
||||
extern int text_visible(const char *str, int max);
|
||||
extern void draw_envbox(int fogdist);
|
||||
extern void text_startcolumns();
|
||||
extern void text_endcolumns();
|
||||
|
||||
@@ -201,8 +197,8 @@ extern void pruneundos(int maxremain = 0);
|
||||
// renderhud
|
||||
extern void gl_drawhud(int w, int h, int curfps, int nquads, int curvert, bool underwater);
|
||||
extern void damageblend(int n);
|
||||
extern bool scoped;
|
||||
extern void loadingscreen();
|
||||
extern void show_out_of_renderloop_progress(float bar1, const char *text1, float bar2 = 0, const char *text2 = NULL);
|
||||
|
||||
// renderparticles
|
||||
extern void particleinit();
|
||||
@@ -237,6 +233,8 @@ extern bounceent *newbounceent();
|
||||
extern void mbounceents();
|
||||
extern void clearbounceents();
|
||||
extern void addgib(playerent *d);
|
||||
extern void mousemove(int dx, int dy);
|
||||
extern void fixcamerarange(physent *cam = camera1);
|
||||
|
||||
// sound
|
||||
extern void playsound(int n, vec *loc = 0);
|
||||
@@ -286,6 +284,8 @@ extern void servermsinit(const char *master, char *sdesc, bool listen);
|
||||
extern bool serverpickup(uint i, int sec, int sender);
|
||||
|
||||
// weapon
|
||||
extern bool scoped;
|
||||
|
||||
extern void shoot(playerent *d, vec &to);
|
||||
extern void shootv(int gun, vec &from, vec &to, playerent *d = 0, bool local = false, int nademillis=0);
|
||||
extern void createrays(vec &from, vec &to);
|
||||
|
||||
@@ -49,8 +49,6 @@ void cleangl()
|
||||
{
|
||||
}
|
||||
|
||||
void overbright(float amount) { if(hasoverbright) glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, amount ); }
|
||||
|
||||
void line(int x1, int y1, float z1, int x2, int y2, float z2)
|
||||
{
|
||||
glBegin(GL_POLYGON);
|
||||
|
||||
@@ -367,3 +367,59 @@ void loadingscreen()
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
static void bar(float bar, int o, float r, float g, float b)
|
||||
{
|
||||
int side = 50;
|
||||
glColor3f(r, g, b);
|
||||
glVertex2f(side, o*FONTH);
|
||||
glVertex2f(bar*(VIRTW-2*side)+side, o*FONTH);
|
||||
glVertex2f(bar*(VIRTW-2*side)+side, (o+2)*FONTH);
|
||||
glVertex2f(side, (o+2)*FONTH);
|
||||
}
|
||||
|
||||
void show_out_of_renderloop_progress(float bar1, const char *text1, float bar2, const char *text2) // also used during loading
|
||||
{
|
||||
c2skeepalive();
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glOrtho(0, VIRTW, VIRTH, 0, -1, 1);
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
|
||||
if(text1)
|
||||
{
|
||||
bar(1, 1, 0.1f, 0.1f, 0.1f);
|
||||
bar(bar1, 1, 0.2f, 0.2f, 0.2f);
|
||||
}
|
||||
|
||||
if(bar2>0)
|
||||
{
|
||||
bar(1, 3, 0.1f, 0.1f, 0.1f);
|
||||
bar(bar2, 3, 0.2f, 0.2f, 0.2f);
|
||||
}
|
||||
|
||||
glEnd();
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
|
||||
if(text1) draw_text(text1, 70, 1*FONTH + FONTH/2);
|
||||
if(bar2>0) draw_text(text2, 70, 3*FONTH + FONTH/2);
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
glPopMatrix();
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPopMatrix();
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
SDL_GL_SwapBuffers();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// rendertext.cpp: based on Don's gl_text.cpp
|
||||
// rendertext.cpp: font rendering
|
||||
|
||||
#include "cube.h"
|
||||
|
||||
@@ -241,74 +241,3 @@ void draw_text(const char *str, int left, int top)
|
||||
}
|
||||
}
|
||||
|
||||
// also Don's code, so goes in here too :)
|
||||
|
||||
static Texture *sky[6] = {NULL, NULL, NULL, NULL, NULL, NULL};
|
||||
|
||||
void loadsky(char *basename)
|
||||
{
|
||||
char *side[] = { "ft", "bk", "lf", "rt", "dn", "up" };
|
||||
loopi(6)
|
||||
{
|
||||
s_sprintfd(name)("packages/%s_%s.jpg", basename, side[i]);
|
||||
sky[i] = textureload(name, 3);
|
||||
if(!sky[i]) conoutf("could not load sky texture: %s", name);
|
||||
}
|
||||
}
|
||||
|
||||
COMMAND(loadsky, ARG_1STR);
|
||||
|
||||
void draw_envbox_aux(float s0, float t0, int x0, int y0, int z0,
|
||||
float s1, float t1, int x1, int y1, int z1,
|
||||
float s2, float t2, int x2, int y2, int z2,
|
||||
float s3, float t3, int x3, int y3, int z3,
|
||||
Texture *tex)
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, tex->id);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2f(s3, t3); glVertex3i(x3, y3, z3);
|
||||
glTexCoord2f(s2, t2); glVertex3i(x2, y2, z2);
|
||||
glTexCoord2f(s1, t1); glVertex3i(x1, y1, z1);
|
||||
glTexCoord2f(s0, t0); glVertex3i(x0, y0, z0);
|
||||
glEnd();
|
||||
xtraverts += 4;
|
||||
}
|
||||
|
||||
void draw_envbox(int w)
|
||||
{
|
||||
if(!sky[0]) return;
|
||||
|
||||
glDepthMask(GL_FALSE);
|
||||
|
||||
draw_envbox_aux(1.0f, 1.0f, -w, -w, w,
|
||||
0.0f, 1.0f, w, -w, w,
|
||||
0.0f, 0.0f, w, -w, -w,
|
||||
1.0f, 0.0f, -w, -w, -w, sky[0]);
|
||||
|
||||
draw_envbox_aux(1.0f, 1.0f, +w, w, w,
|
||||
0.0f, 1.0f, -w, w, w,
|
||||
0.0f, 0.0f, -w, w, -w,
|
||||
1.0f, 0.0f, +w, w, -w, sky[1]);
|
||||
|
||||
draw_envbox_aux(0.0f, 0.0f, -w, -w, -w,
|
||||
1.0f, 0.0f, -w, w, -w,
|
||||
1.0f, 1.0f, -w, w, w,
|
||||
0.0f, 1.0f, -w, -w, w, sky[2]);
|
||||
|
||||
draw_envbox_aux(1.0f, 1.0f, +w, -w, w,
|
||||
0.0f, 1.0f, +w, w, w,
|
||||
0.0f, 0.0f, +w, w, -w,
|
||||
1.0f, 0.0f, +w, -w, -w, sky[3]);
|
||||
|
||||
draw_envbox_aux(0.0f, 1.0f, -w, w, w,
|
||||
0.0f, 0.0f, +w, w, w,
|
||||
1.0f, 0.0f, +w, -w, w,
|
||||
1.0f, 1.0f, -w, -w, w, sky[4]);
|
||||
|
||||
draw_envbox_aux(0.0f, 1.0f, +w, w, -w,
|
||||
0.0f, 0.0f, -w, w, -w,
|
||||
1.0f, 0.0f, -w, -w, -w,
|
||||
1.0f, 1.0f, +w, -w, -w, sky[5]);
|
||||
|
||||
glDepthMask(GL_TRUE);
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ void showscores(bool on)
|
||||
menuset(on ? (m_ctf ? ctfmenu : (m_teammode ? teammenu : scoremenu)) : NULL);
|
||||
}
|
||||
|
||||
COMMAND(showscores, ARG_DOWN);
|
||||
|
||||
struct sline { string s; };
|
||||
vector<sline> scorelines;
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
Texture *crosshair = NULL;
|
||||
hashtable<char *, Texture> textures;
|
||||
|
||||
void overbright(float amount) { if(hasoverbright) glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, amount ); }
|
||||
|
||||
void createtexture(int tnum, int w, int h, void *pixels, int clamp, bool mipmap, GLenum format)
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, tnum);
|
||||
@@ -118,3 +120,73 @@ int lookuptexture(int tex, int &xs, int &ys)
|
||||
return t->id;
|
||||
}
|
||||
|
||||
static Texture *sky[6] = {NULL, NULL, NULL, NULL, NULL, NULL};
|
||||
|
||||
void loadsky(char *basename)
|
||||
{
|
||||
char *side[] = { "ft", "bk", "lf", "rt", "dn", "up" };
|
||||
loopi(6)
|
||||
{
|
||||
s_sprintfd(name)("packages/%s_%s.jpg", basename, side[i]);
|
||||
sky[i] = textureload(name, 3);
|
||||
if(!sky[i]) conoutf("could not load sky texture: %s", name);
|
||||
}
|
||||
}
|
||||
|
||||
COMMAND(loadsky, ARG_1STR);
|
||||
|
||||
void draw_envbox_face(float s0, float t0, int x0, int y0, int z0,
|
||||
float s1, float t1, int x1, int y1, int z1,
|
||||
float s2, float t2, int x2, int y2, int z2,
|
||||
float s3, float t3, int x3, int y3, int z3,
|
||||
Texture *tex)
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, tex->id);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2f(s3, t3); glVertex3i(x3, y3, z3);
|
||||
glTexCoord2f(s2, t2); glVertex3i(x2, y2, z2);
|
||||
glTexCoord2f(s1, t1); glVertex3i(x1, y1, z1);
|
||||
glTexCoord2f(s0, t0); glVertex3i(x0, y0, z0);
|
||||
glEnd();
|
||||
xtraverts += 4;
|
||||
}
|
||||
|
||||
void draw_envbox(int w)
|
||||
{
|
||||
if(!sky[0]) return;
|
||||
|
||||
glDepthMask(GL_FALSE);
|
||||
|
||||
draw_envbox_face(1.0f, 1.0f, -w, -w, w,
|
||||
0.0f, 1.0f, w, -w, w,
|
||||
0.0f, 0.0f, w, -w, -w,
|
||||
1.0f, 0.0f, -w, -w, -w, sky[0]);
|
||||
|
||||
draw_envbox_face(1.0f, 1.0f, +w, w, w,
|
||||
0.0f, 1.0f, -w, w, w,
|
||||
0.0f, 0.0f, -w, w, -w,
|
||||
1.0f, 0.0f, +w, w, -w, sky[1]);
|
||||
|
||||
draw_envbox_face(0.0f, 0.0f, -w, -w, -w,
|
||||
1.0f, 0.0f, -w, w, -w,
|
||||
1.0f, 1.0f, -w, w, w,
|
||||
0.0f, 1.0f, -w, -w, w, sky[2]);
|
||||
|
||||
draw_envbox_face(1.0f, 1.0f, +w, -w, w,
|
||||
0.0f, 1.0f, +w, w, w,
|
||||
0.0f, 0.0f, +w, w, -w,
|
||||
1.0f, 0.0f, +w, -w, -w, sky[3]);
|
||||
|
||||
draw_envbox_face(0.0f, 1.0f, -w, w, w,
|
||||
0.0f, 0.0f, +w, w, w,
|
||||
1.0f, 0.0f, +w, -w, w,
|
||||
1.0f, 1.0f, -w, -w, w, sky[4]);
|
||||
|
||||
draw_envbox_face(0.0f, 1.0f, +w, w, -w,
|
||||
0.0f, 0.0f, -w, w, -w,
|
||||
1.0f, 0.0f, -w, -w, -w,
|
||||
1.0f, 1.0f, +w, -w, -w, sky[5]);
|
||||
|
||||
glDepthMask(GL_TRUE);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user