Moved TranslatePoint into a separate file.

Implemented most of the main loop in main.c.

Game now seems to run OK.  Need to write texture code and then add OpenGL.
This commit is contained in:
Steven Fuller 2001-08-06 19:50:26 +00:00 committed by Patryk Obara
parent 12c6a39177
commit 0770c95c17
7 changed files with 218 additions and 14 deletions

View file

@ -32,9 +32,6 @@
#include "detaillevels.h"
#include "avp_userprofile.h"
#if SOFTWARE_RENDERER
#define D3D_ZBufferedGouraudTexturedPolygon_Output Software_ZBufferedGouraudTexturedPolygon_Output
#endif
#define ALIENS_LIFEFORCE_GLOW_COLOUR 0x20ff8080
#define MARINES_LIFEFORCE_GLOW_COLOUR 0x208080ff
#define PREDATORS_LIFEFORCE_GLOW_COLOUR 0x2080ff80
@ -4503,10 +4500,16 @@ void TranslatePoint(int *source, int *dest, int *matrix)
#endif
#endif
/* TODO */
static void TranslatePoint(float *source, float *dest, float *matrix)
{
fprintf(stderr, "TranslatePoint(%f, %f, %f)\n");
// fprintf(stderr, "TranslatePoint(%f, %f, %f)\n");
/* TODO - implement the inline assembly here? */
/* Moved to a separate file because I can't figure out the damn syntax! */
__asm__("call TranslatePoint_Asm \n\t"
:
: "S" (source), "b" (dest), "d" (matrix)
);
}

View file

