************************************************************

* Merged Source Code from Development Trunk: Revision 4063 *
************************************************************
- Source Code is merged from: https://81.169.133.124/source/ja2/branches/Wanne/JA2%201.13%20MP
- This will be the Source for the Beta 2011 Test

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@4064 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2011-01-18 09:11:09 +00:00
parent 44e1646410
commit 91087ca8c0
469 changed files with 118108 additions and 24678 deletions
+433
View File
@@ -0,0 +1,433 @@
#include "Types.h"
#include <stdio.h>
#include <io.h>
#include <string.h>
#include <fcntl.h>
#include <share.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <malloc.h>
#include <stdlib.h>
#include "Debug.h"
#include "FileMan.h"
#include "smack.h"
#include "DDraw.h"
#include "mss.h"
#include "DirectX Common.h"
#include "DirectDraw Calls.h"
#include "SoundMan.h"
#include "Video.h"
#include "Cinematics Bink.h"
#include "vsurface_private.h"
//#include "Intro.h"
#include <vfs/Core/vfs.h>
#include <vfs/Core/vfs_file_raii.h>
#include "radmalw.i"
#include <crtdbg.h>
//*******************************************************************
//
// Local Defines
//
//*******************************************************************
#define BINK_NUM_FLICS 4 // Maximum number of flics open
//*******************************************************************
//
// Global Variables
//
//*******************************************************************
BINKFLIC BinkList[BINK_NUM_FLICS];
UINT32 guiBinkPixelFormat=0;
//LPDIRECTDRAWSURFACE lpBinkVideoPlayback=NULL;
LPDIRECTDRAWSURFACE2 lpBinkVideoPlayback2=NULL;
HWND hBinkDisplayWindow=0;
UINT32 guiHeight;
//*******************************************************************
//
// Function Prototypes
//
//*******************************************************************
void BinkInitialize(HWND hWindow, UINT32 uiWidth, UINT32 uiHeight);
void BinkShutdown(void);
BINKFLIC *BinkPlayFlic(CHAR8 *cFilename, UINT32 uiLeft, UINT32 uiTop, UINT32 uiFlags );
BOOLEAN BinkPollFlics(void);
BINKFLIC *BinkOpenFlic(const CHAR8 *cFilename);
void BinkSetBlitPosition(BINKFLIC *pBink, UINT32 uiLeft, UINT32 uiTop);
void BinkCloseFlic(BINKFLIC *pBink);
BINKFLIC *BinkGetFreeFlic(void);
void BinkSetupVideo(void);
void BinkShutdownVideo(void);
UINT16 GetNumberOfBits( UINT32 uiMask );
//*******************************************************************
//
// Functions
//
//*******************************************************************
void BinkInitialize(HWND hWindow, UINT32 uiWidth, UINT32 uiHeight)
{
//HDIGDRIVER pSoundDriver = NULL;
void* pSoundDriver = NULL;
//Get the sound Driver handle
pSoundDriver = SoundGetDriverHandle();
//if we got the sound handle, use sound during the intro
if( pSoundDriver )
{
BinkSoundUseDirectSound( pSoundDriver );
}
guiHeight = uiHeight;
}
void BinkShutdown(void)
{
UINT32 uiCount;
// Close and deallocate any open flics
for(uiCount=0; uiCount < BINK_NUM_FLICS; uiCount++)
{
//if the flic is currently open
if(BinkList[uiCount].uiFlags & BINK_FLIC_OPEN )
{
//close it
BinkCloseFlic( &BinkList[uiCount] );
}
}
}
BINKFLIC *BinkPlayFlic(const CHAR8 *cFilename, UINT32 uiLeft, UINT32 uiTop, UINT32 uiFlags )
{
BINKFLIC *pBink;
// Open the flic
if( ( pBink = BinkOpenFlic( cFilename ) ) == NULL )
{
return(NULL);
}
if( uiFlags & BINK_FLIC_CENTER_VERTICAL)
{
uiTop = ( guiHeight - pBink->BinkHandle->Height ) / 2;
}
// Set the blitting position on the screen
BinkSetBlitPosition( pBink, uiLeft, uiTop);
// We're now playing, flag the flic for the poller to update
pBink->uiFlags |= BINK_FLIC_PLAYING;
if( uiFlags & BINK_FLIC_AUTOCLOSE )
{
pBink->uiFlags |= BINK_FLIC_AUTOCLOSE;
}
else
{
pBink->uiFlags |= BINK_FLIC_LOOP;
}
return(pBink);
}
BINKFLIC *BinkOpenFlic( const CHAR8 *cFilename )
{
BINKFLIC *pBink;
// Get an available flic slot from the list
if( !( pBink = BinkGetFreeFlic() ) )
{
ErrorMsg("BINK ERROR: Out of flic slots, cannot open another");
return(NULL);
}
#ifndef USE_VFS
// Attempt opening the filename
if(!(pBink->hFileHandle = FileOpen( const_cast<CHAR8*>(cFilename), FILE_OPEN_EXISTING | FILE_ACCESS_READ, FALSE ) ) )
{
ErrorMsg("BINK ERROR: Can't open the BINK file");
return(NULL);
}
//Get the real file handle for the file man handle for the smacker file
HANDLE hFile = GetRealFileHandleFromFileManFileHandle( pBink->hFileHandle );
#else
vfs::Path introname(cFilename);
vfs::Path dir,filename;
introname.splitLast(dir,filename);
vfs::Path tempfile = vfs::Path(L"Temp") + filename;
if(!getVFS()->fileExists(tempfile))
{
try
{
if(!getVFS()->fileExists(introname))
{
return NULL;
}
vfs::COpenReadFile rfile(introname);
vfs::size_t size = rfile->getSize();
std::vector<vfs::Byte> data(size);
rfile->read(&data[0],size);
vfs::COpenWriteFile wfile(tempfile,true);
wfile->write(&data[0],size);
}
catch(std::exception& ex)
{
SGP_RETHROW(_BS(L"Intro file \"") << filename << L"\" could not be extracted" << _BS::wget, ex);
}
}
#endif
#ifndef USE_VFS
if( !( pBink->BinkHandle = BinkOpen((CHAR8 *)hFile, BINKFILEHANDLE ) ) ) //| SMACKTRACKS
#else
vfs::Path tempfilename;
try
{
vfs::COpenWriteFile wfile(tempfile);
if(!wfile->_getRealPath(tempfilename))
{
return NULL;
}
}
catch(std::exception& ex)
{
SGP_RETHROW(L"Temporary intro file could not be read", ex);
}
if( !( pBink->BinkHandle = BinkOpen(tempfilename.to_string().c_str(), BINKNOTHREADEDIO /*BINKFILEHANDLE*/ ) ) ) //| SMACKTRACKS
#endif
{
ErrorMsg("BINK ERROR: Bink won't open the BINK file");
return(NULL);
}
// Make sure we have a video surface
BinkSetupVideo();
pBink->cFilename = cFilename;
pBink->lpDDS = lpBinkVideoPlayback2;
pBink->hWindow = hBinkDisplayWindow;
// Bink flic is now open and ready to go
pBink->uiFlags |= BINK_FLIC_OPEN;
return( pBink );
}
BINKFLIC *BinkGetFreeFlic()
{
UINT32 uiCount;
//loop through to get a free slot
for( uiCount=0; uiCount < BINK_NUM_FLICS; uiCount++ )
{
//if this slot is currently not in use
if( !( BinkList[uiCount].uiFlags & BINK_FLIC_OPEN ) )
{
return( &BinkList[ uiCount ] );
}
}
return( NULL );
}
void BinkSetBlitPosition( BINKFLIC *pBink, UINT32 uiLeft, UINT32 uiTop )
{
pBink->uiLeft = uiLeft;
pBink->uiTop = uiTop;
}
void BinkCloseFlic( BINKFLIC *pBink )
{
// Deallocate the smack buffers
// SmackBufferClose(pSmack->SmackBuffer);
// Close the smack flic
BinkClose(pBink->BinkHandle);
// Attempt opening the filename
FileClose(pBink->hFileHandle);
// Zero the memory, flags, etc.
memset( pBink, 0, sizeof(BINKFLIC) );
}
BOOLEAN BinkPollFlics(void)
{
UINT32 uiCount;
BOOLEAN fFlicStatus=FALSE;
DDSURFACEDESC SurfaceDescription;
BINKFLIC *pBink=NULL;
UINT32 uiCopyToBufferFlags = guiBinkPixelFormat;
//loop through all the open flics
for(uiCount=0; uiCount < BINK_NUM_FLICS; uiCount++)
{
pBink = &BinkList[uiCount];
if( pBink->uiFlags & BINK_FLIC_PLAYING )
{
fFlicStatus = TRUE;
//do we still have to wait for the frame to be finished being displayed
if( !( BinkWait( pBink->BinkHandle ) ) )
{
DDLockSurface( pBink->lpDDS, NULL, &SurfaceDescription, 0, NULL);
BinkDoFrame( pBink->BinkHandle );
BinkCopyToBuffer( pBink->BinkHandle,
SurfaceDescription.lpSurface,
SurfaceDescription.lPitch,
pBink->BinkHandle->Height,
pBink->uiLeft,
pBink->uiTop,
uiCopyToBufferFlags );
DDUnlockSurface( pBink->lpDDS, SurfaceDescription.lpSurface);
// Check to see if the flic is done the last frame
if( pBink->BinkHandle->FrameNum == ( pBink->BinkHandle->Frames-1 ) )
{
// If flic is looping, reset frame to 0
if( pBink->uiFlags & BINK_FLIC_LOOP)
{
BinkGoto( pBink->BinkHandle, 0, 0 );
}
else if( pBink->uiFlags & BINK_FLIC_AUTOCLOSE)
{
BinkCloseFlic( pBink );
}
}
else
{
BinkNextFrame( BinkList[uiCount].BinkHandle );
}
}
}
}
return( fFlicStatus );
}
void BinkSetupVideo(void)
{
DDSURFACEDESC SurfaceDescription;
HRESULT ReturnCode;
UINT16 usRed, usGreen, usBlue;
HVSURFACE hVSurface;
GetVideoSurface( &hVSurface, FRAME_BUFFER );
lpBinkVideoPlayback2 = GetVideoSurfaceDDSurface( hVSurface );
ZEROMEM(SurfaceDescription);
SurfaceDescription.dwSize = sizeof (DDSURFACEDESC);
ReturnCode = IDirectDrawSurface2_GetSurfaceDesc ( lpBinkVideoPlayback2, &SurfaceDescription );
if (ReturnCode != DD_OK)
{
DirectXAttempt ( ReturnCode, __LINE__, __FILE__ );
return;
}
/*
usRed = (UINT16) SurfaceDescription.ddpfPixelFormat.dwRBitMask;
usGreen = (UINT16) SurfaceDescription.ddpfPixelFormat.dwGBitMask;
usBlue = (UINT16) SurfaceDescription.ddpfPixelFormat.dwBBitMask;
// SurfaceDescription.ddpfPixelFormat
if((usRed==0xf800) && (usGreen==0x07e0) && (usBlue==0x001f))
guiBinkPixelFormat = BINKSURFACE565;
else
guiBinkPixelFormat = BINKSURFACE555;
*/
//
// Get bit count for the RGB
//
usRed = GetNumberOfBits( SurfaceDescription.ddpfPixelFormat.dwRBitMask );
usGreen = GetNumberOfBits( SurfaceDescription.ddpfPixelFormat.dwGBitMask );
usBlue = GetNumberOfBits( SurfaceDescription.ddpfPixelFormat.dwBBitMask );
// 555
if( usRed == 5 && usGreen == 5 && usBlue == 5 )
{
guiBinkPixelFormat = BINKSURFACE555;
}
//565
else if( usRed == 5 && usGreen == 6 && usBlue == 5 )
{
guiBinkPixelFormat = BINKSURFACE565;
}
//655
else if( usRed == 6 && usGreen == 5 && usBlue == 5 )
{
guiBinkPixelFormat = BINKSURFACE655;
}
//dont know the format, wont get video
else
{
guiBinkPixelFormat = 0;
}
}
UINT16 GetNumberOfBits( UINT32 uiMask )
{
UINT16 usBits = 0;
while( uiMask )
{
uiMask = uiMask & ( uiMask - 1 );
usBits++;
}
return usBits;
}
void BinkShutdownVideo(void)
{
}
+49
View File
@@ -0,0 +1,49 @@
#ifndef _CINEMATICS_BINK__H_
#define _CINEMATICS_BINK__H_
#include "bink.h"
// BINKFLIC uiFlags
#define BINK_FLIC_OPEN 0x00000001 // Flic is open
#define BINK_FLIC_PLAYING 0x00000002 // Flic is playing
#define BINK_FLIC_LOOP 0x00000004 // Play flic in a loop
#define BINK_FLIC_AUTOCLOSE 0x00000008 // Close when done
#define BINK_FLIC_CENTER_VERTICAL 0x00000010 // Center the video on screen vertically
// Paused???
struct BINKFLIC
{
const CHAR8 *cFilename;
HWFILE hFileHandle;
HBINK BinkHandle;
/// SmackBuf *SmackBuffer;
UINT32 uiFlags;
LPDIRECTDRAWSURFACE2 lpDDS;
HWND hWindow;
UINT32 uiFrame;
UINT32 uiLeft, uiTop;
// LPDIRECTDRAW2 lpDD;
// UINT32 uiNumFrames;
// UINT8 *pAudioData;
// UINT8 *pCueData;
};
void BinkInitialize(HWND hWindow, UINT32 uiWidth, UINT32 uiHeight);
BOOLEAN BinkPollFlics(void);
void BinkCloseFlic(BINKFLIC *pBink);
void BinkShutdownVideo(void);
BINKFLIC *BinkPlayFlic(const CHAR8 *cFilename, UINT32 uiLeft, UINT32 uiTop, UINT32 uiFlags );
#endif
+46 -51
View File
@@ -30,8 +30,8 @@
#include "DirectDraw Calls.h"
#include "Cinematics.h"
#include "soundman.h"
#include "VFS/vfs.h"
#include "VFS/vfs_file_raii.h"
#include <vfs/Core/vfs.h>
#include <vfs/Core/vfs_file_raii.h>
#ifdef JA2
#include "video.h"
@@ -53,45 +53,45 @@
//-Flags-and-Symbols---------------------------------------------------------------
#define SMK_NUM_FLICS 4 // Maximum number of flics open
#define SMK_NUM_FLICS 4 // Maximum number of flics open
// SMKFLIC uiFlags
#define SMK_FLIC_OPEN 0x00000001 // Flic is open
#define SMK_FLIC_PLAYING 0x00000002 // Flic is playing
#define SMK_FLIC_PLAYING 0x00000002 // Flic is playing
#define SMK_FLIC_LOOP 0x00000004 // Play flic in a loop
#define SMK_FLIC_AUTOCLOSE 0x00000008 // Close when done
#define SMK_FLIC_AUTOCLOSE 0x00000008 // Close when done
//-Globals-------------------------------------------------------------------------
SMKFLIC SmkList[SMK_NUM_FLICS];
HWND hDisplayWindow=0;
UINT32 uiDisplayHeight, uiDisplayWidth;
BOOLEAN fSuspendFlics=FALSE;
UINT32 uiFlicsPlaying=0;
UINT32 guiSmackPixelFormat=SMACKBUFFER565;
HWND hDisplayWindow = 0;
UINT32 uiDisplayHeight, uiDisplayWidth;
BOOLEAN fSuspendFlics = FALSE;
UINT32 uiFlicsPlaying = 0;
UINT32 guiSmackPixelFormat = SMACKBUFFER565;
LPDIRECTDRAWSURFACE lpVideoPlayback=NULL;
LPDIRECTDRAWSURFACE2 lpVideoPlayback2=NULL;
//-Function-Prototypes-------------------------------------------------------------
void SmkInitialize(HWND hWindow, UINT32 uiWidth, UINT32 uiHeight);
void SmkShutdown(void);
void SmkInitialize(HWND hWindow, UINT32 uiWidth, UINT32 uiHeight);
void SmkShutdown(void);
SMKFLIC *SmkPlayFlic(CHAR8 *cFilename, UINT32 uiLeft, UINT32 uiTop, BOOLEAN fAutoClose);
BOOLEAN SmkPollFlics(void);
SMKFLIC *SmkOpenFlic(CHAR8 *cFilename);
void SmkSetBlitPosition(SMKFLIC *pSmack, UINT32 uiLeft, UINT32 uiTop);
void SmkCloseFlic(SMKFLIC *pSmack);
void SmkSetBlitPosition(SMKFLIC *pSmack, UINT32 uiLeft, UINT32 uiTop);
void SmkCloseFlic(SMKFLIC *pSmack);
SMKFLIC *SmkGetFreeFlic(void);
void SmkSetupVideo(void);
void SmkShutdownVideo(void);
void SmkSetupVideo(void);
void SmkShutdownVideo(void);
BOOLEAN SmkPollFlics(void)
{
UINT32 uiCount;
BOOLEAN fFlicStatus=FALSE;
DDSURFACEDESC SurfaceDescription;
UINT32 uiCount;
BOOLEAN fFlicStatus = FALSE;
DDSURFACEDESC SurfaceDescription;
for(uiCount=0; uiCount < SMK_NUM_FLICS; uiCount++)
{
@@ -103,7 +103,7 @@ DDSURFACEDESC SurfaceDescription;
if(!SmackWait(SmkList[uiCount].SmackHandle))
{
DDLockSurface(SmkList[uiCount].lpDDS, NULL, &SurfaceDescription, 0, NULL);
SmackToBuffer(SmkList[uiCount].SmackHandle,SmkList[uiCount].uiLeft,
SmackToBuffer(SmkList[uiCount].SmackHandle,SmkList[uiCount].uiLeft,
SmkList[uiCount].uiTop,
SurfaceDescription.lPitch,
SmkList[uiCount].SmackHandle->Height,
@@ -124,7 +124,9 @@ DDSURFACEDESC SurfaceDescription;
SmkCloseFlic(&SmkList[uiCount]);
}
else
{
SmackNextFrame(SmkList[uiCount].SmackHandle);
}
}
}
}
@@ -138,21 +140,19 @@ DDSURFACEDESC SurfaceDescription;
// Lesh changed this function only -----------------------------
void SmkInitialize(HWND hWindow, UINT32 uiWidth, UINT32 uiHeight)
{
void *pSoundDriver = NULL;
// Wipe the flic list clean
memset(SmkList, 0, sizeof(SMKFLIC)*SMK_NUM_FLICS);
// Set playback window properties
hDisplayWindow=hWindow;
uiDisplayWidth=uiWidth;
uiDisplayHeight=uiHeight;
hDisplayWindow = hWindow;
uiDisplayWidth = uiWidth;
uiDisplayHeight= uiHeight;
// Use MMX acceleration, if available
SmackUseMMX(1);
//Get the sound Driver handle
pSoundDriver = SoundGetDriverHandle();
void* pSoundDriver = SoundGetDriverHandle();
//if we got the sound handle, use sound during the intro
if( pSoundDriver )
@@ -161,7 +161,7 @@ void SmkInitialize(HWND hWindow, UINT32 uiWidth, UINT32 uiHeight)
void SmkShutdown(void)
{
UINT32 uiCount;
UINT32 uiCount;
// Close and deallocate any open flics
for(uiCount=0; uiCount < SMK_NUM_FLICS; uiCount++)
@@ -171,9 +171,9 @@ UINT32 uiCount;
}
}
SMKFLIC *SmkPlayFlic(CHAR8 *cFilename, UINT32 uiLeft, UINT32 uiTop, BOOLEAN fClose)
SMKFLIC *SmkPlayFlic(const CHAR8 *cFilename, UINT32 uiLeft, UINT32 uiTop, BOOLEAN fClose)
{
SMKFLIC *pSmack;
SMKFLIC *pSmack;
// Open the flic
if((pSmack=SmkOpenFlic(cFilename))==NULL)
@@ -190,11 +190,10 @@ SMKFLIC *pSmack;
return(pSmack);
}
SMKFLIC *SmkOpenFlic(CHAR8 *cFilename)
SMKFLIC *SmkOpenFlic(const CHAR8 *cFilename)
{
SMKFLIC *pSmack;
// Get an available flic slot from the list
if(!(pSmack=SmkGetFreeFlic()))
{
@@ -228,18 +227,16 @@ SMKFLIC *SmkOpenFlic(CHAR8 *cFilename)
return NULL;
}
vfs::COpenReadFile rfile(introname);
vfs::size_t size = rfile.file().getSize();
vfs::size_t size = rfile->getSize();
std::vector<vfs::Byte> data(size);
rfile.file().read(&data[0],size);
rfile->read(&data[0],size);
vfs::COpenWriteFile wfile(tempfile,true);
wfile.file().write(&data[0],size);
wfile->write(&data[0],size);
}
catch(CBasicException& ex)
catch(std::exception& ex)
{
BuildString bs;
bs.add(L"Intro file \"").add(filename()).add(L"\" could not be extracted");
RETHROWEXCEPTION(bs.get(), &ex);
SGP_RETHROW(_BS(L"Intro file \"") << filename << L"\" could not be extracted" << _BS::wget, ex);
}
}
#endif
@@ -258,14 +255,14 @@ SMKFLIC *SmkOpenFlic(CHAR8 *cFilename)
try
{
vfs::COpenWriteFile wfile(tempfile);
if(!wfile.file()._getRealPath(tempfilename))
if(!wfile->_getRealPath(tempfilename))
{
return NULL;
}
}
catch(CBasicException& ex)
catch(std::exception& ex)
{
RETHROWEXCEPTION(L"Temporary intro file could not be read", &ex);
SGP_RETHROW(L"Temporary intro file could not be read", ex);
}
if(!(pSmack->SmackHandle=SmackOpen(tempfilename.to_string().c_str(), SMACKTRACKS, SMACKAUTOEXTRA)))
#endif
@@ -310,7 +307,7 @@ void SmkCloseFlic(SMKFLIC *pSmack)
SMKFLIC *SmkGetFreeFlic(void)
{
UINT32 uiCount;
UINT32 uiCount;
for(uiCount=0; uiCount < SMK_NUM_FLICS; uiCount++)
if(!(SmkList[uiCount].uiFlags & SMK_FLIC_OPEN))
@@ -321,26 +318,24 @@ UINT32 uiCount;
void SmkSetupVideo(void)
{
DDSURFACEDESC SurfaceDescription;
HRESULT ReturnCode;
UINT16 usRed, usGreen, usBlue;
HVSURFACE hVSurface;
// DEF:
// lpVideoPlayback2=CinematicModeOn();
// lpVideoPlayback2 = CinematicModeOn();
HVSURFACE hVSurface;
GetVideoSurface( &hVSurface, FRAME_BUFFER );
lpVideoPlayback2 = GetVideoSurfaceDDSurface( hVSurface );
DDSURFACEDESC SurfaceDescription;
ZEROMEM(SurfaceDescription);
SurfaceDescription.dwSize = sizeof (DDSURFACEDESC);
ReturnCode = IDirectDrawSurface2_GetSurfaceDesc ( lpVideoPlayback2, &SurfaceDescription );
HRESULT ReturnCode = IDirectDrawSurface2_GetSurfaceDesc ( lpVideoPlayback2, &SurfaceDescription );
if (ReturnCode != DD_OK)
{
DirectXAttempt ( ReturnCode, __LINE__, __FILE__ );
return;
DirectXAttempt ( ReturnCode, __LINE__, __FILE__ );
return;
}
UINT16 usRed, usGreen, usBlue;
usRed = (UINT16) SurfaceDescription.ddpfPixelFormat.dwRBitMask;
usGreen = (UINT16) SurfaceDescription.ddpfPixelFormat.dwGBitMask;
usBlue = (UINT16) SurfaceDescription.ddpfPixelFormat.dwBBitMask;
+22 -22
View File
@@ -3,31 +3,31 @@
#include "smack.h"
typedef struct {
CHAR8 *cFilename;
// HFILE hFileHandle;
HWFILE hFileHandle;
Smack *SmackHandle;
SmackBuf *SmackBuffer;
UINT32 uiFlags;
struct SMKFLIC
{
const CHAR8 *cFilename;
// HFILE hFileHandle;
HWFILE hFileHandle;
Smack *SmackHandle;
SmackBuf *SmackBuffer;
UINT32 uiFlags;
LPDIRECTDRAWSURFACE2 lpDDS;
HWND hWindow;
UINT32 uiFrame;
UINT32 uiLeft, uiTop;
// LPDIRECTDRAW2 lpDD;
// UINT32 uiNumFrames;
// UINT8 *pAudioData;
// UINT8 *pCueData;
} SMKFLIC;
HWND hWindow;
UINT32 uiFrame;
UINT32 uiLeft, uiTop;
// LPDIRECTDRAW2 lpDD;
// UINT32 uiNumFrames;
// UINT8 *pAudioData;
// UINT8 *pCueData;
};
void SmkInitialize(HWND hWindow, UINT32 uiWidth, UINT32 uiHeight);
void SmkShutdown(void);
SMKFLIC *SmkPlayFlic(CHAR8 *cFilename, UINT32 uiLeft, UINT32 uiTop, BOOLEAN fAutoClose);
void SmkInitialize(HWND hWindow, UINT32 uiWidth, UINT32 uiHeight);
void SmkShutdown(void);
SMKFLIC *SmkPlayFlic(const CHAR8 *cFilename, UINT32 uiLeft, UINT32 uiTop, BOOLEAN fAutoClose);
BOOLEAN SmkPollFlics(void);
SMKFLIC *SmkOpenFlic(CHAR8 *cFilename);
void SmkSetBlitPosition(SMKFLIC *pSmack, UINT32 uiLeft, UINT32 uiTop);
void SmkCloseFlic(SMKFLIC *pSmack);
SMKFLIC *SmkOpenFlic(const CHAR8 *cFilename);
void SmkSetBlitPosition(SMKFLIC *pSmack, UINT32 uiLeft, UINT32 uiTop);
void SmkCloseFlic(SMKFLIC *pSmack);
SMKFLIC *SmkGetFreeFlic(void);
/*
+106 -2
View File
@@ -1189,6 +1189,16 @@ CursorData CursorDatabase[] =
void InitCursors( )
{
//CHRISL: NCTH uses a completely different cursor so if we're in NCTH mode, we want to use different graphics
if(UsingNewCTHSystem() == true){
strncpy((char *)CursorFileDatabase[2].ubFilename,"CURSORS\\cur_tagr_ncth.sti",MAX_FILENAME_LEN);
strncpy((char *)CursorFileDatabase[3].ubFilename,"CURSORS\\targblak_ncth.sti",MAX_FILENAME_LEN);
strncpy((char *)CursorFileDatabase[5].ubFilename,"CURSORS\\cur_rbst_ncth.sti",MAX_FILENAME_LEN);
strncpy((char *)CursorFileDatabase[6].ubFilename,"CURSORS\\burstblk_ncth.sti",MAX_FILENAME_LEN);
strncpy((char *)CursorFileDatabase[7].ubFilename,"CURSORS\\cur_tr_ncth.sti",MAX_FILENAME_LEN);
strncpy((char *)CursorFileDatabase[8].ubFilename,"CURSORS\\cur_trw_ncth.sti",MAX_FILENAME_LEN);
strncpy((char *)CursorFileDatabase[35].ubFilename,"CURSORS\\cur_try_ncth.sti",MAX_FILENAME_LEN);
}
InitCursorDatabase( CursorFileDatabase, CursorDatabase, NUM_CURSOR_FILES );
SetMouseBltHook( (MOUSEBLT_HOOK)BltJA2CursorData );
@@ -1244,8 +1254,99 @@ extern INT16 gsCurMouseOffsetY;
extern UINT16 gsCurMouseHeight;
extern UINT16 gsCurMouseWidth;*/
void DrawMouseGraphicsNCTH( )
{
//////////////////////////////////////////////////////////////////////////////////////
// HEADROCK HAM 4: This entire cursor drawing function is now OBSOLETE in NCTH.
// Instead of drawing the targeting cursor on limited cursor space (in the MOUSEBUFFER),
// I draw the new indicator directly on the FRAMEBUFFER through a function in
// Tactical\Interface.CPP. It bypasses the cursor system entirely in order to create
// a pseudo-cursor that can potentially be as large as the viewport (or larger). That
// is unfortunately not doable with the cursor system, so this code is now commented out.
// HEADROCK (HAM): Made several changes here to allow multi-shot CtH display for bursts.
UINT16 * ptrBuf;
UINT32 uiPitch;
UINT32 cnt, i;
UINT32 actualPct = __min(gbCtH[0],99);
UINT16 usCBorderTop = Get16BPPColor( FROMRGB( 155, 155, 155 ) );
UINT16 usCBorderBottom = Get16BPPColor( FROMRGB( 120, 120, 120 ) );
UINT16 usCBar = Get16BPPColor( FROMRGB( 255, 255-255*actualPct/99, 0 ) );
UINT16 usCBack = Get16BPPColor( FROMRGB( 155, 155-155*actualPct/99, 0 ) );
UINT16 usCBar2 = Get16BPPColor( FROMRGB( 180, 140-140*actualPct/99, 0 ) );
UINT16 usCBack2 = Get16BPPColor( FROMRGB( 110, 100-100*actualPct/99, 0 ) );
UINT32 barLength = __min(35,gsCurMouseWidth);
//UINT32 barY = gsCurMouseOffsetY-__min(35,gsCurMouseHeight)/2;
UINT32 barY;
if(gfUICtHBar)
{
// HEADROCK HAM B1/2/2.6:
// This causes the function to display two CTH bars for autofire - the CTH of the first bullet,
// and the CTH of the last bullet in the volley, stored in gbCtH[0] and [1] respectively.
if ( gbCtHAutoFire && (gGameExternalOptions.ubNewCTHBars == 1 || gGameExternalOptions.ubNewCTHBars == 3) )
gbCtHBurstCount = 2;
else if ( gbCtHAutoFire )
gbCtHBurstCount = 0;
// Sets the initial offsets of the bars. Burst and Autofire will display them higher above the
// cursor, to avoid obscuring the target or other data.
if (gbCtHBurstCount > 1 && !gbCtHAutoFire && (gGameExternalOptions.ubNewCTHBars == 1 || gGameExternalOptions.ubNewCTHBars == 2) )
barY = gsCurMouseOffsetY-__min(55,gsCurMouseHeight)/2;
else if (gbCtHBurstCount && gbCtHAutoFire && (gGameExternalOptions.ubNewCTHBars == 1 || gGameExternalOptions.ubNewCTHBars == 3) )
barY = gsCurMouseOffsetY-__min(55,gsCurMouseHeight)/2;
else
barY = gsCurMouseOffsetY-__min(35,gsCurMouseHeight)/2;
for (i=0; i<gbCtHBurstCount; i++)
{
actualPct = __min(gbCtH[ i ],99);
ptrBuf = (UINT16 *) LockMouseBuffer( &uiPitch );
uiPitch >>= 1;
for(cnt = gsCurMouseOffsetX+barLength/2;cnt > gsCurMouseOffsetX-barLength/2+1;cnt--)
{
ptrBuf[cnt-1 + uiPitch*(3+barY)] = usCBorderBottom;
ptrBuf[cnt-1 + uiPitch*barY] = usCBorderTop;
}
ptrBuf[gsCurMouseOffsetX+barLength/2 + uiPitch*(1+barY)] = usCBorderBottom;
ptrBuf[gsCurMouseOffsetX-barLength/2 + uiPitch*(1+barY)] = usCBorderTop;
ptrBuf[gsCurMouseOffsetX+barLength/2 + uiPitch*(2+barY)] = usCBorderBottom;
ptrBuf[gsCurMouseOffsetX-barLength/2 + uiPitch*(2+barY)] = usCBorderTop;
for(cnt = 0;cnt < (barLength-2)*actualPct/99;cnt++)
{
ptrBuf[cnt + gsCurMouseOffsetX-barLength/2+1 + uiPitch*(barY+2)] = usCBar2;
ptrBuf[cnt + gsCurMouseOffsetX-barLength/2+1 + uiPitch*(barY+1)] = usCBar;
}
for(cnt = (barLength-2)*actualPct/99;cnt < (barLength-2);cnt++)
{
ptrBuf[cnt + gsCurMouseOffsetX-barLength/2+1 + uiPitch*(barY+2)] = usCBack2;
ptrBuf[cnt + gsCurMouseOffsetX-barLength/2+1 + uiPitch*(barY+1)] = usCBack;
}
UnlockMouseBuffer();
if (gbCtHBurstCount>1)
barY = barY+5;
}
barY = gsCurMouseOffsetY-__min(35,gsCurMouseHeight)/2;
}
}
void DrawMouseGraphics( )
{
if(UsingNewCTHSystem() == true){
DrawMouseGraphicsNCTH();
return;
}
// HEADROCK (HAM): Made several changes here to allow multi-shot CtH display for bursts.
UINT16 * ptrBuf;
UINT32 uiPitch;
@@ -1359,7 +1460,7 @@ void DrawMouseText( )
}
if ( gfUIAutofireBulletCount )
if ( UsingNewCTHSystem() == false && gfUIAutofireBulletCount )
{
// Set dest for gprintf to be different
SetFontDestBuffer( MOUSE_BUFFER , 0, 0, 64, 64, FALSE );
@@ -1436,7 +1537,10 @@ void DrawMouseText( )
//if ( ( ( gTacticalStatus.uiFlags & TURNBASED ) && ( gTacticalStatus.uiFlags & INCOMBAT ) ) )
{
if ( gfUIDisplayActionPoints )
// HEADROCK HAM 4: Added condition - the AP cost will no longer be displayed in the center when
// aiming a weapon. It will instead by displayed on the new NCTH Indicator.
if ( (UsingNewCTHSystem() == false && gfUIDisplayActionPoints) ||
(UsingNewCTHSystem() == true && gfUIDisplayActionPoints && !gfUICtHBar) )
{
if ( gfUIDisplayActionPointsInvalid )
{
+11 -6
View File
@@ -6,8 +6,7 @@
#include "stdio.h"
#endif
#include "VFS/vfs.h"
#include "VFS/Tools/Log.h"
#include "sgp_logger.h"
#ifdef _ANIMSUBSYSTEM_DEBUG
@@ -57,6 +56,13 @@ void AiDbgMessage( CHAR8 *strMessage)
#endif
static struct LiveLog {
sgp::Logger_ID id;
LiveLog() {
id = sgp::Logger::instance().createLogger();
sgp::Logger::instance().connectFile(id, L"LiveLog.txt", false, sgp::Logger::FLUSH_ON_ENDL);
};
} s_LiveLog;
void LiveMessage( CHAR8 *strMessage)
{
@@ -69,8 +75,7 @@ void LiveMessage( CHAR8 *strMessage)
fclose(OutFile);
}
#else
static CLog& liveMsg = *CLog::create(L"LiveLog.txt",true);
liveMsg << strMessage << CLog::ENDL;
SGP_LOG(s_LiveLog.id, strMessage);
#endif
}
void MPDebugMsg( CHAR8 *strMessage)
@@ -84,7 +89,7 @@ void MPDebugMsg( CHAR8 *strMessage)
fclose(OutFile);
}
#else
static CLog& mpMsg = *CLog::create(L"MPDebug.txt", true);
mpMsg << strMessage << CLog::ENDL;
static vfs::Log& mpMsg = *vfs::Log::create(L"MPDebug.txt", true);
mpMsg << strMessage << vfs::Log::endl;
#endif
}
+701
View File
@@ -0,0 +1,701 @@
#include "ExportStrings.h"
#include "LocalizedStrings.h"
#include "Map Screen Interface.h"
#include "personnel.h"
#include "soldier profile type.h"
#include "interface.h"
#include "Keys.h"
#include "Merc Contract.h"
#include "Campaign Types.h"
#include "Finances.h"
#include "Laptop.h"
#include <vfs/Core/vfs_string.h>
#include <vfs/Tools/vfs_tools.h>
#include <vfs/Tools/vfs_parser_tools.h>
#include <vfs/Tools/vfs_property_container.h>
namespace Loc
{
bool Translate(vfs::String::char_t* str, int len, Language lang);
void ExportMercBio();
void ExportAIMHistory();
void ExportAIMPolicy();
void ExportAlumniName();
void ExportDialogues();
void ExportNPCDialogues();
};
//////////////////////////////////////////////////////////
//#define GERMAN
#include "Text.h"
namespace Loc
{
#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
#ifdef TAIWANESE
# include "_TaiwaneseText.cpp"
static Loc::Language gs_Lang = Loc::Taiwanese;
#endif
}
#include "Assignments.h"
#include "History.h"
template<typename T>
void ExportSection(vfs::PropertyContainer& props, const vfs::String::char_t* section_name, T* strings, int min, int max)
{
for(int i = min; i < max; ++i)
{
vfs::String str(strings[i]);
//Loc::Translate(&str.r_wcs()[0],str.length(), gs_Lang);
if(!str.empty())
{
props.setStringProperty(section_name, vfs::toString<wchar_t>(i), str);
}
}
}
template<>
void ExportSection<wchar_t>(vfs::PropertyContainer& props, const vfs::String::char_t* section_name, wchar_t* strings, int min, int max)
{
ExportSection(props,section_name, &strings, min, max);
}
bool Loc::ExportStrings()
{
vfs::PropertyContainer::TagMap tmap;
//tmap.Container(L"LocalizedStrings");
//tmap.Section(L"Topic");
//tmap.SectionID(L"name");
//tmap.Key(L"msg");
//tmap.KeyID(L"index");
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);
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"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"PersonnelTitle", Loc::pPersonnelTitle, 0, 1);
ExportSection(props, L"PersonnelScreen", Loc::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"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"WeaponStatsFasthelp", Loc::gzWeaponStatsFasthelp, 0, 29);
ExportSection(props, L"WeaponStatsFasthelpTactical",Loc::gzWeaponStatsFasthelpTactical, 0, 29);
ExportSection(props, L"AmmoStatsFasthelp", Loc::gzAmmoStatsFasthelp, 0, 20);
ExportSection(props, L"ArmorStatsFasthelp", Loc::gzArmorStatsFasthelp, 0, 20);
ExportSection(props, L"ExplosiveStatsFasthelp", Loc::gzExplosiveStatsFasthelp, 0, 20);
ExportSection(props, L"MiscItemStatsFasthelp", Loc::gzMiscItemStatsFasthelp, 0, 34);
ExportSection(props, L"MoneyStatsDesc", Loc::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"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, 10);
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"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"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"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"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"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"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"AtmSideButton", Loc::gsAtmSideButtonText, 0, 5);
ExportSection(props, L"AtmStartButton", Loc::gsAtmStartButtonText, 0, 4);
ExportSection(props, L"ATM", Loc::sATMText, 0, 6);
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"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"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"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"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"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"Copyright", Loc::gzCopyrightText, 0, 1);
ExportSection(props, L"OptionsToggle", Loc::zOptionsToggleText, 0, 48);
ExportSection(props, L"OptionsScreenHelp", Loc::zOptionsScreenHelpText, 0, 48);
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"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"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"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"New113HAMMessage", Loc::New113HAMMessage, 0, 22);
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"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);
props.writeToXMLFile(L"Localization/GameStrings.xml",tmap);
props.writeToIniFile(L"Localization/GameStrings.ini",true);
Loc::ExportMercBio();
Loc::ExportAIMHistory();
Loc::ExportAIMPolicy();
Loc::ExportAlumniName();
Loc::ExportDialogues();
Loc::ExportNPCDialogues();
return true;
}
#include <vfs/Core/vfs_file_raii.h>
#include "Encrypted File.h"
namespace Loc
{
wchar_t ToPolish(wchar_t siChar)
{
switch( siChar )
{
case 165: siChar = 260; break;
case 198: siChar = 262; break;
case 202: siChar = 280; break;
case 163: siChar = 321; break;
case 209: siChar = 323; break;
case 211: siChar = 211; break;
case 140: siChar = 346; break;
case 175: siChar = 379; break;
case 143: siChar = 377; break;
case 185: siChar = 261; break;
case 230: siChar = 263; break;
case 234: siChar = 281; break;
case 179: siChar = 322; break;
case 241: siChar = 324; break;
case 243: siChar = 243; break;
case 156: siChar = 347; break;
case 191: siChar = 380; break;
case 159: siChar = 378; break;
}
return siChar;
}
wchar_t ToRussian(wchar_t siChar)
{
switch( siChar )
{
//capital letters
case 168: siChar = 1025; break; //U+0401 d0 81 CYRILLIC CAPITAL LETTER IO
case 192: siChar = 1040; break; //U+0410 A d0 90 CYRILLIC CAPITAL LETTER A
case 193: siChar = 1041; break;
case 194: siChar = 1042; break;
case 195: siChar = 1043; break;
case 196: siChar = 1044; break;
case 197: siChar = 1045; break;
case 198: siChar = 1046; break;
case 199: siChar = 1047; break;
case 200: siChar = 1048; break;
case 201: siChar = 1049; break;
case 202: siChar = 1050; break;
case 203: siChar = 1051; break;
case 204: siChar = 1052; break;
case 205: siChar = 1053; break;
case 206: siChar = 1054; break;
case 207: siChar = 1055; break;
case 208: siChar = 1056; break;
case 209: siChar = 1057; break;
case 210: siChar = 1058; break;
case 211: siChar = 1059; break;
case 212: siChar = 1060; break;
case 213: siChar = 1061; break;
case 214: siChar = 1062; break;
case 215: siChar = 1063; break;
case 216: siChar = 1064; break;
case 217: siChar = 1065; break;
case 218: siChar = 1066; break;
case 219: siChar = 1067; break;
case 220: siChar = 1068; break;
case 221: siChar = 1069; break;
case 222: siChar = 1070; break;
case 223: siChar = 1071; break; //U+042F d0 af CYRILLIC CAPITAL LETTER YA
//small letters
case 185: siChar = 8470; break; // ¹
case 178: siChar = 1030; break; // ²
case 161: siChar = 1038; break; // ¡
case 179: siChar = 1110; break; // ³
case 162: siChar = 1118; break; // ¢
case 165: siChar = 1168; break; // ¥
case 170: siChar = 1028; break; // ª
case 175: siChar = 1031; break; // ¯
case 180: siChar = 1169; break; // ´
case 186: siChar = 1108; break; // º
case 191: siChar = 1111; break; // ¿
case 184: siChar = 1105; break; //U+0451 d1 91 CYRILLIC SMALL LETTER IO
case 224: siChar = 1072; break; //U+0430 a d0 b0 CYRILLIC SMALL LETTER A
case 225: siChar = 1073; break;
case 226: siChar = 1074; break;
case 227: siChar = 1075; break;
case 228: siChar = 1076; break;
case 229: siChar = 1077; break;
case 230: siChar = 1078; break;
case 231: siChar = 1079; break;
case 232: siChar = 1080; break;
case 233: siChar = 1081; break;
case 234: siChar = 1082; break;
case 235: siChar = 1083; break;
case 236: siChar = 1084; break;
case 237: siChar = 1085; break;
case 238: siChar = 1086; break;
case 239: siChar = 1087; break; //U+043F d0 bf CYRILLIC SMALL LETTER PE
case 240: siChar = 1088; break; //U+0440 p d1 80 CYRILLIC SMALL LETTER ER
case 241: siChar = 1089; break;
case 242: siChar = 1090; break;
case 243: siChar = 1091; break;
case 244: siChar = 1092; break;
case 245: siChar = 1093; break;
case 246: siChar = 1094; break;
case 247: siChar = 1095; break;
case 248: siChar = 1096; break;
case 249: siChar = 1097; break;
case 250: siChar = 1098; break;
case 251: siChar = 1099; break;
case 252: siChar = 1100; break;
case 253: siChar = 1101; break;
case 254: siChar = 1102; break;
case 255: siChar = 1103; break; //U+044F d1 8f CYRILLIC SMALL LETTER YA
}
return siChar;
}
bool Translate(vfs::String::char_t* str, int len, Language lang)
{
if(lang == English || lang == German)
{
return true;
}
else if(lang == Russian)
{
for(int i=0; i<len; i++) str[i] = ToRussian(str[i]);
return true;
}
else if(lang == Polish)
{
for(int i=0; i<len; i++) str[i] = ToPolish(str[i]);
return true;
}
return false;
}
}; // namespace Loc
void Loc::ExportMercBio()
{
Loc::Language lang = gs_Lang;
#define SIZE_MERC_BIO_INFO 400 * 2
#define SIZE_MERC_ADDITIONAL_INFO 160 * 2
vfs::String::char_t pInfoString[SIZE_MERC_BIO_INFO];
vfs::String::char_t pAddInfo[SIZE_MERC_ADDITIONAL_INFO];
vfs::COpenReadFile rfile("BINARYDATA\\aimbios.edt");
vfs::tReadableFile& file = rfile.file();
vfs::PropertyContainer props;
for(int i=0; i<40; ++i)
{
memset(pInfoString,0,SIZE_MERC_BIO_INFO*sizeof(wchar_t));
memset(pAddInfo,0,SIZE_MERC_ADDITIONAL_INFO*sizeof(wchar_t));
//
file.read((vfs::Byte*)pInfoString, SIZE_MERC_BIO_INFO);
DecodeString(pInfoString,SIZE_MERC_BIO_INFO);
Loc::Translate(pInfoString, SIZE_MERC_BIO_INFO, lang);
props.setStringProperty(L"Bio", vfs::toString<wchar_t>(i), pInfoString);
file.read((vfs::Byte*)pAddInfo, SIZE_MERC_ADDITIONAL_INFO);
DecodeString(pAddInfo, SIZE_MERC_ADDITIONAL_INFO);
Loc::Translate(pAddInfo, SIZE_MERC_ADDITIONAL_INFO, lang);
props.setStringProperty(L"Add", vfs::toString<wchar_t>(i), pAddInfo);
}
props.writeToXMLFile(L"Localization/AimBiographies.xml", vfs::PropertyContainer::TagMap());
}
void Loc::ExportAIMHistory()
{
Loc::Language lang = gs_Lang;
#define AIM_HISTORY_LINE_SIZE 400 * 2
vfs::String::char_t pHistLine[AIM_HISTORY_LINE_SIZE];
vfs::COpenReadFile rfile("BINARYDATA\\AimHist.edt");
vfs::tReadableFile& file = rfile.file();
vfs::PropertyContainer props;
for(int i=0; i<23; ++i)
{
memset(pHistLine,0,AIM_HISTORY_LINE_SIZE*sizeof(wchar_t));
//
file.read((vfs::Byte*)pHistLine, AIM_HISTORY_LINE_SIZE);
DecodeString(pHistLine,AIM_HISTORY_LINE_SIZE);
Loc::Translate(pHistLine, AIM_HISTORY_LINE_SIZE, lang);
props.setStringProperty(L"Line", vfs::toString<wchar_t>(i), pHistLine);
}
props.writeToXMLFile(L"Localization/AimHistory.xml", vfs::PropertyContainer::TagMap());
}
void Loc::ExportAIMPolicy()
{
Loc::Language lang = gs_Lang;
#define AIM_HISTORY_LINE_SIZE 400 * 2
vfs::String::char_t pPolLine[AIM_HISTORY_LINE_SIZE];
vfs::COpenReadFile rfile("BINARYDATA\\AimPol.edt");
vfs::tReadableFile& file = rfile.file();
vfs::PropertyContainer props;
for(int i=0; i<46; ++i)
{
memset(pPolLine,0,400*sizeof(wchar_t));
//
file.read((vfs::Byte*)pPolLine, AIM_HISTORY_LINE_SIZE);
DecodeString(pPolLine,AIM_HISTORY_LINE_SIZE);
Loc::Translate(pPolLine, AIM_HISTORY_LINE_SIZE, lang);
props.setStringProperty(L"Line", vfs::toString<wchar_t>(i), pPolLine);
}
props.writeToXMLFile(L"Localization/AimPolicy.xml", vfs::PropertyContainer::TagMap());
}
void Loc::ExportAlumniName()
{
Loc::Language lang = gs_Lang;
#define AIM_ALUMNI_NAME_SIZE 80 * 2
vfs::String::char_t pAlumniName[AIM_ALUMNI_NAME_SIZE];
vfs::COpenReadFile rfile("BINARYDATA\\AlumName.edt");
vfs::tReadableFile& file = rfile.file();
vfs::PropertyContainer props;
for(int i=0; i<51; ++i)
{
memset(pAlumniName,0,AIM_ALUMNI_NAME_SIZE*sizeof(wchar_t));
//
file.read((vfs::Byte*)pAlumniName, AIM_ALUMNI_NAME_SIZE);
DecodeString(pAlumniName,AIM_ALUMNI_NAME_SIZE);
Loc::Translate(pAlumniName, AIM_ALUMNI_NAME_SIZE, lang);
props.setStringProperty(L"Line", vfs::toString<wchar_t>(i), pAlumniName);
}
props.writeToXMLFile(L"Localization/AlumniName.xml", vfs::PropertyContainer::TagMap());
}
#include <vfs/Core/vfs.h>
void Loc::ExportDialogues()
{
Loc::Language lang = gs_Lang;
#define DIALOGUESIZE 480
vfs::String::char_t pDiagLine[DIALOGUESIZE];
vfs::CVirtualFileSystem::Iterator it = getVFS()->begin(L"MercEdt/*.edt");
for(; !it.end(); it.next())
{
vfs::PropertyContainer props;
vfs::COpenReadFile rfile(it.value());
vfs::tReadableFile& file = rfile.file();
std::wstringstream wss;
wss.str(file.getName().c_str());
int id=0;
wss >> id;
for(int i=0; i<200; ++i)
{
memset(pDiagLine,0,DIALOGUESIZE*sizeof(wchar_t));
//
if(file.read((vfs::Byte*)pDiagLine, DIALOGUESIZE) > 0)
{
DecodeString(pDiagLine,DIALOGUESIZE);
Loc::Translate(pDiagLine, DIALOGUESIZE, lang);
if(wcslen(pDiagLine))
{
props.setStringProperty(vfs::toString<wchar_t>(id),vfs::toString<wchar_t>(i), pDiagLine);
}
}
}
vfs::Path x(L"Localization/Dialogue");
x += vfs::Path(file.getName().c_wcs() + L".xml");
props.writeToXMLFile(x, vfs::PropertyContainer::TagMap());
}
}
void Loc::ExportNPCDialogues()
{
Loc::Language lang = gs_Lang;
#define DIALOGUESIZE 480
#define CIVQUOTESIZE 320
vfs::String::char_t pDiagLine[DIALOGUESIZE];
vfs::CVirtualFileSystem::Iterator it = getVFS()->begin(L"npcdata/*.edt");
for(; !it.end(); it.next())
{
vfs::PropertyContainer props;
vfs::COpenReadFile rfile(it.value());
vfs::tReadableFile& file = rfile.file();
vfs::String::str_t const& ws = file.getName().c_wcs();
vfs::String::str_t::size_type pos = ws.find_first_of(L".");
vfs::String id = ws.substr(0,pos);
int SIZE;
if(vfs::matchPattern(L"civ*", id))
{
SIZE = CIVQUOTESIZE;
}
else
{
SIZE = DIALOGUESIZE;
}
for(int i=0; i<200; ++i)
{
memset(pDiagLine,0,DIALOGUESIZE*sizeof(wchar_t));
//
if(file.read((vfs::Byte*)pDiagLine, SIZE) > 0)
{
DecodeString(pDiagLine,SIZE);
Loc::Translate(pDiagLine, SIZE, lang);
if(wcslen(pDiagLine))
{
props.setStringProperty(id,vfs::toString<wchar_t>(i), pDiagLine);
}
}
}
vfs::Path x(L"Localization/NpcDialogue");
x += vfs::Path(file.getName().c_wcs() + L".xml");
props.writeToXMLFile(x, vfs::PropertyContainer::TagMap());
}
}
+9
View File
@@ -0,0 +1,9 @@
#ifndef _EXPORTSTRINGS_H_
#define _EXPORTSTRINGS_H_
namespace Loc
{
bool ExportStrings();
}
#endif // _EXPORTSTRINGS_H_
+66 -14
View File
@@ -10,8 +10,11 @@
// Kaiden: INI reading function definitions:
#include "VFS/vfs.h"
#include <vfs/Core/vfs.h>
#ifdef USE_VFS
std::set<vfs::Path,vfs::Path::Less> CIniReader::m_merge_files;
#endif
std::stack<std::string> iniErrorMessages;
template<typename ValueType>
@@ -29,6 +32,13 @@ void PushErrorMessage(std::string const& filename,
iniErrorMessages.push(errMessage.str());
}
#ifdef USE_VFS
void CIniReader::RegisterFileForMerging(vfs::Path const& filename)
{
m_merge_files.insert(filename);
}
#endif
CIniReader::CIniReader(const STR8 szFileName)
{
memset(m_szFileName,0,sizeof(m_szFileName));
@@ -43,7 +53,26 @@ CIniReader::CIniReader(const STR8 szFileName)
}
#else
strncpy(m_szFileName,szFileName, std::min<int>(strlen(szFileName), sizeof(m_szFileName)-1));
m_oProps.initFromIniFile(vfs::Path(szFileName));
if(m_merge_files.find(szFileName) == m_merge_files.end())
{
m_oProps.initFromIniFile(vfs::Path(szFileName));
}
else
{
vfs::CProfileStack* profs = getVFS()->getProfileStack();
vfs::CProfileStack::Iterator it = profs->begin();
std::stack<vfs::CVirtualProfile*> rev_order;
for(; !it.end(); it.next()) { rev_order.push(it.value()); }
while(!rev_order.empty())
{
vfs::IBaseFile* file = rev_order.top()->getFile(szFileName);
if(file)
{
m_oProps.initFromIniFile(vfs::tReadableFile::cast(file));
}
rev_order.pop();
}
}
#endif
}
@@ -79,7 +108,28 @@ CIniReader::CIniReader(const STR8 szFileName, BOOLEAN Force_Custom_Data_Path)
}
#else
strncpy(m_szFileName,szFileName, std::min<int>(strlen(szFileName), sizeof(m_szFileName)-1));
CIniReader_File_Found = m_oProps.initFromIniFile(vfs::Path(szFileName));
if(m_merge_files.find(szFileName) == m_merge_files.end())
{
CIniReader_File_Found = m_oProps.initFromIniFile(vfs::Path(szFileName));
}
else
{
CIniReader_File_Found = TRUE;
vfs::CProfileStack* profs = getVFS()->getProfileStack();
vfs::CProfileStack::Iterator it = profs->begin();
std::stack<vfs::CVirtualProfile*> rev_order;
for(; !it.end(); it.next()) { rev_order.push(it.value()); }
while(!rev_order.empty())
{
vfs::IBaseFile* file = rev_order.top()->getFile(szFileName);
if(file)
{
CIniReader_File_Found = ((CIniReader_File_Found != FALSE) && m_oProps.initFromIniFile(vfs::tReadableFile::cast(file))) ? TRUE : FALSE;
}
rev_order.pop();
}
}
#endif
}
@@ -99,7 +149,7 @@ int CIniReader::ReadInteger(const STR8 szSection, const STR8 szKey, int iDefault
#ifndef USE_VFS
return GetPrivateProfileInt(szSection, szKey, iDefaultValue, m_szFileName);
#else
return m_oProps.getIntProperty(szSection, szKey, iDefaultValue);
return (int)(m_oProps.getIntProperty(szSection, szKey, iDefaultValue));
#endif
}
@@ -107,9 +157,9 @@ int CIniReader::ReadInteger(const STR8 szSection, const STR8 szKey, int iDefault
int CIniReader::ReadInteger(const STR8 szSection, const STR8 szKey, int defaultValue, int minValue, int maxValue)
{
#ifndef USE_VFS
int iniValueReadFromFile = GetPrivateProfileInt(szSection, szKey, defaultValue, m_szFileName);
int iniValueReadFromFile = (int)(GetPrivateProfileInt(szSection, szKey, defaultValue, m_szFileName));
#else
int iniValueReadFromFile = m_oProps.getIntProperty(szSection, szKey, defaultValue);
int iniValueReadFromFile = (int)(m_oProps.getIntProperty(szSection, szKey, defaultValue));
#endif
//AssertGE(iniValueReadFromFile, minValue);
//AssertLE(iniValueReadFromFile, maxValue);
@@ -195,7 +245,7 @@ FLOAT CIniReader::ReadFloat(const STR8 szSection, const STR8 szKey, FLOAT defaul
return iniValueReadFromFile;
}
BOOLEAN CIniReader::ReadBoolean(const STR8 szSection, const STR8 szKey, bool defaultValue)
BOOLEAN CIniReader::ReadBoolean(const STR8 szSection, const STR8 szKey, bool defaultValue, bool bolDisplayError)
{
#ifndef USE_VFS
char szResult[255];
@@ -209,12 +259,12 @@ BOOLEAN CIniReader::ReadBoolean(const STR8 szSection, const STR8 szKey, bool def
else if (strcmp(szResult, "FALSE") == 0)
return FALSE;
#else
utf8string str = m_oProps.getStringProperty(szSection, szKey, L"");
if( StrCmp::Equal(str, L"true") )
vfs::String str = m_oProps.getStringProperty(szSection, szKey, L"");
if( vfs::StrCmp::Equal(str, L"true") )
{
return TRUE;
}
else if( StrCmp::Equal(str, L"false") )
else if( vfs::StrCmp::Equal(str, L"false") )
{
return FALSE;
}
@@ -222,10 +272,12 @@ BOOLEAN CIniReader::ReadBoolean(const STR8 szSection, const STR8 szKey, bool def
char szDefault[255];
sprintf(szDefault, "%s", defaultValue? "TRUE" : "FALSE");
#endif
std::stringstream errMessage;
errMessage << "The value [" << szSection << "][" << szKey << "] = \"" << szResult << "\" "
<< "in file [" << this->m_szFileName << "] is neither TRUE nor FALSE. The value " << szDefault << " will be used.";
iniErrorMessages.push(errMessage.str());
if(bolDisplayError){
std::stringstream errMessage;
errMessage << "The value [" << szSection << "][" << szKey << "] = \"" << szResult << "\" "
<< "in file [" << this->m_szFileName << "] is neither TRUE nor FALSE. The value " << szDefault << " will be used.";
iniErrorMessages.push(errMessage.str());
}
return defaultValue;
}
+10 -4
View File
@@ -6,7 +6,7 @@
#include <stack>
#include <string>
#include "VFS/PropertyContainer.h"
#include <vfs/Tools/vfs_property_container.h>
// Kaiden: This will read any value out of
// an INI file as long as the correct type is specified.
@@ -42,7 +42,7 @@ public:
DOUBLE ReadDouble(const STR8 szSection, const STR8 szKey, DOUBLE defaultValue, DOUBLE minValue, DOUBLE maxValue);
FLOAT ReadFloat (const STR8 szSection, const STR8 szKey, FLOAT defaultValue, FLOAT minValue, FLOAT maxValue);
BOOLEAN ReadBoolean(const STR8 szSection, const STR8 szKey, bool bolDefaultValue);
BOOLEAN ReadBoolean(const STR8 szSection, const STR8 szKey, bool bolDefaultValue, bool bolDisplayError = true);
void ReadString(const STR8 szSection, const STR8 szKey, const STR8 szDefaultValue, STR8 input_buffer, size_t buffer_size);
@@ -51,13 +51,19 @@ public:
BOOLEAN Is_CIniReader_File_Found(void) {return (CIniReader_File_Found);}
void Clear();
#ifdef USE_VFS
static void RegisterFileForMerging(vfs::Path const& filename);
#endif
private:
CPropertyContainer m_oProps;
vfs::PropertyContainer m_oProps;
char m_szFileName[MAX_PATH];
BOOLEAN CIniReader_File_Found;
UINT32 ReadUINT(const STR8 szSection, const STR8 szKey, UINT32 defaultValue, UINT32 minValue, UINT32 maxValue);
#ifdef USE_VFS
static std::set<vfs::Path, vfs::Path::Less> m_merge_files;
#endif
};
#endif//INIREADER_H
+38
View File
@@ -0,0 +1,38 @@
#include "ImportStrings.h"
#include "LocalizedStrings.h"
#include "Language Defines.h"
#include <vfs/Tools/vfs_tools.h>
#include <vfs/Core/vfs.h>
#include <cmath>
void Loc::ImportStrings()
{
Loc::AssociateWithFile(Loc::AIM_BIOGRAPHY, L"Localization/AimBiographies.xml");
Loc::AssociateWithFile(Loc::AIM_HISTORY, L"Localization/AimHistory.xml");
Loc::AssociateWithFile(Loc::AIM_POLICY, L"Localization/AimPolicy.xml");
Loc::AssociateWithFile(Loc::GAME_STRINGS, L"Localization/GameStrings.xml");
vfs::String bio, add, bio2;
Loc::GetString(Loc::AIM_BIOGRAPHY,L"Bio",L"0",add);
Loc::GetString(Loc::AIM_BIOGRAPHY,L"Add",L"10",bio);
Loc::GetString(Loc::AIM_BIOGRAPHY,L"Bio",23,bio2);
for(int i=0; i<200; ++i)
{
std::wstringstream wss;
for(int exp=2; exp>=0; --exp)
{
int t = (int)std::pow((double)10,(double)exp);
wss << (i % (t*10)) / t;
}
vfs::String s = wss.str() + L".EDT.xml";
vfs::Path filename(L"Localization/Dialogue");
filename += vfs::Path(s);
if(getVFS()->fileExists(filename))
{
Loc::AssociateWithFile(Loc::DIALOGUE,filename,vfs::toString<wchar_t>(i));
}
}
}
+9
View File
@@ -0,0 +1,9 @@
#ifndef _IMPORTSTRINGS_H_
#define _IMPORTSTRINGS_H_
namespace Loc
{
void ImportStrings();
}
#endif // _IMPORTSTRINGS_H_
+127
View File
@@ -0,0 +1,127 @@
#include "LocalizedStrings.h"
#include <vfs/Tools/vfs_tools.h>
#include <vfs/Tools/vfs_property_container.h>
bool g_bUseXML_Strings = false;
namespace Loc
{
void Init(Topic t, vfs::String const& section);
void Clear(Topic t);
void ClearAll();
class _Strings
{
public:
_Strings() : initialized(false) {};
bool initialized;
vfs::PropertyContainer stringMap;
};
class _PropState
{
public:
_PropState() : loaded(false) {};
bool loaded;
vfs::Path filename;
};
typedef std::map<vfs::String,_PropState,vfs::String::Less> tSectionState;
static std::map<Topic, vfs::PropertyContainer> _localizedStrings;
static std::map<Topic, tSectionState> _topicFiles;
};
bool Loc::AssociateWithFile(Loc::Topic t, vfs::Path const& sFilename)
{
_topicFiles[t][L"_ALL"].filename = sFilename;
_topicFiles[t][L"_ALL"].loaded = false;
return true;
}
bool Loc::AssociateWithFile(Topic t, vfs::Path const& sFilename, vfs::String const& section)
{
_topicFiles[t][section].filename = sFilename;
_topicFiles[t][section].loaded = false;
return false;
}
bool Loc::GetString(Loc::Topic t, vfs::String const& section, vfs::String const& key, vfs::String& value)
{
Init(t,section);
return _localizedStrings[t].getStringProperty(section, key, value);
}
bool Loc::GetString(Loc::Topic t, vfs::String const& section, int key, vfs::String& value)
{
return GetString(t, section, vfs::toString<wchar_t>(key), value);
}
bool Loc::GetString(Topic t, vfs::String const& section, vfs::String const& key, vfs::String::char_t* value, vfs::UInt32 len)
{
Init(t,section);
return _localizedStrings[t].getStringProperty(section, key, value, len);
}
bool Loc::GetString(Topic t, vfs::String const& section, int key, vfs::String::char_t* value, vfs::UInt32 len)
{
return GetString(t, section, vfs::toString<wchar_t>(key), value, len);
}
vfs::String const& Loc::GetString(Topic t, vfs::String const& section, vfs::String const& key)
{
Init(t,section);
return _localizedStrings[t].getStringProperty(section, key);
}
vfs::String const& Loc::GetString(Topic t, vfs::String const& section, int key)
{
return GetString(t,section,vfs::toString<wchar_t>(key));
}
void Loc::Init(Topic t, vfs::String const& section)
{
_PropState& state = _topicFiles[t][L"_ALL"];
if(!state.filename.empty() && !state.loaded)
{
_localizedStrings[t].initFromXMLFile(state.filename, vfs::PropertyContainer::TagMap());
state.loaded = true;
}
state = _topicFiles[t][section];
if(!state.filename.empty() && !state.loaded)
{
_localizedStrings[t].initFromXMLFile(state.filename, vfs::PropertyContainer::TagMap());
state.loaded = true;
}
}
void Loc::Clear(Topic t)
{
_localizedStrings[t].clearContainer();
tSectionState::iterator it = _topicFiles[t].begin();
for(; it != _topicFiles[t].end(); ++it)
{
it->second.loaded = false;
}
}
void Loc::ClearAll()
{
std::map<Topic, tSectionState>::iterator sit = _topicFiles.begin();
for(; sit != _topicFiles.end(); ++sit)
{
tSectionState::iterator it = sit->second.begin();
for(; it != sit->second.end(); ++it)
{
it->second.loaded = false;
}
}
_localizedStrings.clear();
}
+59
View File
@@ -0,0 +1,59 @@
#ifndef _LOCALIZEDSTRINGS_H_
#define _LOCALIZEDSTRINGS_H_
#include <vfs/Core/vfs_path.h>
//#define USE_LOCALIZATION
namespace Loc
{
enum Language
{
Chinese,
Dutch,
English,
French,
German,
Italian,
Polish,
Russian,
Taiwanese,
};
static const wchar_t* LangSuffix [] = {
L"_cn",
L"_nl",
L"_en",
L"_fr",
L"_de",
L"_it",
L"_pl",
L"_ru",
L"_tw",
};
enum Topic
{
AIM_BIOGRAPHY,
AIM_HISTORY,
AIM_POLICY,
GAME_STRINGS,
DIALOGUE,
};
bool AssociateWithFile(Topic t, vfs::Path const& sFilename);
bool AssociateWithFile(Topic t, vfs::Path const& sFilename, vfs::String const& section);
bool GetString(Topic t, vfs::String const& section, vfs::String const& key, vfs::String& value);
bool GetString(Topic t, vfs::String const& section, int key, vfs::String& value);
bool GetString(Topic t, vfs::String const& section, vfs::String const& key, vfs::String::char_t* value, vfs::UInt32 len);
bool GetString(Topic t, vfs::String const& section, int key, vfs::String::char_t* value, vfs::UInt32 len);
vfs::String const& GetString(Topic t, vfs::String const& section, vfs::String const& key);
vfs::String const& GetString(Topic t, vfs::String const& section, int key);
};
extern bool g_bUseXML_Strings;
#endif // _LOCALIZEDSTRINGS_H_
+13
View File
@@ -20,6 +20,9 @@ BOOLEAN GetMLGFilename( SGPFILENAME filename, UINT16 usMLGGraphicID )
case MLG_AIMSYMBOL:
sprintf( filename, "LAPTOP\\AimSymbol.sti" );
return TRUE;
case MLG_AIMSYMBOL_SMALL:
sprintf( filename, "LAPTOP\\AimSymbol_Small.sti" );
return TRUE;
case MLG_BOBBYNAME:
sprintf( filename, "LAPTOP\\BobbyName.sti" );
return TRUE;
@@ -138,6 +141,10 @@ BOOLEAN GetMLGFilename( SGPFILENAME filename, UINT16 usMLGGraphicID )
//Same graphic (no translation needed)
sprintf( filename, "LAPTOP\\AimSymbol.sti" );
return TRUE;
case MLG_AIMSYMBOL_SMALL:
//Same graphic (no translation needed)
sprintf( filename, "LAPTOP\\AimSymbol_Small.sti" );
return TRUE;
case MLG_BOBBYNAME:
//Same graphic (no translation needed)
sprintf( filename, "LAPTOP\\BobbyName.sti" );
@@ -298,6 +305,9 @@ BOOLEAN GetMLGFilename( SGPFILENAME filename, UINT16 usMLGGraphicID )
case MLG_AIMSYMBOL:
sprintf( filename, "%s\\AimSymbol_%s.sti", zLanguage, zLanguage );
break;
case MLG_AIMSYMBOL_SMALL:
sprintf( filename, "%s\\AimSymbol_Small_%s.sti", zLanguage, zLanguage );
break;
case MLG_BOBBYNAME:
sprintf( filename, "%s\\BobbyName_%s.sti", zLanguage, zLanguage );
break;
@@ -419,6 +429,9 @@ BOOLEAN GetMLGFilename( SGPFILENAME filename, UINT16 usMLGGraphicID )
case MLG_AIMSYMBOL:
sprintf( filename, "LAPTOP\\AimSymbol.sti" );
return TRUE;
case MLG_AIMSYMBOL_SMALL:
sprintf( filename, "LAPTOP\\AimSymbol_Small.sti" );
return TRUE;
case MLG_BOBBYNAME:
sprintf( filename, "LAPTOP\\BobbyName.sti" );
return TRUE;
+1
View File
@@ -4,6 +4,7 @@
enum
{
MLG_AIMSYMBOL,
MLG_AIMSYMBOL_SMALL,
MLG_BOBBYNAME,
MLG_BOBBYRAYAD21,
MLG_BOBBYRAYLINK,
+212 -174
View File
@@ -14,27 +14,36 @@
#include "fade screen.h"
#endif
extern int iScreenMode;
//extern int iScreenMode;
UINT32 uiMusicHandle=NO_SAMPLE;
UINT32 uiMusicVolume=50;
BOOLEAN fMusicPlaying=FALSE;
BOOLEAN fMusicFadingOut=FALSE;
BOOLEAN fMusicFadingIn=FALSE;
static UINT32 uiMusicHandle = NO_SAMPLE;
static BOOLEAN fMusicPlaying = FALSE;
BOOLEAN gfMusicEnded = FALSE;
static BOOLEAN fMusicFadingOut = FALSE;
static BOOLEAN fMusicFadingIn = FALSE;
static UINT32 uiMusicVolume = 50;
UINT8 gubMusicMode = 0;
UINT8 gubOldMusicMode = 0;
static BOOLEAN gfMusicEnded = FALSE;
INT8 gbVictorySongCount = 0;
INT8 gbDeathSongCount = 0;
static UINT8 gubMusicMode = 0;
INT8 bNothingModeSong;
INT8 bEnemyModeSong;
INT8 bBattleModeSong;
static UINT8 gubOldMusicMode = 0;
static INT8 gbVictorySongCount = 0;
static INT8 gbDeathSongCount = 0;
static INT8 bNothingModeSong;
static INT8 bEnemyModeSong;
static INT8 bBattleModeSong;
static BOOLEAN gfUseCreatureMusic = FALSE;
static INT8 gbFadeSpeed = 1;
static BOOLEAN gfDontRestartSong = FALSE;
// unused
//BOOLEAN gfForceMusicToTense = FALSE;
INT8 gbFadeSpeed = 1;
CHAR8 *szMusicList[NUM_MUSIC]=
{
@@ -55,39 +64,40 @@ CHAR8 *szMusicList[NUM_MUSIC]=
"MUSIC\\creature battle.wav",
};
BOOLEAN gfForceMusicToTense = FALSE;
BOOLEAN gfDontRestartSong = FALSE;
BOOLEAN StartMusicBasedOnMode(void);
void DoneFadeOutDueToEndMusic(void);
void MusicStopCallback(void *pData);
BOOLEAN MusicStop(void);
BOOLEAN MusicFadeOut(void);
BOOLEAN MusicFadeIn(void);
BOOLEAN StartMusicBasedOnMode( );
void DoneFadeOutDueToEndMusic( void );
extern void HandleEndDemoInCreatureLevel( );
//extern void HandleEndDemoInCreatureLevel( );
//BOOLEAN NoEnemiesInSight( )
//{
// SOLDIERTYPE *pSoldier;
// INT32 cnt;
//
// // Loop through our guys
// // End the turn of player charactors
// cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
//
// // look for all mercs on the same team,
// for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ )
// {
// if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE )
// {
// if ( pSoldier->aiData.bOppCnt != 0 )
// {
// return( FALSE );
// }
// }
// }
//
// return( TRUE );
//}
BOOLEAN NoEnemiesInSight( )
{
SOLDIERTYPE *pSoldier;
INT32 cnt;
// Loop through our guys
// End the turn of player charactors
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
// look for all mercs on the same team,
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ )
{
if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE )
{
if ( pSoldier->aiData.bOppCnt != 0 )
{
return( FALSE );
}
}
}
return( TRUE );
}
void MusicStopCallback( void *pData );
//********************************************************************************
// MusicPlay
@@ -109,28 +119,28 @@ BOOLEAN MusicPlay(UINT32 uiNum)
MusicStop();
memset(&spParms, 0xff, sizeof(SOUNDPARMS));
spParms.uiPriority=PRIORITY_MAX;
spParms.uiVolume=0;
spParms.uiLoop=1; // Lesh: only 1 line added
spParms.uiPriority = PRIORITY_MAX;
spParms.uiVolume = 0;
spParms.uiLoop = 1; // Lesh: only 1 line added
spParms.EOSCallback = MusicStopCallback;
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, "About to call SoundPlayStreamedFile" );
uiMusicHandle=SoundPlayStreamedFile(szMusicList[uiNum], &spParms);
uiMusicHandle = SoundPlayStreamedFile(szMusicList[uiNum], &spParms);
if(uiMusicHandle!=SOUND_ERROR)
if(uiMusicHandle != SOUND_ERROR)
{
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "Music PLay %d %d", uiMusicHandle, gubMusicMode ) );
gfMusicEnded = FALSE;
fMusicPlaying=TRUE;
gfMusicEnded = FALSE;
fMusicPlaying = TRUE;
MusicFadeIn();
return(TRUE);
return TRUE;
}
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "Music PLay %d %d", uiMusicHandle, gubMusicMode ) );
return(FALSE);
return FALSE;
}
//********************************************************************************
@@ -149,32 +159,31 @@ BOOLEAN MusicSetVolume(UINT32 uiVolume)
//if( 1==iScreenMode ) /* on Windowed mode, skip the music? was coded for WINDOWED_MODE that way...*/
//return FALSE;
uiMusicVolume = __min(uiVolume, 127);
uiMusicVolume=__min(uiVolume, 127);
if(uiMusicHandle!=NO_SAMPLE)
if(uiMusicHandle != NO_SAMPLE)
{
// get volume and if 0 stop music!
if ( uiMusicVolume == 0 )
{
gfDontRestartSong = TRUE;
MusicStop( );
return( TRUE );
}
// get volume and if 0 stop music!
if (uiMusicVolume == 0)
{
gfDontRestartSong = TRUE;
MusicStop();
return TRUE;
}
SoundSetVolume(uiMusicHandle, uiMusicVolume);
return(TRUE);
return TRUE;
}
// If here, check if we need to re-start music
// Have we re-started?
if ( uiMusicVolume > 0 && uiOldMusicVolume == 0 )
if (uiMusicVolume > 0 && uiOldMusicVolume == 0)
{
StartMusicBasedOnMode( );
StartMusicBasedOnMode();
}
return(FALSE);
return FALSE;
}
//********************************************************************************
@@ -187,7 +196,7 @@ BOOLEAN MusicSetVolume(UINT32 uiVolume)
//********************************************************************************
UINT32 MusicGetVolume(void)
{
return(uiMusicVolume);
return uiMusicVolume;
}
//********************************************************************************
@@ -198,25 +207,24 @@ UINT32 MusicGetVolume(void)
// Returns: TRUE if the music was stopped, FALSE if an error occurred
//
//********************************************************************************
BOOLEAN MusicStop(void)
static BOOLEAN MusicStop(void)
{
// WANNE: We want music in windowed mode
//if( 1==iScreenMode ) /* on Windowed mode, skip the music? was coded for WINDOWED_MODE that way...*/
// return(FALSE);
if(uiMusicHandle!=NO_SAMPLE)
if(uiMusicHandle != NO_SAMPLE)
{
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "Music Stop %d %d", uiMusicHandle, gubMusicMode ) );
SoundStop(uiMusicHandle);
fMusicPlaying=FALSE;
fMusicPlaying = FALSE;
uiMusicHandle = NO_SAMPLE;
return(TRUE);
return TRUE;
}
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "Music Stop %d %d", uiMusicHandle, gubMusicMode ) );
return(FALSE);
return FALSE;
}
//********************************************************************************
@@ -227,14 +235,14 @@ BOOLEAN MusicStop(void)
// Returns: TRUE if the music has begun fading, FALSE if an error occurred
//
//********************************************************************************
BOOLEAN MusicFadeOut(void)
static BOOLEAN MusicFadeOut(void)
{
if(uiMusicHandle!=NO_SAMPLE)
if(uiMusicHandle != NO_SAMPLE)
{
fMusicFadingOut=TRUE;
return(TRUE);
fMusicFadingOut = TRUE;
return TRUE;
}
return(FALSE);
return FALSE;
}
//********************************************************************************
@@ -245,14 +253,14 @@ BOOLEAN MusicFadeOut(void)
// Returns: TRUE if the music has begun fading in, FALSE if an error occurred
//
//********************************************************************************
BOOLEAN MusicFadeIn(void)
static BOOLEAN MusicFadeIn(void)
{
if(uiMusicHandle!=NO_SAMPLE)
if(uiMusicHandle != NO_SAMPLE)
{
fMusicFadingIn=TRUE;
return(TRUE);
fMusicFadingIn = TRUE;
return TRUE;
}
return(FALSE);
return FALSE;
}
//********************************************************************************
@@ -264,7 +272,7 @@ BOOLEAN MusicFadeIn(void)
// Returns: TRUE always
//
//********************************************************************************
BOOLEAN MusicPoll( BOOLEAN fForce )
BOOLEAN MusicPoll(BOOLEAN /*fForce*/)
{
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"MusicPoll");
@@ -281,99 +289,96 @@ BOOLEAN MusicPoll( BOOLEAN fForce )
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"MusicPoll: Handle Sound every sound overhead time");
// Handle Sound every sound overhead time....
if ( COUNTERDONE( MUSICOVERHEAD ) )
if (COUNTERDONE(MUSICOVERHEAD))
{
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"MusicPoll: Reset counter");
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"MusicPoll: Reset counter");
// Reset counter
RESETCOUNTER( MUSICOVERHEAD );
RESETCOUNTER(MUSICOVERHEAD);
if(fMusicFadingIn)
if (fMusicFadingIn)
{
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"MusicPoll: music fading in");
if(uiMusicHandle!=NO_SAMPLE)
if(uiMusicHandle != NO_SAMPLE)
{
iVol=SoundGetVolume(uiMusicHandle);
iVol=__min( (INT32)uiMusicVolume, iVol+gbFadeSpeed );
iVol = SoundGetVolume(uiMusicHandle);
iVol = __min( (INT32)uiMusicVolume, iVol+gbFadeSpeed );
SoundSetVolume(uiMusicHandle, iVol);
if(iVol==(INT32)uiMusicVolume)
if(iVol == (INT32)uiMusicVolume)
{
fMusicFadingIn=FALSE;
fMusicFadingIn = FALSE;
gbFadeSpeed = 1;
}
}
}
else if(fMusicFadingOut)
else if (fMusicFadingOut)
{
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"MusicPoll: music fading out");
if(uiMusicHandle!=NO_SAMPLE)
if(uiMusicHandle != NO_SAMPLE)
{
iVol=SoundGetVolume(uiMusicHandle);
iVol=(iVol >=1)? iVol-gbFadeSpeed : 0;
iVol = SoundGetVolume(uiMusicHandle);
iVol = (iVol >=1)? iVol-gbFadeSpeed : 0;
iVol=__max( (INT32)iVol, 0 );
iVol = __max( (INT32)iVol, 0 );
SoundSetVolume(uiMusicHandle, iVol);
if(iVol==0)
if(iVol == 0)
{
MusicStop();
fMusicFadingOut=FALSE;
fMusicFadingOut = FALSE;
gbFadeSpeed = 1;
}
}
}
//#endif
if ( gfMusicEnded )
if (gfMusicEnded)
{
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"MusicPoll: music ended");
// OK, based on our music mode, play another!
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "Music End Loop %d %d", uiMusicHandle, gubMusicMode ) );
// If we were in victory mode, change!
if ( gbVictorySongCount == 1 || gbDeathSongCount == 1 )
if (gbVictorySongCount == 1 || gbDeathSongCount == 1)
{
if ( gbDeathSongCount == 1 && guiCurrentScreen == GAME_SCREEN )
if (gbDeathSongCount == 1 && guiCurrentScreen == GAME_SCREEN)
{
CheckAndHandleUnloadingOfCurrentWorld();
}
if ( gbVictorySongCount == 1 )
if (gbVictorySongCount == 1)
{
SetMusicMode( MUSIC_TACTICAL_NOTHING );
SetMusicMode(MUSIC_TACTICAL_NOTHING);
}
}
else
{
if ( !gfDontRestartSong )
if (!gfDontRestartSong)
{
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"MusicPoll: don't restart song, StartMusicBasedOnMode");
StartMusicBasedOnMode( );
StartMusicBasedOnMode();
}
}
gfMusicEnded = FALSE;
gfDontRestartSong = FALSE;
gfDontRestartSong = FALSE;
}
}
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"MusicPoll done");
return(TRUE);
return TRUE;
}
BOOLEAN SetMusicMode( UINT8 ubMusicMode )
static BOOLEAN SetMusicMode(UINT8 ubMusicMode, BOOLEAN fForce)
{
static INT8 bPreviousMode = 0;
// OK, check if we want to restore
if ( ubMusicMode == MUSIC_RESTORE )
if (ubMusicMode == MUSIC_RESTORE)
{
if ( bPreviousMode == MUSIC_TACTICAL_VICTORY || bPreviousMode == MUSIC_TACTICAL_DEATH )
{
bPreviousMode = MUSIC_TACTICAL_NOTHING;
}
if (bPreviousMode == MUSIC_TACTICAL_VICTORY || bPreviousMode == MUSIC_TACTICAL_DEATH)
{
bPreviousMode = MUSIC_TACTICAL_NOTHING;
}
ubMusicMode = bPreviousMode;
}
@@ -384,7 +389,7 @@ BOOLEAN SetMusicMode( UINT8 ubMusicMode )
}
// if different, start a new music song
if ( gubOldMusicMode != ubMusicMode )
if (fForce || gubOldMusicMode != ubMusicMode)
{
// Set mode....
gubMusicMode = ubMusicMode;
@@ -394,108 +399,106 @@ BOOLEAN SetMusicMode( UINT8 ubMusicMode )
gbVictorySongCount = 0;
gbDeathSongCount = 0;
if(uiMusicHandle!=NO_SAMPLE )
if(uiMusicHandle != NO_SAMPLE)
{
// Fade out old music
MusicFadeOut( );
MusicFadeOut();
}
else
{
// Change music!
StartMusicBasedOnMode( );
StartMusicBasedOnMode();
}
}
gubOldMusicMode = gubMusicMode;
return( TRUE );
return TRUE;
}
BOOLEAN StartMusicBasedOnMode( )
static BOOLEAN StartMusicBasedOnMode(void)
{
static BOOLEAN fFirstTime = TRUE;
if ( fFirstTime )
if (fFirstTime)
{
fFirstTime = FALSE;
bNothingModeSong = (INT8) (NOTHING_A_MUSIC + Random( 4 ));
bEnemyModeSong = (INT8) (TENSOR_A_MUSIC + Random( 3 ));
bBattleModeSong = (INT8) (BATTLE_A_MUSIC + Random( 2 ));
bNothingModeSong = (INT8) (NOTHING_A_MUSIC + Random(4));
bEnemyModeSong = (INT8) (TENSOR_A_MUSIC + Random(3));
bBattleModeSong = (INT8) (BATTLE_A_MUSIC + Random(2));
}
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "StartMusicBasedOnMode() %d %d", uiMusicHandle, gubMusicMode ) );
// Setup a song based on mode we're in!
switch( gubMusicMode )
switch(gubMusicMode)
{
case MUSIC_MAIN_MENU:
// ATE: Don't fade in
gbFadeSpeed = (INT8)uiMusicVolume;
MusicPlay( MENUMIX_MUSIC );
MusicPlay(MENUMIX_MUSIC);
break;
case MUSIC_LAPTOP:
gbFadeSpeed = (INT8)uiMusicVolume;
MusicPlay( MARIMBAD2_MUSIC );
MusicPlay(MARIMBAD2_MUSIC);
break;
case MUSIC_TACTICAL_NOTHING:
// ATE: Don't fade in
gbFadeSpeed = (INT8)uiMusicVolume;
if( gfUseCreatureMusic )
if(gfUseCreatureMusic)
{
MusicPlay( CREEPY_MUSIC );
MusicPlay(CREEPY_MUSIC);
}
else
{
MusicPlay( bNothingModeSong );
bNothingModeSong = (INT8) (NOTHING_A_MUSIC + Random( 4 ) );
MusicPlay(bNothingModeSong);
bNothingModeSong = (INT8) (NOTHING_A_MUSIC + Random(4));
}
break;
case MUSIC_TACTICAL_ENEMYPRESENT:
// ATE: Don't fade in EnemyPresent...
gbFadeSpeed = (INT8)uiMusicVolume;
if( gfUseCreatureMusic )
if(gfUseCreatureMusic)
{
MusicPlay( CREEPY_MUSIC );
MusicPlay(CREEPY_MUSIC);
}
else
{
MusicPlay( bEnemyModeSong );
bEnemyModeSong = (INT8) (TENSOR_A_MUSIC + Random( 3 ));
MusicPlay(bEnemyModeSong);
bEnemyModeSong = (INT8) (TENSOR_A_MUSIC + Random(3));
}
break;
case MUSIC_TACTICAL_BATTLE:
// ATE: Don't fade in
gbFadeSpeed = (INT8)uiMusicVolume;
if( gfUseCreatureMusic )
if(gfUseCreatureMusic)
{
MusicPlay( CREATURE_BATTLE_MUSIC );
MusicPlay(CREATURE_BATTLE_MUSIC);
}
else
{
MusicPlay( bBattleModeSong );
MusicPlay(bBattleModeSong);
}
bBattleModeSong = (INT8) (BATTLE_A_MUSIC + Random( 2 ));
bBattleModeSong = (INT8) (BATTLE_A_MUSIC + Random(2));
break;
case MUSIC_TACTICAL_VICTORY:
// ATE: Don't fade in EnemyPresent...
gbFadeSpeed = (INT8)uiMusicVolume;
MusicPlay( TRIUMPH_MUSIC );
MusicPlay(TRIUMPH_MUSIC);
gbVictorySongCount++;
if( gfUseCreatureMusic && !gbWorldSectorZ )
{ //We just killed all the creatures that just attacked the town.
if(gfUseCreatureMusic && !gbWorldSectorZ)
{
//We just killed all the creatures that just attacked the town.
gfUseCreatureMusic = FALSE;
}
break;
@@ -504,55 +507,90 @@ BOOLEAN StartMusicBasedOnMode( )
// ATE: Don't fade in EnemyPresent...
gbFadeSpeed = (INT8)uiMusicVolume;
MusicPlay( DEATH_MUSIC );
MusicPlay(DEATH_MUSIC);
gbDeathSongCount++;
break;
default:
MusicFadeOut( );
MusicFadeOut();
break;
}
return( TRUE );
return TRUE;
}
BOOLEAN SetMusicMode(UINT8 ubMusicMode)
{
return SetMusicMode(ubMusicMode, FALSE);
}
void MusicStopCallback( void *pData )
static void MusicStopCallback(void *pData)
{
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "Music EndCallback %d %d", uiMusicHandle, gubMusicMode ) );
gfMusicEnded = TRUE;
gfMusicEnded = TRUE;
uiMusicHandle = NO_SAMPLE;
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, "Music EndCallback completed" );
}
void SetMusicFadeSpeed( INT8 bFadeSpeed )
void SetMusicFadeSpeed(INT8 bFadeSpeed)
{
gbFadeSpeed = bFadeSpeed;
}
void FadeMusicForXSeconds( UINT32 uiDelay )
UINT8 GetMusicMode(void)
{
INT16 sNumTimeSteps, sNumVolumeSteps;
// get # time steps in delay....
sNumTimeSteps = (INT16)( uiDelay / 10 );
// Devide this by music volume...
sNumVolumeSteps = (INT16)( uiMusicVolume / sNumTimeSteps );
// Set fade delay...
SetMusicFadeSpeed( (INT8)sNumVolumeSteps );
return gubMusicMode;
}
void DoneFadeOutDueToEndMusic( void )
BOOLEAN UsingCreatureMusic(void)
{
// Quit game....
InternalLeaveTacticalScreen( MAINMENU_SCREEN );
//SetPendingNewScreen( MAINMENU_SCREEN );
return gfUseCreatureMusic;
}
void UseCreatureMusic(BOOLEAN fUseCreatureMusic)
{
if (gfUseCreatureMusic != fUseCreatureMusic)
{
// this means a change
gfUseCreatureMusic = fUseCreatureMusic;
SetMusicMode(gubMusicMode, TRUE); // same as before
}
}
BOOLEAN IsMusicPlaying(void)
{
return fMusicPlaying;
}
UINT32 GetMusicHandle(void)
{
return uiMusicHandle;
}
// unused
//void FadeMusicForXSeconds( UINT32 uiDelay )
//{
// INT16 sNumTimeSteps, sNumVolumeSteps;
//
// // get # time steps in delay....
// sNumTimeSteps = (INT16)( uiDelay / 10 );
//
// // Devide this by music volume...
// sNumVolumeSteps = (INT16)( uiMusicVolume / sNumTimeSteps );
//
// // Set fade delay...
// SetMusicFadeSpeed( (INT8)sNumVolumeSteps );
//}
// unused
//void DoneFadeOutDueToEndMusic( void )
//{
// // Quit game....
// InternalLeaveTacticalScreen( MAINMENU_SCREEN );
// //SetPendingNewScreen( MAINMENU_SCREEN );
//}
+27 -15
View File
@@ -1,7 +1,8 @@
#ifndef _MUSIC_CONTROL_H_
#define _MUSIC_CONTROL_H_
enum MusicList {
enum MusicList
{
MARIMBAD2_MUSIC,
MENUMIX_MUSIC,
NOTHING_A_MUSIC,
@@ -20,8 +21,8 @@ enum MusicList {
NUM_MUSIC
};
enum MusicMode {
enum MusicMode
{
MUSIC_NONE,
MUSIC_RESTORE,
MUSIC_MAIN_MENU,
@@ -33,23 +34,34 @@ enum MusicMode {
MUSIC_LAPTOP,
};
extern UINT32 uiMusicHandle;
extern BOOLEAN fMusicPlaying;
extern UINT8 gubMusicMode;
extern BOOLEAN gfForceMusicToTense;
//extern UINT32 uiMusicHandle;
//extern BOOLEAN fMusicPlaying;
//extern UINT8 gubMusicMode;
//extern BOOLEAN gfForceMusicToTense;
UINT8 GetMusicMode(void);
BOOLEAN SetMusicMode(UINT8 ubMusicMode);
BOOLEAN SetMusicMode( UINT8 ubMusicMode );
// only for editor (editscreen.cpp)
BOOLEAN MusicPlay(UINT32 uiNum);
BOOLEAN MusicSetVolume(UINT32 uiVolume);
UINT32 MusicGetVolume(void);
BOOLEAN MusicStop(void);
BOOLEAN MusicFadeOut(void);
BOOLEAN MusicFadeIn(void);
BOOLEAN MusicPoll( BOOLEAN fForce );
BOOLEAN MusicSetVolume(UINT32 uiVolume);
void SetMusicFadeSpeed( INT8 bFadeSpeed );
BOOLEAN MusicPoll(BOOLEAN fForce);
void FadeMusicForXSeconds( UINT32 uiDelay );
void SetMusicFadeSpeed(INT8 bFadeSpeed);
BOOLEAN UsingCreatureMusic(void);
void UseCreatureMusic(BOOLEAN fUseCreatureMusic);
// only for luaglobal.cpp
BOOLEAN IsMusicPlaying(void);
UINT32 GetMusicHandle(void);
//BOOLEAN MusicStop(void);
//BOOLEAN MusicFadeOut(void);
//BOOLEAN MusicFadeIn(void);
//void FadeMusicForXSeconds( UINT32 uiDelay );
#endif
+2 -2
View File
@@ -624,10 +624,10 @@ void CalculateNewSliderIncrement( UINT32 uiSliderID, UINT16 usPos )
if( pSlider->uiFlags & SLIDER_VERTICAL )
{
if( usPos >= (UINT16)(pSlider->usHeight * (FLOAT).99 ) )
if( usPos >= (UINT16)(pSlider->usHeight * 0.99f ) )
fLastSpot = TRUE;
if( usPos <= (UINT16)(pSlider->usHeight * (FLOAT).01 ) )
if( usPos <= (UINT16)(pSlider->usHeight * 0.01f ) )
fFirstSpot = TRUE;
+1 -1
View File
@@ -21,7 +21,7 @@
#include "Sound Control.h"
#endif
#include "VFS/Tools/ParserTools.h"
#include <vfs/Tools/vfs_parser_tools.h>
STR16 szClipboard;
BOOLEAN gfNoScroll = FALSE;
+228 -22
View File
@@ -7,6 +7,8 @@
#define STRING_LENGTH 255
extern CHAR16 gszAimPages[ 6 ][ 20 ];
extern CHAR16 zGrod[][500];
extern STR16 pCreditsJA2113[];
extern CHAR16 ShortItemNames[MAXITEMS][80];
extern CHAR16 ItemNames[MAXITEMS][80];
@@ -30,6 +32,7 @@ extern STR16 pAssignmentStrings[];
extern STR16 pConditionStrings[];
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[];
@@ -76,7 +79,7 @@ extern STR16 pMapScreenBorderButtonHelpText[];
extern STR16 pMapScreenBottomFastHelp[];
extern STR16 pMapScreenBottomText[];
extern STR16 pMercDeadString[];
extern STR16 pSenderNameList[];
extern CHAR16 pSenderNameList[500][128];
extern STR16 pTraverseStrings[];
extern STR16 pNewMailStrings[];
extern STR16 pDeleteMailStrings[];
@@ -153,6 +156,7 @@ extern STR16 pMilitiaButtonsHelpText[];
extern STR16 pMapScreenJustStartedHelpText[];
extern STR16 pLandMarkInSectorString[];
extern STR16 gzMercSkillText[];
extern STR16 gzMercSkillTextNew[]; // added by SANDRO
extern STR16 gzNonPersistantPBIText[];
extern STR16 gzMiscString[];
@@ -172,6 +176,14 @@ extern STR16 gzIMPCharacterTraitText[];
extern STR16 gzIMPColorChoosingText[];
extern STR16 sColorChoiceExplanationTexts[];
extern STR16 gzIMPDisabilityTraitText[];
extern STR16 sEnemyTauntsFireGun[];
extern STR16 sEnemyTauntsFireLauncher[];
extern STR16 sEnemyTauntsThrow[];
extern STR16 sEnemyTauntsChargeKnife[];
extern STR16 sEnemyTauntsRunAway[];
extern STR16 sEnemyTauntsSeekNoise[];
extern STR16 sEnemyTauntsAlert[];
extern STR16 sEnemyTauntsGotHit[];
//****
// HEADROCK HAM 3.6: New arrays for facility operation messages
@@ -179,9 +191,13 @@ extern STR16 gzFacilityErrorMessage[];
extern STR16 gzFacilityAssignmentStrings[];
extern STR16 gzFacilityRiskResultStrings[];
// HEADROCK HAM 4: Text for the new CTH indicator.
extern STR16 gzNCTHlabels[];
enum
{
ANTIHACKERSTR_EXITGAME,
TEXT_NUM_ANTIHACKERSTR,
};
extern STR16 pAntiHackerString[];
@@ -266,8 +282,8 @@ enum
MSG_HISTORY_UPDATED,
MSG_GL_BURST_CURSOR_ON,
MSG_GL_BURST_CURSOR_OFF,
MSG_DROP_ALL_ON,
MSG_DROP_ALL_OFF,
MSG_SOLDIER_TOOLTIPS_ON, // changed by SANDRO
MSG_SOLDIER_TOOLTIPS_OFF, // changed by SANDRO
MSG_GL_LOW_ANGLE,
MSG_GL_HIGH_ANGLE,
MSG_FORCED_TURN_MODE,
@@ -278,8 +294,9 @@ enum
MSG_END_TURN_AUTO_SAVE,
#endif
MSG_MPSAVEDIRECTORY,//84
MSG_CLIENT
MSG_CLIENT,
MSG_NAS_AND_OIV_INCOMPATIBLE,
TEXT_NUM_MSG,
};
extern STR16 pMessageStrings[];
@@ -357,6 +374,23 @@ enum
STR_NO_SEMI_AUTO,
STR_NO_MORE_ITEMS_TO_STEAL,
STR_NO_MORE_ITEM_IN_HAND,
//add new camo text
STR_DESERT_WORN_OFF,
STR_DESERT_WASHED_OFF,
STR_JUNGLE_WORN_OFF,
STR_JUNGLE_WASHED_OFF,
STR_URBAN_WORN_OFF,
STR_URBAN_WASHED_OFF,
STR_SNOW_WORN_OFF,
STR_SNOW_WASHED_OFF,
STR_CANNOT_ATTACH_SLOT,
TEXT_NUM_STR_MESSAGE,
};
// WANNE: Tooltips
@@ -399,6 +433,12 @@ enum
STR_TT_NO_VEST,
STR_TT_NO_LEGGING,
STR_TT_CAT_ARMOR_2,
// Following added - SANDRO
STR_TT_SKILL_TRAIT_1,
STR_TT_SKILL_TRAIT_2,
STR_TT_SKILL_TRAIT_3,
TEXT_NUM_STR_TT
};
#define LARGE_STRING_LENGTH 200
@@ -415,17 +455,44 @@ extern CHAR16 zTalkMenuStrings[][ SMALL_STRING_LENGTH ];
extern STR16 gzMoneyAmounts[6];
extern CHAR16 gzProsLabel[10];
extern CHAR16 gzConsLabel[10];
// HEADROCK HAM 4: Text for the UDB tabs
extern STR16 gzItemDescTabButtonText[ 3 ];
extern STR16 gzItemDescTabButtonShortText[ 3 ];
extern STR16 gzItemDescGenHeaders[ 4 ];
extern STR16 gzItemDescGenIndexes[ 4 ];
// HEADROCK HAM 4: Added list of condition strings
extern STR16 gConditionDesc[ 9 ];
extern CHAR16 gMoneyStatsDesc[][ 13 ];
// HEADROCK: Altered value to 16
extern CHAR16 gWeaponStatsDesc[][ 16 ];
// HEADROCK: Altered value to 16 //WarmSteel - And I need 17.
extern CHAR16 gWeaponStatsDesc[][ 17 ];
// 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 gzWeaponStatsFasthelp[ 29 ];
extern STR16 gzWeaponStatsFasthelpTactical[ 29 ];
extern STR16 gzWeaponStatsFasthelp[ 32 ];
extern STR16 gzWeaponStatsFasthelpTactical[ 32 ];
extern STR16 gzAmmoStatsFasthelp[ 20 ];
extern STR16 gzArmorStatsFasthelp[ 20 ];
extern STR16 gzExplosiveStatsFasthelp[ 20 ];
extern STR16 gzMiscItemStatsFasthelp[ 34 ];
// 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[ 22 ];
extern STR16 szUDBGenWeaponsStatsExplanationsTooltipText[ 22 ];
extern STR16 szUDBGenArmorStatsTooltipText[ 3 ];
extern STR16 szUDBGenArmorStatsExplanationsTooltipText[ 3 ];
extern STR16 szUDBGenAmmoStatsTooltipText[ 3 ];
extern STR16 szUDBGenAmmoStatsExplanationsTooltipText[ 3 ];
extern STR16 szUDBGenExplosiveStatsTooltipText[ 18 ];
extern STR16 szUDBGenExplosiveStatsExplanationsTooltipText[ 18 ];
extern STR16 szUDBGenSecondaryStatsTooltipText[ 26 ];
extern STR16 szUDBGenSecondaryStatsExplanationsTooltipText[ 26 ];
extern STR16 szUDBAdvStatsTooltipText[ 44 ];
extern STR16 szUDBAdvStatsExplanationsTooltipText[ 44 ];
extern STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[ 44 ];
// Headrock: End Externs
extern STR16 sKeyDescriptionStrings[2];
extern CHAR16 zHealthStr[][13];
@@ -583,6 +650,7 @@ enum
NO_LOS_TO_TALK_TARGET,
ATTACHMENT_REMOVED,
VEHICLE_CAN_NOT_BE_ADDED,
TEXT_NUM_TACTICAL_STR
};
enum{
@@ -601,6 +669,7 @@ enum{
EXIT_GUI_SINGLE_TRAVERSAL_WILL_SEPARATE_SQUADS_HELPTEXT,
EXIT_GUI_ALL_TRAVERSAL_WILL_MOVE_CURRENT_SQUAD_HELPTEXT,
EXIT_GUI_ESCORTED_CHARACTERS_CANT_LEAVE_SECTOR_ALONE_STR,
TEXT_NUM_EXIT_GUI
};
extern STR16 pExitingSectorHelpText[];
@@ -610,6 +679,7 @@ enum
LARGESTR_NOONE_LEFT_CAPABLE_OF_BATTLE_STR,
LARGESTR_NOONE_LEFT_CAPABLE_OF_BATTLE_AGAINST_CREATURES_STR,
LARGESTR_HAVE_BEEN_CAPTURED,
TEXT_NUM_LARGESTR
};
@@ -620,6 +690,7 @@ enum
INS_CONTRACT_NEXT,
INS_CONTRACT_ACCEPT,
INS_CONTRACT_CLEAR,
TEXT_NUM_INS_CONTRACT
};
extern STR16 InsContractText[];
@@ -629,6 +700,7 @@ enum
{
INS_INFO_PREVIOUS,
INS_INFO_NEXT,
TEXT_NUM_INS_INFO,
};
extern STR16 InsInfoText[];
@@ -645,6 +717,7 @@ enum
MERC_ACCOUNT_TOTAL,
MERC_ACCOUNT_AUTHORIZE_CONFIRMATION,
MERC_ACCOUNT_NOT_ENOUGH_MONEY,
TEXT_NUM_MERC_ACCOUNT,
};
extern STR16 MercAccountText[];
@@ -680,6 +753,7 @@ enum
MERC_FILES_HIRE_TO_MANY_PEOPLE_WARNING,
MERC_FILES_MERC_UNAVAILABLE,
TEXT_NUM_MERC_FILES,
};
extern STR16 MercInfo[];
@@ -690,6 +764,7 @@ enum
MERC_NO_ACC_OPEN_ACCOUNT,
MERC_NO_ACC_CANCEL,
MERC_NO_ACC_NO_ACCOUNT_OPEN_ONE,
TEXT_NUM_MERC_NO_ACC,
};
extern STR16 MercNoAccountText[];
@@ -703,6 +778,7 @@ enum
MERC_VIEW_ACCOUNT,
MERC_VIEW_FILES,
MERC_SPECK_COM,
TEXT_NUM_MERC,
};
extern STR16 MercHomePageText[];
@@ -722,6 +798,7 @@ enum
FUNERAL_FUNERAL_ETTIQUETTE,
FUNERAL_OUR_CONDOLENCES, //10
FUNERAL_OUR_SYMPATHIES,
TEXT_NUM_FUNERAL,
};
extern STR16 sFuneralString[];
@@ -742,6 +819,8 @@ enum
FLORIST_ADVERTISEMENT_6,
FLORIST_ADVERTISEMENT_7,
FLORIST_ADVERTISEMENT_8,
FLORIST_ADVERTISEMENT_9,
TEXT_NUM_FLORIST,
};
extern STR16 sFloristText[];
@@ -771,6 +850,7 @@ enum
FLORIST_ORDER_STANDARDIZED_CARDS,
FLORIST_ORDER_BILLING_INFO, //20
FLORIST_ORDER_NAME,
TEXT_NUM_FLORIST_ORDER,
};
extern STR16 sOrderFormText[];
@@ -784,6 +864,7 @@ enum
FLORIST_GALLERY_CLICK_TO_ORDER,
FLORIST_GALLERY_ADDIFTIONAL_FEE,
FLORIST_GALLERY_HOME,
TEXT_NUM_FLORIST_GALLERY,
};
extern STR16 sFloristGalleryText[];
@@ -793,6 +874,7 @@ enum
{
FLORIST_CARDS_CLICK_SELECTION,
FLORIST_CARDS_BACK,
TEXT_NUM_FLORIST_CARDS,
};
extern STR16 sFloristCards[];
@@ -825,6 +907,7 @@ enum
BOBBYR_PACKAGE_WEIGHT,
BOBBYR_MINIMUM_WEIGHT,
BOBBYR_GOTOSHIPMENT_PAGE,
TEXT_NUM_BOBBYR_MAILORDER,
};
extern STR16 BobbyROrderFormText[];
@@ -871,6 +954,7 @@ enum
BOBBYR_FILTER_MISC_FACE,
BOBBYR_FILTER_MISC_LBEGEAR,
BOBBYR_FILTER_MISC_MISC,
TEXT_NUM_BOBBYR_FILTER
};
@@ -908,7 +992,7 @@ enum
BOBBYR_MORE_THEN_10_PURCHASES,
BOBBYR_MORE_NO_MORE_IN_STOCK,
BOBBYR_NO_MORE_STOCK,
TEXT_NUM_BOBBYR_GUNS,
};
extern STR16 BobbyRText[];
@@ -927,6 +1011,7 @@ enum
BOBBYR_ARMOR,
BOBBYR_ADVERTISMENT_3,
BOBBYR_UNDER_CONSTRUCTION,
TEXT_NUM_BOBBYR
};
extern STR16 BobbyRaysFrontText[];
@@ -945,7 +1030,8 @@ enum
MERCENARY_FILES,
ALUMNI_GALLERY,
ASCENDING,
DESCENDING
DESCENDING,
TEXT_NUM_AIM_SORT
};
extern STR16 AimSortText[];
@@ -958,6 +1044,7 @@ enum
AIM_POLICIES_NEXT_PAGE,
AIM_POLICIES_DISAGREE,
AIM_POLICIES_AGREE,
TEXT_NUM_AIM_POLICIES
};
extern STR16 AimPolicyText[];
@@ -968,6 +1055,7 @@ extern STR16 AimPolicyText[];
enum
{
AIM_MEMBER_CLICK_INSTRUCTIONS,
TEXT_NUM_AIM_MEMBER_TEXT
};
extern STR16 AimMemberText[];
@@ -998,7 +1086,14 @@ enum
AIM_MEMBER_ADDTNL_INFO,
AIM_MEMBER_ACTIVE_MEMBERS, //20
AIM_MEMBER_OPTIONAL_GEAR,
AIM_MEMBER_OPTIONAL_GEAR_NSGI,
AIM_MEMBER_MEDICAL_DEPOSIT_REQ,
AIM_MEMBER_GEAR_KIT_ONE,
AIM_MEMBER_GEAR_KIT_TWO, //25
AIM_MEMBER_GEAR_KIT_THREE,
AIM_MEMBER_GEAR_KIT_FOUR,
AIM_MEMBER_GEAR_KIT_FIVE,
TEXT_NUM_AIM_MEMBER_CHARINFO,
};
extern STR16 CharacterInfo[];
@@ -1022,6 +1117,7 @@ enum
AIM_MEMBER_VIDEO_CONF_WITH,
AIM_MEMBER_CONNECTING,
AIM_MEMBER_WITH_MEDICAL, //14
TEXT_NUM_AIM_MEMBER_VCONF
};
extern STR16 VideoConfercingText[];
@@ -1040,7 +1136,7 @@ enum
AIM_MEMBER_PRERECORDED_MESSAGE,
AIM_MEMBER_MESSAGE_RECORDED,
TEXT_NUM_AIM_MEMBER_POPUP
};
extern STR16 AimPopUpText[];
@@ -1048,6 +1144,7 @@ extern STR16 AimPopUpText[];
enum
{
AIM_LINK_TITLE,
TEXM_NUM_AIM_LINK,
};
extern STR16 AimLinkText[];
@@ -1060,6 +1157,7 @@ enum
AIM_HISTORY_HOME,
AIM_HISTORY_AIM_ALUMNI,
AIM_HISTORY_NEXT,
TEXT_NUM_AIM_HISTORY,
};
extern STR16 AimHistoryText[];
@@ -1081,7 +1179,9 @@ enum
AIM_FI_RIGHT_CLICK,
AIM_FI_TO_ENTER_SORT_PAGE,
AIM_FI_AWAY,
AIM_FI_DEAD,
AIM_FI_DEAD,
AIM_FI_ON_ASSIGN,
TEXT_NUM_AIM_FI,
};
extern STR16 AimFiText[];
@@ -1094,6 +1194,7 @@ enum
AIM_ALUMNI_PAGE_3,
AIM_ALUMNI_ALUMNI,
AIM_ALUMNI_DONE,
TEXT_NUM_AIM_ALUMNI,
};
extern STR16 AimAlumniText[];
@@ -1115,7 +1216,7 @@ enum
AIM_BOBBYR_ADD1,
AIM_BOBBYR_ADD2,
AIM_BOBBYR_ADD3,
TEXT_NUM_AIM_SCREEN
};
extern STR16 AimScreenText[];
@@ -1129,6 +1230,7 @@ enum
AIM_POLICIES,
AIM_HISTORY,
AIM_LINKS,
TEXT_NUM_AIM_MENU
};
extern STR16 AimBottomMenuText[];
@@ -1140,6 +1242,7 @@ enum
{
MAP_SCREEN_MAP_LEVEL,
MAP_SCREEN_NO_MILITIA_TEXT,
TEXT_NUM_MAP_SCREEN,
};
extern STR16 zMarksMapScreenText[];
@@ -1244,6 +1347,7 @@ enum
STR_DIALOG_CREATURES_KILL_CIVILIANS,
STR_DIALOG_ENEMIES_ATTACK_UNCONCIOUSMERCS,
STR_DIALOG_CREATURES_ATTACK_UNCONCIOUSMERCS,
TEXT_NUM_STRATEGIC_TEXT
};
//Strings used in conjunction with above enumerations
@@ -1252,6 +1356,7 @@ extern STR16 gpStrategicString[];
enum
{
STR_GAMECLOCK_DAY_NAME,
TEXT_NUM_GAMECLOCK,
};
extern STR16 gpGameClockString[];
@@ -1272,6 +1377,7 @@ enum
SKI_TEXT_NO_MORE_ROOM_IN_PLAYER_OFFER_AREA,
SKI_TEXT_MINUTES,
SKI_TEXT_DROP_ITEM_TO_GROUND,
TEXT_NUM_SKI_TEXT
};
extern STR16 SKI_Text[];
@@ -1307,6 +1413,7 @@ enum
SKI_ATM_MODE_TEXT_SELECT_FROM_MERC,
SKI_ATM_MODE_TEXT_SELECT_INUSUFFICIENT_FUNDS,
SKI_ATM_MODE_TEXT_BALANCE,
TEXT_NUM_SKI_ATM_MODE_TEXT,
};
extern STR16 gzSkiAtmText[];
@@ -1322,6 +1429,7 @@ enum
SKI_DONE_BUTTON_HELP_TEXT,
SKI_PLAYERS_CURRENT_BALANCE,
TEXT_NUM_SKI_MBOX_TEXT
};
extern STR16 SkiMessageBoxText[];
@@ -1362,7 +1470,9 @@ enum
SLG_BR_AWESOME_TEXT,
SLG_INV_RES_ERROR,
SLG_INV_CUSTUM_ERROR,
SLG_INV_CUSTUM_ERROR,
TEXT_NUM_SLG_TEXT,
};
extern STR16 zSaveLoadText[];
@@ -1383,6 +1493,7 @@ enum
OPT_MUSIC,
OPT_RETURN_TO_MAIN,
OPT_NEED_AT_LEAST_SPEECH_OR_SUBTITLE_OPTION_ON,
TEXT_NUM_OPT_TEXT,
};
extern STR16 zOptionsText[];
@@ -1400,7 +1511,7 @@ enum
MONEY_DESC_BALANCE,
MONEY_DESC_AMOUNT_2_WITHDRAW,
MONEY_DESC_TO_WITHDRAW,
TEXT_NUM_MONEY_DESC,
};
@@ -1409,6 +1520,7 @@ enum
{
MONEY_TEXT_WITHDRAW_MORE_THEN_MAXIMUM,
CONFIRMATION_TO_DEPOSIT_MONEY_TO_ACCOUNT,
TEXT_NUM_MONEY_WITHDRAW
};
@@ -1433,7 +1545,7 @@ enum
GIO_HARD_TEXT,
GIO_INSANE_TEXT,
GIO_OK_TEXT,
GIO_START_TEXT,
GIO_CANCEL_TEXT,
GIO_GAME_SAVE_STYLE_TEXT,
@@ -1452,6 +1564,41 @@ enum
GIO_INV_NEW_TEXT,
GIO_LOAD_MP_GAME,
GIO_INITIAL_GAME_SETTINGS_MP,
////////////////////////////////////
// SANDRO - added following
GIO_TRAITS_TEXT,
GIO_TRAITS_OLD_TEXT,
GIO_TRAITS_NEW_TEXT,
GIO_IMP_NUMBER_TITLE_TEXT,
GIO_IMP_NUMBER_1,
GIO_IMP_NUMBER_2,
GIO_IMP_NUMBER_3,
GIO_IMP_NUMBER_4,
GIO_IMP_NUMBER_5,
GIO_IMP_NUMBER_6,
GIO_DROPALL_TITLE_TEXT,
GIO_DROPALL_OFF_TEXT,
GIO_DROPALL_ON_TEXT,
GIO_TERRORISTS_TITLE_TEXT,
GIO_TERRORISTS_RANDOM_TEXT,
GIO_TERRORISTS_ALL_TEXT,
GIO_CACHES_TITLE_TEXT,
GIO_CACHES_RANDOM_TEXT,
GIO_CACHES_ALL_TEXT,
GIO_PROGRESS_TITLE_TEXT,
GIO_PROGRESS_VERY_SLOW_TEXT,
GIO_PROGRESS_SLOW_TEXT,
GIO_PROGRESS_NORMAL_TEXT,
GIO_PROGRESS_FAST_TEXT,
GIO_PROGRESS_VERY_FAST_TEXT,
// WANNE: New strings for start new game screen (for NAS)
GIO_INV_SETTING_OLD_TEXT,
GIO_INV_SETTING_NEW_TEXT,
GIO_INV_SETTING_NEW_NAS_TEXT,
////////////////////////////////////
TEXT_NUM_GIO_TEXT
};
extern STR16 gzGIOScreenText[];
@@ -1474,9 +1621,12 @@ enum
MPJ_PING_TEXT,
MPJ_HANDLE_INVALID,
MPJ_SERVERIP_INVALID,
MPJ_SERVERPORT_INVALID
MPJ_SERVERPORT_INVALID,
TEXT_NUM_MPJ_TEXT
};
extern STR16 gzMPJHelpText[];
extern STR16 gzMPJScreenText[];
//Multiplayer Host Screen
enum
@@ -1512,11 +1662,40 @@ enum
MPH_ENABLECIV_TEXT,
MPH_USENIV_TEXT,
MPH_OVERRIDEMAXAI_TEXT,
MPH_SYNC_CLIENT_MP_DIR,
MPH_SYNC_GAME_DIRECTORY,
MPH_FILE_TRANSFER_DIR_TEXT,
MPH_FILE_TRANSFER_DIR_INVALID,
MPH_FILE_TRANSFER_DIR_TEXT_ADDITIONAL,
MPH_FILE_TRANSFER_DIR_NOT_EXIST,
MPH_1,
MPH_2,
MPH_3,
MPH_4,
MPH_5,
MPH_6,
MPH_YES,
MPH_NO,
MPH_MORNING,
MPH_AFTERNOON,
MPH_NIGHT,
MPH_CASH_LOW,
MPH_CASH_MEDIUM,
MPH_CASH_HIGH,
MPH_CASH_UNLIMITED,
MPH_TIME_NEVER,
MPH_TIME_SLOW,
MPH_TIME_MEDIUM,
MPH_TIME_FAST,
MPH_DAMAGE_VERYLOW,
MPH_DAMAGE_LOW,
MPH_DAMAGE_NORMAL,
MPH_HIRE_RANDOM,
MPH_HIRE_NORMAL,
MPH_EDGE_RANDOM,
MPH_EDGE_SELECTABLE,
MPH_DISABLE,
MPH_ALLOW,
TEXT_NUM_MPH_TEXT,
};
extern STR16 gzMPHScreenText[];
enum
@@ -1533,7 +1712,8 @@ enum
MPS_ACCURACY_TEXT,
MPS_DMGDONE_TEXT,
MPS_DMGTAKEN_TEXT,
MPS_WAITSERVER_TEXT
MPS_WAITSERVER_TEXT,
TEXT_NUM_MPS_TEXT,
};
extern STR16 gzMPSScreenText[];
enum
@@ -1545,6 +1725,7 @@ enum
MPC_HELP1_TEXT,
MPC_HELP2_TEXT,
MPC_READY_TEXT,
TEXT_NUM_MPC_TEXT,
};
extern STR16 gzMPCScreenText[];
// Multiplayer Starting Edges
@@ -1594,7 +1775,7 @@ enum
BOOKMARK_TEXT_MCGILLICUTTY_MORTUARY,
BOOKMARK_TEXT_UNITED_FLORAL_SERVICE,
BOOKMARK_TEXT_INSURANCE_BROKERS_FOR_AIM_CONTRACTS,
TEXT_NUM_LAPTOP_BN_BOOKMARK_TEXT
};
@@ -1602,6 +1783,7 @@ enum
enum
{
HLP_SCRN_TXT__EXIT_SCREEN,
TEXT_NUM_HLP
};
extern STR16 gzHelpScreenText[];
@@ -1623,6 +1805,7 @@ enum
MAPINV_CANT_PICKUP_IN_COMBAT,
MAPINV_CANT_DROP_IN_COMBAT,
MAPINV_NOT_IN_SECTOR_TO_DROP,
TEXT_NUM_MAPINV
};
@@ -1631,6 +1814,7 @@ enum
{
BROKEN_LINK_TXT_ERROR_404,
BROKEN_LINK_TXT_SITE_NOT_FOUND,
TEXT_NUM_BROKEN_LINK,
};
extern STR16 BrokenLinkText[];
@@ -1641,6 +1825,7 @@ enum
BOBBYR_SHIPMENT__ORDER_NUM,
BOBBYR_SHIPMENT__NUM_ITEMS,
BOBBYR_SHIPMENT__ORDERED_ON,
TEXT_NUM_BOBBYR_SHIPMENT,
};
extern STR16 gzBobbyRShipmentText[];
@@ -1652,6 +1837,7 @@ enum
GIO_CFS_EXPERIENCED,
GIO_CFS_EXPERT,
GIO_CFS_INSANE,
TEXT_NUM_GIO_CFS,
};
extern STR16 zGioDifConfirmText[];
@@ -1691,6 +1877,8 @@ extern STR16 New113Message[];
extern STR16 New113MERCMercMailTexts[];
extern STR16 MissingIMPSkillsDescriptions[];
extern STR16 New113AIMMercMailTexts[]; // WANNE: new WF Merc text, that does not exist in Email.edt
// HEADROCK: HAM Messages
extern STR16 New113HAMMessage[];
enum
@@ -1719,6 +1907,24 @@ enum
MSG113_RTM_SNEAKING_OFF,
MSG113_RTM_SNEAKING_ON,
MSG113_RTM_ENEMIES_SPOOTED,
// added by SANDRO
MSG113_THIEF_SUCCESSFUL,
MSG113_NOT_ENOUGH_APS_TO_STEAL_ALL,
MSG113_DO_WE_WANT_SURGERY_FIRST,
MSG113_DO_WE_WANT_SURGERY,
MSG113_SURGERY_BEFORE_DOCTOR_ASSIGNMENT,
MSG113_SURGERY_BEFORE_PATIENT_ASSIGNMENT,
MSG113_SURGERY_ON_TACTICAL_AUTOBANDAGE,
MSG113_SURGERY_FINISHED,
MSG113_LOSES_ONE_POINT_MAX_HEALTH,
MSG113_LOSES_X_POINTS_MAX_HEALTH,
MSG113_REGAINED_ONE_POINTS_OF_STAT,
MSG113_REGAINED_X_POINTS_OF_STATS,
MSG113_ENEMY_AMBUSH_PREVENTED,
MSG113_BLOODCATS_AMBUSH_PREVENTED,
MSG113_SOLDIER_HIT_TO_GROIN,
TEXT_NUM_MSG113,
};
//CHRISL: NewInv messages
@@ -1727,7 +1933,6 @@ extern STR16 NewInvMessage[];
// WANNE - MP: New multiplayer messages
extern STR16 MPServerMessage[];
extern STR16 MPClientMessage[];
extern STR16 MPHelp[];
// WANNE: Some Chinese specific strings that needs to be in unicode!
extern STR16 ChineseSpecString1;
@@ -1748,6 +1953,7 @@ enum
NIV_SELL_ALL,
NIV_DELETE_ALL,
NIV_NO_CLIMB,
TEXT_NUM_NIV,
};
// OJW - MP
+755
View File
@@ -0,0 +1,755 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
Name="Utils"
ProjectGUID="{262A5F80-0B99-4E8E-A6C7-74CB1FD0A67C}"
RootNamespace="Utils"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="..\lib\VS2005\$(ConfigurationName)"
IntermediateDirectory="..\build\VS2005\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2.vsprops;..\ja2_Debug.vsprops"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/D &quot;_CRT_SECURE_NO_DEPRECATE&quot;"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
RuntimeTypeInfo="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="4"
DisableSpecificWarnings="4100"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="..\lib\VS2005\$(ConfigurationName)"
IntermediateDirectory=".\build\VS2005\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2.vsprops"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/D &quot;_CRT_SECURE_NO_DEPRECATE&quot;"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="0"
RuntimeTypeInfo="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="MapEditor|Win32"
OutputDirectory="..\lib\VS2005\$(ConfigurationName)"
IntermediateDirectory="..\build\VS2005\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2.vsprops;..\ja2_Editor.vsprops"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/D &quot;_CRT_SECURE_NO_DEPRECATE&quot;"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="0"
RuntimeTypeInfo="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="MapEditorD|Win32"
OutputDirectory="..\lib\VS2005\$(ConfigurationName)"
IntermediateDirectory="..\build\VS2005\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2.vsprops;..\ja2_Editor.vsprops"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/D &quot;_CRT_SECURE_NO_DEPRECATE&quot;"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
RuntimeTypeInfo="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="4"
DisableSpecificWarnings="4100"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release_WithDebugInfo|Win32"
OutputDirectory="..\lib\VS2005\$(ConfigurationName)"
IntermediateDirectory="..\build\VS2005\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2.vsprops"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/D &quot;_CRT_SECURE_NO_DEPRECATE&quot;"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="0"
RuntimeTypeInfo="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\_Ja25DutchText.h"
>
</File>
<File
RelativePath=".\_Ja25EnglishText.h"
>
</File>
<File
RelativePath=".\_Ja25FrenchText.h"
>
</File>
<File
RelativePath=".\_Ja25GermanText.h"
>
</File>
<File
RelativePath=".\_Ja25ItalianText.h"
>
</File>
<File
RelativePath=".\_Ja25PolishText.h"
>
</File>
<File
RelativePath=".\_Ja25RussianText.h"
>
</File>
<File
RelativePath=".\_Ja25TaiwaneseText.h"
>
</File>
<File
RelativePath=".\Animated ProgressBar.h"
>
</File>
<File
RelativePath=".\bink.h"
>
</File>
<File
RelativePath=".\Cinematics Bink.h"
>
</File>
<File
RelativePath=".\Cinematics.h"
>
</File>
<File
RelativePath=".\Cursors.h"
>
</File>
<File
RelativePath=".\Debug Control.h"
>
</File>
<File
RelativePath=".\dsutil.h"
>
</File>
<File
RelativePath=".\Encrypted File.h"
>
</File>
<File
RelativePath=".\Event Manager.h"
>
</File>
<File
RelativePath=".\Event Pump.h"
>
</File>
<File
RelativePath=".\ExportStrings.h"
>
</File>
<File
RelativePath=".\Font Control.h"
>
</File>
<File
RelativePath=".\ImportStrings.h"
>
</File>
<File
RelativePath=".\INIReader.h"
>
</File>
<File
RelativePath=".\LocalizedStrings.h"
>
</File>
<File
RelativePath=".\maputility.h"
>
</File>
<File
RelativePath=".\MercTextBox.h"
>
</File>
<File
RelativePath=".\message.h"
>
</File>
<File
RelativePath=".\Multi Language Graphic Utils.h"
>
</File>
<File
RelativePath=".\Multilingual Text Code Generator.h"
>
</File>
<File
RelativePath=".\Music Control.h"
>
</File>
<File
RelativePath=".\PopUpBox.h"
>
</File>
<File
RelativePath=".\Quantize Wrap.h"
>
</File>
<File
RelativePath=".\Quantize.h"
>
</File>
<File
RelativePath=".\Slider.h"
>
</File>
<File
RelativePath=".\Sound Control.h"
>
</File>
<File
RelativePath=".\STIConvert.h"
>
</File>
<File
RelativePath=".\Text Input.h"
>
</File>
<File
RelativePath=".\Text.h"
>
</File>
<File
RelativePath=".\Timer Control.h"
>
</File>
<File
RelativePath=".\Utilities.h"
>
</File>
<File
RelativePath=".\Utils All.h"
>
</File>
<File
RelativePath=".\Win Util.h"
>
</File>
<File
RelativePath=".\WordWrap.h"
>
</File>
<File
RelativePath=".\XML_auto_parse.h"
>
</File>
<File
RelativePath=".\XML_Parser.h"
>
</File>
<File
RelativePath=".\XML_SenderNameList.h"
>
</File>
<File
RelativePath=".\XMLWriter.h"
>
</File>
</Filter>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\_ChineseText.cpp"
>
</File>
<File
RelativePath=".\_DutchText.cpp"
>
</File>
<File
RelativePath=".\_EnglishText.cpp"
>
</File>
<File
RelativePath=".\_FrenchText.cpp"
>
</File>
<File
RelativePath=".\_GermanText.cpp"
>
</File>
<File
RelativePath=".\_ItalianText.cpp"
>
</File>
<File
RelativePath=".\_Ja25ChineseText.cpp"
>
</File>
<File
RelativePath=".\_Ja25DutchText.cpp"
>
</File>
<File
RelativePath=".\_Ja25EnglishText.cpp"
>
</File>
<File
RelativePath=".\_Ja25FrenchText.cpp"
>
</File>
<File
RelativePath=".\_Ja25GermanText.cpp"
>
</File>
<File
RelativePath=".\_Ja25ItalianText.cpp"
>
</File>
<File
RelativePath=".\_Ja25PolishText.cpp"
>
</File>
<File
RelativePath=".\_Ja25RussianText.cpp"
>
</File>
<File
RelativePath=".\_Ja25TaiwaneseText.cpp"
>
</File>
<File
RelativePath=".\_PolishText.cpp"
>
</File>
<File
RelativePath=".\_RussianText.cpp"
>
</File>
<File
RelativePath=".\_TaiwaneseText.cpp"
>
</File>
<File
RelativePath=".\Animated ProgressBar.cpp"
>
</File>
<File
RelativePath=".\Cinematics Bink.cpp"
>
</File>
<File
RelativePath=".\Cinematics.cpp"
>
</File>
<File
RelativePath=".\Cursors.cpp"
>
</File>
<File
RelativePath=".\Debug Control.cpp"
>
</File>
<File
RelativePath=".\dsutil.cpp"
>
</File>
<File
RelativePath=".\Encrypted File.cpp"
>
</File>
<File
RelativePath=".\Event Manager.cpp"
>
</File>
<File
RelativePath=".\Event Pump.cpp"
>
</File>
<File
RelativePath=".\ExportStrings.cpp"
>
</File>
<File
RelativePath=".\Font Control.cpp"
>
</File>
<File
RelativePath=".\ImportStrings.cpp"
>
</File>
<File
RelativePath=".\INIReader.cpp"
>
</File>
<File
RelativePath=".\LocalizedStrings.cpp"
>
</File>
<File
RelativePath=".\MapUtility.cpp"
>
</File>
<File
RelativePath=".\MercTextBox.cpp"
>
</File>
<File
RelativePath=".\message.cpp"
>
</File>
<File
RelativePath=".\Multi Language Graphic Utils.cpp"
>
</File>
<File
RelativePath=".\Multilingual Text Code Generator.cpp"
>
</File>
<File
RelativePath=".\Music Control.cpp"
>
</File>
<File
RelativePath=".\PopUpBox.cpp"
>
</File>
<File
RelativePath=".\Quantize Wrap.cpp"
>
</File>
<File
RelativePath=".\Quantize.cpp"
>
</File>
<File
RelativePath=".\Slider.cpp"
>
</File>
<File
RelativePath=".\Sound Control.cpp"
>
</File>
<File
RelativePath=".\STIConvert.cpp"
>
</File>
<File
RelativePath=".\Text Input.cpp"
>
</File>
<File
RelativePath=".\Text Utils.cpp"
>
</File>
<File
RelativePath=".\Timer Control.cpp"
>
</File>
<File
RelativePath=".\Utilities.cpp"
>
</File>
<File
RelativePath=".\Win Util.cpp"
>
</File>
<File
RelativePath=".\WordWrap.cpp"
>
</File>
<File
RelativePath=".\XML_Items.cpp"
>
</File>
<File
RelativePath=".\XML_SenderNameList.cpp"
>
</File>
<File
RelativePath=".\XML_Strings.cpp"
>
</File>
<File
RelativePath=".\XMLProperties.cpp"
>
</File>
<File
RelativePath=".\XMLWriter.cpp"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
+53 -5
View File
@@ -21,7 +21,7 @@
OutputDirectory="..\lib\VS2008\$(ConfigurationName)"
IntermediateDirectory="..\build\VS2008\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2_VS2008.vsprops;..\ja2_VS2008Debug.vsprops"
InheritedPropertySheets="..\ja2.vsprops;..\ja2_Debug.vsprops"
CharacterSet="0"
>
<Tool
@@ -83,7 +83,7 @@
OutputDirectory="..\lib\VS2008\$(ConfigurationName)"
IntermediateDirectory="..\build\VS2008\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2_VS2008.vsprops"
InheritedPropertySheets="..\ja2.vsprops"
CharacterSet="0"
WholeProgramOptimization="0"
>
@@ -148,7 +148,7 @@
OutputDirectory="..\lib\VS2008\$(ConfigurationName)"
IntermediateDirectory="..\build\VS2008\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2_VS2008.vsprops;..\ja2_VS2008Editor.vsprops"
InheritedPropertySheets="..\ja2.vsprops;..\ja2_Editor.vsprops"
CharacterSet="0"
WholeProgramOptimization="0"
>
@@ -213,7 +213,7 @@
OutputDirectory="..\lib\VS2008\$(ConfigurationName)"
IntermediateDirectory="..\build\VS2008\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2_VS2008.vsprops;..\ja2_VS2008Editor.vsprops"
InheritedPropertySheets="..\ja2.vsprops;..\ja2_Editor.vsprops"
CharacterSet="0"
>
<Tool
@@ -275,7 +275,7 @@
OutputDirectory="..\lib\VS2008\$(ConfigurationName)"
IntermediateDirectory="..\build\VS2008\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="..\ja2_VS2008.vsprops"
InheritedPropertySheets="..\ja2.vsprops"
CharacterSet="0"
WholeProgramOptimization="0"
>
@@ -378,6 +378,14 @@
RelativePath="Animated ProgressBar.h"
>
</File>
<File
RelativePath=".\bink.h"
>
</File>
<File
RelativePath=".\Cinematics Bink.h"
>
</File>
<File
RelativePath="Cinematics.h"
>
@@ -406,14 +414,26 @@
RelativePath="Event Pump.h"
>
</File>
<File
RelativePath=".\ExportStrings.h"
>
</File>
<File
RelativePath="Font Control.h"
>
</File>
<File
RelativePath=".\ImportStrings.h"
>
</File>
<File
RelativePath="INIReader.h"
>
</File>
<File
RelativePath=".\LocalizedStrings.h"
>
</File>
<File
RelativePath="maputility.h"
>
@@ -490,10 +510,18 @@
RelativePath="WordWrap.h"
>
</File>
<File
RelativePath=".\XML_auto_parse.h"
>
</File>
<File
RelativePath=".\XML_Parser.h"
>
</File>
<File
RelativePath=".\XML_SenderNameList.h"
>
</File>
<File
RelativePath=".\XMLWriter.h"
>
@@ -578,6 +606,10 @@
RelativePath="Animated ProgressBar.cpp"
>
</File>
<File
RelativePath=".\Cinematics Bink.cpp"
>
</File>
<File
RelativePath="Cinematics.cpp"
>
@@ -606,14 +638,26 @@
RelativePath="Event Pump.cpp"
>
</File>
<File
RelativePath=".\ExportStrings.cpp"
>
</File>
<File
RelativePath="Font Control.cpp"
>
</File>
<File
RelativePath=".\ImportStrings.cpp"
>
</File>
<File
RelativePath="INIReader.cpp"
>
</File>
<File
RelativePath=".\LocalizedStrings.cpp"
>
</File>
<File
RelativePath="MapUtility.cpp"
>
@@ -690,6 +734,10 @@
RelativePath="XML_Items.cpp"
>
</File>
<File
RelativePath=".\XML_SenderNameList.cpp"
>
</File>
<File
RelativePath="XML_Strings.cpp"
>
+315
View File
@@ -0,0 +1,315 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MapEditorD|Win32">
<Configuration>MapEditorD</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MapEditor|Win32">
<Configuration>MapEditor</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Relese_WithDebugInfo|Win32">
<Configuration>Relese_WithDebugInfo</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Animated ProgressBar.h" />
<ClInclude Include="bink.h" />
<ClInclude Include="Cinematics Bink.h" />
<ClInclude Include="Cinematics.h" />
<ClInclude Include="Cursors.h" />
<ClInclude Include="Debug Control.h" />
<ClInclude Include="dsutil.h" />
<ClInclude Include="Encrypted File.h" />
<ClInclude Include="Event Manager.h" />
<ClInclude Include="Event Pump.h" />
<ClInclude Include="ExportStrings.h" />
<ClInclude Include="Font Control.h" />
<ClInclude Include="ImportStrings.h" />
<ClInclude Include="INIReader.h" />
<ClInclude Include="LocalizedStrings.h" />
<ClInclude Include="maputility.h" />
<ClInclude Include="MercTextBox.h" />
<ClInclude Include="message.h" />
<ClInclude Include="Multi Language Graphic Utils.h" />
<ClInclude Include="Multilingual Text Code Generator.h" />
<ClInclude Include="Music Control.h" />
<ClInclude Include="PopUpBox.h" />
<ClInclude Include="Quantize Wrap.h" />
<ClInclude Include="Quantize.h" />
<ClInclude Include="Slider.h" />
<ClInclude Include="Sound Control.h" />
<ClInclude Include="STIConvert.h" />
<ClInclude Include="Text Input.h" />
<ClInclude Include="Text.h" />
<ClInclude Include="Timer Control.h" />
<ClInclude Include="Utilities.h" />
<ClInclude Include="Utils All.h" />
<ClInclude Include="Win Util.h" />
<ClInclude Include="WordWrap.h" />
<ClInclude Include="XMLWriter.h" />
<ClInclude Include="XML_auto_parse.h" />
<ClInclude Include="XML_Parser.h" />
<ClInclude Include="XML_SenderNameList.h" />
<ClInclude Include="_Ja25DutchText.h" />
<ClInclude Include="_Ja25EnglishText.h" />
<ClInclude Include="_Ja25FrenchText.h" />
<ClInclude Include="_Ja25GermanText.h" />
<ClInclude Include="_Ja25ItalianText.h" />
<ClInclude Include="_Ja25PolishText.h" />
<ClInclude Include="_Ja25RussianText.h" />
<ClInclude Include="_Ja25TaiwaneseText.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Animated ProgressBar.cpp" />
<ClCompile Include="Cinematics Bink.cpp" />
<ClCompile Include="Cinematics.cpp" />
<ClCompile Include="Cursors.cpp" />
<ClCompile Include="Debug Control.cpp" />
<ClCompile Include="dsutil.cpp" />
<ClCompile Include="Encrypted File.cpp" />
<ClCompile Include="Event Manager.cpp" />
<ClCompile Include="Event Pump.cpp" />
<ClCompile Include="ExportStrings.cpp" />
<ClCompile Include="Font Control.cpp" />
<ClCompile Include="ImportStrings.cpp" />
<ClCompile Include="INIReader.cpp" />
<ClCompile Include="LocalizedStrings.cpp" />
<ClCompile Include="MapUtility.cpp" />
<ClCompile Include="MercTextBox.cpp" />
<ClCompile Include="message.cpp" />
<ClCompile Include="Multi Language Graphic Utils.cpp" />
<ClCompile Include="Multilingual Text Code Generator.cpp" />
<ClCompile Include="Music Control.cpp" />
<ClCompile Include="PopUpBox.cpp" />
<ClCompile Include="Quantize Wrap.cpp" />
<ClCompile Include="Quantize.cpp" />
<ClCompile Include="Slider.cpp" />
<ClCompile Include="Sound Control.cpp" />
<ClCompile Include="STIConvert.cpp" />
<ClCompile Include="Text Input.cpp" />
<ClCompile Include="Text Utils.cpp" />
<ClCompile Include="Timer Control.cpp" />
<ClCompile Include="Utilities.cpp" />
<ClCompile Include="Win Util.cpp" />
<ClCompile Include="WordWrap.cpp" />
<ClCompile Include="XMLProperties.cpp" />
<ClCompile Include="XMLWriter.cpp" />
<ClCompile Include="XML_Items.cpp" />
<ClCompile Include="XML_SenderNameList.cpp" />
<ClCompile Include="XML_Strings.cpp" />
<ClCompile Include="XML_Strings2.cpp" />
<ClCompile Include="_ChineseText.cpp" />
<ClCompile Include="_DutchText.cpp" />
<ClCompile Include="_EnglishText.cpp" />
<ClCompile Include="_FrenchText.cpp" />
<ClCompile Include="_GermanText.cpp" />
<ClCompile Include="_ItalianText.cpp" />
<ClCompile Include="_Ja25ChineseText.cpp" />
<ClCompile Include="_Ja25DutchText.cpp" />
<ClCompile Include="_Ja25EnglishText.cpp" />
<ClCompile Include="_Ja25FrenchText.cpp" />
<ClCompile Include="_Ja25GermanText.cpp" />
<ClCompile Include="_Ja25ItalianText.cpp" />
<ClCompile Include="_Ja25PolishText.cpp" />
<ClCompile Include="_Ja25RussianText.cpp" />
<ClCompile Include="_Ja25TaiwaneseText.cpp" />
<ClCompile Include="_PolishText.cpp" />
<ClCompile Include="_RussianText.cpp" />
<ClCompile Include="_TaiwaneseText.cpp" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{082F6E91-D049-4314-BE9D-D9509E853B01}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>Utils</RootNamespace>
<ProjectName>Utils</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MapEditorD|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MapEditor|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Relese_WithDebugInfo|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\ja2.props" />
<Import Project="..\ja2_Debug.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='MapEditorD|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\ja2.props" />
<Import Project="..\ja2_Debug.props" />
<Import Project="..\ja2_Editor.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\ja2.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='MapEditor|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\ja2.props" />
<Import Project="..\ja2_Editor.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Relese_WithDebugInfo|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\ja2.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>..\lib\VS2010\$(Configuration)\</OutDir>
<IntDir>..\build\VS2010\$(ProjectName)_$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MapEditorD|Win32'">
<OutDir>..\lib\VS2010\$(Configuration)\</OutDir>
<IntDir>..\build\VS2010\$(ProjectName)_$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<IntDir>..\build\VS2010\$(ProjectName)_$(Configuration)\</IntDir>
<OutDir>..\lib\VS2010\$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MapEditor|Win32'">
<IntDir>..\build\VS2010\$(ProjectName)_$(Configuration)\</IntDir>
<OutDir>..\lib\VS2010\$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Relese_WithDebugInfo|Win32'">
<IntDir>..\build\VS2010\$(ProjectName)_$(Configuration)\</IntDir>
<OutDir>..\lib\VS2010\$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MapEditorD|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MapEditor|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Relese_WithDebugInfo|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<Optimization>Disabled</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
+321
View File
@@ -0,0 +1,321 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Header Files">
<UniqueIdentifier>{85134125-f317-490e-9a9d-d210267ff98b}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{2c5f371b-8372-46d7-8b88-8c1885ddf7ef}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="_Ja25DutchText.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="_Ja25EnglishText.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="_Ja25FrenchText.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="_Ja25GermanText.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="_Ja25ItalianText.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="_Ja25PolishText.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="_Ja25RussianText.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="_Ja25TaiwaneseText.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Animated ProgressBar.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Cinematics.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Cursors.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Debug Control.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="dsutil.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Encrypted File.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Event Manager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Event Pump.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ExportStrings.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Font Control.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ImportStrings.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="INIReader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="LocalizedStrings.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="maputility.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MercTextBox.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="message.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Multi Language Graphic Utils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Multilingual Text Code Generator.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Music Control.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="PopUpBox.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Quantize Wrap.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Quantize.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Slider.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Sound Control.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="STIConvert.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Text Input.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Text.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Timer Control.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utils All.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Win Util.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="WordWrap.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="XML_auto_parse.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="XML_Parser.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="XML_SenderNameList.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="XMLWriter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="bink.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Cinematics Bink.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="_ChineseText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_DutchText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_EnglishText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_FrenchText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_GermanText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_ItalianText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_Ja25ChineseText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_Ja25DutchText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_Ja25EnglishText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_Ja25FrenchText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_Ja25GermanText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_Ja25ItalianText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_Ja25PolishText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_Ja25RussianText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_Ja25TaiwaneseText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_PolishText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_RussianText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_TaiwaneseText.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Animated ProgressBar.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Cinematics.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Cursors.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Debug Control.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="dsutil.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Encrypted File.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Event Manager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Event Pump.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ExportStrings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Font Control.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ImportStrings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="INIReader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LocalizedStrings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MapUtility.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MercTextBox.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="message.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Multi Language Graphic Utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Multilingual Text Code Generator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Music Control.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PopUpBox.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Quantize Wrap.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Quantize.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Slider.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Sound Control.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="STIConvert.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Text Input.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Text Utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Timer Control.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Win Util.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WordWrap.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="XML_Items.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="XML_SenderNameList.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="XML_Strings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="XML_Strings2.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="XMLProperties.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="XMLWriter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Cinematics Bink.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
+39 -37
View File
@@ -1,12 +1,16 @@
#include <vfs/Core/vfs_types.h>
#include <vfs/Core/vfs.h>
#include <vfs/Core/vfs_file_raii.h>
#include <vfs/Core/File/vfs_file.h>
#include <vfs/Tools/vfs_tools.h>
#include <vfs/Tools/vfs_property_container.h>
#include "XML_Parser.h"
#include "vfs_types.h"
#include "PropertyContainer.h"
#include "XMLWriter.h"
#include "Debug.h"
#include "VFS/vfs_file_raii.h"
#include "VFS/File/vfs_file.h"
CPropertyContainer::TagMap::TagMap()
vfs::PropertyContainer::TagMap::TagMap()
{
// setup default map
_map[L"Container"] = L"Container";
@@ -15,7 +19,7 @@ CPropertyContainer::TagMap::TagMap()
_map[L"Key"] = L"Key";
_map[L"KeyID"] = L"name";
}
utf8string const& CPropertyContainer::TagMap::container(utf8string::char_t* container)
vfs::String const& vfs::PropertyContainer::TagMap::container(vfs::String::char_t* container)
{
if(container)
{
@@ -23,7 +27,7 @@ utf8string const& CPropertyContainer::TagMap::container(utf8string::char_t* cont
}
return _map[L"Container"];
}
utf8string const& CPropertyContainer::TagMap::section(utf8string::char_t* section)
vfs::String const& vfs::PropertyContainer::TagMap::section(vfs::String::char_t* section)
{
if(section)
{
@@ -31,7 +35,7 @@ utf8string const& CPropertyContainer::TagMap::section(utf8string::char_t* sectio
}
return _map[L"Section"];
}
utf8string const& CPropertyContainer::TagMap::sectionID(utf8string::char_t* section_id)
vfs::String const& vfs::PropertyContainer::TagMap::sectionID(vfs::String::char_t* section_id)
{
if(section_id)
{
@@ -39,7 +43,7 @@ utf8string const& CPropertyContainer::TagMap::sectionID(utf8string::char_t* sect
}
return _map[L"SectionID"];
}
utf8string const& CPropertyContainer::TagMap::key(utf8string::char_t* key)
vfs::String const& vfs::PropertyContainer::TagMap::key(vfs::String::char_t* key)
{
if(key)
{
@@ -47,7 +51,7 @@ utf8string const& CPropertyContainer::TagMap::key(utf8string::char_t* key)
}
return _map[L"Key"];
}
utf8string const& CPropertyContainer::TagMap::keyID(utf8string::char_t* key_id)
vfs::String const& vfs::PropertyContainer::TagMap::keyID(vfs::String::char_t* key_id)
{
if(key_id)
{
@@ -56,7 +60,7 @@ utf8string const& CPropertyContainer::TagMap::keyID(utf8string::char_t* key_id)
return _map[L"KeyID"];
}
bool CPropertyContainer::writeToXMLFile(vfs::Path const& sFileName, CPropertyContainer::TagMap& tagmap)
bool vfs::PropertyContainer::writeToXMLFile(vfs::Path const& sFileName, vfs::PropertyContainer::TagMap& tagmap)
{
XMLWriter xmlw;
@@ -68,8 +72,8 @@ bool CPropertyContainer::writeToXMLFile(vfs::Path const& sFileName, CPropertyCon
xmlw.addAttributeToNextValue(tagmap.sectionID(),sit->first.utf8());
xmlw.openNode(tagmap.section());
CPropertyContainer::CSection& section = sit->second;
CPropertyContainer::CSection::tProps::iterator kit = section.mapProps.begin();
vfs::PropertyContainer::Section& section = sit->second;
vfs::PropertyContainer::Section::tProps::iterator kit = section.mapProps.begin();
for(; kit != section.mapProps.end(); ++kit)
{
xmlw.addAttributeToNextValue(tagmap.keyID(), kit->first.utf8());
@@ -99,11 +103,11 @@ class CPropertyXMLParser : public IXMLParser
};
public:
CPropertyXMLParser(
CPropertyContainer& container,
CPropertyContainer::TagMap& tagmap,
vfs::PropertyContainer& container,
vfs::PropertyContainer::TagMap& tagmap,
XML_Parser &parser,
IXMLParser* caller = NULL)
: IXMLParser("",parser,caller),
: IXMLParser("",&parser,caller),
_container(container),
_tagmap(tagmap),
current_state(DO_ELEMENT_NONE) // doesn't matter where we come from, we start fresh
@@ -112,27 +116,27 @@ public:
virtual void onEndElement(const XML_Char* name);
virtual void onTextElement(const XML_Char *str, int len);
private:
CPropertyContainer& _container;
CPropertyContainer::TagMap& _tagmap;
vfs::PropertyContainer& _container;
vfs::PropertyContainer::TagMap& _tagmap;
DOM_OBJECT current_state;
utf8string current_section;
utf8string current_key;
vfs::String current_section;
vfs::String current_key;
};
void CPropertyXMLParser::onStartElement(const XML_Char *name, const XML_Char **atts)
{
utf8string utf8_name(name);
if(current_state == DO_ELEMENT_NONE && StrCmp::Equal(utf8_name,_tagmap.container()))
vfs::String utf8_name(name);
if(current_state == DO_ELEMENT_NONE && vfs::StrCmp::Equal(utf8_name,_tagmap.container()))
{
current_state = DO_ELEMENT_Container;
}
else if(current_state == DO_ELEMENT_Container && StrCmp::Equal(utf8_name, _tagmap.section()))
else if(current_state == DO_ELEMENT_Container && vfs::StrCmp::Equal(utf8_name, _tagmap.section()))
{
current_state = DO_ELEMENT_Section;
current_section = this->getAttribute(_tagmap.sectionID().utf8().c_str(),atts);
}
else if(current_state == DO_ELEMENT_Section && StrCmp::Equal(utf8_name, _tagmap.key()))
else if(current_state == DO_ELEMENT_Section && vfs::StrCmp::Equal(utf8_name, _tagmap.key()))
{
current_state = DO_ELEMENT_Key;
current_key = this->getAttribute(_tagmap.keyID().utf8().c_str(),atts);
@@ -142,17 +146,17 @@ void CPropertyXMLParser::onStartElement(const XML_Char *name, const XML_Char **a
void CPropertyXMLParser::onEndElement(const XML_Char* name)
{
utf8string utf8_name(name);
if(current_state == DO_ELEMENT_Key && StrCmp::Equal(utf8_name, _tagmap.key()))
vfs::String utf8_name(name);
if(current_state == DO_ELEMENT_Key && vfs::StrCmp::Equal(utf8_name, _tagmap.key()))
{
_container.setStringProperty(current_section, current_key, vfs::trimString(sCharData,0,sCharData.length()));
current_state = DO_ELEMENT_Section;
}
else if(current_state == DO_ELEMENT_Section && StrCmp::Equal(utf8_name, _tagmap.section()))
else if(current_state == DO_ELEMENT_Section && vfs::StrCmp::Equal(utf8_name, _tagmap.section()))
{
current_state = DO_ELEMENT_Container;
}
else if(current_state == DO_ELEMENT_Container && StrCmp::Equal(utf8_name, _tagmap.container()))
else if(current_state == DO_ELEMENT_Container && vfs::StrCmp::Equal(utf8_name, _tagmap.container()))
{
current_state = DO_ELEMENT_NONE;
}
@@ -166,25 +170,23 @@ void CPropertyXMLParser::onTextElement(const XML_Char *str, int len)
}
}
bool CPropertyContainer::initFromXMLFile(vfs::Path const& sFileName, CPropertyContainer::TagMap& tagmap)
bool vfs::PropertyContainer::initFromXMLFile(vfs::Path const& sFileName, vfs::PropertyContainer::TagMap& tagmap)
{
vfs::tReadableFile *file = NULL;
bool delete_file = false;
try
if(getVFS()->fileExists(sFileName))
{
vfs::COpenReadFile rfile(sFileName);
file = &rfile.file();
rfile.release();
}
catch(CBasicException& ex)
else
{
logException(ex);
vfs::CFile* rfile = new vfs::CFile(sFileName);
delete_file = true;
file = vfs::tReadableFile::cast(rfile);
if(!file->openRead())
{
file->close();
delete file;
return false;
}
@@ -198,7 +200,7 @@ bool CPropertyContainer::initFromXMLFile(vfs::Path const& sFileName, CPropertyCo
std::vector<vfs::Byte> buffer(size+1);
TRYCATCH_RETHROW( file->read(&buffer[0],size), L"" );
SGP_TRYCATCH_RETHROW( file->read(&buffer[0],size), L"" );
buffer[size] = 0;
file->close();
@@ -213,10 +215,10 @@ bool CPropertyContainer::initFromXMLFile(vfs::Path const& sFileName, CPropertyCo
{
std::wstringstream wss;
wss << L"XML Parser Error in Groups.xml: "
<< utf8string::as_utf16(XML_ErrorString(XML_GetErrorCode(parser)))
<< vfs::String::as_utf16(XML_ErrorString(XML_GetErrorCode(parser)))
<< L" at line "
<< XML_GetCurrentLineNumber(parser);
THROWEXCEPTION(wss.str().c_str());
SGP_THROW(wss.str().c_str());
//return false;
}
+18 -9
View File
@@ -1,21 +1,30 @@
#include "XMLWriter.h"
#include "sgp_logger.h"
#include "VFS/vfs_file_raii.h"
#include "VFS/File/vfs_file.h"
#include <vfs/Core/vfs_file_raii.h>
#include <vfs/Core/File/vfs_file.h>
void XMLWriter::addValue(utf8string const& key)
void XMLWriter::addValue(vfs::String const& key)
{
m_ssBuffer << indent() << "<" << key.utf8();
insertAttributesIntoBuffer();
m_ssBuffer << " />\n";
}
void XMLWriter::addComment(utf8string const& comment)
void XMLWriter::addComment(vfs::String const& comment)
{
m_ssBuffer << indent() << "<!-- " << comment.utf8() << " -->\n";
}
void XMLWriter::openNode(utf8string const& key)
void XMLWriter::addFlag(UINT32 const& flags, UINT32 const& flag, vfs::String strFlag)
{
if( ( flags & flag) == flag )
{
this->addValue(strFlag);
}
}
void XMLWriter::openNode(vfs::String const& key)
{
std::string utf8key = key.utf8();
m_ssBuffer << indent() << "<" << utf8key;
@@ -49,9 +58,9 @@ bool XMLWriter::writeToFile(vfs::Path const& sFileName)
vfs::COpenWriteFile file(sFileName,true,true);
return writeToFile( &file.file() );
}
catch(CBasicException& ex)
catch(vfs::Exception& ex)
{
logException(ex);
SGP_ERROR(ex.what());
vfs::CFile file(sFileName);
if(file.openWrite(true,true))
{
@@ -70,9 +79,9 @@ bool XMLWriter::writeToFile(vfs::tWritableFile* pFile)
pFile->write(str.c_str(), str.length() * sizeof(std::string::value_type));
return true;
}
catch(CBasicException& ex)
catch(vfs::Exception& ex)
{
logException(ex);
SGP_ERROR(ex.what());
return false;
}
}
+11 -10
View File
@@ -2,8 +2,8 @@
#define _XMLWRITER_H_
#include "FileMan.h"
#include "VFS/Interface/vfs_file_interface.h"
#include "utf8string.h"
#include <vfs/Core/Interface/vfs_file_interface.h>
#include <vfs/Core/vfs_string.h>
#include <stack>
#include <string>
@@ -23,7 +23,7 @@ public:
{};
template<typename ValueType>
void addAttributeToNextValue(utf8string const& attribute, ValueType const& value)
void addAttributeToNextValue(vfs::String const& attribute, ValueType const& value)
{
std::stringstream temp_buffer;
temp_buffer << value;
@@ -31,27 +31,28 @@ public:
}
template<typename ValueType>
void addValue(utf8string const& key, ValueType const& value)
void addValue(vfs::String const& key, ValueType const& value)
{
std::string utf8key = key.utf8();
m_ssBuffer << indent() << "<" << utf8key;
insertAttributesIntoBuffer();
m_ssBuffer << "> " << value << " </" << utf8key << ">\n";
m_ssBuffer << ">" << value << "</" << utf8key << ">\n";
}
template<>
void addValue<std::string >(utf8string const& key, std::string const& value)
void addValue<std::string>(vfs::String const& key, std::string const& value)
{
std::string utf8key = key.utf8();
m_ssBuffer << indent() << "<" << utf8key;
insertAttributesIntoBuffer();
m_ssBuffer << "> " << handleSpecialCharacters(value) << " </" << utf8key << ">\n";
m_ssBuffer << ">" << handleSpecialCharacters(value) << "</" << utf8key << ">\n";
}
void addValue(utf8string const& key);
void addComment(utf8string const& comment);
void addValue(vfs::String const& key);
void addComment(vfs::String const& comment);
void addFlag(UINT32 const& flags, UINT32 const& flag, vfs::String strFlag);
void openNode(utf8string const& key);
void openNode(vfs::String const& key);
bool closeNode();
bool writeToFile(vfs::Path const& sFileName);
+348 -4
View File
@@ -54,6 +54,7 @@ struct
INVTYPE curItem;
INVTYPE * curArray;
UINT32 maxArraySize;
INT8 curStance;
UINT32 currentDepth;
UINT32 maxReadDepth;
@@ -62,6 +63,9 @@ typedef itemParseData;
BOOLEAN localizedTextOnly;
// HEADROCK HAM 4: Inherits data between stance-based modifiers
void InheritStanceModifiers( itemParseData *pData );
static void XMLCALL
itemStartElementHandle(void *userData, const XML_Char *name, const XML_Char **atts)
{
@@ -86,6 +90,28 @@ itemStartElementHandle(void *userData, const XML_Char *name, const XML_Char **at
if ( !localizedTextOnly )
memset(&pData->curItem,0,sizeof(INVTYPE));
// HEADROCK HAM 4: With the new stance-based variables, it is necessary to set vars to have an impossible
// value. That way when they are later recorded in the item structs, a parent->child inheritence can occur
// for children that do not have data put into them from XML.
// -10000 has been selected to pose as "no value". Modders should never even reduce the value of any of
// these tags below -100 anyway, and although it's not the best solution that's the only one I came up with.
for (INT8 X = 0; X < 3; X++)
{
pData->curItem.flatbasemodifier[X] = -10000;
pData->curItem.percentbasemodifier[X] = -10000;
pData->curItem.flataimmodifier[X] = -10000;
pData->curItem.percentaimmodifier[X] = -10000;
pData->curItem.percentcapmodifier[X] = -10000;
pData->curItem.percenthandlingmodifier[X] = -10000;
pData->curItem.targettrackingmodifier[X] = -10000;
pData->curItem.percentdropcompensationmodifier[X] = -10000;
pData->curItem.maxcounterforcemodifier[X] = -10000;
pData->curItem.counterforceaccuracymodifier[X] = -10000;
pData->curItem.counterforcefrequencymodifier[X] = -10000;
pData->curItem.aimlevelsmodifier[X] = -10000;
}
pData->maxReadDepth++; //we are not skipping this element
}
else if(pData->curElement == ELEMENT &&
@@ -96,6 +122,8 @@ itemStartElementHandle(void *userData, const XML_Char *name, const XML_Char **at
strcmp(name, "szBRName") == 0 ||
strcmp(name, "szBRDesc") == 0 ||
strcmp(name, "usItemClass") == 0 ||
strcmp(name, "nasAttachmentClass") == 0 ||
strcmp(name, "nasLayoutClass") == 0 ||
strcmp(name, "ubClassIndex") == 0 ||
strcmp(name, "ubCursor") == 0 ||
strcmp(name, "bSoundType") == 0 ||
@@ -213,15 +241,68 @@ itemStartElementHandle(void *userData, const XML_Char *name, const XML_Char **at
strcmp(name, "StealthBonus") == 0 ||
strcmp(name, "SciFi") == 0 ||
strcmp(name, "NewInv") == 0 ||
strcmp(name, "AttachmentSystem") == 0 ||
//zilpin: pellet spread patterns externalized in XML
strcmp(name, "spreadPattern") == 0 ||
strcmp(name, "fFlags") == 0 ))
// HEADROCK HAM 4: new NCTH variables.
strcmp(name, "ScopeMagFactor") == 0 ||
strcmp(name, "ProjectionFactor") == 0 ||
strcmp(name, "PercentAccuracyModifier") == 0 ||
strcmp(name, "RecoilModifierX") == 0 ||
strcmp(name, "RecoilModifierY") == 0 ||
strcmp(name, "PercentRecoilModifier") == 0 ||
strcmp(name, "fFlags") == 0 ))
{
pData->curElement = ELEMENT_PROPERTY;
//DebugMsg(TOPIC_JA2, DBG_LEVEL_3, String("itemStartElementHandle: going into element, name = %s",name) );
pData->maxReadDepth++; //we are not skipping this element
}
// HEADROCK HAM 4: New depth: Stance-based variables
else if(pData->curElement == ELEMENT &&
(strcmp(name, "STAND_MODIFIERS") == 0 ||
strcmp(name, "CROUCH_MODIFIERS") == 0 ||
strcmp(name, "PRONE_MODIFIERS") == 0))
{
pData->curElement = ELEMENT_SUBLIST;
// Set current stance.
if (strcmp(name, "STAND_MODIFIERS") == 0)
{
pData->curStance = 0;
}
else if (strcmp(name, "CROUCH_MODIFIERS") == 0)
{
pData->curStance = 1;
}
else // prone
{
pData->curStance = 2;
}
pData->maxReadDepth++;
}
// HEADROCK HAM 4: Read stance-based variables
else if(pData->curElement == ELEMENT_SUBLIST &&
(strcmp(name, "FlatBase") == 0 ||
strcmp(name, "PercentBase") == 0 ||
strcmp(name, "FlatAim") == 0 ||
strcmp(name, "PercentAim") == 0 ||
strcmp(name, "PercentCap") == 0 ||
strcmp(name, "PercentHandling") == 0 ||
strcmp(name, "PercentTargetTrackingSpeed") == 0 ||
strcmp(name, "PercentDropCompensation") == 0 ||
strcmp(name, "PercentMaxCounterForce") == 0 ||
strcmp(name, "PercentCounterForceAccuracy") == 0 ||
strcmp(name, "PercentCounterForceFrequency") == 0 ||
strcmp(name, "AimLevels") == 0))
{
pData->curElement = ELEMENT_SUBLIST_PROPERTY;
pData->maxReadDepth++; //we are not skipping this element
}
pData->szCharData[0] = '\0';
}
@@ -264,7 +345,12 @@ itemEndElementHandle(void *userData, const XML_Char *name)
if(pData->curItem.uiIndex < pData->maxArraySize)
{
if ( pData->curItem.usItemClass != 0 )
{
// HEADROCK HAM 4: Inherit stance-base modifiers upwards.
InheritStanceModifiers( pData );
pData->curArray[pData->curItem.uiIndex] = pData->curItem; //write the item into the table
}
else if ( sizeof(pData->curItem.szItemName)>0 && localizedTextOnly )
{
wcscpy(pData->curArray[pData->curItem.uiIndex].szItemName,pData->curItem.szItemName);
@@ -429,6 +515,16 @@ itemEndElementHandle(void *userData, const XML_Char *name)
pData->curElement = ELEMENT;
pData->curItem.usItemClass = (UINT32) atol(pData->szCharData);
}
else if(strcmp(name, "nasAttachmentClass") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.nasAttachmentClass = (UINT32) atol(pData->szCharData);
}
else if(strcmp(name, "nasLayoutClass") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.nasLayoutClass = (UINT32) atol(pData->szCharData);
}
else if(strcmp(name, "ubClassIndex") == 0)
{
pData->curElement = ELEMENT;
@@ -767,6 +863,11 @@ itemEndElementHandle(void *userData, const XML_Char *name)
pData->curElement = ELEMENT;
pData->curItem.newinv = (BOOLEAN) atol(pData->szCharData);
}
else if(strcmp(name, "AttachmentSystem") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.ubAttachmentSystem = (UINT8) atol(pData->szCharData);
}
else if(strcmp(name, "HideMuzzleFlash") == 0)
{
pData->curElement = ELEMENT;
@@ -840,7 +941,12 @@ itemEndElementHandle(void *userData, const XML_Char *name)
else if(strcmp(name, "DefaultAttachment") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.defaultattachment = (UINT16) atol(pData->szCharData);
for(UINT8 cnt = 0; cnt < MAX_DEFAULT_ATTACHMENTS; cnt++){
if(pData->curItem.defaultattachments[cnt] == 0){
pData->curItem.defaultattachments[cnt] = (UINT16) atol(pData->szCharData);
break;
}
}
}
else if(strcmp(name, "BrassKnuckles") == 0)
{
@@ -1028,12 +1134,118 @@ itemEndElementHandle(void *userData, const XML_Char *name)
pData->curItem.bestlaserrange = (INT16) atol(pData->szCharData);
}
//zilpin: pellet spread patterns externalized in XML
else if(strcmp(name, "spreadPattern") == 0)
if(strcmp(name, "spreadPattern") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.spreadPattern = FindSpreadPatternIndex( pData->szCharData );
}
//////////////////////////////////////////////////////////////////
// HEADROCK HAM 4: Read new variables from XML
else if(strcmp(name, "ScopeMagFactor") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.scopemagfactor = (FLOAT) atof(pData->szCharData);
}
else if(strcmp(name, "ProjectionFactor") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.projectionfactor = (FLOAT) atof(pData->szCharData);
}
else if(strcmp(name, "PercentAccuracyModifier") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.percentaccuracymodifier = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "RecoilModifierX") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.RecoilModifierX = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "RecoilModifierY") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.RecoilModifierY = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentRecoilModifier") == 0)
{
pData->curElement = ELEMENT;
pData->curItem.PercentRecoilModifier = (INT16) atol(pData->szCharData);
}
//////////////////////////////////////////////////////////////////
// HEADROCK HAM 4: Read stance-based variables and put them into the right place.
else if(strcmp(name, "FlatBase") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.flatbasemodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentBase") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.percentbasemodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "FlatAim") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.flataimmodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentAim") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.percentaimmodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentCap") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.percentcapmodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentHandling") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.percenthandlingmodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentTargetTrackingSpeed") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.targettrackingmodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentDropCompensation") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.percentdropcompensationmodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentMaxCounterForce") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.maxcounterforcemodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentCounterForceAccuracy") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.counterforceaccuracymodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "PercentCounterForceFrequency") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.counterforcefrequencymodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
else if(strcmp(name, "AimLevels") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curItem.aimlevelsmodifier[pData->curStance] = (INT16) atol(pData->szCharData);
}
//////////////////////////////////////////////////////////////////
// HEADROCK HAM 4: Close opened Stance Tags.
else if(strcmp(name, "STAND_MODIFIERS") == 0 ||
strcmp(name, "CROUCH_MODIFIERS") == 0 ||
strcmp(name, "PRONE_MODIFIERS") == 0)
{
pData->curElement = ELEMENT;
}
pData->maxReadDepth--;
}
@@ -1425,6 +1637,8 @@ BOOLEAN WriteItemStats()
FilePrintf(hFile,"\t\t<usItemClass>%d</usItemClass>\r\n", Item[cnt].usItemClass);
FilePrintf(hFile,"\t\t<nasAttachmentClass>%d</nasAttachmentClass>\r\n", Item[cnt].nasAttachmentClass);
FilePrintf(hFile,"\t\t<nasLayoutClass>%d</nasLayoutClass>\r\n", Item[cnt].nasLayoutClass);
FilePrintf(hFile,"\t\t<ubClassIndex>%d</ubClassIndex>\r\n", Item[cnt].ubClassIndex);
FilePrintf(hFile,"\t\t<ubCursor>%d</ubCursor>\r\n", Item[cnt].ubCursor);
FilePrintf(hFile,"\t\t<bSoundType>%d</bSoundType>\r\n", Item[cnt].bSoundType);
@@ -1468,6 +1682,7 @@ BOOLEAN WriteItemStats()
FilePrintf(hFile,"\t\t<BigGunList>%d</BigGunList>\r\n", Item[cnt].biggunlist );
FilePrintf(hFile,"\t\t<SciFi>%d</SciFi>\r\n", Item[cnt].scifi );
FilePrintf(hFile,"\t\t<NewInv>%d</NewInv>\r\n", Item[cnt].newinv );
FilePrintf(hFile,"\t\t<AttachmentSystem>%d</AttachmentSystem>\r\n", Item[cnt].ubAttachmentSystem );
FilePrintf(hFile,"\t\t<NotInEditor>%d</NotInEditor>\r\n", Item[cnt].notineditor );
FilePrintf(hFile,"\t\t<DefaultUndroppable>%d</DefaultUndroppable>\r\n", Item[cnt].defaultundroppable );
FilePrintf(hFile,"\t\t<Unaerodynamic>%d</Unaerodynamic>\r\n", Item[cnt].unaerodynamic );
@@ -1514,7 +1729,12 @@ BOOLEAN WriteItemStats()
FilePrintf(hFile,"\t\t<DiscardedLauncherItem>%d</DiscardedLauncherItem>\r\n", Item[cnt].discardedlauncheritem );
FilePrintf(hFile,"\t\t<RocketRifle>%d</RocketRifle>\r\n", Item[cnt].rocketrifle);
FilePrintf(hFile,"\t\t<Cannon>%d</Cannon>\r\n", Item[cnt].cannon);
FilePrintf(hFile,"\t\t<DefaultAttachment>%d</DefaultAttachment>\r\n", Item[cnt].defaultattachment );
for(UINT8 cnt2 = 0; cnt2 < MAX_DEFAULT_ATTACHMENTS; cnt2++){
if(Item[cnt].defaultattachments[cnt2] != 0){
FilePrintf(hFile,"\t\t<DefaultAttachment>%d</DefaultAttachment>\r\n", Item[cnt].defaultattachments[cnt2] );
}
}
FilePrintf(hFile,"\t\t<BrassKnuckles>%d</BrassKnuckles>\r\n", Item[cnt].brassknuckles );
FilePrintf(hFile,"\t\t<Crowbar>%d</Crowbar>\r\n", Item[cnt].crowbar );
@@ -1572,6 +1792,57 @@ BOOLEAN WriteItemStats()
FilePrintf(hFile,"\t\t<FingerPrintID>%d</FingerPrintID>\r\n", Item[cnt].fingerprintid );
FilePrintf(hFile,"\t\t<AmmoCrate>%d</AmmoCrate>\r\n", Item[cnt].ammocrate );
// HEADROCK HAM 4: Print out new values
FilePrintf(hFile,"\t\t<ScopeMagFactor>%d</ScopeMagFactor>\r\n", Item[cnt].scopemagfactor );
FilePrintf(hFile,"\t\t<ProjectionFactor>%d</ProjectionFactor>\r\n", Item[cnt].projectionfactor );
FilePrintf(hFile,"\t\t<PercentAccuracyModifier>%d</PercentAccuracyModifier>\r\n", Item[cnt].percentaccuracymodifier );
FilePrintf(hFile,"\t\t<RecoilModifierX>%d</RecoilModifierX>\r\n", Item[cnt].RecoilModifierX );
FilePrintf(hFile,"\t\t<RecoilModifierY>%d</RecoilModifierY>\r\n", Item[cnt].RecoilModifierY );
FilePrintf(hFile,"\t\t<PercentRecoilModifier>%d</PercentRecoilModifier>\r\n", Item[cnt].PercentRecoilModifier );
// HEADROCK HAM 4: Print out stance-based values
FilePrintf(hFile,"\t\t<STAND_MODIFIERS>\r\n");
FilePrintf(hFile,"\t\t\t<FlatBase>%d</FlatBase>\r\n", Item[cnt].flatbasemodifier[0] );
FilePrintf(hFile,"\t\t\t<PercentBase>%d</PercentBase>\r\n", Item[cnt].percentbasemodifier[0] );
FilePrintf(hFile,"\t\t\t<FlatAim>%d</FlatAim>\r\n", Item[cnt].flataimmodifier[0] );
FilePrintf(hFile,"\t\t\t<PercentCap>%d</PercentCap>\r\n", Item[cnt].percentcapmodifier[0] );
FilePrintf(hFile,"\t\t\t<PercentHandling>%d</PercentHandling>\r\n", Item[cnt].percenthandlingmodifier[0] );
FilePrintf(hFile,"\t\t\t<PercentTargetTrackingSpeed>%d</PercentTargetTrackingSpeed>\r\n", Item[cnt].targettrackingmodifier[0] );
FilePrintf(hFile,"\t\t\t<PercentDropCompensation>%d</PercentDropCompensation>\r\n", Item[cnt].percentdropcompensationmodifier[0] );
FilePrintf(hFile,"\t\t\t<PercentMaxCounterForce>%d</PercentMaxCounterForce>\r\n", Item[cnt].maxcounterforcemodifier[0] );
FilePrintf(hFile,"\t\t\t<PercentCounterForceAccuracy>%d</PercentCounterForceAccuracy>\r\n", Item[cnt].counterforceaccuracymodifier[0] );
FilePrintf(hFile,"\t\t\t<PercentCounterForceFrequency>%d</PercentCounterForceFrequency>\r\n", Item[cnt].counterforcefrequencymodifier[0] );
FilePrintf(hFile,"\t\t\t<AimLevels>%d</AimLevels>\r\n", Item[cnt].aimlevelsmodifier[0] );
FilePrintf(hFile,"\t\t</STAND_MODIFIERS>\r\n");
FilePrintf(hFile,"\t\t<CROUCH_MODIFIERS>\r\n");
FilePrintf(hFile,"\t\t\t<FlatBase>%d</FlatBase>\r\n", Item[cnt].flatbasemodifier[1] );
FilePrintf(hFile,"\t\t\t<PercentBase>%d</PercentBase>\r\n", Item[cnt].percentbasemodifier[1] );
FilePrintf(hFile,"\t\t\t<FlatAim>%d</FlatAim>\r\n", Item[cnt].flataimmodifier[1] );
FilePrintf(hFile,"\t\t\t<PercentCap>%d</PercentCap>\r\n", Item[cnt].percentcapmodifier[1] );
FilePrintf(hFile,"\t\t\t<PercentHandling>%d</PercentHandling>\r\n", Item[cnt].percenthandlingmodifier[1] );
FilePrintf(hFile,"\t\t\t<PercentTargetTrackingSpeed>%d</PercentTargetTrackingSpeed>\r\n", Item[cnt].targettrackingmodifier[1] );
FilePrintf(hFile,"\t\t\t<PercentDropCompensation>%d</PercentDropCompensation>\r\n", Item[cnt].percentdropcompensationmodifier[1] );
FilePrintf(hFile,"\t\t\t<PercentMaxCounterForce>%d</PercentMaxCounterForce>\r\n", Item[cnt].maxcounterforcemodifier[1] );
FilePrintf(hFile,"\t\t\t<PercentCounterForceAccuracy>%d</PercentCounterForceAccuracy>\r\n", Item[cnt].counterforceaccuracymodifier[1] );
FilePrintf(hFile,"\t\t\t<PercentCounterForceFrequency>%d</PercentCounterForceFrequency>\r\n", Item[cnt].counterforcefrequencymodifier[1] );
FilePrintf(hFile,"\t\t\t<AimLevels>%d</AimLevels>\r\n", Item[cnt].aimlevelsmodifier[1] );
FilePrintf(hFile,"\t\t</CROUCH_MODIFIERS>\r\n");
FilePrintf(hFile,"\t\t<PRONE_MODIFIERS>\r\n");
FilePrintf(hFile,"\t\t\t<FlatBase>%d</FlatBase>\r\n", Item[cnt].flatbasemodifier[2] );
FilePrintf(hFile,"\t\t\t<PercentBase>%d</PercentBase>\r\n", Item[cnt].percentbasemodifier[2] );
FilePrintf(hFile,"\t\t\t<FlatAim>%d</FlatAim>\r\n", Item[cnt].flataimmodifier[2] );
FilePrintf(hFile,"\t\t\t<PercentCap>%d</PercentCap>\r\n", Item[cnt].percentcapmodifier[2] );
FilePrintf(hFile,"\t\t\t<PercentHandling>%d</PercentHandling>\r\n", Item[cnt].percenthandlingmodifier[2] );
FilePrintf(hFile,"\t\t\t<PercentTargetTrackingSpeed>%d</PercentTargetTrackingSpeed>\r\n", Item[cnt].targettrackingmodifier[2] );
FilePrintf(hFile,"\t\t\t<PercentDropCompensation>%d</PercentDropCompensation>\r\n", Item[cnt].percentdropcompensationmodifier[2] );
FilePrintf(hFile,"\t\t\t<PercentMaxCounterForce>%d</PercentMaxCounterForce>\r\n", Item[cnt].maxcounterforcemodifier[2] );
FilePrintf(hFile,"\t\t\t<PercentCounterForceAccuracy>%d</PercentCounterForceAccuracy>\r\n", Item[cnt].counterforceaccuracymodifier[2] );
FilePrintf(hFile,"\t\t\t<PercentCounterForceFrequency>%d</PercentCounterForceFrequency>\r\n", Item[cnt].counterforcefrequencymodifier[2] );
FilePrintf(hFile,"\t\t\t<AimLevels>%d</AimLevels>\r\n", Item[cnt].aimlevelsmodifier[2] );
FilePrintf(hFile,"\t\t</PRONE_MODIFIERS>\r\n");
FilePrintf(hFile,"\t</ITEM>\r\n");
}
FilePrintf(hFile,"</ITEMLIST>\r\n");
@@ -1580,3 +1851,76 @@ BOOLEAN WriteItemStats()
return( TRUE );
}
// HEADROCK HAM 4: This function runs just before the items are written into the item array. It causes all stance bonuses
// to inherit their properties from the bonus "above" them, as long as they don't already have their own value defined.
void InheritStanceModifiers( itemParseData *pData )
{
// Create a two-dimensional temp array to hold all the data about stance modifiers.
INT16 TempArray[12][3];
INT8 count = 0;
INT8 arrcount = 0;
// Copy stance modifier data into this array
for (count = 0; count < 3; count++)
{
TempArray[0][count] = pData->curItem.flatbasemodifier[count];
TempArray[1][count] = pData->curItem.percentbasemodifier[count];
TempArray[2][count] = pData->curItem.flataimmodifier[count];
TempArray[3][count] = pData->curItem.percentaimmodifier[count];
TempArray[4][count] = pData->curItem.percentcapmodifier[count];
TempArray[5][count] = pData->curItem.percenthandlingmodifier[count];
TempArray[6][count] = pData->curItem.targettrackingmodifier[count];
TempArray[7][count] = pData->curItem.percentdropcompensationmodifier[count];
TempArray[8][count] = pData->curItem.maxcounterforcemodifier[count];
TempArray[9][count] = pData->curItem.counterforceaccuracymodifier[count];
TempArray[10][count] = pData->curItem.counterforcefrequencymodifier[count];
TempArray[11][count] = pData->curItem.aimlevelsmodifier[count];
}
for (arrcount = 0; arrcount < 12; arrcount++)
{
if (TempArray[arrcount][2] == -10000)
{
if (TempArray[arrcount][1] == -10000)
{
TempArray[arrcount][1] = TempArray[arrcount][0];
TempArray[arrcount][2] = TempArray[arrcount][0];
}
else
{
TempArray[arrcount][2] = TempArray[arrcount][1];
}
}
else if (TempArray[arrcount][1] == -10000)
{
TempArray[arrcount][1] = TempArray[arrcount][0];
}
for (INT8 X = 0; X < 3; X++)
{
if (TempArray[arrcount][X] == -10000)
{
TempArray[arrcount][X] = 0;
}
}
}
// Copy stance modifier data back out of the temp array
for (count = 0; count < 3; count++)
{
pData->curItem.flatbasemodifier[count] = TempArray[0][count];
pData->curItem.percentbasemodifier[count] = TempArray[1][count];
pData->curItem.flataimmodifier[count] = TempArray[2][count];
pData->curItem.percentaimmodifier[count] = TempArray[3][count];
pData->curItem.percentcapmodifier[count] = TempArray[4][count];
pData->curItem.percenthandlingmodifier[count] = TempArray[5][count];
pData->curItem.targettrackingmodifier[count] = TempArray[6][count];
pData->curItem.percentdropcompensationmodifier[count] = TempArray[7][count];
pData->curItem.maxcounterforcemodifier[count] = TempArray[8][count];
pData->curItem.counterforceaccuracymodifier[count] = TempArray[9][count];
pData->curItem.counterforcefrequencymodifier[count] = TempArray[10][count];
pData->curItem.aimlevelsmodifier[count] = TempArray[11][count];
}
}
+135 -9
View File
@@ -2,15 +2,61 @@
#define _XML_PARSER_H_
#include "expat.h"
#include "XML.h"
//#include "XML.h"
#include <string>
template<typename OperandType>
class LazyCondition
{
public:
typedef bool (*cond_fct)(OperandType op1, OperandType op2);
LazyCondition(OperandType op1, OperandType op2, cond_fct fct)
: _op1(op1), _op2(op2), _fct(fct)
{};
bool check()
{
return _fct(_op1,_op2);
}
private:
OperandType _op1;
OperandType _op2;
cond_fct _fct;
};
inline bool lazyStrEqual(const char* str1, const char* str2)
{
return strcmp(str1,str2) == 0;
}
class LazyStrEqual : public LazyCondition<const char*>
{
public:
LazyStrEqual(const char* str1, const char* str2)
: LazyCondition<const char*>(str1, str2, lazyStrEqual)
{};
};
class LazyTrue : public LazyCondition<bool>
{
static bool True(bool a, bool b){return true;};
public:
LazyTrue() : LazyCondition<bool>(true,true,LazyTrue::True) {};
};
class IXMLParser
{
public:
const XML_Char* ElementName;
public:
IXMLParser(const XML_Char *element_name, XML_Parser &parser, IXMLParser* caller=NULL)
: _parser(parser), _caller(caller), ElementName(element_name) {};
IXMLParser(const XML_Char *element_name, XML_Parser* parser, IXMLParser* caller=NULL)
: _caller(caller), ElementName(element_name)
{
if(parser)
{
this->setParser(parser);
}
};
~IXMLParser() {};
/**
@@ -35,9 +81,9 @@ public:
}
void grabParser()
{
XML_SetUserData(_parser,this);
XML_SetElementHandler(_parser, IXMLParser::onStartCallback, IXMLParser::onEndCallback);
XML_SetCharacterDataHandler(_parser, IXMLParser::onTextCallback);
XML_SetUserData(*_parser,this);
XML_SetElementHandler(*_parser, IXMLParser::onStartCallback, IXMLParser::onEndCallback);
XML_SetCharacterDataHandler(*_parser, IXMLParser::onTextCallback);
}
/**
@@ -48,8 +94,88 @@ public:
virtual void onEndElement(const XML_Char* name)
{};
virtual void onTextElement(const XML_Char *str, int len)
{};
{
};
class Attributes
{
public:
Attributes(const XML_Char** atts) : _atts(atts) {};
XML_Char const* get(const XML_Char* attr_name) const
{
const XML_Char** atts = _atts;
while(*atts)
{
if(strcmp(*atts++,attr_name) == 0)
{
return *atts;
}
atts++;
}
return "";
}
bool getLong(const XML_Char* attr_name, long& attr) const
{
XML_Char const* result = this->get(attr_name);
if( strcmp(result,"") != 0)
{
attr = (int)atol(result);
return true;
}
return false;
}
bool getDouble(const XML_Char* attr_name, double &attr) const
{
XML_Char const* result = this->get(attr_name);
if( strcmp(result,"") != 0)
{
attr = atof(result);
return true;
}
return false;
}
private:
const XML_Char** _atts;
};
template<typename StateType>
class ParserState
{
public:
ParserState(const StateType start_state)
: _my_state(start_state)
{};
StateType const& state()
{
return _my_state;
}
template<typename ConditionOperandType>
bool stateTransition(const StateType current_state, LazyCondition<ConditionOperandType> condition, const StateType next_state)
{
if(_my_state == current_state && condition.check() )
{
_my_state = next_state;
return true;
}
return false;
}
private:
StateType _my_state;
};
XML_Parser& getParser()
{
return *_parser;
}
protected:
void setParser(XML_Parser* parser)
{
_parser = parser;
// grabParser(); ???
}
XML_Char const* getAttribute(const XML_Char* attr_name, const XML_Char** atts)
{
while(*atts)
@@ -85,12 +211,12 @@ protected:
int getCurrentLineNumber()
{
return XML_GetCurrentLineNumber(this->_parser);
return XML_GetCurrentLineNumber(*this->_parser);
}
protected:
std::string sCharData;
XML_Parser& _parser;
XML_Parser* _parser;
IXMLParser* _caller;
};
+174
View File
@@ -0,0 +1,174 @@
#ifdef PRECOMPILEDHEADERS
#include "Tactical All.h"
#else
#include "sgp.h"
#include "Debug Control.h"
#include "expat.h"
#include "XML.h"
#include "Interface.h"
#include "Text.h"
#endif
struct
{
PARSE_STAGE curElement;
CHAR8 szCharData[MAX_CHAR_DATA_LENGTH+1];
SENDER_NAMES_VALUES curSenderNameList;
SENDER_NAMES_VALUES * curArray;
UINT32 maxArraySize;
UINT32 curIndex;
UINT32 currentDepth;
UINT32 maxReadDepth;
}
typedef senderNameListParseData;
BOOLEAN SenderNameList_TextOnly;
static void XMLCALL
senderNameListStartElementHandle(void *userData, const XML_Char *name, const XML_Char **atts)
{
senderNameListParseData * pData = (senderNameListParseData *)userData;
if(pData->currentDepth <= pData->maxReadDepth) //are we reading this element?
{
if(strcmp(name, "SENDER_LIST") == 0 && pData->curElement == ELEMENT_NONE)
{
pData->curElement = ELEMENT_LIST;
pData->maxReadDepth++; //we are not skipping this element
}
else if(strcmp(name, "NAME") == 0 && pData->curElement == ELEMENT_LIST)
{
pData->curElement = ELEMENT;
pData->maxReadDepth++; //we are not skipping this element
}
else if(pData->curElement == ELEMENT &&
(strcmp(name, "uiIndex") == 0 ||
strcmp(name, "Name") == 0 ))
{
pData->curElement = ELEMENT_PROPERTY;
pData->maxReadDepth++; //we are not skipping this element
}
pData->szCharData[0] = '\0';
}
pData->currentDepth++;
}
static void XMLCALL
senderNameListCharacterDataHandle(void *userData, const XML_Char *str, int len)
{
senderNameListParseData * pData = (senderNameListParseData *)userData;
if( (pData->currentDepth <= pData->maxReadDepth) &&
(strlen(pData->szCharData) < MAX_CHAR_DATA_LENGTH)
){
strncat(pData->szCharData,str,__min((unsigned int)len,MAX_CHAR_DATA_LENGTH-strlen(pData->szCharData)));
}
}
static void XMLCALL
senderNameListEndElementHandle(void *userData, const XML_Char *name)
{
senderNameListParseData * pData = (senderNameListParseData *)userData;
if(pData->currentDepth <= pData->maxReadDepth) //we're at the end of an element that we've been reading
{
if(strcmp(name, "SENDER_LIST") == 0)
{
pData->curElement = ELEMENT_NONE;
}
else if(strcmp(name, "NAME") == 0)
{
pData->curElement = ELEMENT_LIST;
wcscpy(pSenderNameList[pData->curSenderNameList.uiIndex], pData->curSenderNameList.Name);
}
else if(strcmp(name, "uiIndex") == 0)
{
pData->curElement = ELEMENT;
pData->curSenderNameList.uiIndex = (UINT16) atol(pData->szCharData);
}
else if(strcmp(name, "Name") == 0 )
{
pData->curElement = ELEMENT;
MultiByteToWideChar( CP_UTF8, 0, pData->szCharData, -1, pData->curSenderNameList.Name, sizeof(pData->curSenderNameList.Name)/sizeof(pData->curSenderNameList.Name[0]) );
pData->curSenderNameList.Name[sizeof(pData->curSenderNameList.Name)/sizeof(pData->curSenderNameList.Name[0]) - 1] = '\0';
}
pData->maxReadDepth--;
}
pData->currentDepth--;
}
BOOLEAN ReadInSenderNameList(STR fileName, BOOLEAN localizedVersion)
{
HWFILE hFile;
UINT32 uiBytesRead;
UINT32 uiFSize;
CHAR8 * lpcBuffer;
XML_Parser parser = XML_ParserCreate(NULL);
senderNameListParseData pData;
DebugMsg(TOPIC_JA2, DBG_LEVEL_3, "Loading SenderNameList.xml" );
SenderNameList_TextOnly = localizedVersion;
// Open file
hFile = FileOpen( fileName, FILE_ACCESS_READ, FALSE );
if ( !hFile )
return( localizedVersion );
uiFSize = FileGetSize(hFile);
lpcBuffer = (CHAR8 *) MemAlloc(uiFSize+1);
//Read in block
if ( !FileRead( hFile, lpcBuffer, uiFSize, &uiBytesRead ) )
{
MemFree(lpcBuffer);
return( FALSE );
}
lpcBuffer[uiFSize] = 0; //add a null terminator
FileClose( hFile );
XML_SetElementHandler(parser, senderNameListStartElementHandle, senderNameListEndElementHandle);
XML_SetCharacterDataHandler(parser, senderNameListCharacterDataHandle);
memset(&pData,0,sizeof(pData));
XML_SetUserData(parser, &pData);
if(!XML_Parse(parser, lpcBuffer, uiFSize, TRUE))
{
CHAR8 errorBuf[511];
sprintf(errorBuf, "XML Parser Error in SenderNameList.xml: %s at line %d", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser));
LiveMessage(errorBuf);
MemFree(lpcBuffer);
return FALSE;
}
MemFree(lpcBuffer);
XML_ParserFree(parser);
return( TRUE );
}
+18
View File
@@ -0,0 +1,18 @@
#ifndef _XML_SENDERNAMELIST_H
#define _XML_SENDERNAMELIST_H
#include "Types.h"
#define MAX_SENDER_NAMES_CHARS 128
typedef struct
{
UINT16 uiIndex;
CHAR16 Name[MAX_SENDER_NAMES_CHARS];
} SENDER_NAMES_VALUES;
extern SENDER_NAMES_VALUES zSenderNameList[500];
#endif
+258
View File
@@ -0,0 +1,258 @@
#ifndef XML_AUTO_PARSE_H
#define XML_AUTO_PARSE_H
#include <vfs/Core/vfs_debug.h>
#include <vfs/Core/Interface/vfs_file_interface.h>
#include "XML_Parser.h"
#include <stack>
#include <algorithm>
#include <map>
#if !defined(TRUE)
# define TRUE 1
#endif
namespace xml_auto
{
class ITransition
{
public:
void Register() { _ref_count++; }
void UnRegister() { if(_ref_count > 0) _ref_count--; }
virtual void Delete()
{
UnRegister();
if(_ref_count == 0) delete this;
}
virtual void enter(const char* tag_name, IXMLParser::Attributes const& atts) {};
virtual void leave(const char* tag_name, std::string const& data) {};
virtual bool handleText() {return false;};
protected:
ITransition() : _ref_count(0) {};
~ITransition() {};
private:
int _ref_count;
};
template<typename T>
class TTransition : public ITransition
{
public:
typedef typename T::States state_t;
const state_t StartPoint, EndPoint;
T* P_DATA; // parser data
protected:
TTransition(const state_t start, const state_t end, T* p_data = NULL)
: StartPoint(start), EndPoint(end), P_DATA(p_data)
{
Register();
};
virtual ~TTransition()
{};
};
template<typename T, typename States>
class TBaseStructure
{
public:
typedef TTransition<T> transition_t;
typedef States state_t;
private:
// map : transition trigger (string) -> pointing at next state
typedef std::map<std::string, transition_t*> tr_state_t;
// map : state -> outgoing transitions (of that state)
typedef std::map<state_t,tr_state_t> tr_map_t;
public:
transition_t* getTransition(state_t current_state, std::string const& str)
{
typename tr_map_t::iterator it = _state_tr_map.find(current_state);
if(it != _state_tr_map.end())
{
typename tr_state_t::iterator trit = it->second.find(str);
if( trit != it->second.end() )
{
return trit->second;
}
else if( (trit=it->second.find("")) != it->second.end() )
{
return trit->second;
}
else
{
return NULL;
}
}
return NULL;
}
~TBaseStructure()
{
typename tr_map_t::iterator it = _state_tr_map.begin();
for(; it != _state_tr_map.end(); ++it)
{
typename tr_state_t::iterator trit = it->second.begin();
for(;trit != it->second.end(); trit++)
{
trit->second->Delete();
}
}
}
protected:
void newTransition(std::string const& tag, transition_t* tr)
{
_state_tr_map[tr->StartPoint][tag] = tr;
_state_tr_map[tr->EndPoint][tag] = tr;
// we use one transition twice -> increment ref counter
tr->Register();
}
tr_map_t _state_tr_map;
};
template<typename T>
class TGenericXMLParser : public IXMLParser
{
public:
typedef TBaseStructure<T, typename T::States> struct_t;
TGenericXMLParser(struct_t* base, IXMLParser* caller = NULL)
: IXMLParser("",NULL,caller), m_base(base), m_state(T::STATE_NONE)
{
parser = XML_ParserCreate(NULL);
setParser(&parser);
};
~TGenericXMLParser()
{
if(parser)
{
XML_ParserFree(parser);
}
}
virtual void onStartElement(const XML_Char* name, const XML_Char** atts)
{
typename struct_t::transition_t* tr = m_base->getTransition(m_state.state(), name);
if(tr && m_state.stateTransition(tr->StartPoint, LazyTrue(), tr->EndPoint))
{
m_tr_stack.push(tr);
tr->enter(name, IXMLParser::Attributes(atts));
}
sCharData = "";
}
virtual void onEndElement(const XML_Char* name)
{
typename struct_t::transition_t* tr = m_base->getTransition(m_state.state(), name);
if(tr && m_state.stateTransition(tr->EndPoint, LazyTrue(), tr->StartPoint))
{
SGP_THROW_IFFALSE(tr == m_tr_stack.top(),
_BS(L"Transition associated to tag [") << name << L"] doesn't correspond to saved transition" << _BS::wget);
tr->leave(name, sCharData);
m_tr_stack.pop();
}
};
virtual void onTextElement(const XML_Char *str, int len)
{
if(!m_tr_stack.empty())
{
typename struct_t::transition_t* tr = m_tr_stack.top();
if(tr && tr->handleText())
{
sCharData.append(str,len);
}
}
};
void parseBuffer(vfs::Byte* buffer, vfs::size_t length)
{
this->grabParser();
XML_Parser& _parser = this->getParser();
if(!XML_Parse(_parser, buffer, length, TRUE))
{
std::wstringstream wss;
wss << L"XML Parser Error : "
<< vfs::String::as_utf16(XML_ErrorString(XML_GetErrorCode(_parser)))
<< L" in line "
<< XML_GetCurrentLineNumber(_parser);
SGP_THROW(wss.str().c_str());
}
}
void parseFile(vfs::tReadableFile* pFile)
{
if(!pFile)
{
return;
}
vfs::COpenReadFile rfile(pFile);
vfs::size_t size = rfile->getSize();
std::vector<vfs::Byte> buffer(size+1);
SGP_TRYCATCH_RETHROW( rfile->read(&buffer[0],size), L"" );
buffer[size] = 0;
SGP_TRYCATCH_RETHROW( this->parseBuffer(&buffer[0], size),
_BS(L"error in file : ") << pFile->getPath() << _BS::wget);
}
void parseFile(vfs::Path const& sFile)
{
vfs::tReadableFile* file = getVFS()->getReadFile(sFile);
SGP_THROW_IFFALSE(file, _BS(L"Could not find file : ") << sFile << _BS::wget);
SGP_TRYCATCH_RETHROW( this->parseFile(file),
_BS(L"error in file : ") << sFile << _BS::wget);
}
private:
XML_Parser parser;
typedef IXMLParser::ParserState<typename T::States> ParserState_t;
struct_t* m_base;
typedef std::stack<typename struct_t::transition_t*> tr_stack_t;
tr_stack_t m_tr_stack;
ParserState_t m_state;
};
}
#define PARSER_CLASS_MACRO(class_name, states) \
class class_name : public states, public xml_auto::TBaseStructure<class_name, states::States>
#define PURE_TRANSITION(class_name, main_type) \
class class_name : public xml_auto::TTransition<main_type>{ \
public: \
typedef main_type::States state_t; \
typedef xml_auto::TTransition<main_type> super_t; \
class_name(const state_t start, const state_t end) : super_t(start, end) \
{} \
virtual ~class_name() \
{} \
};
#define DEFINE_TRANSITION(class_name, base_type, handle_text) \
class class_name : public xml_auto::TTransition<base_type>{ \
public: \
typedef xml_auto::TTransition<base_type> super_t; \
typedef base_type::States state_t; \
class_name(const state_t start, const state_t end, base_type* base_obj) : super_t(start,end,base_obj) {}; \
virtual ~class_name() {}; \
virtual bool handleText() {return handle_text;}; \
#define DEFINE_TRANSITION_WDATA(class_name, base_type, handle_text, tr_data_type) \
class class_name : public xml_auto::TTransition<base_type>{ \
tr_data_type T_DATA; \
public: \
typedef xml_auto::TTransition<base_type> super_t; \
typedef base_type::States state_t; \
class_name(const state_t start, const state_t end, base_type* base_obj) : super_t(start,end,base_obj) {}; \
virtual ~class_name() {}; \
virtual bool handleText() {return handle_text;}; \
#define FINISH_TRANSITION };
#define TRANSITION_ENTER virtual void enter(const char* tag_name, IXMLParser::Attributes const& atts)
#define TRANSITION_LEAVE virtual void leave(const char* tag_name, std::string const& char_data)
#define TR_HANDLE(from_state, trigger, to_state, handler_class_type) newTransition((trigger), new handler_class_type((from_state),(to_state),this));
#define TR_PASS(from_state, trigger, to_state) newTransition((trigger), new NOOP((from_state),(to_state)));
#endif // XML_AUTO_PARSE_H
+986 -130
View File
File diff suppressed because it is too large Load Diff
+967 -105
View File
File diff suppressed because it is too large Load Diff
+968 -122
View File
File diff suppressed because it is too large Load Diff
+962 -107
View File
File diff suppressed because it is too large Load Diff
+1560 -606
View File
File diff suppressed because it is too large Load Diff
+972 -109
View File
File diff suppressed because it is too large Load Diff
+391 -1
View File
@@ -1,4 +1,5 @@
#ifdef PRECOMPILEDHEADERS
//#pragma setlocale("CHINESE")
#ifdef PRECOMPILEDHEADERS
#include "Utils All.h"
#include "_Ja25Englishtext.h"
#else
@@ -77,6 +78,8 @@ STR16 zNewTacticalMessages[]=
L"如果你要使用编辑器的话,请选择一个战役,不要用默认战役。",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - New STOMP laptop strings
//these strings match up with the defines in IMP Skill trait.cpp
STR16 gzIMPSkillTraitsText[]=
{
@@ -97,7 +100,394 @@ STR16 gzIMPSkillTraitsText[]=
L"", //"None",
L"I.M.P 专属技能", //"I.M.P. Specialties",
L"(Expert)",
};
//added another set of skill texts for new major traits
STR16 gzIMPSkillTraitsTextNewMajor[]=
{
L"Auto Weapons",
L"Heavy Weapons",
L"Marksman",
L"Hunter",
L"Gunslinger",
L"Hand to Hand",
L"Deputy",
L"Technician",
L"Paramedic",
L"None",
L"I.M.P. Major Traits",
// second names
L"Machinegunner",
L"Bombardier",
L"Sniper",
L"Ranger",
L"Gunfighter",
L"Martial Arts",
L"Squadleader",
L"Engineer",
L"Doctor",
};
//added another set of skill texts for new minor traits
STR16 gzIMPSkillTraitsTextNewMinor[]=
{
L"Ambidextrous",
L"Melee",
L"Throwing",
L"Night Ops",
L"Stealthy",
L"Athletics",
L"Bodybuilding",
L"Demolitions",
L"Teaching",
L"Scouting",
L"None",
L"I.M.P. Minor Traits",
};
//these texts are for help popup windows, describing trait properties
STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]=
{
L"+%d%s Chance to Hit with Assault Rifles\n",
L"+%d%s Chance to Hit with SMGs\n",
L"+%d%s Chance to Hit with LMGs\n",
L"-%d%s APs needed to fire with LMGs\n",
L"-%d%s APs needed to ready light machine guns\n",
L"Auto fire/burst chance to hit penalty is reduced by %d%s\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
};
STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]=
{
L"-%d%s APs needed to fire grenade launchers\n",
L"-%d%s APs needed to fire rocket launchers\n",
L"+%d%s chance to hit with grenade launchers\n",
L"+%d%s chance to hit with rocket launchers\n",
L"-%d%s APs needed to fire mortar\n",
L"Reduce penalty for mortar CtH by %d%s\n",
L"+%d%s damage to tanks with heavy weapons, grenades and explosives\n",
L"+%d%s damage to other targets with heavy weapons\n",
};
STR16 gzIMPMajorTraitsHelpTextsSniper[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Sniper Rifles\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click (except for handguns)\n",
L"+%d%s damage on shot",
L" plus",
L" per every aim click",
L" after first",
L" after second",
L" after third",
L" after fourth",
L" after fifth",
L" after sixth",
L" after seventh",
L"-%d%s APs needed to chamber a round with bolt-action rifles \n",
L"Adds one more aim click for rifle-type guns\n",
L"Adds %d more aim clicks for rifle-type guns\n",
};
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Shotguns\n",
L"-%d%s APs needed to pump Shotguns\n",
L"+%d%s group travelling speed between sectors if traveling by foot\n",
L"+%d%s group travelling speed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
L"-%d%s APs needed to fire with pistols and revolvers\n",
L"+%d%s effective range with pistols and revolvers\n",
L"+%d%s chance to hit with pistols and revolvers\n",
L"+%d%s chance to hit with machine pistols",
L" (on single shots only)",
L"+%d%s aiming bonus per click with pistols, machine pistols and revolvers\n",
L"-%d%s APs needed to raise pistols and revolvers\n",
L"-%d%s APs needed to reload pistols, machine pistols and revolvers\n",
L"Adds %d more aim click for pistols, machine pistols and revolvers\n",
L"Adds %d more aim clicks for pistols, machine pistols and revolvers\n",
};
STR16 gzIMPMajorTraitsHelpTextsMartialArts[]=
{
L"-%d%s AP cost of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s chance to hit with hand to hand attacks with bare hands\n",
L"+%d%s chance to hit with hand to hand attacks with brass knuckles\n",
L"+%d%s damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s breath damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"Enemy knocked out due to your HtH attacks takes slightly longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes much longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes very long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes extremely long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes long hours to recuperate\n",
L"Enemy knocked out due to your HtH attacks probably never stand up\n",
L"Focused (aimed) punch deals +%d%s more damage\n",
L"Your special spinning kick deals +%d%s more damage\n",
L"+%d%s change to dodge hand to hand attacks\n",
L"+%d%s on top chance to dodge HtH attacks with bare hands",
L" or brass knuckles",
L" (+%d%s with brass knuckles)",
L"+%d%s on top chance to dodge HtH attacks with brass knuckles\n",
L"+%d%s chance to dodge attacks by any melee weapon\n",
L"-%d%s APs needed to steal weapon from enemy hands\n",
L"-%d%s APs needed to change state (stand, crouch, lie down), turn around, climb on/off roof and jump obstacles\n",
L"-%d%s APs needed to change state (stand, crouch, lie down)\n",
L"-%d%s APs needed to turn around\n",
L"-%d%s APs needed to climb on/off roof and jump obstacles\n",
L"+%d%s chance to kick doors\n",
L"You gain special animations for hand to hand combat\n",
};
STR16 gzIMPMajorTraitsHelpTextsSquadleader[]=
{
L"+%d%s APs per round of other mercs in vicinity\n",
L"+%d effective exp level of other mercs in vicinity, which have lesser level than the %s\n",
L"+%d effective exp level to count as a standby when counting friends' bonus for suppression\n",
L"+%d%s total suppression tolerance of other mercs in vicinity and %s himself\n",
L"+%d morale gain of other mercs in vicinity\n",
L"-%d morale loss of other mercs in vicinity\n",
L"The vicinity for bonuses is %d tiles",
L" (%d tiles with extended ears)",
L"(Max simultaneous bonuses for one soldier is %d)\n",
L"+%d%s fear resistence of %s\n",
L"Drawback: %dx morale loss for %s's death for all other mercs\n",
};
STR16 gzIMPMajorTraitsHelpTextsTechnician[]=
{
L"+%d%s to repairing speed\n",
L"+%d%s to lockpicking (normal/electronic locks)\n",
L"+%d%s to disarming electronic traps\n",
L"+%d%s to attaching special items and combining things\n",
L"+%d%s to unjamming a gun in combat\n",
L"Reduce penalty to repair electronic items by %d%s\n",
L"Increased chance to detect traps and mines (+%d detect level)\n",
L"+%d%s CtH of robot controlled by the %s\n",
L"%s trait grants you the ability to repair the robot\n",
L"Reduced penalty to repair speed of the robot by %d%s\n",
};
STR16 gzIMPMajorTraitsHelpTextsDoctor[]=
{
L"Has ability to make surgical intervention by using medical bag on wounded soldier\n",
L"Surgery instantly returns %d%s of lost health back.",
L" (This drains the medical bag a lot.)",
L"Can heal lost stats (from critical hits) by the",
L" surgery or",
L" doctor assignment.\n",
L"+%d%s effectiveness on doctor-patient assignment\n",
L"+%d%s bandaging speed\n",
L"+%d%s natural regeneration speed of all soldiers in the same sector",
L" (max %d these bonuses per sector)",
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]=
{
L"Reduce penalty to shoot dual weapons by %d%s\n",
L"+%d%s speed of reloading guns with magazines\n",
L"+%d%s speed of reloading guns with loose rounds\n",
L"-%d%s APs needed to pickup items\n",
L"-%d%s APs needed to work backpack\n",
L"-%d%s APs needed to handle doors\n",
L"-%d%s APs needed to plant/remove bombs and mines\n",
L"-%d%s APs needed to attach items\n",
};
STR16 gzIMPMinorTraitsHelpTextsMelee[]=
{
L"-%d%s APs needed to attack by blades\n",
L"+%d%s chance to hit with blades\n",
L"+%d%s chance to hit with blunt melee weapons\n",
L"+%d%s damage of blades\n",
L"+%d%s damage of blunt melee weapons\n",
L"Aimed attack by any melee weapon deals +%d%s damage\n",
L"+%d%s chance to dodge attack by melee blades\n",
L"+%d%s on top chance to dodge melee blades if having a blade in hands\n",
L"+%d%s chance to dodge attack by blunt melee weapons\n",
L"+%d%s on top chance to dodge blunt melee weapons if having a blade in hands\n",
};
STR16 gzIMPMinorTraitsHelpTextsThrowing[]=
{
L"-%d%s basic APs needed to throw blades\n",
L"+%d%s max range when throwing blades\n",
L"+%d%s chance to hit when throwing blades\n",
L"+%d%s chance to hit when throwing blades per aim click\n",
L"+%d%s damage of throwing blades\n",
L"+%d%s damage of throwing blades per aim click\n",
L"+%d%s chance to inflict critical hit by throwing blade if not seen or heard\n",
L"+%d critical hit by throwing blade multiplier\n",
L"Adds %d more aim click for throwing blades\n",
L"Adds %d more aim clicks for throwing blades\n",
};
STR16 gzIMPMinorTraitsHelpTextsNightOps[]=
{
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
};
STR16 gzIMPMinorTraitsHelpTextsStealthy[]=
{
L"-%d%s APs needed to move quietly\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Reduced cover penalty for movement by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsAthletics[]=
{
L"-%d%s APs needed for moving (running, walking, swatting, crawling, swimming, etc.)\n",
L"-%d%s energy spent for movement, roof-climbing, obstacle-jumping, swimming, etc.\n",
};
STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]=
{
L"Has %d%s damage resistance\n",
L"+%d%s effective strength for carrying weight capacity \n",
L"Reduced energy lost when hit by HtH attack by %d%s\n",
L"Increased damage needed to fall down if hit to legs by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsDemolitions[]=
{
L"-%d%s APs needed to throw grenades\n",
L"+%d%s max range when throwing grenades\n",
L"+%d%s chance to hit when throwing grenades\n",
L"+%d%s damage of set bombs and mines\n",
L"+%d%s to attaching detonators check\n",
L"+%d%s to planting/removing bombs check\n",
L"Decreases chance enemy will detect your bombs and mines (+%d bomb level)\n",
L"Increased chance shaped charge will open the doors (damage multiplied by %d)\n",
};
STR16 gzIMPMinorTraitsHelpTextsTeaching[]=
{
L"+%d%s bonus to train militia\n",
L"+%d%s bonus to effective leadership for determining militia training\n",
L"+%d%s bonus to teaching other mercs\n",
L"Skill value counts to be +%d higher for being able to teach this skill to other mercs\n",
L"+%d%s bonus to train stats through self-practising assignment\n",
};
STR16 gzIMPMinorTraitsHelpTextsScouting[]=
{
L"+%d to effective sight range with scopes on weapons\n",
L"+%d to effective sight range with binoculars (and scopes separated from weapons)\n",
L"-%d tunnel vision with binoculars (and scopes separated from weapons)\n",
L"If in sector, adjacent sectors will show exact number of enemies\n",
L"If in sector, adjacent sectors will show presence of enemies if any\n",
L"Prevents the enemy to ambush your squad\n",
L"Prevents the bloodcats to ambush your squad\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPOldSkillTraitsHelpTexts[]=
{
L"+%d%s bonus to lockpicking\n", // 0
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks\n",
L"Eliminates the penalty to repair and handle\nelectronic things (locks, traps, rem. detonators, robot, etc.)\n",
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
L"+%d%s max range when throwing anything\n", // 10
L"+%d%s chance to hit when throwing anything\n",
L"+%d%s chance to instantly kill by throwing knife if not seen or heard\n",
L"+%d%s bonus to train militia and instruct other mercs\n",
L"+%d%s effective leadership for militia training calculations\n",
L"+%d%s chance to hit with rocket/greande launchers and mortar\n",
L"Auto fire/burst chance to hit penalty is divided by %d\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Eliminates the CtH penalty for second hand when firing two weapons at once\n", // 20
L"+%d%s chance to hit with melee blades\n",
L"+%d%s chance to dodge attacks by melee blades if having blade in hands\n",
L"+%d%s chance to dodge attacks by melee blades if having anything else in hands\n",
L"+%d%s chance to dodge hand to hand attacks if having blade in hands\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click\n",
L"Provides permanent camouflage\n",
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks if having empty hands\n", // 30
L"+%d%s chance to dodge hand to hand attacks if not having empty hands\n",
L"+%d%s chance to dodge attacks by melee blades\n",
L"Can perform spinning kick attack on weakened enemies to deal double damage\n",
L"You gain special animations for hand to hand combat\n",
L"No bonuses",
};
STR16 gzIMPNewCharacterTraitsHelpTexts[]=
{
L"A: No advantage.\nD: No disadvantage.",
L"A: Has better performance when couple of mercs are nearby.\nD: Gains no morale when no other merc is nearby.",
L"A: Has better performance when no other merc is nearby.\nD: Gains no morale when in a group.",
L"A: His morale sinks a little slower and grows faster than normal.\nD: Has lesser chance to detect traps and mines.",
L"A: Has bonus on training militia and is better at communication with people.\nD: Gains no morale for actions of other mercs.",
L"A: Slightly faster learning when assigned on practicing or as a student.\nD: Has lesser suppression and fear resistance.",
L"A: His energy goes down a bit slower except on assignments as doctor, repairman, militia trainer or if learning certain skills.\nD: His wisdom, leadership, explosives, mechanical and medical skills improve slightly slower.",
L"A: Has slightly better chance to hit on burst/autofire and inflicts slightly bigger damage in close combat\n Gains a little more morale for killing.\nD: Has penalty for actions which needs patience like repairing items, picking locks, removing traps, doctoring, training militia.",
L"A: Has bonus for actions which needs patience like repairing items, picking locks, removing traps, doctoring and training militia.\nD: His interrupts chance is slightly lowered.",
L"A: Incresed resistance to suppression and fear.\n Morale loss for taking damage and companions deaths is lower for him.\nD: Can be hit easier and enemy penalty for moving target is lesser in his case.",
L"A: He gains morale when on non-combat assignments (except training militia).\nD: Gains no morale for killing.",
L"A: Has bigger chance for inflicting stat loss and can inflict special painful wounds when able to\n Gains bonus morale for inflicting stat loss.\nD: Has penalty for communication with people and his morale sinks faster if not fighting.",
L"A: Has better performance when there are some mercs of opposite gender nearby.\nD: Morale of other mercs of the same gender grows slower if nearby.",
};
STR16 gzIMPDisabilitiesHelpTexts[]=
{
L"No effects.",
L"Has problems with breathing and reduced overall performance if in tropical or desert sectors.",
L"Can suffer panic attack if left alone in certain situations.",
L"His overall performance is reduced if underground.",
L"If trying to swim he can easily drown.",
L"A look at large insects can make a big problems\nand being in tropical sectors also reduce his performance a bit.",
L"Sometimes forgets what orders he got and therefore loses some APs if in combat.",
L"He can go psycho and shoot like mad once per a while\nand can lose morale if unable to do that with given weapon.",
};
STR16 gzIMPProfileCostText[]=
{
L"The profile cost is %d$. Do you authorize the payment? ",
};
STR16 zGioNewTraitsImpossibleText[]=
{
L"You cannot choose the New Trait System with PROFEX utility deactivated. Check your JA2_Options.ini for entry: READ_PROFILE_DATA_FROM_XML.",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//@@@: New string as of March 3, 2000.
STR16 gzIronManModeWarningText[]=
{
+396 -4
View File
@@ -1,3 +1,4 @@
//#pragma setlocale("DUTCH")
#ifdef PRECOMPILEDHEADERS
#include "Utils All.h"
#include "_Ja25Dutchtext.h"
@@ -43,13 +44,16 @@ STR16 zNewTacticalMessages[]=
L"In order to use the editor, please select a campaign other than the default.", ///@@new
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - New STOMP laptop strings
//these strings match up with the defines in IMP Skill trait.cpp
STR16 gzIMPSkillTraitsText[]=
{
L"Lock picking",
L"Hand to hand combat",
// made this more elegant
L"Lock Picking",
L"Hand to Hand",
L"Electronics",
L"Night operations",
L"Night Operations",
L"Throwing",
L"Teaching",
L"Heavy Weapons",
@@ -58,12 +62,400 @@ STR16 gzIMPSkillTraitsText[]=
L"Ambidextrous",
L"Knifing",
L"Sniper",
L"Camouflage",
L"Camouflaged",
L"Martial Arts",
L"None",
L"I.M.P. Specialties",
L"(Expert)",
};
//added another set of skill texts for new major traits
STR16 gzIMPSkillTraitsTextNewMajor[]=
{
L"Auto Weapons",
L"Heavy Weapons",
L"Marksman",
L"Hunter",
L"Gunslinger",
L"Hand to Hand",
L"Deputy",
L"Technician",
L"Paramedic",
L"None",
L"I.M.P. Major Traits",
// second names
L"Machinegunner",
L"Bombardier",
L"Sniper",
L"Ranger",
L"Gunfighter",
L"Martial Arts",
L"Squadleader",
L"Engineer",
L"Doctor",
};
//added another set of skill texts for new minor traits
STR16 gzIMPSkillTraitsTextNewMinor[]=
{
L"Ambidextrous",
L"Melee",
L"Throwing",
L"Night Ops",
L"Stealthy",
L"Athletics",
L"Bodybuilding",
L"Demolitions",
L"Teaching",
L"Scouting",
L"None",
L"I.M.P. Minor Traits",
};
//these texts are for help popup windows, describing trait properties
STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]=
{
L"+%d%s Chance to Hit with Assault Rifles\n",
L"+%d%s Chance to Hit with SMGs\n",
L"+%d%s Chance to Hit with LMGs\n",
L"-%d%s APs needed to fire with LMGs\n",
L"-%d%s APs needed to ready light machine guns\n",
L"Auto fire/burst chance to hit penalty is reduced by %d%s\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
};
STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]=
{
L"-%d%s APs needed to fire grenade launchers\n",
L"-%d%s APs needed to fire rocket launchers\n",
L"+%d%s chance to hit with grenade launchers\n",
L"+%d%s chance to hit with rocket launchers\n",
L"-%d%s APs needed to fire mortar\n",
L"Reduce penalty for mortar CtH by %d%s\n",
L"+%d%s damage to tanks with heavy weapons, grenades and explosives\n",
L"+%d%s damage to other targets with heavy weapons\n",
};
STR16 gzIMPMajorTraitsHelpTextsSniper[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Sniper Rifles\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click (except for handguns)\n",
L"+%d%s damage on shot",
L" plus",
L" per every aim click",
L" after first",
L" after second",
L" after third",
L" after fourth",
L" after fifth",
L" after sixth",
L" after seventh",
L"-%d%s APs needed to chamber a round with bolt-action rifles \n",
L"Adds one more aim click for rifle-type guns\n",
L"Adds %d more aim clicks for rifle-type guns\n",
};
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Shotguns\n",
L"-%d%s APs needed to pump Shotguns\n",
L"+%d%s group travelling speed between sectors if traveling by foot\n",
L"+%d%s group travelling speed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
L"-%d%s APs needed to fire with pistols and revolvers\n",
L"+%d%s effective range with pistols and revolvers\n",
L"+%d%s chance to hit with pistols and revolvers\n",
L"+%d%s chance to hit with machine pistols",
L" (on single shots only)",
L"+%d%s aiming bonus per click with pistols, machine pistols and revolvers\n",
L"-%d%s APs needed to raise pistols and revolvers\n",
L"-%d%s APs needed to reload pistols, machine pistols and revolvers\n",
L"Adds %d more aim click for pistols, machine pistols and revolvers\n",
L"Adds %d more aim clicks for pistols, machine pistols and revolvers\n",
};
STR16 gzIMPMajorTraitsHelpTextsMartialArts[]=
{
L"-%d%s AP cost of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s chance to hit with hand to hand attacks with bare hands\n",
L"+%d%s chance to hit with hand to hand attacks with brass knuckles\n",
L"+%d%s damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s breath damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"Enemy knocked out due to your HtH attacks takes slightly longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes much longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes very long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes extremely long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes long hours to recuperate\n",
L"Enemy knocked out due to your HtH attacks probably never stand up\n",
L"Focused (aimed) punch deals +%d%s more damage\n",
L"Your special spinning kick deals +%d%s more damage\n",
L"+%d%s change to dodge hand to hand attacks\n",
L"+%d%s on top chance to dodge HtH attacks with bare hands",
L" or brass knuckles",
L" (+%d%s with brass knuckles)",
L"+%d%s on top chance to dodge HtH attacks with brass knuckles\n",
L"+%d%s chance to dodge attacks by any melee weapon\n",
L"-%d%s APs needed to steal weapon from enemy hands\n",
L"-%d%s APs needed to change state (stand, crouch, lie down), turn around, climb on/off roof and jump obstacles\n",
L"-%d%s APs needed to change state (stand, crouch, lie down)\n",
L"-%d%s APs needed to turn around\n",
L"-%d%s APs needed to climb on/off roof and jump obstacles\n",
L"+%d%s chance to kick doors\n",
L"You gain special animations for hand to hand combat\n",
};
STR16 gzIMPMajorTraitsHelpTextsSquadleader[]=
{
L"+%d%s APs per round of other mercs in vicinity\n",
L"+%d effective exp level of other mercs in vicinity, which have lesser level than the %s\n",
L"+%d effective exp level to count as a standby when counting friends' bonus for suppression\n",
L"+%d%s total suppression tolerance of other mercs in vicinity and %s himself\n",
L"+%d morale gain of other mercs in vicinity\n",
L"-%d morale loss of other mercs in vicinity\n",
L"The vicinity for bonuses is %d tiles",
L" (%d tiles with extended ears)",
L"(Max simultaneous bonuses for one soldier is %d)\n",
L"+%d%s fear resistence of %s\n",
L"Drawback: %dx morale loss for %s's death for all other mercs\n",
};
STR16 gzIMPMajorTraitsHelpTextsTechnician[]=
{
L"+%d%s to repairing speed\n",
L"+%d%s to lockpicking (normal/electronic locks)\n",
L"+%d%s to disarming electronic traps\n",
L"+%d%s to attaching special items and combining things\n",
L"+%d%s to unjamming a gun in combat\n",
L"Reduce penalty to repair electronic items by %d%s\n",
L"Increased chance to detect traps and mines (+%d detect level)\n",
L"+%d%s CtH of robot controlled by the %s\n",
L"%s trait grants you the ability to repair the robot\n",
L"Reduced penalty to repair speed of the robot by %d%s\n",
};
STR16 gzIMPMajorTraitsHelpTextsDoctor[]=
{
L"Has ability to make surgical intervention by using medical bag on wounded soldier\n",
L"Surgery instantly returns %d%s of lost health back.",
L" (This drains the medical bag a lot.)",
L"Can heal lost stats (from critical hits) by the",
L" surgery or",
L" doctor assignment.\n",
L"+%d%s effectiveness on doctor-patient assignment\n",
L"+%d%s bandaging speed\n",
L"+%d%s natural regeneration speed of all soldiers in the same sector",
L" (max %d these bonuses per sector)",
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]=
{
L"Reduce penalty to shoot dual weapons by %d%s\n",
L"+%d%s speed of reloading guns with magazines\n",
L"+%d%s speed of reloading guns with loose rounds\n",
L"-%d%s APs needed to pickup items\n",
L"-%d%s APs needed to work backpack\n",
L"-%d%s APs needed to handle doors\n",
L"-%d%s APs needed to plant/remove bombs and mines\n",
L"-%d%s APs needed to attach items\n",
};
STR16 gzIMPMinorTraitsHelpTextsMelee[]=
{
L"-%d%s APs needed to attack by blades\n",
L"+%d%s chance to hit with blades\n",
L"+%d%s chance to hit with blunt melee weapons\n",
L"+%d%s damage of blades\n",
L"+%d%s damage of blunt melee weapons\n",
L"Aimed attack by any melee weapon deals +%d%s damage\n",
L"+%d%s chance to dodge attack by melee blades\n",
L"+%d%s on top chance to dodge melee blades if having a blade in hands\n",
L"+%d%s chance to dodge attack by blunt melee weapons\n",
L"+%d%s on top chance to dodge blunt melee weapons if having a blade in hands\n",
};
STR16 gzIMPMinorTraitsHelpTextsThrowing[]=
{
L"-%d%s basic APs needed to throw blades\n",
L"+%d%s max range when throwing blades\n",
L"+%d%s chance to hit when throwing blades\n",
L"+%d%s chance to hit when throwing blades per aim click\n",
L"+%d%s damage of throwing blades\n",
L"+%d%s damage of throwing blades per aim click\n",
L"+%d%s chance to inflict critical hit by throwing blade if not seen or heard\n",
L"+%d critical hit by throwing blade multiplier\n",
L"Adds %d more aim click for throwing blades\n",
L"Adds %d more aim clicks for throwing blades\n",
};
STR16 gzIMPMinorTraitsHelpTextsNightOps[]=
{
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
};
STR16 gzIMPMinorTraitsHelpTextsStealthy[]=
{
L"-%d%s APs needed to move quietly\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Reduced cover penalty for movement by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsAthletics[]=
{
L"-%d%s APs needed for moving (running, walking, swatting, crawling, swimming, etc.)\n",
L"-%d%s energy spent for movement, roof-climbing, obstacle-jumping, swimming, etc.\n",
};
STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]=
{
L"Has %d%s damage resistance\n",
L"+%d%s effective strength for carrying weight capacity \n",
L"Reduced energy lost when hit by HtH attack by %d%s\n",
L"Increased damage needed to fall down if hit to legs by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsDemolitions[]=
{
L"-%d%s APs needed to throw grenades\n",
L"+%d%s max range when throwing grenades\n",
L"+%d%s chance to hit when throwing grenades\n",
L"+%d%s damage of set bombs and mines\n",
L"+%d%s to attaching detonators check\n",
L"+%d%s to planting/removing bombs check\n",
L"Decreases chance enemy will detect your bombs and mines (+%d bomb level)\n",
L"Increased chance shaped charge will open the doors (damage multiplied by %d)\n",
};
STR16 gzIMPMinorTraitsHelpTextsTeaching[]=
{
L"+%d%s bonus to train militia\n",
L"+%d%s bonus to effective leadership for determining militia training\n",
L"+%d%s bonus to teaching other mercs\n",
L"Skill value counts to be +%d higher for being able to teach this skill to other mercs\n",
L"+%d%s bonus to train stats through self-practising assignment\n",
};
STR16 gzIMPMinorTraitsHelpTextsScouting[]=
{
L"+%d to effective sight range with scopes on weapons\n",
L"+%d to effective sight range with binoculars (and scopes separated from weapons)\n",
L"-%d tunnel vision with binoculars (and scopes separated from weapons)\n",
L"If in sector, adjacent sectors will show exact number of enemies\n",
L"If in sector, adjacent sectors will show presence of enemies if any\n",
L"Prevents the enemy to ambush your squad\n",
L"Prevents the bloodcats to ambush your squad\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPOldSkillTraitsHelpTexts[]=
{
L"+%d%s bonus to lockpicking\n", // 0
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks\n",
L"Eliminates the penalty to repair and handle\nelectronic things (locks, traps, rem. detonators, robot, etc.)\n",
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
L"+%d%s max range when throwing anything\n", // 10
L"+%d%s chance to hit when throwing anything\n",
L"+%d%s chance to instantly kill by throwing knife if not seen or heard\n",
L"+%d%s bonus to train militia and instruct other mercs\n",
L"+%d%s effective leadership for militia training calculations\n",
L"+%d%s chance to hit with rocket/greande launchers and mortar\n",
L"Auto fire/burst chance to hit penalty is divided by %d\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Eliminates the CtH penalty for second hand when firing two weapons at once\n", // 20
L"+%d%s chance to hit with melee blades\n",
L"+%d%s chance to dodge attacks by melee blades if having blade in hands\n",
L"+%d%s chance to dodge attacks by melee blades if having anything else in hands\n",
L"+%d%s chance to dodge hand to hand attacks if having blade in hands\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click\n",
L"Provides permanent camouflage\n",
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks if having empty hands\n", // 30
L"+%d%s chance to dodge hand to hand attacks if not having empty hands\n",
L"+%d%s chance to dodge attacks by melee blades\n",
L"Can perform spinning kick attack on weakened enemies to deal double damage\n",
L"You gain special animations for hand to hand combat\n",
L"No bonuses",
};
STR16 gzIMPNewCharacterTraitsHelpTexts[]=
{
L"A: No advantage.\nD: No disadvantage.",
L"A: Has better performance when couple of mercs are nearby.\nD: Gains no morale when no other merc is nearby.",
L"A: Has better performance when no other merc is nearby.\nD: Gains no morale when in a group.",
L"A: His morale sinks a little slower and grows faster than normal.\nD: Has lesser chance to detect traps and mines.",
L"A: Has bonus on training militia and is better at communication with people.\nD: Gains no morale for actions of other mercs.",
L"A: Slightly faster learning when assigned on practicing or as a student.\nD: Has lesser suppression and fear resistance.",
L"A: His energy goes down a bit slower except on assignments as doctor, repairman, militia trainer or if learning certain skills.\nD: His wisdom, leadership, explosives, mechanical and medical skills improve slightly slower.",
L"A: Has slightly better chance to hit on burst/autofire and inflicts slightly bigger damage in close combat\n Gains a little more morale for killing.\nD: Has penalty for actions which needs patience like repairing items, picking locks, removing traps, doctoring, training militia.",
L"A: Has bonus for actions which needs patience like repairing items, picking locks, removing traps, doctoring and training militia.\nD: His interrupts chance is slightly lowered.",
L"A: Incresed resistance to suppression and fear.\n Morale loss for taking damage and companions deaths is lower for him.\nD: Can be hit easier and enemy penalty for moving target is lesser in his case.",
L"A: He gains morale when on non-combat assignments (except training militia).\nD: Gains no morale for killing.",
L"A: Has bigger chance for inflicting stat loss and can inflict special painful wounds when able to\n Gains bonus morale for inflicting stat loss.\nD: Has penalty for communication with people and his morale sinks faster if not fighting.",
L"A: Has better performance when there are some mercs of opposite gender nearby.\nD: Morale of other mercs of the same gender grows slower if nearby.",
};
STR16 gzIMPDisabilitiesHelpTexts[]=
{
L"No effects.",
L"Has problems with breathing and reduced overall performance if in tropical or desert sectors.",
L"Can suffer panic attack if left alone in certain situations.",
L"His overall performance is reduced if underground.",
L"If trying to swim he can easily drown.",
L"A look at large insects can make a big problems\nand being in tropical sectors also reduce his performance a bit.",
L"Sometimes forgets what orders he got and therefore loses some APs if in combat.",
L"He can go psycho and shoot like mad once per a while\nand can lose morale if unable to do that with given weapon.",
};
STR16 gzIMPProfileCostText[]=
{
L"The profile cost is %d$. Do you authorize the payment? ",
};
STR16 zGioNewTraitsImpossibleText[]=
{
L"You cannot choose the New Trait System with PROFEX utility deactivated. Check your JA2_Options.ini for entry: READ_PROFILE_DATA_FROM_XML.",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//@@@: New string as of March 3, 2000.
STR16 gzIronManModeWarningText[]=
{
+39
View File
@@ -32,6 +32,45 @@ enum
extern STR16 zNewTacticalMessages[];
extern STR16 gzIMPSkillTraitsText[];
////////////////////////////////////////////////////////
// added by SANDRO
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 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 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
extern STR16 gzIMPNewCharacterTraitsHelpTexts[];
extern STR16 gzIMPDisabilitiesHelpTexts[];
extern STR16 gzIMPProfileCostText[];
extern STR16 zGioNewTraitsImpossibleText[];
///////////////////////////////////////////////////////
enum
{
IMM__IRON_MAN_MODE_WARNING_TEXT,
+396 -4
View File
@@ -1,3 +1,4 @@
//#pragma setlocale("ENGLISH")
#ifdef PRECOMPILEDHEADERS
#include "Utils All.h"
#include "_Ja25Englishtext.h"
@@ -43,13 +44,16 @@ STR16 zNewTacticalMessages[]=
L"In order to use the editor, please select a campaign other than the default.", ///@@new
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - New STOMP laptop strings
//these strings match up with the defines in IMP Skill trait.cpp
STR16 gzIMPSkillTraitsText[]=
{
L"Lock picking",
L"Hand to hand combat",
// made this more elegant
L"Lock Picking",
L"Hand to Hand",
L"Electronics",
L"Night operations",
L"Night Operations",
L"Throwing",
L"Teaching",
L"Heavy Weapons",
@@ -58,12 +62,400 @@ STR16 gzIMPSkillTraitsText[]=
L"Ambidextrous",
L"Knifing",
L"Sniper",
L"Camouflage",
L"Camouflaged",
L"Martial Arts",
L"None",
L"I.M.P. Specialties",
L"(Expert)",
};
//added another set of skill texts for new major traits
STR16 gzIMPSkillTraitsTextNewMajor[]=
{
L"Auto Weapons",
L"Heavy Weapons",
L"Marksman",
L"Hunter",
L"Gunslinger",
L"Hand to Hand",
L"Deputy",
L"Technician",
L"Paramedic",
L"None",
L"I.M.P. Major Traits",
// second names
L"Machinegunner",
L"Bombardier",
L"Sniper",
L"Ranger",
L"Gunfighter",
L"Martial Arts",
L"Squadleader",
L"Engineer",
L"Doctor",
};
//added another set of skill texts for new minor traits
STR16 gzIMPSkillTraitsTextNewMinor[]=
{
L"Ambidextrous",
L"Melee",
L"Throwing",
L"Night Ops",
L"Stealthy",
L"Athletics",
L"Bodybuilding",
L"Demolitions",
L"Teaching",
L"Scouting",
L"None",
L"I.M.P. Minor Traits",
};
//these texts are for help popup windows, describing trait properties
STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]=
{
L"+%d%s Chance to Hit with Assault Rifles\n",
L"+%d%s Chance to Hit with SMGs\n",
L"+%d%s Chance to Hit with LMGs\n",
L"-%d%s APs needed to fire with LMGs on autofire or burst mode\n",
L"-%d%s APs needed to ready light machine guns\n",
L"Auto fire/burst chance to hit penalty is reduced by %d%s\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
};
STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]=
{
L"-%d%s APs needed to fire grenade launchers\n",
L"-%d%s APs needed to fire rocket launchers\n",
L"+%d%s chance to hit with grenade launchers\n",
L"+%d%s chance to hit with rocket launchers\n",
L"-%d%s APs needed to fire mortar\n",
L"Reduce penalty for mortar CtH by %d%s\n",
L"+%d%s damage to tanks with heavy weapons, grenades and explosives\n",
L"+%d%s damage to other targets with heavy weapons\n",
};
STR16 gzIMPMajorTraitsHelpTextsSniper[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Sniper Rifles\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click (except for handguns)\n",
L"+%d%s damage on shot",
L" plus",
L" per every aim click",
L" after first",
L" after second",
L" after third",
L" after fourth",
L" after fifth",
L" after sixth",
L" after seventh",
L"-%d%s APs needed to chamber a round with bolt-action rifles \n",
L"Adds one more aim click for rifle-type guns\n",
L"Adds %d more aim clicks for rifle-type guns\n",
};
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Shotguns\n",
L"-%d%s APs needed to pump Shotguns\n",
L"+%d%s group travelling speed between sectors if traveling by foot\n",
L"+%d%s group travelling speed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
L"-%d%s APs needed to fire with pistols and revolvers\n",
L"+%d%s effective range with pistols and revolvers\n",
L"+%d%s chance to hit with pistols and revolvers\n",
L"+%d%s chance to hit with machine pistols",
L" (on single shots only)",
L"+%d%s aiming bonus per click with pistols, machine pistols and revolvers\n",
L"-%d%s APs needed to ready pistols and revolvers\n", // MINTY - "raise" changed to "ready"
L"-%d%s APs needed to reload pistols, machine pistols and revolvers\n",
L"Adds %d more aim click for pistols, machine pistols and revolvers\n",
L"Adds %d more aim clicks for pistols, machine pistols and revolvers\n",
};
STR16 gzIMPMajorTraitsHelpTextsMartialArts[]=
{
L"-%d%s AP cost of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s chance to hit with hand to hand attacks with bare hands\n",
L"+%d%s chance to hit with hand to hand attacks with brass knuckles\n",
L"+%d%s damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s breath damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"Enemy knocked out due to your HtH attacks takes slightly longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes much longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes very long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes extremely long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes long hours to recuperate\n",
L"Enemy knocked out due to your HtH attacks probably never stand up\n",
L"Focused (aimed) punch deals +%d%s more damage\n",
L"Your special spinning kick deals +%d%s more damage\n",
L"+%d%s change to dodge hand to hand attacks\n",
L"+%d%s on top chance to dodge HtH attacks with bare hands",
L" or brass knuckles",
L" (+%d%s with brass knuckles)",
L"+%d%s on top chance to dodge HtH attacks with brass knuckles\n",
L"+%d%s chance to dodge attacks by any melee weapon\n",
L"-%d%s APs needed to steal weapon from enemy hands\n",
L"-%d%s APs needed to change stance (stand, crouch, lie down), turn around, climb on/off roof and jump obstacles\n", // MINTY - "state" changed to "stance"
L"-%d%s APs needed to change stance (stand, crouch, lie down)\n", // MINTY - "state" changed to "stance"
L"-%d%s APs needed to turn around\n",
L"-%d%s APs needed to climb on/off roof and jump obstacles\n",
L"+%d%s chance to kick doors in\n", // MINTY - Changed to "kick doors in"
L"You gain special animations for hand to hand combat\n",
};
STR16 gzIMPMajorTraitsHelpTextsSquadleader[]=
{
L"+%d%s APs per round of other mercs in vicinity\n",
L"+%d effective exp level of other mercs in vicinity, which have lesser level than the %s\n",
L"+%d effective exp level to count as a standby when counting friends' bonus for suppression\n",
L"+%d%s total suppression tolerance for other mercs in the vicinity and %s himself\n", // MINTY - Changed "of" to "for"
L"+%d morale gain for other mercs in the vicinity\n", // MINTY - Changed "of" to "for"
L"-%d morale loss for other mercs in the vicinity\n", // MINTY - Changed "of" to "for"
L"The vicinity for bonuses is %d tiles",
L" (%d tiles with extended ears)",
L"(Max simultaneous bonuses for one soldier is %d)\n",
L"+%d%s fear resistence of %s\n",
L"Drawback: %dx morale loss for %s's death for all other mercs\n",
};
STR16 gzIMPMajorTraitsHelpTextsTechnician[]=
{
L"+%d%s to repairing speed\n",
L"+%d%s to lockpicking (normal/electronic locks)\n",
L"+%d%s to disarming electronic traps\n",
L"+%d%s to attaching special items and combining things\n",
L"+%d%s to unjamming a gun in combat\n",
L"Reduce penalty to repair electronic items by %d%s\n",
L"Increased chance to detect traps and mines (+%d detect level)\n",
L"+%d%s CtH of robot controlled by the %s\n",
L"%s trait grants you the ability to repair the robot\n",
L"Reduced penalty to repair speed of the robot by %d%s\n",
};
STR16 gzIMPMajorTraitsHelpTextsDoctor[]=
{
L"Has ability to perform surgical intervention by using medical bag on wounded soldier\n", // MINTY - "make" changed to "perform"
L"Surgery instantly returns %d%s of lost health back.",
L" (This drains the medical bag a lot.)",
L"Can heal lost stats (from critical hits) by the",
L" surgery or",
L" doctor assignment.\n",
L"+%d%s effectiveness on doctor-patient assignment\n",
L"+%d%s bandaging speed\n",
L"+%d%s natural regeneration speed for all soldiers in the same sector", // MINTY - Changed "of" to "for"
L" (max %d of these bonuses per sector stack)",
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]=
{
L"Reduce penalty to shoot dual weapons by %d%s\n",
L"+%d%s speed of reloading guns with magazines\n",
L"+%d%s speed of reloading guns with loose rounds\n",
L"-%d%s APs needed to pickup items\n",
L"-%d%s APs needed to work backpack\n",
L"-%d%s APs needed to handle doors\n",
L"-%d%s APs needed to plant/remove bombs and mines\n",
L"-%d%s APs needed to attach items\n",
};
STR16 gzIMPMinorTraitsHelpTextsMelee[]=
{
L"-%d%s APs needed to attack by blades\n",
L"+%d%s chance to hit with blades\n",
L"+%d%s chance to hit with blunt melee weapons\n",
L"+%d%s damage with blades\n", // MINTY - Changed "of" to "with"
L"+%d%s damage with blunt melee weapons\n", // MINTY - Changed "of" to "with"
L"Aimed attack with any melee weapon deals +%d%s damage\n", // MINTY - Changed "by" to "with"
L"+%d%s chance to dodge attack by melee blades\n",
L"+%d%s on top chance to dodge melee blades if holding a blade\n", // MINTY - "having a blade in hands" changed to "holding a blade"
L"+%d%s chance to dodge attack by blunt melee weapons\n",
L"+%d%s on top chance to dodge blunt melee weapons if holding a blade\n", // MINTY - "having a blade in hands" changed to "holding a blade"
};
STR16 gzIMPMinorTraitsHelpTextsThrowing[]=
{
L"-%d%s basic APs needed to throw blades\n",
L"+%d%s max range when throwing blades\n",
L"+%d%s chance to hit when throwing blades\n",
L"+%d%s chance to hit when throwing blades per aim click\n",
L"+%d%s damage with throwing blades\n", // MINTY - Changed "of" to "with"
L"+%d%s damage with throwing blades per aim click\n", // MINTY - Changed "of" to "with"
L"+%d%s chance to inflict critical hit with throwing blade if not seen or heard\n", // MINTY - Changed "by" to "with"
L"+%d critical hit with throwing blade multiplier\n", // MINTY - Changed "by" to "with"
L"Adds %d more aim click for throwing blades\n",
L"Adds %d more aim clicks for throwing blades\n",
};
STR16 gzIMPMinorTraitsHelpTextsNightOps[]=
{
L"+%d to effective sight range in the dark\n",
L"+%d to general effective hearing range\n",
L"+%d additional hearing range in the dark\n", // MINTY - Changed "effective hearing range in dark on top" to "additional hearing range in the dark"
L"+%d to interrupts modifier in the dark\n",
L"-%d need to sleep\n",
};
STR16 gzIMPMinorTraitsHelpTextsStealthy[]=
{
L"-%d%s APs needed to move quietly\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Reduced cover penalty for movement by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsAthletics[]=
{
L"-%d%s APs needed for moving (running, walking, squatting, crawling, swimming, etc.)\n",
L"-%d%s energy spent for movement, roof-climbing, obstacle-jumping, swimming, etc.\n",
};
STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]=
{
L"Has %d%s damage resistance\n",
L"+%d%s effective strength for carrying weight capacity \n",
L"Reduced energy lost when hit by HtH attack by %d%s\n",
L"Increased damage needed to fall down if hit to legs by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsDemolitions[]=
{
L"-%d%s APs needed to throw grenades\n",
L"+%d%s max range when throwing grenades\n",
L"+%d%s chance to hit when throwing grenades\n",
L"+%d%s damage of set bombs and mines\n",
L"+%d%s to attaching detonators check\n",
L"+%d%s to planting/removing bombs check\n",
L"Decreases chance enemy will detect your bombs and mines (+%d bomb level)\n",
L"Increased chance shaped charge will open the doors (damage multiplied by %d)\n",
};
STR16 gzIMPMinorTraitsHelpTextsTeaching[]=
{
L"+%d%s bonus to militia training speed\n",
L"+%d%s bonus to effective leadership for determining militia training\n",
L"+%d%s bonus to teaching other mercs\n",
L"Skill value counts to be +%d higher for being able to teach this skill to other mercs\n",
L"+%d%s bonus to train stats through self-practising assignment\n",
};
STR16 gzIMPMinorTraitsHelpTextsScouting[]=
{
L"+%d to effective sight range with scopes on weapons\n",
L"+%d to effective sight range with binoculars (and scopes separated from weapons)\n",
L"-%d tunnel vision with binoculars (and scopes separated from weapons)\n",
L"If in sector, adjacent sectors will show exact number of enemies\n",
L"If in sector, adjacent sectors will show presence of enemies, if any\n",
L"Prevents enemy ambushes on your squad\n",
L"Prevents bloodcat ambushes on your squad\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPOldSkillTraitsHelpTexts[]=
{
L"+%d%s bonus to lockpicking\n", // 0
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks\n",
L"Eliminates the penalty to repair and handle\nelectronic things (locks, traps, rem. detonators, robot, etc.)\n",
L"+%d to effective sight range in the dark\n",
L"+%d to general effective hearing range\n",
L"+%d extra hearing range in the dark\n",
L"+%d to interrupts modifier in the dark\n",
L"-%d need to sleep\n",
L"+%d%s max range when throwing anything\n", // 10
L"+%d%s chance to hit when throwing anything\n",
L"+%d%s chance to instantly kill by throwing knife if not seen or heard\n",
L"+%d%s bonus to militia training and other mercs instructing speed\n",
L"+%d%s effective leadership for militia training calculations\n",
L"+%d%s chance to hit with rocket/greande launchers and mortar\n",
L"Auto fire/burst chance to hit penalty is divided by %d\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Eliminates the CtH penalty when firing two weapons at once\n", // 20
L"+%d%s chance to hit with melee blades\n",
L"+%d%s chance to dodge attacks by melee blades if having blade in hands\n",
L"+%d%s chance to dodge attacks by melee blades if having anything else in hands\n",
L"+%d%s chance to dodge hand to hand attacks if having blade in hands\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click\n",
L"Provides permanent camouflage\n",
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks if having empty hands\n", // 30
L"+%d%s chance to dodge hand to hand attacks if not having empty hands\n",
L"+%d%s chance to dodge attacks by melee blades\n",
L"Can perform spinning kick attack on weakened enemies to deal double damage\n",
L"You gain special animations for hand to hand combat\n",
L"No bonuses",
};
STR16 gzIMPNewCharacterTraitsHelpTexts[]=
{
L"A: No advantage.\nD: No disadvantage.",
L"A: Has better performance when couple of mercs are nearby.\nD: Gains no morale when no other merc is nearby.",
L"A: Has better performance when no other merc is nearby.\nD: Gains no morale when in a group.",
L"A: His morale sinks a little slower and grows faster than normal.\nD: Has lesser chance to detect traps and mines.",
L"A: Has bonus on training militia and is better at communication with people.\nD: Gains no morale for actions of other mercs.",
L"A: Slightly faster learning when assigned on practicing or as a student.\nD: Has lesser suppression and fear resistance.",
L"A: His energy goes down a bit slower except on assignments as doctor, repairman, militia trainer or if learning certain skills.\nD: His wisdom, leadership, explosives, mechanical and medical skills improve slightly slower.",
L"A: Has slightly better chance to hit on burst/autofire and inflicts slightly bigger damage in close combat\n Gains a little more morale for killing.\nD: Has penalty for actions which needs patience like repairing items, picking locks, removing traps, doctoring, training militia.",
L"A: Has bonus for actions which needs patience like repairing items, picking locks, removing traps, doctoring and training militia.\nD: His interrupts chance is slightly lowered.",
L"A: Incresed resistance to suppression and fear.\n Morale loss for taking damage and companions deaths is lower for him.\nD: Can be hit easier and enemy penalty for moving target is lesser in his case.",
L"A: He gains morale when on non-combat assignments (except training militia).\nD: Gains no morale for killing.",
L"A: Has bigger chance for inflicting stat loss and can inflict special painful wounds when able to\n Gains bonus morale for inflicting stat loss.\nD: Has penalty for communication with people and his morale sinks faster if not fighting.",
L"A: Has better performance when there are some mercs of opposite gender nearby.\nD: Morale of other mercs of the same gender grows slower if nearby.",
};
STR16 gzIMPDisabilitiesHelpTexts[]=
{
L"No effects.",
L"Has problems with breathing and reduced overall performance if in tropical or desert sectors.",
L"Can suffer panic attack if left alone in certain situations.",
L"His overall performance is reduced if underground.",
L"If trying to swim he can easily drown.",
L"A look at large insects can make a big problems\nand being in tropical sectors also reduce his performance a bit.",
L"Sometimes forgets what orders he got and therefore loses some APs if in combat.",
L"He can go psycho and shoot like mad once per a while\nand can lose morale if unable to do that with given weapon.",
};
STR16 gzIMPProfileCostText[]=
{
L"The profile cost is %d$. Do you authorize the payment? ",
};
STR16 zGioNewTraitsImpossibleText[]=
{
L"You cannot choose the New Trait System with PROFEX utility deactivated. Check your JA2_Options.ini for entry: READ_PROFILE_DATA_FROM_XML.",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//@@@: New string as of March 3, 2000.
STR16 gzIronManModeWarningText[]=
{
+40 -1
View File
@@ -1,4 +1,4 @@
#ifndef _JA25ENGLISHTEXT__H_
#ifndef _JA25ENGLISHTEXT__H_
#define _JA25ENGLISHTEXT__H_
@@ -33,6 +33,45 @@ enum
extern STR16 zNewTacticalMessages[];
extern STR16 gzIMPSkillTraitsText[];
////////////////////////////////////////////////////////
// added by SANDRO
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 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 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
extern STR16 gzIMPNewCharacterTraitsHelpTexts[];
extern STR16 gzIMPDisabilitiesHelpTexts[];
extern STR16 gzIMPProfileCostText[];
extern STR16 zGioNewTraitsImpossibleText[];
///////////////////////////////////////////////////////
enum
{
IMM__IRON_MAN_MODE_WARNING_TEXT,
+391 -1
View File
@@ -1,4 +1,4 @@
#pragma setlocale("FRENCH")
//#pragma setlocale("FRENCH")
#ifdef PRECOMPILEDHEADERS
#include "Utils All.h"
#include "_Ja25Frenchtext.h"
@@ -44,6 +44,8 @@ STR16 zNewTacticalMessages[]=
L"Pour pouvoir utiliser l'éditeur, veuillez choisir une autre campagne que celle par defaut.", ///@@new
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - New STOMP laptop strings
//these strings match up with the defines in IMP Skill trait.cpp
STR16 gzIMPSkillTraitsText[]=
{
@@ -64,7 +66,395 @@ STR16 gzIMPSkillTraitsText[]=
L"aucune",
L"Spécialtés I.M.P.",
L"(Expert)",
};
//added another set of skill texts for new major traits
STR16 gzIMPSkillTraitsTextNewMajor[]=
{
L"Auto Weapons",
L"Heavy Weapons",
L"Marksman",
L"Hunter",
L"Gunslinger",
L"Hand to Hand",
L"Deputy",
L"Technician",
L"Paramedic",
L"None",
L"I.M.P. Major Traits",
// second names
L"Machinegunner",
L"Bombardier",
L"Sniper",
L"Ranger",
L"Gunfighter",
L"Martial Arts",
L"Squadleader",
L"Engineer",
L"Doctor",
};
//added another set of skill texts for new minor traits
STR16 gzIMPSkillTraitsTextNewMinor[]=
{
L"Ambidextrous",
L"Melee",
L"Throwing",
L"Night Ops",
L"Stealthy",
L"Athletics",
L"Bodybuilding",
L"Demolitions",
L"Teaching",
L"Scouting",
L"None",
L"I.M.P. Minor Traits",
};
//these texts are for help popup windows, describing trait properties
STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]=
{
L"+%d%s Chance to Hit with Assault Rifles\n",
L"+%d%s Chance to Hit with SMGs\n",
L"+%d%s Chance to Hit with LMGs\n",
L"-%d%s APs needed to fire with LMGs\n",
L"-%d%s APs needed to ready light machine guns\n",
L"Auto fire/burst chance to hit penalty is reduced by %d%s\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
};
STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]=
{
L"-%d%s APs needed to fire grenade launchers\n",
L"-%d%s APs needed to fire rocket launchers\n",
L"+%d%s chance to hit with grenade launchers\n",
L"+%d%s chance to hit with rocket launchers\n",
L"-%d%s APs needed to fire mortar\n",
L"Reduce penalty for mortar CtH by %d%s\n",
L"+%d%s damage to tanks with heavy weapons, grenades and explosives\n",
L"+%d%s damage to other targets with heavy weapons\n",
};
STR16 gzIMPMajorTraitsHelpTextsSniper[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Sniper Rifles\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click (except for handguns)\n",
L"+%d%s damage on shot",
L" plus",
L" per every aim click",
L" after first",
L" after second",
L" after third",
L" after fourth",
L" after fifth",
L" after sixth",
L" after seventh",
L"-%d%s APs needed to chamber a round with bolt-action rifles \n",
L"Adds one more aim click for rifle-type guns\n",
L"Adds %d more aim clicks for rifle-type guns\n",
};
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Shotguns\n",
L"-%d%s APs needed to pump Shotguns\n",
L"+%d%s group travelling speed between sectors if traveling by foot\n",
L"+%d%s group travelling speed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
L"-%d%s APs needed to fire with pistols and revolvers\n",
L"+%d%s effective range with pistols and revolvers\n",
L"+%d%s chance to hit with pistols and revolvers\n",
L"+%d%s chance to hit with machine pistols",
L" (on single shots only)",
L"+%d%s aiming bonus per click with pistols, machine pistols and revolvers\n",
L"-%d%s APs needed to raise pistols and revolvers\n",
L"-%d%s APs needed to reload pistols, machine pistols and revolvers\n",
L"Adds %d more aim click for pistols, machine pistols and revolvers\n",
L"Adds %d more aim clicks for pistols, machine pistols and revolvers\n",
};
STR16 gzIMPMajorTraitsHelpTextsMartialArts[]=
{
L"-%d%s AP cost of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s chance to hit with hand to hand attacks with bare hands\n",
L"+%d%s chance to hit with hand to hand attacks with brass knuckles\n",
L"+%d%s damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s breath damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"Enemy knocked out due to your HtH attacks takes slightly longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes much longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes very long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes extremely long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes long hours to recuperate\n",
L"Enemy knocked out due to your HtH attacks probably never stand up\n",
L"Focused (aimed) punch deals +%d%s more damage\n",
L"Your special spinning kick deals +%d%s more damage\n",
L"+%d%s change to dodge hand to hand attacks\n",
L"+%d%s on top chance to dodge HtH attacks with bare hands",
L" or brass knuckles",
L" (+%d%s with brass knuckles)",
L"+%d%s on top chance to dodge HtH attacks with brass knuckles\n",
L"+%d%s chance to dodge attacks by any melee weapon\n",
L"-%d%s APs needed to steal weapon from enemy hands\n",
L"-%d%s APs needed to change state (stand, crouch, lie down), turn around, climb on/off roof and jump obstacles\n",
L"-%d%s APs needed to change state (stand, crouch, lie down)\n",
L"-%d%s APs needed to turn around\n",
L"-%d%s APs needed to climb on/off roof and jump obstacles\n",
L"+%d%s chance to kick doors\n",
L"You gain special animations for hand to hand combat\n",
};
STR16 gzIMPMajorTraitsHelpTextsSquadleader[]=
{
L"+%d%s APs per round of other mercs in vicinity\n",
L"+%d effective exp level of other mercs in vicinity, which have lesser level than the %s\n",
L"+%d effective exp level to count as a standby when counting friends' bonus for suppression\n",
L"+%d%s total suppression tolerance of other mercs in vicinity and %s himself\n",
L"+%d morale gain of other mercs in vicinity\n",
L"-%d morale loss of other mercs in vicinity\n",
L"The vicinity for bonuses is %d tiles",
L" (%d tiles with extended ears)",
L"(Max simultaneous bonuses for one soldier is %d)\n",
L"+%d%s fear resistence of %s\n",
L"Drawback: %dx morale loss for %s's death for all other mercs\n",
};
STR16 gzIMPMajorTraitsHelpTextsTechnician[]=
{
L"+%d%s to repairing speed\n",
L"+%d%s to lockpicking (normal/electronic locks)\n",
L"+%d%s to disarming electronic traps\n",
L"+%d%s to attaching special items and combining things\n",
L"+%d%s to unjamming a gun in combat\n",
L"Reduce penalty to repair electronic items by %d%s\n",
L"Increased chance to detect traps and mines (+%d detect level)\n",
L"+%d%s CtH of robot controlled by the %s\n",
L"%s trait grants you the ability to repair the robot\n",
L"Reduced penalty to repair speed of the robot by %d%s\n",
};
STR16 gzIMPMajorTraitsHelpTextsDoctor[]=
{
L"Has ability to make surgical intervention by using medical bag on wounded soldier\n",
L"Surgery instantly returns %d%s of lost health back.",
L" (This drains the medical bag a lot.)",
L"Can heal lost stats (from critical hits) by the",
L" surgery or",
L" doctor assignment.\n",
L"+%d%s effectiveness on doctor-patient assignment\n",
L"+%d%s bandaging speed\n",
L"+%d%s natural regeneration speed of all soldiers in the same sector",
L" (max %d these bonuses per sector)",
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]=
{
L"Reduce penalty to shoot dual weapons by %d%s\n",
L"+%d%s speed of reloading guns with magazines\n",
L"+%d%s speed of reloading guns with loose rounds\n",
L"-%d%s APs needed to pickup items\n",
L"-%d%s APs needed to work backpack\n",
L"-%d%s APs needed to handle doors\n",
L"-%d%s APs needed to plant/remove bombs and mines\n",
L"-%d%s APs needed to attach items\n",
};
STR16 gzIMPMinorTraitsHelpTextsMelee[]=
{
L"-%d%s APs needed to attack by blades\n",
L"+%d%s chance to hit with blades\n",
L"+%d%s chance to hit with blunt melee weapons\n",
L"+%d%s damage of blades\n",
L"+%d%s damage of blunt melee weapons\n",
L"Aimed attack by any melee weapon deals +%d%s damage\n",
L"+%d%s chance to dodge attack by melee blades\n",
L"+%d%s on top chance to dodge melee blades if having a blade in hands\n",
L"+%d%s chance to dodge attack by blunt melee weapons\n",
L"+%d%s on top chance to dodge blunt melee weapons if having a blade in hands\n",
};
STR16 gzIMPMinorTraitsHelpTextsThrowing[]=
{
L"-%d%s basic APs needed to throw blades\n",
L"+%d%s max range when throwing blades\n",
L"+%d%s chance to hit when throwing blades\n",
L"+%d%s chance to hit when throwing blades per aim click\n",
L"+%d%s damage of throwing blades\n",
L"+%d%s damage of throwing blades per aim click\n",
L"+%d%s chance to inflict critical hit by throwing blade if not seen or heard\n",
L"+%d critical hit by throwing blade multiplier\n",
L"Adds %d more aim click for throwing blades\n",
L"Adds %d more aim clicks for throwing blades\n",
};
STR16 gzIMPMinorTraitsHelpTextsNightOps[]=
{
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
};
STR16 gzIMPMinorTraitsHelpTextsStealthy[]=
{
L"-%d%s APs needed to move quietly\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Reduced cover penalty for movement by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsAthletics[]=
{
L"-%d%s APs needed for moving (running, walking, swatting, crawling, swimming, etc.)\n",
L"-%d%s energy spent for movement, roof-climbing, obstacle-jumping, swimming, etc.\n",
};
STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]=
{
L"Has %d%s damage resistance\n",
L"+%d%s effective strength for carrying weight capacity \n",
L"Reduced energy lost when hit by HtH attack by %d%s\n",
L"Increased damage needed to fall down if hit to legs by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsDemolitions[]=
{
L"-%d%s APs needed to throw grenades\n",
L"+%d%s max range when throwing grenades\n",
L"+%d%s chance to hit when throwing grenades\n",
L"+%d%s damage of set bombs and mines\n",
L"+%d%s to attaching detonators check\n",
L"+%d%s to planting/removing bombs check\n",
L"Decreases chance enemy will detect your bombs and mines (+%d bomb level)\n",
L"Increased chance shaped charge will open the doors (damage multiplied by %d)\n",
};
STR16 gzIMPMinorTraitsHelpTextsTeaching[]=
{
L"+%d%s bonus to train militia\n",
L"+%d%s bonus to effective leadership for determining militia training\n",
L"+%d%s bonus to teaching other mercs\n",
L"Skill value counts to be +%d higher for being able to teach this skill to other mercs\n",
L"+%d%s bonus to train stats through self-practising assignment\n",
};
STR16 gzIMPMinorTraitsHelpTextsScouting[]=
{
L"+%d to effective sight range with scopes on weapons\n",
L"+%d to effective sight range with binoculars (and scopes separated from weapons)\n",
L"-%d tunnel vision with binoculars (and scopes separated from weapons)\n",
L"If in sector, adjacent sectors will show exact number of enemies\n",
L"If in sector, adjacent sectors will show presence of enemies if any\n",
L"Prevents the enemy to ambush your squad\n",
L"Prevents the bloodcats to ambush your squad\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPOldSkillTraitsHelpTexts[]=
{
L"+%d%s bonus to lockpicking\n", // 0
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks\n",
L"Eliminates the penalty to repair and handle\nelectronic things (locks, traps, rem. detonators, robot, etc.)\n",
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
L"+%d%s max range when throwing anything\n", // 10
L"+%d%s chance to hit when throwing anything\n",
L"+%d%s chance to instantly kill by throwing knife if not seen or heard\n",
L"+%d%s bonus to train militia and instruct other mercs\n",
L"+%d%s effective leadership for militia training calculations\n",
L"+%d%s chance to hit with rocket/greande launchers and mortar\n",
L"Auto fire/burst chance to hit penalty is divided by %d\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Eliminates the CtH penalty for second hand when firing two weapons at once\n", // 20
L"+%d%s chance to hit with melee blades\n",
L"+%d%s chance to dodge attacks by melee blades if having blade in hands\n",
L"+%d%s chance to dodge attacks by melee blades if having anything else in hands\n",
L"+%d%s chance to dodge hand to hand attacks if having blade in hands\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click\n",
L"Provides permanent camouflage\n",
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks if having empty hands\n", // 30
L"+%d%s chance to dodge hand to hand attacks if not having empty hands\n",
L"+%d%s chance to dodge attacks by melee blades\n",
L"Can perform spinning kick attack on weakened enemies to deal double damage\n",
L"You gain special animations for hand to hand combat\n",
L"No bonuses",
};
STR16 gzIMPNewCharacterTraitsHelpTexts[]=
{
L"A: No advantage.\nD: No disadvantage.",
L"A: Has better performance when couple of mercs are nearby.\nD: Gains no morale when no other merc is nearby.",
L"A: Has better performance when no other merc is nearby.\nD: Gains no morale when in a group.",
L"A: His morale sinks a little slower and grows faster than normal.\nD: Has lesser chance to detect traps and mines.",
L"A: Has bonus on training militia and is better at communication with people.\nD: Gains no morale for actions of other mercs.",
L"A: Slightly faster learning when assigned on practicing or as a student.\nD: Has lesser suppression and fear resistance.",
L"A: His energy goes down a bit slower except on assignments as doctor, repairman, militia trainer or if learning certain skills.\nD: His wisdom, leadership, explosives, mechanical and medical skills improve slightly slower.",
L"A: Has slightly better chance to hit on burst/autofire and inflicts slightly bigger damage in close combat\n Gains a little more morale for killing.\nD: Has penalty for actions which needs patience like repairing items, picking locks, removing traps, doctoring, training militia.",
L"A: Has bonus for actions which needs patience like repairing items, picking locks, removing traps, doctoring and training militia.\nD: His interrupts chance is slightly lowered.",
L"A: Incresed resistance to suppression and fear.\n Morale loss for taking damage and companions deaths is lower for him.\nD: Can be hit easier and enemy penalty for moving target is lesser in his case.",
L"A: He gains morale when on non-combat assignments (except training militia).\nD: Gains no morale for killing.",
L"A: Has bigger chance for inflicting stat loss and can inflict special painful wounds when able to\n Gains bonus morale for inflicting stat loss.\nD: Has penalty for communication with people and his morale sinks faster if not fighting.",
L"A: Has better performance when there are some mercs of opposite gender nearby.\nD: Morale of other mercs of the same gender grows slower if nearby.",
};
STR16 gzIMPDisabilitiesHelpTexts[]=
{
L"No effects.",
L"Has problems with breathing and reduced overall performance if in tropical or desert sectors.",
L"Can suffer panic attack if left alone in certain situations.",
L"His overall performance is reduced if underground.",
L"If trying to swim he can easily drown.",
L"A look at large insects can make a big problems\nand being in tropical sectors also reduce his performance a bit.",
L"Sometimes forgets what orders he got and therefore loses some APs if in combat.",
L"He can go psycho and shoot like mad once per a while\nand can lose morale if unable to do that with given weapon.",
};
STR16 gzIMPProfileCostText[]=
{
L"The profile cost is %d$. Do you authorize the payment? ",
};
STR16 zGioNewTraitsImpossibleText[]=
{
L"You cannot choose the New Trait System with PROFEX utility deactivated. Check your JA2_Options.ini for entry: READ_PROFILE_DATA_FROM_XML.",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//@@@: New string as of March 3, 2000.
STR16 gzIronManModeWarningText[]=
{
+39
View File
@@ -32,6 +32,45 @@ enum
extern STR16 zNewTacticalMessages[];
extern STR16 gzIMPSkillTraitsText[];
////////////////////////////////////////////////////////
// added by SANDRO
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 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 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
extern STR16 gzIMPNewCharacterTraitsHelpTexts[];
extern STR16 gzIMPDisabilitiesHelpTexts[];
extern STR16 gzIMPProfileCostText[];
extern STR16 zGioNewTraitsImpossibleText[];
///////////////////////////////////////////////////////
enum
{
IMM__IRON_MAN_MODE_WARNING_TEXT,
+399 -6
View File
@@ -1,11 +1,13 @@
#pragma setlocale("GERMAN")
//#pragma setlocale("GERMAN")
#ifdef PRECOMPILEDHEADERS
#include "Utils All.h"
#include "_Ja25GermanText.h"
#else
#include "Language Defines.h"
#include "text.h"
#include "Fileman.h"
#ifdef GERMAN
#include "text.h"
#include "Fileman.h"
#endif
#endif
//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible
@@ -42,6 +44,8 @@ STR16 zNewTacticalMessages[]=
L"Um den Editor zu benutzen, müssen Sie eine andere als die Standardkampgane auswählen.",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - New STOMP laptop strings
//these strings match up with the defines in IMP Skill trait.cpp
STR16 gzIMPSkillTraitsText[]=
{
@@ -52,7 +56,7 @@ STR16 gzIMPSkillTraitsText[]=
L"Werfen",
L"Lehren",
L"Schwere Waffen",
L"Automatische Waffen",
L"Autom. Waffen",
L"Schleichen",
L"Beidhändig geschickt",
L"Messer",
@@ -61,13 +65,402 @@ STR16 gzIMPSkillTraitsText[]=
L"Kampfsport",
L"Keine",
L"B.S.E. Persönlichkeiten",
L"B.S.E. - Spezialisierungen",
L"(Experte)",
};
//added another set of skill texts for new major traits
STR16 gzIMPSkillTraitsTextNewMajor[]=
{
L"MG-Schütze", //LOOTF - Alle Namen sehr gewagt, aber wenigstens volldeutsch.
L"Grenadier" ,
L"Präzisionsschütze",
L"Pfadfinder",
L"Pistolenschütze", //Option: Pistolenschütze
L"Faustkämpfer",
L"Gruppenführer", //GrpFhr und ZgFhr sind scheiße, aber mir fällt ohne Dienstgrade nüscht ein
L"Mechaniker", //Option: Techniker
L"Sanitäter", //Option: Rettungsassistent
L"Nichts",
L"B.S.E. Hauptfertigkeiten",
// second names
L"MG-Veteran", //Option "MG-Veteran"?
L"Artillerist",
L"Scharfschütze",
L"Jäger", //"Ranger" ist toll, aber nicht wirklich deutsch
L"Revolverheld",
L"Kampfsportler", //Kung-Fu-Typ ohne Nennung von Kung-Fu oder Wu-Shu oder derart Zeug, PS: KampfSPORTLER ist kacke
L"Zugführer",
L"Ingenieur",
L"Arzt",
};
//added another set of skill texts for new minor traits
STR16 gzIMPSkillTraitsTextNewMinor[]=
{
L"Beidhänder", // alt. "Beidhändig geschickt"
L"Messerkämpfer", // alt. "Hieb- und Stichwaffen" //gesucht: Begriff für Nahkampfwaffenkämpfer
L"Messerwerfer", // alt. "Wurfwaffen"
L"Nachtmensch", // alt. "Nachteinsatz"
L"Schleicher", // alt. "Schleichen"
L"Läufer", // alt. "Athletisch"
L"Kraftsportler", // alt. "Bodybuilding"
L"Sprengmeister", // alt. "Kampfmittel"
L"Ausbilder", // alt. "Lehren"
L"Aufklärer", // alt. "Spähen"
L"Keine",
L"B.S.E. Nebenfertigkeiten",
};
//these texts are for help popup windows, describing trait properties
STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]=
{
L"+%d%s Trefferchance mit Sturmgewehren\n",
L"+%d%s Trefferchance mit Maschinenpistolen\n",
L"+%d%s Trefferchance mit Maschinengewehren\n",
L"-%d%s APs benötigt für MG-Feuerstöße (Burst/Auto) abzugeben\n",
L"-%d%s APs benötigt um Maschinengewehre auszurichten\n",
L"Trefferratenabzug bei Feuerstößen reduziert um %d%s\n",
L"Reduzierte Chance bei Feuerstößen ungewollt mehr Schüsse abzugeben\n",
};
STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]=
{
L"-%d%s APs benötigt um Granatwerfer abzufeuern\n",
L"-%d%s APs benötigt um Raketenwerfer abzufeuern\n",
L"+%d%s Trefferchance mit Granatwerfern\n",
L"+%d%s Trefferchance mit Raketenwerfern\n",
L"-%d%s APs benötigt für den Abschuss von Mörsergranaten\n",
L"Trefferchancenreduktion für Mörser gesenkt um %d%s\n",
L"+%d%s Schaden an Panzern mit schweren Waffen, Granaten und Bomben\n",
L"+%d%s schaden an allen anderen Zielen mit schweren Waffen\n",
};
STR16 gzIMPMajorTraitsHelpTextsSniper[]=
{
L"+%d%s Trefferchance mit Gewehren\n",
L"+%d%s Trefferchance mit Scharfschützengewehren\n",
L"-%d%s effektive Reichweite zum Ziel mit allen Waffen\n",
L"+%d%s Zielbonus pro Zielerfassungs-Klick (außer für Faustfeuerwaffen)\n",
L"+%d%s Schaden pro Schuss",
L" plus",
L" für jeden Zielerfassungs-Klick",
L" nach dem ersten",
L" nach dem zweiten",
L" nach dem dritten",
L" nach dem vierten",
L" nach dem fünften",
L" nach dem sechsten",
L" nach dem siebenten",
L"-%d%s APs benötigt um ein Repetiergewehr erneut fertigzuladen.\n",
L"Gibt einen weiteren Ziel-Klick für gewehrartige Waffen\n",
L"Gibt weitere %d Ziel-Klicks für gewehrartige Waffen\n",
};
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
{
L"+%d%s Trefferchance mit Gewehren\n",
L"+%d%s Trefferchance mit Schrotflinten\n",
L"-%d%s APs gebraucht um Schrotflinten zu repetieren\n",
L"+%d%s Marschgeschwindigkeit der Gruppe zwischen Sektoren zu Fuß\n",
L"+%d%s Marschgeschwindigkeit der Gruppe zwischen Sektoren bei Benutzung von Fahrzeugen (außer dem Helikopter)\n",
L"-%d%s weniger Energieverlust beim Reisen zwischen Sektoren\n",
L"-%d%s Einfluss durch schlechtes Wetter\n",
L"+%d%s Tarnungs-Effektivität\n",
L"-%d%s Abnutzung von Gesichtstarnung durch Wasser oder Zeit\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
L"-%d%s APs benötigt um mit Pistolen oder Revolvern zu schießen\n",
L"+%d%s effektive Reichweite mit Pistolen und Revolvern\n",
L"+%d%s Trefferchance mit mit Pistolen und Revolvern\n",
L"+%d%s Trefferchance mit vollautomatischen Pistolen",
L" (nur bei Einzelfeuer)",
L"+%d%s Zielbonus pro Klick mit Pistolen, vollautomatischen Pistolen und Revolvern\n",
L"-%d%s APs benötigt um Pistolen und Revolver in Vorhalte zu bringe\n",
L"-%d%s APs benötigt um Pistolen, vollautomatische Pistolen und Revolver nachzuladen\n",
L"Gibt für Pistolen, vollautomatische Pistolen und Revolver einen weiteren Zielklick\n",
L"%d weiteren Zielklick für Pistolen, vollautomatische Pistolen und Revolver\n",
};
STR16 gzIMPMajorTraitsHelpTextsMartialArts[]=
{
L"-%d%s AP-Kosten für den Faustkampf (bloße Hände oder mit Schlagring)\n",
L"+%d%s Trefferchance bei Nahkampfangriffen mit bloßen Händen\n",
L"+%d%s Trefferchance bei Nahkampfangriffen mit dem Schlagring\n",
L"+%d%s Schaden im Faustkampf (bloße Hände oder mit Schlagring)\n",
L"+%d%s Ausdauerschaden im Faustkampf (bloße Hände oder mit Schlagring)\n",
L"Ein im Nahkampf niedergestreckter Gegner braucht etwas länger um sich zu erholen\n",
L"Ein im Nahkampf niedergestreckter Gegner braucht länger um sich zu erholen\n",
L"Ein im Nahkampf niedergestreckter Gegner braucht deutlich länger um sich zu erholen\n",
L"Ein im Nahkampf niedergestreckter Gegner braucht viel länger um sich zu erholen\n",
L"Ein im Nahkampf niedergestreckter Gegner braucht sehr viel länger um sich zu erholen\n",
L"Ein im Nahkampf niedergestreckter Gegner schläft wie ein Baby bevor er sich erholt\n",
L"Ein im Nahkampf niedergestreckter Gegner steht vermutlich erstmal gar nicht mehr auf\n",
L"Ein gezielter Schlag richtet +%d%s mehr Schaden an\n",
L"Ein gezielter Tornadotritt richtet +%d%s mehr Schaden an\n",
L"+%d%s Chance, Schlägen und Tritten auszuweichen\n",
L"Dazu +%d%s Chance mit freien Händen",
L" oder nur mit Schlagring",
L" (+%d%s mit Schlagring)",
L"+Dazu %d%s Chance, Schlägen und Tritten mit ausgerüstetem Schlagring auszuweichen\n",
L"+%d%s Chance einem Angriff mit einer beliebigen Nahkampfwaffe auszuweichen\n",
L"-%d%s APs benötigt um einen Gegner zu entwaffnen\n",
L"-%d%s APs benötigt um die Körperhaltung zu ändern, sich umzudrehen, auf oder von Dächern zu klettern und Hindernisse zu überspringen\n",
L"-%d%s APs benötigt um die Körperhaltung zu ändern (stehen, ducken, liegen)\n",
L"-%d%s APs benötigt um sich umzudrehen\n",
L"-%d%s APs benötigt um auf oder von Dächern zu klettern und Hindernisse zu überspringen\n",
L"+%d%s Chance eine Tür erfolgreich einzutreten\n",
L"Sie erhalten besondere Kung-Fu-Animationen für den Nahkampf\n",
};
STR16 gzIMPMajorTraitsHelpTextsSquadleader[]=
{
L"+%d%s APs pro Runde für die umgebenden Söldner innerhalb des Einflussbereichs\n",
L"+%d effektiven Erfahrungslevel für umgebende Söldner im Einflussbereich mit weniger Erfahrungsgrad als der %s\n",
L"+%d auf den Erfahrungslevel beim Berechnen des Gruppeneffekts auf Unterdrückungsfeuer\n",
L"+%d%s Resistenz gegen Unterdrückungsfeuer für jeden Söldner im Einflussbereich, auch den %s\n",
L"+%d Moralgewinn für umgebende Söldner innerhalb des Einflussbereichs\n",
L"-%d Moralverlust für umgebende Söldner innerhalb des Einflussbereichs\n",
L"Der Einflussbereich hat einen Radius von %d Feldern",
L" (%d Felder mit Kopfhörer-Funkgerät)",
L"(Maximal auf einen Söldner wirkende Boni: %d )\n",
L"+%d%s Resistenz gegen Angst für %s\n",
L"Nachteil: %dx Moralverlust bei Tod des %ss für alle anderen Söldner\n",
};
STR16 gzIMPMajorTraitsHelpTextsTechnician[]=
{
L"+%d%s schnellere Reparaturen\n",
L"+%d%s mehr Erfolg beim Knacken normaler und elektronischer Schlösser\n",
L"+%d%s mehr Erfolg beim Entschärfen elektronischer Fallen\n",
L"+%d%s mehr Erfolg beim Anbringen besonderer Gegenstände und Verbinden von Gerätschaften\n",
L"+%d%s mehr Erfolg beim Beheben von Waffenstörungen im Gefecht\n",
L"Der Malus beim Reparieren elektronischer Gegenstände wird um %d%s gesenkt\n",
L"Erhöhte Chance, Fallen und Minen zu entdecken (+%d zum Erkennungslevel)\n",
L"+%d%s Trefferchance des Roboters, wenn vom %s gesteuert\n",
L"Der %s kann den Roboter reparieren\n",
L"%d%s Reduzierung des Geschwindigkeitsabzugs beim Reparieren des Roboters\n",
};
STR16 gzIMPMajorTraitsHelpTextsDoctor[]=
{
L"Kann chirurgisch operieren (Benutzung eines Arztkoffers auf einen verletzten Söldner)\n",
L"Die Operation stellt sofort %d%s der verlorenen Lebenspunkte wieder her.",
L" (Dieser Vorgang verbraucht einen Großteil des Arztkoffers.)",
L"Kann verlorene Attributpunkte (von kritischen Treffern) durch",
L" eine Operation oder",
L" den Auftrag 'Doktor' wiederherstellen.\n",
L"+%d%s bessere Heilungsrate beim Einsatz am Patienten\n",
L"+%d%s schnelleres Anlegen von Wundverbänden\n",
L"+%d%s natürliche Regenerationsrate aller Söldner im selben Sektor",
L" (maximal %d Instanzen dieses Bonus pro Sektor)",
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"Keine Boni",
};
STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]=
{
L"Die Ungenauigkeit beim Schießen mit zwei Waffen wird um %d%s reduziert\n",
L"+%d%s schnelleres Nachladen mit Magazinen\n",
L"+%d%s schnelleres Nachladen mit einzelnen Patronen\n",
L"-%d%s APs benötigt um Gegenstände aufzuheben\n",
L"-%d%s APs benötigt für die Handhabe des Rucksacks\n",
L"-%d%s APs benötigt um mit Türen zu interagieren\n",
L"-%d%s APs benötigt um Bomben und Minen zu legen oder zu entschärfen\n",
L"-%d%s APs needed to attach items\n",
};
STR16 gzIMPMinorTraitsHelpTextsMelee[]=
{
L"-%d%s APs benötigt für den Angriff mit Klingenwaffen\n",
L"+%d%s Trefferchance mit Klingenwaffen\n",
L"+%d%s Trefferchance mit Schlagwaffen\n",
L"+%d%s Schaden mit Klingenwaffen\n",
L"+%d%s Schaden mit Schlagwaffen\n",
L"Ein gezielter Hieb mit einer Nahkampfwaffe richtet %d%s mehr Schaden an\n",
L"+%d%s Chance Angriffen durch Klingenwaffen auszuweichen\n",
L"Dazu +%d%s Chance Klingenwaffen auszuweichen wenn man selber eine in der Hand hat\n",
L"+%d%s Chance Angriffen durch Schlagwaffen auszuweichen\n",
L"Dazu +%d%s Chance Schlagwaffen auszuweichen wenn man eine Klingenwaffe führt\n",
};
STR16 gzIMPMinorTraitsHelpTextsThrowing[]=
{
L"-%d%s Basis-APs benötigt für den Angriff mit Wurfwaffen\n",
L"+%d%s maximale Reichweite beim Einsatz von Wurfwaffen\n",
L"+%d%s Trefferchance mit Wurfwaffen\n",
L"+%d%s Trefferchance mit Wurfwaffen für jeden Ziel-Klick\n",
L"+%d%s Schaden geworfener Klingen\n",
L"+%d%s Schaden geworfener Klingen für jeden Ziel-Klick\n",
L"+%d%s Chance auf kritischen Treffer beim Angriff mit Wurfwaffen, falls das Ziel den Werfer nicht bemerkt hat\n",
L"+%d Multiplikator für kritische Treffer durch Wurfwaffen\n",
L"Gibt einen weiteren Zielklick beim Einsatz von Wurfwaffen\n",
L"Gibt %d weitere Zielklicks beim Einsatz von Wurfwaffen\n",
};
STR16 gzIMPMinorTraitsHelpTextsNightOps[]=
{
L"+%d zur effektiven Sichtweite im Dunkeln\n",
L"+%d zum allgemeinen effektiven Hörweite\n",
L"Dazu +%d zum effektive Hörweite in der Dunkelheit\n",
L"+%d zum Unterbrechungs-Modifikator in der Dunkelheit\n",
L"-%d weniger Schlafbedarf\n",
};
STR16 gzIMPMinorTraitsHelpTextsStealthy[]=
{
L"-%d%s APs zum Schleichen nötig\n",
L"+%d%s Chance beim Schleichen kein Geräusch zu erzeugen zu sein\n",
L"+%d%s Chance, 'unsichtbar' zu sein wenn man sich nicht verrät (schleichen)\n",
L"Der Abzug der berechneten Sichtdeckung beim Bewegen ist %d%s geringer\n",
};
STR16 gzIMPMinorTraitsHelpTextsAthletics[]=
{
L"-%d%s APs benötigt für Bewegung (rennen, aufrecht oder geduckt gehen, gleiten, schwimmen, usw.)\n",
L"-%d%s weniger Ausdauerverbrauch für für Bewegung, Dachklettern, Hindernisse Überwinden, usw.\n",
};
STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]=
{
L"Hat eine Schadensresistenz von %d%s\n",
L"+%d%s effektive Stärke für das Berechnen der maximalen Traglast\n",
L"%d%s weniger Energieverlust beim Erleiden von Schlägen und Tritten\n",
L"Fällt bei Beintreffern weniger leicht um durch um %d%s erhöhte Schadenstoleranz\n",
};
STR16 gzIMPMinorTraitsHelpTextsDemolitions[]=
{
L"-%d%s APs benötigt um Handgranaten und Ähnliches zu werfen\n",
L"+%d%s mehr Reichweite beim Werfen von Handgranaten und Ähnlichem\n",
L"+%d%s mehr Wurfgenauigkeit beim Einsatz von Handgranaten und Ähnlichem\n",
L"Gelegte Bomben und Minen sind +%d%s effizienter\n",
L"+%d%s mehr Erfolg beim Anbringen von Zündern an Sprengstoff\n",
L"+%d%s mehr Erfolg beim Schärfen und Entschärfen von Bomben\n",
L"Verringerte Chance, dass der Gegner eigene Bomben und Minen entdeckt (%d zum Bombenlevel)\n",
L"Erhöhter Erfolg beim Aufbrechen einer Tür mit einer Durchbruchladung (Schaden multipliziert mit %d)\n",
};
STR16 gzIMPMinorTraitsHelpTextsTeaching[]=
{
L"Bei der Ausbildung von Milizen +%d%s schneller\n",
L"Bei der Ausbildung von Milizen +%d%s Bonus zur effektiven Führungsfähigkeit\n",
L"Beim Ausbilden von Söldnern +%d%s schneller\n",
L"Beim Ausbilden von Söldnern +d% zum effektiven Fähigkeitslevel des Ausbilders\n",
L"Beim eigenständigen Lernen +%d%s schneller\n",
};
STR16 gzIMPMinorTraitsHelpTextsScouting[]=
{
L"+%d zur effektiven Sichtweite mit Zielfernrohren an Waffen\n",
L"+%d zur effektiven Sichtweite mit Doppelfernrohren und losen Zielfernrohren\n",
L"-%d Tunnelblick mit Doppelfernrohren und losen Zielfernrohren\n",
L"Auf der Weltkarte wird in angrenzenden Sektoren die genaue Feindstärke (Anzahl) bestimmt\n",
L"Auf der Weltkarte wird in angrenzenden Sektoren die Präsenz von vorhandenem Feind enthüllt\n",
L"Verhindert, dass der Feind die Gruppe in den Hinterhalt lockt\n",
L"Verhindert, das Umzingeln der Gruppe durch Bloodcats\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"Keine Boni",
};
STR16 gzIMPOldSkillTraitsHelpTexts[]=
{
L"+%d%s Bonus zum Schlösser Knacken\n", // 0
L"+%d%s Trefferchance im Faustkampf\n",
L"+%d%s Schaden im Faustkampf\n",
L"+%d%s Chance Schlägen auszuweichen\n",
L"Bei der Reparatur und Bedienung von Elektrotechnik\n(Schlösser, Fallen, Fernzünder, Roboter...) kein Abzug\n",
L"+%d zur effektiven Sichtweite im Dunkeln\n",
L"+%d zur allgemeinen effektiven Hörweite\n",
L"Dazu +%d zur effektiven Hörweite in der Dunkelheit\n",
L"+%d zum Unterbrechungsmodifikator in der Dunkelheit\n",
L"-%d weniger Schlafbedarf\n",
L"+%d%s maximale Reichweite beim Werfen\n", // 10
L"+%d%s Trefferchance beim Werfen\n",
L"+%d%s Chance auf sofortige Tötung mit Wurfmesser wenn unbemerkt\n",
L"+%d%s Bonus zum Trainieren von Milizen und anderen Söldnern\n",
L"+%d%s effektive Führungsfertigkeit beim Ausbilden von Milizen\n",
L"+%d%s Trefferchance mit Raketen-/Granatwerfern und Mörsern\n",
L"Trefferchancenabzug bei Dauerfeuer und Feuerstoß wird durch %d geteilt\n",
L"Das Verschießen von zu viel Munition bei Dauerfeuer wird unwahrscheinlicher\n",
L"+%d%s Chance sich leise zu bewegen\n",
L"+%d%s stealth (unsichtbar sein, wenn man sich nicht verrät)\n",
L"Beim Schießen mit zwei Waffen mit jeder so präzise wie mit nur einer\n", // 20
L"+%d%s Trefferchance mit Stichwaffen\n",
L"+%d%s Chance, Stichwaffen auszuweichen, wenn man selber eine führt\n",
L"+%d%s Chance, Stichwaffen auszuweichen, wenn man etwas anderes in der Hand hat\n",
L"+%d%s Chance Schlägen auszuweichen, wenn man eine Stichwaffe hält\n",
L"-%d%s effektive Reichweite zum Ziel mit allen Waffen\n",
L"+%d%s Bonus zum Zielen pro Mausklick\n",
L"Immer vollständig getarnt sein\n",
L"+%d%s Trefferchance im Faustkampf\n",
L"+%d%s Schaden im Faustkampf\n",
L"+%d%s Chance, Schläge mit leeren Händen zu blocken\n", // 30
L"+%d%s Chance, Schläge mit etwas in der Hand zu blocken\n",
L"+%d%s Chance, Stichwaffenangriffen auszuweichen\n",
L"Kann angeschlagenen Gegnern einen Tornadotritt verpassen, der doppelten Schaden anrichtet\n",
L"Sie erhalten besondere Animationen für den Faustkampf (etwas fernöstlicher)\n",
L"Keine Boni",
};
STR16 gzIMPNewCharacterTraitsHelpTexts[]=
{
L"V: Keine Vorteile.\nN: Keine Nachteile.",
L"V: Hat eine erhöhte Leistung im Verbund mit anderen Söldnern.\nN: Erhält keinen Moralzuwachs, wenn niemand in der Nähe ist.",
L"V: Hat eine erhöhte Leistung, wenn niemand in der Nähe ist.\nN: Erhält keinen Moralzuwachs im Verbund mit anderen Söldnern.",
L"V: Seine Moral sinkt etwas langsamer und steigt schneller.\nN: Hat weniger Chance, Fallen und Minen zu entdecken.",
L"V: Erhält Boni beim Ausbilden von Miliz und kann besser mit Menschen reden.\nN: Erhält keinen Moralzuwachs für Aktionen anderer Söldner.",
L"V: Lernt etwas schneller in Schulung durch sich selbst oder andere.\nN: Hat weniger Unterdrückungs- und Angstresistenz.",
L"V: Verbraucht etwas weniger Energie, außer bei Aufgaben in Medizin, Technik oder anspruchsvollen Ausbildung.\nN: Weisheit, Führungskraft, Sprengstoff-, Mechanik- und Medizinkenntnisse entwickeln sich bei ihm langsamer.",
L"V: Hat eine leicht erhöhte Trefferchance bei Feuerstößen und richtet etwas mehr Schaden im Nahkampf an.\n Erhält ein wenig mehr Moralzuwachs beim Töten.\nN: Ist schlechter bei Aufgaben, die Geduld erfordern, wie Reparatur, Schlossknacken, Fallen Entschärfen, Patientenbetreuung und Ausbildung von Miliz.",
L"V: Erhält Boni für Aufgaben mit Geduldsanspruch wie Reparatur, Schlossknacken, Fallen Entschärfen, Patientenbetreuung und Ausbildung von Miliz.\nN: Erhält weniger oft Unterbrechungen im Kampf.",
L"V: Erhöhte Resistenz gegenüber Unterdrückungsfeuer und Angst.\n Verliert weniger Moral beim Erleiden von Schaden oder dem Tod von Kameraden.\nN: Wird leichter getroffen, und kann seltener Feindfeuer durch schnelle Bewegung ausweichen.",
L"V: Erhält Moralzuwachs für Tätigkeiten außerhalb des Kämpfens (außer der Ausbildung von Milizkräften).\nN: Erhält keinerlei Moral beim Töten.",
L"V: Hat eine höhere Chance, Statusschäden anzurichten und kann besonders fiese Wunden austeilen.\n Erhält mehr Moral für erfolgreiche Statusschäden.\nN: Kann schlechter mit Leuten reden und seine Moral sinkt schneller, wenn er nicht kämpft.",
L"V: Hat eine erhöhte Leistung wenn Söldner des anderen Geschlechts in der Nähe sind.\nN: Die Moral anderer naher Söldner des gleichen Geschlechts steigt langsamer.",
};
STR16 gzIMPDisabilitiesHelpTexts[]=
{
L"Keine Auswirkungen.",
L"Hat Atemnot und allgemein schlechtere Leistung in tropischen und Wüstensektoren.",
L"Kann Panikattacken erleiden, wenn in gewissen Situationen auf sich gestellt.",
L"Zeigt geringere Leistung unter Tage (in Höhlen und Kellern).",
L"Kann beim Versuch zu schwimmen leicht ertrinken.",
L"Erträgt den Anblick großer Insekten nicht und\nzeigt verringerte Leistung in tropischen Sektoren.",
L"Vergisst manchmal seine Befehle und verliert dadurch im Kampf einen Teil seiner APs.",
L"Dreht im Umgang mit Waffen manchmal durch und gibt Dauerfeuer.\nIst ihm das mit seiner Waffe nicht möglich, kann das zu Moralabzügen führen.",
};
STR16 gzIMPProfileCostText[]=
{
L"Ein Profil kostet %d$. Genehmigen Sie die Zahlung? ",
};
STR16 zGioNewTraitsImpossibleText[]=
{
L"Sie können das neue Fertigkeitensystem nicht ohne aktivierte PROFEX-Utility benutzen. Suchen Sie in Ihrer JA2_Options.ini den Eintrag: READ_PROFILE_DATA_FROM_XML.",
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//@@@: New string as of March 3, 2000.
STR16 gzIronManModeWarningText[]=
{
L"Sie haben sich für den Ironman- Modus entschieden. Mit dieser Einstellung können Sie das Spiel nicht speichern, wenn Feinde im Sektor sind. Sind Sie sicher, dass Sie im Ironman- Modus spielen wollen?",
L"Sie haben sich für den Ironman-Modus entschieden. Mit dieser Einstellung können Sie das Spiel nicht speichern, wenn Feinde im Sektor sind. Sind Sie sicher, dass Sie im Ironman-Modus spielen wollen?",
};
STR16 gzDisplayCoverText[]=
+39
View File
@@ -33,6 +33,45 @@ enum
extern STR16 zNewTacticalMessages[];
extern STR16 gzIMPSkillTraitsText[];
////////////////////////////////////////////////////////
// added by SANDRO
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 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 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
extern STR16 gzIMPNewCharacterTraitsHelpTexts[];
extern STR16 gzIMPDisabilitiesHelpTexts[];
extern STR16 gzIMPProfileCostText[];
extern STR16 zGioNewTraitsImpossibleText[];
///////////////////////////////////////////////////////
enum
{
IMM__IRON_MAN_MODE_WARNING_TEXT,
+390 -1
View File
@@ -1,4 +1,4 @@
#pragma setlocale("ITALIAN")
//#pragma setlocale("ITALIAN")
#ifdef PRECOMPILEDHEADERS
#include "Utils All.h"
#include "_Ja25Italiantext.h"
@@ -44,6 +44,8 @@ STR16 zNewTacticalMessages[]=
L"Per usare l'editor, selezionare una campagna diversa da quella di default.",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - New STOMP laptop strings
//these strings match up with the defines in IMP Skill trait.cpp
STR16 gzIMPSkillTraitsText[]=
{
@@ -64,7 +66,394 @@ STR16 gzIMPSkillTraitsText[]=
L"Nessuna",
L"Specialità I.M.P.",
L"(Expert)",
};
//added another set of skill texts for new major traits
STR16 gzIMPSkillTraitsTextNewMajor[]=
{
L"Auto Weapons",
L"Heavy Weapons",
L"Marksman",
L"Hunter",
L"Gunslinger",
L"Hand to Hand",
L"Deputy",
L"Technician",
L"Paramedic",
L"None",
L"I.M.P. Major Traits",
// second names
L"Machinegunner",
L"Bombardier",
L"Sniper",
L"Ranger",
L"Gunfighter",
L"Martial Arts",
L"Squadleader",
L"Engineer",
L"Doctor",
};
//added another set of skill texts for new minor traits
STR16 gzIMPSkillTraitsTextNewMinor[]=
{
L"Ambidextrous",
L"Melee",
L"Throwing",
L"Night Ops",
L"Stealthy",
L"Athletics",
L"Bodybuilding",
L"Demolitions",
L"Teaching",
L"Scouting",
L"None",
L"I.M.P. Minor Traits",
};
//these texts are for help popup windows, describing trait properties
STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]=
{
L"+%d%s Chance to Hit with Assault Rifles\n",
L"+%d%s Chance to Hit with SMGs\n",
L"+%d%s Chance to Hit with LMGs\n",
L"-%d%s APs needed to fire with LMGs\n",
L"-%d%s APs needed to ready light machine guns\n",
L"Auto fire/burst chance to hit penalty is reduced by %d%s\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
};
STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]=
{
L"-%d%s APs needed to fire grenade launchers\n",
L"-%d%s APs needed to fire rocket launchers\n",
L"+%d%s chance to hit with grenade launchers\n",
L"+%d%s chance to hit with rocket launchers\n",
L"-%d%s APs needed to fire mortar\n",
L"Reduce penalty for mortar CtH by %d%s\n",
L"+%d%s damage to tanks with heavy weapons, grenades and explosives\n",
L"+%d%s damage to other targets with heavy weapons\n",
};
STR16 gzIMPMajorTraitsHelpTextsSniper[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Sniper Rifles\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click (except for handguns)\n",
L"+%d%s damage on shot",
L" plus",
L" per every aim click",
L" after first",
L" after second",
L" after third",
L" after fourth",
L" after fifth",
L" after sixth",
L" after seventh",
L"-%d%s APs needed to chamber a round with bolt-action rifles \n",
L"Adds one more aim click for rifle-type guns\n",
L"Adds %d more aim clicks for rifle-type guns\n",
};
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Shotguns\n",
L"-%d%s APs needed to pump Shotguns\n",
L"+%d%s group travelling speed between sectors if traveling by foot\n",
L"+%d%s group travelling speed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
L"-%d%s APs needed to fire with pistols and revolvers\n",
L"+%d%s effective range with pistols and revolvers\n",
L"+%d%s chance to hit with pistols and revolvers\n",
L"+%d%s chance to hit with machine pistols",
L" (on single shots only)",
L"+%d%s aiming bonus per click with pistols, machine pistols and revolvers\n",
L"-%d%s APs needed to raise pistols and revolvers\n",
L"-%d%s APs needed to reload pistols, machine pistols and revolvers\n",
L"Adds %d more aim click for pistols, machine pistols and revolvers\n",
L"Adds %d more aim clicks for pistols, machine pistols and revolvers\n",
};
STR16 gzIMPMajorTraitsHelpTextsMartialArts[]=
{
L"-%d%s AP cost of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s chance to hit with hand to hand attacks with bare hands\n",
L"+%d%s chance to hit with hand to hand attacks with brass knuckles\n",
L"+%d%s damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s breath damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"Enemy knocked out due to your HtH attacks takes slightly longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes much longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes very long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes extremely long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes long hours to recuperate\n",
L"Enemy knocked out due to your HtH attacks probably never stand up\n",
L"Focused (aimed) punch deals +%d%s more damage\n",
L"Your special spinning kick deals +%d%s more damage\n",
L"+%d%s change to dodge hand to hand attacks\n",
L"+%d%s on top chance to dodge HtH attacks with bare hands",
L" or brass knuckles",
L" (+%d%s with brass knuckles)",
L"+%d%s on top chance to dodge HtH attacks with brass knuckles\n",
L"+%d%s chance to dodge attacks by any melee weapon\n",
L"-%d%s APs needed to steal weapon from enemy hands\n",
L"-%d%s APs needed to change state (stand, crouch, lie down), turn around, climb on/off roof and jump obstacles\n",
L"-%d%s APs needed to change state (stand, crouch, lie down)\n",
L"-%d%s APs needed to turn around\n",
L"-%d%s APs needed to climb on/off roof and jump obstacles\n",
L"+%d%s chance to kick doors\n",
L"You gain special animations for hand to hand combat\n",
};
STR16 gzIMPMajorTraitsHelpTextsSquadleader[]=
{
L"+%d%s APs per round of other mercs in vicinity\n",
L"+%d effective exp level of other mercs in vicinity, which have lesser level than the %s\n",
L"+%d effective exp level to count as a standby when counting friends' bonus for suppression\n",
L"+%d%s total suppression tolerance of other mercs in vicinity and %s himself\n",
L"+%d morale gain of other mercs in vicinity\n",
L"-%d morale loss of other mercs in vicinity\n",
L"The vicinity for bonuses is %d tiles",
L" (%d tiles with extended ears)",
L"(Max simultaneous bonuses for one soldier is %d)\n",
L"+%d%s fear resistence of %s\n",
L"Drawback: %dx morale loss for %s's death for all other mercs\n",
};
STR16 gzIMPMajorTraitsHelpTextsTechnician[]=
{
L"+%d%s to repairing speed\n",
L"+%d%s to lockpicking (normal/electronic locks)\n",
L"+%d%s to disarming electronic traps\n",
L"+%d%s to attaching special items and combining things\n",
L"+%d%s to unjamming a gun in combat\n",
L"Reduce penalty to repair electronic items by %d%s\n",
L"Increased chance to detect traps and mines (+%d detect level)\n",
L"+%d%s CtH of robot controlled by the %s\n",
L"%s trait grants you the ability to repair the robot\n",
L"Reduced penalty to repair speed of the robot by %d%s\n",
};
STR16 gzIMPMajorTraitsHelpTextsDoctor[]=
{
L"Has ability to make surgical intervention by using medical bag on wounded soldier\n",
L"Surgery instantly returns %d%s of lost health back.",
L" (This drains the medical bag a lot.)",
L"Can heal lost stats (from critical hits) by the",
L" surgery or",
L" doctor assignment.\n",
L"+%d%s effectiveness on doctor-patient assignment\n",
L"+%d%s bandaging speed\n",
L"+%d%s natural regeneration speed of all soldiers in the same sector",
L" (max %d these bonuses per sector)",
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]=
{
L"Reduce penalty to shoot dual weapons by %d%s\n",
L"+%d%s speed of reloading guns with magazines\n",
L"+%d%s speed of reloading guns with loose rounds\n",
L"-%d%s APs needed to pickup items\n",
L"-%d%s APs needed to work backpack\n",
L"-%d%s APs needed to handle doors\n",
L"-%d%s APs needed to plant/remove bombs and mines\n",
L"-%d%s APs needed to attach items\n",
};
STR16 gzIMPMinorTraitsHelpTextsMelee[]=
{
L"-%d%s APs needed to attack by blades\n",
L"+%d%s chance to hit with blades\n",
L"+%d%s chance to hit with blunt melee weapons\n",
L"+%d%s damage of blades\n",
L"+%d%s damage of blunt melee weapons\n",
L"Aimed attack by any melee weapon deals +%d%s damage\n",
L"+%d%s chance to dodge attack by melee blades\n",
L"+%d%s on top chance to dodge melee blades if having a blade in hands\n",
L"+%d%s chance to dodge attack by blunt melee weapons\n",
L"+%d%s on top chance to dodge blunt melee weapons if having a blade in hands\n",
};
STR16 gzIMPMinorTraitsHelpTextsThrowing[]=
{
L"-%d%s basic APs needed to throw blades\n",
L"+%d%s max range when throwing blades\n",
L"+%d%s chance to hit when throwing blades\n",
L"+%d%s chance to hit when throwing blades per aim click\n",
L"+%d%s damage of throwing blades\n",
L"+%d%s damage of throwing blades per aim click\n",
L"+%d%s chance to inflict critical hit by throwing blade if not seen or heard\n",
L"+%d critical hit by throwing blade multiplier\n",
L"Adds %d more aim click for throwing blades\n",
L"Adds %d more aim clicks for throwing blades\n",
};
STR16 gzIMPMinorTraitsHelpTextsNightOps[]=
{
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
};
STR16 gzIMPMinorTraitsHelpTextsStealthy[]=
{
L"-%d%s APs needed to move quietly\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Reduced cover penalty for movement by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsAthletics[]=
{
L"-%d%s APs needed for moving (running, walking, swatting, crawling, swimming, etc.)\n",
L"-%d%s energy spent for movement, roof-climbing, obstacle-jumping, swimming, etc.\n",
};
STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]=
{
L"Has %d%s damage resistance\n",
L"+%d%s effective strength for carrying weight capacity \n",
L"Reduced energy lost when hit by HtH attack by %d%s\n",
L"Increased damage needed to fall down if hit to legs by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsDemolitions[]=
{
L"-%d%s APs needed to throw grenades\n",
L"+%d%s max range when throwing grenades\n",
L"+%d%s chance to hit when throwing grenades\n",
L"+%d%s damage of set bombs and mines\n",
L"+%d%s to attaching detonators check\n",
L"+%d%s to planting/removing bombs check\n",
L"Decreases chance enemy will detect your bombs and mines (+%d bomb level)\n",
L"Increased chance shaped charge will open the doors (damage multiplied by %d)\n",
};
STR16 gzIMPMinorTraitsHelpTextsTeaching[]=
{
L"+%d%s bonus to train militia\n",
L"+%d%s bonus to effective leadership for determining militia training\n",
L"+%d%s bonus to teaching other mercs\n",
L"Skill value counts to be +%d higher for being able to teach this skill to other mercs\n",
L"+%d%s bonus to train stats through self-practising assignment\n",
};
STR16 gzIMPMinorTraitsHelpTextsScouting[]=
{
L"+%d to effective sight range with scopes on weapons\n",
L"+%d to effective sight range with binoculars (and scopes separated from weapons)\n",
L"-%d tunnel vision with binoculars (and scopes separated from weapons)\n",
L"If in sector, adjacent sectors will show exact number of enemies\n",
L"If in sector, adjacent sectors will show presence of enemies if any\n",
L"Prevents the enemy to ambush your squad\n",
L"Prevents the bloodcats to ambush your squad\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPOldSkillTraitsHelpTexts[]=
{
L"+%d%s bonus to lockpicking\n", // 0
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks\n",
L"Eliminates the penalty to repair and handle\nelectronic things (locks, traps, rem. detonators, robot, etc.)\n",
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
L"+%d%s max range when throwing anything\n", // 10
L"+%d%s chance to hit when throwing anything\n",
L"+%d%s chance to instantly kill by throwing knife if not seen or heard\n",
L"+%d%s bonus to train militia and instruct other mercs\n",
L"+%d%s effective leadership for militia training calculations\n",
L"+%d%s chance to hit with rocket/greande launchers and mortar\n",
L"Auto fire/burst chance to hit penalty is divided by %d\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Eliminates the CtH penalty for second hand when firing two weapons at once\n", // 20
L"+%d%s chance to hit with melee blades\n",
L"+%d%s chance to dodge attacks by melee blades if having blade in hands\n",
L"+%d%s chance to dodge attacks by melee blades if having anything else in hands\n",
L"+%d%s chance to dodge hand to hand attacks if having blade in hands\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click\n",
L"Provides permanent camouflage\n",
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks if having empty hands\n", // 30
L"+%d%s chance to dodge hand to hand attacks if not having empty hands\n",
L"+%d%s chance to dodge attacks by melee blades\n",
L"Can perform spinning kick attack on weakened enemies to deal double damage\n",
L"You gain special animations for hand to hand combat\n",
L"No bonuses",
};
STR16 gzIMPNewCharacterTraitsHelpTexts[]=
{
L"A: No advantage.\nD: No disadvantage.",
L"A: Has better performance when couple of mercs are nearby.\nD: Gains no morale when no other merc is nearby.",
L"A: Has better performance when no other merc is nearby.\nD: Gains no morale when in a group.",
L"A: His morale sinks a little slower and grows faster than normal.\nD: Has lesser chance to detect traps and mines.",
L"A: Has bonus on training militia and is better at communication with people.\nD: Gains no morale for actions of other mercs.",
L"A: Slightly faster learning when assigned on practicing or as a student.\nD: Has lesser suppression and fear resistance.",
L"A: His energy goes down a bit slower except on assignments as doctor, repairman, militia trainer or if learning certain skills.\nD: His wisdom, leadership, explosives, mechanical and medical skills improve slightly slower.",
L"A: Has slightly better chance to hit on burst/autofire and inflicts slightly bigger damage in close combat\n Gains a little more morale for killing.\nD: Has penalty for actions which needs patience like repairing items, picking locks, removing traps, doctoring, training militia.",
L"A: Has bonus for actions which needs patience like repairing items, picking locks, removing traps, doctoring and training militia.\nD: His interrupts chance is slightly lowered.",
L"A: Incresed resistance to suppression and fear.\n Morale loss for taking damage and companions deaths is lower for him.\nD: Can be hit easier and enemy penalty for moving target is lesser in his case.",
L"A: He gains morale when on non-combat assignments (except training militia).\nD: Gains no morale for killing.",
L"A: Has bigger chance for inflicting stat loss and can inflict special painful wounds when able to\n Gains bonus morale for inflicting stat loss.\nD: Has penalty for communication with people and his morale sinks faster if not fighting.",
L"A: Has better performance when there are some mercs of opposite gender nearby.\nD: Morale of other mercs of the same gender grows slower if nearby.",
};
STR16 gzIMPDisabilitiesHelpTexts[]=
{
L"No effects.",
L"Has problems with breathing and reduced overall performance if in tropical or desert sectors.",
L"Can suffer panic attack if left alone in certain situations.",
L"His overall performance is reduced if underground.",
L"If trying to swim he can easily drown.",
L"A look at large insects can make a big problems\nand being in tropical sectors also reduce his performance a bit.",
L"Sometimes forgets what orders he got and therefore loses some APs if in combat.",
L"He can go psycho and shoot like mad once per a while\nand can lose morale if unable to do that with given weapon.",
};
STR16 gzIMPProfileCostText[]=
{
L"The profile cost is %d$. Do you authorize the payment? ",
};
STR16 zGioNewTraitsImpossibleText[]=
{
L"You cannot choose the New Trait System with PROFEX utility deactivated. Check your JA2_Options.ini for entry: READ_PROFILE_DATA_FROM_XML.",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//New string as of March 3, 2000.
STR16 gzIronManModeWarningText[]=
{
+39
View File
@@ -32,6 +32,45 @@ enum
extern STR16 zNewTacticalMessages[];
extern STR16 gzIMPSkillTraitsText[];
////////////////////////////////////////////////////////
// added by SANDRO
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 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 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
extern STR16 gzIMPNewCharacterTraitsHelpTexts[];
extern STR16 gzIMPDisabilitiesHelpTexts[];
extern STR16 gzIMPProfileCostText[];
extern STR16 zGioNewTraitsImpossibleText[];
///////////////////////////////////////////////////////
enum
{
IMM__IRON_MAN_MODE_WARNING_TEXT,
+393 -3
View File
@@ -1,4 +1,4 @@
#pragma setlocale("POLISH")
//#pragma setlocale("POLISH")
#ifdef PRECOMPILEDHEADERS
#include "Utils All.h"
#include "_Ja25Polishtext.h"
@@ -32,8 +32,8 @@ STR16 zNewTacticalMessages[]=
L"Nowi rekruci nie mogą tam przybyć.",
L"Dopóki twój laprop będzie bez nadajnika, nie będziesz mógł zatrudniać nowych członków zespołu. Możliwe, że to odpowiedni moment żeby odczytać zapisany stan gry lub zacząć grać od nowa!",
L"%s słyszy dźwięk zgniatanego metalu dochodzący spod ciała Jerrego. To niestety zabrzmiało jak dźwięk zgniatanej anteny od twojego laptopa.", //the %s is the name of a merc. @@@ Modified
L"After scanning the note left behind by Deputy Commander Morris, %s senses an oppurtinity. The note contains the coordinates for launching missiles against different towns in Arulco. It also gives the coodinates of the origin - the missile facility.",
L"Noticing the control panel, %s figures the numbers can be reveresed, so that the missile might destroy this very facility. %s needs to find an escape route. The elevator appears to offer the fastest solution...",
L"Po przej¿eniu notatki zostawionej przez zastêpce dowódcy Morris'a, %s zauwa¿a pewn¹ mo¿liwoœæ. Notatka zawiera koordynaty do wystrzelenia pocisków w dwa miasteczka w Arulco. S¹ na niej równie¿ koordynaty z których te pociski zostan¹ wystrzelone - wojskowej placówki.",
L"Przygl¹daj¹c siê panelowi kontrolnemu, %s zauwa¿a, ¿e cyfry mo¿na odwróciæ, tak, ¿e pociski mog¹ zniszczyæ t¹ placówkê. %s musi znaleŸæ drogê ucieczki. Wydaje siê, ¿e winda jest najszybszym rozwi¹zaniem...",
L"To jest tryb CZŁOWIEK ZE STALI i nie możesz zapisywać gry gdy wróg jest w sektorze.", // @@@ new text
L"(Nie można zapisywać gry podczas walki)", //@@@@ new text
L"Kampania ma więcej niż 30 postaci.", // @@@ new text
@@ -44,6 +44,8 @@ STR16 zNewTacticalMessages[]=
L"Żeby użyć edytora powinieneś wcześniej wybrać kampanię inną niż standardowa.", ///@@new
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - New STOMP laptop strings
//these strings match up with the defines in IMP Skill trait.cpp
STR16 gzIMPSkillTraitsText[]=
{
@@ -64,7 +66,395 @@ STR16 gzIMPSkillTraitsText[]=
L"Brak",
L"Umiejętności",
L"(Ekspert)",
};
//added another set of skill texts for new major traits
STR16 gzIMPSkillTraitsTextNewMajor[]=
{
L"Broñ automatyczna",
L"Broñ ciê¿ka",
L"Strzelec wyborowy",
L"£owca",
L"Rewolwerowiec",
L"Walka wrêcz",
L"Zastêpca szeryfa",
L"Technik",
L"Paramedyk",
L"None",
L"G³ówne cechy I.M.P",
// second names
L"Strzelec CKM",
L"Bombardier",
L"Snajper",
L"Leœniczy",
L"Rewolwerowiec",
L"Walka wrêcz",
L"Dowódca dru¿yny",
L"In¿ynier",
L"Doktor",
};
//added another set of skill texts for new minor traits
STR16 gzIMPSkillTraitsTextNewMinor[]=
{
L"Oburêcznoœæ",
L"Walka wrêcz",
L"Rzucanie",
L"Operacje nocne",
L"Cichy",
L"Atletyka",
L"Bodybuilding",
L"£adunki wybuchowe",
L"Nauczanie",
L"Zwiad",
L"Brak",
L"Pomniejsze cechy I.M.P",
};
//these texts are for help popup windows, describing trait properties
STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]=
{
L"+%d%s do szansy trafienia karabinem szturmowym\n",
L"+%d%s do szansy trafienia pistoletem maszynowym\n",
L"+%d%s do szansy trafienia erkaemem\n",
L"-%d%s do liczby PA potrzebnych do strza³u erkaemem w trybie automatycznym lub seri¹\n",
L"-%d%s do liczby PA potrzebnych do przygotowania erkaemu\n",
L"Kara do szansy trafienia ogniem automatycznym/seri¹ jest zmniejszona o %d%s\n",
L"Zmniejszona szansa na wystrzelenie przez przypadek wiêkszej liczby pocisków w ogniu automatycznym o -%d%s\n",
};
STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]=
{
L"-%d%s do liczby PA potrzebnych do strza³u z granatnika\n",
L"-%d%s do liczby PA potrzebnych do strza³u z wyrzutni rakiet\n",
L"+%d%s do szansy trafienia grantnikiem\n",
L"+%d%s do szansy trafienia wyrzutni¹ rakiet\n",
L"-%d%s do liczby PA potrzebnych do strza³u z moŸdzierza\n",
L"Reduce penalty for mortar CtH by %d%s\n",
L"+%d%s damage to tanks with heavy weapons, grenades and explosives\n",
L"+%d%s damage to other targets with heavy weapons\n",
};
STR16 gzIMPMajorTraitsHelpTextsSniper[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Sniper Rifles\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click (except for handguns)\n",
L"+%d%s damage on shot",
L" plus",
L" per every aim click",
L" after first",
L" after second",
L" after third",
L" after fourth",
L" after fifth",
L" after sixth",
L" after seventh",
L"-%d%s APs needed to chamber a round with bolt-action rifles \n",
L"Adds one more aim click for rifle-type guns\n",
L"Adds %d more aim clicks for rifle-type guns\n",
};
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Shotguns\n",
L"-%d%s APs needed to pump Shotguns\n",
L"+%d%s group travelling speed between sectors if traveling by foot\n",
L"+%d%s group travelling speed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
L"-%d%s APs needed to fire with pistols and revolvers\n",
L"+%d%s effective range with pistols and revolvers\n",
L"+%d%s chance to hit with pistols and revolvers\n",
L"+%d%s chance to hit with machine pistols",
L" (on single shots only)",
L"+%d%s aiming bonus per click with pistols, machine pistols and revolvers\n",
L"-%d%s APs needed to ready pistols and revolvers\n", // MINTY - "raise" changed to "ready"
L"-%d%s APs needed to reload pistols, machine pistols and revolvers\n",
L"Adds %d more aim click for pistols, machine pistols and revolvers\n",
L"Adds %d more aim clicks for pistols, machine pistols and revolvers\n",
};
STR16 gzIMPMajorTraitsHelpTextsMartialArts[]=
{
L"-%d%s AP cost of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s chance to hit with hand to hand attacks with bare hands\n",
L"+%d%s chance to hit with hand to hand attacks with brass knuckles\n",
L"+%d%s damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s breath damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"Enemy knocked out due to your HtH attacks takes slightly longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes much longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes very long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes extremely long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes long hours to recuperate\n",
L"Enemy knocked out due to your HtH attacks probably never stand up\n",
L"Focused (aimed) punch deals +%d%s more damage\n",
L"Your special spinning kick deals +%d%s more damage\n",
L"+%d%s change to dodge hand to hand attacks\n",
L"+%d%s on top chance to dodge HtH attacks with bare hands",
L" or brass knuckles",
L" (+%d%s with brass knuckles)",
L"+%d%s on top chance to dodge HtH attacks with brass knuckles\n",
L"+%d%s chance to dodge attacks by any melee weapon\n",
L"-%d%s APs needed to steal weapon from enemy hands\n",
L"-%d%s APs needed to change stance (stand, crouch, lie down), turn around, climb on/off roof and jump obstacles\n", // MINTY - "state" changed to "stance"
L"-%d%s APs needed to change stance (stand, crouch, lie down)\n", // MINTY - "state" changed to "stance"
L"-%d%s APs needed to turn around\n",
L"-%d%s APs needed to climb on/off roof and jump obstacles\n",
L"+%d%s chance to kick doors in\n", // MINTY - Changed to "kick doors in"
L"You gain special animations for hand to hand combat\n",
};
STR16 gzIMPMajorTraitsHelpTextsSquadleader[]=
{
L"+%d%s APs per round of other mercs in vicinity\n",
L"+%d effective exp level of other mercs in vicinity, which have lesser level than the %s\n",
L"+%d effective exp level to count as a standby when counting friends' bonus for suppression\n",
L"+%d%s total suppression tolerance for other mercs in the vicinity and %s himself\n", // MINTY - Changed "of" to "for"
L"+%d morale gain for other mercs in the vicinity\n", // MINTY - Changed "of" to "for"
L"-%d morale loss for other mercs in the vicinity\n", // MINTY - Changed "of" to "for"
L"The vicinity for bonuses is %d tiles",
L" (%d tiles with extended ears)",
L"(Max simultaneous bonuses for one soldier is %d)\n",
L"+%d%s fear resistence of %s\n",
L"Drawback: %dx morale loss for %s's death for all other mercs\n",
};
STR16 gzIMPMajorTraitsHelpTextsTechnician[]=
{
L"+%d%s to repairing speed\n",
L"+%d%s to lockpicking (normal/electronic locks)\n",
L"+%d%s to disarming electronic traps\n",
L"+%d%s to attaching special items and combining things\n",
L"+%d%s to unjamming a gun in combat\n",
L"Reduce penalty to repair electronic items by %d%s\n",
L"Increased chance to detect traps and mines (+%d detect level)\n",
L"+%d%s CtH of robot controlled by the %s\n",
L"%s trait grants you the ability to repair the robot\n",
L"Reduced penalty to repair speed of the robot by %d%s\n",
};
STR16 gzIMPMajorTraitsHelpTextsDoctor[]=
{
L"Has ability to perform surgical intervention by using medical bag on wounded soldier\n", // MINTY - "make" changed to "perform"
L"Surgery instantly returns %d%s of lost health back.",
L" (This drains the medical bag a lot.)",
L"Can heal lost stats (from critical hits) by the",
L" surgery or",
L" doctor assignment.\n",
L"+%d%s effectiveness on doctor-patient assignment\n",
L"+%d%s bandaging speed\n",
L"+%d%s natural regeneration speed for all soldiers in the same sector", // MINTY - Changed "of" to "for"
L" (max %d of these bonuses per sector stack)",
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]=
{
L"Reduce penalty to shoot dual weapons by %d%s\n",
L"+%d%s speed of reloading guns with magazines\n",
L"+%d%s speed of reloading guns with loose rounds\n",
L"-%d%s APs needed to pickup items\n",
L"-%d%s APs needed to work backpack\n",
L"-%d%s APs needed to handle doors\n",
L"-%d%s APs needed to plant/remove bombs and mines\n",
L"-%d%s APs needed to attach items\n",
};
STR16 gzIMPMinorTraitsHelpTextsMelee[]=
{
L"-%d%s APs needed to attack by blades\n",
L"+%d%s chance to hit with blades\n",
L"+%d%s chance to hit with blunt melee weapons\n",
L"+%d%s damage with blades\n", // MINTY - Changed "of" to "with"
L"+%d%s damage with blunt melee weapons\n", // MINTY - Changed "of" to "with"
L"Aimed attack with any melee weapon deals +%d%s damage\n", // MINTY - Changed "by" to "with"
L"+%d%s chance to dodge attack by melee blades\n",
L"+%d%s on top chance to dodge melee blades if holding a blade\n", // MINTY - "having a blade in hands" changed to "holding a blade"
L"+%d%s chance to dodge attack by blunt melee weapons\n",
L"+%d%s on top chance to dodge blunt melee weapons if holding a blade\n", // MINTY - "having a blade in hands" changed to "holding a blade"
};
STR16 gzIMPMinorTraitsHelpTextsThrowing[]=
{
L"-%d%s basic APs needed to throw blades\n",
L"+%d%s max range when throwing blades\n",
L"+%d%s chance to hit when throwing blades\n",
L"+%d%s chance to hit when throwing blades per aim click\n",
L"+%d%s damage with throwing blades\n", // MINTY - Changed "of" to "with"
L"+%d%s damage with throwing blades per aim click\n", // MINTY - Changed "of" to "with"
L"+%d%s chance to inflict critical hit with throwing blade if not seen or heard\n", // MINTY - Changed "by" to "with"
L"+%d critical hit with throwing blade multiplier\n", // MINTY - Changed "by" to "with"
L"Adds %d more aim click for throwing blades\n",
L"Adds %d more aim clicks for throwing blades\n",
};
STR16 gzIMPMinorTraitsHelpTextsNightOps[]=
{
L"+%d to effective sight range in the dark\n",
L"+%d to general effective hearing range\n",
L"+%d additional hearing range in the dark\n", // MINTY - Changed "effective hearing range in dark on top" to "additional hearing range in the dark"
L"+%d to interrupts modifier in the dark\n",
L"-%d need to sleep\n",
};
STR16 gzIMPMinorTraitsHelpTextsStealthy[]=
{
L"-%d%s APs needed to move quietly\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Reduced cover penalty for movement by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsAthletics[]=
{
L"-%d%s APs needed for moving (running, walking, squatting, crawling, swimming, etc.)\n",
L"-%d%s energy spent for movement, roof-climbing, obstacle-jumping, swimming, etc.\n",
};
STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]=
{
L"Has %d%s damage resistance\n",
L"+%d%s effective strength for carrying weight capacity \n",
L"Reduced energy lost when hit by HtH attack by %d%s\n",
L"Increased damage needed to fall down if hit to legs by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsDemolitions[]=
{
L"-%d%s APs needed to throw grenades\n",
L"+%d%s max range when throwing grenades\n",
L"+%d%s chance to hit when throwing grenades\n",
L"+%d%s damage of set bombs and mines\n",
L"+%d%s to attaching detonators check\n",
L"+%d%s to planting/removing bombs check\n",
L"Decreases chance enemy will detect your bombs and mines (+%d bomb level)\n",
L"Increased chance shaped charge will open the doors (damage multiplied by %d)\n",
};
STR16 gzIMPMinorTraitsHelpTextsTeaching[]=
{
L"+%d%s bonus to militia training speed\n",
L"+%d%s bonus to effective leadership for determining militia training\n",
L"+%d%s bonus to teaching other mercs\n",
L"Skill value counts to be +%d higher for being able to teach this skill to other mercs\n",
L"+%d%s bonus to train stats through self-practising assignment\n",
};
STR16 gzIMPMinorTraitsHelpTextsScouting[]=
{
L"+%d to effective sight range with scopes on weapons\n",
L"+%d to effective sight range with binoculars (and scopes separated from weapons)\n",
L"-%d tunnel vision with binoculars (and scopes separated from weapons)\n",
L"If in sector, adjacent sectors will show exact number of enemies\n",
L"If in sector, adjacent sectors will show presence of enemies, if any\n",
L"Prevents enemy ambushes on your squad\n",
L"Prevents bloodcat ambushes on your squad\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPOldSkillTraitsHelpTexts[]=
{
L"+%d%s bonus to lockpicking\n", // 0
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks\n",
L"Eliminates the penalty to repair and handle\nelectronic things (locks, traps, rem. detonators, robot, etc.)\n",
L"+%d to effective sight range in the dark\n",
L"+%d to general effective hearing range\n",
L"+%d extra hearing range in the dark\n",
L"+%d to interrupts modifier in the dark\n",
L"-%d need to sleep\n",
L"+%d%s max range when throwing anything\n", // 10
L"+%d%s chance to hit when throwing anything\n",
L"+%d%s chance to instantly kill by throwing knife if not seen or heard\n",
L"+%d%s bonus to militia training and other mercs instructing speed\n",
L"+%d%s effective leadership for militia training calculations\n",
L"+%d%s chance to hit with rocket/greande launchers and mortar\n",
L"Auto fire/burst chance to hit penalty is divided by %d\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Eliminates the CtH penalty when firing two weapons at once\n", // 20
L"+%d%s chance to hit with melee blades\n",
L"+%d%s chance to dodge attacks by melee blades if having blade in hands\n",
L"+%d%s chance to dodge attacks by melee blades if having anything else in hands\n",
L"+%d%s chance to dodge hand to hand attacks if having blade in hands\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click\n",
L"Provides permanent camouflage\n",
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks if having empty hands\n", // 30
L"+%d%s chance to dodge hand to hand attacks if not having empty hands\n",
L"+%d%s chance to dodge attacks by melee blades\n",
L"Can perform spinning kick attack on weakened enemies to deal double damage\n",
L"You gain special animations for hand to hand combat\n",
L"No bonuses",
};
STR16 gzIMPNewCharacterTraitsHelpTexts[]=
{
L"A: No advantage.\nD: No disadvantage.",
L"A: Has better performance when couple of mercs are nearby.\nD: Gains no morale when no other merc is nearby.",
L"A: Has better performance when no other merc is nearby.\nD: Gains no morale when in a group.",
L"A: His morale sinks a little slower and grows faster than normal.\nD: Has lesser chance to detect traps and mines.",
L"A: Has bonus on training militia and is better at communication with people.\nD: Gains no morale for actions of other mercs.",
L"A: Slightly faster learning when assigned on practicing or as a student.\nD: Has lesser suppression and fear resistance.",
L"A: His energy goes down a bit slower except on assignments as doctor, repairman, militia trainer or if learning certain skills.\nD: His wisdom, leadership, explosives, mechanical and medical skills improve slightly slower.",
L"A: Has slightly better chance to hit on burst/autofire and inflicts slightly bigger damage in close combat\n Gains a little more morale for killing.\nD: Has penalty for actions which needs patience like repairing items, picking locks, removing traps, doctoring, training militia.",
L"A: Has bonus for actions which needs patience like repairing items, picking locks, removing traps, doctoring and training militia.\nD: His interrupts chance is slightly lowered.",
L"A: Incresed resistance to suppression and fear.\n Morale loss for taking damage and companions deaths is lower for him.\nD: Can be hit easier and enemy penalty for moving target is lesser in his case.",
L"A: He gains morale when on non-combat assignments (except training militia).\nD: Gains no morale for killing.",
L"A: Has bigger chance for inflicting stat loss and can inflict special painful wounds when able to\n Gains bonus morale for inflicting stat loss.\nD: Has penalty for communication with people and his morale sinks faster if not fighting.",
L"A: Has better performance when there are some mercs of opposite gender nearby.\nD: Morale of other mercs of the same gender grows slower if nearby.",
};
STR16 gzIMPDisabilitiesHelpTexts[]=
{
L"No effects.",
L"Has problems with breathing and reduced overall performance if in tropical or desert sectors.",
L"Can suffer panic attack if left alone in certain situations.",
L"His overall performance is reduced if underground.",
L"If trying to swim he can easily drown.",
L"A look at large insects can make a big problems\nand being in tropical sectors also reduce his performance a bit.",
L"Sometimes forgets what orders he got and therefore loses some APs if in combat.",
L"He can go psycho and shoot like mad once per a while\nand can lose morale if unable to do that with given weapon.",
};
STR16 gzIMPProfileCostText[]=
{
L"The profile cost is %d$. Do you authorize the payment? ",
};
STR16 zGioNewTraitsImpossibleText[]=
{
L"You cannot choose the New Trait System with PROFEX utility deactivated. Check your JA2_Options.ini for entry: READ_PROFILE_DATA_FROM_XML.",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//@@@: New string as of March 3, 2000.
STR16 gzIronManModeWarningText[]=
{
+39
View File
@@ -32,6 +32,45 @@ enum
extern STR16 zNewTacticalMessages[];
extern STR16 gzIMPSkillTraitsText[];
////////////////////////////////////////////////////////
// added by SANDRO
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 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 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
extern STR16 gzIMPNewCharacterTraitsHelpTexts[];
extern STR16 gzIMPDisabilitiesHelpTexts[];
extern STR16 gzIMPProfileCostText[];
extern STR16 zGioNewTraitsImpossibleText[];
///////////////////////////////////////////////////////
enum
{
IMM__IRON_MAN_MODE_WARNING_TEXT,
+425 -24
View File
@@ -1,11 +1,13 @@
#pragma setlocale("RUSSIAN")
//#pragma setlocale("RUSSIAN")
#ifdef PRECOMPILEDHEADERS
#include "Utils All.h"
#include "_Ja25RussianText.h"
#else
#include "Language Defines.h"
#include "text.h"
#include "Fileman.h"
#ifdef RUSSIAN
#include "text.h"
#include "Fileman.h"
#endif
#endif
//suppress : warning LNK4221: no public symbols found; archive member will be inaccessible
@@ -29,23 +31,25 @@ STR16 zNewTacticalMessages[]=
L"Линия прицела",
L"Новые наемники не могут высадиться здесь.",
L"Так как ваш ноутбук лишился антенны, то вы не сможете нанять новых наемников. Возможно, сейчас вам стоит загрузить одну из сохраненных игр, или начать игру заново!",
L"%s слышит металлический хруст под телом Джерри. Кажется, это чмо сломало антенну вашего ноутбука.", //the %s is the name of a merc. @@@ Modified
L"%s ñëûøèò ìåòàëëè÷åñêèé õðóñò ïîä òåëîì Äæåððè. Êàæåòñÿ, ýòî ÷ìî ñëîìàëî àíòåííó âàøåãî íîóòáóêà.", //the %s is the name of a merc.
L"После прочтения записей, оставленных помощником командира Морриса, %s видит, что не все еще потеряно. В записке содержатся координаты городов Арулько для запуска по ним ракет. Кроме того, там также указаны координаты самой ракетной базы.",
L"Изучив панель управления, %s понимает, что координаты цели можно изменить, и тогда ракета уничтожит эту базу. %s не собирается умирать, а значит нужно быстрее отсюда выбираться. Похоже, что самый быстрый способ это лифт...",
L"В начале игры вы выбрали режим \"Стальная воля\" и теперь не можете записываться во время боя.", // @@@ new text
L"(Нельзя сохраняться во время боя)", //@@@@ new text
L"Текущая кампания длиннее 30 символов.", // @@@ new text
L"Текущая кампания не найдена.", // @@@ new text
L"Кампания: По умолчанию ( %S )", // @@@ new text
L"Кампания: %S", // @@@ new text
L"Вы выбрали кампанию %S. Эта кампания является модификацией оригинальной кампании Unfinished Business. Вы уверены, что хотите играть кампанию %S?", // @@@ new text
L"Чтобы воспользоваться редактором, смените кампанию по умолчанию на другую.", ///@@new
L" íà÷àëå èãðû âû âûáðàëè ñîõðàíåíèå ëèøü â \"ìèðíîå âðåìÿ\" è òåïåðü íå ìîæåòå çàïèñûâàòüñÿ âî âðåìÿ áîÿ.",
L"(Íåëüçÿ ñîõðàíÿòüñÿ âî âðåìÿ áîÿ)",
L"Òåêóùàÿ êàìïàíèÿ äëèííåå 30 ñèìâîëîâ.",
L"Òåêóùàÿ êàìïàíèÿ íå íàéäåíà.",
L"Êàìïàíèÿ: Ïî óìîë÷àíèþ ( %S )",
L"Êàìïàíèÿ: %S",
L"Âû âûáðàëè êàìïàíèþ %S. Ýòà êàìïàíèÿ ÿâëÿåòñÿ ìîäèôèêàöèåé îðèãèíàëüíîé êàìïàíèè Unfinished Business. Âû óâåðåíû, ÷òî õîòèòå èãðàòü êàìïàíèþ %S?",
L"×òîáû âîñïîëüçîâàòüñÿ ðåäàêòîðîì, ñìåíèòå êàìïàíèþ ïî óìîë÷àíèþ íà äðóãóþ.",
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - New STOMP laptop strings
//these strings match up with the defines in IMP Skill trait.cpp
STR16 gzIMPSkillTraitsText[]=
{
// made this more elegant
L"Взлом замков",
L"Рукопашный бой",
L"Электроника",
@@ -55,7 +59,7 @@ STR16 gzIMPSkillTraitsText[]=
L"Тяжелое оружие",
L"Автоматическое оружие",
L"Скрытность",
L"Стрельба с двух рук",
L"Ëîâêà÷",
L"Холодное оружие",
L"Снайпер",
L"Камуфляж",
@@ -63,25 +67,422 @@ STR16 gzIMPSkillTraitsText[]=
L"Нет",
L"I.M.P.: Специализация",
L"(ýêñïåðò)",
};
//added another set of skill texts for new major traits
STR16 gzIMPSkillTraitsTextNewMajor[]=
{
L"Àâòîìàò÷èê", //Auto Weapons
L"Ãðåíàä¸ð", //Heavy Weapons
L"Ñòðåëîê", //Marksman
L"Îõîòíèê", //Hunter
L"Êîâáîé", //Gunslinger
L"Áîêñ¸ð", //Hand to Hand
L"Ñòàðøèíà", //Deputy
L"Ìåõàíèê-ýëåêòðîíùèê", //Technician
L"Ñàíèòàð", //Paramedic
L"Íåò",
L"I.M.P.: Îñíîâíûå íàâûêè", //I.M.P. Major Traits
// second names
L"Ïóëåì¸ò÷èê", //Machinegunner
L"Àðòèëëåðèñò", //Bombardier
L"Ñíàéïåð", //Sniper
L"Ëåñíè÷èé", //Ranger
L"Ïèñòîëåò÷èê", //Gunfighter
L"Áîåâûå èñêóññòâà", //Martial Arts
L"Êîìàíäèð", //Squadleader
L"Èíæåíåð", //Engineer
L"Äîêòîð", //Doctor
};
//added another set of skill texts for new minor traits
STR16 gzIMPSkillTraitsTextNewMinor[]=
{
L"Ëîâêà÷", //Ambidextrous
L"Ìàñòåð êëèíêà", //Melee
L"Ìàñòåð ïî ìåòàíèþ", //Throwing
L"×åëîâåê íî÷è", //Night Ops
L"Áåñøóìíûé óáèéöà", //Stealthy
L"Ñïîðòñìåí", //Athletics
L"Êóëüòóðèñò", //Bodybuilding
L"Ïîäðûâíèê", //Demolitions
L"Èíñòðóêòîð", //Teaching
L"Ðàçâåä÷èê", //Scouting
L"Íåò",
L"I.M.P.: Äîïîëíèòåëüíûå íàâûêè", //I.M.P. Minor Traits
};
//these texts are for help popup windows, describing trait properties
STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]=
{
L"+%d%s ê øàíñó ïîðàçèòü èç àâòîìàòà\n",
L"+%d%s ê øàíñó ïîðàçèòü èç ïèñòîëåò-ïóëåì¸òà\n",
L"+%d%s ê øàíñó ïîðàçèòü èç ðó÷íîãî ïóëåì¸òà\n",
L"-%d%s ÎÄ íà ñòðåëüáó èç ðó÷íîãî ïóëåì¸òà â ðåæèìå î÷åðåäè èëè î÷åðåäè ñ îòñå÷êîé\n",
L"-%d%s ÎÄ íà âñêèäêó ðó÷íîãî ïóëåì¸òà\n",
L"Øòðàô íà øàíñ ïîïàäàíèÿ â àâòîìàòè÷åñêîì ðåæèìå îãíÿ è â ðåæèìå î÷åðåäè ïîíèæåí íà %d%s\n",
L"Ïîíèæåí øàíñ ëèøíèõ âûñòðåëîâ ïðè àâòîìàòè÷åñêîé ñòðåëüáå\n",
};
STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]=
{
L"-%d%s ÎÄ íà ñòðåëüáó èç ãðàíàòîì¸òà\n",
L"-%d%s ÎÄ íà ñòðåëüáó èç ðåàêòèâíîãî ãðàíàòîì¸òà\n",
L"+%d%s ê øàíñó ïîðàçèòü èç ãðàíàòîì¸òà\n",
L"+%d%s ê øàíñó ïîðàçèòü èç ðåàêòèâíîãî ãðàíàòîì¸òà\n",
L"-%d%s ÎÄ íà çàëï èç ìèíîì¸òà\n",
L"Ïîíèæåí øòðàô íà øàíñ ïîïàäàíèÿ ïðè ñòðåëüáå ñ ìèíîì¸òà íà %d%s\n",
L"+%d%s ê óðîíó òàíêàì îò ïîðàæåíèÿ èç òÿæ¸ëîãî îðóæèÿ, ãðàíàò è âçðûâ÷àòêè\n",
L"+%d%s ê óðîíó èíûì öåëÿì èç òÿæ¸ëîãî îðóæèÿ\n",
};
STR16 gzIMPMajorTraitsHelpTextsSniper[]=
{
L"+%d%s ê øàíñó ïîðàçèòü èç âèíòîâêè\n",
L"+%d%s ê øàíñó ïîïàñòü èç ñíàéïåðñêîé âèíòîâêè\n",
L"-%d%s ýôôåêòèâíîé äàëüíîñòè äî öåëè äëÿ âñåãî âèäà îðóæèÿ\n", //-%d%s effective range to target with all weapons
L"+%d%s ê áîíóñó ïðèöåëèâàíèÿ íà êàäæûé ùåë÷îê ìûøè (îñîáåííî ê ïèñòîëåòàì)\n",
L"+%d%s ê ïîâðåæäåíèþ îò âûñòðåëà", //+%d%s damage on shot
L" ïëþñ",
L" ñ êàæäûì êëèêîì",
L" ïîñëå ïåðâîãî",
L" ïîñëå âòîðîãî",
L" ïîñëå òðåòüåãî",
L" ïîñëå ÷åòâ¸ðòîãî",
L" ïîñëå ïÿòîãî",
L" ïîñëå øåñòîãî",
L" ïîñëå ñåäüìîãî",
L"-%d%s ÎÄ íà ïåðåä¸ðãèâàíèå çàòâîðà ó ïîëóàâòîìàòè÷åñêèõ âèíòîâîê\n",
L"Ïëþñ 1 êëèê-ïðèöåëèâàíèÿ ê îðóæèþ òèïà âèíòîâêè\n",
L"Ïëþñ %d êëèê-ïðèöåëèâàíèÿ ê îðóæèþ òèïà âèíòîâêè\n",
};
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
{
L"+%d%s ê øàíñó ïîðàçèòü èç âèíòîâêè\n",
L"+%d%s ê øàíñó ïîðàçèòü èç ðóæüÿ\n",
L"-%d%s ÎÄ íà ïåðåçàðÿäêó ðóæüÿ\n",
L"+%d%s ê ñêîðîñòè ïåðåäâèæåíèÿ ãðóïïû ìåæäó ñåêòîðàìè, åñëè èäòè ïåøêîì\n",
L"+%d%s ê ñêîðîñòè ïåðåäâèæåíèÿ ãðóïïû ìåæäó ñåêòîðàìè, \nåñëè ïåðåäâèãàòüñÿ íà òðàíñïîðòå (â îñîáåííîñòè íà âåðòîë¸òå)\n",
L"-%d%s ê çàòðàòå ýíåðãèè ïðè ïåðåõîäå ìåæäó ñåêòîðàìè\n", //ìåíüøå òðàòèò ñèë
L"-%d%s íà øòðàô ïîãîäíûõ óñëîâèé\n",
L"+%d%s ê ýôôåêòèâíîñòè êàìóôëÿæà\n",
L"-%d%s íà ñêîðîñòü óõóäøåíèÿ êàìóôëÿæà îò âîäû è âðåìåíè\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
L"-%d%s ÎÄ íåîáõîäèìûå äëÿ âûñòðåëà èç ïèñòîëåòîâ è ðåâîëüâåðîâ\n",
L"+%d%s ê ýôôåêòèâíîé äàëüíîáîéíîñòè ïèñòîëåòîâ è ðåâîëüâåðîâ\n",
L"+%d%s ê øàíñó ïîïàäàíèÿ èç ïèñòîëåòîâ è ðåâîëüâåðîâ\n",
L"+%d%s ê øàíñó ïîïàäàíèÿ èç ïèñòîëåò-ïóëåì¸òîâ",
L" (ëèøü äëÿ îäèíî÷íîãî âûñòðåëà)",
L"+%d%s áîíóñà íà îäèí ùåë÷îê ìûøè ïðè ïðèöåëèâàíèå íà ïèñòîëåòû, ïèñòîëåò-ïóëåì¸òû è ðåâîëüâåðû\n",
L"-%d%s ÎÄ íåîáõîäèìûõ íà âñêèäêó ïèñòîëåòà è ðåâîëüâåðà\n",
L"-%d%s ÎÄ íåîáõîäèìûõ íà ïåðåçàðÿäêó ïèñòîëåòà, ïèñòîëåò-ïóëåì¸òà è ðåâîëüâåðà\n",
L"Äà¸ò %d äîïîëíèòåëüíûé ùåë÷îê ìûøè íà ïðèöåëèâàíèå ïèñòîëåòàì, ïèñòîëåò-ïóëåì¸òàì è ðåâîëüâåðàì",
L"Äà¸ò %d äîïîëíèòåëüíûõ ùåë÷êîâ ìûøè íà ïðèöåëèâàíèå ïèñòîëåòàì, ïèñòîëåò-ïóëåì¸òàì è ðåâîëüâåðàì\n",
};
STR16 gzIMPMajorTraitsHelpTextsMartialArts[]=
{
L"-%d%s AP cost of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s chance to hit with hand to hand attacks with bare hands\n",
L"+%d%s chance to hit with hand to hand attacks with brass knuckles\n",
L"+%d%s damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s breath damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"Enemy knocked out due to your HtH attacks takes slightly longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes much longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes very long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes extremely long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes long hours to recuperate\n",
L"Enemy knocked out due to your HtH attacks probably never stand up\n",
L"Focused (aimed) punch deals +%d%s more damage\n",
L"Your special spinning kick deals +%d%s more damage\n",
L"+%d%s change to dodge hand to hand attacks\n",
L"+%d%s on top chance to dodge HtH attacks with bare hands",
L" or brass knuckles",
L" (+%d%s with brass knuckles)",
L"+%d%s on top chance to dodge HtH attacks with brass knuckles\n",
L"+%d%s chance to dodge attacks by any melee weapon\n",
L"-%d%s APs needed to steal weapon from enemy hands\n",
L"-%d%s APs needed to change stance (stand, crouch, lie down), turn around, climb on/off roof and jump obstacles\n",
L"-%d%s APs needed to change stance (stand, crouch, lie down)\n",
L"-%d%s APs needed to turn around\n",
L"-%d%s APs needed to climb on/off roof and jump obstacles\n",
L"+%d%s chance to kick doors in\n",
L"You gain special animations for hand to hand combat\n",
};
STR16 gzIMPMajorTraitsHelpTextsSquadleader[]=
{
L"+%d%s APs per round of other mercs in vicinity\n",
L"+%d effective exp level of other mercs in vicinity, which have lesser level than the %s\n",
L"+%d effective exp level to count as a standby when counting friends' bonus for suppression\n",
L"+%d%s total suppression tolerance for other mercs in the vicinity and %s himself\n",
L"+%d morale gain for other mercs in the vicinity\n",
L"-%d morale loss for other mercs in the vicinity\n",
L"The vicinity for bonuses is %d tiles",
L" (%d tiles with extended ears)",
L"(Max simultaneous bonuses for one soldier is %d)\n",
L"+%d%s fear resistence of %s\n",
L"Drawback: %dx morale loss for %s's death for all other mercs\n",
};
STR16 gzIMPMajorTraitsHelpTextsTechnician[]=
{
L"+%d%s to repairing speed\n",
L"+%d%s to lockpicking (normal/electronic locks)\n",
L"+%d%s to disarming electronic traps\n",
L"+%d%s to attaching special items and combining things\n",
L"+%d%s to unjamming a gun in combat\n",
L"Reduce penalty to repair electronic items by %d%s\n",
L"Increased chance to detect traps and mines (+%d detect level)\n",
L"+%d%s CtH of robot controlled by the %s\n",
L"%s trait grants you the ability to repair the robot\n",
L"Reduced penalty to repair speed of the robot by %d%s\n",
};
STR16 gzIMPMajorTraitsHelpTextsDoctor[]=
{
L"Has ability to perform surgical intervention by using medical bag on wounded soldier\n",
L"Surgery instantly returns %d%s of lost health back.",
L" (This drains the medical bag a lot.)",
L"Can heal lost stats (from critical hits) by the",
L" surgery or",
L" doctor assignment.\n",
L"+%d%s effectiveness on doctor-patient assignment\n",
L"+%d%s bandaging speed\n",
L"+%d%s natural regeneration speed for all soldiers in the same sector",
L" (max %d of these bonuses per sector stack)",
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"Íåò ïðåèìóùåñòâ", //No bonuses
};
STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]=
{
L"Ïîíèæåí øòðàô íà ñòðåëüáó ñ äâóõ ðóê íà %d%s\n",
L"+%d%s ê ñêîðîñòè íà ïåðåçàðÿäêó îðóæèÿ ìàãàçèíîì\n",
L"+%d%s ê ñêîðîñòè íà äîçàðÿäêó ìàãàçèíà îðóæèÿ\n",
L"-%d%s ÎÄ ÷òîáû ïîäíÿòü ïðåäìåò\n",
L"-%d%s ÎÄ íà ìàíèïóëÿöèè ñ ðþêçàêîì\n",
L"-%d%s ÎÄ íà äåéñòâèÿ ñ äâåðüþ\n",
L"-%d%s ÎÄ, íåîáõîäèìûõ äëÿ óñòàíîâêè/îáåçâðåæèâàíèÿ áîìá è ìèí\n",
L"-%d%s ÎÄ, íåîáõîäèìûõ íà ïðèñîåäèíåíèå íàâåñêè\n",
};
STR16 gzIMPMinorTraitsHelpTextsMelee[]=
{
L"-%d%s APs needed to attack by blades\n",
L"+%d%s chance to hit with blades\n",
L"+%d%s chance to hit with blunt melee weapons\n",
L"+%d%s damage with blades\n",
L"+%d%s damage with blunt melee weapons\n",
L"Aimed attack with any melee weapon deals +%d%s damage\n",
L"+%d%s chance to dodge attack by melee blades\n",
L"+%d%s on top chance to dodge melee blades if holding a blade\n",
L"+%d%s chance to dodge attack by blunt melee weapons\n",
L"+%d%s on top chance to dodge blunt melee weapons if holding a blade\n",
};
STR16 gzIMPMinorTraitsHelpTextsThrowing[]=
{
L"-%d%s basic APs needed to throw blades\n",
L"+%d%s max range when throwing blades\n",
L"+%d%s chance to hit when throwing blades\n",
L"+%d%s chance to hit when throwing blades per aim click\n",
L"+%d%s damage with throwing blades\n",
L"+%d%s damage with throwing blades per aim click\n",
L"+%d%s chance to inflict critical hit with throwing blade if not seen or heard\n",
L"+%d critical hit with throwing blade multiplier\n",
L"Adds %d more aim click for throwing blades\n",
L"Adds %d more aim clicks for throwing blades\n",
};
STR16 gzIMPMinorTraitsHelpTextsNightOps[]=
{
L"+%d ê çðåíèþ â òåìíîòå\n",
L"+%d ê äàëüíîñòè ñëóõà\n",
L"+%d äîïîëíèòåëüíî ê ñëóõó â òåìíîòå\n",
L"+%d ê âåðîÿòíîñòè ïåðåõâàòà õîäà â íî÷è\n",
L"-%d ê íóæäå â ñíå\n",
};
STR16 gzIMPMinorTraitsHelpTextsStealthy[]=
{
L"-%d%s ê ÎÄ, íåîáõîäèìûõ äëÿ òèõîãî ïåðåäèâæåíèÿ\n",
L"+%d%s äâèãàòüñÿ òèõî\n",
L"+%d%s ê ñêðûòíîñòè (áûòü 'íåâèäèìûì' åñëè âàñ íå îáíàðóæèëè)\n",
L"Óìåíüøåíèå øòðàôà íà âèäèìîñòü â óêðûòèè íà %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsAthletics[]=
{
L"-%d%s ÎÄ íà äâèæåíèÿ (áåã, øàã, øàã âïðèñÿäêó, ïåðåïîëçàíèå, ïëàâàíèå è ò.ä.)\n",
L"-%d%s íà çàòðàòû ýíåðãèè ïðè äâèæåíèè, âñêàðàáêèâàíèå íà êðûøó, ïðûæêè ÷åðåç ïðåïÿäñòâèÿ, ïëàâàíèå è ò.ä.\n",
};
STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]=
{
L"Èìååò %d%s óñòîé÷èâîñòè ê ïîâðåæäåíèÿì\n",
L"+%d%s ê ñèëå íà ïåðåíîñêó ñíàðÿæåíèÿ\n",
L"Óìåíüøåíà ïîòåðÿ ñèë ïðè ïðîïóùåííûõ óäàðàõ â áëèæíåì áîþ íà %d%s\n",
L"Ïîâûøåí óðîí, íåîáõîäèìûé ÷òîáû ñâàëèòü ñ íîã ïðè ðàíåíèè â íîãó íà %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsDemolitions[]=
{
L"-%d%s APs needed to throw grenades\n",
L"+%d%s max range when throwing grenades\n",
L"+%d%s chance to hit when throwing grenades\n",
L"+%d%s damage of set bombs and mines\n",
L"+%d%s to attaching detonators check\n",
L"+%d%s to planting/removing bombs check\n",
L"Decreases chance enemy will detect your bombs and mines (+%d bomb level)\n",
L"Increased chance shaped charge will open the doors (damage multiplied by %d)\n",
};
STR16 gzIMPMinorTraitsHelpTextsTeaching[]=
{
L"+%d%s bonus to militia training speed\n",
L"+%d%s bonus to effective leadership for determining militia training\n",
L"+%d%s bonus to teaching other mercs\n",
L"Skill value counts to be +%d higher for being able to teach this skill to other mercs\n",
L"+%d%s bonus to train stats through self-practising assignment\n",
};
STR16 gzIMPMinorTraitsHelpTextsScouting[]=
{
L"+%d to effective sight range with scopes on weapons\n",
L"+%d to effective sight range with binoculars (and scopes separated from weapons)\n",
L"-%d tunnel vision with binoculars (and scopes separated from weapons)\n",
L"If in sector, adjacent sectors will show exact number of enemies\n",
L"If in sector, adjacent sectors will show presence of enemies, if any\n",
L"Prevents enemy ambushes on your squad\n",
L"Prevents bloodcat ambushes on your squad\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"Íåò ïðåèìóùåñòâ", //No bonuses
};
STR16 gzIMPOldSkillTraitsHelpTexts[]=
{
L"+%d%s bonus to lockpicking\n",
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks\n",
L"Eliminates the penalty to repair and handle\nelectronic things (locks, traps, rem. detonators, robot, etc.)\n",
L"+%d to effective sight range in the dark\n",
L"+%d to general effective hearing range\n",
L"+%d extra hearing range in the dark\n",
L"+%d to interrupts modifier in the dark\n",
L"-%d need to sleep\n",
L"+%d%s max range when throwing anything\n",
L"+%d%s chance to hit when throwing anything\n",
L"+%d%s chance to instantly kill by throwing knife if not seen or heard\n",
L"+%d%s bonus to militia training and other mercs instructing speed\n",
L"+%d%s effective leadership for militia training calculations\n",
L"+%d%s chance to hit with rocket/greande launchers and mortar\n",
L"Auto fire/burst chance to hit penalty is divided by %d\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Eliminates the CtH penalty when firing two weapons at once\n",
L"+%d%s chance to hit with melee blades\n",
L"+%d%s chance to dodge attacks by melee blades if having blade in hands\n",
L"+%d%s chance to dodge attacks by melee blades if having anything else in hands\n",
L"+%d%s chance to dodge hand to hand attacks if having blade in hands\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click\n",
L"Provides permanent camouflage\n",
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks if having empty hands\n",
L"+%d%s chance to dodge hand to hand attacks if not having empty hands\n",
L"+%d%s chance to dodge attacks by melee blades\n",
L"Can perform spinning kick attack on weakened enemies to deal double damage\n",
L"You gain special animations for hand to hand combat\n",
L"Íåò ïðåèìóùåñòâ", //No bonuses
};
STR16 gzIMPNewCharacterTraitsHelpTexts[]=
{
//I.M.P. Character Traits help text
//Neutral
L"ïëþñû: Íåò ïðåèìóùåñòâ.\n \nìèíóñû: Áåç èçúÿí.",
//Sociable
L"ïëþñû: Ëó÷øå ðàáîòàåò â êîìàíäå.\n \nìèíóñû: Áîåâîé äóõ íå ðàñò¸ò, êîãäà íà¸ìíèê ðàáîòàåò îäèí.",
//Loner
L"ïëþñû: Ëó÷øå ðàáîòàåò â îäèíî÷åñòâå.\n \nìèíóñû: Áîåâîé äóõ íå ðàñò¸ò â ïðèñóòñòâèè äðóãèõ áîéöîâ.",
//Optimist
L"ïëþñû: Áîåâîé äóõ ðàñòåò áûñòðåå, à ñíèæàåòñÿ ìåäëåííåå îáû÷íîãî.\n \nìèíóñû: Øàíñ îáíàðóæèòü ìèíû è ëîâóøêè íèæå ñðåäíåãî.",
//Assertive
L"ïëþñû: Ëó÷øå ëàäèò ñ ëþäüìè è òðåíèðóåò îïîë÷åíèå.\n \nìèíóñû: Äåéñòâèÿ äðóãèõ áîéöîâ íå âëèÿþò íà åãî áîåâîé äóõ.",
//Intellectual
L"ïëþñû: Íåìíîãî áûñòðåå îáó÷àåòñÿ.\n \nìèíóñû: Îáëàäàåò ìåíüøèì ñîïðîòèâëåíèåì ñòðàõó è ïîäàâëåíèþ.",
//Primitive
L"ïëþñû: Óñòà¸ò ìåäëåííåå äðóãèõ, åñëè íå ðàáîòàåò êàê âðà÷, ðåìîíòíèê, òðåíåð èëè ó÷åíèê.\n \nìèíóñû: Åãî ìóäðîñòü, ëèäåðñòâî, âçðûâíîå äåëî, ìåõàíèêà è ìåäèöèíà ðàñòóò ìåäëåííåå îáû÷íîãî.",
//Aggressive
L"ïëþñû: Èìååò áîíóñ ê ñòðåëüáå î÷åðåäÿìè è óðîíó â ðóêîïàøíîé. \nÏðè óáèéñòâå âðàãà áîåâîé äóõ ðàñò¸ò áîëüøå, ÷åì ó äðóãèõ.\n \nìèíóñû: Õóæå èñïîëíÿåò îáÿçàííîñòè, äëÿ êîòîðûõ òðåáóåòñÿ òåðïåíèå: \nðåìîíò, âñêðûòèå çàìêîâ, ñíÿòèå ëîâóøåê, ëå÷åíèå, òðåíèðîâêà îïîë÷åíèÿ.",
//Phlegmatic
L"ïëþñû: Ëó÷øå èñïîëíÿåò îáÿçàííîñòè, òðåáóþùèå òåðïåíèÿ: \nðåìîíò, âñêðûòèå çàìêîâ, ñíÿòèå ëîâóøåê, ëå÷åíèå, òðåíèðîâêà îïîë÷åíèÿ.\n \nìèíóñû: Èìååò ìåíüøèé øàíñ ïåðåõâàòèòü õîä âðàãà.",
//Dauntless
L"ïëþñû: Èìååò ïîâûøåííîå ñîïðîòèâëåíèå ïîäàâëåíèþ è ñòðàõó. \nÁîåâîé äóõ ïðè ðàíåíèÿõ è ãèáåëè òîâàðèùåé ïîíèæàåòñÿ ìåäëåííåå, ÷åì ó äðóãèõ.\n \nìèíóñû: Ìîæåò áûòü ñ áîëüøåé âåðîÿòíîñòüþ ïîðàæåí âî âðåìÿ äâèæåíèÿ.",
//Pacifist
L"ïëþñû: Áîåâîé äóõ ïîâûøàåòñÿ ïðè âûïîëíåíèè íåáîåâûõ çàäàíèé (êðîìå òðåíèðîâêè îïîë÷åíèÿ).\n \nìèíóñû: Óáèéñòâî âðàãîâ íå ïîâûøàåò áîåâîé äóõ.",
//Malicious
L"ïëþñû: Èìååò áîëüøèé øàíñ íàíåñòè áîëåçíåííûå ðàíû è òðàâìû, ïðèâîäÿùèå ê óõóäøåíèþ ïàðàìåòðîâ.\n \nìèíóñû: Èìååò ïðîáëåìû â îáùåíèè è áûñòðî òåðÿåò áîåâîé äóõ, åñëè íå ñðàæàåòñÿ.",
//Show-off
L"ïëþñû: Ëó÷øå ðàáîòàåò â êîìïàíèè ïðåäñòàâèòåëåé ïðîòèâîïîëîæíîãî ïîëà.\n \nìèíóñû: Áîåâîé äóõ áîéöîâ òîãî æå ïîëà â åãî ïðèñóòñòâèè ðàñò¸ò ìåäëåííåå.",
};
STR16 gzIMPDisabilitiesHelpTexts[]=
{
L"Íèêàêîãî âëèÿíèÿ.",
L"Óìåíüøàåòñÿ ðàáîòîñïîñîáíîñòü è âîçíèêàþò ïðîáëåìû ñ äûõàíèåì \nåñëè íàõîäèòñÿ â ïóñòûííîé èëè òðîïè÷åñêîé ìåñòíîñòè.",
L"Ìîæåò âïàñòü â ïàíèêó åñëè îñòàâèòü îäíîãî â îïðåäåë¸ííûõ ñèòóàöèÿõ.",
L"Ïîíèæàåòñÿ ðàáîòîñïîñîáíîòü â çàìêíóòûõ ïîìåùåíèÿõ, ïîäçåìåëüÿõ.",
L"Ïðè ïîïûòêå ïëûòü ìîæåò ñ ë¸ãêîñòüþ óòîíóòü.",
L"Ïðè âèäå áîëüøèõ íàñåêîìûõ ìîæåò âïàñòü â êðàéíîñòè è íàâîðîòèòü äåë... \nÍàõîæäåíèå â òðîïè÷åñêèõ ëåñàõ òàê æå ïîíèæàåò åãî ðàáîòîñïîñîáíîñòü.",
L"Èíîãäà çàáûâàåò ïðèêàçû, èç-çà ÷åãî òåðÿåò \níåêîòîðîå êîëè÷åñòâî Î÷êîâ Äåéñòâèÿ âî âðåìÿ áîÿ.",
L"Èíîãäà áûâàþò ïðèñòóïû ïîìóòíåíèÿ ðàññóäêà. \n òàêèå ìîìåíòû îí ðàññòðåëèâàåò âåñü ìàãàçèí äî ïîñëåäíåé ïóëè. \nÏàäàåò äóõîì, åñëè åãî îðóæèå ýòîãî íå ïîçâîëÿåò.",
};
STR16 gzIMPProfileCostText[]=
{
L"Ñîñòàâëåíèå âàøåé õàððàêòåðèñòèêè ñòîèò %d$. Ïîäòâåðäèòü îïëàòó? ",
};
STR16 zGioNewTraitsImpossibleText[]=
{
L"Íåëüçÿ âûáðàòü íîâûå óìåíèÿ IMP ïåðñîíàæà ñ îòêëþ÷åííûì PROFEX. Ïðîâåðüòå çíà÷åíèå ôàéëà íàñòðîåê JA2_Options.ini, êëþ÷: READ_PROFILE_DATA_FROM_XML.", //You cannot choose the New Trait System with PROFEX utility deactivated. Check your JA2_Options.ini for entry: READ_PROFILE_DATA_FROM_XML.
};
//@@@: New string as of March 3, 2000.
STR16 gzIronManModeWarningText[]=
{
L"Вы выбрали режим \"Стальная воля\". Проходить игру станет гораздо сложнее, так как вы не сможете сохранять игру, когда ваши наемники будут находиться в одном секторе с противником. Во время игры этот режим нельзя будет отключить. Вы уверены, что желаете играть в режиме \"Стальная воля\"?",
L"Âàø âûáîð ïîçâîëèò ñîõðàíÿòüñÿ ëèøü â \"ìèðíîå âðåìÿ\". Ïðîõîäèòü èãðó ñòàíåò ãîðàçäî ñëîæíåå, òàê êàê ñîõðàíÿòüñÿ âû ñìîæåòå òîëüêî ìåæäó áîÿìè. Ïîñëå ñòàðòà èãðû èçìåíèòü ýòó íàñòðîéêó íåëüçÿ. Âû óâåðåíû, ÷òî ãîòîâû ðàññòàòüñÿ ñ âîçìîæíîñòüþ ñîõðàíÿòüñÿ â áîþ?",
};
STR16 gzDisplayCoverText[]=
{
L"Местность: %d/100 %s, Освещённость: %d/100", //Cover: %d/100 %s, Brightness: %d/100
L"Дальнобойность оружия: %d/%d ед., шанс попасть: %d/100", //Gun Range: %d/%d tiles, Chance to hit: %d/100
L"Отключено выделение видимых зон наёмника и врага", //Disabling cover display
L"Видимые зоны наёмнка", //Showing mercenary view
L"Опасные зоны для наёмника", //Showing danger zones for mercenary
L"Ìåñòíîñòü: %d/100 %s, Îñâåù¸ííîñòü: %d/100",
L"Äàëüíîáîéíîñòü îðóæèÿ: %d/%d åä., øàíñ ïîïàñòü: %d/100",
L"Îòêëþ÷åíî âûäåëåíèå âèäèìûõ çîí íà¸ìíèêà è âðàãà",
L"Âèäèìûå çîíû íà¸ìíêà",
L"Îïàñíûå çîíû äëÿ íà¸ìíèêà",
L"Джунгли", //Wood //wanted to use jungle , but wood is shorter in german too (dschungel vs wald)
L"Город", //Urban
L"Пустыня", //Desert
L"Снег", //Snow //NOT USED!!!
L"Лес и пустыня", //Wood and Desert
L"Ãîðîä",
L"Ïóñòûíÿ",
L"Ñíåã", //NOT USED!!!
L"Ëåñ è ïóñòûíÿ",
L"" // yes empty for now
};
+39
View File
@@ -32,6 +32,45 @@ enum
extern STR16 zNewTacticalMessages[];
extern STR16 gzIMPSkillTraitsText[];
////////////////////////////////////////////////////////
// added by SANDRO
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 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 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
extern STR16 gzIMPNewCharacterTraitsHelpTexts[];
extern STR16 gzIMPDisabilitiesHelpTexts[];
extern STR16 gzIMPProfileCostText[];
extern STR16 zGioNewTraitsImpossibleText[];
///////////////////////////////////////////////////////
enum
{
IMM__IRON_MAN_MODE_WARNING_TEXT,
+395 -4
View File
@@ -43,13 +43,16 @@ STR16 zNewTacticalMessages[]=
L"In order to use the editor, please select a campaign other than the default.", ///@@new
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - New STOMP laptop strings
//these strings match up with the defines in IMP Skill trait.cpp
STR16 gzIMPSkillTraitsText[]=
{
L"Lock picking",
L"Hand to hand combat",
// made this more elegant
L"Lock Picking",
L"Hand to Hand",
L"Electronics",
L"Night operations",
L"Night Operations",
L"Throwing",
L"Teaching",
L"Heavy Weapons",
@@ -58,12 +61,400 @@ STR16 gzIMPSkillTraitsText[]=
L"Ambidextrous",
L"Knifing",
L"Sniper",
L"Camouflage",
L"Camouflaged",
L"Martial Arts",
L"None",
L"I.M.P. Specialties",
L"(Expert)",
};
//added another set of skill texts for new major traits
STR16 gzIMPSkillTraitsTextNewMajor[]=
{
L"Auto Weapons",
L"Heavy Weapons",
L"Marksman",
L"Hunter",
L"Gunslinger",
L"Hand to Hand",
L"Deputy",
L"Technician",
L"Paramedic",
L"None",
L"I.M.P. Major Traits",
// second names
L"Machinegunner",
L"Bombardier",
L"Sniper",
L"Ranger",
L"Gunfighter",
L"Martial Arts",
L"Squadleader",
L"Engineer",
L"Doctor",
};
//added another set of skill texts for new minor traits
STR16 gzIMPSkillTraitsTextNewMinor[]=
{
L"Ambidextrous",
L"Melee",
L"Throwing",
L"Night Ops",
L"Stealthy",
L"Athletics",
L"Bodybuilding",
L"Demolitions",
L"Teaching",
L"Scouting",
L"None",
L"I.M.P. Minor Traits",
};
//these texts are for help popup windows, describing trait properties
STR16 gzIMPMajorTraitsHelpTextsAutoWeapons[]=
{
L"+%d%s Chance to Hit with Assault Rifles\n",
L"+%d%s Chance to Hit with SMGs\n",
L"+%d%s Chance to Hit with LMGs\n",
L"-%d%s APs needed to fire with LMGs\n",
L"-%d%s APs needed to ready light machine guns\n",
L"Auto fire/burst chance to hit penalty is reduced by %d%s\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
};
STR16 gzIMPMajorTraitsHelpTextsHeavyWeapons[]=
{
L"-%d%s APs needed to fire grenade launchers\n",
L"-%d%s APs needed to fire rocket launchers\n",
L"+%d%s chance to hit with grenade launchers\n",
L"+%d%s chance to hit with rocket launchers\n",
L"-%d%s APs needed to fire mortar\n",
L"Reduce penalty for mortar CtH by %d%s\n",
L"+%d%s damage to tanks with heavy weapons, grenades and explosives\n",
L"+%d%s damage to other targets with heavy weapons\n",
};
STR16 gzIMPMajorTraitsHelpTextsSniper[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Sniper Rifles\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click (except for handguns)\n",
L"+%d%s damage on shot",
L" plus",
L" per every aim click",
L" after first",
L" after second",
L" after third",
L" after fourth",
L" after fifth",
L" after sixth",
L" after seventh",
L"-%d%s APs needed to chamber a round with bolt-action rifles \n",
L"Adds one more aim click for rifle-type guns\n",
L"Adds %d more aim clicks for rifle-type guns\n",
};
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
{
L"+%d%s Chance to Hit with Rifles\n",
L"+%d%s Chance to Hit with Shotguns\n",
L"-%d%s APs needed to pump Shotguns\n",
L"+%d%s group travelling speed between sectors if traveling by foot\n",
L"+%d%s group travelling speed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
L"-%d%s APs needed to fire with pistols and revolvers\n",
L"+%d%s effective range with pistols and revolvers\n",
L"+%d%s chance to hit with pistols and revolvers\n",
L"+%d%s chance to hit with machine pistols",
L" (on single shots only)",
L"+%d%s aiming bonus per click with pistols, machine pistols and revolvers\n",
L"-%d%s APs needed to raise pistols and revolvers\n",
L"-%d%s APs needed to reload pistols, machine pistols and revolvers\n",
L"Adds %d more aim click for pistols, machine pistols and revolvers\n",
L"Adds %d more aim clicks for pistols, machine pistols and revolvers\n",
};
STR16 gzIMPMajorTraitsHelpTextsMartialArts[]=
{
L"-%d%s AP cost of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s chance to hit with hand to hand attacks with bare hands\n",
L"+%d%s chance to hit with hand to hand attacks with brass knuckles\n",
L"+%d%s damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"+%d%s breath damage of hand to hand attacks(bare hands or with brass knuckles)\n",
L"Enemy knocked out due to your HtH attacks takes slightly longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes much longer to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes very long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes extremely long to recuperate\n",
L"Enemy knocked out due to your HtH attacks takes long hours to recuperate\n",
L"Enemy knocked out due to your HtH attacks probably never stand up\n",
L"Focused (aimed) punch deals +%d%s more damage\n",
L"Your special spinning kick deals +%d%s more damage\n",
L"+%d%s change to dodge hand to hand attacks\n",
L"+%d%s on top chance to dodge HtH attacks with bare hands",
L" or brass knuckles",
L" (+%d%s with brass knuckles)",
L"+%d%s on top chance to dodge HtH attacks with brass knuckles\n",
L"+%d%s chance to dodge attacks by any melee weapon\n",
L"-%d%s APs needed to steal weapon from enemy hands\n",
L"-%d%s APs needed to change state (stand, crouch, lie down), turn around, climb on/off roof and jump obstacles\n",
L"-%d%s APs needed to change state (stand, crouch, lie down)\n",
L"-%d%s APs needed to turn around\n",
L"-%d%s APs needed to climb on/off roof and jump obstacles\n",
L"+%d%s chance to kick doors\n",
L"You gain special animations for hand to hand combat\n",
};
STR16 gzIMPMajorTraitsHelpTextsSquadleader[]=
{
L"+%d%s APs per round of other mercs in vicinity\n",
L"+%d effective exp level of other mercs in vicinity, which have lesser level than the %s\n",
L"+%d effective exp level to count as a standby when counting friends' bonus for suppression\n",
L"+%d%s total suppression tolerance of other mercs in vicinity and %s himself\n",
L"+%d morale gain of other mercs in vicinity\n",
L"-%d morale loss of other mercs in vicinity\n",
L"The vicinity for bonuses is %d tiles",
L" (%d tiles with extended ears)",
L"(Max simultaneous bonuses for one soldier is %d)\n",
L"+%d%s fear resistence of %s\n",
L"Drawback: %dx morale loss for %s's death for all other mercs\n",
};
STR16 gzIMPMajorTraitsHelpTextsTechnician[]=
{
L"+%d%s to repairing speed\n",
L"+%d%s to lockpicking (normal/electronic locks)\n",
L"+%d%s to disarming electronic traps\n",
L"+%d%s to attaching special items and combining things\n",
L"+%d%s to unjamming a gun in combat\n",
L"Reduce penalty to repair electronic items by %d%s\n",
L"Increased chance to detect traps and mines (+%d detect level)\n",
L"+%d%s CtH of robot controlled by the %s\n",
L"%s trait grants you the ability to repair the robot\n",
L"Reduced penalty to repair speed of the robot by %d%s\n",
};
STR16 gzIMPMajorTraitsHelpTextsDoctor[]=
{
L"Has ability to make surgical intervention by using medical bag on wounded soldier\n",
L"Surgery instantly returns %d%s of lost health back.",
L" (This drains the medical bag a lot.)",
L"Can heal lost stats (from critical hits) by the",
L" surgery or",
L" doctor assignment.\n",
L"+%d%s effectiveness on doctor-patient assignment\n",
L"+%d%s bandaging speed\n",
L"+%d%s natural regeneration speed of all soldiers in the same sector",
L" (max %d these bonuses per sector)",
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPMinorTraitsHelpTextsAmbidextrous[]=
{
L"Reduce penalty to shoot dual weapons by %d%s\n",
L"+%d%s speed of reloading guns with magazines\n",
L"+%d%s speed of reloading guns with loose rounds\n",
L"-%d%s APs needed to pickup items\n",
L"-%d%s APs needed to work backpack\n",
L"-%d%s APs needed to handle doors\n",
L"-%d%s APs needed to plant/remove bombs and mines\n",
L"-%d%s APs needed to attach items\n",
};
STR16 gzIMPMinorTraitsHelpTextsMelee[]=
{
L"-%d%s APs needed to attack by blades\n",
L"+%d%s chance to hit with blades\n",
L"+%d%s chance to hit with blunt melee weapons\n",
L"+%d%s damage of blades\n",
L"+%d%s damage of blunt melee weapons\n",
L"Aimed attack by any melee weapon deals +%d%s damage\n",
L"+%d%s chance to dodge attack by melee blades\n",
L"+%d%s on top chance to dodge melee blades if having a blade in hands\n",
L"+%d%s chance to dodge attack by blunt melee weapons\n",
L"+%d%s on top chance to dodge blunt melee weapons if having a blade in hands\n",
};
STR16 gzIMPMinorTraitsHelpTextsThrowing[]=
{
L"-%d%s basic APs needed to throw blades\n",
L"+%d%s max range when throwing blades\n",
L"+%d%s chance to hit when throwing blades\n",
L"+%d%s chance to hit when throwing blades per aim click\n",
L"+%d%s damage of throwing blades\n",
L"+%d%s damage of throwing blades per aim click\n",
L"+%d%s chance to inflict critical hit by throwing blade if not seen or heard\n",
L"+%d critical hit by throwing blade multiplier\n",
L"Adds %d more aim click for throwing blades\n",
L"Adds %d more aim clicks for throwing blades\n",
};
STR16 gzIMPMinorTraitsHelpTextsNightOps[]=
{
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
};
STR16 gzIMPMinorTraitsHelpTextsStealthy[]=
{
L"-%d%s APs needed to move quietly\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Reduced cover penalty for movement by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsAthletics[]=
{
L"-%d%s APs needed for moving (running, walking, swatting, crawling, swimming, etc.)\n",
L"-%d%s energy spent for movement, roof-climbing, obstacle-jumping, swimming, etc.\n",
};
STR16 gzIMPMinorTraitsHelpTextsBodybuilding[]=
{
L"Has %d%s damage resistance\n",
L"+%d%s effective strength for carrying weight capacity \n",
L"Reduced energy lost when hit by HtH attack by %d%s\n",
L"Increased damage needed to fall down if hit to legs by %d%s\n",
};
STR16 gzIMPMinorTraitsHelpTextsDemolitions[]=
{
L"-%d%s APs needed to throw grenades\n",
L"+%d%s max range when throwing grenades\n",
L"+%d%s chance to hit when throwing grenades\n",
L"+%d%s damage of set bombs and mines\n",
L"+%d%s to attaching detonators check\n",
L"+%d%s to planting/removing bombs check\n",
L"Decreases chance enemy will detect your bombs and mines (+%d bomb level)\n",
L"Increased chance shaped charge will open the doors (damage multiplied by %d)\n",
};
STR16 gzIMPMinorTraitsHelpTextsTeaching[]=
{
L"+%d%s bonus to train militia\n",
L"+%d%s bonus to effective leadership for determining militia training\n",
L"+%d%s bonus to teaching other mercs\n",
L"Skill value counts to be +%d higher for being able to teach this skill to other mercs\n",
L"+%d%s bonus to train stats through self-practising assignment\n",
};
STR16 gzIMPMinorTraitsHelpTextsScouting[]=
{
L"+%d to effective sight range with scopes on weapons\n",
L"+%d to effective sight range with binoculars (and scopes separated from weapons)\n",
L"-%d tunnel vision with binoculars (and scopes separated from weapons)\n",
L"If in sector, adjacent sectors will show exact number of enemies\n",
L"If in sector, adjacent sectors will show presence of enemies if any\n",
L"Prevents the enemy to ambush your squad\n",
L"Prevents the bloodcats to ambush your squad\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
};
STR16 gzIMPOldSkillTraitsHelpTexts[]=
{
L"+%d%s bonus to lockpicking\n", // 0
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks\n",
L"Eliminates the penalty to repair and handle\nelectronic things (locks, traps, rem. detonators, robot, etc.)\n",
L"+%d to effective sight range in dark\n",
L"+%d to general effective hearing range\n",
L"+%d to effective hearing range in dark on top\n",
L"+%d to interrupts modifier in dark\n",
L"-%d need to sleep\n",
L"+%d%s max range when throwing anything\n", // 10
L"+%d%s chance to hit when throwing anything\n",
L"+%d%s chance to instantly kill by throwing knife if not seen or heard\n",
L"+%d%s bonus to train militia and instruct other mercs\n",
L"+%d%s effective leadership for militia training calculations\n",
L"+%d%s chance to hit with rocket/greande launchers and mortar\n",
L"Auto fire/burst chance to hit penalty is divided by %d\n",
L"Reduced chance for shooting unwanted bullets on autofire\n",
L"+%d%s chance to move quietly\n",
L"+%d%s stealth (being 'invisible' if unnoticed)\n",
L"Eliminates the CtH penalty for second hand when firing two weapons at once\n", // 20
L"+%d%s chance to hit with melee blades\n",
L"+%d%s chance to dodge attacks by melee blades if having blade in hands\n",
L"+%d%s chance to dodge attacks by melee blades if having anything else in hands\n",
L"+%d%s chance to dodge hand to hand attacks if having blade in hands\n",
L"-%d%s effective range to target with all weapons\n",
L"+%d%s aiming bonus per aim click\n",
L"Provides permanent camouflage\n",
L"+%d%s hand to hand chance to hit\n",
L"+%d%s hand to hand damage\n",
L"+%d%s chance to dodge hand to hand attacks if having empty hands\n", // 30
L"+%d%s chance to dodge hand to hand attacks if not having empty hands\n",
L"+%d%s chance to dodge attacks by melee blades\n",
L"Can perform spinning kick attack on weakened enemies to deal double damage\n",
L"You gain special animations for hand to hand combat\n",
L"No bonuses",
};
STR16 gzIMPNewCharacterTraitsHelpTexts[]=
{
L"A: No advantage.\nD: No disadvantage.",
L"A: Has better performance when couple of mercs are nearby.\nD: Gains no morale when no other merc is nearby.",
L"A: Has better performance when no other merc is nearby.\nD: Gains no morale when in a group.",
L"A: His morale sinks a little slower and grows faster than normal.\nD: Has lesser chance to detect traps and mines.",
L"A: Has bonus on training militia and is better at communication with people.\nD: Gains no morale for actions of other mercs.",
L"A: Slightly faster learning when assigned on practicing or as a student.\nD: Has lesser suppression and fear resistance.",
L"A: His energy goes down a bit slower except on assignments as doctor, repairman, militia trainer or if learning certain skills.\nD: His wisdom, leadership, explosives, mechanical and medical skills improve slightly slower.",
L"A: Has slightly better chance to hit on burst/autofire and inflicts slightly bigger damage in close combat\n Gains a little more morale for killing.\nD: Has penalty for actions which needs patience like repairing items, picking locks, removing traps, doctoring, training militia.",
L"A: Has bonus for actions which needs patience like repairing items, picking locks, removing traps, doctoring and training militia.\nD: His interrupts chance is slightly lowered.",
L"A: Incresed resistance to suppression and fear.\n Morale loss for taking damage and companions deaths is lower for him.\nD: Can be hit easier and enemy penalty for moving target is lesser in his case.",
L"A: He gains morale when on non-combat assignments (except training militia).\nD: Gains no morale for killing.",
L"A: Has bigger chance for inflicting stat loss and can inflict special painful wounds when able to\n Gains bonus morale for inflicting stat loss.\nD: Has penalty for communication with people and his morale sinks faster if not fighting.",
L"A: Has better performance when there are some mercs of opposite gender nearby.\nD: Morale of other mercs of the same gender grows slower if nearby.",
};
STR16 gzIMPDisabilitiesHelpTexts[]=
{
L"No effects.",
L"Has problems with breathing and reduced overall performance if in tropical or desert sectors.",
L"Can suffer panic attack if left alone in certain situations.",
L"His overall performance is reduced if underground.",
L"If trying to swim he can easily drown.",
L"A look at large insects can make a big problems\nand being in tropical sectors also reduce his performance a bit.",
L"Sometimes forgets what orders he got and therefore loses some APs if in combat.",
L"He can go psycho and shoot like mad once per a while\nand can lose morale if unable to do that with given weapon.",
};
STR16 gzIMPProfileCostText[]=
{
L"The profile cost is %d$. Do you authorize the payment? ",
};
STR16 zGioNewTraitsImpossibleText[]=
{
L"You cannot choose the New Trait System with PROFEX utility deactivated. Check your JA2_Options.ini for entry: READ_PROFILE_DATA_FROM_XML.",
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//@@@: New string as of March 3, 2000.
STR16 gzIronManModeWarningText[]=
{
+39
View File
@@ -32,6 +32,45 @@ enum
extern STR16 zNewTacticalMessages[];
extern STR16 gzIMPSkillTraitsText[];
////////////////////////////////////////////////////////
// added by SANDRO
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 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 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
extern STR16 gzIMPNewCharacterTraitsHelpTexts[];
extern STR16 gzIMPDisabilitiesHelpTexts[];
extern STR16 gzIMPProfileCostText[];
extern STR16 zGioNewTraitsImpossibleText[];
///////////////////////////////////////////////////////
enum
{
IMM__IRON_MAN_MODE_WARNING_TEXT,
+1215 -353
View File
File diff suppressed because it is too large Load Diff
+1194 -358
View File
File diff suppressed because it is too large Load Diff
+964 -107
View File
File diff suppressed because it is too large Load Diff
+694
View File
@@ -0,0 +1,694 @@
#ifndef __BINKH__
#define __BINKH__
#define BINKMAJORVERSION 1
#define BINKMINORVERSION 5
#define BINKSUBVERSION 10
#define BINKVERSION "1.5J"
#define BINKDATE "2002-06-24"
#ifndef __RADRES__
#ifndef __RADBASEH__
#include "radbase.h"
#endif
RADDEFSTART
typedef struct BINK PTR4* HBINK;
struct BINKIO;
typedef S32 (RADLINK PTR4* BINKIOOPEN) (struct BINKIO PTR4* Bnkio, const char PTR4 *name, U32 flags);
typedef U32 (RADLINK PTR4* BINKIOREADHEADER) (struct BINKIO PTR4* Bnkio, S32 Offset, void PTR4* Dest,U32 Size);
typedef U32 (RADLINK PTR4* BINKIOREADFRAME) (struct BINKIO PTR4* Bnkio, U32 Framenum,S32 origofs,void PTR4* dest,U32 size);
typedef U32 (RADLINK PTR4* BINKIOGETBUFFERSIZE)(struct BINKIO PTR4* Bnkio, U32 Size);
typedef void (RADLINK PTR4* BINKIOSETINFO) (struct BINKIO PTR4* Bnkio, void PTR4* Buf,U32 Size,U32 FileSize,U32 simulate);
typedef U32 (RADLINK PTR4* BINKIOIDLE) (struct BINKIO PTR4* Bnkio);
typedef void (RADLINK PTR4* BINKIOCLOSE) (struct BINKIO PTR4* Bnkio);
typedef void (RADLINK PTR4* BINKCBSUSPEND) (struct BINKIO PTR4* Bnkio);
typedef S32 (RADLINK PTR4* BINKCBTRYSUSPEND) (struct BINKIO PTR4* Bnkio);
typedef void (RADLINK PTR4* BINKCBRESUME) (struct BINKIO PTR4* Bnkio);
typedef void (RADLINK PTR4* BINKCBIDLE) (struct BINKIO PTR4* Bnkio);
struct BINKIO
{
BINKIOREADHEADER ReadHeader;
BINKIOREADFRAME ReadFrame;
BINKIOGETBUFFERSIZE GetBufferSize;
BINKIOSETINFO SetInfo;
BINKIOIDLE Idle;
BINKIOCLOSE Close;
HBINK bink;
volatile U32 ReadError;
volatile U32 DoingARead;
volatile U32 BytesRead;
volatile U32 Working;
volatile U32 TotalTime;
volatile U32 ForegroundTime;
volatile U32 IdleTime;
volatile U32 ThreadTime;
volatile U32 BufSize;
volatile U32 BufHighUsed;
volatile U32 CurBufSize;
volatile U32 CurBufUsed;
volatile U8 iodata[128+32];
// filled in by the caller
BINKCBSUSPEND suspend_callback;
BINKCBTRYSUSPEND try_suspend_callback;
BINKCBRESUME resume_callback;
BINKCBIDLE idle_on_callback;
volatile U32 callback_control[16]; // buffer for background IO callback
};
struct BINKSND;
typedef S32 (RADLINK PTR4* BINKSNDOPEN) (struct BINKSND PTR4* BnkSnd, U32 freq, S32 bits, S32 chans, U32 flags, HBINK bink);
typedef S32 (RADLINK PTR4* BINKSNDREADY) (struct BINKSND PTR4* BnkSnd);
typedef S32 (RADLINK PTR4* BINKSNDLOCK) (struct BINKSND PTR4* BnkSnd, U8 PTR4* PTR4* addr, U32 PTR4* len);
typedef S32 (RADLINK PTR4* BINKSNDUNLOCK) (struct BINKSND PTR4* BnkSnd, U32 filled);
typedef void (RADLINK PTR4* BINKSNDVOLUME) (struct BINKSND PTR4* BnkSnd, S32 volume);
typedef void (RADLINK PTR4* BINKSNDPAN) (struct BINKSND PTR4* BnkSnd, S32 pan);
typedef void (RADLINK PTR4* BINKSNDMIXBINS) (struct BINKSND PTR4* BnkSnd, U32 PTR4* mix_bins, U32 total);
typedef void (RADLINK PTR4* BINKSNDMIXBINVOLS) (struct BINKSND PTR4* BnkSnd, U32 PTR4* vol_mix_bins, S32 PTR4* volumes, U32 total );
typedef S32 (RADLINK PTR4* BINKSNDONOFF) (struct BINKSND PTR4* BnkSnd, S32 status);
typedef S32 (RADLINK PTR4* BINKSNDPAUSE) (struct BINKSND PTR4* BnkSnd, S32 status);
typedef void (RADLINK PTR4* BINKSNDCLOSE) (struct BINKSND PTR4* BnkSnd);
typedef BINKSNDOPEN (RADLINK PTR4* BINKSNDSYSOPEN) (U32 param);
struct BINKSND
{
BINKSNDREADY Ready;
BINKSNDLOCK Lock;
BINKSNDUNLOCK Unlock;
BINKSNDVOLUME Volume;
BINKSNDPAN Pan;
BINKSNDPAUSE Pause;
BINKSNDONOFF SetOnOff;
BINKSNDCLOSE Close;
BINKSNDMIXBINS MixBins;
BINKSNDMIXBINVOLS MixBinVols;
U32 sndbufsize; // sound buffer size
U8 PTR4* sndbuf; // sound buffer
U8 PTR4* sndend; // end of the sound buffer
U8 PTR4* sndwritepos; // current write position
U8 PTR4* sndreadpos; // current read position
U32 sndcomp; // sound compression handle
U32 sndamt; // amount of sound currently in the buffer
U32 sndconvert8; // convert back to 8-bit sound at runtime
U32 sndendframe; // frame number that the sound ends on
U32 sndprime; // amount of data to prime the playahead
U32 sndpad; // padded this much audio
U32 BestSizeIn16;
U32 BestSizeMask;
U32 SoundDroppedOut;
S32 OnOff;
U32 Latency;
U32 VideoScale;
U32 freq;
S32 bits,chans;
U8 snddata[256];
};
struct BINKRECT
{
S32 Left,Top,Width,Height;
};
#define BINKMAXDIRTYRECTS 8
struct BUNDLEPOINTERS
{
void* typeptr;
void* type16ptr;
void* colorptr;
void* bits2ptr;
void* motionXptr;
void* motionYptr;
void* dctptr;
void* mdctptr;
void* patptr;
};
struct BINK
{
U32 Width; // Width (1 based, 640 for example)
U32 Height; // Height (1 based, 480 for example)
U32 Frames; // Number of frames (1 based, 100 = 100 frames)
U32 FrameNum; // Frame to *be* displayed (1 based)
U32 LastFrameNum; // Last frame decompressed or skipped (1 based)
U32 FrameRate; // Frame Rate Numerator
U32 FrameRateDiv; // Frame Rate Divisor (frame rate=numerator/divisor)
U32 ReadError; // Non-zero if a read error has ocurred
U32 OpenFlags; // flags used on open
U32 BinkType; // Bink flags
U32 Size; // size of file
U32 FrameSize; // The current frame's size in bytes
U32 SndSize; // The current frame sound tracks' size in bytes
BINKRECT FrameRects[BINKMAXDIRTYRECTS];// Dirty rects from BinkGetRects
S32 NumRects;
U32 PlaneNum; // which set of planes is current
void PTR4* YPlane[2]; // pointer to the uncompressed Y (Cr and Cr follow)
void PTR4* APlane[2]; // decompressed alpha plane (if present)
U32 YWidth; // widths and heights of the video planes
U32 YHeight;
U32 UVWidth;
U32 UVHeight;
void PTR4* MaskPlane; // pointer to the mask plane (Ywidth/16*Yheight/16)
U32 MaskPitch; // Mask Pitch
U32 MaskLength; // total length of the mask plane
U32 LargestFrameSize; // Largest frame size
U32 InternalFrames; // how many frames were potentially compressed
S32 NumTracks; // how many tracks
U32 Highest1SecRate; // Highest 1 sec data rate
U32 Highest1SecFrame; // Highest 1 sec data rate starting frame
S32 Paused; // is the bink movie paused?
U32 BackgroundThread; // handle to background thread
// everything below is for internal Bink use
void PTR4* compframe; // compressed frame data
void PTR4* preloadptr; // preloaded compressed frame data
U32* frameoffsets; // offsets of each of the frames
BINKIO bio; // IO structure
U8 PTR4* ioptr; // io buffer ptr
U32 iosize; // io buffer size
U32 decompwidth; // width not include scaling
U32 decompheight; // height not include scaling
S32 PTR4* trackindexes; // track indexes
U32 PTR4* tracksizes; // largest single frame of track
U32 PTR4* tracktypes; // type of each sound track
S32 PTR4* trackIDs; // external track numbers
U32 numrects; // number of rects from BinkGetRects
U32 playedframes; // how many frames have we played
U32 firstframetime; // very first frame start
U32 startframetime; // start frame start
U32 startblittime; // start of blit period
U32 startsynctime; // start of synched time
U32 startsyncframe; // frame of startsynctime
U32 twoframestime; // two frames worth of time
U32 entireframetime; // entire frame time
U32 slowestframetime; // slowest frame in ms
U32 slowestframe; // slowest frame number
U32 slowest2frametime; // second slowest frame in ms
U32 slowest2frame; // second slowest frame
U32 soundon; // sound turned on?
U32 videoon; // video turned on?
U32 totalmem; // total memory used
U32 timevdecomp; // total time decompressing video
U32 timeadecomp; // total time decompressing audio
U32 timeblit; // total time blitting
U32 timeopen; // total open time
U32 fileframerate; // frame rate originally in the file
U32 fileframeratediv;
U32 runtimeframes; // max frames for runtime analysis
U32 runtimemoveamt; // bytes to move each frame
U32 PTR4* rtframetimes; // start times for runtime frames
U32 PTR4* rtadecomptimes; // decompress times for runtime frames
U32 PTR4* rtvdecomptimes; // decompress times for runtime frames
U32 PTR4* rtblittimes; // blit times for runtime frames
U32 PTR4* rtreadtimes; // read times for runtime frames
U32 PTR4* rtidlereadtimes; // idle read times for runtime frames
U32 PTR4* rtthreadreadtimes; // thread read times for runtime frames
U32 lastblitflags; // flags used on last blit
U32 lastdecompframe; // last frame number decompressed
U32 playingtracks; // how many tracks are playing
U32 soundskips; // number of sound stops
BINKSND PTR4* bsnd; // SND structures
U32 skippedlastblit; // skipped last frame?
U32 skipped_this_frame; // skipped the current frame?
U32 skippedblits; // how many blits were skipped
BUNDLEPOINTERS bunp; // pointers to internal temporary memory
U32 skipped_in_a_row; // how many frames have we skipped in a row
U32 big_sound_skip_adj; // adjustment for large skips
U32 big_sound_skip_reduce; // amount to reduce large skips by each frame
U32 last_time_almost_empty; // time of last almost empty IO buffer
U32 last_read_count; // counter to keep track of the last bink IO
U32 last_sound_count; // counter to keep track of the last bink sound
U32 snd_callback_buffer[16];// buffer for background sound callback
};
struct BINKSUMMARY
{
U32 Width; // Width of frames
U32 Height; // Height of frames
U32 TotalTime; // total time (ms)
U32 FileFrameRate; // frame rate
U32 FileFrameRateDiv; // frame rate divisor
U32 FrameRate; // frame rate
U32 FrameRateDiv; // frame rate divisor
U32 TotalOpenTime; // Time to open and prepare for decompression
U32 TotalFrames; // Total Frames
U32 TotalPlayedFrames; // Total Frames played
U32 SkippedFrames; // Total number of skipped frames
U32 SkippedBlits; // Total number of skipped blits
U32 SoundSkips; // Total number of sound skips
U32 TotalBlitTime; // Total time spent blitting
U32 TotalReadTime; // Total time spent reading
U32 TotalVideoDecompTime; // Total time spent decompressing video
U32 TotalAudioDecompTime; // Total time spent decompressing audio
U32 TotalIdleReadTime; // Total time spent reading while idle
U32 TotalBackReadTime; // Total time spent reading in background
U32 TotalReadSpeed; // Total io speed (bytes/second)
U32 SlowestFrameTime; // Slowest single frame time (ms)
U32 Slowest2FrameTime; // Second slowest single frame time (ms)
U32 SlowestFrameNum; // Slowest single frame number
U32 Slowest2FrameNum; // Second slowest single frame number
U32 AverageDataRate; // Average data rate of the movie
U32 AverageFrameSize; // Average size of the frame
U32 HighestMemAmount; // Highest amount of memory allocated
U32 TotalIOMemory; // Total extra memory allocated
U32 HighestIOUsed; // Highest extra memory actually used
U32 Highest1SecRate; // Highest 1 second rate
U32 Highest1SecFrame; // Highest 1 second start frame
};
struct BINKREALTIME
{
U32 FrameNum; // Current frame number
U32 FrameRate; // frame rate
U32 FrameRateDiv; // frame rate divisor
U32 Frames; // frames in this sample period
U32 FramesTime; // time is ms for these frames
U32 FramesVideoDecompTime; // time decompressing these frames
U32 FramesAudioDecompTime; // time decompressing these frames
U32 FramesReadTime; // time reading these frames
U32 FramesIdleReadTime; // time reading these frames at idle
U32 FramesThreadReadTime; // time reading these frames in background
U32 FramesBlitTime; // time blitting these frames
U32 ReadBufferSize; // size of read buffer
U32 ReadBufferUsed; // amount of read buffer currently used
U32 FramesDataRate; // data rate for these frames
};
#define BINKMARKER1 'fKIB'
#define BINKMARKER2 'gKIB' // new Bink files use this tag
#define BINKMARKER3 'hKIB' // newer Bink files use this tag
#define BINKMARKER4 'iKIB' // even newer Bink files use this tag
struct BINKHDR
{
U32 Marker; // Bink marker
U32 Size; // size of the file-8
U32 Frames; // Number of frames (1 based, 100 = 100 frames)
U32 LargestFrameSize; // Size in bytes of largest frame
U32 InternalFrames; // Number of internal frames
U32 Width; // Width (1 based, 640 for example)
U32 Height; // Height (1 based, 480 for example)
U32 FrameRate; // frame rate
U32 FrameRateDiv; // frame rate divisor (framerate/frameratediv=fps)
U32 Flags; // height compression options
U32 NumTracks; // number of tracks
};
//=======================================================================
#define BINKFRAMERATE 0x00001000L // Override fr (call BinkFrameRate first)
#define BINKPRELOADALL 0x00002000L // Preload the entire animation
#define BINKSNDTRACK 0x00004000L // Set the track number to play
#define BINKOLDFRAMEFORMAT 0x00008000L // using the old Bink frame format (internal use only)
#define BINKRBINVERT 0x00010000L // use reversed R and B planes (internal use only)
#define BINKGRAYSCALE 0x00020000L // Force Bink to use grayscale
#define BINKNOMMX 0x00040000L // Don't use MMX
#define BINKNOSKIP 0x00080000L // Don't skip frames if falling behind
#define BINKALPHA 0x00100000L // Decompress alpha plane (if present)
#define BINKNOFILLIOBUF 0x00200000L // Fill the IO buffer in SmackOpen
#define BINKSIMULATE 0x00400000L // Simulate the speed (call BinkSim first)
#define BINKFILEHANDLE 0x00800000L // Use when passing in a file handle
#define BINKIOSIZE 0x01000000L // Set an io size (call BinkIOSize first)
#define BINKIOPROCESSOR 0x02000000L // Set an io processor (call BinkIO first)
#define BINKFROMMEMORY 0x04000000L // Use when passing in a pointer to the file
#define BINKNOTHREADEDIO 0x08000000L // Don't use a background thread for IO
#define BINKSURFACEFAST 0x00000000L
#define BINKSURFACESLOW 0x08000000L
#define BINKSURFACEDIRECT 0x04000000L
#define BINKCOPYALL 0x80000000L // copy all pixels (not just changed)
#define BINKCOPY2XH 0x10000000L // Force doubling height scaling
#define BINKCOPY2XHI 0x20000000L // Force interleaving height scaling
#define BINKCOPY2XW 0x30000000L // copy the width zoomed by two
#define BINKCOPY2XWH 0x40000000L // copy the width and height zoomed by two
#define BINKCOPY2XWHI 0x50000000L // copy the width and height zoomed by two
#define BINKCOPY1XI 0x60000000L // copy the width and height zoomed by two
#define BINKCOPYNOSCALING 0x70000000L // Force scaling off
//#define BINKALPHA 0x00100000L // Decompress alpha plane (if present)
//#define BINKNOSKIP 0x00080000L // don't skip the blit if behind in sound
//#define BINKNOMMX 0x00040000L // Don't skip frames if falling behind
//#define BINKGRAYSCALE 0x00020000L // force Bink to use grayscale
//#define BINKRBINVERT 0x00010000L // use reversed R and B planes
#define BINKSURFACE8P 0
#define BINKSURFACE24 1
#define BINKSURFACE24R 2
#define BINKSURFACE32 3
#define BINKSURFACE32R 4
#define BINKSURFACE32A 5
#define BINKSURFACE32RA 6
#define BINKSURFACE4444 7
#define BINKSURFACE5551 8
#define BINKSURFACE555 9
#define BINKSURFACE565 10
#define BINKSURFACE655 11
#define BINKSURFACE664 12
#define BINKSURFACEYUY2 13
#define BINKSURFACEUYVY 14
#define BINKSURFACEYV12 15
#define BINKSURFACEMASK 15
#ifdef __RADXBOX__
#define BINKSURFACESALL 32
#define BINKCONVERTERSMONO 64
#define BINKCONVERTERS2X 256
#define BINKCONVERTERSALL (BINKSURFACESALL|BINKCONVERTERSMONO|BINKCONVERTERS2X)
#define BinkLoad() BinkLoadUnload(1)
#define BinkUnload() BinkLoadUnload(0)
#define BinkLoadConverter(val) BinkLoadUnloadConverter(val,1)
#define BinkUnloadConverter(val) BinkLoadUnloadConverter(val,0)
RADEXPFUNC void RADEXPLINK BinkLoadUnload( S32 inout );
RADEXPFUNC void RADEXPLINK BinkLoadUnloadConverter( U32 surfaces, S32 inout );
#endif
#define BINKGOTOQUICK 1
#define BINKGOTOQUICKSOUND 2
#define BINKGETKEYPREVIOUS 0
#define BINKGETKEYNEXT 1
#define BINKGETKEYCLOSEST 2
#define BINKGETKEYNOTEQUAL 128
//=======================================================================
#ifdef __RADMAC__
#include <files.h>
#pragma export on
RADEXPFUNC HBINK RADEXPLINK BinkMacOpen(FSSpec* fsp,U32 flags);
#endif
RADEXPFUNC void PTR4* RADEXPLINK BinkLogoAddress(void);
RADEXPFUNC void RADEXPLINK BinkSetError(const char PTR4* err);
RADEXPFUNC char PTR4* RADEXPLINK BinkGetError(void);
RADEXPFUNC HBINK RADEXPLINK BinkOpen(const char PTR4* name,U32 flags);
RADEXPFUNC S32 RADEXPLINK BinkDoFrame(HBINK bnk);
RADEXPFUNC void RADEXPLINK BinkNextFrame(HBINK bnk);
RADEXPFUNC S32 RADEXPLINK BinkWait(HBINK bnk);
RADEXPFUNC void RADEXPLINK BinkClose(HBINK bnk);
RADEXPFUNC S32 RADEXPLINK BinkPause(HBINK bnk,S32 pause);
RADEXPFUNC S32 RADEXPLINK BinkCopyToBuffer(HBINK bnk,void* dest,S32 destpitch,U32 destheight,U32 destx,U32 desty,U32 flags);
RADEXPFUNC S32 RADEXPLINK BinkCopyToBufferRect(HBINK bnk,void* dest,S32 destpitch,U32 destheight,U32 destx,U32 desty,U32 srcx, U32 srcy, U32 srcw, U32 srch, U32 flags);
RADEXPFUNC S32 RADEXPLINK BinkGetRects(HBINK bnk,U32 flags);
RADEXPFUNC void RADEXPLINK BinkGoto(HBINK bnk,U32 frame,S32 flags); // use 1 for the first frame
RADEXPFUNC U32 RADEXPLINK BinkGetKeyFrame(HBINK bnk,U32 frame,S32 flags);
RADEXPFUNC S32 RADEXPLINK BinkSetVideoOnOff(HBINK bnk,S32 onoff);
RADEXPFUNC S32 RADEXPLINK BinkSetSoundOnOff(HBINK bnk,S32 onoff);
RADEXPFUNC void RADEXPLINK BinkSetVolume(HBINK bnk, U32 trackid, S32 volume);
RADEXPFUNC void RADEXPLINK BinkSetPan(HBINK bnk,U32 trackid, S32 pan);
RADEXPFUNC void RADEXPLINK BinkSetMixBins(HBINK bnk,U32 trackid, U32 PTR4* mix_bins, U32 total);
RADEXPFUNC void RADEXPLINK BinkSetMixBinVolumes(HBINK bnk,U32 trackid, U32 PTR4* vol_mix_bins, S32 PTR4* volumes, U32 total);
RADEXPFUNC void RADEXPLINK BinkService(HBINK bink);
typedef struct BINKTRACK PTR4* HBINKTRACK;
typedef struct BINKTRACK
{
U32 Frequency;
U32 Bits;
U32 Channels;
U32 MaxSize;
HBINK bink;
U32 sndcomp;
S32 trackindex;
} BINKTRACK;
RADEXPFUNC HBINKTRACK RADEXPLINK BinkOpenTrack(HBINK bnk,U32 trackindex);
RADEXPFUNC void RADEXPLINK BinkCloseTrack(HBINKTRACK bnkt);
RADEXPFUNC U32 RADEXPLINK BinkGetTrackData(HBINKTRACK bnkt,void PTR4* dest);
RADEXPFUNC U32 RADEXPLINK BinkGetTrackType(HBINK bnk,U32 trackindex);
RADEXPFUNC U32 RADEXPLINK BinkGetTrackMaxSize(HBINK bnk,U32 trackindex);
RADEXPFUNC U32 RADEXPLINK BinkGetTrackID(HBINK bnk,U32 trackindex);
RADEXPFUNC void RADEXPLINK BinkGetSummary(HBINK bnk,BINKSUMMARY PTR4* sum);
RADEXPFUNC void RADEXPLINK BinkGetRealtime(HBINK bink,BINKREALTIME PTR4* run,U32 frames);
RADEXPFUNC void RADEXPLINK BinkSetSoundTrack(U32 total_tracks, U32 PTR4* tracks);
RADEXPFUNC void RADEXPLINK BinkSetIO(BINKIOOPEN io);
RADEXPFUNC void RADEXPLINK BinkSetFrameRate(U32 forcerate,U32 forceratediv);
RADEXPFUNC void RADEXPLINK BinkSetSimulate(U32 sim);
RADEXPFUNC void RADEXPLINK BinkSetIOSize(U32 iosize);
RADEXPFUNC S32 RADEXPLINK BinkSetSoundSystem(BINKSNDSYSOPEN open, U32 param);
#ifdef __RADWIN__
RADEXPFUNC BINKSNDOPEN RADEXPLINK BinkOpenDirectSound(U32 param); // don't call directly
#define BinkSoundUseDirectSound(lpDS) BinkSetSoundSystem(BinkOpenDirectSound,(U32)lpDS)
RADEXPFUNC BINKSNDOPEN RADEXPLINK BinkOpenWaveOut(U32 param); // don't call directly
#define BinkSoundUseWaveOut() BinkSetSoundSystem(BinkOpenWaveOut,0)
#endif
#ifndef __RADMAC__
RADEXPFUNC BINKSNDOPEN RADEXPLINK BinkOpenMiles(U32 param); // don't call directly
#define BinkSoundUseMiles(hdigdriver) BinkSetSoundSystem(BinkOpenMiles,(U32)hdigdriver)
#endif
#ifdef __RADMAC__
RADEXPFUNC BINKSNDOPEN RADEXPLINK BinkOpenSoundManager(U32 param); // don't call directly
#define BinkSoundUseSoundManager() BinkSetSoundSystem(BinkOpenSoundManager,0)
#endif
#ifdef __RADNGC__
#ifdef __RADNGC__
RADEXPFUNC void RADEXPLINK RADSetAudioMemory(RADMEMALLOC a,RADMEMFREE f);
RADEXPFUNC void PTR4* RADEXPLINK radaudiomalloc(U32 numbytes);
RADEXPFUNC void RADEXPLINK radaudiofree(void PTR4* ptr);
#endif
RADEXPFUNC BINKSNDOPEN RADEXPLINK BinkOpenNGCSound(U32 param); // don't call directly
#define BinkSoundUseNGCSound() BinkSetSoundSystem(BinkOpenNGCSound,0)
#endif
#if defined(__RADXBOX__) || defined(__RADWIN__)
RADEXPFUNC S32 RADEXPLINK BinkDX8SurfaceType(void* lpD3Ds);
#endif
// The BinkBuffer API isn't implemented on DOS, Xbox or GameCube
#if !defined(__RADDOS__) && !defined(__RADXBOX__) && !defined(__RADNGC__)
//=========================================================================
typedef struct BINKBUFFER * HBINKBUFFER;
#define BINKBUFFERSTRETCHXINT 0x80000000
#define BINKBUFFERSTRETCHX 0x40000000
#define BINKBUFFERSHRINKXINT 0x20000000
#define BINKBUFFERSHRINKX 0x10000000
#define BINKBUFFERSTRETCHYINT 0x08000000
#define BINKBUFFERSTRETCHY 0x04000000
#define BINKBUFFERSHRINKYINT 0x02000000
#define BINKBUFFERSHRINKY 0x01000000
#define BINKBUFFERSCALES 0xff000000
#define BINKBUFFERRESOLUTION 0x00800000
#ifdef __RADMAC__
#include <windows.h>
#include <palettes.h>
#include <qdoffscreen.h>
struct BINKBUFFER
{
U32 Width;
U32 Height;
U32 WindowWidth;
U32 WindowHeight;
U32 SurfaceType;
void* Buffer;
S32 BufferPitch;
U32 ScreenWidth;
U32 ScreenHeight;
U32 ScreenDepth;
U32 ScaleFlags;
S32 destx,desty;
S32 wndx,wndy;
U32 wnd;
S32 noclipping;
U32 type;
S32 issoftcur;
U32 cursorcount;
};
#define BINKBUFFERAUTO 0
#define BINKBUFFERDIRECT 1
#define BINKBUFFERGWORLD 2
#define BINKBUFFERTYPEMASK 31
RADEXPFUNC HBINKBUFFER RADEXPLINK BinkBufferOpen( WindowPtr wnd, U32 width, U32 height, U32 bufferflags);
RADEXPFUNC S32 RADEXPLINK BinkGDSurfaceType( GDHandle gd );
RADEXPFUNC S32 RADEXPLINK BinkIsSoftwareCursor(GDHandle gd);
RADEXPFUNC S32 RADEXPLINK BinkCheckCursor(WindowPtr wp,S32 x,S32 y,S32 w,S32 h);
#else
struct BINKBUFFER
{
U32 Width;
U32 Height;
U32 WindowWidth;
U32 WindowHeight;
U32 SurfaceType;
void* Buffer;
S32 BufferPitch;
S32 ClientOffsetX;
S32 ClientOffsetY;
U32 ScreenWidth;
U32 ScreenHeight;
U32 ScreenDepth;
U32 ExtraWindowWidth;
U32 ExtraWindowHeight;
U32 ScaleFlags;
U32 StretchWidth;
U32 StretchHeight;
S32 surface;
void* ddsurface;
void* ddclipper;
S32 destx,desty;
S32 wndx,wndy;
U32 wnd;
S32 ddoverlay;
S32 ddoffscreen;
S32 lastovershow;
S32 issoftcur;
U32 cursorcount;
void* buffertop;
U32 type;
S32 noclipping;
S32 loadeddd;
S32 loadedwin;
void* dibh;
void* dibbuffer;
S32 dibpitch;
void* dibinfo;
U32 dibdc;
U32 diboldbitmap;
};
#define BINKBUFFERAUTO 0
#define BINKBUFFERPRIMARY 1
#define BINKBUFFERDIBSECTION 2
#define BINKBUFFERYV12OVERLAY 3
#define BINKBUFFERYUY2OVERLAY 4
#define BINKBUFFERUYVYOVERLAY 5
#define BINKBUFFERYV12OFFSCREEN 6
#define BINKBUFFERYUY2OFFSCREEN 7
#define BINKBUFFERUYVYOFFSCREEN 8
#define BINKBUFFERRGBOFFSCREENVIDEO 9
#define BINKBUFFERRGBOFFSCREENSYSTEM 10
#define BINKBUFFERLAST 10
#define BINKBUFFERTYPEMASK 31
RADEXPFUNC HBINKBUFFER RADEXPLINK BinkBufferOpen( void* /*HWND*/ wnd, U32 width, U32 height, U32 bufferflags);
RADEXPFUNC S32 RADEXPLINK BinkBufferSetHWND( HBINKBUFFER buf, void* /*HWND*/ newwnd);
RADEXPFUNC S32 RADEXPLINK BinkDDSurfaceType(void PTR4* lpDDS);
RADEXPFUNC S32 RADEXPLINK BinkIsSoftwareCursor(void PTR4* lpDDSP, void* /*HCURSOR*/ cur);
RADEXPFUNC S32 RADEXPLINK BinkCheckCursor(void* /*HWND*/ wnd,S32 x,S32 y,S32 w,S32 h);
RADEXPFUNC S32 RADEXPLINK BinkBufferSetDirectDraw(void PTR4* lpDirectDraw, void PTR4* lpPrimary);
#endif
RADEXPFUNC void RADEXPLINK BinkBufferClose( HBINKBUFFER buf);
RADEXPFUNC S32 RADEXPLINK BinkBufferLock( HBINKBUFFER buf);
RADEXPFUNC S32 RADEXPLINK BinkBufferUnlock( HBINKBUFFER buf);
RADEXPFUNC void RADEXPLINK BinkBufferSetResolution( S32 w, S32 h, S32 bits);
RADEXPFUNC void RADEXPLINK BinkBufferCheckWinPos( HBINKBUFFER buf, S32 PTR4* NewWindowX, S32 PTR4* NewWindowY);
RADEXPFUNC S32 RADEXPLINK BinkBufferSetOffset( HBINKBUFFER buf, S32 destx, S32 desty);
RADEXPFUNC void RADEXPLINK BinkBufferBlit( HBINKBUFFER buf, BINKRECT PTR4* rects, U32 numrects );
RADEXPFUNC S32 RADEXPLINK BinkBufferSetScale( HBINKBUFFER buf, U32 w, U32 h);
RADEXPFUNC char PTR4* RADEXPLINK BinkBufferGetDescription( HBINKBUFFER buf);
RADEXPFUNC char PTR4* RADEXPLINK BinkBufferGetError();
RADEXPFUNC S32 RADEXPLINK BinkBufferClear(HBINKBUFFER buf, U32 RGB);
RADEXPFUNC void RADEXPLINK BinkRestoreCursor(S32 checkcount);
#endif
#ifdef __RADMAC__
#pragma export off
#endif
RADDEFEND
#endif
// @cdep pre $set(INCs,$INCs -I$clipfilename($file)) $ignore(TakeCPP)
#endif
+9 -5
View File
@@ -24,11 +24,9 @@
#include <stdio.h>
#include "Game Clock.h"
#include "GameSettings.h"
#include "sgp_logger.h"
#endif
#include "VFS/vfs.h"
#include "VFS/Tools/Log.h"
typedef struct
{
UINT32 uiFont;
@@ -1515,6 +1513,13 @@ void ClearTacticalMessageQueue( void )
return;
}
static struct DebugMessageLog {
sgp::Logger_ID id;
DebugMessageLog() {
id = sgp::Logger::instance().createLogger();
sgp::Logger::instance().connectFile(id, L"DebugMessage.txt", true, sgp::Logger::FLUSH_ON_ENDL);
}
} s_DebugMessageLog;
void WriteMessageToFile( const STR16 pString )
{
#ifdef JA2BETAVERSION
@@ -1531,8 +1536,7 @@ void WriteMessageToFile( const STR16 pString )
fprintf( fp, "%S\n", pString );
fclose( fp );
#else
static CLog& debugMessage = *CLog::create(L"DebugMessage.txt", true, CLog::FLUSH_IMMEDIATELY);
debugMessage << pString << CLog::ENDL;
SGP_LOG(s_DebugMessageLog.id, pString);
#endif
#endif
}