Added the missing support for static on the televisions.

This commit is contained in:
Steven Fuller 2008-10-05 21:43:28 -07:00 committed by Patryk Obara
parent 55ddb88c8e
commit e69698d11e
7 changed files with 435 additions and 64 deletions

View file

@ -11,7 +11,7 @@ CXXFLAGS = $(CFLAGS)
LDLIBS = -m32 $(shell sdl-config --libs) $(shell openal-config --libs)
ROOT = main.c files.c winapi.c stubs.c version.c mathline.c opengl.c oglfunc.c openal.c cdplayer.c menus.c net.c frustum.c kshape.c map.c maths.c md5.c mem3dc.c mem3dcpp.cpp module.c morph.c object.c shpanim.c sphere.c tables.c vdb.c
ROOT = main.c files.c winapi.c stubs.c version.c mathline.c opengl.c fmv.c oglfunc.c openal.c cdplayer.c menus.c net.c frustum.c kshape.c map.c maths.c md5.c mem3dc.c mem3dcpp.cpp module.c morph.c object.c shpanim.c sphere.c tables.c vdb.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 extents.c game.c game_statistics.c gamecmds.cpp gamevars.cpp hmodel.c hud.c inventry.c language.c lighting.c load_shp.c los.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 indexfnt.cpp r2base.cpp r2pos666.cpp reflist.cpp refobj.cpp rentrntq.cpp scstring.cpp strtab.cpp strutil.c trig666.cpp wrapstr.cpp

View file

@ -35,6 +35,10 @@ void PlayMenuMusic(void)
{
}
void EndMenuMusic(void)
{
}
void WeWantAnIntro(void)
{
IntroHasAlreadyBeenPlayed = 0;

View file

@ -107,6 +107,14 @@ typedef struct RECT
int bottom;
} RECT;
typedef struct PALETTEENTRY
{
BYTE peRed;
BYTE peGreen;
BYTE peBlue;
BYTE peFlags;
} PALETTEENTRY;
#if !defined(__INTEL_COMPILER)
typedef int64_t __int64;
#else

368
src/fmv.c Normal file
View file

