removing fixed arithmetic

This commit is contained in:
Cuptain 2024-09-01 01:00:42 +10:00
parent 10ed515e86
commit f8afea55c2
3 changed files with 1505 additions and 58 deletions

722
src/cosTable.h Normal file
View File

@ -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,
};

View File

@ -1,11 +1,15 @@
#include <genesis.h>
#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;
//}
}

722
src/sinTable.h Normal file
View File

@ -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,
};