- more work on Blood menus. Game start works.

This commit is contained in:
Christoph Oelckers 2019-12-01 20:17:30 +01:00
parent e2be025433
commit e8c5939695
6 changed files with 54 additions and 163 deletions

View file

@ -90,13 +90,11 @@ struct GameInterface : ::GameInterface
FString statFPS() override; FString statFPS() override;
FSavegameInfo GetSaveSig() override; FSavegameInfo GetSaveSig() override;
void MenuOpened() override; void MenuOpened() override;
void MenuSound(EMenuSounds snd) override;
void MenuClosed() override; void MenuClosed() override;
bool CanSave() override; bool CanSave() override;
void StartGame(FGameStartup& gs) override; void StartGame(FGameStartup& gs) override;
void DrawNativeMenuText(int fontnum, int state, double xpos, double ypos, float fontscale, const char* text, int flags) override; void DrawNativeMenuText(int fontnum, int state, double xpos, double ypos, float fontscale, const char* text, int flags) override;
void DrawMenuCaption(const DVector2& origin, const char* text) override; void DrawMenuCaption(const DVector2& origin, const char* text) override;
void DrawCenteredTextScreen(const DVector2& origin, const char* text, int position) override;
}; };
END_BLD_NS END_BLD_NS

View file

@ -39,6 +39,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "view.h" #include "view.h"
#include "demo.h" #include "demo.h"
#include "network.h" #include "network.h"
#include "mmulti.h"
#include "c_bind.h" #include "c_bind.h"
#include "menu/menu.h" #include "menu/menu.h"
@ -136,13 +137,6 @@ void CGameMenuItemQAV::Draw(void)
static std::unique_ptr<CGameMenuItemQAV> itemBloodQAV; // This must be global to ensure that the animation remains consistent across menus. static std::unique_ptr<CGameMenuItemQAV> itemBloodQAV; // This must be global to ensure that the animation remains consistent across menus.
/*
CGameMenuItemQAV itemCreditsQAV("", 3, 160, 100, "CREDITS", false, true);
CGameMenuItemQAV itemHelp3QAV("", 3, 160, 100, "HELP3", false, false);
CGameMenuItemQAV itemHelp3BQAV("", 3, 160, 100, "HELP3B", false, false);
CGameMenuItemQAV itemHelp4QAV("", 3, 160, 100, "HELP4", false, true);
CGameMenuItemQAV itemHelp5QAV("", 3, 160, 100, "HELP5", false, true);
*/
void UpdateNetworkMenus(void) void UpdateNetworkMenus(void)
@ -172,29 +166,6 @@ void UpdateNetworkMenus(void)
#endif #endif
} }
void MenuSetupEpisodeInfo(void)
{
#if 0
memset(zEpisodeNames, 0, sizeof(zEpisodeNames));
memset(zLevelNames, 0, sizeof(zLevelNames));
for (int i = 0; i < 6; i++)
{
if (i < gEpisodeCount)
{
EPISODEINFO* pEpisode = &gEpisodeInfo[i];
zEpisodeNames[i] = pEpisode->at0;
for (int j = 0; j < 16; j++)
{
if (j < pEpisode->nLevels)
{
zLevelNames[i][j] = pEpisode->data[j].at90;
}
}
}
}
#endif
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// //
// Implements the native looking menu used for the main menu // Implements the native looking menu used for the main menu
@ -216,6 +187,38 @@ protected:
}; };
//----------------------------------------------------------------------------
//
//
//
//----------------------------------------------------------------------------
class BloodImageScreen : public ImageScreen
{
CGameMenuItemQAV anim;
public:
BloodImageScreen(FImageScrollerDescriptor::ScrollerItem* desc)
: ImageScreen(desc), anim(169, 100, mDesc->text.GetChars(), false, true)
{
}
void Drawer() override
{
anim.Draw();
}
};
class DBloodImageScrollerMenu : public DImageScrollerMenu
{
ImageScreen* newImageScreen(FImageScrollerDescriptor::ScrollerItem* desc) override
{
if (desc->type >= 0) return DImageScrollerMenu::newImageScreen(desc);
return new BloodImageScreen(desc);
}
};
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// //
// Menu related game interface functions // Menu related game interface functions
@ -246,129 +249,29 @@ void GameInterface::DrawNativeMenuText(int fontnum, int state, double xpos, doub
void GameInterface::MenuOpened() void GameInterface::MenuOpened()
{ {
#if 0
S_PauseSounds(true);
if ((!g_netServer && ud.multimode < 2))
{
ready2send = 0;
totalclock = ototalclock;
screenpeek = myconnectindex;
}
auto& gm = g_player[myconnectindex].ps->gm;
if (gm & MODE_GAME)
{
gm |= MODE_MENU;
}
#endif
itemBloodQAV.reset(new CGameMenuItemQAV(160, 100, "BDRIP.QAV", true)); itemBloodQAV.reset(new CGameMenuItemQAV(160, 100, "BDRIP.QAV", true));
} }
void GameInterface::MenuSound(EMenuSounds snd)
{
#if 0
switch (snd)
{
case CursorSound:
S_PlaySound(RR ? 335 : KICK_HIT);
break;
case AdvanceSound:
S_PlaySound(RR ? 341 : PISTOL_BODYHIT);
break;
case CloseSound:
S_PlaySound(EXITMENUSOUND);
break;
default:
return;
}
#endif
}
void GameInterface::MenuClosed() void GameInterface::MenuClosed()
{ {
itemBloodQAV.reset(); itemBloodQAV.reset();
#if 0
auto& gm = g_player[myconnectindex].ps->gm;
if (gm & MODE_GAME)
{
if (gm & MODE_MENU)
I_ClearAllInput();
// The following lines are here so that you cannot close the menu when no game is running.
gm &= ~MODE_MENU;
if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2)
{
ready2send = 1;
totalclock = ototalclock;
CAMERACLOCK = (int32_t)totalclock;
CAMERADIST = 65536;
// Reset next-viewscreen-redraw counter.
// XXX: are there any other cases like that in need of handling?
if (g_curViewscreen >= 0)
actor[g_curViewscreen].t_data[0] = (int32_t)totalclock;
}
G_UpdateScreenArea();
S_PauseSounds(false);
}
#endif
} }
bool GameInterface::CanSave() bool GameInterface::CanSave()
{ {
#if 0 return (gGameStarted && gPlayer[myconnectindex].pXSprite->health != 0);
if (ud.recstat == 2) return false;
auto& myplayer = *g_player[myconnectindex].ps;
if (sprite[myplayer.i].extra <= 0)
{
P_DoQuote(QUOTE_SAVE_DEAD, &myplayer);
return false;
}
#endif
return true;
} }
void GameInterface::StartGame(FGameStartup& gs) void GameInterface::StartGame(FGameStartup& gs)
{ {
#if 0 gGameOptions.nDifficulty = gs.Skill;
int32_t skillsound = PISTOL_BODYHIT; gGameOptions.nEpisode = gs.Episode;
gSkill = gs.Skill;
switch (gs.Skill) gGameOptions.nLevel = gs.Level;
{ if (gDemo.at1)
case 0: gDemo.StopPlayback();
skillsound = 427; gStartNewGame = true;
break; gCheatMgr.sub_5BCF4();
case 1:
skillsound = 428;
break;
case 2:
skillsound = 196;
break;
case 3:
skillsound = 195;
break;
case 4:
skillsound = 197;
break;
}
ud.m_player_skill = gs.Skill + 1;
if (menu_sounds) g_skillSoundVoice = S_PlaySound(skillsound);
ud.m_respawn_monsters = (gs.Skill == 3);
ud.m_monsters_off = ud.monsters_off = 0;
ud.m_respawn_items = 0;
ud.m_respawn_inventory = 0;
ud.multimode = 1;
ud.m_volume_number = gs.Episode;
ud.m_level_number = gs.Level;
G_NewGame_EnterLevel();
#endif
} }
FSavegameInfo GameInterface::GetSaveSig() FSavegameInfo GameInterface::GetSaveSig()
@ -385,16 +288,6 @@ void GameInterface::DrawMenuCaption(const DVector2& origin, const char* text)
viewDrawText(1, text, 160, 20 - height / 2, -128, 0, 1, false); viewDrawText(1, text, 160, 20 - height / 2, -128, 0, 1, false);
} }
void GameInterface::DrawCenteredTextScreen(const DVector2& origin, const char* text, int position)
{
#if 0
Menu_DrawBackground(origin);
G_ScreenText(MF_Bluefont.tilenum, int((origin.X + 160) * 65536), int((origin.Y + position) * 65536), MF_Bluefont.zoom, 0, 0, text, 0, MF_Bluefont.pal,
2 | 8 | 16 | ROTATESPRITE_FULL16, 0, MF_Bluefont.emptychar.x, MF_Bluefont.emptychar.y, MF_Bluefont.between.x, MF_Bluefont.between.y,
MF_Bluefont.textflags | TEXT_XCENTER, 0, 0, xdim - 1, ydim - 1);
#endif
}
END_BLD_NS END_BLD_NS
@ -406,8 +299,10 @@ END_BLD_NS
static TMenuClassDescriptor<Blood::BloodListMenu> _lm("Blood.ListMenu"); static TMenuClassDescriptor<Blood::BloodListMenu> _lm("Blood.ListMenu");
static TMenuClassDescriptor<Blood::DBloodImageScrollerMenu> _im("Blood.ImageScrollerMenu");
void RegisterBloodMenus() void RegisterBloodMenus()
{ {
menuClasses.Push(&_lm); menuClasses.Push(&_lm);
menuClasses.Push(&_im);
} }

