From a14b20ac6b63ef036eef13003216bb413c8d3059 Mon Sep 17 00:00:00 2001 From: Lee Salzman Date: Tue, 3 Apr 2007 19:20:45 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@904 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/client.cpp | 69 -------------------- source/src/clientgame.cpp | 131 +++++++++++++++++++------------------- source/src/main.cpp | 58 ----------------- source/src/physics.cpp | 61 ++++++++++++++++++ source/src/protos.h | 14 ++-- source/src/rendergl.cpp | 2 - source/src/renderhud.cpp | 56 ++++++++++++++++ source/src/rendertext.cpp | 73 +-------------------- source/src/scoreboard.cpp | 2 + source/src/texture.cpp | 72 +++++++++++++++++++++ 10 files changed, 265 insertions(+), 273 deletions(-) diff --git a/source/src/client.cpp b/source/src/client.cpp index 4cceacb8..5765f2ee 100644 --- a/source/src/client.cpp +++ b/source/src/client.cpp @@ -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); diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index de8b539a..ed1440a2 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -20,10 +20,6 @@ bool autoteambalance = false; playerent *player1 = newplayerent(); // our client vector 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); + diff --git a/source/src/main.cpp b/source/src/main.cpp index 7478c3cd..52748bcd 100644 --- a/source/src/main.cpp +++ b/source/src/main.cpp @@ -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); diff --git a/source/src/physics.cpp b/source/src/physics.cpp index e28b6d73..f46d537c 100644 --- a/source/src/physics.cpp +++ b/source/src/physics.cpp @@ -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; + } +} + diff --git a/source/src/protos.h b/source/src/protos.h index b3145db2..8e126b6a 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -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); diff --git a/source/src/rendergl.cpp b/source/src/rendergl.cpp index 5389232c..8e069bb1 100644 --- a/source/src/rendergl.cpp +++ b/source/src/rendergl.cpp @@ -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); diff --git a/source/src/renderhud.cpp b/source/src/renderhud.cpp index 2602105d..a3ab0b2e 100644 --- a/source/src/renderhud.cpp +++ b/source/src/renderhud.cpp @@ -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(); +} + diff --git a/source/src/rendertext.cpp b/source/src/rendertext.cpp index 2a40c244..e54e2eed 100644 --- a/source/src/rendertext.cpp +++ b/source/src/rendertext.cpp @@ -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); -} diff --git a/source/src/scoreboard.cpp b/source/src/scoreboard.cpp index c600b6bb..a7e8e617 100644 --- a/source/src/scoreboard.cpp +++ b/source/src/scoreboard.cpp @@ -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 scorelines; diff --git a/source/src/texture.cpp b/source/src/texture.cpp index 2b9a350b..7690f8bc 100644 --- a/source/src/texture.cpp +++ b/source/src/texture.cpp @@ -5,6 +5,8 @@ Texture *crosshair = NULL; hashtable 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); +} +