revert some changes to more closely match the original watcom fdemo.c
with the timer speedup call left in, it feels much closer (speed-wise) to the original watcom fdemo executable from the book cd. but still not quite a perfect match in my opinion
This commit is contained in:
parent
a63c33cd84
commit
cb8f47ef27
134
fdemo/FDEMO.C
134
fdemo/FDEMO.C
|
@ -63,9 +63,6 @@ typedef struct {
|
||||||
#define MAX_STR_AMOUNT 128
|
#define MAX_STR_AMOUNT 128
|
||||||
#define MAX_STR_HALF_AMOUNT 64
|
#define MAX_STR_HALF_AMOUNT 64
|
||||||
|
|
||||||
extern long AckMemUsed; // Running total of memory used
|
|
||||||
extern short AckDisplayErrors; // 1 = sw to text mode and display error
|
|
||||||
|
|
||||||
extern long mFactor;
|
extern long mFactor;
|
||||||
extern long dFactor;
|
extern long dFactor;
|
||||||
|
|
||||||
|
@ -73,6 +70,8 @@ extern UCHAR colordat[];
|
||||||
|
|
||||||
ACKENG *ae;
|
ACKENG *ae;
|
||||||
|
|
||||||
|
// These are the ranges used for distance shading. Will need to be modified
|
||||||
|
// for the new color palette used.
|
||||||
ColorRange ranges[64] = {
|
ColorRange ranges[64] = {
|
||||||
16,15,
|
16,15,
|
||||||
32,16,
|
32,16,
|
||||||
|
@ -167,10 +166,6 @@ volatile short cframes=0, count=0, ticks=0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void AckRegisterStructure(ACKENG *ae);
|
|
||||||
void AckSpeedUp(short);
|
|
||||||
void AckSlowDown(void);
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
@ -1466,6 +1461,115 @@ typedef struct {
|
||||||
|
|
||||||
short near long_sqrt(long v);
|
short near long_sqrt(long v);
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
void DoTest(void)
|
||||||
|
{
|
||||||
|
int done,cnt,Total;
|
||||||
|
int xp,yp,ColX;
|
||||||
|
long dx,dy;
|
||||||
|
UCHAR *Video;
|
||||||
|
AWALL aw[2];
|
||||||
|
short i,minAngle,maxAngle,objAngle;
|
||||||
|
|
||||||
|
AckRegisterStructure(ae);
|
||||||
|
|
||||||
|
memset(ae->xGrid,0,(GRID_ARRAY*2));
|
||||||
|
memset(ae->yGrid,0,(GRID_ARRAY*2));
|
||||||
|
memset(Grid,0,(GRID_ARRAY*2));
|
||||||
|
|
||||||
|
aw[0].x1 = 64;
|
||||||
|
aw[0].y1 = 128;
|
||||||
|
aw[0].x2 = 128;
|
||||||
|
aw[0].y2 = 128;
|
||||||
|
|
||||||
|
aw[1].x1 = 128;
|
||||||
|
aw[1].y1 = 128;
|
||||||
|
aw[1].x2 = 128;
|
||||||
|
aw[1].y2 = 64;
|
||||||
|
Total = 2;
|
||||||
|
Video = (UCHAR *)0xA0000;
|
||||||
|
done = 0;
|
||||||
|
xp = yp = 256;
|
||||||
|
|
||||||
|
|
||||||
|
while (!done)
|
||||||
|
{
|
||||||
|
memset(ae->ScreenBuffer,0,64000);
|
||||||
|
minAngle = ae->PlayerAngle - (INT_ANGLE_32 + 10);
|
||||||
|
if (minAngle < 0)
|
||||||
|
minAngle += INT_ANGLE_360;
|
||||||
|
|
||||||
|
maxAngle = ae->PlayerAngle + (INT_ANGLE_32 + 10);
|
||||||
|
if (maxAngle >= INT_ANGLE_360)
|
||||||
|
maxAngle -= INT_ANGLE_360;
|
||||||
|
|
||||||
|
xp = ae->xPlayer;
|
||||||
|
yp = ae->yPlayer;
|
||||||
|
|
||||||
|
for (cnt = 0; cnt < Total; cnt++)
|
||||||
|
{
|
||||||
|
dx = aw[cnt].x1 - xp;
|
||||||
|
dy = aw[cnt].y1 - yp;
|
||||||
|
aw[cnt].d1 = long_sqrt((dx*dx)+(dy*dy));
|
||||||
|
objAngle = AckGetObjectAngle(dx,dy);
|
||||||
|
dx = aw[cnt].x2 - xp;
|
||||||
|
dy = aw[cnt].y2 - yp;
|
||||||
|
aw[cnt].d2 = long_sqrt((dx*dx)+(dy*dy));
|
||||||
|
|
||||||
|
if (minAngle > maxAngle)
|
||||||
|
{
|
||||||
|
if (objAngle >= minAngle)
|
||||||
|
ColX = objAngle - minAngle;
|
||||||
|
else
|
||||||
|
ColX = (objAngle+INT_ANGLE_360) - minAngle;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ColX = objAngle - minAngle;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ColX > -40 && ColX < 320)
|
||||||
|
DrawBmpBox(ColX,100,aw[cnt].x2,100,aw[cnt].d1,aw[cnt].d2);
|
||||||
|
}
|
||||||
|
memmove(Video,ae->ScreenBuffer,64000);
|
||||||
|
|
||||||
|
if (AckKeys[ESCAPE_KEY])
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (AckKeys[LEFT_ARROW_KEY])
|
||||||
|
{
|
||||||
|
ae->PlayerAngle--;
|
||||||
|
if (ae->PlayerAngle < 0)
|
||||||
|
ae->PlayerAngle += INT_ANGLE_360;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AckKeys[RIGHT_ARROW_KEY])
|
||||||
|
{
|
||||||
|
ae->PlayerAngle++;
|
||||||
|
if (ae->PlayerAngle >= INT_ANGLE_360)
|
||||||
|
ae->PlayerAngle -= INT_ANGLE_360;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AckKeys[UP_ARROW_KEY])
|
||||||
|
{
|
||||||
|
AckMovePOV(ae->PlayerAngle,16);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AckKeys[DOWN_ARROW_KEY])
|
||||||
|
{
|
||||||
|
i = ae->PlayerAngle + INT_ANGLE_180;
|
||||||
|
if (i >= INT_ANGLE_360)
|
||||||
|
i -= INT_ANGLE_360;
|
||||||
|
|
||||||
|
AckMovePOV(i,16);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
|
@ -1584,8 +1688,11 @@ Shooting = 0;
|
||||||
MagAmount = MAX_MAG_AMOUNT;
|
MagAmount = MAX_MAG_AMOUNT;
|
||||||
StrAmount = MAX_STR_AMOUNT;
|
StrAmount = MAX_STR_AMOUNT;
|
||||||
|
|
||||||
|
// Setup keyboard and timer interrupts
|
||||||
AckSetupKeyboard();
|
AckSetupKeyboard();
|
||||||
AckSetupTimer();
|
AckSetupTimer();
|
||||||
|
AckTmDelay = 3;
|
||||||
|
AckSpeedUp(AckTmDelay); // Set the timer interrupt at 3 times normal
|
||||||
|
|
||||||
StartBGmusic();
|
StartBGmusic();
|
||||||
|
|
||||||
|
@ -1610,7 +1717,7 @@ SetMouseCursor(120,160);
|
||||||
fpos = 64;
|
fpos = 64;
|
||||||
DemoFlag = 0;
|
DemoFlag = 0;
|
||||||
if (DemoPtr != NULL) DemoFlag = 1;
|
if (DemoPtr != NULL) DemoFlag = 1;
|
||||||
TimerEnd = AckTimerCounter + 18;
|
TimerEnd = AckTimerCounter + 180;
|
||||||
|
|
||||||
|
|
||||||
// MUST register each ACKENG structure once before use and after AckInitialize
|
// MUST register each ACKENG structure once before use and after AckInitialize
|
||||||
|
@ -1716,14 +1823,14 @@ while (!done)
|
||||||
{
|
{
|
||||||
AckSetObjectType(ae,j,NO_WALK);
|
AckSetObjectType(ae,j,NO_WALK);
|
||||||
ae->ObjList[j]->Flags &= ~OF_ANIMDONE;
|
ae->ObjList[j]->Flags &= ~OF_ANIMDONE;
|
||||||
ObjCounter[j] = AckTimerCounter + 18 + (rand() % 20);
|
ObjCounter[j] = AckTimerCounter + 18 + (rand() % 120);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (AckTimerCounter > ObjCounter[j])
|
if (AckTimerCounter > ObjCounter[j])
|
||||||
{
|
{
|
||||||
ObjCounter[j] = AckTimerCounter + 18 + (rand() % 18);
|
ObjCounter[j] = AckTimerCounter + 180 + (rand() % 180);
|
||||||
if (ae->ObjList[j]->CurrentType == NO_WALK)
|
if (ae->ObjList[j]->CurrentType == NO_WALK)
|
||||||
AckSetObjectType(ae,j,NO_ATTACK);
|
AckSetObjectType(ae,j,NO_ATTACK);
|
||||||
else
|
else
|
||||||
|
@ -1751,7 +1858,7 @@ while (!done)
|
||||||
if (AckTimerCounter > TimerEnd)
|
if (AckTimerCounter > TimerEnd)
|
||||||
{
|
{
|
||||||
DemoFlag++;
|
DemoFlag++;
|
||||||
TimerEnd = AckTimerCounter + 54;
|
TimerEnd = AckTimerCounter + 540;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1760,7 +1867,7 @@ while (!done)
|
||||||
if (AckTimerCounter > TimerEnd)
|
if (AckTimerCounter > TimerEnd)
|
||||||
{
|
{
|
||||||
DemoFlag = 1;
|
DemoFlag = 1;
|
||||||
TimerEnd = AckTimerCounter + 216;
|
TimerEnd = AckTimerCounter + 2160;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1849,7 +1956,7 @@ while (!done)
|
||||||
|
|
||||||
AckDisplayScreen(); // Copy ScrnBuffer to actual video
|
AckDisplayScreen(); // Copy ScrnBuffer to actual video
|
||||||
CkEnd = AckTimerCounter - CkStart;
|
CkEnd = AckTimerCounter - CkStart;
|
||||||
if (!CkEnd) CkEnd = 4;
|
if (!CkEnd) CkEnd = 1;
|
||||||
|
|
||||||
TurnFactor = INT_ANGLE_1 * CkEnd;
|
TurnFactor = INT_ANGLE_1 * CkEnd;
|
||||||
MoveFactor = 3 * CkEnd;
|
MoveFactor = 3 * CkEnd;
|
||||||
|
@ -2065,6 +2172,7 @@ while (!done)
|
||||||
|
|
||||||
EndBGmusic();
|
EndBGmusic();
|
||||||
ShutDownFlag = 1;
|
ShutDownFlag = 1;
|
||||||
|
AckSlowDown(); // Set the timer back to normal speed
|
||||||
AckWrapUp(ae);
|
AckWrapUp(ae);
|
||||||
AckSetTextmode();
|
AckSetTextmode();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue