Pass model parts via pointer for drawing models, saves 3kb

This commit is contained in:
UnknownShadow200 2018-08-20 18:31:02 +10:00
parent 599a092fb9
commit 698c8fde65
3 changed files with 95 additions and 93 deletions

View File

@ -155,13 +155,13 @@ void IModel_ApplyTexture(struct Entity* entity) {
IModel_vScale = entity->vScale * (_64x64 ? 0.015625f : 0.03125f); 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 IModel* model = IModel_ActiveModel;
struct ModelVertex* src = &model->vertices[part.Offset]; struct ModelVertex* src = &model->vertices[part->Offset];
VertexP3fT2fC4b* dst = &ModelCache_Vertices[model->index]; 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; struct ModelVertex v = *src;
dst->X = v.X; dst->Y = v.Y; dst->Z = v.Z; dst->X = v.X; dst->Y = v.Y; dst->Z = v.Z;
dst->Col = IModel_Cols[i >> 2]; 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; dst->V = (v.V & UV_POS_MASK) * IModel_vScale - (v.V >> UV_MAX_SHIFT) * 0.01f * IModel_vScale;
src++; dst++; 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_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_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; #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; struct IModel* model = IModel_ActiveModel;
Real32 cosX = Math_CosF(-angleX), sinX = Math_SinF(-angleX); Real32 cosX = Math_CosF(-angleX), sinX = Math_SinF(-angleX);
Real32 cosY = Math_CosF(-angleY), sinY = Math_SinF(-angleY); Real32 cosY = Math_CosF(-angleY), sinY = Math_SinF(-angleY);
Real32 cosZ = Math_CosF(-angleZ), sinZ = Math_SinF(-angleZ); 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]; 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; struct ModelVertex v = *src;
v.X -= x; v.Y -= y; v.Z -= z; v.X -= x; v.Y -= y; v.Z -= z;
Real32 t = 0; 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; dst->V = (v.V & UV_POS_MASK) * IModel_vScale - (v.V >> UV_MAX_SHIFT) * 0.01f * IModel_vScale;
src++; dst++; src++; dst++;
} }
model->index += part.Count; model->index += count;
} }
void IModel_RenderArm(struct IModel* model, struct Entity* entity) { 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); Gfx_LoadMatrix(&Gfx_View);
} }
void IModel_DrawArmPart(struct ModelPart part) { void IModel_DrawArmPart(struct ModelPart* part) {
struct IModel* model = IModel_ActiveModel; struct IModel* model = IModel_ActiveModel;
part.RotX = model->armX / 16.0f; struct ModelPart arm = *part;
part.RotY = (model->armY + model->armY / 2) / 16.0f; arm.RotX = model->armX / 16.0f;
arm.RotY = (model->armY + model->armY / 2) / 16.0f;
if (Game_ClassicArmModel) { 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 { } 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);
} }
} }

View File

