vector org = targ.origin;
- if(STAT(Q3COMPAT))
+ if(STAT(Q3COMPAT, targ) || this.spawnflags & PUSH_STATIC)
{
- org.z += targ.mins_z;
- org.z += 1; // off by 1!
+ org = (this.absmin + this.absmax) * 0.5;
}
- bool is_pushed = false;
- if(is_velocity_pad)
+ bool already_pushed = false;
+ if(is_velocity_pad) // remember velocity jump pads
{
- for(int i = 0; i < MAX_PUSHED; ++i)
+ if(this == targ.last_pushed || (targ.last_pushed && !STAT(Q3COMPAT, targ))) // if q3compat is active overwrite last stored jump pad, otherwise ignore
{
- if(this == targ.has_pushed[i])
- {
- is_pushed = true;
- break;
- }
+ already_pushed = true;
}
-
- if(!is_pushed) // remember velocity jump pads
+ else
{
- bool limit_reached = true;
- for(int i = 0; i < MAX_PUSHED; ++i)
- {
- if(targ.has_pushed[i]) continue;
- limit_reached = false;
- targ.has_pushed[i] = this; // may be briefly out of sync between client and server if client prediction is toggled
- break;
- }
- if(limit_reached)
- {
- return false; // too many overlapping jump pads
- }
- if(!IL_CONTAINS(are_pushed, targ))
- {
- IL_PUSH(are_pushed, targ);
- this.nextthink = time;
- }
+ targ.last_pushed = this; // may be briefly out of sync between client and server if client prediction is toggled
}
}