View file

@ -221,8 +221,6 @@ void levelLoadMapInfo(IniFile *pIni, LEVELINFO *pLevelInfo, const char *pzSectio
} }
} }
extern void MenuSetupEpisodeInfo(void);
void levelLoadDefaults(void) void levelLoadDefaults(void)
{ {
char buffer[64]; char buffer[64];
@ -272,7 +270,6 @@ void levelLoadDefaults(void)
pEpisodeInfo->nLevels = j; pEpisodeInfo->nLevels = j;
} }
gEpisodeCount = i; gEpisodeCount = i;
MenuSetupEpisodeInfo();
} }
void levelAddUserMap(const char *pzMap) void levelAddUserMap(const char *pzMap)
@ -302,7 +299,6 @@ void levelAddUserMap(const char *pzMap)
gGameOptions.nLevel = nLevel; gGameOptions.nLevel = nLevel;
gGameOptions.uMapCRC = dbReadMapCRC(pLevelInfo->at0); gGameOptions.uMapCRC = dbReadMapCRC(pLevelInfo->at0);
strcpy(gGameOptions.zLevelName, pLevelInfo->at0); strcpy(gGameOptions.zLevelName, pLevelInfo->at0);
MenuSetupEpisodeInfo();
} }
void levelGetNextLevels(int nEpisode, int nLevel, int *pnEndingA, int *pnEndingB) void levelGetNextLevels(int nEpisode, int nLevel, int *pnEndingA, int *pnEndingB)