@ -76,10 +76,10 @@ void IModel_Render(struct IModel* model, struct Entity* entity);
void IModel_SetupState(struct IModel* model, struct Entity* entity); void IModel_SetupState(struct IModel* model, struct Entity* entity);
void IModel_UpdateVB(void); void IModel_UpdateVB(void);
void IModel_ApplyTexture(struct Entity* entity); void IModel_ApplyTexture(struct Entity* entity);
void IModel_DrawPart(struct ModelPart part); void IModel_DrawPart(struct ModelPart* part);
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);
void IModel_RenderArm(struct IModel* model, struct Entity* entity); 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. */ /* Describes data for a box being built. */
struct BoxDesc { struct BoxDesc {

View File

@ -182,13 +182,13 @@ static void ChickenModel_GetPickingBounds(struct AABB* bb) {
static void ChickenModel_DrawModel(struct Entity* entity) { static void ChickenModel_DrawModel(struct Entity* entity) {
IModel_ApplyTexture(entity); IModel_ApplyTexture(entity);
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Chicken_Head, 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_Head2, true);
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Chicken_Head3, true); IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Chicken_Head3, true);
IModel_DrawPart(Chicken_Torso); 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_LeftWing, false);
IModel_DrawRotate(0, 0, Math_AbsF(entity->Anim.LeftArmX), Chicken_RightWing, false); IModel_DrawRotate(0, 0, Math_AbsF(entity->Anim.LeftArmX), &Chicken_RightWing, false);
PackedCol col = IModel_Cols[0]; PackedCol col = IModel_Cols[0];
UInt32 i; UInt32 i;
@ -196,8 +196,8 @@ static void ChickenModel_DrawModel(struct Entity* entity) {
IModel_Cols[i] = PackedCol_Scale(col, 0.7f); IModel_Cols[i] = PackedCol_Scale(col, 0.7f);
} }
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Chicken_LeftLeg, false); IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Chicken_LeftLeg, false);
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Chicken_RightLeg, false); IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Chicken_RightLeg, false);
IModel_UpdateVB(); IModel_UpdateVB();
} }
@ -264,13 +264,13 @@ static void CreeperModel_GetPickingBounds(struct AABB* bb) {
static void CreeperModel_DrawModel(struct Entity* entity) { static void CreeperModel_DrawModel(struct Entity* entity) {
IModel_ApplyTexture(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_DrawPart(&Creeper_Torso);
IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Creeper_LeftLegFront, false); IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Creeper_LeftLegFront, false);
IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Creeper_RightLegFront, false); IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Creeper_RightLegFront, false);
IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Creeper_LeftLegBack, false); IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Creeper_LeftLegBack, false);
IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Creeper_RightLegBack, false); IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Creeper_RightLegBack, false);
IModel_UpdateVB(); IModel_UpdateVB();
} }
@ -338,13 +338,13 @@ static void PigModel_GetPickingBounds(struct AABB* bb) {
static void PigModel_DrawModel(struct Entity* entity) { static void PigModel_DrawModel(struct Entity* entity) {
IModel_ApplyTexture(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_DrawPart(&Pig_Torso);
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Pig_LeftLegFront, false); 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_RightLegFront, false);
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Pig_LeftLegBack, false); IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Pig_LeftLegBack, false);
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Pig_RightLegBack, false); IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Pig_RightLegBack, false);
IModel_UpdateVB(); IModel_UpdateVB();
} }
@ -457,24 +457,24 @@ static void SheepModel_GetPickingBounds(struct AABB* bb) {
static void SheepModel_DrawModel(struct Entity* entity) { static void SheepModel_DrawModel(struct Entity* entity) {
IModel_ApplyTexture(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_DrawPart(&Sheep_Torso);
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Sheep_LeftLegFront, false); 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_RightLegFront, false);
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Sheep_LeftLegBack, false); IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Sheep_LeftLegBack, false);
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Sheep_RightLegBack, false); IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Sheep_RightLegBack, false);
IModel_UpdateVB(); IModel_UpdateVB();
if (entity->ModelIsSheepNoFur) return; if (entity->ModelIsSheepNoFur) return;
Gfx_BindTexture(ModelCache_Textures[fur_Index].TexID); 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_DrawPart(&Fur_Torso);
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Fur_LeftLegFront, false); 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_RightLegFront, false);
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Fur_LeftLegBack, false); IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Fur_LeftLegBack, false);
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Fur_RightLegBack, false); IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Fur_RightLegBack, false);
IModel_UpdateVB(); IModel_UpdateVB();
} }
@ -545,18 +545,18 @@ static void SkeletonModel_GetPickingBounds(struct AABB* bb) {
static void SkeletonModel_DrawModel(struct Entity* entity) { static void SkeletonModel_DrawModel(struct Entity* entity) {
IModel_ApplyTexture(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_DrawPart(&Skeleton_Torso);
IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Skeleton_LeftLeg, false); IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Skeleton_LeftLeg, false);
IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Skeleton_RightLeg, false); IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Skeleton_RightLeg, false);
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.LeftArmZ, Skeleton_LeftArm, false); IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.LeftArmZ, &Skeleton_LeftArm, false);
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.RightArmZ, Skeleton_RightArm, false); IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.RightArmZ, &Skeleton_RightArm, false);
IModel_UpdateVB(); IModel_UpdateVB();
} }
static void SkeletonModel_DrawArm(struct Entity* entity) { static void SkeletonModel_DrawArm(struct Entity* entity) {
IModel_DrawArmPart(Skeleton_RightArm); IModel_DrawArmPart(&Skeleton_RightArm);
IModel_UpdateVB(); IModel_UpdateVB();
} }
@ -623,24 +623,24 @@ static void SpiderModel_GetPickingBounds(struct AABB* bb) {
static void SpiderModel_DrawModel(struct Entity* entity) { static void SpiderModel_DrawModel(struct Entity* entity) {
IModel_ApplyTexture(entity); IModel_ApplyTexture(entity);
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Spider_Head, true); IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Spider_Head, true);
IModel_DrawPart(Spider_Link); IModel_DrawPart(&Spider_Link);
IModel_DrawPart(Spider_End); IModel_DrawPart(&Spider_End);
Real32 rotX = Math_SinF(entity->Anim.WalkTime) * entity->Anim.Swing * MATH_PI; 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 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; Real32 rotY = Math_SinF(entity->Anim.WalkTime * 2) * entity->Anim.Swing * MATH_PI / 32.0f;
IModel_Rotation = ROTATE_ORDER_XZY; IModel_Rotation = ROTATE_ORDER_XZY;
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, -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, -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, 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_Rotation = ROTATE_ORDER_ZYX; IModel_Rotation = ROTATE_ORDER_ZYX;
IModel_UpdateVB(); IModel_UpdateVB();
@ -716,20 +716,20 @@ static void ZombieModel_GetPickingBounds(struct AABB* bb) {
static void ZombieModel_DrawModel(struct Entity* entity) { static void ZombieModel_DrawModel(struct Entity* entity) {
IModel_ApplyTexture(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_DrawPart(&Zombie_Torso);
IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Zombie_LeftLeg, false); IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Zombie_LeftLeg, false);
IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Zombie_RightLeg, false); IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Zombie_RightLeg, false);
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.LeftArmZ, Zombie_LeftArm, false); IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.LeftArmZ, &Zombie_LeftArm, false);
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.RightArmZ, Zombie_RightArm, 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(); IModel_UpdateVB();
} }
static void ZombieModel_DrawArm(struct Entity* entity) { static void ZombieModel_DrawArm(struct Entity* entity) {
IModel_DrawArmPart(Zombie_RightArm); IModel_DrawArmPart(&Zombie_RightArm);
IModel_UpdateVB(); IModel_UpdateVB();
} }
@ -850,30 +850,30 @@ static void HumanModel_DrawModel(struct Entity* entity, struct ModelSet* models)
UInt8 type = IModel_skinType; UInt8 type = IModel_skinType;
struct ModelSet* model = &models[type == SKIN_TYPE_64x64_SLIM ? 2 : (type == SKIN_TYPE_64x64 ? 1 : 0)]; 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_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &model->Head, true);
IModel_DrawPart(model->Torso); IModel_DrawPart(&model->Torso);
IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, model->LeftLeg, false); 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->Anim.RightLegX, 0, entity->Anim.RightLegZ, &model->RightLeg, false);
IModel_Rotation = ROTATE_ORDER_XZY; IModel_Rotation = ROTATE_ORDER_XZY;
IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, model->LeftArm, 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_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, &model->RightArm, false);
IModel_Rotation = ROTATE_ORDER_ZYX; IModel_Rotation = ROTATE_ORDER_ZYX;
IModel_UpdateVB(); IModel_UpdateVB();
Gfx_SetAlphaTest(true); Gfx_SetAlphaTest(true);
IModel_ActiveModel->index = 0; IModel_ActiveModel->index = 0;
if (IModel_skinType != SKIN_TYPE_64x32) { if (IModel_skinType != SKIN_TYPE_64x32) {
IModel_DrawPart(model->TorsoLayer); IModel_DrawPart(&model->TorsoLayer);
IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, model->LeftLegLayer, false); 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_DrawRotate(entity->Anim.RightLegX, 0, entity->Anim.RightLegZ, &model->RightLegLayer, false);
IModel_Rotation = ROTATE_ORDER_XZY; IModel_Rotation = ROTATE_ORDER_XZY;
IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, model->LeftArmLayer, 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_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, &model->RightArmLayer, false);
IModel_Rotation = ROTATE_ORDER_ZYX; 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(); IModel_UpdateVB();
} }
@ -881,9 +881,9 @@ static void HumanModel_DrawArm(struct Entity* entity, struct ModelSet* models) {
UInt8 type = IModel_skinType; UInt8 type = IModel_skinType;
struct ModelSet* model = &models[type == SKIN_TYPE_64x64_SLIM ? 2 : (type == SKIN_TYPE_64x64 ? 1 : 0)]; 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) { if (IModel_skinType != SKIN_TYPE_64x32) {
IModel_DrawArmPart(model->RightArmLayer); IModel_DrawArmPart(&model->RightArmLayer);
} }
IModel_UpdateVB(); IModel_UpdateVB();
} }
@ -1080,9 +1080,9 @@ static void HeadModel_DrawModel(struct Entity* entity) {
struct ModelPart part; struct ModelPart part;
part = Humanoid_Set[0].Head; part.RotY += 4.0f / 16.0f; 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; 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(); IModel_UpdateVB();
} }