From fd2c74727e4342bb85054c3a7f4ab4df70617a7a Mon Sep 17 00:00:00 2001 From: majcosta <34732933+majcosta@users.noreply.github.com> Date: Tue, 21 Jul 2026 05:33:03 -0300 Subject: [PATCH] Make LANGUAGE switchable in runtime (#653) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit squashed into a single commit because doing it in steps that all compiled involved a lot of boilerplate that is pointless to commit to the repository. GH still has the PR for reference. g_lang, MAX_MESSAGES_ON_MAP_BOTTOM, and GetLanguagePrefix() were compile-time constants selected by the ENGLISH/GERMAN/... build define. They're now runtime, defaulting to the same per-exe value the define used to pick, and overridable at startup from [Ja2 Settings] LANGUAGE in Ja2.ini. - XMLTacticalMessages is filled at runtime from NewTacticalMessages.xml, never from compiled-in per-language data: all 8 per-language definitions were the identical all-zero { L"" }. Delete them and define one shared buffer in Utils/XML_Language.cpp (the loader) instead of pointer-rebinding it like the static tables — this drops 9 dead 800KB zero-buffers (8 namespaced copies in LanguageStrings.cpp plus the standalone one) and leaves no bind-ordering hazard for the XML load path. - ExportStrings.cpp privately recompiled one language's full text table by #including the raw _Text.cpp inside namespace Loc, keyed off the exe-level ENGLISH/GERMAN/... compile macro (whichever the build happened to select). That's redundant with the pointer globals every other subsystem already uses (Text.h / LanguageStrings.cpp). Drop the private copy; the unqualified table names in Loc::ExportStrings now resolve to the global pointer externs, which BindLanguageStrings has already rebound to the runtime g_lang by the time this runs (EXPORT_STRINGS ini flag, checked after GetRuntimeSettings in sgp.cpp). gs_Lang (used only by Loc::Translate for the Polish/Russian byte remap on raw .edt exports) is now derived from g_lang via ToLocLanguage, so the export always matches whatever language is actually active instead of a compile-time pick. - Editor/popupmenu.cpp and Strategic/Scheduling.cpp kept their own call-site extern of gszScheduleActions as CHAR16[NUM_SCHEDULE_ACTIONS][20] after the real definition changed into a rebindable pointer (CHAR16 (*)[20], LanguageStrings.cpp). MSVC decays the outer array dimension when mangling globals, so both declarations produce the same symbol (?gszScheduleActions@@3PAY0BE@_WA) and the mismatch linked silently -- but the array-typed TUs then indexed the 4-byte pointer slot itself as string data, so the editor schedule popup and the map schedule message text read garbage. - add text.def to be single-source of truth on symbol names and use it .much simpler, less error prone if adding more strings - add pseudo interface for language state. MAX_SAGES_ON_BOTTOM must always change in lockstep with g_lang. this isn't foolproof but better --------- Co-Authored-By: Claude Fable 5 Co-authored-by: Claude Opus 4.8 Co-authored-by: Claude Sonnet 4.5 --- CMakeLists.txt | 47 +- Editor/Cursor Modes.h | 4 +- Editor/EditorMercs.h | 2 +- Editor/popupmenu.cpp | 2 +- Ja2/Intro.cpp | 2 +- Ja2/MPChatScreen.cpp | 2 +- Ja2/MessageBoxScreen.cpp | 2 +- Laptop/CharProfile.h | 2 +- Laptop/IMP Personality Entrance.h | 4 +- Laptop/IMP Text System.h | 8 +- Strategic/Assignments.cpp | 2 +- Strategic/Map Screen Interface.cpp | 2 +- Strategic/MiniEvents.cpp | 2 +- Strategic/QuestText.h | 4 +- Strategic/Scheduling.cpp | 2 +- Strategic/Strategic Town Loyalty.cpp | 2 +- Strategic/mapscreen.cpp | 4 +- Strategic/strategicmap.cpp | 2 +- TODO | 1 - Tactical/Keys.h | 3 +- Tactical/XML_Profiles.cpp | 2 +- TileEngine/Ambient Control.cpp | 2 +- Utils/XML_Language.cpp | 5 + cmake/CopyUserPresetTemplate.cmake | 1 - cmake/presets/CMakePresets.json | 2 - i18n/CMakeLists.txt | 17 +- i18n/ExportStrings.cpp | 557 ++++++++------- i18n/LanguageStrings.cpp | 140 ++++ i18n/_ChineseText.cpp | 24 +- i18n/_DutchText.cpp | 26 +- i18n/_EnglishText.cpp | 25 +- i18n/_FrenchText.cpp | 24 +- i18n/_GermanText.cpp | 25 +- i18n/_ItalianText.cpp | 24 +- i18n/_Ja25ChineseText.cpp | 17 +- i18n/_Ja25DutchText.cpp | 18 +- i18n/_Ja25EnglishText.cpp | 17 +- i18n/_Ja25FrenchText.cpp | 18 +- i18n/_Ja25GermanText.cpp | 18 +- i18n/_Ja25ItalianText.cpp | 18 +- i18n/_Ja25PolishText.cpp | 19 +- i18n/_Ja25RussianText.cpp | 17 +- i18n/_PolishText.cpp | 25 +- i18n/_RussianText.cpp | 24 +- i18n/include/Text.h | 987 +++++++++++++-------------- i18n/include/_Ja25DutchText.h | 72 +- i18n/include/_Ja25EnglishText.h | 72 +- i18n/include/_Ja25FrenchText.h | 72 +- i18n/include/_Ja25GermanText.h | 72 +- i18n/include/_Ja25ItalianText.h | 72 +- i18n/include/_Ja25PolishText.h | 72 +- i18n/include/_Ja25RussianText.h | 72 +- i18n/include/language.hpp | 17 +- i18n/language.cpp | 105 +-- i18n/text.def | 519 ++++++++++++++ sgp/sgp.cpp | 12 + 56 files changed, 1826 insertions(+), 1482 deletions(-) create mode 100644 i18n/LanguageStrings.cpp create mode 100644 i18n/text.def diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f682d0f..0b196d1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,15 +102,13 @@ foreach(lib IN LISTS Ja2_Libs) add_subdirectory(${lib}) endforeach() -# language library relies on Application _and_ Language preprocessor definition. very bad. +# language library relies on Application preprocessor definition; compiled once per app +# with all 8 languages built in and selected at runtime (docs/plans/language-design.md). add_subdirectory(i18n) -# simple function to validate Languages and Application choices +# simple function to validate the Application choice include(cmake/ValidateOptions.cmake) -set(ValidLanguages CHINESE DUTCH ENGLISH FRENCH GERMAN ITALIAN POLISH RUSSIAN) -ValidateOptions("${ValidLanguages}" "Languages" "${Languages}" "LangTargets") - set(ValidApplications JA2 JA2MAPEDITOR JA2UB JA2UBMAPEDITOR) ValidateOptions("${ValidApplications}" "Applications" "${Applications}" "ApplicationTargets") @@ -136,28 +134,27 @@ foreach(app IN LISTS ApplicationTargets) target_compile_definitions(${game_library} PRIVATE ${compilationFlags} ${debugFlags}) endforeach() - foreach(lang IN LISTS LangTargets) - # executable for an application/language combination, e.g. JA2_ENGLISH.exe - set(exe ${app}_${lang}) - add_executable(${exe} WIN32 - sgp/sgp.cpp - Ja2/Res/ja2.rc - ) - target_link_libraries(${exe} PRIVATE ${Ja2_Libraries} $) - target_link_options(${exe} PRIVATE $) - target_compile_definitions(${exe} PRIVATE ${compilationFlags} ${debugFlags}) + # executable for the application, e.g. JA2.exe + set(exe ${app}) + add_executable(${exe} WIN32 + sgp/sgp.cpp + Ja2/Res/ja2.rc + ) + target_link_libraries(${exe} PRIVATE ${Ja2_Libraries} $) + target_link_options(${exe} PRIVATE $) + target_compile_definitions(${exe} PRIVATE ${compilationFlags} ${debugFlags}) - # language library for an application, e.g. JA2MAPEDITOR_ENGLISH_i18n - set(language_library ${exe}_i18n) - add_library(${language_library}) - target_sources(${language_library} PRIVATE ${i18nSrc}) - target_compile_definitions(${language_library} PRIVATE ${compilationFlags} ${debugFlags} ${lang}) - target_link_libraries(${exe} PRIVATE ${language_library}) + # language library for the application, e.g. JA2MAPEDITOR_i18n — one per app, all 8 + # languages compiled in, selected at runtime by BindLanguageStrings + set(language_library ${exe}_i18n) + add_library(${language_library}) + target_sources(${language_library} PRIVATE ${i18nSrc}) + target_compile_definitions(${language_library} PRIVATE ${compilationFlags} ${debugFlags}) + target_link_libraries(${exe} PRIVATE ${language_library}) - # go through all game libraries again and link them to the app/language executable - foreach(lib IN LISTS Ja2_Libs) - target_link_libraries(${exe} PRIVATE ${app}_${lib}) - endforeach() + # go through all game libraries again and link them to the app executable + foreach(lib IN LISTS Ja2_Libs) + target_link_libraries(${exe} PRIVATE ${app}_${lib}) endforeach() # for SGP only diff --git a/Editor/Cursor Modes.h b/Editor/Cursor Modes.h index fe9e3af3..51cd16a1 100644 --- a/Editor/Cursor Modes.h +++ b/Editor/Cursor Modes.h @@ -29,7 +29,7 @@ void IncreaseSelectionDensity(); void DecreaseSelectionDensity(); void RemoveCursors(); -extern STR16 wszSelType[6]; +extern STR16 *wszSelType; extern BOOLEAN gfCurrentSelectionWithRightButton; @@ -40,4 +40,4 @@ extern BOOLEAN gfCurrentSelectionWithRightButton; #endif -#endif +#endif diff --git a/Editor/EditorMercs.h b/Editor/EditorMercs.h index 64dc4a9e..2644e0f5 100644 --- a/Editor/EditorMercs.h +++ b/Editor/EditorMercs.h @@ -325,7 +325,7 @@ extern UINT8 gubCurrMercMode, gubPrevMercMode; #define NUM_DIFF_LVLS 5 -extern STR16 zDiffNames[NUM_DIFF_LVLS]; +extern STR16 *zDiffNames; extern INT16 sCurBaseDiff; extern INT16 gsSelectedMercID; extern INT32 gsSelectedMercGridNo; diff --git a/Editor/popupmenu.cpp b/Editor/popupmenu.cpp index 34feabd6..19cf5ef1 100644 --- a/Editor/popupmenu.cpp +++ b/Editor/popupmenu.cpp @@ -40,7 +40,7 @@ MOUSE_REGION popupRegion; UINT16 gusEntryHeight; BOOLEAN fWaitingForLButtonRelease = FALSE; -extern CHAR16 gszScheduleActions[ NUM_SCHEDULE_ACTIONS ][20]; +extern CHAR16 (*gszScheduleActions)[20]; // NUM_SCHEDULE_ACTIONS entries //Finds the string for any popup menu in JA2 -- the strings are stored //in different ways in each instance. diff --git a/Ja2/Intro.cpp b/Ja2/Intro.cpp index 338da0cd..17c3940f 100644 --- a/Ja2/Intro.cpp +++ b/Ja2/Intro.cpp @@ -174,7 +174,7 @@ private: static VideoPlayer s_VP(VideoPlayer::VT_SMK | VideoPlayer::VT_BINK); -extern STR16 gzIntroScreen[]; +extern STR16* gzIntroScreen; extern HVSURFACE ghFrameBuffer; enum diff --git a/Ja2/MPChatScreen.cpp b/Ja2/MPChatScreen.cpp index 5fa596a6..06eb2aa7 100644 --- a/Ja2/MPChatScreen.cpp +++ b/Ja2/MPChatScreen.cpp @@ -89,7 +89,7 @@ extern BOOLEAN gfDontOverRideSaveBuffer; //this variable can be unset if u extern void HandleTacticalUILoseCursorFromOtherScreen( ); -extern STR16 pUpdatePanelButtons[]; +extern STR16* pUpdatePanelButtons; #define NUM_CHAT_TOGGLES 2 diff --git a/Ja2/MessageBoxScreen.cpp b/Ja2/MessageBoxScreen.cpp index 3e175bb2..ceee0e61 100644 --- a/Ja2/MessageBoxScreen.cpp +++ b/Ja2/MessageBoxScreen.cpp @@ -69,7 +69,7 @@ BOOLEAN gfStartedFromMapScreen = FALSE; BOOLEAN fRestoreBackgroundForMessageBox = FALSE; BOOLEAN gfDontOverRideSaveBuffer = TRUE; //this variable can be unset if ur in a non gamescreen and DONT want the msg box to use the save buffer extern void HandleTacticalUILoseCursorFromOtherScreen( ); -extern STR16 pUpdatePanelButtons[]; +extern STR16* pUpdatePanelButtons; CHAR16 gzUserDefinedButton1[ 128 ]; CHAR16 gzUserDefinedButton2[ 128 ]; diff --git a/Laptop/CharProfile.h b/Laptop/CharProfile.h index c816fee2..0f685854 100644 --- a/Laptop/CharProfile.h +++ b/Laptop/CharProfile.h @@ -75,7 +75,7 @@ extern INT32 iAddExplosives ; extern INT32 iAddMechanical ; // pop up strings -extern STR16 pImpPopUpStrings[]; +extern STR16* pImpPopUpStrings; //extern BOOLEAN fIMPCompletedFlag; diff --git a/Laptop/IMP Personality Entrance.h b/Laptop/IMP Personality Entrance.h index 3cb27fef..029ccc8a 100644 --- a/Laptop/IMP Personality Entrance.h +++ b/Laptop/IMP Personality Entrance.h @@ -7,6 +7,6 @@ void RenderIMPPersonalityEntrance( void ); void ExitIMPPersonalityEntrance( void ); void HandleIMPPersonalityEntrance( void ); -STR16 pSkillTraitBeginIMPStrings[]; +extern STR16* pSkillTraitBeginIMPStrings; -#endif +#endif diff --git a/Laptop/IMP Text System.h b/Laptop/IMP Text System.h index d0d0906a..ec3e5ad1 100644 --- a/Laptop/IMP Text System.h +++ b/Laptop/IMP Text System.h @@ -9,13 +9,13 @@ void PrintImpText( void ); void PrintIMPPersonalityQuizQuestionAndAnsers( void ); // buttons text -extern STR16 pImpButtonText[]; +extern STR16* pImpButtonText; // extra strings not found in IMP Text Document -extern STR16 pExtraIMPStrings[]; +extern STR16* pExtraIMPStrings; -extern STR16 pSkillTraitBeginIMPStrings[]; // added - SANDRO +extern STR16* pSkillTraitBeginIMPStrings; // added - SANDRO enum{ IMP_HOME_1, @@ -145,4 +145,4 @@ enum{ }; -#endif +#endif diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 5867c470..1de89e74 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -186,7 +186,7 @@ REPAIR_PASS_SLOTS_TYPE gRepairPassSlotList[ NUM_REPAIR_PASS_TYPES ] = { /* HEADROCK HAM B2.8: LBE Slot pass */ 0, 5, VESTPOCKPOS, LTHIGHPOCKPOS, RTHIGHPOCKPOS, CPACKPOCKPOS, BPACKPOCKPOS, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, }; -extern STR16 sRepairsDoneString[]; +extern STR16* sRepairsDoneString; // PopUp Box Handles INT32 ghAssignmentBox = -1; diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 4905ae11..8c5ec6c2 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -194,7 +194,7 @@ INT32 iHeightOfInitFastHelpText = 0; extern INT32 giMapContractButton; extern INT32 giCharInfoButton[]; -extern STR16 pUpdatePanelButtons[]; +extern STR16* pUpdatePanelButtons; // the list of soldiers that are moving SOLDIERTYPE * pSoldierMovingList[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; diff --git a/Strategic/MiniEvents.cpp b/Strategic/MiniEvents.cpp index 7ab75a28..96813940 100644 --- a/Strategic/MiniEvents.cpp +++ b/Strategic/MiniEvents.cpp @@ -49,7 +49,7 @@ extern "C" { extern CHAR16 gzUserDefinedButton1[ 128 ]; extern CHAR16 gzUserDefinedButton2[ 128 ]; -extern CHAR16 pTownNames[MAX_TOWNS][MAX_TOWN_NAME_LENGHT]; +extern CHAR16 (*pTownNames)[MAX_TOWN_NAME_LENGHT]; static size_t MAX_BUTTON_LENGTH = 60; static size_t MAX_BODY_LENGTH = 450; diff --git a/Strategic/QuestText.h b/Strategic/QuestText.h index 268658f2..b811f241 100644 --- a/Strategic/QuestText.h +++ b/Strategic/QuestText.h @@ -2,8 +2,8 @@ #define _QUEST_TEXT_H_ -STR16 QuestDescText[]; -STR16 FactDescText[]; +extern STR16 *QuestDescText; +extern STR16 *FactDescText; #endif diff --git a/Strategic/Scheduling.cpp b/Strategic/Scheduling.cpp index 2fcb666b..566c18ac 100644 --- a/Strategic/Scheduling.cpp +++ b/Strategic/Scheduling.cpp @@ -31,7 +31,7 @@ class SOLDIERTYPE; #ifdef JA2EDITOR -extern CHAR16 gszScheduleActions[ NUM_SCHEDULE_ACTIONS ][20]; +extern CHAR16 (*gszScheduleActions)[20]; // NUM_SCHEDULE_ACTIONS entries #endif BOOLEAN GetEarliestMorningScheduleEvent( SCHEDULENODE *pSchedule, UINT32 * puiTime ); diff --git a/Strategic/Strategic Town Loyalty.cpp b/Strategic/Strategic Town Loyalty.cpp index 87c9d37d..53eb9540 100644 --- a/Strategic/Strategic Town Loyalty.cpp +++ b/Strategic/Strategic Town Loyalty.cpp @@ -180,7 +180,7 @@ INT16 sWorldSectorLocationOfFirstBattle = 0; // preprocess sector for mercs in it extern BOOLEAN fSectorsWithSoldiers[ MAP_WORLD_X * MAP_WORLD_X ][ 4 ]; -extern CHAR16 pTownNames[MAX_TOWNS][MAX_TOWN_NAME_LENGHT]; +extern CHAR16 (*pTownNames)[MAX_TOWN_NAME_LENGHT]; diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 040f41d5..a4ef4593 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -613,8 +613,8 @@ extern BOOLEAN gfAutoAIAware; extern void HandlePreBattleInterfaceStates(); // the title for the contract button on the character info panel in the upper left portion of the mapscreen -extern STR16 pContractButtonString[]; -extern STR16 pBullseyeStrings[]; +extern STR16* pContractButtonString; +extern STR16* pBullseyeStrings; extern OBJECTTYPE *gpItemDescObject; diff --git a/Strategic/strategicmap.cpp b/Strategic/strategicmap.cpp index e3f97a0f..32a4cc93 100644 --- a/Strategic/strategicmap.cpp +++ b/Strategic/strategicmap.cpp @@ -357,7 +357,7 @@ extern HVSURFACE ghFrameBuffer; extern BOOLEAN gfOverrideSector; extern BOOLEAN sBadSectorsList[WORLD_MAP_X][WORLD_MAP_X]; -extern STR16 pBullseyeStrings[]; +extern STR16* pBullseyeStrings; extern void HandleRPCDescription( ); diff --git a/TODO b/TODO index e2e87827..e4bb3a3c 100644 --- a/TODO +++ b/TODO @@ -2,4 +2,3 @@ # priority (LOW,HIGH) and description LOW readd the C4838 (https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4838) warning to CMakeLists.txt once they're all fixed in the code -HIGH get rid of ENGLISH, GERMAN, etc preprocessor definitions completely. that way i18n can be built just once and language can be changed in the options screen pending game restart (hotloading will likely require more work) diff --git a/Tactical/Keys.h b/Tactical/Keys.h index cd92ae38..315e8267 100644 --- a/Tactical/Keys.h +++ b/Tactical/Keys.h @@ -167,7 +167,6 @@ extern BOOLEAN KeyExistsInInventory( SOLDIERTYPE *pSoldier, UINT8 ubKeyID ); extern BOOLEAN KeyExistsInKeyRing( SOLDIERTYPE *pSoldier, UINT8 ubKeyID, UINT8 * pubPos ); extern BOOLEAN SoldierHasKey( SOLDIERTYPE *pSoldier, UINT8 ubKeyID ); -extern STR16 sKeyDescriptionStrings[]; /********************************** * Door utils add by Kris Morness * **********************************/ @@ -281,4 +280,4 @@ void AttachStringToDoor( INT32 sGridNo ); void DropKeysInKeyRing( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, INT8 bVisible, BOOLEAN fAddToDropList, INT32 iDropListSlot, BOOLEAN fUseUnLoaded ); -#endif +#endif diff --git a/Tactical/XML_Profiles.cpp b/Tactical/XML_Profiles.cpp index 79c868ac..4708a020 100644 --- a/Tactical/XML_Profiles.cpp +++ b/Tactical/XML_Profiles.cpp @@ -1180,7 +1180,7 @@ profileEndElementHandle(void *userData, const XML_Char *name) #include // added by Flugente for vfs-stuff #include -extern STR16 gzMercSkillTextNew[]; +extern STR16* gzMercSkillTextNew; void AnalyzeProfiles() { diff --git a/TileEngine/Ambient Control.cpp b/TileEngine/Ambient Control.cpp index 85d559d4..a7fd854c 100644 --- a/TileEngine/Ambient Control.cpp +++ b/TileEngine/Ambient Control.cpp @@ -22,7 +22,7 @@ UINT32 guiFireAmbientLastUpdate = 0; extern STR8 pVertStrings[]; extern STR8 pHortStrings[]; -extern CHAR16 pTownNames[MAX_TOWNS][MAX_TOWN_NAME_LENGHT]; +extern CHAR16 (*pTownNames)[MAX_TOWN_NAME_LENGHT]; UINT8 gubCurrentSteadyStateAmbience = SSA_NONE; UINT8 gubCurrentSteadyStateSound = 0; diff --git a/Utils/XML_Language.cpp b/Utils/XML_Language.cpp index 0c79cfc5..9e583cd8 100644 --- a/Utils/XML_Language.cpp +++ b/Utils/XML_Language.cpp @@ -28,6 +28,11 @@ typedef enum LANGUAGE_LOCATION zlanguageText[1000]; +// Single shared buffer for all languages (declared in Text.h): filled at runtime from +// NewTacticalMessages.xml below, never from compiled-in per-language data, so it is not +// part of the BindLanguageStrings pointer-rebind scheme. +CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS]; + typedef struct { LANGUAGE_PARSE_STAGE curElement; diff --git a/cmake/CopyUserPresetTemplate.cmake b/cmake/CopyUserPresetTemplate.cmake index fda0af34..44fba52e 100644 --- a/cmake/CopyUserPresetTemplate.cmake +++ b/cmake/CopyUserPresetTemplate.cmake @@ -1,6 +1,5 @@ function(CopyUserPresetTemplate) if( - NOT DEFINED Languages AND NOT DEFINED Applications AND NOT EXISTS "${CMAKE_SOURCE_DIR}/CMakePresets.json" AND NOT EXISTS "${CMAKE_SOURCE_DIR}/CMakeUserPresets.json" diff --git a/cmake/presets/CMakePresets.json b/cmake/presets/CMakePresets.json index ffbc4788..381951d3 100644 --- a/cmake/presets/CMakePresets.json +++ b/cmake/presets/CMakePresets.json @@ -7,8 +7,6 @@ "generator": "Ninja", "binaryDir": "${sourceDir}/build/${presetName}", "cacheVariables": { - // Valid choices: ENGLISH;GERMAN;FRENCH;ITALIAN;POLISH;DUTCH;RUSSIAN;CHINESE. If empty (""), will configure all. - "Languages": "ENGLISH", // Valid choices: JA2;JA2MAPEDITOR;JA2UB;JA2UBMAPEDITOR. If empty (""), will configure all. "Applications": "JA2", // For debugging: enter your desired gamedir. e.g. C:/Games/JA2 diff --git a/i18n/CMakeLists.txt b/i18n/CMakeLists.txt index 6d200975..0d2a1dbd 100644 --- a/i18n/CMakeLists.txt +++ b/i18n/CMakeLists.txt @@ -1,23 +1,8 @@ set(i18nSrc "${CMAKE_CURRENT_SOURCE_DIR}/language.cpp" +"${CMAKE_CURRENT_SOURCE_DIR}/LanguageStrings.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/Ja2 Libs.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/ExportStrings.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_ChineseText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_DutchText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_EnglishText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_FrenchText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_GermanText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_ItalianText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_Ja25ChineseText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_Ja25DutchText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_Ja25EnglishText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_Ja25FrenchText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_Ja25GermanText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_Ja25ItalianText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_Ja25PolishText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_Ja25RussianText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_PolishText.cpp" -"${CMAKE_CURRENT_SOURCE_DIR}/_RussianText.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/Multi Language Graphic Utils.cpp" PARENT_SCOPE ) diff --git a/i18n/ExportStrings.cpp b/i18n/ExportStrings.cpp index 5c080e0a..1b5dbab4 100644 --- a/i18n/ExportStrings.cpp +++ b/i18n/ExportStrings.cpp @@ -29,42 +29,39 @@ namespace Loc ////////////////////////////////////////////////////////// -//#define GERMAN #include "Text.h" -namespace Loc +#include + +// Declared only as bare externs at their call sites (Ja2/, Strategic/) -- the same +// escapees the C10 header sweep and Cn+1 residue (docs/plans/language-design.md) missed +// because Text.h never declared them. This TU needs them too. +extern STR16* gzIntroScreen; +extern STR16* pBullseyeStrings; +extern STR16* pContractButtonString; +extern STR16* pUpdatePanelButtons; +extern STR16* sRepairsDoneString; + +// Table symbols below (Loc::pTownNames etc.) are unqualified inside Loc::ExportStrings's +// body, so they resolve to the pointer globals in Text.h/LanguageStrings.cpp -- rebound to +// the runtime-selected g_lang by BindLanguageStrings before this ever runs (sgp.cpp, +// GetRuntimeSettings then EXPORT_STRINGS ini check). No private per-language copy needed. +namespace { -#ifdef CHINESE -# include "_ChineseText.cpp" - static Loc::Language gs_Lang = Loc::Chinese; -#endif -#ifdef DUTCH -# include "_DutchText.cpp" - static Loc::Language gs_Lang = Loc::Dutch; -#endif -#ifdef ENGLISH -# include "_EnglishText.cpp" - static Loc::Language gs_Lang = Loc::English; -#endif -#ifdef FRENCH -# include "_FrenchText.cpp" - static Loc::Language gs_Lang = Loc::French; -#endif -#ifdef GERMAN -# include "_GermanText.cpp" - static Loc::Language gs_Lang = Loc::German; -#endif -#ifdef ITALIAN -# include "_ItalianText.cpp" - static Loc::Language gs_Lang = Loc::Italian; -#endif -#ifdef POLISH -# include "_PolishText.cpp" - static Loc::Language gs_Lang = Loc::Polish; -#endif -#ifdef RUSSIAN -# include "_RussianText.cpp" - static Loc::Language gs_Lang = Loc::Russian; -#endif + Loc::Language ToLocLanguage(i18n::Lang lang) + { + switch (lang) + { + case i18n::Lang::zh: return Loc::Chinese; + case i18n::Lang::nl: return Loc::Dutch; + case i18n::Lang::en: return Loc::English; + case i18n::Lang::fr: return Loc::French; + case i18n::Lang::de: return Loc::German; + case i18n::Lang::it: return Loc::Italian; + case i18n::Lang::pl: return Loc::Polish; + case i18n::Lang::ru: return Loc::Russian; + } + return Loc::English; + } } #include "Assignments.h" @@ -102,271 +99,271 @@ bool Loc::ExportStrings() vfs::PropertyContainer props; - //not_required ExportSection(props, L"Ja2Credits", Loc::pCreditsJA2113, 0, 7); - ExportSection(props, L"WeaponType", Loc::WeaponType, 0, MAXITEMS); - ExportSection(props, L"TeamTurn", Loc::TeamTurnString, 0, 10); - ExportSection(props, L"Message", Loc::Message, 0, TEXT_NUM_STR_MESSAGE); - ExportSection(props, L"TownNames", Loc::pTownNames, 0, MAX_TOWNS); - ExportSection(props, L"Time", Loc::sTimeStrings, 0, 6); - ExportSection(props, L"Assignment", Loc::pAssignmentStrings, 0, NUM_ASSIGNMENTS); - ExportSection(props, L"PersonnelAssignment", Loc::pPersonnelAssignmentStrings, 0, NUM_ASSIGNMENTS); - ExportSection(props, L"LongAssignment", Loc::pLongAssignmentStrings, 0, NUM_ASSIGNMENTS); - ExportSection(props, L"Militia", Loc::pMilitiaString, 0, 3); + //not_required ExportSection(props, L"Ja2Credits", pCreditsJA2113, 0, 7); + ExportSection(props, L"WeaponType", WeaponType, 0, MAXITEMS); + ExportSection(props, L"TeamTurn", TeamTurnString, 0, 10); + ExportSection(props, L"Message", Message, 0, TEXT_NUM_STR_MESSAGE); + ExportSection(props, L"TownNames", pTownNames, 0, MAX_TOWNS); + ExportSection(props, L"Time", sTimeStrings, 0, 6); + ExportSection(props, L"Assignment", pAssignmentStrings, 0, NUM_ASSIGNMENTS); + ExportSection(props, L"PersonnelAssignment", pPersonnelAssignmentStrings, 0, NUM_ASSIGNMENTS); + ExportSection(props, L"LongAssignment", pLongAssignmentStrings, 0, NUM_ASSIGNMENTS); + ExportSection(props, L"Militia", pMilitiaString, 0, 3); - ExportSection(props, L"MilitiaButton", Loc::pMilitiaButtonString, 0, 2); - ExportSection(props, L"Condition", Loc::pConditionStrings, 0, 9); - ExportSection(props, L"EpcMenu", Loc::pEpcMenuStrings, 0, MAX_EPC_MENU_STRING_COUNT); - ExportSection(props, L"Contract", Loc::pContractStrings, 0, MAX_CONTRACT_MENU_STRING_COUNT); - ExportSection(props, L"POW", Loc::pPOWStrings, 0, 2); - ExportSection(props, L"InvPanelTitle", Loc::pInvPanelTitleStrings, 0, 5); - ExportSection(props, L"LongAttribute", Loc::pLongAttributeStrings, 0, 10); - ExportSection(props, L"ShortAttribute", Loc::pShortAttributeStrings, 0, 10); - ExportSection(props, L"UpperLeftMapScreen", Loc::pUpperLeftMapScreenStrings, 0, 6); - ExportSection(props, L"Training", Loc::pTrainingStrings, 0, 4); + ExportSection(props, L"MilitiaButton", pMilitiaButtonString, 0, 2); + ExportSection(props, L"Condition", pConditionStrings, 0, 9); + ExportSection(props, L"EpcMenu", pEpcMenuStrings, 0, MAX_EPC_MENU_STRING_COUNT); + ExportSection(props, L"Contract", pContractStrings, 0, MAX_CONTRACT_MENU_STRING_COUNT); + ExportSection(props, L"POW", pPOWStrings, 0, 2); + ExportSection(props, L"InvPanelTitle", pInvPanelTitleStrings, 0, 5); + ExportSection(props, L"LongAttribute", pLongAttributeStrings, 0, 10); + ExportSection(props, L"ShortAttribute", pShortAttributeStrings, 0, 10); + ExportSection(props, L"UpperLeftMapScreen", pUpperLeftMapScreenStrings, 0, 6); + ExportSection(props, L"Training", pTrainingStrings, 0, 4); - ExportSection(props, L"GuardMenu", Loc::pGuardMenuStrings, 0, 10); - ExportSection(props, L"OtherGuardMenu", Loc::pOtherGuardMenuStrings, 0, 10); - ExportSection(props, L"AssignMenu", Loc::pAssignMenuStrings, 0, MAX_ASSIGN_STRING_COUNT); - ExportSection(props, L"MilitiaControlMenu", Loc::pMilitiaControlMenuStrings, 0, MAX_MILCON_STRING_COUNT); - ExportSection(props, L"RemoveMerc", Loc::pRemoveMercStrings, 0, MAX_REMOVE_MERC_COUNT); - ExportSection(props, L"AttributeMenu", Loc::pAttributeMenuStrings, 0, MAX_ATTRIBUTE_STRING_COUNT); - ExportSection(props, L"TrainingMenu", Loc::pTrainingMenuStrings, 0, MAX_TRAIN_STRING_COUNT); - ExportSection(props, L"SquadMenu", Loc::pSquadMenuStrings, 0, MAX_SQUAD_MENU_STRING_COUNT); + ExportSection(props, L"GuardMenu", pGuardMenuStrings, 0, 10); + ExportSection(props, L"OtherGuardMenu", pOtherGuardMenuStrings, 0, 10); + ExportSection(props, L"AssignMenu", pAssignMenuStrings, 0, MAX_ASSIGN_STRING_COUNT); + ExportSection(props, L"MilitiaControlMenu", pMilitiaControlMenuStrings, 0, MAX_MILCON_STRING_COUNT); + ExportSection(props, L"RemoveMerc", pRemoveMercStrings, 0, MAX_REMOVE_MERC_COUNT); + ExportSection(props, L"AttributeMenu", pAttributeMenuStrings, 0, MAX_ATTRIBUTE_STRING_COUNT); + ExportSection(props, L"TrainingMenu", pTrainingMenuStrings, 0, MAX_TRAIN_STRING_COUNT); + ExportSection(props, L"SquadMenu", pSquadMenuStrings, 0, MAX_SQUAD_MENU_STRING_COUNT); - ExportSection(props, L"SnitchMenu", Loc::pSnitchMenuStrings, 0, MAX_SNITCH_MENU_STRING_COUNT); - ExportSection(props, L"SnitchMenuDesc", Loc::pSnitchMenuDescStrings, 0, MAX_SNITCH_MENU_STRING_COUNT-1); - ExportSection(props, L"SnitchToggleMenu", Loc::pSnitchToggleMenuStrings, 0, MAX_SNITCH_TOGGLE_MENU_STRING_COUNT); - ExportSection(props, L"SnitchToggleMenuDesc", Loc::pSnitchToggleMenuDescStrings, 0, MAX_SNITCH_TOGGLE_MENU_STRING_COUNT-1); - ExportSection(props, L"SnitchSectorMenu", Loc::pSnitchSectorMenuStrings, 0, MAX_SNITCH_SECTOR_MENU_STRING_COUNT); - ExportSection(props, L"SnitchSectorMenuDesc", Loc::pSnitchSectorMenuDescStrings, 0, MAX_SNITCH_SECTOR_MENU_STRING_COUNT-1); - ExportSection(props, L"PrisonerMenu", Loc::pPrisonerMenuStrings, 0, MAX_PRISONER_MENU_STRING_COUNT ); - ExportSection(props, L"PrisonerMenuDesc", Loc::pPrisonerMenuDescStrings, 0, MAX_PRISONER_MENU_STRING_COUNT - 1 ); - ExportSection(props, L"SnitchPrisonExposed", Loc::pSnitchPrisonExposedStrings, 0, NUM_SNITCH_PRISON_EXPOSED); - ExportSection(props, L"SnitchGatheringRumoursResult", Loc::pSnitchGatheringRumoursResultStrings, 0, NUM_SNITCH_GATHERING_RUMOURS_RESULT); + ExportSection(props, L"SnitchMenu", pSnitchMenuStrings, 0, MAX_SNITCH_MENU_STRING_COUNT); + ExportSection(props, L"SnitchMenuDesc", pSnitchMenuDescStrings, 0, MAX_SNITCH_MENU_STRING_COUNT-1); + ExportSection(props, L"SnitchToggleMenu", pSnitchToggleMenuStrings, 0, MAX_SNITCH_TOGGLE_MENU_STRING_COUNT); + ExportSection(props, L"SnitchToggleMenuDesc", pSnitchToggleMenuDescStrings, 0, MAX_SNITCH_TOGGLE_MENU_STRING_COUNT-1); + ExportSection(props, L"SnitchSectorMenu", pSnitchSectorMenuStrings, 0, MAX_SNITCH_SECTOR_MENU_STRING_COUNT); + ExportSection(props, L"SnitchSectorMenuDesc", pSnitchSectorMenuDescStrings, 0, MAX_SNITCH_SECTOR_MENU_STRING_COUNT-1); + ExportSection(props, L"PrisonerMenu", pPrisonerMenuStrings, 0, MAX_PRISONER_MENU_STRING_COUNT ); + ExportSection(props, L"PrisonerMenuDesc", pPrisonerMenuDescStrings, 0, MAX_PRISONER_MENU_STRING_COUNT - 1 ); + ExportSection(props, L"SnitchPrisonExposed", pSnitchPrisonExposedStrings, 0, NUM_SNITCH_PRISON_EXPOSED); + ExportSection(props, L"SnitchGatheringRumoursResult", pSnitchGatheringRumoursResultStrings, 0, NUM_SNITCH_GATHERING_RUMOURS_RESULT); - ExportSection(props, L"PersonnelTitle", Loc::pPersonnelTitle, 0, 1); - ExportSection(props, L"PersonnelScreen", Loc::pPersonnelScreenStrings, 0, TEXT_NUM_PRSNL); + ExportSection(props, L"PersonnelTitle", pPersonnelTitle, 0, 1); + ExportSection(props, L"PersonnelScreen", pPersonnelScreenStrings, 0, TEXT_NUM_PRSNL); - ExportSection(props, L"MercSkill", Loc::gzMercSkillText, 0, NUM_SKILLTRAITS_OT); - ExportSection(props, L"TacticalPopupButton", Loc::pTacticalPopupButtonStrings, 0, NUM_ICONS); - ExportSection(props, L"DoorTrap", Loc::pDoorTrapStrings, 0, NUM_DOOR_TRAPS); - ExportSection(props, L"ContractExtend", Loc::pContractExtendStrings, 0, NUM_CONTRACT_EXTEND); - ExportSection(props, L"MapScreenMouseRegionHelp", Loc::pMapScreenMouseRegionHelpText, 0, 6); - ExportSection(props, L"NoiseVol", Loc::pNoiseVolStr, 0, 4); - ExportSection(props, L"NoiseType", Loc::pNoiseTypeStr, 0, 12); - ExportSection(props, L"Direction", Loc::pDirectionStr, 0, 8); - ExportSection(props, L"LandType", Loc::pLandTypeStrings, 0, NUM_TRAVTERRAIN_TYPES); - ExportSection(props, L"Strategic", Loc::gpStrategicString, 0, TEXT_NUM_STRATEGIC_TEXT); + ExportSection(props, L"MercSkill", gzMercSkillText, 0, NUM_SKILLTRAITS_OT); + ExportSection(props, L"TacticalPopupButton", pTacticalPopupButtonStrings, 0, NUM_ICONS); + ExportSection(props, L"DoorTrap", pDoorTrapStrings, 0, NUM_DOOR_TRAPS); + ExportSection(props, L"ContractExtend", pContractExtendStrings, 0, NUM_CONTRACT_EXTEND); + ExportSection(props, L"MapScreenMouseRegionHelp", pMapScreenMouseRegionHelpText, 0, 6); + ExportSection(props, L"NoiseVol", pNoiseVolStr, 0, 4); + ExportSection(props, L"NoiseType", pNoiseTypeStr, 0, 12); + ExportSection(props, L"Direction", pDirectionStr, 0, 8); + ExportSection(props, L"LandType", pLandTypeStrings, 0, NUM_TRAVTERRAIN_TYPES); + ExportSection(props, L"Strategic", gpStrategicString, 0, TEXT_NUM_STRATEGIC_TEXT); - ExportSection(props, L"GameClock", Loc::gpGameClockString, 0, TEXT_NUM_GAMECLOCK); - ExportSection(props, L"KeyDescription", Loc::sKeyDescriptionStrings, 0, 2); - ExportSection(props, L"WeaponStatsDesc", Loc::gWeaponStatsDesc, 0, 17); - ExportSection(props, L"WeaponStatsFasthelpTactical",Loc::gzWeaponStatsFasthelpTactical, 0, 29); - ExportSection(props, L"MiscItemStatsFasthelp", Loc::gzMiscItemStatsFasthelp, 0, 34); - ExportSection(props, L"MoneyStatsDesc", Loc::gMoneyStatsDesc, 0, TEXT_NUM_MONEY_DESC); + ExportSection(props, L"GameClock", gpGameClockString, 0, TEXT_NUM_GAMECLOCK); + ExportSection(props, L"KeyDescription", sKeyDescriptionStrings, 0, 2); + ExportSection(props, L"WeaponStatsDesc", gWeaponStatsDesc, 0, 17); + ExportSection(props, L"WeaponStatsFasthelpTactical",gzWeaponStatsFasthelpTactical, 0, 29); + ExportSection(props, L"MiscItemStatsFasthelp", gzMiscItemStatsFasthelp, 0, 34); + ExportSection(props, L"MoneyStatsDesc", gMoneyStatsDesc, 0, TEXT_NUM_MONEY_DESC); - ExportSection(props, L"Health", Loc::zHealthStr, 0, 7); - ExportSection(props, L"MoneyAmounts", Loc::gzMoneyAmounts, 0, 6); - ExportSection(props, L"ProsLabel", Loc::gzProsLabel, 0, 1); - ExportSection(props, L"ConsLabel", Loc::gzConsLabel, 0, 1); - ExportSection(props, L"TalkMenu", Loc::zTalkMenuStrings, 0, 6); - ExportSection(props, L"Dealer", Loc::zDealerStrings, 0, 4); - ExportSection(props, L"DialogActions", Loc::zDialogActions, 0, 1); - ExportSection(props, L"Vehicle", Loc::pVehicleStrings, 0, 6); - ExportSection(props, L"ShortVehicle", Loc::pShortVehicleStrings, 0, 6); - ExportSection(props, L"VehicleName", Loc::zVehicleName, 0, 6); - ExportSection(props, L"VehicleSeatsStrings", Loc::pVehicleSeatsStrings, 0, 2); + ExportSection(props, L"Health", zHealthStr, 0, 7); + ExportSection(props, L"MoneyAmounts", gzMoneyAmounts, 0, 6); + ExportSection(props, L"ProsLabel", gzProsLabel, 0, 1); + ExportSection(props, L"ConsLabel", gzConsLabel, 0, 1); + ExportSection(props, L"TalkMenu", zTalkMenuStrings, 0, 6); + ExportSection(props, L"Dealer", zDealerStrings, 0, 4); + ExportSection(props, L"DialogActions", zDialogActions, 0, 1); + ExportSection(props, L"Vehicle", pVehicleStrings, 0, 6); + ExportSection(props, L"ShortVehicle", pShortVehicleStrings, 0, 6); + ExportSection(props, L"VehicleName", zVehicleName, 0, 6); + ExportSection(props, L"VehicleSeatsStrings", pVehicleSeatsStrings, 0, 2); - ExportSection(props, L"Tactical", Loc::TacticalStr, 0, TEXT_NUM_TACTICAL_STR); - ExportSection(props, L"ExitingSectorHelp", Loc::pExitingSectorHelpText, 0, TEXT_NUM_EXIT_GUI); - ExportSection(props, L"Repair", Loc::pRepairStrings, 0, 4); - ExportSection(props, L"PreStatBuild", Loc::sPreStatBuildString, 0, 6); - ExportSection(props, L"StatGain", Loc::sStatGainStrings, 0, 11); - ExportSection(props, L"HelicopterEta", Loc::pHelicopterEtaStrings, 0, TEXT_NUM_STR_HELI_ETA); - ExportSection(props, L"HelicopterRepair", Loc::pHelicopterRepairRefuelStrings, 0, TEXT_NUM_STR_HELI_REPAIRS); - ExportSection(props, L"MapLevel", Loc::sMapLevelString, 0, 1); - ExportSection(props, L"Loyal", Loc::gsLoyalString, 0, 1); - ExportSection(props, L"Underground", Loc::gsUndergroundString, 0, 1); - ExportSection(props, L"TimeStings", Loc::gsTimeStrings, 0, 1); + ExportSection(props, L"Tactical", TacticalStr, 0, TEXT_NUM_TACTICAL_STR); + ExportSection(props, L"ExitingSectorHelp", pExitingSectorHelpText, 0, TEXT_NUM_EXIT_GUI); + ExportSection(props, L"Repair", pRepairStrings, 0, 4); + ExportSection(props, L"PreStatBuild", sPreStatBuildString, 0, 6); + ExportSection(props, L"StatGain", sStatGainStrings, 0, 11); + ExportSection(props, L"HelicopterEta", pHelicopterEtaStrings, 0, TEXT_NUM_STR_HELI_ETA); + ExportSection(props, L"HelicopterRepair", pHelicopterRepairRefuelStrings, 0, TEXT_NUM_STR_HELI_REPAIRS); + ExportSection(props, L"MapLevel", sMapLevelString, 0, 1); + ExportSection(props, L"Loyal", gsLoyalString, 0, 1); + ExportSection(props, L"Underground", gsUndergroundString, 0, 1); + ExportSection(props, L"TimeStings", gsTimeStrings, 0, 1); - ExportSection(props, L"Facilities", Loc::sFacilitiesStrings, 0, 7); - ExportSection(props, L"MapPopUpInventory", Loc::pMapPopUpInventoryText, 0, 2); - ExportSection(props, L"TownInfo", Loc::pwTownInfoStrings, 0, 12); - ExportSection(props, L"Mine", Loc::pwMineStrings, 0, 14); - ExportSection(props, L"MiscSector", Loc::pwMiscSectorStrings, 0, 7); - ExportSection(props, L"MapInventoryError", Loc::pMapInventoryErrorString, 0, 7); - ExportSection(props, L"MapInventory", Loc::pMapInventoryStrings, 0, 2); - ExportSection(props, L"MapScreenFastHelp", Loc::pMapScreenFastHelpTextList, 0, 10); - ExportSection(props, L"MovementMenu", Loc::pMovementMenuStrings, 0, 4); - ExportSection(props, L"UpdateMerc", Loc::pUpdateMercStrings, 0, 6); + ExportSection(props, L"Facilities", sFacilitiesStrings, 0, 7); + ExportSection(props, L"MapPopUpInventory", pMapPopUpInventoryText, 0, 2); + ExportSection(props, L"TownInfo", pwTownInfoStrings, 0, 12); + ExportSection(props, L"Mine", pwMineStrings, 0, 14); + ExportSection(props, L"MiscSector", pwMiscSectorStrings, 0, 7); + ExportSection(props, L"MapInventoryError", pMapInventoryErrorString, 0, 7); + ExportSection(props, L"MapInventory", pMapInventoryStrings, 0, 2); + ExportSection(props, L"MapScreenFastHelp", pMapScreenFastHelpTextList, 0, 10); + ExportSection(props, L"MovementMenu", pMovementMenuStrings, 0, 4); + ExportSection(props, L"UpdateMerc", pUpdateMercStrings, 0, 6); - ExportSection(props, L"MapScreenBorderButtonHelp", Loc::pMapScreenBorderButtonHelpText,0, 6); - ExportSection(props, L"MapScreenBottomFastHelp", Loc::pMapScreenBottomFastHelp, 0, 8); - ExportSection(props, L"MapScreenBottom", Loc::pMapScreenBottomText, 0, 1); - ExportSection(props, L"MercDead", Loc::pMercDeadString, 0, 1); - ExportSection(props, L"Day", Loc::pDayStrings, 0, 1); - ExportSection(props, L"SenderName", Loc::pSenderNameList, 0, 51); - ExportSection(props, L"Traverse", Loc::pTraverseStrings, 0, 2); - ExportSection(props, L"NewMail", Loc::pNewMailStrings, 0, 1); - ExportSection(props, L"DeleteMail", Loc::pDeleteMailStrings, 0, 2); - ExportSection(props, L"EmailHeader", Loc::pEmailHeaders, 0, 3); + ExportSection(props, L"MapScreenBorderButtonHelp", pMapScreenBorderButtonHelpText,0, 6); + ExportSection(props, L"MapScreenBottomFastHelp", pMapScreenBottomFastHelp, 0, 8); + ExportSection(props, L"MapScreenBottom", pMapScreenBottomText, 0, 1); + ExportSection(props, L"MercDead", pMercDeadString, 0, 1); + ExportSection(props, L"Day", pDayStrings, 0, 1); + ExportSection(props, L"SenderName", pSenderNameList, 0, 51); + ExportSection(props, L"Traverse", pTraverseStrings, 0, 2); + ExportSection(props, L"NewMail", pNewMailStrings, 0, 1); + ExportSection(props, L"DeleteMail", pDeleteMailStrings, 0, 2); + ExportSection(props, L"EmailHeader", pEmailHeaders, 0, 3); - ExportSection(props, L"EmailTitle", Loc::pEmailTitleText, 0, 1); - ExportSection(props, L"FinanceTitle", Loc::pFinanceTitle, 0, 1); - ExportSection(props, L"FinanceSummary", Loc::pFinanceSummary, 0, 12); - ExportSection(props, L"FinanceHeader", Loc::pFinanceHeaders, 0, 7); - ExportSection(props, L"Transaction", Loc::pTransactionText, 0, TEXT_NUM_FINCANCES); - ExportSection(props, L"TransactionAlternate", Loc::pTransactionAlternateText, 0, 4); - ExportSection(props, L"Skyrider", Loc::pSkyriderText, 0, 7); - ExportSection(props, L"Moral", Loc::pMoralStrings, 0, 6); - ExportSection(props, L"LeftEquipment", Loc::pLeftEquipmentString, 0, 2); - ExportSection(props, L"MapScreenStatus", Loc::pMapScreenStatusStrings, 0, 5); + ExportSection(props, L"EmailTitle", pEmailTitleText, 0, 1); + ExportSection(props, L"FinanceTitle", pFinanceTitle, 0, 1); + ExportSection(props, L"FinanceSummary", pFinanceSummary, 0, 12); + ExportSection(props, L"FinanceHeader", pFinanceHeaders, 0, 7); + ExportSection(props, L"Transaction", pTransactionText, 0, TEXT_NUM_FINCANCES); + ExportSection(props, L"TransactionAlternate", pTransactionAlternateText, 0, 4); + ExportSection(props, L"Skyrider", pSkyriderText, 0, 7); + ExportSection(props, L"Moral", pMoralStrings, 0, 6); + ExportSection(props, L"LeftEquipment", pLeftEquipmentString, 0, 2); + ExportSection(props, L"MapScreenStatus", pMapScreenStatusStrings, 0, 5); - ExportSection(props, L"MapScreenPrevNextCharButtonHelp", Loc::pMapScreenPrevNextCharButtonHelpText, 0, 2); - ExportSection(props, L"Eta", Loc::pEtaString, 0, 1); - ExportSection(props, L"TrashItem", Loc::pTrashItemText, 0, 2); - ExportSection(props, L"MapError", Loc::pMapErrorString, 0, 50); - ExportSection(props, L"MapPlot", Loc::pMapPlotStrings, 0, 5); - ExportSection(props, L"Bullseye", Loc::pBullseyeStrings, 0, 5); - ExportSection(props, L"MiscMapScreenMouseRegionHelp", Loc::pMiscMapScreenMouseRegionHelpText, 0, 3); - ExportSection(props, L"MercHeLeave", Loc::pMercHeLeaveString, 0, 5); - ExportSection(props, L"MercSheLeave", Loc::pMercSheLeaveString, 0, 5); - ExportSection(props, L"MercContractOver", Loc::pMercContractOverStrings, 0, 5); + ExportSection(props, L"MapScreenPrevNextCharButtonHelp", pMapScreenPrevNextCharButtonHelpText, 0, 2); + ExportSection(props, L"Eta", pEtaString, 0, 1); + ExportSection(props, L"TrashItem", pTrashItemText, 0, 2); + ExportSection(props, L"MapError", pMapErrorString, 0, 50); + ExportSection(props, L"MapPlot", pMapPlotStrings, 0, 5); + ExportSection(props, L"Bullseye", pBullseyeStrings, 0, 5); + ExportSection(props, L"MiscMapScreenMouseRegionHelp", pMiscMapScreenMouseRegionHelpText, 0, 3); + ExportSection(props, L"MercHeLeave", pMercHeLeaveString, 0, 5); + ExportSection(props, L"MercSheLeave", pMercSheLeaveString, 0, 5); + ExportSection(props, L"MercContractOver", pMercContractOverStrings, 0, 5); - ExportSection(props, L"ImpPopUp", Loc::pImpPopUpStrings, 0, 12); - ExportSection(props, L"ImpButton", Loc::pImpButtonText, 0, 26); - ExportSection(props, L"ExtraIMP", Loc::pExtraIMPStrings, 0, 4); - ExportSection(props, L"FilesTitle", Loc::pFilesTitle, 0, 1); - ExportSection(props, L"FilesSender", Loc::pFilesSenderList, 0, 7); - ExportSection(props, L"HistoryTitle", Loc::pHistoryTitle, 0, 1); - ExportSection(props, L"HistoryHeader", Loc::pHistoryHeaders, 0, 5); - //ExportSection(props, L"History", Loc::pHistoryStrings, 0, TEXT_NUM_HISTORY); - ExportSection(props, L"HistoryLocation", Loc::pHistoryLocations, 0, 1); - ExportSection(props, L"LaptopIcon", Loc::pLaptopIcons, 0, 8); + ExportSection(props, L"ImpPopUp", pImpPopUpStrings, 0, 12); + ExportSection(props, L"ImpButton", pImpButtonText, 0, 26); + ExportSection(props, L"ExtraIMP", pExtraIMPStrings, 0, 4); + ExportSection(props, L"FilesTitle", pFilesTitle, 0, 1); + ExportSection(props, L"FilesSender", pFilesSenderList, 0, 7); + ExportSection(props, L"HistoryTitle", pHistoryTitle, 0, 1); + ExportSection(props, L"HistoryHeader", pHistoryHeaders, 0, 5); + //ExportSection(props, L"History", pHistoryStrings, 0, TEXT_NUM_HISTORY); + ExportSection(props, L"HistoryLocation", pHistoryLocations, 0, 1); + ExportSection(props, L"LaptopIcon", pLaptopIcons, 0, 8); - ExportSection(props, L"BookMark", Loc::pBookMarkStrings, 0, TEXT_NUM_LAPTOP_BOOKMARKS); - ExportSection(props, L"BookmarkTitle", Loc::pBookmarkTitle, 0, 2); - ExportSection(props, L"Download", Loc::pDownloadString, 0, 2); - ExportSection(props, L"AtmStartButton", Loc::gsAtmStartButtonText, 0, 4); - ExportSection(props, L"Error", Loc::pErrorStrings, 0, 5); - ExportSection(props, L"Personnel", Loc::pPersonnelString, 0, 1); - ExportSection(props, L"WebTitle", Loc::pWebTitle, 0, 1); - ExportSection(props, L"WebPagesTitle", Loc::pWebPagesTitles, 0, 36); + ExportSection(props, L"BookMark", pBookMarkStrings, 0, TEXT_NUM_LAPTOP_BOOKMARKS); + ExportSection(props, L"BookmarkTitle", pBookmarkTitle, 0, 2); + ExportSection(props, L"Download", pDownloadString, 0, 2); + ExportSection(props, L"AtmStartButton", gsAtmStartButtonText, 0, 4); + ExportSection(props, L"Error", pErrorStrings, 0, 5); + ExportSection(props, L"Personnel", pPersonnelString, 0, 1); + ExportSection(props, L"WebTitle", pWebTitle, 0, 1); + ExportSection(props, L"WebPagesTitle", pWebPagesTitles, 0, 36); - ExportSection(props, L"ShowBookmark", Loc::pShowBookmarkString, 0, 2); - ExportSection(props, L"LaptopTitle", Loc::pLaptopTitles, 0, 5); - ExportSection(props, L"PersonnelDepartedState", Loc::pPersonnelDepartedStateStrings, 0, TEXT_NUM_DEPARTED); - ExportSection(props, L"PersonelTeam", Loc::pPersonelTeamStrings, 0, 8); - ExportSection(props, L"PersonnelCurrentTeamStats", Loc::pPersonnelCurrentTeamStatsStrings, 0, 3); - ExportSection(props, L"PersonnelTeamStats", Loc::pPersonnelTeamStatsStrings, 0, 11); - ExportSection(props, L"MapVertIndex", Loc::pMapVertIndex, 0, 17); - ExportSection(props, L"MapHortIndex", Loc::pMapHortIndex, 0, 17); - ExportSection(props, L"MapDepthIndex", Loc::pMapDepthIndex, 0, 4); - ExportSection(props, L"ContractButton", Loc::pContractButtonString, 0, 1); + ExportSection(props, L"ShowBookmark", pShowBookmarkString, 0, 2); + ExportSection(props, L"LaptopTitle", pLaptopTitles, 0, 5); + ExportSection(props, L"PersonnelDepartedState", pPersonnelDepartedStateStrings, 0, TEXT_NUM_DEPARTED); + ExportSection(props, L"PersonelTeam", pPersonelTeamStrings, 0, 8); + ExportSection(props, L"PersonnelCurrentTeamStats", pPersonnelCurrentTeamStatsStrings, 0, 3); + ExportSection(props, L"PersonnelTeamStats", pPersonnelTeamStatsStrings, 0, 11); + ExportSection(props, L"MapVertIndex", pMapVertIndex, 0, 17); + ExportSection(props, L"MapHortIndex", pMapHortIndex, 0, 17); + ExportSection(props, L"MapDepthIndex", pMapDepthIndex, 0, 4); + ExportSection(props, L"ContractButton", pContractButtonString, 0, 1); - ExportSection(props, L"UpdatePanelButton", Loc::pUpdatePanelButtons, 0, 2); - ExportSection(props, L"LargeTactical", Loc::LargeTacticalStr, 0, TEXT_NUM_LARGESTR); - ExportSection(props, L"InsContract", Loc::InsContractText, 0, TEXT_NUM_INS_CONTRACT); - ExportSection(props, L"InsInfo", Loc::InsInfoText, 0, TEXT_NUM_INS_INFO); - ExportSection(props, L"MercAccount", Loc::MercAccountText, 0, TEXT_NUM_MERC_ACCOUNT); - ExportSection(props, L"MercAccountPage", Loc::MercAccountPageText, 0, 2); - ExportSection(props, L"MercInfo", Loc::MercInfo, 0, TEXT_NUM_MERC_FILES); - ExportSection(props, L"MercNoAccount", Loc::MercNoAccountText, 0, TEXT_NUM_MERC_NO_ACC); - ExportSection(props, L"MercHomePage", Loc::MercHomePageText, 0, TEXT_NUM_MERC); - ExportSection(props, L"Funeral", Loc::sFuneralString, 0, TEXT_NUM_FUNERAL); + ExportSection(props, L"UpdatePanelButton", pUpdatePanelButtons, 0, 2); + ExportSection(props, L"LargeTactical", LargeTacticalStr, 0, TEXT_NUM_LARGESTR); + ExportSection(props, L"InsContract", InsContractText, 0, TEXT_NUM_INS_CONTRACT); + ExportSection(props, L"InsInfo", InsInfoText, 0, TEXT_NUM_INS_INFO); + ExportSection(props, L"MercAccount", MercAccountText, 0, TEXT_NUM_MERC_ACCOUNT); + ExportSection(props, L"MercAccountPage", MercAccountPageText, 0, 2); + ExportSection(props, L"MercInfo", MercInfo, 0, TEXT_NUM_MERC_FILES); + ExportSection(props, L"MercNoAccount", MercNoAccountText, 0, TEXT_NUM_MERC_NO_ACC); + ExportSection(props, L"MercHomePage", MercHomePageText, 0, TEXT_NUM_MERC); + ExportSection(props, L"Funeral", sFuneralString, 0, TEXT_NUM_FUNERAL); - ExportSection(props, L"Florist", Loc::sFloristText, 0, TEXT_NUM_FLORIST); - ExportSection(props, L"OrderForm", Loc::sOrderFormText, 0, TEXT_NUM_FLORIST_ORDER); - ExportSection(props, L"FloristGallery", Loc::sFloristGalleryText, 0, TEXT_NUM_FLORIST_GALLERY); - ExportSection(props, L"FloristCards", Loc::sFloristCards, 0, TEXT_NUM_FLORIST_CARDS); - ExportSection(props, L"BobbyROrderForm", Loc::BobbyROrderFormText, 0, TEXT_NUM_BOBBYR_MAILORDER); - ExportSection(props, L"BobbyRFilter", Loc::BobbyRFilter, 0, TEXT_NUM_BOBBYR_FILTER); - ExportSection(props, L"BobbyR", Loc::BobbyRText, 0, TEXT_NUM_BOBBYR_GUNS); - ExportSection(props, L"BobbyRaysFront", Loc::BobbyRaysFrontText, 0, TEXT_NUM_BOBBYR); - ExportSection(props, L"AimSort", Loc::AimSortText, 0, TEXT_NUM_AIM_SORT); - ExportSection(props, L"AimPolicy", Loc::AimPolicyText, 0, TEXT_NUM_AIM_POLICIES); + ExportSection(props, L"Florist", sFloristText, 0, TEXT_NUM_FLORIST); + ExportSection(props, L"OrderForm", sOrderFormText, 0, TEXT_NUM_FLORIST_ORDER); + ExportSection(props, L"FloristGallery", sFloristGalleryText, 0, TEXT_NUM_FLORIST_GALLERY); + ExportSection(props, L"FloristCards", sFloristCards, 0, TEXT_NUM_FLORIST_CARDS); + ExportSection(props, L"BobbyROrderForm", BobbyROrderFormText, 0, TEXT_NUM_BOBBYR_MAILORDER); + ExportSection(props, L"BobbyRFilter", BobbyRFilter, 0, TEXT_NUM_BOBBYR_FILTER); + ExportSection(props, L"BobbyR", BobbyRText, 0, TEXT_NUM_BOBBYR_GUNS); + ExportSection(props, L"BobbyRaysFront", BobbyRaysFrontText, 0, TEXT_NUM_BOBBYR); + ExportSection(props, L"AimSort", AimSortText, 0, TEXT_NUM_AIM_SORT); + ExportSection(props, L"AimPolicy", AimPolicyText, 0, TEXT_NUM_AIM_POLICIES); - ExportSection(props, L"AimMember", Loc::AimMemberText, 0, 4); - ExportSection(props, L"CharacterInfo", Loc::CharacterInfo, 0, TEXT_NUM_AIM_MEMBER_CHARINFO); - ExportSection(props, L"VideoConfercing", Loc::VideoConfercingText, 0, TEXT_NUM_AIM_MEMBER_VCONF); - ExportSection(props, L"AimPopUp", Loc::AimPopUpText, 0, TEXT_NUM_AIM_MEMBER_POPUP); - ExportSection(props, L"AimLink", Loc::AimLinkText, 0, TEXM_NUM_AIM_LINK); - ExportSection(props, L"AimHistory", Loc::AimHistoryText, 0, TEXT_NUM_AIM_HISTORY); - ExportSection(props, L"AimFi", Loc::AimFiText, 0, TEXT_NUM_AIM_FI); - ExportSection(props, L"AimAlumni", Loc::AimAlumniText, 0, TEXT_NUM_AIM_ALUMNI); - ExportSection(props, L"AimScreen", Loc::AimScreenText, 0, TEXT_NUM_AIM_SCREEN); - ExportSection(props, L"AimBottomMenu", Loc::AimBottomMenuText, 0, TEXT_NUM_AIM_MENU); + ExportSection(props, L"AimMember", AimMemberText, 0, 4); + ExportSection(props, L"CharacterInfo", CharacterInfo, 0, TEXT_NUM_AIM_MEMBER_CHARINFO); + ExportSection(props, L"VideoConfercing", VideoConfercingText, 0, TEXT_NUM_AIM_MEMBER_VCONF); + ExportSection(props, L"AimPopUp", AimPopUpText, 0, TEXT_NUM_AIM_MEMBER_POPUP); + ExportSection(props, L"AimLink", AimLinkText, 0, TEXM_NUM_AIM_LINK); + ExportSection(props, L"AimHistory", AimHistoryText, 0, TEXT_NUM_AIM_HISTORY); + ExportSection(props, L"AimFi", AimFiText, 0, TEXT_NUM_AIM_FI); + ExportSection(props, L"AimAlumni", AimAlumniText, 0, TEXT_NUM_AIM_ALUMNI); + ExportSection(props, L"AimScreen", AimScreenText, 0, TEXT_NUM_AIM_SCREEN); + ExportSection(props, L"AimBottomMenu", AimBottomMenuText, 0, TEXT_NUM_AIM_MENU); - ExportSection(props, L"SKI", Loc::SKI_Text, 0, TEXT_NUM_SKI_TEXT); - ExportSection(props, L"SkiAtm", Loc::SkiAtmText, 0, NUM_SKI_ATM_BUTTONS); - ExportSection(props, L"SkiAtmText", Loc::gzSkiAtmText, 0, TEXT_NUM_SKI_ATM_MODE_TEXT); - ExportSection(props, L"SkiMessageBox", Loc::SkiMessageBoxText, 0, TEXT_NUM_SKI_MBOX_TEXT); - ExportSection(props, L"Options", Loc::zOptionsText, 0, TEXT_NUM_OPT_TEXT); - ExportSection(props, L"SaveLoad", Loc::zSaveLoadText, 0, TEXT_NUM_SLG_TEXT); - ExportSection(props, L"MarksMapScreen", Loc::zMarksMapScreenText, 0, 25); - ExportSection(props, L"LandMarkInSector", Loc::pLandMarkInSectorString, 0, 1); - ExportSection(props, L"MilitiaConfirm", Loc::pMilitiaConfirmStrings, 0, 11); - ExportSection(props, L"MoneyWithdrawMessage", Loc::gzMoneyWithdrawMessageText, 0, TEXT_NUM_MONEY_WITHDRAW); + ExportSection(props, L"SKI", SKI_Text, 0, TEXT_NUM_SKI_TEXT); + ExportSection(props, L"SkiAtm", SkiAtmText, 0, NUM_SKI_ATM_BUTTONS); + ExportSection(props, L"SkiAtmText", gzSkiAtmText, 0, TEXT_NUM_SKI_ATM_MODE_TEXT); + ExportSection(props, L"SkiMessageBox", SkiMessageBoxText, 0, TEXT_NUM_SKI_MBOX_TEXT); + ExportSection(props, L"Options", zOptionsText, 0, TEXT_NUM_OPT_TEXT); + ExportSection(props, L"SaveLoad", zSaveLoadText, 0, TEXT_NUM_SLG_TEXT); + ExportSection(props, L"MarksMapScreen", zMarksMapScreenText, 0, 25); + ExportSection(props, L"LandMarkInSector", pLandMarkInSectorString, 0, 1); + ExportSection(props, L"MilitiaConfirm", pMilitiaConfirmStrings, 0, 11); + ExportSection(props, L"MoneyWithdrawMessage", gzMoneyWithdrawMessageText, 0, TEXT_NUM_MONEY_WITHDRAW); - ExportSection(props, L"Copyright", Loc::gzCopyrightText, 0, 1); - ExportSection(props, L"OptionsToggle", Loc::zOptionsToggleText, 0, 49); - ExportSection(props, L"OptionsScreenHelp", Loc::zOptionsScreenHelpText, 0, 49); - ExportSection(props, L"GIOScreen", Loc::gzGIOScreenText, 0, TEXT_NUM_GIO_TEXT); - ExportSection(props, L"MPJScreen", Loc::gzMPJScreenText, 0, TEXT_NUM_MPJ_TEXT); - ExportSection(props, L"MPJHelpText", Loc::gzMPJHelpText, 0, 10); - ExportSection(props, L"MPHScreen", Loc::gzMPHScreenText, 0, TEXT_NUM_MPH_TEXT); - ExportSection(props, L"DeliveryLocation", Loc::pDeliveryLocationStrings, 0, 17); - ExportSection(props, L"SkillAtZeroWarning", Loc::pSkillAtZeroWarning, 0, 1); - ExportSection(props, L"IMPBeginScreen", Loc::pIMPBeginScreenStrings, 0, 1); - ExportSection(props, L"IMPFinishButton", Loc::pIMPFinishButtonText, 0, 1); + ExportSection(props, L"Copyright", gzCopyrightText, 0, 1); + ExportSection(props, L"OptionsToggle", zOptionsToggleText, 0, 49); + ExportSection(props, L"OptionsScreenHelp", zOptionsScreenHelpText, 0, 49); + ExportSection(props, L"GIOScreen", gzGIOScreenText, 0, TEXT_NUM_GIO_TEXT); + ExportSection(props, L"MPJScreen", gzMPJScreenText, 0, TEXT_NUM_MPJ_TEXT); + ExportSection(props, L"MPJHelpText", gzMPJHelpText, 0, 10); + ExportSection(props, L"MPHScreen", gzMPHScreenText, 0, TEXT_NUM_MPH_TEXT); + ExportSection(props, L"DeliveryLocation", pDeliveryLocationStrings, 0, 17); + ExportSection(props, L"SkillAtZeroWarning", pSkillAtZeroWarning, 0, 1); + ExportSection(props, L"IMPBeginScreen", pIMPBeginScreenStrings, 0, 1); + ExportSection(props, L"IMPFinishButton", pIMPFinishButtonText, 0, 1); - ExportSection(props, L"IMPFinish", Loc::pIMPFinishStrings, 0, 1); - ExportSection(props, L"IMPVoices", Loc::pIMPVoicesStrings, 0, 1); - ExportSection(props, L"DepartedMercPortrait", Loc::pDepartedMercPortraitStrings, 0, 3); - ExportSection(props, L"PersTitle", Loc::pPersTitleText, 0, 1); - ExportSection(props, L"PausedGame", Loc::pPausedGameText, 0, 3); - ExportSection(props, L"MessageStrings", Loc::pMessageStrings, 0, TEXT_NUM_MSG); - ExportSection(props, L"ItemPickupHelpPopup", Loc::ItemPickupHelpPopup, 0, 5); - ExportSection(props, L"DoctorWarning", Loc::pDoctorWarningString, 0, 2); - ExportSection(props, L"MilitiaButtonsHelp", Loc::pMilitiaButtonsHelpText, 0, 4); - ExportSection(props, L"MapScreenJustStartedHelp", Loc::pMapScreenJustStartedHelpText, 0, 2); + ExportSection(props, L"IMPFinish", pIMPFinishStrings, 0, 1); + ExportSection(props, L"IMPVoices", pIMPVoicesStrings, 0, 1); + ExportSection(props, L"DepartedMercPortrait", pDepartedMercPortraitStrings, 0, 3); + ExportSection(props, L"PersTitle", pPersTitleText, 0, 1); + ExportSection(props, L"PausedGame", pPausedGameText, 0, 3); + ExportSection(props, L"MessageStrings", pMessageStrings, 0, TEXT_NUM_MSG); + ExportSection(props, L"ItemPickupHelpPopup", ItemPickupHelpPopup, 0, 5); + ExportSection(props, L"DoctorWarning", pDoctorWarningString, 0, 2); + ExportSection(props, L"MilitiaButtonsHelp", pMilitiaButtonsHelpText, 0, 4); + ExportSection(props, L"MapScreenJustStartedHelp", pMapScreenJustStartedHelpText, 0, 2); - ExportSection(props, L"AntiHacker", Loc::pAntiHackerString, 0, TEXT_NUM_ANTIHACKERSTR); - ExportSection(props, L"LaptopHelp", Loc::gzLaptopHelpText, 0, TEXT_NUM_LAPTOP_BN_BOOKMARK_TEXT); - ExportSection(props, L"HelpScreen", Loc::gzHelpScreenText, 0, TEXT_NUM_HLP); - ExportSection(props, L"NonPersistantPBI", Loc::gzNonPersistantPBIText, 0, 10); - ExportSection(props, L"MiscString", Loc::gzMiscString, 0, 5); - ExportSection(props, L"IntroScreen", Loc::gzIntroScreen, 0, 1); - ExportSection(props, L"NewNoise", Loc::pNewNoiseStr, 0, 11/*MAX_NOISES*/); - ExportSection(props, L"MapScreenSortButtonHelp", Loc::wMapScreenSortButtonHelpText, 0, 6); - ExportSection(props, L"BrokenLink", Loc::BrokenLinkText, 0, TEXT_NUM_BROKEN_LINK); - ExportSection(props, L"BobbyRShipment", Loc::gzBobbyRShipmentText, 0, TEXT_NUM_BOBBYR_SHIPMENT); + ExportSection(props, L"AntiHacker", pAntiHackerString, 0, TEXT_NUM_ANTIHACKERSTR); + ExportSection(props, L"LaptopHelp", gzLaptopHelpText, 0, TEXT_NUM_LAPTOP_BN_BOOKMARK_TEXT); + ExportSection(props, L"HelpScreen", gzHelpScreenText, 0, TEXT_NUM_HLP); + ExportSection(props, L"NonPersistantPBI", gzNonPersistantPBIText, 0, 10); + ExportSection(props, L"MiscString", gzMiscString, 0, 5); + ExportSection(props, L"IntroScreen", gzIntroScreen, 0, 1); + ExportSection(props, L"NewNoise", pNewNoiseStr, 0, 11/*MAX_NOISES*/); + ExportSection(props, L"MapScreenSortButtonHelp", wMapScreenSortButtonHelpText, 0, 6); + ExportSection(props, L"BrokenLink", BrokenLinkText, 0, TEXT_NUM_BROKEN_LINK); + ExportSection(props, L"BobbyRShipment", gzBobbyRShipmentText, 0, TEXT_NUM_BOBBYR_SHIPMENT); - ExportSection(props, L"CreditNames", Loc::gzCreditNames, 0, 15); - ExportSection(props, L"CreditNameTitle", Loc::gzCreditNameTitle, 0, 15); - ExportSection(props, L"CreditNameFunny", Loc::gzCreditNameFunny, 0, 15); - ExportSection(props, L"RepairsDone", Loc::sRepairsDoneString, 0, 7); - ExportSection(props, L"GioDifConfirm", Loc::zGioDifConfirmText, 0, TEXT_NUM_GIO_CFS); - ExportSection(props, L"LateLocalized", Loc::gzLateLocalizedString, 0, 64); - ExportSection(props, L"CWStrings", Loc::gzCWStrings, 0, 1); - ExportSection(props, L"TooltipStrings", Loc::gzTooltipStrings, 0, TEXT_NUM_STR_TT); - ExportSection(props, L"New113Message", Loc::New113Message, 0, TEXT_NUM_MSG113); + ExportSection(props, L"CreditNames", gzCreditNames, 0, 15); + ExportSection(props, L"CreditNameTitle", gzCreditNameTitle, 0, 15); + ExportSection(props, L"CreditNameFunny", gzCreditNameFunny, 0, 15); + ExportSection(props, L"RepairsDone", sRepairsDoneString, 0, 7); + ExportSection(props, L"GioDifConfirm", zGioDifConfirmText, 0, TEXT_NUM_GIO_CFS); + ExportSection(props, L"LateLocalized", gzLateLocalizedString, 0, 64); + ExportSection(props, L"CWStrings", gzCWStrings, 0, 1); + ExportSection(props, L"TooltipStrings", gzTooltipStrings, 0, TEXT_NUM_STR_TT); + ExportSection(props, L"New113Message", New113Message, 0, TEXT_NUM_MSG113); - ExportSection(props, L"New113HAMMessage", Loc::New113HAMMessage, 0, 25); - ExportSection(props, L"New113MERCMercMail", Loc::New113MERCMercMailTexts, 0, 4); - ExportSection(props, L"New113AIMMercMail", Loc::New113AIMMercMailTexts, 0, 16); - ExportSection(props, L"MissingIMPSkills", Loc::MissingIMPSkillsDescriptions, 0, 2); - ExportSection(props, L"NewInvMessage", Loc::NewInvMessage, 0, TEXT_NUM_NIV); - ExportSection(props, L"MPServerMessage", Loc::MPServerMessage, 0, 13); - ExportSection(props, L"MPClientMessage", Loc::MPClientMessage, 0, 69); - ExportSection(props, L"MPEdges", Loc::gszMPEdgesText, 0, 5); - ExportSection(props, L"MPTeamName", Loc::gszMPTeamNames, 0, 5); - ExportSection(props, L"MPMapscreen", Loc::gszMPMapscreenText, 0, 9); + ExportSection(props, L"New113HAMMessage", New113HAMMessage, 0, 25); + ExportSection(props, L"New113MERCMercMail", New113MERCMercMailTexts, 0, 4); + ExportSection(props, L"New113AIMMercMail", New113AIMMercMailTexts, 0, 16); + ExportSection(props, L"MissingIMPSkills", MissingIMPSkillsDescriptions, 0, 2); + ExportSection(props, L"NewInvMessage", NewInvMessage, 0, TEXT_NUM_NIV); + ExportSection(props, L"MPServerMessage", MPServerMessage, 0, 13); + ExportSection(props, L"MPClientMessage", MPClientMessage, 0, 69); + ExportSection(props, L"MPEdges", gszMPEdgesText, 0, 5); + ExportSection(props, L"MPTeamName", gszMPTeamNames, 0, 5); + ExportSection(props, L"MPMapscreen", gszMPMapscreenText, 0, 9); - ExportSection(props, L"MPSScreen", Loc::gzMPSScreenText, 0, TEXT_NUM_MPS_TEXT); - ExportSection(props, L"MPCScreen", Loc::gzMPCScreenText, 0, TEXT_NUM_MPC_TEXT); - ExportSection(props, L"MPChatToggle", Loc::gzMPChatToggleText, 0, 2); - ExportSection(props, L"MPChatbox", Loc::gzMPChatboxText, 0, 2); + ExportSection(props, L"MPSScreen", gzMPSScreenText, 0, TEXT_NUM_MPS_TEXT); + ExportSection(props, L"MPCScreen", gzMPCScreenText, 0, TEXT_NUM_MPC_TEXT); + ExportSection(props, L"MPChatToggle", gzMPChatToggleText, 0, 2); + ExportSection(props, L"MPChatbox", gzMPChatboxText, 0, 2); props.writeToXMLFile(L"Localization/GameStrings.xml",tmap); props.writeToIniFile(L"Localization/GameStrings.ini",true); @@ -524,7 +521,7 @@ namespace Loc void Loc::ExportMercBio() { - Loc::Language lang = gs_Lang; + Loc::Language lang = ToLocLanguage(g_lang); #define SIZE_MERC_BIO_INFO 400 * 2 #define SIZE_MERC_ADDITIONAL_INFO 160 * 2 @@ -554,7 +551,7 @@ void Loc::ExportMercBio() void Loc::ExportAIMHistory() { - Loc::Language lang = gs_Lang; + Loc::Language lang = ToLocLanguage(g_lang); #define AIM_HISTORY_LINE_SIZE 400 * 2 vfs::String::char_t pHistLine[AIM_HISTORY_LINE_SIZE]; vfs::COpenReadFile rfile("BINARYDATA\\AimHist.edt"); @@ -576,7 +573,7 @@ void Loc::ExportAIMHistory() void Loc::ExportAIMPolicy() { - Loc::Language lang = gs_Lang; + Loc::Language lang = ToLocLanguage(g_lang); #define AIM_HISTORY_LINE_SIZE 400 * 2 vfs::String::char_t pPolLine[AIM_HISTORY_LINE_SIZE]; vfs::COpenReadFile rfile("BINARYDATA\\AimPol.edt"); @@ -597,7 +594,7 @@ void Loc::ExportAIMPolicy() void Loc::ExportAlumniName() { - Loc::Language lang = gs_Lang; + Loc::Language lang = ToLocLanguage(g_lang); #define AIM_ALUMNI_NAME_SIZE 80 * 2 vfs::String::char_t pAlumniName[AIM_ALUMNI_NAME_SIZE]; vfs::COpenReadFile rfile("BINARYDATA\\AlumName.edt"); @@ -620,7 +617,7 @@ void Loc::ExportAlumniName() void Loc::ExportDialogues() { - Loc::Language lang = gs_Lang; + Loc::Language lang = ToLocLanguage(g_lang); #define DIALOGUESIZE 480 vfs::String::char_t pDiagLine[DIALOGUESIZE]; @@ -658,7 +655,7 @@ void Loc::ExportDialogues() void Loc::ExportNPCDialogues() { - Loc::Language lang = gs_Lang; + Loc::Language lang = ToLocLanguage(g_lang); #define DIALOGUESIZE 480 #define CIVQUOTESIZE 320 vfs::String::char_t pDiagLine[DIALOGUESIZE]; diff --git a/i18n/LanguageStrings.cpp b/i18n/LanguageStrings.cpp new file mode 100644 index 00000000..8c05c3a2 --- /dev/null +++ b/i18n/LanguageStrings.cpp @@ -0,0 +1,140 @@ +// All eight languages' string tables in one translation unit (docs/plans/ +// language-design.md): each base + Ja2.5-carryover text file is included inside its +// own per-language namespace, the game-facing table symbols are the pointer globals +// below (statically bound to the build default), and BindLanguageStrings rebinds all +// of them to the language resolved at startup from the LANGUAGE ini key. + +#include "Text.h" +#include "FileMan.h" +#include "Scheduling.h" +#include "EditorMercs.h" +#include "Item Statistics.h" + +#include + +#include + +// Recipe R1 (docs/plans/language-design.md): the loose _Text.cpp files are still +// compiled standalone until Cn+2, and #include the headers declaring the now-pointer +// externs themselves; this guard keeps their array definitions out of those standalone +// TUs (which would collide with the pointer extern) while still compiling them here. + +namespace lang_en { +#include "_EnglishText.cpp" +#include "_Ja25EnglishText.cpp" +} + +namespace lang_de { +#include "_GermanText.cpp" +#include "_Ja25GermanText.cpp" +} + +namespace lang_ru { +#include "_RussianText.cpp" +#include "_Ja25RussianText.cpp" +} + +namespace lang_nl { +#include "_DutchText.cpp" +#include "_Ja25DutchText.cpp" +} + +namespace lang_pl { +#include "_PolishText.cpp" +#include "_Ja25PolishText.cpp" +} + +namespace lang_fr { +#include "_FrenchText.cpp" +#include "_Ja25FrenchText.cpp" +} + +namespace lang_it { +#include "_ItalianText.cpp" +#include "_Ja25ItalianText.cpp" +} + +namespace lang_zh { +#include "_ChineseText.cpp" +#include "_Ja25ChineseText.cpp" +} + +namespace lang_default = lang_en; + +// definitions (default language) +#define X(NAME) \ + std::decay_t NAME = lang_default::NAME; +#include "text.def" +#undef X + +namespace { +auto bind_en() -> void { +#define X(NAME) NAME = lang_en::NAME; +#include "text.def" +#undef X +} +auto bind_de() -> void { +#define X(NAME) NAME = lang_de::NAME; +#include "text.def" +#undef X +} +auto bind_ru() -> void { +#define X(NAME) NAME = lang_ru::NAME; +#include "text.def" +#undef X +} +auto bind_nl() -> void { +#define X(NAME) NAME = lang_nl::NAME; +#include "text.def" +#undef X +} +auto bind_pl() -> void { +#define X(NAME) NAME = lang_pl::NAME; +#include "text.def" +#undef X +} +auto bind_fr() -> void { +#define X(NAME) NAME = lang_fr::NAME; +#include "text.def" +#undef X +} +auto bind_it() -> void { +#define X(NAME) NAME = lang_it::NAME; +#include "text.def" +#undef X +} +auto bind_zh() -> void { +#define X(NAME) NAME = lang_zh::NAME; +#include "text.def" +#undef X +} +} // namespace + +auto BindLanguageStrings(i18n::Lang lang) -> void { + switch (lang) { + case i18n::Lang::en: + bind_en(); + break; + case i18n::Lang::de: + bind_de(); + break; + case i18n::Lang::ru: + bind_ru(); + break; + case i18n::Lang::nl: + bind_nl(); + break; + case i18n::Lang::pl: + bind_pl(); + break; + case i18n::Lang::fr: + bind_fr(); + break; + case i18n::Lang::it: + bind_it(); + break; + case i18n::Lang::zh: + bind_zh(); + break; + } +} diff --git a/i18n/_ChineseText.cpp b/i18n/_ChineseText.cpp index 5977e453..16d5d579 100644 --- a/i18n/_ChineseText.cpp +++ b/i18n/_ChineseText.cpp @@ -1,20 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("CHINESE") - - #if defined( CHINESE ) - #include "Text.h" - #include "FileMan.h" - #include "Scheduling.h" - #include "EditorMercs.h" - #include "Item Statistics.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_ChineseText_public_symbol(void){;} - -#if defined( CHINESE ) - -/* +/* ****************************************************************************************************** ** IMPORTANT TRANSLATION NOTES ** @@ -110,10 +94,6 @@ FAST HELP TEXT -- Explains how the syntax of fast help text works. */ -CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS] = -{ - L"", -}; //Encyclopedia @@ -12297,5 +12277,3 @@ STR16 szRobotText[] = L"机器人的额外装甲破坏了!", //L"The robot's extra armour plating was destroyed!", L"机器人附加%s技能效果。", //L"The robot gains the benefit of the %s skill trait.", }; - -#endif //CHINESE diff --git a/i18n/_DutchText.cpp b/i18n/_DutchText.cpp index 56283c9b..dc7b6f7a 100644 --- a/i18n/_DutchText.cpp +++ b/i18n/_DutchText.cpp @@ -1,22 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("DUTCH") - - #if defined( DUTCH ) - #include "Text.h" - #include "FileMan.h" - #include "Scheduling.h" - #include "EditorMercs.h" - #include "Item Statistics.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_DutchText_public_symbol(void){;} - -#ifdef DUTCH - - - -/* +/* ****************************************************************************************************** ** IMPORTANT TRANSLATION NOTES ** @@ -112,10 +94,6 @@ FAST HELP TEXT -- Explains how the syntax of fast help text works. */ -CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS] = -{ - L"", -}; //Encyclopedia STR16 pMenuStrings[] = @@ -12307,5 +12285,3 @@ STR16 szRobotText[] = // TODO: Translate L"The robot's extra armour plating was destroyed!", L"The robot gains the benefit of the %s skill trait.", }; - -#endif //DUTCH diff --git a/i18n/_EnglishText.cpp b/i18n/_EnglishText.cpp index a93dc98c..757c2dd8 100644 --- a/i18n/_EnglishText.cpp +++ b/i18n/_EnglishText.cpp @@ -1,20 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("ENGLISH") - - #if defined( ENGLISH ) - #include "Text.h" - #include "FileMan.h" - #include "Scheduling.h" - #include "EditorMercs.h" - #include "Item Statistics.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_EnglishText_public_symbol(void); - -#if defined( ENGLISH ) - -/* +/* ****************************************************************************************************** ** IMPORTANT TRANSLATION NOTES ** @@ -110,11 +94,6 @@ FAST HELP TEXT -- Explains how the syntax of fast help text works. */ -CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS] = -{ - L"", -}; - //Encyclopedia STR16 pMenuStrings[] = @@ -12297,5 +12276,3 @@ STR16 szRobotText[] = L"The robot's extra armour plating was destroyed!", L"The robot gains the benefit of the %s skill trait.", }; - -#endif //ENGLISH diff --git a/i18n/_FrenchText.cpp b/i18n/_FrenchText.cpp index 7d47cf68..8ecc10f3 100644 --- a/i18n/_FrenchText.cpp +++ b/i18n/_FrenchText.cpp @@ -1,20 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("FRENCH") - - #ifdef FRENCH - #include "Text.h" - #include "FileMan.h" - #include "Scheduling.h" - #include "EditorMercs.h" - #include "Item Statistics.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_FrenchText_public_symbol(void){;} - -#ifdef FRENCH - -/* +/* ****************************************************************************************************** ** IMPORTANT TRANSLATION NOTES ** @@ -115,10 +99,6 @@ FAST HELP TEXT -- Explains how the syntax of fast help text works. */ -CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS] = -{ - L"", -}; //Encyclopedia @@ -12289,5 +12269,3 @@ STR16 szRobotText[] = // TODO: Translate L"The robot's extra armour plating was destroyed!", L"The robot gains the benefit of the %s skill trait.", }; - -#endif //FRENCH diff --git a/i18n/_GermanText.cpp b/i18n/_GermanText.cpp index 5fbec512..caa58385 100644 --- a/i18n/_GermanText.cpp +++ b/i18n/_GermanText.cpp @@ -1,21 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("GERMAN") - - #ifdef GERMAN - #include "Text.h" - #include "FileMan.h" - #include "Scheduling.h" - #include "EditorMercs.h" - #include "Item Statistics.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_GermanText_public_symbol(void){;} - -#ifdef GERMAN - - -/* +/* ****************************************************************************************************** ** IMPORTANT TRANSLATION NOTES ** ****************************************************************************************************** @@ -134,10 +117,6 @@ Remove any LOOTF comment that has been checked, except maybe for "alt." (alterna 07/2010 LootFragg */ -CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS] = -{ - L"", -}; //Encyclopedia @@ -12212,5 +12191,3 @@ STR16 szRobotText[] = // TODO: Translate L"The robot's extra armour plating was destroyed!", L"The robot gains the benefit of the %s skill trait.", }; - -#endif //GERMAN diff --git a/i18n/_ItalianText.cpp b/i18n/_ItalianText.cpp index 5411245d..b85da996 100644 --- a/i18n/_ItalianText.cpp +++ b/i18n/_ItalianText.cpp @@ -1,20 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("ITALIAN") - - #if defined( ITALIAN ) - #include "Text.h" - #include "FileMan.h" - #include "Scheduling.h" - #include "EditorMercs.h" - #include "Item Statistics.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_ItalianText_public_symbol(void){;} - -#ifdef ITALIAN - -/* +/* ****************************************************************************************************** ** IMPORTANT TRANSLATION NOTES ** @@ -110,10 +94,6 @@ FAST HELP TEXT -- Explains how the syntax of fast help text works. */ -CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS] = -{ - L"", -}; //Encyclopedia STR16 pMenuStrings[] = @@ -12298,5 +12278,3 @@ STR16 szRobotText[] = // TODO: Translate L"The robot's extra armour plating was destroyed!", L"The robot gains the benefit of the %s skill trait.", }; - -#endif //ITALIAN diff --git a/i18n/_Ja25ChineseText.cpp b/i18n/_Ja25ChineseText.cpp index 732864fa..4fd43cfa 100644 --- a/i18n/_Ja25ChineseText.cpp +++ b/i18n/_Ja25ChineseText.cpp @@ -1,17 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("CHINESE") - - #ifdef CHINESE - #include "Text.h" - #include "FileMan.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_Ja25ChineseText_public_symbol(void){;} - -#ifdef CHINESE - -// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD +// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - New STOMP laptop strings @@ -524,5 +511,3 @@ STR16 gzDisplayCoverText[]= L"隐蔽难度", //L"Stealth difficulty", L"陷阱等级", //L"Trap level", }; - -#endif diff --git a/i18n/_Ja25DutchText.cpp b/i18n/_Ja25DutchText.cpp index 16a40dfe..70bf874b 100644 --- a/i18n/_Ja25DutchText.cpp +++ b/i18n/_Ja25DutchText.cpp @@ -1,17 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("DUTCH") - - #ifdef DUTCH - #include "Text.h" - #include "FileMan.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_Ja25DutchText_public_symbol(void){;} - -#ifdef DUTCH - -// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD +// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - New STOMP laptop strings @@ -525,6 +512,3 @@ STR16 gzDisplayCoverText[]= L"Stealth difficulty", L"Trap level", }; - - -#endif diff --git a/i18n/_Ja25EnglishText.cpp b/i18n/_Ja25EnglishText.cpp index 6cfae219..7041b17d 100644 --- a/i18n/_Ja25EnglishText.cpp +++ b/i18n/_Ja25EnglishText.cpp @@ -1,17 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("ENGLISH") - - #ifdef ENGLISH - #include "Text.h" - #include "FileMan.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_Ja25EnglishText_public_symbol(void); - -#ifdef ENGLISH - -// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD +// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - New STOMP laptop strings @@ -524,5 +511,3 @@ STR16 gzDisplayCoverText[]= L"Stealth difficulty", L"Trap level", }; - -#endif diff --git a/i18n/_Ja25FrenchText.cpp b/i18n/_Ja25FrenchText.cpp index e809ee15..d13b6e1d 100644 --- a/i18n/_Ja25FrenchText.cpp +++ b/i18n/_Ja25FrenchText.cpp @@ -1,17 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("FRENCH") - - #ifdef FRENCH - #include "Text.h" - #include "FileMan.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_Ja25FrenchText_public_symbol(void){;} - -#ifdef FRENCH - -// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD +// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -525,6 +512,3 @@ STR16 gzDisplayCoverText[]= L"Stealth difficulty", L"Trap level", }; - - -#endif diff --git a/i18n/_Ja25GermanText.cpp b/i18n/_Ja25GermanText.cpp index bd624c95..d55ad4b9 100644 --- a/i18n/_Ja25GermanText.cpp +++ b/i18n/_Ja25GermanText.cpp @@ -1,17 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("GERMAN") - - #ifdef GERMAN - #include "Text.h" - #include "FileMan.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_Ja25GermanText_public_symbol(void){;} - -#ifdef GERMAN - -// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD +// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD //these strings match up with the defines in IMP Skill trait.cpp STR16 gzIMPSkillTraitsText[]= @@ -526,6 +513,3 @@ STR16 gzDisplayCoverText[]= L"Stealth difficulty", L"Trap level", }; - - -#endif diff --git a/i18n/_Ja25ItalianText.cpp b/i18n/_Ja25ItalianText.cpp index c8300eb5..28079fcd 100644 --- a/i18n/_Ja25ItalianText.cpp +++ b/i18n/_Ja25ItalianText.cpp @@ -1,17 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("ITALIAN") - - #ifdef ITALIAN - #include "Text.h" - #include "FileMan.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_Ja25ItalianText_public_symbol(void){;} - -#ifdef ITALIAN - -// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD +// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - New STOMP laptop strings @@ -523,6 +510,3 @@ STR16 gzDisplayCoverText[]= L"Stealth difficulty", L"Trap level", }; - - -#endif diff --git a/i18n/_Ja25PolishText.cpp b/i18n/_Ja25PolishText.cpp index 1db59b88..9d5ed098 100644 --- a/i18n/_Ja25PolishText.cpp +++ b/i18n/_Ja25PolishText.cpp @@ -1,18 +1,4 @@ -// WANNE: This pragma should not be needed anymore for Polish version, after we set the encoding to UTF8 -// WANNE: Yes we need this here exclusivly in Polish version, because we do not have a codepage in the code like for other versions. -//#pragma setlocale("POLISH") - - #ifdef POLISH - #include "Text.h" - #include "FileMan.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_Ja25PolishText_public_symbol(void){;} - -#ifdef POLISH - -// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD +// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - New STOMP laptop strings @@ -525,6 +511,3 @@ STR16 gzDisplayCoverText[]= L"Stealth difficulty", L"Trap level", }; - - -#endif diff --git a/i18n/_Ja25RussianText.cpp b/i18n/_Ja25RussianText.cpp index 71ff1473..939bf7d6 100644 --- a/i18n/_Ja25RussianText.cpp +++ b/i18n/_Ja25RussianText.cpp @@ -1,17 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("RUSSIAN") - - #ifdef RUSSIAN - #include "Text.h" - #include "FileMan.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_Ja25RussianText_public_symbol(void){;} - -#ifdef RUSSIAN - -// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD +// VERY TRUNCATED FILE COPIED FROM JA2.5 FOR ITS FEATURES FOR JA2 GOLD /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - New STOMP laptop strings @@ -524,5 +511,3 @@ STR16 gzDisplayCoverText[]= L"Сложность остаться незаметным", //Stealth difficulty L"Уровень ловушки", }; - -#endif diff --git a/i18n/_PolishText.cpp b/i18n/_PolishText.cpp index 46dd6b53..4283eac2 100644 --- a/i18n/_PolishText.cpp +++ b/i18n/_PolishText.cpp @@ -1,21 +1,4 @@ -// WANNE: This pragma should not be needed anymore for Polish version, after we set the encoding to UTF8 -// WANNE: Yes we need this here exclusivly in Polish version, because we do not have a codepage in the code like for other versions. -//#pragma setlocale("POLISH") - - #if defined( POLISH ) - #include "Text.h" - #include "FileMan.h" - #include "Scheduling.h" - #include "EditorMercs.h" - #include "Item Statistics.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_PolishText_public_symbol(void){;} - -#ifdef POLISH - -/* +/* ****************************************************************************************************** ** IMPORTANT TRANSLATION NOTES ** @@ -111,10 +94,6 @@ FAST HELP TEXT -- Explains how the syntax of fast help text works. */ -CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS] = -{ - L"", -}; //Encyclopedia @@ -12311,5 +12290,3 @@ STR16 szRobotText[] = // TODO: Translate L"The robot's extra armour plating was destroyed!", L"The robot gains the benefit of the %s skill trait.", }; - -#endif //POLISH diff --git a/i18n/_RussianText.cpp b/i18n/_RussianText.cpp index 4a4e8c46..028e12d0 100644 --- a/i18n/_RussianText.cpp +++ b/i18n/_RussianText.cpp @@ -1,20 +1,4 @@ -// WANNE: Yes, this should be disabled, otherwise we get weird behavior when running the game with a VS 2005 build! -//#pragma setlocale("RUSSIAN") - - #if defined( RUSSIAN ) - #include "Text.h" - #include "FileMan.h" - #include "Scheduling.h" - #include "EditorMercs.h" - #include "Item Statistics.h" - #endif - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -void this_is_the_RussianText_public_symbol(void){;} - -#ifdef RUSSIAN - -/* +/* ****************************************************************************************************** ** IMPORTANT TRANSLATION NOTES ** @@ -110,10 +94,6 @@ FAST HELP TEXT -- Explains how the syntax of fast help text works. */ -CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS] = -{ - L"", -}; //Encyclopedia @@ -12292,5 +12272,3 @@ STR16 szRobotText[] = // TODO: Translate L"The robot's extra armour plating was destroyed!", L"The robot gains the benefit of the %s skill trait.", }; - -#endif //RUSSIAN diff --git a/i18n/include/Text.h b/i18n/include/Text.h index 0c890d6b..72bcae29 100644 --- a/i18n/include/Text.h +++ b/i18n/include/Text.h @@ -51,116 +51,116 @@ enum extern CHAR16 XMLTacticalMessages[1000][MAX_MESSAGE_NAMES_CHARS]; //Encyclopedia -extern STR16 pMenuStrings[]; -extern STR16 pLocationPageText[]; -extern STR16 pSectorPageText[]; -extern STR16 pEncyclopediaHelpText[]; -extern STR16 pEncyclopediaTypeText[]; -extern STR16 pEncyclopediaSkrotyText[]; -extern STR16 pEncyclopediaFilterLocationText[]; -extern STR16 pEncyclopediaSubFilterLocationText[]; -extern STR16 pEncyclopediaFilterCharText[]; -extern STR16 pEncyclopediaSubFilterCharText[]; -extern STR16 pEncyclopediaFilterItemText[]; -extern STR16 pEncyclopediaSubFilterItemText[]; -extern STR16 pEncyclopediaFilterQuestText[]; -extern STR16 pEncyclopediaSubFilterQuestText[]; -extern STR16 pEncyclopediaShortCharacterText[]; -extern STR16 pEncyclopediaHelpCharacterText[]; -extern STR16 pEncyclopediaShortInventoryText[]; -extern STR16 BoxFilter[]; -extern STR16 pOtherButtonsText[]; -extern STR16 pOtherButtonsHelpText[]; -extern STR16 QuestDescText[]; -extern STR16 FactDescText[]; +extern STR16 *pMenuStrings; +extern STR16 *pLocationPageText; +extern STR16 *pSectorPageText; +extern STR16 *pEncyclopediaHelpText; +extern STR16 *pEncyclopediaTypeText; +extern STR16 *pEncyclopediaSkrotyText; +extern STR16 *pEncyclopediaFilterLocationText; +extern STR16 *pEncyclopediaSubFilterLocationText; +extern STR16 *pEncyclopediaFilterCharText; +extern STR16 *pEncyclopediaSubFilterCharText; +extern STR16 *pEncyclopediaFilterItemText; +extern STR16 *pEncyclopediaSubFilterItemText; +extern STR16 *pEncyclopediaFilterQuestText; +extern STR16 *pEncyclopediaSubFilterQuestText; +extern STR16 *pEncyclopediaShortCharacterText; +extern STR16 *pEncyclopediaHelpCharacterText; +extern STR16 *pEncyclopediaShortInventoryText; +extern STR16 *BoxFilter; +extern STR16 *pOtherButtonsText; +extern STR16 *pOtherButtonsHelpText; +extern STR16 *QuestDescText; +extern STR16 *FactDescText; //Editor //Editor Taskbar Creation.cpp -extern STR16 iEditorItemStatsButtonsText[]; -extern STR16 FaceDirs[8]; -extern STR16 iEditorMercsToolbarText[]; -extern STR16 iEditorBuildingsToolbarText[]; -extern STR16 iEditorItemsToolbarText[]; -extern STR16 iEditorMapInfoToolbarText[]; -extern STR16 iEditorOptionsToolbarText[]; -extern STR16 iEditorTerrainToolbarText[]; -extern STR16 iEditorTaskbarInternalText[]; +extern STR16 *iEditorItemStatsButtonsText; +extern STR16 *FaceDirs; +extern STR16 *iEditorMercsToolbarText; +extern STR16 *iEditorBuildingsToolbarText; +extern STR16 *iEditorItemsToolbarText; +extern STR16 *iEditorMapInfoToolbarText; +extern STR16 *iEditorOptionsToolbarText; +extern STR16 *iEditorTerrainToolbarText; +extern STR16 *iEditorTaskbarInternalText; //Editor Taskbar Utils.cpp -extern STR16 iRenderMapEntryPointsAndLightsText[]; -extern STR16 iBuildTriggerNameText[]; -extern STR16 iRenderDoorLockInfoText[]; -extern STR16 iRenderEditorInfoText[]; +extern STR16 *iRenderMapEntryPointsAndLightsText; +extern STR16 *iBuildTriggerNameText; +extern STR16 *iRenderDoorLockInfoText; +extern STR16 *iRenderEditorInfoText; //EditorBuildings.cpp -extern STR16 iUpdateBuildingsInfoText[]; -extern STR16 iRenderDoorEditingWindowText[]; +extern STR16 *iUpdateBuildingsInfoText; +extern STR16 *iRenderDoorEditingWindowText; //EditorItems.cpp -extern STR16 pInitEditorItemsInfoText[]; -extern STR16 pDisplayItemStatisticsTex[]; -extern STR16 pUpdateMapInfoText[]; +extern STR16 *pInitEditorItemsInfoText; +extern STR16 *pDisplayItemStatisticsTex; +extern STR16 *pUpdateMapInfoText; //EditorMercs.cpp -extern CHAR16 gszScheduleActions[ 11 ][20]; // NUM_SCHEDULE_ACTIONS = 11 -extern STR16 zDiffNames[5]; // NUM_DIFF_LVLS = 5 -extern STR16 EditMercStat[12]; -extern STR16 EditMercOrders[8]; -extern STR16 EditMercAttitudes[6]; -extern STR16 pDisplayEditMercWindowText[]; -extern STR16 pCreateEditMercWindowText[]; -extern STR16 pDisplayBodyTypeInfoText[]; -extern STR16 pUpdateMercsInfoText[]; -extern CHAR16 pRenderMercStringsText[][100]; -extern STR16 pClearCurrentScheduleText[]; -extern STR16 pCopyMercPlacementText[]; -extern STR16 pPasteMercPlacementText[]; +extern CHAR16 (*gszScheduleActions)[20]; // NUM_SCHEDULE_ACTIONS = 11 +extern STR16 *zDiffNames; // NUM_DIFF_LVLS = 5 +extern STR16 *EditMercStat; +extern STR16 *EditMercOrders; +extern STR16 *EditMercAttitudes; +extern STR16 *pDisplayEditMercWindowText; +extern STR16 *pCreateEditMercWindowText; +extern STR16 *pDisplayBodyTypeInfoText; +extern STR16 *pUpdateMercsInfoText; +extern CHAR16 (*pRenderMercStringsText)[100]; +extern STR16 *pClearCurrentScheduleText; +extern STR16 *pCopyMercPlacementText; +extern STR16 *pPasteMercPlacementText; //editscreen.cpp -extern STR16 pEditModeShutdownText[]; -extern STR16 pHandleKeyboardShortcutsText[]; -extern STR16 pPerformSelectedActionText[]; -extern STR16 pWaitForHelpScreenResponseText[]; -extern STR16 pAutoLoadMapText[]; -extern STR16 pShowHighGroundText[]; +extern STR16 *pEditModeShutdownText; +extern STR16 *pHandleKeyboardShortcutsText; +extern STR16 *pPerformSelectedActionText; +extern STR16 *pWaitForHelpScreenResponseText; +extern STR16 *pAutoLoadMapText; +extern STR16 *pShowHighGroundText; //Item Statistics.cpp //extern CHAR16 gszActionItemDesc[ 34 ][ 30 ]; // NUM_ACTIONITEMS = 34 -extern STR16 pUpdateItemStatsPanelText[]; -extern STR16 pSetupGameTypeFlagsText[]; -extern STR16 pSetupGunGUIText[]; -extern STR16 pSetupArmourGUIText[]; -extern STR16 pSetupExplosivesGUIText[]; -extern STR16 pSetupTriggersGUIText[]; +extern STR16 *pUpdateItemStatsPanelText; +extern STR16 *pSetupGameTypeFlagsText; +extern STR16 *pSetupGunGUIText; +extern STR16 *pSetupArmourGUIText; +extern STR16 *pSetupExplosivesGUIText; +extern STR16 *pSetupTriggersGUIText; //Sector Summary.cpp -extern STR16 pCreateSummaryWindowText[]; -extern STR16 pRenderSectorInformationText[]; -extern STR16 pRenderItemDetailsText[]; -extern STR16 pRenderSummaryWindowText[]; -extern STR16 pUpdateSectorSummaryText[]; -extern STR16 pSummaryLoadMapCallbackText[]; -extern STR16 pReportErrorText[]; -extern STR16 pRegenerateSummaryInfoForAllOutdatedMapsText[]; -extern STR16 pSummaryUpdateCallbackText[]; -extern STR16 pApologizeOverrideAndForceUpdateEverythingText[]; +extern STR16 *pCreateSummaryWindowText; +extern STR16 *pRenderSectorInformationText; +extern STR16 *pRenderItemDetailsText; +extern STR16 *pRenderSummaryWindowText; +extern STR16 *pUpdateSectorSummaryText; +extern STR16 *pSummaryLoadMapCallbackText; +extern STR16 *pReportErrorText; +extern STR16 *pRegenerateSummaryInfoForAllOutdatedMapsText; +extern STR16 *pSummaryUpdateCallbackText; +extern STR16 *pApologizeOverrideAndForceUpdateEverythingText; //selectwin.cpp -extern STR16 pDisplaySelectionWindowGraphicalInformationText[]; -extern STR16 pDisplaySelectionWindowButtonText[]; +extern STR16 *pDisplaySelectionWindowGraphicalInformationText; +extern STR16 *pDisplaySelectionWindowButtonText; //Cursor Modes.cpp -extern STR16 wszSelType[6]; +extern STR16 *wszSelType; //-- -extern STR16 gzNewLaptopMessages[]; -extern STR16 zNewTacticalMessages[]; -extern CHAR16 gszAimPages[ 6 ][ 20 ]; -extern CHAR16 zGrod[][500]; -extern STR16 pCreditsJA2113[]; -extern CHAR16 ShortItemNames[MAXITEMS][80]; -extern CHAR16 ItemNames[MAXITEMS][80]; -extern CHAR16 AmmoCaliber[MAXITEMS][20]; -extern CHAR16 BobbyRayAmmoCaliber[MAXITEMS][20]; -extern CHAR16 WeaponType[MAXITEMS][30]; +extern STR16* gzNewLaptopMessages; +extern STR16* zNewTacticalMessages; +extern CHAR16 (*gszAimPages)[ 20 ]; +extern CHAR16 (*zGrod)[500]; +extern STR16* pCreditsJA2113; +extern CHAR16 (*ShortItemNames)[80]; +extern CHAR16 (*ItemNames)[80]; +extern CHAR16 (*AmmoCaliber)[20]; +extern CHAR16 (*BobbyRayAmmoCaliber)[20]; +extern CHAR16 (*WeaponType)[30]; -extern CHAR16 Message[][STRING_LENGTH]; -extern CHAR16 TeamTurnString[][STRING_LENGTH]; -extern STR16 pMilitiaControlMenuStrings[]; //lal -extern STR16 pTraitSkillsMenuStrings[]; //Flugente -extern STR16 pTraitSkillsMenuDescStrings[]; //Flugente -extern STR16 pTraitSkillsDenialStrings[]; //Flugente +extern CHAR16 (*Message)[STRING_LENGTH]; +extern CHAR16 (*TeamTurnString)[STRING_LENGTH]; +extern STR16* pMilitiaControlMenuStrings; //lal +extern STR16* pTraitSkillsMenuStrings; //Flugente +extern STR16* pTraitSkillsMenuDescStrings; //Flugente +extern STR16* pTraitSkillsDenialStrings; //Flugente enum { @@ -173,215 +173,215 @@ enum SKILLMENU_CORPSES, }; -extern STR16 pSkillMenuStrings[]; //Flugente +extern STR16* pSkillMenuStrings; //Flugente //extern STR16 pTalkToAllMenuStrings[]; -extern STR16 pSnitchMenuStrings[]; -extern STR16 pSnitchMenuDescStrings[]; -extern STR16 pSnitchToggleMenuStrings[]; -extern STR16 pSnitchToggleMenuDescStrings[]; -extern STR16 pSnitchSectorMenuStrings[]; -extern STR16 pSnitchSectorMenuDescStrings[]; -extern STR16 pPrisonerMenuStrings[]; -extern STR16 pPrisonerMenuDescStrings[]; -extern STR16 pSnitchPrisonExposedStrings[]; -extern STR16 pSnitchGatheringRumoursResultStrings[]; -extern STR16 pAssignMenuStrings[]; -extern STR16 pTrainingStrings[]; -extern STR16 pTrainingMenuStrings[]; -extern STR16 pAttributeMenuStrings[]; -extern STR16 pVehicleStrings[]; -extern STR16 pShortAttributeStrings[]; -extern STR16 pLongAttributeStrings[]; -extern STR16 pContractStrings[]; -extern STR16 pAssignmentStrings[]; -extern STR16 pConditionStrings[]; -extern CHAR16 pCountryNames[][MAX_TOWN_NAME_LENGHT]; -extern CHAR16 pTownNames[MAX_TOWNS][MAX_TOWN_NAME_LENGHT]; // Lesh: look mapscreen.h for definitions -extern STR16 pPersonnelScreenStrings[]; -extern STR16 pPersonnelRecordsHelpTexts[]; // added by SANDRO -extern STR16 pPersonnelTitle[]; -extern STR16 pUpperLeftMapScreenStrings[]; -extern STR16 pTacticalPopupButtonStrings[]; -extern STR16 pSquadMenuStrings[]; -extern STR16 pDoorTrapStrings[]; -extern STR16 pLongAssignmentStrings[]; -extern STR16 pContractExtendStrings[]; -extern STR16 pMapScreenMouseRegionHelpText[]; -extern STR16 pPersonnelAssignmentStrings[]; -extern STR16 pNoiseVolStr[]; -extern STR16 pNoiseTypeStr[]; -extern STR16 pDirectionStr[]; -extern STR16 pRemoveMercStrings[]; -extern STR16 sTimeStrings[]; -extern STR16 pLandTypeStrings[]; -extern STR16 pGuardMenuStrings[]; -extern STR16 pOtherGuardMenuStrings[]; -extern STR16 pInvPanelTitleStrings[]; -extern STR16 pPOWStrings[]; -extern STR16 pMilitiaString[]; -extern STR16 pMilitiaButtonString[]; -extern STR16 pEpcMenuStrings[]; +extern STR16* pSnitchMenuStrings; +extern STR16* pSnitchMenuDescStrings; +extern STR16* pSnitchToggleMenuStrings; +extern STR16* pSnitchToggleMenuDescStrings; +extern STR16* pSnitchSectorMenuStrings; +extern STR16* pSnitchSectorMenuDescStrings; +extern STR16* pPrisonerMenuStrings; +extern STR16* pPrisonerMenuDescStrings; +extern STR16* pSnitchPrisonExposedStrings; +extern STR16* pSnitchGatheringRumoursResultStrings; +extern STR16* pAssignMenuStrings; +extern STR16* pTrainingStrings; +extern STR16* pTrainingMenuStrings; +extern STR16* pAttributeMenuStrings; +extern STR16* pVehicleStrings; +extern STR16* pShortAttributeStrings; +extern STR16* pLongAttributeStrings; +extern STR16* pContractStrings; +extern STR16* pAssignmentStrings; +extern STR16* pConditionStrings; +extern CHAR16 (*pCountryNames)[MAX_TOWN_NAME_LENGHT]; +extern CHAR16 (*pTownNames)[MAX_TOWN_NAME_LENGHT]; // Lesh: look mapscreen.h for definitions +extern STR16* pPersonnelScreenStrings; +extern STR16* pPersonnelRecordsHelpTexts; // added by SANDRO +extern STR16* pPersonnelTitle; +extern STR16* pUpperLeftMapScreenStrings; +extern STR16* pTacticalPopupButtonStrings; +extern STR16* pSquadMenuStrings; +extern STR16* pDoorTrapStrings; +extern STR16* pLongAssignmentStrings; +extern STR16* pContractExtendStrings; +extern STR16* pMapScreenMouseRegionHelpText; +extern STR16* pPersonnelAssignmentStrings; +extern STR16* pNoiseVolStr; +extern STR16* pNoiseTypeStr; +extern STR16* pDirectionStr; +extern STR16* pRemoveMercStrings; +extern STR16* sTimeStrings; +extern STR16* pLandTypeStrings; +extern STR16* pGuardMenuStrings; +extern STR16* pOtherGuardMenuStrings; +extern STR16* pInvPanelTitleStrings; +extern STR16* pPOWStrings; +extern STR16* pMilitiaString; +extern STR16* pMilitiaButtonString; +extern STR16* pEpcMenuStrings; -extern STR16 pRepairStrings[]; -extern STR16 sPreStatBuildString[]; -extern STR16 sStatGainStrings[]; -extern STR16 pHelicopterEtaStrings[]; -extern STR16 pHelicopterRepairRefuelStrings[]; -extern STR16 sMapLevelString[]; -extern STR16 gsLoyalString[]; -extern STR16 pMapHeliErrorString[]; -extern STR16 gsUndergroundString[]; -extern STR16 gsTimeStrings[]; -extern STR16 sFacilitiesStrings[]; -extern STR16 pMapPopUpInventoryText[]; -extern STR16 pwTownInfoStrings[]; -extern STR16 pwMineStrings[]; -extern STR16 pwMiscSectorStrings[]; -extern STR16 pMapInventoryErrorString[]; -extern STR16 pMapInventoryStrings[]; -extern STR16 pMapScreenFastHelpTextList[]; -extern STR16 pMovementMenuStrings[]; -extern STR16 pUpdateMercStrings[]; -extern STR16 pMapScreenBorderButtonHelpText[]; -extern STR16 pMapScreenInvenButtonHelpText[]; -extern STR16 pMapScreenBottomFastHelp[]; -extern STR16 pMapScreenBottomText[]; -extern STR16 pMercDeadString[]; -extern CHAR16 pSenderNameList[500][128]; -extern STR16 pTraverseStrings[]; -extern STR16 pNewMailStrings[]; -extern STR16 pDeleteMailStrings[]; -extern STR16 pEmailHeaders[]; -extern STR16 pEmailTitleText[]; -extern STR16 pFinanceTitle[]; -extern STR16 pFinanceSummary[]; -extern STR16 pFinanceHeaders[]; -extern STR16 pTransactionText[]; -extern STR16 pTransactionAlternateText[]; -extern STR16 pMoralStrings[]; -extern STR16 pSkyriderText[]; -extern STR16 pMercFellAsleepString[]; -extern STR16 pLeftEquipmentString[]; -extern STR16 pMapScreenStatusStrings[]; -extern STR16 pMapScreenPrevNextCharButtonHelpText[]; -extern STR16 pEtaString[]; -extern STR16 pShortVehicleStrings[]; -extern STR16 pTrashItemText[]; -extern STR16 pMapErrorString[]; -extern STR16 pMapPlotStrings[]; -extern STR16 pMiscMapScreenMouseRegionHelpText[]; -extern STR16 pMercHeLeaveString[]; -extern STR16 pMercSheLeaveString[]; -extern STR16 pImpPopUpStrings[]; -extern STR16 pImpButtonText[]; -extern STR16 pExtraIMPStrings[]; -extern STR16 pFilesTitle[]; -extern STR16 pFilesSenderList[]; -extern STR16 pHistoryLocations[]; +extern STR16* pRepairStrings; +extern STR16* sPreStatBuildString; +extern STR16* sStatGainStrings; +extern STR16* pHelicopterEtaStrings; +extern STR16* pHelicopterRepairRefuelStrings; +extern STR16* sMapLevelString; +extern STR16* gsLoyalString; +extern STR16* pMapHeliErrorString; +extern STR16* gsUndergroundString; +extern STR16* gsTimeStrings; +extern STR16* sFacilitiesStrings; +extern STR16* pMapPopUpInventoryText; +extern STR16* pwTownInfoStrings; +extern STR16* pwMineStrings; +extern STR16* pwMiscSectorStrings; +extern STR16* pMapInventoryErrorString; +extern STR16* pMapInventoryStrings; +extern STR16* pMapScreenFastHelpTextList; +extern STR16* pMovementMenuStrings; +extern STR16* pUpdateMercStrings; +extern STR16* pMapScreenBorderButtonHelpText; +extern STR16* pMapScreenInvenButtonHelpText; +extern STR16* pMapScreenBottomFastHelp; +extern STR16* pMapScreenBottomText; +extern STR16* pMercDeadString; +extern CHAR16 (*pSenderNameList)[128]; +extern STR16* pTraverseStrings; +extern STR16* pNewMailStrings; +extern STR16* pDeleteMailStrings; +extern STR16* pEmailHeaders; +extern STR16* pEmailTitleText; +extern STR16* pFinanceTitle; +extern STR16* pFinanceSummary; +extern STR16* pFinanceHeaders; +extern STR16* pTransactionText; +extern STR16* pTransactionAlternateText; +extern STR16* pMoralStrings; +extern STR16* pSkyriderText; +extern STR16* pMercFellAsleepString; +extern STR16* pLeftEquipmentString; +extern STR16* pMapScreenStatusStrings; +extern STR16* pMapScreenPrevNextCharButtonHelpText; +extern STR16* pEtaString; +extern STR16* pShortVehicleStrings; +extern STR16* pTrashItemText; +extern STR16* pMapErrorString; +extern STR16* pMapPlotStrings; +extern STR16* pMiscMapScreenMouseRegionHelpText; +extern STR16* pMercHeLeaveString; +extern STR16* pMercSheLeaveString; +extern STR16* pImpPopUpStrings; +extern STR16* pImpButtonText; +extern STR16* pExtraIMPStrings; +extern STR16* pFilesTitle; +extern STR16* pFilesSenderList; +extern STR16* pHistoryLocations; //extern STR16 pHistoryAlternateStrings[]; //extern STR16 pHistoryStrings[]; // Externalized to "TableData\History.xml" -extern STR16 pHistoryHeaders[]; -extern STR16 pHistoryTitle[]; -extern STR16 pShowBookmarkString[]; -extern STR16 pWebPagesTitles[]; -extern STR16 pWebTitle[ ]; -extern STR16 pPersonnelString[]; -extern STR16 pErrorStrings[]; -extern STR16 pDownloadString[]; -extern STR16 pBookmarkTitle[]; -extern STR16 pBookMarkStrings[]; -extern STR16 pLaptopIcons[]; -extern STR16 gsAtmStartButtonText[]; -extern STR16 pDownloadString[]; -extern STR16 pPersonnelTeamStatsStrings[]; -extern STR16 pPersonnelCurrentTeamStatsStrings[]; -extern STR16 pPersonelTeamStrings[]; -extern STR16 pPersonnelDepartedStateStrings[]; -extern STR16 pMapHortIndex[]; -extern STR16 pMapVertIndex[]; -extern STR16 pMapDepthIndex[]; +extern STR16* pHistoryHeaders; +extern STR16* pHistoryTitle; +extern STR16* pShowBookmarkString; +extern STR16* pWebPagesTitles; +extern STR16* pWebTitle; +extern STR16* pPersonnelString; +extern STR16* pErrorStrings; +extern STR16* pDownloadString; +extern STR16* pBookmarkTitle; +extern STR16* pBookMarkStrings; +extern STR16* pLaptopIcons; +extern STR16* gsAtmStartButtonText; +extern STR16* pDownloadString; +extern STR16* pPersonnelTeamStatsStrings; +extern STR16* pPersonnelCurrentTeamStatsStrings; +extern STR16* pPersonelTeamStrings; +extern STR16* pPersonnelDepartedStateStrings; +extern STR16* pMapHortIndex; +extern STR16* pMapVertIndex; +extern STR16* pMapDepthIndex; //extern STR16 sCritLocationStrings[]; //extern STR16 sVehicleHit[ ]; -extern STR16 pLaptopTitles[]; -extern STR16 pDayStrings[]; -extern STR16 pMercContractOverStrings[]; -extern STR16 pMilitiaConfirmStrings[]; -extern STR16 pDeliveryLocationStrings[]; -extern STR16 pSkillAtZeroWarning[]; -extern STR16 pIMPBeginScreenStrings[]; -extern STR16 pIMPFinishButtonText[1]; -extern STR16 pIMPFinishStrings[]; -extern STR16 pIMPVoicesStrings[]; -extern STR16 pDepartedMercPortraitStrings[]; -extern STR16 pPersTitleText[]; -extern STR16 pPausedGameText[]; -extern STR16 zOptionsToggleText[]; -extern STR16 zOptionsScreenHelpText[]; -extern STR16 pDoctorWarningString[]; -extern STR16 pMilitiaButtonsHelpText[]; -extern STR16 pMapScreenJustStartedHelpText[]; -extern STR16 pLandMarkInSectorString[]; -extern STR16 gzMercSkillText[]; -extern STR16 gzMercSkillTextNew[]; // added by SANDRO -extern STR16 gzNonPersistantPBIText[]; -extern STR16 gzMiscString[]; +extern STR16* pLaptopTitles; +extern STR16* pDayStrings; +extern STR16* pMercContractOverStrings; +extern STR16* pMilitiaConfirmStrings; +extern STR16* pDeliveryLocationStrings; +extern STR16* pSkillAtZeroWarning; +extern STR16* pIMPBeginScreenStrings; +extern STR16* pIMPFinishButtonText; +extern STR16* pIMPFinishStrings; +extern STR16* pIMPVoicesStrings; +extern STR16* pDepartedMercPortraitStrings; +extern STR16* pPersTitleText; +extern STR16* pPausedGameText; +extern STR16* zOptionsToggleText; +extern STR16* zOptionsScreenHelpText; +extern STR16* pDoctorWarningString; +extern STR16* pMilitiaButtonsHelpText; +extern STR16* pMapScreenJustStartedHelpText; +extern STR16* pLandMarkInSectorString; +extern STR16* gzMercSkillText; +extern STR16* gzMercSkillTextNew; // added by SANDRO +extern STR16* gzNonPersistantPBIText; +extern STR16* gzMiscString; -extern STR16 wMapScreenSortButtonHelpText[]; -extern STR16 pNewNoiseStr[]; -extern STR16 pTauntUnknownVoice[]; // anv: for enemy taunts -extern STR16 gzLateLocalizedString[]; +extern STR16* wMapScreenSortButtonHelpText; +extern STR16* pNewNoiseStr; +extern STR16* pTauntUnknownVoice; // anv: for enemy taunts +extern STR16* gzLateLocalizedString; -extern STR16 gzCWStrings[]; +extern STR16* gzCWStrings; -extern STR16 gzTooltipStrings[]; +extern STR16* gzTooltipStrings; -// These have been added - SANDRO -extern STR16 pSkillTraitBeginIMPStrings[]; -extern STR16 sgAttributeSelectionText[]; -extern STR16 pCharacterTraitBeginIMPStrings[]; -extern STR16 gzIMPCharacterTraitText[]; -extern STR16 gzIMPAttitudesText[]; -extern STR16 gzIMPColorChoosingText[]; -extern STR16 sColorChoiceExplanationTexts[]; -extern STR16 gzIMPDisabilityTraitText[]; // added by Flugente -extern STR16 gzIMPDisabilityTraitEmailTextDeaf[]; // added by Flugente -extern STR16 gzIMPDisabilityTraitEmailTextShortSighted[]; -extern STR16 gzIMPDisabilityTraitEmailTextHemophiliac[]; // added by Flugente -extern STR16 gzIMPDisabilityTraitEmailTextAfraidOfHeights[]; // added by Flugente -extern STR16 gzIMPDisabilityTraitEmailTextSelfHarm[]; // added by Flugente -extern STR16 sEnemyTauntsFireGun[]; -extern STR16 sEnemyTauntsFireLauncher[]; -extern STR16 sEnemyTauntsThrow[]; -extern STR16 sEnemyTauntsChargeKnife[]; -extern STR16 sEnemyTauntsRunAway[]; -extern STR16 sEnemyTauntsSeekNoise[]; -extern STR16 sEnemyTauntsAlert[]; -extern STR16 sEnemyTauntsGotHit[]; -extern STR16 sEnemyTauntsNoticedMerc[]; -extern STR16 sSpecialCharacters[]; +// These have been added - SANDRO +extern STR16* pSkillTraitBeginIMPStrings; +extern STR16* sgAttributeSelectionText; +extern STR16* pCharacterTraitBeginIMPStrings; +extern STR16* gzIMPCharacterTraitText; +extern STR16* gzIMPAttitudesText; +extern STR16* gzIMPColorChoosingText; +extern STR16* sColorChoiceExplanationTexts; +extern STR16* gzIMPDisabilityTraitText; // added by Flugente +extern STR16* gzIMPDisabilityTraitEmailTextDeaf; // added by Flugente +extern STR16* gzIMPDisabilityTraitEmailTextShortSighted; +extern STR16* gzIMPDisabilityTraitEmailTextHemophiliac; // added by Flugente +extern STR16* gzIMPDisabilityTraitEmailTextAfraidOfHeights; // added by Flugente +extern STR16* gzIMPDisabilityTraitEmailTextSelfHarm; // added by Flugente +extern STR16* sEnemyTauntsFireGun; +extern STR16* sEnemyTauntsFireLauncher; +extern STR16* sEnemyTauntsThrow; +extern STR16* sEnemyTauntsChargeKnife; +extern STR16* sEnemyTauntsRunAway; +extern STR16* sEnemyTauntsSeekNoise; +extern STR16* sEnemyTauntsAlert; +extern STR16* sEnemyTauntsGotHit; +extern STR16* sEnemyTauntsNoticedMerc; +extern STR16* sSpecialCharacters; //**** // HEADROCK HAM 3.6: New arrays for facility operation messages -extern STR16 gzFacilityErrorMessage[]; -extern STR16 gzFacilityAssignmentStrings[]; -extern STR16 gzFacilityRiskResultStrings[]; +extern STR16* gzFacilityErrorMessage; +extern STR16* gzFacilityAssignmentStrings; +extern STR16* gzFacilityRiskResultStrings; // HEADROCK HAM 4: Text for the new CTH indicator. -extern STR16 gzNCTHlabels[]; +extern STR16* gzNCTHlabels; // HEADROCK HAM 5: Messages for automatic sector inventory sorting. -extern STR16 gzMapInventorySortingMessage[]; -extern STR16 gzMapInventoryFilterOptions[]; +extern STR16* gzMapInventorySortingMessage; +extern STR16* gzMapInventoryFilterOptions; // MeLoDy (Merc Compare) -extern STR16 gzMercCompare[]; +extern STR16* gzMercCompare; enum { ANTIHACKERSTR_EXITGAME, TEXT_NUM_ANTIHACKERSTR, }; -extern STR16 pAntiHackerString[]; +extern STR16* pAntiHackerString; enum { @@ -506,9 +506,9 @@ enum TEXT_NUM_MSG, }; -extern STR16 pMessageStrings[]; +extern STR16* pMessageStrings; -extern CHAR16 ItemPickupHelpPopup[][40]; +extern CHAR16 (*ItemPickupHelpPopup)[40]; enum { @@ -715,64 +715,64 @@ enum #define MED_STRING_LENGTH 80 #define SMALL_STRING_LENGTH 20 -extern CHAR16 TacticalStr[][MED_STRING_LENGTH]; -extern CHAR16 LargeTacticalStr[][ LARGE_STRING_LENGTH ]; +extern CHAR16 (*TacticalStr)[MED_STRING_LENGTH]; +extern CHAR16 (*LargeTacticalStr)[ LARGE_STRING_LENGTH ]; -extern CHAR16 zDialogActions[][ SMALL_STRING_LENGTH ]; -extern CHAR16 zDealerStrings[][ SMALL_STRING_LENGTH ]; -extern CHAR16 zTalkMenuStrings[][ SMALL_STRING_LENGTH ]; -extern STR16 gzMoneyAmounts[6]; -extern CHAR16 gzProsLabel[10]; -extern CHAR16 gzConsLabel[10]; +extern CHAR16 (*zDialogActions)[ SMALL_STRING_LENGTH ]; +extern CHAR16 (*zDealerStrings)[ SMALL_STRING_LENGTH ]; +extern CHAR16 (*zTalkMenuStrings)[ SMALL_STRING_LENGTH ]; +extern STR16* gzMoneyAmounts; +extern CHAR16* gzProsLabel; +extern CHAR16* gzConsLabel; // HEADROCK HAM 4: Text for the UDB tabs -extern STR16 gzItemDescTabButtonText[ 3 ]; -extern STR16 gzItemDescTabButtonShortText[ 3 ]; -extern STR16 gzItemDescGenHeaders[ 4 ]; -extern STR16 gzItemDescGenIndexes[ 4 ]; +extern STR16* gzItemDescTabButtonText; +extern STR16* gzItemDescTabButtonShortText; +extern STR16* gzItemDescGenHeaders; +extern STR16* gzItemDescGenIndexes; // HEADROCK HAM 4: Added list of condition strings -extern STR16 gConditionDesc[ 9 ]; +extern STR16* gConditionDesc; // Flugente: Added list of temperature descriptions -extern STR16 gTemperatureDesc[ 11 ]; +extern STR16* gTemperatureDesc; // Flugente: Added list of food condition descriptions -extern STR16 gFoodDesc[ 8 ]; +extern STR16* gFoodDesc; -extern CHAR16 gMoneyStatsDesc[][ 14 ]; +extern CHAR16 (*gMoneyStatsDesc)[ 14 ]; // HEADROCK: Altered value to 16 //WarmSteel - And I need 17. // Flugente: 17->19 -extern CHAR16 gWeaponStatsDesc[][ 20 ]; +extern CHAR16 (*gWeaponStatsDesc)[ 20 ]; // HEADROCK: Added externs for Item Description Box icon and stat tooltips // Note that I've inflated some of these to 20 to avoid issues. -extern STR16 gzWeaponStatsFasthelpTactical[ 33 ]; -extern STR16 gzMiscItemStatsFasthelp[]; +extern STR16* gzWeaponStatsFasthelpTactical; +extern STR16* gzMiscItemStatsFasthelp; // HEADROCK HAM 4: New tooltip texts -extern STR16 gzUDBButtonTooltipText[ 3 ]; -extern STR16 gzUDBHeaderTooltipText[ 4 ]; -extern STR16 gzUDBGenIndexTooltipText[ 4 ]; -extern STR16 gzUDBAdvIndexTooltipText[ 5 ]; -extern STR16 szUDBGenWeaponsStatsTooltipText[ 23 ]; -extern STR16 szUDBGenWeaponsStatsExplanationsTooltipText[ 24 ]; -extern STR16 szUDBGenArmorStatsTooltipText[ 4 ]; // silversurfer Repair Ease: 3->5 -extern STR16 szUDBGenArmorStatsExplanationsTooltipText[ 5 ]; // silversurfer Repair Ease: 3->5 -extern STR16 szUDBGenAmmoStatsTooltipText[ 6 ]; // Flugente Overheating: 3->4 poison: 4->5 dirt: 5->6 -extern STR16 szUDBGenAmmoStatsExplanationsTooltipText[ 6 ]; // Flugente Overheating: 3->4 poison: 4->5 dirt: 5->6 -extern STR16 szUDBGenExplosiveStatsTooltipText[ 23 ]; // silversurfer Repair Ease: 22->23 -extern STR16 szUDBGenExplosiveStatsExplanationsTooltipText[ 23 ]; // silversurfer Repair Ease: 22->23 -extern STR16 szUDBGenCommonStatsTooltipText[ 3 ]; // silversurfer new for items that don't fit the other categories -extern STR16 szUDBGenCommonStatsExplanationsTooltipText[ 3 ]; // silversurfer new for items that don't fit the other categories -extern STR16 szUDBGenSecondaryStatsTooltipText[]; // Flugente Food System: 26 -> 28 external feeding: 28->30 JMich_SkillsModifiers: 31 for Defusal kit - covert item: 31->32 silversurfer more tags: 32->37 -extern STR16 szUDBGenSecondaryStatsExplanationsTooltipText[]; // Flugente Food System: 26 -> 28 external feeding: 28->30 JMich_SkillsModifiers: 31 for Defusal kit - covert item: 31->32 silversurfer more tags: 32->37 -extern STR16 szUDBAdvStatsTooltipText[]; -extern STR16 szUDBAdvStatsExplanationsTooltipText[]; -extern STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]; +extern STR16* gzUDBButtonTooltipText; +extern STR16* gzUDBHeaderTooltipText; +extern STR16* gzUDBGenIndexTooltipText; +extern STR16* gzUDBAdvIndexTooltipText; +extern STR16* szUDBGenWeaponsStatsTooltipText; +extern STR16* szUDBGenWeaponsStatsExplanationsTooltipText; +extern STR16* szUDBGenArmorStatsTooltipText; // silversurfer Repair Ease: 3->5 +extern STR16* szUDBGenArmorStatsExplanationsTooltipText; // silversurfer Repair Ease: 3->5 +extern STR16* szUDBGenAmmoStatsTooltipText; // Flugente Overheating: 3->4 poison: 4->5 dirt: 5->6 +extern STR16* szUDBGenAmmoStatsExplanationsTooltipText; // Flugente Overheating: 3->4 poison: 4->5 dirt: 5->6 +extern STR16* szUDBGenExplosiveStatsTooltipText; // silversurfer Repair Ease: 22->23 +extern STR16* szUDBGenExplosiveStatsExplanationsTooltipText; // silversurfer Repair Ease: 22->23 +extern STR16* szUDBGenCommonStatsTooltipText; // silversurfer new for items that don't fit the other categories +extern STR16* szUDBGenCommonStatsExplanationsTooltipText; // silversurfer new for items that don't fit the other categories +extern STR16* szUDBGenSecondaryStatsTooltipText; // Flugente Food System: 26 -> 28 external feeding: 28->30 JMich_SkillsModifiers: 31 for Defusal kit - covert item: 31->32 silversurfer more tags: 32->37 +extern STR16* szUDBGenSecondaryStatsExplanationsTooltipText; // Flugente Food System: 26 -> 28 external feeding: 28->30 JMich_SkillsModifiers: 31 for Defusal kit - covert item: 31->32 silversurfer more tags: 32->37 +extern STR16* szUDBAdvStatsTooltipText; +extern STR16* szUDBAdvStatsExplanationsTooltipText; +extern STR16* szUDBAdvStatsExplanationsTooltipTextForWeapons; // Headrock: End Externs -extern STR16 sKeyDescriptionStrings[2]; -extern CHAR16 zHealthStr[][13]; -extern STR16 gzHiddenHitCountStr[1]; -extern STR16 zVehicleName[ 6 ]; -extern STR16 pVehicleSeatsStrings[ 2 ] ; +extern STR16* sKeyDescriptionStrings; +extern CHAR16 (*zHealthStr)[13]; +extern STR16* gzHiddenHitCountStr; +extern STR16* zVehicleName; +extern STR16* pVehicleSeatsStrings ; // Flugente: externalised texts for some features enum @@ -816,7 +816,7 @@ enum TEXT_NUM_COVERT_STR }; -extern STR16 szCovertTextStr[]; +extern STR16* szCovertTextStr; enum { @@ -831,7 +831,7 @@ enum TEXT_POWERPACK_STR }; -extern STR16 gPowerPackDesc[]; +extern STR16* gPowerPackDesc; enum { @@ -849,7 +849,7 @@ enum TEXT_NUM_CORPSE_STR }; -extern STR16 szCorpseTextStr[]; +extern STR16* szCorpseTextStr; enum { @@ -871,7 +871,7 @@ enum TEXT_NUM_FOOD_STR }; -extern STR16 szFoodTextStr[]; +extern STR16* szFoodTextStr; enum { @@ -896,7 +896,7 @@ enum TEXT_NUM_PRISONER_STR }; -extern STR16 szPrisonerTextStr[]; +extern STR16* szPrisonerTextStr; enum { @@ -910,7 +910,7 @@ enum TEXT_NUM_MTA_STR }; -extern STR16 szMTATextStr[]; +extern STR16* szMTATextStr; enum { @@ -924,7 +924,7 @@ enum TEXT_NUM_INV_ARM_STR }; -extern STR16 szInventoryArmTextStr[]; +extern STR16* szInventoryArmTextStr; enum { @@ -1179,7 +1179,7 @@ enum{ EXIT_GUI_ESCORTED_CHARACTERS_CANT_LEAVE_SECTOR_ALONE_STR, TEXT_NUM_EXIT_GUI }; -extern STR16 pExitingSectorHelpText[]; +extern STR16* pExitingSectorHelpText; enum @@ -1200,7 +1200,7 @@ enum INS_CONTRACT_CLEAR, TEXT_NUM_INS_CONTRACT }; -extern STR16 InsContractText[]; +extern STR16* InsContractText; //Insurance Info @@ -1210,7 +1210,7 @@ enum INS_INFO_NEXT, TEXT_NUM_INS_INFO, }; -extern STR16 InsInfoText[]; +extern STR16* InsInfoText; //Merc Account.c enum @@ -1227,10 +1227,10 @@ enum MERC_ACCOUNT_NAME_PLUSGEAR, TEXT_NUM_MERC_ACCOUNT, }; -extern STR16 MercAccountText[]; +extern STR16* MercAccountText; // WANNE: The "Next" and "Prev" button text of the merc account page -extern STR16 MercAccountPageText[]; +extern STR16* MercAccountPageText; //MercFile.c @@ -1269,7 +1269,7 @@ enum MERC_FILES_SPECIAL_OFFER, TEXT_NUM_MERC_FILES, }; -extern STR16 MercInfo[]; +extern STR16* MercInfo; //MercNoAccount.c @@ -1280,7 +1280,7 @@ enum MERC_NO_ACC_NO_ACCOUNT_OPEN_ONE, TEXT_NUM_MERC_NO_ACC, }; -extern STR16 MercNoAccountText[]; +extern STR16* MercNoAccountText; @@ -1295,7 +1295,7 @@ enum MERC_NO_FUNDS_TRANSFER_FAILED, TEXT_NUM_MERC, }; -extern STR16 MercHomePageText[]; +extern STR16* MercHomePageText; //Funerl.c @@ -1315,7 +1315,7 @@ enum FUNERAL_OUR_SYMPATHIES, TEXT_NUM_FUNERAL, }; -extern STR16 sFuneralString[]; +extern STR16* sFuneralString; //Florist.c @@ -1337,7 +1337,7 @@ enum FLORIST_ADVERTISEMENT_9, TEXT_NUM_FLORIST, }; -extern STR16 sFloristText[]; +extern STR16* sFloristText; //Florist Order Form @@ -1367,7 +1367,7 @@ enum FLORIST_ORDER_NAME, TEXT_NUM_FLORIST_ORDER, }; -extern STR16 sOrderFormText[]; +extern STR16* sOrderFormText; @@ -1381,7 +1381,7 @@ enum FLORIST_GALLERY_HOME, TEXT_NUM_FLORIST_GALLERY, }; -extern STR16 sFloristGalleryText[]; +extern STR16* sFloristGalleryText; //Florist Cards @@ -1391,7 +1391,7 @@ enum FLORIST_CARDS_BACK, TEXT_NUM_FLORIST_CARDS, }; -extern STR16 sFloristCards[]; +extern STR16* sFloristCards; // Bobbyr Mail Order.c enum @@ -1424,7 +1424,7 @@ enum BOBBYR_GOTOSHIPMENT_PAGE, TEXT_NUM_BOBBYR_MAILORDER, }; -extern STR16 BobbyROrderFormText[]; +extern STR16* BobbyROrderFormText; enum { @@ -1524,8 +1524,8 @@ enum TEXT_NUM_BOBBYR_GUNS, }; -extern STR16 BobbyRText[]; -extern STR16 BobbyRFilter[]; +extern STR16* BobbyRText; +extern STR16* BobbyRFilter; //BobbyR.c @@ -1542,7 +1542,7 @@ enum BOBBYR_UNDER_CONSTRUCTION, TEXT_NUM_BOBBYR }; -extern STR16 BobbyRaysFrontText[]; +extern STR16* BobbyRaysFrontText; //Aim Sort.c enum @@ -1569,7 +1569,7 @@ enum DESCENDING, TEXT_NUM_AIM_SORT }; -extern STR16 AimSortText[]; +extern STR16* AimSortText; //Aim Policies.c enum @@ -1582,7 +1582,7 @@ enum AIM_POLICIES_AGREE, TEXT_NUM_AIM_POLICIES }; -extern STR16 AimPolicyText[]; +extern STR16* AimPolicyText; @@ -1593,7 +1593,7 @@ enum AIM_MEMBER_CLICK_INSTRUCTIONS, TEXT_NUM_AIM_MEMBER_TEXT }; -extern STR16 AimMemberText[]; +extern STR16* AimMemberText; @@ -1632,7 +1632,7 @@ enum AIM_MEMBER_UB_MISSION_FEE, TEXT_NUM_AIM_MEMBER_CHARINFO, }; -extern STR16 CharacterInfo[]; +extern STR16* CharacterInfo; @@ -1656,7 +1656,7 @@ enum AIM_MEMBER_WITH_MEDICAL, //14 TEXT_NUM_AIM_MEMBER_VCONF }; -extern STR16 VideoConfercingText[]; +extern STR16* VideoConfercingText; //Aim Member.c enum @@ -1675,7 +1675,7 @@ enum AIM_MEMBER_MESSAGE_RECORDED, TEXT_NUM_AIM_MEMBER_POPUP }; -extern STR16 AimPopUpText[]; +extern STR16* AimPopUpText; //AIM Link.c enum @@ -1683,7 +1683,7 @@ enum AIM_LINK_TITLE, TEXM_NUM_AIM_LINK, }; -extern STR16 AimLinkText[]; +extern STR16* AimLinkText; //Aim History @@ -1696,7 +1696,7 @@ enum AIM_HISTORY_NEXT, TEXT_NUM_AIM_HISTORY, }; -extern STR16 AimHistoryText[]; +extern STR16* AimHistoryText; @@ -1727,7 +1727,7 @@ enum AIM_FI_ON_ASSIGN, TEXT_NUM_AIM_FI, }; -extern STR16 AimFiText[]; +extern STR16* AimFiText; //AimArchives. @@ -1740,7 +1740,7 @@ enum AIM_ALUMNI_DONE, TEXT_NUM_AIM_ALUMNI, }; -extern STR16 AimAlumniText[]; +extern STR16* AimAlumniText; @@ -1763,7 +1763,7 @@ enum TEXT_NUM_AIM_SCREEN }; -extern STR16 AimScreenText[]; +extern STR16* AimScreenText; //Aim Home Page enum @@ -1777,7 +1777,7 @@ enum TEXT_NUM_AIM_MENU }; -extern STR16 AimBottomMenuText[]; +extern STR16* AimBottomMenuText; @@ -1788,7 +1788,7 @@ enum MAP_SCREEN_NO_MILITIA_TEXT, TEXT_NUM_MAP_SCREEN, }; -extern STR16 zMarksMapScreenText[]; +extern STR16* zMarksMapScreenText; @@ -1923,14 +1923,14 @@ enum }; //Strings used in conjunction with above enumerations -extern STR16 gpStrategicString[]; +extern STR16* gpStrategicString; enum { STR_GAMECLOCK_DAY_NAME, TEXT_NUM_GAMECLOCK, }; -extern STR16 gpGameClockString[]; +extern STR16* gpGameClockString; //enums for the Shopkeeper Interface enum @@ -1952,7 +1952,7 @@ enum SKI_TEXT_BUDGET, TEXT_NUM_SKI_TEXT }; -extern STR16 SKI_Text[]; +extern STR16* SKI_Text; //ShopKeeper Interface enum @@ -1975,7 +1975,7 @@ enum NUM_SKI_ATM_BUTTONS }; -extern STR16 SkiAtmText[]; +extern STR16* SkiAtmText; //ShopKeeper Interface enum @@ -1988,7 +1988,7 @@ enum SKI_ATM_MODE_TEXT_BALANCE, TEXT_NUM_SKI_ATM_MODE_TEXT, }; -extern STR16 gzSkiAtmText[]; +extern STR16* gzSkiAtmText; //ShopKeeperInterface Message Box defines enum @@ -2009,7 +2009,7 @@ enum TEXT_NUM_SKI_MBOX_TEXT }; -extern STR16 SkiMessageBoxText[]; +extern STR16* SkiMessageBoxText; //enums for the above text @@ -2055,7 +2055,7 @@ enum TEXT_NUM_SLG_TEXT, }; -extern STR16 zSaveLoadText[]; +extern STR16* zSaveLoadText; @@ -2080,12 +2080,12 @@ enum TEXT_NUM_OPT_TEXT, }; -extern STR16 zOptionsText[]; +extern STR16* zOptionsText; -extern STR16 z113FeaturesScreenText[]; // main UI text -extern STR16 z113FeaturesToggleText[]; // toggle button text -extern STR16 z113FeaturesHelpText[]; // hover text -extern STR16 z113FeaturesPanelText[]; // left panel text +extern STR16* z113FeaturesScreenText; // main UI text +extern STR16* z113FeaturesToggleText; // toggle button text +extern STR16* z113FeaturesHelpText; // hover text +extern STR16* z113FeaturesPanelText; // left panel text //used with the gMoneyStatsDesc[] enum @@ -2210,7 +2210,7 @@ enum //////////////////////////////////// TEXT_NUM_GIO_TEXT }; -extern STR16 gzGIOScreenText[]; +extern STR16* gzGIOScreenText; // OJW - 20081129 // Multiplayer Join Screen @@ -2235,9 +2235,9 @@ enum TEXT_NUM_MPJ_TEXT }; -extern STR16 gzMPJHelpText[]; +extern STR16* gzMPJHelpText; -extern STR16 gzMPJScreenText[]; +extern STR16* gzMPJScreenText; //Multiplayer Host Screen enum { @@ -2307,7 +2307,7 @@ enum MPH_ALLOW, TEXT_NUM_MPH_TEXT, }; -extern STR16 gzMPHScreenText[]; +extern STR16* gzMPHScreenText; enum { MPS_TITLE_TEXT, @@ -2325,7 +2325,7 @@ enum MPS_WAITSERVER_TEXT, TEXT_NUM_MPS_TEXT, }; -extern STR16 gzMPSScreenText[]; +extern STR16* gzMPSScreenText; enum { MPC_CANCEL_TEXT, @@ -2337,7 +2337,7 @@ enum MPC_READY_TEXT, TEXT_NUM_MPC_TEXT, }; -extern STR16 gzMPCScreenText[]; +extern STR16* gzMPCScreenText; // Multiplayer Starting Edges enum { @@ -2348,7 +2348,7 @@ enum MP_EDGE_CENTER, MAX_EDGES, }; -extern STR16 gszMPEdgesText[]; +extern STR16* gszMPEdgesText; // MP TEAM NAMES enum { @@ -2358,11 +2358,11 @@ enum MP_TEAM_4, MAX_MP_TEAMS, }; -extern STR16 gszMPTeamNames[]; +extern STR16* gszMPTeamNames; -extern STR16 gzMPChatToggleText[]; +extern STR16* gzMPChatToggleText; -extern STR16 gzMPChatboxText[]; +extern STR16* gzMPChatboxText; enum { @@ -2395,14 +2395,14 @@ enum HLP_SCRN_TXT__EXIT_SCREEN, TEXT_NUM_HLP }; -extern STR16 gzHelpScreenText[]; +extern STR16* gzHelpScreenText; -extern STR16 gzLaptopHelpText[]; +extern STR16* gzLaptopHelpText; -extern STR16 gzMoneyWithdrawMessageText[]; -extern STR16 gzCopyrightText[]; +extern STR16* gzMoneyWithdrawMessageText; +extern STR16* gzCopyrightText; @@ -2426,7 +2426,7 @@ enum BROKEN_LINK_TXT_SITE_NOT_FOUND, TEXT_NUM_BROKEN_LINK, }; -extern STR16 BrokenLinkText[]; +extern STR16* BrokenLinkText; //Bobby rays page for recent shipments enum @@ -2438,7 +2438,7 @@ enum TEXT_NUM_BOBBYR_SHIPMENT, }; -extern STR16 gzBobbyRShipmentText[]; +extern STR16* gzBobbyRShipmentText; enum @@ -2449,7 +2449,7 @@ enum GIO_CFS_INSANE, TEXT_NUM_GIO_CFS, }; -extern STR16 zGioDifConfirmText[]; +extern STR16* zGioDifConfirmText; enum @@ -2473,9 +2473,9 @@ enum NUM_PEOPLE_IN_CREDITS, }; -STR16 gzCreditNames[]; -STR16 gzCreditNameTitle[]; -STR16 gzCreditNameFunny[]; +extern STR16* gzCreditNames; +extern STR16* gzCreditNameTitle; +extern STR16* gzCreditNameFunny; extern STR16 GetWeightUnitString( void ); @@ -2483,14 +2483,14 @@ FLOAT GetWeightBasedOnMetricOption( UINT32 uiObjectWeight ); //SB: new 1.13 messages -extern STR16 New113Message[]; -extern STR16 New113MERCMercMailTexts[]; -extern STR16 MissingIMPSkillsDescriptions[]; +extern STR16* New113Message; +extern STR16* New113MERCMercMailTexts; +extern STR16* MissingIMPSkillsDescriptions; -extern STR16 New113AIMMercMailTexts[]; // WANNE: new WF Merc text, that does not exist in Email.edt +extern STR16* New113AIMMercMailTexts; // WANNE: new WF Merc text, that does not exist in Email.edt // HEADROCK: HAM Messages -extern STR16 New113HAMMessage[]; +extern STR16* New113HAMMessage; enum { MSG113_STORM_STARTED, @@ -2577,14 +2577,14 @@ enum TEXT_NUM_MSG113, }; -extern STR16 gzTransformationMessage[]; +extern STR16* gzTransformationMessage; //CHRISL: NewInv messages -extern STR16 NewInvMessage[]; +extern STR16* NewInvMessage; // WANNE - MP: New multiplayer messages -extern STR16 MPServerMessage[]; -extern STR16 MPClientMessage[]; +extern STR16* MPServerMessage; +extern STR16* MPClientMessage; // WANNE: Some Chinese specific strings that needs to be in unicode! inline constexpr STR16 ChineseSpecString1 = L"%%"; //defined in _ChineseText.cpp as this file is already unicode @@ -2618,7 +2618,7 @@ enum }; // OJW - MP -extern STR16 gszMPMapscreenText[]; +extern STR16* gszMPMapscreenText; //SB enum @@ -2632,8 +2632,8 @@ enum ERROR_MAX_MILITIA, ERROR_MAX_CIVILIANS, }; -extern STR16 Additional113Text[]; -extern STR16 ranks[]; +extern STR16* Additional113Text; +extern STR16* ranks; //extern STR16 ranks[]; enum @@ -2645,15 +2645,15 @@ enum POCKET_POPUP_NO_GUNS, POCKET_POPUP_MOAR }; -extern STR16 gszPocketPopupText[]; +extern STR16* gszPocketPopupText; // rftr: better LBE tooltips -extern STR16 gLbeStatsDesc[14]; +extern STR16* gLbeStatsDesc; // Flugente: backgrounds -extern STR16 szBackgroundText_Flags[]; -extern STR16 szBackgroundText_Value[]; -extern STR16 szSoldierClassName[]; +extern STR16* szBackgroundText_Flags; +extern STR16* szBackgroundText_Value; +extern STR16* szSoldierClassName; // Flugente: personality enum @@ -2672,20 +2672,20 @@ enum PERSONALITYTEXT_MAX, }; -extern STR16 szBackgroundTitleText[]; -extern STR16 szPersonalityTitleText[]; -extern STR16 szPersonalityDisplayText[]; -extern STR16 szPersonalityHelpText[]; -extern STR16 szRaceText[]; -extern STR16 szAppearanceText[]; -extern STR16 szRefinementText[]; -extern STR16 szRefinementTextTypes[]; -extern STR16 szNationalityText[]; -extern STR16 szNationalityTextAdjective[]; -extern STR16 szNationalityText_Special[]; -extern STR16 szCareLevelText[]; -extern STR16 szRacistText[]; -extern STR16 szSexistText[]; +extern STR16* szBackgroundTitleText; +extern STR16* szPersonalityTitleText; +extern STR16* szPersonalityDisplayText; +extern STR16* szPersonalityHelpText; +extern STR16* szRaceText; +extern STR16* szAppearanceText; +extern STR16* szRefinementText; +extern STR16* szRefinementTextTypes; +extern STR16* szNationalityText; +extern STR16* szNationalityTextAdjective; +extern STR16* szNationalityText_Special; +extern STR16* szCareLevelText; +extern STR16* szRacistText; +extern STR16* szSexistText; enum { @@ -2743,7 +2743,7 @@ enum TEXT_CAMPAIGNHISTORY_MAX, }; -extern STR16 szCampaignHistoryWebSite[]; +extern STR16* szCampaignHistoryWebSite; enum { @@ -2782,7 +2782,7 @@ enum TEXT_CAMPAIGNHISTORY_DETAIL_MAX, }; -extern STR16 szCampaignHistoryDetail[]; +extern STR16* szCampaignHistoryDetail; enum { @@ -2796,10 +2796,10 @@ enum TEXT_CAMPAIGNHISTORY_TIME_NIGHT, }; -extern STR16 szCampaignHistoryTimeString[]; +extern STR16* szCampaignHistoryTimeString; -extern STR16 szCampaignHistoryMoneyTypeString[]; -extern STR16 szCampaignHistoryConsumptionTypeString[]; +extern STR16* szCampaignHistoryMoneyTypeString; +extern STR16* szCampaignHistoryConsumptionTypeString; enum { @@ -2819,7 +2819,7 @@ enum TEXT_CAMPAIGNHISTORY_RESULT_HARD_ARMY, }; -extern STR16 szCampaignHistoryResultString[]; +extern STR16* szCampaignHistoryResultString; enum { @@ -2836,7 +2836,7 @@ enum TEXT_CAMPAIGNHISTORY_IMPORTANCE_MOMENTOUS, }; -extern STR16 szCampaignHistoryImportanceString[]; +extern STR16* szCampaignHistoryImportanceString; enum { @@ -2860,14 +2860,14 @@ enum WEBPAGE_CAMPAIGNHISTORY_DAY, }; -extern STR16 szCampaignHistoryWebpageString[]; +extern STR16* szCampaignHistoryWebpageString; // Flugente: wacky operation names for campaign stats #define CAMPAIGNSTATS_OPERATION_NUM_PREFIX 140 #define CAMPAIGNSTATS_OPERATION_NUM_SUFFIX 140 -extern STR16 szCampaignStatsOperationPrefix[]; -extern STR16 szCampaignStatsOperationSuffix[]; +extern STR16* szCampaignStatsOperationPrefix; +extern STR16* szCampaignStatsOperationSuffix; // Flugente: merc compare website @@ -2904,8 +2904,8 @@ enum TEXT_MERCCOMPARE_MAX, }; -extern STR16 szMercCompareWebSite[]; -extern STR16 szMercCompareEventText[]; +extern STR16* szMercCompareWebSite; +extern STR16* szMercCompareEventText; // Flugente: WHO website enum @@ -2930,7 +2930,7 @@ enum TEXT_WHO_MAX = TEXT_WHO_TIPS1 + 8, }; -extern STR16 szWHOWebSite[]; +extern STR16* szWHOWebSite; // Flugente: PMC website enum @@ -2965,25 +2965,25 @@ enum TEXT_PMC_MAX, }; -extern STR16 szPMCWebSite[]; +extern STR16* szPMCWebSite; -extern STR16 szTacticalInventoryDialogString[]; -extern STR16 szTacticalCoverDialogString[]; -extern STR16 szTacticalCoverDialogPrintString[]; +extern STR16* szTacticalInventoryDialogString; +extern STR16* szTacticalCoverDialogString; +extern STR16* szTacticalCoverDialogPrintString; // OPINIONEVENT_MAX is 39 // DOST_MAX is 17 -extern STR16 szDynamicDialogueText[40][17]; +extern STR16 (*szDynamicDialogueText)[17]; // Flugente: dynamic dialogue -extern STR16 szDynamicDialogueText_DOST_VICTIM_TO_INTERJECTOR_DENY[]; -extern STR16 szDynamicDialogueText_DOST_VICTIM_TO_INTERJECTOR_AGREE[]; -extern STR16 szDynamicDialogueText_DOST_SIDEWITH_VICTIM[]; -extern STR16 szDynamicDialogueText_DOST_SIDEWITH_CAUSE[]; +extern STR16* szDynamicDialogueText_DOST_VICTIM_TO_INTERJECTOR_DENY; +extern STR16* szDynamicDialogueText_DOST_VICTIM_TO_INTERJECTOR_AGREE; +extern STR16* szDynamicDialogueText_DOST_SIDEWITH_VICTIM; +extern STR16* szDynamicDialogueText_DOST_SIDEWITH_CAUSE; -extern STR16 szDynamicDialogueText_DOST_INTERJECTOR_DIALOGUESELECTION_SHORTTEXT[]; -extern STR16 szDynamicDialogueText_GenderText[]; +extern STR16* szDynamicDialogueText_DOST_INTERJECTOR_DIALOGUESELECTION_SHORTTEXT; +extern STR16* szDynamicDialogueText_GenderText; // Flugente: disease enum @@ -3032,21 +3032,21 @@ enum TEXT_SPY_GETINTEL, }; -extern STR16 szDiseaseText[]; -extern STR16 szSpyText[]; -extern STR16 szFoodText[]; +extern STR16* szDiseaseText; +extern STR16* szSpyText; +extern STR16* szFoodText; -extern STR16 szIMPGearWebSiteText[]; -extern STR16 szIMPGearPocketText[]; +extern STR16* szIMPGearWebSiteText; +extern STR16* szIMPGearPocketText; // Flugente: militia movement -extern STR16 szMilitiaStrategicMovementText[]; +extern STR16* szMilitiaStrategicMovementText; // Flugente: enemy heli/SAM -extern STR16 szEnemyHeliText[]; +extern STR16* szEnemyHeliText; // Flugente: fortification -extern STR16 szFortificationText[]; +extern STR16* szFortificationText; // Flugente: militia website enum @@ -3063,31 +3063,31 @@ enum TEXT_MILITIAWEBSITE_MAX, }; -extern STR16 szMilitiaWebSite[]; -extern STR16 szIndividualMilitiaBattleReportText[]; -extern STR16 szIndividualMilitiaTraitRequirements[]; -extern STR16 szIdividualMilitiaWebsiteText[]; -extern STR16 szIdividualMilitiaWebsiteFilterText_Dead[]; -extern STR16 szIdividualMilitiaWebsiteFilterText_Rank[] ; -extern STR16 szIdividualMilitiaWebsiteFilterText_Origin[]; -extern STR16 szIdividualMilitiaWebsiteFilterText_Sector[]; +extern STR16* szMilitiaWebSite; +extern STR16* szIndividualMilitiaBattleReportText; +extern STR16* szIndividualMilitiaTraitRequirements; +extern STR16* szIdividualMilitiaWebsiteText; +extern STR16* szIdividualMilitiaWebsiteFilterText_Dead; +extern STR16* szIdividualMilitiaWebsiteFilterText_Rank ; +extern STR16* szIdividualMilitiaWebsiteFilterText_Origin; +extern STR16* szIdividualMilitiaWebsiteFilterText_Sector; // Flugente: non-profile merchants -extern STR16 szNonProfileMerchantText[]; +extern STR16* szNonProfileMerchantText; // Flugente: externalised weather -extern STR16 szWeatherTypeText[]; +extern STR16* szWeatherTypeText; // Flugente: snakes -extern STR16 szSnakeText[]; +extern STR16* szSnakeText; // Flugente: militia resources -extern STR16 szSMilitiaResourceText[]; +extern STR16* szSMilitiaResourceText; // Flugente: interactive actions -extern STR16 szInteractiveActionText[]; +extern STR16* szInteractiveActionText; -extern STR16 szLaptopStatText[]; +extern STR16* szLaptopStatText; enum { LAPTOP_STAT_TEXT_THREATEN_EFFECTIVENESS, @@ -3120,7 +3120,7 @@ enum }; // Flugente: gear templates -extern STR16 szGearTemplateText[]; +extern STR16* szGearTemplateText; // Flugente: intel enum @@ -3160,26 +3160,26 @@ enum TEXT_INTEL_SELL_NOTHING_1, }; -extern STR16 szIntelWebsiteText[]; +extern STR16* szIntelWebsiteText; -extern STR16 szIntelText[]; +extern STR16* szIntelText; -extern STR16 szChatTextSpy[]; -extern STR16 szChatTextEnemy[]; +extern STR16* szChatTextSpy; +extern STR16* szChatTextEnemy; -extern STR16 szMilitiaText[]; +extern STR16* szMilitiaText; -extern STR16 szFactoryText[]; +extern STR16* szFactoryText; -extern STR16 szTurncoatText[]; +extern STR16* szTurncoatText; -extern STR16 szRebelCommandText[]; -extern STR16 szRebelCommandHelpText[]; -extern STR16 szRebelCommandAdminActionsText[]; -extern STR16 szRebelCommandDirectivesText[]; -extern STR16 szRebelCommandAgentMissionsText[]; +extern STR16* szRebelCommandText; +extern STR16* szRebelCommandHelpText; +extern STR16* szRebelCommandAdminActionsText; +extern STR16* szRebelCommandDirectivesText; +extern STR16* szRebelCommandAgentMissionsText; -extern STR16 szRobotText[]; +extern STR16* szRobotText; enum { ROBOT_TEXT_CANNOT_CHANGE_INSTALLED_WEAPON, ROBOT_TEXT_CANNOT_ADD_ATTACHMENTS, @@ -3229,24 +3229,3 @@ void ParseCommandLine(const char *start,char **argv,char *args,int *numargs,int void ParseCommandLine(const wchar_t *start,wchar_t **argv,wchar_t *args,int *numargs,int *numchars); #endif - - -//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible -//these are dummy functions. Not all of these may be necessary. They are included for future possible useage -void this_is_the_ChineseText_public_symbol(void); -void this_is_the_DutchText_public_symbol(void); -void this_is_the_EnglishText_public_symbol(void); -void this_is_the_FrenchText_public_symbol(void); -void this_is_the_GermanText_public_symbol(void); -void this_is_the_ItalianText_public_symbol(void); -void this_is_the_PolishText_public_symbol(void); -void this_is_the_RussianText_public_symbol(void); - -void this_is_the_Ja25ChineseText_public_symbol(void); -void this_is_the_Ja25DutchText_public_symbol(void); -void this_is_the_Ja25EnglishText_public_symbol(void); -void this_is_the_Ja25FrenchText_public_symbol(void); -void this_is_the_Ja25GermanText_public_symbol(void); -void this_is_the_Ja25ItalianText_public_symbol(void); -void this_is_the_Ja25PolishText_public_symbol(void); -void this_is_the_Ja25RussianText_public_symbol(void); diff --git a/i18n/include/_Ja25DutchText.h b/i18n/include/_Ja25DutchText.h index d2815750..96daf42d 100644 --- a/i18n/include/_Ja25DutchText.h +++ b/i18n/include/_Ja25DutchText.h @@ -1,49 +1,49 @@ -#ifndef _JA25ENGLISHTEXT__H_ +#ifndef _JA25ENGLISHTEXT__H_ #define _JA25ENGLISHTEXT__H_ -extern STR16 gzIMPSkillTraitsText[]; +extern STR16* gzIMPSkillTraitsText; //////////////////////////////////////////////////////// // added by SANDRO -extern STR16 gzIMPSkillTraitsTextNewMajor[]; -extern STR16 gzIMPSkillTraitsTextNewMinor[]; +extern STR16* gzIMPSkillTraitsTextNewMajor; +extern STR16* gzIMPSkillTraitsTextNewMinor; -extern STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsSniper[]; -extern STR16 gzIMPMajorTraitsHelpTextsRanger[]; -extern STR16 gzIMPMajorTraitsHelpTextsGunslinger[]; -extern STR16 gzIMPMajorTraitsHelpTextsMartialArts[]; -extern STR16 gzIMPMajorTraitsHelpTextsSquadleader[]; -extern STR16 gzIMPMajorTraitsHelpTextsTechnician[]; -extern STR16 gzIMPMajorTraitsHelpTextsDoctor[]; -extern STR16 gzIMPMajorTraitsHelpTextsCovertOps[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsRadioOperator[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsNone[]; +extern STR16* gzIMPMajorTraitsHelpTextsAutoWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsHeavyWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsSniper; +extern STR16* gzIMPMajorTraitsHelpTextsRanger; +extern STR16* gzIMPMajorTraitsHelpTextsGunslinger; +extern STR16* gzIMPMajorTraitsHelpTextsMartialArts; +extern STR16* gzIMPMajorTraitsHelpTextsSquadleader; +extern STR16* gzIMPMajorTraitsHelpTextsTechnician; +extern STR16* gzIMPMajorTraitsHelpTextsDoctor; +extern STR16* gzIMPMajorTraitsHelpTextsCovertOps; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsRadioOperator; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsNone; -extern STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]; -extern STR16 gzIMPMinorTraitsHelpTextsMelee[]; -extern STR16 gzIMPMinorTraitsHelpTextsThrowing[]; -extern STR16 gzIMPMinorTraitsHelpTextsStealthy[]; -extern STR16 gzIMPMinorTraitsHelpTextsNightOps[]; -extern STR16 gzIMPMinorTraitsHelpTextsAthletics[]; -extern STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]; -extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[]; -extern STR16 gzIMPMinorTraitsHelpTextsTeaching[]; -extern STR16 gzIMPMinorTraitsHelpTextsScouting[]; -extern STR16 gzIMPMinorTraitsHelpTextsSnitch[]; -extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente -extern STR16 gzIMPMinorTraitsHelpTextsNone[]; +extern STR16* gzIMPMinorTraitsHelpTextsAmbidextrous; +extern STR16* gzIMPMinorTraitsHelpTextsMelee; +extern STR16* gzIMPMinorTraitsHelpTextsThrowing; +extern STR16* gzIMPMinorTraitsHelpTextsStealthy; +extern STR16* gzIMPMinorTraitsHelpTextsNightOps; +extern STR16* gzIMPMinorTraitsHelpTextsAthletics; +extern STR16* gzIMPMinorTraitsHelpTextsBodybuilding; +extern STR16* gzIMPMinorTraitsHelpTextsDemolitions; +extern STR16* gzIMPMinorTraitsHelpTextsTeaching; +extern STR16* gzIMPMinorTraitsHelpTextsScouting; +extern STR16* gzIMPMinorTraitsHelpTextsSnitch; +extern STR16* gzIMPMajorTraitsHelpTextsSurvival; // added by Flugente +extern STR16* gzIMPMinorTraitsHelpTextsNone; -extern STR16 gzIMPOldSkillTraitsHelpTexts[]; +extern STR16* gzIMPOldSkillTraitsHelpTexts; -extern STR16 gzIMPNewCharacterTraitsHelpTexts[]; +extern STR16* gzIMPNewCharacterTraitsHelpTexts; -extern STR16 gzIMPDisabilitiesHelpTexts[]; +extern STR16* gzIMPDisabilitiesHelpTexts; -extern STR16 gzIMPProfileCostText[]; +extern STR16* gzIMPProfileCostText; -extern STR16 zGioNewTraitsImpossibleText[]; +extern STR16* zGioNewTraitsImpossibleText; /////////////////////////////////////////////////////// enum @@ -52,7 +52,7 @@ enum IMM__SOFT_IRON_MAN_MODE_WARNING_TEXT, IMM__EXTREME_IRON_MAN_MODE_WARNING_TEXT, }; -extern STR16 gzIronManModeWarningText[]; +extern STR16* gzIronManModeWarningText; // display cover message (for tactical usually, seperated) // display cover terrain type info (used in cover information) @@ -80,7 +80,7 @@ enum DC_TTI__DETAILED_STEALTH, DC_TTI__DETAILED_TRAP_LEVEL, }; -extern STR16 gzDisplayCoverText[]; +extern STR16* gzDisplayCoverText; #endif diff --git a/i18n/include/_Ja25EnglishText.h b/i18n/include/_Ja25EnglishText.h index c65dff4b..e3467d3a 100644 --- a/i18n/include/_Ja25EnglishText.h +++ b/i18n/include/_Ja25EnglishText.h @@ -1,49 +1,49 @@ -#ifndef _JA25ENGLISHTEXT__H_ +#ifndef _JA25ENGLISHTEXT__H_ #define _JA25ENGLISHTEXT__H_ -extern STR16 gzIMPSkillTraitsText[]; +extern STR16* gzIMPSkillTraitsText; //////////////////////////////////////////////////////// // added by SANDRO -extern STR16 gzIMPSkillTraitsTextNewMajor[]; -extern STR16 gzIMPSkillTraitsTextNewMinor[]; +extern STR16* gzIMPSkillTraitsTextNewMajor; +extern STR16* gzIMPSkillTraitsTextNewMinor; -extern STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsSniper[]; -extern STR16 gzIMPMajorTraitsHelpTextsRanger[]; -extern STR16 gzIMPMajorTraitsHelpTextsGunslinger[]; -extern STR16 gzIMPMajorTraitsHelpTextsMartialArts[]; -extern STR16 gzIMPMajorTraitsHelpTextsSquadleader[]; -extern STR16 gzIMPMajorTraitsHelpTextsTechnician[]; -extern STR16 gzIMPMajorTraitsHelpTextsDoctor[]; -extern STR16 gzIMPMajorTraitsHelpTextsCovertOps[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsRadioOperator[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsNone[]; +extern STR16* gzIMPMajorTraitsHelpTextsAutoWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsHeavyWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsSniper; +extern STR16* gzIMPMajorTraitsHelpTextsRanger; +extern STR16* gzIMPMajorTraitsHelpTextsGunslinger; +extern STR16* gzIMPMajorTraitsHelpTextsMartialArts; +extern STR16* gzIMPMajorTraitsHelpTextsSquadleader; +extern STR16* gzIMPMajorTraitsHelpTextsTechnician; +extern STR16* gzIMPMajorTraitsHelpTextsDoctor; +extern STR16* gzIMPMajorTraitsHelpTextsCovertOps; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsRadioOperator; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsNone; -extern STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]; -extern STR16 gzIMPMinorTraitsHelpTextsMelee[]; -extern STR16 gzIMPMinorTraitsHelpTextsThrowing[]; -extern STR16 gzIMPMinorTraitsHelpTextsStealthy[]; -extern STR16 gzIMPMinorTraitsHelpTextsNightOps[]; -extern STR16 gzIMPMinorTraitsHelpTextsAthletics[]; -extern STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]; -extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[]; -extern STR16 gzIMPMinorTraitsHelpTextsTeaching[]; -extern STR16 gzIMPMinorTraitsHelpTextsScouting[]; -extern STR16 gzIMPMinorTraitsHelpTextsSnitch[]; -extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente -extern STR16 gzIMPMinorTraitsHelpTextsNone[]; +extern STR16* gzIMPMinorTraitsHelpTextsAmbidextrous; +extern STR16* gzIMPMinorTraitsHelpTextsMelee; +extern STR16* gzIMPMinorTraitsHelpTextsThrowing; +extern STR16* gzIMPMinorTraitsHelpTextsStealthy; +extern STR16* gzIMPMinorTraitsHelpTextsNightOps; +extern STR16* gzIMPMinorTraitsHelpTextsAthletics; +extern STR16* gzIMPMinorTraitsHelpTextsBodybuilding; +extern STR16* gzIMPMinorTraitsHelpTextsDemolitions; +extern STR16* gzIMPMinorTraitsHelpTextsTeaching; +extern STR16* gzIMPMinorTraitsHelpTextsScouting; +extern STR16* gzIMPMinorTraitsHelpTextsSnitch; +extern STR16* gzIMPMajorTraitsHelpTextsSurvival; // added by Flugente +extern STR16* gzIMPMinorTraitsHelpTextsNone; -extern STR16 gzIMPOldSkillTraitsHelpTexts[]; +extern STR16* gzIMPOldSkillTraitsHelpTexts; -extern STR16 gzIMPNewCharacterTraitsHelpTexts[]; +extern STR16* gzIMPNewCharacterTraitsHelpTexts; -extern STR16 gzIMPDisabilitiesHelpTexts[]; +extern STR16* gzIMPDisabilitiesHelpTexts; -extern STR16 gzIMPProfileCostText[]; +extern STR16* gzIMPProfileCostText; -extern STR16 zGioNewTraitsImpossibleText[]; +extern STR16* zGioNewTraitsImpossibleText; /////////////////////////////////////////////////////// enum @@ -52,7 +52,7 @@ enum IMM__SOFT_IRON_MAN_MODE_WARNING_TEXT, IMM__EXTREME_IRON_MAN_MODE_WARNING_TEXT, }; -extern STR16 gzIronManModeWarningText[]; +extern STR16* gzIronManModeWarningText; // display cover message (for tactical usually, seperated) // display cover terrain type info (used in cover information) @@ -81,7 +81,7 @@ enum DC_TTI__DETAILED_TRAP_LEVEL, }; -extern STR16 gzDisplayCoverText[]; +extern STR16* gzDisplayCoverText; #endif diff --git a/i18n/include/_Ja25FrenchText.h b/i18n/include/_Ja25FrenchText.h index d2815750..96daf42d 100644 --- a/i18n/include/_Ja25FrenchText.h +++ b/i18n/include/_Ja25FrenchText.h @@ -1,49 +1,49 @@ -#ifndef _JA25ENGLISHTEXT__H_ +#ifndef _JA25ENGLISHTEXT__H_ #define _JA25ENGLISHTEXT__H_ -extern STR16 gzIMPSkillTraitsText[]; +extern STR16* gzIMPSkillTraitsText; //////////////////////////////////////////////////////// // added by SANDRO -extern STR16 gzIMPSkillTraitsTextNewMajor[]; -extern STR16 gzIMPSkillTraitsTextNewMinor[]; +extern STR16* gzIMPSkillTraitsTextNewMajor; +extern STR16* gzIMPSkillTraitsTextNewMinor; -extern STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsSniper[]; -extern STR16 gzIMPMajorTraitsHelpTextsRanger[]; -extern STR16 gzIMPMajorTraitsHelpTextsGunslinger[]; -extern STR16 gzIMPMajorTraitsHelpTextsMartialArts[]; -extern STR16 gzIMPMajorTraitsHelpTextsSquadleader[]; -extern STR16 gzIMPMajorTraitsHelpTextsTechnician[]; -extern STR16 gzIMPMajorTraitsHelpTextsDoctor[]; -extern STR16 gzIMPMajorTraitsHelpTextsCovertOps[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsRadioOperator[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsNone[]; +extern STR16* gzIMPMajorTraitsHelpTextsAutoWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsHeavyWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsSniper; +extern STR16* gzIMPMajorTraitsHelpTextsRanger; +extern STR16* gzIMPMajorTraitsHelpTextsGunslinger; +extern STR16* gzIMPMajorTraitsHelpTextsMartialArts; +extern STR16* gzIMPMajorTraitsHelpTextsSquadleader; +extern STR16* gzIMPMajorTraitsHelpTextsTechnician; +extern STR16* gzIMPMajorTraitsHelpTextsDoctor; +extern STR16* gzIMPMajorTraitsHelpTextsCovertOps; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsRadioOperator; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsNone; -extern STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]; -extern STR16 gzIMPMinorTraitsHelpTextsMelee[]; -extern STR16 gzIMPMinorTraitsHelpTextsThrowing[]; -extern STR16 gzIMPMinorTraitsHelpTextsStealthy[]; -extern STR16 gzIMPMinorTraitsHelpTextsNightOps[]; -extern STR16 gzIMPMinorTraitsHelpTextsAthletics[]; -extern STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]; -extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[]; -extern STR16 gzIMPMinorTraitsHelpTextsTeaching[]; -extern STR16 gzIMPMinorTraitsHelpTextsScouting[]; -extern STR16 gzIMPMinorTraitsHelpTextsSnitch[]; -extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente -extern STR16 gzIMPMinorTraitsHelpTextsNone[]; +extern STR16* gzIMPMinorTraitsHelpTextsAmbidextrous; +extern STR16* gzIMPMinorTraitsHelpTextsMelee; +extern STR16* gzIMPMinorTraitsHelpTextsThrowing; +extern STR16* gzIMPMinorTraitsHelpTextsStealthy; +extern STR16* gzIMPMinorTraitsHelpTextsNightOps; +extern STR16* gzIMPMinorTraitsHelpTextsAthletics; +extern STR16* gzIMPMinorTraitsHelpTextsBodybuilding; +extern STR16* gzIMPMinorTraitsHelpTextsDemolitions; +extern STR16* gzIMPMinorTraitsHelpTextsTeaching; +extern STR16* gzIMPMinorTraitsHelpTextsScouting; +extern STR16* gzIMPMinorTraitsHelpTextsSnitch; +extern STR16* gzIMPMajorTraitsHelpTextsSurvival; // added by Flugente +extern STR16* gzIMPMinorTraitsHelpTextsNone; -extern STR16 gzIMPOldSkillTraitsHelpTexts[]; +extern STR16* gzIMPOldSkillTraitsHelpTexts; -extern STR16 gzIMPNewCharacterTraitsHelpTexts[]; +extern STR16* gzIMPNewCharacterTraitsHelpTexts; -extern STR16 gzIMPDisabilitiesHelpTexts[]; +extern STR16* gzIMPDisabilitiesHelpTexts; -extern STR16 gzIMPProfileCostText[]; +extern STR16* gzIMPProfileCostText; -extern STR16 zGioNewTraitsImpossibleText[]; +extern STR16* zGioNewTraitsImpossibleText; /////////////////////////////////////////////////////// enum @@ -52,7 +52,7 @@ enum IMM__SOFT_IRON_MAN_MODE_WARNING_TEXT, IMM__EXTREME_IRON_MAN_MODE_WARNING_TEXT, }; -extern STR16 gzIronManModeWarningText[]; +extern STR16* gzIronManModeWarningText; // display cover message (for tactical usually, seperated) // display cover terrain type info (used in cover information) @@ -80,7 +80,7 @@ enum DC_TTI__DETAILED_STEALTH, DC_TTI__DETAILED_TRAP_LEVEL, }; -extern STR16 gzDisplayCoverText[]; +extern STR16* gzDisplayCoverText; #endif diff --git a/i18n/include/_Ja25GermanText.h b/i18n/include/_Ja25GermanText.h index f5514922..c707b815 100644 --- a/i18n/include/_Ja25GermanText.h +++ b/i18n/include/_Ja25GermanText.h @@ -1,49 +1,49 @@ -#ifndef _JA25GERMANTEXT__H_ +#ifndef _JA25GERMANTEXT__H_ #define _JA25GERMANTEXT__H_ -extern STR16 gzIMPSkillTraitsText[]; +extern STR16* gzIMPSkillTraitsText; //////////////////////////////////////////////////////// // added by SANDRO -extern STR16 gzIMPSkillTraitsTextNewMajor[]; -extern STR16 gzIMPSkillTraitsTextNewMinor[]; +extern STR16* gzIMPSkillTraitsTextNewMajor; +extern STR16* gzIMPSkillTraitsTextNewMinor; -extern STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsSniper[]; -extern STR16 gzIMPMajorTraitsHelpTextsRanger[]; -extern STR16 gzIMPMajorTraitsHelpTextsGunslinger[]; -extern STR16 gzIMPMajorTraitsHelpTextsMartialArts[]; -extern STR16 gzIMPMajorTraitsHelpTextsSquadleader[]; -extern STR16 gzIMPMajorTraitsHelpTextsTechnician[]; -extern STR16 gzIMPMajorTraitsHelpTextsDoctor[]; -extern STR16 gzIMPMajorTraitsHelpTextsCovertOps[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsRadioOperator[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsNone[]; +extern STR16* gzIMPMajorTraitsHelpTextsAutoWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsHeavyWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsSniper; +extern STR16* gzIMPMajorTraitsHelpTextsRanger; +extern STR16* gzIMPMajorTraitsHelpTextsGunslinger; +extern STR16* gzIMPMajorTraitsHelpTextsMartialArts; +extern STR16* gzIMPMajorTraitsHelpTextsSquadleader; +extern STR16* gzIMPMajorTraitsHelpTextsTechnician; +extern STR16* gzIMPMajorTraitsHelpTextsDoctor; +extern STR16* gzIMPMajorTraitsHelpTextsCovertOps; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsRadioOperator; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsNone; -extern STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]; -extern STR16 gzIMPMinorTraitsHelpTextsMelee[]; -extern STR16 gzIMPMinorTraitsHelpTextsThrowing[]; -extern STR16 gzIMPMinorTraitsHelpTextsStealthy[]; -extern STR16 gzIMPMinorTraitsHelpTextsNightOps[]; -extern STR16 gzIMPMinorTraitsHelpTextsAthletics[]; -extern STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]; -extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[]; -extern STR16 gzIMPMinorTraitsHelpTextsTeaching[]; -extern STR16 gzIMPMinorTraitsHelpTextsScouting[]; -extern STR16 gzIMPMinorTraitsHelpTextsSnitch[]; -extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente -extern STR16 gzIMPMinorTraitsHelpTextsNone[]; +extern STR16* gzIMPMinorTraitsHelpTextsAmbidextrous; +extern STR16* gzIMPMinorTraitsHelpTextsMelee; +extern STR16* gzIMPMinorTraitsHelpTextsThrowing; +extern STR16* gzIMPMinorTraitsHelpTextsStealthy; +extern STR16* gzIMPMinorTraitsHelpTextsNightOps; +extern STR16* gzIMPMinorTraitsHelpTextsAthletics; +extern STR16* gzIMPMinorTraitsHelpTextsBodybuilding; +extern STR16* gzIMPMinorTraitsHelpTextsDemolitions; +extern STR16* gzIMPMinorTraitsHelpTextsTeaching; +extern STR16* gzIMPMinorTraitsHelpTextsScouting; +extern STR16* gzIMPMinorTraitsHelpTextsSnitch; +extern STR16* gzIMPMajorTraitsHelpTextsSurvival; // added by Flugente +extern STR16* gzIMPMinorTraitsHelpTextsNone; -extern STR16 gzIMPOldSkillTraitsHelpTexts[]; +extern STR16* gzIMPOldSkillTraitsHelpTexts; -extern STR16 gzIMPNewCharacterTraitsHelpTexts[]; +extern STR16* gzIMPNewCharacterTraitsHelpTexts; -extern STR16 gzIMPDisabilitiesHelpTexts[]; +extern STR16* gzIMPDisabilitiesHelpTexts; -extern STR16 gzIMPProfileCostText[]; +extern STR16* gzIMPProfileCostText; -extern STR16 zGioNewTraitsImpossibleText[]; +extern STR16* zGioNewTraitsImpossibleText; /////////////////////////////////////////////////////// enum @@ -52,7 +52,7 @@ enum IMM__SOFT_IRON_MAN_MODE_WARNING_TEXT, IMM__EXTREME_IRON_MAN_MODE_WARNING_TEXT, }; -extern STR16 gzIronManModeWarningText[]; +extern STR16* gzIronManModeWarningText; // display cover message (for tactical usually, seperated) // display cover terrain type info (used in cover information) @@ -80,7 +80,7 @@ enum DC_TTI__DETAILED_STEALTH, DC_TTI__DETAILED_TRAP_LEVEL, }; -extern STR16 gzDisplayCoverText[]; +extern STR16* gzDisplayCoverText; #endif diff --git a/i18n/include/_Ja25ItalianText.h b/i18n/include/_Ja25ItalianText.h index d2815750..96daf42d 100644 --- a/i18n/include/_Ja25ItalianText.h +++ b/i18n/include/_Ja25ItalianText.h @@ -1,49 +1,49 @@ -#ifndef _JA25ENGLISHTEXT__H_ +#ifndef _JA25ENGLISHTEXT__H_ #define _JA25ENGLISHTEXT__H_ -extern STR16 gzIMPSkillTraitsText[]; +extern STR16* gzIMPSkillTraitsText; //////////////////////////////////////////////////////// // added by SANDRO -extern STR16 gzIMPSkillTraitsTextNewMajor[]; -extern STR16 gzIMPSkillTraitsTextNewMinor[]; +extern STR16* gzIMPSkillTraitsTextNewMajor; +extern STR16* gzIMPSkillTraitsTextNewMinor; -extern STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsSniper[]; -extern STR16 gzIMPMajorTraitsHelpTextsRanger[]; -extern STR16 gzIMPMajorTraitsHelpTextsGunslinger[]; -extern STR16 gzIMPMajorTraitsHelpTextsMartialArts[]; -extern STR16 gzIMPMajorTraitsHelpTextsSquadleader[]; -extern STR16 gzIMPMajorTraitsHelpTextsTechnician[]; -extern STR16 gzIMPMajorTraitsHelpTextsDoctor[]; -extern STR16 gzIMPMajorTraitsHelpTextsCovertOps[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsRadioOperator[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsNone[]; +extern STR16* gzIMPMajorTraitsHelpTextsAutoWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsHeavyWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsSniper; +extern STR16* gzIMPMajorTraitsHelpTextsRanger; +extern STR16* gzIMPMajorTraitsHelpTextsGunslinger; +extern STR16* gzIMPMajorTraitsHelpTextsMartialArts; +extern STR16* gzIMPMajorTraitsHelpTextsSquadleader; +extern STR16* gzIMPMajorTraitsHelpTextsTechnician; +extern STR16* gzIMPMajorTraitsHelpTextsDoctor; +extern STR16* gzIMPMajorTraitsHelpTextsCovertOps; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsRadioOperator; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsNone; -extern STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]; -extern STR16 gzIMPMinorTraitsHelpTextsMelee[]; -extern STR16 gzIMPMinorTraitsHelpTextsThrowing[]; -extern STR16 gzIMPMinorTraitsHelpTextsStealthy[]; -extern STR16 gzIMPMinorTraitsHelpTextsNightOps[]; -extern STR16 gzIMPMinorTraitsHelpTextsAthletics[]; -extern STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]; -extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[]; -extern STR16 gzIMPMinorTraitsHelpTextsTeaching[]; -extern STR16 gzIMPMinorTraitsHelpTextsScouting[]; -extern STR16 gzIMPMinorTraitsHelpTextsSnitch[]; -extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente -extern STR16 gzIMPMinorTraitsHelpTextsNone[]; +extern STR16* gzIMPMinorTraitsHelpTextsAmbidextrous; +extern STR16* gzIMPMinorTraitsHelpTextsMelee; +extern STR16* gzIMPMinorTraitsHelpTextsThrowing; +extern STR16* gzIMPMinorTraitsHelpTextsStealthy; +extern STR16* gzIMPMinorTraitsHelpTextsNightOps; +extern STR16* gzIMPMinorTraitsHelpTextsAthletics; +extern STR16* gzIMPMinorTraitsHelpTextsBodybuilding; +extern STR16* gzIMPMinorTraitsHelpTextsDemolitions; +extern STR16* gzIMPMinorTraitsHelpTextsTeaching; +extern STR16* gzIMPMinorTraitsHelpTextsScouting; +extern STR16* gzIMPMinorTraitsHelpTextsSnitch; +extern STR16* gzIMPMajorTraitsHelpTextsSurvival; // added by Flugente +extern STR16* gzIMPMinorTraitsHelpTextsNone; -extern STR16 gzIMPOldSkillTraitsHelpTexts[]; +extern STR16* gzIMPOldSkillTraitsHelpTexts; -extern STR16 gzIMPNewCharacterTraitsHelpTexts[]; +extern STR16* gzIMPNewCharacterTraitsHelpTexts; -extern STR16 gzIMPDisabilitiesHelpTexts[]; +extern STR16* gzIMPDisabilitiesHelpTexts; -extern STR16 gzIMPProfileCostText[]; +extern STR16* gzIMPProfileCostText; -extern STR16 zGioNewTraitsImpossibleText[]; +extern STR16* zGioNewTraitsImpossibleText; /////////////////////////////////////////////////////// enum @@ -52,7 +52,7 @@ enum IMM__SOFT_IRON_MAN_MODE_WARNING_TEXT, IMM__EXTREME_IRON_MAN_MODE_WARNING_TEXT, }; -extern STR16 gzIronManModeWarningText[]; +extern STR16* gzIronManModeWarningText; // display cover message (for tactical usually, seperated) // display cover terrain type info (used in cover information) @@ -80,7 +80,7 @@ enum DC_TTI__DETAILED_STEALTH, DC_TTI__DETAILED_TRAP_LEVEL, }; -extern STR16 gzDisplayCoverText[]; +extern STR16* gzDisplayCoverText; #endif diff --git a/i18n/include/_Ja25PolishText.h b/i18n/include/_Ja25PolishText.h index d2815750..96daf42d 100644 --- a/i18n/include/_Ja25PolishText.h +++ b/i18n/include/_Ja25PolishText.h @@ -1,49 +1,49 @@ -#ifndef _JA25ENGLISHTEXT__H_ +#ifndef _JA25ENGLISHTEXT__H_ #define _JA25ENGLISHTEXT__H_ -extern STR16 gzIMPSkillTraitsText[]; +extern STR16* gzIMPSkillTraitsText; //////////////////////////////////////////////////////// // added by SANDRO -extern STR16 gzIMPSkillTraitsTextNewMajor[]; -extern STR16 gzIMPSkillTraitsTextNewMinor[]; +extern STR16* gzIMPSkillTraitsTextNewMajor; +extern STR16* gzIMPSkillTraitsTextNewMinor; -extern STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsSniper[]; -extern STR16 gzIMPMajorTraitsHelpTextsRanger[]; -extern STR16 gzIMPMajorTraitsHelpTextsGunslinger[]; -extern STR16 gzIMPMajorTraitsHelpTextsMartialArts[]; -extern STR16 gzIMPMajorTraitsHelpTextsSquadleader[]; -extern STR16 gzIMPMajorTraitsHelpTextsTechnician[]; -extern STR16 gzIMPMajorTraitsHelpTextsDoctor[]; -extern STR16 gzIMPMajorTraitsHelpTextsCovertOps[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsRadioOperator[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsNone[]; +extern STR16* gzIMPMajorTraitsHelpTextsAutoWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsHeavyWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsSniper; +extern STR16* gzIMPMajorTraitsHelpTextsRanger; +extern STR16* gzIMPMajorTraitsHelpTextsGunslinger; +extern STR16* gzIMPMajorTraitsHelpTextsMartialArts; +extern STR16* gzIMPMajorTraitsHelpTextsSquadleader; +extern STR16* gzIMPMajorTraitsHelpTextsTechnician; +extern STR16* gzIMPMajorTraitsHelpTextsDoctor; +extern STR16* gzIMPMajorTraitsHelpTextsCovertOps; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsRadioOperator; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsNone; -extern STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]; -extern STR16 gzIMPMinorTraitsHelpTextsMelee[]; -extern STR16 gzIMPMinorTraitsHelpTextsThrowing[]; -extern STR16 gzIMPMinorTraitsHelpTextsStealthy[]; -extern STR16 gzIMPMinorTraitsHelpTextsNightOps[]; -extern STR16 gzIMPMinorTraitsHelpTextsAthletics[]; -extern STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]; -extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[]; -extern STR16 gzIMPMinorTraitsHelpTextsTeaching[]; -extern STR16 gzIMPMinorTraitsHelpTextsScouting[]; -extern STR16 gzIMPMinorTraitsHelpTextsSnitch[]; -extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente -extern STR16 gzIMPMinorTraitsHelpTextsNone[]; +extern STR16* gzIMPMinorTraitsHelpTextsAmbidextrous; +extern STR16* gzIMPMinorTraitsHelpTextsMelee; +extern STR16* gzIMPMinorTraitsHelpTextsThrowing; +extern STR16* gzIMPMinorTraitsHelpTextsStealthy; +extern STR16* gzIMPMinorTraitsHelpTextsNightOps; +extern STR16* gzIMPMinorTraitsHelpTextsAthletics; +extern STR16* gzIMPMinorTraitsHelpTextsBodybuilding; +extern STR16* gzIMPMinorTraitsHelpTextsDemolitions; +extern STR16* gzIMPMinorTraitsHelpTextsTeaching; +extern STR16* gzIMPMinorTraitsHelpTextsScouting; +extern STR16* gzIMPMinorTraitsHelpTextsSnitch; +extern STR16* gzIMPMajorTraitsHelpTextsSurvival; // added by Flugente +extern STR16* gzIMPMinorTraitsHelpTextsNone; -extern STR16 gzIMPOldSkillTraitsHelpTexts[]; +extern STR16* gzIMPOldSkillTraitsHelpTexts; -extern STR16 gzIMPNewCharacterTraitsHelpTexts[]; +extern STR16* gzIMPNewCharacterTraitsHelpTexts; -extern STR16 gzIMPDisabilitiesHelpTexts[]; +extern STR16* gzIMPDisabilitiesHelpTexts; -extern STR16 gzIMPProfileCostText[]; +extern STR16* gzIMPProfileCostText; -extern STR16 zGioNewTraitsImpossibleText[]; +extern STR16* zGioNewTraitsImpossibleText; /////////////////////////////////////////////////////// enum @@ -52,7 +52,7 @@ enum IMM__SOFT_IRON_MAN_MODE_WARNING_TEXT, IMM__EXTREME_IRON_MAN_MODE_WARNING_TEXT, }; -extern STR16 gzIronManModeWarningText[]; +extern STR16* gzIronManModeWarningText; // display cover message (for tactical usually, seperated) // display cover terrain type info (used in cover information) @@ -80,7 +80,7 @@ enum DC_TTI__DETAILED_STEALTH, DC_TTI__DETAILED_TRAP_LEVEL, }; -extern STR16 gzDisplayCoverText[]; +extern STR16* gzDisplayCoverText; #endif diff --git a/i18n/include/_Ja25RussianText.h b/i18n/include/_Ja25RussianText.h index d2815750..96daf42d 100644 --- a/i18n/include/_Ja25RussianText.h +++ b/i18n/include/_Ja25RussianText.h @@ -1,49 +1,49 @@ -#ifndef _JA25ENGLISHTEXT__H_ +#ifndef _JA25ENGLISHTEXT__H_ #define _JA25ENGLISHTEXT__H_ -extern STR16 gzIMPSkillTraitsText[]; +extern STR16* gzIMPSkillTraitsText; //////////////////////////////////////////////////////// // added by SANDRO -extern STR16 gzIMPSkillTraitsTextNewMajor[]; -extern STR16 gzIMPSkillTraitsTextNewMinor[]; +extern STR16* gzIMPSkillTraitsTextNewMajor; +extern STR16* gzIMPSkillTraitsTextNewMinor; -extern STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]; -extern STR16 gzIMPMajorTraitsHelpTextsSniper[]; -extern STR16 gzIMPMajorTraitsHelpTextsRanger[]; -extern STR16 gzIMPMajorTraitsHelpTextsGunslinger[]; -extern STR16 gzIMPMajorTraitsHelpTextsMartialArts[]; -extern STR16 gzIMPMajorTraitsHelpTextsSquadleader[]; -extern STR16 gzIMPMajorTraitsHelpTextsTechnician[]; -extern STR16 gzIMPMajorTraitsHelpTextsDoctor[]; -extern STR16 gzIMPMajorTraitsHelpTextsCovertOps[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsRadioOperator[]; // added by Flugente -extern STR16 gzIMPMajorTraitsHelpTextsNone[]; +extern STR16* gzIMPMajorTraitsHelpTextsAutoWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsHeavyWeapons; +extern STR16* gzIMPMajorTraitsHelpTextsSniper; +extern STR16* gzIMPMajorTraitsHelpTextsRanger; +extern STR16* gzIMPMajorTraitsHelpTextsGunslinger; +extern STR16* gzIMPMajorTraitsHelpTextsMartialArts; +extern STR16* gzIMPMajorTraitsHelpTextsSquadleader; +extern STR16* gzIMPMajorTraitsHelpTextsTechnician; +extern STR16* gzIMPMajorTraitsHelpTextsDoctor; +extern STR16* gzIMPMajorTraitsHelpTextsCovertOps; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsRadioOperator; // added by Flugente +extern STR16* gzIMPMajorTraitsHelpTextsNone; -extern STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]; -extern STR16 gzIMPMinorTraitsHelpTextsMelee[]; -extern STR16 gzIMPMinorTraitsHelpTextsThrowing[]; -extern STR16 gzIMPMinorTraitsHelpTextsStealthy[]; -extern STR16 gzIMPMinorTraitsHelpTextsNightOps[]; -extern STR16 gzIMPMinorTraitsHelpTextsAthletics[]; -extern STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]; -extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[]; -extern STR16 gzIMPMinorTraitsHelpTextsTeaching[]; -extern STR16 gzIMPMinorTraitsHelpTextsScouting[]; -extern STR16 gzIMPMinorTraitsHelpTextsSnitch[]; -extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente -extern STR16 gzIMPMinorTraitsHelpTextsNone[]; +extern STR16* gzIMPMinorTraitsHelpTextsAmbidextrous; +extern STR16* gzIMPMinorTraitsHelpTextsMelee; +extern STR16* gzIMPMinorTraitsHelpTextsThrowing; +extern STR16* gzIMPMinorTraitsHelpTextsStealthy; +extern STR16* gzIMPMinorTraitsHelpTextsNightOps; +extern STR16* gzIMPMinorTraitsHelpTextsAthletics; +extern STR16* gzIMPMinorTraitsHelpTextsBodybuilding; +extern STR16* gzIMPMinorTraitsHelpTextsDemolitions; +extern STR16* gzIMPMinorTraitsHelpTextsTeaching; +extern STR16* gzIMPMinorTraitsHelpTextsScouting; +extern STR16* gzIMPMinorTraitsHelpTextsSnitch; +extern STR16* gzIMPMajorTraitsHelpTextsSurvival; // added by Flugente +extern STR16* gzIMPMinorTraitsHelpTextsNone; -extern STR16 gzIMPOldSkillTraitsHelpTexts[]; +extern STR16* gzIMPOldSkillTraitsHelpTexts; -extern STR16 gzIMPNewCharacterTraitsHelpTexts[]; +extern STR16* gzIMPNewCharacterTraitsHelpTexts; -extern STR16 gzIMPDisabilitiesHelpTexts[]; +extern STR16* gzIMPDisabilitiesHelpTexts; -extern STR16 gzIMPProfileCostText[]; +extern STR16* gzIMPProfileCostText; -extern STR16 zGioNewTraitsImpossibleText[]; +extern STR16* zGioNewTraitsImpossibleText; /////////////////////////////////////////////////////// enum @@ -52,7 +52,7 @@ enum IMM__SOFT_IRON_MAN_MODE_WARNING_TEXT, IMM__EXTREME_IRON_MAN_MODE_WARNING_TEXT, }; -extern STR16 gzIronManModeWarningText[]; +extern STR16* gzIronManModeWarningText; // display cover message (for tactical usually, seperated) // display cover terrain type info (used in cover information) @@ -80,7 +80,7 @@ enum DC_TTI__DETAILED_STEALTH, DC_TTI__DETAILED_TRAP_LEVEL, }; -extern STR16 gzDisplayCoverText[]; +extern STR16* gzDisplayCoverText; #endif diff --git a/i18n/include/language.hpp b/i18n/include/language.hpp index c310e6fd..606dab94 100644 --- a/i18n/include/language.hpp +++ b/i18n/include/language.hpp @@ -2,6 +2,8 @@ #include +#include + namespace i18n { enum class Lang { @@ -16,8 +18,19 @@ enum class Lang }; } -extern const i18n::Lang g_lang; +extern i18n::Lang g_lang; -extern const int MAX_MESSAGES_ON_MAP_BOTTOM; +/* Parses a LANGUAGE ini value (ENGLISH/GERMAN/...) into i18n::Lang; falls back + * to the build's compiled-in default (and logs) on unknown input. Called once + * at startup. */ +auto SetLanguageFromName(std::string const& name) -> void; + +extern int MAX_MESSAGES_ON_MAP_BOTTOM; auto GetLanguagePrefix() -> const STR; + +/* Rebinds every language table's global pointer to the given language's + * namespace (see LanguageStrings.cpp). Called once at startup, right after + * the LANGUAGE ini key resolves g_lang (sgp.cpp GetRuntimeSettings), before + * any UI reads a string. */ +auto BindLanguageStrings(i18n::Lang lang) -> void; diff --git a/i18n/language.cpp b/i18n/language.cpp index 555b33c2..eec929b6 100644 --- a/i18n/language.cpp +++ b/i18n/language.cpp @@ -1,54 +1,63 @@ #include +#include "DEBUG.H" -/* FIXME: The ugliest of ugly hacks. Getting rid of this and letting language - * (ideally text and voice separately) be set in the options menu would be - * ideal. */ -const i18n::Lang g_lang{ - #if defined(ENGLISH) - i18n::Lang::en -#elif defined(CHINESE) - i18n::Lang::zh -#elif defined(DUTCH) - i18n::Lang::nl -#elif defined(FRENCH) - i18n::Lang::fr -#elif defined(GERMAN) - i18n::Lang::de -#elif defined(ITALIAN) - i18n::Lang::it -#elif defined(POLISH) - i18n::Lang::pl -#elif defined(RUSSIAN) - i18n::Lang::ru -#endif -}; +namespace { +// Cn+4 retired the per-exe ENGLISH/GERMAN/... compile definitions along with the CMake +// language axis, so the build default is now a fixed constant; the ini key (below) +// overrides it at runtime via g_lang/BindLanguageStrings. +constexpr i18n::Lang kBuildDefaultLang = i18n::Lang::en; -const int MAX_MESSAGES_ON_MAP_BOTTOM{ -#if defined(CHINESE) // zwwoooooo: Chinese fonts relatively high , so to reduce the number of rows - 6 -#else - 9 -#endif -}; +auto RowsForLang(i18n::Lang lang) -> int { + return lang == i18n::Lang::zh ? 6 : 9; +} +} + +/* g_lang used to be a compile-time const picked by the ENGLISH/GERMAN/... + * define; it is now a runtime value that starts at the build's default and + * can be overridden at startup from the [Ja2 Settings] LANGUAGE ini key (see + * SetLanguageFromName / sgp.cpp GetRuntimeSettings). */ +i18n::Lang g_lang = kBuildDefaultLang; + +int MAX_MESSAGES_ON_MAP_BOTTOM = RowsForLang(g_lang); + +auto ApplyLang(i18n::Lang lang = kBuildDefaultLang ) { + MAX_MESSAGES_ON_MAP_BOTTOM = RowsForLang(lang); + g_lang = lang; +} + +auto SetLanguageFromName(std::string const& name) -> void { + static const struct { const STR name; i18n::Lang lang; } table[] = { + { "ENGLISH", i18n::Lang::en }, + { "GERMAN", i18n::Lang::de }, + { "RUSSIAN", i18n::Lang::ru }, + { "DUTCH", i18n::Lang::nl }, + { "POLISH", i18n::Lang::pl }, + { "FRENCH", i18n::Lang::fr }, + { "ITALIAN", i18n::Lang::it }, + { "CHINESE", i18n::Lang::zh }, + }; + + for (auto const& entry : table) { + if (_stricmp(name.c_str(), entry.name) == 0) { + ApplyLang(entry.lang); + return; + } + } + + ApplyLang(); + FastDebugMsg(String("SetLanguageFromName: unknown LANGUAGE value '%s', keeping build default", name.c_str())); +} auto GetLanguagePrefix() -> const STR { - return -#if defined(ENGLISH) - "" -#elif defined(CHINESE) - "Chinese." -#elif defined(DUTCH) - "Dutch." -#elif defined(FRENCH) - "French." -#elif defined(GERMAN) - "German." -#elif defined(ITALIAN) - "Italian." -#elif defined(POLISH) - "Polish." -#elif defined(RUSSIAN) - "Russian." -#endif - ; + switch (g_lang) { + case i18n::Lang::en: return ""; + case i18n::Lang::de: return "German."; + case i18n::Lang::ru: return "Russian."; + case i18n::Lang::nl: return "Dutch."; + case i18n::Lang::pl: return "Polish."; + case i18n::Lang::fr: return "French."; + case i18n::Lang::it: return "Italian."; + case i18n::Lang::zh: return "Chinese."; + } + return ""; } diff --git a/i18n/text.def b/i18n/text.def new file mode 100644 index 00000000..19e1772e --- /dev/null +++ b/i18n/text.def @@ -0,0 +1,519 @@ +X(pMenuStrings) +X(pLocationPageText) +X(pSectorPageText) +X(pEncyclopediaHelpText) +X(pEncyclopediaTypeText) +X(pEncyclopediaSkrotyText) +X(pEncyclopediaFilterLocationText) +X(pEncyclopediaSubFilterLocationText) +X(pEncyclopediaFilterCharText) +X(pEncyclopediaSubFilterCharText) +X(pEncyclopediaFilterItemText) +X(pEncyclopediaSubFilterItemText) +X(pEncyclopediaFilterQuestText) +X(pEncyclopediaSubFilterQuestText) +X(pEncyclopediaShortCharacterText) +X(pEncyclopediaHelpCharacterText) +X(pEncyclopediaShortInventoryText) +X(BoxFilter) +X(pOtherButtonsText) +X(pOtherButtonsHelpText) +X(QuestDescText) +X(FactDescText) +X(iEditorItemStatsButtonsText) +X(FaceDirs) +X(iEditorMercsToolbarText) +X(iEditorBuildingsToolbarText) +X(iEditorItemsToolbarText) +X(iEditorMapInfoToolbarText) +X(iEditorOptionsToolbarText) +X(iEditorTerrainToolbarText) +X(iEditorTaskbarInternalText) +X(iRenderMapEntryPointsAndLightsText) +X(iBuildTriggerNameText) +X(iRenderDoorLockInfoText) +X(iRenderEditorInfoText) +X(iUpdateBuildingsInfoText) +X(iRenderDoorEditingWindowText) +X(pInitEditorItemsInfoText) +X(pDisplayItemStatisticsTex) +X(pUpdateMapInfoText) +X(gszScheduleActions) +X(zDiffNames) +X(EditMercStat) +X(EditMercOrders) +X(EditMercAttitudes) +X(pDisplayEditMercWindowText) +X(pCreateEditMercWindowText) +X(pDisplayBodyTypeInfoText) +X(pUpdateMercsInfoText) +X(pRenderMercStringsText) +X(pClearCurrentScheduleText) +X(pCopyMercPlacementText) +X(pPasteMercPlacementText) +X(pEditModeShutdownText) +X(pHandleKeyboardShortcutsText) +X(pPerformSelectedActionText) +X(pWaitForHelpScreenResponseText) +X(pAutoLoadMapText) +X(pShowHighGroundText) +X(pUpdateItemStatsPanelText) +X(pSetupGameTypeFlagsText) +X(pSetupGunGUIText) +X(pSetupArmourGUIText) +X(pSetupExplosivesGUIText) +X(pSetupTriggersGUIText) +X(pCreateSummaryWindowText) +X(pRenderSectorInformationText) +X(pRenderItemDetailsText) +X(pRenderSummaryWindowText) +X(pUpdateSectorSummaryText) +X(pSummaryLoadMapCallbackText) +X(pReportErrorText) +X(pRegenerateSummaryInfoForAllOutdatedMapsText) +X(pSummaryUpdateCallbackText) +X(pApologizeOverrideAndForceUpdateEverythingText) +X(pDisplaySelectionWindowGraphicalInformationText) +X(pDisplaySelectionWindowButtonText) +X(wszSelType) +X(gzNewLaptopMessages) +X(zNewTacticalMessages) +X(gszAimPages) +X(zGrod) +X(pCreditsJA2113) +X(ShortItemNames) +X(ItemNames) +X(AmmoCaliber) +X(BobbyRayAmmoCaliber) +X(WeaponType) +X(Message) +X(TeamTurnString) +X(pMilitiaControlMenuStrings) +X(pTraitSkillsMenuStrings) +X(pTraitSkillsMenuDescStrings) +X(pTraitSkillsDenialStrings) +X(pSkillMenuStrings) +X(pSnitchMenuStrings) +X(pSnitchMenuDescStrings) +X(pSnitchToggleMenuStrings) +X(pSnitchToggleMenuDescStrings) +X(pSnitchSectorMenuStrings) +X(pSnitchSectorMenuDescStrings) +X(pPrisonerMenuStrings) +X(pPrisonerMenuDescStrings) +X(pSnitchPrisonExposedStrings) +X(pSnitchGatheringRumoursResultStrings) +X(pAssignMenuStrings) +X(pTrainingStrings) +X(pTrainingMenuStrings) +X(pAttributeMenuStrings) +X(pVehicleStrings) +X(pShortAttributeStrings) +X(pLongAttributeStrings) +X(pContractStrings) +X(pAssignmentStrings) +X(pConditionStrings) +X(pCountryNames) +X(pTownNames) +X(pPersonnelScreenStrings) +X(pPersonnelRecordsHelpTexts) +X(pPersonnelTitle) +X(pUpperLeftMapScreenStrings) +X(pTacticalPopupButtonStrings) +X(pSquadMenuStrings) +X(pDoorTrapStrings) +X(pLongAssignmentStrings) +X(pContractExtendStrings) +X(pMapScreenMouseRegionHelpText) +X(pPersonnelAssignmentStrings) +X(pNoiseVolStr) +X(pNoiseTypeStr) +X(pDirectionStr) +X(pRemoveMercStrings) +X(sTimeStrings) +X(pLandTypeStrings) +X(pGuardMenuStrings) +X(pOtherGuardMenuStrings) +X(pInvPanelTitleStrings) +X(pPOWStrings) +X(pMilitiaString) +X(pMilitiaButtonString) +X(pEpcMenuStrings) +X(pRepairStrings) +X(sPreStatBuildString) +X(sStatGainStrings) +X(pHelicopterEtaStrings) +X(pHelicopterRepairRefuelStrings) +X(sMapLevelString) +X(gsLoyalString) +X(gsUndergroundString) +X(gsTimeStrings) +X(sFacilitiesStrings) +X(pMapPopUpInventoryText) +X(pwTownInfoStrings) +X(pwMineStrings) +X(pwMiscSectorStrings) +X(pMapInventoryErrorString) +X(pMapInventoryStrings) +X(pMapScreenFastHelpTextList) +X(pMovementMenuStrings) +X(pUpdateMercStrings) +X(pMapScreenBorderButtonHelpText) +X(pMapScreenInvenButtonHelpText) +X(pMapScreenBottomFastHelp) +X(pMapScreenBottomText) +X(pMercDeadString) +X(pSenderNameList) +X(pTraverseStrings) +X(pNewMailStrings) +X(pDeleteMailStrings) +X(pEmailHeaders) +X(pEmailTitleText) +X(pFinanceTitle) +X(pFinanceSummary) +X(pFinanceHeaders) +X(pTransactionText) +X(pTransactionAlternateText) +X(pMoralStrings) +X(pSkyriderText) +X(pLeftEquipmentString) +X(pMapScreenStatusStrings) +X(pMapScreenPrevNextCharButtonHelpText) +X(pEtaString) +X(pShortVehicleStrings) +X(pTrashItemText) +X(pMapErrorString) +X(pMapPlotStrings) +X(pMiscMapScreenMouseRegionHelpText) +X(pMercHeLeaveString) +X(pMercSheLeaveString) +X(pImpPopUpStrings) +X(pImpButtonText) +X(pExtraIMPStrings) +X(pDayStrings) +X(pMercContractOverStrings) +X(pFilesTitle) +X(pFilesSenderList) +X(pHistoryLocations) +X(pHistoryHeaders) +X(pHistoryTitle) +X(pShowBookmarkString) +X(pWebPagesTitles) +X(pWebTitle) +X(pPersonnelString) +X(pErrorStrings) +X(pDownloadString) +X(pBookmarkTitle) +X(pBookMarkStrings) +X(pLaptopIcons) +X(gsAtmStartButtonText) +X(pPersonnelTeamStatsStrings) +X(pPersonnelCurrentTeamStatsStrings) +X(pPersonelTeamStrings) +X(pPersonnelDepartedStateStrings) +X(pMapHortIndex) +X(pMapVertIndex) +X(pMapDepthIndex) +X(pLaptopTitles) +X(pMilitiaConfirmStrings) +X(pDeliveryLocationStrings) +X(pSkillAtZeroWarning) +X(pIMPBeginScreenStrings) +X(pIMPFinishButtonText) +X(pIMPFinishStrings) +X(pIMPVoicesStrings) +X(pDepartedMercPortraitStrings) +X(pPersTitleText) +X(pPausedGameText) +X(zOptionsToggleText) +X(zOptionsScreenHelpText) +X(pDoctorWarningString) +X(pMilitiaButtonsHelpText) +X(pMapScreenJustStartedHelpText) +X(pLandMarkInSectorString) +X(gzMercSkillText) +X(gzMercSkillTextNew) +X(gzNonPersistantPBIText) +X(gzMiscString) +X(pBullseyeStrings) +X(wMapScreenSortButtonHelpText) +X(pNewNoiseStr) +X(pTauntUnknownVoice) +X(gzLateLocalizedString) +X(gzCWStrings) +X(gzTooltipStrings) +X(pSkillTraitBeginIMPStrings) +X(sgAttributeSelectionText) +X(pCharacterTraitBeginIMPStrings) +X(gzIMPCharacterTraitText) +X(gzIMPAttitudesText) +X(gzIMPColorChoosingText) +X(sColorChoiceExplanationTexts) +X(gzIMPDisabilityTraitText) +X(gzIMPDisabilityTraitEmailTextDeaf) +X(gzIMPDisabilityTraitEmailTextShortSighted) +X(gzIMPDisabilityTraitEmailTextHemophiliac) +X(gzIMPDisabilityTraitEmailTextAfraidOfHeights) +X(gzIMPDisabilityTraitEmailTextSelfHarm) +X(sEnemyTauntsFireGun) +X(sEnemyTauntsFireLauncher) +X(sEnemyTauntsThrow) +X(sEnemyTauntsChargeKnife) +X(sEnemyTauntsRunAway) +X(sEnemyTauntsSeekNoise) +X(sEnemyTauntsAlert) +X(sEnemyTauntsGotHit) +X(sEnemyTauntsNoticedMerc) +X(sSpecialCharacters) +X(gzFacilityErrorMessage) +X(gzFacilityAssignmentStrings) +X(gzFacilityRiskResultStrings) +X(gzNCTHlabels) +X(gzMapInventorySortingMessage) +X(gzMapInventoryFilterOptions) +X(gzMercCompare) +X(pAntiHackerString) +X(pMessageStrings) +X(gzMoneyAmounts) +X(gzProsLabel) +X(gzConsLabel) +X(gzItemDescTabButtonText) +X(gzItemDescTabButtonShortText) +X(gzItemDescGenHeaders) +X(gzItemDescGenIndexes) +X(gConditionDesc) +X(gTemperatureDesc) +X(gFoodDesc) +X(gzWeaponStatsFasthelpTactical) +X(gzMiscItemStatsFasthelp) +X(gzUDBButtonTooltipText) +X(gzUDBHeaderTooltipText) +X(gzUDBGenIndexTooltipText) +X(gzUDBAdvIndexTooltipText) +X(szUDBGenWeaponsStatsTooltipText) +X(szUDBGenWeaponsStatsExplanationsTooltipText) +X(szUDBGenArmorStatsTooltipText) +X(szUDBGenArmorStatsExplanationsTooltipText) +X(szUDBGenAmmoStatsTooltipText) +X(szUDBGenAmmoStatsExplanationsTooltipText) +X(szUDBGenExplosiveStatsTooltipText) +X(szUDBGenExplosiveStatsExplanationsTooltipText) +X(szUDBGenCommonStatsTooltipText) +X(szUDBGenCommonStatsExplanationsTooltipText) +X(szUDBGenSecondaryStatsTooltipText) +X(szUDBGenSecondaryStatsExplanationsTooltipText) +X(szUDBAdvStatsTooltipText) +X(szUDBAdvStatsExplanationsTooltipText) +X(szUDBAdvStatsExplanationsTooltipTextForWeapons) +X(sKeyDescriptionStrings) +X(gzHiddenHitCountStr) +X(zVehicleName) +X(pVehicleSeatsStrings) +X(szCovertTextStr) +X(gPowerPackDesc) +X(szCorpseTextStr) +X(szFoodTextStr) +X(szPrisonerTextStr) +X(szMTATextStr) +X(szInventoryArmTextStr) +X(pExitingSectorHelpText) +X(InsContractText) +X(InsInfoText) +X(MercAccountText) +X(MercAccountPageText) +X(MercInfo) +X(MercNoAccountText) +X(MercHomePageText) +X(sFuneralString) +X(sFloristText) +X(sOrderFormText) +X(sFloristGalleryText) +X(sFloristCards) +X(BobbyROrderFormText) +X(BobbyRText) +X(BobbyRFilter) +X(BobbyRaysFrontText) +X(AimSortText) +X(AimPolicyText) +X(AimMemberText) +X(CharacterInfo) +X(VideoConfercingText) +X(AimPopUpText) +X(AimLinkText) +X(AimHistoryText) +X(AimFiText) +X(AimAlumniText) +X(AimScreenText) +X(AimBottomMenuText) +X(zMarksMapScreenText) +X(gpStrategicString) +X(gpGameClockString) +X(SKI_Text) +X(SkiAtmText) +X(gzSkiAtmText) +X(SkiMessageBoxText) +X(zSaveLoadText) +X(zOptionsText) +X(z113FeaturesScreenText) +X(z113FeaturesToggleText) +X(z113FeaturesHelpText) +X(z113FeaturesPanelText) +X(gzGIOScreenText) +X(gzMPJHelpText) +X(gzMPJScreenText) +X(gzMPHScreenText) +X(gzMPSScreenText) +X(gzMPCScreenText) +X(gszMPEdgesText) +X(gszMPTeamNames) +X(gzMPChatToggleText) +X(gzMPChatboxText) +X(gzHelpScreenText) +X(gzLaptopHelpText) +X(gzMoneyWithdrawMessageText) +X(gzCopyrightText) +X(BrokenLinkText) +X(gzBobbyRShipmentText) +X(zGioDifConfirmText) +X(gzCreditNames) +X(gzCreditNameTitle) +X(gzCreditNameFunny) +X(New113Message) +X(New113MERCMercMailTexts) +X(MissingIMPSkillsDescriptions) +X(New113AIMMercMailTexts) +X(New113HAMMessage) +X(gzTransformationMessage) +X(NewInvMessage) +X(MPServerMessage) +X(MPClientMessage) +X(gszMPMapscreenText) +X(Additional113Text) +X(ranks) +X(gszPocketPopupText) +X(gLbeStatsDesc) +X(szBackgroundText_Flags) +X(szBackgroundText_Value) +X(szSoldierClassName) +X(szBackgroundTitleText) +X(szPersonalityTitleText) +X(szPersonalityDisplayText) +X(szPersonalityHelpText) +X(szRaceText) +X(szAppearanceText) +X(szRefinementText) +X(szRefinementTextTypes) +X(szNationalityText) +X(szNationalityTextAdjective) +X(szNationalityText_Special) +X(szCareLevelText) +X(szRacistText) +X(szSexistText) +X(szCampaignHistoryWebSite) +X(szCampaignHistoryDetail) +X(szCampaignHistoryTimeString) +X(szCampaignHistoryMoneyTypeString) +X(szCampaignHistoryConsumptionTypeString) +X(szCampaignHistoryResultString) +X(szCampaignHistoryImportanceString) +X(szCampaignHistoryWebpageString) +X(szCampaignStatsOperationPrefix) +X(szCampaignStatsOperationSuffix) +X(szMercCompareWebSite) +X(szMercCompareEventText) +X(szWHOWebSite) +X(szPMCWebSite) +X(szTacticalInventoryDialogString) +X(szTacticalCoverDialogString) +X(szTacticalCoverDialogPrintString) +X(szDynamicDialogueText_DOST_VICTIM_TO_INTERJECTOR_DENY) +X(szDynamicDialogueText_DOST_VICTIM_TO_INTERJECTOR_AGREE) +X(szDynamicDialogueText_DOST_SIDEWITH_VICTIM) +X(szDynamicDialogueText_DOST_SIDEWITH_CAUSE) +X(szDynamicDialogueText_DOST_INTERJECTOR_DIALOGUESELECTION_SHORTTEXT) +X(szDynamicDialogueText_GenderText) +X(szDiseaseText) +X(szSpyText) +X(szFoodText) +X(szIMPGearWebSiteText) +X(szIMPGearPocketText) +X(szMilitiaStrategicMovementText) +X(szEnemyHeliText) +X(szFortificationText) +X(szMilitiaWebSite) +X(szIndividualMilitiaBattleReportText) +X(szIndividualMilitiaTraitRequirements) +X(szIdividualMilitiaWebsiteText) +X(szIdividualMilitiaWebsiteFilterText_Dead) +X(szIdividualMilitiaWebsiteFilterText_Rank) +X(szIdividualMilitiaWebsiteFilterText_Origin) +X(szIdividualMilitiaWebsiteFilterText_Sector) +X(szNonProfileMerchantText) +X(szWeatherTypeText) +X(szSnakeText) +X(szSMilitiaResourceText) +X(szInteractiveActionText) +X(szLaptopStatText) +X(szGearTemplateText) +X(szIntelWebsiteText) +X(szIntelText) +X(szChatTextSpy) +X(szChatTextEnemy) +X(szMilitiaText) +X(szFactoryText) +X(szTurncoatText) +X(szRebelCommandText) +X(szRebelCommandHelpText) +X(szRebelCommandAdminActionsText) +X(szRebelCommandDirectivesText) +X(szRebelCommandAgentMissionsText) +X(szRobotText) +X(gzIMPSkillTraitsText) +X(gzIMPSkillTraitsTextNewMajor) +X(gzIMPSkillTraitsTextNewMinor) +X(gzIMPMajorTraitsHelpTextsAutoWeapons) +X(gzIMPMajorTraitsHelpTextsHeavyWeapons) +X(gzIMPMajorTraitsHelpTextsSniper) +X(gzIMPMajorTraitsHelpTextsRanger) +X(gzIMPMajorTraitsHelpTextsGunslinger) +X(gzIMPMajorTraitsHelpTextsMartialArts) +X(gzIMPMajorTraitsHelpTextsSquadleader) +X(gzIMPMajorTraitsHelpTextsTechnician) +X(gzIMPMajorTraitsHelpTextsDoctor) +X(gzIMPMajorTraitsHelpTextsCovertOps) +X(gzIMPMajorTraitsHelpTextsRadioOperator) +X(gzIMPMajorTraitsHelpTextsNone) +X(gzIMPMinorTraitsHelpTextsAmbidextrous) +X(gzIMPMinorTraitsHelpTextsMelee) +X(gzIMPMinorTraitsHelpTextsThrowing) +X(gzIMPMinorTraitsHelpTextsStealthy) +X(gzIMPMinorTraitsHelpTextsNightOps) +X(gzIMPMinorTraitsHelpTextsAthletics) +X(gzIMPMinorTraitsHelpTextsBodybuilding) +X(gzIMPMinorTraitsHelpTextsDemolitions) +X(gzIMPMinorTraitsHelpTextsTeaching) +X(gzIMPMinorTraitsHelpTextsScouting) +X(gzIMPMinorTraitsHelpTextsSnitch) +X(gzIMPMajorTraitsHelpTextsSurvival) +X(gzIMPMinorTraitsHelpTextsNone) +X(gzIMPOldSkillTraitsHelpTexts) +X(gzIMPNewCharacterTraitsHelpTexts) +X(gzIMPDisabilitiesHelpTexts) +X(gzIMPProfileCostText) +X(zGioNewTraitsImpossibleText) +X(gzIronManModeWarningText) +X(gzDisplayCoverText) +X(ItemPickupHelpPopup) +X(TacticalStr) +X(LargeTacticalStr) +X(zDialogActions) +X(zDealerStrings) +X(zTalkMenuStrings) +X(gMoneyStatsDesc) +X(gWeaponStatsDesc) +X(zHealthStr) +X(szDynamicDialogueText) +X(pContractButtonString) +X(pUpdatePanelButtons) +X(gzIntroScreen) +X(sRepairsDoneString) diff --git a/sgp/sgp.cpp b/sgp/sgp.cpp index 95b1e53a..909aca4b 100644 --- a/sgp/sgp.cpp +++ b/sgp/sgp.cpp @@ -949,6 +949,18 @@ void GetRuntimeSettings( ) SGP_THROW_IFFALSE( setlocale(LC_ALL, loc.utf8().c_str()), _BS(L"invalid locale : ") << loc << _BS::wget ); } + vfs::String language = oProps.getStringProperty("Ja2 Settings", L"LANGUAGE"); + if(!language.empty()) + { + std::string languageName = language.utf8(); + SetLanguageFromName(languageName); + } + + // Rebind every language table pointer to the resolved g_lang. Unconditional: + // with no LANGUAGE key this binds the build default, matching the static + // lang_default initialization the pointers start with. + BindLanguageStrings(g_lang); + iResolution = (int)oProps.getIntProperty(L"Ja2 Settings", L"SCREEN_RESOLUTION", -1); // WANNE: Always enable