avp/src/menus.c
Steven Fuller 06371ecc45 Re-fixed the menus and enabled another font drawing function.
Fixed Profile Loading/Saving (had to disable debug mode).
2019-08-20 02:22:36 +02:00

348 lines
8.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fixer.h"
#include "strtab.hpp"
#include "awtexld.h"
#include "chnktexi.h"
#include "hud_layout.h"
#include "avp_menus.h"
#define UseLocalAssert Yes
#include "ourasert.h"
#include "ffstdio.h"
#include <GL/gl.h>
/* char AAFontWidths[256]; */
extern int AAFontImageNumber;
int PlayMenuBackgroundBink()
{
fprintf(stderr, "PlayMenuBackgroundBink()\n");
glClear(GL_COLOR_BUFFER_BIT);
return 0;
}
AVPMENUGFX AvPMenuGfxStorage[MAX_NO_OF_AVPMENUGFXS] =
{
{"Menus\\fractal.rim"},
{"Common\\aa_font.rim"},// Warning! Texture from common used
{"Menus\\copyright.rim"},
{"Menus\\FIandRD.rim"},
{"Menus\\presents.rim"},
{"Menus\\AliensVPredator.rim"},
{"Menus\\sliderbar.rim"},//AVPMENUGFX_SLIDERBAR,
{"Menus\\slider.rim"},//AVPMENUGFX_SLIDER,
{"Menus\\starfield.rim"},
{"Menus\\aliens.rim"},
{"Menus\\Alien.rim"},
{"Menus\\Marine.rim"},
{"Menus\\Predator.rim"},
{"Menus\\glowy_left.rim"},
{"Menus\\glowy_middle.rim"},
{"Menus\\glowy_right.rim"},
// Marine level
{"Menus\\MarineEpisode1.rim"},
{"Menus\\MarineEpisode2.rim"},
{"Menus\\MarineEpisode3.rim"},
{"Menus\\MarineEpisode4.rim"},
{"Menus\\MarineEpisode5.rim"},
{"Menus\\MarineEpisode6.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
// Predator level
{"Menus\\PredatorEpisode1.rim"},
{"Menus\\PredatorEpisode2.rim"},
{"Menus\\PredatorEpisode3.rim"},
{"Menus\\PredatorEpisode4.rim"},
{"Menus\\PredatorEpisode5.rim"},
{"Menus\\PredatorEpisode5.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
// Alien level
{"Menus\\AlienEpisode2.rim"},
{"Menus\\AlienEpisode4.rim"},
{"Menus\\AlienEpisode1.rim"},
{"Menus\\AlienEpisode3.rim"},
{"Menus\\AlienEpisode5.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
{"Menus\\bonus.rim"},
// Splash screens
#if MARINE_DEMO
{"MarineSplash\\splash00.rim"},
{"MarineSplash\\splash01.rim"},
{"MarineSplash\\splash02.rim"},
{"MarineSplash\\splash03.rim"},
{"MarineSplash\\splash04.rim"},
{"MarineSplash\\splash05.rim"},
#elif ALIEN_DEMO
{"AlienSplash\\splash00.rim"},
{"AlienSplash\\splash01.rim"},
{"AlienSplash\\splash02.rim"},
{"AlienSplash\\splash03.rim"},
{"AlienSplash\\splash04.rim"},
{"AlienSplash\\splash05.rim"},
#else
{"PredatorSplash\\splash00.rim"},
{"PredatorSplash\\splash01.rim"},
{"PredatorSplash\\splash02.rim"},
{"PredatorSplash\\splash03.rim"},
{"PredatorSplash\\splash04.rim"},
{"PredatorSplash\\splash05.rim"},
#endif
};
int LengthOfMenuText(char *textPtr)
{
fprintf(stderr, "LengthOfMenuText(%s)\n", textPtr);
return 0;
}
int RenderMenuText(char *textPtr, int x, int y, int alpha, enum AVPMENUFORMAT_ID format)
{
return Hardware_RenderSmallMenuText(textPtr, x, y, alpha, format);
fprintf(stderr, "RenderMenuText(%s, %d, %d, %d, %d)\n", textPtr, x, y, alpha, format);
return 0;
}
int RenderMenuText_Clipped(char *textPtr, int x, int y, int alpha, enum AVPMENUFORMAT_ID format, int topY, int bottomY)
{
return Hardware_RenderSmallMenuText(textPtr, x, y, alpha, format);
fprintf(stderr, "RenderMenuText_Clipped(%s, %d, %d, %d, %d, %d, %d)\n", textPtr, x, y, alpha, format, topY, bottomY);
return 0;
}
int RenderSmallMenuText(char *textPtr, int x, int y, int alpha, enum AVPMENUFORMAT_ID format)
{
return Hardware_RenderSmallMenuText(textPtr, x, y, alpha, format);
fprintf(stderr, "RenderSmallMenuText(%s, %d, %d, %d, %d)\n", textPtr, x, y, alpha, format);
return 0;
}
int RenderSmallMenuText_Coloured(char *textPtr, int x, int y, int alpha, enum AVPMENUFORMAT_ID format, int red, int green, int blue)
{
return Hardware_RenderSmallMenuText_Coloured(textPtr, x, y, alpha, format, red, green, blue);
fprintf(stderr, "RenderSmallMenuText_Coloured(%s, %d, %d, %d, %d, %d, %d, %d)\n", textPtr, x, y, alpha, format, red, green, blue);
return 0;
}
void RenderKeyConfigRectangle(int alpha)
{
void Hardware_RenderKeyConfigRectangle(int alpha);
Hardware_RenderKeyConfigRectangle(alpha);
fprintf(stderr, "RenderKeyConfigRectangle(%d)\n", alpha);
}
void RenderHighlightRectangle(int x1, int y1, int x2, int y2, int r, int g, int b)
{
void Hardware_RenderHighlightRectangle(int x1,int y1,int x2,int y2,int r, int g, int b);
Hardware_RenderHighlightRectangle(x1, y1, x2, y2, r, g, b);
fprintf(stderr, "RenderHighlightRectangle(%d, %d, %d, %d, %d, %d, %d)\n", x1, y1, x2, y2, r, g, b);
}
void RenderSmallFontString_Wrapped(char *textPtr,RECT* area,int alpha,int* output_x,int* output_y)
{
fprintf(stderr, "RenderSmallFontString_Wrapped(%s, %p, %d, %p, %p)\n", textPtr, area, alpha, output_x, output_y);
}
void LoadAvPMenuGfx(enum AVPMENUGFX_ID menuGfxID)
{
AVPMENUGFX *gfxPtr;
char buffer[100];
unsigned int fastFileLength;
void const *pFastFileData;
GLOBALASSERT(menuGfxID < MAX_NO_OF_AVPMENUGFXS);
gfxPtr = &AvPMenuGfxStorage[menuGfxID];
/* TODO: make sure this doesn't cause a leak */
InitialiseTextures();
CL_GetImageFileName(buffer, 100, gfxPtr->FilenamePtr, LIO_RELATIVEPATH);
pFastFileData = ffreadbuf(buffer, &fastFileLength);
if (pFastFileData) {
gfxPtr->ImagePtr = AwCreateSurface(
"pxfXY",
pFastFileData,
fastFileLength,
AW_TLF_TRANSP|AW_TLF_CHROMAKEY,
&(gfxPtr->Width),
&(gfxPtr->Height)
);
} else {
gfxPtr->ImagePtr = AwCreateSurface(
"sfXY",
buffer,
AW_TLF_TRANSP|AW_TLF_CHROMAKEY,
&(gfxPtr->Width),
&(gfxPtr->Height)
);
}
GLOBALASSERT(gfxPtr->ImagePtr);
GLOBALASSERT(gfxPtr->Width>0);
GLOBALASSERT(gfxPtr->Height>0);
gfxPtr->hBackup = 0;
}
static void ReleaseAvPMenuGfx(enum AVPMENUGFX_ID menuGfxID)
{
AVPMENUGFX *gfxPtr;
GLOBALASSERT(menuGfxID < MAX_NO_OF_AVPMENUGFXS);
gfxPtr = &AvPMenuGfxStorage[menuGfxID];
GLOBALASSERT(gfxPtr);
GLOBALASSERT(gfxPtr->ImagePtr);
ReleaseDDSurface(gfxPtr->ImagePtr);
gfxPtr->ImagePtr = NULL;
}
void LoadAllAvPMenuGfx()
{
int i;
for (i = 0; i < AVPMENUGFX_WINNER_SCREEN; i++) {
LoadAvPMenuGfx(i);
}
AAFontImageNumber = CL_LoadImageOnce("Common\\aa_font.RIM",LIO_D3DTEXTURE|LIO_RELATIVEPATH|LIO_RESTORABLE);
/*
TODO: load Fonts
TODO: Create cloud texture
TODO: Calculate AA font table?
*/
fprintf(stderr, "LoadAllAvPMenuGfx()\n");
}
void LoadAllSplashScreenGfx()
{
int i;
for (i = AVPMENUGFX_SPLASH_SCREEN1; i < MAX_NO_OF_AVPMENUGFXS; i++) {
LoadAvPMenuGfx(i);
}
}
void InitialiseMenuGfx()
{
int i;
for (i = 0; i < MAX_NO_OF_AVPMENUGFXS; i++) {
AvPMenuGfxStorage[i].ImagePtr = NULL;
}
glEnable(GL_BLEND);
// glBlendFunc(GL_ONE, GL_ONE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT);
}
void ReleaseAllAvPMenuGfx()
{
int i;
for (i = 0; i < MAX_NO_OF_AVPMENUGFXS; i++) {
if (AvPMenuGfxStorage[i].ImagePtr) {
ReleaseAvPMenuGfx(i);
}
}
/*
TODO: Unload fonts
*/
fprintf(stderr, "ReleaseAllAvPMenuGfx()\n");
}
void DrawAvPMenuGfx(enum AVPMENUGFX_ID menuGfxID, int topleftX, int topleftY, int alpha,enum AVPMENUFORMAT_ID format)
{
fprintf(stderr, "DrawAvPMenuGfx(%d, %d, %d, %d, %d)\n", menuGfxID, topleftX, topleftY, alpha, format);
}
void DrawAvPMenuGfx_CrossFade(enum AVPMENUGFX_ID menuGfxID,enum AVPMENUGFX_ID menuGfxID2,int alpha)
{
fprintf(stderr, "DrawAvPMenuGfx_CrossFade(%d, %d, %d)\n", menuGfxID, menuGfxID2, alpha);
}
void DrawAvPMenuGfx_Faded(enum AVPMENUGFX_ID menuGfxID, int topleftX, int topleftY, int alpha,enum AVPMENUFORMAT_ID format)
{
fprintf(stderr, "DrawAvPMenuGfx_Faded(%d, %d, %d, %d, %d)\n", menuGfxID, topleftX, topleftY, alpha, format);
}
void DrawAvPMenuGfx_Clipped(enum AVPMENUGFX_ID menuGfxID, int topleftX, int topleftY, int alpha,enum AVPMENUFORMAT_ID format, int topY, int bottomY)
{
fprintf(stderr, "DrawAvPMenuGfx_Clipped(%d, %d, %d, %d, %d, %d, %d)\n", menuGfxID, topleftX, topleftY, alpha, format, topY, bottomY);
}
int HeightOfMenuGfx(enum AVPMENUGFX_ID menuGfxID)
{
return AvPMenuGfxStorage[menuGfxID].Height;
}
void FadedScreen(int alpha)
{
fprintf(stderr, "FadedScreen(%d)\n", alpha);
}
void ClearScreenToBlack()
{
fprintf(stderr, "ClearScreenToBlack()\n");
}
#include "aafont.h"