mirror of
https://github.com/Blzut3/Wolf3D-Mac.git
synced 2024-12-01 05:49:29 +00:00
1 line
13 KiB
C
1 line
13 KiB
C
|
#include "wolfdef.h"
#include <string.h>
/**********************************
Return the absolute value
**********************************/
Word w_abs(int val)
{
return val>=0 ? val : -val;
}
/**********************************
Return a seeded random number
**********************************/
Byte rndtable[256] = {
0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66,
74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36,
95,110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188,
52,140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224,
149,104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242,
145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0,
175,143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235,
25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113,
94,161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75,
136,156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196,
135,106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113,
80,250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241,
24,223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224,
145,224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95,
28,139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226,
71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36,
17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106,
197,242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136,
120,163, 236, 249
};
Word rndindex = 0;
Word w_rnd(void)
{
rndindex = (rndindex+1)&0xff; /* Next index */
return rndtable[rndindex]; /* Return the number */
}
/**********************************
Return an angle value based on a slope.
Assume that x is >= to y.
**********************************/
Word AngleFromSlope2(Word y,Word x)
{
return tantoangle[((LongWord)y<<SLOPEBITS)/x];
}
/**********************************
Convert an arbitrary point from the viewxy into an angle.
To get a global angle from cartesian coordinates, the coordinates are flipped until
they are in the first octant of the coordinate system, then the y (<=x) is scaled and
divided by x to get a tangent (slope) value which is looked up in the tantoangle[] table.
The +1 size is to handle the case when x==y without additional checking.
**********************************/
#define ANG90 0x4000
#define ANG180 0x8000
#define ANG270 0xc000
angle_t PointToAngle(fixed_t x, fixed_t y)
{
x -= viewx; /* Adjust the x and y based on the camera */
y = viewy - y;
if (x>=0) { /* x is positive? */
if (y>=0) { /* y is positive? */
if (x>y) {
return AngleFromSlope2(y,x); /* octant 0*/
} else {
return ANG90-1-AngleFromSlope2(x,y); /* octant 1 */
}
} else { /* y<0 */
y = -y; /* Negate y (Make positive) */
if (x>y) {
return -AngleFromSlope2(y,x); /* octant 8 */
} else {
return ANG270+AngleFromSlope2 (x,y); /* octant 7 */
}
}
} else { /* x<0*/
x = -x; /* Force x positive */
if (y>= 0) { /* Is y positive? */
if (x>y) {
return ANG180-1-AngleFromSlope2(y,x); /* octant 3 */
} else {
return ANG90+AngleFromSlope2(x,y); /* octant 2 */
}
} else { /* y<0*/
y = -y; /* Force y positive also */
if (x>y) {
return ANG180+AngleFromSlope2 (y,x); /* octant 4 */
}
}
}
return ANG270-1-AngleFromSlope2(x,y); /* octant 5 */
}
/**********************************
Died() has already spun the view toward the killer
GameOver() scales the "game over" sprite in and pulses it until an event
**********************************/
void GameOver(void)
{
topspritenum = S_GAMEOVER; /* Game over words */
topspritescale = 8; /* Start the scale factor */
do {
RenderView(); /* Draw the 3-d view */
topspritescale+=8;
} while (topspritescale<120);
for (;;) { /* Stay here forever */
do {
if (WaitTicksEvent(1)) { /* Canceled? */
return;
}
RenderView(); /* Show the 3-D view */
topspritescale-=2; /* Make s
|