From 698c8fde65cf20c7a8e8a5cb9ed3fd571e8104f2 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 20 Aug 2018 18:31:02 +1000 Subject: [PATCH] Pass model parts via pointer for drawing models, saves 3kb --- src/Client/IModel.c | 34 ++++----- src/Client/IModel.h | 6 +- src/Client/ModelCache.c | 148 ++++++++++++++++++++-------------------- 3 files changed, 95 insertions(+), 93 deletions(-) diff --git a/src/Client/IModel.c b/src/Client/IModel.c index 92fe3375e..f96234ffe 100644 --- a/src/Client/IModel.c +++ b/src/Client/IModel.c @@ -155,13 +155,13 @@ void IModel_ApplyTexture(struct Entity* entity) { IModel_vScale = entity->vScale * (_64x64 ? 0.015625f : 0.03125f); } -void IModel_DrawPart(struct ModelPart part) { +void IModel_DrawPart(struct ModelPart* part) { struct IModel* model = IModel_ActiveModel; - struct ModelVertex* src = &model->vertices[part.Offset]; + struct ModelVertex* src = &model->vertices[part->Offset]; VertexP3fT2fC4b* dst = &ModelCache_Vertices[model->index]; - Int32 i; + Int32 i, count = part->Count; - for (i = 0; i < part.Count; i++) { + for (i = 0; i < count; i++) { struct ModelVertex v = *src; dst->X = v.X; dst->Y = v.Y; dst->Z = v.Z; dst->Col = IModel_Cols[i >> 2]; @@ -170,24 +170,25 @@ void IModel_DrawPart(struct ModelPart part) { dst->V = (v.V & UV_POS_MASK) * IModel_vScale - (v.V >> UV_MAX_SHIFT) * 0.01f * IModel_vScale; src++; dst++; } - model->index += part.Count; + model->index += count; } #define IModel_RotateX t = cosX * v.Y + sinX * v.Z; v.Z = -sinX * v.Y + cosX * v.Z; v.Y = t; #define IModel_RotateY t = cosY * v.X - sinY * v.Z; v.Z = sinY * v.X + cosY * v.Z; v.X = t; #define IModel_RotateZ t = cosZ * v.X + sinZ * v.Y; v.Y = -sinZ * v.X + cosZ * v.Y; v.X = t; -void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct ModelPart part, bool head) { +void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct ModelPart* part, bool head) { struct IModel* model = IModel_ActiveModel; Real32 cosX = Math_CosF(-angleX), sinX = Math_SinF(-angleX); Real32 cosY = Math_CosF(-angleY), sinY = Math_SinF(-angleY); Real32 cosZ = Math_CosF(-angleZ), sinZ = Math_SinF(-angleZ); - Real32 x = part.RotX, y = part.RotY, z = part.RotZ; + Real32 x = part->RotX, y = part->RotY, z = part->RotZ; - struct ModelVertex* src = &model->vertices[part.Offset]; + struct ModelVertex* src = &model->vertices[part->Offset]; VertexP3fT2fC4b* dst = &ModelCache_Vertices[model->index]; - Int32 i; - for (i = 0; i < part.Count; i++) { + Int32 i, count = part->Count; + + for (i = 0; i < count; i++) { struct ModelVertex v = *src; v.X -= x; v.Y -= y; v.Z -= z; Real32 t = 0; @@ -218,7 +219,7 @@ void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct Model dst->V = (v.V & UV_POS_MASK) * IModel_vScale - (v.V >> UV_MAX_SHIFT) * 0.01f * IModel_vScale; src++; dst++; } - model->index += part.Count; + model->index += count; } void IModel_RenderArm(struct IModel* model, struct Entity* entity) { @@ -251,15 +252,16 @@ void IModel_RenderArm(struct IModel* model, struct Entity* entity) { Gfx_LoadMatrix(&Gfx_View); } -void IModel_DrawArmPart(struct ModelPart part) { +void IModel_DrawArmPart(struct ModelPart* part) { struct IModel* model = IModel_ActiveModel; - part.RotX = model->armX / 16.0f; - part.RotY = (model->armY + model->armY / 2) / 16.0f; + struct ModelPart arm = *part; + arm.RotX = model->armX / 16.0f; + arm.RotY = (model->armY + model->armY / 2) / 16.0f; if (Game_ClassicArmModel) { - IModel_DrawRotate(0, -90 * MATH_DEG2RAD, 120 * MATH_DEG2RAD, part, false); + IModel_DrawRotate(0, -90 * MATH_DEG2RAD, 120 * MATH_DEG2RAD, &arm, false); } else { - IModel_DrawRotate(-20 * MATH_DEG2RAD, -70 * MATH_DEG2RAD, 135 * MATH_DEG2RAD, part, false); + IModel_DrawRotate(-20 * MATH_DEG2RAD, -70 * MATH_DEG2RAD, 135 * MATH_DEG2RAD, &arm, false); } } diff --git a/src/Client/IModel.h b/src/Client/IModel.h index befb5ebbf..fd12f4009 100644 --- a/src/Client/IModel.h +++ b/src/Client/IModel.h @@ -76,10 +76,10 @@ void IModel_Render(struct IModel* model, struct Entity* entity); void IModel_SetupState(struct IModel* model, struct Entity* entity); void IModel_UpdateVB(void); void IModel_ApplyTexture(struct Entity* entity); -void IModel_DrawPart(struct ModelPart part); -void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct ModelPart part, bool head); +void IModel_DrawPart(struct ModelPart* part); +void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct ModelPart* part, bool head); void IModel_RenderArm(struct IModel* model, struct Entity* entity); -void IModel_DrawArmPart(struct ModelPart part); +void IModel_DrawArmPart(struct ModelPart* part); /* Describes data for a box being built. */ struct BoxDesc { diff --git a/src/Client/ModelCache.c b/src/Client/ModelCache.c index b4067d0d3..ea4bfd701 100644 --- a/src/Client/ModelCache.c +++ b/src/Client/ModelCache.c @@ -182,13 +182,13 @@ static void ChickenModel_GetPickingBounds(struct AABB* bb) { static void ChickenModel_DrawModel(struct Entity* entity) { IModel_ApplyTexture(entity); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Chicken_Head, true); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Chicken_Head2, true); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Chicken_Head3, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Chicken_Head, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Chicken_Head2, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Chicken_Head3, true); - IModel_DrawPart(Chicken_Torso); - IModel_DrawRotate(0, 0, -Math_AbsF(entity->Anim.LeftArmX), Chicken_LeftWing, false); - IModel_DrawRotate(0, 0, Math_AbsF(entity->Anim.LeftArmX), Chicken_RightWing, false); + IModel_DrawPart(&Chicken_Torso); + IModel_DrawRotate(0, 0, -Math_AbsF(entity->Anim.LeftArmX), &Chicken_LeftWing, false); + IModel_DrawRotate(0, 0, Math_AbsF(entity->Anim.LeftArmX), &Chicken_RightWing, false); PackedCol col = IModel_Cols[0]; UInt32 i; @@ -196,8 +196,8 @@ static void ChickenModel_DrawModel(struct Entity* entity) { IModel_Cols[i] = PackedCol_Scale(col, 0.7f); } - IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Chicken_LeftLeg, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Chicken_RightLeg, false); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Chicken_LeftLeg, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Chicken_RightLeg, false); IModel_UpdateVB(); } @@ -264,13 +264,13 @@ static void CreeperModel_GetPickingBounds(struct AABB* bb) { static void CreeperModel_DrawModel(struct Entity* entity) { IModel_ApplyTexture(entity); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0.0f, 0.0f, Creeper_Head, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Creeper_Head, true); - IModel_DrawPart(Creeper_Torso); - IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Creeper_LeftLegFront, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Creeper_RightLegFront, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Creeper_LeftLegBack, false); - IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Creeper_RightLegBack, false); + IModel_DrawPart(&Creeper_Torso); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Creeper_LeftLegFront, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Creeper_RightLegFront, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Creeper_LeftLegBack, false); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Creeper_RightLegBack, false); IModel_UpdateVB(); } @@ -338,13 +338,13 @@ static void PigModel_GetPickingBounds(struct AABB* bb) { static void PigModel_DrawModel(struct Entity* entity) { IModel_ApplyTexture(entity); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0.0f, 0.0f, Pig_Head, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Pig_Head, true); - IModel_DrawPart(Pig_Torso); - IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Pig_LeftLegFront, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Pig_RightLegFront, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Pig_LeftLegBack, false); - IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Pig_RightLegBack, false); + IModel_DrawPart(&Pig_Torso); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Pig_LeftLegFront, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Pig_RightLegFront, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Pig_LeftLegBack, false); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Pig_RightLegBack, false); IModel_UpdateVB(); } @@ -457,24 +457,24 @@ static void SheepModel_GetPickingBounds(struct AABB* bb) { static void SheepModel_DrawModel(struct Entity* entity) { IModel_ApplyTexture(entity); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Sheep_Head, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Sheep_Head, true); - IModel_DrawPart(Sheep_Torso); - IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Sheep_LeftLegFront, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Sheep_RightLegFront, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Sheep_LeftLegBack, false); - IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Sheep_RightLegBack, false); + IModel_DrawPart(&Sheep_Torso); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Sheep_LeftLegFront, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Sheep_RightLegFront, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Sheep_LeftLegBack, false); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Sheep_RightLegBack, false); IModel_UpdateVB(); if (entity->ModelIsSheepNoFur) return; Gfx_BindTexture(ModelCache_Textures[fur_Index].TexID); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Fur_Head, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Fur_Head, true); - IModel_DrawPart(Fur_Torso); - IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Fur_LeftLegFront, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Fur_RightLegFront, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Fur_LeftLegBack, false); - IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Fur_RightLegBack, false); + IModel_DrawPart(&Fur_Torso); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Fur_LeftLegFront, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Fur_RightLegFront, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Fur_LeftLegBack, false); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Fur_RightLegBack, false); IModel_UpdateVB(); } @@ -545,18 +545,18 @@ static void SkeletonModel_GetPickingBounds(struct AABB* bb) { static void SkeletonModel_DrawModel(struct Entity* entity) { IModel_ApplyTexture(entity); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0.0f, 0.0f, Skeleton_Head, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Skeleton_Head, true); - IModel_DrawPart(Skeleton_Torso); - IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Skeleton_LeftLeg, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Skeleton_RightLeg, false); - IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.LeftArmZ, Skeleton_LeftArm, false); - IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.RightArmZ, Skeleton_RightArm, false); + IModel_DrawPart(&Skeleton_Torso); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Skeleton_LeftLeg, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Skeleton_RightLeg, false); + IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.LeftArmZ, &Skeleton_LeftArm, false); + IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.RightArmZ, &Skeleton_RightArm, false); IModel_UpdateVB(); } static void SkeletonModel_DrawArm(struct Entity* entity) { - IModel_DrawArmPart(Skeleton_RightArm); + IModel_DrawArmPart(&Skeleton_RightArm); IModel_UpdateVB(); } @@ -623,24 +623,24 @@ static void SpiderModel_GetPickingBounds(struct AABB* bb) { static void SpiderModel_DrawModel(struct Entity* entity) { IModel_ApplyTexture(entity); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Spider_Head, true); - IModel_DrawPart(Spider_Link); - IModel_DrawPart(Spider_End); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Spider_Head, true); + IModel_DrawPart(&Spider_Link); + IModel_DrawPart(&Spider_End); Real32 rotX = Math_SinF(entity->Anim.WalkTime) * entity->Anim.Swing * MATH_PI; Real32 rotZ = Math_CosF(entity->Anim.WalkTime * 2) * entity->Anim.Swing * MATH_PI / 16.0f; Real32 rotY = Math_SinF(entity->Anim.WalkTime * 2) * entity->Anim.Swing * MATH_PI / 32.0f; IModel_Rotation = ROTATE_ORDER_XZY; - IModel_DrawRotate(rotX, quarterPi + rotY, eighthPi + rotZ, Spider_LeftLeg, false); - IModel_DrawRotate(-rotX, eighthPi + rotY, eighthPi + rotZ, Spider_LeftLeg, false); - IModel_DrawRotate(rotX, -eighthPi - rotY, eighthPi - rotZ, Spider_LeftLeg, false); - IModel_DrawRotate(-rotX, -quarterPi - rotY, eighthPi - rotZ, Spider_LeftLeg, false); + IModel_DrawRotate(rotX, quarterPi + rotY, eighthPi + rotZ, &Spider_LeftLeg, false); + IModel_DrawRotate(-rotX, eighthPi + rotY, eighthPi + rotZ, &Spider_LeftLeg, false); + IModel_DrawRotate(rotX, -eighthPi - rotY, eighthPi - rotZ, &Spider_LeftLeg, false); + IModel_DrawRotate(-rotX, -quarterPi - rotY, eighthPi - rotZ, &Spider_LeftLeg, false); - IModel_DrawRotate(rotX, -quarterPi + rotY, -eighthPi + rotZ, Spider_RightLeg, false); - IModel_DrawRotate(-rotX, -eighthPi + rotY, -eighthPi + rotZ, Spider_RightLeg, false); - IModel_DrawRotate(rotX, eighthPi - rotY, -eighthPi - rotZ, Spider_RightLeg, false); - IModel_DrawRotate(-rotX, quarterPi - rotY, -eighthPi - rotZ, Spider_RightLeg, false); + IModel_DrawRotate(rotX, -quarterPi + rotY, -eighthPi + rotZ, &Spider_RightLeg, false); + IModel_DrawRotate(-rotX, -eighthPi + rotY, -eighthPi + rotZ, &Spider_RightLeg, false); + IModel_DrawRotate(rotX, eighthPi - rotY, -eighthPi - rotZ, &Spider_RightLeg, false); + IModel_DrawRotate(-rotX, quarterPi - rotY, -eighthPi - rotZ, &Spider_RightLeg, false); IModel_Rotation = ROTATE_ORDER_ZYX; IModel_UpdateVB(); @@ -716,20 +716,20 @@ static void ZombieModel_GetPickingBounds(struct AABB* bb) { static void ZombieModel_DrawModel(struct Entity* entity) { IModel_ApplyTexture(entity); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0.0f, 0.0f, Zombie_Head, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Zombie_Head, true); - IModel_DrawPart(Zombie_Torso); - IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Zombie_LeftLeg, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Zombie_RightLeg, false); - IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.LeftArmZ, Zombie_LeftArm, false); - IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.RightArmZ, Zombie_RightArm, false); + IModel_DrawPart(&Zombie_Torso); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Zombie_LeftLeg, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Zombie_RightLeg, false); + IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.LeftArmZ, &Zombie_LeftArm, false); + IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.RightArmZ, &Zombie_RightArm, false); - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Zombie_Hat, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Zombie_Hat, true); IModel_UpdateVB(); } static void ZombieModel_DrawArm(struct Entity* entity) { - IModel_DrawArmPart(Zombie_RightArm); + IModel_DrawArmPart(&Zombie_RightArm); IModel_UpdateVB(); } @@ -850,30 +850,30 @@ static void HumanModel_DrawModel(struct Entity* entity, struct ModelSet* models) UInt8 type = IModel_skinType; struct ModelSet* model = &models[type == SKIN_TYPE_64x64_SLIM ? 2 : (type == SKIN_TYPE_64x64 ? 1 : 0)]; - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, model->Head, true); - IModel_DrawPart(model->Torso); - IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, model->LeftLeg, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0, entity->Anim.RightLegZ, model->RightLeg, false); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &model->Head, true); + IModel_DrawPart(&model->Torso); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, &model->LeftLeg, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, entity->Anim.RightLegZ, &model->RightLeg, false); IModel_Rotation = ROTATE_ORDER_XZY; - IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, model->LeftArm, false); - IModel_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, model->RightArm, false); + IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, &model->LeftArm, false); + IModel_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, &model->RightArm, false); IModel_Rotation = ROTATE_ORDER_ZYX; IModel_UpdateVB(); Gfx_SetAlphaTest(true); IModel_ActiveModel->index = 0; if (IModel_skinType != SKIN_TYPE_64x32) { - IModel_DrawPart(model->TorsoLayer); - IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, model->LeftLegLayer, false); - IModel_DrawRotate(entity->Anim.RightLegX, 0, entity->Anim.RightLegZ, model->RightLegLayer, false); + IModel_DrawPart(&model->TorsoLayer); + IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, &model->LeftLegLayer, false); + IModel_DrawRotate(entity->Anim.RightLegX, 0, entity->Anim.RightLegZ, &model->RightLegLayer, false); IModel_Rotation = ROTATE_ORDER_XZY; - IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, model->LeftArmLayer, false); - IModel_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, model->RightArmLayer, false); + IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, &model->LeftArmLayer, false); + IModel_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, &model->RightArmLayer, false); IModel_Rotation = ROTATE_ORDER_ZYX; } - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, model->Hat, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &model->Hat, true); IModel_UpdateVB(); } @@ -881,9 +881,9 @@ static void HumanModel_DrawArm(struct Entity* entity, struct ModelSet* models) { UInt8 type = IModel_skinType; struct ModelSet* model = &models[type == SKIN_TYPE_64x64_SLIM ? 2 : (type == SKIN_TYPE_64x64 ? 1 : 0)]; - IModel_DrawArmPart(model->RightArm); + IModel_DrawArmPart(&model->RightArm); if (IModel_skinType != SKIN_TYPE_64x32) { - IModel_DrawArmPart(model->RightArmLayer); + IModel_DrawArmPart(&model->RightArmLayer); } IModel_UpdateVB(); } @@ -1080,9 +1080,9 @@ static void HeadModel_DrawModel(struct Entity* entity) { struct ModelPart part; part = Humanoid_Set[0].Head; part.RotY += 4.0f / 16.0f; - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, part, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &part, true); part = Humanoid_Set[0].Hat; part.RotY += 4.0f / 16.0f; - IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, part, true); + IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &part, true); IModel_UpdateVB(); }