- added a native style display mode to the notification message display.

Fixes #9
This commit is contained in:
Christoph Oelckers 2020-08-23 22:39:53 +02:00
parent 4469cf7edb
commit 41a1120033
4 changed files with 130 additions and 27 deletions

View file

@ -468,7 +468,7 @@ void viewSetSystemMessage(const char* pMessage, ...) {
void viewSetMessage(const char *pMessage, const int pal, const MESSAGE_PRIORITY priority)
{
int printlevel = priority < 0 ? PRINT_LOW : priority < MESSAGE_PRIORITY_SYSTEM ? PRINT_MEDIUM : PRINT_HIGH;
int printlevel = priority <= MESSAGE_PRIORITY_NORMAL ? PRINT_LOW : priority < MESSAGE_PRIORITY_SYSTEM ? PRINT_MEDIUM : PRINT_HIGH;
Printf(printlevel|PRINT_NOTIFY, "%s\n", pMessage);
}

View file

@ -139,11 +139,12 @@ static int worklen = 0;
CVAR(Float, con_notifytime, 3.f, CVAR_ARCHIVE)
CVAR(Bool, con_centernotify, false, CVAR_ARCHIVE)
CVAR(Bool, con_notify_advanced, false, CVAR_ARCHIVE)
CUSTOM_CVAR(Int, con_scaletext, 2, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) // Scale notify text at high resolutions?
{
if (self < 0) self = 0;
}
CVAR(Bool, con_pulseText, true, CVAR_ARCHIVE)
CVAR(Bool, con_pulsetext, false, CVAR_ARCHIVE)
CUSTOM_CVAR(Int, con_scale, 0, CVAR_ARCHIVE)
{
@ -536,6 +537,7 @@ public:
void Clear() { Text.Clear(); }
void Tick();
void Draw();
void DrawNative();
private:
TArray<FNotifyText> Text;
@ -551,7 +553,7 @@ CUSTOM_CVAR(Int, con_notifylines, NUMNOTIFIES, CVAR_GLOBALCONFIG | CVAR_ARCHIVE)
}
int PrintColors[PRINTLEVELS+2] = { CR_RED, CR_GOLD, CR_GRAY, CR_GREEN, CR_GREEN, CR_GOLD };
int PrintColors[PRINTLEVELS+2] = { CR_UNTRANSLATED, CR_GOLD, CR_GRAY, CR_GREEN, CR_GREEN, CR_UNTRANSLATED };
static void setmsgcolor (int index, int color);
@ -560,37 +562,37 @@ FILE *Logfile = NULL;
FIntCVar msglevel ("msg", 0, CVAR_ARCHIVE);
CUSTOM_CVAR (Int, msg0color, 6, CVAR_ARCHIVE)
CUSTOM_CVAR (Int, msg0color, CR_UNTRANSLATED, CVAR_ARCHIVE)
{
setmsgcolor (0, self);
}
CUSTOM_CVAR (Int, msg1color, 5, CVAR_ARCHIVE)
CUSTOM_CVAR (Int, msg1color, CR_GOLD, CVAR_ARCHIVE)
{
setmsgcolor (1, self);
}
CUSTOM_CVAR (Int, msg2color, 2, CVAR_ARCHIVE)
CUSTOM_CVAR (Int, msg2color, CR_GRAY, CVAR_ARCHIVE)
{
setmsgcolor (2, self);
}
CUSTOM_CVAR (Int, msg3color, 3, CVAR_ARCHIVE)
CUSTOM_CVAR (Int, msg3color, CR_GREEN, CVAR_ARCHIVE)
{
setmsgcolor (3, self);
}
CUSTOM_CVAR (Int, msg4color, 3, CVAR_ARCHIVE)
CUSTOM_CVAR (Int, msg4color, CR_GREEN, CVAR_ARCHIVE)
{
setmsgcolor (4, self);
}
CUSTOM_CVAR (Int, msgmidcolor, 5, CVAR_ARCHIVE)
CUSTOM_CVAR (Int, msgmidcolor, CR_UNTRANSLATED, CVAR_ARCHIVE)
{
setmsgcolor (PRINTLEVELS, self);
}
CUSTOM_CVAR (Int, msgmidcolor2, 4, CVAR_ARCHIVE)
CUSTOM_CVAR (Int, msgmidcolor2, CR_BROWN, CVAR_ARCHIVE)
{
setmsgcolor (PRINTLEVELS+1, self);
}
@ -915,11 +917,14 @@ int PrintString (int iprintlevel, const char *outline)
I_PrintStr(outline);
conbuffer->AddText(printlevel, outline);
if (vidactive && (iprintlevel & PRINT_NOTIFY)) // The logic here is inverse to ZDoom because most texts getting here should not be on screem.
if (!(iprintlevel & PRINT_NONOTIFY))
{
if (vidactive && ((iprintlevel & PRINT_NOTIFY) || con_notify_advanced))
{
NotifyStrings.AddString(printlevel, outline);
}
}
}
if (Logfile != nullptr && !(iprintlevel & PRINT_NOLOG))
{
WriteLineToLog(Logfile, outline);
@ -1074,21 +1079,90 @@ void FNotifyBuffer::Tick()
}
}
void FNotifyBuffer::DrawNative()
{
// Native display is:
// * centered at the top and pulsing for Duke
// * centered shifted down and not pulsing for Shadow Warrior
// * top left for Exhumed
// * 4 lines with the tiny font for Blood. (same mechanic as the regular one, just a different font and scale.)
bool center = g_gameType & (GAMEFLAG_DUKE | GAMEFLAG_NAM | GAMEFLAG_WW2GI | GAMEFLAG_RR | GAMEFLAG_SW);
bool pulse = g_gameType & (GAMEFLAG_DUKE | GAMEFLAG_NAM | GAMEFLAG_WW2GI | GAMEFLAG_RR);
unsigned topline = g_gameType & GAMEFLAG_BLOOD ? 0 : Text.Size() - 1;
FFont* font = g_gameType & GAMEFLAG_BLOOD ? SmallFont2 : SmallFont;
int line = (g_gameType & GAMEFLAG_BLOOD)? Top : (g_gameType & GAMEFLAG_SW) ? 40 : font->GetDisplacement();
bool canskip = (g_gameType & GAMEFLAG_BLOOD);
int lineadv = font->GetHeight();
for (unsigned i = topline; i < Text.Size(); ++i)
{
FNotifyText& notify = Text[i];
if (notify.TimeOut == 0)
continue;
int j = notify.TimeOut - notify.Ticker;
if (j > 0)
{
double alpha = g_gameType & GAMEFLAG_BLOOD? ((j < NOTIFYFADETIME) ? 1. * j / NOTIFYFADETIME : 1) : 1;
if (pulse)
{
alpha *= 0.7 + 0.3 * sin(I_msTime() / 100.);
}
if (!center)
{
DrawText(twod, font, CR_UNTRANSLATED, 0, line, notify.Text,
DTA_FullscreenScale, FSMode_ScaleToHeight,
DTA_VirtualWidth, 320, DTA_VirtualHeight, 200, DTA_KeepRatio, true,
DTA_Alpha, alpha, TAG_DONE);
}
else
{
int fac = isRR() ? 2 : 1;
DrawText(twod, font, CR_UNTRANSLATED, 160 * fac - font->StringWidth(notify.Text) / 2, line, notify.Text,
DTA_FullscreenScale, FSMode_ScaleToHeight,
DTA_VirtualWidth, 320 * fac, DTA_VirtualHeight, 200 * fac,
DTA_Alpha, alpha, TAG_DONE);
}
line += lineadv;
canskip = false;
}
else
{
notify.TimeOut = 0;
}
}
if (canskip)
{
Top = TopGoal;
}
}
void FNotifyBuffer::Draw()
{
bool center = (con_centernotify != 0.f);
int line, lineadv, color, j;
bool canskip;
if (gamestate == GS_FULLCONSOLE || gamestate == GS_MENUSCREEN)
return;
if (!con_notify_advanced)
{
DrawNative();
return;
}
bool center = (con_centernotify != 0.f);
int color;
FFont* font = generic_ui ? NewSmallFont : SmallFont? SmallFont : AlternativeSmallFont;
line = Top + font->GetDisplacement() / NotifyFontScale;
canskip = true;
int line = Top + font->GetDisplacement() / NotifyFontScale;
bool canskip = true;
lineadv = font->GetHeight () / NotifyFontScale;
int lineadv = font->GetHeight () / NotifyFontScale;
for (unsigned i = 0; i < Text.Size(); ++ i)
{
@ -1097,11 +1171,11 @@ void FNotifyBuffer::Draw()
if (notify.TimeOut == 0)
continue;
j = notify.TimeOut - notify.Ticker;
int j = notify.TimeOut - notify.Ticker;
if (j > 0)
{
double alpha = (j < NOTIFYFADETIME) ? 1. * j / NOTIFYFADETIME : 1;
if (con_pulseText)
if (con_pulsetext)
{
alpha *= 0.7 + 0.3 * sin(I_msTime() / 100.);
}

View file

@ -1009,7 +1009,12 @@ OptionValue "HUDMessages"
{
0, "$OPTVAL_OFF"
1, "$OPTVAL_ON"
2, "$DSPLYMNU_GENERIC"
}
OptionValue "HUDMessageStyle"
{
0, "$OPTVAL_CLASSIC"
1, "$OPTVAL_ADVANCED"
}
OptionMenu "HUDOptions" //protected
@ -1026,13 +1031,15 @@ OptionMenu "HUDOptions" //protected
StaticText ""
Option "$DSPLYMNU_MESSAGES", "hud_messages", "HudMessages"
Option "$DSPLYMNU_MESSAGEDISP", "con_notify_advanced", "HudMessageStyle"
Option "$MSGMNU_CENTERMESSAGES", "con_centernotify", "OnOff", "con_notify_advanced"
Option "$MSGMNU_PULSEMESSAGES", "con_pulsetext", "OnOff", "con_notify_advanced"
Slider "$MSGMNU_MESSAGESCALE", "con_scaletext", 0.0, 8.0, 1.0, -1
StaticText ""
Option "$DSPLYMNU_CROSSHAIR", "cl_crosshair", OnOff
ifgame(duke, nam, ww2gi, redneck, redneckrides, fury, deer)
{
Slider "$DSPLYMNU_CROSSHAIRSCALE", "cl_crosshairscale", 50, 100, 10, 1
}
}
//-------------------------------------------------------------------------------------------

View file

@ -507,6 +507,12 @@ None (linear mipmap),OPTVAL_NONELINEARMIPMAP,,,,Žádné (lineární mipmapa),Au
None (trilinear),OPTVAL_NONETRILINEAR,,,,Žádné (trilineární),Aus (trilinear),,Nenio (trilinia),Ninguno (trilineal),,Ei mitään (trilineaarinen),Aucun (mipmap trilinéaire),,Nessuno (mipmap trilineare),なし(トライリニア),없음 (삼선형),Geen (trilineair),Brak (trzyliniowe),Nenhum (trilinear),,,Нет (трилинейная),Ништа (трилинеарно)
Bilinear,OPTVAL_BILINEAR,,,,Bilineární,,,Dulinia,Bilineal,,Bilineaarinen,Bilinéaire,,Bilineare,バイリニア,쌍선형,Bilineair,Dwuliniowe,,,,Билинейная,Билинеарно
Trilinear,OPTVAL_TRILINEAR,,,,Trilineární,,,Trilinia,Trilineal,,Trilineaarinen,Trilinéaire,,Trilineare,トライリニア,삼선형,Trilineair,Trzyliniowe,,,,Трилинейная,Трилинеарно
Message Display Style,DSPLYMNU_MESSAGEDISP,,,,,Nachrichtenstil,,,,,,,,,,,,,,,,,
Classic,OPTVAL_CLASSIC,,,,,Klassisch,,,,,,,,,,,,,,,,,
Advanced,OPTVAL_ADVANCED,,,,,Erweitert,,,,,,,,,,,,,,,,,
Center messages,MSGMNU_CENTERMESSAGES,,,Centre messages,Vycentrovat zprávy,Nachrichten zentrieren,,Centrigi mesaĝoj,Centrar mensajes,,Keskitä viestit,Messages centrés,,Messaggi centrati,メッセージを中央に,메시지 중간에 위치,Berichten centreren,Wyśrodkuj wiadomości,Centralizar mensagens,Centrar mensagens,Mesaje centrate,Центрирование сообщений,Централне поруке
Pulsating message Display,MSGMNU_PULSEMESSAGES,,,,,Pulsierende Nachrichtenanzeige,,,,,,,,,,,,,,,,,
Message Scale,MSGMNU_MESSAGESCALE,,,,,Nachrichtengröße,,,,,,,,,,,,,,,,,
2x,OPTVAL_2X,,,,,,,2-oble,,,,,,,,,,,,,,,
4x,OPTVAL_4X,,,,,,,4-oble,,,,,,,,,,,,,,,
8x,OPTVAL_8X,,,,,,,8-oble,,,,,,,,,,,,,,,
@ -2318,3 +2324,19 @@ War Key,TXT_EX_PICKUP26,,,,,,,,,,,,,,,,,,,,,,
Earth Key,TXT_EX_PICKUP27,,,,,,,,,,,,,,,,,,,,,,
Magic,TXT_EX_PICKUP28,,,,,,,,,,,,,,,,,,,,,,
Location Preserved,TXT_EX_PICKUP29,,,,,,,,,,,,,,,,,,,,,,
"Pick up a copy of Exhumed
today to continue the adventure!
More levels, nastier creatures
and the evil doings of the
Kilmaat await you in the full
version of the game.
Twenty levels, plus 12 network
play levels can be yours!
",TXT_EX_SHAREWARE,,,,,,,,,,,,,,,,,,,,,,
"Hi Sweetie, I love you",TXT_EX_SWEETIE,,,,,,,,,,,,,,,,,,,,,,
Flashes toggled,TXT_EX_FLASHES,,,,,,,,,,,,,,,,,,,,,,
Full Map,TXT_EX_FULLMAP,,,,,,,,,,,,,,,,,,,,,,
Slip mode ON,TXT_EX_SLIPON,,,,,,,,,,,,,,,,,,,,,,
Slip mode OFF,TXT_EX_SLIPOFF,,,,,,,,,,,,,,,,,,,,,,
Snake Cam Enabled,TXT_EX_SNAKEON,,,,,,,,,,,,,,,,,,,,,,
Snake Cam Disabled,TXT_EX_SNAKEOFF,,,,,,,,,,,,,,,,,,,,,,
1 default Identifier Remarks Filter eng enc ena enz eni ens enj enb enl ent enw cs de el eo es esm esn esg esc esa esd esv eso esr ess esf esl esy esz esb ese esh esi esu fi fr hu it jp ko nl pl pt ptg ro ru sr
507 Time threshold for node caching Enable autosaves MISCMNU_CACHETIME MISCMNU_ENABLEAUTOSAVES Časový práh pro cachování nodes Povolit automatické ukládání Zeitschwelle für das Zwischenspeichern von Nodes Automatisches Speichern Templimo pro kaŝmemornodi Aktivigi aŭtokonservojn Umbral de tiempo para caché de nodos Activar autoguardado Kynnysaika solmujen välimuistitallennukseen Ota käyttöön automaattiset tallennukset Limite cache des nodes Activer Sauvegardes auto Soglia di tempo per il caching dei nodi Abilita i salvataggi automatici ノードキャッシュ時間の閾値 オートセーブを有効化 노드 캐싱을 위한 시간 임계값 계산 빠른 저장 허용 Tijdsdrempel voor het cachen van nodes Automatisch opslaan inschakelen Próg czasowy buforowania węzłów Włącz autozapis Limite de tempo para cachê de nodes Habilitar salvamento automático Limite de tempo para cache de nodes Permitir gravação automática Временной порог для кэширования нодов Автосохранения Временски праг за кеширање чвора Омогући аутосејвове
508 Clear node cache Number of autosaves MISCMNU_CLEARNODECACHE MISCMNU_AUTOSAVECOUNT Vyčistit node cache Počet automatických uložených her Nodespeicher löschen Anzahl von automatischen Speicherständen Viŝi kaŝmemorajn nodojn Kvanto da aŭtokonservojn Limpiar Caché de nodos Número de autoguardados Tyhjennä solmuvälimuisti Automaattisten tallennusten lukumäärä Vider le cache des nodes Total de sauvegardes auto Pulisci la cache dei nodi Numero di salvataggi automatici ノードのキャッシュをクリア オートセーブの最大数 노드 캐시를 삭제 빠른 저장 수 Duidelijke node cache Aantal autosafes Wyczyść pamięć podręczną Liczba autozapisów Limpar cachê de nodes Número de salvamentos automáticos Limpar cache de nodes Número de gravações automáticos Очистить кэш нодов Количество автосохранений Избриши кеширане чворове Број аутоматских чувања
509 Allow skipping of intermission scrollers Save/Load confirmation MISCMNU_INTERSCROLL MISCMNU_SAVELOADCONFIRMATION Povolit přeskakování intermission posuvníků Potvrzení o uložení/načtení Erlaube Überspringen von Intermission-Scrollern Laden/Speichern bestätigen Permesi transsalti interaktajn rulumojn Konservi/Ŝarĝi jesigo Permitir omisión de intermedios Confirmación al guardar/cargar Salli tarinaruutujen vierityksen ohittaminen Tallennuksen/Latauksen vahvistus Sauter compteurs d'intermission Confirmation C/S Consenti di saltare gli scorrimenti delle intermissioni Conferma Salvataggio/Caricamento クリア結果集計のスキップを許可 セーブ/ロード時に確認 인터미션 스크롤러 생략 허용 스크립트로 스크린샷 생성 허용 Opslaan/Laad bevestiging Pozwól na pominięcie wstawek Potwierdzenie zapisu/wczytania Pular telas de intervalo entre fases Confirmação ao salvar/carregar Saltar ecrãs de intervalo entre níveis Confirmação ao gravar/carregar Разрешение пропуска текстовых вставок Подтверждение при сохранении/загрузке Дозволи прескакање прелаза са текстовима Потврђивање током чувања/учитавања
510 Enable making screenshots by scripts MISCMNU_ENABLESCRIPTSCREENSHOTS Povolit skriptům pořizovat snímky obrazovky Erlaube Skripts, Screenshots zu machen Aktivigi faranto ekrankopiojn per skriptoj Habilitar captura de pantalla por scripts Salli komentosarjoin otetut kuvakaappaukset Autoriser les Scripts à prendre des captures Abilita la cattura dello schermo tramite scripts スクリプトからのスクショ作成を有効化 저장/불러오기 확인 Screenshots maken met behulp van scripts Pozwól na robienie zrzutów ekranu przez skrypty Habilitar capturas de tela por scripts Permitir capturas de ecrã por scripts Возможность делать скриншоты через скрипты Омогући прављење скриншотова по скрипти
511 Load *.deh/*.bex lumps MISCMNU_DEHLOAD Načítat *.deh/*.bex soubory Lade *.deh/*.bex Daten Ŝarĝi *.deh/*.bex lumpoj Cargar archivos *.deh/*.bex Lataa *.deh/*.bex-lump-tiedostot Charger fichiers *.deh/*.bex Carica i lump *.deh/*.bex .deh/.bexファイルを読み込む *.deh/*.bex 럼프 파일 불러오기 *.deh/*.bex laden Załaduj dane *.deh/*.bex Carregar lumps *.deh/*.bex Загружать файлы *.deh/*.bex Учитај *.deh/*.bex фајлове
512 Cache nodes MISCMNU_CACHENODES Cachovat nodes Nodes zwischenspeichern Kaŝmemoraj nodoj Caché de nodos Tallenna solmut välimuistiin Mise en cache des nodes Cache dei nodi ノードキャッシュ 캐시 노드 Cache nodes Węzły pamięci podręcznej Cachê de nodes Cache de nodes Кэширование нодов Кеширани чворови
513 Time threshold for node caching MISCMNU_CACHETIME Časový práh pro cachování nodes Zeitschwelle für das Zwischenspeichern von Nodes Templimo pro kaŝmemornodi Umbral de tiempo para caché de nodos Kynnysaika solmujen välimuistitallennukseen Limite cache des nodes Soglia di tempo per il caching dei nodi ノードキャッシュ時間の閾値 노드 캐싱을 위한 시간 임계값 계산 Tijdsdrempel voor het cachen van nodes Próg czasowy buforowania węzłów Limite de tempo para cachê de nodes Limite de tempo para cache de nodes Временной порог для кэширования нодов Временски праг за кеширање чвора
514 Clear node cache MISCMNU_CLEARNODECACHE Vyčistit node cache Nodespeicher löschen Viŝi kaŝmemorajn nodojn Limpiar Caché de nodos Tyhjennä solmuvälimuisti Vider le cache des nodes Pulisci la cache dei nodi ノードのキャッシュをクリア 노드 캐시를 삭제 Duidelijke node cache Wyczyść pamięć podręczną Limpar cachê de nodes Limpar cache de nodes Очистить кэш нодов Избриши кеширане чворове
515 Allow skipping of intermission scrollers MISCMNU_INTERSCROLL Povolit přeskakování intermission posuvníků Erlaube Überspringen von Intermission-Scrollern Permesi transsalti interaktajn rulumojn Permitir omisión de intermedios Salli tarinaruutujen vierityksen ohittaminen Sauter compteurs d'intermission Consenti di saltare gli scorrimenti delle intermissioni クリア結果集計のスキップを許可 인터미션 스크롤러 생략 허용 Pozwól na pominięcie wstawek Pular telas de intervalo entre fases Saltar ecrãs de intervalo entre níveis Разрешение пропуска текстовых вставок Дозволи прескакање прелаза са текстовима
516 Scripts Only OPTVAL_SCRIPTSONLY Pouze skripty Nur Skripte Skriptoj Sole Sólo scripts Vain komentosarjat Scripts seulement Solo script スクリプトのみ 스크립트에만 Alleen scripts Tylko skrypty Scripts apenas Только скрипты Само скрипте
517 Disable keyboard cheats MISCMNU_NOCHEATS Tastatur-Cheats deaktivieren Malaktivigi klavaran trumpon Desactivar trucos por teclado キーボードからのチート無効 Schakel cheats uit Desabilitar trapaças de teclado
518 Quicksave rotation MISCMNU_QUICKSAVEROTATION Rotace rychle uložených her Schnellspeicherrotation Rapidkonservado-rotacio Rotación de Salvado Rápido Pikatallennuskierto Rotation Sauvegardes Rapides Rotazione rapide della quicksave クイックセーブ間隔 빠른 저장 간격 Roteer quicksaves Rotacja szybkich zapisów Rotação de quicksave Чередовать слоты для быстрых сохранений Окретање брзих чувања
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342