Merge branch 'back_to_basics2' into InputStuffs

# Conflicts:
#	source/core/gamestruct.h
#	source/games/duke/src/duke3d.h
#	source/sw/src/input.cpp
#	source/sw/src/player.cpp
This commit is contained in:
Mitchell Richters 2020-09-07 07:51:37 +10:00
commit fa9fa88fce
74 changed files with 1288 additions and 1847 deletions

View file

@ -778,6 +778,7 @@ set (PCH_SOURCES
build/src/voxmodel.cpp
core/movie/playmve.cpp
core/automap.cpp
core/cheats.cpp
core/cheathandler.cpp
core/mathutil.cpp

View file

@ -45,7 +45,6 @@ set( PCH_SOURCES
src/inifile.cpp
src/levels.cpp
src/loadsave.cpp
src/map2d.cpp
src/messages.cpp
src/mirrors.cpp
src/misc.cpp

View file

@ -26,6 +26,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "build.h"
#include "automap.h"
#include "pragmas.h"
#include "mmulti.h"
#include "common.h"
@ -6191,7 +6192,7 @@ spritetype * actSpawnThing(int nSector, int x, int y, int z, int nThingType)
pSprite->xrepeat = pThingInfo->xrepeat;
if (pThingInfo->yrepeat)
pSprite->yrepeat = pThingInfo->yrepeat;
SetBitString(show2dsprite, pSprite->index);
show2dsprite.Set(pSprite->index);
switch (nThingType) {
case kThingVoodooHead:
pXThing->data1 = 0;
@ -6307,7 +6308,7 @@ spritetype* actFireMissile(spritetype *pSprite, int a2, int a3, int a4, int a5,
}
spritetype *pMissile = actSpawnSprite(pSprite->sectnum, x, y, z, 5, 1);
int nMissile = pMissile->index;
SetBitString(show2dsprite, nMissile);
show2dsprite.Set(nMissile);
pMissile->type = nType;
pMissile->shade = pMissileInfo->shade;
pMissile->pal = 0;

View file

@ -33,7 +33,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "endgame.h"
#include "aistate.h"
#include "map2d.h"
#include "loadsave.h"
#include "sectorfx.h"
#include "choke.h"

View file

@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "common.h"
#include "common_game.h"
#include "g_input.h"
#include "automap.h"
#include "db.h"
#include "blood.h"
@ -62,7 +63,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "choke.h"
#include "d_net.h"
#include "v_video.h"
#include "map2d.h"
BEGIN_BLD_NS
@ -495,8 +495,6 @@ void GameInterface::Startup()
void GameInterface::Render()
{
gZoom = GetAutomapZoom(gZoom);
gViewMap.nZoom = gZoom;
drawtime.Reset();
drawtime.Clock();
viewDrawScreen();

View file

@ -97,7 +97,7 @@ struct GameInterface : ::GameInterface
void NewGame(MapRecord *sng, int skill) override;
void NextLevel(MapRecord* map, int skill) override;
void LevelCompleted(MapRecord* map, int skill) override;
bool DrawAutomapPlayer(int x, int y, int z, int a) override;
GameStats getStats() override;
};

View file

@ -31,7 +31,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "controls.h"
#include "globals.h"
#include "levels.h"
#include "map2d.h"
#include "view.h"
#include "d_event.h"
#include "gamestate.h"
@ -164,19 +163,11 @@ void GetInputInternal(InputPacket &inputParm, ControlInfo* const hidInput)
input.q16horz -= FloatToFixed(scaleAdjustmentToInterval(hidInput->dpitch / mlookScale));
if (!automapFollow && automapMode != am_off)
{
gViewMap.turn += input.q16avel<<2;
gViewMap.forward += input.fvel;
gViewMap.strafe += input.svel;
input.q16avel = 0;
input.fvel = 0;
input.svel = 0;
}
inputParm.fvel = clamp(inputParm.fvel + input.fvel, -2048, 2048);
inputParm.svel = clamp(inputParm.svel + input.svel, -2048, 2048);
inputParm.q16avel += input.q16avel;
inputParm.q16horz = clamp(inputParm.q16horz + input.q16horz, IntToFixed(-127) >> 2, IntToFixed(127) >> 2);
if (gMe && gMe->pXSprite && gMe->pXSprite->health != 0 && !paused)
{
int upAngle = 289;

View file

@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "zstring.h"
#include "m_crc32.h"
#include "md4.h"
#include "automap.h"
//#include "actor.h"
#include "globals.h"
@ -594,9 +595,7 @@ const int nXWallSize = 24;
int dbLoadMap(const char *pPath, int *pX, int *pY, int *pZ, short *pAngle, short *pSector, unsigned int *pCRC) {
int16_t tpskyoff[256];
show2dsector.Zero();
memset(show2dwall, 0, sizeof(show2dwall));
memset(show2dsprite, 0, sizeof(show2dsprite));
ClearAutomap();
#ifdef NOONE_EXTENSIONS
gModernMap = false;
#endif

View file

@ -33,7 +33,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "endgame.h"
#include "aistate.h"
#include "map2d.h"
#include "loadsave.h"
#include "sectorfx.h"
#include "choke.h"

View file

@ -26,7 +26,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "mmulti.h"
#include "common_game.h"
#include "levels.h"
#include "map2d.h"
#include "view.h"
#include "v_2ddrawer.h"
#include "v_draw.h"
@ -34,200 +33,5 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
BEGIN_BLD_NS
void sub_2541C(int x, int y, int z, short a)
{
int tmpydim = (xdim * 5) / 8;
renderSetAspect(65536, divscale16(tmpydim * 320, xdim * 200));
int nCos = z*sintable[(0-a)&2047];
int nSin = z*sintable[(1536-a)&2047];
int nCos2 = mulscale16(nCos, yxaspect);
int nSin2 = mulscale16(nSin, yxaspect);
for (int i = 0; i < numsectors; i++)
{
if (gFullMap || show2dsector[i])
{
int nStartWall = sector[i].wallptr;
int nEndWall = nStartWall+sector[i].wallnum;
int nZCeil = sector[i].ceilingz;
int nZFloor = sector[i].floorz;
walltype *pWall = &wall[nStartWall];
for (int j = nStartWall; j < nEndWall; j++, pWall++)
{
int nNextWall = pWall->nextwall;
if (nNextWall < 0)
continue;
if (sector[pWall->nextsector].ceilingz == nZCeil && sector[pWall->nextsector].floorz == nZFloor
&& ((wall[nNextWall].cstat | pWall->cstat) & 0x30) == 0)
continue;
if (gFullMap || show2dsector[pWall->nextsector])
continue;
int wx = pWall->x-x;
int wy = pWall->y-y;
int cx = xdim<<11;
int x1 = cx+dmulscale16(wx, nCos, -wy, nSin);
int cy = ydim<<11;
int y1 = cy+dmulscale16(wy, nCos2, wx, nSin2);
walltype *pWall2 = &wall[pWall->point2];
wx = pWall2->x-x;
wy = pWall2->y-y;
int x2 = cx+dmulscale16(wx, nCos, -wy, nSin);
int y2 = cy+dmulscale16(wy, nCos2, wx, nSin2);
renderDrawLine(x1,y1,x2,y2,24);
}
}
}
int nPSprite = gView->pSprite->index;
for (int i = 0; i < numsectors; i++)
{
if (gFullMap || show2dsector[i])
{
for (int nSprite = headspritesect[i]; nSprite >= 0; nSprite = nextspritesect[nSprite])
{
spritetype *pSprite = &sprite[nSprite];
if (nSprite == nPSprite)
continue;
if (pSprite->cstat&32768)
continue;
}
}
}
for (int i = 0; i < numsectors; i++)
{
if (gFullMap || show2dsector[i])
{
int nStartWall = sector[i].wallptr;
int nEndWall = nStartWall+sector[i].wallnum;
walltype *pWall = &wall[nStartWall];
int nNWall = -1;
int x1, y1, x2 = 0, y2 = 0;
for (int j = nStartWall; j < nEndWall; j++, pWall++)
{
int nNextWall = pWall->nextwall;
if (nNextWall >= 0)
continue;
if (!tilesiz[pWall->picnum].x || !tilesiz[pWall->picnum].y)
continue;
if (nNWall == j)
{
x1 = x2;
y1 = y2;
}
else
{
int wx = pWall->x-x;
int wy = pWall->y-y;
x1 = (xdim<<11)+dmulscale16(wx, nCos, -wy, nSin);
y1 = (ydim<<11)+dmulscale16(wy, nCos2, wx, nSin2);
}
nNWall = pWall->point2;
walltype *pWall2 = &wall[nNWall];
int wx = pWall2->x-x;
int wy = pWall2->y-y;
x2 = (xdim<<11)+dmulscale16(wx, nCos, -wy, nSin);
y2 = (ydim<<11)+dmulscale16(wy, nCos2, wx, nSin2);
renderDrawLine(x1,y1,x2,y2,24);
}
}
}
videoSetCorrectedAspect();
for (int i = connecthead; i >= 0; i = connectpoint2[i])
{
if (automapFollow || gView->nPlayer != i)
{
PLAYER *pPlayer = &gPlayer[i];
spritetype *pSprite = pPlayer->pSprite;
int px = pSprite->x-x;
int py = pSprite->y-y;
int pa = (pSprite->ang-a)&2047;
if (i == gView->nPlayer)
{
px = 0;
py = 0;
pa = 0;
}
int x1 = dmulscale16(px, nCos, -py, nSin);
int y1 = dmulscale16(py, nCos2, px, nSin2);
if (i == gView->nPlayer || gGameOptions.nGameType == 1)
{
int nTile = pSprite->picnum;
int ceilZ, ceilHit, floorZ, floorHit;
GetZRange(pSprite, &ceilZ, &ceilHit, &floorZ, &floorHit, (pSprite->clipdist<<2)+16, CLIPMASK0, PARALLAXCLIP_CEILING|PARALLAXCLIP_FLOOR);
int nTop, nBottom;
GetSpriteExtents(pSprite, &nTop, &nBottom);
int nScale = mulscale((pSprite->yrepeat+((floorZ-nBottom)>>8))*z, yxaspect, 16);
nScale = ClipRange(nScale, 8000, 65536<<1);
// Players on automap
double x = xdim/2. + x1 / double(1<<12);
double y = ydim/2. + y1 / double(1<<12);
// This very likely needs fixing later
DrawTexture(twod, tileGetTexture(nTile, true), x, y, DTA_FullscreenScale, FSMode_Fit320x200, DTA_ViewportX, windowxy1.x, DTA_ViewportY, windowxy1.y,
DTA_ViewportWidth, windowxy2.x - windowxy1.x+1, DTA_ViewportHeight, windowxy2.y - windowxy1.y+1, DTA_Alpha, (pSprite->cstat&2? 0.5:1.), TAG_DONE);
}
}
}
}
void CViewMap::sub_25C38(int _x, int _y, int _angle, short zoom)
{
x = _x;
y = _y;
angle = _angle;
nZoom = zoom;
forward = 0;
turn = 0;
strafe = 0;
}
void CViewMap::sub_25C74(void)
{
int tm = 0;
if (windowxy1.x > 0)
{
setViewport(Hud_Stbar);
tm = 1;
}
// only clear the actual window.
twod->AddColorOnlyQuad(windowxy1.x, windowxy1.y, (windowxy2.x + 1) - windowxy1.x, (windowxy2.y + 1) - windowxy1.y, 0xff000000);
renderDrawMapView(x,y,nZoom>>1,angle);
sub_2541C(x,y,nZoom>>1,angle);
if (tm)
setViewport(hud_size);
}
void CViewMap::sub_25DB0(spritetype *pSprite)
{
nZoom = gZoom;
if (automapFollow)
{
x = pSprite->x;
y = pSprite->y;
angle = pSprite->ang;
}
else
{
angle += FixedToInt(turn)>>3;
x += mulscale24(forward>>8, Cos(angle));
y += mulscale24(forward>>8, Sin(angle));
x -= mulscale24(strafe>>8, Cos(angle+512));
y -= mulscale24(strafe>>8, Sin(angle+512));
forward = 0;
strafe = 0;
turn = 0;
}
sub_25C74();
}
void CViewMap::sub_25E84(int *_x, int *_y)
{
if (_x)
*_x = x;
if (_y)
*_y = y;
}
CViewMap gViewMap;
END_BLD_NS

View file

@ -1,43 +0,0 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 2010-2019 EDuke32 developers and contributors
Copyright (C) 2019 Nuke.YKT
This file is part of NBlood.
NBlood is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
#pragma once
#include "build.h"
BEGIN_BLD_NS
class CViewMap {
public:
char bActive;
int x, y, nZoom;
short angle;
int forward, strafe;
fixed_t turn;
void sub_25C38(int, int, int, short);
void sub_25C74(void);
void sub_25DB0(spritetype *pSprite);
void sub_25E84(int *, int*);
};
extern CViewMap gViewMap;
END_BLD_NS

View file

@ -39,6 +39,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "cheathandler.h"
#include "d_protocol.h"
#include "gamestate.h"
#include "automap.h"
BEGIN_BLD_NS

View file

@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include <stdlib.h>
#include <string.h>
#include "automap.h"
#include "compat.h"
#include "build.h"
#include "mmulti.h"
@ -37,7 +38,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "globals.h"
#include "levels.h"
#include "loadsave.h"
#include "map2d.h"
#include "player.h"
#include "seq.h"
#include "sound.h"
@ -48,6 +48,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "nnexts.h"
#include "gstrings.h"
#include "gamestate.h"
#include "automap.h"
BEGIN_BLD_NS
@ -704,7 +705,7 @@ void playerStart(int nPlayer, int bNewLevel)
playerResetPosture(pPlayer);
seqSpawn(pDudeInfo->seqStartID, 3, pSprite->extra, -1);
if (pPlayer == gMe)
SetBitString(show2dsprite, pSprite->index);
show2dsprite.Set(pSprite->index);
int top, bottom;
GetSpriteExtents(pSprite, &top, &bottom);
pSprite->z -= bottom - pSprite->z;
@ -806,9 +807,6 @@ void playerStart(int nPlayer, int bNewLevel)
viewInitializePrediction();
gViewLook = pPlayer->q16look;
gViewAngle = pPlayer->q16ang;
gViewMap.x = pPlayer->pSprite->x;
gViewMap.y = pPlayer->pSprite->y;
gViewMap.angle = pPlayer->pSprite->ang;
}
if (IsUnderwaterSector(pSprite->sectnum))
{

View file

@ -33,7 +33,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "endgame.h"
#include "aistate.h"
#include "map2d.h"
#include "loadsave.h"
#include "sectorfx.h"
#include "choke.h"

View file

@ -33,7 +33,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "endgame.h"
#include "aistate.h"
#include "map2d.h"
#include "loadsave.h"
#include "sectorfx.h"
#include "choke.h"
@ -47,6 +46,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "v_font.h"
#include "glbackend/glbackend.h"
#include "statusbar.h"
#include "automap.h"
CVARD(Bool, hud_powerupduration, true, CVAR_ARCHIVE/*|CVAR_FRONTEND_BLOOD*/, "enable/disable displaying the remaining seconds for power-ups")

View file

@ -33,7 +33,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "endgame.h"
#include "aistate.h"
#include "map2d.h"
#include "loadsave.h"
#include "sectorfx.h"
#include "choke.h"
@ -45,6 +44,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "v_2ddrawer.h"
#include "v_video.h"
#include "v_font.h"
#include "statusbar.h"
#include "automap.h"
#include "glbackend/glbackend.h"
BEGIN_BLD_NS
@ -266,8 +267,6 @@ void viewDrawAimedPlayerName(void)
static TArray<uint8_t> lensdata;
int *lensTable;
int gZoom = 1024;
extern int dword_172CE0[16][3];
void viewInit(void)
@ -299,7 +298,6 @@ void viewInit(void)
dword_172CE0[i][1] = mulscale16(wrand(), 2048);
dword_172CE0[i][2] = mulscale16(wrand(), 2048);
}
gViewMap.sub_25C38(0, 0, gZoom, 0);
}
int othercameradist = 1280;
@ -597,6 +595,21 @@ int gLastPal = 0;
int32_t g_frameRate;
static void DrawMap(spritetype* pSprite)
{
int tm = 0;
if (windowxy1.x > 0)
{
setViewport(Hud_Stbar);
tm = 1;
}
DrawOverheadMap(pSprite->x, pSprite->y, pSprite->ang);
if (tm)
setViewport(hud_size);
}
void viewDrawScreen(bool sceneonly)
{
int nPalette = 0;
@ -985,7 +998,7 @@ void viewDrawScreen(bool sceneonly)
UpdateDacs(0, true); // keep the view palette active only for the actual 3D view and its overlays.
if (automapMode != am_off)
{
gViewMap.sub_25DB0(gView->pSprite);
DrawMap (gView->pSprite);
}
UpdateStatusBar();
int zn = ((gView->zWeapon-gView->zView-(12<<8))>>7)+220;
@ -1040,7 +1053,50 @@ bool GameInterface::GenerateSavePic()
FString GameInterface::GetCoordString()
{
return "Player pos is unknown"; // todo: output at least something useful.
FString out;
out.Format("pos= %d, %d, %d - angle = %2.3f",
gMe->pSprite->x, gMe->pSprite->y, gMe->pSprite->z, gMe->pSprite->ang);
return out;
}
bool GameInterface::DrawAutomapPlayer(int x, int y, int z, int a)
{
int nCos = z * sintable[(0 - a) & 2047];
int nSin = z * sintable[(1536 - a) & 2047];
int nCos2 = mulscale16(nCos, yxaspect);
int nSin2 = mulscale16(nSin, yxaspect);
int nPSprite = gView->pSprite->index;
for (int i = connecthead; i >= 0; i = connectpoint2[i])
{
PLAYER* pPlayer = &gPlayer[i];
spritetype* pSprite = pPlayer->pSprite;
int px = pSprite->x - x;
int py = pSprite->y - y;
int pa = (pSprite->ang - a) & 2047;
int x1 = dmulscale16(px, nCos, -py, nSin);
int y1 = dmulscale16(py, nCos2, px, nSin2);
if (i == gView->nPlayer || gGameOptions.nGameType == 1)
{
int nTile = pSprite->picnum;
int ceilZ, ceilHit, floorZ, floorHit;
GetZRange(pSprite, &ceilZ, &ceilHit, &floorZ, &floorHit, (pSprite->clipdist << 2) + 16, CLIPMASK0, PARALLAXCLIP_CEILING | PARALLAXCLIP_FLOOR);
int nTop, nBottom;
GetSpriteExtents(pSprite, &nTop, &nBottom);
int nScale = mulscale((pSprite->yrepeat + ((floorZ - nBottom) >> 8)) * z, yxaspect, 16);
nScale = ClipRange(nScale, 8000, 65536 << 1);
// Players on automap
double x = xdim / 2. + x1 / double(1 << 12);
double y = ydim / 2. + y1 / double(1 << 12);
// This very likely needs fixing later
DrawTexture(twod, tileGetTexture(nTile, true), x, y, DTA_ClipLeft, windowxy1.x, DTA_ClipTop, windowxy1.y, DTA_ScaleX, z/1536., DTA_ScaleY, z/1536., DTA_CenterOffset, true,
DTA_ClipRight, windowxy2.x + 1, DTA_ClipBottom, windowxy2.y + 1, DTA_Alpha, (pSprite->cstat & 2 ? 0.5 : 1.), TAG_DONE);
}
}
return true;
}

View file

@ -127,7 +127,6 @@ enum
#define kFontNum 5
extern int gZoom;
extern FFont *gFont[kFontNum];
extern VIEWPOS gViewPos;
extern int gViewIndex;

View file

@ -435,26 +435,6 @@ EXTERN int16_t headspritesect[MAXSECTORS+1], headspritestat[MAXSTATUS+1];
EXTERN int16_t prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES];
EXTERN int16_t nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES];
//These variables are for auto-mapping with the draw2dscreen function.
//When you load a new board, these bits are all set to 0 - since
//you haven't mapped out anything yet. Note that these arrays are
//bit-mapped.
//If you want draw2dscreen() to show sprite #54 then you say:
// spritenum = 54;
// show2dsprite[spritenum>>3] |= (1<<(spritenum&7));
//And if you want draw2dscreen() to not show sprite #54 then you say:
// spritenum = 54;
// show2dsprite[spritenum>>3] &= ~(1<<(spritenum&7));
EXTERN int automapping;
EXTERN FixedBitArray<MAXSECTORS> show2dsector;
EXTERN bool gFullMap;
EXTERN char show2dwall[(MAXWALLS+7)>>3];
EXTERN char show2dsprite[(MAXSPRITES+7)>>3];
EXTERN uint8_t gotpic[(MAXTILES+7)>>3];
EXTERN char gotsector[(MAXSECTORS+7)>>3];
@ -646,9 +626,6 @@ void videoInit();
void videoClearViewableArea(int32_t dacol);
void videoClearScreen(int32_t dacol);
void renderDrawMapView(int32_t dax, int32_t day, int32_t zoome, int16_t ang);
void renderDrawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint8_t col);
void drawlinergb(int32_t x1, int32_t y1, int32_t x2, int32_t y2, palette_t p);
void drawlinergb(int32_t x1, int32_t y1, int32_t x2, int32_t y2, PalEntry p);
class F2DDrawer;

View file

@ -1,3 +1,4 @@
#pragma once
// nobody uses these. What's so cool about naked numbers? :(
// system defines for status bits

View file

@ -10,6 +10,7 @@
#include "gl_load.h"
#include "build.h"
#include "automap.h"
#include "imagehelpers.h"
#include "common.h"
@ -1850,22 +1851,6 @@ void FillPolygon(int* rx1, int* ry1, int* xb1, int32_t npoints, int picnum, int
twod->AddPoly(tileGetTexture(picnum), points.Data(), points.Size(), indices.data(), indices.size(), translation, pe, rs, clipx1, clipy1, clipx2, clipy2);
}
void drawlinergb(int32_t x1, int32_t y1, int32_t x2, int32_t y2, PalEntry p)
{
twod->AddLine(x1 / 4096.f, y1 / 4096.f, x2 / 4096.f, y2 / 4096.f, windowxy1.x, windowxy1.y, windowxy2.x, windowxy2.y, p);
}
void drawlinergb(int32_t x1, int32_t y1, int32_t x2, int32_t y2, palette_t p)
{
drawlinergb(x1, y1, x2, y2, PalEntry(p.r, p.g, p.b));
}
void renderDrawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint8_t col)
{
drawlinergb(x1, y1, x2, y2, GPalette.BaseColors[GPalette.Remap[col]]);
}
//==========================================================================
//
//
@ -2151,10 +2136,7 @@ static FORCE_INLINE int32_t have_maptext(void)
static void enginePrepareLoadBoard(FileReader & fr, vec3_t *dapos, int16_t *daang, int16_t *dacursectnum)
{
initspritelists();
show2dsector.Zero();
Bmemset(show2dsprite, 0, sizeof(show2dsprite));
Bmemset(show2dwall, 0, sizeof(show2dwall));
ClearAutomap();
#ifdef USE_OPENGL
Polymost_prepare_loadboard();

View file

@ -6,6 +6,7 @@ Ken Silverman's official web site: http://www.advsys.net/ken
#include "build.h"
#include "automap.h"
#include "common.h"
#include "engine_priv.h"
#include "mdsprite.h"
@ -2633,7 +2634,7 @@ void polymost_drawrooms()
if (automapping)
{
for (int z=bunchfirst[closest]; z>=0; z=bunchp2[z])
show2dwall[thewall[z]>>3] |= pow2char[thewall[z]&7];
show2dwall.Set(thewall[z]);
}
numbunches--;
@ -3626,7 +3627,7 @@ void polymost_drawsprite(int32_t snum)
}
if (automapping == 1 && (unsigned)spritenum < MAXSPRITES)
show2dsprite[spritenum>>3] |= pow2char[spritenum&7];
show2dsprite.Set(spritenum);
_drawsprite_return:
;

View file

@ -54,6 +54,7 @@
#include "engineerrors.h"
#include "textures.h"
#include "texturemanager.h"
#include "base64.h"
extern DObject *WP_NOCHANGE;
bool save_full = false; // for testing. Should be removed afterward.
@ -771,6 +772,31 @@ error:
return buff;
}
//==========================================================================
//
//
//
//==========================================================================
FSerializer &FSerializer::SerializeMemory(const char *key, void* mem, size_t length)
{
if (isWriting())
{
auto array = base64_encode((const uint8_t*)mem, length);
AddString(key, (const char*)array.Data());
}
else
{
auto cp = GetString(key);
if (key)
{
base64_decode(mem, length, cp);
}
}
return *this;
}
//==========================================================================
//
//

View file

@ -95,6 +95,7 @@ public:
virtual FSerializer &Sprite(const char *key, int32_t &spritenum, int32_t *def);
// This is only needed by the type system.
virtual FSerializer& StatePointer(const char* key, void* ptraddr, bool *res);
FSerializer& SerializeMemory(const char* key, void* mem, size_t length);
FSerializer &StringPtr(const char *key, const char *&charptr); // This only retrieves the address but creates no permanent copy of the string unlike the regular char* serializer.
FSerializer &AddString(const char *key, const char *charptr);

573
source/core/automap.cpp Normal file
View file

