mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-10 23:01:50 +00:00
- implemented subtitle display for Blackbird's voiceover messages.
This commit is contained in:
parent
270f8fb381
commit
04334aa0fe
8 changed files with 41 additions and 5 deletions
|
@ -289,6 +289,7 @@ public:
|
||||||
void SetLogNumber (int num);
|
void SetLogNumber (int num);
|
||||||
void SetLogText (const char *text);
|
void SetLogText (const char *text);
|
||||||
void SendPitchLimits() const;
|
void SendPitchLimits() const;
|
||||||
|
void SetSubtitle(int num);
|
||||||
|
|
||||||
AActor *mo = nullptr;
|
AActor *mo = nullptr;
|
||||||
uint8_t playerstate = 0;
|
uint8_t playerstate = 0;
|
||||||
|
@ -387,6 +388,8 @@ public:
|
||||||
float BlendA = 0;
|
float BlendA = 0;
|
||||||
|
|
||||||
FString LogText; // [RH] Log for Strife
|
FString LogText; // [RH] Log for Strife
|
||||||
|
FString SubtitleText;
|
||||||
|
int SubtitleCounter;
|
||||||
|
|
||||||
DAngle MinPitch = 0.; // Viewpitch limits (negative is up, positive is down)
|
DAngle MinPitch = 0.; // Viewpitch limits (negative is up, positive is down)
|
||||||
DAngle MaxPitch = 0.;
|
DAngle MaxPitch = 0.;
|
||||||
|
|
|
@ -84,6 +84,7 @@ EXTERN_CVAR (Bool, am_showtotaltime)
|
||||||
EXTERN_CVAR (Bool, noisedebug)
|
EXTERN_CVAR (Bool, noisedebug)
|
||||||
EXTERN_CVAR (Int, con_scaletext)
|
EXTERN_CVAR (Int, con_scaletext)
|
||||||
EXTERN_CVAR(Bool, vid_fps)
|
EXTERN_CVAR(Bool, vid_fps)
|
||||||
|
EXTERN_CVAR(Bool, inter_subtitles)
|
||||||
CVAR(Int, hud_scale, 0, CVAR_ARCHIVE);
|
CVAR(Int, hud_scale, 0, CVAR_ARCHIVE);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1216,7 +1217,8 @@ void DBaseStatusBar::DrawLog ()
|
||||||
FFont *font = C_GetDefaultHUDFont();
|
FFont *font = C_GetDefaultHUDFont();
|
||||||
|
|
||||||
int linelen = hudwidth<640? Scale(hudwidth,9,10)-40 : 560;
|
int linelen = hudwidth<640? Scale(hudwidth,9,10)-40 : 560;
|
||||||
auto lines = V_BreakLines (font, linelen, CPlayer->LogText[0] == '$'? GStrings(CPlayer->LogText.GetChars()+1) : CPlayer->LogText.GetChars());
|
const FString & text = (inter_subtitles && CPlayer->SubtitleCounter) ? CPlayer->SubtitleText : CPlayer->LogText;
|
||||||
|
auto lines = V_BreakLines (font, linelen, text[0] == '$'? GStrings(text.GetChars()+1) : text.GetChars());
|
||||||
int height = 20;
|
int height = 20;
|
||||||
|
|
||||||
for (unsigned i = 0; i < lines.Size(); i++) height += font->GetHeight ();
|
for (unsigned i = 0; i < lines.Size(); i++) height += font->GetHeight ();
|
||||||
|
@ -1232,7 +1234,7 @@ void DBaseStatusBar::DrawLog ()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x=(hudwidth>>1)-300;
|
x=(hudwidth>>1)-300;
|
||||||
y=hudheight*3/10-(height>>1);
|
y=hudheight/8-(height>>1);
|
||||||
if (y<0) y=0;
|
if (y<0) y=0;
|
||||||
w=600;
|
w=600;
|
||||||
}
|
}
|
||||||
|
@ -1242,7 +1244,7 @@ void DBaseStatusBar::DrawLog ()
|
||||||
y+=10;
|
y+=10;
|
||||||
for (const FBrokenLines &line : lines)
|
for (const FBrokenLines &line : lines)
|
||||||
{
|
{
|
||||||
screen->DrawText (font, CR_UNTRANSLATED, x, y, line.Text,
|
screen->DrawText (font, CPlayer->SubtitleCounter? CR_CYAN : CR_UNTRANSLATED, x, y, line.Text,
|
||||||
DTA_KeepRatio, true,
|
DTA_KeepRatio, true,
|
||||||
DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, TAG_DONE);
|
DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, TAG_DONE);
|
||||||
y += font->GetHeight ();
|
y += font->GetHeight ();
|
||||||
|
@ -1321,7 +1323,7 @@ void DBaseStatusBar::DrawTopStuff (EHudState state)
|
||||||
|
|
||||||
DrawConsistancy ();
|
DrawConsistancy ();
|
||||||
DrawWaiting ();
|
DrawWaiting ();
|
||||||
if (ShowLog && MustDrawLog(state)) DrawLog ();
|
if ((ShowLog && MustDrawLog(state)) || (inter_subtitles && CPlayer->SubtitleCounter > 0)) DrawLog ();
|
||||||
|
|
||||||
if (noisedebug)
|
if (noisedebug)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3196,6 +3196,7 @@ FUNC(LS_SendToCommunicator)
|
||||||
if (it->CheckLocalView())
|
if (it->CheckLocalView())
|
||||||
{
|
{
|
||||||
S_StopSound (CHAN_VOICE);
|
S_StopSound (CHAN_VOICE);
|
||||||
|
it->player->SetSubtitle(arg0);
|
||||||
S_Sound (CHAN_VOICE, name, 1, ATTN_NORM);
|
S_Sound (CHAN_VOICE, name, 1, ATTN_NORM);
|
||||||
|
|
||||||
// Get the message from the LANGUAGE lump.
|
// Get the message from the LANGUAGE lump.
|
||||||
|
|
|
@ -438,6 +438,30 @@ DEFINE_ACTION_FUNCTION(_PlayerInfo, SetLogText)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void player_t::SetSubtitle(int num)
|
||||||
|
{
|
||||||
|
char lumpname[36];
|
||||||
|
|
||||||
|
// Do we have a subtitle for this log entry's voice file?
|
||||||
|
mysnprintf(lumpname, countof(lumpname), "$TXT_SUB_LOG%d", num);
|
||||||
|
auto text = GStrings.GetLanguageString(lumpname+1, FStringTable::default_table);
|
||||||
|
if (text != nullptr)
|
||||||
|
{
|
||||||
|
SubtitleText = lumpname;
|
||||||
|
SubtitleCounter = 7 * TICRATE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(_PlayerInfo, SetSubtitleNumber)
|
||||||
|
{
|
||||||
|
PARAM_SELF_STRUCT_PROLOGUE(player_t);
|
||||||
|
PARAM_INT(log);
|
||||||
|
self->SetSubtitle(log);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int player_t::GetSpawnClass()
|
int player_t::GetSpawnClass()
|
||||||
{
|
{
|
||||||
const PClass * type = PlayerClasses[CurrentPlayerClass].Type;
|
const PClass * type = PlayerClasses[CurrentPlayerClass].Type;
|
||||||
|
@ -1633,6 +1657,8 @@ void player_t::Serialize(FSerializer &arc)
|
||||||
("blenda", BlendA)
|
("blenda", BlendA)
|
||||||
("weaponstate", WeaponState)
|
("weaponstate", WeaponState)
|
||||||
("logtext", LogText)
|
("logtext", LogText)
|
||||||
|
("subtitletext", SubtitleText)
|
||||||
|
("subtitlecounter", SubtitleCounter)
|
||||||
("conversionnpc", ConversationNPC)
|
("conversionnpc", ConversationNPC)
|
||||||
("conversionpc", ConversationPC)
|
("conversionpc", ConversationPC)
|
||||||
("conversionnpcangle", ConversationNPCAngle)
|
("conversionnpcangle", ConversationNPCAngle)
|
||||||
|
|
|
@ -2693,6 +2693,7 @@ struct PlayerInfo native play // self is what internally is known as player_t
|
||||||
native PSprite FindPSprite(int id) const;
|
native PSprite FindPSprite(int id) const;
|
||||||
native void SetLogNumber (int text);
|
native void SetLogNumber (int text);
|
||||||
native void SetLogText (String text);
|
native void SetLogText (String text);
|
||||||
|
native void SetSubtitleNumber (int text);
|
||||||
native bool Resurrect();
|
native bool Resurrect();
|
||||||
|
|
||||||
native String GetUserName() const;
|
native String GetUserName() const;
|
||||||
|
|
|
@ -102,6 +102,7 @@ class Acolyte : StrifeHumanoid
|
||||||
{
|
{
|
||||||
players[i].mo.GiveInventoryType ("QuestItem7");
|
players[i].mo.GiveInventoryType ("QuestItem7");
|
||||||
players[i].SetLogNumber (14);
|
players[i].SetLogNumber (14);
|
||||||
|
players[i].SetSubtitleNumber (14);
|
||||||
A_StopSound (CHAN_VOICE);
|
A_StopSound (CHAN_VOICE);
|
||||||
A_PlaySound ("svox/voc14", CHAN_VOICE, 1, false, ATTN_NONE);
|
A_PlaySound ("svox/voc14", CHAN_VOICE, 1, false, ATTN_NONE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,6 +181,7 @@ class AlienSpectre1 : SpectralMonster
|
||||||
String voc = "svox/voc" .. log;
|
String voc = "svox/voc" .. log;
|
||||||
A_PlaySound(voc, CHAN_VOICE, 1, false, ATTN_NONE);
|
A_PlaySound(voc, CHAN_VOICE, 1, false, ATTN_NONE);
|
||||||
player.player.SetLogNumber (log);
|
player.player.SetLogNumber (log);
|
||||||
|
player.player.SetSubtitleNumber (log);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1865,6 +1865,7 @@ class PowerCoupling : Actor
|
||||||
players[i].mo.GiveInventoryType ("QuestItem6");
|
players[i].mo.GiveInventoryType ("QuestItem6");
|
||||||
S_Sound ("svox/voc13", CHAN_VOICE);
|
S_Sound ("svox/voc13", CHAN_VOICE);
|
||||||
players[i].SetLogNumber (13);
|
players[i].SetLogNumber (13);
|
||||||
|
players[i].SetSubtitleNumber (13);
|
||||||
A_DropItem ("BrokenPowerCoupling", -1, 256);
|
A_DropItem ("BrokenPowerCoupling", -1, 256);
|
||||||
Destroy ();
|
Destroy ();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue