loadmodel->radius2 = modelradius * modelradius;
}
-void Mod_IDSP_Load(dp_model_t *mod, void *buffer, void *bufferend)
+void Mod_IDSP_Load(model_t *mod, void *buffer, void *bufferend)
{
int version;
const unsigned char *datapointer;
loadmodel->type = mod_sprite;
- loadmodel->DrawSky = NULL;
loadmodel->Draw = R_Model_Sprite_Draw;
loadmodel->DrawDepth = NULL;
loadmodel->DrawLight = NULL;
- loadmodel->DrawAddWaterPlanes = NULL;
version = LittleLong(((dsprite_t *)buffer)->version);
if (version == SPRITE_VERSION || version == SPRITE32_VERSION)
unsigned char palette[256][4];
const unsigned char *in;
dspritehl_t *pinhlsprite;
+ unsigned char *aligneddata;
pinhlsprite = (dspritehl_t *)datapointer;
datapointer += sizeof(dspritehl_t);
return;
}
- Mod_Sprite_SharedSetup(datapointer, LittleLong (pinhlsprite->version), (unsigned int *)(&palette[0][0]), rendermode == SPRHL_ADDITIVE);
+ // the above datapointer arithmetic causes misaligned access
+ aligneddata = (unsigned char *)Mem_Alloc(tempmempool, (unsigned char *)bufferend - datapointer);
+ memcpy(aligneddata, datapointer, (unsigned char *)bufferend - datapointer);
+ Mod_Sprite_SharedSetup(aligneddata, LittleLong (pinhlsprite->version), (unsigned int *)(&palette[0][0]), rendermode == SPRHL_ADDITIVE);
+ Mem_Free(aligneddata);
}
else
Host_Error("Mod_IDSP_Load: %s has wrong version number (%i). Only %i (quake), %i (HalfLife), and %i (sprite32) supported",
}
-void Mod_IDS2_Load(dp_model_t *mod, void *buffer, void *bufferend)
+void Mod_IDS2_Load(model_t *mod, void *buffer, void *bufferend)
{
int i, version;
qbool fullbright;
loadmodel->type = mod_sprite;
- loadmodel->DrawSky = NULL;
loadmodel->Draw = R_Model_Sprite_Draw;
loadmodel->DrawDepth = NULL;
loadmodel->DrawLight = NULL;
- loadmodel->DrawAddWaterPlanes = NULL;
pinqsprite = (dsprite2_t *)buffer;