rendered paste bodyIndex: client/renderer/r_bsp.c
===================================================================
--- client/renderer/r_bsp.c (revision 24654)
+++ client/renderer/r_bsp.c (working copy)
@@ -149,10 +149,14 @@
modelorg[1] = -DotProduct(temp, right);
modelorg[2] = DotProduct(temp, up);
}
+ if (VectorNotEmpty(e->origin)) {
+ VectorSubtract(modelorg, e->model->shift, modelorg);
+ }
R_ShiftLights(e->origin);
glPushMatrix();
+ /* This positions and rotates the model based on e->origin, e->angles, and e->model->shift. */
R_TransformForEntity(e);
R_DrawBspModelSurfaces(e, modelorg);
Index: client/renderer/r_entity.c
===================================================================
--- client/renderer/r_entity.c (revision 24654)
+++ client/renderer/r_entity.c (working copy)
@@ -58,6 +58,10 @@
glRotatef(e->angles[YAW], 0, 0, 1);
glRotatef(e->angles[PITCH], 0, 1, 0);
glRotatef(e->angles[ROLL], 1, 0, 0);
+
+ if (VectorNotEmpty(e->origin)) {
+ glTranslatef(-e->model->shift[0], -e->model->shift[1], -e->model->shift[2]);
+ }
}
/**
Index: client/renderer/r_model.h
===================================================================
--- client/renderer/r_model.h (revision 24654)
+++ client/renderer/r_model.h (working copy)
@@ -53,6 +53,9 @@
vec3_t mins, maxs;
float radius;
+ /** Noted offset for entities with origins */
+ vec3_t shift;
+
/** solid volume for clipping */
qboolean clipbox;
vec3_t clipmins, clipmaxs;
Index: client/renderer/r_model_brush.c
===================================================================
--- client/renderer/r_model_brush.c (revision 24654)
+++ client/renderer/r_model_brush.c (working copy)
@@ -1017,6 +1017,14 @@
VectorCopy(sub->mins, mod->mins);
mod->radius = sub->radius;
+ /* So origin based models render correctly, copy the shift if needed. */
+ if (VectorNotEmpty(sub->origin)) {
+ VectorCopy(shift, mod->shift);
+ } else {
+ VectorClear(mod->shift);
+ }
+
+
mod->bsp.firstnode = sub->headnode;
mod->bsp.nodes = &r_worldmodel->bsp.nodes[mod->bsp.firstnode];
mod->bsp.maptile = r_numMapTiles - 1;