@ -0,0 +1,573 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 1996, 2003 - 3D Realms Entertainment
Copyright (C) 2020 - Christoph Oelckers
This file is part of Duke Nukem 3D version 1.5 - Atomic Edition
Duke Nukem 3D is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Original Source: 1996 - Todd Replogle
Prepared for public release: 03/21/2003 - Charlie Wiederhold, 3D Realms
Modifications for JonoF's port by Jonathon Fowler (jf@jonof.id.au)
*/
//-------------------------------------------------------------------------
#include "automap.h"
#include "cstat.h"
#include "c_dispatch.h"
#include "c_cvars.h"
#include "gstrings.h"
#include "printf.h"
#include "serializer.h"
#include "v_2ddrawer.h"
#include "earcut.hpp"
#include "buildtiles.h"
#include "d_event.h"
#include "c_bind.h"
#include "gamestate.h"
#include "gamecontrol.h"
#include "quotemgr.h"
#include "v_video.h"
#include "gamestruct.h"
CVAR(Bool, am_followplayer, true, CVAR_ARCHIVE)
CVAR(Bool, am_rotate, true, CVAR_ARCHIVE)
CVAR(Bool, am_textfont, false, CVAR_ARCHIVE)
CVAR(Bool, am_showlabel, false, CVAR_ARCHIVE)
CVAR(Bool, am_nameontop, false, CVAR_ARCHIVE)
int automapMode;
static float am_zoomdir;
int follow_x = INT_MAX, follow_y = INT_MAX, follow_a = INT_MAX;
static int gZoom = 768;
bool automapping;
bool gFullMap;
FixedBitArray<MAXSECTORS> show2dsector;
FixedBitArray<MAXWALLS> show2dwall;
FixedBitArray<MAXSPRITES> show2dsprite;
static int x_min_bound = INT_MAX, y_min_bound, x_max_bound, y_max_bound;
CVAR(Color, am_twosidedcolor, 0xaaaaaa, CVAR_ARCHIVE)
CVAR(Color, am_onesidedcolor, 0xaaaaaa, CVAR_ARCHIVE)
CVAR(Color, am_playercolor, 0xaaaaaa, CVAR_ARCHIVE)
CVAR(Color, am_ovtwosidedcolor, 0xaaaaaa, CVAR_ARCHIVE)
CVAR(Color, am_ovonesidedcolor, 0xaaaaaa, CVAR_ARCHIVE)
CVAR(Color, am_ovplayercolor, 0xaaaaaa, CVAR_ARCHIVE)
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
CCMD(allmap)
{
if (!CheckCheatmode(true, false))
{
gFullMap = !gFullMap;
Printf("%s\n", GStrings(gFullMap ? "SHOW MAP: ON" : "SHOW MAP: OFF"));
}
}
CCMD(togglemap)
{
if (gamestate == GS_LEVEL)
{
automapMode++;
if (automapMode == am_count) automapMode = am_off;
if ((g_gameType & GAMEFLAG_BLOOD) && automapMode == am_overlay) automapMode = am_full; // todo: investigate if this can be re-enabled
}
}
CCMD(togglefollow)
{
am_followplayer = !am_followplayer;
auto msg = quoteMgr.GetQuote(am_followplayer ? 84 : 83);
if (!msg || !*msg) msg = am_followplayer ? GStrings("FOLLOW MODE ON") : GStrings("FOLLOW MODE Off");
Printf(PRINT_NOTIFY, "%s\n", msg);
if (am_followplayer) follow_x = INT_MAX;
}
CCMD(togglerotate)
{
am_rotate = !am_rotate;
auto msg = am_followplayer ? GStrings("TXT_ROTATE_ON") : GStrings("TXT_ROTATE_OFF");
Printf(PRINT_NOTIFY, "%s\n", msg);
if (am_followplayer) follow_x = INT_MAX;
}
CCMD(am_zoom)
{
if (argv.argc() >= 2)
{
am_zoomdir = (float)atof(argv[1]);
}
}
//==========================================================================
//
// AM_Responder
// Handle automap exclusive bindings.
//
//==========================================================================
bool AM_Responder(event_t* ev, bool last)
{
if (ev->type == EV_KeyDown || ev->type == EV_KeyUp)
{
if (am_followplayer)
{
// check for am_pan* and ignore in follow mode
const char* defbind = AutomapBindings.GetBind(ev->data1);
if (defbind && !strnicmp(defbind, "+am_pan", 7)) return false;
}
bool res = C_DoKey(ev, &AutomapBindings, nullptr);
if (res && ev->type == EV_KeyUp && !last)
{
// If this is a release event we also need to check if it released a button in the main Bindings
// so that that button does not get stuck.
const char* defbind = Bindings.GetBind(ev->data1);
return (!defbind || defbind[0] != '+'); // Let G_Responder handle button releases
}
return res;
}
return false;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
static void CalcMapBounds()
{
x_min_bound = INT_MAX;
y_min_bound = INT_MAX;
x_max_bound = INT_MIN;
y_max_bound = INT_MIN;
for (int i = 0; i < numwalls; i++)
{
// get map min and max coordinates
if (wall[i].x < x_min_bound) x_min_bound = wall[i].x;
if (wall[i].y < y_min_bound) y_min_bound = wall[i].y;
if (wall[i].x > x_max_bound) x_max_bound = wall[i].x;
if (wall[i].y > y_max_bound) y_max_bound = wall[i].y;
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void AutomapControl()
{
static int nonsharedtimer;
int ms = screen->FrameTime;
int interval;
int panvert = 0, panhorz = 0;
if (nonsharedtimer > 0 || ms < nonsharedtimer)
{
interval = ms - nonsharedtimer;
}
else
{
interval = 0;
}
nonsharedtimer = screen->FrameTime;
if (System_WantGuiCapture())
return;
if (automapMode != am_off)
{
const int keymove = 4;
if (am_zoomdir > 0)
{
gZoom = xs_CRoundToInt(gZoom * am_zoomdir);
}
else if (am_zoomdir < 0)
{
gZoom = xs_CRoundToInt(gZoom / -am_zoomdir);
}
am_zoomdir = 0;
double j = interval * (120. / 1000);
if (buttonMap.ButtonDown(gamefunc_Enlarge_Screen))
gZoom += (int)fmulscale6(j, max(gZoom, 256));
if (buttonMap.ButtonDown(gamefunc_Shrink_Screen))
gZoom -= (int)fmulscale6(j, max(gZoom, 256));
gZoom = clamp(gZoom, 48, 2048);
if (!am_followplayer)
{
if (buttonMap.ButtonDown(gamefunc_AM_PanLeft))
panhorz += keymove;
if (buttonMap.ButtonDown(gamefunc_AM_PanRight))
panhorz -= keymove;
if (buttonMap.ButtonDown(gamefunc_AM_PanUp))
panvert += keymove;
if (buttonMap.ButtonDown(gamefunc_AM_PanDown))
panvert -= keymove;
int momx = mulscale9(panvert, sintable[(follow_a + 512) & 2047]);
int momy = mulscale9(panvert, sintable[(follow_a) & 2047]);
momx += mulscale9(panhorz, sintable[(follow_a) & 2047]);
momy += mulscale9(panhorz, sintable[(follow_a + 1536) & 2047]);
follow_x += int((momx * j) / (gZoom * 4000.));
follow_y += int((momy * j) / (gZoom * 4000.));
if (x_min_bound == INT_MAX) CalcMapBounds();
follow_x = clamp(follow_x, x_min_bound, x_max_bound);
follow_y = clamp(follow_y, y_min_bound, y_max_bound);
}
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void SerializeAutomap(FSerializer& arc)
{
if (arc.BeginObject("automap"))
{
arc("automapping", automapping)
("fullmap", gFullMap)
// Only store what's needed. Unfortunately for sprites it is not that easy
.SerializeMemory("mappedsectors", show2dsector.Storage(), (numsectors + 7) / 8)
.SerializeMemory("mappedwalls", show2dwall.Storage(), (numwalls + 7) / 8)
.SerializeMemory("mappedsprites", show2dsprite.Storage(), MAXSPRITES / 8)
.EndObject();
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void ClearAutomap()
{
show2dsector.Zero();
show2dwall.Zero();
show2dsprite.Zero();
x_min_bound = INT_MAX;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void MarkSectorSeen(int i)
{
if (i >= 0)
{
show2dsector.Set(i);
auto wal = &wall[sector[i].wallptr];
for (int j = sector[i].wallnum; j > 0; j--, wal++)
{
i = wal->nextsector;
if (i < 0) continue;
if (wal->cstat & 0x0071) continue;
if (wall[wal->nextwall].cstat & 0x0071) continue;
if (sector[i].lotag == 32767) continue;
if (sector[i].ceilingz >= sector[i].floorz) continue;
show2dsector.Set(i);
}
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void drawlinergb(int32_t x1, int32_t y1, int32_t x2, int32_t y2, PalEntry p)
{
twod->AddLine(x1 / 4096.f, y1 / 4096.f, x2 / 4096.f, y2 / 4096.f, windowxy1.x, windowxy1.y, windowxy2.x, windowxy2.y, p);
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
PalEntry RedLineColor()
{
// todo:
// Blood uses palette index 12 (99,99,99)
// Exhumed uses palette index 111 (roughly 170,170,170) but darkens the line in overlay mode the farther it is away from the player in vertical direction.
// Shadow Warrior uses palette index 152 in overlay mode and index 12 in full map mode. (152: 84, 88, 40)
return automapMode == am_overlay? *am_ovtwosidedcolor : *am_twosidedcolor;
}
PalEntry WhiteLineColor()
{
// todo:
// Blood uses palette index 24
// Exhumed uses palette index 111 (roughly 170,170,170) but darkens the line in overlay mode the farther it is away from the player in vertical direction.
// Shadow Warrior uses palette index 24 (60,60,60)
return automapMode == am_overlay ? *am_ovonesidedcolor : *am_onesidedcolor;
}
PalEntry PlayerLineColor()
{
return automapMode == am_overlay ? *am_ovplayercolor : *am_playercolor;
}
CCMD(printpalcol)
{
if (argv.argc() < 2) return;
int i = atoi(argv[1]);
Printf("%d, %d, %d\n", GPalette.BaseColors[i].r, GPalette.BaseColors[i].g, GPalette.BaseColors[i].b);
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
bool ShowRedLine(int j, int i)
{
auto wal = &wall[j];
if (!(g_gameType & GAMEFLAG_SW))
{
return !gFullMap && !show2dsector[wal->nextsector];
}
else
{
if (!gFullMap)
{
if (!show2dwall[j]) return false;
int k = wal->nextwall;
if (k > j && !show2dwall[k]) return false; //???
}
if (automapMode == am_full)
{
if (sector[i].floorz != sector[i].ceilingz)
if (sector[wal->nextsector].floorz != sector[wal->nextsector].ceilingz)
if (((wal->cstat | wall[wal->nextwall].cstat) & (16 + 32)) == 0)
if (sector[i].floorz == sector[wal->nextsector].floorz)
return false;
if (sector[i].floorpicnum != sector[wal->nextsector].floorpicnum)
return false;
if (sector[i].floorshade != sector[wal->nextsector].floorshade)
return false;
}
return true;
}
}
//---------------------------------------------------------------------------
//
// two sided lines
//
//---------------------------------------------------------------------------
void drawredlines(int cposx, int cposy, int czoom, int cang)
{
int xvect = sintable[(-cang) & 2047] * czoom;
int yvect = sintable[(1536 - cang) & 2047] * czoom;
int xvect2 = mulscale16(xvect, yxaspect);
int yvect2 = mulscale16(yvect, yxaspect);
for (int i = 0; i < numsectors; i++)
{
if (!gFullMap && !show2dsector[i]) continue;
int startwall = sector[i].wallptr;
int endwall = sector[i].wallptr + sector[i].wallnum;
int z1 = sector[i].ceilingz;
int z2 = sector[i].floorz;
walltype* wal;
int j;
for (j = startwall, wal = &wall[startwall]; j < endwall; j++, wal++)
{
int k = wal->nextwall;
if (k < 0 || k >= MAXWALLS) continue;
if (sector[wal->nextsector].ceilingz == z1 && sector[wal->nextsector].floorz == z2)
if (((wal->cstat | wall[wal->nextwall].cstat) & (16 + 32)) == 0) continue;
if (ShowRedLine(j, i))
{
int ox = wal->x - cposx;
int oy = wal->y - cposy;
int x1 = dmulscale16(ox, xvect, -oy, yvect) + (xdim << 11);
int y1 = dmulscale16(oy, xvect2, ox, yvect2) + (ydim << 11);
auto wal2 = &wall[wal->point2];
ox = wal2->x - cposx;
oy = wal2->y - cposy;
int x2 = dmulscale16(ox, xvect, -oy, yvect) + (xdim << 11);
int y2 = dmulscale16(oy, xvect2, ox, yvect2) + (ydim << 11);
drawlinergb(x1, y1, x2, y2, RedLineColor());
}
}
}
}
//---------------------------------------------------------------------------
//
// one sided lines
//
//---------------------------------------------------------------------------
static void drawwhitelines(int cposx, int cposy, int czoom, int cang)
{
int xvect = sintable[(-cang) & 2047] * czoom;
int yvect = sintable[(1536 - cang) & 2047] * czoom;
int xvect2 = mulscale16(xvect, yxaspect);
int yvect2 = mulscale16(yvect, yxaspect);
for (int i = numsectors - 1; i >= 0; i--)
{
if (!gFullMap && !show2dsector[i] && !(g_gameType & GAMEFLAG_SW)) continue;
int startwall = sector[i].wallptr;
int endwall = sector[i].wallptr + sector[i].wallnum;
walltype* wal;
int j;
for (j = startwall, wal = &wall[startwall]; j < endwall; j++, wal++)
{
if (wal->nextwall >= 0) continue;
if (!tileGetTexture(wal->picnum)->isValid()) continue;
if ((g_gameType & GAMEFLAG_SW) && !gFullMap && !show2dwall[j])
continue;
int ox = wal->x - cposx;
int oy = wal->y - cposy;
int x1 = dmulscale16(ox, xvect, -oy, yvect) + (xdim << 11);
int y1 = dmulscale16(oy, xvect2, ox, yvect2) + (ydim << 11);
int k = wal->point2;
auto wal2 = &wall[k];
ox = wal2->x - cposx;
oy = wal2->y - cposy;
int x2 = dmulscale16(ox, xvect, -oy, yvect) + (xdim << 11);
int y2 = dmulscale16(oy, xvect2, ox, yvect2) + (ydim << 11);
drawlinergb(x1, y1, x2, y2, WhiteLineColor());
}
}
}
void DrawPlayerArrow(int cposx, int cposy, int cang, int pl_x, int pl_y, int zoom, int pl_angle)
{
int arrow[] =
{
0, 65536, 0, -65536,
0, 65536, -32768, 32878,
0, 65536, 32768, 32878,
};
int xvect = sintable[(-cang) & 2047] * zoom;
int yvect = sintable[(1536 - cang) & 2047] * zoom;
int xvect2 = mulscale16(xvect, yxaspect);
int yvect2 = mulscale16(yvect, yxaspect);
int pxvect = sintable[(-pl_angle) & 2047];
int pyvect = sintable[(1536 - pl_angle) & 2047];
for (int i = 0; i < 12; i += 4)
{
int px1 = dmulscale16(arrow[i], pxvect, -arrow[i+1], pyvect);
int py1 = dmulscale16(arrow[i+1], pxvect, arrow[i], pyvect) + (ydim << 11);
int px2 = dmulscale16(arrow[i+2], pxvect, -arrow[i + 3], pyvect);
int py2 = dmulscale16(arrow[i + 3], pxvect, arrow[i+2], pyvect) + (ydim << 11);
int ox1 = px1 - cposx;
int oy1 = py1 - cposx;
int ox2 = px2 - cposx;
int oy2 = py2 - cposx;
int sx1 = dmulscale16(ox1, xvect, -oy1, yvect) + (xdim << 11);
int sy1 = dmulscale16(oy1, xvect2, ox1, yvect2) + (ydim << 11);
int sx2 = dmulscale16(ox2, xvect, -oy2, yvect) + (xdim << 11);
int sy2 = dmulscale16(oy2, xvect2, ox2, yvect2) + (ydim << 11);
drawlinergb(sx1, sy1, sx2, sy2, WhiteLineColor());
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void DrawOverheadMap(int pl_x, int pl_y, int pl_angle)
{
if (am_followplayer || follow_x == INT_MAX)
{
follow_x = pl_x;
follow_y = pl_y;
}
int x = follow_x;
int y = follow_y;
follow_a = am_rotate ? pl_angle : 0;
AutomapControl();
if (automapMode == am_full)
{
twod->ClearScreen();
renderDrawMapView(x, y, gZoom, follow_a);
}
int32_t tmpydim = (xdim * 5) / 8;
renderSetAspect(65536, divscale16(tmpydim * 320, xdim * 200));
drawredlines(x, y, gZoom, follow_a);
drawwhitelines(x, y, gZoom, follow_a);
if (!gi->DrawAutomapPlayer(x, y, gZoom, follow_a))
DrawPlayerArrow(x, y, follow_a, pl_x, pl_y, gZoom, -pl_angle);
}

33
source/core/automap.h Normal file
View file

@ -0,0 +1,33 @@
#pragma once
#include "tarray.h"
#include "build.h"
#include "c_cvars.h"
#include "palentry.h"
class FSerializer;
struct event_t;
extern bool automapping;
extern bool gFullMap;
extern FixedBitArray<MAXSECTORS> show2dsector;
extern FixedBitArray<MAXWALLS> show2dwall;
extern FixedBitArray<MAXSPRITES> show2dsprite;
void SerializeAutomap(FSerializer& arc);
void ClearAutomap();
void MarkSectorSeen(int sect);
void DrawOverheadMap(int x, int y, int ang);
bool AM_Responder(event_t* ev, bool last);
void drawlinergb(int32_t x1, int32_t y1, int32_t x2, int32_t y2, PalEntry p);
enum AM_Mode
{
am_off,
am_overlay,
am_full,
am_count
};
extern int automapMode;
EXTERN_CVAR(Bool, am_followplayer)

View file

@ -150,15 +150,6 @@ CCMD(noclip)
}
}
CCMD(allmap)
{
if (!CheckCheatmode(true, false))
{
gFullMap = !gFullMap;
Printf("%s\n", GStrings(gFullMap ? "SHOW MAP: ON" : "SHOW MAP: OFF"));
}
}
//---------------------------------------------------------------------------
//
//

View file

@ -42,40 +42,7 @@
#include "gamestate.h"
#include "gamecontrol.h"
#include "uiinput.h"
//==========================================================================
//
// AM_Responder
// Handle automap exclusive bindings.
//
//==========================================================================
bool AM_Responder (event_t *ev, bool last)
{
if (ev->type == EV_KeyDown || ev->type == EV_KeyUp)
{
#if 0 // this feature does not exist yet.
if (automapFollow)
{
// check for am_pan* and ignore in follow mode
const char *defbind = AutomapBindings.GetBind(ev->data1);
if (defbind && !strnicmp(defbind, "+am_pan", 7)) return false;
}
#endif
bool res = C_DoKey(ev, &AutomapBindings, nullptr);
if (res && ev->type == EV_KeyUp && !last)
{
// If this is a release event we also need to check if it released a button in the main Bindings
// so that that button does not get stuck.
const char *defbind = Bindings.GetBind(ev->data1);
return (!defbind || defbind[0] != '+'); // Let G_Responder handle button releases
}
return res;
}
return false;
}
#include "automap.h"
//==========================================================================
//

View file

@ -70,6 +70,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "statusbar.h"
#include "uiinput.h"
#include "d_net.h"
#include "automap.h"
CVAR(Bool, autoloadlights, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
CVAR(Bool, autoloadbrightmaps, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
@ -98,27 +99,8 @@ int connecthead, connectpoint2[MAXMULTIPLAYERS];
auto vsnprintfptr = vsnprintf; // This is an inline in Visual Studio but we need an address for it to satisfy the MinGW compiled libraries.
int lastTic;
int automapMode;
bool automapFollow;
extern bool pauseext;
CCMD(togglemap)
{
if (gamestate == GS_LEVEL)
{
automapMode++;
if (automapMode == am_count) automapMode = am_off;
if ((g_gameType & GAMEFLAG_BLOOD) && automapMode == am_overlay) automapMode = am_full; // todo: investigate if this can be re-enabled
gi->ResetFollowPos(false);
}
}
CCMD(togglefollow)
{
automapFollow = !automapFollow;
gi->ResetFollowPos(true);
}
cycle_t thinktime, actortime, gameupdatetime, drawtime;
gamestate_t gamestate = GS_STARTUP;
@ -1265,64 +1247,6 @@ void GameInterface::FreeLevelData()
currentLevel = nullptr;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
static float am_zoomdir;
int GetAutomapZoom(int gZoom)
{
static int nonsharedtimer;
int ms = screen->FrameTime;
int interval;
if (nonsharedtimer > 0 || ms < nonsharedtimer)
{
interval = ms - nonsharedtimer;
}
else
{
interval = 0;
}
nonsharedtimer = screen->FrameTime;
if (System_WantGuiCapture())
return gZoom;
if (automapMode != am_off)
{
if (am_zoomdir > 0)
{
gZoom = xs_CRoundToInt(gZoom * am_zoomdir);
}
else if (am_zoomdir < 0)
{
gZoom = xs_CRoundToInt(gZoom / -am_zoomdir);
}
am_zoomdir = 0;
double j = interval * (120. / 1000);
if (buttonMap.ButtonDown(gamefunc_Enlarge_Screen))
gZoom += (int)fmulscale6(j, max(gZoom, 256));
if (buttonMap.ButtonDown(gamefunc_Shrink_Screen))
gZoom -= (int)fmulscale6(j, max(gZoom, 256));
gZoom = clamp(gZoom, 48, 2048);
}
return gZoom;
}
CCMD(am_zoom)
{
if (argv.argc() >= 2)
{
am_zoomdir = (float)atof(argv[1]);
}
}
//---------------------------------------------------------------------------
//
// Load crosshair definitions

View file

@ -56,6 +56,7 @@ void CONFIG_ReadCombatMacros();
int GameMain();
int GetAutomapZoom(int gZoom);
void DrawCrosshair(int deftile, int health, double xdelta, double scale, PalEntry color = 0xffffffff);
void updatePauseStatus();
void DeferedStartGame(MapRecord* map, int skill);
@ -219,15 +220,6 @@ enum
extern int paused;
extern int chatmodeon;
enum AM_Mode
{
am_off,
am_overlay,
am_full,
am_count
};
extern int automapMode;
extern bool automapFollow;
extern bool sendPause;
extern int lastTic;

View file

@ -357,9 +357,6 @@ CUSTOM_CVAR(Int, playergender, 0, CVAR_USERINFO|CVAR_ARCHIVE)
}
CVAR(Bool, am_textfont, false, CVAR_ARCHIVE)
CVAR(Bool, am_showlabel, false, CVAR_ARCHIVE)
CVAR(Bool, am_nameontop, false, CVAR_ARCHIVE)
CVAR(Int, m_coop, 0, CVAR_NOSET)

View file

@ -93,7 +93,6 @@ struct GameInterface
virtual FString GetCoordString() { return "'stat coord' not implemented"; }
virtual void ExitFromMenu() { throw CExitEvent(0); }
virtual ReservedSpace GetReservedScreenSpace(int viewsize) { return { 0, 0 }; }
virtual void ResetFollowPos(bool) {}
virtual void GetInput(InputPacket* packet, ControlInfo* const hidInput) {}
virtual void UpdateSounds() {}
virtual void ErrorCleanup() {}
@ -107,6 +106,7 @@ struct GameInterface
virtual void NextLevel(MapRecord* map, int skill) {}
virtual void NewGame(MapRecord* map, int skill) {}
virtual void LevelCompleted(MapRecord* map, int skill) {}
virtual bool DrawAutomapPlayer(int x, int y, int z, int a) { return false; }
virtual FString statFPS()
{

View file

@ -234,6 +234,11 @@ void SetupGameButtons()
"Dpad_Aiming",
"Toggle_Crouch",
"Quick_Kick",
"AM_PanLeft",
"AM_PanRight",
"AM_PanUp",
"AM_PanDown",
};
buttonMap.SetButtons(actions, NUM_ACTIONS);
}

View file

@ -92,6 +92,10 @@ enum GameFunction_t
gamefunc_Dpad_Aiming,
gamefunc_Toggle_Crouch,
gamefunc_Quick_Kick,
gamefunc_AM_PanLeft,
gamefunc_AM_PanRight,
gamefunc_AM_PanUp,
gamefunc_AM_PanDown,
NUM_ACTIONS
};

View file

@ -51,6 +51,7 @@
#include "raze_music.h"
#include "raze_sound.h"
#include "gamestruct.h"
#include "automap.h"
static CompositeSavegameWriter savewriter;
static FResourceFile *savereader;
@ -73,6 +74,7 @@ static void SerializeSession(FSerializer& arc)
Mus_Serialize(arc);
quoteMgr.Serialize(arc);
S_SerializeSounds(arc);
SerializeAutomap(arc);
}
//=============================================================================
@ -126,8 +128,8 @@ bool OpenSaveGameForRead(const char *name)
info->Unlock();
// Load system-side data from savegames.
SerializeSession(arc);
LoadEngineState();
SerializeSession(arc); // must be AFTER LoadEngineState because it needs info from it.
gi->SerializeGameState(arc);
}
return savereader != nullptr;
@ -474,7 +476,6 @@ void SaveEngineState()
fw->Write(connectpoint2, sizeof(connectpoint2));
fw->Write(&randomseed, sizeof(randomseed));
fw->Write(&numshades, sizeof(numshades));
fw->Write(&automapping, sizeof(automapping));
fw->Write(&showinvisibility, sizeof(showinvisibility));
WriteMagic(fw);
@ -486,11 +487,6 @@ void SaveEngineState()
fw->Write(&pskybits_override, sizeof(pskybits_override));
WriteMagic(fw);
fw->Write(show2dwall, sizeof(show2dwall));
fw->Write(show2dsprite, sizeof(show2dsprite));
fw->Write(&show2dsector, sizeof(show2dsector));
WriteMagic(fw);
fw->Write(&Numsprites, sizeof(Numsprites));
sv_prespriteextsave();
fw->Write(spriteext, sizeof(spriteext_t) * MAXSPRITES);
@ -537,7 +533,6 @@ void LoadEngineState()
fr.Read(connectpoint2, sizeof(connectpoint2));
fr.Read(&randomseed, sizeof(randomseed));
fr.Read(&numshades, sizeof(numshades));
fr.Read(&automapping, sizeof(automapping));
fr.Read(&showinvisibility, sizeof(showinvisibility));
CheckMagic(fr);
@ -549,11 +544,6 @@ void LoadEngineState()
fr.Read(&pskybits_override, sizeof(pskybits_override));
CheckMagic(fr);
fr.Read(show2dwall, sizeof(show2dwall));
fr.Read(show2dsprite, sizeof(show2dsprite));
fr.Read(&show2dsector, sizeof(show2dsector));
CheckMagic(fr);
fr.Read(&Numsprites, sizeof(Numsprites));
fr.Read(spriteext, sizeof(spriteext_t) * MAXSPRITES);
fr.Read(wallext, sizeof(wallext_t) * MAXWALLS);

View file

@ -16,6 +16,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
#include "ns.h"
#include "automap.h"
#include "compat.h"
#include "common.h"
#include "engine.h"
@ -136,8 +137,8 @@ static bool SnakeCheat(cheatseq_t* c)
static bool SphereCheat(cheatseq_t* c)
{
Printf(PRINT_NOTIFY, "%s\n", GStrings("TXT_EX_FULLMAP"));
GrabMap();
bShowTowers = true;
gFullMap = !gFullMap; // only set the cheat flag so it can be toggled.
bShowTowers = gFullMap;
return true;
}

View file

@ -105,10 +105,7 @@ extern short nPalDiff;
// map
extern short bShowTowers;
extern int ldMapZoom;
extern int lMapZoom;
void InitMap();
void GrabMap();
void UpdateMap();
void DrawMap();

View file

@ -47,6 +47,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "g_input.h"
#include "core/menu/menu.h"
#include "d_net.h"
#include "automap.h"
BEGIN_PS_NS

View file

@ -16,6 +16,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
#include "ns.h"
#include "automap.h"
#include "compat.h"
#include "aistuff.h"
#include "player.h"
@ -102,7 +103,7 @@ uint8_t LoadLevel(int nMap)
InitSnakes();
InitFishes();
InitLights();
InitMap();
ClearAutomap();
InitBubbles();
InitObjects();
InitLava();

View file

@ -91,8 +91,6 @@ void SendInput()
void CheckKeys2()
{
lMapZoom = GetAutomapZoom(lMapZoom);
if (PlayerList[nLocalPlayer].nHealth <= 0)
{
SetAirFrame();
@ -220,7 +218,6 @@ static void PlayerInterruptKeys(bool after, ControlInfo* const hidInput)
localInput.fvel = clamp(localInput.fvel + tempinput.fvel, -12, 12);
localInput.svel = clamp(localInput.svel + tempinput.svel, -12, 12);
localInput.q16avel += input_angle;
if (!nFreeze)

View file

@ -22,26 +22,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "exhumed.h"
#include "view.h"
#include "v_2ddrawer.h"
#include "automap.h"
BEGIN_PS_NS
short bShowTowers = false;
int ldMapZoom;
int lMapZoom;
void MarkSectorSeen(short nSector);
void InitMap()
{
show2dsector.Zero();
memset(show2dwall, 0, sizeof(show2dwall));
memset(show2dsprite, 0, sizeof(show2dsprite));
ldMapZoom = 64;
lMapZoom = 1000;
}
void GrabMap()
{
@ -50,411 +36,6 @@ void GrabMap()
}
}
void MarkSectorSeen(short nSector)
{
if (!show2dsector[nSector])
{
show2dsector.Set(nSector);
short startwall = sector[nSector].wallptr;
short nWalls = sector[nSector].wallnum;
short endwall = startwall + nWalls;
while (startwall <= endwall)
{
show2dwall[startwall >> 3] = (1 << (startwall & 7)) | show2dwall[startwall >> 3];
startwall++;
}
}
}
void drawoverheadmap(int cposx, int cposy, int czoom, short cang)
{
#ifndef __WATCOMC__ // FIXME - Won't compile on Watcom
int xvect = sintable[(2048 - cang) & 2047] * czoom;
int yvect = sintable[(1536 - cang) & 2047] * czoom;
int xvect2 = mulscale(xvect, yxaspect, 16);
int yvect2 = mulscale(yvect, yxaspect, 16);
// draw player position arrow
renderDrawLine(xdim << 11, (ydim << 11) - 20480, xdim << 11, (ydim << 11) + 20480, 24);
renderDrawLine((xdim << 11) - 20480, ydim << 11, xdim << 11, (ydim << 11) - 20480, 24);
renderDrawLine((xdim << 11) + 20480, ydim << 11, xdim << 11, (ydim << 11) - 20480, 24);
short nPlayerSprite = PlayerList[nLocalPlayer].nSprite;
int nPlayerZ = sprite[nPlayerSprite].z;
for (int nSector = 0; nSector < numsectors; nSector++)
{
short startwall = sector[nSector].wallptr;
short nWalls = sector[nSector].wallnum;
short endwall = startwall + nWalls - 1;
int nCeilZ = sector[nSector].ceilingz;
int nFloorZ = sector[nSector].floorz;
int nZVal = nFloorZ - nPlayerZ;
if (nZVal < 0) {
nZVal = -nZVal;
}
int var_10 = nZVal >> 13;
if (var_10 > 12) {
var_10 = 12;
}
var_10 = 111 - var_10;
// int startwallB = startwall;
for (int nWall = startwall; nWall <= endwall; nWall++)
{
short nextwall = wall[nWall].nextwall;
if (nextwall >= 0)
{
if (show2dwall[nWall >> 3] & (1 << (nWall & 7)))
{
if (nextwall <= nWall || (show2dwall[nextwall >> 3] & (1 << (nextwall & 7))) <= 0)
{
if (nCeilZ != sector[wall[nWall].nextsector].ceilingz ||
nFloorZ != sector[wall[nWall].nextsector].floorz ||
((wall[nextwall].cstat | wall[nWall].cstat) & 0x30))
{
int ox = wall[nWall].x - cposx;
int oy = wall[nWall].y - cposy;
int x1 = mulscale(ox, xvect, 16) - mulscale(oy, yvect, 16);
int y1 = mulscale(oy, xvect2, 16) + mulscale(ox, yvect2, 16);
int nWall2 = wall[nWall].point2;
ox = wall[nWall2].x - cposx;
oy = wall[nWall2].y - cposy;
int x2 = mulscale(ox, xvect, 16) - mulscale(oy, yvect, 16);
int y2 = mulscale(oy, xvect2, 16) + mulscale(ox, yvect2, 16);
renderDrawLine(x1 + (xdim << 11), y1 + (ydim << 11), x2 + (xdim << 11), y2 + (ydim << 11), var_10);
/*
drawline256(
((unsigned __int64)(v4 * (signed __int64)v12) >> 16)
- ((unsigned __int64)(v5 * (signed __int64)v13) >> 16)
+ (xdim << 11),
((unsigned __int64)(v42 * (signed __int64)v12) >> 16)
+ ((unsigned __int64)(v43 * (signed __int64)v13) >> 16)
+ (ydim << 11),
(build_xdim << 11)
+ ((unsigned __int64)(v4 * (signed __int64)(*v14 - v31)) >> 16)
- ((unsigned __int64)(v5 * (signed __int64)(v14[1] - v30)) >> 16),
ydim << 11)
+ ((unsigned __int64)(v43 * (signed __int64)(v14[1] - v30)) >> 16)
+ ((unsigned __int64)(v42 * (signed __int64)(*v14 - v31)) >> 16),
v48);
*/
}
}
}
}
}
}
// int var_4C = 0;
// int var_48 = 0;
for (int nSector = 0; nSector < numsectors; nSector++)
{
int startwall = sector[nSector].wallptr;
int nWalls = sector[nSector].wallnum;
int endwall = startwall + nWalls - 1;
int nFloorZ = sector[nSector].floorz;
int nVal = nFloorZ - nPlayerZ;
if (nVal < 0) {
nVal = -nVal;
}
int var_14 = nVal >> 13;
if (var_14 <= 15)
{
var_14 = 111 - var_14;
for (int nWall = startwall; nWall <= endwall; nWall++)
{
if (wall[nWall].nextwall < 0)
{
if (show2dwall[nWall >> 3] & (1 << (nWall & 7)))
{
if (tilesiz[wall[nWall].picnum].x && tilesiz[wall[nWall].picnum].y)
{
int ox = wall[nWall].x - cposx;
int oy = wall[nWall].y - cposy;
int x1 = mulscale(ox, xvect, 16) - mulscale(oy, yvect, 16);
int y1 = mulscale(oy, xvect2, 16) + mulscale(ox, yvect2, 16);
int nWall2 = wall[nWall].point2;
ox = wall[nWall2].x - cposx;
oy = wall[nWall2].y - cposy;
int x2 = mulscale(ox, xvect, 16) - mulscale(oy, yvect, 16);
int y2 = mulscale(oy, xvect2, 16) + mulscale(ox, yvect2, 16);
renderDrawLine(x1 + (xdim << 11), y1 + (ydim << 11), x2 + (xdim << 11), y2 + (ydim << 11), 24);
/*
v19 = *v17 - v31;
v20 = v17[1] - v30;
v21 = &wall[8 * *((_WORD *)v17 + 4)];
build_drawline256(
(build_xdim << 11)
+ ((unsigned __int64)(v4 * (signed __int64)v19) >> 16)
- ((unsigned __int64)(v5 * (signed __int64)v20) >> 16),
(build_ydim << 11)
+ ((unsigned __int64)(v42 * (signed __int64)v19) >> 16)
+ ((unsigned __int64)(v43 * (signed __int64)v20) >> 16),
(build_xdim << 11)
+ ((unsigned __int64)(v4 * (signed __int64)(*v21 - v31)) >> 16)
- ((unsigned __int64)(v5 * (signed __int64)(v21[1] - v30)) >> 16),
(build_ydim << 11)
+ ((unsigned __int64)(v42 * (signed __int64)(*v21 - v31)) >> 16)
+ ((unsigned __int64)(v43 * (signed __int64)(v21[1] - v30)) >> 16),
v46);
*/
}
}
}
}
if (bShowTowers)
{
for (int nSprite = headspritestat[406]; nSprite != -1; nSprite = nextspritestat[nSprite])
{
int ox = sprite[nSprite].x - cposx; // var_64
int oy = sprite[nSprite].y - cposx; // var_68
// int var_58 = mulscale(var_64, xvect, 16) - mulscale(var_68, yvect, 16);
int x1 = mulscale(ox, xvect, 16) - mulscale(oy, yvect, 16);
int y1 = mulscale(oy, xvect2, 16) + mulscale(ox, yvect2, 16);
//int var_58 = mulscale(var_64, xvect, 16) - mulscale(var_68, yvect, 16);
//int esi = mulscale(var_68, xvect2, 16) + mulscale(var_65, yvect2, 16)
//v25 = ((unsigned __int64)(v4 * (signed __int64)ox) >> 16)
// - ((unsigned __int64)(v5 * (signed __int64)oy) >> 16);
//v26 = ((unsigned __int64)(v42 * (signed __int64)ox) >> 16)
// + ((unsigned __int64)(v43 * (signed __int64)oy) >> 16);
//v27 = v26 + 2048;
//v28 = v26 + 2048 + (ydim << 11);
//v26 -= 2048;
// v25 is x1
// v26 is y1
// v27 is y1 + 2048
// v28 is y1 + 2048 + (ydim << 1);
renderDrawLine(
x1 - 2048 + (xdim << 11),
y1 - 2048 + (ydim << 11),
x1 - 2048 + (xdim << 11),
y1 + 2048 + (ydim << 1),
170);
renderDrawLine(
x1 + (xdim << 11),
y1 + (ydim << 11),
x1 + (xdim << 11),
y1 + 2048 + (ydim << 11),
170);
renderDrawLine(
x1 + 2048 + (xdim << 11),
y1 + (ydim << 11),
x1 + 2048 + (xdim << 11),
y1 + 2048 + (ydim << 11),
170);
}
}
}
}
#endif
}
#ifdef _MSC_VER
#pragma warning(disable:4101) // this function produces a little bit too much noise
#endif
static void G_DrawOverheadMap(int32_t cposx, int32_t cposy, int32_t czoom, int16_t cang)
{
int32_t i, j, k, x1, y1, x2=0, y2=0, ox, oy;
int32_t z1, z2, startwall, endwall;
int32_t xvect, yvect, xvect2, yvect2;
char col;
uwallptr_t wal, wal2;
int32_t tmpydim = (xdim*5)/8;
renderSetAspect(65536, divscale16(tmpydim*320, xdim*200));
xvect = sintable[(-cang)&2047] * czoom;
yvect = sintable[(1536-cang)&2047] * czoom;
xvect2 = mulscale16(xvect, yxaspect);
yvect2 = mulscale16(yvect, yxaspect);
//renderDisableFog();
// draw player position arrow
renderDrawLine(xdim << 11, (ydim << 11) - 20480, xdim << 11, (ydim << 11) + 20480, 24);
renderDrawLine((xdim << 11) - 20480, ydim << 11, xdim << 11, (ydim << 11) - 20480, 24);
renderDrawLine((xdim << 11) + 20480, ydim << 11, xdim << 11, (ydim << 11) - 20480, 24);
short nPlayerSprite = PlayerList[nLocalPlayer].nSprite;
int nPlayerZ = sprite[nPlayerSprite].z;
//Draw red lines
for (i=numsectors-1; i>=0; i--)
{
if (!gFullMap && !show2dsector[i]) continue;
startwall = sector[i].wallptr;
endwall = sector[i].wallptr + sector[i].wallnum;
z1 = sector[i].ceilingz;
z2 = sector[i].floorz;
for (j=startwall, wal=(uwallptr_t)&wall[startwall]; j<endwall; j++, wal++)
{
k = wal->nextwall;
if (k < 0) continue;
if (sector[wal->nextsector].ceilingz == z1 && sector[wal->nextsector].floorz == z2)
if (((wal->cstat|wall[wal->nextwall].cstat)&(16+32)) == 0) continue;
if (automapMode == am_full)
col = 111;
else
col = 111 - min(klabs(z2 - nPlayerZ) >> 13, 12);
ox = wal->x-cposx;
oy = wal->y-cposy;
x1 = dmulscale16(ox, xvect, -oy, yvect)+(xdim<<11);
y1 = dmulscale16(oy, xvect2, ox, yvect2)+(ydim<<11);
wal2 = (uwallptr_t)&wall[wal->point2];
ox = wal2->x-cposx;
oy = wal2->y-cposy;
x2 = dmulscale16(ox, xvect, -oy, yvect)+(xdim<<11);
y2 = dmulscale16(oy, xvect2, ox, yvect2)+(ydim<<11);
renderDrawLine(x1, y1, x2, y2, col);
}
}
//Draw white lines
for (i=numsectors-1; i>=0; i--)
{
if (!gFullMap && !show2dsector[i]) continue;
startwall = sector[i].wallptr;
endwall = sector[i].wallptr + sector[i].wallnum;
z2 = sector[i].floorz;
if (automapMode == am_full)
{
col = 111;
}
else
{
col = klabs(z2 - nPlayerZ) >> 13;
if (col > 15)
continue;
col = 111 - col;
}
k = -1;
for (j=startwall, wal=(uwallptr_t)&wall[startwall]; j<endwall; j++, wal++)
{
if (wal->nextwall >= 0) continue;
if (!tileGetTexture(wal->picnum)->isValid()) continue;
if (j == k)
{
x1 = x2;
y1 = y2;
}
else
{
ox = wal->x-cposx;
oy = wal->y-cposy;
x1 = dmulscale16(ox, xvect, -oy, yvect)+(xdim<<11);
y1 = dmulscale16(oy, xvect2, ox, yvect2)+(ydim<<11);
}
k = wal->point2;
wal2 = (uwallptr_t)&wall[k];
ox = wal2->x-cposx;
oy = wal2->y-cposy;
x2 = dmulscale16(ox, xvect, -oy, yvect)+(xdim<<11);
y2 = dmulscale16(oy, xvect2, ox, yvect2)+(ydim<<11);
renderDrawLine(x1, y1, x2, y2, col);
}
}
//renderEnableFog();
videoSetCorrectedAspect();
#if 0
for (TRAVERSE_CONNECT(p))
{
if (automapFollow && p == screenpeek) continue;
auto const pPlayer = &ps[p];
auto const pSprite = (uspriteptr_t)&sprite[pPlayer->i];
ox = pSprite->x - cposx;
oy = pSprite->y - cposy;
daang = (pSprite->ang - cang) & 2047;
if (p == screenpeek)
{
ox = 0;
oy = 0;
daang = 0;
}
x1 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y1 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
if (p == screenpeek || GTFLAGS(GAMETYPE_OTHERPLAYERSINMAP))
{
if (pSprite->xvel > 16 && pPlayer->on_ground)
i = APLAYERTOP+(((int32_t) leveltime>>4)&3);
else
i = APLAYERTOP;
i = VM_OnEventWithReturn(EVENT_DISPLAYOVERHEADMAPPLAYER, pPlayer->i, p, i);
if (i < 0)
continue;
j = klabs(pPlayer->truefz - pPlayer->pos.z) >> 8;
j = mulscale16(czoom * (pSprite->yrepeat + j), yxaspect);
if (j < 22000) j = 22000;
else if (j > (65536<<1)) j = (65536<<1);
rotatesprite_win((x1<<4)+(xdim<<15), (y1<<4)+(ydim<<15), j, daang, i, pSprite->shade,
P_GetOverheadPal(pPlayer), 0);
}
}
#endif
}
void UpdateMap()
{
@ -465,14 +46,9 @@ void UpdateMap()
void DrawMap()
{
if (!nFreeze && automapMode != am_off) {
//drawoverheadmap(initx, inity, lMapZoom, inita);
if (automapMode == am_full)
if (!nFreeze && automapMode != am_off)
{
twod->ClearScreen();
renderDrawMapView(initx, inity, lMapZoom, inita);
}
G_DrawOverheadMap(initx, inity, lMapZoom, inita);
DrawOverheadMap(initx, inity, inita);
}
}
END_PS_NS

View file

@ -32,6 +32,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "gstrings.h"
#include "gamestate.h"
#include "mapinfo.h"
#include "automap.h"
#include <assert.h>
#include <stdio.h>
#include <string.h>

View file

@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "texturemanager.h"
#include "statusbar.h"
#include "v_draw.h"
#include "automap.h"
#include <string.h>
#include <stdarg.h>
#include <stdio.h>

View file

@ -924,7 +924,11 @@ public:
break;
}
}
else if (currentclock > (10240 + 120L)) return 0;
else if (currentclock > (10240 + 120L))
{
if (!skiprequest && soundEngine->GetSoundPlayingInfo(SOURCE_None, nullptr, -1)) return 1;
return 0;
}
else
{
switch((currentclock >> 5) & 3)

View file

@ -506,7 +506,11 @@ public:
}
}
}
else if (currentclock > (10240 + 120L)) return 0;
else if (currentclock > (10240 + 120L))
{
if (!skiprequest && soundEngine->GetSoundPlayingInfo(SOURCE_None, nullptr, -1)) return 1;
return 0;
}
if (currentclock > 10240 && currentclock < 10240 + 10240)
SetTotalClock(1024);

View file

@ -40,6 +40,7 @@ source as it is released.
#include "cheathandler.h"
#include "c_dispatch.h"
#include "gamestate.h"
#include "automap.h"
EXTERN_CVAR(Int, developer)
EXTERN_CVAR(Bool, sv_cheats)

View file

@ -50,7 +50,6 @@ struct GameInterface : public ::GameInterface
void ExitFromMenu() override;
ReservedSpace GetReservedScreenSpace(int viewsize) override;
void DrawPlayerSprite(const DVector2& origin, bool onteam) override;
void ResetFollowPos(bool message) override;
void GetInput(InputPacket* packet, ControlInfo* const hidInput) override;
void UpdateSounds() override;
void Startup() override;
@ -62,6 +61,7 @@ struct GameInterface : public ::GameInterface
void NextLevel(MapRecord* map, int skill) override;
void NewGame(MapRecord* map, int skill) override;
void LevelCompleted(MapRecord* map, int skill) override;
bool DrawAutomapPlayer(int x, int y, int z, int a) override;
};

View file

@ -205,7 +205,6 @@ void OffBoat(player_struct *pl);
void drawstatusbar_d(int snum);
void drawstatusbar_r(int snum);
void drawoverheadmap(int cposx, int cposy, int czoom, int cang);
void cameratext(int i);
void dobonus(int bonusonly, const CompletionFunc& completion);
void dobonus_d(int bonusonly, const CompletionFunc& completion);

View file

@ -31,6 +31,7 @@ Modifications for JonoF's port by Jonathon Fowler (jf@jonof.id.au)
#include "ns.h" // Must come before everything else!
#include "automap.h"
#include "duke3d.h"
#include "m_argv.h"
#include "mapinfo.h"
@ -220,11 +221,9 @@ void V_AddBlend (float r, float g, float b, float a, float v_blend[4])
void drawoverlays(double smoothratio)
{
int i, j;
unsigned char fader = 0, fadeg = 0, fadeb = 0, fadef = 0, tintr = 0, tintg = 0, tintb = 0, tintf = 0, dotint = 0;
struct player_struct* pp;
walltype* wal;
int cposx, cposy, cang;
pp = &ps[screenpeek];
@ -247,20 +246,7 @@ void drawoverlays(double smoothratio)
else
videoclearFade();
i = pp->cursectnum;
if (i >= 0) show2dsector.Set(i);
wal = &wall[sector[i].wallptr];
for (j = sector[i].wallnum; j > 0; j--, wal++)
{
i = wal->nextsector;
if (i < 0) continue;
if (wal->cstat & 0x0071) continue;
if (wall[wal->nextwall].cstat & 0x0071) continue;
if (sector[i].lotag == 32767) continue;
if (sector[i].ceilingz >= sector[i].floorz) continue;
show2dsector.Set(i);
}
MarkSectorSeen(pp->cursectnum);
if (ud.camerasprite == -1)
{
@ -282,8 +268,6 @@ void drawoverlays(double smoothratio)
{
dointerpolations(smoothratio);
if (!automapFollow)
{
if (pp->newowner == -1 && playrunning())
{
if (screenpeek == myconnectindex && numplayers > 1)
@ -305,27 +289,7 @@ void drawoverlays(double smoothratio)
cposy = pp->oposy;
cang = pp->getoang();
}
}
else
{
if (playrunning())
{
ud.fola += ud.folavel >> 3;
ud.folx += (ud.folfvel * sintable[(512 + 2048 - ud.fola) & 2047]) >> 14;
ud.foly += (ud.folfvel * sintable[(512 + 1024 - 512 - ud.fola) & 2047]) >> 14;
}
cposx = ud.folx;
cposy = ud.foly;
cang = ud.fola;
}
if (automapMode == am_full)
{
twod->ClearScreen();
renderDrawMapView(cposx, cposy, pp->zoom, cang);
}
drawoverheadmap(cposx, cposy, pp->zoom, cang);
DrawOverheadMap(cposx, cposy, cang);
restoreinterpolations();
}
}
@ -349,62 +313,105 @@ void drawoverlays(double smoothratio)
//
//---------------------------------------------------------------------------
void drawoverheadmap(int cposx, int cposy, int czoom, int cang)
void cameratext(int i)
{
auto drawitem = [=](int tile, double x, double y, bool flipx, bool flipy)
{
DrawTexture(twod, tileGetTexture(tile), x, y, DTA_ViewportX, windowxy1.x, DTA_ViewportY, windowxy1.y, DTA_ViewportWidth, windowxy2.x - windowxy1.x + 1, DTA_CenterOffsetRel, true,
DTA_ViewportHeight, windowxy2.y - windowxy1.y + 1, DTA_FlipX, flipx, DTA_FlipY, flipy, DTA_FullscreenScale, FSMode_Fit320x200, TAG_DONE);
};
if (!hittype[i].temp_data[0])
{
drawitem(TILE_CAMCORNER, 24, 33, false, false);
drawitem(TILE_CAMCORNER + 1, 320 - 26, 33, false, false);
drawitem(TILE_CAMCORNER + 1, 24, 163, true, true);
drawitem(TILE_CAMCORNER + 1, 320 - 26, 163, false, true);
if (ud.levelclock & 16)
drawitem(TILE_CAMLIGHT, 46, 32, false, false);
}
else
{
int flipbits = (ud.levelclock << 1) & 48;
for (int x = -64; x < 394; x += 64)
for (int y = 0; y < 200; y += 64)
drawitem(TILE_STATIC, x, y, !!(ud.levelclock & 8), !!(ud.levelclock & 16));
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void dobonus(int bonusonly, const CompletionFunc& completion)
{
if (isRR()) dobonus_r(bonusonly, completion);
else dobonus_d(bonusonly, completion);
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
int startrts(int lumpNum, int localPlayer)
{
if (SoundEnabled() &&
RTS_IsInitialized() && rtsplaying == 0 && (snd_speech & (localPlayer ? 1 : 4)))
{
auto sid = RTS_GetSoundID(lumpNum - 1);
if (sid != -1)
{
S_PlaySound(sid, CHAN_AUTO, CHANF_UI);
rtsplaying = 7;
return 1;
}
}
return 0;
}
ReservedSpace GameInterface::GetReservedScreenSpace(int viewsize)
{
// todo: factor in the frag bar: tilesiz[TILE_FRAGBAR].y
int sbar = tilesiz[TILE_BOTTOMSTATUSBAR].y;
if (isRR())
{
sbar >>= 1;
}
return { 0, sbar };
}
::GameInterface* CreateInterface()
{
return new GameInterface;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
bool GameInterface::DrawAutomapPlayer(int cposx, int cposy, int czoom, int cang)
{
int i, j, k, l, x1, y1, x2, y2, x3, y3, x4, y4, ox, oy, xoff, yoff;
int dax, day, cosang, sinang, xspan, yspan, sprx, spry;
int xrepeat, yrepeat, z1, z2, startwall, endwall, tilenum, daang;
int xrepeat, yrepeat, tilenum, daang;
int xvect, yvect, xvect2, yvect2;
int p;
PalEntry col;
walltype* wal, * wal2;
spritetype* spr;
renderSetAspect(65536, 65536);
xvect = sintable[(-cang) & 2047] * czoom;
yvect = sintable[(1536 - cang) & 2047] * czoom;
xvect2 = mulscale16(xvect, yxaspect);
yvect2 = mulscale16(yvect, yxaspect);
//Draw red lines
for (i = 0; i < numsectors; i++)
{
if (!gFullMap && !show2dsector[i]) continue;
startwall = sector[i].wallptr;
endwall = sector[i].wallptr + sector[i].wallnum;
z1 = sector[i].ceilingz;
z2 = sector[i].floorz;
for (j = startwall, wal = &wall[startwall]; j < endwall; j++, wal++)
{
k = wal->nextwall;
if (k < 0) continue;
if (sector[wal->nextsector].ceilingz == z1 && sector[wal->nextsector].floorz == z2)
if (((wal->cstat | wall[wal->nextwall].cstat) & (16 + 32)) == 0) continue;
if (!gFullMap && !show2dsector[wal->nextsector])
{
col = PalEntry(170, 170, 170);
ox = wal->x - cposx;
oy = wal->y - cposy;
x1 = dmulscale16(ox, xvect, -oy, yvect) + (xdim << 11);
y1 = dmulscale16(oy, xvect2, ox, yvect2) + (ydim << 11);
wal2 = &wall[wal->point2];
ox = wal2->x - cposx;
oy = wal2->y - cposy;
x2 = dmulscale16(ox, xvect, -oy, yvect) + (xdim << 11);
y2 = dmulscale16(oy, xvect2, ox, yvect2) + (ydim << 11);
drawlinergb(x1, y1, x2, y2, col);
}
}
}
//Draw sprites
k = ps[screenpeek].i;
for (i = 0; i < numsectors; i++)
@ -550,60 +557,12 @@ void drawoverheadmap(int cposx, int cposy, int czoom, int cang)
}
}
//Draw white lines
for (i = numsectors - 1; i >= 0; i--)
{
if (!gFullMap && !show2dsector[i]) continue;
startwall = sector[i].wallptr;
endwall = sector[i].wallptr + sector[i].wallnum;
k = -1;
for (j = startwall, wal = &wall[startwall]; j < endwall; j++, wal++)
{
if (wal->nextwall >= 0) continue;
if (!tileGetTexture(wal->picnum)->isValid()) continue;
if (j == k)
{
x1 = x2;
y1 = y2;
}
else
{
ox = wal->x - cposx;
oy = wal->y - cposy;
x1 = dmulscale16(ox, xvect, -oy, yvect) + (xdim << 11);
y1 = dmulscale16(oy, xvect2, ox, yvect2) + (ydim << 11);
}
k = wal->point2;
wal2 = &wall[k];
ox = wal2->x - cposx;
oy = wal2->y - cposy;
x2 = dmulscale16(ox, xvect, -oy, yvect) + (xdim << 11);
y2 = dmulscale16(oy, xvect2, ox, yvect2) + (ydim << 11);
drawlinergb(x1, y1, x2, y2, PalEntry(170, 170, 170));
}
}
videoSetCorrectedAspect();
for (p = connecthead; p >= 0; p = connectpoint2[p])
{
if (automapFollow && p == screenpeek) continue;
ox = sprite[ps[p].i].x - cposx;
oy = sprite[ps[p].i].y - cposy;
daang = (sprite[ps[p].i].ang - cang) & 2047;
if (p == screenpeek)
{
ox = 0;
oy = 0;
daang = 0;
}
x1 = mulscale(ox, xvect, 16) - mulscale(oy, yvect, 16);
y1 = mulscale(oy, xvect2, 16) + mulscale(ox, yvect2, 16);
@ -621,95 +580,13 @@ void drawoverheadmap(int cposx, int cposy, int czoom, int cang)
if (j < 22000) j = 22000;
else if (j > (65536 << 1)) j = (65536 << 1);
DrawTexture(twod, tileGetTexture(i), xdim / 2. + x1 / 4096., ydim / 2. + y1 / 4096., DTA_TranslationIndex, TRANSLATION(Translation_Remap + pp.palette, sprite[pp.i].pal),
DTA_Color, shadeToLight(sprite[pp.i].shade), DTA_ScaleX, j / 65536., DTA_ScaleY, j/65536., TAG_DONE);
DrawTexture(twod, tileGetTexture(i), xdim / 2. + x1 / 4096., ydim / 2. + y1 / 4096., DTA_TranslationIndex, TRANSLATION(Translation_Remap + pp.palette, sprite[pp.i].pal), DTA_CenterOffset, true,
DTA_Rotate, daang * (-360./2048), DTA_Color, shadeToLight(sprite[pp.i].shade), DTA_ScaleX, j / 65536., DTA_ScaleY, j / 65536., TAG_DONE);
}
}
return true;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void cameratext(int i)
{
auto drawitem = [=](int tile, double x, double y, bool flipx, bool flipy)
{
DrawTexture(twod, tileGetTexture(tile), x, y, DTA_ViewportX, windowxy1.x, DTA_ViewportY, windowxy1.y, DTA_ViewportWidth, windowxy2.x - windowxy1.x + 1, DTA_CenterOffsetRel, true,
DTA_ViewportHeight, windowxy2.y - windowxy1.y + 1, DTA_FlipX, flipx, DTA_FlipY, flipy, DTA_FullscreenScale, FSMode_Fit320x200, TAG_DONE);
};
if (!hittype[i].temp_data[0])
{
drawitem(TILE_CAMCORNER, 24, 33, false, false);
drawitem(TILE_CAMCORNER + 1, 320 - 26, 33, false, false);
drawitem(TILE_CAMCORNER + 1, 24, 163, true, true);
drawitem(TILE_CAMCORNER + 1, 320 - 26, 163, false, true);
if (ud.levelclock & 16)
drawitem(TILE_CAMLIGHT, 46, 32, false, false);
}
else
{
int flipbits = (ud.levelclock << 1) & 48;
for (int x = -64; x < 394; x += 64)
for (int y = 0; y < 200; y += 64)
drawitem(TILE_STATIC, x, y, !!(ud.levelclock & 8), !!(ud.levelclock & 16));
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void dobonus(int bonusonly, const CompletionFunc& completion)
{
if (isRR()) dobonus_r(bonusonly, completion);
else dobonus_d(bonusonly, completion);
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
int startrts(int lumpNum, int localPlayer)
{
if (SoundEnabled() &&
RTS_IsInitialized() && rtsplaying == 0 && (snd_speech & (localPlayer ? 1 : 4)))
{
auto sid = RTS_GetSoundID(lumpNum - 1);
if (sid != -1)
{
S_PlaySound(sid, CHAN_AUTO, CHANF_UI);
rtsplaying = 7;
return 1;
}
}
return 0;
}
ReservedSpace GameInterface::GetReservedScreenSpace(int viewsize)
{
// todo: factor in the frag bar: tilesiz[TILE_FRAGBAR].y
int sbar = tilesiz[TILE_BOTTOMSTATUSBAR].y;
if (isRR())
{
sbar >>= 1;
}
return { 0, sbar };
}
::GameInterface* CreateInterface()
{
return new GameInterface;
}

View file

@ -147,7 +147,6 @@ void GameInterface::Startup()
void GameInterface::Render()
{
ps[myconnectindex].zoom = GetAutomapZoom(ps[myconnectindex].zoom);
drawtime.Reset();
drawtime.Clock();
videoSetBrightness(thunder_brightness);

View file

@ -46,17 +46,6 @@ static int lastcontroltime;
static double lastCheck;
static InputPacket loc; // input accumulation buffer.
void GameInterface::ResetFollowPos(bool message)
{
if (automapFollow)
{
ud.folx = ps[screenpeek].oposx;
ud.foly = ps[screenpeek].oposy;
ud.fola = ps[screenpeek].getoang();
}
if (message) FTA(automapFollow? QUOTE_MAP_FOLLOW_ON : QUOTE_MAP_FOLLOW_OFF, &ps[myconnectindex]);
}
//---------------------------------------------------------------------------
//
// handles all HUD related input, i.e. inventory item selection and activation plus weapon selection.
@ -939,14 +928,9 @@ static void FinalizeInput(int playerNum, InputPacket& input, bool vehicle)
auto p = &ps[playerNum];
bool blocked = movementBlocked(playerNum) || sprite[p->i].extra <= 0 || (p->dead_flag && !ud.god);
if ((automapFollow && automapMode != am_off) || blocked)
if (blocked)
{
if (automapFollow && automapMode != am_off)
{
ud.folfvel = input.fvel;
ud.folavel = FixedToInt(input.q16avel);
}
// neutralize all movement when blocked or in automap follow mode
loc.fvel = loc.svel = 0;
loc.q16avel = loc.q16horz = 0;
input.q16avel = input.q16horz = 0;

View file

@ -33,6 +33,7 @@ Prepared for public release: 03/21/2003 - Charlie Wiederhold, 3D Realms
#include "statistics.h"
#include "gamestate.h"
#include "sbar.h"
#include "automap.h"
BEGIN_DUKE_NS
@ -688,10 +689,6 @@ void prelevel_common(int g)
// RRRA E2L1 fog handling.
fogactive = 0;
show2dsector.Zero();
memset(show2dwall, 0, sizeof(show2dwall));
memset(show2dsprite, 0, sizeof(show2dsprite));
resetprestat(0, g);
numclouds = 0;
@ -775,7 +772,6 @@ void donewgame(MapRecord* map, int sk)
ud.last_level = -1;
p->zoom = 768;
M_ClearMenus();
ResetGameVars();

View file

@ -30,6 +30,7 @@ Modifications for JonoF's port by Jonathon Fowler (jf@jonof.id.au)
#include "build.h"
#include "v_video.h"
#include "prediction.h"
#include "automap.h"
BEGIN_DUKE_NS

View file

@ -124,7 +124,6 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, player_struct& w,
("pals", w.pals)
("fricx", w.fric.x)
("fricy", w.fric.y)
("zoom", w.zoom)
("exitx", w.exitx)
("exity", w.exity)
("numloogs", w.numloogs)

View file

@ -40,6 +40,7 @@ source as it is released.
#include "v_draw.h"
#include "texturemanager.h"
#include "mapinfo.h"
#include "automap.h"
BEGIN_DUKE_NS

View file

@ -36,6 +36,7 @@ source as it is released.
#include "ns.h"
#include "global.h"
#include "sounds.h"
#include "automap.h"
BEGIN_DUKE_NS
@ -115,8 +116,8 @@ short EGS(short whatsect, int s_x, int s_y, int s_z, short s_pn, signed char s_s
s->hitag = 0;
}
if (show2dsector[s->sectnum]) show2dsprite[i >> 3] |= (1 << (i & 7));
else show2dsprite[i >> 3] &= ~(1 << (i & 7));
if (show2dsector[s->sectnum]) show2dsprite.Set(i);
else show2dsprite.Clear(i);
spriteext[i] = {};
spritesmooth[i] = {};

View file

@ -63,7 +63,6 @@ struct user_defs
short last_level, secretlevel;
int const_visibility;
int folfvel, folavel, folx, foly, fola;
int reccnt;
int runkey_mode;
@ -124,7 +123,7 @@ struct player_struct
short psectlotag;
// From here on it is unaltered from JFDuke with the exception of a few fields that are no longer needed and were removed.
int zoom, exitx, exity, loogiex[64], loogiey[64], numloogs, loogcnt;
int exitx, exity, loogiex[64], loogiey[64], numloogs, loogcnt;
int invdisptime;
int bobposx, bobposy, oposx, oposy, oposz, pyoff, opyoff;
int posxv, posyv, poszv, last_pissed_time, truefz, truecz;

View file

@ -26,7 +26,6 @@ set( PCH_SOURCES
src/jweapon.cpp
src/lava.cpp
src/light.cpp
src/map2d.cpp
src/mclip.cpp
src/menus.cpp
src/miscactr.cpp

View file

@ -40,6 +40,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
#include "d_protocol.h"
#include "cheats.h"
#include "gamestate.h"
#include "automap.h"
//#include "inv.h"
BEGIN_SW_NS
@ -128,9 +129,9 @@ bool MapCheat(cheatseq_t* c)
{
PLAYERp pp;
if (!(pp=checkCheat(c))) return false;
mapcheat = !mapcheat;
gFullMap = !gFullMap;
// Need to do this differently. The code here was completely broken.
PutStringInfo(pp, GStrings(mapcheat ? "TXTS_AMON" : "TXTS_AMOFF"));
PutStringInfo(pp, GStrings(gFullMap ? "TXTS_AMON" : "TXTS_AMOFF"));
return true;
}

View file

@ -27,6 +27,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
#define QUIET
#include "build.h"
#include "automap.h"
#include "pragmas.h"
@ -1786,33 +1787,10 @@ drawscreen(PLAYERp pp, double smoothratio)
#endif
i = pp->cursectnum;
if (i >= 0)
{
show2dsector.Set(i);
walltype *wal = &wall[sector[i].wallptr];
for (j=sector[i].wallnum; j>0; j--,wal++)
{
i = wal->nextsector;
if (i < 0) continue;
if (wal->cstat&0x0071) continue;
uint16_t const nextwall = wal->nextwall;
if (nextwall < MAXWALLS && wall[nextwall].cstat&0x0071) continue;
if (sector[i].lotag == 32767) continue;
if (sector[i].ceilingz >= sector[i].floorz) continue;
show2dsector.Set(i);
}
}
MarkSectorSeen(pp->cursectnum);
if ((automapMode != am_off) && pp == Player+myconnectindex)
{
if (automapFollow)
{
tx = Follow_posx;
ty = Follow_posy;
}
for (j = 0; j < MAXSPRITES; j++)
{
// Don't show sprites tagged with 257
@ -1825,16 +1803,7 @@ drawscreen(PLAYERp pp, double smoothratio)
}
}
}
if (automapMode == am_full)
{
// only clear the actual window.
twod->AddColorOnlyQuad(windowxy1.x, windowxy1.y, (windowxy2.x + 1) - windowxy1.x, (windowxy2.y + 1) - windowxy1.y, 0xff000000);
renderDrawMapView(tx, ty, zoom*2, FixedToInt(tq16ang));
}
// Draw the line map on top of texture 2d map or just stand alone
drawoverheadmap(tx, ty, zoom*2, FixedToInt(tq16ang));
DrawOverheadMap(tx, ty, FixedToInt(tq16ang));
}
for (j = 0; j < MAXSPRITES; j++)
@ -1870,8 +1839,6 @@ drawscreen(PLAYERp pp, double smoothratio)
SyncStatMessage();
#endif
zoom = GetAutomapZoom(zoom);
restoreinterpolations(); // Stick at end of drawscreen
short_restoreinterpolations(); // Stick at end of drawscreen
if (cl_sointerpolation)
@ -1903,4 +1870,207 @@ bool GameInterface::GenerateSavePic()
}
bool GameInterface::DrawAutomapPlayer(int cposx, int cposy, int czoom, int cang)
{
int i, j, k, l, x1, y1, x2, y2, x3, y3, x4, y4, ox, oy, xoff, yoff;
int dax, day, cosang, sinang, xspan, yspan, sprx, spry;
int xrepeat, yrepeat, z1, z2, startwall, endwall, tilenum, daang;
int xvect, yvect, xvect2, yvect2;
walltype* wal, * wal2;
spritetype* spr;
short p;
static int pspr_ndx[8] = { 0,0,0,0,0,0,0,0 };
bool sprisplayer = false;
short txt_x, txt_y;
xvect = sintable[(2048 - cang) & 2047] * czoom;
yvect = sintable[(1536 - cang) & 2047] * czoom;
xvect2 = mulscale16(xvect, yxaspect);
yvect2 = mulscale16(yvect, yxaspect);
// Draw sprites
k = Player[screenpeek].PlayerSprite;
for (i = 0; i < numsectors; i++)
for (j = headspritesect[i]; j >= 0; j = nextspritesect[j])
{
for (p = connecthead; p >= 0; p = connectpoint2[p])
{
if (Player[p].PlayerSprite == j)
{
if (sprite[Player[p].PlayerSprite].xvel > 16)
pspr_ndx[myconnectindex] = ((PlayClock >> 4) & 3);
sprisplayer = TRUE;
goto SHOWSPRITE;
}
}
if (gFullMap || show2dsprite[j])
{
SHOWSPRITE:
spr = &sprite[j];
PalEntry col = GPalette.BaseColors[56]; // 1=white / 31=black / 44=green / 56=pink / 128=yellow / 210=blue / 248=orange / 255=purple
if ((spr->cstat & 1) > 0)
col = GPalette.BaseColors[248];
if (j == k)
col = GPalette.BaseColors[31];
sprx = spr->x;
spry = spr->y;
k = spr->statnum;
if ((k >= 1) && (k <= 8) && (k != 2)) // Interpolate moving
{
sprx = sprite[j].x;
spry = sprite[j].y;
}
switch (spr->cstat & 48)
{
case 0: // Regular sprite
if (Player[p].PlayerSprite == j)
{
ox = sprx - cposx;
oy = spry - cposy;
x1 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y1 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
if (((gotsector[i >> 3] & (1 << (i & 7))) > 0) && (czoom > 192))
{
daang = (spr->ang - cang) & 2047;
// Special case tiles
if (spr->picnum == 3123) break;
int spnum = -1;
if (sprisplayer)
{
if (gNet.MultiGameType != MULTI_GAME_COMMBAT || j == Player[screenpeek].PlayerSprite)
spnum = 1196 + pspr_ndx[myconnectindex];
}
else spnum = spr->picnum;
double xd = ((x1 << 4) + (xdim << 15)) / 65536.;
double yd = ((y1 << 4) + (ydim << 15)) / 65536.;
double sc = mulscale16(czoom * (spr->yrepeat), yxaspect) / 32768.;
if (spnum >= 0)
{
DrawTexture(twod, tileGetTexture(1196 + pspr_ndx[myconnectindex], true), xd, yd, DTA_ScaleX, sc, DTA_ScaleY, sc, DTA_Rotate, daang * (-360. / 2048),
DTA_CenterOffsetRel, true, DTA_TranslationIndex, TRANSLATION(Translation_Remap, spr->pal), DTA_Color, shadeToLight(spr->shade),
DTA_Alpha, (spr->cstat & 2) ? 0.33 : 1., TAG_DONE);
}
}
}
break;
case 16: // Rotated sprite
x1 = sprx;
y1 = spry;
tilenum = spr->picnum;
xoff = (int)tileLeftOffset(tilenum) + (int)spr->xoffset;
if ((spr->cstat & 4) > 0)
xoff = -xoff;
k = spr->ang;
l = spr->xrepeat;
dax = sintable[k & 2047] * l;
day = sintable[(k + 1536) & 2047] * l;
l = tilesiz[tilenum].x;
k = (l >> 1) + xoff;
x1 -= mulscale16(dax, k);
x2 = x1 + mulscale16(dax, l);
y1 -= mulscale16(day, k);
y2 = y1 + mulscale16(day, l);
ox = x1 - cposx;
oy = y1 - cposy;
x1 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y1 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
ox = x2 - cposx;
oy = y2 - cposy;
x2 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y2 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
drawlinergb(x1 + (xdim << 11), y1 + (ydim << 11),
x2 + (xdim << 11), y2 + (ydim << 11), col);
break;
case 32: // Floor sprite
if (automapMode == am_overlay)
{
tilenum = spr->picnum;
xoff = (int)tileLeftOffset(tilenum) + (int)spr->xoffset;
yoff = (int)tileTopOffset(tilenum) + (int)spr->yoffset;
if ((spr->cstat & 4) > 0)
xoff = -xoff;
if ((spr->cstat & 8) > 0)
yoff = -yoff;
k = spr->ang;
cosang = sintable[(k + 512) & 2047];
sinang = sintable[k];
xspan = tilesiz[tilenum].x;
xrepeat = spr->xrepeat;
yspan = tilesiz[tilenum].y;
yrepeat = spr->yrepeat;
dax = ((xspan >> 1) + xoff) * xrepeat;
day = ((yspan >> 1) + yoff) * yrepeat;
x1 = sprx + mulscale16(sinang, dax) + mulscale16(cosang, day);
y1 = spry + mulscale16(sinang, day) - mulscale16(cosang, dax);
l = xspan * xrepeat;
x2 = x1 - mulscale16(sinang, l);
y2 = y1 + mulscale16(cosang, l);
l = yspan * yrepeat;
k = -mulscale16(cosang, l);
x3 = x2 + k;
x4 = x1 + k;
k = -mulscale16(sinang, l);
y3 = y2 + k;
y4 = y1 + k;
ox = x1 - cposx;
oy = y1 - cposy;
x1 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y1 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
ox = x2 - cposx;
oy = y2 - cposy;
x2 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y2 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
ox = x3 - cposx;
oy = y3 - cposy;
x3 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y3 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
ox = x4 - cposx;
oy = y4 - cposy;
x4 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y4 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
drawlinergb(x1 + (xdim << 11), y1 + (ydim << 11),
x2 + (xdim << 11), y2 + (ydim << 11), col);
drawlinergb(x2 + (xdim << 11), y2 + (ydim << 11),
x3 + (xdim << 11), y3 + (ydim << 11), col);
drawlinergb(x3 + (xdim << 11), y3 + (ydim << 11),
x4 + (xdim << 11), y4 + (ydim << 11), col);
drawlinergb(x4 + (xdim << 11), y4 + (ydim << 11),
x1 + (xdim << 11), y1 + (ydim << 11), col);
}
break;
}
}
}
return true;
}
END_SW_NS

View file

@ -42,6 +42,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
#include "lists.h"
#include "network.h"
#include "pal.h"
#include "automap.h"
#include "mytypes.h"
@ -95,8 +96,6 @@ extern int sw_snd_scratch;
int GameVersion = 20;
int Follow_posx=0,Follow_posy=0;
SWBOOL NoMeters = false;
SWBOOL FinishAnim = 0;
SWBOOL ReloadPrompt = false;
@ -106,7 +105,6 @@ SWBOOL SavegameLoaded = false;
SWBOOL FinishedLevel = false;
short screenpeek = 0;
void drawoverheadmap(int cposx, int cposy, int czoom, short cang);
SWBOOL PreCaching = TRUE;
int GodMode = false;
short Skill = 2;
@ -266,7 +264,6 @@ void InitLevelGlobals(void)
{
ChopTics = 0;
automapMode = am_off;
zoom = 768 / 2;
PlayerGravity = 24;
wait_active_check_offset = 0;
PlaxCeilGlobZadjust = PlaxFloorGlobZadjust = Z(500);

View file

@ -762,8 +762,6 @@ extern FString ThemeSongs[6]; //
#define MAX_EPISODE_NAME_LEN 24
extern char EpisodeNames[3][MAX_EPISODE_NAME_LEN+2];
extern int Follow_posx, Follow_posy;
enum
{
MAX_KEYS = 8,
@ -1623,7 +1621,6 @@ typedef struct
extern SPIN Spin[17];
extern DOOR_AUTO_CLOSE DoorAutoClose[MAX_DOOR_AUTO_CLOSE];
extern int x_min_bound, y_min_bound, x_max_bound, y_max_bound;
#define MAXANIM 256
typedef void ANIM_CALLBACK (ANIMp, void *);
@ -1996,8 +1993,6 @@ extern int GodMode;
extern SWBOOL ReloadPrompt;
extern int x_min_bound, y_min_bound, x_max_bound, y_max_bound;
//extern unsigned char synctics, lastsynctics;
extern short snum;
@ -2050,8 +2045,6 @@ extern char keys[];
extern short screenpeek;
extern int zoom;
#define STAT_DAMAGE_LIST_SIZE 20
extern int16_t StatDamageList[STAT_DAMAGE_LIST_SIZE];
@ -2084,7 +2077,6 @@ int BunnyHatch2(short Weapon); // bunny.c
int DoSkullBeginDeath(int16_t SpriteNum); // skull.c
void TerminateLevel(void); // game.c
void drawoverheadmap(int cposx,int cposy,int czoom,short cang); // game.c
void DrawMenuLevelScreen(void); // game.c
void DebugWriteString(char *string); // game.c
@ -2206,7 +2198,6 @@ struct GameInterface : ::GameInterface
FString GetCoordString() override;
ReservedSpace GetReservedScreenSpace(int viewsize) override;
void QuitToTitle() override;
void ResetFollowPos(bool message) override;
void UpdateSounds() override;
void ErrorCleanup() override;
void GetInput(InputPacket* input, ControlInfo* const hidInput) override;
@ -2219,6 +2210,7 @@ struct GameInterface : ::GameInterface
void LevelCompleted(MapRecord *map, int skill) override;
void NextLevel(MapRecord *map, int skill) override;
void NewGame(MapRecord *map, int skill) override;
bool DrawAutomapPlayer(int x, int y, int z, int a) override;
GameStats getStats() override;

View file

@ -60,15 +60,6 @@ InitTimingVars(void)
}
void GameInterface::ResetFollowPos(bool)
{
auto pp = &Player[myconnectindex];
Follow_posx = pp->posx;
Follow_posy = pp->posy;
}
enum
{
TURBOTURNTIME = (120 / 8),

View file

@ -1,378 +0,0 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 1997, 2005 - 3D Realms Entertainment
This file is part of Shadow Warrior version 1.2
Shadow Warrior is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Original Source: 1997 - Frank Maddin and Jim Norwood
Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
*/
//-------------------------------------------------------------------------
#include "ns.h"
#include "build.h"
#include "game.h"
#include "menus.h"
#include "network.h"
#include "pal.h"
#include "v_draw.h"
BEGIN_SW_NS
extern SWBOOL mapcheat;
enum
{
MAP_WHITE_SECTOR = (LT_GREY + 2),
MAP_RED_SECTOR = (RED + 6),
MAP_FLOOR_SPRITE = (RED + 8),
MAP_ENEMY = (RED + 10),
MAP_SPRITE = (FIRE + 8),
MAP_PLAYER = (GREEN + 6),
MAP_BLOCK_SPRITE = (DK_BLUE + 6),
};
void drawoverheadmap(int cposx, int cposy, int czoom, short cang)
{
int i, j, k, l, x1, y1, x2, y2, x3, y3, x4, y4, ox, oy, xoff, yoff;
int dax, day, cosang, sinang, xspan, yspan, sprx, spry;
int xrepeat, yrepeat, z1, z2, startwall, endwall, tilenum, daang;
int xvect, yvect, xvect2, yvect2;
char col;
walltype *wal, *wal2;
spritetype *spr;
short p;
static int pspr_ndx[8]= {0,0,0,0,0,0,0,0};
SWBOOL sprisplayer = FALSE;
short txt_x, txt_y;
int32_t tmpydim = (xdim * 5) / 8;
renderSetAspect(65536, divscale16(tmpydim * 320, xdim * 200));
xvect = sintable[(2048 - cang) & 2047] * czoom;
yvect = sintable[(1536 - cang) & 2047] * czoom;
xvect2 = mulscale16(xvect, yxaspect);
yvect2 = mulscale16(yvect, yxaspect);
// Draw red lines
for (i = 0; i < numsectors; i++)
{
startwall = sector[i].wallptr;
endwall = sector[i].wallptr + sector[i].wallnum - 1;
z1 = sector[i].ceilingz;
z2 = sector[i].floorz;
for (j = startwall, wal = &wall[startwall]; j <= endwall; j++, wal++)
{
k = wal->nextwall;
if ((unsigned)k >= MAXWALLS)
continue;
if (!mapcheat)
{
if ((show2dwall[j >> 3] & (1 << (j & 7))) == 0)
continue;
if ((k > j) && ((show2dwall[k >> 3] & (1 << (k & 7))) > 0))
continue;
}
if (sector[wal->nextsector].ceilingz == z1)
if (sector[wal->nextsector].floorz == z2)
if (((wal->cstat | wall[wal->nextwall].cstat) & (16 + 32)) == 0)
continue;
col = 152;
if (automapMode == am_full)
{
if (sector[i].floorz != sector[i].ceilingz)
if (sector[wal->nextsector].floorz != sector[wal->nextsector].ceilingz)
if (((wal->cstat | wall[wal->nextwall].cstat) & (16 + 32)) == 0)
if (sector[i].floorz == sector[wal->nextsector].floorz)
continue;
if (sector[i].floorpicnum != sector[wal->nextsector].floorpicnum)
continue;
if (sector[i].floorshade != sector[wal->nextsector].floorshade)
continue;
col = 12; // 1=white / 31=black / 44=green / 56=pink / 128=yellow / 210=blue / 248=orange / 255=purple
}
ox = wal->x - cposx;
oy = wal->y - cposy;
x1 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y1 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
wal2 = &wall[wal->point2];
ox = wal2->x - cposx;
oy = wal2->y - cposy;
x2 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y2 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
renderDrawLine(x1 + (xdim << 11), y1 + (ydim << 11), x2 + (xdim << 11), y2 + (ydim << 11), col);
}
}
// Draw sprites
k = Player[screenpeek].PlayerSprite;
for (i = 0; i < numsectors; i++)
for (j = headspritesect[i]; j >= 0; j = nextspritesect[j])
{
for (p=connecthead; p >= 0; p=connectpoint2[p])
{
if (Player[p].PlayerSprite == j)
{
if (sprite[Player[p].PlayerSprite].xvel > 16)
pspr_ndx[myconnectindex] = ((PlayClock >> 4)&3);
sprisplayer = TRUE;
goto SHOWSPRITE;
}
}
if (mapcheat || (show2dsprite[j >> 3] & (1 << (j & 7))) > 0)
{
SHOWSPRITE:
spr = &sprite[j];
col = 56; // 1=white / 31=black / 44=green / 56=pink / 128=yellow / 210=blue / 248=orange / 255=purple
if ((spr->cstat & 1) > 0)
col = 248;
if (j == k)
col = 31;
sprx = spr->x;
spry = spr->y;
k = spr->statnum;
if ((k >= 1) && (k <= 8) && (k != 2)) // Interpolate moving
{
sprx = sprite[j].x;
spry = sprite[j].y;
}
switch (spr->cstat & 48)
{
case 0: // Regular sprite
if (Player[p].PlayerSprite == j)
{
ox = sprx - cposx;
oy = spry - cposy;
x1 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y1 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
if (automapMode == am_overlay && (gNet.MultiGameType != MULTI_GAME_COMMBAT || j == Player[screenpeek].PlayerSprite))
{
ox = (sintable[(spr->ang + 512) & 2047] >> 7);
oy = (sintable[(spr->ang) & 2047] >> 7);
x2 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y2 = mulscale16(oy, xvect) + mulscale16(ox, yvect);
if (j == Player[screenpeek].PlayerSprite)
{
x2 = 0L;
y2 = -(czoom << 5);
}
x3 = mulscale16(x2, yxaspect);
y3 = mulscale16(y2, yxaspect);
renderDrawLine(x1 - x2 + (xdim << 11), y1 - y3 + (ydim << 11),
x1 + x2 + (xdim << 11), y1 + y3 + (ydim << 11), col);
renderDrawLine(x1 - y2 + (xdim << 11), y1 + x3 + (ydim << 11),
x1 + x2 + (xdim << 11), y1 + y3 + (ydim << 11), col);
renderDrawLine(x1 + y2 + (xdim << 11), y1 - x3 + (ydim << 11),
x1 + x2 + (xdim << 11), y1 + y3 + (ydim << 11), col);
}
else
{
if (((gotsector[i >> 3] & (1 << (i & 7))) > 0) && (czoom > 192))
{
daang = (spr->ang - cang) & 2047;
if (j == Player[screenpeek].PlayerSprite)
{
x1 = 0;
//y1 = (yxaspect << 2);
y1 = 0;
daang = 0;
}
// Special case tiles
if (spr->picnum == 3123) break;
int spnum = -1;
if (sprisplayer)
{
if (gNet.MultiGameType != MULTI_GAME_COMMBAT || j == Player[screenpeek].PlayerSprite)
spnum = 1196 + pspr_ndx[myconnectindex];
}
else spnum = spr->picnum;
double xd = ((x1 << 4) + (xdim << 15)) / 65536.;
double yd = ((y1 << 4) + (ydim << 15)) / 65536.;
double sc = mulscale16(czoom * (spr->yrepeat), yxaspect) / 65536.;
if (spnum >= 0)
{
DrawTexture(twod, tileGetTexture(5407, true), xd, yd, DTA_FullscreenScale, FSMode_Fit320x200,
DTA_CenterOffsetRel, true, DTA_TranslationIndex, TRANSLATION(Translation_Remap, spr->pal), DTA_Color, shadeToLight(spr->shade),
DTA_Alpha, (spr->cstat & 2) ? 0.33 : 1., TAG_DONE);
}
}
}
}
break;
case 16: // Rotated sprite
x1 = sprx;
y1 = spry;
tilenum = spr->picnum;
xoff = (int)tileLeftOffset(tilenum) + (int)spr->xoffset;
if ((spr->cstat & 4) > 0)
xoff = -xoff;
k = spr->ang;
l = spr->xrepeat;
dax = sintable[k & 2047] * l;
day = sintable[(k + 1536) & 2047] * l;
l = tilesiz[tilenum].x;
k = (l >> 1) + xoff;
x1 -= mulscale16(dax, k);
x2 = x1 + mulscale16(dax, l);
y1 -= mulscale16(day, k);
y2 = y1 + mulscale16(day, l);
ox = x1 - cposx;
oy = y1 - cposy;
x1 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y1 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
ox = x2 - cposx;
oy = y2 - cposy;
x2 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y2 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
renderDrawLine(x1 + (xdim << 11), y1 + (ydim << 11),
x2 + (xdim << 11), y2 + (ydim << 11), col);
break;
case 32: // Floor sprite
if (automapMode == am_overlay)
{
tilenum = spr->picnum;
xoff = (int)tileLeftOffset(tilenum) + (int)spr->xoffset;
yoff = (int)tileTopOffset(tilenum) + (int)spr->yoffset;
if ((spr->cstat & 4) > 0)
xoff = -xoff;
if ((spr->cstat & 8) > 0)
yoff = -yoff;
k = spr->ang;
cosang = sintable[(k + 512) & 2047];
sinang = sintable[k];
xspan = tilesiz[tilenum].x;
xrepeat = spr->xrepeat;
yspan = tilesiz[tilenum].y;
yrepeat = spr->yrepeat;
dax = ((xspan >> 1) + xoff) * xrepeat;
day = ((yspan >> 1) + yoff) * yrepeat;
x1 = sprx + mulscale16(sinang, dax) + mulscale16(cosang, day);
y1 = spry + mulscale16(sinang, day) - mulscale16(cosang, dax);
l = xspan * xrepeat;
x2 = x1 - mulscale16(sinang, l);
y2 = y1 + mulscale16(cosang, l);
l = yspan * yrepeat;
k = -mulscale16(cosang, l);
x3 = x2 + k;
x4 = x1 + k;
k = -mulscale16(sinang, l);
y3 = y2 + k;
y4 = y1 + k;
ox = x1 - cposx;
oy = y1 - cposy;
x1 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y1 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
ox = x2 - cposx;
oy = y2 - cposy;
x2 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y2 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
ox = x3 - cposx;
oy = y3 - cposy;
x3 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y3 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
ox = x4 - cposx;
oy = y4 - cposy;
x4 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y4 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
renderDrawLine(x1 + (xdim << 11), y1 + (ydim << 11),
x2 + (xdim << 11), y2 + (ydim << 11), col);
renderDrawLine(x2 + (xdim << 11), y2 + (ydim << 11),
x3 + (xdim << 11), y3 + (ydim << 11), col);
renderDrawLine(x3 + (xdim << 11), y3 + (ydim << 11),
x4 + (xdim << 11), y4 + (ydim << 11), col);
renderDrawLine(x4 + (xdim << 11), y4 + (ydim << 11),
x1 + (xdim << 11), y1 + (ydim << 11), col);
}
break;
}
}
}
// Draw white lines
for (i = 0; i < numsectors; i++)
{
startwall = sector[i].wallptr;
endwall = sector[i].wallptr + sector[i].wallnum - 1;
for (j = startwall, wal = &wall[startwall]; j <= endwall; j++, wal++)
{
if ((uint16_t)wal->nextwall < MAXWALLS)
continue;
if (!mapcheat && (show2dwall[j >> 3] & (1 << (j & 7))) == 0)
continue;
if (!tileGetTexture(wal->picnum)->isValid()) continue;
ox = wal->x - cposx;
oy = wal->y - cposy;
x1 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y1 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
wal2 = &wall[wal->point2];
ox = wal2->x - cposx;
oy = wal2->y - cposy;
x2 = mulscale16(ox, xvect) - mulscale16(oy, yvect);
y2 = mulscale16(oy, xvect2) + mulscale16(ox, yvect2);
renderDrawLine(x1 + (xdim << 11), y1 + (ydim << 11), x2 + (xdim << 11), y2 + (ydim << 11), 24);
}
}
videoSetCorrectedAspect();
}
END_SW_NS

View file

@ -126,7 +126,6 @@ extern SWBOOL DebugOperate;
//unsigned char synctics, lastsynctics;
int zoom;
int ChopTics;
PLAYER Player[MAX_SW_PLAYERS_REG + 1];
@ -2432,91 +2431,6 @@ void PlayerCheckValidMove(PLAYERp pp)
}
}
void
MoveScrollMode2D(PLAYERp pp, ControlInfo* const hidInput)
{
#define TURBOTURNTIME (120/8)
#define NORMALTURN (12+6)
#define RUNTURN (28)
#define PREAMBLETURN 3
#define NORMALKEYMOVE 35
#define MAXVEL ((NORMALKEYMOVE*2)+10)
#define MAXSVEL ((NORMALKEYMOVE*2)+10)
#define MAXANGVEL 100
int32_t keymove;
int32_t momx, momy;
static int mfvel=0, mfsvel=0;
mfsvel = mfvel = 0;
if (M_Active())
return;
if (buttonMap.ButtonDown(gamefunc_Strafe))
mfsvel -= hidInput->dyaw / 4;
mfsvel -= hidInput->dx / 4;
mfvel = -hidInput->dz /4;
keymove = NORMALKEYMOVE;
if (buttonMap.ButtonDown(gamefunc_Turn_Left))
{
mfsvel -= -keymove;
}
if (buttonMap.ButtonDown(gamefunc_Turn_Right))
{
mfsvel -= keymove;
}
if (buttonMap.ButtonDown(gamefunc_Strafe_Left))
{
mfsvel += keymove;
}
if (buttonMap.ButtonDown(gamefunc_Strafe_Right))
{
mfsvel += -keymove;
}
if (buttonMap.ButtonDown(gamefunc_Move_Forward))
{
mfvel += keymove;
}
if (buttonMap.ButtonDown(gamefunc_Move_Backward))
{
mfvel += -keymove;
}
if (mfvel < -MAXVEL)
mfvel = -MAXVEL;
if (mfvel > MAXVEL)
mfvel = MAXVEL;
if (mfsvel < -MAXSVEL)
mfsvel = -MAXSVEL;
if (mfsvel > MAXSVEL)
mfsvel = MAXSVEL;
momx = mulscale9(mfvel, sintable[NORM_ANGLE(FixedToInt(pp->q16ang) + 512)]);
momy = mulscale9(mfvel, sintable[NORM_ANGLE(FixedToInt(pp->q16ang))]);
momx += mulscale9(mfsvel, sintable[NORM_ANGLE(FixedToInt(pp->q16ang))]);
momy += mulscale9(mfsvel, sintable[NORM_ANGLE(FixedToInt(pp->q16ang) + 1536)]);
//mfvel = momx;
//mfsvel = momy;
Follow_posx += momx;
Follow_posy += momy;
Follow_posx = max(Follow_posx, x_min_bound);
Follow_posy = max(Follow_posy, y_min_bound);
Follow_posx = min(Follow_posx, x_max_bound);
Follow_posy = min(Follow_posy, y_max_bound);
}
void PlayerSectorBound(PLAYERp pp, int amt)
{
if (pp->cursectnum < 9)

View file

@ -450,12 +450,6 @@ bool GameInterface::SaveGame(FSaveGameNode *sv)
MWRITE(SineWaveFloor, sizeof(SineWaveFloor),1,fil);
MWRITE(SineWall, sizeof(SineWall),1,fil);
MWRITE(SpringBoard, sizeof(SpringBoard),1,fil);
//MWRITE(Rotate, sizeof(Rotate),1,fil);
//MWRITE(DoorAutoClose, sizeof(DoorAutoClose),1,fil);
MWRITE(&x_min_bound, sizeof(x_min_bound),1,fil);
MWRITE(&y_min_bound, sizeof(y_min_bound),1,fil);
MWRITE(&x_max_bound, sizeof(x_max_bound),1,fil);
MWRITE(&y_max_bound, sizeof(y_max_bound),1,fil);
MWRITE(Track, sizeof(Track),1,fil);
@ -837,12 +831,6 @@ bool GameInterface::LoadGame(FSaveGameNode* sv)
MREAD(SineWaveFloor, sizeof(SineWaveFloor),1,fil);
MREAD(SineWall, sizeof(SineWall),1,fil);
MREAD(SpringBoard, sizeof(SpringBoard),1,fil);
//MREAD(Rotate, sizeof(Rotate),1,fil);
//MREAD(DoorAutoClose, sizeof(DoorAutoClose),1,fil);
MREAD(&x_min_bound, sizeof(x_min_bound),1,fil);
MREAD(&y_min_bound, sizeof(y_min_bound),1,fil);
MREAD(&x_max_bound, sizeof(x_max_bound),1,fil);
MREAD(&y_max_bound, sizeof(y_max_bound),1,fil);
MREAD(Track, sizeof(Track),1,fil);
for (i = 0; i < MAX_TRACKS; i++)

View file

@ -40,6 +40,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
#include "network.h"
#include "v_draw.h"
#include "menus.h"
#include "automap.h"
BEGIN_SW_NS

View file

@ -92,7 +92,6 @@ short AnimCnt = 0;
SINE_WAVE_FLOOR SineWaveFloor[MAX_SINE_WAVE][21];
SINE_WALL SineWall[MAX_SINE_WALL][MAX_SINE_WALL_POINTS];
SPRING_BOARD SpringBoard[20];
int x_min_bound, y_min_bound, x_max_bound, y_max_bound;
void SetSectorWallBits(short sectnum, int bit_mask, SWBOOL set_sectwall, SWBOOL set_nextwall)
{
@ -178,11 +177,7 @@ WallSetup(void)
memset(SineWall, -1, sizeof(SineWall));
x_min_bound = 999999;
y_min_bound = 999999;
x_max_bound = -999999;
y_max_bound = -999999;
extern int x_min_bound, y_min_bound, x_max_bound, y_max_bound;
for (wp = wall, i = 0; wp < &wall[numwalls]; i++, wp++)
{
@ -192,12 +187,6 @@ WallSetup(void)
if (wall[i].picnum == FAF_PLACE_MIRROR_PIC+1)
wall[i].picnum = FAF_MIRROR_PIC+1;
// get map min and max coordinates
x_min_bound = min(TrackerCast(wp->x), x_min_bound);
y_min_bound = min(TrackerCast(wp->y), y_min_bound);
x_max_bound = max(TrackerCast(wp->x), x_max_bound);
y_max_bound = max(TrackerCast(wp->y), y_max_bound);
// this overwrites the lotag so it needs to be called LAST - its down there
// SetupWallForBreak(wp);

View file

@ -6,9 +6,7 @@
#ifndef BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A
#define BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A
#include <string>
std::string base64_encode(unsigned char const* , unsigned int len);
std::string base64_decode(std::string const& s);
TArray<uint8_t> base64_encode(unsigned char const* bytes_to_encode, size_t in_len);
void base64_decode(void* memory, size_t len, const char* encoded_string);
#endif /* BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A */

View file

@ -6,6 +6,7 @@
Version: 1.01.00
Copyright (C) 2004-2017 René Nyffenegger
Copyright (C) 2020 Christoph Oelckers
This source code is provided 'as-is', without any express or implied
warranty. In no event will the author be held liable for any damages
@ -27,22 +28,33 @@
René Nyffenegger rene.nyffenegger@adp-gmbh.ch
*/
Addapted by Christoph Oelckers to FSerializer's needs where std::string is not a good container.
*/
#include <stdint.h>
#include "base64.h"
static const std::string base64_chars =
static const char *base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
static inline bool is_base64(unsigned char c) {
return (isalnum(c) || (c == '+') || (c == '/'));
inline int base64toindex(int c)
{
if (c >= 'A' && c <= 'Z') return c - 'A';
if (c >= 'a' && c <= 'z') return c - 'a' + 26;
if (c >= '0' && c <= '9') return c - '0' + 52;
if (c == '+') return 62;
if (c == '/') return 63;
return -1;
}
std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
std::string ret;
static inline bool is_base64(unsigned char c) {
return base64toindex(c) >= 0;
}
TArray<uint8_t> base64_encode(unsigned char const* bytes_to_encode, size_t in_len) {
TArray<uint8_t> reta((in_len+5)/6 + 6);
int i = 0;
int j = 0;
unsigned char char_array_3[3];
@ -57,7 +69,7 @@ std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_
char_array_4[3] = char_array_3[2] & 0x3f;
for(i = 0; (i <4) ; i++)
ret += base64_chars[char_array_4[i]];
reta.Push(base64_chars[char_array_4[i]]);
i = 0;
}
}
@ -72,50 +84,55 @@ std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
for (j = 0; (j < i + 1); j++)
ret += base64_chars[char_array_4[j]];
reta.Push(base64_chars[char_array_4[j]]);
while((i++ < 3))
ret += '=';
reta.Push('=');
}
return ret;
return reta;
}
std::string base64_decode(std::string const& encoded_string) {
size_t in_len = encoded_string.size();
void base64_decode(void *memory, size_t maxlen, const char *encoded_string) {
size_t in_len = strlen(encoded_string);
int i = 0;
int j = 0;
int in_ = 0;
unsigned char char_array_4[4], char_array_3[3];
std::string ret;
uint8_t* dest = (uint8_t*)memory;
uint8_t* end = dest + maxlen;
while (in_len-- && (encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
char_array_4[i++] = encoded_string[in_]; in_++;
if (i == 4) {
for (i = 0; i < 4; i++)
char_array_4[i] = base64_chars.find(char_array_4[i]) & 0xff;
char_array_4[i] = base64toindex(char_array_4[i]) & 0xff;
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
for (i = 0; (i < 3); i++)
ret += char_array_3[i];
*dest++ = char_array_3[i];
if (dest >= end) return;
i = 0;
}
}
if (i) {
for (j = 0; j < i; j++)
char_array_4[j] = base64_chars.find(char_array_4[j]) & 0xff;
char_array_4[j] = base64toindex(char_array_4[j]) & 0xff;
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
for (j = 0; (j < i - 1); j++)
{
*dest++ = char_array_3[j];
if (dest >= end) return;
}
return ret;
}
while (dest < end) *dest++ = 0;
}

View file

@ -37,10 +37,16 @@ Pause "pause"
T "messagemode"
Tab "togglemap"
mapbind F "togglefollow"
mapbind R "togglerotate"
mapbind - "+Shrink_Screen"
mapbind = "+Enlarge_Screen"
mapbind mwheelup "am_zoom 1.2"
mapbind mwheeldown "am_zoom -1.2"
mapbind KP8 "+am_panup"
mapbind KP2 "+am_pandown"
mapbind KP4 "+am_panleft"
mapbind KP6 "+am_panright"
- "sizedown"
= "sizeup"
K "coop_view"

View file

@ -14,6 +14,11 @@ KP9 "+Look_Up"
KP3 "+Look_Down"
mapbind KP- "+Shrink_Screen"
mapbind KP+ "+Enlarge_Screen"
mapbind W "+am_panup"
mapbind A "+am_pandown"
mapbind S "+am_panleft"
mapbind D "+am_panright"
KP- "sizedown"
KP+ "sizeup"
Y "show_weapon"

View file

@ -461,7 +461,7 @@ OptionMenu "CustomizeControls"// protected
Submenu "$CNTRLMNU_WEAPONS" , "WeaponsControlMenu"
Submenu "$CNTRLMNU_INVENTORY" , "InventoryControlsMenu"
Submenu "$CNTRLMNU_OTHER" , "OtherControlsMenu"
//Submenu "$MAPCNTRLMNU_CONTROLS" , "MapControlsMenu" // todo after thorough cleanup
Submenu "$MAPCNTRLMNU_CONTROLS" , "MapControlsMenu" // todo after thorough cleanup
StaticText ""
StaticText "$CTRL_PRESET"
SafeCommand "$CTRL_DEFAULT", "controlpreset 0" //engine/defbinds.txt
@ -678,12 +678,6 @@ OptionMenu "OtherControlsMenu"// protected
ScrollTop 2
StaticTextSwitchable "$CNTRLMNU_SWITCHTEXT1", "$CNTRLMNU_SWITCHTEXT2", "ControlMessage"
StaticText ""
Control "$CNTRLMNU_AUTOMAP" , "togglemap"
MapControl "$MAPCNTRLMNU_TOGGLEFOLLOW" ,"togglefollow"
MapControl "$MAPCNTRLMNU_ZOOMIN" , "+enlarge_Screen"
MapControl "$MAPCNTRLMNU_ZOOMOUT" , "+shrink_screen"
StaticText ""
Control "$CNTRLMNU_CHASECAM" , "third_person_view"
@ -715,6 +709,24 @@ OptionMenu "OtherControlsMenu"// protected
Control "$CNTRLMNU_QUICKLOAD" , "quickload"
}
OptionMenu "MapControlsMenu"
{
Title "$MAPCNTRLMNU_CONTROLS"
StaticText ""
Control "$CNTRLMNU_AUTOMAP" , "togglemap"
MapControl "$MAPCNTRLMNU_TOGGLEFOLLOW" ,"togglefollow"
MapControl "$MAPCNTRLMNU_ROTATE" ,"togglerotate"
StaticText ""
MapControl "$MAPCNTRLMNU_ZOOMIN" , "+enlarge_Screen"
MapControl "$MAPCNTRLMNU_ZOOMOUT" , "+shrink_screen"
StaticText ""
MapControl "$MAPCNTRLMNU_PANLEFT", "+am_panleft"
MapControl "$MAPCNTRLMNU_PANRIGHT", "+am_panright"
MapControl "$MAPCNTRLMNU_PANUP", "+am_panup"
MapControl "$MAPCNTRLMNU_PANDOWN", "+am_pandown"
}
//-------------------------------------------------------------------------------------------
//
// Mouse Menu
@ -958,6 +970,8 @@ OptionMenu "VideoOptions" //protected
Submenu "$OPTMNU_HUD", "HUDOptions"
Submenu "$OPTMNU_POLYMOST", "PolymostOptions"
Submenu "$AUTOMAPMNU_TITLE", "AutomapOptions"
StaticText ""
Slider "$DSPLYMNU_GAMMA", "vid_gamma", 0.75, 3.0, 0.05, 2
Slider "$DSPLYMNU_BRIGHTNESS", "vid_brightness", -0.8,0.8, 0.05,2
@ -989,6 +1003,28 @@ OptionMenu "VideoOptions" //protected
}
OptionMenu "AutomapOptions"
{
Title "$AUTOMAPMNU_TITLE"
Submenu "$MAPCNTRLMNU_CONTROLS" , "MapControlsMenu"
StaticText ""
Option "$AUTOMAPMNU_ROTATE", "am_rotate", "OnOff"
Option "$AUTOMAPMNU_FOLLOW", "am_follow", "OnOff"
// move map controls here.
// todo:
//CVAR(Bool, am_textfont, false, CVAR_ARCHIVE)
//CVAR(Bool, am_showlabel, false, CVAR_ARCHIVE)
//CVAR(Bool, am_nameontop, false, CVAR_ARCHIVE)
//CVAR(Color, am_twosidedcolor, 0xaaaaaa, CVAR_ARCHIVE)
//CVAR(Color, am_onesidedcolor, 0xaaaaaa, CVAR_ARCHIVE)
//CVAR(Color, am_playercolor, 0xaaaaaa, CVAR_ARCHIVE)
//CVAR(Color, am_ovtwosidedcolor, 0xaaaaaa, CVAR_ARCHIVE)
//CVAR(Color, am_ovonesidedcolor, 0xaaaaaa, CVAR_ARCHIVE)
//CVAR(Color, am_ovplayercolor, 0xaaaaaa, CVAR_ARCHIVE)
}
//-------------------------------------------------------------------------------------------
//
// HUD options

View file

@ -20,3 +20,5 @@ KP+ "sizeup"
U "+Mouse_Aiming"
I "toggle cl_crosshair"
CapsLock "toggle cl_autorun"
mapbind uparrow "+am_panup"
mapbind downarrow "+am_pandown"

View file

@ -330,25 +330,25 @@ Beer,CNTRLMNU_BEER,,,,,Bier,,,,,,,,,,,,,,,Bere,,
Cow Pie,CNTRLMNU_COWPIE,not translatable,,,,,,,,,,,,,,,,,,,Plăcintă de vacă,,
Yeehaa,CNTRLMNU_YEEHAA,not translatable,,,,,,,,,,,,,,,,,,,,,
Whiskey,CNTRLMNU_WHISKEY,,,,,Whisky,,,,,,,,,,,,,,,,,
Moonshine,CNTRLMNU_MOONSHINE,,,,,Schwarzgebrannter,,,,,,,,,,,,,,,,,
Crystal Ball,CNTRLMNU_CRYSTALBALL,,,,,Kristallkugel,,,,,,,,,,,,,,,,,
Jump Boots,CNTRLMNU_JUMPBOOTS,,,,,Sprungstiefel,,,,,,,,,,,,,,,,,
Beast Vision,CNTRLMNU_BEASTVISION,,,,,,,,,,,,,,,,,,,,,,
Tank Mode,CNTRLMNU_TANKMODE,,,,,Panzermodus,,,,,,,,,,,,,,,,,
Moonshine,CNTRLMNU_MOONSHINE,,,,,Schwarzgebrannter,,,,,,,,,,,,,,,Whiskey ilegal,,
Crystal Ball,CNTRLMNU_CRYSTALBALL,,,,,Kristallkugel,,,,,,,,,,,,,,,Bilă de cristal,,
Jump Boots,CNTRLMNU_JUMPBOOTS,,,,,Sprungstiefel,,,,,,,,,,,,,,,Cizme sărituri,,
Beast Vision,CNTRLMNU_BEASTVISION,,,,,,,,,,,,,,,,,,,,Vedere de bestie,,
Tank Mode,CNTRLMNU_TANKMODE,,,,,Panzermodus,,,,,,,,,,,,,,,Mod Tanc,,
Smokes,CNTRLMNU_SMOKES,What precisely is this?,,,,,,,,,,,,,,,,,,,,,
Fire Mission,CNTRLMNU_FIRE_MISSION,,,,,,,,,,,,,,,,,,,,,,
Reload,CNTRLMNU_RELOAD,,,,,"Waffe laden
",,,,,,,,,,,,,,,,,
Radar,CNTRLMNU_RADAR,,,,,,,,,,,,,,,,,,,,,,
Radar,CNTRLMNU_RADAR,,,,,,,,,,,,,,,,,,,,Încarcă,,
Other,CNTRLMNU_OTHER,,,,Ostatní,Andere,,Alia,Otros,,Muu,Autres,Más,Altro,その他,그 외 조작,Andere,Inne,Outro,,,Прочее,Остало
Messages: OFF,MSGOFF,,,,Zprávy ZAP,Meldungen AUS,Μηνύματα ΚΛΕΙΣΤΑ,Mesaĝoj MALAKTIVA,Mensajes DESACTIVADOS,,Viestit POIS PÄÄLTÄ,Messages désactivés.,Üzenetek KI,Messaggi DISATTIVATI,メッセージ: オフ,메시지 끔,Berichten UIT,Wiadomości WYŁĄCZONE,Mensagens DESATIVADAS,,,Сообщения ОТКЛЮЧЕНЫ,Поруке ИСКЉУЧЕНЕ
Messages: ON,MSGON,,,,Zprávy VYP,Meldungen AN,Μηνύματα ΑΝΟΙΧΤΑ,Mesaĝoj AKTIVA,Mensajes ACTIVADOS,,Viestit PÄÄLLÄ,Messages activés.,Üzenetek BE,Messaggi ATTIVATI,メッセージ: オン,메시지 켬,Berichten AAN,Wiadomości WŁĄCZONE,Mensagens ATIVADAS,,,Сообщения ВКЛЮЧЁНЫ,Поруке УКЉУЧЕНЕ
Writin': OFF,MSGOFF,,Redneck RedneckRides,,Zprávy ZAP,Geschreibsel: AUS,Μηνύματα ΚΛΕΙΣΤΑ,Mesaĝoj MALAKTIVA,Mensajes DESACTIVADOS,,Viestit POIS PÄÄLTÄ,Messages désactivés.,Üzenetek KI,Messaggi DISATTIVATI,メッセージ: オフ,메시지 끔,Berichten UIT,Wiadomości WYŁĄCZONE,Mensagens DESATIVADAS,,,Сообщения ОТКЛЮЧЕНЫ,Поруке ИСКЉУЧЕНЕ
Writin': ON,MSGON,,Redneck RedneckRides,,Zprávy VYP,Geschreibsel: AN,Μηνύματα ΑΝΟΙΧΤΑ,Mesaĝoj AKTIVA,Mensajes ACTIVADOS,,Viestit PÄÄLLÄ,Messages activés.,Üzenetek BE,Messaggi ATTIVATI,メッセージ: オン,메시지 켬,Berichten AAN,Wiadomości WŁĄCZONE,Mensagens ATIVADAS,,,Сообщения ВКЛЮЧЁНЫ,Поруке УКЉУЧЕНЕ
Mouse aiming ON,TXT_MOUSEAIMON,,,,,Maus-Blick AN,,,,,,,,,,,,,,,,,
Mouse aiming OFF,TXT_MOUSEAIMOFF,,,,,Maus-Blick AUS,,,,,,,,,,,,,,,,,
Rat aimin' ON,TXT_MOUSEAIMON,I don't think this translates well...,Redneck RedneckRides,,,Maus-Blick AN,,,,,,,,,,,,,,,,,
Rat aimin' OFF,TXT_MOUSEAIMOFF,,Redneck RedneckRides,,,Maus-Blick AUS,,,,,,,,,,,,,,,,,
Messages: OFF,MSGOFF,,,,Zprávy ZAP,Meldungen AUS,Μηνύματα ΚΛΕΙΣΤΑ,Mesaĝoj MALAKTIVA,Mensajes DESACTIVADOS,,Viestit POIS PÄÄLTÄ,Messages désactivés.,Üzenetek KI,Messaggi DISATTIVATI,メッセージ: オフ,메시지 끔,Berichten UIT,Wiadomości WYŁĄCZONE,Mensagens DESATIVADAS,,Mesaje OPRITE,Сообщения ОТКЛЮЧЕНЫ,Поруке ИСКЉУЧЕНЕ
Messages: ON,MSGON,,,,Zprávy VYP,Meldungen AN,Μηνύματα ΑΝΟΙΧΤΑ,Mesaĝoj AKTIVA,Mensajes ACTIVADOS,,Viestit PÄÄLLÄ,Messages activés.,Üzenetek BE,Messaggi ATTIVATI,メッセージ: オン,메시지 켬,Berichten AAN,Wiadomości WŁĄCZONE,Mensagens ATIVADAS,,Mesaje PORNITE,Сообщения ВКЛЮЧЁНЫ,Поруке УКЉУЧЕНЕ
Writin': OFF,MSGOFF,,Redneck RedneckRides,,Zprávy ZAP,Geschreibsel: AUS,Μηνύματα ΚΛΕΙΣΤΑ,Mesaĝoj MALAKTIVA,Mensajes DESACTIVADOS,,Viestit POIS PÄÄLTÄ,Messages désactivés.,Üzenetek KI,Messaggi DISATTIVATI,メッセージ: オフ,메시지 끔,Berichten UIT,Wiadomości WYŁĄCZONE,Mensagens DESATIVADAS,,Scriere oprită,Сообщения ОТКЛЮЧЕНЫ,Поруке ИСКЉУЧЕНЕ
Writin': ON,MSGON,,Redneck RedneckRides,,Zprávy VYP,Geschreibsel: AN,Μηνύματα ΑΝΟΙΧΤΑ,Mesaĝoj AKTIVA,Mensajes ACTIVADOS,,Viestit PÄÄLLÄ,Messages activés.,Üzenetek BE,Messaggi ATTIVATI,メッセージ: オン,메시지 켬,Berichten AAN,Wiadomości WŁĄCZONE,Mensagens ATIVADAS,,Scriere pornită,Сообщения ВКЛЮЧЁНЫ,Поруке УКЉУЧЕНЕ
Mouse aiming ON,TXT_MOUSEAIMON,,,,,Maus-Blick AN,,,,,,,,,,,,,,,Țintire cu mouse OPRITĂ,,
Mouse aiming OFF,TXT_MOUSEAIMOFF,,,,,Maus-Blick AUS,,,,,,,,,,,,,,,Țintire cu mouse PORNITĂ,,
Rat aimin' ON,TXT_MOUSEAIMON,I don't think this translates well...,Redneck RedneckRides,,,Maus-Blick AN,,,,,,,,,,,,,,,Țintire de șobolan PORNITĂ,,
Rat aimin' OFF,TXT_MOUSEAIMOFF,,Redneck RedneckRides,,,Maus-Blick AUS,,,,,,,,,,,,,,,Țintire de șobolan OPRITĂ,,
Customize Map Controls,MAPCNTRLMNU_TITLE,most are not used yet but will be,,,Nastavení ovládání mapy,Automapsteuerung einstellen,,Agordi mapregilojn,Controles del mapa,,Kartanohjausasetukset,Contrôles Carte,,Personalizza i controlli mappa,マップコントロール カスタマイズ,미니맵 단축키 설정,Kaartcontroles aanpassen,Ustaw klawisze mapy,Configurar comandos de mapa,,Personalizare schemă de control a hărții,Клавиши управления автокартой,Промени контроле мапе
Map Controls,MAPCNTRLMNU_CONTROLS,,,,Ovládání mapy,Automapsteuerung,,Mapregilojn,Controles del mapa,,Kartanohjaus,Contrôles de la carte,,Controlli mappa,マップコントロール,미니맵 조정,Kaartcontroles,Klawisze mapy,Comandos de mapa,,Schemă de control a hărtii,Автокарта,Контроле мапе
Pan left,MAPCNTRLMNU_PANLEFT,,,,Posun vlevo,Nach links,,Alturni maldekstren,Mover a la izquierda,,Panoroi vasemmalle,Aller à gauche,,Sposta a sinistra,左に振る,왼쪽으로 이동,Pan links,Przesuń w lewo,Mover para a esquerda,,Mutare spre stânga,Сдвиг влево,Лево
@ -360,76 +360,77 @@ Zoom out,MAPCNTRLMNU_ZOOMOUT,,,,Oddálit,Rauszoomen,,Malzomi,Alejar,,Loitonna,Zo
Toggle zoom,MAPCNTRLMNU_TOGGLEZOOM,,,,Zoom vyp./zap.,Zoom an/aus,,Inversigi zomon,Alternar zoom,,Zoomauksen vaihtokytkin,Alterner zoom,,Abilita/disabilita zoom,ズーム切替,표준배율 조정,Omschakelen van de zoom,Przełącz przybliżanie,Ativar zoom,,Comutator Zoom,Переключить зум,Укључи зум
Toggle follow,MAPCNTRLMNU_TOGGLEFOLLOW,,,,Následování hráče vyp./zap.,Folgen an/aus,,Aktivigi sekvon,Alternar seguimiento,,Seuraamistilan vaihtokytkin,Alterner suivi,,Abilita/disabilita scorrimento mappa,追従切替,추적모드 조정,Schakelen volgen,Przełącz śledzenie,Ativar seguimento,,Comutator urmărire jucător,Переключить привязку к игроку,Укључи праћење
Toggle grid,MAPCNTRLMNU_TOGGLEGRID,,,,Mřížka vyp./zap.,Gitter an/aus,,Aktivigi kradon,Alternar cuadrícula,Alternar rejilla,Ruudukon vaihtokytkin,Alterner grille,,Abilita/disabilita la griglia,グリッド切替,그리드 조정,Kiesnet,Przełącz siatkę,Ativar grade,,Comutator grilă,Переключить сетку,Укључи координатну мрежу
Toggle rotate,MAPCNTRLMNU_ROTATE,,,,,Rotation an/aus,,,,,,,,,,,,,,,,,
Toggle texture,MAPCNTRLMNU_TOGGLETEXTURE,,,,Textury vyp./zap.,Texturen an/aus,,Akitvigi teksturon,Alternar textura,,Pintakuvioinnin vaihtokytkin,Alterner texture,,Abilita/disabilita le texture,テクスチャ切替,미니맵 텍스쳐 조정,Toggle textuur,Przełącz tekstury,Ativar texturas,,Comutator mod texturat,Переключить текстуры,Укључи текстуру
Toggle automap,CNTRLMNU_AUTOMAP,,,,Zap. / Vyp. automapu,Automap an/aus,,Baskuligi aŭtomapo,Alternar automapa,,Kytke automaattikartta päälle/pois,Activer Carte,Térkép ki- bekapcsolása,Toggle automappa,オートマップの切替,오토맵 조정,Automap aan/uit,Włącz mapę,Ativar automapa,,,Открыть автокарту,Прикажи аутомапу
Chasecam,CNTRLMNU_CHASECAM,,,,Kamera z třetí osoby,Verfolgerkamera,,Ĉaskamerao,Cámara de Seguimiento,,Seurantakamera,Caméra 3ième personne,Külsőnézetű kamera,Telecamera di inseguimento,背後視点,3인칭 카메라,,Kamera Śledzenia,Câmera de terceira-pessoa,Câmera em terceira-pessoa,,Вид от 3-го лица (Chasecam),Чејс-кем
Screenshot,CNTRLMNU_SCREENSHOT,,,,Pořídit snímek obrazovky,,,Ekranfoto,Captura de pantalla,,Kuvakaappaus,Capture d'écran,Képernyő lefényképezése,Cattura schermo,画面キャプチャ,스크린샷,,Zrzut ekranu,Captura de tela,,,Скриншот,Усликај
Open console,CNTRLMNU_CONSOLE,,,,Otevřít konzoli,Konsole öffnen,,Malfermi konzolon,Abrir consola,,Avaa konsoli,Ouvrir Console,Konzol előhozása,Apri la console,コンソールを開く,콘솔 열기,Open console,Otwórz konsolę,Abrir console,Abrir consola,,Открыть консоль,Отвори консолу
Pause,CNTRLMNU_PAUSE,,,,Pauza,,,Paŭzo,Pausa,,Tauko,,Szünet,Pausa,ポーズ,일시정지,Pauze,Pauza,Pausa,,,Пауза,Пауза
Increase Display Size,CNTRLMNU_DISPLAY_INC,,,,Zvětšit velikost displeje,Anzeige vergrößern,,Pligrandigi Ekranamplekson,Agrandar Ventana,,Suurenna näytön kokoa,Agrandir l'affichage,Képméret növelése,Incrementa la dimensione del display,画面サイズを拡大,화면 크기 늘리기,Vergroot het display,Powiększ Rozmiar Wyświetlania,Aumentar Tamanho de Tela,Aumentar Tamanho do Ecrã,,Увеличить размер экрана,Повећајте величину екрана
Decrease Display Size,CNTRLMNU_DISPLAY_DEC,,,,Zmenšit velikost displeje,Anzeige verkleinern,,Plimalgrandigi Ekranamplekson,Reducir Ventana,,Pienennä näytön kokoa,Réduire l'affichage,Képméret csökkentése,Decrementa la dimensione del display,画面サイズを縮小,화면 크기 줄이기,Verlaag het display,Pomniejsz Rozmiar Wyświetlania,Diminuir Tamanho de Tela,Diminuir Tamanho do Ecrã,,Уменьшить размер экрана,Смањите величину екрана
Toggle automap,CNTRLMNU_AUTOMAP,,,,Zap. / Vyp. automapu,Automap an/aus,,Baskuligi aŭtomapo,Alternar automapa,,Kytke automaattikartta päälle/pois,Activer Carte,Térkép ki- bekapcsolása,Toggle automappa,オートマップの切替,오토맵 조정,Automap aan/uit,Włącz mapę,Ativar automapa,,Comutator hartă computerizată,Открыть автокарту,Прикажи аутомапу
Chasecam,CNTRLMNU_CHASECAM,,,,Kamera z třetí osoby,Verfolgerkamera,,Ĉaskamerao,Cámara de Seguimiento,,Seurantakamera,Caméra 3ième personne,Külsőnézetű kamera,Telecamera di inseguimento,背後視点,3인칭 카메라,,Kamera Śledzenia,Câmera de terceira-pessoa,Câmera em terceira-pessoa,Cameră urmăritoare,Вид от 3-го лица (Chasecam),Чејс-кем
Screenshot,CNTRLMNU_SCREENSHOT,,,,Pořídit snímek obrazovky,,,Ekranfoto,Captura de pantalla,,Kuvakaappaus,Capture d'écran,Képernyő lefényképezése,Cattura schermo,画面キャプチャ,스크린샷,,Zrzut ekranu,Captura de tela,,Captură ecran,Скриншот,Усликај
Open console,CNTRLMNU_CONSOLE,,,,Otevřít konzoli,Konsole öffnen,,Malfermi konzolon,Abrir consola,,Avaa konsoli,Ouvrir Console,Konzol előhozása,Apri la console,コンソールを開く,콘솔 열기,Open console,Otwórz konsolę,Abrir console,Abrir consola,Deschide consola,Открыть консоль,Отвори консолу
Pause,CNTRLMNU_PAUSE,,,,Pauza,,,Paŭzo,Pausa,,Tauko,,Szünet,Pausa,ポーズ,일시정지,Pauze,Pauza,Pausa,,Pauză,Пауза,Пауза
Increase Display Size,CNTRLMNU_DISPLAY_INC,,,,Zvětšit velikost displeje,Anzeige vergrößern,,Pligrandigi Ekranamplekson,Agrandar Ventana,,Suurenna näytön kokoa,Agrandir l'affichage,Képméret növelése,Incrementa la dimensione del display,画面サイズを拡大,화면 크기 늘리기,Vergroot het display,Powiększ Rozmiar Wyświetlania,Aumentar Tamanho de Tela,Aumentar Tamanho do Ecrã,Mărire ecran,Увеличить размер экрана,Повећајте величину екрана
Decrease Display Size,CNTRLMNU_DISPLAY_DEC,,,,Zmenšit velikost displeje,Anzeige verkleinern,,Plimalgrandigi Ekranamplekson,Reducir Ventana,,Pienennä näytön kokoa,Réduire l'affichage,Képméret csökkentése,Decrementa la dimensione del display,画面サイズを縮小,화면 크기 줄이기,Verlaag het display,Pomniejsz Rozmiar Wyświetlania,Diminuir Tamanho de Tela,Diminuir Tamanho do Ecrã,Micșorare ecran,Уменьшить размер экрана,Смањите величину екрана
Open Help,CNTRLMNU_OPEN_HELP,,,,Otevřít nápovědu,Hilfe öffnen,,Malfermi Helpon,Abrir Ayuda,,Avaa ohje,Ouvrir Aide,Segítség előhozása,Apri l'aiuto,"ヘルプを開く
",도움말 열기,Open hulp,Otwórz Pomoc,Abrir Ajuda,,,Экран помощи,Отвори помоћ
Open Save Menu,CNTRLMNU_OPEN_SAVE,,,,Otevřít menu pro uložení,Speichermenü öffnen,,Malfermi Konservmenuon,Menú de Guardar Partida,,Avaa tallennusvalikko,Ouvrir Menu Sauvegarde,Mentés menü előhozása,Apri il menu di salvataggio,セーブメニューを開く,저장 화면 열기,Menu opslaan openen,Otwórz Menu Zapisu,Abrir Menu de Salvar,Abrir Menu de Gravação,,Сохранение игры,Отвори сачуване игре
Open Load Menu,CNTRLMNU_OPEN_LOAD,,,,Otevřít menu pro načtení,Lademenü öffnen,,Malfermi Ŝarĝmenuon,Menú de Cargar Partida,,Avaa latausvalikko,Ouvrir Menu Chargement,Betöltés menü előhozása,Apri il menu di caricamento,ロードメニューを開く,불러오기 화면 열기,Menu laden openen,Otwórz Menu Wczytania,Abrir Menu de Carregar,,,Загрузка игры,Отвори игре за учитати
Open Options Menu,CNTRLMNU_OPEN_OPTIONS,,,,Otevřít nastavení,Optionsmenü öffnen,,Malfermi Agordmenuon,Menú de Opciones,,Avaa asetusvalikko,Ouvrir Menu Options,Beállítások menü előhozása,Apri il menu delle opzioni,オプションメニューを開く,설정 화면 열기,Menu Opties openen,Otwórz Menu Opcji,Abrir Menu de Opções,,,Главное меню настроек,Отвори мени опција
Open Display Menu,CNTRLMNU_OPEN_DISPLAY,,,,Otevřít nastavení grafiky,Anzeigemenü öffnen,,Malfermi Ekranmenuon,Menú de Opciones de Visualización,,Avaa näyttövalikko,Ouvrir Menu Affichage,Megjelenítés menü előhozása,Apri il menu del display,ディスプレイメニューを開く,디스플레이 화면 열기,Displaymenu openen,Otwórz Menu Wyświetlania,Abrir Menu de Vídeo,,,Меню настроек видео,Отвори мени приказа
Quicksave,CNTRLMNU_QUICKSAVE,,,,Rychlé uložení,Schnellspeichern,,Rapidkonservo,Guardado Rápido,,Pikatallenna,Sauv. Rapide,Gyorsmentés,Salvataggio rapido,クイックセーブ,빠른 저장,Snel opslaan,Szybki Zapis,Salvamento rápido,Gravação rápida,,Быстрое сохранение,Брзо-сачувај
Quickload,CNTRLMNU_QUICKLOAD,,,,Rychlé načtení,Schnellladen,,Rapidŝarĝo,Cargado Rápido,,Pikalataa,Charg. Rapide,Gyors betöltés,Caricamento rapido,クイックロード,빠른 불러오기,Snel laden,Szybkie Wczytanie,Carregamento rápido,,,Быстрая загрузка,Брзо-учитај
Exit to Main Menu,CNTRLMNU_EXIT_TO_MAIN,,,,Odejít do hlavního menu,Zurück zum Hauptmenü,,Eliri al Ĉefa Menuo,Salir al Menú Principal,,Poistu päävalikkoon,Sortie Menu Principal,Kilépés a főmenübe,Esci dal menu principale,メインメニューに戻る,메뉴로 나오기,Afsluiten naar het hoofdmenu,Wyjdź do Głównego Menu,Sair para o Menu Principal,,,Выход в главное меню,Изађи у главни мени
Toggle Messages,CNTRLMNU_TOGGLE_MESSAGES,,,,Zap. / Vyp. zprávy,Nachrichten an/aus,,Baskuligi Mensaĝojn,Alternar Mensajes,,Kytke viestit päälle tai pois,Act./Déasct. Messages,Üzenetek kapcsololása,Toggle messaggi,メッセージ表示の切替,메시지 토글,Berichten aan/uit,Włącz / Wyłącz Wiadomości,Ativar Mensagens,,,Переключение сообщений,Таглави поруке
Quit Game,CNTRLMNU_MENU_QUIT,,,,Odejít ze hry,Spiel beenden,,Ĉesigi Ludon,Salir del Juego,,Lopeta peli,Quitter le Jeu,Kilépés a játékból.,Esci dal gioco,ゲームを終了,게임 종료,Stop het spel,Wyjdź z Gry,Sair do Jogo,,,Выход,Изађи из игре
Adjust Gamma,CNTRLMNU_ADJUST_GAMMA,,,,Nastavit gamu,Gamma-Anpassung,,Agordi Gamaon,Ajustar Gamma,,Säädä gammaa,Ajuster Gamma,Gamma állítása,Aggiustamento Gamma,ガンマ値を調整,감마 조정,Gamma aanpassen,Dostosuj Gammę,Ajustar Gama,,,Настройка гаммы,Подесите осветљење
Mouse Options,MOUSEMNU_TITLE,,,,Nastavení myši,Mausoptionen,,Musilagordoj,Opciones del Ratón,,Hiiriasetukset,Options Souris,Egér beállítások,Opzioni Mouse,マウス オプション,마우스 설정,Muis opties,Opcje Myszki,Opções de mouse,Opções do rato,,Настройки мыши,Миш
Enable mouse,MOUSEMNU_ENABLEMOUSE,,,,Povolit myš,Maus aktiv,,Aktivigi muson,Habilitar ratón,,Ota hiiri käyttöön,Activer Souris,Egér engedélyezése,Abilita il mouse,マウスの使用,마우스 사용,Muis inschakelen,Włącz myszkę,Habilitar mouse,Permitir uso do rato,,Использовать мышь,Укључи миш
Enable mouse in menus,MOUSEMNU_MOUSEINMENU,,,,Povolit myš v nabídkách,Maus aktiv in Menüs,,Aktivigi muson en menuoj,Usa ratón en los menús,,Ota hiiri käyttöön valikoissa,Activer Souris dans les Menus,Egér engedélyezése a menüben.,Abilita il mouse nei menu,メニューでのマウスの使用,메뉴에서 마우스 사용,Muis in menu's inschakelen,Włącz myszkę w menu,Habilitar mouse nos menus,Permitir rato nos menus,,Использовать мышь в меню,Укључи миш у менијима
Show back button,MOUSEMNU_SHOWBACKBUTTON,,,,Zobrazit tlačítko zpět,Zeige Zurück-Knopf,,Montri antaŭklavon,Botón de retroceso,,Näytä taaksenäppäin,Afficher le bouton retour,Vissza gomb mutatása,Mostra il bottone per tornare indietro,戻るボタンを表示,뒤로가기 버튼 보이기,Toon terug knop,Pokaż przycisk powrotu,Mostrar botão de voltar,,,Расположение кнопки «назад»,Прикажи тастер за назад
",도움말 열기,Open hulp,Otwórz Pomoc,Abrir Ajuda,,Deschide Ajutor,Экран помощи,Отвори помоћ
Open Save Menu,CNTRLMNU_OPEN_SAVE,,,,Otevřít menu pro uložení,Speichermenü öffnen,,Malfermi Konservmenuon,Menú de Guardar Partida,,Avaa tallennusvalikko,Ouvrir Menu Sauvegarde,Mentés menü előhozása,Apri il menu di salvataggio,セーブメニューを開く,저장 화면 열기,Menu opslaan openen,Otwórz Menu Zapisu,Abrir Menu de Salvar,Abrir Menu de Gravação,Deschide meniul de salvare,Сохранение игры,Отвори сачуване игре
Open Load Menu,CNTRLMNU_OPEN_LOAD,,,,Otevřít menu pro načtení,Lademenü öffnen,,Malfermi Ŝarĝmenuon,Menú de Cargar Partida,,Avaa latausvalikko,Ouvrir Menu Chargement,Betöltés menü előhozása,Apri il menu di caricamento,ロードメニューを開く,불러오기 화면 열기,Menu laden openen,Otwórz Menu Wczytania,Abrir Menu de Carregar,,Deschide meniul de încărcare,Загрузка игры,Отвори игре за учитати
Open Options Menu,CNTRLMNU_OPEN_OPTIONS,,,,Otevřít nastavení,Optionsmenü öffnen,,Malfermi Agordmenuon,Menú de Opciones,,Avaa asetusvalikko,Ouvrir Menu Options,Beállítások menü előhozása,Apri il menu delle opzioni,オプションメニューを開く,설정 화면 열기,Menu Opties openen,Otwórz Menu Opcji,Abrir Menu de Opções,,Deschide setările,Главное меню настроек,Отвори мени опција
Open Display Menu,CNTRLMNU_OPEN_DISPLAY,,,,Otevřít nastavení grafiky,Anzeigemenü öffnen,,Malfermi Ekranmenuon,Menú de Opciones de Visualización,,Avaa näyttövalikko,Ouvrir Menu Affichage,Megjelenítés menü előhozása,Apri il menu del display,ディスプレイメニューを開く,디스플레이 화면 열기,Displaymenu openen,Otwórz Menu Wyświetlania,Abrir Menu de Vídeo,,Deschide setările de afișare,Меню настроек видео,Отвори мени приказа
Quicksave,CNTRLMNU_QUICKSAVE,,,,Rychlé uložení,Schnellspeichern,,Rapidkonservo,Guardado Rápido,,Pikatallenna,Sauv. Rapide,Gyorsmentés,Salvataggio rapido,クイックセーブ,빠른 저장,Snel opslaan,Szybki Zapis,Salvamento rápido,Gravação rápida,Salvare rapidă,Быстрое сохранение,Брзо-сачувај
Quickload,CNTRLMNU_QUICKLOAD,,,,Rychlé načtení,Schnellladen,,Rapidŝarĝo,Cargado Rápido,,Pikalataa,Charg. Rapide,Gyors betöltés,Caricamento rapido,クイックロード,빠른 불러오기,Snel laden,Szybkie Wczytanie,Carregamento rápido,,Încărcare rapidă,Быстрая загрузка,Брзо-учитај
Exit to Main Menu,CNTRLMNU_EXIT_TO_MAIN,,,,Odejít do hlavního menu,Zurück zum Hauptmenü,,Eliri al Ĉefa Menuo,Salir al Menú Principal,,Poistu päävalikkoon,Sortie Menu Principal,Kilépés a főmenübe,Esci dal menu principale,メインメニューに戻る,메뉴로 나오기,Afsluiten naar het hoofdmenu,Wyjdź do Głównego Menu,Sair para o Menu Principal,,Revenire la meniul principal,Выход в главное меню,Изађи у главни мени
Toggle Messages,CNTRLMNU_TOGGLE_MESSAGES,,,,Zap. / Vyp. zprávy,Nachrichten an/aus,,Baskuligi Mensaĝojn,Alternar Mensajes,,Kytke viestit päälle tai pois,Act./Déasct. Messages,Üzenetek kapcsololása,Toggle messaggi,メッセージ表示の切替,메시지 토글,Berichten aan/uit,Włącz / Wyłącz Wiadomości,Ativar Mensagens,,Comutator mesaje,Переключение сообщений,Таглави поруке
Quit Game,CNTRLMNU_MENU_QUIT,,,,Odejít ze hry,Spiel beenden,,Ĉesigi Ludon,Salir del Juego,,Lopeta peli,Quitter le Jeu,Kilépés a játékból.,Esci dal gioco,ゲームを終了,게임 종료,Stop het spel,Wyjdź z Gry,Sair do Jogo,,Ieși din Joc,Выход,Изађи из игре
Adjust Gamma,CNTRLMNU_ADJUST_GAMMA,,,,Nastavit gamu,Gamma-Anpassung,,Agordi Gamaon,Ajustar Gamma,,Säädä gammaa,Ajuster Gamma,Gamma állítása,Aggiustamento Gamma,ガンマ値を調整,감마 조정,Gamma aanpassen,Dostosuj Gammę,Ajustar Gama,,Ajustare gamma,Настройка гаммы,Подесите осветљење
Mouse Options,MOUSEMNU_TITLE,,,,Nastavení myši,Mausoptionen,,Musilagordoj,Opciones del Ratón,,Hiiriasetukset,Options Souris,Egér beállítások,Opzioni Mouse,マウス オプション,마우스 설정,Muis opties,Opcje Myszki,Opções de mouse,Opções do rato,Setări mouse,Настройки мыши,Миш
Enable mouse,MOUSEMNU_ENABLEMOUSE,,,,Povolit myš,Maus aktiv,,Aktivigi muson,Habilitar ratón,,Ota hiiri käyttöön,Activer Souris,Egér engedélyezése,Abilita il mouse,マウスの使用,마우스 사용,Muis inschakelen,Włącz myszkę,Habilitar mouse,Permitir uso do rato,Activare mouse,Использовать мышь,Укључи миш
Enable mouse in menus,MOUSEMNU_MOUSEINMENU,,,,Povolit myš v nabídkách,Maus aktiv in Menüs,,Aktivigi muson en menuoj,Usa ratón en los menús,,Ota hiiri käyttöön valikoissa,Activer Souris dans les Menus,Egér engedélyezése a menüben.,Abilita il mouse nei menu,メニューでのマウスの使用,메뉴에서 마우스 사용,Muis in menu's inschakelen,Włącz myszkę w menu,Habilitar mouse nos menus,Permitir rato nos menus,Activare mouse în meniuri,Использовать мышь в меню,Укључи миш у менијима
Show back button,MOUSEMNU_SHOWBACKBUTTON,,,,Zobrazit tlačítko zpět,Zeige Zurück-Knopf,,Montri antaŭklavon,Botón de retroceso,,Näytä taaksenäppäin,Afficher le bouton retour,Vissza gomb mutatása,Mostra il bottone per tornare indietro,戻るボタンを表示,뒤로가기 버튼 보이기,Toon terug knop,Pokaż przycisk powrotu,Mostrar botão de voltar,,Afișare buton de întoarcere,Расположение кнопки «назад»,Прикажи тастер за назад
Cursor,MOUSEMNU_CURSOR,,,,Kurzor,,,Musmontrilo,,,Osoitin,Curseur,Egérmutató,Cursore,カーソル,커서,,Kursor,,,,Курсор,Курсор
Overall sensitivity,MOUSEMNU_SENSITIVITY,,,,Celková citlivost,Allgemeine Empfindlichkeit,,Tutsentemo,Sensibilidad promedio,,Yleinen herkkyys,Sensibilité générale,Teljes érzékenység,Sensibilità complessiva,全体的な感度,전체 민감도,Algemene gevoeligheid,Ogólna wrażliwość,Sensibilidade geral,,,Общая чувствительность,Осетљивост
Prescale mouse movement,MOUSEMNU_NOPRESCALE,,,,Akcelerace myši,Mausbewegung skalieren,,Antaŭpesilo musmovo,Pre-escalar movimiento,,Esiskaalaa hiiren liike,Prescaling mouvement souris,,Prescala il movimento del mouse,マウス操作の精密化,속도 높인 움직임,Muisbewegingen vooraf inschalen,Przeskaluj ruch myszki,Movimento pré-escalar do mouse,Movimento pré-escalar do rato,,Увеличенная чувствительность,Убрзање миша
Smooth mouse movement,MOUSEMNU_SMOOTHMOUSE,,,,Vyhladit pohyb myši,Mausbewegung glätten,,Glata musmovo,Mov. fluido del ratón,,Sulava hiiren liike,Lissage Souris,Egyenletes egérmozdulatok,Movimento del mouse liscio,マウス操作を滑らかにする,부드러운 움직임,Vlotte muisbeweging,Gładki ruch myszki,Movimento fluído do mouse,Movimento fluído do rato,,Плавное перемещение,Глатки окрет
Turning speed,MOUSEMNU_TURNSPEED,,,,Rychlost otáčení,Umdrehgeschwindigkeit,,Turnorapido,Velocidad de giro,,Kääntymisnopeus,Vitesse pour tourner,Fordulási sebesség,Velocità di rotazione,旋回速度,회전 속도,Draaisnelheid,Szybkość obracania się,Velocidade de giro,,,Скорость поворота,Брзина окрета
Mouselook speed,MOUSEMNU_MOUSELOOKSPEED,,,,Rychlost pohledu nahoru/dolů,Mausblick-Geschwindigkeit,,Musrigarda rapido.,Veloc. de vista con ratón,,Katselunopeus,Vitesse Vue Souris,Egérrel való nézés sebessége,Velocità di rotazione della vista,上下視点速度,마우스룩 속도,Mouselook snelheid,Szybkość rozglądania się myszką,Velocidade de vista com mouse,Velocidade de vista com rato,,Скорость обзора,Брзина гледања мишем
Overall sensitivity,MOUSEMNU_SENSITIVITY,,,,Celková citlivost,Allgemeine Empfindlichkeit,,Tutsentemo,Sensibilidad promedio,,Yleinen herkkyys,Sensibilité générale,Teljes érzékenység,Sensibilità complessiva,全体的な感度,전체 민감도,Algemene gevoeligheid,Ogólna wrażliwość,Sensibilidade geral,,Sensibilitate în ansamblu,Общая чувствительность,Осетљивост
Prescale mouse movement,MOUSEMNU_NOPRESCALE,,,,Akcelerace myši,Mausbewegung skalieren,,Antaŭpesilo musmovo,Pre-escalar movimiento,,Esiskaalaa hiiren liike,Prescaling mouvement souris,,Prescala il movimento del mouse,マウス操作の精密化,속도 높인 움직임,Muisbewegingen vooraf inschalen,Przeskaluj ruch myszki,Movimento pré-escalar do mouse,Movimento pré-escalar do rato,Prescalare mișcare mouse,Увеличенная чувствительность,Убрзање миша
Smooth mouse movement,MOUSEMNU_SMOOTHMOUSE,,,,Vyhladit pohyb myši,Mausbewegung glätten,,Glata musmovo,Mov. fluido del ratón,,Sulava hiiren liike,Lissage Souris,Egyenletes egérmozdulatok,Movimento del mouse liscio,マウス操作を滑らかにする,부드러운 움직임,Vlotte muisbeweging,Gładki ruch myszki,Movimento fluído do mouse,Movimento fluído do rato,Mișcare mouse fină,Плавное перемещение,Глатки окрет
Turning speed,MOUSEMNU_TURNSPEED,,,,Rychlost otáčení,Umdrehgeschwindigkeit,,Turnorapido,Velocidad de giro,,Kääntymisnopeus,Vitesse pour tourner,Fordulási sebesség,Velocità di rotazione,旋回速度,회전 속도,Draaisnelheid,Szybkość obracania się,Velocidade de giro,,Viteză rotire,Скорость поворота,Брзина окрета
Mouselook speed,MOUSEMNU_MOUSELOOKSPEED,,,,Rychlost pohledu nahoru/dolů,Mausblick-Geschwindigkeit,,Musrigarda rapido.,Veloc. de vista con ratón,,Katselunopeus,Vitesse Vue Souris,Egérrel való nézés sebessége,Velocità di rotazione della vista,上下視点速度,마우스룩 속도,Mouselook snelheid,Szybkość rozglądania się myszką,Velocidade de vista com mouse,Velocidade de vista com rato,Viteză privire în jur cu mouse,Скорость обзора,Брзина гледања мишем
Forward/Backward speed,MOUSEMNU_FORWBACKSPEED,,,,Rychlost pohybu vpřed/vzad,Vor/Rückwärtsgeschwindigkeit,,Antaŭa/Malantaŭa rapido,Veloc. de avance/retroceso,,Eteen-/taaksepäin liikkeen nopeus,Vitesse Avancer/reculer,Előre/Hátra sebesség,Velocità avanti/indietro,"前進/後退速度
",전진/후진 속도,Voorwaartse/achterwaartse snelheid,Szybkość chodzenia do przodu/do tyłu,Velocidade de deslocamento para frente/trás,,,Скорость передвижения,Брзина окрета напред/уназад
Strafing speed,MOUSEMNU_STRAFESPEED,,,,Rychlost pohybu do stran,Seitwärtsgeschwindigkeit,,Flankmova rapido,Veloc. de mov. lateral,,Sivuttaisastunnan nopeus,Vitesse Gauche/Droite,,Velocità movimento laterale,横移動速度,좌진/우진 속도,Zijdelings snelheid,Szybkość uników,Velocidade de deslocamento lateral,,,Скорость движения боком,Брзина стрејфа
Always Mouselook,MOUSEMNU_ALWAYSMOUSELOOK,,,,Vždy se rozhlížet myší,Mausblick immer an,,Ĉiam Musrigardo,Siempre mirar con ratón,,Jatkuva hiirikatselu,Toujours vue Souris,Mindig nézelődés az egérrel,Vista col mouse,常に上下視点をオン,마우스룩 사용,Altijd Mouselook,Zawsze zezwalaj na rozglądanie się myszką,Vista com mouse sempre ligado,Vista com rato sempre ligada,,Обзор мышью,Гледање мишем
Invert Mouse,MOUSEMNU_INVERTMOUSE,,,,Inverzní myš,Maus invertieren,,Inversa Muso,Invertir ratón,,Käännä hiiri,Inverser Souris,Egérirányok megfordítása,Mouse invertito,視点操作反転,마우스 방향 전환,Muis omkeren,Odwróć Myszkę,Inverter mouse,Inverter rato,,Инвертирование мыши,Инвертуј миш
Mouselook Toggle,MOUSEMNU_LOOKSPRING,,,,Automatické vystředění pohledu,Automatisch zentrieren,,Rigardsalto,Mirar con ratón,,Katseenpalautin,Recentrer après Vue Souris,,,視点水平化,마우스룩 시점 초기화,Lente,Automatyczne Wyśrodkowanie,Centralizar automáticamente,Centrar automáticamente,,Передвижение мышью,Покрет мишем
Mouse Strafe,MOUSEMNU_LOOKSTRAFE,,,,Použít myš k pohybu do stran,Seitwärts bewegen mit der Maus,,Rigardturnmovo,Mirar con movimiento,,Sivuttaisastuntapalautin,Mouvement Latéral par Souris,,,視点横移動化,마우스룩 좌우 이동,Lookstrafe,Unikanie przy użyciu myszki,Deslocamento lateral com o mouse,Deslocamento lateral com o rato,,Движение боком мышью,Стрејф мишем
Upper left,OPTVAL_UPPERLEFT,,,,Vlevo nahoře,Oben links,,Supra maldekstre,Sup. izquierda,,Ylävasemmalla,Supérieur gauche,,Superiore sinistro,左上,왼쪽 위,Linksboven,Lewy górny róg,Esquerda superior,,,Вверху слева,Горње лево
Upper right,OPTVAL_UPPERRIGHT,,,,Vpravo nahoře,Oben rechts,,Supra dekstre,Sup. derecha,,Yläoikealla,Supérieur droite,,Superiore destro,右上,오른쪽 위,Rechtsboven,Prawy górny róg,Direita superior,,,Вверху справа,Горње десно
Lower left,OPTVAL_LOWERLEFT,,,,Vlevo dole,Unten links ,,Suba maldekstre,Inf. izquierda,,Alavasemmalla,Inférieur gauche,,Inferiore sinistro,左下,왼쪽 밑,Linksonder,Lewy dolny róg,Esquerda inferior,,,Внизу слева,Доње лево
Lower right,OPTVAL_LOWERRIGHT,,,,Vpravo dole,Unten rechts,,Suba dekstre,Inf. derecha,,Alaoikealla,Inférieur droite,,Inferiore destro,右下,오른쪽 밑,Rechtsonder,Prawy dolny róg,Direita inferior,,,Внизу справа,Доње десно
Touchscreen-like,OPTVAL_TOUCHSCREENLIKE,,,,Jako dotyková obrazovka,Wie auf einem Touchscreen,,Tuŝekrana,Pant. táctil,,Kosketusnäyttömäinen,Style écran tactile,,Come il Touchscreen,タッチスクリーン式,터치스크린 같게,Touchscreen-achtige,Jak ekrean dotykowy,Estilo touchscreen,,,Как сенсорный экран,Као додирни екран
Simple arrow,OPTSTR_SIMPLEARROW,,,,Jednoduchý kurzor,Einfacher Pfeil,,Simpla sago,Flecha simple,,Yksinkertainen nuoli,Flèche simple,,Freccia semplice,シンプル,기본 커서,Eenvoudige pijl,Prosta strzałka,Flecha simples,Cursor simples,,Стрелка,Стрелица
System cursor,OPTSTR_SYSTEMCURSOR,,,,Systémový kurzor,Systemcursor,,Sistema kursoro,Cursor del sistema,,Järjestelmän osoitin,Curseur Système,,Cursore di sistema,システム,시스템 커서,Systeemcursor,Kursor systemu,Cursor do sistema,,,Системный курсор,Системска стрелица
Default,OPTVAL_DEFAULT,,,,Výchozí,Standard,,Defaŭlte,Por defecto,,Oletus,Défaut,,,デフォルト,기본 설정,Standaard,Domyślne,Padrão,,,По умолчанию,Подраз.
Configure Controller,JOYMNU_TITLE,,,,Konfigurovat ovladač,Controller konfigurieren,,Agordi Ludregilon,Configurar Mando,,Peliohjainasetukset,Configurer Mannette,Kontroller testreszabása,Configura il controller,コントローラー構成:,컨트롤러 구성,Controller configureren,Konfiguruj Kontroler,Configurar Controle,Configurar Comando,,Настроить контроллер,Конфигурација контролера
Controller Options,JOYMNU_OPTIONS,,,,Nastavení ovladače,Controlleroptionen,,Ludregilagordoj,Opciones del mando,,Peliohjainasetukset,Options Mannette,Kontroller beállításai,Opzioni del controller,コントローラー設定,컨트롤러 설정,Controller opties,Opcje Kontrolera,Opções de Controle,Opções do Comando,,Настройки контроллера,Подешавања контролера
Block controller input in menu,JOYMNU_NOMENU,,,,Zakázat ovladač v nabídkách,Blockiere Controllereingabe im Menü,,Blokigi ludregilon enigon en menuo,Bloq. entrada de mando en menú,,Estä ohjainsyötteet valikoissa,Bloquer manette dans les menus,Kontroller ne működjön a menüben,Blocca l'input del controller nei menu,メニューではコントローラーを無視,메뉴에서 컨트롤러 끄기,Blokkeer de controller in het menu,Blokuj wejście kontrolera w menu,Bloquear controle no menu,Bloquear comando no menu,,Отключить контроллер в меню,Блокирај улаз контролера у менију
Enable controller support,JOYMNU_ENABLE,,,,Povolit podporu pro ovladače,Erlaube Controllerunterstützung,,Aktivigi ludregilsubtenon,Activar soporte de mandos,,Ota käyttöön peliohjaintuki,Activer support contrôleur,,Abilita il supporto del controller,コントローラーサポート許可,컨트롤러 지원 허용,Controllerondersteuning inschakelen,Włącz wsparcie kontrolera,Habilitar suporte de controles,,,Включить поддержку контроллера,Омогући подршку за контролере
Enable DirectInput controllers,JOYMNU_DINPUT,,,,Povolit ovladače DirectInput,Erlaube DirectInput-Controller,,Aktivigi DirectInput ludregilojn,Usa controles DirectInput,,Ota käyttöön DirectInput-ohjaimet,Activer contrôleurs DirectInput,,Abilita i controlli DirectInput,ダイレクトインプットコントローラー許可,다이렉트 인풋 컨트롤러 허용,DirectInput-controllers inschakelen,Włącz kontrolery DirectInput,Habilitar controles DirectInput,,,Включить контроллеры DirectInput,Омогући директинпут контролере
Enable XInput controllers,JOYMNU_XINPUT,,,,Povolit ovladače XInput,Erlaube XInput-Controller,,Aktivigi XInput ludregilojn,Usa controles XInput,,Ota käyttöön XInput-ohjaimet,Activer contrôleurs XInput,,Abilita i controlli XInput,Xinput コントローラー許可,X인풋 컨트롤러 허용,XInput-controllers inschakelen,Włącz kontrolery XInput,Habilitar controles XInput,,,Включить контроллеры XInput,Омогући Иксинпут контролере
Enable raw PlayStation 2 adapters,JOYMNU_PS2,,,,Povolit ovladače PlayStation 2,Erlaube Playstation 2-Controller,,Aktivigi krudajn PlayStation 2 adaptilojn,Usa adaptadores de PlayStation 2,,Ota käyttöön raa'at PlayStation 2 -adapterit,Activer adaptateurs PS2 bruts,,Abilita gli adattatori raw PlayStation 2,PlayStation2 アダプター許可,PS2 어뎁터 허용,Raw PlayStation 2-adapters inschakelen,Włącz adaptery PlayStation 2,Habilitar adaptadores de PlayStation 2,,,Использовать адаптеры PlayStation 2 напрямую,Омогући сирове Плејстејшн 2 адаптере
No controllers detected,JOYMNU_NOCON,,,,Nenalezeny žádné ovladače,Keine Controller gefunden,,Neniu ludregilojn detektas,No hay mandos detectados,,Ei havaittuja ohjaimia,Aucun Contrôleur détecté.,,Nessun controller trovato,コントローラーが見つかりません,인식된 컨트롤러 없음,Geen controllers gedetecteerd,Nie wykryto kontrolerów,Nenhum controle detectado,Nenhum comando foi detectado,,Контроллеры не обнаружены,Нема детектованих контролера
Configure controllers:,JOYMNU_CONFIG,,,,Nastavit ovladače:,Controller konfigurieren,,Agordi ludregilojn:,Configurar controles:,,Mukauta ohjaimia:,Configurer contrôleurs:,,Configura i controller:,コントローラー構成:,컨트롤러 설정:,Configureer controllers:,Konfiguruj kontrolery:,Configurar controles:,Configurar comandos,,Настроить контроллер:,Подешавања контролере:
Controller support must be,JOYMNU_DISABLED1,,,,Podpora ovladačů musí být,Controllerunterstütung muss aktiviert sein,,Ludregilsubteno devas esti,El soporte de mandos debe estar,,Ohjaintuen täytyy olla otettu,Le Support de contrôleur doit être activé,,Il supporto ai controller deve essere,コントローラーサポートは,감지하려면 컨트롤러 지원을,Controller ondersteuning moet ingeschakeld zijn,Wsparcie kontrolera musi być,Suporte à controles deve ser,Suporte a comandos devem ser,,Включите поддержку контроллера,Омогућите подржавање контролера
enabled to detect any,JOYMNU_DISABLED2,Supposed to be empty in Russian and Serbian.,,,zapnuta pro jejich detekování,um welche zu finden,,ŝaltita detekti ajn,activado para detectar alguno,,käyttöön ohjainten havaitsemiseksi,avant de pouvoir en détecter un.,,abilitato a trovare ogni,検出しました,활성화 해야합니다.,om eventuele regelaars te detecteren.,Włączony by wykryć jakikolwiek,habilitado para poder detectar algum,,, \n, \n
Invalid controller specified for menu,JOYMNU_INVALID,,,,Vybrán nesprávný ovladač pro nabídky,Ungültiger Controller für Menü ausgewählt,,Malprava ludregilo specifigis por menuo,Mando inválido especificado para el menú,,Epäkelpo ohjain määritetty valikolle,Contrôleur invalide spécifé dans le menu.,,Controller invalido specificato per il menu,メニューではコントローラーを使用しない,메뉴에 특정된 컨트롤러가 아닙니다.,Ongeldige regelaar gespecificeerd voor het menu,Niewłaściwy kontroler określony dla menu,Controle inválido especificado para o menu,Comando inválido,,Недопустимый контроллер выбран для меню,Невалидан контролер специфиран за мени
Overall sensitivity,JOYMNU_OVRSENS,,,,Celková citlivost,Allgemeine Empfindlichkeit,,Tutsentemeco,Sensibilidad general,,Yleisherkkyys,Sensibilité générale,,Sensibilità generale,全体的な感度,전체 민감도,Algemene gevoeligheid,Ogólna Czułość,Sensibilidade geral,,,Общая чувствительность,Уупна сензитивност
Axis Configuration,JOYMNU_AXIS,,,,Nastavení os,Achsenkonfiguration,,Akso-agordoj,Configuración del eje,,Akseleiden säätäminen,Configuration des axes,,Configurazione assi,軸構成,축 구성,Asconfiguratie,Konfiguruj Oś,Configuração de Eixo,,,Конфигурация осей,Конфигурација осе
Invert,JOYMNU_INVERT,,,,Obrátit,Invertieren,,Inversigi,Invertir,,Käännä,Inverser,,Inverti,反転,순서 바꿈,Omkeren,Odwróć,Inverter,,,Инвертировать,Инвертовано
Dead zone,JOYMNU_DEADZONE,,,,Mrtvá zóna,Totzone,,Mortzono,Zona muerta,,Kuollut alue,Zone neutre,,Zona cieca,デッドゾーン,불감대,Dode zone,Martwa strefa,Zona morta,,,Мёртвая зона,Мртва зона
No configurable axes,JOYMNU_NOAXES,,,,Žádné nastavitelné osy,Keine konfigurierbaren Achsen,,Neniu agordeblaj aksoj,No hay ejes configurables,,Ei säädettäviä akseleita,Aucun axe à configurer,,Nessun asse configurabile,軸構成を無効,설정할 방향키가 없습니다.,Geen configureerbare assen,Brak osi do skonfigurowania,Sem eixos configuráveis,,,Нет настраиваемых осей,Нема конфигурационих оса
None,OPTVAL_NONE,,,,Žádný,Kein,,Neniu,Ninguno,,Ei mitään,Aucun,,Nessuno,無し,없음,Geen,Żaden,Nenhum,,,Откл.,Ништа
Turning,OPTVAL_TURNING,,,,Otáčení,Umdrehen,,Turnanta,Girar,,Kääntyminen,Tourner,,Rotazione,旋回,회전,Draaien,Obracanie się,Girar,,,Поворот,Скретање
Looking Up/Down,OPTVAL_LOOKINGUPDOWN,,,,Dívání se nahoru/dolů,Hoch/runterblicken,,Rigardanta Supre/Malsupre,Mirar hacia Arriba/Abajo,,Ylös/Alas katsominen,Vue haut/bas,,Sguardo Sopra/Sotto,視点上下,위/아래로 보기,Omhoog/omlaag zoeken,Patrzenie w górę/w dół,Olhar para cima/baixo,,,Взгляд вверх/вниз,Гледање горе/доле
Moving Forward,OPTVAL_MOVINGFORWARD,,,,Pohyb vpřed,Vorwärtsbewegung,,Movanta Rekte,Avanzar,,Eteenpäin liikkuminen,Avancer,,Movimento in avanti,前進,앞으로 전진,Voorwaarts bewegen,Poruszanie się do przodu,Mover para a frente,,,Движение вперёд,Кретање напред
Strafing,OPTVAL_STRAFING,,,,Pohyb do stran,Seitwärtsbewegung,,Flankmovanta,Desplazarse,,Sivuttaisastunta,Pas de côté,,Movimento laterale,横移動,양옆으로 이동,Strafelen,Uniki,Deslocamento lateral,,,Движение боком,Кретање у страну
Moving Up/Down,OPTVAL_MOVINGUPDOWN,,,,Pohyb nahoru/dolů,Auf/abwärtsbewegung,,Movanta Supre/Malsupre,Moverse hacia Arriba/Abajo,,Ylös/Alas liikkuminen,Mouvement haut/bas,,Movimento Sopra/Sotto,前進後退,위/아래로 이동,Naar boven/beneden bewegen,Poruszanie się w górę/w dół,Deslocar para cima/baixo,,,Движение вверх/вниз,Кретање горе/доле
Inverted,OPTVAL_INVERTED,,,,Inverzní,Invertiert,,Inversigita,Invertido,,Käännetty,Inversé,,Invertito,反転する,반전,Omgekeerd,Odwrócony,Invertido,,,Инвертировано,Обрнуто
Not Inverted,OPTVAL_NOTINVERTED,,,,Nikoliv inverzní,nicht invertiert,,Ne Inversigita,No invertido,,Ei käännetty,Non Inversé,,Non invertito,反転しない,반전되지 않음,Niet omgekeerd,Nieodwrócony,Não Invertido,,,Прямо,Не обрнуто
",전진/후진 속도,Voorwaartse/achterwaartse snelheid,Szybkość chodzenia do przodu/do tyłu,Velocidade de deslocamento para frente/trás,,Viteză deplasare față/spate,Скорость передвижения,Брзина окрета напред/уназад
Strafing speed,MOUSEMNU_STRAFESPEED,,,,Rychlost pohybu do stran,Seitwärtsgeschwindigkeit,,Flankmova rapido,Veloc. de mov. lateral,,Sivuttaisastunnan nopeus,Vitesse Gauche/Droite,,Velocità movimento laterale,横移動速度,좌진/우진 속도,Zijdelings snelheid,Szybkość uników,Velocidade de deslocamento lateral,,Viteză deplasare în diagonală,Скорость движения боком,Брзина стрејфа
Always Mouselook,MOUSEMNU_ALWAYSMOUSELOOK,,,,Vždy se rozhlížet myší,Mausblick immer an,,Ĉiam Musrigardo,Siempre mirar con ratón,,Jatkuva hiirikatselu,Toujours vue Souris,Mindig nézelődés az egérrel,Vista col mouse,常に上下視点をオン,마우스룩 사용,Altijd Mouselook,Zawsze zezwalaj na rozglądanie się myszką,Vista com mouse sempre ligado,Vista com rato sempre ligada,Privire în jur cu mouse permanentă,Обзор мышью,Гледање мишем
Invert Mouse,MOUSEMNU_INVERTMOUSE,,,,Inverzní myš,Maus invertieren,,Inversa Muso,Invertir ratón,,Käännä hiiri,Inverser Souris,Egérirányok megfordítása,Mouse invertito,視点操作反転,마우스 방향 전환,Muis omkeren,Odwróć Myszkę,Inverter mouse,Inverter rato,Inversare axă mouse,Инвертирование мыши,Инвертуј миш
Mouselook Toggle,MOUSEMNU_LOOKSPRING,,,,Automatické vystředění pohledu,Automatisch zentrieren,,Rigardsalto,Mirar con ratón,,Katseenpalautin,Recentrer après Vue Souris,,,視点水平化,마우스룩 시점 초기화,Lente,Automatyczne Wyśrodkowanie,Centralizar automáticamente,Centrar automáticamente,Comutator privire în jur cu mouse,Передвижение мышью,Покрет мишем
Mouse Strafe,MOUSEMNU_LOOKSTRAFE,,,,Použít myš k pohybu do stran,Seitwärts bewegen mit der Maus,,Rigardturnmovo,Mirar con movimiento,,Sivuttaisastuntapalautin,Mouvement Latéral par Souris,,,視点横移動化,마우스룩 좌우 이동,Lookstrafe,Unikanie przy użyciu myszki,Deslocamento lateral com o mouse,Deslocamento lateral com o rato,Deplasare în diagonală cu mouse,Движение боком мышью,Стрејф мишем
Upper left,OPTVAL_UPPERLEFT,,,,Vlevo nahoře,Oben links,,Supra maldekstre,Sup. izquierda,,Ylävasemmalla,Supérieur gauche,,Superiore sinistro,左上,왼쪽 위,Linksboven,Lewy górny róg,Esquerda superior,,Stânga sus,Вверху слева,Горње лево
Upper right,OPTVAL_UPPERRIGHT,,,,Vpravo nahoře,Oben rechts,,Supra dekstre,Sup. derecha,,Yläoikealla,Supérieur droite,,Superiore destro,右上,오른쪽 위,Rechtsboven,Prawy górny róg,Direita superior,,Dreapta sus,Вверху справа,Горње десно
Lower left,OPTVAL_LOWERLEFT,,,,Vlevo dole,Unten links ,,Suba maldekstre,Inf. izquierda,,Alavasemmalla,Inférieur gauche,,Inferiore sinistro,左下,왼쪽 밑,Linksonder,Lewy dolny róg,Esquerda inferior,,Stânga jos,Внизу слева,Доње лево
Lower right,OPTVAL_LOWERRIGHT,,,,Vpravo dole,Unten rechts,,Suba dekstre,Inf. derecha,,Alaoikealla,Inférieur droite,,Inferiore destro,右下,오른쪽 밑,Rechtsonder,Prawy dolny róg,Direita inferior,,Dreapta jos,Внизу справа,Доње десно
Touchscreen-like,OPTVAL_TOUCHSCREENLIKE,,,,Jako dotyková obrazovka,Wie auf einem Touchscreen,,Tuŝekrana,Pant. táctil,,Kosketusnäyttömäinen,Style écran tactile,,Come il Touchscreen,タッチスクリーン式,터치스크린 같게,Touchscreen-achtige,Jak ekrean dotykowy,Estilo touchscreen,,Precum touchscreen,Как сенсорный экран,Као додирни екран
Simple arrow,OPTSTR_SIMPLEARROW,,,,Jednoduchý kurzor,Einfacher Pfeil,,Simpla sago,Flecha simple,,Yksinkertainen nuoli,Flèche simple,,Freccia semplice,シンプル,기본 커서,Eenvoudige pijl,Prosta strzałka,Flecha simples,Cursor simples,Săgeată simplă,Стрелка,Стрелица
System cursor,OPTSTR_SYSTEMCURSOR,,,,Systémový kurzor,Systemcursor,,Sistema kursoro,Cursor del sistema,,Järjestelmän osoitin,Curseur Système,,Cursore di sistema,システム,시스템 커서,Systeemcursor,Kursor systemu,Cursor do sistema,,Cursor simplu,Системный курсор,Системска стрелица
Default,OPTVAL_DEFAULT,,,,Výchozí,Standard,,Defaŭlte,Por defecto,,Oletus,Défaut,,,デフォルト,기본 설정,Standaard,Domyślne,Padrão,,Implicit,По умолчанию,Подраз.
Configure Controller,JOYMNU_TITLE,,,,Konfigurovat ovladač,Controller konfigurieren,,Agordi Ludregilon,Configurar Mando,,Peliohjainasetukset,Configurer Mannette,Kontroller testreszabása,Configura il controller,コントローラー構成:,컨트롤러 구성,Controller configureren,Konfiguruj Kontroler,Configurar Controle,Configurar Comando,Configurare controller,Настроить контроллер,Конфигурација контролера
Controller Options,JOYMNU_OPTIONS,,,,Nastavení ovladače,Controlleroptionen,,Ludregilagordoj,Opciones del mando,,Peliohjainasetukset,Options Mannette,Kontroller beállításai,Opzioni del controller,コントローラー設定,컨트롤러 설정,Controller opties,Opcje Kontrolera,Opções de Controle,Opções do Comando,Setări controller,Настройки контроллера,Подешавања контролера
Block controller input in menu,JOYMNU_NOMENU,,,,Zakázat ovladač v nabídkách,Blockiere Controllereingabe im Menü,,Blokigi ludregilon enigon en menuo,Bloq. entrada de mando en menú,,Estä ohjainsyötteet valikoissa,Bloquer manette dans les menus,Kontroller ne működjön a menüben,Blocca l'input del controller nei menu,メニューではコントローラーを無視,메뉴에서 컨트롤러 끄기,Blokkeer de controller in het menu,Blokuj wejście kontrolera w menu,Bloquear controle no menu,Bloquear comando no menu,Blocare comenzi controller în meniu,Отключить контроллер в меню,Блокирај улаз контролера у менију
Enable controller support,JOYMNU_ENABLE,,,,Povolit podporu pro ovladače,Erlaube Controllerunterstützung,,Aktivigi ludregilsubtenon,Activar soporte de mandos,,Ota käyttöön peliohjaintuki,Activer support contrôleur,,Abilita il supporto del controller,コントローラーサポート許可,컨트롤러 지원 허용,Controllerondersteuning inschakelen,Włącz wsparcie kontrolera,Habilitar suporte de controles,,Activare support controller,Включить поддержку контроллера,Омогући подршку за контролере
Enable DirectInput controllers,JOYMNU_DINPUT,,,,Povolit ovladače DirectInput,Erlaube DirectInput-Controller,,Aktivigi DirectInput ludregilojn,Usa controles DirectInput,,Ota käyttöön DirectInput-ohjaimet,Activer contrôleurs DirectInput,,Abilita i controlli DirectInput,ダイレクトインプットコントローラー許可,다이렉트 인풋 컨트롤러 허용,DirectInput-controllers inschakelen,Włącz kontrolery DirectInput,Habilitar controles DirectInput,,Activare controlere DirectInput,Включить контроллеры DirectInput,Омогући директинпут контролере
Enable XInput controllers,JOYMNU_XINPUT,,,,Povolit ovladače XInput,Erlaube XInput-Controller,,Aktivigi XInput ludregilojn,Usa controles XInput,,Ota käyttöön XInput-ohjaimet,Activer contrôleurs XInput,,Abilita i controlli XInput,Xinput コントローラー許可,X인풋 컨트롤러 허용,XInput-controllers inschakelen,Włącz kontrolery XInput,Habilitar controles XInput,,Activare controlere XInput,Включить контроллеры XInput,Омогући Иксинпут контролере
Enable raw PlayStation 2 adapters,JOYMNU_PS2,,,,Povolit ovladače PlayStation 2,Erlaube Playstation 2-Controller,,Aktivigi krudajn PlayStation 2 adaptilojn,Usa adaptadores de PlayStation 2,,Ota käyttöön raa'at PlayStation 2 -adapterit,Activer adaptateurs PS2 bruts,,Abilita gli adattatori raw PlayStation 2,PlayStation2 アダプター許可,PS2 어뎁터 허용,Raw PlayStation 2-adapters inschakelen,Włącz adaptery PlayStation 2,Habilitar adaptadores de PlayStation 2,,Activare adaptoare PS2,Использовать адаптеры PlayStation 2 напрямую,Омогући сирове Плејстејшн 2 адаптере
No controllers detected,JOYMNU_NOCON,,,,Nenalezeny žádné ovladače,Keine Controller gefunden,,Neniu ludregilojn detektas,No hay mandos detectados,,Ei havaittuja ohjaimia,Aucun Contrôleur détecté.,,Nessun controller trovato,コントローラーが見つかりません,인식된 컨트롤러 없음,Geen controllers gedetecteerd,Nie wykryto kontrolerów,Nenhum controle detectado,Nenhum comando foi detectado,Niciun controller detectat,Контроллеры не обнаружены,Нема детектованих контролера
Configure controllers:,JOYMNU_CONFIG,,,,Nastavit ovladače:,Controller konfigurieren,,Agordi ludregilojn:,Configurar controles:,,Mukauta ohjaimia:,Configurer contrôleurs:,,Configura i controller:,コントローラー構成:,컨트롤러 설정:,Configureer controllers:,Konfiguruj kontrolery:,Configurar controles:,Configurar comandos,Configurare controlere:,Настроить контроллер:,Подешавања контролере:
Controller support must be,JOYMNU_DISABLED1,,,,Podpora ovladačů musí být,Controllerunterstütung muss aktiviert sein,,Ludregilsubteno devas esti,El soporte de mandos debe estar,,Ohjaintuen täytyy olla otettu,Le Support de contrôleur doit être activé,,Il supporto ai controller deve essere,コントローラーサポートは,감지하려면 컨트롤러 지원을,Controller ondersteuning moet ingeschakeld zijn,Wsparcie kontrolera musi być,Suporte à controles deve ser,Suporte a comandos devem ser,Supportul pentru controller trebuie,Включите поддержку контроллера,Омогућите подржавање контролера
enabled to detect any,JOYMNU_DISABLED2,Supposed to be empty in Russian and Serbian.,,,zapnuta pro jejich detekování,um welche zu finden,,ŝaltita detekti ajn,activado para detectar alguno,,käyttöön ohjainten havaitsemiseksi,avant de pouvoir en détecter un.,,abilitato a trovare ogni,検出しました,활성화 해야합니다.,om eventuele regelaars te detecteren.,Włączony by wykryć jakikolwiek,habilitado para poder detectar algum,,activat pentru a le detecta, \n, \n
Invalid controller specified for menu,JOYMNU_INVALID,,,,Vybrán nesprávný ovladač pro nabídky,Ungültiger Controller für Menü ausgewählt,,Malprava ludregilo specifigis por menuo,Mando inválido especificado para el menú,,Epäkelpo ohjain määritetty valikolle,Contrôleur invalide spécifé dans le menu.,,Controller invalido specificato per il menu,メニューではコントローラーを使用しない,메뉴에 특정된 컨트롤러가 아닙니다.,Ongeldige regelaar gespecificeerd voor het menu,Niewłaściwy kontroler określony dla menu,Controle inválido especificado para o menu,Comando inválido,Controller pentru meniu invalid,Недопустимый контроллер выбран для меню,Невалидан контролер специфиран за мени
Overall sensitivity,JOYMNU_OVRSENS,,,,Celková citlivost,Allgemeine Empfindlichkeit,,Tutsentemeco,Sensibilidad general,,Yleisherkkyys,Sensibilité générale,,Sensibilità generale,全体的な感度,전체 민감도,Algemene gevoeligheid,Ogólna Czułość,Sensibilidade geral,,Sensibilitate în ansamblu,Общая чувствительность,Уупна сензитивност
Axis Configuration,JOYMNU_AXIS,,,,Nastavení os,Achsenkonfiguration,,Akso-agordoj,Configuración del eje,,Akseleiden säätäminen,Configuration des axes,,Configurazione assi,軸構成,축 구성,Asconfiguratie,Konfiguruj Oś,Configuração de Eixo,,Configurare axă,Конфигурация осей,Конфигурација осе
Invert,JOYMNU_INVERT,,,,Obrátit,Invertieren,,Inversigi,Invertir,,Käännä,Inverser,,Inverti,反転,순서 바꿈,Omkeren,Odwróć,Inverter,,Inversare,Инвертировать,Инвертовано
Dead zone,JOYMNU_DEADZONE,,,,Mrtvá zóna,Totzone,,Mortzono,Zona muerta,,Kuollut alue,Zone neutre,,Zona cieca,デッドゾーン,불감대,Dode zone,Martwa strefa,Zona morta,,Zonă moartă,Мёртвая зона,Мртва зона
No configurable axes,JOYMNU_NOAXES,,,,Žádné nastavitelné osy,Keine konfigurierbaren Achsen,,Neniu agordeblaj aksoj,No hay ejes configurables,,Ei säädettäviä akseleita,Aucun axe à configurer,,Nessun asse configurabile,軸構成を無効,설정할 방향키가 없습니다.,Geen configureerbare assen,Brak osi do skonfigurowania,Sem eixos configuráveis,,Nicio axă configurabilă,Нет настраиваемых осей,Нема конфигурационих оса
None,OPTVAL_NONE,,,,Žádný,Kein,,Neniu,Ninguno,,Ei mitään,Aucun,,Nessuno,無し,없음,Geen,Żaden,Nenhum,,Niciuna,Откл.,Ништа
Turning,OPTVAL_TURNING,,,,Otáčení,Umdrehen,,Turnanta,Girar,,Kääntyminen,Tourner,,Rotazione,旋回,회전,Draaien,Obracanie się,Girar,,Rotire,Поворот,Скретање
Looking Up/Down,OPTVAL_LOOKINGUPDOWN,,,,Dívání se nahoru/dolů,Hoch/runterblicken,,Rigardanta Supre/Malsupre,Mirar hacia Arriba/Abajo,,Ylös/Alas katsominen,Vue haut/bas,,Sguardo Sopra/Sotto,視点上下,위/아래로 보기,Omhoog/omlaag zoeken,Patrzenie w górę/w dół,Olhar para cima/baixo,,Privire Sus/Jos,Взгляд вверх/вниз,Гледање горе/доле
Moving Forward,OPTVAL_MOVINGFORWARD,,,,Pohyb vpřed,Vorwärtsbewegung,,Movanta Rekte,Avanzar,,Eteenpäin liikkuminen,Avancer,,Movimento in avanti,前進,앞으로 전진,Voorwaarts bewegen,Poruszanie się do przodu,Mover para a frente,,Deplasare în Față,Движение вперёд,Кретање напред
Strafing,OPTVAL_STRAFING,,,,Pohyb do stran,Seitwärtsbewegung,,Flankmovanta,Desplazarse,,Sivuttaisastunta,Pas de côté,,Movimento laterale,横移動,양옆으로 이동,Strafelen,Uniki,Deslocamento lateral,,Deplasare în Diagonală,Движение боком,Кретање у страну
Moving Up/Down,OPTVAL_MOVINGUPDOWN,,,,Pohyb nahoru/dolů,Auf/abwärtsbewegung,,Movanta Supre/Malsupre,Moverse hacia Arriba/Abajo,,Ylös/Alas liikkuminen,Mouvement haut/bas,,Movimento Sopra/Sotto,前進後退,위/아래로 이동,Naar boven/beneden bewegen,Poruszanie się w górę/w dół,Deslocar para cima/baixo,,Mișcare Sus/Jos,Движение вверх/вниз,Кретање горе/доле
Inverted,OPTVAL_INVERTED,,,,Inverzní,Invertiert,,Inversigita,Invertido,,Käännetty,Inversé,,Invertito,反転する,반전,Omgekeerd,Odwrócony,Invertido,,Inversat,Инвертировано,Обрнуто
Not Inverted,OPTVAL_NOTINVERTED,,,,Nikoliv inverzní,nicht invertiert,,Ne Inversigita,No invertido,,Ei käännetty,Non Inversé,,Non invertito,反転しない,반전되지 않음,Niet omgekeerd,Nieodwrócony,Não Invertido,,Neinversat,Прямо,Не обрнуто
,PLayer Menu,,,,,,,,,,,,,,,,,,,,,,
Player Setup,MNU_PLAYERSETUP,,,,Nastavení hráče,Spielereinstellungen,,Ludanto Agordaĵo,Config. del jugador,,Pelaaja-asetukset,Options Joueur,Játékos testreszabása,Settaggio giocatore,プレイヤーの特徴,플레이어 설정,Speler instellen,Ustawienia Gracza,Definições de Jogador,,,Настройки игрока,Подешавања играча
Blue,TXT_COLOR_BLUE,,,,Modrá,Blau,,Blua,Azul,,Sininen,Bleu,Kék,Blu,青,청색,Blauw,Niebieski,Azul,,,Синий,Плава
@ -540,6 +541,12 @@ Advanced,OPTVAL_ADVANCED,,,,,Erweitert,,,,,,,,,,,,,,,,,
Center messages,MSGMNU_CENTERMESSAGES,,,Centre messages,Vycentrovat zprávy,Nachrichten zentrieren,,Centrigi mesaĝoj,Centrar mensajes,,Keskitä viestit,Messages centrés,,Messaggi centrati,メッセージを中央に,메시지 중간에 위치,Berichten centreren,Wyśrodkuj wiadomości,Centralizar mensagens,Centrar mensagens,Mesaje centrate,Центрирование сообщений,Централне поруке
Pulsating message Display,MSGMNU_PULSEMESSAGES,,,,,Pulsierende Nachrichtenanzeige,,,,,,,,,,,,,,,,,
Message Scale,MSGMNU_MESSAGESCALE,,,,,Nachrichtengröße,,,,,,,,,,,,,,,,,
Automap Options,AUTOMAPMNU_TITLE,,,,Nastavení automapy,Automapoptionen,,Aŭtomapagordoj,Opciones del Automapa,,Automaattikartan asetukset,Options Carte,,Opzioni automappa,オートマップ オプション,오토맵 설정,Automap-opties,Opcje Mapy,Opções de Automapa,,Setări Hartă Computerizată,Настройки автокарты,Подешавања аутомапе
Rotate automap,AUTOMAPMNU_ROTATE,,,,Otáčet automapu,Rotiere Automap,,Rotacii aŭtomapon,Rotar automapa,,Kiertyvä automaattikartta,Rotation de la Carte,,Ruota l'automappa,オートマップの回転表示,오토맵 회전,Automatisch roteren,Obracaj mapę,Girar automapa,,Rotire hartă computerizată,Вращающаяся автокарта,Ротирај аутомапу
Follow player,AUTOMAPMNU_FOLLOW,,,,Následovat hráče,Folge dem Spieler,,Sekvi ludanton,Seguir jugador,,Seuraa pelaajaa,Suivre le joueur,,Segui il giocatore,プレイヤー追従,플레이어 추적,Volg de speler,Podążaj za graczem,Seguir jogador,,Urmărire jucător,Привязка к игроку,Прати играча
,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,
2x,OPTVAL_2X,,,,,,,2-oble,,,,,,,,,,,,,,,
4x,OPTVAL_4X,,,,,,,4-oble,,,,,,,,,,,,,,,
8x,OPTVAL_8X,,,,,,,8-oble,,,,,,,,,,,,,,,
@ -1748,9 +1755,9 @@ Loading Level,TXTB_LLEVEL,,,,,,,,,,,,,,,,,,,,,,
Cooperative,TXTB_NETGT1,,,,,,,,,,,,,,,,,,,,,,
Bloodbath,TXTB_NETGT2,,,,,,,,,,,,,,,,,,,,,,
Teams,TXTB_NETGT3,,,,,,,,,,,,,,,,,,,,,,
Map Follow Mode,FOLLOW MODE ON,,Blood,,,,,,,,,,,,,,,,,,,,
Map Scroll Mode,FOLLOW MODE OFF,"
",Blood,,,,,,,,,,,,,,,,,,,,
Map Follow Mode,TXTB_FOLLOWON,,,,,,,,,,,,,,,,,,,,,,
Map Scroll Mode,TXTB_FOLLOWOFF,"
",,,,,,,,,,,,,,,,,,,,,
You are immortal.,TXTB_GODMODE,,,,,,,,,,,,,,,,,,,,,,
You are mortal.,TXTB_NOTGODMODE,,,,,,,,,,,,,,,,,,,,,,
Frags,Frags,,,,Fragy,,,Ĉesoj,Bajas,,Frägit,,Fragek,Frags,フラグ,플레이어 킬수,Frags,Fragi,,,,Фраги,Фрагови

1 default Identifier Remarks Filter eng enc ena enz eni ens enj enb enl ent enw cs de el eo es esm esn esg esc esa esd esv eso esr ess esf esl esy esz esb ese esh esi esu fi fr hu it jp ko nl pl pt ptg ro ru sr
330 Enhanced Standard OPTVAL_YES_ENHANCED OPTVAL_YES_STANDARD copied from elsewhere Vylepšené Standardní Verbessert Ενισχυομένο Πρότυπο Bonigita Norma Mejorado Estándar Paranneltu Normaali Amélioré Migliorata 強調 標準 고급 기본 Verbeterd Standaard Ulepszone Standard Melhorado Padrão Îmbunătățit(ă) Улучшенный Стандартный Побољшани Стандардни
331 HUD Options Enhanced OPTMNU_HUD OPTVAL_YES_ENHANCED Nastavení HUD Vylepšené HUD Einstellungen Verbessert Ενισχυομένο Agordoj de HUD Bonigita Opciones del HUD Mejorado Tilanäytön asetukset Paranneltu Options de l'ATH Amélioré HUD beállítások Opzioni HUD Migliorata HUD オプション 強調 HUD 설정 고급 HUD opties Verbeterd Opcje Paska HUD Ulepszone Opções de HUD Melhorado Îmbunătățit(ă) HUD Улучшенный HUD Побољшани
332 Polymost Options HUD Options OPTMNU_POLYMOST OPTMNU_HUD Nastavení HUD Polymost Einstellungen HUD Einstellungen Agordoj de HUD Opciones del HUD Tilanäytön asetukset Options de l'ATH HUD beállítások Opzioni HUD HUD オプション HUD 설정 HUD opties Opcje Paska HUD Opções de HUD HUD HUD
333 Texture Filter mode Polymost Options GLTEXMNU_TEXFILTER OPTMNU_POLYMOST Režim filtrování textur Texturfiltermodus Polymost Einstellungen Reĝimo por Teksturfiltrado Modo de filtro de texturas Pintakuviointien suodatustapa Mode de Filtrage Texture Modalità filtro texture テクスチャーフィルター モード 텍스쳐 필터 모드 Textuur Filter mode Tryb Filtrowania Tekstur Modo de filtragem de textura Фильтрация текстур Текстурни филтер мод
334 Anisotropic filter Texture Filter mode GLTEXMNU_ANISOTROPIC GLTEXMNU_TEXFILTER Anisotropické filtrování Režim filtrování textur Anisotropische Filterung Texturfiltermodus Anizotropa Filtro Reĝimo por Teksturfiltrado Filtro anisotrópico Modo de filtro de texturas Anisotrooppinen suodatus Pintakuviointien suodatustapa Filtre Anisotropique Mode de Filtrage Texture Filtro anisotropico Modalità filtro texture 異方性フィルター テクスチャーフィルター モード 이방성 필터 텍스쳐 필터 모드 Anisotroop filter Textuur Filter mode Filtr anizotropowy Tryb Filtrowania Tekstur Filtragem anisotrópica Modo de filtragem de textura Анизотропная фильтрация Фильтрация текстур Анизотропни фолтер Текстурни филтер мод
335 None (nearest mipmap) Anisotropic filter OPTVAL_NONENEARESTMIPMAP GLTEXMNU_ANISOTROPIC Žádné (nejbližší mipmapa) Anisotropické filtrování Aus (nächste Mipmap) Anisotropische Filterung Nenio (plej proksima mipmapo) Anizotropa Filtro Ninguno (mipmap cercano) Filtro anisotrópico Ei mitään (lähin mipkartta) Anisotrooppinen suodatus Aucun (mipmap proche voisin) Filtre Anisotropique Nessuno (mipmap più vicina) Filtro anisotropico なし(最寄りミップマップ) 異方性フィルター 없음 (밉멥에 가까움) 이방성 필터 Geen (dichtstbijzijnde mipmap) Anisotroop filter Brak (najbliższa mipmapa) Filtr anizotropowy Nenhum (mipmap vizinho mais próximo) Filtragem anisotrópica Нет (ближайший мипмап) Анизотропная фильтрация Ништа (најближи мипмап) Анизотропни фолтер
336 None (linear mipmap) None (nearest mipmap) OPTVAL_NONELINEARMIPMAP OPTVAL_NONENEARESTMIPMAP Žádné (lineární mipmapa) Žádné (nejbližší mipmapa) Aus (lineare Mipmap) Aus (nächste Mipmap) Nenio (linia mipmapo) Nenio (plej proksima mipmapo) Ninguno (mipmap lineal) Ninguno (mipmap cercano) Ei mitään (lin. mipkartta) Ei mitään (lähin mipkartta) Aucun (mipmap linéaire) Aucun (mipmap proche voisin) Nessuno (mipmap lineare) Nessuno (mipmap più vicina) なし(リニアミップマップ) なし(最寄りミップマップ) 없음 (선형 밉맵) 없음 (밉멥에 가까움) Geen (lineaire mipmap) Geen (dichtstbijzijnde mipmap) Brak (liniowa mipmapa) Brak (najbliższa mipmapa) Nenhum (mipmap linear) Nenhum (mipmap vizinho mais próximo) Нет (линейный мипмап) Нет (ближайший мипмап) Ништа (линеаран мипмап) Ништа (најближи мипмап)
337 None (trilinear) None (linear mipmap) OPTVAL_NONETRILINEAR OPTVAL_NONELINEARMIPMAP Žádné (trilineární) Žádné (lineární mipmapa) Aus (trilinear) Aus (lineare Mipmap) Nenio (trilinia) Nenio (linia mipmapo) Ninguno (trilineal) Ninguno (mipmap lineal) Ei mitään (trilineaarinen) Ei mitään (lin. mipkartta) Aucun (mipmap trilinéaire) Aucun (mipmap linéaire) Nessuno (mipmap trilineare) Nessuno (mipmap lineare) なし(トライリニア) なし(リニアミップマップ) 없음 (삼선형) 없음 (선형 밉맵) Geen (trilineair) Geen (lineaire mipmap) Brak (trzyliniowe) Brak (liniowa mipmapa) Nenhum (trilinear) Nenhum (mipmap linear) Нет (трилинейная) Нет (линейный мипмап) Ништа (трилинеарно) Ништа (линеаран мипмап)
338 Bilinear None (trilinear) OPTVAL_BILINEAR OPTVAL_NONETRILINEAR Bilineární Žádné (trilineární) Aus (trilinear) Dulinia Nenio (trilinia) Bilineal Ninguno (trilineal) Bilineaarinen Ei mitään (trilineaarinen) Bilinéaire Aucun (mipmap trilinéaire) Bilineare Nessuno (mipmap trilineare) バイリニア なし(トライリニア) 쌍선형 없음 (삼선형) Bilineair Geen (trilineair) Dwuliniowe Brak (trzyliniowe) Nenhum (trilinear) Билинейная Нет (трилинейная) Билинеарно Ништа (трилинеарно)
339 Trilinear Bilinear OPTVAL_TRILINEAR OPTVAL_BILINEAR Trilineární Bilineární Trilinia Dulinia Trilineal Bilineal Trilineaarinen Bilineaarinen Trilinéaire Bilinéaire Trilineare Bilineare トライリニア バイリニア 삼선형 쌍선형 Trilineair Bilineair Trzyliniowe Dwuliniowe Трилинейная Билинейная Трилинеарно Билинеарно
340 Message Display Style Trilinear DSPLYMNU_MESSAGEDISP OPTVAL_TRILINEAR Trilineární Nachrichtenstil Trilinia Trilineal Trilineaarinen Trilinéaire Trilineare トライリニア 삼선형 Trilineair Trzyliniowe Трилинейная Трилинеарно
341 Classic Message Display Style OPTVAL_CLASSIC DSPLYMNU_MESSAGEDISP Klassisch Nachrichtenstil
342 Advanced Classic OPTVAL_ADVANCED OPTVAL_CLASSIC Erweitert Klassisch
343 Center messages Advanced MSGMNU_CENTERMESSAGES OPTVAL_ADVANCED Centre messages Vycentrovat zprávy Nachrichten zentrieren Erweitert Centrigi mesaĝoj Centrar mensajes Keskitä viestit Messages centrés Messaggi centrati メッセージを中央に 메시지 중간에 위치 Berichten centreren Wyśrodkuj wiadomości Centralizar mensagens Centrar mensagens Mesaje centrate Центрирование сообщений Централне поруке
344 Pulsating message Display Center messages MSGMNU_PULSEMESSAGES MSGMNU_CENTERMESSAGES Centre messages Vycentrovat zprávy Pulsierende Nachrichtenanzeige Nachrichten zentrieren Centrigi mesaĝoj Centrar mensajes Keskitä viestit Messages centrés Messaggi centrati メッセージを中央に 메시지 중간에 위치 Berichten centreren Wyśrodkuj wiadomości Centralizar mensagens Centrar mensagens Mesaje centrate Центрирование сообщений Централне поруке
345 Message Scale Pulsating message Display MSGMNU_MESSAGESCALE MSGMNU_PULSEMESSAGES Nachrichtengröße Pulsierende Nachrichtenanzeige
346 2x Message Scale OPTVAL_2X MSGMNU_MESSAGESCALE Nachrichtengröße 2-oble
347 4x Automap Options OPTVAL_4X AUTOMAPMNU_TITLE Nastavení automapy Automapoptionen 4-oble Aŭtomapagordoj Opciones del Automapa Automaattikartan asetukset Options Carte Opzioni automappa オートマップ オプション 오토맵 설정 Automap-opties Opcje Mapy Opções de Automapa Setări Hartă Computerizată Настройки автокарты Подешавања аутомапе
348 8x Rotate automap OPTVAL_8X AUTOMAPMNU_ROTATE Otáčet automapu Rotiere Automap 8-oble Rotacii aŭtomapon Rotar automapa Kiertyvä automaattikartta Rotation de la Carte Ruota l'automappa オートマップの回転表示 오토맵 회전 Automatisch roteren Obracaj mapę Girar automapa Rotire hartă computerizată Вращающаяся автокарта Ротирај аутомапу
349 16x Follow player OPTVAL_16X AUTOMAPMNU_FOLLOW Následovat hráče Folge dem Spieler 16-oble Sekvi ludanton Seguir jugador Seuraa pelaajaa Suivre le joueur Segui il giocatore プレイヤー追従 플레이어 추적 Volg de speler Podążaj za graczem Seguir jogador Urmărire jucător Привязка к игроку Прати играча
350 32x OPTVAL_32X 32-oble
351 Polymost
352 True Color Textures POLYMOST_TC True Colour Textures True Color Texturen
353 Pre-load map textures 2x POLYMOST_CACHE OPTVAL_2X Texturen cachen 2-oble
354 Detail Textures 4x POLYMOST_DETAIL OPTVAL_4X Detailtexturen 4-oble
360 Pre-load map textures Sound POLYMOST_CACHE Texturen cachen
361 4000 Hz Detail Textures OPTVAL_4000HZ POLYMOST_DETAIL Detailtexturen 4000 Гц
362 8000 Hz Glow Textures OPTVAL_8000HZ POLYMOST_GLOW Leucht-Texturen 8000 Гц
363 3D-Models POLYMOST_MODELS 3D Modelle
364 11025 Hz Polymost Options OPTVAL_11025HZ POLYMOST_OPTIONS Polymost-Optionen 11025 Гц
365 22050 Hz Palette Emulation OPTVAL_22050HZ POLYMOST_PALETTEEMU Palettenemulation 22050 Гц
366 32000 Hz Palette Interpolation OPTVAL_32000HZ POLYMOST_PALINTER Paletteninterpolation 32000 Гц
367 44100 Hz OPTVAL_44100HZ Sound 44100 Гц
368 48000 Hz 4000 Hz OPTVAL_48000HZ OPTVAL_4000HZ 48000 Гц 4000 Гц
369 64 samples 8000 Hz OPTVAL_64SAMPLES OPTVAL_8000HZ 64 vzorků 64 Samples 64 specimenoj 64 Muestras 64 näytettä 64 샘플 64 sample 64 amostras 64 семпла 8000 Гц 64 узорка
370 128 samples 11025 Hz OPTVAL_128SAMPLES OPTVAL_11025HZ 128 vzorků 128 Samples 128 specimenoj 128 Muestras 128 näytettä 128 샘플 128 sampli 128 amostras 128 семплов 11025 Гц 128 узорка
371 256 samples 22050 Hz OPTVAL_256SAMPLES OPTVAL_22050HZ 256 vzorků 256 Samples 256 specimenoj 256 Muestras 256 näytettä 256 샘플 256 sampli 256 amostras 256 семплов 22050 Гц 256 узорка
372 512 samples 32000 Hz OPTVAL_512SAMPLES OPTVAL_32000HZ 512 vzorků 512 Samples 512 specimenoj 512 Muestras 512 näytettä 512 샘플 512 sampli 512 amostras 512 семплов 32000 Гц 512 узорка
373 1024 samples 44100 Hz OPTVAL_1024SAMPLES OPTVAL_44100HZ 1024 vzorků 1024 Samples 1024 specimenoj 1024 Muestras 1024 näytettä 1024 샘플 1024 sampli 1024 amostras 1024 семпла 44100 Гц 1024 узорка
374 2048 samples 48000 Hz OPTVAL_2048SAMPLES OPTVAL_48000HZ 2048 vzorků 2048 Samples 2048 specimenoj 2048 Muestras 2048 näytettä 2048 샘플 2048 sampli 2048 amostras 2048 семплов 48000 Гц 2048 узорка
375 4096 samples 64 samples OPTVAL_4096SAMPLES OPTVAL_64SAMPLES 4096 vzorků 64 vzorků 4096 Samples 64 Samples 4096 specimenoj 64 specimenoj 4096 Muestras 64 Muestras 4096 näytettä 64 näytettä 4096 샘플 64 샘플 4096 sampli 64 sample 4096 amostras 64 amostras 4096 семплов 64 семпла 4096 узорка 64 узорка
376 Auto 128 samples OPTSTR_AUTO OPTVAL_128SAMPLES 128 vzorků 128 Samples Aŭtomata 128 specimenoj Automático 128 Muestras Automaattinen 128 näytettä Automatico 自動 오토 128 샘플 Automatycznie 128 sampli Automático 128 amostras Авто 128 семплов Аутоматски 128 узорка
377 Mono 256 samples OPTSTR_MONO OPTVAL_256SAMPLES 256 vzorků 256 Samples 1 Laŭtparolilo 256 specimenoj 256 Muestras 256 näytettä モノラル 모노 256 샘플 256 sampli 256 amostras Моно 256 семплов Монотоно 256 узорка
378 Stereo 512 samples OPTSTR_STEREO OPTVAL_512SAMPLES 512 vzorků 512 Samples 2 Laŭtparoliloj 512 specimenoj Estereo 512 Muestras 512 näytettä Stéréo ステレオ 스테레오 512 샘플 512 sampli Estéreo 512 amostras Стерео 512 семплов Стереотоно 512 узорка
379 Dolby Pro Logic Decoder 1024 samples OPTSTR_PROLOGIC OPTVAL_1024SAMPLES 1024 vzorků 1024 Samples Malkodilo de Dolby Pro Logic 1024 specimenoj 1024 Muestras 1024 näytettä ドルビー プロロジック デコーダー 돌비 프로 로직 디코더 1024 샘플 1024 sampli 1024 amostras Декодер Dolby Pro Logic 1024 семпла 1024 узорка
380 Quad 2048 samples OPTSTR_QUAD OPTVAL_2048SAMPLES 2048 vzorků 2048 Samples 4 Laŭtparolilol 2048 specimenoj Cuádruple 2048 Muestras Dolby Pro Logic -dekooderi 2048 näytettä クァッド 쿼드 2048 샘플 Cztery kanały 2048 sampli 2048 amostras Четырёхканальный 2048 семплов Четвородупло 2048 узорка
381 5 speakers 4096 samples OPTSTR_SURROUND OPTVAL_4096SAMPLES 5 reproduktorů 4096 vzorků 5 Lautsprecher 4096 Samples 5 Laŭtparoliloj 4096 specimenoj 5 altavoces 4096 Muestras 5 Bocinas 5 kaiutinta 4096 näytettä 5 enceintes 5 スピーカー 5 스피커 4096 샘플 5 luidsprekers Głośniki 5 4096 sampli 5 alto falantes 4096 amostras 5 динамиков 4096 семплов 5 спикер 4096 узорка
382 5.1 speakers Auto OPTSTR_5POINT1 OPTSTR_AUTO Reproduktory 5.1 5.1 Lautsprecher 5.1 Laŭtparoliloj Aŭtomata Altavoces 5.1 Automático Bocinas 5.1 5.1 kaiutinta Automaattinen Enceintes 5.1 Automatico 5.1 スピーカー 自動 5.1 스피커 오토 5.1 luidsprekers Głośniki 5.1 Automatycznie Auto falantes 5.1 Automático Динамики 5.1 Авто 5.1 спикер Аутоматски
383 7.1 speakers Mono OPTSTR_7POINT1 OPTSTR_MONO Reproduktory 7.1 7.1 Lautsprecher 7.1 Laůtparoliloj 1 Laŭtparolilo Altavoces 7.1 Bocinas 7.1 7.1 kaiutinta Enceintes 7.1 7.1 スピーカー モノラル 7.1스피커 모노 7.1 luidsprekers Głośniki 7.1 Auto falantes 7.1 Динамики 7.1 Моно 7.1 спикер Монотоно
384 OpenAL Options Stereo OPENALMNU_TITLE OPTSTR_STEREO Nastavení OpenAL OpenAL Optionen OpenAL-agordoj 2 Laŭtparoliloj Opciones de OpenAL Estereo OpenAL-asetukset Options OpenAL Stéréo Opzioni OpenAL OpenAL オプション ステレオ 오픈에이엘 설정 스테레오 OpenAL opties Opcje OpenAL Opções de OpenAL Estéreo Настройки OpenAL Стерео OpenAL подешавања Стереотоно
385 Playback device Dolby Pro Logic Decoder OPENALMNU_PLAYBACKDEVICE OPTSTR_PROLOGIC Přehravací zařízení Wiedergabegerät Ludado-aparato Malkodilo de Dolby Pro Logic Dispositivo de reproducción Äänitoistolaite Sortie sonore Dispositivo di playback プレイバック デバイス ドルビー プロロジック デコーダー 재생 장치 돌비 프로 로직 디코더 Afspeelapparaat Urządzenie odtwarzania Dispositivo de reprodução Устройство воспроизведения Декодер Dolby Pro Logic Аудио уређај
386 Enable EFX Quad OPENALMNU_ENABLEEFX OPTSTR_QUAD Povolit EFX EFX aktiv Aktivigi EFX 4 Laŭtparolilol Permitir EFX Cuádruple Ota käyttöön EFX Dolby Pro Logic -dekooderi Activer EFX Abilita EFX EFXを有効化 クァッド EFX 켬 쿼드 EFX inschakelen Pozwól na EFX Cztery kanały Habilitar EFX Включить EFX Четырёхканальный Укључи EFX Четвородупло
387 Resampler 5 speakers OPENALMNU_RESAMPLER OPTSTR_SURROUND 5 reproduktorů 5 Lautsprecher Respecimenilo 5 Laŭtparoliloj 5 altavoces 5 Bocinas Näytteenottotaajuusmuunnin 5 kaiutinta 5 enceintes リサンプラー 5 スピーカー 재배열 기기 5 스피커 5 luidsprekers Resampler Głośniki 5 5 alto falantes Ресэмплер 5 динамиков Ресемплер 5 спикер
388 Sound Options 5.1 speakers SNDMNU_TITLE OPTSTR_5POINT1 Nastavení zvuku Reproduktory 5.1 Soundeinstellungen 5.1 Lautsprecher Son-agordoj 5.1 Laŭtparoliloj Opciones de sonido Altavoces 5.1 Bocinas 5.1 Ääniasetukset 5.1 kaiutinta Options Sonores Enceintes 5.1 Hangbeállítások Opzioni del suono サウンド オプション 5.1 スピーカー 음향 설정 5.1 스피커 Geluidsopties 5.1 luidsprekers Opcje Dźwięku Głośniki 5.1 Opções de Áudio Auto falantes 5.1 Настройки звука Динамики 5.1 Звучна подешавања 5.1 спикер
389 Sounds volume 7.1 speakers SNDMNU_SFXVOLUME OPTSTR_7POINT1 Hlasitost zvuků Reproduktory 7.1 Effektlautstärke 7.1 Lautsprecher Son-laŭtec-menuo 7.1 Laůtparoliloj Volumen de sonido Altavoces 7.1 Bocinas 7.1 Äänitehosteiden voimakkuus 7.1 kaiutinta Volume des Sons Enceintes 7.1 Effektek hangereje Volume suoni 効果音音量 7.1 スピーカー 효과음 음량 7.1스피커 Geluidsvolume 7.1 luidsprekers Głośność Dźwięku Głośniki 7.1 Volume de sons Auto falantes 7.1 Громкость звука Динамики 7.1 Јачина звука 7.1 спикер
390 Menu volume OpenAL Options SNDMNU_MENUVOLUME OPENALMNU_TITLE Hlasitost nabídek Nastavení OpenAL Menülautstärke OpenAL Optionen Menu-laŭteco OpenAL-agordoj Volumen del menú Opciones de OpenAL Valikon äänenvoimakkuus OpenAL-asetukset Volume du Menu Options OpenAL Menü hangereje Volume menu Opzioni OpenAL メニュー音量 OpenAL オプション 메뉴 음량 오픈에이엘 설정 Menu volume OpenAL opties Głośność Menu Opcje OpenAL Volume do menu Opções de OpenAL Громкость меню Настройки OpenAL Јачина менија OpenAL подешавања
391 Music volume Playback device SNDMNU_MUSICVOLUME OPENALMNU_PLAYBACKDEVICE Hlasitost hudby Přehravací zařízení Musiklautstärke Wiedergabegerät Muzik-laŭteco Ludado-aparato Volumen de la Música Dispositivo de reproducción Musiikin äänenvoimakkuus Äänitoistolaite Volume Musique Sortie sonore Zene hangereje Volume musica Dispositivo di playback 音楽音量 プレイバック デバイス 배경음 음량 재생 장치 Muziekvolume Afspeelapparaat Głośność Muzyki Urządzenie odtwarzania Volume da música Dispositivo de reprodução Громкость музыки Устройство воспроизведения Јачина музике Аудио уређај
392 MIDI device Enable EFX SNDMNU_MIDIDEVICE OPENALMNU_ENABLEEFX MIDI zařízení Povolit EFX MIDI-Gerät EFX aktiv MIDI-aparato Aktivigi EFX Dispositivo MIDI Permitir EFX MIDI-laite Ota käyttöön EFX Sortie MIDI Activer EFX MIDI eszköz Dispositivo MIDI Abilita EFX MIDIデバイス EFXを有効化 MIDI 장치 EFX 켬 MIDI-apparaat EFX inschakelen Urządzenie MIDI Pozwól na EFX Dispositivo MIDI Habilitar EFX MIDI проигрыватель Включить EFX MIDI уређај Укључи EFX
393 Sound in Background Resampler SNDMNU_BACKGROUND OPENALMNU_RESAMPLER Zvuk na pozadí Sound im Hintergrund Sono en Fono Respecimenilo Sonido en segundo plano Ääni taustalla Näytteenottotaajuusmuunnin Son activé en arrière plan Háttérhangok Suono di sottofondo バックグラウンドでのサウンド リサンプラー 배경화면에서도 소리 재생 재배열 기기 Geluid in de achtergrond Dźwięk w Tle Resampler Som de Fundo Звуки в фоне Ресэмплер Звуци у позадини Ресемплер
394 Underwater reverb Sound Options SNDMNU_UNDERWATERREVERB SNDMNU_TITLE Ozvěna pod vodou Nastavení zvuku Unterwasserhall Soundeinstellungen Subakva resono Son-agordoj Reverb. bajo el agua Opciones de sonido Vedenalaiskaiku Ääniasetukset Reverbération sous l'eau Options Sonores Vízalatti viszhang Hangbeállítások Reverb sott'acqua Opzioni del suono 水中反響音 サウンド オプション 수중 울림효과 음향 설정 Onderwater nagalm Geluidsopties Pogłos pod wodą Opcje Dźwięku Reverberação debaixo d'água Opções de Áudio Reverberação debaixo de água Эффект под водой Настройки звука Подводни одјек Звучна подешавања
395 Randomize pitches Sounds volume SNDMNU_RANDOMIZEPITCHES SNDMNU_SFXVOLUME Náhodné výšky tónu Hlasitost zvuků Zufällige Tonhöhe Effektlautstärke Malcertigi son-peĉojn Son-laŭtec-menuo Tonos aleatorios Volumen de sonido Satunnaista äänenkorkeuksia Äänitehosteiden voimakkuus Tons sonores aléatoires Volume des Sons Hangmagasság véletlenszerű Effektek hangereje Rendi casuale il tono Volume suoni ランダマイズ ピッチ 効果音音量 음높이 무작위화 효과음 음량 Willekeurige plaatsen Geluidsvolume Losuj tonacje Głośność Dźwięku Aleatorizar tons Volume de sons Tons aleatórios Изменять высоту Громкость звука Рандомизација тонова Јачина звука
396 Sound channels Menu volume SNDMNU_CHANNELS SNDMNU_MENUVOLUME Počet zvukových kanálů Hlasitost nabídek Soundkanäle Menülautstärke Son-kanaloj Menu-laŭteco Canales de sonido Volumen del menú Äänikanavat Valikon äänenvoimakkuus Canaux sonores Volume du Menu Hangcsatorna Menü hangereje Numero canali del suono Volume menu サウンド チャンネル メニュー音量 음향 채널 메뉴 음량 Geluidskanalen Menu volume Kanały dźwiękowe Głośność Menu Canais de som Volume do menu Количество каналов Громкость меню Звучни канали Јачина менија
397 Sound backend Music volume SNDMNU_BACKEND SNDMNU_MUSICVOLUME Zvukový systém Hlasitost hudby Soundsystem Musiklautstärke Son-servilo Muzik-laŭteco Sistema de sonido Volumen de la Música Äänijärjestelmä Musiikin äänenvoimakkuus Traitement Son Volume Musique Zene hangereje Backend suono Volume musica サウンド バックエンド 音楽音量 음향 말미 배경음 음량 Geluidsarme achterkant Muziekvolume System dźwiękowy Głośność Muzyki Sistema de som Volume da música Звуковая система Громкость музыки Звучни бекенд Јачина музике
398 OpenAL options MIDI device SNDMNU_OPENAL SNDMNU_MIDIDEVICE Nastavení OpenAL MIDI zařízení OpenAL Optionen MIDI-Gerät OpenAL-agordoj MIDI-aparato Opciones de OpenAL Dispositivo MIDI OpenAL-asetukset MIDI-laite Options OpenAL Sortie MIDI OpenAL beállításai MIDI eszköz Opzioni OpenAL Dispositivo MIDI OpenAL オプション MIDIデバイス 오픈에이엘 설정 MIDI 장치 OpenAL opties MIDI-apparaat Opcje OpenAL Urządzenie MIDI Opções de OpenAL Dispositivo MIDI Настройки OpenAL MIDI проигрыватель OpenAL подешавања MIDI уређај
399 Restart sound Sound in Background SNDMNU_RESTART SNDMNU_BACKGROUND Restartovat zvuk Zvuk na pozadí Sound neu starten Sound im Hintergrund Rekomenci sonon Sono en Fono Reiniciar sonido Sonido en segundo plano Käynnistä ääni uudelleen Ääni taustalla Redémarrer moteur sonore Son activé en arrière plan Hang újraindítása Háttérhangok Resetta il suono Suono di sottofondo サウンド再起動 バックグラウンドでのサウンド 음향 재시작 배경화면에서도 소리 재생 Herstart geluid Geluid in de achtergrond Zresetuj dźwięk Dźwięk w Tle Reiniciar som Som de Fundo Перезапустить звук Звуки в фоне Поново покрени звук Звуци у позадини
400 Advanced options Underwater reverb SNDMNU_ADVANCED SNDMNU_UNDERWATERREVERB Pokročilá nastavení Ozvěna pod vodou Erweiterte Optionen Unterwasserhall Altnivelaj agordoj Subakva resono Opciones avanzadas Reverb. bajo el agua Edistyneet asetukset Vedenalaiskaiku Options avancées Reverbération sous l'eau Haladó beállítások Vízalatti viszhang Opzioni avanzate Reverb sott'acqua 高度なオプション 水中反響音 고급 설정 수중 울림효과 Geavanceerde opties Onderwater nagalm Zaawansowane Opcje Pogłos pod wodą Opções avançadas Reverberação debaixo d'água Reverberação debaixo de água Расширенные настройки Эффект под водой Напредна подешавања Подводни одјек
401 Module replayer options Randomize pitches SNDMNU_MODREPLAYER SNDMNU_RANDOMIZEPITCHES Nastavení přehrávače modulů Náhodné výšky tónu Modul-Spieler-Optionen Zufällige Tonhöhe Agordoj por modulreludilo Malcertigi son-peĉojn Opciones reproductor de módulos Tonos aleatorios Moduulisoitinasetukset Satunnaista äänenkorkeuksia Options lecteur de module Tons sonores aléatoires Hangmagasság véletlenszerű Opzioni Module replayer Rendi casuale il tono モジュールリプレイヤー オプション ランダマイズ ピッチ 모듈 재생 설정 음높이 무작위화 Module replayer opties Willekeurige plaatsen Opcje Modułu Odtwarzacza Losuj tonacje Opções de reprodutor de módulos Aleatorizar tons Tons aleatórios Параметры воспроизведения модулей Изменять высоту Подешавања модулног риплејера Рандомизација тонова
402 Midi player options Sound channels SNDMNU_MIDIPLAYER SNDMNU_CHANNELS Nastavení MIDI přehrávače Počet zvukových kanálů MIDI-Spieler-Optionen Soundkanäle Agordoj por MIDI-ludilo Son-kanaloj Opciones de reproductor MIDI Canales de sonido MIDI-soitinasetukset Äänikanavat Option lecteur MIDI Canaux sonores Hangcsatorna Opzioni Midi player Numero canali del suono Midi再生のオプション サウンド チャンネル MIDI 플레이어 설정 음향 채널 Midi speler opties Geluidskanalen Opcje Odtwarzacza Midi Kanały dźwiękowe Opções de reprodutor MIDI Canais de som Настройки MIDI-проигрывателя Количество каналов MIDI плејер подешавања Звучни канали
403 Sound in Menus Sound backend SNDMNU_MENUSOUND SNDMNU_BACKEND Zvukový systém Sound in Menüs Soundsystem Son-servilo Sistema de sonido Äänijärjestelmä Traitement Son Backend suono サウンド バックエンド 음향 말미 Geluidsarme achterkant System dźwiękowy Sistema de som Звуковая система Звучни бекенд
404 Advanced Sound Options OpenAL options ADVSNDMNU_TITLE SNDMNU_OPENAL Pokročilá nastavení zvuku Nastavení OpenAL Erweiterte Soundoptionen OpenAL Optionen Altnivelaj Son-agordoj OpenAL-agordoj Opciones avanzadas de sonido Opciones de OpenAL Edistyneet ääniasetukset OpenAL-asetukset Options Sonores Avancées Options OpenAL OpenAL beállításai Opzioni avanzate dei suoni Opzioni OpenAL 高度なサウンドオプション OpenAL オプション 고급 음향 설정 오픈에이엘 설정 Geavanceerde geluidsopties OpenAL opties Zaawansowane Opcje Dźwięku Opcje OpenAL Opções de Áudio Avançadas Opções de OpenAL Расширенные настройки Настройки OpenAL Напредна подешавања звука OpenAL подешавања
405 Ignore file type for music lookup Restart sound ADVSNDMNU_LOOKUPMUS SNDMNU_RESTART Restartovat zvuk Sound neu starten Rekomenci sonon Reiniciar sonido Käynnistä ääni uudelleen Redémarrer moteur sonore Hang újraindítása Resetta il suono サウンド再起動 음향 재시작 Herstart geluid Zresetuj dźwięk Reiniciar som Перезапустить звук Поново покрени звук
406 Ignore file type for sound lookup Advanced options ADVSNDMNU_LOOKUPSND SNDMNU_ADVANCED Pokročilá nastavení Erweiterte Optionen Altnivelaj agordoj Opciones avanzadas Edistyneet asetukset Options avancées Haladó beállítások Opzioni avanzate 高度なオプション 고급 설정 Geavanceerde opties Zaawansowane Opcje Opções avançadas Расширенные настройки Напредна подешавања
407 Sample rate Module replayer options ADVSNDMNU_SAMPLERATE SNDMNU_MODREPLAYER Vzorkovací frekvence Nastavení přehrávače modulů Samplerate Modul-Spieler-Optionen Specimenrapideco Agordoj por modulreludilo Frecuencia de muestreo Opciones reproductor de módulos Näytteenottotaajuus Moduulisoitinasetukset Cadence de Sampling Options lecteur de module Opzioni Module replayer サンプルレート モジュールリプレイヤー オプション 샘플링레이트 모듈 재생 설정 Steekproeftarief Module replayer opties Częstotliwość próbkowania Opcje Modułu Odtwarzacza Taxa de amostragem Opções de reprodutor de módulos Частота дискретизации Параметры воспроизведения модулей Фреквенција узорковања Подешавања модулног риплејера
408 HRTF Midi player options ADVSNDMNU_HRTF SNDMNU_MIDIPLAYER Nastavení MIDI přehrávače MIDI-Spieler-Optionen Agordoj por MIDI-ludilo Opciones de reproductor MIDI MIDI-soitinasetukset Option lecteur MIDI Opzioni Midi player Midi再生のオプション 머리전달함수 MIDI 플레이어 설정 Midi speler opties HRTF Opcje Odtwarzacza Midi Opções de reprodutor MIDI Настройки MIDI-проигрывателя MIDI плејер подешавања
409 OPL Synthesis Sound in Menus ADVSNDMNU_OPLSYNTHESIS SNDMNU_MENUSOUND Emulace OPL OPL Synthese Sound in Menüs OPL-Sintezo Síntesis OPL OPL-synteesi Synthèse OPL OPLシンセサイズ OPL 합성 OPL synthese Synteza OPL Síntese OPL Синтез OPL OPL синтеза
410 Number of emulated OPL chips Advanced Sound Options ADVSNDMNU_OPLNUMCHIPS ADVSNDMNU_TITLE Počet emulovaných OPL čipů Pokročilá nastavení zvuku Anzahl OPL Chips Erweiterte Soundoptionen Nombro da imititaj OPL-blatoj Altnivelaj Son-agordoj Número de chips OPL emulados Opciones avanzadas de sonido Emuloitavien OPL-piirien lukumäärä Edistyneet ääniasetukset Puces OPL émulées Options Sonores Avancées Numero di chip OPL emulati Opzioni avanzate dei suoni OPLチップエミュレートの番号 高度なサウンドオプション 에뮬레이트된 OPL 칩 수 고급 음향 설정 Aantal geëmuleerde OPL chips Geavanceerde geluidsopties Liczba emulowanych czipów OPL Zaawansowane Opcje Dźwięku Número de chips OPL emulados Opções de Áudio Avançadas Количество эмулируемых OPL чипов Расширенные настройки Број емулираних OPL чипа Напредна подешавања звука
411 Full MIDI stereo panning Ignore file type for music lookup ADVSNDMNU_OPLFULLPAN ADVSNDMNU_LOOKUPMUS Plné MIDI stereo Echte MIDI-Stereoeffekte Tuta MIDI-sterepanoramado Balance estéreo MIDI completo Täysi MIDI-stereopanorointi Latéralisation complète MIDI Full MIDIステレオパンニング 완전한 MIDI 스테레오 패닝 Volledige MIDI stereo panning Pełne efekty stereo dla MIDI Lateralidade estéreo completa para MIDI Полная стереопанорама для MIDI Пуно MIDI стерео каналисање
412 OPL Emulator Core Ignore file type for sound lookup ADVSNDMNU_OPLCORES ADVSNDMNU_LOOKUPSND Emulační jádro OPL OPL Emulatorkern OPL Imitilkerno Núcleo de emulador OPL OPL-emulaattoriydin Cœur émulateur OPL OPL エミュレート コア OPL 에뮬레이터 코어 OPL Emulator Kern Rdzeń Emulatora OPL Núcleo do emulador de OPL Ядро эмуляции OPL OPL језгро емулације
413 MIDI voices Sample rate ADVSNDMNU_MIDIVOICES ADVSNDMNU_SAMPLERATE Počet MIDI hlasů Vzorkovací frekvence MIDI Stimmen Samplerate MIDI Voĉoj Specimenrapideco Voces MIDI Frecuencia de muestreo MIDI-äänet Näytteenottotaajuus Voix MIDI Cadence de Sampling Voci MIDI MIDI ボイス サンプルレート MIDI 최대 음색 양 샘플링레이트 MIDI-stemmen Steekproeftarief Głosy MIDI Częstotliwość próbkowania Vozes MIDI Taxa de amostragem MIDI-голоса Частота дискретизации MIDI гласови Фреквенција узорковања
414 FluidSynth HRTF ADVSNDMNU_FLUIDSYNTH ADVSNDMNU_HRTF 머리전달함수 HRTF
415 Patch set OPL Synthesis ADVSNDMNU_FLUIDPATCHSET ADVSNDMNU_OPLSYNTHESIS Nástrojová sada Emulace OPL Patch-Set OPL Synthese Flikaro OPL-Sintezo Set de parche Síntesis OPL Patch-asetus OPL-synteesi Banque de Sons Synthèse OPL パッチ セット OPLシンセサイズ 패치 세트 OPL 합성 OPL synthese Zestaw patchów Synteza OPL Banco de sons Síntese OPL Патч-набор Синтез OPL Печ сет OPL синтеза
416 Gain Number of emulated OPL chips ADVSNDMNU_FLUIDGAIN ADVSNDMNU_OPLNUMCHIPS Zesílení Počet emulovaných OPL čipů Relative Lautstärke Anzahl OPL Chips Akiro Nombro da imititaj OPL-blatoj Ganancia Número de chips OPL emulados Vahvistus Emuloitavien OPL-piirien lukumäärä Puces OPL émulées Numero di chip OPL emulati ゲイン OPLチップエミュレートの番号 쌓기 에뮬레이트된 OPL 칩 수 Relatief volume Aantal geëmuleerde OPL chips Wzmocnienie Liczba emulowanych czipów OPL Ganho Número de chips OPL emulados Усиление Количество эмулируемых OPL чипов Појачање Број емулираних OPL чипа
417 Reverb Full MIDI stereo panning ADVSNDMNU_REVERB ADVSNDMNU_OPLFULLPAN Ozvěna Plné MIDI stereo Hall Echte MIDI-Stereoeffekte Resono Tuta MIDI-sterepanoramado Reverberación Balance estéreo MIDI completo Kaiku Täysi MIDI-stereopanorointi Réverbération Latéralisation complète MIDI リバーブ Full MIDIステレオパンニング 리버브 완전한 MIDI 스테레오 패닝 Nagalm Volledige MIDI stereo panning Pogłos Pełne efekty stereo dla MIDI Reverberação Lateralidade estéreo completa para MIDI Реверберация Полная стереопанорама для MIDI Одјек Пуно MIDI стерео каналисање
418 Reverb Level OPL Emulator Core ADVSNDMNU_REVERB_LEVEL ADVSNDMNU_OPLCORES Intenzita ozvěny Emulační jádro OPL Hallintensität OPL Emulatorkern Resono-nivelo OPL Imitilkerno Nivel de Reverberación Núcleo de emulador OPL Kaiunvoimakkuus OPL-emulaattoriydin Niveau Réverb. Cœur émulateur OPL リバーブ量 OPL エミュレート コア 리버브 강도 OPL 에뮬레이터 코어 Nagalm niveau OPL Emulator Kern Poziom pogłosu Rdzeń Emulatora OPL Nível de reverberação Núcleo do emulador de OPL Уровень реверберации Ядро эмуляции OPL Ниво одјека OPL језгро емулације
419 Chorus MIDI voices ADVSNDMNU_CHORUS ADVSNDMNU_MIDIVOICES Počet MIDI hlasů MIDI Stimmen Koruso MIDI Voĉoj Voces MIDI MIDI-äänet Voix MIDI Voci MIDI コーラス MIDI ボイス 코러스 MIDI 최대 음색 양 MIDI-stemmen Głosy MIDI Vozes MIDI Хорус MIDI-голоса Корус MIDI гласови
420 Timidity++ FluidSynth ADVSNDMNU_TIMIDITY ADVSNDMNU_FLUIDSYNTH
421 ADLMidi Patch set ADVSNDMNU_ADLMIDI ADVSNDMNU_FLUIDPATCHSET Nástrojová sada Patch-Set Flikaro Set de parche Patch-asetus Banque de Sons パッチ セット 패치 세트 Zestaw patchów Banco de sons Патч-набор Печ сет
422 OPNMidi Gain ADVSNDMNU_OPNMIDI ADVSNDMNU_FLUIDGAIN Zesílení Relative Lautstärke Akiro Ganancia Vahvistus ゲイン 쌓기 Relatief volume Wzmocnienie Ganho Усиление Појачање
423 Timidity config file Reverb ADVSNDMNU_TIMIDITYCONFIG ADVSNDMNU_REVERB Konfigurační soubor Timidity Ozvěna Timidity Konfigurationsdatei Hall Agordo-arkivo por Timidity Resono Ruta al archivo config. Timidity Reverberación Timidity-config-tiedosto Kaiku Fichier de config. TiMidity Réverbération File Timidity config Timidity コンフィグファイル リバーブ Timidity 코딩 파일 리버브 Timidity++ configuratiebestand Nagalm Plik konfiguracyjny Timidity Pogłos Arquivo de configuração do Timidity Reverberação Файл конфигурации Timidity Реверберация Timidity конфигурациона датотека Одјек
424 Relative volume Reverb Level ADVSNDMNU_TIMIDITYVOLUME ADVSNDMNU_REVERB_LEVEL Relativní hlasitost Intenzita ozvěny Relative Lautstärke Hallintensität Relativa volumeno Resono-nivelo Volumen relativo Nivel de Reverberación Suhteellinen äänenvoimakkuus Kaiunvoimakkuus Volume Relatif Niveau Réverb. Volume relativo 相対音量 リバーブ量 비교적인 볼륨 리버브 강도 Relatief volume Nagalm niveau Względna głośność Poziom pogłosu Volume relativo Nível de reverberação Относительная громкость Уровень реверберации Релативна јачина Ниво одјека
425 WildMidi Chorus ADVSNDMNU_WILDMIDI ADVSNDMNU_CHORUS Koruso コーラス 코러스 Хорус Корус
426 WildMidi config file Timidity++ ADVSNDMNU_WILDMIDICONFIG ADVSNDMNU_TIMIDITY Konfigurační soubor WildMidi WilfMidi Konfigurationsdatei WildMidi agordarkivo Archivo de config. WildMidi WildMidi-config-tiedosto Fichier config. WildMidi File WildMidi config WildMidi コンフィグファイル WildMidi 코딩 파일 WildMidi configuratiebestand Plik konfiguracyjny WildMidi Arquivo de configuração do WildMidi Файл конфигурации WildMidi WildMidi конфигурациона датотека
427 Select configuration ADLMidi ADVSNDMNU_SELCONFIG ADVSNDMNU_ADLMIDI Vybrat konfiguraci Konfiguration wählen Elekti agordojn Seleccionar configuración Valitse kokoonpano Sélectionner configuration Seleziona la configurazione 構成選択 설정을 고르시오 Selecteer configuratie Wybierz konfigurację Selecionar configuração Выбор конфигурации Изабери конфигурацију
428 Global OPNMidi ADVSNDMNU_GLOBAL ADVSNDMNU_OPNMIDI Globální Malloka Global Yleinen Globale グローバル 전반적 Globaal Globalne Общие Глобално
429 Freeverb Timidity config file ADVSNDMNU_FREEVERB ADVSNDMNU_TIMIDITYCONFIG Konfigurační soubor Timidity Timidity Konfigurationsdatei Agordo-arkivo por Timidity Ruta al archivo config. Timidity Timidity-config-tiedosto Fichier de config. TiMidity File Timidity config フリーバーブ Timidity コンフィグファイル 프리버브 Timidity 코딩 파일 Timidity++ configuratiebestand Plik konfiguracyjny Timidity Arquivo de configuração do Timidity Файл конфигурации Timidity Timidity конфигурациона датотека
430 Global Freeverb Relative volume ADVSNDMNU_GLOBAL_FREEVERB ADVSNDMNU_TIMIDITYVOLUME Globální Freeverb Relativní hlasitost Globales Freeverb Relative Lautstärke Malloka Freeverb Relativa volumeno Freeverb Global Volumen relativo Yleinen Freeverb Suhteellinen äänenvoimakkuus Freeverb Global Volume Relatif Freeverb globale Volume relativo グローバル フリーバーブ 相対音量 전반적 프리버브 비교적인 볼륨 Globale Freeverb Relatief volume Globalny Freeverb Względna głośność Freeverb Global Volume relativo Глобальный Freeverb Относительная громкость Глобални Freeverb Релативна јачина
431 Advanced Resampling WildMidi ADVSNDMNU_ADVRESAMPLING ADVSNDMNU_WILDMIDI Pokročilé převzorkování Erweitertes Resampling Altnivela respecimenado Resampleo Avanzado Kehittynyt näytteenottotaajuuden muuntaminen Resampling Avancé Resampling avanzato 高度なリサンプリング 향상된 리샘플링 Geavanceerde herbemonstering Zaawansowane Próbkowanie Reamostragem Avançada Продвинутый ресэмплинг Напредно ресампловање
432 OPL Bank WildMidi config file ADVSNDMNU_OPLBANK ADVSNDMNU_WILDMIDICONFIG OPL sada Konfigurační soubor WildMidi WilfMidi Konfigurationsdatei Banko por OPL WildMidi agordarkivo Banco OPL Archivo de config. WildMidi OPL-pankki WildMidi-config-tiedosto Banque OPL Fichier config. WildMidi File WildMidi config WildMidi コンフィグファイル OPL 뱅크 WildMidi 코딩 파일 WildMidi configuratiebestand Bank OPL Plik konfiguracyjny WildMidi Banco OPL Arquivo de configuração do WildMidi Банк OPL Файл конфигурации WildMidi OPL банка WildMidi конфигурациона датотека
433 OPL Emulator Core Select configuration ADVSNDMNU_ADLOPLCORES ADVSNDMNU_SELCONFIG Emulační jádro OPL Vybrat konfiguraci OPL Emulatorkern Konfiguration wählen Imitilkerno por OPL Elekti agordojn Núcleos de Emulador OPL Seleccionar configuración OPL-emulaattoriydin Valitse kokoonpano Cœur Emulateur OPL Sélectionner configuration Seleziona la configurazione OPL エミュレートコア 構成選択 OPL 에뮬레이터 코어 설정을 고르시오 OPL Emulator Kern Selecteer configuratie Rdzeń Emulatora OPL Wybierz konfigurację Núcleo do Emulador de OPL Selecionar configuração Ядро эмуляции OPL Выбор конфигурации OPL емулационо језгро Изабери конфигурацију
434 Run emulator at PCM rate Global ADVSNDMNU_RUNPCMRATE ADVSNDMNU_GLOBAL Emulátor používá PCM vzorkovací frekvenci Globální Emulator benutzt PCM Samplerate Kurigi imitilon laŭ rapido de PCM Malloka Ejecutar emulador a velocidad PCM Global Aja emulaattoria PCM-taajuudella Yleinen Emulateur utilise cadence PCM Esegui l'emulatore con rate PCM Globale PCMレートでエミュレート実行 グローバル PCM 속도로 에뮬레이터 실행 전반적 Emulator maakt gebruik van PCM Samplerate Globaal Uruchom emulator w częstotliwości PCM Globalne Rodar emulador em taxa PCM Использовать с частотой PCM Общие Покрени емулацију на PCM стопи Глобално
435 Number of emulated OPL chips Freeverb ADVSNDMNU_ADLNUMCHIPS ADVSNDMNU_FREEVERB Počet emulovaných OPL čipů Anzahl OPL Chips Numbro da imitaj OPL-blatoj Número de chips OPL emulados Emuloitavien OPL-piirien lukumäärä Puces OPL émulées Numero di chip OPL emulati OPLチップエミュレートの番号 フリーバーブ 에뮬레이트된 OPL 칩 개수 프리버브 Aantal geëmuleerde OPL chips Liczba emulowanych czipów OPL Número de chips OPL emulados Количество эмулируемых чипов OPL Број емулираних OPL чипова
436 Volume model Global Freeverb ADVSNDMNU_VLMODEL ADVSNDMNU_GLOBAL_FREEVERB Model hlasitosti Globální Freeverb Lautstärkemodell Globales Freeverb Volumen-modelo Malloka Freeverb Modelo de Volumen Freeverb Global Äänenvoimakkuusmalli Yleinen Freeverb Modèle de Volume Freeverb Global Modello di volume Freeverb globale 音量モデル グローバル フリーバーブ 모델 볼륨 전반적 프리버브 Volume model Globale Freeverb Model głośności Globalny Freeverb Modelo de volume Freeverb Global Модель громкости Глобальный Freeverb Волумски модел Глобални Freeverb
541 You are playing the shareware version of Duke Nukem 3D. While this version is really cool, you are missing over 75% of the total game, along with other great extras which you'll get when you order the complete version and get the final three episodes. Disable keyboard cheats BUYDUKE MISCMNU_NOCHEATS not used Tastatur-Cheats deaktivieren Malaktivigi klavaran trumpon Desactivar trucos por teclado キーボードからのチート無効 Schakel cheats uit Desabilitar trapaças de teclado
542 Buy the complete version of Blood for three new episodes plus eight BloodBath-only levels! Quicksave rotation BUYBLOOD MISCMNU_QUICKSAVEROTATION not used Rotace rychle uložených her Schnellspeicherrotation Rapidkonservado-rotacio Rotación de Salvado Rápido Pikatallennuskierto Rotation Sauvegardes Rapides Rotazione rapide della quicksave クイックセーブ間隔 빠른 저장 간격 Roteer quicksaves Rotacja szybkich zapisów Rotação de quicksave Чередовать слоты для быстрых сохранений Окретање брзих чувања
543 Loading and saving games not supported in this demo version of Blood. Number of quicksaves in rotation BLOOD_SW_BLOCK MISCMNU_QUICKSAVECOUNT not used Počet rychle uložených her v rotaci Anzahl Schnellspeicherplätze Nombro da rapidkonservitaj ludoj en rotaciado Número de Salvados Rápidos en Rotación Pikatallennusten määrä kierrossa Nombre de sauvegardes en rotation Numero di quicksaves in rotazione 間隔クイックセーブの数 빠른 저장 간격의 수 Aantal roterende quicksaves Ilość szybkich zapisów w rotacji Número de quicksaves em rotação Кол-во слотов для быстрых сохранений Број брзих чувања у окретању
544 Ninja Slice Animation MISCMNU_NINJA
545 Use Darts instead of Shurikens MISCMNU_DARTS
546 Miscellaneous
547 You are playing the shareware version of Duke Nukem 3D. While this version is really cool, you are missing over 75% of the total game, along with other great extras which you'll get when you order the complete version and get the final three episodes. BUYDUKE not used
548 Buy the complete version of Blood for three new episodes plus eight BloodBath-only levels! BUYBLOOD not used
549 Loading and saving games not supported in this demo version of Blood. BLOOD_SW_BLOCK not used
550 Are you sure you want to end the game? ENDGAME Opravdu si přeješ ukončit hru? Willst du das Spiel wirklich beenden? Ĉu vi certas, ke vi volas fini la ludon? ¿Estás segur@[ao_esp] que deseas cerrar el juego? Haluatko varmasti päättää pelin? Voulez vous mettre fin à votre partie? Biztos vagy benne hogy beakarod fejezni a játékot? Sei sicuro di voler terminare la partita? 本当にゲームを中断するのか? 게임을 정말로 종료하시겠습니까? Weet je zeker dat je het spel wilt beëindigen? Czy jesteś pewien że chcesz zakończyć grę? Tem certeza que deseja encerrar este jogo? Tem certeza que deseja fechar este jogo? Вы действительно хотите закончить игру? Јесте ли сигурни да желите завршити игру?
551 Are you sure you want to quit this game? CONFIRM_QUITMSG Přeješ si odejít? Bist du dir sicher, dass du gehen willst? Ĉu vi certas, ke vi volas ĉesi? ¿Estás segur@[ao_esp] que quieres salir? Haluatko varmasti lopettaa? Êtes vous sûr de vouloir quitter ? Biztos vagy benne hogy ki akarsz lépni? Sei sicuro di voler abbandonare? 本当に終了するのか? 정말 종료하시겠습니까? Weet je zeker dat je wilt stoppen? Czy jesteś pewien że chcesz wyjść? Tem certeza que quer sair? Tens a certeza que queres sair? Вы действительно желаете выйти? Да ли сте сигурни да желите да одустанеш?
552 Reset controls to defaults? CONFIRM_CTRL1 Steuerung auf Standard zurücksetzen?
1755 %p had enough and checked out. TXTS_SUICIDE02
1756 %p didn't fear the Reaper. TXTS_SUICIDE03
1757 %p dialed the 1-800-CYANIDE line. TXTS_SUICIDE04
1758 %p wasted himself. TXTS_SUICIDE05
1759 %p kicked his own ass. TXTS_SUICIDE06
1760 %p went out in blaze of his own glory. TXTS_SUICIDE07
1761 %p killed himself before anyone else could. TXTS_SUICIDE08
1762 %p needs shooting lessons. TXTS_SUICIDE09
1763 %p blew his head off. TXTS_SUICIDE10