summaryrefslogtreecommitdiff
path: root/src/fpsgame/entities.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/fpsgame/entities.cpp')
-rw-r--r--src/fpsgame/entities.cpp307
1 files changed, 8 insertions, 299 deletions
diff --git a/src/fpsgame/entities.cpp b/src/fpsgame/entities.cpp
index c35a0d1..f199c11 100644
--- a/src/fpsgame/entities.cpp
+++ b/src/fpsgame/entities.cpp
@@ -14,27 +14,10 @@ namespace entities
{
if(ver <= 30) switch(e.type)
{
- case FLAG:
- case MONSTER:
case TELEDEST:
- case RESPAWNPOINT:
- case BOX:
- case BARREL:
- case PLATFORM:
- case ELEVATOR:
e.attr1 = (int(e.attr1)+180)%360;
break;
}
- if(ver <= 31) switch(e.type)
- {
- case BOX:
- case BARREL:
- case PLATFORM:
- case ELEVATOR:
- int yaw = (int(e.attr1)%360 + 360)%360 + 7;
- e.attr1 = yaw - yaw%15;
- break;
- }
}
#ifndef STANDALONE
@@ -99,9 +82,6 @@ namespace entities
case I_HEALTH: case I_BOOST: case I_GREENARMOUR: case I_YELLOWARMOUR: case I_QUAD:
if(m_noitems) continue;
break;
- case CARROT: case RESPAWNPOINT:
- if(!m_classicsp) continue;
- break;
}
const char *mdl = entmdlname(i);
if(!mdl) continue;
@@ -129,10 +109,6 @@ namespace entities
int revs = 10;
switch(e.type)
{
- case CARROT:
- case RESPAWNPOINT:
- if(e.attr2) revs = 1;
- break;
case TELEPORT:
if(e.attr2 < 0) continue;
break;
@@ -204,7 +180,7 @@ namespace entities
if(ents.inrange(tp) && ents[tp]->type == TELEPORT)
{
extentity &e = *ents[tp];
- if(e.attr4 >= 0)
+ if(e.attr4 >= 0)
{
int snd = S_TELEPORT, flags = 0;
if(e.attr4 > 0) { snd = e.attr4; flags = SND_MAP; }
@@ -307,13 +283,6 @@ namespace entities
break;
}
- case RESPAWNPOINT:
- if(!m_classicsp || d!=player1 || n==respawnent) break;
- respawnent = n;
- conoutf(CON_GAMEINFO, "\f2respawn point set!");
- playsound(S_V_RESPAWNPOINT);
- break;
-
case JUMPPAD:
{
if(d->lastpickup==e->type && lastmillis-d->lastpickupmillis<300) break;
@@ -339,7 +308,7 @@ namespace entities
{
extentity &e = *ents[i];
if(e.type==NOTUSED) continue;
- if((!e.spawned() || e.nopickup()) && e.type!=TELEPORT && e.type!=JUMPPAD && e.type!=RESPAWNPOINT) continue;
+ if((!e.spawned() || e.nopickup()) && e.type!=TELEPORT && e.type!=JUMPPAD) continue;
float dist = e.o.dist(o);
if(dist<(e.type==TELEPORT ? 16 : 12)) trypickup(i, d);
}
@@ -377,7 +346,7 @@ namespace entities
extentity *e = ents[i];
if(e->type>=I_SHELLS && e->type<=I_QUAD && (!m_noammo || e->type<I_SHELLS || e->type>I_CARTRIDGES))
{
- e->setspawned(force || m_sp || !server::delayspawn(e->type));
+ e->setspawned(force || !server::delayspawn(e->type));
e->clearnopickup();
}
}
@@ -385,244 +354,17 @@ namespace entities
void setspawn(int i, bool on) { if(ents.inrange(i)) { extentity *e = ents[i]; e->setspawned(on); e->clearnopickup(); } }
- extentity *newentity() { return new fpsentity(); }
- void deleteentity(extentity *e) { delete (fpsentity *)e; }
+ extentity *newentity() { return new extentity(); }
+ void deleteentity(extentity *e) { delete e; }
void clearents()
{
while(ents.length()) deleteentity(ents.pop());
}
- enum
- {
- TRIG_COLLIDE = 1<<0,
- TRIG_TOGGLE = 1<<1,
- TRIG_ONCE = 0<<2,
- TRIG_MANY = 1<<2,
- TRIG_DISAPPEAR = 1<<3,
- TRIG_AUTO_RESET = 1<<4,
- TRIG_RUMBLE = 1<<5,
- TRIG_LOCKED = 1<<6,
- TRIG_ENDSP = 1<<7
- };
-
- static const int NUMTRIGGERTYPES = 32;
-
- static const int triggertypes[NUMTRIGGERTYPES] =
- {
- -1,
- TRIG_ONCE, // 1
- TRIG_RUMBLE, // 2
- TRIG_TOGGLE, // 3
- TRIG_TOGGLE | TRIG_RUMBLE, // 4
- TRIG_MANY, // 5
- TRIG_MANY | TRIG_RUMBLE, // 6
- TRIG_MANY | TRIG_TOGGLE, // 7
- TRIG_MANY | TRIG_TOGGLE | TRIG_RUMBLE, // 8
- TRIG_COLLIDE | TRIG_TOGGLE | TRIG_RUMBLE, // 9
- TRIG_COLLIDE | TRIG_TOGGLE | TRIG_AUTO_RESET | TRIG_RUMBLE, // 10
- TRIG_COLLIDE | TRIG_TOGGLE | TRIG_LOCKED | TRIG_RUMBLE, // 11
- TRIG_DISAPPEAR, // 12
- TRIG_DISAPPEAR | TRIG_RUMBLE, // 13
- TRIG_DISAPPEAR | TRIG_COLLIDE | TRIG_LOCKED, // 14
- -1 /* reserved 15 */,
- -1 /* reserved 16 */,
- -1 /* reserved 17 */,
- -1 /* reserved 18 */,
- -1 /* reserved 19 */,
- -1 /* reserved 20 */,
- -1 /* reserved 21 */,
- -1 /* reserved 22 */,
- -1 /* reserved 23 */,
- -1 /* reserved 24 */,
- -1 /* reserved 25 */,
- -1 /* reserved 26 */,
- -1 /* reserved 27 */,
- -1 /* reserved 28 */,
- TRIG_DISAPPEAR | TRIG_RUMBLE | TRIG_ENDSP, // 29
- -1 /* reserved 30 */,
- -1 /* reserved 31 */,
- };
-
- #define validtrigger(type) (triggertypes[(type) & (NUMTRIGGERTYPES-1)]>=0)
- #define checktriggertype(type, flag) (triggertypes[(type) & (NUMTRIGGERTYPES-1)] & (flag))
-
- static inline void cleartriggerflags(extentity &e)
- {
- e.flags &= ~(EF_ANIM | EF_NOVIS | EF_NOSHADOW | EF_NOCOLLIDE);
- }
-
- static inline void setuptriggerflags(fpsentity &e)
- {
- cleartriggerflags(e);
- e.flags |= EF_ANIM;
- if(checktriggertype(e.attr3, TRIG_COLLIDE|TRIG_DISAPPEAR)) e.flags |= EF_NOSHADOW;
- if(!checktriggertype(e.attr3, TRIG_COLLIDE)) e.flags |= EF_NOCOLLIDE;
- switch(e.triggerstate)
- {
- case TRIGGERING:
- if(checktriggertype(e.attr3, TRIG_COLLIDE) && lastmillis-e.lasttrigger >= 500) e.flags |= EF_NOCOLLIDE;
- break;
- case TRIGGERED:
- if(checktriggertype(e.attr3, TRIG_COLLIDE)) e.flags |= EF_NOCOLLIDE;
- break;
- case TRIGGER_DISAPPEARED:
- e.flags |= EF_NOVIS | EF_NOCOLLIDE;
- break;
- }
- }
-
- void resettriggers()
- {
- loopv(ents)
- {
- fpsentity &e = *(fpsentity *)ents[i];
- if(e.type != ET_MAPMODEL || !validtrigger(e.attr3)) continue;
- e.triggerstate = TRIGGER_RESET;
- e.lasttrigger = 0;
- setuptriggerflags(e);
- }
- }
-
- void unlocktriggers(int tag, int oldstate = TRIGGER_RESET, int newstate = TRIGGERING)
- {
- loopv(ents)
- {
- fpsentity &e = *(fpsentity *)ents[i];
- if(e.type != ET_MAPMODEL || !validtrigger(e.attr3)) continue;
- if(e.attr4 == tag && e.triggerstate == oldstate && checktriggertype(e.attr3, TRIG_LOCKED))
- {
- if(newstate == TRIGGER_RESETTING && checktriggertype(e.attr3, TRIG_COLLIDE) && overlapsdynent(e.o, 20)) continue;
- e.triggerstate = newstate;
- e.lasttrigger = lastmillis;
- if(checktriggertype(e.attr3, TRIG_RUMBLE)) playsound(S_RUMBLE, &e.o);
- }
- }
- }
-
- ICOMMAND(trigger, "ii", (int *tag, int *state),
- {
- if(*state) unlocktriggers(*tag);
- else unlocktriggers(*tag, TRIGGERED, TRIGGER_RESETTING);
- });
-
- VAR(triggerstate, -1, 0, 1);
-
- void doleveltrigger(int trigger, int state)
- {
- defformatstring(aliasname, "level_trigger_%d", trigger);
- if(identexists(aliasname))
- {
- triggerstate = state;
- execident(aliasname);
- }
- }
-
- void checktriggers()
- {
- if(player1->state != CS_ALIVE) return;
- vec o = player1->feetpos();
- loopv(ents)
- {
- fpsentity &e = *(fpsentity *)ents[i];
- if(e.type != ET_MAPMODEL || !validtrigger(e.attr3)) continue;
- switch(e.triggerstate)
- {
- case TRIGGERING:
- case TRIGGER_RESETTING:
- if(lastmillis-e.lasttrigger>=1000)
- {
- if(e.attr4)
- {
- if(e.triggerstate == TRIGGERING) unlocktriggers(e.attr4);
- else unlocktriggers(e.attr4, TRIGGERED, TRIGGER_RESETTING);
- }
- if(checktriggertype(e.attr3, TRIG_DISAPPEAR)) e.triggerstate = TRIGGER_DISAPPEARED;
- else if(e.triggerstate==TRIGGERING && checktriggertype(e.attr3, TRIG_TOGGLE)) e.triggerstate = TRIGGERED;
- else e.triggerstate = TRIGGER_RESET;
- }
- setuptriggerflags(e);
- break;
- case TRIGGER_RESET:
- if(e.lasttrigger)
- {
- if(checktriggertype(e.attr3, TRIG_AUTO_RESET|TRIG_MANY|TRIG_LOCKED) && e.o.dist(o)-player1->radius>=(checktriggertype(e.attr3, TRIG_COLLIDE) ? 20 : 12))
- e.lasttrigger = 0;
- break;
- }
- else if(e.o.dist(o)-player1->radius>=(checktriggertype(e.attr3, TRIG_COLLIDE) ? 20 : 12)) break;
- else if(checktriggertype(e.attr3, TRIG_LOCKED))
- {
- if(!e.attr4) break;
- doleveltrigger(e.attr4, -1);
- e.lasttrigger = lastmillis;
- break;
- }
- e.triggerstate = TRIGGERING;
- e.lasttrigger = lastmillis;
- setuptriggerflags(e);
- if(checktriggertype(e.attr3, TRIG_RUMBLE)) playsound(S_RUMBLE, &e.o);
- if(checktriggertype(e.attr3, TRIG_ENDSP)) endsp(false);
- if(e.attr4) doleveltrigger(e.attr4, 1);
- break;
- case TRIGGERED:
- if(e.o.dist(o)-player1->radius<(checktriggertype(e.attr3, TRIG_COLLIDE) ? 20 : 12))
- {
- if(e.lasttrigger) break;
- }
- else if(checktriggertype(e.attr3, TRIG_AUTO_RESET))
- {
- if(lastmillis-e.lasttrigger<6000) break;
- }
- else if(checktriggertype(e.attr3, TRIG_MANY))
- {
- e.lasttrigger = 0;
- break;
- }
- else break;
- if(checktriggertype(e.attr3, TRIG_COLLIDE) && overlapsdynent(e.o, 20)) break;
- e.triggerstate = TRIGGER_RESETTING;
- e.lasttrigger = lastmillis;
- setuptriggerflags(e);
- if(checktriggertype(e.attr3, TRIG_RUMBLE)) playsound(S_RUMBLE, &e.o);
- if(checktriggertype(e.attr3, TRIG_ENDSP)) endsp(false);
- if(e.attr4) doleveltrigger(e.attr4, 0);
- break;
- }
- }
- }
-
- void animatemapmodel(const extentity &e, int &anim, int &basetime)
- {
- const fpsentity &f = (const fpsentity &)e;
- if(validtrigger(f.attr3)) switch(f.triggerstate)
- {
- case TRIGGER_RESET: anim = ANIM_TRIGGER|ANIM_START; break;
- case TRIGGERING: anim = ANIM_TRIGGER; basetime = f.lasttrigger; break;
- case TRIGGERED: anim = ANIM_TRIGGER|ANIM_END; break;
- case TRIGGER_RESETTING: anim = ANIM_TRIGGER|ANIM_REVERSE; basetime = f.lasttrigger; break;
- }
- }
-
void fixentity(extentity &e)
{
- switch(e.type)
- {
- case FLAG:
- case BOX:
- case BARREL:
- case PLATFORM:
- case ELEVATOR:
- e.attr5 = e.attr4;
- e.attr4 = e.attr3;
- case TELEDEST:
- e.attr3 = e.attr2;
- case MONSTER:
- e.attr2 = e.attr1;
- case RESPAWNPOINT:
- e.attr1 = (int)player1->yaw;
- break;
- }
+ if(e.type == TELEDEST) e.attr3 = e.attr2;
}
void entradius(extentity &e, bool color)
@@ -641,23 +383,7 @@ namespace entities
renderentarrow(e, vec((int)(char)e.attr3*10.0f, (int)(char)e.attr2*10.0f, e.attr1*12.5f).normalize(), 4);
break;
- case FLAG:
- case MONSTER:
- case TELEDEST:
- case RESPAWNPOINT:
- case BOX:
- case BARREL:
- case PLATFORM:
- case ELEVATOR:
- {
- vec dir;
- vecfromyawpitch(e.attr1, 0, 1, 0, dir);
- renderentarrow(e, dir, 4);
- break;
- }
- case MAPMODEL:
- if(validtrigger(e.attr3)) renderentring(e, checktriggertype(e.attr3, TRIG_COLLIDE) ? 20 : 12);
- break;
+ default: break;
}
}
@@ -675,11 +401,7 @@ namespace entities
"shells", "bullets", "rockets", "riflerounds", "grenades", "cartridges",
"health", "healthboost", "greenarmour", "yellowarmour", "quaddamage",
"teleport", "teledest",
- "monster", "carrot", "jumppad",
- "base", "respawnpoint",
- "box", "barrel",
- "platform", "elevator",
- "flag",
+ "jumppad",
"", "", "", "",
};
return i>=0 && size_t(i)<sizeof(entnames)/sizeof(entnames[0]) ? entnames[i] : "";
@@ -688,22 +410,9 @@ namespace entities
void editent(int i, bool local)
{
extentity &e = *ents[i];
- if(e.type == ET_MAPMODEL && validtrigger(e.attr3))
- {
- fpsentity &f = (fpsentity &)e;
- f.triggerstate = TRIGGER_RESET;
- f.lasttrigger = 0;
- setuptriggerflags(f);
- }
- else cleartriggerflags(e);
if(local) addmsg(N_EDITENT, "rii3ii5", i, (int)(e.o.x*DMF), (int)(e.o.y*DMF), (int)(e.o.z*DMF), e.type, e.attr1, e.attr2, e.attr3, e.attr4, e.attr5);
}
- float dropheight(entity &e)
- {
- if(e.type==BASE || e.type==FLAG) return 0.0f;
- return 4.0f;
- }
#endif
}