From b08422ec1bb7c70de680da7748df8328761fca4f Mon Sep 17 00:00:00 2001 From: Wanne Date: Mon, 7 Jan 2013 21:35:26 +0000 Subject: [PATCH] BR Info Panel Enhancements (by Buggler) - Added more info on BR right panel (Melee Weapons AP, Damage & Stun Damage, Protection & Camo etc.) - Fixed BR Item Info Helptext: AP for Heavy, Binoculars & Melee weapons - Fixed CTD on using LEFT/Right arrow hotkey when there's only 1 page in AIM Facial Index - Fix for AIM starting gear kit hotkeys - Add Heavy Weapon ReadyAP value in InterfaceItem git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5779 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Laptop/AimFacialIndex.cpp | 1168 +++++++++++++++++----------------- Laptop/AimMembers.cpp | 80 ++- Laptop/BobbyRGuns.cpp | 380 ++++++++--- Tactical/Interface Items.cpp | 20 +- Utils/Text.h | 8 +- Utils/_ChineseText.cpp | 4 + Utils/_DutchText.cpp | 4 + Utils/_EnglishText.cpp | 4 + Utils/_FrenchText.cpp | 8 +- Utils/_GermanText.cpp | 4 + Utils/_ItalianText.cpp | 4 + Utils/_PolishText.cpp | 4 + Utils/_RussianText.cpp | 4 + Utils/_TaiwaneseText.cpp | 4 + 14 files changed, 982 insertions(+), 714 deletions(-) diff --git a/Laptop/AimFacialIndex.cpp b/Laptop/AimFacialIndex.cpp index 6b5fd5da..40be32bc 100644 --- a/Laptop/AimFacialIndex.cpp +++ b/Laptop/AimFacialIndex.cpp @@ -1,581 +1,587 @@ -#ifdef PRECOMPILEDHEADERS - #include "Laptop All.h" -#else - #include "laptop.h" - #include "AimFacialIndex.h" - #include "WordWrap.h" - #include "Utilities.h" - #include "WCheck.h" - #include "stdio.h" - #include "Aim.h" - #include "Soldier Profile.h" - #include "email.h" - #include "Text.h" - #include "aimsort.h" - #include "Assignments.h" - #include "GameSettings.h" - #include "english.h" - #include "sysutil.h" -#endif - - -extern UINT8 gubCurrentSortMode; // symbol already defined in AimSort.cpp (jonathanl) -extern UINT8 gubCurrentListMode; // symbol already declared globally in AimSort.cpp (jonathanl) -extern UINT8 gbCurrentIndex; - - -UINT32 guiMugShotBorder; -UINT32 guiAimFiFace[ NUM_PROFILES ]; //MAX_NUMBER_MERCS - -BOOLEAN gAimProfiles[ NUM_PROFILES ]; - -#define AIM_FI_NUM_MUGSHOTS_X 8 -#define AIM_FI_NUM_MUGSHOTS_Y 5 - -UINT8 START_MERC =0; -UINT8 END_MERC =0; - -#define AIM_FI_PORTRAIT_WIDTH 52 -#define AIM_FI_PORTRAIT_HEIGHT 48 - -#define AIM_FI_FIRST_MUGSHOT_X IMAGE_OFFSET_X + 6 -#define AIM_FI_FIRST_MUGSHOT_Y IMAGE_OFFSET_Y + 69//67//70 //68 //65 -#define AIM_FI_MUGSHOT_GAP_X 10 -#define AIM_FI_MUGSHOT_GAP_Y 13 -#define AIM_FI_FACE_OFFSET 2 - -#define AIM_FI_NNAME_OFFSET_X 2 -#define AIM_FI_NNAME_OFFSET_Y AIM_FI_PORTRAIT_HEIGHT+1 -#define AIM_FI_NNAME_WIDTH AIM_FI_PORTRAIT_WIDTH+4 - -#define AIM_FI_MEMBER_TEXT_X IMAGE_OFFSET_X + 155 -#define AIM_FI_MEMBER_TEXT_Y AIM_SYMBOL_Y + AIM_SYMBOL_SIZE_Y + 1 -#define AIM_FI_MEMBER_TEXT_WIDTH 190 -//tais: nsgi, move member text up -#define AIM_FI_MEMBER_TEXT_Y_NSGI AIM_SYMBOL_SMALL_Y + 35 - - -#define AIM_FI_AWAY_TEXT_OFFSET_X 3 -#define AIM_FI_AWAY_TEXT_OFFSET_Y 23//3//36 -#define AIM_FI_AWAY_TEXT_OFFSET_WIDTH 48 - - -//Mouse Regions - -//Face regions -MOUSE_REGION gMercFaceMouseRegions[ NUM_PROFILES ]; //MAX_NUMBER_MERCS -void SelectMercFaceRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ); -void SelectMercFaceMoveRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ); - -//Screen region, used to right click to go back to previous page -MOUSE_REGION gScreenMouseRegions; -void SelectScreenRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ); - - -BOOLEAN DrawMercsFaceToScreen(UINT8 ubMercID, UINT16 usPosX, UINT16 usPosY, UINT8 ubImage); - -//New profiles -INT32 guiPreviousNewProfilesNextButtonImage; -void BtnNewProfilesButtonCallback(GUI_BUTTON *btn,INT32 reason); - -INT32 PAGE_BUTTON; - -//Hotkey Assignment -void HandleAimFacialIndexKeyBoardInput(); - -void GameInitAimFacialIndex() -{ - -} - -/// Calculates the needed string for the page button based on number of mercs -/// and currently displayed page. -static STR16 GetPageButtonText() -{ - const int MERCS_PER_PAGE = AIM_FI_NUM_MUGSHOTS_X * AIM_FI_NUM_MUGSHOTS_Y; - - int baseTextIndex; - // Display three pages of mercs (strings from gszAimPages[2] to gszAimPages[4]) - if (MAX_NUMBER_MERCS > MERCS_PER_PAGE * 2) - baseTextIndex = 2; - // Display two pages of mercs (strings from gszAimPages[0] to gszAimPages[1]) - else if (MAX_NUMBER_MERCS > MERCS_PER_PAGE) - { - Assert(START_MERC < MERCS_PER_PAGE * 2); - baseTextIndex = 0; - } - // Display one page of mercs (string gszAimPages[5]) - else - { - Assert(START_MERC < MERCS_PER_PAGE); - baseTextIndex = 5; - } - - int currentPage = START_MERC / MERCS_PER_PAGE; - int stringIndex = baseTextIndex + currentPage; - return gszAimPages[ stringIndex ]; -} - -void BtnNewProfilesButtonCallback(GUI_BUTTON *btn,INT32 reason) -{ - if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) - { - btn->uiFlags |= BUTTON_CLICKED_ON; - InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); - } - if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) - { - if (btn->uiFlags & BUTTON_CLICKED_ON) - { - UINT32 i; - - btn->uiFlags &= (~BUTTON_CLICKED_ON ); - - for(i=0; i 80 ) - START_MERC = 80; - else - START_MERC = 0; - } - else - { - START_MERC = 0; - } - - ExitAimFacialIndex(); - EnterAimFacialIndex(); - - InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); - } - } - if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE) - { - btn->uiFlags &= (~BUTTON_CLICKED_ON ); - InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); - } -} - -BOOLEAN EnterAimFacialIndex() -{ - VOBJECT_DESC VObjectDesc; - UINT8 i; - UINT16 usPosX, usPosY, x,y; - STR sFaceLoc = "FACES\\"; - char sTemp[100]; - - UINT8 p = 0; - - for(i=0; i 40 ) - { - ShowButton( PAGE_BUTTON ); - } - else - { - HideButton( PAGE_BUTTON ); - } - - DrawAimDefaults(); - - //Display the 'A.I.M. Members Sorted Ascending By Price' type string - if( gubCurrentListMode == AIM_ASCEND ) - swprintf(sString, AimFiText[ AIM_FI_AIM_MEMBERS_SORTED_ASCENDING ], AimFiText[gubCurrentSortMode] ); - else - swprintf(sString, AimFiText[ AIM_FI_AIM_MEMBERS_SORTED_DESCENDING ], AimFiText[gubCurrentSortMode] ); - - if(gGameExternalOptions.gfUseNewStartingGearInterface) DrawTextToScreen(sString, AIM_FI_MEMBER_TEXT_X, AIM_FI_MEMBER_TEXT_Y_NSGI, AIM_FI_MEMBER_TEXT_WIDTH, AIM_MAINTITLE_FONT, AIM_MAINTITLE_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); - else DrawTextToScreen(sString, AIM_FI_MEMBER_TEXT_X, AIM_FI_MEMBER_TEXT_Y, AIM_FI_MEMBER_TEXT_WIDTH, AIM_MAINTITLE_FONT, AIM_MAINTITLE_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); - - - //Draw the mug shot border and face - usPosX = AIM_FI_FIRST_MUGSHOT_X; - usPosY = AIM_FI_FIRST_MUGSHOT_Y; - - i=0; - for(y=0; yuiFlags &= (~BUTTON_CLICKED_ON ); - DrawMercsFaceToScreen(ubMercNum, usPosX, usPosY, 1); - InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY); - } - else if( reason & MSYS_CALLBACK_REASON_GAIN_MOUSE ) - { - pRegion->uiFlags |= BUTTON_CLICKED_ON ; - DrawMercsFaceToScreen(ubMercNum, usPosX, usPosY, 0); - InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY); - } - - } -} - -BOOLEAN DrawMercsFaceToScreen(UINT8 ubMercID, UINT16 usPosX, UINT16 usPosY, UINT8 ubImage) -{ - HVOBJECT hMugShotBorderHandle; - HVOBJECT hFaceHandle; - SOLDIERTYPE *pSoldier=NULL; - - //pSoldier = FindSoldierByProfileID( AimMercArray[ubMercID], TRUE ); - pSoldier = FindSoldierByProfileID( gAimAvailability[AimMercArray[ubMercID + START_MERC]].ProfilId, TRUE ); - - - - - //Blt the portrait background - GetVideoObject(&hMugShotBorderHandle, guiMugShotBorder); - BltVideoObject(FRAME_BUFFER, hMugShotBorderHandle, ubImage,usPosX, usPosY, VO_BLT_SRCTRANSPARENCY,NULL); - - //Blt face to screen - GetVideoObject(&hFaceHandle, guiAimFiFace[ubMercID]); - BltVideoObject(FRAME_BUFFER, hFaceHandle, 0,usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, VO_BLT_SRCTRANSPARENCY,NULL); - - //if( IsMercDead( AimMercArray[ubMercID] ) ) - if( IsMercDead( gAimAvailability[AimMercArray[ubMercID + START_MERC]].ProfilId ) ) - { - //get the face object - GetVideoObject(&hFaceHandle, guiAimFiFace[ubMercID]); - - //if the merc is dead - //shade the face red, (to signif that he is dead) - hFaceHandle->pShades[ 0 ] = Create16BPPPaletteShaded( hFaceHandle->pPaletteEntry, DEAD_MERC_COLOR_RED, DEAD_MERC_COLOR_GREEN, DEAD_MERC_COLOR_BLUE, TRUE ); - - //set the red pallete to the face - SetObjectHandleShade( guiAimFiFace[ubMercID], 0 ); - - //Blt face to screen - BltVideoObject(FRAME_BUFFER, hFaceHandle, 0,usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, VO_BLT_SRCTRANSPARENCY,NULL); - - DrawTextToScreen(AimFiText[AIM_FI_DEAD], (UINT16)(usPosX+AIM_FI_AWAY_TEXT_OFFSET_X), (UINT16)(usPosY+AIM_FI_AWAY_TEXT_OFFSET_Y), AIM_FI_AWAY_TEXT_OFFSET_WIDTH, FONT10ARIAL, 145, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); - } - - //else if the merc is currently a POW or, the merc was fired as a pow - //else if( gMercProfiles[ AimMercArray[ubMercID] ].bMercStatus == MERC_FIRED_AS_A_POW || ( pSoldier && pSoldier->bAssignment == ASSIGNMENT_POW ) ) - else if( gMercProfiles[ gAimAvailability[AimMercArray[ubMercID + START_MERC]].ProfilId ].bMercStatus == MERC_FIRED_AS_A_POW || ( pSoldier && pSoldier->bAssignment == ASSIGNMENT_POW ) ) - { - ShadowVideoSurfaceRect( FRAME_BUFFER, usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, usPosX + 48+AIM_FI_FACE_OFFSET, usPosY + 43+AIM_FI_FACE_OFFSET); - DrawTextToScreen( pPOWStrings[0], (UINT16)(usPosX+AIM_FI_AWAY_TEXT_OFFSET_X), (UINT16)(usPosY+AIM_FI_AWAY_TEXT_OFFSET_Y), AIM_FI_AWAY_TEXT_OFFSET_WIDTH, FONT10ARIAL, 145, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); - } - - //if the merc is on our team - else if( pSoldier != NULL ) - { - ShadowVideoSurfaceRect( FRAME_BUFFER, usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, usPosX + 48+AIM_FI_FACE_OFFSET, usPosY + 43+AIM_FI_FACE_OFFSET); - DrawTextToScreen( MercInfo[MERC_FILES_ALREADY_HIRED], (UINT16)(usPosX+AIM_FI_AWAY_TEXT_OFFSET_X), (UINT16)(usPosY+AIM_FI_AWAY_TEXT_OFFSET_Y), AIM_FI_AWAY_TEXT_OFFSET_WIDTH, FONT10ARIAL, 145, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); - } - - //if the merc is away, shadow his/her face and blit 'away' over top - //else if( !IsMercHireable( AimMercArray[ubMercID] ) ) - else if( !IsMercHireable( gAimAvailability[AimMercArray[ubMercID + START_MERC ]].ProfilId ) ) - { - ShadowVideoSurfaceRect( FRAME_BUFFER, usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, usPosX + 48+AIM_FI_FACE_OFFSET, usPosY + 43+AIM_FI_FACE_OFFSET); - DrawTextToScreen( AimFiText[AIM_FI_DEAD+1], (UINT16)(usPosX+AIM_FI_AWAY_TEXT_OFFSET_X), (UINT16)(usPosY+AIM_FI_AWAY_TEXT_OFFSET_Y), AIM_FI_AWAY_TEXT_OFFSET_WIDTH, FONT10ARIAL, 145, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); - //if not enough room use this.. - //AimFiText[AIM_FI_AWAY] - } - - return(TRUE); -} - - - -void HandleAimFacialIndexKeyBoardInput() -{ - InputAtom InputEvent; - UINT32 i; - - while (DequeueSpecificEvent(&InputEvent, KEY_DOWN|KEY_UP|KEY_REPEAT)) - {//!HandleTextInput( &InputEvent ) && - if( InputEvent.usEvent == KEY_DOWN ) - { - switch (InputEvent.usParam) - { - case BACKSPACE: - // back to AIM sorting screen - guiCurrentLaptopMode = LAPTOP_MODE_AIM_MEMBERS_SORTED_FILES; - break; - case ENTER: - guiCurrentLaptopMode = LAPTOP_MODE_AIM_MEMBERS; - break; - case LEFTARROW: - // previous page - for(i=0; i 80 ) - START_MERC = 80; - else - START_MERC = 40; - } - else - { - START_MERC = 40; - } - - ExitAimFacialIndex(); - EnterAimFacialIndex(); - break; - case RIGHTARROW: - // next page - for(i=0; i 80 ) - START_MERC = 80; - else - START_MERC = 0; - } - else - { - START_MERC = 0; - } - - ExitAimFacialIndex(); - EnterAimFacialIndex(); - break; - default: - HandleKeyBoardShortCutsForLapTop( InputEvent.usEvent, InputEvent.usParam, InputEvent.usKeyState ); - break; - } - } - } -} - - +#ifdef PRECOMPILEDHEADERS + #include "Laptop All.h" +#else + #include "laptop.h" + #include "AimFacialIndex.h" + #include "WordWrap.h" + #include "Utilities.h" + #include "WCheck.h" + #include "stdio.h" + #include "Aim.h" + #include "Soldier Profile.h" + #include "email.h" + #include "Text.h" + #include "aimsort.h" + #include "Assignments.h" + #include "GameSettings.h" + #include "english.h" + #include "sysutil.h" +#endif + + +extern UINT8 gubCurrentSortMode; // symbol already defined in AimSort.cpp (jonathanl) +extern UINT8 gubCurrentListMode; // symbol already declared globally in AimSort.cpp (jonathanl) +extern UINT8 gbCurrentIndex; + + +UINT32 guiMugShotBorder; +UINT32 guiAimFiFace[ NUM_PROFILES ]; //MAX_NUMBER_MERCS + +BOOLEAN gAimProfiles[ NUM_PROFILES ]; + +#define AIM_FI_NUM_MUGSHOTS_X 8 +#define AIM_FI_NUM_MUGSHOTS_Y 5 + +UINT8 START_MERC =0; +UINT8 END_MERC =0; + +#define AIM_FI_PORTRAIT_WIDTH 52 +#define AIM_FI_PORTRAIT_HEIGHT 48 + +#define AIM_FI_FIRST_MUGSHOT_X IMAGE_OFFSET_X + 6 +#define AIM_FI_FIRST_MUGSHOT_Y IMAGE_OFFSET_Y + 69//67//70 //68 //65 +#define AIM_FI_MUGSHOT_GAP_X 10 +#define AIM_FI_MUGSHOT_GAP_Y 13 +#define AIM_FI_FACE_OFFSET 2 + +#define AIM_FI_NNAME_OFFSET_X 2 +#define AIM_FI_NNAME_OFFSET_Y AIM_FI_PORTRAIT_HEIGHT+1 +#define AIM_FI_NNAME_WIDTH AIM_FI_PORTRAIT_WIDTH+4 + +#define AIM_FI_MEMBER_TEXT_X IMAGE_OFFSET_X + 155 +#define AIM_FI_MEMBER_TEXT_Y AIM_SYMBOL_Y + AIM_SYMBOL_SIZE_Y + 1 +#define AIM_FI_MEMBER_TEXT_WIDTH 190 +//tais: nsgi, move member text up +#define AIM_FI_MEMBER_TEXT_Y_NSGI AIM_SYMBOL_SMALL_Y + 35 + + +#define AIM_FI_AWAY_TEXT_OFFSET_X 3 +#define AIM_FI_AWAY_TEXT_OFFSET_Y 23//3//36 +#define AIM_FI_AWAY_TEXT_OFFSET_WIDTH 48 + + +//Mouse Regions + +//Face regions +MOUSE_REGION gMercFaceMouseRegions[ NUM_PROFILES ]; //MAX_NUMBER_MERCS +void SelectMercFaceRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ); +void SelectMercFaceMoveRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ); + +//Screen region, used to right click to go back to previous page +MOUSE_REGION gScreenMouseRegions; +void SelectScreenRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ); + + +BOOLEAN DrawMercsFaceToScreen(UINT8 ubMercID, UINT16 usPosX, UINT16 usPosY, UINT8 ubImage); + +//New profiles +INT32 guiPreviousNewProfilesNextButtonImage; +void BtnNewProfilesButtonCallback(GUI_BUTTON *btn,INT32 reason); + +INT32 PAGE_BUTTON; + +//Hotkey Assignment +void HandleAimFacialIndexKeyBoardInput(); + +void GameInitAimFacialIndex() +{ + +} + +/// Calculates the needed string for the page button based on number of mercs +/// and currently displayed page. +static STR16 GetPageButtonText() +{ + const int MERCS_PER_PAGE = AIM_FI_NUM_MUGSHOTS_X * AIM_FI_NUM_MUGSHOTS_Y; + + int baseTextIndex; + // Display three pages of mercs (strings from gszAimPages[2] to gszAimPages[4]) + if (MAX_NUMBER_MERCS > MERCS_PER_PAGE * 2) + baseTextIndex = 2; + // Display two pages of mercs (strings from gszAimPages[0] to gszAimPages[1]) + else if (MAX_NUMBER_MERCS > MERCS_PER_PAGE) + { + Assert(START_MERC < MERCS_PER_PAGE * 2); + baseTextIndex = 0; + } + // Display one page of mercs (string gszAimPages[5]) + else + { + Assert(START_MERC < MERCS_PER_PAGE); + baseTextIndex = 5; + } + + int currentPage = START_MERC / MERCS_PER_PAGE; + int stringIndex = baseTextIndex + currentPage; + return gszAimPages[ stringIndex ]; +} + +void BtnNewProfilesButtonCallback(GUI_BUTTON *btn,INT32 reason) +{ + if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) + { + btn->uiFlags |= BUTTON_CLICKED_ON; + InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); + } + if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) + { + if (btn->uiFlags & BUTTON_CLICKED_ON) + { + UINT32 i; + + btn->uiFlags &= (~BUTTON_CLICKED_ON ); + + for(i=0; i 80 ) + START_MERC = 80; + else + START_MERC = 0; + } + else + { + START_MERC = 0; + } + + ExitAimFacialIndex(); + EnterAimFacialIndex(); + + InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); + } + } + if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE) + { + btn->uiFlags &= (~BUTTON_CLICKED_ON ); + InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); + } +} + +BOOLEAN EnterAimFacialIndex() +{ + VOBJECT_DESC VObjectDesc; + UINT8 i; + UINT16 usPosX, usPosY, x,y; + STR sFaceLoc = "FACES\\"; + char sTemp[100]; + + UINT8 p = 0; + + for(i=0; i 40 ) + { + ShowButton( PAGE_BUTTON ); + } + else + { + HideButton( PAGE_BUTTON ); + } + + DrawAimDefaults(); + + //Display the 'A.I.M. Members Sorted Ascending By Price' type string + if( gubCurrentListMode == AIM_ASCEND ) + swprintf(sString, AimFiText[ AIM_FI_AIM_MEMBERS_SORTED_ASCENDING ], AimFiText[gubCurrentSortMode] ); + else + swprintf(sString, AimFiText[ AIM_FI_AIM_MEMBERS_SORTED_DESCENDING ], AimFiText[gubCurrentSortMode] ); + + if(gGameExternalOptions.gfUseNewStartingGearInterface) DrawTextToScreen(sString, AIM_FI_MEMBER_TEXT_X, AIM_FI_MEMBER_TEXT_Y_NSGI, AIM_FI_MEMBER_TEXT_WIDTH, AIM_MAINTITLE_FONT, AIM_MAINTITLE_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); + else DrawTextToScreen(sString, AIM_FI_MEMBER_TEXT_X, AIM_FI_MEMBER_TEXT_Y, AIM_FI_MEMBER_TEXT_WIDTH, AIM_MAINTITLE_FONT, AIM_MAINTITLE_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); + + + //Draw the mug shot border and face + usPosX = AIM_FI_FIRST_MUGSHOT_X; + usPosY = AIM_FI_FIRST_MUGSHOT_Y; + + i=0; + for(y=0; yuiFlags &= (~BUTTON_CLICKED_ON ); + DrawMercsFaceToScreen(ubMercNum, usPosX, usPosY, 1); + InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY); + } + else if( reason & MSYS_CALLBACK_REASON_GAIN_MOUSE ) + { + pRegion->uiFlags |= BUTTON_CLICKED_ON ; + DrawMercsFaceToScreen(ubMercNum, usPosX, usPosY, 0); + InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY); + } + + } +} + +BOOLEAN DrawMercsFaceToScreen(UINT8 ubMercID, UINT16 usPosX, UINT16 usPosY, UINT8 ubImage) +{ + HVOBJECT hMugShotBorderHandle; + HVOBJECT hFaceHandle; + SOLDIERTYPE *pSoldier=NULL; + + //pSoldier = FindSoldierByProfileID( AimMercArray[ubMercID], TRUE ); + pSoldier = FindSoldierByProfileID( gAimAvailability[AimMercArray[ubMercID + START_MERC]].ProfilId, TRUE ); + + + + + //Blt the portrait background + GetVideoObject(&hMugShotBorderHandle, guiMugShotBorder); + BltVideoObject(FRAME_BUFFER, hMugShotBorderHandle, ubImage,usPosX, usPosY, VO_BLT_SRCTRANSPARENCY,NULL); + + //Blt face to screen + GetVideoObject(&hFaceHandle, guiAimFiFace[ubMercID]); + BltVideoObject(FRAME_BUFFER, hFaceHandle, 0,usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, VO_BLT_SRCTRANSPARENCY,NULL); + + //if( IsMercDead( AimMercArray[ubMercID] ) ) + if( IsMercDead( gAimAvailability[AimMercArray[ubMercID + START_MERC]].ProfilId ) ) + { + //get the face object + GetVideoObject(&hFaceHandle, guiAimFiFace[ubMercID]); + + //if the merc is dead + //shade the face red, (to signif that he is dead) + hFaceHandle->pShades[ 0 ] = Create16BPPPaletteShaded( hFaceHandle->pPaletteEntry, DEAD_MERC_COLOR_RED, DEAD_MERC_COLOR_GREEN, DEAD_MERC_COLOR_BLUE, TRUE ); + + //set the red pallete to the face + SetObjectHandleShade( guiAimFiFace[ubMercID], 0 ); + + //Blt face to screen + BltVideoObject(FRAME_BUFFER, hFaceHandle, 0,usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, VO_BLT_SRCTRANSPARENCY,NULL); + + DrawTextToScreen(AimFiText[AIM_FI_DEAD], (UINT16)(usPosX+AIM_FI_AWAY_TEXT_OFFSET_X), (UINT16)(usPosY+AIM_FI_AWAY_TEXT_OFFSET_Y), AIM_FI_AWAY_TEXT_OFFSET_WIDTH, FONT10ARIAL, 145, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); + } + + //else if the merc is currently a POW or, the merc was fired as a pow + //else if( gMercProfiles[ AimMercArray[ubMercID] ].bMercStatus == MERC_FIRED_AS_A_POW || ( pSoldier && pSoldier->bAssignment == ASSIGNMENT_POW ) ) + else if( gMercProfiles[ gAimAvailability[AimMercArray[ubMercID + START_MERC]].ProfilId ].bMercStatus == MERC_FIRED_AS_A_POW || ( pSoldier && pSoldier->bAssignment == ASSIGNMENT_POW ) ) + { + ShadowVideoSurfaceRect( FRAME_BUFFER, usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, usPosX + 48+AIM_FI_FACE_OFFSET, usPosY + 43+AIM_FI_FACE_OFFSET); + DrawTextToScreen( pPOWStrings[0], (UINT16)(usPosX+AIM_FI_AWAY_TEXT_OFFSET_X), (UINT16)(usPosY+AIM_FI_AWAY_TEXT_OFFSET_Y), AIM_FI_AWAY_TEXT_OFFSET_WIDTH, FONT10ARIAL, 145, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); + } + + //if the merc is on our team + else if( pSoldier != NULL ) + { + ShadowVideoSurfaceRect( FRAME_BUFFER, usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, usPosX + 48+AIM_FI_FACE_OFFSET, usPosY + 43+AIM_FI_FACE_OFFSET); + DrawTextToScreen( MercInfo[MERC_FILES_ALREADY_HIRED], (UINT16)(usPosX+AIM_FI_AWAY_TEXT_OFFSET_X), (UINT16)(usPosY+AIM_FI_AWAY_TEXT_OFFSET_Y), AIM_FI_AWAY_TEXT_OFFSET_WIDTH, FONT10ARIAL, 145, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); + } + + //if the merc is away, shadow his/her face and blit 'away' over top + //else if( !IsMercHireable( AimMercArray[ubMercID] ) ) + else if( !IsMercHireable( gAimAvailability[AimMercArray[ubMercID + START_MERC ]].ProfilId ) ) + { + ShadowVideoSurfaceRect( FRAME_BUFFER, usPosX+AIM_FI_FACE_OFFSET, usPosY+AIM_FI_FACE_OFFSET, usPosX + 48+AIM_FI_FACE_OFFSET, usPosY + 43+AIM_FI_FACE_OFFSET); + DrawTextToScreen( AimFiText[AIM_FI_DEAD+1], (UINT16)(usPosX+AIM_FI_AWAY_TEXT_OFFSET_X), (UINT16)(usPosY+AIM_FI_AWAY_TEXT_OFFSET_Y), AIM_FI_AWAY_TEXT_OFFSET_WIDTH, FONT10ARIAL, 145, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); + //if not enough room use this.. + //AimFiText[AIM_FI_AWAY] + } + + return(TRUE); +} + + + +void HandleAimFacialIndexKeyBoardInput() +{ + InputAtom InputEvent; + UINT32 i; + + while (DequeueSpecificEvent(&InputEvent, KEY_DOWN|KEY_UP|KEY_REPEAT)) + {//!HandleTextInput( &InputEvent ) && + if( InputEvent.usEvent == KEY_DOWN ) + { + switch (InputEvent.usParam) + { + case BACKSPACE: + // back to AIM sorting screen + guiCurrentLaptopMode = LAPTOP_MODE_AIM_MEMBERS_SORTED_FILES; + break; + case ENTER: + guiCurrentLaptopMode = LAPTOP_MODE_AIM_MEMBERS; + break; + case LEFTARROW: + if ( MAX_NUMBER_MERCS > (AIM_FI_NUM_MUGSHOTS_X * AIM_FI_NUM_MUGSHOTS_Y) ) + { + // previous page + for(i=0; i 80 ) + START_MERC = 80; + else + START_MERC = 40; + } + else + { + START_MERC = 40; + } + + ExitAimFacialIndex(); + EnterAimFacialIndex(); + } + break; + case RIGHTARROW: + if ( MAX_NUMBER_MERCS > (AIM_FI_NUM_MUGSHOTS_X * AIM_FI_NUM_MUGSHOTS_Y) ) + { + // next page + for(i=0; i 80 ) + START_MERC = 80; + else + START_MERC = 0; + } + else + { + START_MERC = 0; + } + + ExitAimFacialIndex(); + EnterAimFacialIndex(); + } + break; + default: + HandleKeyBoardShortCutsForLapTop( InputEvent.usEvent, InputEvent.usParam, InputEvent.usKeyState ); + break; + } + } + } +} + + diff --git a/Laptop/AimMembers.cpp b/Laptop/AimMembers.cpp index 35ab6d0d..bd832458 100644 --- a/Laptop/AimMembers.cpp +++ b/Laptop/AimMembers.cpp @@ -5181,11 +5181,19 @@ void HandleAimMemberKeyBoardInput() gbCurrentSoldier = gAimAvailability[AimMercArray[gbCurrentIndex]].ProfilId; if (!(gMercProfiles[gbCurrentSoldier].ubMiscFlags & PROFILE_MISC_FLAG_ALREADY_USED_ITEMS)) { - gubVideoConferencingMode = AIM_VIDEO_NOT_DISPLAYED_MODE; - //tais: handle selected kit - WeaponKitSelectionUpdate(0); + UINT8 i; + for(i=INV_START_POS; i -1) + { + if (Item[usItemIndex].usItemClass == IC_GRENADE || + Item[usItemIndex].usItemClass == IC_BOMB) + { + bAddItem = TRUE; + } + } + } + // MISC + else + { + if (iFilter > -1) + { + if (Item[usItemIndex].usItemClass == iFilter) + { + bAddItem = true; + } + } + } + + if (bAddItem == TRUE) + { + gusItemNumberForItemsOnScreen[ ubCount ] = i; + + DisplayBigItemImage( usItemIndex, PosY); + + //Display Items Name + DisplayItemNameAndInfo(usTextPosY, usItemIndex, i, gfOnUsedPage); + + DisplayGrenadeBombInfo(usItemIndex, usTextPosY, gfOnUsedPage, i); + + PosY += BOBBYR_GRID_OFFSET; + usTextPosY += BOBBYR_GRID_OFFSET; + ubCount++; + } + break; case IC_MISC: case IC_MEDKIT: case IC_KIT: @@ -1671,9 +1719,7 @@ BOOLEAN DisplayItemInfo(UINT32 uiItemClass, INT32 iFilter, INT32 iSubFilter) { if (iFilter > -1) { - if (Item[usItemIndex].usItemClass == IC_GRENADE || - Item[usItemIndex].usItemClass == IC_BOMB || - Item[usItemIndex].usItemClass == IC_MISC || + if (Item[usItemIndex].usItemClass == IC_MISC || Item[usItemIndex].usItemClass == IC_MEDKIT || Item[usItemIndex].usItemClass == IC_KIT || Item[usItemIndex].usItemClass == IC_LBEGEAR || @@ -1744,8 +1790,8 @@ BOOLEAN DisplayGunInfo(UINT16 usIndex, UINT16 usTextPosY, BOOLEAN fUsed, UINT16 usHeight = usTextPosY; //Display the weight, caliber, mag, rng, dam, rof text - //Weight - usHeight = DisplayWeight(usHeight, usIndex, usFontHeight); + //Weight - Removed due to limited space + //usHeight = DisplayWeight(usHeight, usIndex, usFontHeight); //Caliber usHeight = DisplayCaliber(usHeight, usIndex, usFontHeight); @@ -1753,15 +1799,18 @@ BOOLEAN DisplayGunInfo(UINT16 usIndex, UINT16 usTextPosY, BOOLEAN fUsed, UINT16 //Magazine usHeight = DisplayMagazine(usHeight, usIndex, usFontHeight); - //Range - usHeight = DisplayRange(usHeight, usIndex, usFontHeight); - //Damage usHeight = DisplayDamage(usHeight, usIndex, usFontHeight); + //Range + usHeight = DisplayRange(usHeight, usIndex, usFontHeight); + //ROF usHeight = DisplayRof(usHeight, usIndex, usFontHeight); + //AP + usHeight = DisplayGunAP(usHeight, usIndex, usFontHeight); + //Display the Cost and the qty bought and on hand usHeight = DisplayCostAndQty(usTextPosY, usIndex, usFontHeight, usBobbyIndex, fUsed); @@ -1786,6 +1835,9 @@ BOOLEAN DisplayNonGunWeaponInfo(UINT16 usIndex, UINT16 usTextPosY, BOOLEAN fUsed //Damage usHeight = DisplayDamage(usHeight, usIndex, usFontHeight); + //AP + usHeight = DisplayMeleeAP(usHeight, usIndex, usFontHeight); + //Display the Cost and the qty bought and on hand usHeight = DisplayCostAndQty(usTextPosY, usIndex, usFontHeight, usBobbyIndex, fUsed); @@ -1819,6 +1871,34 @@ BOOLEAN DisplayAmmoInfo(UINT16 usIndex, UINT16 usTextPosY, BOOLEAN fUsed, UINT16 } //DisplayAmmoInfo +BOOLEAN DisplayGrenadeBombInfo(UINT16 usIndex, UINT16 usTextPosY, BOOLEAN fUsed, UINT16 usBobbyIndex) +{ + UINT16 usHeight; + UINT16 usFontHeight; + usFontHeight = GetFontHeight(BOBBYR_ITEM_DESC_TEXT_FONT); + + //Display Items Name +// DisplayItemNameAndInfo(usTextPosY, usIndex, fUsed); + + usHeight = usTextPosY; + //Display the weight, caliber, mag, rng, dam, rof text + + //Weight + usHeight = DisplayWeight(usHeight, usIndex, usFontHeight); + + //Explosive Damage + usHeight = DisplayExplosiveDamage(usHeight, usIndex, usFontHeight); + + //Explosive Stun Damage + usHeight = DisplayExplosiveStunDamage(usHeight, usIndex, usFontHeight); + + //Display the Cost and the qty bought and on hand + usHeight = DisplayCostAndQty(usTextPosY, usIndex, usFontHeight, usBobbyIndex, fUsed); + + return(TRUE); +} //DisplayAmmoInfo + + BOOLEAN DisplayBigItemImage(UINT16 usIndex, UINT16 PosY) { INT16 PosX, sCenX, sCenY; @@ -1894,6 +1974,12 @@ BOOLEAN DisplayArmourInfo(UINT16 usIndex, UINT16 usTextPosY, BOOLEAN fUsed, UINT //Weight usHeight = DisplayWeight(usHeight, usIndex, usFontHeight); + //Protection + usHeight = DisplayProtection(usHeight, usIndex, usFontHeight); + + //Camo + usHeight = DisplayCamo(usHeight, usIndex, usFontHeight); + //Display the Cost and the qty bought and on hand usHeight = DisplayCostAndQty(usTextPosY, usIndex, usFontHeight, usBobbyIndex, fUsed); @@ -2003,6 +2089,65 @@ UINT16 DisplayRof(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) return(usPosY); } +UINT16 DisplayGunAP(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) +{ + CHAR16 sTemp[20]; + CHAR16 sTemp2[20]; + OBJECTTYPE pObject; + + DrawTextToScreen(BobbyRText[BOBBYR_GUNS_AP], BOBBYR_ITEM_WEIGHT_TEXT_X, (UINT16)usPosY, 0, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + + CreateItem(usIndex, 100, &pObject); + UINT16 readyAPs = (UINT16)(( Weapon[ usIndex ].ubReadyTime * (100 - Item[ usIndex ].percentreadytimeapreduction)) / 100); + INT16 ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], &pObject, NULL ); + + swprintf( sTemp, L"(%d)", readyAPs ); + + if ( Weapon[ usIndex ].NoSemiAuto ) + wcscat( sTemp, L"-" ); + else + { + swprintf( sTemp2, L"%d", ubAttackAPs ); + wcscat( sTemp, sTemp2 ); + } + + if (GetShotsPerBurst(&pObject) > 0) + { + swprintf( sTemp2, L"/%d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], &pObject, NULL ) ); + wcscat( sTemp, sTemp2 ); + } + else + wcscat( sTemp, L"/-" ); + + if (GetAutofireShotsPerFiveAPs(&pObject) > 0) + { + swprintf( sTemp2, L"/%d", ubAttackAPs + CalcAPsToAutofire( APBPConstants[DEFAULT_APS], &pObject, 3, NULL ) ); + wcscat( sTemp, sTemp2 ); + } + else + wcscat( sTemp, L"/-" ); + + DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR_ALT, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); + usPosY += usFontHeight + 2; + return(usPosY); +} + +UINT16 DisplayMeleeAP(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) +{ + CHAR16 sTemp[20]; + OBJECTTYPE pObject; + + DrawTextToScreen(BobbyRText[BOBBYR_GUNS_AP], BOBBYR_ITEM_WEIGHT_TEXT_X, (UINT16)usPosY, 0, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + + CreateItem(usIndex, 100, &pObject); + INT16 ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], &pObject, NULL ); + + swprintf( sTemp, L"%d", ubAttackAPs ); + DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR_ALT, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); + usPosY += usFontHeight + 2; + return(usPosY); +} + UINT16 DisplayDamage(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) { CHAR16 sTemp[20]; @@ -2039,7 +2184,7 @@ UINT16 DisplayRange(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) gunRange = (UINT16)GetModifiedGunRange( usIndex); swprintf(sTemp, L"%3d %s", gunRange, pMessageStrings[ MSG_METER_ABBREVIATION ] ); - DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); + DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR_ALT, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); usPosY += usFontHeight + 2; return(usPosY); } @@ -2054,7 +2199,7 @@ UINT16 DisplayMagazine(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) }else{ swprintf(sTemp, L"%3d %s", Magazine[Item[usIndex].ubClassIndex].ubMagSize, pMessageStrings[ MSG_ROUNDS_ABBREVIATION ] ); } - DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); + DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR_ALT, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); usPosY += usFontHeight + 2; return(usPosY); } @@ -2089,6 +2234,84 @@ UINT16 DisplayCaliber(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) return(usPosY); } +UINT16 DisplayExplosiveDamage(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) +{ + CHAR16 sTemp[20]; + + DrawTextToScreen(BobbyRText[BOBBYR_GUNS_DAMAGE], BOBBYR_ITEM_WEIGHT_TEXT_X, (UINT16)usPosY, 0, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + + UINT16 explDamage = (UINT16) GetModifiedExplosiveDamage( Explosive[Item[ usIndex ].ubClassIndex].ubDamage ); + + swprintf(sTemp, L"%4d", explDamage); + DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); + usPosY += usFontHeight + 2; + return(usPosY); +} + +UINT16 DisplayExplosiveStunDamage(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) +{ + CHAR16 sTemp[20]; + + DrawTextToScreen(BobbyRText[BOBBYR_GUNS_STUN], BOBBYR_ITEM_WEIGHT_TEXT_X, (UINT16)usPosY, 0, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + + UINT16 explStunDamage = (UINT16) GetModifiedExplosiveDamage( Explosive[Item[ usIndex ].ubClassIndex].ubStunDamage ); + + swprintf(sTemp, L"%4d", explStunDamage); + DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR_ALT, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); + usPosY += usFontHeight + 2; + return(usPosY); +} + +UINT16 DisplayProtection(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) +{ + CHAR16 sTemp[20]; + CHAR16 sTemp2[20]; + + DrawTextToScreen(BobbyRText[BOBBYR_GUNS_PROTECTION], BOBBYR_ITEM_WEIGHT_TEXT_X, (UINT16)usPosY, 0, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + + INT32 iProtection = Armour[ Item[ usIndex ].ubClassIndex ].ubProtection; + + switch( Armour[ Item[ usIndex ].ubClassIndex ].ubArmourClass ) + { + case( ARMOURCLASS_HELMET ): + iProtection = 15 * iProtection / Armour[ Item[ SPECTRA_HELMET_18 ].ubClassIndex ].ubProtection; + break; + + case( ARMOURCLASS_VEST ): + iProtection = 65 * iProtection / ( Armour[ Item[ SPECTRA_VEST_18 ].ubClassIndex ].ubProtection + Armour[ Item[ CERAMIC_PLATES ].ubClassIndex ].ubProtection ); + break; + + case( ARMOURCLASS_LEGGINGS ): + iProtection = 25 * iProtection / Armour[ Item[ SPECTRA_LEGGINGS_18 ].ubClassIndex ].ubProtection; + break; + + case( ARMOURCLASS_PLATE ): + iProtection = 65 * iProtection / ( Armour[ Item[ CERAMIC_PLATES ].ubClassIndex ].ubProtection ); + break; + } + + swprintf(sTemp, L"%d", iProtection, Armour[ Item[ usIndex ].ubClassIndex ].ubProtection); + wcscat( sTemp, L"%%" ); + swprintf( sTemp2, L"(%d)", Armour[ Item[ usIndex ].ubClassIndex ].ubProtection ); + wcscat( sTemp, sTemp2 ); + DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); + usPosY += usFontHeight + 2; + return(usPosY); +} + +UINT16 DisplayCamo(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) +{ + CHAR16 sTemp[20]; + + DrawTextToScreen(BobbyRText[BOBBYR_GUNS_CAMO], BOBBYR_ITEM_WEIGHT_TEXT_X, (UINT16)usPosY, 0, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + + swprintf(sTemp, L"%d", Item[ usIndex ].camobonus); + wcscat( sTemp, L"%%" ); + DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR_ALT, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); + usPosY += usFontHeight + 2; + return(usPosY); +} + // CHRISL: New display function for LBE Gear UINT16 DisplayLBEInfo(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) { @@ -2151,7 +2374,7 @@ UINT16 DisplayWeight(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight) DrawTextToScreen(BobbyRText[BOBBYR_GUNS_WEIGHT], BOBBYR_ITEM_WEIGHT_TEXT_X, (UINT16)usPosY, 0, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); swprintf(sTemp, L"%3.2f %s", GetWeightBasedOnMetricOption(Item[ usIndex ].ubWeight)/10, GetWeightUnitString() ); - DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); + DrawTextToScreen(sTemp, BOBBYR_ITEM_WEIGHT_NUM_X, (UINT16)usPosY, BOBBYR_ITEM_WEIGHT_NUM_WIDTH, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_ITEM_DESC_TEXT_COLOR_ALT, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED); usPosY += usFontHeight + 2; return(usPosY); } @@ -2498,43 +2721,6 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum switch( Item[ pItemNumbers[ i ] ].usItemClass ) { case IC_GUN: - //Calculate AP's - //INT16 apStr[20]; - - //if ( Item[ pItemNumbers[ i ] ].usItemClass == IC_GUN ) - //{ - // INT16 apStr2[20]; - // UINT8 ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], pObject ); - - // swprintf( apStr, L"%d", ubAttackAPs ); - - // if (GetShotsPerBurst(pObject) > 0) - // { - // swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], pObject ) ); - // wcscat( apStr, apStr2 ); - // } - // else - // { - // wcscat( apStr, L" / -" ); - // } - - // if (GetAutofireShotsPerFiveAPs(pObject) > 0) - // { - // swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToAutofire( APBPConstants[DEFAULT_APS], pObject, 3 ) ); - // wcscat( apStr, apStr2 ); - // } - // else - // { - // wcscat( apStr, L" / -" ); - // } - //} - //else - //{ - // swprintf( apStr, L"" ); - //} - - //Info for weapons - //if ( Item[ pItemNumbers[ i ] ].usItemClass == IC_GUN ) { // HEADROCK HAM 3.6: Can now take a negative modifier. //UINT16 gunDamage = (UINT16)( Weapon[ pItemNumbers[ i ] ].ubImpact + ( (double) Weapon[ pItemNumbers[ i ] ].ubImpact / 100) * gGameExternalOptions.ubGunDamageMultiplier ); @@ -2558,7 +2744,7 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum UINT16 usAttachment; CreateItem(pItemNumbers[ i ], 100, &pObject); - UINT16 ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], &pObject, NULL ); + INT16 ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], &pObject, NULL ); if ( Weapon[ pItemNumbers[ i ] ].NoSemiAuto ) swprintf( apStr, L"-" ); @@ -2702,7 +2888,6 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum gWeaponStatsDesc[ 6 ], //AP String readyAPs, apStr, //AP's - //L"- / - / -", gWeaponStatsDesc[ 12 ], //Weight String fWeight, //Weight GetWeightUnitString(), //Weight units @@ -2711,54 +2896,46 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum } break; - - case IC_LAUNCHER: - //Calculate AP's - //INT16 apStr[20]; - - //if ( Item[ pItemNumbers[ i ] ].usItemClass == IC_GUN ) - //{ - // INT16 apStr2[20]; - // UINT8 ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], pObject ); - - // swprintf( apStr, L"%d", ubAttackAPs ); - - // if (GetShotsPerBurst(pObject) > 0) - // { - // swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], pObject ) ); - // wcscat( apStr, apStr2 ); - // } - // else - // { - // wcscat( apStr, L" / -" ); - // } - - // if (GetAutofireShotsPerFiveAPs(pObject) > 0) - // { - // swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToAutofire( APBPConstants[DEFAULT_APS], pObject, 3 ) ); - // wcscat( apStr, apStr2 ); - // } - // else - // { - // wcscat( apStr, L" / -" ); - // } - //} - //else - //{ - // swprintf( apStr, L"" ); - //} - - //Info for weapons - //if ( Item[ pItemNumbers[ i ] ].usItemClass == IC_GUN ) { // HEADROCK HAM 3.6: Can now take a negative modifier. UINT16 gunDamage = (UINT16)GetModifiedGunDamage( Weapon[ pItemNumbers[ i ] ].ubImpact ); + UINT16 readyAPs = (UINT16)(( Weapon[ pItemNumbers[ i ] ].ubReadyTime * (100 - Item[ pItemNumbers[ i ] ].percentreadytimeapreduction)) / 100); UINT16 usRange = (UINT16)GetModifiedGunRange(pItemNumbers[ i ]); INT8 accuracy = (UsingNewCTHSystem()==true?Weapon[ pItemNumbers[ i ] ].nAccuracy:Weapon[ pItemNumbers[ i ] ].bAccuracy); //UINT16 gunDamage = (UINT16)( Weapon[ pItemNumbers[ i ] ].ubImpact + ( (double) Weapon[ pItemNumbers[ i ] ].ubImpact / 100) * gGameExternalOptions.ubGunDamageMultiplier ); - swprintf( pStr, L"%s\n%s %d\n%s %d\n%s %d\n%s %s\n%s %1.1f %s", + //Calculate AP's + CHAR16 apStr[20]; + CHAR16 apStr2[20]; + OBJECTTYPE pObject; + + CreateItem(pItemNumbers[ i ], 100, &pObject); + INT16 ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], &pObject, NULL ); + + if ( Weapon[ pItemNumbers[ i ] ].NoSemiAuto ) + swprintf( apStr, L"-" ); + else + swprintf( apStr2, L"%d", ubAttackAPs ); + wcscat( apStr, apStr2 ); + + if (GetShotsPerBurst(&pObject) > 0) + { + swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], &pObject, NULL ) ); + wcscat( apStr, apStr2 ); + } + else + wcscat( apStr, L" / -" ); + + if (GetAutofireShotsPerFiveAPs(&pObject) > 0) + { + swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToAutofire( APBPConstants[DEFAULT_APS], &pObject, 3, NULL ) ); + wcscat( apStr, apStr2 ); + } + else + wcscat( apStr, L" / -" ); + + swprintf( pStr, L"%s\n%s %d\n%s %d\n%s %d\n%s (%d) %s\n%s %1.1f %s", ItemNames[ pItemNumbers[ i ] ], gWeaponStatsDesc[ 9 ], //Accuracy String accuracy, //Accuracy @@ -2767,8 +2944,8 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum gWeaponStatsDesc[ 10 ], //Range String gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? usRange/10 : usRange, //Gun Range gWeaponStatsDesc[ 6 ], //AP String - //apStr, //AP's - L"- / - / -", + readyAPs, + apStr, //AP's gWeaponStatsDesc[ 12 ], //Weight String fWeight, //Weight GetWeightUnitString() //Weight units @@ -2782,15 +2959,16 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum { // HEADROCK HAM 3.6: Can now take a negative modifier //UINT16 meleeDamage = (UINT16)( Weapon[ pItemNumbers[ i ] ].ubImpact + ( (double) Weapon[ pItemNumbers[ i ] ].ubImpact / 100) * gGameExternalOptions.ubMeleeDamageMultiplier ); - UINT16 meleeDamage = (UINT16)GetModifiedMeleeDamage( Weapon[ pItemNumbers[ i ] ].ubImpact ); + //UINT16 meleeDamage = (UINT16)GetModifiedMeleeDamage( Weapon[ pItemNumbers[ i ] ].ubImpact ); + OBJECTTYPE pObject; - swprintf( pStr, L"%s\n%s %d\n%s %s\n%s %1.1f %s", + CreateItem(pItemNumbers[ i ], 100, &pObject); + swprintf( pStr, L"%s\n%s %d\n%s %d\n%s %1.1f %s", ItemNames[ pItemNumbers[ i ] ], gWeaponStatsDesc[ 11 ], //Damage String - meleeDamage, //Melee damage + GetDamage(&pObject), //Melee damage gWeaponStatsDesc[ 6 ], //AP String - //apStr, //AP's - L"-", + BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], &pObject, NULL ), //AP's gWeaponStatsDesc[ 12 ], //Weight String fWeight, //Weight GetWeightUnitString() //Weight units diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index a8527cdc..ce70d800 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -11727,9 +11727,9 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier if ( gGameExternalOptions.fAdvRepairSystem && gGameExternalOptions.fDirtSystem && ( sThreshold < 100 || bDirt > 0 ) ) { #ifdef CHINESE - swprintf( pStr, L"%s [%d%(%d%)]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s\n %s %.2f%%", + swprintf( pStr, L"%s [%d%(%d%)]\n%s %d\n%s %d\n%s %d (%d)\n%s (%d) %s\n%s %1.1f %s\n %s %.2f%%", #else - swprintf( pStr, L"%s [%d%%(%d%%)]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s\n%s %.2f%%", + swprintf( pStr, L"%s [%d%%(%d%%)]\n%s %d\n%s %d\n%s %d (%d)\n%s (%d) %s\n%s %1.1f %s\n%s %.2f%%", #endif ItemNames[ usItem ], @@ -11743,6 +11743,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GunRange( pObject, NULL )/10 : GunRange( pObject, NULL ), // SANDRO - added argument //Modified Range gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GetModifiedGunRange(usItem)/10 : GetModifiedGunRange(usItem), //Gun Range gWeaponStatsDesc[ 6 ], //AP String + (Weapon[ usItem ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction( pObject )) / 100), // Ready AP's apStr, //AP's gWeaponStatsDesc[ 12 ], //Weight String fWeight, //Weight @@ -11754,9 +11755,9 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier else if ( gGameExternalOptions.fAdvRepairSystem && sThreshold < 100 ) { #ifdef CHINESE - swprintf( pStr, L"%s [%d%(%d%)]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s", + swprintf( pStr, L"%s [%d%(%d%)]\n%s %d\n%s %d\n%s %d (%d)\n%s (%d) %s\n%s %1.1f %s", #else - swprintf( pStr, L"%s [%d%%(%d%%)]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s", + swprintf( pStr, L"%s [%d%%(%d%%)]\n%s %d\n%s %d\n%s %d (%d)\n%s (%d) %s\n%s %1.1f %s", #endif ItemNames[ usItem ], @@ -11770,6 +11771,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GunRange( pObject, NULL )/10 : GunRange( pObject, NULL ), // SANDRO - added argument //Modified Range gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GetModifiedGunRange(usItem)/10 : GetModifiedGunRange(usItem), //Gun Range gWeaponStatsDesc[ 6 ], //AP String + (Weapon[ usItem ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction( pObject )) / 100), // Ready AP's apStr, //AP's gWeaponStatsDesc[ 12 ], //Weight String fWeight, //Weight @@ -11779,9 +11781,9 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier else if ( gGameExternalOptions.fDirtSystem && bDirt > 0 ) { #ifdef CHINESE - swprintf( pStr, L"%s [%d%]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s\n %s %.2f%%", + swprintf( pStr, L"%s [%d%]\n%s %d\n%s %d\n%s %d (%d)\n%s (%d) %s\n%s %1.1f %s\n %s %.2f%%", #else - swprintf( pStr, L"%s [%d%%]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s\n%s %.2f%%", + swprintf( pStr, L"%s [%d%%]\n%s %d\n%s %d\n%s %d (%d)\n%s (%d) %s\n%s %1.1f %s\n%s %.2f%%", #endif ItemNames[ usItem ], @@ -11794,6 +11796,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GunRange( pObject, NULL )/10 : GunRange( pObject, NULL ), // SANDRO - added argument //Modified Range gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GetModifiedGunRange(usItem)/10 : GetModifiedGunRange(usItem), //Gun Range gWeaponStatsDesc[ 6 ], //AP String + (Weapon[ usItem ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction( pObject )) / 100), // Ready AP's apStr, //AP's gWeaponStatsDesc[ 12 ], //Weight String fWeight, //Weight @@ -11805,9 +11808,9 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier else { #ifdef CHINESE - swprintf( pStr, L"%s [%d%]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s", + swprintf( pStr, L"%s [%d%]\n%s %d\n%s %d\n%s %d (%d)\n%s (%d) %s\n%s %1.1f %s", #else - swprintf( pStr, L"%s [%d%%]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s", + swprintf( pStr, L"%s [%d%%]\n%s %d\n%s %d\n%s %d (%d)\n%s (%d) %s\n%s %1.1f %s", #endif ItemNames[ usItem ], @@ -11820,6 +11823,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GunRange( pObject, NULL )/10 : GunRange( pObject, NULL ), // SANDRO - added argument //Modified Range gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GetModifiedGunRange(usItem)/10 : GetModifiedGunRange(usItem), //Gun Range gWeaponStatsDesc[ 6 ], //AP String + (Weapon[ usItem ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction( pObject )) / 100), // Ready AP's apStr, //AP's gWeaponStatsDesc[ 12 ], //Weight String fWeight, //Weight diff --git a/Utils/Text.h b/Utils/Text.h index 15e27abe..5bcaf36b 100644 --- a/Utils/Text.h +++ b/Utils/Text.h @@ -1273,12 +1273,16 @@ enum BOBBYR_GUNS_MAGAZINE, BOBBYR_GUNS_RANGE, BOBBYR_GUNS_DAMAGE, - BOBBYR_GUNS_ROF, //5 + BOBBYR_GUNS_ROF, + BOBBYR_GUNS_AP, + BOBBYR_GUNS_STUN, + BOBBYR_GUNS_PROTECTION, + BOBBYR_GUNS_CAMO, BOBBYR_GUNS_COST, BOBBYR_GUNS_IN_STOCK, BOBBYR_GUNS_QTY_ON_ORDER, BOBBYR_GUNS_DAMAGED, - BOBBYR_GUNS_WEIGHT, //10 + BOBBYR_GUNS_WEIGHT, BOBBYR_GUNS_SUB_TOTAL, BOBBYR_GUNS_PERCENT_FUNCTIONAL, diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index efea0c23..ac13ec33 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -4478,6 +4478,10 @@ STR16 BobbyRText[] = L"射程: ", //"Rng:", // The range of the gun L"杀伤力: ", //"Dam:", // Damage of the weapon L"射速: ", //"ROF:", // Weapon's Rate Of Fire, acronym ROF + L"AP: ", //L"AP:", // Weapon's Action Points, acronym AP + L"晕眩: ", //L"Stun:", // Weapon's Stun Damage + L"防护: ", //L"Protect:", // Armour's Protection + L"伪装: ", //L"Camo:", // Armour's Camouflage L"单价: ", //"Cost:", // Cost of the item L"库存: ", //"In stock:", // The number of items still in the store's inventory L"购买量: ", //"Qty on Order:", // The number of items on order diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index 7d7f05a3..4b336b1a 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -4480,6 +4480,10 @@ STR16 BobbyRText[] = L"Afs:", // The range of the gun L"Sch:", // Damage of the weapon L"ROF:", // Weapon's Rate Of Fire, acronym ROF + L"AP:", // Weapon's Action Points, acronym AP + L"Stun:", // Weapon's Stun Damage + L"Protect:", // Armour's Protection + L"Camo:", // Armour's Camouflage L"Kost:", // Cost of the item L"Aanwezig:", // The number of items still in the store's inventory L"# Besteld:", // The number of items on order diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 4c13a77c..66e4d8fb 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -4477,6 +4477,10 @@ STR16 BobbyRText[] = L"Rng:", // The range of the gun L"Dam:", // Damage of the weapon L"ROF:", // Weapon's Rate Of Fire, acronym ROF + L"AP:", // Weapon's Action Points, acronym AP + L"Stun:", // Weapon's Stun Damage + L"Protect:", // Armour's Protection + L"Camo:", // Armour's Camouflage L"Cost:", // Cost of the item L"In stock:", // The number of items still in the store's inventory L"Qty on Order:", // The number of items on order diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 7fa3828b..de4320ff 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -4467,9 +4467,13 @@ STR16 BobbyRText[] = L"Poids :", // Weight of all the items of the same type L"Cal :", // the caliber of the gun L"Chrg :", // number of rounds of ammo the Magazine can hold - L"Portée:", // The range of the gun - L"Dégats:", // Damage of the weapon + L"Portée :", // The range of the gun + L"Dégats :", // Damage of the weapon L"CdT :", // Weapon's Rate Of Fire, acronym ROF + L"PA :", // Weapon's Action Points, acronym AP + L"Etourdissement :", // Weapon's Stun Damage + L"Protect :", // Armour's Protection + L"Cam. :", // Armour's Camouflage L"Prix :", // Cost of the item L"En réserve :", // The number of items still in the store's inventory L"Qté commandée :", // The number of items on order diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index c9fe40e4..f22d1557 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -4377,6 +4377,10 @@ STR16 BobbyRText[] = L"Reichw.:", // The range of the gun L"Schaden:", // Damage of the weapon L"Kadenz:", // Weapon's Rate Of Fire, acroymn ROF + L"AP:", // Weapon's Action Points, acronym AP + L"Bet.:", // Weapon's Stun Damage + L"Rüstung:", // Armour's Protection + L"Tarn.:", // Armour's Camouflage L"Preis:", // Cost of the item L"Vorrätig:", // The number of items still in the store's inventory L"Bestellt:", // The number of items on order diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 934589d3..6a78c843 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -4467,6 +4467,10 @@ STR16 BobbyRText[] = L"Git.:", // The range of the gun L"Dan.:", // Damage of the weapon L"FFA:", // Weapon's Rate Of Fire, acronym ROF + L"PA:", // Weapon's Action Points, acronym AP + L"Stun:", // Weapon's Stun Damage + L"Protect:", // Armour's Protection + L"Trav.:", // Armour's Camouflage L"Costo:", // Cost of the item L"Inventario:", // The number of items still in the store's inventory L"Num. ordine:", // The number of items on order diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index 42771a89..dc175f7b 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -4476,6 +4476,10 @@ STR16 BobbyRText[] = L"Zas:", // The range of the gun L"Siła:", // Damage of the weapon L"CS:", // Weapon's Rate Of Fire, acronym ROF + L"PA:", // Weapon's Action Points, acronym AP + L"Ogłuszenie:", // Weapon's Stun Damage + L"Ochrona:", // Armour's Protection + L"Kamuf.:", // Armour's Camouflage L"Koszt:", // Cost of the item L"Na stanie:", // The number of items still in the store's inventory L"IloŚć na zamów.:", // The number of items on order diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index ae79d9b8..c00603fa 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -4467,6 +4467,10 @@ STR16 BobbyRText[] = L"Дист:", // The range of the gun L"Урон:", // Damage of the weapon L"Скор:", // Weapon's Rate Of Fire, acronym ROF + L"ОД:", // Weapon's Action Points, acronym AP + L"Оглушение:", // Weapon's Stun Damage + L"Броня:", // Armour's Protection + L"Камуф.:", // Armour's Camouflage L"Цена:", // Cost of the item L"Склад:", // The number of items still in the store's inventory L"Штук в заказе:", // The number of items on order diff --git a/Utils/_TaiwaneseText.cpp b/Utils/_TaiwaneseText.cpp index d207878d..2e0b18af 100644 --- a/Utils/_TaiwaneseText.cpp +++ b/Utils/_TaiwaneseText.cpp @@ -4481,6 +4481,10 @@ STR16 BobbyRText[] = L"Rng:", // The range of the gun L"Dam:", // Damage of the weapon L"ROF:", // Weapon's Rate Of Fire, acronym ROF + L"AP:", // Weapon's Action Points, acronym AP + L"Stun:", // Weapon's Stun Damage + L"Protect:", // Armour's Protection + L"Camo:", // Armour's Camouflage L"Cost:", // Cost of the item L"In stock:", // The number of items still in the store's inventory L"Qty on Order:", // The number of items on order