From 90e03fa38bdcf538b7e0978979bdb88ea75a5b90 Mon Sep 17 00:00:00 2001 From: XProger Date: Sat, 3 Dec 2022 18:23:19 +0300 Subject: [PATCH] #368 GBA pre-shift z by OT_SHIFT, pre-shift mesh vertex coords, fog math optims --- src/fixed/common.h | 10 ++-- src/fixed/room.h | 32 +++++------- src/platform/gba/asm/common_asm.inc | 19 +++---- src/platform/gba/asm/faceAddMeshQuads.s | 2 +- src/platform/gba/asm/faceAddMeshTriangles.s | 2 +- src/platform/gba/asm/faceAddRoomQuads.s | 3 +- src/platform/gba/asm/faceAddRoomTriangles.s | 3 +- src/platform/gba/asm/sphereIsVisible.s | 55 +++++++++++--------- src/platform/gba/asm/transformMesh.s | 21 ++++---- src/platform/gba/asm/transformRoom.s | 35 ++++++------- src/platform/gba/asm/transformRoomUW.s | 7 ++- src/platform/gba/data/GYM.PKD | Bin 1463808 -> 1463808 bytes src/platform/gba/data/LEVEL1.PKD | Bin 2365360 -> 2365360 bytes src/platform/gba/data/LEVEL2.PKD | Bin 2624600 -> 2624600 bytes src/platform/gba/data/TITLE.PKD | Bin 313260 -> 313260 bytes src/platform/gba/packer/out_GBA.h | 6 +-- src/platform/gba/render.iwram.cpp | 17 ++++-- 17 files changed, 102 insertions(+), 110 deletions(-) diff --git a/src/fixed/common.h b/src/fixed/common.h index 51898eb7..f8e2e540 100644 --- a/src/fixed/common.h +++ b/src/fixed/common.h @@ -205,7 +205,7 @@ // the maximum of active enemies #define MAX_ENEMIES 3 // visibility distance - #define VIEW_DIST (1024 * 10) + #define VIEW_DIST (10 << 10) // skip collideSpheres for enemies #define FAST_HITMASK #endif @@ -224,7 +224,7 @@ // set the maximum number of simultaneously played channels #define SND_CHANNELS 4 // visibility distance - #define VIEW_DIST (1024 * 10) + #define VIEW_DIST (10 << 10) // skip collideSpheres for enemies #define FAST_HITMASK #endif @@ -239,7 +239,7 @@ // the maximum of active enemies #define MAX_ENEMIES 3 // visibility distance - #define VIEW_DIST (1024 * 10) + #define VIEW_DIST (10 << 10) // skip collideSpheres for enemies #define FAST_HITMASK #endif @@ -457,10 +457,12 @@ extern int32 fps; #define FOV_SHIFT 3 #define FOG_SHIFT 1 #define FOG_MAX VIEW_DIST -#define FOG_MIN (FOG_MAX - (8192 >> FOG_SHIFT)) +#define FOG_MIN (FOG_MAX - 4096) #define VIEW_MIN_F (64 << FIXED_SHIFT) #define VIEW_MAX_F (VIEW_DIST << FIXED_SHIFT) +#define MESH_SHIFT 2 + #define TEX_ATTR_AKILL 1 #define NOT_ENEMY -0x4000 // default hp for non enemies diff --git a/src/fixed/room.h b/src/fixed/room.h index 8ca07d36..7086a2d2 100644 --- a/src/fixed/room.h +++ b/src/fixed/room.h @@ -667,12 +667,8 @@ bool traceX(const Location &from, Location &to, bool accurate) if (!d.x) return true; - int32 dx = abs(d.x) >> 3; - ASSERT(dx < DIV_TABLE_SIZE); - dx = FixedInvU(dx); - - d.y = (d.y * dx) >> (16 + 3 - TRACE_SHIFT); - d.z = (d.z * dx) >> (16 + 3 - TRACE_SHIFT); + d.y = (d.y << TRACE_SHIFT) / d.x; + d.z = (d.z << TRACE_SHIFT) / d.x; vec3i p = from.pos; @@ -680,10 +676,10 @@ bool traceX(const Location &from, Location &to, bool accurate) if (d.x < 0) { - d.x = -1024; + d.x = 1024; p.x &= ~1023; - p.y -= d.y * (p.x - from.pos.x) >> TRACE_SHIFT; - p.z -= d.z * (p.x - from.pos.x) >> TRACE_SHIFT; + p.y += d.y * (p.x - from.pos.x) >> TRACE_SHIFT; + p.z += d.z * (p.x - from.pos.x) >> TRACE_SHIFT; while (p.x > to.pos.x) { @@ -694,7 +690,7 @@ bool traceX(const Location &from, Location &to, bool accurate) TRACE_CHECK(nextRoom, p.x - 1, p.y, p.z); room = nextRoom; - p += d; + p -= d; } } else @@ -729,12 +725,8 @@ bool traceZ(const Location &from, Location &to, bool accurate) if (!d.z) return true; - int32 dz = abs(d.z) >> 3; - ASSERT(dz < DIV_TABLE_SIZE); - dz = FixedInvU(dz); - - d.x = (d.x * dz) >> (16 + 3 - TRACE_SHIFT); - d.y = (d.y * dz) >> (16 + 3 - TRACE_SHIFT); + d.x = (d.x << TRACE_SHIFT) / d.z; + d.y = (d.y << TRACE_SHIFT) / d.z; vec3i p = from.pos; @@ -742,10 +734,10 @@ bool traceZ(const Location &from, Location &to, bool accurate) if (d.z < 0) { - d.z = -1024; + d.z = 1024; p.z &= ~1023; - p.x -= d.x * (p.z - from.pos.z) >> TRACE_SHIFT; - p.y -= d.y * (p.z - from.pos.z) >> TRACE_SHIFT; + p.x += d.x * (p.z - from.pos.z) >> TRACE_SHIFT; + p.y += d.y * (p.z - from.pos.z) >> TRACE_SHIFT; while (p.z > to.pos.z) { @@ -756,7 +748,7 @@ bool traceZ(const Location &from, Location &to, bool accurate) TRACE_CHECK(nextRoom, p.x, p.y, p.z - 1); room = nextRoom; - p += d; + p -= d; } } else diff --git a/src/platform/gba/asm/common_asm.inc b/src/platform/gba/asm/common_asm.inc index fc3bb230..46af4800 100644 --- a/src/platform/gba/asm/common_asm.inc +++ b/src/platform/gba/asm/common_asm.inc @@ -71,21 +71,16 @@ .equ FIXED_SHIFT, 14 .equ PROJ_SHIFT, 4 -.equ OT_SHIFT, 4 +.equ MESH_SHIFT, 2 -.equ VIEW_DIST, (1024 * 10) -.equ FOG_SHIFT, 1 -.equ FOG_MAX, VIEW_DIST -.equ FOG_MIN, (FOG_MAX - (8192 >> FOG_SHIFT)) -.equ VIEW_MIN, (64) -.equ VIEW_MAX, (VIEW_DIST) +.equ VIEW_MIN, 64 +.equ VIEW_MAX, (10 << 10) .equ VIEW_OFF, 4096 +.equ FOG_SHIFT, 4 +.equ FOG_MIN, (VIEW_MAX - 4096) -.equ OT_SIZE, 641 - -.equ VIEW_MIN_F, (VIEW_MIN << FIXED_SHIFT) -.equ VIEW_MAX_F, (VIEW_MAX << FIXED_SHIFT) -.equ VIEW_OFF_F, (VIEW_OFF << FIXED_SHIFT) +.equ OT_SHIFT, 4 +.equ OT_SIZE, ((VIEW_MAX >> OT_SHIFT) + 1) .equ MAX_CAUSTICS, 32 .equ MAX_RAND_TABLE, 32 diff --git a/src/platform/gba/asm/faceAddMeshQuads.s b/src/platform/gba/asm/faceAddMeshQuads.s index a70d5818..ca035a1a 100644 --- a/src/platform/gba/asm/faceAddMeshQuads.s +++ b/src/platform/gba/asm/faceAddMeshQuads.s @@ -89,7 +89,7 @@ faceAddMeshQuads_asm: add depth, vg0, vg1, lsl #16 add depth, vg2, lsl #16 add depth, vg3, lsl #16 - lsr depth, #(16 + 2 + OT_SHIFT) + lsr depth, #(16 + 2) // faceAdd rsb vp0, vertices, vp0, lsr #3 diff --git a/src/platform/gba/asm/faceAddMeshTriangles.s b/src/platform/gba/asm/faceAddMeshTriangles.s index 9ed98f92..87c10bd4 100644 --- a/src/platform/gba/asm/faceAddMeshTriangles.s +++ b/src/platform/gba/asm/faceAddMeshTriangles.s @@ -80,7 +80,7 @@ faceAddMeshTriangles_asm: lsl vg0, #16 add depth, vg0, vg1, lsl #16 add depth, vg2, lsl #17 - lsr depth, #(16 + 2 + OT_SHIFT) + lsr depth, #(16 + 2) // faceAdd rsb vp0, vertices, vp0, lsr #3 diff --git a/src/platform/gba/asm/faceAddRoomQuads.s b/src/platform/gba/asm/faceAddRoomQuads.s index bc880ab4..29815c19 100644 --- a/src/platform/gba/asm/faceAddRoomQuads.s +++ b/src/platform/gba/asm/faceAddRoomQuads.s @@ -92,7 +92,7 @@ faceAddRoomQuads_asm: CCW .skip - // depth = MAX_Z4 + // depth (vz0) = MAX_Z4 ldrh vz0, [vp0, #VERTEX_Z] ldrh vz1, [vp1, #VERTEX_Z] ldrh vz2, [vp2, #VERTEX_Z] @@ -103,7 +103,6 @@ faceAddRoomQuads_asm: movlt vz0, vz2 cmp vz0, vz3 movlt vz0, vz3 - mov depth, vz0, lsr #OT_SHIFT // faceAdd rsb vp0, vertices, vp0, lsr #3 diff --git a/src/platform/gba/asm/faceAddRoomTriangles.s b/src/platform/gba/asm/faceAddRoomTriangles.s index 80c92e14..7f0f2a52 100644 --- a/src/platform/gba/asm/faceAddRoomTriangles.s +++ b/src/platform/gba/asm/faceAddRoomTriangles.s @@ -83,7 +83,7 @@ faceAddRoomTriangles_asm: CCW .skip - // depth = MAX_Z3 + // depth (vz0) = MAX_Z3 ldrh vz0, [vp0, #VERTEX_Z] ldrh vz1, [vp1, #VERTEX_Z] ldrh vz2, [vp2, #VERTEX_Z] @@ -91,7 +91,6 @@ faceAddRoomTriangles_asm: movlt vz0, vz1 cmp vz0, vz2 movlt vz0, vz2 - mov depth, vz0, lsr #OT_SHIFT // faceAdd rsb vp0, vertices, vp0, lsr #3 diff --git a/src/platform/gba/asm/sphereIsVisible.s b/src/platform/gba/asm/sphereIsVisible.s index 1ca7a21c..a862a930 100644 --- a/src/platform/gba/asm/sphereIsVisible.s +++ b/src/platform/gba/asm/sphereIsVisible.s @@ -14,13 +14,14 @@ vz .req r13 m .req r14 tmp .req m vp .req m -vMinXY .req z -vMaxXY .req r +dz .req vz +minXY .req z +maxXY .req r -rMinX .req vx -rMaxX .req x -rMinY .req vy -rMaxY .req y +minX .req vx +maxX .req x +minY .req vy +maxY .req y .global sphereIsVisible_asm sphereIsVisible_asm: @@ -42,38 +43,42 @@ sphereIsVisible_asm: mla vz, my, y, vz mla vz, mz, z, vz - cmp vz, #VIEW_MAX_F + cmp vz, #(VIEW_MAX << FIXED_SHIFT) bhi .fail mov x, vx, asr #FIXED_SHIFT mov y, vy, asr #FIXED_SHIFT + mov z, vz, asr #(FIXED_SHIFT + OT_SHIFT) - mov z, vz, lsr #(FIXED_SHIFT + 4) - add z, vz, lsr #(FIXED_SHIFT + 6) - divLUT tmp, z + add dz, z, z, lsr #2 + divLUT tmp, dz mul x, tmp, x mul y, tmp, y mul r, tmp, r mov x, x, asr #(16 - PROJ_SHIFT) - mov y, y, lsl #(PROJ_SHIFT) + mov y, y, asr #(16 - PROJ_SHIFT) - sub rMinX, x, r, lsr #(16 - PROJ_SHIFT) - add rMaxX, x, r, lsr #(16 - PROJ_SHIFT) - sub rMinY, y, r, lsl #PROJ_SHIFT - add rMaxY, y, r, lsl #PROJ_SHIFT + sub minX, x, r, lsr #(16 - PROJ_SHIFT) + add maxX, x, r, lsr #(16 - PROJ_SHIFT) + sub minY, y, r, lsr #(16 - PROJ_SHIFT) + add maxY, y, r, lsr #(16 - PROJ_SHIFT) ldr vp, =viewportRel - ldmia vp, {vMinXY, vMaxXY} - - cmp rMaxX, vMinXY, asr #16 - blt .fail - cmp rMaxY, vMinXY, lsl #16 - blt .fail - cmp rMinX, vMaxXY, asr #16 - bgt .fail - cmp rMinY, vMaxXY, lsl #16 - bgt .fail + ldmia vp, {minXY, maxXY} + + cmp maxX, minXY, asr #16 + ble .fail + cmp minX, maxXY, asr #16 + bge .fail + + lsl minXY, #16 + lsl maxXY, #16 + + cmp maxY, minXY, asr #16 + ble .fail + cmp minY, maxXY, asr #16 + bge .fail mov r0, #1 fiq_off diff --git a/src/platform/gba/asm/transformMesh.s b/src/platform/gba/asm/transformMesh.s index be80ce4d..59cd3075 100644 --- a/src/platform/gba/asm/transformMesh.s +++ b/src/platform/gba/asm/transformMesh.s @@ -58,7 +58,7 @@ transformMesh_asm: asr mw1, #FIXED_SHIFT fiq_off ldmia m, {mx2, my2, mz2, mw2} - asr mw2, #FIXED_SHIFT + asr mw2, #(FIXED_SHIFT + OT_SHIFT) fiq_on .loop: @@ -71,40 +71,39 @@ transformMesh_asm: mul x, mx0, vx mla x, my0, vy, x mla x, mz0, vz, x - add x, mw0, x, asr #FIXED_SHIFT + add x, mw0, x, asr #(FIXED_SHIFT - MESH_SHIFT) // transform y mul y, mx1, vx mla y, my1, vy, y mla y, mz1, vz, y - add y, mw1, y, asr #FIXED_SHIFT + add y, mw1, y, asr #(FIXED_SHIFT - MESH_SHIFT) fiq_off // transform z mul z, mx2, vx mla z, my2, vy, z mla z, mz2, vz, z - add z, mw2, z, asr #FIXED_SHIFT + add z, mw2, z, asr #(FIXED_SHIFT - MESH_SHIFT + OT_SHIFT) bic vg, #CLIP_MASK // clear clipping flags // z clipping - cmp z, #VIEW_MIN - movle z, #VIEW_MIN + cmp z, #(VIEW_MIN >> OT_SHIFT) + movle z, #(VIEW_MIN >> OT_SHIFT) orrle vg, #CLIP_NEAR - cmp z, #VIEW_MAX - movge z, #VIEW_MAX + cmp z, #(VIEW_MAX >> OT_SHIFT) + movge z, #(VIEW_MAX >> OT_SHIFT) orrge vg, #CLIP_FAR // project - mov dz, z, lsr #4 - add dz, z, lsr #6 + add dz, z, z, lsr #2 divLUT tmp, dz mul dx, x, tmp mul dy, y, tmp + asr x, dx, #(16 - PROJ_SHIFT) asr y, dy, #(16 - PROJ_SHIFT) - add x, #(FRAME_WIDTH >> 1) add y, #(FRAME_HEIGHT >> 1) diff --git a/src/platform/gba/asm/transformRoom.s b/src/platform/gba/asm/transformRoom.s index 4b46834a..05ff7ff6 100644 --- a/src/platform/gba/asm/transformRoom.s +++ b/src/platform/gba/asm/transformRoom.s @@ -35,7 +35,7 @@ maxXY .req vz tmp .req vy dx .req vz -dy .req tmp +dy .req vy dz .req vz fog .req vz @@ -65,7 +65,7 @@ transformRoom_asm: asr mw1, #FIXED_SHIFT fiq_off ldmia m, {mx2, my2, mz2, mw2} - asr mw2, #FIXED_SHIFT + asr mw2, #(FIXED_SHIFT + OT_SHIFT) .loop: // unpack vertex @@ -79,16 +79,16 @@ transformRoom_asm: mul z, mx2, vx mla z, my2, vy, z mla z, mz2, vz, z - add z, mw2, z, asr #(FIXED_SHIFT - 8) + add z, mw2, z, asr #(FIXED_SHIFT - 8 + OT_SHIFT) // skip if vertex is out of z-range - add z, #VIEW_OFF - cmp z, #(VIEW_OFF + VIEW_OFF + VIEW_MAX) + add z, #(VIEW_OFF >> OT_SHIFT) + cmp z, #((VIEW_OFF + VIEW_OFF + VIEW_MAX) >> OT_SHIFT) movhi vg, #(CLIP_NEAR + CLIP_FAR) bhi .skip - mov vg, v, lsr #24 - sub z, #VIEW_OFF + mov vg, v, lsr #(24 + 3) + sub z, #(VIEW_OFF >> OT_SHIFT) fiq_on // transform y @@ -105,26 +105,21 @@ transformRoom_asm: fiq_off // fog - cmp z, #FOG_MIN - subgt fog, z, #FOG_MIN - addgt vg, fog, lsr #4 - - // vg 0..255 -> 0..31 - lsr vg, #3 - cmp vg, #31 + subs fog, z, #(FOG_MIN >> OT_SHIFT) + addgt vg, fog, lsr #(3 + FOG_SHIFT - OT_SHIFT) + cmpgt vg, #31 movgt vg, #31 // z clipping - cmp z, #VIEW_MIN - movle z, #VIEW_MIN + cmp z, #(VIEW_MIN >> OT_SHIFT) + movle z, #(VIEW_MIN >> OT_SHIFT) orrle vg, #CLIP_NEAR - cmp z, #VIEW_MAX - movge z, #VIEW_MAX + cmp z, #(VIEW_MAX >> OT_SHIFT) + movge z, #(VIEW_MAX >> OT_SHIFT) orrge vg, #CLIP_FAR // project - mov dz, z, lsr #4 - add dz, z, lsr #6 + add dz, z, z, lsr #2 divLUT tmp, dz mul dx, x, tmp mul dy, y, tmp diff --git a/src/platform/gba/asm/transformRoomUW.s b/src/platform/gba/asm/transformRoomUW.s index daef2450..3b1149b8 100644 --- a/src/platform/gba/asm/transformRoomUW.s +++ b/src/platform/gba/asm/transformRoomUW.s @@ -136,8 +136,7 @@ transformRoomUW_asm: add vg, caust, asr #5 // fog - cmp z, #FOG_MIN - subgt fog, z, #FOG_MIN + subs fog, z, #FOG_MIN addgt vg, fog, lsr #4 // vg 0..255 -> 0..31 @@ -154,8 +153,8 @@ transformRoomUW_asm: orrge vg, #CLIP_FAR // project - mov dz, z, lsr #4 - add dz, z, lsr #6 + add dz, z, z, lsr #2 + lsr dz, #4 divLUT tmp, dz mul dx, x, tmp mul dy, y, tmp diff --git a/src/platform/gba/data/GYM.PKD b/src/platform/gba/data/GYM.PKD index d96b742dbab82e933e43fb5a3534b00c0b7efa41..9e8f61aa4ba224cbc8b4d4203016ee6213017dd2 100644 GIT binary patch delta 18294 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 delta 18294 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 diff --git a/src/platform/gba/data/LEVEL1.PKD b/src/platform/gba/data/LEVEL1.PKD index bbd199b71ca7f3ec158b992247846b2c7c914aae..17291b1b3ca8f50336c55d40e5c81b268f310f80 100644 GIT binary patch delta 20154 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 IT6yRH2Bb~sx&QzG delta 21666 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 diff --git a/src/platform/gba/data/TITLE.PKD b/src/platform/gba/data/TITLE.PKD index 2c4015fee396ae246aa6619bf724565f86b5d2f5..510d4dd982753d20b29d5c920f96d5635fa1d477 100644 GIT binary patch delta 1783 zcmb7^O=}xh6o!vN^mx&nErw;3*BTDNPa?pfLa{rGRs+aALypw zMc4f`0gWujmaG};^m)&93T-L07JlaFz4v_HJ9_)((c3qVet6w^-TgIvcXaB$u#TB! z*4{Dq%mtQov3C8z>f$J!pJw?fKQ~dwfkMvk6XOP1I{5TJ_a&`ZOY% zDWbS$(H@wUzvQKWG|JtYfKaQcg_&hyd z9{fN~vxE0x3lH9+tkBnd4h(;dQu_+78C%Cjmf#S&kFeawuy13OKC4C8T{tC9BI?R} zb{D*XUE9EeU-@e34TD|zoo`{oM+^6)lUp5b;tjUk>Ts*Ws}3*OP3ZFSh$CueVhU=f zCSqoa#xhmbQVT1VB_*4|9({?BH_}$V(-TgC&&LhxGDNp+ngC zG<11+#POFrMvQzBoWa&J7m*-SWl0woHfPwGGoFqvE?}R3ab_R=$;IVwU!>nVT)~lb zX)5!EB6prSvU?6Z^M+AKzpsAzGMz75x|>i^LCD0pidoswOUu>;-#<{wnj55vmgt#T zS^GXFy^C3jS=sppea8_gPNtM(@4a1;c!QZK$@z92oZ6OaSHhkRNZEm1uJ8aY!2uVv zWD0X=F^@gPmbPaO6IgON?}{v4O~*@x&8k3*9)ciw!uhyLdC_N{3Yjpfbb;0G1J#@@{Ox*^IXd{LhS*GiJ08T!g8J`1`!8 z6xWbviU_RX51uAQHfGXAV9cb8QM{RVtofY?0vFG4qDMtnQM*jL<=R&LYC49X+kpf)EuNU&D`70)vvY-_Wkn z_%Q>4k`B;kzj#jBUzlJgt2k_*(lTMk>;qomW7JYq#_fcSathOYC64nLvP~8{Y_B-afs9}AFXa-ulJP6N#%W$)89&A@KC&gqcnLCILdH%qD&uATFHGB0-pg_y zA7s2j=IzPcjR|)rs-5Jfe)}DP%jjon;5lnSy12}*LVAlwAE%P;a)|2;rxEm~*To@g zdcDbpv_IkZXe~w2aj%cpd_WJ96iBlV9Vcq7g96WZMaz#P{d&Q+YS z4X=wiuBC7A=BS`{m){)aLlc3=8CF0%>bHukyo4=&bb)EES6P@i$f$HN?RSzt%uc$w J*~!G$@jJxKHtYZZ diff --git a/src/platform/gba/packer/out_GBA.h b/src/platform/gba/packer/out_GBA.h index 173f554b..43607eac 100644 --- a/src/platform/gba/packer/out_GBA.h +++ b/src/platform/gba/packer/out_GBA.h @@ -692,9 +692,9 @@ struct out_GBA int16 x, y, z; } v; - v.x = vertices[j].x; - v.y = vertices[j].y; - v.z = vertices[j].z; + v.x = vertices[j].x >> 2; + v.y = vertices[j].y >> 2; + v.z = vertices[j].z >> 2; f.write(v.x); f.write(v.y); diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index f8631bac..a262410d 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -166,7 +166,7 @@ void transformRoom_c(const RoomVertex* vertices, int32 count) int32 vx = (value & (0xFF)) << 8; int32 vy = (value & (0xFF << 8)); int32 vz = (value & (0xFF << 16)) >> 8; - int32 vg = (value & (0xFF << 24)) >> (24 - 5); + int32 vg = (value & (0xFF << 24)) >> (24 + 3); const Matrix &m = matrixGet(); int32 x = DP43(m.e00, m.e01, m.e02, m.e03, vx, vy, vz); @@ -189,11 +189,13 @@ void transformRoom_c(const RoomVertex* vertices, int32 count) y >>= FIXED_SHIFT; z >>= FIXED_SHIFT; - if (z > FOG_MIN) + int32 fog = z - FOG_MIN; + if (fog > 0) { - vg += (z - FOG_MIN) << FOG_SHIFT; - if (vg > 8191) { - vg = 8191; + vg += fog >> (FOG_SHIFT + 3); + if (vg > 31) + { + vg = 31; } } @@ -889,6 +891,11 @@ void renderShadow(int32 x, int32 z, int32 sx, int32 sz) return; } + x >>= MESH_SHIFT; + z >>= MESH_SHIFT; + sx >>= MESH_SHIFT; + sz >>= MESH_SHIFT; + int16 xns1 = x - sx; int16 xps1 = x + sx; int16 xns2 = xns1 - sx;