From 873e716ec1c798dd0690cf0f017ad218c2e2e054 Mon Sep 17 00:00:00 2001 From: Wanne Date: Wed, 1 Feb 2012 16:15:35 +0000 Subject: [PATCH] - New Externalization: Item size and weapon limits (by JMich) o 3 new ja2_options.ini properties: MAX_ITEM_SIZE, MAX_WEAPON_SIZE, OLD_INVENTORY_ITEM_NUMBER o see here: http://www.ja-galaxy-forum.com/board/ubbthreads.php?ubb=showflat&Number=276115&page=1 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@4907 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 4 +++ GameSettings.h | 5 ++++ Laptop/IMP Confirm.cpp | 6 +++-- Tactical/Item Types.cpp | 4 +-- Tactical/Items.cpp | 2 +- Tactical/XML_LBEPocket.cpp | 55 +++++++++++++++++++++++++++++++++----- 6 files changed, 65 insertions(+), 11 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index 9ff01a69..368f9f7c 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -620,6 +620,10 @@ void LoadGameExternalOptions() gGameExternalOptions.ubGameMaximumNumberOfCivilians = iniReader.ReadInteger("System Limit Settings","MAX_NUMBER_CIVS_IN_TACTICAL", 32, 16, CODE_MAXIMUM_NUMBER_OF_CIVS); gGameExternalOptions.iMaxEnemyGroupSize = iniReader.ReadInteger("System Limit Settings","MAX_STRATEGIC_ENEMY_GROUP_SIZE",20, 10, 100); + //JMich + gGameExternalOptions.guiMaxItemSize = iniReader.ReadInteger("System Limit Settings","MAX_ITEM_SIZE",34, 0, 250); + gGameExternalOptions.guiMaxWeaponSize = iniReader.ReadInteger("System Limit Settings","MAX_WEAPON_SIZE", 9, 0, 100); + gGameExternalOptions.guiOIVSizeNumber = iniReader.ReadInteger("System Limit Settings","OLD_INVENTORY_ITEM_NUMBER", 99, 0, 255); //################# Data File Settings ################# diff --git a/GameSettings.h b/GameSettings.h index 57a7c0b1..9c3043fc 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -416,6 +416,11 @@ typedef struct BOOLEAN autoSaveOnAssertionFailure; UINT32 autoSaveTime; + //JMich + UINT8 guiMaxWeaponSize; + UINT8 guiMaxItemSize; + UINT8 guiOIVSizeNumber; + //Sight range UINT32 ubStraightSightRange; UINT32 ubVisDistDecreasePerRainIntensity; diff --git a/Laptop/IMP Confirm.cpp b/Laptop/IMP Confirm.cpp index 1eca1cea..3d61090c 100644 --- a/Laptop/IMP Confirm.cpp +++ b/Laptop/IMP Confirm.cpp @@ -46,6 +46,8 @@ #define OLD_IMP_FILENAME_SUFFIX ".dat" #define NEW_IMP_FILENAME_SUFFIX ".dat2" + + //CHRISL: structure needed to store temporary inventory information during IMP creation typedef struct { @@ -479,7 +481,7 @@ void DistributeInitialGear(MERCPROFILESTRUCT *pProfile) { if((UsingNewInventorySystem() == true)) { - if(Item[pProfile->inv[i]].ItemSize != 99) + if(Item[pProfile->inv[i]].ItemSize != gGameExternalOptions.guiOIVSizeNumber) //JMich { tInv[count].inv = pProfile->inv[i]; tInv[count].iSize = Item[pProfile->inv[i]].ItemSize; @@ -511,7 +513,7 @@ void DistributeInitialGear(MERCPROFILESTRUCT *pProfile) length = count; count = 0; // Next sort list by size - for(j=34; j>=0; j--) + for(j=gGameExternalOptions.guiMaxItemSize; j>=0; j--) //JMich { for(i=0; iflags.uiStatusFlags & SOLDIER_VEHICLE)) - return (max(1, LBEPocketType[VEHICLE_POCKET_TYPE].ItemCapacityPerSize[__min(34,Item[pObject->usItem].ItemSize)])); + return (max(1, LBEPocketType[VEHICLE_POCKET_TYPE].ItemCapacityPerSize[__min(gGameExternalOptions.guiMaxItemSize,Item[pObject->usItem].ItemSize)])); //JMich else return (max(1, min(255,LBEPocketType[VEHICLE_POCKET_TYPE].ItemCapacityPerSize[__min(34,Item[pObject->usItem].ItemSize)]*4))); } diff --git a/Tactical/XML_LBEPocket.cpp b/Tactical/XML_LBEPocket.cpp index 4c12d9f7..59de0717 100644 --- a/Tactical/XML_LBEPocket.cpp +++ b/Tactical/XML_LBEPocket.cpp @@ -7,6 +7,7 @@ #include "Debug Control.h" #include "expat.h" #include "XML.h" + #include "GameSettings.h" #endif struct @@ -23,8 +24,24 @@ struct } typedef lbepocketParseData; -BOOLEAN onlyLocalizedText; +BOOLEAN onlyLocalizedText; +BOOLEAN lbepocketStartElementHandleLoop(const XML_Char *name, lbepocketParseData * pData) //Tais +{ + UINT8 i=0; + CHAR8 str1 [40] = ""; + CHAR8 str2 [40] = ""; + for (i=0; i<=gGameExternalOptions.guiMaxItemSize;i++) + { + sprintf(str1,"ItemCapacityPerSize.%d",i); + sprintf(str2,"ItemCapacityPerSize%d",i); + if(strcmp(name, str1)==0||strcmp(name, str2)==0) + { + return true; + } + } + return false; +} static void XMLCALL lbepocketStartElementHandle(void *userData, const XML_Char *name, const XML_Char **atts) { @@ -49,12 +66,14 @@ lbepocketStartElementHandle(void *userData, const XML_Char *name, const XML_Char pData->maxReadDepth++; //we are not skipping this element } - else if(pData->curElement == ELEMENT && + else if(pData->curElement == ELEMENT && (strcmp(name, "pIndex") == 0 || strcmp(name, "pName") == 0 || strcmp(name, "pSilhouette") == 0 || strcmp(name, "pType") == 0 || strcmp(name, "pRestriction") == 0 || + lbepocketStartElementHandleLoop(name, pData))) + /* JMich - These are no longer needed strcmp(name, "ItemCapacityPerSize.0") == 0 || strcmp(name, "ItemCapacityPerSize0") == 0 || strcmp(name, "ItemCapacityPerSize.1") == 0 || strcmp(name, "ItemCapacityPerSize1") == 0 || strcmp(name, "ItemCapacityPerSize.2") == 0 || strcmp(name, "ItemCapacityPerSize2") == 0 || @@ -89,7 +108,7 @@ lbepocketStartElementHandle(void *userData, const XML_Char *name, const XML_Char strcmp(name, "ItemCapacityPerSize.31") == 0 || strcmp(name, "ItemCapacityPerSize31") == 0 || strcmp(name, "ItemCapacityPerSize.32") == 0 || strcmp(name, "ItemCapacityPerSize32") == 0 || strcmp(name, "ItemCapacityPerSize.33") == 0 || strcmp(name, "ItemCapacityPerSize33") == 0 || - strcmp(name, "ItemCapacityPerSize.34") == 0 || strcmp(name, "ItemCapacityPerSize34") == 0 )) + strcmp(name, "ItemCapacityPerSize.34") == 0 || strcmp(name, "ItemCapacityPerSize34") == 0 ))*/ { pData->curElement = ELEMENT_PROPERTY; @@ -119,7 +138,10 @@ lbepocketCharacterDataHandle(void *userData, const XML_Char *str, int len) static void XMLCALL lbepocketEndElementHandle(void *userData, const XML_Char *name) { - lbepocketParseData * pData = (lbepocketParseData *)userData; +UINT8 i=0; +CHAR8 str1 [40] = ""; +CHAR8 str2 [40] = ""; +lbepocketParseData * pData = (lbepocketParseData *)userData; if(pData->currentDepth <= pData->maxReadDepth) //we're at the end of an element that we've been reading { @@ -170,7 +192,22 @@ lbepocketEndElementHandle(void *userData, const XML_Char *name) { pData->curElement = ELEMENT; pData->curLBEPocket.pRestriction = (UINT32) atol(pData->szCharData); + } //Tais fixed this. + else + { + for (i=0; i<=gGameExternalOptions.guiMaxItemSize;i++) + { + sprintf(str1,"ItemCapacityPerSize.%d",i); + sprintf(str2,"ItemCapacityPerSize%d",i); + if(strcmp(name, str1)==0||strcmp(name, str2)==0) + { + pData->curElement = ELEMENT; + pData->curLBEPocket.ItemCapacityPerSize[i] = (UINT8) atol(pData->szCharData); + break; + } + } } + /* JMich - these are no longer needed else if(strcmp(name, "ItemCapacityPerSize.0") == 0 || strcmp(name, "ItemCapacityPerSize0") == 0) { pData->curElement = ELEMENT; @@ -346,7 +383,7 @@ lbepocketEndElementHandle(void *userData, const XML_Char *name) pData->curElement = ELEMENT; pData->curLBEPocket.ItemCapacityPerSize[34] = (UINT8) atol(pData->szCharData); } - + */ pData->maxReadDepth--; } @@ -423,6 +460,7 @@ BOOLEAN ReadInLBEPocketStats(STR fileName, BOOLEAN localizedVersion) } BOOLEAN WriteLBEPocketEquipmentStats() { + UINT8 i; //DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"writelbepocketsstats"); HWFILE hFile; @@ -445,6 +483,11 @@ BOOLEAN WriteLBEPocketEquipmentStats() FilePrintf(hFile,"\t\t%d\r\n", LBEPocketType[cnt].pSilhouette ); FilePrintf(hFile,"\t\t%d\r\n", LBEPocketType[cnt].pType ); FilePrintf(hFile,"\t\t%d\r\n", LBEPocketType[cnt].pRestriction ); + for(i=0;i<=gGameExternalOptions.guiMaxItemSize;i++) //JMich + { + FilePrintf(hFile,"\t\t%d\r\n", i,LBEPocketType[cnt].ItemCapacityPerSize[i],i ); + } + /* JMich - these are no longer needed FilePrintf(hFile,"\t\t%d\r\n", LBEPocketType[cnt].ItemCapacityPerSize[0] ); FilePrintf(hFile,"\t\t%d\r\n", LBEPocketType[cnt].ItemCapacityPerSize[1] ); FilePrintf(hFile,"\t\t%d\r\n", LBEPocketType[cnt].ItemCapacityPerSize[2] ); @@ -480,7 +523,7 @@ BOOLEAN WriteLBEPocketEquipmentStats() FilePrintf(hFile,"\t\t%d\r\n", LBEPocketType[cnt].ItemCapacityPerSize[32] ); FilePrintf(hFile,"\t\t%d\r\n", LBEPocketType[cnt].ItemCapacityPerSize[33] ); FilePrintf(hFile,"\t\t%d\r\n", LBEPocketType[cnt].ItemCapacityPerSize[34] ); - + */ FilePrintf(hFile,"\t\r\n"); } FilePrintf(hFile,"\r\n");