From 6bafdb0037253287a43cfa52b097b59e3bce8249 Mon Sep 17 00:00:00 2001 From: ac-stef Date: Tue, 16 May 2017 17:50:00 +0200 Subject: [PATCH] allow particle type names in md2emit and md3emit md[2|3]emit particle type may now be numeric 0..19 or one of SPARK, SMOKE, ECLOSEST, BLOOD, DEMOTRACK, FIREBALL, SHOTLINE, BULLETHOLE, BLOODSTAIN, SCORCH, HUDMUZZLEFLASH, MUZZLEFLASH, ELIGHT, ESPAWN, EAMMO, EPICKUP, EMODEL, ECARROT, ELADDER, EFLAG also: cleanup DOCREF md2emit md3emit --- packages/models/weapons/assault/md3.cfg | 2 +- packages/models/weapons/assault/world/md2.cfg | 2 +- packages/models/weapons/carbine/md3.cfg | 2 +- packages/models/weapons/carbine/world/md2.cfg | 2 +- packages/models/weapons/pistol/md3.cfg | 2 +- packages/models/weapons/pistol/world/md2.cfg | 2 +- packages/models/weapons/shotgun/md3.cfg | 2 +- packages/models/weapons/shotgun/world/md2.cfg | 2 +- packages/models/weapons/sniper/md3.cfg | 2 +- packages/models/weapons/sniper/world/md2.cfg | 2 +- packages/models/weapons/subgun/md3.cfg | 2 +- packages/models/weapons/subgun/world/md2.cfg | 2 +- source/src/bot/botmanager.cpp | 2 +- source/src/md2.h | 13 +++++++------ source/src/md3.h | 17 +++++++++-------- source/src/protos.h | 7 ++++--- source/src/rendermodel.cpp | 10 +++++----- source/src/renderparticles.cpp | 7 ++++--- 18 files changed, 42 insertions(+), 38 deletions(-) diff --git a/packages/models/weapons/assault/md3.cfg b/packages/models/weapons/assault/md3.cfg index 07716038..d8b71a43 100644 --- a/packages/models/weapons/assault/md3.cfg +++ b/packages/models/weapons/assault/md3.cfg @@ -4,4 +4,4 @@ md3skin hands ../knife/skin_hands.jpg md3anim "gun idle" 0 1 md3anim "gun shoot" 8 8 md3anim "gun reload" 0 1 -md3emit tag_muzzle 10 50 75 +md3emit tag_muzzle HUDMUZZLEFLASH 50 75 diff --git a/packages/models/weapons/assault/world/md2.cfg b/packages/models/weapons/assault/world/md2.cfg index a1a3070e..c2c50a13 100644 --- a/packages/models/weapons/assault/world/md2.cfg +++ b/packages/models/weapons/assault/world/md2.cfg @@ -3,5 +3,5 @@ mdltrans 2 2 24 mdlshadowdist 32 md2tag tag_muzzle X -md2emit tag_muzzle 11 50 75 +md2emit tag_muzzle MUZZLEFLASH 50 75 diff --git a/packages/models/weapons/carbine/md3.cfg b/packages/models/weapons/carbine/md3.cfg index f9111a21..37d0d167 100644 --- a/packages/models/weapons/carbine/md3.cfg +++ b/packages/models/weapons/carbine/md3.cfg @@ -4,4 +4,4 @@ md3skin hands ../knife/skin_hands.jpg md3anim "gun idle" 0 1 md3anim "gun shoot" 8 50 md3anim "gun reload" 0 1 -md3emit tag_muzzle 10 50 50 +md3emit tag_muzzle HUDMUZZLEFLASH 50 50 diff --git a/packages/models/weapons/carbine/world/md2.cfg b/packages/models/weapons/carbine/world/md2.cfg index 46cfd068..d094a1aa 100644 --- a/packages/models/weapons/carbine/world/md2.cfg +++ b/packages/models/weapons/carbine/world/md2.cfg @@ -3,5 +3,5 @@ mdltrans 2 2 24 mdlshadowdist 32 md2tag tag_muzzle X -md2emit tag_muzzle 11 50 50 +md2emit tag_muzzle MUZZLEFLASH 50 50 diff --git a/packages/models/weapons/pistol/md3.cfg b/packages/models/weapons/pistol/md3.cfg index 4e30d76b..ea903096 100644 --- a/packages/models/weapons/pistol/md3.cfg +++ b/packages/models/weapons/pistol/md3.cfg @@ -4,4 +4,4 @@ md3skin hands ../knife/skin_hands.jpg md3anim "gun idle" 0 1 md3anim "gun shoot" 8 8 md3anim "gun reload" 0 1 -md3emit tag_muzzle 10 50 25 +md3emit tag_muzzle HUDMUZZLEFLASH 50 25 diff --git a/packages/models/weapons/pistol/world/md2.cfg b/packages/models/weapons/pistol/world/md2.cfg index 30bdea3d..a3f98b50 100644 --- a/packages/models/weapons/pistol/world/md2.cfg +++ b/packages/models/weapons/pistol/world/md2.cfg @@ -3,5 +3,5 @@ mdltrans 2 2 24 mdlshadowdist 32 md2tag tag_muzzle X -md2emit tag_muzzle 11 50 25 +md2emit tag_muzzle MUZZLEFLASH 50 25 diff --git a/packages/models/weapons/shotgun/md3.cfg b/packages/models/weapons/shotgun/md3.cfg index 14b858e0..62ee5b09 100644 --- a/packages/models/weapons/shotgun/md3.cfg +++ b/packages/models/weapons/shotgun/md3.cfg @@ -4,4 +4,4 @@ md3skin hands ../knife/skin_hands.jpg md3anim "gun idle" 0 1 md3anim "gun shoot" 8 25 md3anim "gun reload" 0 1 -md3emit tag_muzzle 10 50 75 +md3emit tag_muzzle HUDMUZZLEFLASH 50 75 diff --git a/packages/models/weapons/shotgun/world/md2.cfg b/packages/models/weapons/shotgun/world/md2.cfg index a1a3070e..c2c50a13 100644 --- a/packages/models/weapons/shotgun/world/md2.cfg +++ b/packages/models/weapons/shotgun/world/md2.cfg @@ -3,5 +3,5 @@ mdltrans 2 2 24 mdlshadowdist 32 md2tag tag_muzzle X -md2emit tag_muzzle 11 50 75 +md2emit tag_muzzle MUZZLEFLASH 50 75 diff --git a/packages/models/weapons/sniper/md3.cfg b/packages/models/weapons/sniper/md3.cfg index 1cf72c3e..22e8103a 100644 --- a/packages/models/weapons/sniper/md3.cfg +++ b/packages/models/weapons/sniper/md3.cfg @@ -4,4 +4,4 @@ md3skin hands ../knife/skin_hands.jpg md3anim "gun idle" 0 1 md3anim "gun shoot" 8 50 md3anim "gun reload" 0 1 -md3emit tag_muzzle 10 50 100 +md3emit tag_muzzle HUDMUZZLEFLASH 50 100 diff --git a/packages/models/weapons/sniper/world/md2.cfg b/packages/models/weapons/sniper/world/md2.cfg index 20ff4f36..20bda7fa 100644 --- a/packages/models/weapons/sniper/world/md2.cfg +++ b/packages/models/weapons/sniper/world/md2.cfg @@ -3,5 +3,5 @@ mdltrans 2 2 24 mdlshadowdist 32 md2tag tag_muzzle X -md2emit tag_muzzle 11 50 100 +md2emit tag_muzzle MUZZLEFLASH 50 100 diff --git a/packages/models/weapons/subgun/md3.cfg b/packages/models/weapons/subgun/md3.cfg index c7210427..a068f966 100644 --- a/packages/models/weapons/subgun/md3.cfg +++ b/packages/models/weapons/subgun/md3.cfg @@ -4,4 +4,4 @@ md3skin hands ../knife/skin_hands.jpg md3anim "gun idle" 0 1 md3anim "gun shoot" 8 8 md3anim "gun reload" 0 1 -md3emit tag_muzzle 10 50 55 +md3emit tag_muzzle HUDMUZZLEFLASH 50 55 diff --git a/packages/models/weapons/subgun/world/md2.cfg b/packages/models/weapons/subgun/world/md2.cfg index db792557..9f7bf5fb 100644 --- a/packages/models/weapons/subgun/world/md2.cfg +++ b/packages/models/weapons/subgun/world/md2.cfg @@ -3,5 +3,5 @@ mdltrans 2 2 24 mdlshadowdist 32 md2tag tag_muzzle X -md2emit tag_muzzle 11 50 55 +md2emit tag_muzzle MUZZLEFLASH 50 55 diff --git a/source/src/bot/botmanager.cpp b/source/src/bot/botmanager.cpp index 1a360c70..b2dd9f41 100644 --- a/source/src/bot/botmanager.cpp +++ b/source/src/bot/botmanager.cpp @@ -286,7 +286,7 @@ void CBotManager::RenderBots() { if (bots[i] && (bots[i] != m_pBotToView)) { - renderclient(bots[i]); + renderclientp(bots[i]); } } } diff --git a/source/src/md2.h b/source/src/md2.h index 1f369921..f96456a0 100644 --- a/source/src/md2.h +++ b/source/src/md2.h @@ -282,6 +282,7 @@ void md2anim(char *anim, int *frame, int *range, float *speed) if(num<0) { conoutf("could not find animation %s", anim); flagmapconfigerror(LWW_MODELERR); return; } loadingmd2->parts.last()->setanim(num, *frame, *range, *speed); } +COMMAND(md2anim, "siif"); void md2tag(char *name, char *vert1, char *vert2, char *vert3, char *vert4) { @@ -321,14 +322,14 @@ void md2tag(char *name, char *vert1, char *vert2, char *vert3, char *vert4) } if(!mdl.gentag(name, indexes, numverts)) { conoutf("could not generate tag %s", name); flagmapconfigerror(LWW_MODELERR); return; } } +COMMAND(md2tag, "sssss"); -void md2emit(char *tag, int *type, int *arg1, int *arg2) +void md2emit(char *tag, char *_type, int *arg1, int *arg2) { if(!loadingmd2 || loadingmd2->parts.empty()) { conoutf("not loading an md2"); flagmapconfigerror(LWW_MODELERR); return; }; + int type = getlistindex(_type, particletypenames, true, -1); + if(type < 0 || type >= MAXPARTYPES) { conoutf("unknown particle type %s", _type); flagmapconfigerror(LWW_MODELERR); return; }; md2::part &mdl = *loadingmd2->parts.last(); - if(!mdl.addemitter(tag, *type, *arg1, *arg2)) { conoutf("could not find tag %s", tag); flagmapconfigerror(LWW_MODELERR); return; } + if(!mdl.addemitter(tag, type, *arg1, *arg2)) { conoutf("could not find tag %s", tag); flagmapconfigerror(LWW_MODELERR); return; } } - -COMMAND(md2anim, "siif"); -COMMAND(md2tag, "sssss"); -COMMAND(md2emit, "siii"); +COMMAND(md2emit, "ssii"); diff --git a/source/src/md3.h b/source/src/md3.h index 067a4be6..076be876 100644 --- a/source/src/md3.h +++ b/source/src/md3.h @@ -262,6 +262,7 @@ void md3load(char *model) mdl.index = loadingmd3->parts.length()-1; if(!mdl.load(path(filename))) { conoutf("could not load %s", filename); flagmapconfigerror(LWW_MODELERR); } // ignore failure } +COMMAND(md3load, "s"); void md3skin(char *objname, char *skin) { @@ -287,6 +288,7 @@ void md3skin(char *objname, char *skin) flagmapconfigerror(LWW_MODELERR); } } +COMMAND(md3skin, "ss"); void md3anim(char *anim, int *startframe, int *range, float *speed) { @@ -295,6 +297,7 @@ void md3anim(char *anim, int *startframe, int *range, float *speed) if(num<0) { conoutf("could not find animation %s", anim); flagmapconfigerror(LWW_MODELERR); return; }; loadingmd3->parts.last()->setanim(num, *startframe, *range, *speed); } +COMMAND(md3anim, "siif"); void md3link(int *parent, int *child, char *tagname) { @@ -302,16 +305,14 @@ void md3link(int *parent, int *child, char *tagname) if(!loadingmd3->parts.inrange(*parent) || !loadingmd3->parts.inrange(*child)) { conoutf("no models loaded to link"); flagmapconfigerror(LWW_MODELERR); return; } if(!loadingmd3->parts[*parent]->link(loadingmd3->parts[*child], tagname)) { conoutf("could not link model %s", loadingmd3->loadname); flagmapconfigerror(LWW_MODELERR); } } +COMMAND(md3link, "iis"); -void md3emit(char *tag, int *type, int *arg1, int *arg2) +void md3emit(char *tag, char *_type, int *arg1, int *arg2) { if(!loadingmd3 || loadingmd3->parts.empty()) { conoutf("not loading an md3"); flagmapconfigerror(LWW_MODELERR); return; }; + int type = getlistindex(_type, particletypenames, true, -1); + if(type < 0 || type >= MAXPARTYPES) { conoutf("unknown particle type %s", _type); flagmapconfigerror(LWW_MODELERR); return; }; md3::part &mdl = *loadingmd3->parts.last(); - if(!mdl.addemitter(tag, *type, *arg1, *arg2)) { conoutf("could not find tag %s", tag); flagmapconfigerror(LWW_MODELERR); return; } + if(!mdl.addemitter(tag, type, *arg1, *arg2)) { conoutf("could not find tag %s", tag); flagmapconfigerror(LWW_MODELERR); return; } } - -COMMAND(md3load, "s"); -COMMAND(md3skin, "ss"); -COMMAND(md3anim, "siif"); -COMMAND(md3link, "iis"); -COMMAND(md3emit, "siii"); +COMMAND(md3emit, "ssii"); diff --git a/source/src/protos.h b/source/src/protos.h index 8ef2ecc4..c43951f6 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -818,7 +818,8 @@ enum PART_EMODEL, PART_ECARROT, PART_ELADDER, - PART_EFLAG + PART_EFLAG, + MAXPARTYPES }; extern void particleinit(); @@ -832,8 +833,8 @@ extern void particle_fireball(int type, const vec &o); extern void addshotline(dynent *d, const vec &from, const vec &to); extern bool addbullethole(dynent *d, const vec &from, const vec &to, float radius = 1, bool noisy = true); extern bool addscorchmark(vec &o, float radius = 7); - extern void render_particles(int time, int typemask = ~0); +extern const char *particletypenames[MAXPARTYPES + 1]; // worldio enum { LWW_ENTATTROVERFLOW = 0x1, LWW_DECODEERR = 0x10, LWW_WORLDERROR = 0x100, LWW_MISSINGMEDIA = 0x1000, LWW_CONFIGERR = 0x10000, LWW_MODELERR = 0x100000, LWW_SCRIPTERR = 0x1000000 }; @@ -907,7 +908,7 @@ extern void preload_entmodels(); extern void preload_hudguns(); extern bool preload_mapmodels(bool trydl = false); extern void renderclients(); -extern void renderclient(playerent *d); +extern void renderclientp(playerent *d); extern void renderclient(playerent *d, const char *mdlname, const char *vwepname, int tex = 0); extern void updateclientname(playerent *d); extern void updatemapmodeldependencies(); diff --git a/source/src/rendermodel.cpp b/source/src/rendermodel.cpp index 5dfb1672..b952f106 100644 --- a/source/src/rendermodel.cpp +++ b/source/src/rendermodel.cpp @@ -1063,7 +1063,7 @@ void updateclientname(playerent *d) d->skin_rvsf = getclientskin(d->name, "_rvsf"); } -void renderclient(playerent *d) +void renderclientp(playerent *d) { if(!d) return; int team = team_base(d->team); @@ -1079,10 +1079,10 @@ void renderclient(playerent *d) formatstring(skin)("%s/custom/%s.jpg", skinbase, cs); else { - if(!m_teammode || !teamdisplaymode) formatstring(skin)("%s/%s/%02i.jpg", skinbase, teamname, skinid); + if(!m_teammode || !teamdisplaymode) formatstring(skin)("%s/%s/%02d.jpg", skinbase, teamname, skinid); else switch(teamdisplaymode) { - case 1: formatstring(skin)("%s/%s/%02i_%svest.jpg", skinbase, teamname, skinid, team ? "blue" : "red"); break; + case 1: formatstring(skin)("%s/%s/%02d_%svest.jpg", skinbase, teamname, skinid, team ? "blue" : "red"); break; case 2: default: formatstring(skin)("%s/%s/%s.jpg", skinbase, teamname, team ? "blue" : "red"); break; } } @@ -1095,8 +1095,8 @@ void renderclient(playerent *d) void renderclients() { playerent *d; - loopv(players) if((d = players[i]) && d->state!=CS_SPAWNING && d->state!=CS_SPECTATE && (!player1->isspectating() || player1->spectatemode != SM_FOLLOW1ST || player1->followplayercn != i)) renderclient(d); - if(player1->state==CS_DEAD || (reflecting && !refracting)) renderclient(player1); + loopv(players) if((d = players[i]) && d->state!=CS_SPAWNING && d->state!=CS_SPECTATE && (!player1->isspectating() || player1->spectatemode != SM_FOLLOW1ST || player1->followplayercn != i)) renderclientp(d); + if(player1->state==CS_DEAD || (reflecting && !refracting)) renderclientp(player1); } void loadallmapmodels() // try to find all mapmodels in packages/models/mapmodels diff --git a/source/src/renderparticles.cpp b/source/src/renderparticles.cpp index efb37a96..845b0436 100644 --- a/source/src/renderparticles.cpp +++ b/source/src/renderparticles.cpp @@ -184,8 +184,6 @@ void cleanupexplosion() } } -#define MAXPARTYPES 20 - struct particle { vec o, d; int fade, type; int millis; particle *next; }; particle *parlist[MAXPARTYPES], *parempty = NULL; @@ -248,7 +246,10 @@ void newparticle(const vec &o, const vec &d, int fade, int type) parlist[type] = p; } -static struct parttype { int type; float r, g, b; int gr, tex; float sz; } parttypes[] = +const char *particletypenames[MAXPARTYPES + 1] = { "SPARK", "SMOKE", "ECLOSEST", "BLOOD", "DEMOTRACK", "FIREBALL", "SHOTLINE", "BULLETHOLE", "BLOODSTAIN", "SCORCH", // 0..9 + "HUDMUZZLEFLASH", "MUZZLEFLASH", "ELIGHT", "ESPAWN", "EAMMO", "EPICKUP", "EMODEL", "ECARROT", "ELADDER", "EFLAG", "" }; // 10..19 + +static struct parttype { int type; float r, g, b; int gr, tex; float sz; } parttypes[MAXPARTYPES] = { { PT_PART, 0.4f, 0.4f, 0.4f, 2, 0, 0.06f }, // yellow: sparks { PT_PART, 1.0f, 1.0f, 1.0f, 20, 1, 0.15f }, // grey: small smoke