From 04b6089d72e5b69cfc20e6dfab25d1274e5c0994 Mon Sep 17 00:00:00 2001 From: Arceveti <73617174+Arceveti@users.noreply.github.com> Date: Tue, 28 Sep 2021 14:14:48 -0700 Subject: [PATCH] Fix puppyprint font kerning --- bin/segment2.c | 26 +++++++++----------- src/engine/math_util.c | 56 ++++++++++++++++++++---------------------- 2 files changed, 37 insertions(+), 45 deletions(-) diff --git a/bin/segment2.c b/bin/segment2.c index 969f279e7..033b84061 100644 --- a/bin/segment2.c +++ b/bin/segment2.c @@ -17,22 +17,11 @@ ALIGNED8 static const Texture small_font_2[] = { #include "textures/segment2/custom_text2.i4.inc.c" }; -const Texture *const puppyprint_font_lut[2] = -{ +const Texture *const puppyprint_font_lut[2] = { small_font_1, small_font_2 }; -static const u8 small_font_kerning_1[80] = -{ - /*0*/ 7, /*1*/ 7, /*2*/ 7, /*3*/ 7, /*4*/ 7, /*5*/ 7, /*6*/ 7, /*7*/ 7, /*8*/ 7, /*9*/ 7, /*-*/ 7, /*+*/ 7, /*(*/ 4, /*)*/ 4, /*!*/ 5, /*?*/ 6, - /*A*/ 7, /*B*/ 7, /*C*/ 7, /*D*/ 7, /*E*/ 7, /*F*/ 7, /*G*/ 7, /*H*/ 7, /*I*/ 7, /*J*/ 7, /*K*/ 7, /*L*/ 7, /*M*/ 7, /*N*/ 7, /*O*/ 7, /*P*/ 7, - /*Q*/ 7, /*R*/ 7, /*S*/ 7, /*T*/ 7, /*U*/ 7, /*V*/ 7, /*W*/ 7, /*X*/ 7, /*Y*/ 7, /*Z*/ 7, /*"*/ 5, /*'*/ 2, /*:*/ 3, /*;*/ 3, /*.*/ 3, /*,*/ 3, - /*a*/ 6, /*b*/ 6, /*c*/ 6, /*d*/ 6, /*e*/ 6, /*f*/ 6, /*g*/ 6, /*h*/ 6, /*i*/ 2, /*j*/ 6, /*k*/ 6, /*l*/ 3, /*m*/ 6, /*n*/ 6, /*o*/ 6, /*p*/ 6, - /*q*/ 6, /*r*/ 6, /*s*/ 6, /*t*/ 6, /*u*/ 6, /*v*/ 6, /*w*/ 6, /*x*/ 6, /*y*/ 6, /*z*/ 6, /*~*/ 7, /*¨*/ 6, /*^*/ 7, /*/*/ 6, /*%*/ 6, /*&*/ 7, -}; - -static const u8 small_font_kerning_2[80] = -{ +static const u8 small_font_kerning_1[80] = { /*0*/ 6, /*1*/ 5, /*2*/ 7, /*3*/ 7, /*4*/ 7, /*5*/ 7, /*6*/ 8, /*7*/ 7, /*8*/ 7, /*9*/ 6, /*-*/ 8, /*+*/ 8, /*(*/ 5, /*)*/ 5, /*!*/ 4, /*?*/ 6, /*A*/ 7, /*B*/ 7, /*C*/ 7, /*D*/ 7, /*E*/ 6, /*F*/ 5, /*G*/ 8, /*H*/ 6, /*I*/ 6, /*J*/ 5, /*K*/ 7, /*L*/ 6, /*M*/ 7, /*N*/ 7, /*O*/ 7, /*P*/ 6, /*Q*/ 8, /*R*/ 6, /*S*/ 7, /*T*/ 7, /*U*/ 7, /*V*/ 7, /*W*/ 8, /*X*/ 7, /*Y*/ 7, /*Z*/ 7, /*"*/ 5, /*'*/ 2, /*:*/ 3, /*;*/ 3, /*.*/ 3, /*,*/ 3, @@ -40,8 +29,15 @@ static const u8 small_font_kerning_2[80] = /*q*/ 7, /*r*/ 6, /*s*/ 6, /*t*/ 6, /*u*/ 6, /*v*/ 7, /*w*/ 8, /*x*/ 6, /*y*/ 8, /*z*/ 7, /*~*/ 8, /*¨*/ 7, /*^*/ 8, /*/*/ 8, /*%*/ 8, /*&*/ 8, }; -const u8 *const puppyprint_kerning_lut[2][80] = -{ +static const u8 small_font_kerning_2[80] = { + /*0*/ 7, /*1*/ 7, /*2*/ 7, /*3*/ 7, /*4*/ 7, /*5*/ 7, /*6*/ 7, /*7*/ 7, /*8*/ 7, /*9*/ 7, /*-*/ 7, /*+*/ 7, /*(*/ 4, /*)*/ 4, /*!*/ 5, /*?*/ 6, + /*A*/ 7, /*B*/ 7, /*C*/ 7, /*D*/ 7, /*E*/ 7, /*F*/ 7, /*G*/ 7, /*H*/ 7, /*I*/ 7, /*J*/ 7, /*K*/ 7, /*L*/ 7, /*M*/ 7, /*N*/ 7, /*O*/ 7, /*P*/ 7, + /*Q*/ 7, /*R*/ 7, /*S*/ 7, /*T*/ 7, /*U*/ 7, /*V*/ 7, /*W*/ 7, /*X*/ 7, /*Y*/ 7, /*Z*/ 7, /*"*/ 5, /*'*/ 2, /*:*/ 3, /*;*/ 3, /*.*/ 3, /*,*/ 3, + /*a*/ 6, /*b*/ 6, /*c*/ 6, /*d*/ 6, /*e*/ 6, /*f*/ 6, /*g*/ 6, /*h*/ 6, /*i*/ 2, /*j*/ 6, /*k*/ 6, /*l*/ 3, /*m*/ 6, /*n*/ 6, /*o*/ 6, /*p*/ 6, + /*q*/ 6, /*r*/ 6, /*s*/ 6, /*t*/ 6, /*u*/ 6, /*v*/ 6, /*w*/ 6, /*x*/ 6, /*y*/ 6, /*z*/ 6, /*~*/ 7, /*¨*/ 6, /*^*/ 7, /*/*/ 6, /*%*/ 6, /*&*/ 7, +}; + +const u8 *const puppyprint_kerning_lut[2][80] = { small_font_kerning_1, small_font_kerning_2 }; diff --git a/src/engine/math_util.c b/src/engine/math_util.c index 81a56845e..f4ddfea7c 100644 --- a/src/engine/math_util.c +++ b/src/engine/math_util.c @@ -180,39 +180,35 @@ void mtxf_rot_trans_mul(Vec3s rot, Vec3f trans, Mat4 dest, Mat4 src) { register f32 sz = sins(rot[2]); register f32 cz = coss(rot[2]); - register f32 entry0; - register f32 entry1; - register f32 entry2; + register Vec3f entry; - entry0 = cy * cz; - entry1 = cy * sz; - entry2 = -sy; - dest[0][0] = entry0 * src[0][0] + entry1 * src[1][0] + entry2 * src[2][0]; - dest[0][1] = entry0 * src[0][1] + entry1 * src[1][1] + entry2 * src[2][1]; - dest[0][2] = entry0 * src[0][2] + entry1 * src[1][2] + entry2 * src[2][2]; + entry[0] = cy * cz; + entry[1] = cy * sz; + entry[2] = -sy; + dest[0][0] = entry[0] * src[0][0] + entry[1] * src[1][0] + entry[2] * src[2][0]; + dest[0][1] = entry[0] * src[0][1] + entry[1] * src[1][1] + entry[2] * src[2][1]; + dest[0][2] = entry[0] * src[0][2] + entry[1] * src[1][2] + entry[2] * src[2][2]; - entry1 = sx * sy; - entry0 = entry1 * cz - cx * sz; - entry1 = entry1 * sz + cx * cz; - entry2 = sx * cy; - dest[1][0] = entry0 * src[0][0] + entry1 * src[1][0] + entry2 * src[2][0]; - dest[1][1] = entry0 * src[0][1] + entry1 * src[1][1] + entry2 * src[2][1]; - dest[1][2] = entry0 * src[0][2] + entry1 * src[1][2] + entry2 * src[2][2]; + entry[1] = sx * sy; + entry[0] = (entry[1] * cz) - (cx * sz); + entry[1] = (entry[1] * sz) + (cx * cz); + entry[2] = sx * cy; + dest[1][0] = entry[0] * src[0][0] + entry[1] * src[1][0] + entry[2] * src[2][0]; + dest[1][1] = entry[0] * src[0][1] + entry[1] * src[1][1] + entry[2] * src[2][1]; + dest[1][2] = entry[0] * src[0][2] + entry[1] * src[1][2] + entry[2] * src[2][2]; - entry1 = cx * sy; - entry0 = entry1 * cz + sx * sz; - entry1 = entry1 * sz - sx * cz; - entry2 = cx * cy; - dest[2][0] = entry0 * src[0][0] + entry1 * src[1][0] + entry2 * src[2][0]; - dest[2][1] = entry0 * src[0][1] + entry1 * src[1][1] + entry2 * src[2][1]; - dest[2][2] = entry0 * src[0][2] + entry1 * src[1][2] + entry2 * src[2][2]; + entry[1] = cx * sy; + entry[0] = (entry[1] * cz) + (sx * sz); + entry[1] = (entry[1] * sz) - (sx * cz); + entry[2] = cx * cy; + dest[2][0] = entry[0] * src[0][0] + entry[1] * src[1][0] + entry[2] * src[2][0]; + dest[2][1] = entry[0] * src[0][1] + entry[1] * src[1][1] + entry[2] * src[2][1]; + dest[2][2] = entry[0] * src[0][2] + entry[1] * src[1][2] + entry[2] * src[2][2]; - entry0 = trans[0]; - entry1 = trans[1]; - entry2 = trans[2]; - dest[3][0] = entry0 * src[0][0] + entry1 * src[1][0] + entry2 * src[2][0] + src[3][0]; - dest[3][1] = entry0 * src[0][1] + entry1 * src[1][1] + entry2 * src[2][1] + src[3][1]; - dest[3][2] = entry0 * src[0][2] + entry1 * src[1][2] + entry2 * src[2][2] + src[3][2]; + vec3_copy(entry, trans); + dest[3][0] = entry[0] * src[0][0] + entry[1] * src[1][0] + entry[2] * src[2][0] + src[3][0]; + dest[3][1] = entry[0] * src[0][1] + entry[1] * src[1][1] + entry[2] * src[2][1] + src[3][1]; + dest[3][2] = entry[0] * src[0][2] + entry[1] * src[1][2] + entry[2] * src[2][2] + src[3][2]; dest[0][3] = dest[1][3] = dest[2][3] = 0; ((u32 *) dest)[15] = 0x3F800000; } @@ -228,7 +224,7 @@ void mtxf_lookat(Mat4 mtx, Vec3f from, Vec3f to, s32 roll) { register f32 dx = (to[0] - from[0]); register f32 dz = (to[2] - from[2]); register f32 invLength = sqrtf(sqr(dx) + sqr(dz)); - invLength = -(1.0f / MAX(invLength, NEAR_ZERO)); + invLength = -(1.0f / MAX(invLength, __FLT_EPSILON__)); dx *= invLength; dz *= invLength; f32 sr = sins(roll);