mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-12-02 00:43:43 +00:00
Merge remote-tracking branch 'origin/master' into polybackend
This commit is contained in:
commit
7940d5fe01
103 changed files with 3956 additions and 1118 deletions
|
@ -2,8 +2,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
@ -338,3 +338,19 @@ Security fix only. Fixes CERT-FI 20469 as it applies to bzip2.
|
|||
* bzip2recover: Fix use after free issue with outFile (CVE-2016-3189)
|
||||
|
||||
* Make sure nSelectors is not out of range (CVE-2019-12900)
|
||||
|
||||
1.0.8 (13 Jul 19)
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Accept as many selectors as the file format allows.
|
||||
This relaxes the fix for CVE-2019-12900 from 1.0.7
|
||||
so that bzip2 allows decompression of bz2 files that
|
||||
use (too) many selectors again.
|
||||
|
||||
* Fix handling of large (> 4GB) files on Windows.
|
||||
|
||||
* Cleanup of bzdiff and bzgrep scripts so they don't use
|
||||
any bash extensions and handle multiple archives correctly.
|
||||
|
||||
* There is now a bz2-files testsuite at
|
||||
https://sourceware.org/git/bzip2-tests.git
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
--------------------------------------------------------------------------
|
||||
|
||||
This program, "bzip2", the associated library "libbzip2", and all
|
||||
documentation, are copyright (C) 1996-2010 Julian R Seward. All
|
||||
documentation, are copyright (C) 1996-2019 Julian R Seward. All
|
||||
rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
@ -37,6 +37,6 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
|
|
@ -6,8 +6,8 @@ This version is fully compatible with the previous public releases.
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in this file.
|
||||
|
||||
|
@ -165,8 +165,8 @@ WHAT'S NEW IN 1.0.x ?
|
|||
|
||||
See the CHANGES file.
|
||||
|
||||
I hope you find bzip2 useful. Feel free to contact me at
|
||||
jseward@acm.org
|
||||
I hope you find bzip2 useful. Feel free to contact the developers at
|
||||
bzip2-devel@sourceware.org
|
||||
if you have any suggestions or queries. Many people mailed me with
|
||||
comments, suggestions and patches after the releases of bzip-0.15,
|
||||
bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1,
|
||||
|
@ -193,3 +193,4 @@ Cambridge, UK.
|
|||
10 December 2007 (bzip2, version 1.0.5)
|
||||
6 Sept 2010 (bzip2, version 1.0.6)
|
||||
27 June 2019 (bzip2, version 1.0.7)
|
||||
13 July 2019 (bzip2, version 1.0.8)
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
@ -43,12 +43,12 @@ void BZ2_bz__AssertH__fail ( int errcode )
|
|||
fprintf(stderr,
|
||||
"\n\nbzip2/libbzip2: internal error number %d.\n"
|
||||
"This is a bug in bzip2/libbzip2, %s.\n"
|
||||
"Please report it to me at: jseward@acm.org. If this happened\n"
|
||||
"Please report it to: bzip2-devel@sourceware.org. If this happened\n"
|
||||
"when you were using some program which uses libbzip2 as a\n"
|
||||
"component, you should also report this bug to the author(s)\n"
|
||||
"of that program. Please make an effort to report this bug;\n"
|
||||
"timely and accurate bug reports eventually lead to higher\n"
|
||||
"quality software. Thanks. Julian Seward, 10 December 2007.\n\n",
|
||||
"quality software. Thanks.\n\n",
|
||||
errcode,
|
||||
BZ2_bzlibVersion()
|
||||
);
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
@ -36,7 +36,7 @@
|
|||
|
||||
/*-- General stuff. --*/
|
||||
|
||||
#define BZ_VERSION "1.0.7, 27-Jun-2019"
|
||||
#define BZ_VERSION "1.0.8, 13-Jul-2019"
|
||||
|
||||
typedef char Char;
|
||||
typedef unsigned char Bool;
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
@ -454,7 +454,7 @@ void sendMTFValues ( EState* s )
|
|||
|
||||
AssertH( nGroups < 8, 3002 );
|
||||
AssertH( nSelectors < 32768 &&
|
||||
nSelectors <= (2 + (900000 / BZ_G_SIZE)),
|
||||
nSelectors <= BZ_MAX_SELECTORS,
|
||||
3003 );
|
||||
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
@ -287,7 +287,7 @@ Int32 BZ2_decompress ( DState* s )
|
|||
GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
|
||||
if (nGroups < 2 || nGroups > BZ_N_GROUPS) RETURN(BZ_DATA_ERROR);
|
||||
GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
|
||||
if (nSelectors < 1 || nSelectors > BZ_MAX_SELECTORS) RETURN(BZ_DATA_ERROR);
|
||||
if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
|
||||
for (i = 0; i < nSelectors; i++) {
|
||||
j = 0;
|
||||
while (True) {
|
||||
|
@ -296,8 +296,14 @@ Int32 BZ2_decompress ( DState* s )
|
|||
j++;
|
||||
if (j >= nGroups) RETURN(BZ_DATA_ERROR);
|
||||
}
|
||||
s->selectorMtf[i] = j;
|
||||
/* Having more than BZ_MAX_SELECTORS doesn't make much sense
|
||||
since they will never be used, but some implementations might
|
||||
"round up" the number of selectors, so just ignore those. */
|
||||
if (i < BZ_MAX_SELECTORS)
|
||||
s->selectorMtf[i] = j;
|
||||
}
|
||||
if (nSelectors > BZ_MAX_SELECTORS)
|
||||
nSelectors = BZ_MAX_SELECTORS;
|
||||
|
||||
/*--- Undo the MTF values for the selectors. ---*/
|
||||
{
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
This file is part of bzip2/libbzip2, a program and library for
|
||||
lossless, block-sorting data compression.
|
||||
|
||||
bzip2/libbzip2 version 1.0.7 of 27 June 2019
|
||||
Copyright (C) 1996-2010 Julian Seward <jseward@acm.org>
|
||||
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
|
||||
|
||||
Please read the WARNING, DISCLAIMER and PATENTS sections in the
|
||||
README file.
|
||||
|
|
|
@ -905,6 +905,7 @@ set (VULKAN_SOURCES
|
|||
rendering/vulkan/system/vk_buffers.cpp
|
||||
rendering/vulkan/renderer/vk_renderstate.cpp
|
||||
rendering/vulkan/renderer/vk_renderpass.cpp
|
||||
rendering/vulkan/renderer/vk_streambuffer.cpp
|
||||
rendering/vulkan/renderer/vk_postprocess.cpp
|
||||
rendering/vulkan/renderer/vk_renderbuffers.cpp
|
||||
rendering/vulkan/shaders/vk_shader.cpp
|
||||
|
|
|
@ -581,11 +581,6 @@ CUSTOM_CVAR (Int, msgmidcolor2, 4, CVAR_ARCHIVE)
|
|||
setmsgcolor (PRINTLEVELS+1, self);
|
||||
}
|
||||
|
||||
FFont * C_GetDefaultHUDFont()
|
||||
{
|
||||
return generic_ui? NewSmallFont : SmallFont;
|
||||
}
|
||||
|
||||
void C_InitConback()
|
||||
{
|
||||
conback = TexMan.CheckForTexture ("CONBACK", ETextureType::MiscPatch);
|
||||
|
|
|
@ -94,8 +94,9 @@ void G_DoPlayDemo (void);
|
|||
void G_DoCompleted (void);
|
||||
void G_DoVictory (void);
|
||||
void G_DoWorldDone (void);
|
||||
void G_DoSaveGame (bool okForQuicksave, FString filename, const char *description);
|
||||
void G_DoSaveGame (bool okForQuicksave, bool forceQuicksave, FString filename, const char *description);
|
||||
void G_DoAutoSave ();
|
||||
void G_DoQuickSave ();
|
||||
|
||||
void STAT_Serialize(FSerializer &file);
|
||||
bool WriteZip(const char *filename, TArray<FString> &filenames, TArray<FCompressedBuffer> &content);
|
||||
|
@ -1058,7 +1059,7 @@ void G_Ticker ()
|
|||
G_DoLoadGame ();
|
||||
break;
|
||||
case ga_savegame:
|
||||
G_DoSaveGame (true, savegamefile, savedescription);
|
||||
G_DoSaveGame (true, false, savegamefile, savedescription);
|
||||
gameaction = ga_nothing;
|
||||
savegamefile = "";
|
||||
savedescription = "";
|
||||
|
@ -2027,6 +2028,14 @@ CUSTOM_CVAR (Int, autosavecount, 4, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
|||
if (self < 0)
|
||||
self = 0;
|
||||
}
|
||||
CVAR (Int, quicksavenum, -1, CVAR_NOSET|CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||
static int lastquicksave = -1;
|
||||
CVAR (Bool, quicksaverotation, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||
CUSTOM_CVAR (Int, quicksaverotationcount, 4, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||
{
|
||||
if (self < 1)
|
||||
self = 1;
|
||||
}
|
||||
|
||||
void G_DoAutoSave ()
|
||||
{
|
||||
|
@ -2060,7 +2069,35 @@ void G_DoAutoSave ()
|
|||
|
||||
readableTime = myasctime ();
|
||||
description.Format("Autosave %s", readableTime);
|
||||
G_DoSaveGame (false, file, description);
|
||||
G_DoSaveGame (false, false, file, description);
|
||||
}
|
||||
|
||||
void G_DoQuickSave ()
|
||||
{
|
||||
FString description;
|
||||
FString file;
|
||||
// Keeps a rotating set of quicksaves
|
||||
UCVarValue num;
|
||||
const char *readableTime;
|
||||
int count = quicksaverotationcount != 0 ? quicksaverotationcount : 1;
|
||||
|
||||
if (quicksavenum < 0)
|
||||
{
|
||||
lastquicksave = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
lastquicksave = (quicksavenum + 1) % count;
|
||||
}
|
||||
|
||||
num.Int = lastquicksave;
|
||||
quicksavenum.ForceSet (num, CVAR_Int);
|
||||
|
||||
file = G_BuildSaveName ("quick", lastquicksave);
|
||||
|
||||
readableTime = myasctime ();
|
||||
description.Format("Quicksave %s", readableTime);
|
||||
G_DoSaveGame (true, true, file, description);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2165,7 +2202,7 @@ static void PutSavePic (FileWriter *file, int width, int height)
|
|||
}
|
||||
}
|
||||
|
||||
void G_DoSaveGame (bool okForQuicksave, FString filename, const char *description)
|
||||
void G_DoSaveGame (bool okForQuicksave, bool forceQuicksave, FString filename, const char *description)
|
||||
{
|
||||
TArray<FCompressedBuffer> savegame_content;
|
||||
TArray<FString> savegame_filenames;
|
||||
|
@ -2281,7 +2318,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
|||
|
||||
WriteZip(filename, savegame_filenames, savegame_content);
|
||||
|
||||
savegameManager.NotifyNewSave (filename, description, okForQuicksave);
|
||||
savegameManager.NotifyNewSave (filename, description, okForQuicksave, forceQuicksave);
|
||||
|
||||
// delete the JSON buffers we created just above. Everything else will
|
||||
// either still be needed or taken care of automatically.
|
||||
|
|
|
@ -82,6 +82,8 @@ void G_DoLoadGame (void);
|
|||
|
||||
// Called by M_Responder.
|
||||
void G_SaveGame (const char *filename, const char *description);
|
||||
// Called by messagebox
|
||||
void G_DoQuickSave ();
|
||||
|
||||
// Only called by startup code.
|
||||
void G_RecordDemo (const char* name);
|
||||
|
|
|
@ -86,7 +86,7 @@ EXTERN_CVAR (Int, con_scaletext)
|
|||
EXTERN_CVAR(Bool, vid_fps)
|
||||
EXTERN_CVAR(Bool, inter_subtitles)
|
||||
CVAR(Int, hud_scale, 0, CVAR_ARCHIVE);
|
||||
|
||||
CVAR(Bool, log_vgafont, false, CVAR_ARCHIVE)
|
||||
|
||||
DBaseStatusBar *StatusBar;
|
||||
|
||||
|
@ -1231,10 +1231,10 @@ void DBaseStatusBar::DrawLog ()
|
|||
if (text.IsNotEmpty())
|
||||
{
|
||||
// This uses the same scaling as regular HUD messages
|
||||
auto scale = active_con_scaletext(generic_ui);
|
||||
auto scale = active_con_scaletext(generic_ui || log_vgafont);
|
||||
hudwidth = SCREENWIDTH / scale;
|
||||
hudheight = SCREENHEIGHT / scale;
|
||||
FFont *font = C_GetDefaultHUDFont();
|
||||
FFont *font = (generic_ui || log_vgafont)? NewSmallFont : SmallFont;
|
||||
|
||||
int linelen = hudwidth<640? Scale(hudwidth,9,10)-40 : 560;
|
||||
auto lines = V_BreakLines (font, linelen, text[0] == '$'? GStrings(text.GetChars()+1) : text.GetChars());
|
||||
|
|
|
@ -1107,6 +1107,53 @@ int FFont::StringWidth(const uint8_t *string) const
|
|||
return MAX(maxw, w);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Get the largest ascender in the first line of this text.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
int FFont::GetMaxAscender(const uint8_t* string) const
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
while (*string)
|
||||
{
|
||||
auto chr = GetCharFromString(string);
|
||||
if (chr == TEXTCOLOR_ESCAPE)
|
||||
{
|
||||
// We do not need to check for UTF-8 in here.
|
||||
if (*string == '[')
|
||||
{
|
||||
while (*string != '\0' && *string != ']')
|
||||
{
|
||||
++string;
|
||||
}
|
||||
}
|
||||
if (*string != '\0')
|
||||
{
|
||||
++string;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
else if (chr == '\n')
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
auto ctex = GetChar(chr, CR_UNTRANSLATED, nullptr);
|
||||
if (ctex)
|
||||
{
|
||||
auto offs = int(ctex->GetScaledTopOffset(0));
|
||||
if (offs > retval) retval = offs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// FFont :: LoadTranslations
|
||||
|
|
|
@ -102,7 +102,10 @@ FSpecialFont::FSpecialFont (const char *name, int first, int count, FTexture **l
|
|||
|
||||
if (charlumps[i] != nullptr)
|
||||
{
|
||||
charlumps[i]->SetUseType(ETextureType::FontChar);
|
||||
// If texture is used as a sprite, do not set use type
|
||||
// Changing it would break actors that use this sprite
|
||||
if (charlumps[i]->GetUseType() != ETextureType::Sprite)
|
||||
charlumps[i]->SetUseType(ETextureType::FontChar);
|
||||
|
||||
Chars[i].OriginalPic = charlumps[i];
|
||||
if (!noTranslate)
|
||||
|
|
|
@ -103,6 +103,9 @@ public:
|
|||
int GetSpaceWidth () const { return SpaceWidth; }
|
||||
int GetHeight () const { return FontHeight; }
|
||||
int GetDefaultKerning () const { return GlobalKerning; }
|
||||
int GetMaxAscender(const uint8_t* text) const;
|
||||
int GetMaxAscender(const char* text) const { return GetMaxAscender((uint8_t*)text); }
|
||||
int GetMaxAscender(const FString &text) const { return GetMaxAscender((uint8_t*)text.GetChars()); }
|
||||
virtual void LoadTranslations();
|
||||
FName GetName() const { return FontName; }
|
||||
|
||||
|
@ -188,7 +191,5 @@ EColorRange V_ParseFontColor (const uint8_t *&color_value, int normalcolor, int
|
|||
FFont *V_GetFont(const char *fontname, const char *fontlumpname = nullptr);
|
||||
void V_InitFontColors();
|
||||
|
||||
FFont * C_GetDefaultHUDFont();
|
||||
|
||||
|
||||
#endif //__V_FONT_H__
|
||||
|
|
|
@ -125,7 +125,9 @@ TArray<FBrokenLines> V_BreakLines (FFont *font, int maxwidth, const uint8_t *str
|
|||
if ((w > 0 && w + nw > maxwidth) || c == '\n')
|
||||
{ // Time to break the line
|
||||
if (!space)
|
||||
space = string - 1;
|
||||
{
|
||||
for (space = string - 1; (*space & 0xc0) == 0x80 && space > start; space--);
|
||||
}
|
||||
|
||||
auto index = Lines.Reserve(1);
|
||||
breakit (&Lines[index], font, start, space, linecolor);
|
||||
|
|
|
@ -84,7 +84,7 @@ void DrawFullscreenSubtitle(const char *text)
|
|||
auto scale = active_con_scaletext(generic_ui);
|
||||
int hudwidth = SCREENWIDTH / scale;
|
||||
int hudheight = SCREENHEIGHT / scale;
|
||||
FFont *font = C_GetDefaultHUDFont();
|
||||
FFont *font = generic_ui? NewSmallFont : SmallFont;
|
||||
|
||||
int linelen = hudwidth < 640 ? Scale(hudwidth, 9, 10) - 40 : 560;
|
||||
auto lines = V_BreakLines(font, linelen, text);
|
||||
|
|
|
@ -318,7 +318,7 @@ DEFINE_ACTION_FUNCTION(FSavegameManager, ReadSaveStrings)
|
|||
//
|
||||
//=============================================================================
|
||||
|
||||
void FSavegameManager::NotifyNewSave(const FString &file, const FString &title, bool okForQuicksave)
|
||||
void FSavegameManager::NotifyNewSave(const FString &file, const FString &title, bool okForQuicksave, bool forceQuicksave)
|
||||
{
|
||||
FSaveGameNode *node;
|
||||
|
||||
|
@ -342,7 +342,7 @@ void FSavegameManager::NotifyNewSave(const FString &file, const FString &title,
|
|||
node->bMissingWads = false;
|
||||
if (okForQuicksave)
|
||||
{
|
||||
if (quickSaveSlot == nullptr) quickSaveSlot = node;
|
||||
if (quickSaveSlot == nullptr || forceQuicksave) quickSaveSlot = node;
|
||||
LastAccessed = LastSaved = i;
|
||||
}
|
||||
return;
|
||||
|
@ -358,7 +358,7 @@ void FSavegameManager::NotifyNewSave(const FString &file, const FString &title,
|
|||
|
||||
if (okForQuicksave)
|
||||
{
|
||||
if (quickSaveSlot == nullptr) quickSaveSlot = node;
|
||||
if (quickSaveSlot == nullptr || forceQuicksave) quickSaveSlot = node;
|
||||
LastAccessed = LastSaved = index;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,7 +84,7 @@ public:
|
|||
private:
|
||||
int InsertSaveNode(FSaveGameNode *node);
|
||||
public:
|
||||
void NotifyNewSave(const FString &file, const FString &title, bool okForQuicksave);
|
||||
void NotifyNewSave(const FString &file, const FString &title, bool okForQuicksave, bool forceQuicksave);
|
||||
void ClearSaveGames();
|
||||
|
||||
void ReadSaveStrings();
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "vm.h"
|
||||
|
||||
EXTERN_CVAR (Bool, saveloadconfirmation) // [mxd]
|
||||
EXTERN_CVAR (Bool, quicksaverotation)
|
||||
|
||||
typedef void(*hfunc)();
|
||||
DEFINE_ACTION_FUNCTION(DMessageBoxMenu, CallHandler)
|
||||
|
@ -174,6 +175,13 @@ CCMD (quicksave)
|
|||
|
||||
if (gamestate != GS_LEVEL)
|
||||
return;
|
||||
|
||||
// If the quick save rotation is enabled, it handles the save slot.
|
||||
if (quicksaverotation)
|
||||
{
|
||||
G_DoQuickSave();
|
||||
return;
|
||||
}
|
||||
|
||||
if (savegameManager.quickSaveSlot == NULL)
|
||||
{
|
||||
|
|
|
@ -70,6 +70,7 @@ static bool DrawConversationMenu ();
|
|||
static void PickConversationReply (int replyindex);
|
||||
static void TerminalResponse (const char *str);
|
||||
|
||||
CVAR(Bool, dlg_vgafont, false, CVAR_ARCHIVE)
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
|
|
|
@ -289,7 +289,7 @@ public:
|
|||
void SetLogNumber (int num);
|
||||
void SetLogText (const char *text);
|
||||
void SendPitchLimits() const;
|
||||
void SetSubtitle(int num);
|
||||
void SetSubtitle(int num, FSoundID soundid);
|
||||
|
||||
AActor *mo = nullptr;
|
||||
uint8_t playerstate = 0;
|
||||
|
|
|
@ -3196,7 +3196,7 @@ FUNC(LS_SendToCommunicator)
|
|||
if (it->CheckLocalView())
|
||||
{
|
||||
S_StopSound (CHAN_VOICE);
|
||||
it->player->SetSubtitle(arg0);
|
||||
it->player->SetSubtitle(arg0, name);
|
||||
S_Sound (CHAN_VOICE, name, 1, ATTN_NORM);
|
||||
|
||||
// Get the message from the LANGUAGE lump.
|
||||
|
|
|
@ -437,7 +437,7 @@ DEFINE_ACTION_FUNCTION(_PlayerInfo, SetLogText)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void player_t::SetSubtitle(int num)
|
||||
void player_t::SetSubtitle(int num, FSoundID soundid)
|
||||
{
|
||||
char lumpname[36];
|
||||
|
||||
|
@ -449,7 +449,8 @@ void player_t::SetSubtitle(int num)
|
|||
if (text != nullptr)
|
||||
{
|
||||
SubtitleText = lumpname;
|
||||
SubtitleCounter = 7 * TICRATE;
|
||||
int sl = soundid == 0 ? 7000 : std::max<int>(7000, S_GetMSLength(soundid));
|
||||
SubtitleCounter = sl * TICRATE / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -457,7 +458,8 @@ DEFINE_ACTION_FUNCTION(_PlayerInfo, SetSubtitleNumber)
|
|||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_t);
|
||||
PARAM_INT(log);
|
||||
self->SetSubtitle(log);
|
||||
PARAM_SOUND(soundid);
|
||||
self->SetSubtitle(log, soundid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
#ifdef HAVE_VULKAN
|
||||
#define VK_USE_PLATFORM_MACOS_MVK
|
||||
#define VK_USE_PLATFORM_METAL_EXT
|
||||
#include "volk/volk.h"
|
||||
#endif
|
||||
|
||||
|
@ -867,12 +868,37 @@ void I_GetVulkanDrawableSize(int *width, int *height)
|
|||
|
||||
bool I_GetVulkanPlatformExtensions(unsigned int *count, const char **names)
|
||||
{
|
||||
static const char* extensions[] =
|
||||
static std::vector<const char*> extensions;
|
||||
|
||||
if (extensions.empty())
|
||||
{
|
||||
VK_KHR_SURFACE_EXTENSION_NAME,
|
||||
VK_MVK_MACOS_SURFACE_EXTENSION_NAME
|
||||
};
|
||||
static const unsigned int extensionCount = static_cast<unsigned int>(sizeof extensions / sizeof extensions[0]);
|
||||
uint32_t extensionPropertyCount = 0;
|
||||
vkEnumerateInstanceExtensionProperties(nullptr, &extensionPropertyCount, nullptr);
|
||||
|
||||
std::vector<VkExtensionProperties> extensionProperties(extensionPropertyCount);
|
||||
vkEnumerateInstanceExtensionProperties(nullptr, &extensionPropertyCount, extensionProperties.data());
|
||||
|
||||
static const char* const EXTENSION_NAMES[] =
|
||||
{
|
||||
VK_KHR_SURFACE_EXTENSION_NAME, // KHR_surface, required
|
||||
VK_EXT_METAL_SURFACE_EXTENSION_NAME, // EXT_metal_surface, optional, preferred
|
||||
VK_MVK_MACOS_SURFACE_EXTENSION_NAME, // MVK_macos_surface, optional, deprecated
|
||||
};
|
||||
|
||||
for (const VkExtensionProperties ¤tProperties : extensionProperties)
|
||||
{
|
||||
for (const char *const extensionName : EXTENSION_NAMES)
|
||||
{
|
||||
if (strcmp(currentProperties.extensionName, extensionName) == 0)
|
||||
{
|
||||
extensions.push_back(extensionName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static const unsigned int extensionCount = static_cast<unsigned int>(extensions.size());
|
||||
assert(extensionCount >= 2); // KHR_surface + at least one of the platform surface extentions
|
||||
|
||||
if (count == nullptr && names == nullptr)
|
||||
{
|
||||
|
@ -899,11 +925,25 @@ bool I_GetVulkanPlatformExtensions(unsigned int *count, const char **names)
|
|||
|
||||
bool I_CreateVulkanSurface(VkInstance instance, VkSurfaceKHR *surface)
|
||||
{
|
||||
if (vkCreateMetalSurfaceEXT)
|
||||
{
|
||||
// Preferred surface creation path
|
||||
VkMetalSurfaceCreateInfoEXT surfaceCreateInfo;
|
||||
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
|
||||
surfaceCreateInfo.pNext = nullptr;
|
||||
surfaceCreateInfo.flags = 0;
|
||||
surfaceCreateInfo.pLayer = static_cast<CAMetalLayer*>(CocoaVideo::GetWindow().contentView.layer);
|
||||
|
||||
const VkResult result = vkCreateMetalSurfaceEXT(instance, &surfaceCreateInfo, nullptr, surface);
|
||||
return result == VK_SUCCESS;
|
||||
}
|
||||
|
||||
// Deprecated surface creation path
|
||||
VkMacOSSurfaceCreateInfoMVK windowCreateInfo;
|
||||
windowCreateInfo.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
|
||||
windowCreateInfo.pNext = nullptr;
|
||||
windowCreateInfo.flags = 0;
|
||||
windowCreateInfo.pView = [[CocoaVideo::GetWindow() contentView] layer];
|
||||
windowCreateInfo.pView = [CocoaVideo::GetWindow() contentView];
|
||||
|
||||
const VkResult result = vkCreateMacOSSurfaceMVK(instance, &windowCreateInfo, nullptr, surface);
|
||||
return result == VK_SUCCESS;
|
||||
|
|
|
@ -93,6 +93,11 @@ int VkRenderPassManager::GetVertexFormat(int numBindingPoints, int numAttributes
|
|||
return (int)VertexFormats.size() - 1;
|
||||
}
|
||||
|
||||
VkVertexFormat *VkRenderPassManager::GetVertexFormat(int index)
|
||||
{
|
||||
return &VertexFormats[index];
|
||||
}
|
||||
|
||||
void VkRenderPassManager::CreateDynamicSetLayout()
|
||||
{
|
||||
DescriptorSetLayoutBuilder builder;
|
||||
|
@ -173,8 +178,8 @@ void VkRenderPassManager::UpdateDynamicSet()
|
|||
WriteDescriptors update;
|
||||
update.addBuffer(DynamicSet.get(), 0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, fb->ViewpointUBO->mBuffer.get(), 0, sizeof(HWViewpointUniforms));
|
||||
update.addBuffer(DynamicSet.get(), 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->LightBufferSSO->mBuffer.get());
|
||||
update.addBuffer(DynamicSet.get(), 2, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, fb->MatricesUBO->mBuffer.get(), 0, sizeof(MatricesUBO));
|
||||
update.addBuffer(DynamicSet.get(), 3, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, fb->StreamUBO->mBuffer.get(), 0, sizeof(StreamUBO));
|
||||
update.addBuffer(DynamicSet.get(), 2, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, fb->MatrixBuffer->UniformBuffer->mBuffer.get(), 0, sizeof(MatricesUBO));
|
||||
update.addBuffer(DynamicSet.get(), 3, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, fb->StreamBuffer->UniformBuffer->mBuffer.get(), 0, sizeof(StreamUBO));
|
||||
update.addCombinedImageSampler(DynamicSet.get(), 4, fb->GetBuffers()->Shadowmap.View.get(), fb->GetBuffers()->ShadowmapSampler.get(), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
update.updateSets(fb->device);
|
||||
}
|
||||
|
@ -289,7 +294,7 @@ std::unique_ptr<VulkanPipeline> VkRenderPassSetup::CreatePipeline(const VkPipeli
|
|||
builder.addVertexShader(program->vert.get());
|
||||
builder.addFragmentShader(program->frag.get());
|
||||
|
||||
const VkVertexFormat &vfmt = fb->GetRenderPassManager()->VertexFormats[key.VertexFormat];
|
||||
const VkVertexFormat &vfmt = *fb->GetRenderPassManager()->GetVertexFormat(key.VertexFormat);
|
||||
|
||||
for (int i = 0; i < vfmt.NumBindingPoints; i++)
|
||||
builder.addVertexBufferBinding(i, vfmt.Stride);
|
||||
|
|
|
@ -88,6 +88,8 @@ public:
|
|||
VkRenderPassSetup *GetRenderPass(const VkRenderPassKey &key);
|
||||
int GetVertexFormat(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute *attrs);
|
||||
|
||||
VkVertexFormat *GetVertexFormat(int index);
|
||||
|
||||
std::unique_ptr<VulkanDescriptorSet> AllocateTextureDescriptorSet(int numLayers);
|
||||
VulkanPipelineLayout* GetPipelineLayout(int numLayers);
|
||||
|
||||
|
@ -96,8 +98,6 @@ public:
|
|||
|
||||
std::unique_ptr<VulkanDescriptorSet> DynamicSet;
|
||||
|
||||
std::vector<VkVertexFormat> VertexFormats;
|
||||
|
||||
private:
|
||||
void CreateDynamicSetLayout();
|
||||
void CreateDescriptorPool();
|
||||
|
@ -111,4 +111,5 @@ private:
|
|||
std::unique_ptr<VulkanDescriptorPool> DynamicDescriptorPool;
|
||||
std::vector<std::unique_ptr<VulkanDescriptorSetLayout>> TextureSetLayouts;
|
||||
std::vector<std::unique_ptr<VulkanPipelineLayout>> PipelineLayouts;
|
||||
std::vector<VkVertexFormat> VertexFormats;
|
||||
};
|
||||
|
|
|
@ -21,7 +21,6 @@ CVAR(Int, vk_submit_size, 1000, 0);
|
|||
|
||||
VkRenderState::VkRenderState()
|
||||
{
|
||||
mIdentityMatrix.loadIdentity();
|
||||
Reset();
|
||||
}
|
||||
|
||||
|
@ -315,24 +314,18 @@ void VkRenderState::ApplyStreamData()
|
|||
auto fb = GetVulkanFrameBuffer();
|
||||
auto passManager = fb->GetRenderPassManager();
|
||||
|
||||
mStreamData.useVertexData = passManager->VertexFormats[static_cast<VKVertexBuffer*>(mVertexBuffer)->VertexFormat].UseVertexData;
|
||||
mStreamData.useVertexData = passManager->GetVertexFormat(static_cast<VKVertexBuffer*>(mVertexBuffer)->VertexFormat)->UseVertexData;
|
||||
|
||||
if (mMaterial.mMaterial && mMaterial.mMaterial->tex)
|
||||
mStreamData.timer = static_cast<float>((double)(screen->FrameTime - firstFrame) * (double)mMaterial.mMaterial->tex->shaderspeed / 1000.);
|
||||
else
|
||||
mStreamData.timer = 0.0f;
|
||||
|
||||
mDataIndex++;
|
||||
if (mDataIndex == MAX_STREAM_DATA)
|
||||
if (!mStreamBufferWriter.Write(mStreamData))
|
||||
{
|
||||
mDataIndex = 0;
|
||||
mStreamDataOffset += sizeof(StreamUBO);
|
||||
|
||||
if (mStreamDataOffset + sizeof(StreamUBO) >= fb->StreamUBO->Size())
|
||||
WaitForStreamBuffers();
|
||||
WaitForStreamBuffers();
|
||||
mStreamBufferWriter.Write(mStreamData);
|
||||
}
|
||||
uint8_t *ptr = (uint8_t*)fb->StreamUBO->Memory();
|
||||
memcpy(ptr + mStreamDataOffset + sizeof(StreamData) * mDataIndex, &mStreamData, sizeof(StreamData));
|
||||
}
|
||||
|
||||
void VkRenderState::ApplyPushConstants()
|
||||
|
@ -371,63 +364,19 @@ void VkRenderState::ApplyPushConstants()
|
|||
mPushConstants.uSpecularMaterial = { mMaterial.mMaterial->tex->Glossiness, mMaterial.mMaterial->tex->SpecularLevel };
|
||||
|
||||
mPushConstants.uLightIndex = mLightIndex;
|
||||
mPushConstants.uDataIndex = mDataIndex;
|
||||
mPushConstants.uDataIndex = mStreamBufferWriter.DataIndex();
|
||||
|
||||
auto fb = GetVulkanFrameBuffer();
|
||||
auto passManager = fb->GetRenderPassManager();
|
||||
mCommandBuffer->pushConstants(passManager->GetPipelineLayout(mPipelineKey.NumTextureLayers), VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, (uint32_t)sizeof(PushConstants), &mPushConstants);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static void BufferedSet(bool &modified, T &dst, const T &src)
|
||||
{
|
||||
if (dst == src)
|
||||
return;
|
||||
dst = src;
|
||||
modified = true;
|
||||
}
|
||||
|
||||
static void BufferedSet(bool &modified, VSMatrix &dst, const VSMatrix &src)
|
||||
{
|
||||
if (memcmp(dst.get(), src.get(), sizeof(FLOATTYPE) * 16) == 0)
|
||||
return;
|
||||
dst = src;
|
||||
modified = true;
|
||||
}
|
||||
|
||||
void VkRenderState::ApplyMatrices()
|
||||
{
|
||||
bool modified = (mMatricesOffset == 0); // always modified first call
|
||||
if (mTextureMatrixEnabled)
|
||||
if (!mMatrixBufferWriter.Write(mModelMatrix, mModelMatrixEnabled, mTextureMatrix, mTextureMatrixEnabled))
|
||||
{
|
||||
BufferedSet(modified, mMatrices.TextureMatrix, mTextureMatrix);
|
||||
}
|
||||
else
|
||||
{
|
||||
BufferedSet(modified, mMatrices.TextureMatrix, mIdentityMatrix);
|
||||
}
|
||||
|
||||
if (mModelMatrixEnabled)
|
||||
{
|
||||
BufferedSet(modified, mMatrices.ModelMatrix, mModelMatrix);
|
||||
if (modified)
|
||||
mMatrices.NormalModelMatrix.computeNormalMatrix(mModelMatrix);
|
||||
}
|
||||
else
|
||||
{
|
||||
BufferedSet(modified, mMatrices.ModelMatrix, mIdentityMatrix);
|
||||
BufferedSet(modified, mMatrices.NormalModelMatrix, mIdentityMatrix);
|
||||
}
|
||||
|
||||
if (modified)
|
||||
{
|
||||
auto fb = GetVulkanFrameBuffer();
|
||||
|
||||
if (mMatricesOffset + (fb->UniformBufferAlignedSize<MatricesUBO>() << 1) >= fb->MatricesUBO->Size())
|
||||
WaitForStreamBuffers();
|
||||
|
||||
mMatricesOffset += fb->UniformBufferAlignedSize<MatricesUBO>();
|
||||
memcpy(static_cast<uint8_t*>(fb->MatricesUBO->Memory()) + mMatricesOffset, &mMatrices, sizeof(MatricesUBO));
|
||||
WaitForStreamBuffers();
|
||||
mMatrixBufferWriter.Write(mModelMatrix, mModelMatrixEnabled, mTextureMatrix, mTextureMatrixEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -436,9 +385,9 @@ void VkRenderState::ApplyVertexBuffers()
|
|||
if ((mVertexBuffer != mLastVertexBuffer || mVertexOffsets[0] != mLastVertexOffsets[0] || mVertexOffsets[1] != mLastVertexOffsets[1]) && mVertexBuffer)
|
||||
{
|
||||
auto vkbuf = static_cast<VKVertexBuffer*>(mVertexBuffer);
|
||||
const auto &format = GetVulkanFrameBuffer()->GetRenderPassManager()->VertexFormats[vkbuf->VertexFormat];
|
||||
const VkVertexFormat *format = GetVulkanFrameBuffer()->GetRenderPassManager()->GetVertexFormat(vkbuf->VertexFormat);
|
||||
VkBuffer vertexBuffers[2] = { vkbuf->mBuffer->buffer, vkbuf->mBuffer->buffer };
|
||||
VkDeviceSize offsets[] = { mVertexOffsets[0] * format.Stride, mVertexOffsets[1] * format.Stride };
|
||||
VkDeviceSize offsets[] = { mVertexOffsets[0] * format->Stride, mVertexOffsets[1] * format->Stride };
|
||||
mCommandBuffer->bindVertexBuffers(0, 2, vertexBuffers, offsets);
|
||||
mLastVertexBuffer = mVertexBuffer;
|
||||
mLastVertexOffsets[0] = mVertexOffsets[0];
|
||||
|
@ -470,17 +419,19 @@ void VkRenderState::ApplyMaterial()
|
|||
|
||||
void VkRenderState::ApplyDynamicSet()
|
||||
{
|
||||
if (mViewpointOffset != mLastViewpointOffset || mMatricesOffset != mLastMatricesOffset || mStreamDataOffset != mLastStreamDataOffset)
|
||||
auto fb = GetVulkanFrameBuffer();
|
||||
uint32_t matrixOffset = mMatrixBufferWriter.Offset();
|
||||
uint32_t streamDataOffset = mStreamBufferWriter.StreamDataOffset();
|
||||
if (mViewpointOffset != mLastViewpointOffset || matrixOffset != mLastMatricesOffset || streamDataOffset != mLastStreamDataOffset)
|
||||
{
|
||||
auto fb = GetVulkanFrameBuffer();
|
||||
auto passManager = fb->GetRenderPassManager();
|
||||
|
||||
uint32_t offsets[3] = { mViewpointOffset, mMatricesOffset, mStreamDataOffset };
|
||||
uint32_t offsets[3] = { mViewpointOffset, matrixOffset, streamDataOffset };
|
||||
mCommandBuffer->bindDescriptorSet(VK_PIPELINE_BIND_POINT_GRAPHICS, passManager->GetPipelineLayout(mPipelineKey.NumTextureLayers), 0, passManager->DynamicSet.get(), 3, offsets);
|
||||
|
||||
mLastViewpointOffset = mViewpointOffset;
|
||||
mLastMatricesOffset = mMatricesOffset;
|
||||
mLastStreamDataOffset = mStreamDataOffset;
|
||||
mLastMatricesOffset = matrixOffset;
|
||||
mLastStreamDataOffset = streamDataOffset;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -489,9 +440,8 @@ void VkRenderState::WaitForStreamBuffers()
|
|||
EndRenderPass();
|
||||
GetVulkanFrameBuffer()->WaitForCommands(false);
|
||||
mApplyCount = 0;
|
||||
mStreamDataOffset = 0;
|
||||
mDataIndex = 0;
|
||||
mMatricesOffset = 0;
|
||||
mStreamBufferWriter.Reset();
|
||||
mMatrixBufferWriter.Reset();
|
||||
}
|
||||
|
||||
void VkRenderState::Bind(int bindingpoint, uint32_t offset)
|
||||
|
@ -527,9 +477,8 @@ void VkRenderState::EndRenderPass()
|
|||
|
||||
void VkRenderState::EndFrame()
|
||||
{
|
||||
mMatricesOffset = 0;
|
||||
mStreamDataOffset = 0;
|
||||
mDataIndex = -1;
|
||||
mMatrixBufferWriter.Reset();
|
||||
mStreamBufferWriter.Reset();
|
||||
}
|
||||
|
||||
void VkRenderState::EnableDrawBuffers(int count)
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "vulkan/system/vk_buffers.h"
|
||||
#include "vulkan/shaders/vk_shader.h"
|
||||
#include "vulkan/renderer/vk_renderpass.h"
|
||||
#include "vulkan/renderer/vk_streambuffer.h"
|
||||
|
||||
#include "name.h"
|
||||
|
||||
|
@ -63,8 +64,8 @@ protected:
|
|||
void ApplyVertexBuffers();
|
||||
void ApplyMaterial();
|
||||
|
||||
void WaitForStreamBuffers();
|
||||
void BeginRenderPass(VulkanCommandBuffer *cmdbuffer);
|
||||
void WaitForStreamBuffers();
|
||||
|
||||
bool mDepthClamp = true;
|
||||
VulkanCommandBuffer *mCommandBuffer = nullptr;
|
||||
|
@ -90,18 +91,15 @@ protected:
|
|||
int mColorMask = 15;
|
||||
int mCullMode = 0;
|
||||
|
||||
MatricesUBO mMatrices = {};
|
||||
PushConstants mPushConstants = {};
|
||||
|
||||
uint32_t mLastViewpointOffset = 0xffffffff;
|
||||
uint32_t mLastMatricesOffset = 0xffffffff;
|
||||
uint32_t mLastStreamDataOffset = 0xffffffff;
|
||||
uint32_t mViewpointOffset = 0;
|
||||
uint32_t mMatricesOffset = 0;
|
||||
uint32_t mDataIndex = -1;
|
||||
uint32_t mStreamDataOffset = 0;
|
||||
|
||||
VSMatrix mIdentityMatrix;
|
||||
VkStreamBufferWriter mStreamBufferWriter;
|
||||
VkMatrixBufferWriter mMatrixBufferWriter;
|
||||
|
||||
int mLastVertexOffsets[2] = { 0, 0 };
|
||||
IVertexBuffer *mLastVertexBuffer = nullptr;
|
||||
|
|
127
src/rendering/vulkan/renderer/vk_streambuffer.cpp
Normal file
127
src/rendering/vulkan/renderer/vk_streambuffer.cpp
Normal file
|
@ -0,0 +1,127 @@
|
|||
|
||||
#include "vk_renderstate.h"
|
||||
#include "vulkan/system/vk_framebuffer.h"
|
||||
#include "vulkan/system/vk_builders.h"
|
||||
#include "vulkan/renderer/vk_streambuffer.h"
|
||||
|
||||
VkStreamBuffer::VkStreamBuffer(size_t structSize, size_t count)
|
||||
{
|
||||
mBlockSize = static_cast<uint32_t>((structSize + screen->uniformblockalignment - 1) / screen->uniformblockalignment * screen->uniformblockalignment);
|
||||
|
||||
UniformBuffer = (VKDataBuffer*)GetVulkanFrameBuffer()->CreateDataBuffer(-1, false, false);
|
||||
UniformBuffer->SetData(mBlockSize * count, nullptr, false);
|
||||
}
|
||||
|
||||
VkStreamBuffer::~VkStreamBuffer()
|
||||
{
|
||||
delete UniformBuffer;
|
||||
}
|
||||
|
||||
uint32_t VkStreamBuffer::NextStreamDataBlock()
|
||||
{
|
||||
mStreamDataOffset += mBlockSize;
|
||||
if (mStreamDataOffset + (size_t)mBlockSize >= UniformBuffer->Size())
|
||||
{
|
||||
mStreamDataOffset = 0;
|
||||
return 0xffffffff;
|
||||
}
|
||||
return mStreamDataOffset;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
VkStreamBufferWriter::VkStreamBufferWriter()
|
||||
{
|
||||
mBuffer = GetVulkanFrameBuffer()->StreamBuffer;
|
||||
}
|
||||
|
||||
bool VkStreamBufferWriter::Write(const StreamData& data)
|
||||
{
|
||||
mDataIndex++;
|
||||
if (mDataIndex == MAX_STREAM_DATA)
|
||||
{
|
||||
mDataIndex = 0;
|
||||
mStreamDataOffset = mBuffer->NextStreamDataBlock();
|
||||
if (mStreamDataOffset == 0xffffffff)
|
||||
return false;
|
||||
}
|
||||
uint8_t* ptr = (uint8_t*)mBuffer->UniformBuffer->Memory();
|
||||
memcpy(ptr + mStreamDataOffset + sizeof(StreamData) * mDataIndex, &data, sizeof(StreamData));
|
||||
return true;
|
||||
}
|
||||
|
||||
void VkStreamBufferWriter::Reset()
|
||||
{
|
||||
mDataIndex = MAX_STREAM_DATA - 1;
|
||||
mStreamDataOffset = 0;
|
||||
mBuffer->Reset();
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
VkMatrixBufferWriter::VkMatrixBufferWriter()
|
||||
{
|
||||
mBuffer = GetVulkanFrameBuffer()->MatrixBuffer;
|
||||
mIdentityMatrix.loadIdentity();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static void BufferedSet(bool& modified, T& dst, const T& src)
|
||||
{
|
||||
if (dst == src)
|
||||
return;
|
||||
dst = src;
|
||||
modified = true;
|
||||
}
|
||||
|
||||
static void BufferedSet(bool& modified, VSMatrix& dst, const VSMatrix& src)
|
||||
{
|
||||
if (memcmp(dst.get(), src.get(), sizeof(FLOATTYPE) * 16) == 0)
|
||||
return;
|
||||
dst = src;
|
||||
modified = true;
|
||||
}
|
||||
|
||||
bool VkMatrixBufferWriter::Write(const VSMatrix& modelMatrix, bool modelMatrixEnabled, const VSMatrix& textureMatrix, bool textureMatrixEnabled)
|
||||
{
|
||||
bool modified = (mOffset == 0); // always modified first call
|
||||
|
||||
if (modelMatrixEnabled)
|
||||
{
|
||||
BufferedSet(modified, mMatrices.ModelMatrix, modelMatrix);
|
||||
if (modified)
|
||||
mMatrices.NormalModelMatrix.computeNormalMatrix(modelMatrix);
|
||||
}
|
||||
else
|
||||
{
|
||||
BufferedSet(modified, mMatrices.ModelMatrix, mIdentityMatrix);
|
||||
BufferedSet(modified, mMatrices.NormalModelMatrix, mIdentityMatrix);
|
||||
}
|
||||
|
||||
if (textureMatrixEnabled)
|
||||
{
|
||||
BufferedSet(modified, mMatrices.TextureMatrix, textureMatrix);
|
||||
}
|
||||
else
|
||||
{
|
||||
BufferedSet(modified, mMatrices.TextureMatrix, mIdentityMatrix);
|
||||
}
|
||||
|
||||
if (modified)
|
||||
{
|
||||
mOffset = mBuffer->NextStreamDataBlock();
|
||||
if (mOffset == 0xffffffff)
|
||||
return false;
|
||||
|
||||
uint8_t* ptr = (uint8_t*)mBuffer->UniformBuffer->Memory();
|
||||
memcpy(ptr + mOffset, &mMatrices, sizeof(MatricesUBO));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void VkMatrixBufferWriter::Reset()
|
||||
{
|
||||
mOffset = 0;
|
||||
mBuffer->Reset();
|
||||
}
|
58
src/rendering/vulkan/renderer/vk_streambuffer.h
Normal file
58
src/rendering/vulkan/renderer/vk_streambuffer.h
Normal file
|
@ -0,0 +1,58 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "vulkan/system/vk_buffers.h"
|
||||
#include "vulkan/shaders/vk_shader.h"
|
||||
|
||||
class VkStreamBuffer;
|
||||
class VkMatrixBuffer;
|
||||
|
||||
class VkStreamBufferWriter
|
||||
{
|
||||
public:
|
||||
VkStreamBufferWriter();
|
||||
|
||||
bool Write(const StreamData& data);
|
||||
void Reset();
|
||||
|
||||
uint32_t DataIndex() const { return mDataIndex; }
|
||||
uint32_t StreamDataOffset() const { return mStreamDataOffset; }
|
||||
|
||||
private:
|
||||
VkStreamBuffer* mBuffer;
|
||||
uint32_t mDataIndex = MAX_STREAM_DATA - 1;
|
||||
uint32_t mStreamDataOffset = 0;
|
||||
};
|
||||
|
||||
class VkMatrixBufferWriter
|
||||
{
|
||||
public:
|
||||
VkMatrixBufferWriter();
|
||||
|
||||
bool Write(const VSMatrix& modelMatrix, bool modelMatrixEnabled, const VSMatrix& textureMatrix, bool textureMatrixEnabled);
|
||||
void Reset();
|
||||
|
||||
uint32_t Offset() const { return mOffset; }
|
||||
|
||||
private:
|
||||
VkStreamBuffer* mBuffer;
|
||||
MatricesUBO mMatrices = {};
|
||||
VSMatrix mIdentityMatrix;
|
||||
uint32_t mOffset = 0;
|
||||
};
|
||||
|
||||
class VkStreamBuffer
|
||||
{
|
||||
public:
|
||||
VkStreamBuffer(size_t structSize, size_t count);
|
||||
~VkStreamBuffer();
|
||||
|
||||
uint32_t NextStreamDataBlock();
|
||||
void Reset() { mStreamDataOffset = 0; }
|
||||
|
||||
VKDataBuffer* UniformBuffer = nullptr;
|
||||
|
||||
private:
|
||||
uint32_t mBlockSize = 0;
|
||||
uint32_t mStreamDataOffset = 0;
|
||||
};
|
|
@ -50,6 +50,7 @@
|
|||
#include "vk_buffers.h"
|
||||
#include "vulkan/renderer/vk_renderstate.h"
|
||||
#include "vulkan/renderer/vk_renderpass.h"
|
||||
#include "vulkan/renderer/vk_streambuffer.h"
|
||||
#include "vulkan/renderer/vk_postprocess.h"
|
||||
#include "vulkan/renderer/vk_renderbuffers.h"
|
||||
#include "vulkan/shaders/vk_shader.h"
|
||||
|
@ -106,8 +107,8 @@ VulkanFrameBuffer::~VulkanFrameBuffer()
|
|||
VKBuffer::ResetAll();
|
||||
PPResource::ResetAll();
|
||||
|
||||
delete MatricesUBO;
|
||||
delete StreamUBO;
|
||||
delete MatrixBuffer;
|
||||
delete StreamBuffer;
|
||||
delete mVertexData;
|
||||
delete mSkyData;
|
||||
delete mViewpoints;
|
||||
|
@ -158,10 +159,8 @@ void VulkanFrameBuffer::InitializeState()
|
|||
CreateFanToTrisIndexBuffer();
|
||||
|
||||
// To do: move this to HW renderer interface maybe?
|
||||
MatricesUBO = (VKDataBuffer*)CreateDataBuffer(-1, false, false);
|
||||
StreamUBO = (VKDataBuffer*)CreateDataBuffer(-1, false, false);
|
||||
MatricesUBO->SetData(UniformBufferAlignedSize<::MatricesUBO>() * 50000, nullptr, false);
|
||||
StreamUBO->SetData(UniformBufferAlignedSize<::StreamUBO>() * 200, nullptr, false);
|
||||
MatrixBuffer = new VkStreamBuffer(sizeof(MatricesUBO), 50000);
|
||||
StreamBuffer = new VkStreamBuffer(sizeof(StreamUBO), 300);
|
||||
|
||||
mShaderManager.reset(new VkShaderManager(device));
|
||||
mSamplerManager.reset(new VkSamplerManager(device));
|
||||
|
|
|
@ -9,6 +9,7 @@ class VkSamplerManager;
|
|||
class VkShaderManager;
|
||||
class VkRenderPassManager;
|
||||
class VkRenderState;
|
||||
class VkStreamBuffer;
|
||||
class VKDataBuffer;
|
||||
class VkHardwareTexture;
|
||||
class VkRenderBuffers;
|
||||
|
@ -38,13 +39,10 @@ public:
|
|||
|
||||
unsigned int GetLightBufferBlockSize() const;
|
||||
|
||||
template<typename T>
|
||||
int UniformBufferAlignedSize() const { return (sizeof(T) + uniformblockalignment - 1) / uniformblockalignment * uniformblockalignment; }
|
||||
|
||||
VKDataBuffer *ViewpointUBO = nullptr;
|
||||
VKDataBuffer *LightBufferSSO = nullptr;
|
||||
VKDataBuffer *MatricesUBO = nullptr;
|
||||
VKDataBuffer *StreamUBO = nullptr;
|
||||
VkStreamBuffer *MatrixBuffer = nullptr;
|
||||
VkStreamBuffer *StreamBuffer = nullptr;
|
||||
|
||||
VKDataBuffer *LightNodes = nullptr;
|
||||
VKDataBuffer *LightLines = nullptr;
|
||||
|
|
|
@ -44,7 +44,7 @@ uint32_t VulkanSwapChain::AcquireImage(int width, int height, VulkanSemaphore *s
|
|||
{
|
||||
break;
|
||||
}
|
||||
else if (result == VK_SUBOPTIMAL_KHR)
|
||||
else if (result == VK_SUBOPTIMAL_KHR || result == VK_ERROR_SURFACE_LOST_KHR)
|
||||
{
|
||||
// Force the recreate to happen next frame.
|
||||
// The spec is not very clear about what happens to the semaphore or the acquired image if the swapchain is recreated before the image is released with a call to vkQueuePresentKHR.
|
||||
|
@ -69,10 +69,6 @@ uint32_t VulkanSwapChain::AcquireImage(int width, int height, VulkanSemaphore *s
|
|||
{
|
||||
VulkanError("vkAcquireNextImageKHR failed: device lost");
|
||||
}
|
||||
else if (result == VK_ERROR_SURFACE_LOST_KHR)
|
||||
{
|
||||
VulkanError("vkAcquireNextImageKHR failed: surface lost");
|
||||
}
|
||||
else
|
||||
{
|
||||
VulkanError("vkAcquireNextImageKHR failed");
|
||||
|
@ -92,7 +88,7 @@ void VulkanSwapChain::QueuePresent(uint32_t imageIndex, VulkanSemaphore *semapho
|
|||
presentInfo.pImageIndices = &imageIndex;
|
||||
presentInfo.pResults = nullptr;
|
||||
VkResult result = vkQueuePresentKHR(device->presentQueue, &presentInfo);
|
||||
if (result == VK_SUBOPTIMAL_KHR || result == VK_ERROR_OUT_OF_DATE_KHR)
|
||||
if (result == VK_SUBOPTIMAL_KHR || result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_ERROR_SURFACE_LOST_KHR)
|
||||
{
|
||||
lastSwapWidth = 0;
|
||||
lastSwapHeight = 0;
|
||||
|
@ -108,10 +104,6 @@ void VulkanSwapChain::QueuePresent(uint32_t imageIndex, VulkanSemaphore *semapho
|
|||
{
|
||||
VulkanError("vkQueuePresentKHR failed: device lost");
|
||||
}
|
||||
else if (result == VK_ERROR_SURFACE_LOST_KHR)
|
||||
{
|
||||
VulkanError("vkQueuePresentKHR failed: surface lost");
|
||||
}
|
||||
else if (result != VK_SUCCESS)
|
||||
{
|
||||
VulkanError("vkQueuePresentKHR failed");
|
||||
|
|
1
src/rendering/vulkan/thirdparty/volk/volk.c
vendored
1
src/rendering/vulkan/thirdparty/volk/volk.c
vendored
|
@ -4,6 +4,7 @@
|
|||
|
||||
#ifdef __APPLE__
|
||||
#define VK_USE_PLATFORM_MACOS_MVK
|
||||
#define VK_USE_PLATFORM_METAL_EXT
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -88,7 +88,8 @@ typedef enum {
|
|||
VK_ICD_WSI_PLATFORM_ANDROID,
|
||||
VK_ICD_WSI_PLATFORM_MACOS,
|
||||
VK_ICD_WSI_PLATFORM_IOS,
|
||||
VK_ICD_WSI_PLATFORM_DISPLAY
|
||||
VK_ICD_WSI_PLATFORM_DISPLAY,
|
||||
VK_ICD_WSI_PLATFORM_HEADLESS
|
||||
} VkIcdWsiPlatform;
|
||||
|
||||
typedef struct {
|
||||
|
@ -167,4 +168,8 @@ typedef struct {
|
|||
VkExtent2D imageExtent;
|
||||
} VkIcdSurfaceDisplay;
|
||||
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
} VkIcdSurfaceHeadless;
|
||||
|
||||
#endif // VKICD_H
|
||||
|
|
|
@ -35,9 +35,6 @@
|
|||
#define VK_LAYER_EXPORT
|
||||
#endif
|
||||
|
||||
// Definition for VkLayerDispatchTable and VkLayerInstanceDispatchTable now appear in externally generated header
|
||||
#include "vk_layer_dispatch_table.h"
|
||||
|
||||
#define MAX_NUM_UNKNOWN_EXTS 250
|
||||
|
||||
// Loader-Layer version negotiation API. Versions add the following features:
|
||||
|
@ -50,6 +47,9 @@
|
|||
|
||||
#define VK_CURRENT_CHAIN_VERSION 1
|
||||
|
||||
// Typedef for use in the interfaces below
|
||||
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);
|
||||
|
||||
// Version negotiation values
|
||||
typedef enum VkNegotiateLayerStructType {
|
||||
LAYER_NEGOTIATE_UNINTIALIZED = 0,
|
||||
|
@ -82,7 +82,8 @@ typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device);
|
|||
*/
|
||||
typedef enum VkLayerFunction_ {
|
||||
VK_LAYER_LINK_INFO = 0,
|
||||
VK_LOADER_DATA_CALLBACK = 1
|
||||
VK_LOADER_DATA_CALLBACK = 1,
|
||||
VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2
|
||||
} VkLayerFunction;
|
||||
|
||||
typedef struct VkLayerInstanceLink_ {
|
||||
|
@ -107,7 +108,9 @@ typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance,
|
|||
void *object);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device,
|
||||
void *object);
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA);
|
||||
typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction);
|
||||
typedef struct {
|
||||
VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
|
||||
const void *pNext;
|
||||
|
@ -115,6 +118,10 @@ typedef struct {
|
|||
union {
|
||||
VkLayerInstanceLink *pLayerInfo;
|
||||
PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData;
|
||||
struct {
|
||||
PFN_vkLayerCreateDevice pfnLayerCreateDevice;
|
||||
PFN_vkLayerDestroyDevice pfnLayerDestroyDevice;
|
||||
} layerDevice;
|
||||
} u;
|
||||
} VkLayerInstanceCreateInfo;
|
||||
|
||||
|
|
19
src/rendering/vulkan/thirdparty/vulkan/vulkan.h
vendored
19
src/rendering/vulkan/thirdparty/vulkan/vulkan.h
vendored
|
@ -2,7 +2,7 @@
|
|||
#define VULKAN_H_ 1
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -24,6 +24,10 @@
|
|||
#include "vulkan_android.h"
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_FUCHSIA
|
||||
#include <zircon/types.h>
|
||||
#include "vulkan_fuchsia.h"
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||
#include "vulkan_ios.h"
|
||||
|
@ -34,13 +38,10 @@
|
|||
#include "vulkan_macos.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_MIR_KHR
|
||||
#include <mir_toolkit/client_types.h>
|
||||
#include "vulkan_mir.h"
|
||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
||||
#include "vulkan_metal.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_VI_NN
|
||||
#include "vulkan_vi.h"
|
||||
#endif
|
||||
|
@ -76,4 +77,10 @@
|
|||
#include "vulkan_xlib_xrandr.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_GGP
|
||||
#include <ggp_c/vulkan_types.h>
|
||||
#include "vulkan_ggp.h"
|
||||
#endif
|
||||
|
||||
#endif // VULKAN_H_
|
||||
|
|
121
src/rendering/vulkan/thirdparty/vulkan/vulkan_android.h
vendored
Normal file
121
src/rendering/vulkan/thirdparty/vulkan/vulkan_android.h
vendored
Normal file
|
@ -0,0 +1,121 @@
|
|||
#ifndef VULKAN_ANDROID_H_
|
||||
#define VULKAN_ANDROID_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_android_surface 1
|
||||
struct ANativeWindow;
|
||||
#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
|
||||
typedef VkFlags VkAndroidSurfaceCreateFlagsKHR;
|
||||
typedef struct VkAndroidSurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkAndroidSurfaceCreateFlagsKHR flags;
|
||||
struct ANativeWindow* window;
|
||||
} VkAndroidSurfaceCreateInfoKHR;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
|
||||
VkInstance instance,
|
||||
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_ANDROID_external_memory_android_hardware_buffer 1
|
||||
struct AHardwareBuffer;
|
||||
#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 3
|
||||
#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer"
|
||||
typedef struct VkAndroidHardwareBufferUsageANDROID {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint64_t androidHardwareBufferUsage;
|
||||
} VkAndroidHardwareBufferUsageANDROID;
|
||||
|
||||
typedef struct VkAndroidHardwareBufferPropertiesANDROID {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkDeviceSize allocationSize;
|
||||
uint32_t memoryTypeBits;
|
||||
} VkAndroidHardwareBufferPropertiesANDROID;
|
||||
|
||||
typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkFormat format;
|
||||
uint64_t externalFormat;
|
||||
VkFormatFeatureFlags formatFeatures;
|
||||
VkComponentMapping samplerYcbcrConversionComponents;
|
||||
VkSamplerYcbcrModelConversion suggestedYcbcrModel;
|
||||
VkSamplerYcbcrRange suggestedYcbcrRange;
|
||||
VkChromaLocation suggestedXChromaOffset;
|
||||
VkChromaLocation suggestedYChromaOffset;
|
||||
} VkAndroidHardwareBufferFormatPropertiesANDROID;
|
||||
|
||||
typedef struct VkImportAndroidHardwareBufferInfoANDROID {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
struct AHardwareBuffer* buffer;
|
||||
} VkImportAndroidHardwareBufferInfoANDROID;
|
||||
|
||||
typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceMemory memory;
|
||||
} VkMemoryGetAndroidHardwareBufferInfoANDROID;
|
||||
|
||||
typedef struct VkExternalFormatANDROID {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint64_t externalFormat;
|
||||
} VkExternalFormatANDROID;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(
|
||||
VkDevice device,
|
||||
const struct AHardwareBuffer* buffer,
|
||||
VkAndroidHardwareBufferPropertiesANDROID* pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
|
||||
VkDevice device,
|
||||
const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
|
||||
struct AHardwareBuffer** pBuffer);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
2387
src/rendering/vulkan/thirdparty/vulkan/vulkan_core.h
vendored
2387
src/rendering/vulkan/thirdparty/vulkan/vulkan_core.h
vendored
File diff suppressed because it is too large
Load diff
56
src/rendering/vulkan/thirdparty/vulkan/vulkan_fuchsia.h
vendored
Normal file
56
src/rendering/vulkan/thirdparty/vulkan/vulkan_fuchsia.h
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
#ifndef VULKAN_FUCHSIA_H_
|
||||
#define VULKAN_FUCHSIA_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_FUCHSIA_imagepipe_surface 1
|
||||
#define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1
|
||||
#define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface"
|
||||
typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA;
|
||||
typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImagePipeSurfaceCreateFlagsFUCHSIA flags;
|
||||
zx_handle_t imagePipeHandle;
|
||||
} VkImagePipeSurfaceCreateInfoFUCHSIA;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(
|
||||
VkInstance instance,
|
||||
const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
67
src/rendering/vulkan/thirdparty/vulkan/vulkan_ggp.h
vendored
Normal file
67
src/rendering/vulkan/thirdparty/vulkan/vulkan_ggp.h
vendored
Normal file
|
@ -0,0 +1,67 @@
|
|||
#ifndef VULKAN_GGP_H_
|
||||
#define VULKAN_GGP_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_GGP_stream_descriptor_surface 1
|
||||
#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1
|
||||
#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface"
|
||||
typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP;
|
||||
typedef struct VkStreamDescriptorSurfaceCreateInfoGGP {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkStreamDescriptorSurfaceCreateFlagsGGP flags;
|
||||
GgpStreamDescriptor streamDescriptor;
|
||||
} VkStreamDescriptorSurfaceCreateInfoGGP;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP(
|
||||
VkInstance instance,
|
||||
const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_GGP_frame_token 1
|
||||
#define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1
|
||||
#define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token"
|
||||
typedef struct VkPresentFrameTokenGGP {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
GgpFrameToken frameToken;
|
||||
} VkPresentFrameTokenGGP;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -27,12 +27,11 @@ extern "C" {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_MVK_ios_surface 1
|
||||
#define VK_MVK_IOS_SURFACE_SPEC_VERSION 2
|
||||
#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface"
|
||||
|
||||
typedef VkFlags VkIOSSurfaceCreateFlagsMVK;
|
||||
|
||||
typedef struct VkIOSSurfaceCreateInfoMVK {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -40,7 +39,6 @@ typedef struct VkIOSSurfaceCreateInfoMVK {
|
|||
const void* pView;
|
||||
} VkIOSSurfaceCreateInfoMVK;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
|
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -27,12 +27,11 @@ extern "C" {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_MVK_macos_surface 1
|
||||
#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 2
|
||||
#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface"
|
||||
|
||||
typedef VkFlags VkMacOSSurfaceCreateFlagsMVK;
|
||||
|
||||
typedef struct VkMacOSSurfaceCreateInfoMVK {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -40,7 +39,6 @@ typedef struct VkMacOSSurfaceCreateInfoMVK {
|
|||
const void* pView;
|
||||
} VkMacOSSurfaceCreateInfoMVK;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
|
|
63
src/rendering/vulkan/thirdparty/vulkan/vulkan_metal.h
vendored
Normal file
63
src/rendering/vulkan/thirdparty/vulkan/vulkan_metal.h
vendored
Normal file
|
@ -0,0 +1,63 @@
|
|||
#ifndef VULKAN_METAL_H_
|
||||
#define VULKAN_METAL_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_EXT_metal_surface 1
|
||||
|
||||
#ifdef __OBJC__
|
||||
@class CAMetalLayer;
|
||||
#else
|
||||
typedef void CAMetalLayer;
|
||||
#endif
|
||||
|
||||
#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1
|
||||
#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface"
|
||||
typedef VkFlags VkMetalSurfaceCreateFlagsEXT;
|
||||
typedef struct VkMetalSurfaceCreateInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkMetalSurfaceCreateFlagsEXT flags;
|
||||
const CAMetalLayer* pLayer;
|
||||
} VkMetalSurfaceCreateInfoEXT;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(
|
||||
VkInstance instance,
|
||||
const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -27,12 +27,11 @@ extern "C" {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_NN_vi_surface 1
|
||||
#define VK_NN_VI_SURFACE_SPEC_VERSION 1
|
||||
#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface"
|
||||
|
||||
typedef VkFlags VkViSurfaceCreateFlagsNN;
|
||||
|
||||
typedef struct VkViSurfaceCreateInfoNN {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -40,7 +39,6 @@ typedef struct VkViSurfaceCreateInfoNN {
|
|||
void* window;
|
||||
} VkViSurfaceCreateInfoNN;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
|
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -27,12 +27,11 @@ extern "C" {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_wayland_surface 1
|
||||
#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
|
||||
|
||||
typedef VkFlags VkWaylandSurfaceCreateFlagsKHR;
|
||||
|
||||
typedef struct VkWaylandSurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -41,7 +40,6 @@ typedef struct VkWaylandSurfaceCreateInfoKHR {
|
|||
struct wl_surface* surface;
|
||||
} VkWaylandSurfaceCreateInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -27,12 +27,11 @@ extern "C" {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_win32_surface 1
|
||||
#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
|
||||
|
||||
typedef VkFlags VkWin32SurfaceCreateFlagsKHR;
|
||||
|
||||
typedef struct VkWin32SurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -41,7 +40,6 @@ typedef struct VkWin32SurfaceCreateInfoKHR {
|
|||
HWND hwnd;
|
||||
} VkWin32SurfaceCreateInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
|
||||
|
||||
|
@ -57,10 +55,10 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
|
|||
uint32_t queueFamilyIndex);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_KHR_external_memory_win32 1
|
||||
#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32"
|
||||
|
||||
typedef struct VkImportMemoryWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -90,7 +88,6 @@ typedef struct VkMemoryGetWin32HandleInfoKHR {
|
|||
VkExternalMemoryHandleTypeFlagBits handleType;
|
||||
} VkMemoryGetWin32HandleInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
|
||||
|
||||
|
@ -107,10 +104,10 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR(
|
|||
VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_KHR_win32_keyed_mutex 1
|
||||
#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1
|
||||
#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex"
|
||||
|
||||
typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -128,7 +125,6 @@ typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR {
|
|||
#define VK_KHR_external_semaphore_win32 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32"
|
||||
|
||||
typedef struct VkImportSemaphoreWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -163,7 +159,6 @@ typedef struct VkSemaphoreGetWin32HandleInfoKHR {
|
|||
VkExternalSemaphoreHandleTypeFlagBits handleType;
|
||||
} VkSemaphoreGetWin32HandleInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||
|
||||
|
@ -178,10 +173,10 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR(
|
|||
HANDLE* pHandle);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_KHR_external_fence_win32 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32"
|
||||
|
||||
typedef struct VkImportFenceWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -207,7 +202,6 @@ typedef struct VkFenceGetWin32HandleInfoKHR {
|
|||
VkExternalFenceHandleTypeFlagBits handleType;
|
||||
} VkFenceGetWin32HandleInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||
|
||||
|
@ -222,10 +216,10 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR(
|
|||
HANDLE* pHandle);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_NV_external_memory_win32 1
|
||||
#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
|
||||
#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32"
|
||||
|
||||
typedef struct VkImportMemoryWin32HandleInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -240,7 +234,6 @@ typedef struct VkExportMemoryWin32HandleInfoNV {
|
|||
DWORD dwAccess;
|
||||
} VkExportMemoryWin32HandleInfoNV;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
|
@ -251,10 +244,10 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV(
|
|||
HANDLE* pHandle);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_NV_win32_keyed_mutex 1
|
||||
#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 1
|
||||
#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
|
||||
|
||||
typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -269,6 +262,64 @@ typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
|
|||
|
||||
|
||||
|
||||
#define VK_EXT_full_screen_exclusive 1
|
||||
#define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 3
|
||||
#define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive"
|
||||
|
||||
typedef enum VkFullScreenExclusiveEXT {
|
||||
VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_BEGIN_RANGE_EXT = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_END_RANGE_EXT = VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_RANGE_SIZE_EXT = (VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT - VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT + 1),
|
||||
VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkFullScreenExclusiveEXT;
|
||||
typedef struct VkSurfaceFullScreenExclusiveInfoEXT {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkFullScreenExclusiveEXT fullScreenExclusive;
|
||||
} VkSurfaceFullScreenExclusiveInfoEXT;
|
||||
|
||||
typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 fullScreenExclusiveSupported;
|
||||
} VkSurfaceCapabilitiesFullScreenExclusiveEXT;
|
||||
|
||||
typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
HMONITOR hmonitor;
|
||||
} VkSurfaceFullScreenExclusiveWin32InfoEXT;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
uint32_t* pPresentModeCount,
|
||||
VkPresentModeKHR* pPresentModes);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT(
|
||||
VkDevice device,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
VkDeviceGroupPresentModeFlagsKHR* pModes);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -27,12 +27,11 @@ extern "C" {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_xcb_surface 1
|
||||
#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
|
||||
|
||||
typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
|
||||
|
||||
typedef struct VkXcbSurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -41,7 +40,6 @@ typedef struct VkXcbSurfaceCreateInfoKHR {
|
|||
xcb_window_t window;
|
||||
} VkXcbSurfaceCreateInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -27,12 +27,11 @@ extern "C" {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_xlib_surface 1
|
||||
#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
|
||||
|
||||
typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
|
||||
|
||||
typedef struct VkXlibSurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -41,7 +40,6 @@ typedef struct VkXlibSurfaceCreateInfoKHR {
|
|||
Window window;
|
||||
} VkXlibSurfaceCreateInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -27,10 +27,10 @@ extern "C" {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_EXT_acquire_xlib_display 1
|
||||
#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1
|
||||
#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display"
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay);
|
||||
|
||||
|
|
|
@ -2032,6 +2032,19 @@ DEFINE_ACTION_FUNCTION_NATIVE(FFont, StringWidth, StringWidth)
|
|||
ACTION_RETURN_INT(StringWidth(self, str));
|
||||
}
|
||||
|
||||
static int GetMaxAscender(FFont* font, const FString& str)
|
||||
{
|
||||
const char* txt = str[0] == '$' ? GStrings(&str[1]) : str.GetChars();
|
||||
return font->GetMaxAscender(txt);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(FFont, GetMaxAscender, GetMaxAscender)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(FFont);
|
||||
PARAM_STRING(str);
|
||||
ACTION_RETURN_INT(GetMaxAscender(self, str));
|
||||
}
|
||||
|
||||
static int CanPrint(FFont *font, const FString &str)
|
||||
{
|
||||
const char *txt = str[0] == '$' ? GStrings(&str[1]) : str.GetChars();
|
||||
|
|
|
@ -1033,9 +1033,9 @@ All Marks Cleared,AMSTR_MARKSCLEARED,,,,Všechny značky smazány,Alle Markierun
|
|||
,,Multiplayer,,,,,,,,,,,,,,,,,,,,
|
||||
Fraglimit hit.,TXT_FRAGLIMIT,,,,Fraglimit dosáhnut.,Fraglimit erreicht,,,Límite de bajas alcanzado.,,Frägiraja saavutettu.,Limite de frags atteinte.,Minimum Frag elérve.,Fraglimit raggiunto.,フラグリミット!,킬제한에 도달했습니다.,Limit fragów wyczerpany.,Limite de frags atingido.,,,Достигнут лимит фрагов.,Фраг-лимит достигнут.
|
||||
Timelimit hit.,TXT_TIMELIMIT,,,,Časový limit dosáhnut.,Zeitlimit erreicht,,,Límite de tiempo alcanzado.,,Aikaraja saavutettu.,Limite de temps atteinte.,Minimum Idő elérve.,Timelimit raggiunto.,ゲームセット!,시간제한에 도달했습니다.,Limit czasowy wyczerpany.,Limite de tempo atingido.,,,Достигнут лимит времени.,Временско ограничење достигнуто.
|
||||
%o was looking good until %g killed %hself!,SPREEKILLSELF,,,,%o vypadal@[ao_cs] dobře dokud se @[self_cs] nezabil@[ao_cs]!,"%o sah gut aus, bis das Unglück geschah.",,,¡%o se veía bien hasta que %g se mató a si mism@[ao_esp]!,,"%o oli liekeissä, kunnes meni tappamaan itsensä!",%o était en pleine folie meurtrière avant que %g ne se bute!,%o jól nézett ki még mielőtt megölte magát!,%o stava andando bene finchè non si è ucciso da solo!,%o は自滅するまでなかなか良い感じだった!,%o 이(가) 잘 나가려던 참에 자살했습니다!,%o wyglądał dobrze dopóki się nie zabił@[ao_pl],%o estava indo bem até se matar!,,,"%o неплохо выглядел@[ao_rus], пока не покончил@[ao_rus] с собой!",%o је изгледао добро док није убио самог себе!
|
||||
%o was looking good until %g killed %hself!,SPREEKILLSELF,,,,%o vypadal@[ao_cs] dobře dokud se @[self_cs] nezabil@[ao_cs]!,"%o sah gut aus, bis das Unglück geschah.",,,¡%o se veía bien hasta que %g se mató a si mism@[ao_esp]!,,"%o oli liekeissä, kunnes meni tappamaan itsensä!",%o était en pleine folie meurtrière avant que %g ne se bute!,%o jól nézett ki még mielőtt megölte magát!,%o stava andando bene finchè non si è ucciso da solo!,%o は自滅するまでなかなか良かったぞ!,%o 이(가) 잘 나가려던 참에 자살했습니다!,%o wyglądał dobrze dopóki się nie zabił@[ao_pl],%o estava indo bem até se matar!,,,"%o неплохо выглядел@[ao_rus], пока не покончил@[ao_rus] с собой!",%o је изгледао добро док није убио самог себе!
|
||||
%o's killing spree was ended by %k,SPREEOVER,,,,%o@[psn1_cs] vraždící řádění ukončil hráč %k.,%os Amoklauf wurde von %k beendet.,,,%k acabó con la racha de muerte de %o,,%k päätti pelaajan %o tapposarjan,La folie meurtrière de %o à été terminée par %k!,%o ámokfutása meglett %k megállította.,La sequela di frag di %o è stata terminata da %k,%k が %o の快進撃を断ち切った!,%k 이(가) %o 의 연속 킬을 처단했습니다,Seria zabójstw %o zakończona przez %k,A matança de %o foi interrompida por %k,,,Игрок %k прервал череду убийств игрока %o,Серијско убијање играча %o је завршио %k
|
||||
%k is on a killing spree!,SPREE5,,,,%k začal@[ao_cs] řádit!,%k läuft Amok!,,,¡%k está atacando de lo lindo!,,%k on sarjamurhaaja!,%k est en folie meurtrière!,%o egy Ámokfutó!,%k è preda di un momento omicida!,%k が連続キルをしている!,%k 연속 킬!,%k popełnia serię morderstw!,%k está cometendo uma matança!,,,Игрок %k совершил череду убийств!,%k је серијални убица!
|
||||
%k is on a killing spree!,SPREE5,,,,%k začal@[ao_cs] řádit!,%k läuft Amok!,,,¡%k está atacando de lo lindo!,,%k on sarjamurhaaja!,%k est en folie meurtrière!,%o egy Ámokfutó!,%k è preda di un momento omicida!,%k が連続キル!,%k 연속 킬!,%k popełnia serię morderstw!,%k está cometendo uma matança!,,,Игрок %k совершил череду убийств!,%k је серијални убица!
|
||||
%k is on a rampage!,SPREE10,,,,%k zuří!,%k tobt sich aus!,,,¡%k está en medio de una aniquilación!,,%k riehuu valtoimenaan!,%k est en plein massacre!,%o Tombol!,%k sta facendo un massacro!,%k が大暴れだ!,%k 이(가) 미쳐 날뛰고 있습니다!,%k jest w szale!,%k está massacrando!,,,%k в неистовстве!,%k дивља!
|
||||
%k is dominating!,SPREE15,,,,%k dominuje!,%k dominiert!,,,¡%k está dominando!,,%k hallitsee suvereenisti!,%k domine!,%o Uralkodik!,%k sta dominando tutti!,%k が圧倒している!,%k 이(가) 우세하고 있습니다!,%k dominuje!,%k está dominando!,,,%k доминирует!,%k доминира!
|
||||
%k is unstoppable!,SPREE20,,,,%k je nezastaviteln@[adj_cs]!,%k kann nicht gestoppt werden!,,,¡%k está endureciendo la competición!,,%k on pysäyttämätön!,%k est inarrétable!,%o Megállíthatatlan!,%k è inarrestabile!,%k が止まらない!,%k 을(를) 막을 수없습니다!,%k jest niepowstrzymany!,%k é implacável!,,,Игрок %k неостановим!,%k је незаустављив!
|
||||
|
@ -1063,7 +1063,7 @@ Items,TXT_IMITEMS,,,,Předměty,Gegenstände,,Aĵoj,Objetos,,Esineet,Objets,Tár
|
|||
Secrets,TXT_IMSECRETS,,,,Tajemství,Geheimnisse,,Sekretoj,Secretos,,Salat,,Rejtekhelyek,Segreti,シークレット,밝혀낸 비밀,Sekrety,Segredos,,,Тайники,Тајне
|
||||
Time,TXT_IMTIME,,,,Čas,Zeit,,Daŭro,Tiempo,,Aika,Temps,Idő,Tempo,経過時間,소모한 시간,Czas,Tempo,,,Время,Време
|
||||
Par,TXT_IMPAR,,,,,,,Alparo,,,,,Átlag,Media,最速時間,기준 시간,Par,Média,,,Рекорд,Рекорд
|
||||
Finished,WI_FINISHED,,,,Dokončen,Abgeschlossen,,Finita,Completado,,Suoritettu,terminé,Teljesítve,Finito,攻略達成,완료,Ukończono,Finalizado,,,Уровень завершён,Ниво завршен
|
||||
Finished,WI_FINISHED,,,,Dokončen,Abgeschlossen,,Finita,Completado,,Suoritettu,terminé,Teljesítve,Finito,攻略,완료,Ukończono,Finalizado,,,Уровень завершён,Ниво завршен
|
||||
Entering,WI_ENTERING,,,,Vstupujete do,Betrete,,Eniras,Entrando a:,,Seuraava kohde,Niveau Suivant,Következik,Prossimo livello,突入開始,입장,Wchodzisz,Próxima fase,Próximo nível,,Следующий уровень,Следећи ниво
|
||||
Now entering:,WI_ENTERING,,heretic hexen,,Nyní vstupujete do:,Betrete:,,Nun Eniras:,Ahora entrando a:,,Seuraava kohde:,Vous entrez:,Következik,Entrando adesso in:,突入中:,입장합니다:,Teraz wchodzisz do:,Entrando em:,A entrar em:,,Следующий уровень:,Следећи ниво:
|
||||
,,HUD,,,,,,,,,,,,,,,,,,,,
|
||||
|
@ -1182,7 +1182,7 @@ Super Shotgun,TAG_SUPERSHOTGUN,,,,Superbrokovnice,Super-Schrotflinte,,Ega Kuglet
|
|||
Chaingun,TAG_CHAINGUN,,,,Kulomet,Maschinengewehr,,Maŝinpafilo,Ametralladora,,Gatling-kk,Mitrailleuse,Golyószóró,Mitragliatore a canne rotanti ,チェーンガン,체인건,Karabin maszynowy,Metralhadora,,,Пулемёт,Митраљез
|
||||
Rocket Launcher,TAG_ROCKETLAUNCHER,,,,Raketomet,Raketenwerfer,,Raketlanĉilo,Lanzacohetes,,Sinko,Lance-Roquettes,Rakétavető,Lanciamissili,ロケットランチャー,로켓 런쳐,Wyrzutnia rakiet,Lança-foguetes,Lança-Mísseis,,Ракетница,Бацач ракета
|
||||
Plasma Rifle,TAG_PLASMARIFLE,,,,Plazmová puška,Plasmagewehr,,Plasmo-pafilo,Rifle de Plasma,,Plasmapyssy,Fusil à Plasma,Plazmafegyver,Fucile al Plasma ,プラズマライフル,플라즈마 라이플,Karabin plazmowy,Fuzil de Plasma,Pistola de Plasma,,Плазменная пушка,Плазма оружје
|
||||
BFG 9000,TAG_BFG9000,,,,,,,,,,,,,,BFG9000,,,,,,,ВЈП 9000
|
||||
BFG 9000,TAG_BFG9000,,,,,,,,,,,,,,,,,,,,,ВЈП 9000
|
||||
Bullets,AMMO_CLIP,,,,Kulky,Patronen,,Kugloj,Balas,,Luodit,Balles,Töltények,Proiettili,銃弾,권총 탄약,Naboje,Balas,,,Пули,Меци
|
||||
Shotgun Shells,AMMO_SHELLS,,,,Broky,Schrotpatronen,,Kartoĉoj,Cartuchos de escopeta,,Haulikon patruunat,Cartouches,Sörétek,Cartucce per fucile,散弾シェル,샷건 탄약,Loftki,Cartuchos de Espingarda,,,Патроны для дробовика,Патроне за пумпарицу
|
||||
Rockets,AMMO_ROCKETS,,,,Rakety,Raketen,,Raketoj,Cohetes,,Raketit,Roquettes,Rakéták,Razzi,ロケット弾,로켓,Rakiety,Foguetes,Mísseis,,Ракеты,Ракете
|
||||
|
@ -1681,34 +1681,34 @@ Energy Pack,TAG_ENERGYPACK,,,,Energetický svazek,Energiekiste,,,Pack de Energí
|
|||
Poison Bolts,TAG_POISONBOLTS,,,,Otrávené šípy,Giftbolzen,,,Saetas Venenosas,,Myrkkynuolet,Carreaux Empoisonnés,Mérgező Nyílak,Dardi Velenosi ,ポイズンボルト,맹독 볼트,Zatrute Bełty,Setas Envenenadas,,,Отравленные болты,Отровне стреле
|
||||
Electric Bolts,TAG_ELECTRICBOLTS,,,,Elektrické šípy,Elektrische Bolzen,,,Saetas Eléctricas,,Sähkönuolet,Carreaux Electriques,Elektromos Nyílak,Dardi Elettrici ,エレクトリックボルト,전격 볼트,Elektryczne Bełty,Setas Elétricas,,,Электрические болты,Електричне стреле
|
||||
Ammo Satchel,TAG_AMMOSATCHEL,,,,Brašna na munici,Munitionstasche,,,Bolsa de Municiones,,Ammuslaukku,Sacoche à munitions,Lőszeres táska,Borsa di Munizioni ,弾薬鞄,탄약 배낭,Torba z Amunicją,Bolsa de Munição,,,Ранец для боеприпасов,Торбица муниције
|
||||
Base Key,TAG_BASEKEY,,,,Klíč od základny,Basisschlüssel,,,Llave de la Base,,Tukikohdan avain,Clé de la base,Bázis Kulcs,Chiave della Base,基地 のキー,기지 키,Klucz do Bazy,Chave da Base,,,Ключ от базы,Кључ базе
|
||||
Govs Key,TAG_GOVSKEY,,,,Klíč ke guvernérovi,Gouverneursschlüssel,,,Llave del Gobernador,,Kuvernöörin avain,Clé du Gouverneur,Kormányzó Kulcs,Chiave del Governatore ,政府 のキー,총독의 키,Klucz Gubernatora,Chave do Governador,,,Ключ губернатора,Гувернеров кључ
|
||||
Base Key,TAG_BASEKEY,,,,Klíč od základny,Basisschlüssel,,,Llave de la Base,,Tukikohdan avain,Clé de la base,Bázis Kulcs,Chiave della Base,基地のキー,기지 키,Klucz do Bazy,Chave da Base,,,Ключ от базы,Кључ базе
|
||||
Govs Key,TAG_GOVSKEY,,,,Klíč ke guvernérovi,Gouverneursschlüssel,,,Llave del Gobernador,,Kuvernöörin avain,Clé du Gouverneur,Kormányzó Kulcs,Chiave del Governatore ,政府のキー,총독의 키,Klucz Gubernatora,Chave do Governador,,,Ключ губернатора,Гувернеров кључ
|
||||
Passcard,TAG_PASSCARD,,,,Vstupní karta,Zugangskarte,,,Pase de Acceso,,Avainkortti,Passe,Belépőkártya,Tessera Lasciapassare ,パスカード,통행 카드,Karta Dostępu,Cartão de Acesso,,,Пропуск,Пропусница
|
||||
ID Badge,TAG_IDBADGE,,,,Identifikační odznak,Identitätskarte,,,Insignia de identificación,,Henkilötunniste,Badge d'Identification,Azonosító Jelvény,Distintivo ,ID バッジ,신분 휘장,Odznaka Identyfikacyjna,Crachá de Identificação,,,Личная карта,Идентификациона значка
|
||||
Prison Key,TAG_PRISONKEY,,,,Klíč od věznice,Gefängnisschlüssel,,,Llave de Prisión,,Vankilan avain,Clé de la Prison,Börtön Kulcs,Chiave della Prigione ,刑務所 のキー,감옥 키,Klucz do Więzienia,Chave da Prisão,,,Ключ от тюрьмы,Кључ од 3атвора
|
||||
Prison Key,TAG_PRISONKEY,,,,Klíč od věznice,Gefängnisschlüssel,,,Llave de Prisión,,Vankilan avain,Clé de la Prison,Börtön Kulcs,Chiave della Prigione ,刑務所のキー,감옥 키,Klucz do Więzienia,Chave da Prisão,,,Ключ от тюрьмы,Кључ од 3атвора
|
||||
Severed Hand,TAG_SEVEREDHAND,,,,Useknutá ruka,Abgetrennte Hand,,,Mano Cercenada,,Katkennut käsi,Main coupée,Levágott Kéz,Mano Mozzata,切り取った手,잘린 손목,Odcięta Ręka,Mão Decepada,Mão Desmenbrada,,Отрезанная рука,Одвојена шака
|
||||
Power1 Key,TAG_POWER1KEY,,,,Klíč od elektrárny 1,Kraftwerksschlüssel 1,,,Llave de Poder 1,,Power1-avain,Clé Power1,Áram1 Kulcs,Chiave della Centrale 1,パワー1 キー,발전소 1호 키,Klucz do Elektrowni 1,Chave da Usina 1,Chave Energética 1,,Ключ ЭС 1,Кључ од ел. 1
|
||||
Power2 Key,TAG_POWER2KEY,,,,Klíč od elektrárny 2,Kraftwerksschlüssel 2,,,Llave de Poder 2,,Power2-avain,Clé Power2,Áram2 Kulcs,Chiave della Centrale 2,パワー2 キー,발전소 2호 키,Klucz do Elektrowni 2,Chave da Usina 2,Chave Energética 2,,Ключ ЭС 2,Кључ од ел. 2
|
||||
Power3 Key,TAG_POWER3KEY,,,,Klíč od elektrárny 3,Kraftwerksschlüssel 3,,,Llave de Poder 3,,Power3-avain,Clé Power3,Áram3 Kulcs,Chiave della Centrale 3,パワー3 キー,발전소 3호 키,Klucz do Elektrowni 3,Chave da Usina 3,Chave Energética 3,,Ключ ЭС 3,Кључ од ел. 3
|
||||
Gold Key,TAG_GOLDKEY,,,,Zlatý klíč,Goldschlüssel,,,Llave Dorada,,Kulta-avain,Clé en Or,Aranykulcs,Chiave Dorata,ゴールド キー,황금 키,Złoty Klucz,Chave de Ouro,,,Золотой ключ,Златни кључ
|
||||
Power1 Key,TAG_POWER1KEY,,,,Klíč od elektrárny 1,Kraftwerksschlüssel 1,,,Llave de Poder 1,,Power1-avain,Clé Power1,Áram1 Kulcs,Chiave della Centrale 1,パワー1キー,발전소 1호 키,Klucz do Elektrowni 1,Chave da Usina 1,Chave Energética 1,,Ключ ЭС 1,Кључ од ел. 1
|
||||
Power2 Key,TAG_POWER2KEY,,,,Klíč od elektrárny 2,Kraftwerksschlüssel 2,,,Llave de Poder 2,,Power2-avain,Clé Power2,Áram2 Kulcs,Chiave della Centrale 2,パワー2キー,발전소 2호 키,Klucz do Elektrowni 2,Chave da Usina 2,Chave Energética 2,,Ключ ЭС 2,Кључ од ел. 2
|
||||
Power3 Key,TAG_POWER3KEY,,,,Klíč od elektrárny 3,Kraftwerksschlüssel 3,,,Llave de Poder 3,,Power3-avain,Clé Power3,Áram3 Kulcs,Chiave della Centrale 3,パワー3キー,발전소 3호 키,Klucz do Elektrowni 3,Chave da Usina 3,Chave Energética 3,,Ключ ЭС 3,Кључ од ел. 3
|
||||
Gold Key,TAG_GOLDKEY,,,,Zlatý klíč,Goldschlüssel,,,Llave Dorada,,Kulta-avain,Clé en Or,Aranykulcs,Chiave Dorata,ゴールドキー,황금 키,Złoty Klucz,Chave de Ouro,,,Золотой ключ,Златни кључ
|
||||
ID Card,TAG_IDCARD,,,,Identifikační karta,Ausweis,,,Tarjeta de Identificación,,Henkilökortti,Carte d'Identité,Azonosító Kártya,Tessera Identificativa,ID カード,신분증,Karta Identyfikacyjna,Cartão de Identificação,,,Удостоверение,Лична карта
|
||||
Silver Key,TAG_SILVERKEY,,,,Stříbrný klíč,Silberschlüssel,,,Llave Plateada,,Hopea-avain,Clé en Argent,Ezüst Kulcs,Chiave Argentata,シルバー キー,은 키,Srebrny Klucz,Chave de Prata,,,Серебряный ключ,Сребрни кључ
|
||||
Oracle Key,TAG_ORACLEKEY,,,,Věštcův klíč,Orakelschlüssel,,,Llave del Oráculo,,Oraakkelin avain,Clé de l'Oracle,Orákulum kulcs,Chiave dell'Oracolo ,オラクル キー,오라클 키,Klucz do Wyroczni,Chave do Oráculo,,,Ключ Оракула,Пророков кључ
|
||||
Silver Key,TAG_SILVERKEY,,,,Stříbrný klíč,Silberschlüssel,,,Llave Plateada,,Hopea-avain,Clé en Argent,Ezüst Kulcs,Chiave Argentata,シルバーキー,은 키,Srebrny Klucz,Chave de Prata,,,Серебряный ключ,Сребрни кључ
|
||||
Oracle Key,TAG_ORACLEKEY,,,,Věštcův klíč,Orakelschlüssel,,,Llave del Oráculo,,Oraakkelin avain,Clé de l'Oracle,Orákulum kulcs,Chiave dell'Oracolo ,オラクルキー,오라클 키,Klucz do Wyroczni,Chave do Oráculo,,,Ключ Оракула,Пророков кључ
|
||||
Military ID,TAG_MILITARYID,,,,Vojenské ID,Militärausweis,,,Identificación Militar,,Sotilastunnus,Identification Militaire,Katonai Azonosító Kártya,Identificativo Militare,ミリタリー ID,군용 아이디,Wojskowy Identyfikator,ID Militar,,,Военный ID,Војна идентификација
|
||||
Order Key,TAG_ORDERKEY,,,,Klíč Řádu,Ordensschlüssel,,,Llave de la Orden,,Veljeskunnan avain,Clé de l'Ordre,Rend Kulcs,Chiave dell'Ordine,オーダー キー,오더의 키,Klucz Zakonu,Chave da Ordem,,,Ключ Ордена,Кључ одреда
|
||||
Warehouse Key,TAG_WAREHOUSEKEY,,,,Klíč ke skladu,Lagerhausschlüssel,,,Llave del Almacén,,Varaston avain,Clé de l'Entrepôt,Raktár Kulcs,Chiave del Magazzino ,倉庫 のキー,창고 키,Klucz do Magazynu,Chave do Armazém,,,Ключ от склада,Кључ складишта
|
||||
Brass Key,TAG_BRASSKEY,,,,Mosazný klíč,Messingschlüssel,,,Llave de Latón,,Messinkiavain,Clé en Bronze,Sárgaréz Kulcs,Chiave d'Ottone ,ブラス キー,황동 키,Mosiężny Klucz,Chave de Latão,,,Латунный ключ,Кључ од месинга
|
||||
Red Crystal Key,TAG_REDCRYSTALKEY,,,,Červený krystalový klíč,Roter Kristallschlüssel,,,Llave de Cristal Rojo,,Punainen kristalliavain,Clé de Cristal Rouge,Piros Kristály Kulcs,Chiave di Cristallo Rosso ,赤水晶 のキー,적색 크리스탈 키,Czerwony Kryształowy Klucz,Chave de Cristal Vermelho,,,Крас. ключ-кристалл,Кључ од црвеног кристала
|
||||
Blue Crystal Key,TAG_BLUECRYSTALKEY,,,,Modrý krystalový klíč,Blauer Kristallschlüssel,,,Llave de Cristal Azul,,Sininen kristalliavain,Clé de Crisal Bleu,Kék Kristály Kulcs,Chiave di Cristallo Blu,青水晶 のキー,청색 크리스탈 키,Niebieski Kryształowy Klucz,Chave de Cristal Azul,,,Син. ключ-кристалл,Кључ од плавог кристала
|
||||
Chapel Key,TAG_CHAPELKEY,,,,Klíč od kaple,Kapellenschlüssel,,,Llave de la Capilla,,Kappelin avain,Clé de la Chapelle,Kápolna Kulcs,Chiave della Cappella ,チャペル キー,예배당 키,Klucz do Kaplicy,Chave da Capela,,,Ключ от часовни,Кључ капеле
|
||||
Catacomb Key,TAG_CATACOMBKEY,,,,Klíč do katakomb,Katakombenschlüssel,,,Llave de la Catacumba,,Katakombin avain,Clé des Catacombes,Katakomb Kulcs,Chiave delle Catacombe ,カタコンベ キー,고대 묘지 키,Klucz do Katakumb,Chave da Catacumba,,,Ключ от катакомб,Кључ од катакомби
|
||||
Security Key,TAG_SECURITYKEY,,,,Klíč ochranky,Sicherheitsschlüssel,,,Llave de Seguridad,,Turvamiesavain,Clé de la Sécurité,Biztonsági Kulcs,Chiave della Sicurezza ,警備 のキー,보안 키,Klucz Ochrony,Chave de Segurança,,,Ключ охраны,Сигурносни кључ
|
||||
Order Key,TAG_ORDERKEY,,,,Klíč Řádu,Ordensschlüssel,,,Llave de la Orden,,Veljeskunnan avain,Clé de l'Ordre,Rend Kulcs,Chiave dell'Ordine,オーダーキー,오더의 키,Klucz Zakonu,Chave da Ordem,,,Ключ Ордена,Кључ одреда
|
||||
Warehouse Key,TAG_WAREHOUSEKEY,,,,Klíč ke skladu,Lagerhausschlüssel,,,Llave del Almacén,,Varaston avain,Clé de l'Entrepôt,Raktár Kulcs,Chiave del Magazzino ,倉庫のキー,창고 키,Klucz do Magazynu,Chave do Armazém,,,Ключ от склада,Кључ складишта
|
||||
Brass Key,TAG_BRASSKEY,,,,Mosazný klíč,Messingschlüssel,,,Llave de Latón,,Messinkiavain,Clé en Bronze,Sárgaréz Kulcs,Chiave d'Ottone ,ブラスキー,황동 키,Mosiężny Klucz,Chave de Latão,,,Латунный ключ,Кључ од месинга
|
||||
Red Crystal Key,TAG_REDCRYSTALKEY,,,,Červený krystalový klíč,Roter Kristallschlüssel,,,Llave de Cristal Rojo,,Punainen kristalliavain,Clé de Cristal Rouge,Piros Kristály Kulcs,Chiave di Cristallo Rosso ,赤水晶のキー,적색 크리스탈 키,Czerwony Kryształowy Klucz,Chave de Cristal Vermelho,,,Крас. ключ-кристалл,Кључ од црвеног кристала
|
||||
Blue Crystal Key,TAG_BLUECRYSTALKEY,,,,Modrý krystalový klíč,Blauer Kristallschlüssel,,,Llave de Cristal Azul,,Sininen kristalliavain,Clé de Crisal Bleu,Kék Kristály Kulcs,Chiave di Cristallo Blu,青水晶のキー,청색 크리스탈 키,Niebieski Kryształowy Klucz,Chave de Cristal Azul,,,Син. ключ-кристалл,Кључ од плавог кристала
|
||||
Chapel Key,TAG_CHAPELKEY,,,,Klíč od kaple,Kapellenschlüssel,,,Llave de la Capilla,,Kappelin avain,Clé de la Chapelle,Kápolna Kulcs,Chiave della Cappella ,チャペルキー,예배당 키,Klucz do Kaplicy,Chave da Capela,,,Ключ от часовни,Кључ капеле
|
||||
Catacomb Key,TAG_CATACOMBKEY,,,,Klíč do katakomb,Katakombenschlüssel,,,Llave de la Catacumba,,Katakombin avain,Clé des Catacombes,Katakomb Kulcs,Chiave delle Catacombe ,カタコンベキー,고대 묘지 키,Klucz do Katakumb,Chave da Catacumba,,,Ключ от катакомб,Кључ од катакомби
|
||||
Security Key,TAG_SECURITYKEY,,,,Klíč ochranky,Sicherheitsschlüssel,,,Llave de Seguridad,,Turvamiesavain,Clé de la Sécurité,Biztonsági Kulcs,Chiave della Sicurezza ,警備のキー,보안 키,Klucz Ochrony,Chave de Segurança,,,Ключ охраны,Сигурносни кључ
|
||||
Core Key,TAG_COREKEY,,,,Klíč k jádru,Reaktorschlüssel,,,Llave del Núcleo,,Ytimen avain,Clé du Réacteur,Mag Kulcs,Chiave del Nucleo,コア キー,중심부 키,Klucz do Rdzenia,Chave do Núcleo,,,Ключ от реактора,Кључ језгра
|
||||
Mauler Key,TAG_MAULERKEY,,,,Klíč k trhačům,Vernichterschlüssel,,,Llave del Triturador,,Moukarin avain,Clé du Broyeur,Szétbomló Kulcs,Chiave del Pestatore ,マウラー キー,마울러 키,Klucz do Magazynu Miażdżycieli,Chave - Mauler,,,Ключ истязателя,Маулер кључ
|
||||
Factory Key,TAG_FACTORYKEY,,,,Klíč do továrny,Fabrikschlüssel,,,Llave de la Fábrica,,Tehtaan avain,Clé de l'Usine,Gyár Kulcs,Chiave della Fabbrica ,工場 のキー,공장 키,Klucz do Fabryki,Chave da Fábrica,,,Ключ от фабрики,Кључ фабрике
|
||||
Mine Key,TAG_MINEKEY,,,,Klíč od dolů,Minenschlüssel,,,Llave de la Mina,,Kaivoksen avain,Clé de la Mine,Bánya Kulcs,Chiave della Miniera ,鉱山 のキー,탄광 키,Klucz do Kopalni,Chave da Mina,,,Ключ от шахт,Кључ рудника
|
||||
New Key5,TAG_NEWKEY5,,,,Nový klíč 5,Neuer Schlüssel 5,,,Llave Nueva5,,Uusi 5-avain,Clé nouveau 5,Új Kulcs5,Nuova Chiave 5,ニュー キー5,새로운 키5,Nowy Klucz5,Chave Nova 5,,,Новый ключ5,Нови кључ5
|
||||
Oracle Pass,TAG_ORACLEPASS,,,,Věštcův pas,Orakelpass,,,Pase del Oráculo,,Oraakkelin kulkulupa,Passe de l'Oracle,Orákulum engedély,Lasciapassare dell'Oracolo ,オラクル パス,오라클의 통행증,Przepustka Wyroczni,Passe do Oráculo,,,Пропуск Оракула,Пророкова пропусница
|
||||
Mauler Key,TAG_MAULERKEY,,,,Klíč k trhačům,Vernichterschlüssel,,,Llave del Triturador,,Moukarin avain,Clé du Broyeur,Szétbomló Kulcs,Chiave del Pestatore ,マウラーキー,마울러 키,Klucz do Magazynu Miażdżycieli,Chave - Mauler,,,Ключ истязателя,Маулер кључ
|
||||
Factory Key,TAG_FACTORYKEY,,,,Klíč do továrny,Fabrikschlüssel,,,Llave de la Fábrica,,Tehtaan avain,Clé de l'Usine,Gyár Kulcs,Chiave della Fabbrica ,工場のキー,공장 키,Klucz do Fabryki,Chave da Fábrica,,,Ключ от фабрики,Кључ фабрике
|
||||
Mine Key,TAG_MINEKEY,,,,Klíč od dolů,Minenschlüssel,,,Llave de la Mina,,Kaivoksen avain,Clé de la Mine,Bánya Kulcs,Chiave della Miniera ,鉱山のキー,탄광 키,Klucz do Kopalni,Chave da Mina,,,Ключ от шахт,Кључ рудника
|
||||
New Key5,TAG_NEWKEY5,,,,Nový klíč 5,Neuer Schlüssel 5,,,Llave Nueva5,,Uusi 5-avain,Clé nouveau 5,Új Kulcs5,Nuova Chiave 5,ニューキー5,새로운 키5,Nowy Klucz5,Chave Nova 5,,,Новый ключ5,Нови кључ5
|
||||
Oracle Pass,TAG_ORACLEPASS,,,,Věštcův pas,Orakelpass,,,Pase del Oráculo,,Oraakkelin kulkulupa,Passe de l'Oracle,Orákulum engedély,Lasciapassare dell'Oracolo ,オラクルパス,오라클의 통행증,Przepustka Wyroczni,Passe do Oráculo,,,Пропуск Оракула,Пророкова пропусница
|
||||
10 gold,TAG_10GOLD,,,,10 zlatých,10 Gold,,,10 de Oro,,10 kolikkoa,10 Pièces,10 arany,10 pezzi d'oro ,10ゴールド,10 골드,10 monet,10 moedas,10 moedas de ouro,,10 золотых,10 златника
|
||||
25 gold,TAG_25GOLD,,,,25 zlatých,25 Gold,,,25 de Oro,,25 kolikkoa,25 Pièces,25 arany,25 pezzi d'oro ,25ゴールド,25 골드,25 monet,25 moedas,25 moedas de ouro,,25 золотых,25 златника
|
||||
50 gold,TAG_50GOLD,,,,50 zlatých,50 Gold,,,50 de Oro,,50 kolikkoa,50 Pièces,50 arany,50 pezzi d'oro ,50ゴールド,50 골드,50 monet,50 moedas,50 moedas de ouro,,50 золотых,50 златника
|
||||
|
@ -2334,17 +2334,17 @@ Propulsor Charge,AMMO_ROCKETS,,chex,,Propulzorové náboje,Propeller-Ladung,,,Ca
|
|||
Phasing Zorcher Charge,AMMO_CELLS,,chex,,Fázovací náboje,Phasenzorcher-Ladung,,,Carga de Zorcher de Fase,,Vaiheiszorcherin varaus,Charge de Phaseur,,Ricarica Zorcher di Fase,フェイシング ゾーカー ほきゅう,저치 전자 충전기,Ładunek do Fazowego Zorchera,Recarga de Zorcher Fásico,,,Заряд Фазового Зорчера,Фазни зорч пуњач
|
||||
,,Menus,,,,,,,,,,,,,,,,,,,,
|
||||
,,Main Menus,,,,,,,,,,,,,,,,,,,,
|
||||
New Game,MNU_NEWGAME,,,,Nová hra,Neues Spiel,,Nova Ludo,Nueva Partida,,Uusi peli,Nouvelle Partie,,Nuovo gioco,新しいゲーム,새로운 게임,Nowa Gra,Novo Jogo,,,Новая игра,Нова игра
|
||||
New Game,MNU_NEWGAME,,,,Nová hra,Neues Spiel,,Nova Ludo,Nueva Partida,,Uusi peli,Nouvelle Partie,,Nuovo gioco,新規ゲーム,새로운 게임,Nowa Gra,Novo Jogo,,,Новая игра,Нова игра
|
||||
Options,MNU_OPTIONS,,,,Možnosti,Optionen,,Agordoj,Opciones,,Asetukset,Options,,Opzioni,オプション,설정,Opcje,Opções,,,Настройки,Подешавања
|
||||
Game Files,MNU_GAMEFILES,,,,Uložené hry,Spieldateien,,Lud-Dosieroj,Archivos del Juego,,Pelitiedostot,Fichiers de jeu,,File di gioco,ゲームファイル,게임 파일,Pliki Gry,Jogos Salvos,Jogos Gravados,,Файлы игры,Фајлови игре
|
||||
Info,MNU_INFO,,,,Informace,Informationen,,Informo,Información,,Tiedot,Info,,Informazioni,情報,정보,Info,Informações,,,Информация,Подаци
|
||||
Quit Game,MNU_QUITGAME,,,,Ukončit hru,Spiel verlassen,,Ĉesi Ludon,Salir del juego,,Lopeta peli,Quitter le jeu,,Esci dal gioco,ゲームをやめる,게임 종료,Wyjdź z Gry,Sair,,,Выход,Заврши игру
|
||||
Quit Game,MNU_QUITGAME,,,,Ukončit hru,Spiel verlassen,,Ĉesi Ludon,Salir del juego,,Lopeta peli,Quitter le jeu,,Esci dal gioco,終了,게임 종료,Wyjdź z Gry,Sair,,,Выход,Заврши игру
|
||||
Choose Skill Level:,MNU_CHOOSESKILL,This text is extremely space limited!,,,Vyber obtížnost:,Schwierigkeitsgrad:,,Elektu Malfacileco-Nivelo,Elige nivel de dificultad:,,Valitse vaikeustaso:,Difficulté:,,Livello di difficoltà:,実力を選べ:,난이도를 고르시오:,Wybierz Poziom Trudności:,Escolha o Nível de Dificuldade:,,,Уровень сложности:,Ниво тежине:
|
||||
I'm too young to die.,SKILL_BABY,,,,Ještě nechci umřít.,Ich bin zu jung zum Sterben.,,Mi estas tro juna por morti,Soy muy joven para morir.,,Olen liian nuori kuolemaan.,Trop jeune pour mourir!,,Troppo giovane per morire.,死ぬには若すぎる,난 죽기엔 너무 젊어.,Jestem za młody by umierać.,Sou jovem demais para morrer.,Demasiado novo para morrer.,,Мне рано умирать.,Премлад сам да умрем.
|
||||
"Hey, not too rough.",SKILL_EASY,,,,"Hej, ne tak tvrdě.","He, nicht so ruppig.",,"Hola, ne tro malafabla.","Oye, no tan rudo.",,"Hei, ei liian kovaa.","Hé, pas trop fort!",,"Ehi, non troppo duro!",あまり激しくするな,너무 세게 하지는 마.,"Hej, nie tak mocno.","Opa, pega leve aí.","Ei, mais devagar.",,"Эй, не так грубо.","Хеј, не претерано грубо."
|
||||
Hurt me plenty.,SKILL_NORMAL,,,,Pojď do mě.,Tu mir weh.,,Doloru min sufiĉe.,Lastímame suficiente.,,Satuta minua kunnolla.,Fais-moi mal!,,Fammi molto male.,存分にやってくれ,마음껏 때려봐.,Dowal mi.,Pode vir quente.,Dá-me com força.,,Сделай мне больно.,Повреди ме кол'ко можеш.
|
||||
Ultra-Violence.,SKILL_HARD,,,,Ultrařežba.,Volle Gewalt.,,Perfortego.,Ultra-Violencia.,,Ultraväkivalta.,Ultra-Violence!,,Ultra-violenza.,ウルトラ バイオレンス,극단적인-폭력.,Ultra-Przemoc.,Ultra-Violência,,,Ультранасилие.,Ултра-насилно.
|
||||
Nightmare!,SKILL_NIGHTMARE,,,,Noční můra!,Alptraum!,,Inkubo!,¡Pesadilla!,,Painajainen!,Cauchemar!,,Incubo!,悪夢!,악몽!,Koszmar!,Pesadelo!,,,Кошмар!,Ноћна мора!
|
||||
Nightmare!,SKILL_NIGHTMARE,,,,Noční můra!,Alptraum!,,Inkubo!,¡Pesadilla!,,Painajainen!,Cauchemar!,,Incubo!,悪夢だ!,악몽!,Koszmar!,Pesadelo!,,,Кошмар!,Ноћна мора!
|
||||
Easy does it,CSKILL_BABY,,,,Hezky zlehka,Immer sachte,,Kvietiĝu,Así de fácil,,Hiljaa hyvä tulee,On y va Doucement,,Facile no?,やさしくして,살살 하면 좋겠네,Łatwizna,Vamos com calma,,,Потихоньку-полегоньку,Лагано сад
|
||||
Not so sticky,CSKILL_EASY,,,,Ne tak ulepeně,Nicht so schmierig,,Ne tiel glueca,No tan pegajoso,,Ei niin tahmaista,Pas trop Collant,,"Non così appiccicoso
|
||||
",ダラダラしない,질척하진 않게,Nie tak lepko,Não tão gosmento,,,Не особо липко,Не тако лепљиво
|
||||
|
@ -2383,8 +2383,8 @@ Fighter,MNU_FIGHTER,,,,Bojovník,Krieger,,,Luchador,,Taistelija,Guerrier,,Combat
|
|||
Cleric,MNU_CLERIC,,,,Klerik,Geistlicher,,,Clérigo,,Pappi,Moine,,Chierico,僧侶,성직자,Kleryk,Clérigo,,,Клерик,Свештеник
|
||||
Mage,MNU_MAGE,,,,Mág,Magier,,,Mago,,Velho,,,Mago,魔導士,마법사,Mag,Mago,,,Маг,Чаробњак
|
||||
Random,MNU_RANDOM,,,,Náhodný,Zufällig,,,Al Azar,,Satunnainen,Au Hasard,,Casuale,ランダム,랜덤,Losowa,Aleatório,,,Наугад,Насумично
|
||||
Load Game,MNU_LOADGAME,,,,Načíst hru,Spiel laden,,,Cargar Partida,,Lataa peli,Chargement,,Carica gioco,ゲームをロード,게임 불러오기,Wczytaj Grę,Carregar,,,Загрузка,Учитај игру
|
||||
Save Game,MNU_SAVEGAME,,,,Uložit hru,Spiel sichern,,,Guardar Partida,,Tallenna peli,Sauvegarde,,Salva gioco,ゲームを保存する,게임 저장하기,Zapisz Grę,Salvar,Gravar,,Сохранение,Сачувај игру
|
||||
Load Game,MNU_LOADGAME,,,,Načíst hru,Spiel laden,,,Cargar Partida,,Lataa peli,Chargement,,Carica gioco,ロード,게임 불러오기,Wczytaj Grę,Carregar,,,Загрузка,Учитај игру
|
||||
Save Game,MNU_SAVEGAME,,,,Uložit hru,Spiel sichern,,,Guardar Partida,,Tallenna peli,Sauvegarde,,Salva gioco,セーブ,게임 저장하기,Zapisz Grę,Salvar,Gravar,,Сохранение,Сачувај игру
|
||||
No Picture,MNU_NOPICTURE,,,,Bez obrázku,Kein Bild,,,Sin Imagen,,Ei kuvaa,Pas d'image,,Nessuna immagine,画像無し,사진 없음,Brak obrazka,Sem imagem,,,"Нет
|
||||
изображения",Нема слике
|
||||
"Different
|
||||
|
@ -2618,7 +2618,7 @@ Poison Buildup flashes,HUDMNU_HAZARDFLASHES,,,,Druh blikání při kumulaci jedu
|
|||
Scaling Options,HUDMNU_SCALEOPT,,,,Nastavení velikosti,Skalierungsoptionen,,,Opciones de escalado,,Skaalausasetukset,Option de mise à l'échelle,,Opzioni di scala,スケーリング オプション,배율 설정,Opcje skalowania,Opções de Escala,,,Настройки масштабирования,Подешавања размере
|
||||
Scaling Options,SCALEMNU_TITLE,,,,Nastavení velikosti,Skalierungsoptionen,,,Opciones de escalado,,Skaalausasetukset,Option de mise à l'échelle,,Opzioni di scala,スケーリング オプション,배율 설정,Opcje skalowania,Opções de Escala,,,Настройки масштабирования,Подешавања размере
|
||||
Overrides for above setting,SCALEMNU_OVERRIDE,,,,Potlačení nastavení výše,Spezialisierungen,,,Anular ajuste anterior,,Ohittaa asetuksen ylhäällä,Annule les paramètres au dessus,,Sovrascritture per i settaggi sopra,設定の上書き,위 설정을 위해 무시,Nadpisuje dla powyższego ustawienia,Anular configurações acima,,,Задать специальные настройки,Специјална подешавања
|
||||
Messages,SCALEMNU_MESSAGES,,,,Zprávy,Nachrichten,,,Mensajes,,Viestit,Messages,,Messaggi,メッセージ,메시지,Wiadomości,Mensagens,,,Сообщения,Поруке
|
||||
Messages,SCALEMNU_MESSAGES,,,,Zprávy,Nachrichten,,,Mensajes,,Viestit,Messages,,Messaggi,メッセージ類,메시지,Wiadomości,Mensagens,,,Сообщения,Поруке
|
||||
Console,SCALEMNU_CONSOLE,,,,Konzole,Konsole,,,Consola,,Konsoli,Console,,Console,コンソール,콘솔,Konsola,Console,Consola,,Консоль,Конзола
|
||||
Status bar,SCALEMNU_STATBAR,,,,Stavový panel,Statusleiste,,,Barra de estado,,Tilapalkki,Barre d'état,,Barra di stato,ステータスバー,상태 바,Pasek statusu,Barra de status,Barra de estado,,Строка состояния,Статусна трака
|
||||
Fullscreen HUD,SCALEMNU_HUD,,,,HUD přes celou obrazovku,Vollbild-HUD,,,HUD de pantalla completa,,Täyden ruudun tilanäyttö,ATH plein écran,,HUD a pieno schermo,全画面HUD,전체화면 HUD,HUD pełnoekranowy,HUD de tela cheia,HUD de ecrã cheio,,Полноэкранный HUD,HUD преко целог екрана
|
||||
|
@ -2740,7 +2740,7 @@ Count Items,MAPCOLORMNU_COUNTITEMCOLOR,,,,Počítané předměty,gezählte Gegen
|
|||
Overlay Mode,MAPCOLORMNU_OVERLAY,,,,Překryvný režim,Überlagerungsmodus,,,Modo sobrepuesto,,Projisointitila,Mode surimpression,,Modalità sovrapposizione,オーバーレイモード,오버레이 모드,Tryb Nakładki,Modo de Sobreposição,,,Прозрачный режим,Провидна аутомапа
|
||||
Overlay Cheat Mode,MAPCOLORMNU_OVCHEATMODE,,,,Překryvný cheatovací režim,Überlagerungsmodus Cheats,,,Sobreposición modo de truco,,Projisointihuijaustila,Mode Cheat Surimpression,,Modalità cheat sovrapposizione,オーバーレイ チートモード,치트 모드 오버레이,Tryb Nakładki Oszustwa,Modo Trapaça de Sobreposição,Modo Batota de Sobreposição,,Прозрачный чит-режим,Провидни читови
|
||||
Portal Overlays,MAPCOLORMNU_PORTAL,,,,Portálové překryvy,Portalüberlagerung,,,Sobreposición de portal,,Portaaliprojisoinnit,Portails superposés,,Sovrapposizioni del portale,ポータル オーバーレイ,포탈 오버레이,Nakładanie się Portali,Sobreposição de portais,,,Порталы в прозрачном режиме,Провидни портали
|
||||
Messages,MSGMNU_TITLE,,,,Zprávy,Nachrichten,,,Mensajes,,Viestit,,,Messaggi,メッセージ,메시지들,Wiadomości,Mensagens,,,Сообщения,Поруке
|
||||
Messages,MSGMNU_TITLE,,,,Zprávy,Nachrichten,,,Mensajes,,Viestit,,,Messaggi,メッセージ類,메시지들,Wiadomości,Mensagens,,,Сообщения,Поруке
|
||||
Show messages,MSGMNU_SHOWMESSAGES,,,,Zobrazit zprávy,Zeige Nachrichten,,,Mostrar Mensajes,,Näytä viestit,Afficher messages,,Mostra messaggi,メッセージ表示,메시지 표시,Pokaż wiadomości,Mostrar mensagens,,,Отображение сообщений,Прикажи поруке
|
||||
Show obituaries,MSGMNU_SHOWOBITUARIES,,,,Zobrazit zprávy o smrtích,Zeige Todesanzeigen,,,Mostrar obituarios,,Näytä kuolinviestit,Afficher avis de décès,,Mostra i necrologi,訃報表示,사망 메시지 표시,Pokaż nekrologi,Mostrar obituários,,,Отображение некрологов,Прикажи читуље
|
||||
Show secret notifications,MSGMNU_SHOWSECRETS,,,,Zobrazit upozornění na tajemství,Zeige Geheimnismeldung,,,Mostrar notificación de secretos,,Ilmoita salojen löytymisestä,Afficher secrets,,Mostra le notifiche dei segreti,シークレット発見表示,비밀 알림 표시,Pokaż wiadomości znalezienia sekretu,Mostrar notificação de segredos,,,Отображение сообщений о тайниках,Прикажи тајне нотификације
|
||||
|
@ -2882,7 +2882,7 @@ Sound channels,SNDMNU_CHANNELS,,,,Počet zvukových kanálů,Soundkanäle,,,Cana
|
|||
Sound backend,SNDMNU_BACKEND,,,,Zvukový systém,Soundsystem,,,Sistema de sonido,,Äänijärjestelmä,Traitement Son,,Backend suono,サウンド バックエンド,음향 말미,System dźwiękowy,Sistema de som,,,Звуковая система,Звучни бекенд
|
||||
OpenAL options,SNDMNU_OPENAL,,,,Nastavení OpenAL,OpenAL Optionen,,,Opciones de OpenAL,,OpenAL-asetukset,Options OpenAL,OpenAL beállításai,Opzioni OpenAL,OpenAL オプション,오픈에이엘 설정,Opcje OpenAL,Opções de OpenAL,,,Настройки OpenAL,OpenAL подешавања
|
||||
Restart sound,SNDMNU_RESTART,,,,Restartovat zvuk,Sound neu starten,,,Reiniciar sonido,,Käynnistä ääni uudelleen,Redémarrer moteur sonore,Hang újraindítása,Resetta il suono,サウンド再起動,음향 재시작,Zresetuj dźwięk,Reiniciar som,,,Перезапустить звук,Поново покрени звук
|
||||
Advanced options,SNDMNU_ADVANCED,,,,Pokročilá nastavení,Erweiterte Optionen,,,Opciones avanzadas,,Edistyneet asetukset,Options avancées,Haladó beállítások,Opzioni avanzate,アドバンスドオプション,고급 설정,Zaawansowane Opcje,Opções avançadas,,,Расширенные настройки,Напредна подешавања
|
||||
Advanced options,SNDMNU_ADVANCED,,,,Pokročilá nastavení,Erweiterte Optionen,,,Opciones avanzadas,,Edistyneet asetukset,Options avancées,Haladó beállítások,Opzioni avanzate,高度なオプション,고급 설정,Zaawansowane Opcje,Opções avançadas,,,Расширенные настройки,Напредна подешавања
|
||||
Module replayer options,SNDMNU_MODREPLAYER,,,,Nastavení přehrávače modulů,Modul-Spieler-Optionen,,,Opciones reproductor de módulos,,Moduulisoitinasetukset,Options lecteur de module,,Opzioni Module replayer,モジュールリプレイヤー オプション,모듈 재생 설정,Opcje Modułu Odtwarzacza,Opções de reprodutor de módulos,,,Параметры воспроизведения модулей,Подешавања модулног риплејера
|
||||
Midi player options,SNDMNU_MIDIPLAYER,,,,Nastavení MIDI přehrávače,MIDI-Spieler-Optionen,,,Opciones de reproductor MIDI,,MIDI-soitinasetukset,Option lecteur MIDI,,Opzioni Midi player,Midi再生のオプション,MIDI 플레이어 설정,Opcje Odtwarzacza Midi,Opções de reprodutor MIDI,,,Настройки MIDI-проигрывателя,MIDI плејер подешавања
|
||||
OpenAL Options,OPENALMNU_TITLE,,,,Nastavení OpenAL,OpenAL Optionen,,,Opciones de OpenAL,,OpenAL-asetukset,Options OpenAL,,Opzioni OpenAL,OpenAL オプション,오픈에이엘 설정,Opcje OpenAL,Opções de OpenAL,,,Настройки OpenAL,OpenAL подешавања
|
||||
|
@ -3204,7 +3204,7 @@ Software Renderer,DSPLYMNU_SWOPT,,,,Softwarový renderer,,,,Renderizado por Soft
|
|||
Gamma correction,DSPLYMNU_GAMMA,,,,Korekce gama,Gammakorrektur,,,Corrección gamma,,Gammakorjaus,Correction Gamma,,Correzione gamma,ガンマ値,감마 조정,Korekta gammy,Correção gama,,,Гамма-коррекция,Корекција светлости
|
||||
Contrast,DSPLYMNU_CONTRAST,,,,Kontrast,Kontrast,,,Contraste,,Sävykkyys,Contraste,,Contrasto,コントラスト,대비,Kontrast,Contraste,,,Контраст,Контраст
|
||||
Saturation,DSPLYMNU_SATURATION,,,,Sytost,Sättigung,,,Saturación,,Värikylläisyys,,,Saturazione,サチュレーション,채도,Nasycenie,Saturação,,,Насыщенность,Сатурација
|
||||
Hardware Rendering Options,GLMNU_TITLE,,,,Nastavení hardwarového rendereru,Hardware-Renderer Optionen,,,Opciones de OpenGL,,Laitteistohahmonnusasetukset,Options OpenGL,,Opzioni OpenGL,ハードウェアレンダリングオプション,오픈지엘 설정,Opcje Renderowania Sprzętowego,Opções de Renderização por Hardware,,,Настройки OpenGL,Опција хардвер рендера
|
||||
Hardware Rendering Options,GLMNU_TITLE,,,,Nastavení hardwarového rendereru,Hardware-Renderer Optionen,,,Opciones de OpenGL,,Laitteistohahmonnusasetukset,Options OpenGL,,Opzioni OpenGL,ハードウェアレンダリング オプション,오픈지엘 설정,Opcje Renderowania Sprzętowego,Opções de Renderização por Hardware,,,Настройки OpenGL,Опција хардвер рендера
|
||||
Dynamic Light Options,GLMNU_DYNLIGHT,,,,Nastavení dynamických světel,Dynamisches-Licht-Optionen,,,Opciones de luz dinámica,,Dynaamisen valon asetukset,Options Lumières Dynamiques,,Opzioni Luci Dinamiche,ダイナミックライト オプション,광원 설정,Opcje Dynamicznego Oświetlenia,Opções de Luz Dinâmica,,,Динамическое освещение,Подешавања динамичког осветљења
|
||||
Texture Options,GLMNU_TEXOPT,,,,Nastavení textur,Texturoptionen,,,Opciones de texturas,,Pintakuviointiasetukset,Options Textures,,Opzioni Texture,テクスチャー オプション,텍스쳐 설정,Opcje Tekstur,Opções de Textura,,,Настройки текстур,Подешавања текстура
|
||||
Preferences,GLMNU_PREFS,,,,Možnosti,Einstellungen,,,Preferencias,,Asetukset,Préférences,,Preferenze,環境設定,성능,Preferencje,Preferências,,,Настройки,Преференција
|
||||
|
@ -3441,6 +3441,8 @@ Purple,TXT_COLOR_PURPLE,,,,Fialová,Violett,,,Morado,,Purppura,Violet,Lila,Viola
|
|||
Dull Green,TXT_COLOR_DULLGREEN,,,,Bledě zelená,Blassgrün,,,Verde pálido,,Haaleanvihreä,Vert pâle,,Verde pallido,苔,,Matowa Zieleń,Verde pálido,,,Мутно-зелёный,Тупа зелена
|
||||
Bright Green,TXT_COLOR_BRIGHTGREEN,,,,Jasně zelená,Hellgrün,,,Verde claro,,Vaaleanvihreä,Vert clair,,Verde chiaro,鮮,,Jasnozielony,Verde claro,,,Ярко-зелёный,Светла зелена
|
||||
Dark Green,TXT_COLOR_DARKGREEN,,,,Tmavě zelená,Dunkelgrün,,,Verde oscuro,,Tummanvihreä,Vert sombre,Sötétzöld,Verde scuro,深,암녹색,Ciemnozielony,Verde escuro,,,Тёмно-зелёный,Тамна зелена
|
||||
Rust,TXT_COLOR_RUST,,,,Rez,Rostbraun,,,Óxido,,Ruoste,Rouille,,,錆,,Rdzawy,,,,Ржавый,Рђа
|
||||
Rust,TXT_COLOR_RUST,,,,Rez,Rostbraun,,,Óxido,,Ruoste,Rouille,,,錆,,Rdzawy,Ferrugem,,,Ржавый,Рђа
|
||||
Quicksave rotation,MISCMNU_QUICKSAVEROTATION,,,,,Schnellspeicherrotation,,,,,,,,,,,,,,,,
|
||||
Number of quicksaves in rotation,MISCMNU_QUICKSAVECOUNT,,,,,Anzahl Schnellspeicherplätze,,,,,,,,,,,,,,,,
|
||||
,USE_GENERIC_FONT,This is not a text to be translated but an engine switch for complex languages.,,,,,,,,,,,,,1,1,,,,,,
|
||||
,REQUIRED_CHARACTERS,This should list all uppercase characters that are REQUIRED for proper language display. If it is acceptable that accents get omitted a character should NOT be listed here!,,,ÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ,ÄÖÜẞ,,,ÁÉÍÓÚÑÜ,,ÄÖ,ÀÂÇÉÈÊËÎÏÔŒÙÛŸ,ÁÉÍÓÖÚÜŐŰ,ÀÈÉÌÒÙ,,,ĄĆĘŁŃÓŚŹŻ,ÁÉÍÓÚÀÃÕÂÊÔÇ,,,АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ,АБВГДЂЕЖЗИЈКЛЉМНЊОПРСТЋУФХЦЧЏШ
|
Can't render this file because it is too large.
|
|
@ -1182,6 +1182,8 @@ OptionMenu "MiscOptions" protected
|
|||
Option "$MISCMNU_ENABLEAUTOSAVES", "disableautosave", "Autosave"
|
||||
Option "$MISCMNU_SAVELOADCONFIRMATION", "saveloadconfirmation", "OnOff"
|
||||
Slider "$MISCMNU_AUTOSAVECOUNT", "autosavecount", 1, 20, 1, 0
|
||||
Option "$MISCMNU_QUICKSAVEROTATION", "quicksaverotation", "OnOff"
|
||||
Slider "$MISCMNU_QUICKSAVECOUNT", "quicksaverotationcount", 1, 20, 1, 0
|
||||
Option "$MISCMNU_DEHLOAD", "dehload", "dehopt"
|
||||
Option "$MISCMNU_ENABLESCRIPTSCREENSHOTS", "enablescriptscreenshot", "OnOff"
|
||||
Option "$MISCMNU_INTERSCROLL", "nointerscrollabort", "OffOn"
|
||||
|
|
|
@ -363,11 +363,11 @@ class Korax : Actor
|
|||
|
||||
if (health <= (SpawnHealth() >> 1))
|
||||
{
|
||||
numcommands = 5;
|
||||
numcommands = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
numcommands = 4;
|
||||
numcommands = 3;
|
||||
}
|
||||
|
||||
ACS_Execute(250 + (random[KoraxCommand](0, numcommands)), 0);
|
||||
|
|
|
@ -132,19 +132,6 @@ class BasicArmor : Armor
|
|||
// You shouldn't be picking up BasicArmor anyway.
|
||||
return true;
|
||||
}
|
||||
if (!item.bIgnoreSkill)
|
||||
{
|
||||
if (item is "BasicArmorBonus")
|
||||
{
|
||||
let armor = BasicArmorBonus(item);
|
||||
armor.SaveAmount = int(armor.SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor));
|
||||
}
|
||||
else if (item is "BasicArmorPickup")
|
||||
{
|
||||
let armor = BasicArmorPickup(item);
|
||||
armor.SaveAmount = int(armor.SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -263,12 +250,6 @@ class BasicArmorBonus : Armor
|
|||
override Inventory CreateCopy (Actor other)
|
||||
{
|
||||
let copy = BasicArmorBonus(Super.CreateCopy (other));
|
||||
|
||||
if (!bIgnoreSkill)
|
||||
{
|
||||
SaveAmount = int(SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor));
|
||||
}
|
||||
|
||||
copy.SavePercent = SavePercent;
|
||||
copy.SaveAmount = SaveAmount;
|
||||
copy.MaxSaveAmount = MaxSaveAmount;
|
||||
|
@ -309,7 +290,7 @@ class BasicArmorBonus : Armor
|
|||
result = true;
|
||||
}
|
||||
|
||||
int saveAmount = min(SaveAmount, MaxSaveAmount);
|
||||
int saveAmount = min(GetSaveAmount(), MaxSaveAmount);
|
||||
|
||||
if (saveAmount <= 0)
|
||||
{ // If it can't give you anything, it's as good as used.
|
||||
|
@ -344,6 +325,11 @@ class BasicArmorBonus : Armor
|
|||
{
|
||||
SaveAmount *= amount;
|
||||
}
|
||||
|
||||
int GetSaveAmount ()
|
||||
{
|
||||
return !bIgnoreSkill ? int(SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)) : SaveAmount;
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
@ -383,12 +369,6 @@ class BasicArmorPickup : Armor
|
|||
override Inventory CreateCopy (Actor other)
|
||||
{
|
||||
let copy = BasicArmorPickup(Super.CreateCopy (other));
|
||||
|
||||
if (!bIgnoreSkill)
|
||||
{
|
||||
SaveAmount = int(SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor));
|
||||
}
|
||||
|
||||
copy.SavePercent = SavePercent;
|
||||
copy.SaveAmount = SaveAmount;
|
||||
copy.MaxAbsorb = MaxAbsorb;
|
||||
|
@ -410,6 +390,7 @@ class BasicArmorPickup : Armor
|
|||
|
||||
override bool Use (bool pickup)
|
||||
{
|
||||
int SaveAmount = GetSaveAmount();
|
||||
let armor = BasicArmor(Owner.FindInventory("BasicArmor"));
|
||||
|
||||
// This should really never happen but let's be prepared for a broken inventory.
|
||||
|
@ -450,6 +431,10 @@ class BasicArmorPickup : Armor
|
|||
SaveAmount *= amount;
|
||||
}
|
||||
|
||||
int GetSaveAmount ()
|
||||
{
|
||||
return !bIgnoreSkill ? int(SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)) : SaveAmount;
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
|
|
@ -2692,7 +2692,7 @@ struct PlayerInfo native play // self is what internally is known as player_t
|
|||
native PSprite FindPSprite(int id) const;
|
||||
native void SetLogNumber (int text);
|
||||
native void SetLogText (String text);
|
||||
native void SetSubtitleNumber (int text);
|
||||
native void SetSubtitleNumber (int text, Sound sound_id = 0);
|
||||
native bool Resurrect();
|
||||
|
||||
native String GetUserName() const;
|
||||
|
|
|
@ -102,7 +102,7 @@ class Acolyte : StrifeHumanoid
|
|||
{
|
||||
players[i].mo.GiveInventoryType ("QuestItem7");
|
||||
players[i].SetLogNumber (14);
|
||||
players[i].SetSubtitleNumber (14);
|
||||
players[i].SetSubtitleNumber (14, "svox/voc14");
|
||||
A_StopSound (CHAN_VOICE);
|
||||
A_PlaySound ("svox/voc14", CHAN_VOICE, 1, false, ATTN_NONE);
|
||||
}
|
||||
|
|
|
@ -181,7 +181,7 @@ class AlienSpectre1 : SpectralMonster
|
|||
String voc = "svox/voc" .. log;
|
||||
A_PlaySound(voc, CHAN_VOICE, 1, false, ATTN_NONE);
|
||||
player.player.SetLogNumber (log);
|
||||
player.player.SetSubtitleNumber (log);
|
||||
player.player.SetSubtitleNumber (log, voc);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1865,7 +1865,7 @@ class PowerCoupling : Actor
|
|||
players[i].mo.GiveInventoryType ("QuestItem6");
|
||||
S_Sound ("svox/voc13", CHAN_VOICE);
|
||||
players[i].SetLogNumber (13);
|
||||
players[i].SetSubtitleNumber (13);
|
||||
players[i].SetSubtitleNumber (13, "svox/voc13");
|
||||
A_DropItem ("BrokenPowerCoupling", -1, 256);
|
||||
Destroy ();
|
||||
}
|
||||
|
|
|
@ -320,6 +320,7 @@ struct Font native
|
|||
|
||||
native int GetCharWidth(int code);
|
||||
native int StringWidth(String code);
|
||||
native int GetMaxAscender(String code);
|
||||
native bool CanPrint(String code);
|
||||
native int GetHeight();
|
||||
native int GetDisplacement();
|
||||
|
|
|
@ -77,6 +77,8 @@ class ConversationMenu : Menu
|
|||
Array<String> mResponseLines;
|
||||
Array<uint> mResponses;
|
||||
bool mShowGold;
|
||||
bool mHasBackdrop;
|
||||
bool mConfineTextToBackdrop;
|
||||
StrifeDialogueNode mCurNode;
|
||||
int mYpos;
|
||||
PlayerInfo mPlayer;
|
||||
|
@ -85,6 +87,7 @@ class ConversationMenu : Menu
|
|||
int LineHeight;
|
||||
int ReplyLineHeight;
|
||||
Font displayFont;
|
||||
int speechDisplayWidth;
|
||||
int displayWidth;
|
||||
int displayHeight;
|
||||
int fontScale;
|
||||
|
@ -101,7 +104,7 @@ class ConversationMenu : Menu
|
|||
|
||||
//=============================================================================
|
||||
//
|
||||
// returns the y position of the replies boy for positioning the terminal response.
|
||||
// returns the y position of the replies box for positioning the terminal response.
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
|
@ -112,7 +115,11 @@ class ConversationMenu : Menu
|
|||
mShowGold = false;
|
||||
ConversationPauseTic = gametic + 20;
|
||||
DontDim = true;
|
||||
if (!generic_ui)
|
||||
|
||||
let tex = TexMan.CheckForTexture (CurNode.Backdrop, TexMan.Type_MiscPatch);
|
||||
mHasBackdrop = tex.isValid();
|
||||
|
||||
if (!generic_ui && !dlg_vgafont)
|
||||
{
|
||||
displayFont = SmallFont;
|
||||
displayWidth = CleanWidth;
|
||||
|
@ -123,17 +130,33 @@ class ConversationMenu : Menu
|
|||
ReplyWidth = 320-50-10;
|
||||
SpeechWidth = screen.GetWidth()/CleanXfac - 24*2;
|
||||
ReplyLineHeight = LineHeight = displayFont.GetHeight();
|
||||
mConfineTextToBackdrop = false;
|
||||
speechDisplayWidth = displayWidth;
|
||||
}
|
||||
else
|
||||
{
|
||||
displayFont = NewSmallFont;
|
||||
fontScale = (CleanXfac+1) / 2;
|
||||
displayWidth = screen.GetWidth() / fontScale;
|
||||
displayHeight = screen.GetHeight() / fontScale;
|
||||
refwidth = 640;
|
||||
refheight = 400;
|
||||
ReplyWidth = 640-100-20;
|
||||
SpeechWidth = screen.GetWidth()/fontScale - (24*2 * CleanXfac / fontScale);
|
||||
displayWidth = screen.GetWidth() / fontScale;
|
||||
displayHeight = screen.GetHeight() / fontScale;
|
||||
let aspect = Screen.GetAspectRatio();
|
||||
if (!mHasBackdrop || aspect <= 1.3334)
|
||||
{
|
||||
SpeechWidth = screen.GetWidth()/fontScale - (24*3 * CleanXfac / fontScale);
|
||||
mConfineTextToBackdrop = false;
|
||||
speechDisplayWidth = displayWidth;
|
||||
}
|
||||
else
|
||||
{
|
||||
let formatWidth = Screen.GetHeight() * 1.3333;
|
||||
SpeechWidth = formatWidth / fontScale - (24*3 * CleanXfac / fontScale);
|
||||
mConfineTextToBackdrop = true;
|
||||
speechDisplayWidth = formatWidth / fontScale;
|
||||
}
|
||||
|
||||
LineHeight = displayFont.GetHeight() + 2;
|
||||
ReplyLineHeight = LineHeight * fontScale / CleanYfac;
|
||||
}
|
||||
|
@ -442,13 +465,13 @@ class ConversationMenu : Menu
|
|||
|
||||
if (speakerName.Length() > 0)
|
||||
{
|
||||
screen.DrawText(displayFont, Font.CR_WHITE, x / fontScale, y / fontScale, speakerName, DTA_KeepRatio, true, DTA_VirtualWidth, displayWidth, DTA_VirtualHeight, displayHeight);
|
||||
screen.DrawText(displayFont, Font.CR_WHITE, x / fontScale, y / fontScale, speakerName, DTA_KeepRatio, !mConfineTextToBackdrop, DTA_VirtualWidth, speechDisplayWidth, DTA_VirtualHeight, displayHeight);
|
||||
y += linesize * 3 / 2;
|
||||
}
|
||||
x = 24 * screen.GetWidth() / 320;
|
||||
for (int i = 0; i < cnt; ++i)
|
||||
{
|
||||
screen.DrawText(displayFont, Font.CR_UNTRANSLATED, x / fontScale, y / fontScale, mDialogueLines.StringAt(i), DTA_KeepRatio, true, DTA_VirtualWidth, displayWidth, DTA_VirtualHeight, displayHeight);
|
||||
screen.DrawText(displayFont, Font.CR_UNTRANSLATED, x / fontScale, y / fontScale, mDialogueLines.StringAt(i), DTA_KeepRatio, !mConfineTextToBackdrop, DTA_VirtualWidth, speechDisplayWidth, DTA_VirtualHeight, displayHeight);
|
||||
y += linesize;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -149,7 +149,7 @@ class StatusScreen abstract play version("2.5")
|
|||
//
|
||||
//====================================================================
|
||||
|
||||
int, int DrawName(int y, TextureID tex, String levelname)
|
||||
int DrawName(int y, TextureID tex, String levelname)
|
||||
{
|
||||
// draw <LevelName>
|
||||
if (tex.isValid())
|
||||
|
@ -161,7 +161,7 @@ class StatusScreen abstract play version("2.5")
|
|||
// patches with vast amounts of empty space at the bottom.
|
||||
size.Y = TexMan.CheckRealHeight(tex);
|
||||
}
|
||||
return y + int(Size.Y), (BigFont.GetHeight() - BigFont.GetDisplacement()) * CleanYfac / 4;
|
||||
return y + int(Size.Y) * CleanYfac;
|
||||
}
|
||||
else if (levelname.Length() > 0)
|
||||
{
|
||||
|
@ -176,9 +176,9 @@ class StatusScreen abstract play version("2.5")
|
|||
screen.DrawText(mapname.mFont, mapname.mColor, (screen.GetWidth() - lines.StringWidth(i) * CleanXfac) / 2, y + h, lines.StringAt(i), DTA_CleanNoMove, true);
|
||||
h += lumph;
|
||||
}
|
||||
return y + h, (mapname.mFont.GetHeight() - mapname.mFont.GetDisplacement())/4;
|
||||
return y + h;
|
||||
}
|
||||
return 0, 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
|
@ -232,17 +232,35 @@ class StatusScreen abstract play version("2.5")
|
|||
|
||||
virtual int drawLF ()
|
||||
{
|
||||
int y = TITLEY * CleanYfac;
|
||||
bool ispatch = wbs.LName0.isValid();
|
||||
int oldy = TITLEY * CleanYfac;
|
||||
int h;
|
||||
|
||||
if (!ispatch)
|
||||
{
|
||||
let asc = mapname.mFont.GetMaxAscender(lnametexts[1]);
|
||||
if (asc > TITLEY - 2)
|
||||
{
|
||||
oldy = (asc+2) * CleanYfac;
|
||||
}
|
||||
}
|
||||
|
||||
int y = DrawName(oldy, wbs.LName0, lnametexts[0]);
|
||||
|
||||
[y, h] = DrawName(y, wbs.LName0, lnametexts[0]);
|
||||
|
||||
// Adjustment for different font sizes for map name and 'finished'.
|
||||
let fontspace1 = finished.mFont.GetDisplacement();
|
||||
let fontspace2 = ((h + (finished.mFont.GetHeight() - fontspace1)/4)) / 2;
|
||||
|
||||
y += max(0, fontspace2 - fontspace1) * CleanYFac;
|
||||
|
||||
// If the displayed info is made of patches we need some additional offsetting here.
|
||||
if (ispatch)
|
||||
{
|
||||
int h1 = BigFont.GetHeight() - BigFont.GetDisplacement();
|
||||
int h2 = (y - oldy) / CleanYfac / 4;
|
||||
let disp = min(h1, h2);
|
||||
// The offset getting applied here must at least be as tall as the largest ascender in the following text to avoid overlaps.
|
||||
if (!TexMan.OkForLocalization(finishedPatch, "$WI_FINISHED"))
|
||||
{
|
||||
disp += finished.mFont.GetMaxAscender("$WI_FINISHED");
|
||||
}
|
||||
y += disp * CleanYfac;
|
||||
}
|
||||
|
||||
// draw "Finished!"
|
||||
|
||||
int statsy = multiplayer? NG_STATSY : SP_STATSY * CleanYFac;
|
||||
|
@ -266,19 +284,36 @@ class StatusScreen abstract play version("2.5")
|
|||
|
||||
virtual void drawEL ()
|
||||
{
|
||||
int y = TITLEY * CleanYfac;
|
||||
bool ispatch = TexMan.OkForLocalization(enteringPatch, "$WI_ENTERING");
|
||||
int oldy = TITLEY * CleanYfac;
|
||||
|
||||
y = DrawPatchOrText(y, entering, enteringPatch, "$WI_ENTERING");
|
||||
let h = (entering.mFont.GetHeight() - entering.mFont.GetDisplacement()) / 4;
|
||||
|
||||
if (!wbs.LName1.isValid())
|
||||
if (!ispatch)
|
||||
{
|
||||
// Factor out the font's displacement here.
|
||||
let fontspace1 = mapname.mFont.GetDisplacement();
|
||||
let fontspace2 = ((h + (mapname.mFont.GetHeight() - fontspace1)/4)) / 2;
|
||||
h = max(0, fontspace2 - fontspace1) * CleanYFac;
|
||||
}
|
||||
y += h * CleanYFac;
|
||||
let asc = entering.mFont.GetMaxAscender("$WI_ENTERING");
|
||||
if (asc > TITLEY - 2)
|
||||
{
|
||||
oldy = (asc+2) * CleanYfac;
|
||||
}
|
||||
}
|
||||
|
||||
int y = DrawPatchOrText(oldy, entering, enteringPatch, "$WI_ENTERING");
|
||||
|
||||
// If the displayed info is made of patches we need some additional offsetting here.
|
||||
|
||||
if (ispatch)
|
||||
{
|
||||
int h1 = BigFont.GetHeight() - BigFont.GetDisplacement();
|
||||
let size = TexMan.GetScaledSize(enteringPatch);
|
||||
int h2 = int(size.Y);
|
||||
let disp = min(h1, h2) / 4;
|
||||
// The offset getting applied here must at least be as tall as the largest ascender in the following text to avoid overlaps.
|
||||
if (!wbs.LName1.isValid())
|
||||
{
|
||||
disp += mapname.mFont.GetMaxAscender(lnametexts[1]);
|
||||
}
|
||||
y += disp * CleanYfac;
|
||||
}
|
||||
|
||||
DrawName(y, wbs.LName1, lnametexts[1]);
|
||||
}
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ class StrifeStatusBar : BaseStatusBar
|
|||
override void ShowPop (int popnum)
|
||||
{
|
||||
Super.ShowPop(popnum);
|
||||
if (popnum == CurrentPop || (popnum == POP_LOG && generic_ui))
|
||||
if (popnum == CurrentPop || (popnum == POP_LOG && MustDrawLog(0)))
|
||||
{
|
||||
if (popnum == POP_Keys)
|
||||
{
|
||||
|
@ -146,7 +146,7 @@ class StrifeStatusBar : BaseStatusBar
|
|||
override bool MustDrawLog(int state)
|
||||
{
|
||||
// Tell the base class to draw the log if the pop screen won't be displayed.
|
||||
return generic_ui;
|
||||
return generic_ui || log_vgafont;
|
||||
}
|
||||
|
||||
void Reset ()
|
||||
|
|
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/0402.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/0402.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/0409.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/0409.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/040A.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/040A.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/040B.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/040B.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/040F.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-chex/fonts/bigfont/040F.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/0402.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/0402.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/0409.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/0409.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/040A.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/040A.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/040B.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/040B.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/040F.lmp
Normal file
BIN
wadsrc_extra/static/filter/game-strife/fonts/bigfont/040F.lmp
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/0402.lmp
Normal file
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/0402.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/0409.lmp
Normal file
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/0409.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/040A.lmp
Normal file
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/040A.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/040B.lmp
Normal file
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/040B.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/040F.lmp
Normal file
BIN
wadsrc_extra/static/filter/hacx.hacx1/fonts/bigfont/040F.lmp
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -670,28 +670,29 @@ The War Rooms,TXT_HACXMAP19,,,,Válečné kabinety,Kriegsräume,,,Las Salas de G
|
|||
Intruder Alert!,TXT_HACXMAP20,,,,"Pozor, vetřelec!",Eindringlingsalarm!,,,¡Alerta de Intruso!,,,"Alerte, Intrus!",,Allarme intruso!,シンニュウシャ アリ!,ZONE 20: 칩입자 경보!,,Alerta de Intruso!,,,Тревога! Нарушитель!,
|
||||
Desiccant Room,TXT_HACXMAP31,,,,Sušící místnost,Trocknungsraum,,,Sala del Desecante,,,Salle du Desiccant,,Stanza disseccante,ダスキン ルーム,ZONE 31: 건조한 곳,,Sala do Dessecante,,,Сушильная комната,
|
||||
"Now Arriving At...
|
||||
",STSTR_CLEV,,,,Příjezd do...,Angekommen bei...,,,Ahora llegando a...,,,On arrive maintenant à:,,Arrivando a...,,이동하는 중...,,Agora chegando em ...,,,Переходим на...,
|
||||
...gonna fry your ass!,STSTR_CHOPPERS,"Printed when entering the idchoppers cheat, which gives the player a chainsaw",,,...ti upeče prdel!,...ich brate deinen Arsch!,,,... ¡voy a freirte el trasero!,,,...C'est l'heure de botter du cul!,,....ti friggerà il culo!,,... 지져버리겠어!,,,,,...поджарит твою задницу!,
|
||||
"inVuln, Str, Inviso, Rad, Allmap, or Lite-amp?",STSTR_BEHOLD,"Hacx's content here was totally useless so it got removed. However, this string has to be defined and minimally altered so that the Dehacked replacement is not being triggered.",,,"nesmrt(V), Síla, nevId, Rad, mApa nebo světLo","inVuln, Str, Inviso, Rad, Allmap, oder Lite-amp",,"inVuln, Str, Inviso, Rad, Allmap, aŭ Lite-amp","inVuln, Str, Inviso, Rad, Allmap, o Lite-amp.",,"haavoittumattomuus (V), voima (S), näkymättömyys (I), koko kartta (A) tai valonvahvistus (L)","in V ulnérable, S urpuissance, I nvisible, p R otection, c A rte, où L umière?","Sérthet (V), Berz (S), Láthat(i), Sugár(R), Térkép(A), vagy Fény Sisak(L)","inVuln, berSerk, Invisib, tuta anti-Rad, mAppa tutta, o amplif-Luce",,"무적, 광전사, 투명, 보호복, 지도, 아니면 바이저","niezniszczalność (V), siła (S), niewidzialność (I), kombinezon (R), mapa (A) lub gogle noktowizyjne (L)","inVuln., berSerk, Invisib., anti-Rad., mApa completo ou amplificação de Luz",,,"Бессм. (V), берс. (S), нев. (I), кос. (R), крт. (A), виз (L).","нерањ., снага, невидљ., радиј., мапа или ноћ. визор"
|
||||
Let's Get Serious!,STSTR_BEHOLDX,,,,Teď je to vážné!,Es wird ernst!,,,¡Vamos en Serio!,,,Passons aux choses sérieuses!,,Prendiamoci sul serio!,,철들 때다!,,Vamos ficar sérios!,,,А теперь серьёзно!,
|
||||
Cyberslicer Mode ON,STSTR_NCON,,,,Režim kybersekače ZAP,Cyberschnetzelmodus AN,,,Modo Cibercorte ACTIVADO,,,,,Modalità Cyberslicer ATTIVADA,,전자마귀 모드 ON,,,,,Режим кибер-резака вкл.,
|
||||
Cyberslicer Mode OFF,STSTR_NCOFF,,,,Režim kybersekače VYP,Cyberschnetzelmodus AUS,,,Modo Cibercorte DESACTIVADO,,,,,Modalità Cyberslicer DISATTIVADA,,전자마귀 모드 OFF,,,,,Режим кибер-резака откл.,
|
||||
Selection: Impossible ,STSTR_NOMUS,,,,Nemožný výběr,Falsche Auswahl,,Malebla Elekto,Selección impossible,,Valinta ei mahdollinen,Séléction Impossible!,Lehetetlen Kiválasztás,Selezione impossibile,,선택 불가능,Niemożliwy wybór,Seleção impossível,,,Выбор: Невозможен,НЕМОГУЋИ ИЗБОР
|
||||
",STSTR_CLEV,,,,Příjezd do...,Angekommen bei...,,,Ahora llegando a...,,,On arrive maintenant à:,,Arrivando a...,今到着した...,이동하는 중...,,Agora chegando em ...,,,Переходим на...,
|
||||
...gonna fry your ass!,STSTR_CHOPPERS,"Printed when entering the idchoppers cheat, which gives the player a chainsaw",,,...ti upeče prdel!,...ich brate deinen Arsch!,,,... ¡voy a freirte el trasero!,,,...C'est l'heure de botter du cul!,,....ti friggerà il culo!,...ケツまくれ!,... 지져버리겠어!,,,,,...поджарит твою задницу!,
|
||||
"inVuln, Str, Inviso, Rad, Allmap, or Lite-amp?",STSTR_BEHOLD,"Hacx's content here was totally useless so it got removed. However, this string has to be defined and minimally altered so that the Dehacked replacement is not being triggered.",,,"nesmrt(V), Síla, nevId, Rad, mApa nebo světLo","inVuln, Str, Inviso, Rad, Allmap, oder Lite-amp",,"inVuln, Str, Inviso, Rad, Allmap, aŭ Lite-amp","inVuln, Str, Inviso, Rad, Allmap, o Lite-amp.",,"haavoittumattomuus (V), voima (S), näkymättömyys (I), koko kartta (A) tai valonvahvistus (L)","in V ulnérable, S urpuissance, I nvisible, p R otection, c A rte, où L umière?","Sérthet (V), Berz (S), Láthat(i), Sugár(R), Térkép(A), vagy Fény Sisak(L)","inVuln, berSerk, Invisib, tuta anti-Rad, mAppa tutta, o amplif-Luce","V,I,S,R,A,Lのどれだ?","무적, 광전사, 투명, 보호복, 지도, 아니면 바이저","niezniszczalność (V), siła (S), niewidzialność (I), kombinezon (R), mapa (A) lub gogle noktowizyjne (L)","inVuln., berSerk, Invisib., anti-Rad., mApa completo ou amplificação de Luz",,,"Бессм. (V), берс. (S), нев. (I), кос. (R), крт. (A), виз (L).","нерањ., снага, невидљ., радиј., мапа или ноћ. визор"
|
||||
Let's Get Serious!,STSTR_BEHOLDX,,,,Teď je to vážné!,Es wird ernst!,,,¡Vamos en Serio!,,,Passons aux choses sérieuses!,,Prendiamoci sul serio!,マジになったぜ!,철들 때다!,,Vamos ficar sérios!,,,А теперь серьёзно!,
|
||||
Cyberslicer Mode ON,STSTR_NCON,,,,Režim kybersekače ZAP,Cyberschnetzelmodus AN,,,Modo Cibercorte ACTIVADO,,,,,Modalità Cyberslicer ATTIVADA,サイバースライサーモード オン,전자마귀 모드 ON,,,,,Режим кибер-резака вкл.,
|
||||
Cyberslicer Mode OFF,STSTR_NCOFF,,,,Režim kybersekače VYP,Cyberschnetzelmodus AUS,,,Modo Cibercorte DESACTIVADO,,,,,Modalità Cyberslicer DISATTIVADA,サイバースライサーモード オフ,전자마귀 모드 OFF,,,,,Режим кибер-резака откл.,
|
||||
Selection: Impossible ,STSTR_NOMUS,,,,Nemožný výběr,Falsche Auswahl,,Malebla Elekto,Selección impossible,,Valinta ei mahdollinen,Séléction Impossible!,Lehetetlen Kiválasztás,Selezione impossibile,選択: 不可能,선택 불가능,Niemożliwy wybór,Seleção impossível,,,Выбор: Невозможен,НЕМОГУЋИ ИЗБОР
|
||||
"Pump Up The Volume
|
||||
",STSTR_MUS,Should probably not be translated...,,,Zesil to!,,,,,,,,,,,볼륨을 올려라!,,,,,Подкрутите громкость,
|
||||
INIT-Twitch n'Kill Mode,STSTR_KFAADDED,,,,Inicializuji režim Twitch and Kill,Initiiere Twitch'n Kill-Modus,,,INIT-Modo Tirar a Matar,,,,,Iniziare Twitch n'Kill Mode,,때리고 죽이는 모드 ON,,,,,ИНИЦ: режим Кликай-И-Убивай,
|
||||
"So be it, Hacker.",STSTR_FAADDED,,,,"Budiž, Hackeře.","So sei es, Hacker.",,,"Que así sea, Hacker.",,,"Qu'il en soit ainsi, hacker.",,"Cosi' sia, Hacker.",,"마음대로 해, 해커 양반.",,"Assim seja, Hacker.",,,"Да будет так, Хакер.",
|
||||
Cyberpotence Mode ON,STSTR_DQDON,,,,Režim kybermoci ZAP,Cyberpotenzmodus AN,,,Modo Ciberpotencia ACTIVADO,,,,,Modo Cyberpotenza ATTIVADA,,전지전능 모드 ON,,Ciberpotência ATIVADO,,,Режим Кибер-улучшения вкл.,
|
||||
Cyberpotence Mode OFF,STSTR_DQDOFF,,,,Režim kybermoci VYP,Cyberpotenzmodus AUS,,,Modo Ciberpotencia DESACTIVADO,,,,,Modo Cyberpotenza DISATTIVADA,,전지전능 모드 OFF,,Ciberpotência DESATIVADO,,,Режим Кибер-улучшения откл.,
|
||||
Tracking ON,AMSTR_FOLLOWON,,,,Sledování ZAP,Verfolgung AN,,,Seguimiento ACTIVADO,,,,,Mappa scorribile DISATTIVATA,,추적 모드 ON,,Modo de seguimento ATIVADO,,,Сопровождение вкл.,
|
||||
Tracking OFF,AMSTR_FOLLOWOFF,,,,Sledování VYP,Verfolgung AUS,,,Seguimiento DESACTIVADO,,,,,Mappa scorribile ATTIVATA,,추적 모드 OFF,,Modo de seguimento DESATIVADO,,,Сопровождение откл.,
|
||||
- press Y to run away! -,DOSY,,,,- stiskni Y pro útěk! -,- drücke Y um wegzurennen -,,,- ¡pulsa Y para escapar! - ,,,-Appuie sur Y pour t'échapper!-,,- premere Y per scappare! -,,- 달아날려먼 Y 키를 눌러! -,,- Aperte Y para fugir! -,- Carrega Y para fugir! -,,"- нажми «Y», чтобы сбежать! -",
|
||||
",STSTR_MUS,Should probably not be translated...,,,Zesil to!,,,,,,,,,,音量を上げろよ,볼륨을 올려라!,,,,,Подкрутите громкость,
|
||||
INIT-Twitch n'Kill Mode,STSTR_KFAADDED,,,,Inicializuji režim Twitch and Kill,Initiiere Twitch'n Kill-Modus,,,INIT-Modo Tirar a Matar,,,,,Iniziare Twitch n'Kill Mode,INIT-Twitch n'Killモード,때리고 죽이는 모드 ON,,,,,ИНИЦ: режим Кликай-И-Убивай,
|
||||
"So be it, Hacker.",STSTR_FAADDED,,,,"Budiž, Hackeře.","So sei es, Hacker.",,,"Que así sea, Hacker.",,,"Qu'il en soit ainsi, hacker.",,"Cosi' sia, Hacker.",好きにしろ、ハッカー。,"마음대로 해, 해커 양반.",,"Assim seja, Hacker.",,,"Да будет так, Хакер.",
|
||||
Cyberpotence Mode ON,STSTR_DQDON,,,,Režim kybermoci ZAP,Cyberpotenzmodus AN,,,Modo Ciberpotencia ACTIVADO,,,,,Modo Cyberpotenza ATTIVADA,サイバーポテンスモード オン,전지전능 모드 ON,,Ciberpotência ATIVADO,,,Режим Кибер-улучшения вкл.,
|
||||
Cyberpotence Mode OFF,STSTR_DQDOFF,,,,Režim kybermoci VYP,Cyberpotenzmodus AUS,,,Modo Ciberpotencia DESACTIVADO,,,,,Modo Cyberpotenza DISATTIVADA,サイバーポテンスモード オフ,전지전능 모드 OFF,,Ciberpotência DESATIVADO,,,Режим Кибер-улучшения откл.,
|
||||
Tracking ON,AMSTR_FOLLOWON,,,,Sledování ZAP,Verfolgung AN,,,Seguimiento ACTIVADO,,,,,Mappa scorribile DISATTIVATA,トラッキング オン,추적 모드 ON,,Modo de seguimento ATIVADO,,,Сопровождение вкл.,
|
||||
Tracking OFF,AMSTR_FOLLOWOFF,,,,Sledování VYP,Verfolgung AUS,,,Seguimiento DESACTIVADO,,,,,Mappa scorribile ATTIVATA,トラッキング オフ,추적 모드 OFF,,Modo de seguimento DESATIVADO,,,Сопровождение откл.,
|
||||
- press Y to run away! -,DOSY,,,,- stiskni Y pro útěk! -,- drücke Y um wegzurennen -,,,- ¡pulsa Y para escapar! - ,,,-Appuie sur Y pour t'échapper!-,,- premere Y per scappare! -,-Y でトンズラだ!-,- 달아날려먼 Y 키를 눌러! -,,- Aperte Y para fugir! -,- Carrega Y para fugir! -,,"- нажми «Y», чтобы сбежать! -",
|
||||
"Are you insane or maladjusted?
|
||||
Well? Yes or No!",ENDGAME,,,,"Jsi blb@[adj_cs] nebo jen naveden@[adj_cs]?
|
||||
Tak? Jo nebo ne?","Bist du verrückt oder mies gelaunt?
|
||||
Also? Ja oer Nein?",,,"¿Estás loc@[ao_esp] o descolocad@[ao_esp]?
|
||||
¿Y bien? ¿Sí o No?",,,Vous êtes fou où malajusté? Eh bien? Oui où non?,,"Sei pazzo o disadattato?
|
||||
Allora? Sì o no!",,"부적응은 안 하겠지? 그렇겠지?
|
||||
Allora? Sì o no!","お前はイカれた社会不適合者だろ?
|
||||
あぁ?イエスかノーか言え!","부적응은 안 하겠지? 그렇겠지?
|
||||
자신 있으면 선택해!",,"Você está louco ou desajustado?
|
||||
Bem? Sim ou não!",,,"Ты дурак или родом так?
|
||||
Отвечай! Да (Y) или нет (N)?",
|
||||
|
@ -709,7 +710,10 @@ Pulsa Y para morir.",,,"Vous êtes sûr? Vous n'arriverez pas à tenir le coup,
|
|||
Appuyez sur Y pour mourir.",,"Sei sicura? Non puoi gestire
|
||||
questa abilità, hacker!
|
||||
|
||||
Premere Y per morire. ",,"그렇게 만만하다면 말리지는 않을게.
|
||||
Premere Y per morire. ","本気か?
|
||||
アンタの手に負えないぞ、ハッカー!
|
||||
|
||||
死にたきゃYを押せ。","그렇게 만만하다면 말리지는 않을게.
|
||||
어차피 너에겐 복잡할 테니까, 해커 양반.
|
||||
|
||||
준비됐으면 Y 키를 눌러.",,"Tem certeza? Você não pode lidar
|
||||
|
@ -753,7 +757,11 @@ Nyomj Y-t vagy N-t.","Sovrascrivere il salvataggio
|
|||
|
||||
'%s'?
|
||||
|
||||
Premi Y oppure N.",,"빠른 저장?
|
||||
Premi Y oppure N.","この名称で上書きするのか?
|
||||
|
||||
'%s'
|
||||
|
||||
YかNで答えろ。","빠른 저장?
|
||||
|
||||
'%s'
|
||||
|
||||
|
@ -810,7 +818,11 @@ Nyomj Y-t vagy N-t.","Vuoi fare un quickload della partita
|
|||
|
||||
'%s'?
|
||||
|
||||
Premi Y oppure N.",,"빠른 불러오기?
|
||||
Premi Y oppure N.","この名称をすぐロードするのか?
|
||||
|
||||
'%s'
|
||||
|
||||
YかNで答えろ。","빠른 불러오기?
|
||||
|
||||
'%s'
|
||||
|
||||
|
@ -835,20 +847,20 @@ Carrega Y ou N.",,"Загрузить файл
|
|||
„%s“?
|
||||
|
||||
Притисните Y или N."
|
||||
Thug,CC_THUG,,,,Pobuda,Scherge,,,Matón,,,Brute,,Tazza,,서그,,Rufião,,,Головорез,
|
||||
Android,CC_ANDROID,,,,,,,,Androide,,,Androïde,,,,안드로이드,,Andróide,,,Андроид,
|
||||
ICE,CC_ICE,,,,,,,,,,,,,,,아이스,,,,,ЛЁД,
|
||||
Buzzer,CC_BUZZER,,,,Bzučák,Summer,,,Zumbador,,,,,Cicalino,,버저,,Buzina,,,Летун,
|
||||
D-Man,CC_DMAN,,,,,,,,,,,,,,,디-맨,,,,,Д-Мэн,
|
||||
Phage,CC_PHAGE,,,,Fág,,,,Fago,,,,,Fago,,페이지,,Fago,,,Пожиратель,
|
||||
Monstruct,CC_MONSTRUCT,,,,Monstrukce,Monstrukt,,,,,,,,Mostrutto,,몬스트럭트,,,,,Монструкт,
|
||||
Mecha Maniac,CC_MECH,,,,Mechamaniak,,,,Meca-Maníaco,,,Mécha-maniaque,,Mecha Maniaco,,메카 메니악,,Meca-Maníaco,,,Механоман,
|
||||
Terminatrix,CC_TERMI,,,,,,,,,,,,,,,터미네트릭스,,,,,Терминатриса,
|
||||
Thorn Thing,CC_THORN,,,,Bodlák,Dornending,,,Cosa Espinosa,,,Truc épineux,,,,쏜 씽,,Coisa Espinhosa,,,Тернистая тварь,
|
||||
Majong 7,CC_MAJONG,,,,,,,,,,,,,,,마작 7호,,,,,Маджонг 7,
|
||||
Dan Evanger,CC_HERO,,,,,,,,,,,,,,,댄 에반저,,,,,Дэн Эвенджер,
|
||||
Please don't shoot!,SKILL_BABY,,,,"Nestřílej, prosím!",Bitte schieß nicht!,,,¡Por favor no dispares!,,,"Pitié, ne tirez pas!",,"Ti prego, non sparare!",,쏘지 마세요!,,"Por favor, não atire!",,,"Не стреляй, пожалуйста!",
|
||||
"Aargh, I need health!",SKILL_EASY,,,,Potřebuju zdraví!,Ich brauche Gesundheit!,,,"¡Aargh, necesito salud!",,,"Aargh, des soins!",,"Aargh, ho bisogno di salute!",,체력이 필요해!,,"Aargh, preciso de saúde!",,,"А-а-ргх, мне нужно здоровье!",
|
||||
Let's rip them apart!,SKILL_NORMAL,,,,Rozsekejme je na kusy!,Lass uns sie zerfetzen!,,,¡Rompámoslos en pedazos!,,,J'en fais de la bouillie!,,Facciamoli a pezzi!,,갈기갈기 찢어버려!,,Vamos despedaçá-los!,,,Разорвём их на куски!,
|
||||
I am immortal!,SKILL_HARD,,,,Jsem nesmrtelný!,Ich bin unsterblich!,,,¡Soy inmortal!,,,Je suis immortel!,,Sono immortale!,,난 무적이다!,,Eu sou imortal!,,,Я бессмертен!,
|
||||
Insanity!,SKILL_NIGHTMARE,,,,Šílenství!,Wahnsinn!,,,¡Locura!,,,Folie!,,Follia!,,코드명: 광기!,,Insanidade!,,,Безумие!,
|
||||
Thug,CC_THUG,,,,Pobuda,Scherge,,,Matón,,,Brute,,Tazza,チンピラ,서그,,Rufião,,,Головорез,
|
||||
Android,CC_ANDROID,,,,,,,,Androide,,,Androïde,,,アンドロイド,안드로이드,,Andróide,,,Андроид,
|
||||
ICE,CC_ICE,,,,,,,,,,,,,,アイス,아이스,,,,,ЛЁД,
|
||||
Buzzer,CC_BUZZER,,,,Bzučák,Summer,,,Zumbador,,,,,Cicalino,ブザー,버저,,Buzina,,,Летун,
|
||||
D-Man,CC_DMAN,,,,,,,,,,,,,,D-Man,디-맨,,,,,Д-Мэн,
|
||||
Phage,CC_PHAGE,,,,Fág,,,,Fago,,,,,Fago,ファージ,페이지,,Fago,,,Пожиратель,
|
||||
Monstruct,CC_MONSTRUCT,,,,Monstrukce,Monstrukt,,,,,,,,Mostrutto,モンストラクト,몬스트럭트,,,,,Монструкт,
|
||||
Mecha Maniac,CC_MECH,,,,Mechamaniak,,,,Meca-Maníaco,,,Mécha-maniaque,,Mecha Maniaco,メカマニア,메카 메니악,,Meca-Maníaco,,,Механоман,
|
||||
Terminatrix,CC_TERMI,,,,,,,,,,,,,,ターミネイトリクス,터미네트릭스,,,,,Терминатриса,
|
||||
Thorn Thing,CC_THORN,,,,Bodlák,Dornending,,,Cosa Espinosa,,,Truc épineux,,,ソーンツィン,쏜 씽,,Coisa Espinhosa,,,Тернистая тварь,
|
||||
Majong 7,CC_MAJONG,,,,,,,,,,,,,,マージャン 7,마작 7호,,,,,Маджонг 7,
|
||||
Dan Evanger,CC_HERO,,,,,,,,,,,,,,ダン エブァンガー,댄 에반저,,,,,Дэн Эвенджер,
|
||||
Please don't shoot!,SKILL_BABY,,,,"Nestřílej, prosím!",Bitte schieß nicht!,,,¡Por favor no dispares!,,,"Pitié, ne tirez pas!",,"Ti prego, non sparare!",撃たないでくれ!,쏘지 마세요!,,"Por favor, não atire!",,,"Не стреляй, пожалуйста!",
|
||||
"Aargh, I need health!",SKILL_EASY,,,,Potřebuju zdraví!,Ich brauche Gesundheit!,,,"¡Aargh, necesito salud!",,,"Aargh, des soins!",,"Aargh, ho bisogno di salute!",キメてくれ!,체력이 필요해!,,"Aargh, preciso de saúde!",,,"А-а-ргх, мне нужно здоровье!",
|
||||
Let's rip them apart!,SKILL_NORMAL,,,,Rozsekejme je na kusy!,Lass uns sie zerfetzen!,,,¡Rompámoslos en pedazos!,,,J'en fais de la bouillie!,,Facciamoli a pezzi!,ばらまいてやれ!,갈기갈기 찢어버려!,,Vamos despedaçá-los!,,,Разорвём их на куски!,
|
||||
I am immortal!,SKILL_HARD,,,,Jsem nesmrtelný!,Ich bin unsterblich!,,,¡Soy inmortal!,,,Je suis immortel!,,Sono immortale!,とっととくたばれ!,난 무적이다!,,Eu sou imortal!,,,Я бессмертен!,
|
||||
Insanity!,SKILL_NIGHTMARE,,,,Šílenství!,Wahnsinn!,,,¡Locura!,,,Folie!,,Follia!,イカれてやがる!,코드명: 광기!,,Insanidade!,,,Безумие!,
|
|
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/0402.lmp
Normal file
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/0402.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/0409.lmp
Normal file
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/0409.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/040A.lmp
Normal file
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/040A.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/040B.lmp
Normal file
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/040B.lmp
Normal file
Binary file not shown.
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/040F.lmp
Normal file
BIN
wadsrc_extra/static/filter/harmony/fonts/defsmallfont/040F.lmp
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue