summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSteven Fuller <relnev@icculus.org>2008-10-05 21:43:28 -0700
committerPatryk Obara <dreamer.tan@gmail.com>2019-08-20 02:22:37 +0200
commite69698d11edfe564cf4940714482856bd2088fd4 (patch)
tree0241d4e57c1b8cbe3ba73663acf415c2315a163f /src
parent55ddb88c8ecbf0e08fe429a0c3b48c4769217233 (diff)
Added the missing support for static on the televisions.
Diffstat (limited to 'src')
-rw-r--r--src/avp/win95/frontend/avp_intro.cpp4
-rw-r--r--src/fixer.h8
-rw-r--r--src/fmv.c368
-rw-r--r--src/fmv.h42
-rw-r--r--src/main.c23
-rw-r--r--src/stubs.c52
6 files changed, 434 insertions, 63 deletions
diff --git a/src/avp/win95/frontend/avp_intro.cpp b/src/avp/win95/frontend/avp_intro.cpp
index 8356131..90c3b64 100644
--- a/src/avp/win95/frontend/avp_intro.cpp
+++ b/src/avp/win95/frontend/avp_intro.cpp
@@ -35,6 +35,10 @@ void PlayMenuMusic(void)
{
}
+void EndMenuMusic(void)
+{
+}
+
void WeWantAnIntro(void)
{
IntroHasAlreadyBeenPlayed = 0;
diff --git a/src/fixer.h b/src/fixer.h
index ced3c91..2479780 100644
--- a/src/fixer.h
+++ b/src/fixer.h
@@ -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
diff --git a/src/fmv.c b/src/fmv.c
new file mode 100644
index 0000000..8edbd65
--- /dev/null
+++ b/src/fmv.c
@@ -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;
+}
diff --git a/src/fmv.h b/src/fmv.h
new file mode 100644
index 0000000..4d7b5db
--- /dev/null
+++ b/src/fmv.h
@@ -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
diff --git a/src/main.c b/src/main.c
index 5081210..eff537f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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();
diff --git a/src/stubs.c b/src/stubs.c
index 3515889..b1be586 100644
--- a/src/stubs.c
+++ b/src/stubs.c
@@ -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)
{