@ -3,12 +3,6 @@
#include "particle.h"
#define SOFTWARE_RENDERER 0
#if SOFTWARE_RENDERER
#include "SoftwareRender.hpp"
#endif
typedef struct
{

View file

@ -12,6 +12,10 @@
#include "vision.h"
#include "comp_shp.h"
#include "avp_envinfo.h"
#include "stratdef.h"
#include "bh_types.h"
#include "avp_userprofile.h"
#include "pldnet.h"
#include "cdtrackselection.h"
char LevelName[] = {"predbit6\0QuiteALongNameActually"}; /* the real way to load levels */
@ -38,6 +42,9 @@ int ExitWindowsSystem()
int main(int argc, char *argv[])
{
int menusActive = 0;
int thisLevelHasBeenCompleted = 0;
LoadCDTrackList();
SetFastRandom();
@ -56,7 +63,7 @@ int main(int argc, char *argv[])
InitialVideoMode();
/* Env_List can probably be removed */
// Env_List[0]->main = &(ELOLevelToLoad); /* overwrite the first entry of crappy env_list with LevelName */
// Env_List[0] = &(ELOLevelToLoad); /* overwrite the first entry of crappy env_list with LevelName */
Env_List[0]->main = LevelName;
InitialiseSystem();
@ -128,21 +135,134 @@ int main(int argc, char *argv[])
switch(AvP.GameMode) {
case I_GM_Playing:
if ((!menusActive || (AvP.Network!=I_No_Network && !netGameData.skirmishMode)) && !AvP.LevelCompleted) {
/* TODO: print some debugging stuff */
DoAllShapeAnimations();
UpdateGame();
AvpShowViews();
MaintainHUD();
CheckCDAndChooseTrackIfNeeded();
if(InGameMenusAreRunning() && ( (AvP.Network!=I_No_Network && netGameData.skirmishMode) || (AvP.Network==I_No_Network)) ) {
SoundSys_StopAll();
}
} else {
ReadUserInput();
/* UpdateAllFMVTextures(); NOT YET */
SoundSys_Management();
FlushD3DZBuffer();
ThisFramesRenderingHasBegun();
}
/* NOT YET
menusActive = AvP_InGameMenus();
if (AvP.RestartLevel) menusActive=0;
*/
if (AvP.LevelCompleted) {
SoundSys_FadeOutFast();
DoCompletedLevelStatisticsScreen();
thisLevelHasBeenCompleted = 1;
}
ThisFramesRenderingHasFinished();
/* NOT YET
InGameFlipBuffers();
*/
FrameCounterHandler();
{
PLAYER_STATUS *playerStatusPtr = (PLAYER_STATUS *) (Player->ObStrategyBlock->SBdataptr);
if (!menusActive && playerStatusPtr->IsAlive && !AvP.LevelCompleted) {
DealWithElapsedTime();
}
}
break;
case I_GM_Menus:
AvP.GameMode = I_GM_Playing;
break;
case I_GM_Paused:
break;
// break;
default:
fprintf(stderr, "AvP.MainLoopRunning: gamemode = %d\n", AvP.GameMode);
exit(EXIT_FAILURE);
}
if (AvP.RestartLevel) {
AvP.RestartLevel = 0;
AvP.LevelCompleted = 0;
/* NOT YET
FixCheatModesInUserProfile(UserProfilePtr);
*/
RestartLevel();
}
break; /* TODO -- remove when loop works */
}
AvP.LevelCompleted = thisLevelHasBeenCompleted;
/* NOT YET
FixCheatModesInUserProfile(UserProfilePtr);
*/
/* NOT YET
CloseFMV();
ReleaseAllFMVTextures();
*/
CONSBIND_WriteKeyBindingsToConfigFile();
DeInitialisePlayer();
DeallocatePlayersMirrorImage();
KillHUD();
Destroy_CurrentEnvironment();
DeallocateAllImages();
EndNPCs();
ExitGame();
SoundSys_StopAll();
SoundSys_ResetFadeLevel();
CDDA_Stop();
if (AvP.Network != I_No_Network) {
/* NOT YET
EndAVPNetGame();
*/
}
ClearMemoryPool();
// }
SoundSys_StopAll();
SoundSys_RemoveAll();
ExitSystem();
CDDA_End();
ClearMemoryPool();
fprintf(stderr, "Now exiting Aliens vs Predator! At least it didn't crash!\n");
return 0;

52
src/math.asm Normal file
View file

@ -0,0 +1,52 @@
BITS 32
SECTION .text
GLOBAL TranslatePoint_Asm
; float *source, float *dest, float *matrix
; "S" (source), "b" (dest), "d" (matrix)
TranslatePoint_Asm:
fld dword [esi]
fmul dword [edi]
fld dword [esi+4]
fmul dword [edi+4]
fld dword [esi+8]
fmul dword [edi+8]
fxch st1
faddp st2, st0
fld dword [esi]
fmul dword [edi+16]
fxch st1
faddp st2, st0
fld dword [esi+4]
fmul dword [edi+20]
fld dword [esi+8]
fmul dword [edi+24]
fxch st1
faddp st2, st0
fld dword [esi]
fmul dword [edi+32]
fxch st1
faddp st2, st0
fld dword [esi+4]
fmul dword [edi+36]
fld dword [esi+8]
fmul dword [edi+40]
fxch st1
faddp st2, st0
fxch st3
fadd dword [edi+12]
fxch st1
faddp st3, st0
fxch st1
fadd dword [edi+28]
fxch st2
fadd dword [edi+44]
fxch st1
fstp dword [ebx]
fxch st1
fstp dword [ebx+4]
fstp dword [ebx+8]
ret

View file

@ -17,6 +17,9 @@
#include "kshape.h"
#include "d3d_hud.h"
extern IMAGEHEADER ImageHeaderArray[];
/* winmain.c */
BOOL KeepMainRifFile = FALSE;
int HWAccel = 1;
@ -478,6 +481,11 @@ void ThisFramesRenderingHasBegun()
fprintf(stderr, "ThisFramesRenderingHasBegun()\n");
}
void ThisFramesRenderingHasFinished()
{
fprintf(stderr, "ThisFramesRenderingHasFinished()\n");
}
void SecondFlushD3DZBuffer()
{
fprintf(stderr, "SecondFlushD3DZBuffer()\n");
@ -527,9 +535,24 @@ BOOL EndD3DScene()
return FALSE;
}
static void *CurrTextureHandle;
void D3D_ZBufferedGouraudTexturedPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *renderVerticesPtr)
{
int texoffset;
void *TextureHandle;
texoffset = inputPolyPtr->PolyColour & ClrTxDefn;
if (texoffset) {
TextureHandle = (void *)ImageHeaderArray[texoffset].D3DHandle;
} else {
TextureHandle = CurrTextureHandle;
}
fprintf(stderr, "D3D_ZBufferedGouraudTexturedPolygon_Output(%p, %p)\n", inputPolyPtr, renderVerticesPtr);
fprintf(stderr, "\tRenderPolygon.NumberOfVertices = %d\n", RenderPolygon.NumberOfVertices);
fprintf(stderr, "\ttexoffset = %d (ptr = %p)\n", texoffset, texoffset ? (void *)ImageHeaderArray[texoffset].D3DHandle : CurrTextureHandle);
CurrTextureHandle = TextureHandle;
}
void D3D_ZBufferedGouraudPolygon_Output(POLYHEADER *inputPolyPtr,RENDERVERTEX *renderVerticesPtr)
@ -727,6 +750,11 @@ void CDDA_Start()
fprintf(stderr, "CDDA_Start()\n");
}
void CDDA_End()
{
fprintf(stderr, "CDDA_End()\n");
}
void CDDA_ChangeVolume(int volume)
{
fprintf(stderr, "CDDA_ChangeVolume(%d)\n", volume);
@ -897,6 +925,11 @@ void RenderPlayersImageInMirror()
fprintf(stderr, "RenderPlayersImageInMirror()\n");
}
void DeallocatePlayersMirrorImage()
{
fprintf(stderr, "DeallocatePlayersMirrorImage()\n");
}
void AddNetMsg_AlienAIKilled(STRATEGYBLOCK *sbPtr,int death_code,int death_time, int GibbFactor,DAMAGE_PROFILE* damage)
{
fprintf(stderr, "AddNetMsg_AlienAIKilled(%p, %d, %d, %d, %p)\n", sbPtr, death_code, death_time, GibbFactor, damage);