mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-10 14:52:01 +00:00
Merge branch 'automap' into back_to_basics2
This commit is contained in:
commit
38cd38f0eb
72 changed files with 1278 additions and 1856 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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"
|
||||
|
@ -167,19 +166,11 @@ void GetInputInternal(InputPacket &inputParm)
|
|||
|
||||
input.q16horz -= FloatToFixed(scaleAdjustmentToInterval(info.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);
|
||||
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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -127,7 +127,6 @@ enum
|
|||
|
||||
#define kFontNum 5
|
||||
|
||||
extern int gZoom;
|
||||
extern FFont *gFont[kFontNum];
|
||||
extern VIEWPOS gViewPos;
|
||||
extern int gViewIndex;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#pragma once
|
||||
// nobody uses these. What's so cool about naked numbers? :(
|
||||
|
||||
// system defines for status bits
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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:
|
||||
;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//
|
||||
|
|
|
@ -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
573
source/core/automap.cpp
Normal 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
33
source/core/automap.h
Normal 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)
|
|
@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
|
|
|
@ -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"
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -92,7 +92,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) {}
|
||||
virtual void UpdateSounds() {}
|
||||
virtual void ErrorCleanup() {}
|
||||
|
@ -106,6 +105,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()
|
||||
{
|
||||
|
|
|
@ -230,6 +230,11 @@ void SetupGameButtons()
|
|||
"Dpad_Aiming",
|
||||
"Toggle_Crouch",
|
||||
"Quick_Kick",
|
||||
"AM_PanLeft",
|
||||
"AM_PanRight",
|
||||
"AM_PanUp",
|
||||
"AM_PanDown",
|
||||
|
||||
};
|
||||
buttonMap.SetButtons(actions, NUM_ACTIONS);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -91,8 +91,6 @@ void SendInput()
|
|||
|
||||
void CheckKeys2()
|
||||
{
|
||||
lMapZoom = GetAutomapZoom(lMapZoom);
|
||||
|
||||
if (PlayerList[nLocalPlayer].nHealth <= 0)
|
||||
{
|
||||
SetAirFrame();
|
||||
|
@ -224,7 +222,6 @@ void PlayerInterruptKeys(bool after)
|
|||
|
||||
localInput.fvel = clamp(localInput.fvel + tempinput.fvel, -12, 12);
|
||||
localInput.svel = clamp(localInput.svel + tempinput.svel, -12, 12);
|
||||
|
||||
localInput.q16avel += input_angle;
|
||||
|
||||
if (!nFreeze)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
twod->ClearScreen();
|
||||
renderDrawMapView(initx, inity, lMapZoom, inita);
|
||||
}
|
||||
G_DrawOverheadMap(initx, inity, lMapZoom, inita);
|
||||
if (!nFreeze && automapMode != am_off)
|
||||
{
|
||||
DrawOverheadMap(initx, inity, inita);
|
||||
}
|
||||
}
|
||||
END_PS_NS
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) 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;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,50 +268,28 @@ void drawoverlays(double smoothratio)
|
|||
{
|
||||
dointerpolations(smoothratio);
|
||||
|
||||
if (!automapFollow)
|
||||
if (pp->newowner == -1 && playrunning())
|
||||
{
|
||||
if (pp->newowner == -1 && playrunning())
|
||||
if (screenpeek == myconnectindex && numplayers > 1)
|
||||
{
|
||||
if (screenpeek == myconnectindex && numplayers > 1)
|
||||
{
|
||||
cposx = omyx + mulscale16(myx - omyx, smoothratio);
|
||||
cposy = omyy + mulscale16(myy - omyy, smoothratio);
|
||||
cang = FixedToInt(oq16myang + mulscale16(((q16myang + IntToFixed(1024) - oq16myang) & 0x7FFFFFF) - IntToFixed(1024), smoothratio));
|
||||
}
|
||||
else
|
||||
{
|
||||
cposx = pp->oposx + mulscale16(pp->posx - pp->oposx, smoothratio);
|
||||
cposy = pp->oposy + mulscale16(pp->posy - pp->oposy, smoothratio);
|
||||
cang = pp->getoang() + mulscale16(((pp->getang() + 1024 - pp->getoang()) & 2047) - 1024, smoothratio);
|
||||
}
|
||||
cposx = omyx + mulscale16(myx - omyx, smoothratio);
|
||||
cposy = omyy + mulscale16(myy - omyy, smoothratio);
|
||||
cang = FixedToInt(oq16myang + mulscale16(((q16myang + IntToFixed(1024) - oq16myang) & 0x7FFFFFF) - IntToFixed(1024), smoothratio));
|
||||
}
|
||||
else
|
||||
{
|
||||
cposx = pp->oposx;
|
||||
cposy = pp->oposy;
|
||||
cang = pp->getoang();
|
||||
cposx = pp->oposx + mulscale16(pp->posx - pp->oposx, smoothratio);
|
||||
cposy = pp->oposy + mulscale16(pp->posy - pp->oposy, smoothratio);
|
||||
cang = pp->getoang() + mulscale16(((pp->getang() + 1024 - pp->getoang()) & 2047) - 1024, smoothratio);
|
||||
}
|
||||
}
|
||||
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;
|
||||
cposx = pp->oposx;
|
||||
cposy = pp->oposy;
|
||||
cang = pp->getoang();
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -147,7 +147,6 @@ void GameInterface::Startup()
|
|||
|
||||
void GameInterface::Render()
|
||||
{
|
||||
ps[myconnectindex].zoom = GetAutomapZoom(ps[myconnectindex].zoom);
|
||||
drawtime.Reset();
|
||||
drawtime.Clock();
|
||||
videoSetBrightness(thunder_brightness);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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] = {};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
||||
|
@ -1788,33 +1789,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
|
||||
|
@ -1827,16 +1805,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++)
|
||||
|
@ -1872,8 +1841,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)
|
||||
|
@ -1905,4 +1872,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(5407, 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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
@ -1625,7 +1623,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 *);
|
||||
|
@ -1998,8 +1995,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;
|
||||
|
||||
|
@ -2052,8 +2047,6 @@ extern char keys[];
|
|||
|
||||
extern short screenpeek;
|
||||
|
||||
extern int zoom;
|
||||
|
||||
#define STAT_DAMAGE_LIST_SIZE 20
|
||||
extern int16_t StatDamageList[STAT_DAMAGE_LIST_SIZE];
|
||||
|
||||
|
@ -2086,7 +2079,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
|
||||
|
||||
|
@ -2208,8 +2200,7 @@ struct GameInterface : ::GameInterface
|
|||
FString GetCoordString() override;
|
||||
ReservedSpace GetReservedScreenSpace(int viewsize) override;
|
||||
void QuitToTitle() override;
|
||||
void ResetFollowPos(bool message) override;
|
||||
void UpdateSounds() override;
|
||||
void UpdateSounds() override;
|
||||
void ErrorCleanup() override;
|
||||
void GetInput(InputPacket* input) override;
|
||||
void DrawBackground(void) override;
|
||||
|
@ -2221,6 +2212,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;
|
||||
|
|
|
@ -60,13 +60,6 @@ InitTimingVars(void)
|
|||
|
||||
|
||||
|
||||
void GameInterface::ResetFollowPos(bool)
|
||||
{
|
||||
auto pp = &Player[myconnectindex];
|
||||
Follow_posx = pp->posx;
|
||||
Follow_posy = pp->posy;
|
||||
}
|
||||
|
||||
static void getinput(InputPacket *loc)
|
||||
{
|
||||
int i;
|
||||
|
@ -107,16 +100,6 @@ static void getinput(InputPacket *loc)
|
|||
if (paused)
|
||||
return;
|
||||
|
||||
// If in 2D follow mode, scroll around using glob vars
|
||||
// Tried calling this in domovethings, but key response it too poor, skips key presses
|
||||
// Note: this get called only during follow mode
|
||||
if (automapFollow && automapMode != am_off && pp == Player + myconnectindex && !Prediction)
|
||||
MoveScrollMode2D(Player + myconnectindex);
|
||||
|
||||
// !JIM! Added M_Active() so that you don't move at all while using menus
|
||||
if (M_Active() || (automapFollow && automapMode != am_off))
|
||||
return;
|
||||
|
||||
int32_t turnamount;
|
||||
int32_t keymove;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
@ -126,7 +126,6 @@ extern SWBOOL DebugOperate;
|
|||
|
||||
//unsigned char synctics, lastsynctics;
|
||||
|
||||
int zoom;
|
||||
int ChopTics;
|
||||
|
||||
PLAYER Player[MAX_SW_PLAYERS_REG + 1];
|
||||
|
@ -2434,94 +2433,6 @@ void PlayerCheckValidMove(PLAYERp pp)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
MoveScrollMode2D(PLAYERp pp)
|
||||
{
|
||||
#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
|
||||
|
||||
ControlInfo scrl_input;
|
||||
int32_t keymove;
|
||||
int32_t momx, momy;
|
||||
static int mfvel=0, mfsvel=0;
|
||||
|
||||
CONTROL_GetInput(&scrl_input);
|
||||
|
||||
mfsvel = mfvel = 0;
|
||||
|
||||
if (M_Active())
|
||||
return;
|
||||
|
||||
if (buttonMap.ButtonDown(gamefunc_Strafe))
|
||||
mfsvel -= scrl_input.dyaw / 4;
|
||||
mfsvel -= scrl_input.dx / 4;
|
||||
mfvel = -scrl_input.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)
|
||||
|
|
|
@ -451,12 +451,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);
|
||||
|
@ -838,12 +832,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++)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
6
source/thirdparty/include/base64.h
vendored
6
source/thirdparty/include/base64.h
vendored
|
@ -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 */
|
||||
|
|
95
source/thirdparty/src/base64.cpp
vendored
95
source/thirdparty/src/base64.cpp
vendored
|
@ -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();
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
int in_ = 0;
|
||||
unsigned char char_array_4[4], char_array_3[3];
|
||||
std::string ret;
|
||||
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];
|
||||
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;
|
||||
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] = 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];
|
||||
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];
|
||||
i = 0;
|
||||
for (i = 0; (i < 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;
|
||||
if (i) {
|
||||
for (j = 0; j < i; j++)
|
||||
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);
|
||||
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];
|
||||
}
|
||||
|
||||
return ret;
|
||||
for (j = 0; (j < i - 1); j++)
|
||||
{
|
||||
*dest++ = char_array_3[j];
|
||||
if (dest >= end) return;
|
||||
}
|
||||
}
|
||||
while (dest < end) *dest++ = 0;
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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,,,,Фраги,Фрагови
|
||||
|
|
|
Loading…
Reference in a new issue