From 945dfff98820c2295f6dca64e4dd6075312b93e5 Mon Sep 17 00:00:00 2001 From: driAn Date: Fri, 18 Nov 2005 19:21:38 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@87 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- config/menus.cfg | 28 +++-- packages/models/vwep/grenade_static/skin.jpg | Bin 0 -> 16057 bytes packages/models/vwep/grenade_static/tris.md2 | Bin 0 -> 5724 bytes source/src/command.cpp | 3 +- source/src/cube.h | 2 +- source/src/menus.cpp | 102 ++++++++++++++++--- source/src/protos.h | 5 +- source/src/renderextras.cpp | 36 ++++--- source/src/rendergl.cpp | 7 +- source/src/rendermd2.cpp | 2 +- source/src/weapon.cpp | 29 +++--- 11 files changed, 155 insertions(+), 59 deletions(-) create mode 100644 packages/models/vwep/grenade_static/skin.jpg create mode 100644 packages/models/vwep/grenade_static/tris.md2 diff --git a/config/menus.cfg b/config/menus.cfg index ec507644..212c20b4 100755 --- a/config/menus.cfg +++ b/config/menus.cfg @@ -8,13 +8,16 @@ menuitem "Join Game" "servermenu" menuitem "Refresh Serverlist" "updatefrommaster" menuitem "Vote.." "showmenu gamemode" menuitem "Load Map.." "showmenu maps" +menuitem "Change Team" "showmenu team" menuitem "Disconnect" "disconnect" menuitem "Options.." "showmenu options" menuitem "Editing.." "showmenu editing" menuitem "about/credits/help" "showmenu about" menuitem "Quit" "quit" - +// menubg "textures/blah..." +// menumdl path frame range rotation-speed{0-100} scale{0-100} +// chmenumdl menuname newpath alias genmapitems [ alias n (listlen $arg1) @@ -38,8 +41,10 @@ genmapitems "ac_complex ac_mines ac_depot ac_desert" newmenu team -menuitem "Special Forces" -menuitem "Freedom Fighters" +menumdl playermodels/terrorist 0 1 50 10 +menuitem "Terrorists" "team 0" "chmenumdl team playermodels/terrorist 0 1 50 10" +menuitem "Counter Terrorists" "team 1" "chmenumdl team playermodels/counterterrorist 0 1 50 10" + newmenu gamemode @@ -236,17 +241,20 @@ menuitem "Equipment" "showmenu equipment" newmenu "primary" -menuitem "Mtp 57 Assault Rifle" "item 5;echo MK-77 Assault Rifle chosen" -menuitem "A-ARD/10 Submachine Gun" "item 3;echo A-ARD/10 Submachine Gun chosen" -menuitem "Precision Tech AD-81 Sniper Rifle" "item 4,echo Precision Tech AD-81 Sniper Rifle chosen" -menuitem "V-19 Combat Shotgun" "item 2;echo V-19 Combat Shotgun chosen" +//menumdl vwep/assault 0 1 40 60 +menuitem "Mtp 57 Assault Rifle" "item 5;echo MK-77 Assault Rifle chosen" // "chmenumdl primary vwep/assault 0 1 40 60" +menuitem "A-ARD/10 Submachine Gun" "item 3;echo A-ARD/10 Submachine Gun chosen" "chmenumdl primary vwep/subgun 0 1 40 60" +menuitem "Precision Tech AD-81 Sniper Rifle" "item 4,echo Precision Tech AD-81 Sniper Rifle chosen" "chmenumdl primary vwep/sniper 0 1 40 60" +menuitem "V-19 Combat Shotgun" "item 2;echo V-19 Combat Shotgun chosen" "chmenumdl primary vwep/shotgun 0 1 40 60" newmenu "secondary" -menuitem "Mk-77 Semi-Automatic Pistol" "item 1;echo MTP 57 Semi-Automatic Pistol Chosen" +menumdl vwep/semipistol 0 1 40 60 +menuitem "Mk-77 Semi-Automatic Pistol" "item 1;echo MTP 57 Semi-Automatic Pistol Chosen" newmenu "equipment" -menuitem "DR-17 HE-Grenade" "echo DR-17 HE-Grenade chosen" -menuitem "SN-Tech Kelvar Vest" "echo SN-Tech Kelvar Vest chosen" +menumdl vwep/grenade_static 0 1 40 80 +menuitem "DR-17 HE-Grenade" "echo DR-17 HE-Grenade chosen" "chmenumdl equipment vwep/grenade_static 0 1 40 80" +menuitem "SN-Tech Kelvar Vest" "echo SN-Tech Kelvar Vest chosen" "chmenumdl equipment pickups/kevlar 0 1 40 20" newmenu options diff --git a/packages/models/vwep/grenade_static/skin.jpg b/packages/models/vwep/grenade_static/skin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..466279ec5ffc2035b01de34f3a0bfb8656eac09a GIT binary patch literal 16057 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 I|GVD*3n>E)HUIzs literal 0 HcmV?d00001 diff --git a/packages/models/vwep/grenade_static/tris.md2 b/packages/models/vwep/grenade_static/tris.md2 new file mode 100644 index 0000000000000000000000000000000000000000..7292a80c0913525e672761802f66549b2914dffd GIT binary patch literal 5724 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[1]); break; case ARG_2STR: if(isdown) ((void (__cdecl *)(char *, char *))id->fun)(w[1], w[2]); break; case ARG_3STR: if(isdown) ((void (__cdecl *)(char *, char *, char*))id->fun)(w[1], w[2], w[3]); break; - case ARG_5STR: if(isdown) ((void (__cdecl *)(char *, char *, char*, char*, char*))id->fun)(w[1], w[2], w[3], w[4], w[5]); break; + case ARG_5STR: if(isdown) ((void (__cdecl *)(char *, char *, char*, char*, char*))id->fun)(w[1], w[2], w[3], w[4], w[5]); break; + case ARG_6STR: if(isdown) ((void (__cdecl *)(char *, char *, char*, char*, char*, char*))id->fun)(w[1], w[2], w[3], w[4], w[5], w[6]); break; case ARG_DOWN: ((void (__cdecl *)(bool))id->fun)(isdown); break; case ARG_DWN1: ((void (__cdecl *)(bool, char *))id->fun)(isdown, w[1]); break; case ARG_1EXP: if(isdown) val = ((int (__cdecl *)(int))id->fun)(execute(w[1])); break; diff --git a/source/src/cube.h b/source/src/cube.h index b7a1187f..0e270faf 100644 --- a/source/src/cube.h +++ b/source/src/cube.h @@ -305,7 +305,7 @@ enum // function signatures for script functions, see command.cpp { ARG_1INT, ARG_2INT, ARG_3INT, ARG_4INT, ARG_NONE, - ARG_1STR, ARG_2STR, ARG_3STR, ARG_5STR, + ARG_1STR, ARG_2STR, ARG_3STR, ARG_5STR, ARG_6STR, ARG_DOWN, ARG_DWN1, ARG_1EXP, ARG_2EXP, ARG_1EST, ARG_2EST, diff --git a/source/src/menus.cpp b/source/src/menus.cpp index 0a61a7de..cff6dc56 100644 --- a/source/src/menus.cpp +++ b/source/src/menus.cpp @@ -1,15 +1,20 @@ // menus.cpp: ingame menu system (also used for scores and serverlist) -#include "cube.h" +#include "cube.h" + +#define FIRSTMENU 90 -struct mitem { char *text, *action; }; +struct mitem { char *text, *action, *hoveraction; }; struct gmenu { char *name; vector items; int mwidth; - int menusel; + int menusel; + int tex; // (optional) bg tex + char *mdl; // (optional) md2 mdl + int frame, range, rotspeed, scale; }; vector menus; @@ -68,7 +73,7 @@ bool rendermenu() int h = (mdisp+2)*step; int y = (VIRTH-h)/2; int x = (VIRTW-w)/2; - blendbox(x-FONTH/2*3, y-FONTH, x+w+FONTH/2*3, y+h+FONTH, true); + blendbox(x-FONTH/2*3, y-FONTH, x+w+FONTH/2*3, y+h+FONTH, true, m.tex >= 0 ? FIRSTMENU + m.tex : -1); draw_text(title, x, y,2); y += FONTH*2; if(vmenu) @@ -82,13 +87,35 @@ bool rendermenu() y += step; }; return true; -}; +}; + +void rendermenumdl() // nasty s*** +{ + if(vmenu<0) { menustack.setsize(0); return false; }; + if(vmenu==1) refreshservers(); + gmenu &m = menus[vmenu]; + if(!m.mdl) return; + + glPushMatrix (); + + glTranslatef(player1->o.x, player1->o.z, player1->o.y); + glRotatef(player1->yaw+90+180, 0, -1, 0); + glRotatef(player1->pitch, 0, 0, 1); + + glTranslatef(2, 0, 0); + if(m.rotspeed) glRotatef(lastmillis/5.0f/100.0f*m.rotspeed, 0, 1, 0); + + rendermodel(m.mdl, m.frame, m.range, 0, 5.0f, 0, 0, 0, 0, 0, false, (float)(m.scale ? m.scale/25.0f : 1), 100, 0, 0); + glPopMatrix(); +} void newmenu(char *name) { gmenu &menu = menus.add(); menu.name = newstring(name); - menu.menusel = 0; + menu.menusel = 0; + menu.tex = -1; + menu.mdl = NULL; }; void menumanual(int m, int n, char *text) @@ -99,29 +126,77 @@ void menumanual(int m, int n, char *text) mitem.action = ""; } -void menuitem(char *text, char *action) +void menuitem(char *text, char *action, char *hoveraction) { gmenu &menu = menus.last(); mitem &mi = menu.items.add(); mi.text = newstring(text); - mi.action = action[0] ? newstring(action) : mi.text; + mi.action = action[0] ? newstring(action) : mi.text; + if(hoveraction) mi.hoveraction = newstring(hoveraction); + else mi.hoveraction = NULL; }; + +void menubg(char *tex) +{ + gmenu &menu = menus.last(); + int curmtex = 0; + loopv(menus) curmtex = max(curmtex, menus[i].tex); + if(curmtex>=100) return; + sprintf_sd(path)("packages/%s", tex); + int xs, ys; + if(installtex(FIRSTMENU + curmtex, path, xs, ys, false, true)) + menu.tex = curmtex; +}; + +void menumdl(char *mdl, char *frame, char *range, char *rotspeed, char *scale) +{ + if(!mdl || !frame || !range) return; + gmenu &menu = menus.last(); + menu.mdl = newstring(mdl, _MAXDEFSTR); + menu.frame = max(0, atoi(frame)); + menu.range = max(1, atoi(range)); + menu.rotspeed = max(0, min(atoi(rotspeed), 100)); + menu.scale = max(0, min(atoi(scale), 100)); +}; + +void chmenumdl(char *menu, char *mdl, char *frame, char *range, char *rotspeed, char *scale) +{ + if(!menu || !mdl) return; + loopv(menus) + { + gmenu &m = menus[i]; + if(strcmp(m.name, menu) == 0) + { + if(m.mdl) strcpy_s(m.mdl, mdl); + else m.mdl = newstring(mdl, _MAXDEFSTR); + m.frame = atoi(frame); + m.range = atoi(range); + m.rotspeed = max(0, min(atoi(rotspeed), 100)); + m.scale = max(0, min(atoi(scale), 100)); + return; + }; + }; +}; + -COMMAND(menuitem, ARG_2STR); +COMMAND(menuitem, ARG_3STR); COMMAND(showmenu, ARG_1STR); -COMMAND(newmenu, ARG_1STR); +COMMAND(newmenu, ARG_1STR); +COMMAND(menubg, ARG_1STR); +COMMAND(menumdl, ARG_5STR); +COMMAND(chmenumdl, ARG_6STR); bool menukey(int code, bool isdown) { if(vmenu<=0) return false; int menusel = menus[vmenu].menusel; if(isdown) - { + { + int oldmenusel = menusel; if(code==SDLK_ESCAPE) { menuset(-1); if(!menustack.empty()) menuset(menustack.pop()); - execute("musicvol 1"); return true; } else if(code==SDLK_UP || code==-4) menusel--; @@ -129,7 +204,8 @@ bool menukey(int code, bool isdown) int n = menus[vmenu].items.length(); if(menusel<0) menusel = n-1; else if(menusel>=n) menusel = 0; - menus[vmenu].menusel = menusel; + menus[vmenu].menusel = menusel; + if(menusel != oldmenusel)execute(menus[vmenu].items[menusel].hoveraction, true); } else { diff --git a/source/src/protos.h b/source/src/protos.h index 22ce90d1..a73d7ae1 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -26,7 +26,8 @@ extern void menuset(int menu); extern void menumanual(int m, int n, char *text); extern void sortmenu(int start, int num); extern bool menukey(int code, bool isdown); -extern void newmenu(char *name); +extern void newmenu(char *name); +extern void rendermenumdl(); // serverbrowser extern void addserver(char *servername); @@ -158,7 +159,7 @@ extern void newsphere(vec &o, float max, int type); extern void renderspheres(int time); extern void gl_drawhud(int w, int h, int curfps, int nquads, int curvert, bool underwater); extern void readdepth(int w, int h); -extern void blendbox(int x1, int y1, int x2, int y2, bool border); +extern void blendbox(int x1, int y1, int x2, int y2, bool border, int tex = -1); extern void damageblend(int n); extern void addshotline(dynent *d, vec &from, vec &to); extern void rendershotlines(); diff --git a/source/src/renderextras.cpp b/source/src/renderextras.cpp index 64df1bd8..e6fdcd35 100644 --- a/source/src/renderextras.cpp +++ b/source/src/renderextras.cpp @@ -42,25 +42,35 @@ void dot(int x, int y, float z) xtraverts += 4; }; -void blendbox(int x1, int y1, int x2, int y2, bool border) +void blendbox(int x1, int y1, int x2, int y2, bool border, int tex=-1) { glDepthMask(GL_FALSE); - glDisable(GL_TEXTURE_2D); - glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR); + glDisable(GL_TEXTURE_2D); + if(tex>=0) + { + glBindTexture(GL_TEXTURE_2D, tex); + glEnable(GL_TEXTURE_2D); + glDisable(GL_BLEND); + } + else + { + if(border) glColor3d(0.7, 0.7, 0.7); //glColor3d(0.5, 0.3, 0.4); + else glColor3d(1.0, 1.0, 1.0); + glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR); + }; glBegin(GL_QUADS); - if(border) glColor3d(0.7, 0.7, 0.7); //glColor3d(0.5, 0.3, 0.4); - else glColor3d(1.0, 1.0, 1.0); - glVertex2i(x1, y1); - glVertex2i(x2, y1); - glVertex2i(x2, y2); - glVertex2i(x1, y2); + glTexCoord2f(0, 0); glVertex2i(x1, y1); + glTexCoord2f(1, 0); glVertex2i(x2, y1); + glTexCoord2f(1, 1); glVertex2i(x2, y2); + glTexCoord2f(0, 1); glVertex2i(x1, y2); glEnd(); - glDisable(GL_BLEND); + glDisable(GL_BLEND); + if(tex>=0) glDisable(GL_TEXTURE_2D); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBegin(GL_POLYGON); glColor3d(0.6, 0.6, 0.6); //glColor3d(0.2, 0.7, 0.4); glVertex2i(x1, y1); - glVertex2i(x2, y1); + glVertex2i(x2, y1); glVertex2i(x2, y2); glVertex2i(x1, y2); glEnd(); @@ -391,7 +401,7 @@ void gl_drawhud(int w, int h, int curfps, int nquads, int curvert, bool underwat int r = 64; if(g>2) { g -= 3; r = 128; }; - if(player1->ammo[player1->gunselect] < magsize(player1->gunselect)) + if(!player1->mag[player1->gunselect] && player1->gunselect != GUN_KNIFE && player1->gunselect != GUN_GRENADE) { glEnable(GL_BLEND); drawicon((float)(g*64), (float)r, 1220, 1650); @@ -483,7 +493,7 @@ void renderphysents() loopv(physents) { physent *d = physents[i]; - if(d && d->throwed) rendermodel("vwep/grenade", 173, 1, 0, 0.2f, d->o.x, d->o.z, d->o.y, 0, 0, false, 2.0f, 100, 0, 0); + if(d && d->throwed) rendermodel("vwep/grenade_static", 0, 1, 0, 0, d->o.x, d->o.z, d->o.y, d->yaw, d->pitch, false, 2.0f, 100.0f, 0, 0); }; }; diff --git a/source/src/rendergl.cpp b/source/src/rendergl.cpp index 96bcc46f..be0d844f 100644 --- a/source/src/rendergl.cpp +++ b/source/src/rendergl.cpp @@ -78,7 +78,7 @@ bool installtex(int tnum, char *texname, int &xs, int &ys, bool clamp, bool high glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, clamp ? GL_CLAMP_TO_EDGE : GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, clamp ? GL_CLAMP_TO_EDGE : GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, highqual ? GL_LINEAR : GL_LINEAR_MIPMAP_LINEAR); //NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, highqual ? GL_LINEAR_MIPMAP_NEAREST : GL_LINEAR_MIPMAP_LINEAR); //NEAREST); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); xs = s->w; ys = s->h; @@ -106,7 +106,7 @@ int texy[MAXTEX]; string texname[MAXTEX]; int curtex = 0; const int FIRSTTEX = 100; // opengl id = loaded id + FIRSTTEX -// std 1+, sky 14+, mdls 20+ +// std 1+, sky 14+, md3's 30+,md2's 40+, menu 90+ const int MAXFRAMES = 2; // increase to allow more complex shader defs int mapping[256][MAXFRAMES]; // ( cube texture, frame ) -> ( opengl id, name ) @@ -295,7 +295,8 @@ void drawhudgun(int w, int h, float aspect, int farplane) gluPerspective((float)100.0f*h/w, aspect, 0.3f, farplane); // fov fixed at 100° glMatrixMode(GL_MODELVIEW); - rendermd3gun(); + rendermd3gun(); + rendermenumdl(); // lazy bastard glMatrixMode(GL_PROJECTION); glLoadIdentity(); diff --git a/source/src/rendermd2.cpp b/source/src/rendermd2.cpp index 80a70d03..cad941eb 100644 --- a/source/src/rendermd2.cpp +++ b/source/src/rendermd2.cpp @@ -249,7 +249,7 @@ void rendermodel(char *mdl, int frame, int range, int tex, float rad, float x, f { md2 *m = loadmodel(mdl); - if(isoccluded(player1->o.x, player1->o.y, x-rad, z-rad, rad*2)) return; + //if(isoccluded(player1->o.x, player1->o.y, x-rad, z-rad, rad*2)) return; delayedload(m); diff --git a/source/src/weapon.cpp b/source/src/weapon.cpp index 30bcc5c5..74a71576 100644 --- a/source/src/weapon.cpp +++ b/source/src/weapon.cpp @@ -308,7 +308,7 @@ extern float rad(float x); bool nade_activated = false; physent *curnade; -void thrownade(dynent *d, vec &to, dynent *nade = NULL, int nadesec = 0) +void thrownade(dynent *d, vec &to, physent *nade = NULL, int nadesec = 0) { physent *p; if(nade) p = nade; @@ -356,21 +356,19 @@ void thrownade(dynent *d, vec &to, dynent *nade = NULL, int nadesec = 0) p->lifetime = 3000; p->o = d->o; - p->o.z += d->eyeheight; + +// float speed = sin(rad((d->pitch+90)/2.0f)); + p->vel.z = sin(rad(d->pitch)); + float speed = cos(rad(d->pitch)); + p->vel.x = sin(rad(d->yaw))*speed; + p->vel.y = -cos(rad(d->yaw))*speed; - p->vel.x = sin(rad(d->yaw)); - p->vel.y = -cos(rad(d->yaw)); - p->vel.z = 0; - - //float speed = min(135, d->pitch+45)/135; - float speed = sin(rad((d->pitch+90)/2)); - p->vel.x *= speed; - p->vel.y *= speed; - - p->vel.z = speed; -// p->vel.z = (d->pitch+90)/180*2.5f; - //p->vel.z = cos(rad(d->pitch+90)); - //vmul(p->vel, 2.0f); + vmul(p->vel, 1.5f); + + vec throwdir = p->vel; + vmul(throwdir, d->radius); + vadd(p->o, throwdir); + vadd(p->o, throwdir); if(!nade) // add new one { @@ -597,6 +595,7 @@ void shoot(dynent *d, vec &targ) if(d->gunselect==GUN_SHOTGUN) createrays(from, to); //if(d->quadmillis && attacktime>200) playsoundc(S_ITEMPUP); + shootv(d->gunselect, from, to, d, 0); addmsg(1, 9, SV_SHOT, d->gunselect, (int)(from.x*DMF), (int)(from.y*DMF), (int)(from.z*DMF), (int)(to.x*DMF), (int)(to.y*DMF), (int)(to.z*DMF), (int) grenade_throw ? lastmillis-curnade->millis : 0 ); d->gunwait = guns[d->gunselect].attackdelay;