summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gamefiles/TEXT/american.gxtbin220474 -> 220602 bytes
-rw-r--r--gamefiles/TEXT/french.gxtbin244794 -> 244742 bytes
-rw-r--r--gamefiles/TEXT/german.gxtbin240732 -> 240680 bytes
-rw-r--r--gamefiles/TEXT/italian.gxtbin240226 -> 240166 bytes
-rwxr-xr-xgamefiles/TEXT/polish.gxtbin241148 -> 241276 bytes
-rw-r--r--gamefiles/TEXT/russian.gxtbin220670 -> 220788 bytes
-rw-r--r--gamefiles/TEXT/spanish.gxtbin235460 -> 235132 bytes
-rw-r--r--premake5.lua4
-rw-r--r--src/core/Cam.cpp2
-rw-r--r--src/core/ControllerConfig.cpp5
-rw-r--r--src/core/Frontend.cpp14
-rw-r--r--src/core/Frontend.h6
-rw-r--r--src/core/Game.cpp9
-rw-r--r--src/core/MenuScreens.cpp11
-rw-r--r--src/core/MenuScreensCustom.cpp93
-rw-r--r--src/core/Pad.cpp6
-rw-r--r--src/core/Pad.h2
-rw-r--r--src/core/common.h2
-rw-r--r--src/core/config.h6
-rw-r--r--src/core/re3.cpp110
-rw-r--r--src/extras/custompipes_d3d9.cpp31
-rw-r--r--src/extras/custompipes_gl.cpp34
-rw-r--r--src/extras/postfx.cpp12
-rw-r--r--src/extras/screendroplets.cpp6
-rw-r--r--src/extras/shaders/Makefile79
-rw-r--r--src/extras/shaders/make_glsl.sh9
-rw-r--r--src/extras/shaders/make_hlsl.cmd (renamed from src/extras/shaders/make.cmd)4
-rw-r--r--src/extras/shaders/makeinc_glsl.sh6
-rw-r--r--src/extras/shaders/makeinc_hlsl.sh (renamed from src/extras/shaders/makeinc.sh)1
-rw-r--r--src/extras/shaders/obj/colourfilterIII_PS.cso (renamed from src/extras/shaders/colourfilterIII_PS.cso)bin452 -> 452 bytes
-rw-r--r--src/extras/shaders/obj/colourfilterIII_PS.inc (renamed from src/extras/shaders/colourfilterIII_PS.inc)0
-rw-r--r--src/extras/shaders/obj/colourfilterIII_frag.inc (renamed from src/extras/shaders/colourfilterIII_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/contrastPS.cso (renamed from src/extras/shaders/contrastPS.cso)bin344 -> 344 bytes
-rw-r--r--src/extras/shaders/obj/contrastPS.inc (renamed from src/extras/shaders/contrastPS.inc)0
-rw-r--r--src/extras/shaders/obj/contrast_frag.inc (renamed from src/extras/shaders/contrast_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/default_UV2_VS.cso (renamed from src/extras/shaders/default_UV2_VS.cso)bin628 -> 628 bytes
-rw-r--r--src/extras/shaders/obj/default_UV2_VS.inc (renamed from src/extras/shaders/default_UV2_VS.inc)0
-rw-r--r--src/extras/shaders/obj/default_UV2_vert.inc (renamed from src/extras/shaders/default_UV2_gl.inc)0
-rw-r--r--src/extras/shaders/obj/im2d_UV2_vert.inc (renamed from src/extras/shaders/im2d_UV2_gl.inc)0
-rw-r--r--src/extras/shaders/obj/im2d_vert.inc (renamed from src/extras/shaders/im2d_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoGloss_PS.cso (renamed from src/extras/shaders/neoGloss_PS.cso)bin444 -> 444 bytes
-rw-r--r--src/extras/shaders/obj/neoGloss_PS.inc (renamed from src/extras/shaders/neoGloss_PS.inc)0
-rw-r--r--src/extras/shaders/obj/neoGloss_VS.cso (renamed from src/extras/shaders/neoGloss_VS.cso)bin764 -> 764 bytes
-rw-r--r--src/extras/shaders/obj/neoGloss_VS.inc (renamed from src/extras/shaders/neoGloss_VS.inc)0
-rw-r--r--src/extras/shaders/obj/neoGloss_frag.inc (renamed from src/extras/shaders/neoGloss_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoGloss_vert.inc (renamed from src/extras/shaders/neoGloss_vs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoRimSkin_VS.cso (renamed from src/extras/shaders/neoRimSkin_VS.cso)bin2404 -> 2404 bytes
-rw-r--r--src/extras/shaders/obj/neoRimSkin_VS.inc (renamed from src/extras/shaders/neoRimSkin_VS.inc)0
-rw-r--r--src/extras/shaders/obj/neoRimSkin_vert.inc (renamed from src/extras/shaders/neoRimSkin_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoRim_VS.cso (renamed from src/extras/shaders/neoRim_VS.cso)bin1384 -> 1384 bytes
-rw-r--r--src/extras/shaders/obj/neoRim_VS.inc (renamed from src/extras/shaders/neoRim_VS.inc)0
-rw-r--r--src/extras/shaders/obj/neoRim_vert.inc (renamed from src/extras/shaders/neoRim_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoVehicle_PS.cso (renamed from src/extras/shaders/neoVehicle_PS.cso)bin476 -> 476 bytes
-rw-r--r--src/extras/shaders/obj/neoVehicle_PS.inc (renamed from src/extras/shaders/neoVehicle_PS.inc)0
-rw-r--r--src/extras/shaders/obj/neoVehicle_VS.cso (renamed from src/extras/shaders/neoVehicle_VS.cso)bin1896 -> 1896 bytes
-rw-r--r--src/extras/shaders/obj/neoVehicle_VS.inc (renamed from src/extras/shaders/neoVehicle_VS.inc)0
-rw-r--r--src/extras/shaders/obj/neoVehicle_frag.inc (renamed from src/extras/shaders/neoVehicle_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoVehicle_vert.inc (renamed from src/extras/shaders/neoVehicle_vs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoWorldIII_PS.cso (renamed from src/extras/shaders/neoWorldIII_PS.cso)bin528 -> 528 bytes
-rw-r--r--src/extras/shaders/obj/neoWorldIII_PS.inc (renamed from src/extras/shaders/neoWorldIII_PS.inc)0
-rw-r--r--src/extras/shaders/obj/neoWorldIII_frag.inc (renamed from src/extras/shaders/neoWorldIII_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/screenDroplet_PS.cso (renamed from src/extras/shaders/screenDroplet_PS.cso)bin324 -> 324 bytes
-rw-r--r--src/extras/shaders/obj/screenDroplet_PS.inc (renamed from src/extras/shaders/screenDroplet_PS.inc)0
-rw-r--r--src/extras/shaders/obj/screenDroplet_frag.inc (renamed from src/extras/shaders/screenDroplet_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/simple_frag.inc (renamed from src/extras/shaders/simple_fs_gl.inc)0
-rw-r--r--src/peds/Ped.cpp19
-rw-r--r--src/render/Clouds.cpp4
-rw-r--r--src/render/Hud.cpp8
-rw-r--r--src/skel/crossplatform.h2
-rw-r--r--src/skel/glfw/glfw.cpp8
-rw-r--r--src/skel/win/win.cpp4
-rw-r--r--utils/gxt/american.txt64
-rw-r--r--utils/gxt/french.txt64
-rw-r--r--utils/gxt/german.txt64
-rw-r--r--utils/gxt/italian.txt64
-rwxr-xr-xutils/gxt/polish.txt64
-rw-r--r--utils/gxt/russian.txt64
-rw-r--r--utils/gxt/spanish.txt64
m---------vendor/librw0
79 files changed, 510 insertions, 435 deletions
diff --git a/gamefiles/TEXT/american.gxt b/gamefiles/TEXT/american.gxt
index 270d5b5b..c45d3779 100644
--- a/gamefiles/TEXT/american.gxt
+++ b/gamefiles/TEXT/american.gxt
Binary files differ
diff --git a/gamefiles/TEXT/french.gxt b/gamefiles/TEXT/french.gxt
index aa2b9050..2cbfe948 100644
--- a/gamefiles/TEXT/french.gxt
+++ b/gamefiles/TEXT/french.gxt
Binary files differ
diff --git a/gamefiles/TEXT/german.gxt b/gamefiles/TEXT/german.gxt
index 40dfd55b..b7aea441 100644
--- a/gamefiles/TEXT/german.gxt
+++ b/gamefiles/TEXT/german.gxt
Binary files differ
diff --git a/gamefiles/TEXT/italian.gxt b/gamefiles/TEXT/italian.gxt
index 439663c8..00f6a9d0 100644
--- a/gamefiles/TEXT/italian.gxt
+++ b/gamefiles/TEXT/italian.gxt
Binary files differ
diff --git a/gamefiles/TEXT/polish.gxt b/gamefiles/TEXT/polish.gxt
index 3b593450..ca151bf4 100755
--- a/gamefiles/TEXT/polish.gxt
+++ b/gamefiles/TEXT/polish.gxt
Binary files differ
diff --git a/gamefiles/TEXT/russian.gxt b/gamefiles/TEXT/russian.gxt
index 026222ac..cdef1697 100644
--- a/gamefiles/TEXT/russian.gxt
+++ b/gamefiles/TEXT/russian.gxt
Binary files differ
diff --git a/gamefiles/TEXT/spanish.gxt b/gamefiles/TEXT/spanish.gxt
index ef0d4146..31f6d8c0 100644
--- a/gamefiles/TEXT/spanish.gxt
+++ b/gamefiles/TEXT/spanish.gxt
Binary files differ
diff --git a/premake5.lua b/premake5.lua
index 08b600e4..a0d54ea7 100644
--- a/premake5.lua
+++ b/premake5.lua
@@ -236,6 +236,10 @@ project "re3"
targetname "re3"
targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}"
+ if(_OPTIONS["with-librw"]) then
+ dependson "librw"
+ end
+
files { addSrcFiles("src") }
files { addSrcFiles("src/animation") }
files { addSrcFiles("src/audio") }
diff --git a/src/core/Cam.cpp b/src/core/Cam.cpp
index 2a32ed1f..e0497fe2 100644
--- a/src/core/Cam.cpp
+++ b/src/core/Cam.cpp
@@ -4631,7 +4631,7 @@ CCam::Process_FollowPed_Rotation(const CVector &CameraTarget, float TargetOrient
*/
{
LookLeftRight = -CPad::GetPad(0)->LookAroundLeftRight();
- LookUpDown = -CPad::GetPad(0)->LookAroundUpDown();
+ LookUpDown = CPad::GetPad(0)->LookAroundUpDown();
}
float AlphaOffset, BetaOffset;
if(UseMouse){
diff --git a/src/core/ControllerConfig.cpp b/src/core/ControllerConfig.cpp
index 83d0f669..e72af7e4 100644
--- a/src/core/ControllerConfig.cpp
+++ b/src/core/ControllerConfig.cpp
@@ -354,6 +354,11 @@ uint32 CControllerConfigManager::ms_padButtonsInited = 0;
void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
{
+#ifdef XINPUT
+ // No manual bindings for you, honey.
+ return;
+#endif
+
m_bFirstCapture = true;
uint32 btn = buttons;
diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp
index 5e9f6d0d..07b8f996 100644
--- a/src/core/Frontend.cpp
+++ b/src/core/Frontend.cpp
@@ -3655,7 +3655,13 @@ CMenuManager::LoadAllTextures()
m_aMenuSprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
}
#ifdef MENU_MAP
+ static bool menuOptionAdded = false;
for (int i = 0; i < ARRAY_SIZE(MapFilenames); i++) {
+ if (!menuOptionAdded && RwTextureRead(MapFilenames[i][0], MapFilenames[i][1])) {
+ FrontendOptionSetCursor(MENUPAGE_PAUSE_MENU, 2, false);
+ FrontendOptionAddBuiltinAction("FEG_MAP", MENUACTION_CHANGEMENU, MENUPAGE_MAP, SAVESLOT_NONE);
+ menuOptionAdded = true;
+ }
m_aMapSprites[i].SetTexture(MapFilenames[i][0], MapFilenames[i][1]);
m_aMapSprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
}
@@ -6005,13 +6011,13 @@ CMenuManager::PrintController(void)
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_CWR"));
- CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_TAR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_ATT"));
CFont::SetRightJustifyOn(); // X
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_JUM"));
CFont::SetJustifyOn(); // X
- CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_LOF"));
- CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_RUN"));
- CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_ATT"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_ENV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_LOF"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_RUN"));
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_FPC"));
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_LB3"));
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y + 13.0f)), TheText.Get("FEC_R3"));
diff --git a/src/core/Frontend.h b/src/core/Frontend.h
index 9c666809..5c3523ab 100644
--- a/src/core/Frontend.h
+++ b/src/core/Frontend.h
@@ -235,15 +235,15 @@ enum eMenuScreen
MENUPAGE_KEYBOARD_CONTROLS = 55,
MENUPAGE_MOUSE_CONTROLS = 56,
MENUPAGE_MISSION_RETRY = 57,
+#ifdef CUSTOM_FRONTEND_OPTIONS
+
#ifdef MENU_MAP
MENUPAGE_MAP = 58,
#endif
-#ifdef CUSTOM_FRONTEND_OPTIONS
-
#ifdef GRAPHICS_MENU_OPTIONS
MENUPAGE_GRAPHICS_SETTINGS,
#endif
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
MENUPAGE_DETECT_JOYSTICK,
#endif
diff --git a/src/core/Game.cpp b/src/core/Game.cpp
index 4fd30b53..2a6afa97 100644
--- a/src/core/Game.cpp
+++ b/src/core/Game.cpp
@@ -414,6 +414,11 @@ bool CGame::Initialise(const char* datFile)
CTxdStore::Create(gameTxdSlot);
CTxdStore::AddRef(gameTxdSlot);
+#ifdef EXTENDED_PIPELINES
+ // for generic fallback
+ CustomPipes::SetTxdFindCallback();
+#endif
+
LoadingScreen("Loading the Game", "Loading particles", nil);
int particleTxdSlot = CTxdStore::AddTxdSlot("particle");
CTxdStore::LoadTxd(particleTxdSlot, "MODELS/PARTICLE.TXD");
@@ -498,10 +503,6 @@ bool CGame::Initialise(const char* datFile)
CFileLoader::LoadLevel("GTA3.DAT");
#endif
-#ifdef EXTENDED_PIPELINES
- // for generic fallback
- CustomPipes::SetTxdFindCallback();
-#endif
CWorld::AddParticles();
CVehicleModelInfo::LoadVehicleColours();
CVehicleModelInfo::LoadEnvironmentMaps();
diff --git a/src/core/MenuScreens.cpp b/src/core/MenuScreens.cpp
index 7c90ea12..3bd9adf4 100644
--- a/src/core/MenuScreens.cpp
+++ b/src/core/MenuScreens.cpp
@@ -394,9 +394,6 @@ CMenuScreen aScreens[MENUPAGES] = {
{ "FET_PAU", 1, MENUPAGE_DISABLED, MENUPAGE_DISABLED, 0, 0,
MENUACTION_RESUME, "FEM_RES", SAVESLOT_NONE, MENUPAGE_NONE,
MENUACTION_CHANGEMENU, "FEN_STA", SAVESLOT_NONE, MENUPAGE_NEW_GAME,
-#ifdef MENU_MAP
- MENUACTION_CHANGEMENU, "FEG_MAP", SAVESLOT_NONE, MENUPAGE_MAP,
-#endif
MENUACTION_CHANGEMENU, "FEP_STA", SAVESLOT_NONE, MENUPAGE_STATS,
MENUACTION_CHANGEMENU, "FEP_BRI", SAVESLOT_NONE, MENUPAGE_BRIEFS,
MENUACTION_CHANGEMENU, "FET_OPT", SAVESLOT_NONE, MENUPAGE_OPTIONS,
@@ -441,14 +438,6 @@ CMenuScreen aScreens[MENUPAGES] = {
},
#endif
-#ifdef MENU_MAP
- // MENUPAGE_MAP
- { "FEG_MAP", 1, MENUPAGE_NONE, MENUPAGE_NONE, 2, 2,
- MENUACTION_UNK110, "", SAVESLOT_NONE, MENUPAGE_NONE, // to prevent cross/enter to go back
- MENUACTION_CHANGEMENU, "FEDS_TB", SAVESLOT_NONE, MENUPAGE_NONE,
- },
-#endif
-
// MENUPAGE_UNK
{ "", 0, MENUPAGE_NONE, MENUPAGE_NONE, 0, 0,
diff --git a/src/core/MenuScreensCustom.cpp b/src/core/MenuScreensCustom.cpp
index 357f136b..ed5b149c 100644
--- a/src/core/MenuScreensCustom.cpp
+++ b/src/core/MenuScreensCustom.cpp
@@ -1,4 +1,13 @@
#include "common.h"
+#if defined DETECT_JOYSTICK_MENU && defined XINPUT
+#include <windows.h>
+#include <xinput.h>
+#if !defined(PSAPI_VERSION) || (PSAPI_VERSION > 1)
+#pragma comment( lib, "Xinput9_1_0.lib" )
+#else
+#pragma comment( lib, "Xinput.lib" )
+#endif
+#endif
#include "platform.h"
#include "crossplatform.h"
#include "Renderer.h"
@@ -186,38 +195,6 @@ void IslandLoadingAfterChange(int8 before, int8 after) {
}
#endif
-#ifdef MORE_LANGUAGES
-void LangPolSelect(int8 action)
-{
- if (action == FEOPTION_ACTION_SELECT) {
- FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_POLISH;
- FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true;
- FrontEndMenuManager.InitialiseChangedLanguageSettings();
- FrontEndMenuManager.SaveSettings();
- }
-}
-
-void LangRusSelect(int8 action)
-{
- if (action == FEOPTION_ACTION_SELECT) {
- FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_RUSSIAN;
- FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true;
- FrontEndMenuManager.InitialiseChangedLanguageSettings();
- FrontEndMenuManager.SaveSettings();
- }
-}
-
-void LangJapSelect(int8 action)
-{
- if (action == FEOPTION_ACTION_SELECT) {
- FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_JAPANESE;
- FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true;
- FrontEndMenuManager.InitialiseChangedLanguageSettings();
- FrontEndMenuManager.SaveSettings();
- }
-}
-#endif
-
#ifndef MULTISAMPLING
void GraphicsGoBack() {
}
@@ -297,11 +274,13 @@ void ScreenModeAfterChange(int8 before, int8 after)
#endif
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
wchar selectedJoystickUnicode[128];
int cachedButtonNum = -1;
wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
+
+#if defined RW_GL3 && !defined LIBRW_SDL2
int numButtons;
int found = -1;
const char *joyname;
@@ -332,6 +311,40 @@ wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
}
}
if (PSGLOBAL(joy1id) == -1)
+#elif defined XINPUT
+ int found = -1;
+ XINPUT_STATE xstate;
+ memset(&xstate, 0, sizeof(XINPUT_STATE));
+ if (userHovering) {
+ for (int i = 0; i <= 3; i++) {
+ if (XInputGetState(i, &xstate) == ERROR_SUCCESS) {
+ if (xstate.Gamepad.bLeftTrigger || xstate.Gamepad.bRightTrigger) {
+ found = i;
+ break;
+ }
+ for (int j = XINPUT_GAMEPAD_DPAD_UP; j != XINPUT_GAMEPAD_Y << 1; j = (j << 1)) {
+ if (xstate.Gamepad.wButtons & j) {
+ found = i;
+ break;
+ }
+ }
+ if (found != -1)
+ break;
+ }
+ }
+ if (found != -1 && CPad::XInputJoy1 != found) {
+ if (CPad::XInputJoy1 != -1 && CPad::XInputJoy1 != found)
+ CPad::XInputJoy2 = CPad::XInputJoy1;
+ else
+ CPad::XInputJoy2 = -1;
+
+ CPad::XInputJoy1 = found;
+ cachedButtonNum = 0; // fake too, because xinput bypass CControllerConfig
+ }
+ }
+ sprintf(gSelectedJoystickName, "%d", CPad::XInputJoy1); // fake, on xinput we only store gamepad ids(thanks MS) so this is a temp variable to be used below
+ if (CPad::XInputJoy1 == -1)
+#endif
AsciiToUnicode("Not found", selectedJoystickUnicode);
else
AsciiToUnicode(gSelectedJoystickName, selectedJoystickUnicode);
@@ -452,11 +465,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
MENUACTION_LANG_GER, "FEL_GER", { nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS },
MENUACTION_LANG_ITA, "FEL_ITA", { nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS },
MENUACTION_LANG_SPA, "FEL_SPA", { nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS },
-#ifdef MORE_LANGUAGES
- MENUACTION_CFO_DYNAMIC, "FEL_POL", { new CCFODynamic(nil, nil, nil, nil, LangPolSelect) },
- MENUACTION_CFO_DYNAMIC, "FEL_RUS", { new CCFODynamic(nil, nil, nil, nil, LangRusSelect) },
- MENUACTION_CFO_DYNAMIC, "FEL_JAP", { new CCFODynamic(nil, nil, nil, nil, LangJapSelect) },
-#endif
+ // CustomFrontendOptionsPopulate will add languages here, if files are found
MENUACTION_CHANGEMENU, "FEDS_TB", { nil, SAVESLOT_NONE, MENUPAGE_NONE },
},
@@ -666,7 +675,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
#ifdef GAMEPAD_MENU
MENUACTION_CHANGEMENU, "FET_AGS", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS },
#endif
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
MENUACTION_CHANGEMENU, "FEC_JOD", { nil, SAVESLOT_NONE, MENUPAGE_DETECT_JOYSTICK },
#endif
MENUACTION_CHANGEMENU, "FET_AMS", { nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS },
@@ -791,9 +800,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
{ "FET_PAU", MENUPAGE_DISABLED, MENUPAGE_DISABLED, nil, nil,
MENUACTION_RESUME, "FEM_RES", { nil, SAVESLOT_NONE, MENUPAGE_NONE },
MENUACTION_CHANGEMENU, "FEN_STA", { nil, SAVESLOT_NONE, MENUPAGE_NEW_GAME },
-#ifdef MENU_MAP
- MENUACTION_CHANGEMENU, "FEG_MAP", { nil, SAVESLOT_NONE, MENUPAGE_MAP },
-#endif
+ // CMenuManager::LoadAllTextures will add map here, if MENU_MAP enabled and map textures are found
MENUACTION_CHANGEMENU, "FEP_STA", { nil, SAVESLOT_NONE, MENUPAGE_STATS },
MENUACTION_CHANGEMENU, "FEP_BRI", { nil, SAVESLOT_NONE, MENUPAGE_BRIEFS },
MENUACTION_CHANGEMENU, "FET_OPT", { nil, SAVESLOT_NONE, MENUPAGE_OPTIONS },
@@ -873,7 +880,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
},
#endif
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
// MENUPAGE_DETECT_JOYSTICK
{ "FEC_JOD", MENUPAGE_CONTROLLER_PC, MENUPAGE_CONTROLLER_PC,
new CCustomScreenLayout({MENUSPRITE_MAINMENU, 40, 60, 20, FONT_BANK, FESCREEN_LEFT_ALIGN, false, MEDIUMTEXT_X_SCALE, MEDIUMTEXT_Y_SCALE}), DetectJoystickGoBack,
diff --git a/src/core/Pad.cpp b/src/core/Pad.cpp
index 9bcac613..60bb7a76 100644
--- a/src/core/Pad.cpp
+++ b/src/core/Pad.cpp
@@ -1028,8 +1028,14 @@ void CPad::AddToPCCheatString(char c)
}
#ifdef XINPUT
+int CPad::XInputJoy1 = 0;
+int CPad::XInputJoy2 = 1;
void CPad::AffectFromXinput(uint32 pad)
{
+ pad = pad == 0 ? XInputJoy1 : XInputJoy2;
+ if (pad == -1) // LoadINIControllerSettings can set it to -1
+ return;
+
XINPUT_STATE xstate;
memset(&xstate, 0, sizeof(XINPUT_STATE));
if (XInputGetState(pad, &xstate) == ERROR_SUCCESS)
diff --git a/src/core/Pad.h b/src/core/Pad.h
index 20a676ef..b37659cd 100644
--- a/src/core/Pad.h
+++ b/src/core/Pad.h
@@ -263,6 +263,8 @@ public:
static int32 *EditCodesForControls(int32 *pRsKeys, int32 nSize);
#ifdef XINPUT
+ static int XInputJoy1;
+ static int XInputJoy2;
void AffectFromXinput(uint32 pad);
#endif
diff --git a/src/core/common.h b/src/core/common.h
index 33d8910d..a8f19158 100644
--- a/src/core/common.h
+++ b/src/core/common.h
@@ -354,7 +354,7 @@ __inline__ void TRACE(char *f, ...) { } // this is re3 only, and so the function
#ifndef MASTER
#define assert(_Expression) (void)( (!!(_Expression)) || (re3_assert(#_Expression, __FILE__, __LINE__, __FUNCTION__), 0) )
#else
-#define assert(_Expression)
+#define assert(_Expression) (_Expression)
#endif
#define ASSERT assert
diff --git a/src/core/config.h b/src/core/config.h
index 79323ef1..73c29f15 100644
--- a/src/core/config.h
+++ b/src/core/config.h
@@ -287,8 +287,8 @@ enum Config {
#if !defined(RW_GL3) && defined(_WIN32)
#define XINPUT
#endif
-#if !defined(_WIN32) && !defined(__SWITCH__)
-#define DONT_TRUST_RECOGNIZED_JOYSTICKS // Then we'll only rely on GLFW gamepad DB, and expect user to enter Controller->Detect joysticks if his joystick isn't on that list.
+#if defined XINPUT || (defined RW_GL3 && !defined LIBRW_SDL2 && !defined __SWITCH__)
+#define DETECT_JOYSTICK_MENU // Then we'll expect user to enter Controller->Detect joysticks if his joystick isn't detected at the start.
#endif
#define DETECT_PAD_INPUT_SWITCH // Adds automatic switch of pad related stuff between controller and kb/m
#define KANGAROO_CHEAT
@@ -312,7 +312,6 @@ enum Config {
# define PS2_MENU
//# define PS2_MENU_USEALLPAGEICONS
#else
-# define MENU_MAP // VC-like menu map. Make sure you have new menu.txd
# ifdef XINPUT
# define GAMEPAD_MENU // Add gamepad menu
@@ -326,6 +325,7 @@ enum Config {
# define CUSTOM_FRONTEND_OPTIONS
# ifdef CUSTOM_FRONTEND_OPTIONS
+# define MENU_MAP // VC-like menu map. Won't appear if you don't have our menu.txd
# define GRAPHICS_MENU_OPTIONS // otherwise Display settings will be scrollable
# define NO_ISLAND_LOADING // disable loadscreen between islands via loading all island data at once, consumes more memory and CPU
# define CUTSCENE_BORDERS_SWITCH
diff --git a/src/core/re3.cpp b/src/core/re3.cpp
index 62d963ca..3584e226 100644
--- a/src/core/re3.cpp
+++ b/src/core/re3.cpp
@@ -1,6 +1,14 @@
#include <csignal>
#define WITHWINDOWS
#include "common.h"
+#if defined DETECT_JOYSTICK_MENU && defined XINPUT
+#include <xinput.h>
+#if !defined(PSAPI_VERSION) || (PSAPI_VERSION > 1)
+#pragma comment( lib, "Xinput9_1_0.lib" )
+#else
+#pragma comment( lib, "Xinput.lib" )
+#endif
+#endif
#include "Renderer.h"
#include "Credits.h"
#include "Camera.h"
@@ -34,7 +42,7 @@
#include "MBlur.h"
#include "ControllerConfig.h"
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
#include "crossplatform.h"
#endif
@@ -77,16 +85,49 @@ mysrand(unsigned int seed)
#ifdef CUSTOM_FRONTEND_OPTIONS
#include "frontendoption.h"
+#ifdef MORE_LANGUAGES
+void LangPolSelect(int8 action)
+{
+ if (action == FEOPTION_ACTION_SELECT) {
+ FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_POLISH;
+ FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true;
+ FrontEndMenuManager.InitialiseChangedLanguageSettings();
+ FrontEndMenuManager.SaveSettings();
+ }
+}
+
+void LangRusSelect(int8 action)
+{
+ if (action == FEOPTION_ACTION_SELECT) {
+ FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_RUSSIAN;
+ FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true;
+ FrontEndMenuManager.InitialiseChangedLanguageSettings();
+ FrontEndMenuManager.SaveSettings();
+ }
+}
+
+void LangJapSelect(int8 action)
+{
+ if (action == FEOPTION_ACTION_SELECT) {
+ FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_JAPANESE;
+ FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true;
+ FrontEndMenuManager.InitialiseChangedLanguageSettings();
+ FrontEndMenuManager.SaveSettings();
+ }
+}
+#endif
+
void
CustomFrontendOptionsPopulate(void)
{
- // Moved to an array in MenuScreensCustom.cpp, but APIs are still available. see frontendoption.h
+ // Most of custom options are done statically in MenuScreensCustom.cpp, we add them here only if they're dependent to extra files
- // These work only if we have neo folder, so they're dynamically added
+ // These work only if we have neo folder
+ int fd;
#ifdef EXTENDED_PIPELINES
const char *vehPipelineNames[] = { "FED_MFX", "FED_NEO" };
const char *off_on[] = { "FEM_OFF", "FEM_ON" };
- int fd = CFileMgr::OpenFile("neo/neo.txd","r");
+ fd = CFileMgr::OpenFile("neo/neo.txd","r");
if (fd) {
#ifdef GRAPHICS_MENU_OPTIONS
FrontendOptionSetCursor(MENUPAGE_GRAPHICS_SETTINGS, -3, false);
@@ -105,6 +146,35 @@ CustomFrontendOptionsPopulate(void)
}
#endif
+ // Add outsourced language translations, if files are found
+#ifdef MORE_LANGUAGES
+ int fd2;
+ FrontendOptionSetCursor(MENUPAGE_LANGUAGE_SETTINGS, 5, false);
+ if (fd = CFileMgr::OpenFile("text/polish.gxt","r")) {
+ if (fd2 = CFileMgr::OpenFile("models/fonts_p.txd","r")) {
+ FrontendOptionAddDynamic("FEL_POL", nil, nil, LangPolSelect, nil, nil);
+ CFileMgr::CloseFile(fd2);
+ }
+ CFileMgr::CloseFile(fd);
+ }
+
+ if (fd = CFileMgr::OpenFile("text/russian.gxt","r")) {
+ if (fd2 = CFileMgr::OpenFile("models/fonts_r.txd","r")) {
+ FrontendOptionAddDynamic("FEL_RUS", nil, nil, LangRusSelect, nil, nil);
+ CFileMgr::CloseFile(fd2);
+ }
+ CFileMgr::CloseFile(fd);
+ }
+
+ if (fd = CFileMgr::OpenFile("text/japanese.gxt","r")) {
+ if (fd2 = CFileMgr::OpenFile("models/fonts_j.txd","r")) {
+ FrontendOptionAddDynamic("FEL_JAP", nil, nil, LangJapSelect, nil, nil);
+ CFileMgr::CloseFile(fd2);
+ }
+ CFileMgr::CloseFile(fd);
+ }
+#endif
+
}
#endif
@@ -244,9 +314,33 @@ const char *iniKeyboardButtons[] = {"ESC","F1","F2","F3","F4","F5","F6","F7","F8
void LoadINIControllerSettings()
{
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
+#ifdef XINPUT
+ int storedJoy1 = -1;
+ if (ReadIniIfExists("Controller", "JoystickName", &storedJoy1)) {
+ CPad::XInputJoy1 = -1;
+ CPad::XInputJoy2 = -1;
+ XINPUT_STATE xstate;
+ memset(&xstate, 0, sizeof(XINPUT_STATE));
+
+ // Firstly confirm & set joy 1
+ if (XInputGetState(storedJoy1, &xstate) == ERROR_SUCCESS) {
+ CPad::XInputJoy1 = storedJoy1;
+ }
+
+ for (int i = 0; i <= 3; i++) {
+ if (XInputGetState(i, &xstate) == ERROR_SUCCESS) {
+ if (CPad::XInputJoy1 == -1)
+ CPad::XInputJoy1 = i;
+ else if (CPad::XInputJoy2 == -1 && i != CPad::XInputJoy1)
+ CPad::XInputJoy2 = i;
+ }
+ }
+ }
+#else
ReadIniIfExists("Controller", "JoystickName", gSelectedJoystickName, 128);
#endif
+#endif
// force to default GTA behaviour (never overwrite bindings on joy change/initialization) if user init'ed/set bindings before we introduced that
if (!ReadIniIfExists("Controller", "PadButtonsInited", &ControlsManager.ms_padButtonsInited)) {
ControlsManager.ms_padButtonsInited = cfg.category_size("Bindings") != 0 ? 16 : 0;
@@ -343,9 +437,13 @@ void SaveINIControllerSettings()
StoreIni("Bindings", iniControllerActions[i], value, 128);
}
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
+#ifdef XINPUT
+ StoreIni("Controller", "JoystickName", CPad::XInputJoy1);
+#else
StoreIni("Controller", "JoystickName", gSelectedJoystickName, 128);
#endif
+#endif
StoreIni("Controller", "PadButtonsInited", ControlsManager.ms_padButtonsInited);
cfg.write_file("re3.ini");
}
diff --git a/src/extras/custompipes_d3d9.cpp b/src/extras/custompipes_d3d9.cpp
index 4242c630..dad42b33 100644
--- a/src/extras/custompipes_d3d9.cpp
+++ b/src/extras/custompipes_d3d9.cpp
@@ -89,6 +89,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
}
int vsBits;
+ rw::uint32 flags = atomic->geometry->flags;
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
setIndices(header->indexBuffer);
setVertexDeclaration(header->vertexDeclaration);
@@ -120,7 +121,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
reflProps[3] = m->surfaceProps.specular == 0.0f ? 0.0f : VehicleSpecularity;
d3ddevice->SetVertexShaderConstantF(VSLOC_reflProps, reflProps, 1);
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
if(m->texture)
d3d::setTexture(0, m->texture);
@@ -149,11 +150,11 @@ CreateVehiclePipe(void)
fp = ReadTweakValueTable(fp, SpecColor);
}
-#include "shaders/neoVehicle_VS.inc"
+#include "shaders/obj/neoVehicle_VS.inc"
neoVehicle_VS = rw::d3d::createVertexShader(neoVehicle_VS_cso);
assert(neoVehicle_VS);
-#include "shaders/neoVehicle_PS.inc"
+#include "shaders/obj/neoVehicle_PS.inc"
neoVehicle_PS = rw::d3d::createPixelShader(neoVehicle_PS_cso);
assert(neoVehicle_PS);
@@ -259,11 +260,11 @@ CreateWorldPipe(void)
else
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
-#include "shaders/default_UV2_VS.inc"
+#include "shaders/obj/default_UV2_VS.inc"
neoWorld_VS = rw::d3d::createVertexShader(default_UV2_VS_cso);
assert(neoWorld_VS);
-#include "shaders/neoWorldIII_PS.inc"
+#include "shaders/obj/neoWorldIII_PS.inc"
neoWorldIII_PS = rw::d3d::createPixelShader(neoWorldIII_PS_cso);
assert(neoWorldIII_PS);
@@ -346,11 +347,11 @@ glossRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
void
CreateGlossPipe(void)
{
-#include "shaders/neoGloss_VS.inc"
+#include "shaders/obj/neoGloss_VS.inc"
neoGloss_VS = rw::d3d::createVertexShader(neoGloss_VS_cso);
assert(neoGloss_VS);
-#include "shaders/neoGloss_PS.inc"
+#include "shaders/obj/neoGloss_PS.inc"
neoGloss_PS = rw::d3d::createPixelShader(neoGloss_PS_cso);
assert(neoGloss_PS);
@@ -420,6 +421,7 @@ rimRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
}
int vsBits;
+ rw::uint32 flags = atomic->geometry->flags;
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
setIndices(header->indexBuffer);
setVertexDeclaration(header->vertexDeclaration);
@@ -437,7 +439,7 @@ rimRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
if(m->texture){
d3d::setTexture(0, m->texture);
@@ -463,7 +465,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
}
int vsBits;
-
+ rw::uint32 flags = atomic->geometry->flags;
setStreamSource(0, (IDirect3DVertexBuffer9*)header->vertexStream[0].vertexBuffer,
0, header->vertexStream[0].stride);
setIndices((IDirect3DIndexBuffer9*)header->indexBuffer);
@@ -484,7 +486,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
if(inst->material->texture){
d3d::setTexture(0, m->texture);
@@ -512,11 +514,11 @@ CreateRimLightPipes(void)
}
-#include "shaders/neoRim_VS.inc"
+#include "shaders/obj/neoRim_VS.inc"
neoRim_VS = rw::d3d::createVertexShader(neoRim_VS_cso);
assert(neoRim_VS);
-#include "shaders/neoRimSkin_VS.inc"
+#include "shaders/obj/neoRimSkin_VS.inc"
neoRimSkin_VS = rw::d3d::createVertexShader(neoRimSkin_VS_cso);
assert(neoRimSkin_VS);
@@ -610,6 +612,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
assert(building->instHeader->platform == PLATFORM_D3D9);
building->fadeAlpha = 255;
building->lighting = !!(atomic->geometry->flags & rw::Geometry::LIGHT);
+ rw::uint32 flags = atomic->geometry->flags;
bool setupDone = false;
bool defer = false;
@@ -639,7 +642,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
setupDone = true;
}
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
if(m->texture){
d3d::setTexture(0, m->texture);
@@ -702,7 +705,7 @@ RenderBlendPass(int pass)
rw::RGBA color = m->color;
color.alpha = (color.alpha * building->fadeAlpha)/255;
- setMaterial(color, m->surfaceProps);
+ setMaterial(color, m->surfaceProps); // always modulate here
if(m->texture){
d3d::setTexture(0, m->texture);
diff --git a/src/extras/custompipes_gl.cpp b/src/extras/custompipes_gl.cpp
index caf9eb27..f1cbfc38 100644
--- a/src/extras/custompipes_gl.cpp
+++ b/src/extras/custompipes_gl.cpp
@@ -87,6 +87,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
Material *m;
+ rw::uint32 flags = atomic->geometry->flags;
setWorldMatrix(atomic->getFrame()->getLTM());
lightingCB(atomic);
@@ -119,7 +120,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
while(n--){
m = inst->material;
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
setTexture(0, m->texture);
@@ -159,8 +160,8 @@ CreateVehiclePipe(void)
{
-#include "shaders/neoVehicle_fs_gl.inc"
-#include "shaders/neoVehicle_vs_gl.inc"
+#include "shaders/obj/neoVehicle_frag.inc"
+#include "shaders/obj/neoVehicle_vert.inc"
const char *vs[] = { shaderDecl, header_vert_src, neoVehicle_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, neoVehicle_frag_src, nil };
neoVehicleShader = Shader::create(vs, fs);
@@ -270,8 +271,8 @@ CreateWorldPipe(void)
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
{
-#include "shaders/neoWorldIII_fs_gl.inc"
-#include "shaders/default_UV2_gl.inc"
+#include "shaders/obj/neoWorldIII_frag.inc"
+#include "shaders/obj/default_UV2_vert.inc"
const char *vs[] = { shaderDecl, header_vert_src, default_UV2_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, neoWorldIII_frag_src, nil };
neoWorldShader = Shader::create(vs, fs);
@@ -378,8 +379,8 @@ CreateGlossPipe(void)
using namespace rw::gl3;
{
-#include "shaders/neoGloss_fs_gl.inc"
-#include "shaders/neoGloss_vs_gl.inc"
+#include "shaders/obj/neoGloss_frag.inc"
+#include "shaders/obj/neoGloss_vert.inc"
const char *vs[] = { shaderDecl, header_vert_src, neoGloss_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, neoGloss_frag_src, nil };
neoGlossShader = Shader::create(vs, fs);
@@ -448,6 +449,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
Material *m;
+ rw::uint32 flags = atomic->geometry->flags;
setWorldMatrix(atomic->getFrame()->getLTM());
lightingCB(atomic);
@@ -471,7 +473,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
while(n--){
m = inst->material;
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
setTexture(0, m->texture);
@@ -498,6 +500,7 @@ rimRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
Material *m;
+ rw::uint32 flags = atomic->geometry->flags;
setWorldMatrix(atomic->getFrame()->getLTM());
lightingCB(atomic);
@@ -519,7 +522,7 @@ rimRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
while(n--){
m = inst->material;
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
setTexture(0, m->texture);
@@ -550,8 +553,8 @@ CreateRimLightPipes(void)
}
{
-#include "shaders/simple_fs_gl.inc"
-#include "shaders/neoRimSkin_gl.inc"
+#include "shaders/obj/simple_frag.inc"
+#include "shaders/obj/neoRimSkin_vert.inc"
const char *vs[] = { shaderDecl, header_vert_src, neoRimSkin_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
neoRimSkinShader = Shader::create(vs, fs);
@@ -559,8 +562,8 @@ CreateRimLightPipes(void)
}
{
-#include "shaders/simple_fs_gl.inc"
-#include "shaders/neoRim_gl.inc"
+#include "shaders/obj/simple_frag.inc"
+#include "shaders/obj/neoRim_vert.inc"
const char *vs[] = { shaderDecl, header_vert_src, neoRim_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
neoRimShader = Shader::create(vs, fs);
@@ -664,6 +667,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
assert(building->instHeader->platform == PLATFORM_GL3);
building->fadeAlpha = 255;
building->lighting = !!(atomic->geometry->flags & rw::Geometry::LIGHT);
+ rw::uint32 flags = atomic->geometry->flags;
WorldLights lights;
lights.numAmbients = 1;
@@ -703,7 +707,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
setupDone = true;
}
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
setTexture(0, m->texture);
@@ -772,7 +776,7 @@ RenderBlendPass(int pass)
rw::RGBA color = m->color;
color.alpha = (color.alpha * building->fadeAlpha)/255;
- setMaterial(color, m->surfaceProps);
+ setMaterial(color, m->surfaceProps); // always modulate here
setTexture(0, m->texture);
diff --git a/src/extras/postfx.cpp b/src/extras/postfx.cpp
index 51b91060..b94d245d 100644
--- a/src/extras/postfx.cpp
+++ b/src/extras/postfx.cpp
@@ -141,16 +141,16 @@ CPostFX::Open(RwCamera *cam)
#ifdef RW_D3D9
-#include "shaders/colourfilterIII_PS.inc"
+#include "shaders/obj/colourfilterIII_PS.inc"
colourfilterIII_PS = rw::d3d::createPixelShader(colourfilterIII_PS_cso);
-#include "shaders/contrastPS.inc"
+#include "shaders/obj/contrastPS.inc"
contrast_PS = rw::d3d::createPixelShader(contrastPS_cso);
#endif
#ifdef RW_OPENGL
using namespace rw::gl3;
{
-#include "shaders/im2d_gl.inc"
-#include "shaders/colourfilterIII_fs_gl.inc"
+#include "shaders/obj/im2d_vert.inc"
+#include "shaders/obj/colourfilterIII_frag.inc"
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, colourfilterIII_frag_src, nil };
colourFilterIII = Shader::create(vs, fs);
@@ -158,8 +158,8 @@ CPostFX::Open(RwCamera *cam)
}
{
-#include "shaders/im2d_gl.inc"
-#include "shaders/contrast_fs_gl.inc"
+#include "shaders/obj/im2d_vert.inc"
+#include "shaders/obj/contrast_frag.inc"
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, contrast_frag_src, nil };
contrast = Shader::create(vs, fs);
diff --git a/src/extras/screendroplets.cpp b/src/extras/screendroplets.cpp
index 74c44da0..1412141e 100644
--- a/src/extras/screendroplets.cpp
+++ b/src/extras/screendroplets.cpp
@@ -112,14 +112,14 @@ ScreenDroplets::InitDraw(void)
openim2d_uv2();
#ifdef RW_D3D9
-#include "shaders/screenDroplet_PS.inc"
+#include "shaders/obj/screenDroplet_PS.inc"
screenDroplet_PS = rw::d3d::createPixelShader(screenDroplet_PS_cso);
#endif
#ifdef RW_GL3
using namespace rw::gl3;
{
-#include "shaders/im2d_UV2_gl.inc"
-#include "shaders/screenDroplet_fs_gl.inc"
+#include "shaders/obj/im2d_UV2_vert.inc"
+#include "shaders/obj/screenDroplet_frag.inc"
const char *vs[] = { shaderDecl, header_vert_src, im2d_UV2_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, screenDroplet_frag_src, nil };
screenDroplet = Shader::create(vs, fs);
diff --git a/src/extras/shaders/Makefile b/src/extras/shaders/Makefile
deleted file mode 100644
index 51e009d6..00000000
--- a/src/extras/shaders/Makefile
+++ /dev/null
@@ -1,79 +0,0 @@
-all: im2d_gl.inc simple_fs_gl.inc default_UV2_gl.inc \
- colourfilterIII_fs_gl.inc contrast_fs_gl.inc \
- neoRim_gl.inc neoRimSkin_gl.inc \
- neoWorldIII_fs_gl.inc neoGloss_vs_gl.inc neoGloss_fs_gl.inc \
- neoVehicle_vs_gl.inc neoVehicle_fs_gl.inc \
- im2d_UV2_gl.inc screenDroplet_fs_gl.inc
-
-im2d_gl.inc: im2d.vert
- (echo 'const char *im2d_vert_src =';\
- sed 's/..*/"&\\n"/' im2d.vert;\
- echo ';') >im2d_gl.inc
-
-simple_fs_gl.inc: simple.frag
- (echo 'const char *simple_frag_src =';\
- sed 's/..*/"&\\n"/' simple.frag;\
- echo ';') >simple_fs_gl.inc
-
-default_UV2_gl.inc: default_UV2.vert
- (echo 'const char *default_UV2_vert_src =';\
- sed 's/..*/"&\\n"/' default_UV2.vert;\
- echo ';') >default_UV2_gl.inc
-
-
-
-colourfilterIII_fs_gl.inc: colourfilterIII.frag
- (echo 'const char *colourfilterIII_frag_src =';\
- sed 's/..*/"&\\n"/' colourfilterIII.frag;\
- echo ';') >colourfilterIII_fs_gl.inc
-
-contrast_fs_gl.inc: contrast.frag
- (echo 'const char *contrast_frag_src =';\
- sed 's/..*/"&\\n"/' contrast.frag;\
- echo ';') >contrast_fs_gl.inc
-
-
-neoRim_gl.inc: neoRim.vert
- (echo 'const char *neoRim_vert_src =';\
- sed 's/..*/"&\\n"/' neoRim.vert;\
- echo ';') >neoRim_gl.inc
-
-neoRimSkin_gl.inc: neoRimSkin.vert
- (echo 'const char *neoRimSkin_vert_src =';\
- sed 's/..*/"&\\n"/' neoRimSkin.vert;\
- echo ';') >neoRimSkin_gl.inc
-
-neoWorldIII_fs_gl.inc: neoWorldIII.frag
- (echo 'const char *neoWorldIII_frag_src =';\
- sed 's/..*/"&\\n"/' neoWorldIII.frag;\
- echo ';') >neoWorldIII_fs_gl.inc
-
-neoGloss_fs_gl.inc: neoGloss.frag
- (echo 'const char *neoGloss_frag_src =';\
- sed 's/..*/"&\\n"/' neoGloss.frag;\
- echo ';') >neoGloss_fs_gl.inc
-
-neoGloss_vs_gl.inc: neoGloss.vert
- (echo 'const char *neoGloss_vert_src =';\
- sed 's/..*/"&\\n"/' neoGloss.vert;\
- echo ';') >neoGloss_vs_gl.inc
-
-neoVehicle_vs_gl.inc: neoVehicle.vert
- (echo 'const char *neoVehicle_vert_src =';\
- sed 's/..*/"&\\n"/' neoVehicle.vert;\
- echo ';') >neoVehicle_vs_gl.inc
-
-neoVehicle_fs_gl.inc: neoVehicle.frag
- (echo 'const char *neoVehicle_frag_src =';\
- sed 's/..*/"&\\n"/' neoVehicle.frag;\
- echo ';') >neoVehicle_fs_gl.inc
-
-im2d_UV2_gl.inc: im2d_UV2.vert
- (echo 'const char *im2d_UV2_vert_src =';\
- sed 's/..*/"&\\n"/' im2d_UV2.vert;\
- echo ';') >im2d_UV2_gl.inc
-
-screenDroplet_fs_gl.inc: screenDroplet.frag
- (echo 'const char *screenDroplet_frag_src =';\
- sed 's/..*/"&\\n"/' screenDroplet.frag;\
- echo ';') >screenDroplet_fs_gl.inc
diff --git a/src/extras/shaders/make_glsl.sh b/src/extras/shaders/make_glsl.sh
new file mode 100644
index 00000000..0af98961
--- /dev/null
+++ b/src/extras/shaders/make_glsl.sh
@@ -0,0 +1,9 @@
+#!sh
+for i in *.vert; do
+ echo $i
+ ./makeinc_glsl.sh $i
+done
+for i in *.frag; do
+ echo $i
+ ./makeinc_glsl.sh $i
+done
diff --git a/src/extras/shaders/make.cmd b/src/extras/shaders/make_hlsl.cmd
index 8404ac6c..dee95283 100644
--- a/src/extras/shaders/make.cmd
+++ b/src/extras/shaders/make_hlsl.cmd
@@ -1,3 +1,3 @@
@echo off
-for %%f in (*PS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T ps_2_0 /nologo /E main /Fo %%~nf.cso %%f
-for %%f in (*VS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T vs_2_0 /nologo /E main /Fo %%~nf.cso %%f
+for %%f in (*PS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T ps_2_0 /nologo /E main /Fo obj\%%~nf.cso %%f
+for %%f in (*VS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T vs_2_0 /nologo /E main /Fo obj\%%~nf.cso %%f
diff --git a/src/extras/shaders/makeinc_glsl.sh b/src/extras/shaders/makeinc_glsl.sh
new file mode 100644
index 00000000..2bc6a387
--- /dev/null
+++ b/src/extras/shaders/makeinc_glsl.sh
@@ -0,0 +1,6 @@
+#!sh
+ext=${1##*.}
+name=${1%.*}
+(echo "const char *${name}_${ext}_src =";\
+sed 's/..*/"&\\n"/' $1;\
+echo ';') > obj/${name}_${ext}.inc
diff --git a/src/extras/shaders/makeinc.sh b/src/extras/shaders/makeinc_hlsl.sh
index a649af33..a5b12867 100644
--- a/src/extras/shaders/makeinc.sh
+++ b/src/extras/shaders/makeinc_hlsl.sh
@@ -1,4 +1,5 @@
#!sh
+cd obj
for i in *cso; do
(echo -n 'static '
xxd -i $i | grep -v '_len = ') > ${i%cso}inc
diff --git a/src/extras/shaders/colourfilterIII_PS.cso b/src/extras/shaders/obj/colourfilterIII_PS.cso
index cc41bcec..cc41bcec 100644
--- a/src/extras/shaders/colourfilterIII_PS.cso
+++ b/src/extras/shaders/obj/colourfilterIII_PS.cso
Binary files differ
diff --git a/src/extras/shaders/colourfilterIII_PS.inc b/src/extras/shaders/obj/colourfilterIII_PS.inc
index db49de6c..db49de6c 100644
--- a/src/extras/shaders/colourfilterIII_PS.inc
+++ b/src/extras/shaders/obj/colourfilterIII_PS.inc
diff --git a/src/extras/shaders/colourfilterIII_fs_gl.inc b/src/extras/shaders/obj/colourfilterIII_frag.inc
index 6fd1935b..6fd1935b 100644
--- a/src/extras/shaders/colourfilterIII_fs_gl.inc
+++ b/src/extras/shaders/obj/colourfilterIII_frag.inc
diff --git a/src/extras/shaders/contrastPS.cso b/src/extras/shaders/obj/contrastPS.cso
index a87c48d7..a87c48d7 100644
--- a/src/extras/shaders/contrastPS.cso
+++ b/src/extras/shaders/obj/contrastPS.cso
Binary files differ
diff --git a/src/extras/shaders/contrastPS.inc b/src/extras/shaders/obj/contrastPS.inc
index 5386792f..5386792f 100644
--- a/src/extras/shaders/contrastPS.inc
+++ b/src/extras/shaders/obj/contrastPS.inc
diff --git a/src/extras/shaders/contrast_fs_gl.inc b/src/extras/shaders/obj/contrast_frag.inc
index 97f78194..97f78194 100644
--- a/src/extras/shaders/contrast_fs_gl.inc
+++ b/src/extras/shaders/obj/contrast_frag.inc
diff --git a/src/extras/shaders/default_UV2_VS.cso b/src/extras/shaders/obj/default_UV2_VS.cso
index 5a48c663..5a48c663 100644
--- a/src/extras/shaders/default_UV2_VS.cso
+++ b/src/extras/shaders/obj/default_UV2_VS.cso
Binary files differ
diff --git a/src/extras/shaders/default_UV2_VS.inc b/src/extras/shaders/obj/default_UV2_VS.inc
index de832107..de832107 100644
--- a/src/extras/shaders/default_UV2_VS.inc
+++ b/src/extras/shaders/obj/default_UV2_VS.inc
diff --git a/src/extras/shaders/default_UV2_gl.inc b/src/extras/shaders/obj/default_UV2_vert.inc
index 450f3d9a..450f3d9a 100644
--- a/src/extras/shaders/default_UV2_gl.inc
+++ b/src/extras/shaders/obj/default_UV2_vert.inc
diff --git a/src/extras/shaders/im2d_UV2_gl.inc b/src/extras/shaders/obj/im2d_UV2_vert.inc
index 3feb2bc1..3feb2bc1 100644
--- a/src/extras/shaders/im2d_UV2_gl.inc
+++ b/src/extras/shaders/obj/im2d_UV2_vert.inc
diff --git a/src/extras/shaders/im2d_gl.inc b/src/extras/shaders/obj/im2d_vert.inc
index d11f5d33..d11f5d33 100644
--- a/src/extras/shaders/im2d_gl.inc
+++ b/src/extras/shaders/obj/im2d_vert.inc
diff --git a/src/extras/shaders/neoGloss_PS.cso b/src/extras/shaders/obj/neoGloss_PS.cso
index aa88e450..aa88e450 100644
--- a/src/extras/shaders/neoGloss_PS.cso
+++ b/src/extras/shaders/obj/neoGloss_PS.cso
Binary files differ
diff --git a/src/extras/shaders/neoGloss_PS.inc b/src/extras/shaders/obj/neoGloss_PS.inc
index 97e5641d..97e5641d 100644
--- a/src/extras/shaders/neoGloss_PS.inc
+++ b/src/extras/shaders/obj/neoGloss_PS.inc
diff --git a/src/extras/shaders/neoGloss_VS.cso b/src/extras/shaders/obj/neoGloss_VS.cso
index 9635b8b7..9635b8b7 100644
--- a/src/extras/shaders/neoGloss_VS.cso
+++ b/src/extras/shaders/obj/neoGloss_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoGloss_VS.inc b/src/extras/shaders/obj/neoGloss_VS.inc
index 1ec03761..1ec03761 100644
--- a/src/extras/shaders/neoGloss_VS.inc
+++ b/src/extras/shaders/obj/neoGloss_VS.inc
diff --git a/src/extras/shaders/neoGloss_fs_gl.inc b/src/extras/shaders/obj/neoGloss_frag.inc
index 67e9724e..67e9724e 100644
--- a/src/extras/shaders/neoGloss_fs_gl.inc
+++ b/src/extras/shaders/obj/neoGloss_frag.inc
diff --git a/src/extras/shaders/neoGloss_vs_gl.inc b/src/extras/shaders/obj/neoGloss_vert.inc
index dffb423f..dffb423f 100644
--- a/src/extras/shaders/neoGloss_vs_gl.inc
+++ b/src/extras/shaders/obj/neoGloss_vert.inc
diff --git a/src/extras/shaders/neoRimSkin_VS.cso b/src/extras/shaders/obj/neoRimSkin_VS.cso
index 8410504e..8410504e 100644
--- a/src/extras/shaders/neoRimSkin_VS.cso
+++ b/src/extras/shaders/obj/neoRimSkin_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoRimSkin_VS.inc b/src/extras/shaders/obj/neoRimSkin_VS.inc
index ac182956..ac182956 100644
--- a/src/extras/shaders/neoRimSkin_VS.inc
+++ b/src/extras/shaders/obj/neoRimSkin_VS.inc
diff --git a/src/extras/shaders/neoRimSkin_gl.inc b/src/extras/shaders/obj/neoRimSkin_vert.inc
index 01b739b2..01b739b2 100644
--- a/src/extras/shaders/neoRimSkin_gl.inc
+++ b/src/extras/shaders/obj/neoRimSkin_vert.inc
diff --git a/src/extras/shaders/neoRim_VS.cso b/src/extras/shaders/obj/neoRim_VS.cso
index 4af538b1..4af538b1 100644
--- a/src/extras/shaders/neoRim_VS.cso
+++ b/src/extras/shaders/obj/neoRim_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoRim_VS.inc b/src/extras/shaders/obj/neoRim_VS.inc
index 03b044a6..03b044a6 100644
--- a/src/extras/shaders/neoRim_VS.inc
+++ b/src/extras/shaders/obj/neoRim_VS.inc
diff --git a/src/extras/shaders/neoRim_gl.inc b/src/extras/shaders/obj/neoRim_vert.inc
index 7cd199d0..7cd199d0 100644
--- a/src/extras/shaders/neoRim_gl.inc
+++ b/src/extras/shaders/obj/neoRim_vert.inc
diff --git a/src/extras/shaders/neoVehicle_PS.cso b/src/extras/shaders/obj/neoVehicle_PS.cso
index ded01bfb..ded01bfb 100644
--- a/src/extras/shaders/neoVehicle_PS.cso
+++ b/src/extras/shaders/obj/neoVehicle_PS.cso
Binary files differ
diff --git a/src/extras/shaders/neoVehicle_PS.inc b/src/extras/shaders/obj/neoVehicle_PS.inc
index 8b77cec2..8b77cec2 100644
--- a/src/extras/shaders/neoVehicle_PS.inc
+++ b/src/extras/shaders/obj/neoVehicle_PS.inc
diff --git a/src/extras/shaders/neoVehicle_VS.cso b/src/extras/shaders/obj/neoVehicle_VS.cso
index 6ea47987..6ea47987 100644
--- a/src/extras/shaders/neoVehicle_VS.cso
+++ b/src/extras/shaders/obj/neoVehicle_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoVehicle_VS.inc b/src/extras/shaders/obj/neoVehicle_VS.inc
index 37c5858d..37c5858d 100644
--- a/src/extras/shaders/neoVehicle_VS.inc
+++ b/src/extras/shaders/obj/neoVehicle_VS.inc
diff --git a/src/extras/shaders/neoVehicle_fs_gl.inc b/src/extras/shaders/obj/neoVehicle_frag.inc
index 20537440..20537440 100644
--- a/src/extras/shaders/neoVehicle_fs_gl.inc
+++ b/src/extras/shaders/obj/neoVehicle_frag.inc
diff --git a/src/extras/shaders/neoVehicle_vs_gl.inc b/src/extras/shaders/obj/neoVehicle_vert.inc
index b7b42622..b7b42622 100644
--- a/src/extras/shaders/neoVehicle_vs_gl.inc
+++ b/src/extras/shaders/obj/neoVehicle_vert.inc
diff --git a/src/extras/shaders/neoWorldIII_PS.cso b/src/extras/shaders/obj/neoWorldIII_PS.cso
index 817888ef..817888ef 100644
--- a/src/extras/shaders/neoWorldIII_PS.cso
+++ b/src/extras/shaders/obj/neoWorldIII_PS.cso
Binary files differ
diff --git a/src/extras/shaders/neoWorldIII_PS.inc b/src/extras/shaders/obj/neoWorldIII_PS.inc
index a4631efb..a4631efb 100644
--- a/src/extras/shaders/neoWorldIII_PS.inc
+++ b/src/extras/shaders/obj/neoWorldIII_PS.inc
diff --git a/src/extras/shaders/neoWorldIII_fs_gl.inc b/src/extras/shaders/obj/neoWorldIII_frag.inc
index afd75f57..afd75f57 100644
--- a/src/extras/shaders/neoWorldIII_fs_gl.inc
+++ b/src/extras/shaders/obj/neoWorldIII_frag.inc
diff --git a/src/extras/shaders/screenDroplet_PS.cso b/src/extras/shaders/obj/screenDroplet_PS.cso
index 5508096b..5508096b 100644
--- a/src/extras/shaders/screenDroplet_PS.cso
+++ b/src/extras/shaders/obj/screenDroplet_PS.cso
Binary files differ
diff --git a/src/extras/shaders/screenDroplet_PS.inc b/src/extras/shaders/obj/screenDroplet_PS.inc
index c2055188..c2055188 100644
--- a/src/extras/shaders/screenDroplet_PS.inc
+++ b/src/extras/shaders/obj/screenDroplet_PS.inc
diff --git a/src/extras/shaders/screenDroplet_fs_gl.inc b/src/extras/shaders/obj/screenDroplet_frag.inc
index dd393b02..dd393b02 100644
--- a/src/extras/shaders/screenDroplet_fs_gl.inc
+++ b/src/extras/shaders/obj/screenDroplet_frag.inc
diff --git a/src/extras/shaders/simple_fs_gl.inc b/src/extras/shaders/obj/simple_frag.inc
index 614d79a0..614d79a0 100644
--- a/src/extras/shaders/simple_fs_gl.inc
+++ b/src/extras/shaders/obj/simple_frag.inc
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index e0d60304..28a4e989 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -2448,12 +2448,17 @@ CPed::ProcessControl(void)
#ifdef VC_PED_PORTS
uint8 flyDir = 0;
float feetZ = GetPosition().z - FEET_OFFSET;
- if ((obstacleForFlyingZ <= feetZ || obstacleForFlyingOtherDirZ >= 500.0f) && (obstacleForFlyingZ <= feetZ || obstacleForFlyingOtherDirZ <= feetZ)) {
- if (obstacleForFlyingOtherDirZ > feetZ && obstacleForFlyingZ < 499.0f)
- flyDir = 2;
- } else {
+#ifdef FIX_BUGS
+ if (obstacleForFlyingZ > feetZ && obstacleForFlyingOtherDirZ < 501.0f)
flyDir = 1;
- }
+ else if (obstacleForFlyingOtherDirZ > feetZ && obstacleForFlyingZ < 500.0f)
+ flyDir = 2;
+#else
+ if ((obstacleForFlyingZ > feetZ && obstacleForFlyingOtherDirZ < 500.0f) || (obstacleForFlyingZ > feetZ && obstacleForFlyingOtherDirZ > feetZ))
+ flyDir = 1;
+ else if (obstacleForFlyingOtherDirZ > feetZ && obstacleForFlyingZ < 499.0f)
+ flyDir = 2;
+#endif
if (flyDir != 0 && !bSomeVCflag1) {
SetPosition((flyDir == 2 ? obstacleForFlyingOtherDir.point : obstacleForFlying.point));
@@ -2471,6 +2476,10 @@ CPed::ProcessControl(void)
forceDir.z = 4.0f;
ApplyMoveForce(forceDir);
+ // What was that for?? It pushes player inside of collision sometimes and kills him.
+#ifdef FIX_BUGS
+ if (!IsPlayer())
+#endif
GetMatrix().GetPosition() += 0.25f * offsetToCheck;
m_fRotationCur = CGeneral::GetRadianAngleBetweenPoints(offsetToCheck.x, offsetToCheck.y, 0.0f, 0.0f);
diff --git a/src/render/Clouds.cpp b/src/render/Clouds.cpp
index b5af6619..684f5d74 100644
--- a/src/render/Clouds.cpp
+++ b/src/render/Clouds.cpp
@@ -273,8 +273,8 @@ CClouds::Render(void)
for(i = 0; i < 37; i++){
RwV3d pos = { 2.0f*CoorsOffsetX[i], 2.0f*CoorsOffsetY[i], 40.0f*CoorsOffsetZ[i] + 40.0f };
- worldpos.x = campos.x*rot_cos + campos.y*rot_sin + pos.x;
- worldpos.y = campos.x*rot_sin + campos.y*rot_cos + pos.y;
+ worldpos.x = pos.x*rot_cos + pos.y*rot_sin + campos.x;
+ worldpos.y = pos.x*rot_sin - pos.y*rot_cos + campos.y;
worldpos.z = pos.z;
if(bCloudOnScreen[i] && CSprite::CalcScreenCoors(worldpos, &screenpos, &szx, &szy, false)){
// BUG: this is stupid....would have to do this for each cloud individually
diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp
index 2f7b9001..4991e024 100644
--- a/src/render/Hud.cpp
+++ b/src/render/Hud.cpp
@@ -1150,18 +1150,18 @@ void CHud::Draw()
if (IntroRect.m_nTextureId >= 0) {
CRect rect (
IntroRect.m_sRect.left,
- IntroRect.m_sRect.top,
+ IntroRect.m_sRect.bottom,
IntroRect.m_sRect.right,
- IntroRect.m_sRect.bottom );
+ IntroRect.m_sRect.top );
CTheScripts::ScriptSprites[IntroRect.m_nTextureId].Draw(rect, IntroRect.m_sColor);
}
else {
CRect rect (
IntroRect.m_sRect.left,
- IntroRect.m_sRect.top,
+ IntroRect.m_sRect.bottom,
IntroRect.m_sRect.right,
- IntroRect.m_sRect.bottom );
+ IntroRect.m_sRect.top );
CSprite2d::DrawRect(rect, IntroRect.m_sColor);
}
diff --git a/src/skel/crossplatform.h b/src/skel/crossplatform.h
index 8c4fb14c..e5f4c7ba 100644
--- a/src/skel/crossplatform.h
+++ b/src/skel/crossplatform.h
@@ -71,7 +71,7 @@ void CapturePad(RwInt32 padID);
void joysChangeCB(int jid, int event);
#endif
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
extern char gSelectedJoystickName[128];
#endif
diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp
index 9643c63b..b413a1ce 100644
--- a/src/skel/glfw/glfw.cpp
+++ b/src/skel/glfw/glfw.cpp
@@ -81,7 +81,7 @@ static psGlobalType PsGlobal;
size_t _dwMemAvailPhys;
RwUInt32 gGameState;
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
char gSelectedJoystickName[128] = "";
#endif
@@ -841,7 +841,7 @@ void joysChangeCB(int jid, int event);
bool IsThisJoystickBlacklisted(int i)
{
-#ifndef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifndef DETECT_JOYSTICK_MENU
return false;
#else
if (glfwJoystickIsGamepad(i))
@@ -906,7 +906,7 @@ void _InputInitialiseJoys()
if (PSGLOBAL(joy1id) != -1) {
int count;
glfwGetJoystickButtons(PSGLOBAL(joy1id), &count);
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
strcpy(gSelectedJoystickName, glfwGetJoystickName(PSGLOBAL(joy1id)));
#endif
ControlsManager.InitDefaultControlConfigJoyPad(count);
@@ -2150,7 +2150,7 @@ void joysChangeCB(int jid, int event)
if (event == GLFW_CONNECTED && !IsThisJoystickBlacklisted(jid)) {
if (PSGLOBAL(joy1id) == -1) {
PSGLOBAL(joy1id) = jid;
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
strcpy(gSelectedJoystickName, glfwGetJoystickName(jid));
#endif
// This is behind LOAD_INI_SETTINGS, because otherwise the Init call below will destroy/overwrite your bindings.
diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp
index 3bda4e9d..c00d6075 100644
--- a/src/skel/win/win.cpp
+++ b/src/skel/win/win.cpp
@@ -121,6 +121,10 @@ DWORD _dwOperatingSystemVersion;
RwUInt32 gGameState;
CJoySticks AllValidWinJoys;
+#ifdef DETECT_JOYSTICK_MENU
+char gSelectedJoystickName[128] = "";
+#endif
+
// What is that for anyway?
#ifndef IMPROVED_VIDEOMODE
static RwBool defaultFullscreenRes = TRUE;
diff --git a/utils/gxt/american.txt b/utils/gxt/american.txt
index aebb1273..e04e92a8 100644
--- a/utils/gxt/american.txt
+++ b/utils/gxt/american.txt
@@ -2221,11 +2221,11 @@ Car bombs are $1000 each
[GA_5]
Your car is already fitted with a bomb.
-[GA_6]
-Park it, prime it by pressing the ~h~~k~~PED_FIREWEAPON~ button~w~ and LEG IT!
+[GA_6] { re3 change }
+Park it, prime it by pressing the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ and LEG IT!
-[GA_7]
-Arm with ~h~~k~~PED_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
+[GA_7] { re3 change }
+Arm with ~h~~k~~VEHICLE_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
[GA_8]
Use the detonator to activate the bomb.
@@ -3565,11 +3565,11 @@ Alright?
[JM6_1]
Get to the bank on the main drag.
-[GA_6B]
-Park it, prime it by pressing the ~h~~k~~PED_FIREWEAPON~ button~w~ and LEG IT!
+[GA_6B] { re3 change }
+Park it, prime it by pressing the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ and LEG IT!
-[GA_7B]
-Arm with ~h~~k~~PED_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
+[GA_7B] { re3 change }
+Arm with ~h~~k~~VEHICLE_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
[BAT1]
~g~Pick up the bat!
@@ -4000,11 +4000,11 @@ Drive your vehicle into the spray shop to lose your ~h~wanted level~w~, ~h~repai
[HM1_1]
~g~Ice 20 Purple Nines in 2 minutes 30 seconds.
-[KM1_8A]
-Press the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~activate the bomb,~w~ remember to get out of the way.
+[KM1_8A] { re3 change }
+Press the~h~ ~k~~VEHICLE_FIREWEAPON~ button~w~ to ~h~activate the bomb,~w~ remember to get out of the way.
-[KM1_8D]
-Press the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~activate the bomb,~w~ remember to get out of the way.
+[KM1_8D] { re3 change }
+Press the~h~ ~k~~VEHICLE_FIREWEAPON~ button~w~ to ~h~activate the bomb,~w~ remember to get out of the way.
[KM1_12]
~g~Get him to the dojo but get rid of the cops first!
@@ -4141,11 +4141,11 @@ I don't need to see any I.D. you look trustworthy.
[DETON]
DETONATION:
-[DRIVE_A]
-Have an Uzi selected when entering a vehicle then look left or right and press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire.
+[DRIVE_A] { re3 change }
+Have an Uzi selected when entering a vehicle then look left or right and press the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ to fire.
-[DRIVE_B]
-Have an Uzi selected when entering a vehicle then look left or right and press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire.
+[DRIVE_B] { re3 change }
+Have an Uzi selected when entering a vehicle then look left or right and press the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ to fire.
[RECORD]
~g~NEW RECORD!!
@@ -4153,11 +4153,11 @@ Have an Uzi selected when entering a vehicle then look left or right and press t
[NRECORD]
~r~NO NEW RECORD!
-[RCHELP]
-Press ~k~~PED_FIREWEAPON~, or drive the RC car into a vehicle's wheels to detonate.
+[RCHELP] { re3 change }
+Press ~k~~VEHICLE_FIREWEAPON~, or drive the RC car into a vehicle's wheels to detonate.
-[RCHELPA]
-Press the ~k~~PED_FIREWEAPON~ button, or drive the RC car into a vehicle's wheels to detonate.
+[RCHELPA] { re3 change }
+Press the ~k~~VEHICLE_FIREWEAPON~ button, or drive the RC car into a vehicle's wheels to detonate.
[RC_1]
You have 2 minutes to blow up as many Diablo Gang Cars as possible!
@@ -4657,11 +4657,11 @@ LOVE'S DISAPPEARANCE
[RM5_6]
~g~He's bailed out!! Smash his bodycast with a vehicle or an explosion!!
-[PBOAT_1]
-Press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire the boat cannons.
+[PBOAT_1] { re3 change }
+Press the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ to fire the boat cannons.
-[PBOAT_2]
-Press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire the boat cannons.
+[PBOAT_2] { re3 change }
+Press the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ to fire the boat cannons.
[DIAB1_B]
This is El Burro of the Diablos.
@@ -4675,11 +4675,11 @@ There's a street race starting by the old school hall near the Callahan Bridge.
[DIAB1_F]
Get yourself some wheels and first through all the checkpoints wins the prize.
-[HM2_1]
-Use the RC buggies to destroy the armored cars. Press the ~h~~k~~PED_FIREWEAPON~ button ~w~to detonate.
+[HM2_1] { re3 change }
+Use the RC buggies to destroy the armored cars. Press the ~h~~k~~VEHICLE_FIREWEAPON~ button ~w~to detonate.
-[HM2_1A]
-Use the RC buggies to destroy the armored cars. Press the ~h~~k~~PED_FIREWEAPON~ button ~w~to detonate.
+[HM2_1A] { re3 change }
+Use the RC buggies to destroy the armored cars. Press the ~h~~k~~VEHICLE_FIREWEAPON~ button ~w~to detonate.
[HM2_2]
~r~You failed to destroy all the armored cars!
@@ -6490,11 +6490,11 @@ This Memory Card (PS2) is already formatted.
[FEDSAS4]
;=<> - CHANGE SELECTION
-[SPRAY_4]
-Use the ~h~~k~~PED_FIREWEAPON~ button ~w~to fire the water cannon.
+[SPRAY_4] { re3 change }
+Use the ~h~~k~~VEHICLE_FIREWEAPON~ button ~w~to fire the water cannon.
-[SPRAY_1]
-Use the ~h~~k~~PED_FIREWEAPON~ button ~w~to fire the water cannon.
+[SPRAY_1] { re3 change }
+Use the ~h~~k~~VEHICLE_FIREWEAPON~ button ~w~to fire the water cannon.
[LITTLE]
LITTLE T
diff --git a/utils/gxt/french.txt b/utils/gxt/french.txt
index cbc71f91..308a072f 100644
--- a/utils/gxt/french.txt
+++ b/utils/gxt/french.txt
@@ -2233,11 +2233,11 @@ Une voiture piégée coûte 1000$ pièce!
[GA_5]
Ta voiture est déjà équipée d'une bombe.
-[GA_6]
-Gare-la, arme la bombe avec la ~h~touche ~k~~PED_FIREWEAPON~~w~ et CASSE-TOI!
+[GA_6] { re3 change }
+Gare-la, arme la bombe avec la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ et CASSE-TOI!
-[GA_7]
-Arme la bombe avec la ~h~touche ~k~~PED_FIREWEAPON~~w~. Elle explose au démarrage.
+[GA_7] { re3 change }
+Arme la bombe avec la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~. Elle explose au démarrage.
[GA_8]
Utilise le détonateur pour armer la bombe.
@@ -3484,11 +3484,11 @@ D'accord ?
[JM6_1]
Va à la banque par la rue principale.
-[GA_6B]
-Tu la gares, tu l'amorces en appuyant sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ et tu te barres!
+[GA_6B] { re3 change }
+Tu la gares, tu l'amorces en appuyant sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ et tu te barres!
-[GA_7B]
-Pour armer la bombe, appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~. Elle explosera au démarrage.
+[GA_7B] { re3 change }
+Pour armer la bombe, appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~. Elle explosera au démarrage.
[BAT1]
~g~Ramasse la batte!
@@ -3919,11 +3919,11 @@ Amène ton véhicule à l'atelier de peinture pour annuler ton ~h~indice de rech
[HM1_1]
~G~Refroidis 20 Nines violets en 2 minutes et 30 secondes.
-[KM1_8A]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~activer la bombe~w~, n'oublie pas de t'éloigner.
+[KM1_8A] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour ~h~activer la bombe~w~, n'oublie pas de t'éloigner.
-[KM1_8D]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~activer la bombe~w~, n'oublie pas de t'éloigner.
+[KM1_8D] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour ~h~activer la bombe~w~, n'oublie pas de t'éloigner.
[KM1_12]
~g~Amène-le au dojo mais débarrasse-toi des flics d'abord!
@@ -4060,11 +4060,11 @@ J'ai pas besoin de tes papiers d'identité. Je pense qu'on peut te faire confian
[DETON]
DETONATION :
-[DRIVE_A]
-Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droite et appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer.
+[DRIVE_A] { re3 change }
+Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droite et appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer.
-[DRIVE_B]
-Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droite et appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer.
+[DRIVE_B] { re3 change }
+Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droite et appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer.
[RECORD]
~g~NOUVEAU RECORD!
@@ -4072,11 +4072,11 @@ Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droi
[NRECORD]
~r~PAS DE RECORD!
-[RCHELP]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ ou heurte une roue de voiture avec le véhicule télécommandé pour le faire exploser.
+[RCHELP] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ ou heurte une roue de voiture avec le véhicule télécommandé pour le faire exploser.
-[RCHELPA]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ ou heurte une roue de voiture avec le véhicule télécommandé pour le faire exploser.
+[RCHELPA] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ ou heurte une roue de voiture avec le véhicule télécommandé pour le faire exploser.
[RC_1]
Tu as 2 minutes pour faire péter autant de voitures de Diablo que tu peux!
@@ -4576,11 +4576,11 @@ LA DISPARITION DE LOVE
[RM5_6]
~g~Il s'est enfui! Bousille-lui son plâtre avec une bagnole ou une explosion!
-[PBOAT_1]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer avec les canons du bateau.
+[PBOAT_1] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer avec les canons du bateau.
-[PBOAT_2]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer avec les canons du bateau.
+[PBOAT_2] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer avec les canons du bateau.
[DIAB1_B]
C'est El Burro des Diablos.
@@ -4594,11 +4594,11 @@ Il y a une course de bagnoles qui va partir de la vieille école près du pont d
[DIAB1_F]
Trouve-toi une caisse et le premier qui franchit tous les points de passage, gagne le gros lot.
-[HM2_1]
-Utilise les buggies télécommandés pour détruire les voitures blindées. Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour les faire exploser.
+[HM2_1] { re3 change }
+Utilise les buggies télécommandés pour détruire les voitures blindées. Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour les faire exploser.
-[HM2_1A]
-Utilise les buggies télécommandés pour détruire les voitures blindées. Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour les faire exploser.
+[HM2_1A] { re3 change }
+Utilise les buggies télécommandés pour détruire les voitures blindées. Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour les faire exploser.
[HM2_2]
~r~T'as pas réussi à détruire toutes leurs voitures blindées!
@@ -6610,11 +6610,11 @@ Cette memory card (PS2) est déjà formatée.
[FEDSAS4]
;=<> - CHANGER SELECTION
-[SPRAY_4]
-Utilise la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer à l'aide du canon à eau.
+[SPRAY_4] { re3 change }
+Utilise la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer à l'aide du canon à eau.
-[SPRAY_1]
-Utilise la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer à l'aide du canon à eau.
+[SPRAY_1] { re3 change }
+Utilise la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer à l'aide du canon à eau.
[AM1_10]
~g~Salvatore Leone partira de chez Luigi vers 0~1~:~1~.
diff --git a/utils/gxt/german.txt b/utils/gxt/german.txt
index bfcc7157..96cacde5 100644
--- a/utils/gxt/german.txt
+++ b/utils/gxt/german.txt
@@ -2269,11 +2269,11 @@ Autobomben kosten $1000 pro Stück.
[GA_5]
In deinem Wagen ist schon eine Autobombe.
-[GA_6]
-Park die Karre, mach sie durch Drücken der ~h~~k~~PED_FIREWEAPON~-Taste~w~ scharf, und dann nichts wie weg!
+[GA_6] { re3 change }
+Park die Karre, mach sie durch Drücken der ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~ scharf, und dann nichts wie weg!
-[GA_7]
-Mach die Bombe mit der ~h~~k~~PED_FIREWEAPON~-Taste~w~ scharf. Dann geht sie hoch, wenn der Wagen angelassen wird.
+[GA_7] { re3 change }
+Mach die Bombe mit der ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~ scharf. Dann geht sie hoch, wenn der Wagen angelassen wird.
[GA_8]
Benutze den Zünder, um die Bombe hochgehen zu lassen.
@@ -3628,11 +3628,11 @@ Okay?
[JM6_1]
Fahr zu der Bank auf dem Boulevard.
-[GA_6B]
-Park die Karre, mach sie durch Drücken der ~h~~k~~PED_FIREWEAPON~-Taste~w~ scharf, und dann HAU AB!
+[GA_6B] { re3 change }
+Park die Karre, mach sie durch Drücken der ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~ scharf, und dann HAU AB!
-[GA_7B]
-Mach die Bombe mit der ~h~~k~~PED_FIREWEAPON~-Taste~w~ scharf. Sie geht hoch, wenn der Wagen angelassen wird.
+[GA_7B] { re3 change }
+Mach die Bombe mit der ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~ scharf. Sie geht hoch, wenn der Wagen angelassen wird.
[BAT1]
~g~Nimm dir den Schlãger!
@@ -4066,11 +4066,11 @@ Fahre deinen Wagen in die Lackiererei, um deinen ~h~Fahndungslevel~w~ loszuwerde
[HM1_1]
~g~Fertige 20 Purple Nines in 2 Min. 30 Sek. ab.
-[KM1_8A]
-Drücke die~h~ ~k~~PED_FIREWEAPON~-Taste~w~ zum ~h~Zünden der Bombe~w~. Aber geh vorher in Deckung!
+[KM1_8A] { re3 change }
+Drücke die~h~ ~k~~VEHICLE_FIREWEAPON~-Taste~w~ zum ~h~Zünden der Bombe~w~. Aber geh vorher in Deckung!
-[KM1_8D]
-Drücke die~h~ ~k~~PED_FIREWEAPON~-Taste~w~ zum ~h~Zünden der Bombe~w~. Aber geh vorher in Deckung!
+[KM1_8D] { re3 change }
+Drücke die~h~ ~k~~VEHICLE_FIREWEAPON~-Taste~w~ zum ~h~Zünden der Bombe~w~. Aber geh vorher in Deckung!
[KM1_12]
~g~Bring ihm zum Dojo, aber hãng vorher die Cops ab!
@@ -4207,11 +4207,11 @@ Auf den Ausweis verzichte ich. Du siehst vertrauenswürdig aus.
[DETON]
DETONATION:
-[DRIVE_A]
-Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach links oder rechts und drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um zu feuern.
+[DRIVE_A] { re3 change }
+Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach links oder rechts und drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~, um zu feuern.
-[DRIVE_B]
-Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach links oder rechts und drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um zu feuern.
+[DRIVE_B] { re3 change }
+Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach links oder rechts und drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~, um zu feuern.
[RECORD]
~g~NEUER REKORD!!
@@ -4219,11 +4219,11 @@ Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach link
[NRECORD]
~r~KEIN NEUER REKORD!
-[RCHELP]
-Drücke die ~k~~PED_FIREWEAPON~-Taste oder fahre das ferngesteuerte Auto in die Rãder eines Fahrzeugs, um es zu sprengen.
+[RCHELP] { re3 change }
+Drücke die ~k~~VEHICLE_FIREWEAPON~-Taste oder fahre das ferngesteuerte Auto in die Rãder eines Fahrzeugs, um es zu sprengen.
-[RCHELPA]
-Drücke die ~k~~PED_FIREWEAPON~-Taste oder fahre das ferngesteuerte Auto in die Rãder eines Fahrzeugs, um es zu sprengen.
+[RCHELPA] { re3 change }
+Drücke die ~k~~VEHICLE_FIREWEAPON~-Taste oder fahre das ferngesteuerte Auto in die Rãder eines Fahrzeugs, um es zu sprengen.
[RC_1]
Du hast 2 Minuten, um so viele Diablo-Autos wie möglich zu sprengen!
@@ -4723,11 +4723,11 @@ LOVES VERSCHWINDEN
[RM5_6]
~g~Er ist abgehauen! Zerstöre seine Panzerung mit einem Auto oder einer Explosion!!
-[PBOAT_1]
-Drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um die Bordkanonen abzufeuern.
+[PBOAT_1] { re3 change }
+Drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~, um die Bordkanonen abzufeuern.
-[PBOAT_2]
-Drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um die Bordkanonen abzufeuern.
+[PBOAT_2] { re3 change }
+Drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~, um die Bordkanonen abzufeuern.
[DIAB1_B]
Hier El Burro, von den Diablos.
@@ -4741,11 +4741,11 @@ Bei der alten Schulhalle nahe der Callahan Bridge findet ein Rennen statt.
[DIAB1_F]
Besorg dir 'nen fahrbaren Untersatz. Wer als erster alle Checkpoints abfãhrt, ist Sieger.
-[HM2_1]
-Zerstöre die gepanzerten Fahrzeuge mit den Buggies. Zur Zündung drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~.
+[HM2_1] { re3 change }
+Zerstöre die gepanzerten Fahrzeuge mit den Buggies. Zur Zündung drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~.
-[HM2_1A]
-Zerstöre die gepanzerten Fahrzeuge mit den Buggies. Zur Zündung drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~.
+[HM2_1A] { re3 change }
+Zerstöre die gepanzerten Fahrzeuge mit den Buggies. Zur Zündung drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~.
[HM2_2]
~r~Du hast nicht alle gepanzerten Fahrzeuge zerstört!
@@ -6568,11 +6568,11 @@ Diese Memory Card (PS2) ist bereits formatiert.
[FEDSAS4]
;=<> - AUSWAHL ÃNDERN
-[SPRAY_4]
-~h~~k~~PED_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
+[SPRAY_4] { re3 change }
+~h~~k~~VEHICLE_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
-[SPRAY_1]
-~h~~k~~PED_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
+[SPRAY_1] { re3 change }
+~h~~k~~VEHICLE_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
[LITTLE]
LITTLE T
diff --git a/utils/gxt/italian.txt b/utils/gxt/italian.txt
index 18f49872..9bff9468 100644
--- a/utils/gxt/italian.txt
+++ b/utils/gxt/italian.txt
@@ -2260,11 +2260,11 @@ Le bombe per le macchine costano 1000$
[GA_5]
La tua macchina ha già una bomba installata.
-[GA_6]
-Parcheggiala, attivala premendo il ~h~tasto ~k~~PED_FIREWEAPON~~w~ e DATTELA A GAMBE!
+[GA_6] { re3 change }
+Parcheggiala, attivala premendo il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ e DATTELA A GAMBE!
-[GA_7]
-Arma la bomba con il ~h~tasto ~k~~PED_FIREWEAPON~~w~: esploderà non appena qualcuno cercherà di avviarla.
+[GA_7] { re3 change }
+Arma la bomba con il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~: esploderà non appena qualcuno cercherà di avviarla.
[GA_8]
Usa il detonatore per attivare la bomba.
@@ -3619,11 +3619,11 @@ OK?
[JM6_1]
Raggiungi la banca sulla strada principale.
-[GA_6B]
-Parcheggiala, innesca la bomba schiacciando il ~h~tasto ~k~~PED_FIREWEAPON~~w~ e BATTITELA!
+[GA_6B] { re3 change }
+Parcheggiala, innesca la bomba schiacciando il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ e BATTITELA!
-[GA_7B]
-Innescala col ~h~tasto ~k~~PED_FIREWEAPON~~w~. La bomba esploderà quando si tenterà di avviare il motore.
+[GA_7B] { re3 change }
+Innescala col ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~. La bomba esploderà quando si tenterà di avviare il motore.
[BAT1]
~g~Prendi la mazza!
@@ -4057,11 +4057,11 @@ Porta l'auto dal carrozziere per perdere il ~h~livello di sospetto~w~, ~h~ripara
[HM1_1]
~g~Fredda 20 Purple Nine in 2 minuti e 30 secondi.
-[KM1_8A]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per ~h~attivare la bomba~w~: ricorda di toglierti di mezzo!
+[KM1_8A] { re3 change }
+Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per ~h~attivare la bomba~w~: ricorda di toglierti di mezzo!
-[KM1_8D]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per ~h~attivare la bomba~w~: e ricorda di toglierti di mezzo!
+[KM1_8D] { re3 change }
+Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per ~h~attivare la bomba~w~: e ricorda di toglierti di mezzo!
[KM1_12]
~g~Portalo nel dojo, ma prima sbarazzati degli sbirri!
@@ -4198,11 +4198,11 @@ Non mi serve che mi mostri i documenti, hai una faccia fidata.
[DETON]
DETONAZIONE:
-[DRIVE_A]
-Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare.
+[DRIVE_A] { re3 change }
+Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare.
-[DRIVE_B]
-Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare.
+[DRIVE_B] { re3 change }
+Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare.
[RECORD]
~g~NUOVO RECORD!!!
@@ -4210,11 +4210,11 @@ Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e
[NRECORD]
~r~NESSUN NUOVO RECORD!
-[RCHELP]
-Premi il tasto ~k~~PED_FIREWEAPON~ o dirigi l'auto radiocomandata contro i pneumatici di un veicolo per provocarne la detonazione.
+[RCHELP] { re3 change }
+Premi il tasto ~k~~VEHICLE_FIREWEAPON~ o dirigi l'auto radiocomandata contro i pneumatici di un veicolo per provocarne la detonazione.
-[RCHELPA]
-Premi il tasto ~k~~PED_FIREWEAPON~ o dirigi l'auto radiocomandata contro i pneumatici di un veicolo per provocarne la detonazione.
+[RCHELPA] { re3 change }
+Premi il tasto ~k~~VEHICLE_FIREWEAPON~ o dirigi l'auto radiocomandata contro i pneumatici di un veicolo per provocarne la detonazione.
[RC_1]
Hai 2 minuti per far esplodere quante più auto dei Diablo possibile!
@@ -4717,11 +4717,11 @@ LA SCOMPARSA DI LOVE
[RM5_6]
~g~Ci è scappato! Spaccagli la corazza con un veicolo o con una bella esplosione!
-[PBOAT_1]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare con i cannoni della barca.
+[PBOAT_1] { re3 change }
+Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare con i cannoni della barca.
-[PBOAT_2]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare con i cannoni della barca.
+[PBOAT_2] { re3 change }
+Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare con i cannoni della barca.
[DIAB1_B]
Sono El Burro dei Diablo.
@@ -4735,11 +4735,11 @@ C'e una corsa d'auto con inizio alla vecchia scuola vicino al ponte Callahan.
[DIAB1_F]
Procurati un mezzo, il primo che attraversa tutti i posti di blocco vince il premio.
-[HM2_1]
-Usa i maggiolini radiocomandati per distruggere le auto blindate. Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per farli esplodere.
+[HM2_1] { re3 change }
+Usa i maggiolini radiocomandati per distruggere le auto blindate. Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per farli esplodere.
-[HM2_1A]
-Usa i maggiolini radiocomandati per distruggere le auto blindate. Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per farli esplodere.
+[HM2_1A] { re3 change }
+Usa i maggiolini radiocomandati per distruggere le auto blindate. Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per farli esplodere.
[HM2_2]
~r~Non sei riuscito a distruggere tutte le auto blindate!
@@ -6565,11 +6565,11 @@ Questa memory card (PS2) è già formattata.
[FEDSAS4]
;=<> - CAMBIA SELEZIONE
-[SPRAY_4]
-Usa il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare col cannone ad acqua.
+[SPRAY_4] { re3 change }
+Usa il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare col cannone ad acqua.
-[SPRAY_1]
-Usa il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare col cannone ad acqua.
+[SPRAY_1] { re3 change }
+Usa il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare col cannone ad acqua.
[LITTLE]
LITTLE T
diff --git a/utils/gxt/polish.txt b/utils/gxt/polish.txt
index 4b9118eb..7bd3d28f 100755
--- a/utils/gxt/polish.txt
+++ b/utils/gxt/polish.txt
@@ -2221,11 +2221,11 @@ Bomby samochodowe kosztują 1000 dolarów za sztukę.
[GA_5]
W twoim samochodzie bomba już została zainstalowana.
-[GA_6]
-Zaparkuj wóz, włącz mechanizm klawiszem ~h~~k~~PED_FIREWEAPON~~w~ i W NOGI!
+[GA_6] { re3 change }
+Zaparkuj wóz, włącz mechanizm klawiszem ~h~~k~~VEHICLE_FIREWEAPON~~w~ i W NOGI!
-[GA_7]
-Uaktywnij bombę za pomocą klawisza ~h~~k~~PED_FIREWEAPON~~w~. Bomba wybuchnie w momencie włączenia silnika.
+[GA_7] { re3 change }
+Uaktywnij bombę za pomocą klawisza ~h~~k~~VEHICLE_FIREWEAPON~~w~. Bomba wybuchnie w momencie włączenia silnika.
[GA_8]
Użyj detonatora, aby aktywować bombę.
@@ -3592,11 +3592,11 @@ W porządku?
[JM6_1]
Jedź do banku na głównej ulicy.
-[GA_6B]
-Zaparkuj wóz, włącz mechanizm klawiszem ~h~~k~~PED_FIREWEAPON~~w~ i W NOGI!
+[GA_6B] { re3 change }
+Zaparkuj wóz, włącz mechanizm klawiszem ~h~~k~~VEHICLE_FIREWEAPON~~w~ i W NOGI!
-[GA_7B]
-Uaktywnij bombę za pomocą klawisza ~h~~k~~PED_FIREWEAPON~~w~. Bomba wybuchnie w momencie włączenia silnika.
+[GA_7B] { re3 change }
+Uaktywnij bombę za pomocą klawisza ~h~~k~~VEHICLE_FIREWEAPON~~w~. Bomba wybuchnie w momencie włączenia silnika.
[BAT1]
~g~Podnieś kij bejsbolowy!
@@ -4027,11 +4027,11 @@ Wprowadź samochód do warsztatu lakierniczego, aby obniżyć swój ~h~poziom z
[HM1_1]
~g~Załatw 20 Purpurowych Dziewiątek w 2 minuty 30 sekund.
-[KM1_8A]
-Naciśnij klawisz ~h~ ~k~~PED_FIREWEAPON~ ~w~, aby ~h~aktywować bombę.~w~ Nie zapomnij oddalić się od miejsca eksplozji.
+[KM1_8A] { re3 change }
+Naciśnij klawisz ~h~ ~k~~VEHICLE_FIREWEAPON~ ~w~, aby ~h~aktywować bombę.~w~ Nie zapomnij oddalić się od miejsca eksplozji.
-[KM1_8D]
-Naciśnij klawisz ~h~ ~k~~PED_FIREWEAPON~ ~w~, aby ~h~aktywować bombę.~w~ Nie zapomnij oddalić się od miejsca eksplozji.
+[KM1_8D] { re3 change }
+Naciśnij klawisz ~h~ ~k~~VEHICLE_FIREWEAPON~ ~w~, aby ~h~aktywować bombę.~w~ Nie zapomnij oddalić się od miejsca eksplozji.
[KM1_12]
~g~Odwieź go do dojo, ale najpierw pozbądź się gliniarzy!
@@ -4168,11 +4168,11 @@ Nie musisz pokazywać dowodu, wyglądasz na wiarygodnego gościa.
[DETON]
DETONACJA:
-[DRIVE_A]
-Wybierz jako broń uzi i wsiądź do pojazdu. Następnie spójrz w lewo lub w prawo - aby otworzyć ogień, naciśnij klawisz ~h~~k~~PED_FIREWEAPON~~w~.
+[DRIVE_A] { re3 change }
+Wybierz jako broń uzi i wsiądź do pojazdu. Następnie spójrz w lewo lub w prawo - aby otworzyć ogień, naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~.
-[DRIVE_B]
-Wybierz jako broń uzi i wsiądź do pojazdu. Następnie spójrz w lewo lub w prawo - aby otworzyć ogień, naciśnij klawisz ~h~~k~~PED_FIREWEAPON~~w~.
+[DRIVE_B] { re3 change }
+Wybierz jako broń uzi i wsiądź do pojazdu. Następnie spójrz w lewo lub w prawo - aby otworzyć ogień, naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~.
[RECORD]
~g~NOWY REKORD!
@@ -4180,11 +4180,11 @@ Wybierz jako broń uzi i wsiądź do pojazdu. Następnie spójrz w lewo lub w pr
[NRECORD]
~r~NIE MA NOWEGO REKORDU!
-[RCHELP]
-Naciśnij klawisz ~k~~PED_FIREWEAPON~ lub uderz zdalnie sterowanym samochodzikiem w koła pojazdu, aby spowodować eksplozję.
+[RCHELP] { re3 change }
+Naciśnij klawisz ~k~~VEHICLE_FIREWEAPON~ lub uderz zdalnie sterowanym samochodzikiem w koła pojazdu, aby spowodować eksplozję.
-[RCHELPA]
-Naciśnij klawisz ~k~~PED_FIREWEAPON~ lub uderz zdalnie sterowanym samochodzikiem w koła pojazdu, aby spowodować eksplozję.
+[RCHELPA] { re3 change }
+Naciśnij klawisz ~k~~VEHICLE_FIREWEAPON~ lub uderz zdalnie sterowanym samochodzikiem w koła pojazdu, aby spowodować eksplozję.
[RC_1]
Masz 2 minuty, aby wysadzić tyle samochodów gangu Diablo, ile tylko się da!
@@ -4684,11 +4684,11 @@ ZNIKNIĘCIE LOVE'A
[RM5_6]
~g~Prawie go masz! Staranuj jego wóz swoim pojazdem albo rozwal materiałami wybuchowymi!
-[PBOAT_1]
-Naciśnij klawisz ~h~~k~~PED_FIREWEAPON~~w~, aby otworzyć ogień z działek na łodzi.
+[PBOAT_1] { re3 change }
+Naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby otworzyć ogień z działek na łodzi.
-[PBOAT_2]
-Naciśnij klawisz ~h~~k~~PED_FIREWEAPON~~w~, aby otworzyć ogień z działek na łodzi.
+[PBOAT_2] { re3 change }
+Naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby otworzyć ogień z działek na łodzi.
[DIAB1_B]
Mówi El Burro z gangu Diablo.
@@ -4702,11 +4702,11 @@ Organizuję dla rozrywki mały wyścig. Punkt startu znajduje się przy starej s
[DIAB1_F]
Skołuj sobie gablotę. Wygrywa ten, kto pierwszy zaliczy wszystkie punkty na trasie.
-[HM2_1]
-Użyj zdalnie sterowanych samochodzików, aby zniszczyć samochody opancerzone. Naciśnij klawisz ~h~~k~~PED_FIREWEAPON~~w~, aby zdetonować ładunek.
+[HM2_1] { re3 change }
+Użyj zdalnie sterowanych samochodzików, aby zniszczyć samochody opancerzone. Naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby zdetonować ładunek.
-[HM2_1A]
-Użyj zdalnie sterowanych samochodzików, aby zniszczyć samochody opancerzone. Naciśnij klawisz ~h~~k~~PED_FIREWEAPON~~w~, aby zdetonować ładunek.
+[HM2_1A] { re3 change }
+Użyj zdalnie sterowanych samochodzików, aby zniszczyć samochody opancerzone. Naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby zdetonować ładunek.
[HM2_2]
~r~Nie udało ci się zniszczyć wszystkich samochodów opancerzonych!
@@ -6517,11 +6517,11 @@ Ta karta pamięci (PS2) jest już sformatowana.
[FEDSAS4]
;=<> - ZMIANA WYBORU
-[SPRAY_4]
-Użyj klawisza ~h~~k~~PED_FIREWEAPON~~w~, aby strzelać z armatki wodnej.
+[SPRAY_4] { re3 change }
+Użyj klawisza ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby strzelać z armatki wodnej.
-[SPRAY_1]
-Użyj klawisza ~h~~k~~PED_FIREWEAPON~~w~, aby strzelać z armatki wodnej.
+[SPRAY_1] { re3 change }
+Użyj klawisza ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby strzelać z armatki wodnej.
[LITTLE]
MAŁY T
diff --git a/utils/gxt/russian.txt b/utils/gxt/russian.txt
index 4598dad5..2a61c7c1 100644
--- a/utils/gxt/russian.txt
+++ b/utils/gxt/russian.txt
@@ -2029,11 +2029,11 @@ Double Clef FM
[DODO_FT]
Вы были в воздухе ~1~ секунд!
-[DRIVE_A]
-Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~PED_FIREWEAPON~~w~ для выстрела.
+[DRIVE_A] { re3 change }
+Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~ для выстрела.
-[DRIVE_B]
-Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~PED_FIREWEAPON~~w~ для выстрела.
+[DRIVE_B] { re3 change }
+Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~ для выстрела.
[DSPLAY]
Экран
@@ -4309,17 +4309,17 @@ FormatMemCard 1 (teststuff)
[GA_5]
Я уже поставил в бомбу в эту тачку.
-[GA_6]
-Припаркуй тачку на место, нажми ~h~~k~~PED_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
+[GA_6] { re3 change }
+Припаркуй тачку на место, нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
-[GA_6B]
-Припаркуй тачку на место, нажми ~h~~k~~PED_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
+[GA_6B] { re3 change }
+Припаркуй тачку на место, нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
-[GA_7]
-Включи бомбу, нажав на ~h~~k~~PED_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
+[GA_7] { re3 change }
+Включи бомбу, нажав на ~h~~k~~VEHICLE_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
-[GA_7B]
-Включи бомбу, нажав на ~h~~k~~PED_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
+[GA_7B] { re3 change }
+Включи бомбу, нажав на ~h~~k~~VEHICLE_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
[GA_8]
Взорви бомбу с помощью детонатора.
@@ -4666,11 +4666,11 @@ Pull the ~h~right analog stick~w~ back to ~h~brake~w~, or to ~h~reverse~w~ if th
[HM1_H]
Сделай так, чтобы этих Девяток здесь не было!
-[HM2_1]
-Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~PED_FIREWEAPON~~w~.
+[HM2_1] { re3 change }
+Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~VEHICLE_FIREWEAPON~~w~.
-[HM2_1A]
-Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~PED_FIREWEAPON~~w~.
+[HM2_1A] { re3 change }
+Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~VEHICLE_FIREWEAPON~~w~.
[HM2_2]
~r~Ты так и не смог подорвать все броневики!
@@ -5272,11 +5272,11 @@ Italian
[KM1_7]
~g~Проезд только для полицейских!
-[KM1_8A]
-Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~PED_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
+[KM1_8A] { re3 change }
+Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
-[KM1_8D]
-Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~PED_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
+[KM1_8D] { re3 change }
+Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
[KM1_9]
~r~Установленной в машине бомбой ты должен был взорвать стену!
@@ -6520,11 +6520,11 @@ Parse Heap
[PAUSED]
ИГРА ОСТАНОВЛЕНА
-[PBOAT_1]
-Чтобы выстрелить из орудия катера нажми ~h~~k~~PED_FIREWEAPON~~w~.
+[PBOAT_1] { re3 change }
+Чтобы выстрелить из орудия катера нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~.
-[PBOAT_2]
-Чтобы выстрелить из орудия катера нажми ~h~~k~~PED_FIREWEAPON~~w~.
+[PBOAT_2] { re3 change }
+Чтобы выстрелить из орудия катера нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~.
[PCLOAD]
Loading File Data
@@ -6700,11 +6700,11 @@ Quit Options
[RCBANDT]
Багги Бандит
-[RCHELP]
-Чтобы подорвать машинку, нажми ~k~~PED_FIREWEAPON~, или врежься в колесо жертвы.
+[RCHELP] { re3 change }
+Чтобы подорвать машинку, нажми ~k~~VEHICLE_FIREWEAPON~, или врежься в колесо жертвы.
-[RCHELPA]
-Чтобы подорвать машинку, нажми ~k~~PED_FIREWEAPON~, или врежься в колесо жертвы.
+[RCHELPA] { re3 change }
+Чтобы подорвать машинку, нажми ~k~~VEHICLE_FIREWEAPON~, или врежься в колесо жертвы.
[RC_1]
У тебя 2 минуты, чтобы подорвать как можно больше машин Дьяволов!
@@ -7144,11 +7144,11 @@ Speeder
[SPRAY1]
В мастерской твою тачку ~h~отремонтируют~w~ и ~h~перекрасят~w~. Копы тебя больше ~h~не узнают~w~. Стоимость - ~h~$1000~w~. Первый раз это бесплатно.
-[SPRAY_1]
-Чтобы включить брандспойт, нажми на ~h~~k~~PED_FIREWEAPON~~w~.
+[SPRAY_1] { re3 change }
+Чтобы включить брандспойт, нажми на ~h~~k~~VEHICLE_FIREWEAPON~~w~.
-[SPRAY_4]
-Чтобы включить брандспойт, нажми на ~h~~k~~PED_FIREWEAPON~~w~.
+[SPRAY_4] { re3 change }
+Чтобы включить брандспойт, нажми на ~h~~k~~VEHICLE_FIREWEAPON~~w~.
[STADIUM]
Аспатрия
diff --git a/utils/gxt/spanish.txt b/utils/gxt/spanish.txt
index 921b7b9c..b5af1759 100644
--- a/utils/gxt/spanish.txt
+++ b/utils/gxt/spanish.txt
@@ -2246,11 +2246,11 @@ Una bomba de coche vale 1.000 dólares.
[GA_5]
Tu coche ya tiene una bomba instalada.
-[GA_6]
-¡Apárcalo, actívala pulsando ~h~~k~~PED_FIREWEAPON~~w~ y SAL PITANDO!
+[GA_6] { re3 change }
+¡Apárcalo, actívala pulsando ~h~~k~~VEHICLE_FIREWEAPON~~w~ y SAL PITANDO!
-[GA_7]
-Activa la bomba pulsando ~h~~k~~PED_FIREWEAPON~~w~. Estallará cuando se arranque el motor.
+[GA_7] { re3 change }
+Activa la bomba pulsando ~h~~k~~VEHICLE_FIREWEAPON~~w~. Estallará cuando se arranque el motor.
[GA_8]
Utiliza el detonador para activar la bomba.
@@ -3606,11 +3606,11 @@ que tendré trabajo para ti.
[JM6_1]
Llévanos al banco de la avenida principal.
-[GA_6B]
-¡Apárcalo, actívala pulsando ~h~~k~~PED_FIREWEAPON~~w~ y SAL PITANDO!
+[GA_6B] { re3 change }
+¡Apárcalo, actívala pulsando ~h~~k~~VEHICLE_FIREWEAPON~~w~ y SAL PITANDO!
-[GA_7B]
-Activa la bomba pulsando ~h~~k~~PED_FIREWEAPON~~w~. Estallará cuando se arranque el motor.
+[GA_7B] { re3 change }
+Activa la bomba pulsando ~h~~k~~VEHICLE_FIREWEAPON~~w~. Estallará cuando se arranque el motor.
[BAT1]
~g~¡Coge el bate!
@@ -4032,11 +4032,11 @@ Mete tu vehículo en el taller de pintura para perder tu ~h~nivel de búsqueda~w
[HM1_1]
~g~Cepíllate a 20 Purple Nines en 2 minutos y 30 segundos.
-[KM1_8A]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para ~h~activar la bomba~w~. Acuérdate de alejarte de ella.
+[KM1_8A] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para ~h~activar la bomba~w~. Acuérdate de alejarte de ella.
-[KM1_8D]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para ~h~activar la bomba~w~. Acuérdate de alejarte de ella.
+[KM1_8D] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para ~h~activar la bomba~w~. Acuérdate de alejarte de ella.
[KM1_12]
~g~¡Llévalo al dojo, pero deshazte primero de la policía!
@@ -4173,11 +4173,11 @@ No necesito tu documentación, pareces de fiar.
[DETON]
DETONACIÓN:
-[DRIVE_A]
-Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierda o a la derecha y pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar.
+[DRIVE_A] { re3 change }
+Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierda o a la derecha y pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar.
-[DRIVE_B]
-Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierda o a la derecha y pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar.
+[DRIVE_B] { re3 change }
+Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierda o a la derecha y pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar.
[RECORD]
~g~¡NUEVO RÉCORD!
@@ -4185,11 +4185,11 @@ Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierd
[NRECORD]
~r~¡NO HAY UN NUEVO RÉCORD!
-[RCHELP]
-Pulsa ~k~~PED_FIREWEAPON~ o lleva el coche teledirigido hasta las ruedas de otro coche para detonarlo.
+[RCHELP] { re3 change }
+Pulsa ~k~~VEHICLE_FIREWEAPON~ o lleva el coche teledirigido hasta las ruedas de otro coche para detonarlo.
-[RCHELPA]
-Pulsa ~k~~PED_FIREWEAPON~ o lleva el coche teledirigido hasta las ruedas de otro coche para detonarlo.
+[RCHELPA] { re3 change }
+Pulsa ~k~~VEHICLE_FIREWEAPON~ o lleva el coche teledirigido hasta las ruedas de otro coche para detonarlo.
[RC_1]
¡Tienes 2 minutos para destruir todos los coches de los Diablos que puedas!
@@ -4689,11 +4689,11 @@ Luigi dijo que eras de fiar, así que vuelve más tarde,
[RM5_6]
~g~¡Ha salido de la ambulancia! ¡Cárgate su escayola con un vehículo o una explosión!
-[PBOAT_1]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar los cañones de la lancha.
+[PBOAT_1] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar los cañones de la lancha.
-[PBOAT_2]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar los cañones de la lancha.
+[PBOAT_2] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar los cañones de la lancha.
[DIAB1_B]
Al habla El Burro, de los Diablos.
@@ -4707,11 +4707,11 @@ Hay una carrera que empezará junto a la sala Clásica, cerca del puente Callaha
[DIAB1_F]
Consíguete un buen carro y el primero que pase por todos los puntos de control se llevará el premio.
-[HM2_1]
-Usa los coches teledirigidos para destruir los furgones blindados. Pulsa ~h~~k~~PED_FIREWEAPON~ ~w~para detonarlos.
+[HM2_1] { re3 change }
+Usa los coches teledirigidos para destruir los furgones blindados. Pulsa ~h~~k~~VEHICLE_FIREWEAPON~ ~w~para detonarlos.
-[HM2_1A]
-Usa los coches teledirigidos para destruir los furgones blindados. Pulsa ~h~~k~~PED_FIREWEAPON~ ~w~para detonarlos.
+[HM2_1A] { re3 change }
+Usa los coches teledirigidos para destruir los furgones blindados. Pulsa ~h~~k~~VEHICLE_FIREWEAPON~ ~w~para detonarlos.
[HM2_2]
~r~¡No has destruido todos los furgones blindados!
@@ -6518,11 +6518,11 @@ Esta Memory Card (PS2) ya está formateada.
[FEDSAS4]
;=<> - CAMBIAR SELECCIÓN
-[SPRAY_4]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar el cañón de agua.
+[SPRAY_4] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar el cañón de agua.
-[SPRAY_1]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar el cañón de agua.
+[SPRAY_1] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar el cañón de agua.
[LITTLE]
LITTLE T
diff --git a/vendor/librw b/vendor/librw
-Subproject 60a5ace16309ccd3d174a3ec14a106254093406
+Subproject 5c95300890559c85a2764bc200361f904cd4f9f