@ -0,0 +1,368 @@
/* KJL 15:25:20 8/16/97
*
* smacker.c - functions to handle FMV playback
*
*/
#include "3dc.h"
#include "module.h"
#include "inline.h"
#include "stratdef.h"
#include "gamedef.h"
#include "fmv.h"
#include "avp_menus.h"
#include "avp_userprofile.h"
#include "oglfunc.h"
#define UseLocalAssert 1
#include "ourasert.h"
int VolumeOfNearestVideoScreen;
int PanningOfNearestVideoScreen;
extern char *ScreenBuffer;
extern int GotAnyKey;
extern void DirectReadKeyboard(void);
extern IMAGEHEADER ImageHeaderArray[];
#if MaxImageGroups>1
extern int NumImagesArray[];
#else
extern int NumImages;
#endif
void PlayFMV(char *filenamePtr);
void FindLightingValueFromFMV(unsigned short *bufferPtr);
void FindLightingValuesFromTriggeredFMV(unsigned char *bufferPtr, FMVTEXTURE *ftPtr);
int SmackerSoundVolume=ONE_FIXED/512;
int MoviesAreActive;
int IntroOutroMoviesAreActive=1;
int FmvColourRed;
int FmvColourGreen;
int FmvColourBlue;
void ReleaseFMVTexture(FMVTEXTURE *ftPtr);
/* KJL 12:45:23 10/08/98 - FMVTEXTURE stuff */
#define MAX_NO_FMVTEXTURES 10
FMVTEXTURE FMVTexture[MAX_NO_FMVTEXTURES];
int NumberOfFMVTextures;
void ScanImagesForFMVs(void)
{
extern void SetupFMVTexture(FMVTEXTURE *ftPtr);
int i;
IMAGEHEADER *ihPtr;
NumberOfFMVTextures=0;
#if MaxImageGroups>1
for (j=0; j<MaxImageGroups; j++)
{
if (NumImagesArray[j])
{
ihPtr = &ImageHeaderArray[j*MaxImages];
for (i = 0; i<NumImagesArray[j]; i++, ihPtr++)
{
#else
{
if(NumImages)
{
ihPtr = &ImageHeaderArray[0];
for (i = 0; i<NumImages; i++, ihPtr++)
{
#endif
char *strPtr;
if((strPtr = strstr(ihPtr->ImageName,"FMVs")))
{
char filename[30];
{
char *filenamePtr = filename;
do
{
*filenamePtr++ = *strPtr;
}
while(*strPtr++!='.');
*filenamePtr++='s';
*filenamePtr++='m';
*filenamePtr++='k';
*filenamePtr=0;
}
//if (smackHandle)
//{
// FMVTexture[NumberOfFMVTextures].IsTriggeredPlotFMV = 0;
//}
//else
{
FMVTexture[NumberOfFMVTextures].IsTriggeredPlotFMV = 1;
}
{
//FMVTexture[NumberOfFMVTextures].SmackHandle = smackHandle;
FMVTexture[NumberOfFMVTextures].ImagePtr = ihPtr;
FMVTexture[NumberOfFMVTextures].StaticImageDrawn=0;
SetupFMVTexture(&FMVTexture[NumberOfFMVTextures]);
NumberOfFMVTextures++;
if (NumberOfFMVTextures == MAX_NO_FMVTEXTURES)
{
break;
}
}
}
}
}
}
}
void UpdateAllFMVTextures(void)
{
extern void UpdateFMVTexture(FMVTEXTURE *ftPtr);
int i = NumberOfFMVTextures;
while(i--)
{
UpdateFMVTexture(&FMVTexture[i]);
}
}
void ReleaseAllFMVTextures(void)
{
extern void UpdateFMVTexture(FMVTEXTURE *ftPtr);
int i = NumberOfFMVTextures;
while(i--)
{
ReleaseFMVTexture(&FMVTexture[i]);
}
}
int NextFMVTextureFrame(FMVTEXTURE *ftPtr, void *bufferPtr)
{
int w = 128;
if (!ftPtr->StaticImageDrawn)
{
int i = w*96/4;
unsigned int seed = FastRandom();
int *ptr = (int*)bufferPtr;
do
{
seed = ((seed*1664525)+1013904223);
*ptr++ = seed;
}
while(--i);
ftPtr->StaticImageDrawn=1;
}
FindLightingValuesFromTriggeredFMV((unsigned char*)bufferPtr,ftPtr);
return 1;
}
void UpdateFMVTexturePalette(FMVTEXTURE *ftPtr)
{
//unsigned char *c;
int i;
//
//if (MoviesAreActive && ftPtr->SmackHandle)
//{
//}
//else
{
{
unsigned int seed = FastRandom();
for(i=0;i<256;i++)
{
int l = (seed&(seed>>24)&(seed>>16));
seed = ((seed*1664525)+1013904223);
ftPtr->SrcPalette[i].peRed=l;
ftPtr->SrcPalette[i].peGreen=l;
ftPtr->SrcPalette[i].peBlue=l;
}
}
}
}
extern void StartTriggerPlotFMV(int number)
{
(void) number;
//int i = NumberOfFMVTextures;
//char buffer[25];
//
//if (CheatMode_Active != CHEATMODE_NONACTIVE) return;
//
//sprintf(buffer,"FMVs//message%d.smk",number);
//{
// FILE* file=fopen(buffer,"rb");
// if(!file)
// {
// return;
// }
// fclose(file);
//}
//while(i--)
//{
// if (FMVTexture[i].IsTriggeredPlotFMV)
// {
// FMVTexture[i].MessageNumber = number;
// }
//}
}
extern void StartFMVAtFrame(int number, int frame)
{
}
extern void GetFMVInformation(int *messageNumberPtr, int *frameNumberPtr)
{
//int i = NumberOfFMVTextures;
//
//while(i--)
//{
// if (FMVTexture[i].IsTriggeredPlotFMV)
// {
// if(FMVTexture[i].SmackHandle)
// {
// *messageNumberPtr = FMVTexture[i].MessageNumber;
// *frameNumberPtr = 0;
// return;
// }
// }
//}
*messageNumberPtr = 0;
*frameNumberPtr = 0;
}
extern void InitialiseTriggeredFMVs(void)
{
//int i = NumberOfFMVTextures;
//while(i--)
//{
// if (FMVTexture[i].IsTriggeredPlotFMV)
// {
// if(FMVTexture[i].SmackHandle)
// {
// FMVTexture[i].MessageNumber = 0;
// }
//
// FMVTexture[i].SmackHandle = 0;
// }
//}
}
void FindLightingValuesFromTriggeredFMV(unsigned char *bufferPtr, FMVTEXTURE *ftPtr)
{
unsigned int totalRed=0;
unsigned int totalBlue=0;
unsigned int totalGreen=0;
int pixels = 128*96;//64*48;//256*192;
do
{
unsigned char source = (*bufferPtr++);
totalBlue += ftPtr->SrcPalette[source].peBlue;
totalGreen += ftPtr->SrcPalette[source].peGreen;
totalRed += ftPtr->SrcPalette[source].peRed;
}
while(--pixels);
FmvColourRed = totalRed/48*16;
FmvColourGreen = totalGreen/48*16;
FmvColourBlue = totalBlue/48*16;
}
void SetupFMVTexture(FMVTEXTURE *ftPtr)
{
if (ftPtr->PalettedBuf == NULL)
{
ftPtr->PalettedBuf = (unsigned char*) malloc(128*128*4);
}
if (ftPtr->RGBBuf == NULL)
{
if (ftPtr->PalettedBuf == NULL)
{
return;
}
ftPtr->RGBBuf = &ftPtr->PalettedBuf[128*128];
}
}
void UpdateFMVTexture(FMVTEXTURE *ftPtr)
{
unsigned char *srcPtr;
unsigned char *dstPtr;
int pixels = 128*96;//64*48;//256*192;
// get the next frame into the paletted buffer
if (!NextFMVTextureFrame(ftPtr, &ftPtr->PalettedBuf[0]))
{
return;
}
// update the texture palette
UpdateFMVTexturePalette(ftPtr);
srcPtr = &ftPtr->PalettedBuf[0];
dstPtr = &ftPtr->RGBBuf[0];
// not using paletted textures, so convert to rgb manually
do
{
unsigned char source = (*srcPtr++);
dstPtr[0] = ftPtr->SrcPalette[source].peRed;
dstPtr[1] = ftPtr->SrcPalette[source].peGreen;
dstPtr[2] = ftPtr->SrcPalette[source].peBlue;
dstPtr += 3;
} while(--pixels);
// update the opengl texture
pglBindTexture(GL_TEXTURE_2D, ftPtr->ImagePtr->D3DTexture->id);
pglTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 128, 96, GL_RGB, GL_UNSIGNED_BYTE, &ftPtr->RGBBuf[0]);
}
void ReleaseFMVTexture(FMVTEXTURE *ftPtr)
{
ftPtr->MessageNumber = 0;
//if (FMVTexture[i].SrcTexture)
//{
// ReleaseD3DTexture(FMVTexture[i].SrcTexture);
// FMVTexture[i].SrcTexture=0;
//}
//if (FMVTexture[i].SrcSurface)
//{
// ReleaseDDSurface(FMVTexture[i].SrcSurface);
// FMVTexture[i].SrcSurface=0;
//}
//if (FMVTexture[i].DestTexture)
//{
// ReleaseD3DTexture(FMVTexture[i].DestTexture);
// FMVTexture[i].DestTexture = 0;
//}
if (ftPtr->PalettedBuf != NULL)
{
free(ftPtr->PalettedBuf);
ftPtr->PalettedBuf = NULL;
}
ftPtr->RGBBuf = NULL;
}

42
src/fmv.h Normal file
View file

@ -0,0 +1,42 @@
#ifndef FMV_H
#define FMV_H
typedef struct
{
IMAGEHEADER *ImagePtr;
int SoundVolume;
int IsTriggeredPlotFMV;
int StaticImageDrawn;
int MessageNumber;
// disabled direct3d stuff
//LPDIRECTDRAWSURFACE SrcSurface;
//LPDIRECT3DTEXTURE SrcTexture;
//LPDIRECT3DTEXTURE DestTexture;
PALETTEENTRY SrcPalette[256];
// buffer used for opengl texture uploads
unsigned char* PalettedBuf;
unsigned char* RGBBuf;
int RedScale;
int GreenScale;
int BlueScale;
} FMVTEXTURE;
extern int NextFMVTextureFrame(FMVTEXTURE *ftPtr, void *bufferPtr);
extern void UpdateFMVTexturePalette(FMVTEXTURE *ftPtr);
extern void InitialiseTriggeredFMVs(void);
extern void StartTriggerPlotFMV(int number);
extern void StartFMVAtFrame(int number, int frame);
extern void GetFMVInformation(int *messageNumberPtr, int *frameNumberPtr);
void UpdateAllFMVTextures(void);
void ScanImagesForFMVs(void);
void ReleaseAllFMVTextures(void);
#endif

View file

@ -43,6 +43,7 @@
#include "progress_bar.h"
#include "scrshot.hpp"
#include "version.h"
#include "fmv.h"
char LevelName[] = {"predbit6\0QuiteALongNameActually"}; /* the real way to load levels */
@ -77,6 +78,13 @@ static const char * opengl_library = NULL;
/* ** */
static void IngameKeyboardInput_ClearBuffer(void)
{
// clear the keyboard state
memset((void*) KeyboardInput, 0, MAX_NUMBER_OF_INPUT_KEYS);
GotAnyKey = 0;
}
void DirectReadKeyboard()
{
}
@ -494,8 +502,7 @@ int SetSoftVideoMode(int Width, int Height, int Depth)
}
// reset input
memset((void*) KeyboardInput, 0, MAX_NUMBER_OF_INPUT_KEYS);
GotAnyKey = 0;
IngameKeyboardInput_ClearBuffer();
// force restart the video system
SDL_QuitSubSystem(SDL_INIT_VIDEO);
@ -560,8 +567,7 @@ int SetOGLVideoMode(int Width, int Height)
}
// reset input
memset((void*) KeyboardInput, 0, MAX_NUMBER_OF_INPUT_KEYS);
GotAnyKey = 0;
IngameKeyboardInput_ClearBuffer();
// force restart the video system
SDL_QuitSubSystem(SDL_INIT_VIDEO);
@ -1279,7 +1285,7 @@ if (AvP_MainMenus())
AvP.MainLoopRunning = 1;
/* ScanImagesForFMVs(); NOT YET */
ScanImagesForFMVs();
ResetFrameCounter();
@ -1296,7 +1302,7 @@ if (AvP_MainMenus())
TeleportNetPlayerToAStartingPosition(Player->ObStrategyBlock,1);
}
/* IngameKeyboardInput_ClearBuffer(); NOT YET */
IngameKeyboardInput_ClearBuffer();
while(AvP.MainLoopRunning) {
CheckForWindowsMessages();
@ -1322,8 +1328,6 @@ if (AvP_MainMenus())
} else {
ReadUserInput();
/* UpdateAllFMVTextures(); NOT YET */
SoundSys_Management();
FlushD3DZBuffer();
@ -1376,10 +1380,7 @@ if (AvP_MainMenus())
FixCheatModesInUserProfile(UserProfilePtr);
/* NOT YET
CloseFMV();
ReleaseAllFMVTextures();
*/
CONSBIND_WriteKeyBindingsToConfigFile();

View file

@ -52,58 +52,6 @@ void EndMenuBackgroundBink()
*/
}
/* smacker.c */
int FmvColourRed;
int FmvColourGreen;
int FmvColourBlue;
int IntroOutroMoviesAreActive = 1;
int MoviesAreActive;
int SmackerSoundVolume;
void GetFMVInformation(int *messageNumberPtr, int *frameNumberPtr)
{
/*
fprintf(stderr, "GetFMVInformation(%p, %p)\n", messageNumberPtr, frameNumberPtr);
*/
}
void InitialiseTriggeredFMVs()
{
/*
fprintf(stderr, "InitialiseTriggeredFMVs()\n");
*/
}
void StartFMVAtFrame(int number, int frame)
{
/*
fprintf(stderr, "StartFMVAtFrame(%d, %d)\n", number, frame);
*/
}
void StartTriggerPlotFMV(int number)
{
/*
fprintf(stderr, "StartTriggerPlotFMV(%d)\n", number);
*/
}
void UpdateAllFMVTextures()
{
/*
fprintf(stderr, "UpdateAllFMVTextures()\n");
*/
}
void EndMenuMusic()
{
/*
fprintf(stderr, "EndMenuMusic()\n");
*/
}
/* alt_tab.cpp */
void ATIncludeSurface(void * pSurface, void * hBackup)
{