Unified · Split
| @@ -420,7 +420,7 @@ SV_PushMove(pr_t *pr, edict_t *pusher, float movetime) · 419 unmodified lines | ||
| 420 | 420 | { |
| 421 | 421 | static edict_t *moved_edict[MAX_EDICTS]; |
| 422 | 422 | static vec3_t moved_from[MAX_EDICTS]; |
| 423 | − int i, e, num_moved; | |
| 423 | + int i, e, num_moved, solid; | |
| 424 | 424 | edict_t *check, *block; |
| 425 | 425 | vec3_t mins, maxs, move, entorig, pushorig; |
| 426 | 426 | |
| @@ -476,9 +476,13 @@ SV_PushMove(pr_t *pr, edict_t *pusher, float movetime) · 49 unmodified lines | ||
| 476 | 476 | num_moved++; |
| 477 | 477 | |
| 478 | 478 | // try moving the contacted entity |
| 479 | − pusher->v.solid = SOLID_NOT; | |
| 480 | − SV_PushEntity(pr, check, move); | |
| 481 | − pusher->v.solid = SOLID_BSP; | |
| 479 | + solid = pusher->v.solid; | |
| 480 | + if(solid >= SOLID_BBOX && solid <= SOLID_BSP) { | |
| 481 | + // https://www.quake-info-pool.net/q1/qfix.htm#movetype_push | |
| 482 | + pusher->v.solid = SOLID_NOT; | |
| 483 | + SV_PushEntity(pr, check, move); | |
| 484 | + pusher->v.solid = solid; | |
| 485 | + } | |
| 482 | 486 | |
| 483 | 487 | // if it is still inside the pusher, block |
| 484 | 488 | block = SV_TestEntityPosition(pr, check); |
| @@ -486,7 +490,8 @@ SV_PushMove(pr_t *pr, edict_t *pusher, float movetime) · 1 unmodified line | ||
| 486 | 490 | // fail the move |
| 487 | 491 | if(check->v.mins[0] == check->v.maxs[0]) |
| 488 | 492 | continue; |
| 489 | − if(check->v.solid == SOLID_NOT || check->v.solid == SOLID_TRIGGER) { | |
| 493 | + solid = check->v.solid; | |
| 494 | + if(solid <= SOLID_TRIGGER) { | |
| 490 | 495 | // corpse |
| 491 | 496 | check->v.mins[0] = check->v.mins[1] = 0; |
| 492 | 497 | VectorCopy(check->v.mins, check->v.maxs); |