View file

@ -69,10 +69,11 @@ void ImageScreen::Drawer()
rotatesprite_fs(int(origin.X * 65536) + (160 << 16), int(origin.Y * 65536) + (100 << 16), 65536L, 0, tileindex, 0, 0, 10 + 64); rotatesprite_fs(int(origin.X * 65536) + (160 << 16), int(origin.Y * 65536) + (100 << 16), 65536L, 0, tileindex, 0, 0, 10 + 64);
} }
} }
else else if (mDesc->type > 0)
{ {
gi->DrawCenteredTextScreen(origin, mDesc->text, mDesc->type); gi->DrawCenteredTextScreen(origin, mDesc->text, mDesc->type);
} }
// QAVs are handled in the Blood frontend. Maybe they should be moved out? Stuff for later, but this is a feature where it is feasible.
} }
ImageScreen* DImageScrollerMenu::newImageScreen(FImageScrollerDescriptor::ScrollerItem* desc) ImageScreen* DImageScrollerMenu::newImageScreen(FImageScrollerDescriptor::ScrollerItem* desc)

View file

@ -678,6 +678,7 @@ class DImageScrollerMenu : public DMenu
int index = 0; int index = 0;
MenuTransition pageTransition = {}; MenuTransition pageTransition = {};
protected:
virtual ImageScreen* newImageScreen(FImageScrollerDescriptor::ScrollerItem* desc); virtual ImageScreen* newImageScreen(FImageScrollerDescriptor::ScrollerItem* desc);
public: public:

View file

@ -420,12 +420,12 @@ ImageScroller "HelpMenu"
ifgame(blood) ifgame(blood)
{ {
// The duplication here is to integrate the alternating versions of HELP3 // The duplication here is to integrate the alternating versions of HELP3
QAVAnimationItem "Help4" QAVAnimationItem "Help4.qav"
QAVAnimationItem "Help5" QAVAnimationItem "Help5.qav"
QAVAnimationItem "Help3" QAVAnimationItem "Help3.qav"
QAVAnimationItem "Help4" QAVAnimationItem "Help4.qav"
QAVAnimationItem "Help5" QAVAnimationItem "Help5.qav"
QAVAnimationItem "Help3b" QAVAnimationItem "Help3b.qav"
} }
ifgame(ShadowWarrior) ifgame(ShadowWarrior)
{ {
@ -530,7 +530,7 @@ ImageScroller "CreditsMenu"
} }
ifgame(blood) ifgame(blood)
{ {
QAVAnimationItem "Credits" QAVAnimationItem "Credits.qav"
} }
ifgame(ShadowWarrior) ifgame(ShadowWarrior)
{ {