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

@ -10,7 +10,7 @@ LDLIBS += -L/usr/X11R6/lib -lX11 -lXext `sdl-config --libs`
AFLAGS = -g -Iinclude/ -w+macro-params -w+orphan-labels -w+number-overflow
ROOT = main.c stubs.c stubs2.cpp winapi.c afont.c frustum.c kshape.c map.c maths.c md5.c mem3dc.c mem3dcpp.cpp module.c morph.c mslhand.c object.c shpanim.c sphere.c tables.c vdb.c version.c
ROOT = main.c math.asm stubs.c stubs2.cpp winapi.c afont.c frustum.c kshape.c map.c maths.c md5.c mem3dc.c mem3dcpp.cpp module.c morph.c mslhand.c object.c shpanim.c sphere.c tables.c vdb.c version.c
AVP = ai_sight.c avpview.c bh_agun.c bh_ais.c bh_alien.c bh_binsw.c bh_cable.c bh_corpse.c bh_deathvol.c bh_debri.c bh_dummy.c bh_fan.c bh_far.c bh_fhug.c bh_gener.c bh_ldoor.c bh_lift.c bh_light.c bh_lnksw.c bh_ltfx.c bh_marin.c bh_mission.c bh_near.c bh_pargen.c bh_plachier.c bh_plift.c bh_pred.c bh_queen.c bh_rubberduck.c bh_selfdest.c bh_snds.c bh_spcl.c bh_swdor.c bh_track.c bh_types.c bh_videoscreen.c bh_waypt.c bh_weap.c bh_xeno.c bonusabilities.c cconvars.cpp cdtrackselection.cpp cheatmodes.c comp_map.c comp_shp.c consolelog.cpp davehook.cpp deaths.c decal.c detaillevels.c dynamics.c dynblock.c equipmnt.c equiputl.cpp extents.c game.c game_statistics.c gamecmds.cpp gameflow.c gamevars.cpp hmodel.c hud.c inventry.c language.c lighting.c load_shp.c los.c maps.c mempool.c messagehistory.c missions.cpp movement.c paintball.c particle.c pfarlocs.c pheromon.c player.c pmove.c psnd.c psndproj.c pvisible.c savegame.c scream.cpp secstats.c sfx.c stratdef.c targeting.c track.c triggers.c weapons.c
SHAPES = cube.c
SUPPORT = consbind.cpp consbtch.cpp coordstr.cpp daemon.cpp r2base.cpp r2pos666.cpp reflist.cpp refobj.cpp scstring.cpp strtab.cpp strutil.c trig666.cpp wrapstr.cpp

View file

@ -7,3 +7,5 @@ Changed filenames:
avp/win95/system.c (avp_load_rif calls)
========
is AvP.CurrentEnv and StartingEnv used?
========
SCREENDESCRIPTORBLOCK.SDB_DiagonalWidth is unused

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);