From f8afea55c22c573a5afc3067e34d14f526411034 Mon Sep 17 00:00:00 2001 From: Cuptain Date: Sun, 1 Sep 2024 01:00:42 +1000 Subject: [PATCH] removing fixed arithmetic --- src/cosTable.h | 722 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 119 ++++---- src/sinTable.h | 722 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1505 insertions(+), 58 deletions(-) create mode 100644 src/cosTable.h create mode 100644 src/sinTable.h diff --git a/src/cosTable.h b/src/cosTable.h new file mode 100644 index 0000000..2b581ea --- /dev/null +++ b/src/cosTable.h @@ -0,0 +1,722 @@ +static const s16 cosTable[720] ={ +256, +256, +256, +256, +256, +256, +256, +256, +255, +255, +255, +255, +255, +254, +254, +254, +254, +253, +253, +252, +252, +252, +251, +251, +250, +250, +249, +249, +248, +248, +247, +247, +246, +245, +245, +244, +243, +243, +242, +241, +241, +240, +239, +238, +237, +237, +236, +235, +234, +233, +232, +231, +230, +229, +228, +227, +226, +225, +224, +223, +222, +221, +219, +218, +217, +216, +215, +213, +212, +211, +210, +208, +207, +206, +204, +203, +202, +200, +199, +198, +196, +195, +193, +192, +190, +189, +187, +186, +184, +183, +181, +179, +178, +176, +175, +173, +171, +170, +168, +166, +165, +163, +161, +159, +158, +156, +154, +152, +150, +149, +147, +145, +143, +141, +139, +138, +136, +134, +132, +130, +128, +126, +124, +122, +120, +118, +116, +114, +112, +110, +108, +106, +104, +102, +100, +98, +96, +94, +92, +90, +88, +85, +83, +81, +79, +77, +75, +73, +71, +68, +66, +64, +62, +60, +58, +55, +53, +51, +49, +47, +44, +42, +40, +38, +36, +33, +31, +29, +27, +25, +22, +20, +18, +16, +13, +11, +9, +7, +4, +2, +0, +-2, +-4, +-7, +-9, +-11, +-13, +-16, +-18, +-20, +-22, +-25, +-27, +-29, +-31, +-33, +-36, +-38, +-40, +-42, +-44, +-47, +-49, +-51, +-53, +-55, +-58, +-60, +-62, +-64, +-66, +-68, +-71, +-73, +-75, +-77, +-79, +-81, +-83, +-85, +-88, +-90, +-92, +-94, +-96, +-98, +-100, +-102, +-104, +-106, +-108, +-110, +-112, +-114, +-116, +-118, +-120, +-122, +-124, +-126, +-128, +-130, +-132, +-134, +-136, +-138, +-139, +-141, +-143, +-145, +-147, +-149, +-150, +-152, +-154, +-156, +-158, +-159, +-161, +-163, +-165, +-166, +-168, +-170, +-171, +-173, +-175, +-176, +-178, +-179, +-181, +-183, +-184, +-186, +-187, +-189, +-190, +-192, +-193, +-195, +-196, +-198, +-199, +-200, +-202, +-203, +-204, +-206, +-207, +-208, +-210, +-211, +-212, +-213, +-215, +-216, +-217, +-218, +-219, +-221, +-222, +-223, +-224, +-225, +-226, +-227, +-228, +-229, +-230, +-231, +-232, +-233, +-234, +-235, +-236, +-237, +-237, +-238, +-239, +-240, +-241, +-241, +-242, +-243, +-243, +-244, +-245, +-245, +-246, +-247, +-247, +-248, +-248, +-249, +-249, +-250, +-250, +-251, +-251, +-252, +-252, +-252, +-253, +-253, +-254, +-254, +-254, +-254, +-255, +-255, +-255, +-255, +-255, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-255, +-255, +-255, +-255, +-255, +-254, +-254, +-254, +-254, +-253, +-253, +-252, +-252, +-252, +-251, +-251, +-250, +-250, +-249, +-249, +-248, +-248, +-247, +-247, +-246, +-245, +-245, +-244, +-243, +-243, +-242, +-241, +-241, +-240, +-239, +-238, +-237, +-237, +-236, +-235, +-234, +-233, +-232, +-231, +-230, +-229, +-228, +-227, +-226, +-225, +-224, +-223, +-222, +-221, +-219, +-218, +-217, +-216, +-215, +-213, +-212, +-211, +-210, +-208, +-207, +-206, +-204, +-203, +-202, +-200, +-199, +-198, +-196, +-195, +-193, +-192, +-190, +-189, +-187, +-186, +-184, +-183, +-181, +-179, +-178, +-176, +-175, +-173, +-171, +-170, +-168, +-166, +-165, +-163, +-161, +-159, +-158, +-156, +-154, +-152, +-150, +-149, +-147, +-145, +-143, +-141, +-139, +-138, +-136, +-134, +-132, +-130, +-128, +-126, +-124, +-122, +-120, +-118, +-116, +-114, +-112, +-110, +-108, +-106, +-104, +-102, +-100, +-98, +-96, +-94, +-92, +-90, +-88, +-85, +-83, +-81, +-79, +-77, +-75, +-73, +-71, +-68, +-66, +-64, +-62, +-60, +-58, +-55, +-53, +-51, +-49, +-47, +-44, +-42, +-40, +-38, +-36, +-33, +-31, +-29, +-27, +-25, +-22, +-20, +-18, +-16, +-13, +-11, +-9, +-7, +-4, +-2, +0, +2, +4, +7, +9, +11, +13, +16, +18, +20, +22, +25, +27, +29, +31, +33, +36, +38, +40, +42, +44, +47, +49, +51, +53, +55, +58, +60, +62, +64, +66, +68, +71, +73, +75, +77, +79, +81, +83, +85, +88, +90, +92, +94, +96, +98, +100, +102, +104, +106, +108, +110, +112, +114, +116, +118, +120, +122, +124, +126, +128, +130, +132, +134, +136, +138, +139, +141, +143, +145, +147, +149, +150, +152, +154, +156, +158, +159, +161, +163, +165, +166, +168, +170, +171, +173, +175, +176, +178, +179, +181, +183, +184, +186, +187, +189, +190, +192, +193, +195, +196, +198, +199, +200, +202, +203, +204, +206, +207, +208, +210, +211, +212, +213, +215, +216, +217, +218, +219, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +237, +238, +239, +240, +241, +241, +242, +243, +243, +244, +245, +245, +246, +247, +247, +248, +248, +249, +249, +250, +250, +251, +251, +252, +252, +252, +253, +253, +254, +254, +254, +254, +255, +255, +255, +255, +255, +256, +256, +256, +256, +256, +256, +256, +}; diff --git a/src/main.c b/src/main.c index 97c40d6..4e8f4de 100644 --- a/src/main.c +++ b/src/main.c @@ -1,11 +1,15 @@ #include - +#include "sinTable.h" +#include "cosTable.h" +#define TABLE_LENGTH 720 #define SPEED 5 +#define FRAC_BITS 8 Line l; s16 angle = 0; s16 x, y; + const u8 map[10][10] = {{1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,1}, {1,1,1,1,0,0,1,1,1,1}, @@ -25,40 +29,38 @@ void castRay(s16 angle){ if(angle >= 360) angle = angle - 360; if(angle < 0) angle = 360 + angle; u16 r,mx,my,mp,dof; - fix16 rx,ry,ra,xo,yo; - s16 ind = (int)((float)angle/360.0f*1024.0f); - fix16 dy = sinFix16(ind); - fix16 dx = cosFix16(ind); - fix16 tan = FIX16(0); - if(dx != 0) tan = fix16Div(dy, dx); - fix16 aTan = FIX16(0); - if(tan != 0) aTan = fix16Div(FIX16(-1), tan); - s16 tanInt = fix16ToInt(fix16Mul(aTan, FIX16(100))); + s16 rx,ry,ra,xo,yo; + s16 dy = sinTable[angle << 1]; + s16 dx = cosTable[angle << 1]; + s16 tan = 0; + if(dx != 0) tan = (dy << FRAC_BITS)/dx; + s16 aTan = 0; + if(tan != 0) aTan = -(1 << (FRAC_BITS*2))/tan; dof = 0; - fix16 distH = FIX16(500); - fix16 hx = FIX16(l.pt1.x); - fix16 hy = FIX16(l.pt1.y); + s16 distH = 500; + s16 hx = l.pt1.x << FRAC_BITS; + s16 hy = l.pt1.y << FRAC_BITS; if(dy == 0){ - rx = FIX16(l.pt1.x); - ry = FIX16(l.pt1.y); + rx = l.pt1.x << FRAC_BITS; + ry = l.pt1.y << FRAC_BITS; dof = 8; }else { if(angle > 180) { - ry = FIX16(l.pt1.y / 10 * 10)-FIX16(1); - rx = fix16Mul(FIX16(l.pt1.y) - ry,aTan) + FIX16(l.pt1.x); - yo = FIX16(-10); - xo = fix16Mul(0-yo,aTan); + ry = ((l.pt1.y / 10 * 10)-1) << FRAC_BITS; + rx = (((l.pt1.y - (ry >> FRAC_BITS))*aTan)) + (l.pt1.x << FRAC_BITS); + yo = -(10 << FRAC_BITS); + xo = ((-yo >> FRAC_BITS)*aTan); } if(angle < 180) { - ry = FIX16((l.pt1.y / 10 * 10)+10); - rx = fix16Mul(FIX16(l.pt1.y) - ry,aTan) + FIX16(l.pt1.x); - yo = FIX16(10); - xo = fix16Mul(0-yo,aTan); + ry = ((l.pt1.y / 10 * 10)+10) << FRAC_BITS; + rx = (((l.pt1.y - (ry >> FRAC_BITS))*aTan)) + (l.pt1.x << FRAC_BITS); + yo = 10 << FRAC_BITS; + xo = (-(yo >> FRAC_BITS)*aTan); } } while(dof<8){ - mx = fix16ToInt(rx) / 10; - my = fix16ToInt(ry) / 10; + mx = (rx >> FRAC_BITS) / 10; + my = (ry >> FRAC_BITS) / 10; if(rx < 0 || ry < 0){ dof = 8; continue; @@ -67,7 +69,7 @@ void castRay(s16 angle){ dof = 8; hx = rx; hy = ry; - distH = dist(l.pt1.x, l.pt1.y, fix16ToInt(rx), fix16ToInt(ry)); + distH = dist(l.pt1.x, l.pt1.y, rx >> FRAC_BITS, ry >> FRAC_BITS); }else{ rx = rx + xo; ry = ry + yo; @@ -76,38 +78,39 @@ void castRay(s16 angle){ } dof = 0; - fix16 distV = FIX16(500); - fix16 vx = FIX16(l.pt1.x); - fix16 vy = FIX16(l.pt1.y); - fix16 nTan = 0-tan; - if(fix16ToInt(nTan) > 51){ - nTan = FIX16(51); - } - if(fix16ToInt(nTan) < -51){ - nTan = FIX16(-51); - } + s16 distV = 500; + s16 vx = l.pt1.x << FRAC_BITS; + s16 vy = l.pt1.y << FRAC_BITS; + s16 nTan = -tan; + //s16 threshold = (51 << FRAC_BITS); + //if(nTan > threshold){ + // nTan = threshold; + //} + //if(nTan < -threshold){ + // nTan = -threshold; + //} if(angle > 90 && r < 270) { - rx = FIX16(l.pt1.x / 10 * 10)-FIX16(1); - ry = fix16Mul(FIX16(l.pt1.x) - rx,nTan) + FIX16(l.pt1.y); - xo = FIX16(-10); - yo = fix16Mul(0-xo,nTan); + rx = ((l.pt1.x / 10 * 10)-1) << FRAC_BITS; + ry = ((l.pt1.x) - (rx >> FRAC_BITS)*nTan) + (l.pt1.y << FRAC_BITS); + xo = -(10 << FRAC_BITS); + yo = ((-xo >> FRAC_BITS)*nTan); } if(angle < 90 || angle > 270) { - rx = FIX16((l.pt1.x / 10 * 10)+10); - ry = fix16Mul(FIX16(l.pt1.x) - rx,nTan) + FIX16(l.pt1.y); - xo = FIX16(10); - yo = fix16Mul(0-xo,nTan); + rx = ((l.pt1.x / 10 * 10)+10) << FRAC_BITS; + ry = ((l.pt1.x) - (rx >> FRAC_BITS)*nTan) + (l.pt1.y << FRAC_BITS); + xo = 10 << FRAC_BITS; + yo = -(xo >> FRAC_BITS)*nTan; } if(dx == 0){ - rx = FIX16(l.pt1.x); - ry = FIX16(l.pt1.y); - xo = FIX16(0); - yo = FIX16(0); + rx = l.pt1.x << FRAC_BITS; + ry = l.pt1.y << FRAC_BITS; + xo = 0; + yo = 0; dof = 8; } while(dof<8){ - mx = fix16ToInt(rx) / 10; - my = fix16ToInt(ry) / 10; + mx = (rx >> FRAC_BITS) / 10; + my = (ry >> FRAC_BITS) / 10; if(rx < 0 || ry < 0){ dof = 8; continue; @@ -116,20 +119,20 @@ void castRay(s16 angle){ dof = 8; vx = rx; vy = ry; - distV = dist(l.pt1.x, l.pt1.y, fix16ToInt(rx), fix16ToInt(ry)); + distV = dist(l.pt1.x, l.pt1.y, rx >> FRAC_BITS, ry >> FRAC_BITS); }else{ rx = rx + xo; ry = ry + yo; dof += 1; } } - if(distV < distH){ - l.pt2.x = fix16ToInt(vx); - l.pt2.y = fix16ToInt(vy); - }else { - l.pt2.x = fix16ToInt(hx); - l.pt2.y = fix16ToInt(hy); - } + //if(distV < distH){ + l.pt2.x = vx >> FRAC_BITS; + l.pt2.y = vy >> FRAC_BITS; + //}else { + //l.pt2.x = hx >> FRAC_BITS; + //l.pt2.y = hy >> FRAC_BITS; + //} } diff --git a/src/sinTable.h b/src/sinTable.h new file mode 100644 index 0000000..f4267af --- /dev/null +++ b/src/sinTable.h @@ -0,0 +1,722 @@ +static const s16 sinTable[720] ={ +0, +2, +4, +7, +9, +11, +13, +16, +18, +20, +22, +25, +27, +29, +31, +33, +36, +38, +40, +42, +44, +47, +49, +51, +53, +55, +58, +60, +62, +64, +66, +68, +71, +73, +75, +77, +79, +81, +83, +85, +88, +90, +92, +94, +96, +98, +100, +102, +104, +106, +108, +110, +112, +114, +116, +118, +120, +122, +124, +126, +128, +130, +132, +134, +136, +138, +139, +141, +143, +145, +147, +149, +150, +152, +154, +156, +158, +159, +161, +163, +165, +166, +168, +170, +171, +173, +175, +176, +178, +179, +181, +183, +184, +186, +187, +189, +190, +192, +193, +195, +196, +198, +199, +200, +202, +203, +204, +206, +207, +208, +210, +211, +212, +213, +215, +216, +217, +218, +219, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +237, +238, +239, +240, +241, +241, +242, +243, +243, +244, +245, +245, +246, +247, +247, +248, +248, +249, +249, +250, +250, +251, +251, +252, +252, +252, +253, +253, +254, +254, +254, +254, +255, +255, +255, +255, +255, +256, +256, +256, +256, +256, +256, +256, +256, +256, +256, +256, +256, +256, +256, +256, +255, +255, +255, +255, +255, +254, +254, +254, +254, +253, +253, +252, +252, +252, +251, +251, +250, +250, +249, +249, +248, +248, +247, +247, +246, +245, +245, +244, +243, +243, +242, +241, +241, +240, +239, +238, +237, +237, +236, +235, +234, +233, +232, +231, +230, +229, +228, +227, +226, +225, +224, +223, +222, +221, +219, +218, +217, +216, +215, +213, +212, +211, +210, +208, +207, +206, +204, +203, +202, +200, +199, +198, +196, +195, +193, +192, +190, +189, +187, +186, +184, +183, +181, +179, +178, +176, +175, +173, +171, +170, +168, +166, +165, +163, +161, +159, +158, +156, +154, +152, +150, +149, +147, +145, +143, +141, +139, +138, +136, +134, +132, +130, +128, +126, +124, +122, +120, +118, +116, +114, +112, +110, +108, +106, +104, +102, +100, +98, +96, +94, +92, +90, +88, +85, +83, +81, +79, +77, +75, +73, +71, +68, +66, +64, +62, +60, +58, +55, +53, +51, +49, +47, +44, +42, +40, +38, +36, +33, +31, +29, +27, +25, +22, +20, +18, +16, +13, +11, +9, +7, +4, +2, +0, +-2, +-4, +-7, +-9, +-11, +-13, +-16, +-18, +-20, +-22, +-25, +-27, +-29, +-31, +-33, +-36, +-38, +-40, +-42, +-44, +-47, +-49, +-51, +-53, +-55, +-58, +-60, +-62, +-64, +-66, +-68, +-71, +-73, +-75, +-77, +-79, +-81, +-83, +-85, +-88, +-90, +-92, +-94, +-96, +-98, +-100, +-102, +-104, +-106, +-108, +-110, +-112, +-114, +-116, +-118, +-120, +-122, +-124, +-126, +-128, +-130, +-132, +-134, +-136, +-138, +-139, +-141, +-143, +-145, +-147, +-149, +-150, +-152, +-154, +-156, +-158, +-159, +-161, +-163, +-165, +-166, +-168, +-170, +-171, +-173, +-175, +-176, +-178, +-179, +-181, +-183, +-184, +-186, +-187, +-189, +-190, +-192, +-193, +-195, +-196, +-198, +-199, +-200, +-202, +-203, +-204, +-206, +-207, +-208, +-210, +-211, +-212, +-213, +-215, +-216, +-217, +-218, +-219, +-221, +-222, +-223, +-224, +-225, +-226, +-227, +-228, +-229, +-230, +-231, +-232, +-233, +-234, +-235, +-236, +-237, +-237, +-238, +-239, +-240, +-241, +-241, +-242, +-243, +-243, +-244, +-245, +-245, +-246, +-247, +-247, +-248, +-248, +-249, +-249, +-250, +-250, +-251, +-251, +-252, +-252, +-252, +-253, +-253, +-254, +-254, +-254, +-254, +-255, +-255, +-255, +-255, +-255, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-256, +-255, +-255, +-255, +-255, +-255, +-254, +-254, +-254, +-254, +-253, +-253, +-252, +-252, +-252, +-251, +-251, +-250, +-250, +-249, +-249, +-248, +-248, +-247, +-247, +-246, +-245, +-245, +-244, +-243, +-243, +-242, +-241, +-241, +-240, +-239, +-238, +-237, +-237, +-236, +-235, +-234, +-233, +-232, +-231, +-230, +-229, +-228, +-227, +-226, +-225, +-224, +-223, +-222, +-221, +-219, +-218, +-217, +-216, +-215, +-213, +-212, +-211, +-210, +-208, +-207, +-206, +-204, +-203, +-202, +-200, +-199, +-198, +-196, +-195, +-193, +-192, +-190, +-189, +-187, +-186, +-184, +-183, +-181, +-179, +-178, +-176, +-175, +-173, +-171, +-170, +-168, +-166, +-165, +-163, +-161, +-159, +-158, +-156, +-154, +-152, +-150, +-149, +-147, +-145, +-143, +-141, +-139, +-138, +-136, +-134, +-132, +-130, +-128, +-126, +-124, +-122, +-120, +-118, +-116, +-114, +-112, +-110, +-108, +-106, +-104, +-102, +-100, +-98, +-96, +-94, +-92, +-90, +-88, +-85, +-83, +-81, +-79, +-77, +-75, +-73, +-71, +-68, +-66, +-64, +-62, +-60, +-58, +-55, +-53, +-51, +-49, +-47, +-44, +-42, +-40, +-38, +-36, +-33, +-31, +-29, +-27, +-25, +-22, +-20, +-18, +-16, +-13, +-11, +-9, +-7, +-4, +-2, +};