mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
- reworked cities.xml handling section, added new fields
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@598 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -129,39 +129,39 @@ UINT32 uiPercentLoyaltyDecreaseForCivMurder[]={
|
||||
|
||||
// on a scale of 1-100, this is a measure of how much each town hates the Queen's opression & is willing to stand against it
|
||||
// it primarily controls the RATE of loyalty change in each town: the loyalty effect of the same events depends on it
|
||||
UINT8 gubTownRebelSentiment[ NUM_TOWNS ] =
|
||||
{
|
||||
0, // not a town - blank sector index
|
||||
90, // OMERTA, - They ARE the rebels!!!
|
||||
30, // DRASSEN, - Rebel friendly, makes it pretty easy to get first mine's income going at the start
|
||||
12, // ALMA - Military town, high loyalty to Queen, need quests to get 100%
|
||||
15, // GRUMM, - Close to Meduna, strong influence
|
||||
20, // TIXA, - Not a real town
|
||||
15, // CAMBRIA, - Artificially much lower 'cause it's big and central and too easy to get loyalty up there
|
||||
20, // SAN_MONA,- Neutral ground, loyalty doesn't vary
|
||||
20, // ESTONI, - Not a real town
|
||||
20, // ORTA, - Not a real town
|
||||
12, // BALIME, - Rich town, high loyalty to Queen
|
||||
10, // MEDUNA, - Enemy HQ, for God's sake!
|
||||
35, // CHITZENA, - Artificially high 'cause there's not enough fights near it to get the loyalty up otherwise
|
||||
};
|
||||
UINT8 gubTownRebelSentiment[ NUM_TOWNS ]; // =
|
||||
//{
|
||||
// 0, // not a town - blank sector index
|
||||
// 90, // OMERTA, - They ARE the rebels!!!
|
||||
// 30, // DRASSEN, - Rebel friendly, makes it pretty easy to get first mine's income going at the start
|
||||
// 12, // ALMA - Military town, high loyalty to Queen, need quests to get 100%
|
||||
// 15, // GRUMM, - Close to Meduna, strong influence
|
||||
// 20, // TIXA, - Not a real town
|
||||
// 15, // CAMBRIA, - Artificially much lower 'cause it's big and central and too easy to get loyalty up there
|
||||
// 20, // SAN_MONA,- Neutral ground, loyalty doesn't vary
|
||||
// 20, // ESTONI, - Not a real town
|
||||
// 20, // ORTA, - Not a real town
|
||||
// 12, // BALIME, - Rich town, high loyalty to Queen
|
||||
// 10, // MEDUNA, - Enemy HQ, for God's sake!
|
||||
// 35, // CHITZENA, - Artificially high 'cause there's not enough fights near it to get the loyalty up otherwise
|
||||
//};
|
||||
|
||||
BOOLEAN gfTownUsesLoyalty[ NUM_TOWNS ] =
|
||||
{
|
||||
FALSE, // not a town - blank sector index
|
||||
TRUE , // OMERTA
|
||||
TRUE, // DRASSEN
|
||||
TRUE, // ALMA
|
||||
TRUE, // GRUMM
|
||||
FALSE, // TIXA
|
||||
TRUE, // CAMBRIA
|
||||
FALSE, // SAN_MONA
|
||||
FALSE, // ESTONI
|
||||
FALSE, // ORTA
|
||||
TRUE, // BALIME
|
||||
TRUE, // MEDUNA
|
||||
TRUE, // CHITZENA
|
||||
};
|
||||
BOOLEAN gfTownUsesLoyalty[ NUM_TOWNS ];// =
|
||||
//{
|
||||
// FALSE, // not a town - blank sector index
|
||||
// TRUE , // OMERTA
|
||||
// TRUE, // DRASSEN
|
||||
// TRUE, // ALMA
|
||||
// TRUE, // GRUMM
|
||||
// FALSE, // TIXA
|
||||
// TRUE, // CAMBRIA
|
||||
// FALSE, // SAN_MONA
|
||||
// FALSE, // ESTONI
|
||||
// FALSE, // ORTA
|
||||
// TRUE, // BALIME
|
||||
// TRUE, // MEDUNA
|
||||
// TRUE, // CHITZENA
|
||||
//};
|
||||
|
||||
// location of first enocunter with enemy
|
||||
INT16 sWorldSectorLocationOfFirstBattle = 0;
|
||||
|
||||
+111
-111
@@ -347,6 +347,9 @@ void CrippledVersionFailureToLoadMapCheck();
|
||||
#include "tiledat.h"
|
||||
#endif
|
||||
|
||||
extern UINT8 gubTownRebelSentiment[ NUM_TOWNS ];
|
||||
extern BOOLEAN gfTownUsesLoyalty[ NUM_TOWNS ];
|
||||
|
||||
#define MAX_CHAR_DATA_LENGTH 500
|
||||
|
||||
typedef enum
|
||||
@@ -365,6 +368,8 @@ typedef enum
|
||||
CITYTABLE_ELEMENT_TOWNPOINT,
|
||||
CITYTABLE_ELEMENT_TOWNPOINT_X,
|
||||
CITYTABLE_ELEMENT_TOWNPOINT_Y,
|
||||
CITYTABLE_ELEMENT_USES_LOYALTY,
|
||||
CITYTABLE_ELEMENT_REBEL_SENTIMENT
|
||||
} CITYTABLE_PARSE_STAGE;
|
||||
|
||||
typedef struct
|
||||
@@ -373,6 +378,8 @@ typedef struct
|
||||
UINT8 ubBaseX;
|
||||
UINT8 ubBaseY;
|
||||
POINT townPoint;
|
||||
BOOLEAN townUsesLoyalty;
|
||||
UINT8 townRebelSentiment;
|
||||
CHAR8 cityName[MAX_TOWN_NAME_LENGHT];
|
||||
} cityInfo;
|
||||
|
||||
@@ -427,6 +434,8 @@ citytableStartElementHandle(void *userData, const char *name, const char **atts)
|
||||
|
||||
memset(sBaseSectorList,0,sizeof(sBaseSectorList));
|
||||
memset(pTownPoints,0,sizeof(pTownPoints));
|
||||
memset(gfTownUsesLoyalty,0,sizeof(gfTownUsesLoyalty));
|
||||
memset(gubTownRebelSentiment,0,sizeof(gubTownRebelSentiment));
|
||||
|
||||
pData->maxReadDepth++; //we are not skipping this element
|
||||
}
|
||||
@@ -438,7 +447,7 @@ citytableStartElementHandle(void *userData, const char *name, const char **atts)
|
||||
|
||||
pData->maxReadDepth++; //we are not skipping this element
|
||||
}
|
||||
else if(strcmp(name, "cityName") == 0 && pData->curElement == CITYTABLE_ELEMENT_CITY)
|
||||
else if(strcmp(name, "townName") == 0 && pData->curElement == CITYTABLE_ELEMENT_CITY)
|
||||
{
|
||||
pData->curElement = CITYTABLE_ELEMENT_NAME;
|
||||
pData->maxReadDepth++; //we are not skipping this element
|
||||
@@ -448,6 +457,16 @@ citytableStartElementHandle(void *userData, const char *name, const char **atts)
|
||||
pData->curElement = CITYTABLE_ELEMENT_INDEX;
|
||||
pData->maxReadDepth++; //we are not skipping this element
|
||||
}
|
||||
else if(strcmp(name, "townUsesLoyalty") == 0 && pData->curElement == CITYTABLE_ELEMENT_CITY)
|
||||
{
|
||||
pData->curElement = CITYTABLE_ELEMENT_USES_LOYALTY;
|
||||
pData->maxReadDepth++; //we are not skipping this element
|
||||
}
|
||||
else if(strcmp(name, "townRebelSentiment") == 0 && pData->curElement == CITYTABLE_ELEMENT_CITY)
|
||||
{
|
||||
pData->curElement = CITYTABLE_ELEMENT_REBEL_SENTIMENT;
|
||||
pData->maxReadDepth++; //we are not skipping this element
|
||||
}
|
||||
else if(strcmp(name, "baseSector") == 0 && pData->curElement == CITYTABLE_ELEMENT_CITY)
|
||||
{
|
||||
pData->curElement = CITYTABLE_ELEMENT_BASESECTOR;
|
||||
@@ -538,8 +557,12 @@ citytableEndElementHandle(void *userData, const char *name)
|
||||
{
|
||||
pData->curElement = CITYTABLE_ELEMENT_CITYLIST;
|
||||
|
||||
sBaseSectorList[pData->curCityInfo.uiIndex-1] = SECTOR(pData->curCityInfo.ubBaseX,pData->curCityInfo.ubBaseY);
|
||||
pTownPoints[pData->curCityInfo.uiIndex] = pData->curCityInfo.townPoint;
|
||||
sBaseSectorList [pData->curCityInfo.uiIndex-1] = SECTOR(pData->curCityInfo.ubBaseX,pData->curCityInfo.ubBaseY);
|
||||
pTownPoints [pData->curCityInfo.uiIndex ] = pData->curCityInfo.townPoint;
|
||||
gfTownUsesLoyalty [pData->curCityInfo.uiIndex ] = pData->curCityInfo.townUsesLoyalty;
|
||||
gubTownRebelSentiment [pData->curCityInfo.uiIndex ] = pData->curCityInfo.townRebelSentiment;
|
||||
|
||||
mbstowcs( pTownNames[pData->curCityInfo.uiIndex], pData->curCityInfo.cityName, MAX_TOWN_NAME_LENGHT);
|
||||
}
|
||||
else if(strcmp(name, "uiIndex") == 0 && pData->curElement == CITYTABLE_ELEMENT_INDEX)
|
||||
{
|
||||
@@ -547,13 +570,31 @@ citytableEndElementHandle(void *userData, const char *name)
|
||||
|
||||
pData->curCityInfo.uiIndex = atol(pData->szCharData);
|
||||
}
|
||||
else if(strcmp(name, "cityName") == 0 && pData->curElement == CITYTABLE_ELEMENT_NAME)
|
||||
else if(strcmp(name, "townName") == 0 && pData->curElement == CITYTABLE_ELEMENT_NAME)
|
||||
{
|
||||
// Copy this string into the pTownNames array
|
||||
mbstowcs(pTownNames[pData->curCityInfo.uiIndex], (const char *) pData->szCharData, MAX_TOWN_NAME_LENGHT);
|
||||
pTownNames[pData->curCityInfo.uiIndex][MAX_TOWN_NAME_LENGHT - 1] = 0;
|
||||
strncpy(pData->curCityInfo.cityName, (const char *) pData->szCharData, MAX_TOWN_NAME_LENGHT - 1);
|
||||
pData->curCityInfo.cityName[MAX_TOWN_NAME_LENGHT - 1] = 0;
|
||||
|
||||
pData->curElement = CITYTABLE_ELEMENT_CITY;
|
||||
}
|
||||
else if(strcmp(name, "townUsesLoyalty") == 0 && pData->curElement == CITYTABLE_ELEMENT_USES_LOYALTY )
|
||||
{
|
||||
pData->curElement = CITYTABLE_ELEMENT_CITY;
|
||||
|
||||
pData->curCityInfo.townUsesLoyalty = (BOOLEAN)atol(pData->szCharData);
|
||||
}
|
||||
else if(strcmp(name, "townRebelSentiment") == 0 && pData->curElement == CITYTABLE_ELEMENT_REBEL_SENTIMENT )
|
||||
{
|
||||
pData->curElement = CITYTABLE_ELEMENT_CITY;
|
||||
|
||||
pData->curCityInfo.townRebelSentiment = (UINT8)atol(pData->szCharData);
|
||||
if ( pData->curCityInfo.townRebelSentiment > 100 )
|
||||
{
|
||||
pData->curCityInfo.townRebelSentiment = 100;
|
||||
}
|
||||
else if ( !pData->curCityInfo.townRebelSentiment )
|
||||
pData->curCityInfo.townRebelSentiment = 1;
|
||||
}
|
||||
else if(strcmp(name, "baseSector") == 0 && pData->curElement == CITYTABLE_ELEMENT_BASESECTOR)
|
||||
{
|
||||
pData->curElement = CITYTABLE_ELEMENT_CITY;
|
||||
@@ -593,6 +634,69 @@ citytableEndElementHandle(void *userData, const char *name)
|
||||
pData->currentDepth--;
|
||||
}
|
||||
|
||||
BOOLEAN WriteInStrategicMapSectorTownNames(STR fileName)
|
||||
{
|
||||
HWFILE hFile;
|
||||
|
||||
hFile = FileOpen( fileName, FILE_ACCESS_WRITE | FILE_CREATE_ALWAYS, FALSE );
|
||||
if ( !hFile )
|
||||
return( FALSE );
|
||||
|
||||
{
|
||||
UINT32 x, y, cnt;
|
||||
|
||||
|
||||
FilePrintf(hFile,"<CITY_INFO>\r\n");
|
||||
FilePrintf(hFile,"\t<CITYLIST>\r\n");
|
||||
for(cnt = 1; cnt < NUM_TOWNS; cnt++)
|
||||
{
|
||||
FilePrintf(hFile,"\t\t<CITY>\r\n");
|
||||
|
||||
FilePrintf(hFile,"\t\t\t<uiIndex>%d</uiIndex>\r\n",cnt);
|
||||
|
||||
FilePrintf(hFile,"\t\t\t<townName>%S</townName>\r\n", pTownNames[cnt] );
|
||||
|
||||
FilePrintf(hFile,"\t\t\t<townUsesLoyalty>%d</townUsesLoyalty>\r\n", gfTownUsesLoyalty[cnt] );
|
||||
|
||||
FilePrintf(hFile,"\t\t\t<townRebelSentiment>%d</townRebelSentiment>\r\n", gubTownRebelSentiment[cnt] );
|
||||
|
||||
FilePrintf(hFile,"\t\t\t<baseSector>\r\n");
|
||||
FilePrintf(hFile,"\t\t\t\t<x>%d</x>\r\n",(sBaseSectorList[cnt-1]%16)+1);
|
||||
FilePrintf(hFile,"\t\t\t\t<y>%d</y>\r\n",(sBaseSectorList[cnt-1]/16)+1);
|
||||
FilePrintf(hFile,"\t\t\t</baseSector>\r\n");
|
||||
|
||||
|
||||
FilePrintf(hFile,"\t\t\t<townPoint>\r\n");
|
||||
FilePrintf(hFile,"\t\t\t\t<x>%d</x>\r\n",pTownPoints[cnt].x);
|
||||
FilePrintf(hFile,"\t\t\t\t<y>%d</y>\r\n",pTownPoints[cnt].y);
|
||||
FilePrintf(hFile,"\t\t\t</townPoint>\r\n");
|
||||
|
||||
|
||||
FilePrintf(hFile,"\t\t</CITY>\r\n");
|
||||
}
|
||||
FilePrintf(hFile,"\t</CITYLIST>\r\n");
|
||||
|
||||
FilePrintf(hFile,"\t<CITY_TABLE>\r\n");
|
||||
for(y = 0;y < MAP_WORLD_Y;y++)
|
||||
{
|
||||
FilePrintf(hFile,"\t\t<CITY_TABLE_ROW row=\"%02d\">",y);
|
||||
for(x = 0;x < MAP_WORLD_X;x++)
|
||||
{
|
||||
if(x < MAP_WORLD_X-1)
|
||||
{
|
||||
FilePrintf(hFile,"%3d",StrategicMap[x+y*MAP_WORLD_X].bNameId);
|
||||
}
|
||||
else
|
||||
FilePrintf(hFile,"%3d </CITY_TABLE_ROW>\r\n",StrategicMap[x+y*MAP_WORLD_X].bNameId);
|
||||
}
|
||||
}
|
||||
FilePrintf(hFile,"\t</CITY_TABLE>\r\n");
|
||||
FilePrintf(hFile,"</CITY_INFO>\r\n");
|
||||
}
|
||||
FileClose( hFile );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOLEAN ReadInStrategicMapSectorTownNames(STR fileName)
|
||||
{
|
||||
@@ -649,110 +753,6 @@ BOOLEAN ReadInStrategicMapSectorTownNames(STR fileName)
|
||||
|
||||
XML_ParserFree(parser);
|
||||
|
||||
#ifdef JA2TESTVERSION
|
||||
hFile = FileOpen( "TABLEDATA\\~Cities.xml", FILE_ACCESS_WRITE | FILE_CREATE_ALWAYS, FALSE );
|
||||
if ( !hFile )
|
||||
return( FALSE );
|
||||
|
||||
{
|
||||
UINT32 x, y, cnt;
|
||||
|
||||
|
||||
FilePrintf(hFile,"<CITY_INFO>\r\n");
|
||||
FilePrintf(hFile,"\t<CITYLIST>\r\n");
|
||||
for(cnt = 1;cnt <= 12;cnt++)
|
||||
{
|
||||
FilePrintf(hFile,"\t\t<CITY>\r\n");
|
||||
|
||||
FilePrintf(hFile,"\t\t\t<uiIndex>%d</uiIndex>\r\n",cnt);
|
||||
|
||||
switch(cnt)
|
||||
{
|
||||
case 1:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Omerta</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 2:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Drassen</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 3:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Alma</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 4:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Grumm</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 5:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Tixa</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 6:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Cambria</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 7:
|
||||
FilePrintf(hFile,"\t\t\t<szName>San Mona</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 8:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Estoni</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 9:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Orta</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 10:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Balime</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 11:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Meduna</szName>\r\n");
|
||||
break;
|
||||
|
||||
case 12:
|
||||
FilePrintf(hFile,"\t\t\t<szName>Chitzena</szName>\r\n");
|
||||
break;
|
||||
}
|
||||
|
||||
FilePrintf(hFile,"\t\t\t<baseSector>\r\n");
|
||||
FilePrintf(hFile,"\t\t\t\t<x>%d</x>\r\n",(sBaseSectorList[cnt-1]%16)+1);
|
||||
FilePrintf(hFile,"\t\t\t\t<y>%d</y>\r\n",(sBaseSectorList[cnt-1]/16)+1);
|
||||
FilePrintf(hFile,"\t\t\t</baseSector>\r\n");
|
||||
|
||||
|
||||
FilePrintf(hFile,"\t\t\t<townPoint>\r\n");
|
||||
FilePrintf(hFile,"\t\t\t\t<x>%d</x>\r\n",pTownPoints[cnt].x);
|
||||
FilePrintf(hFile,"\t\t\t\t<y>%d</y>\r\n",pTownPoints[cnt].y);
|
||||
FilePrintf(hFile,"\t\t\t</townPoint>\r\n");
|
||||
|
||||
|
||||
FilePrintf(hFile,"\t\t</CITY>\r\n");
|
||||
}
|
||||
FilePrintf(hFile,"\t</CITYLIST>\r\n");
|
||||
|
||||
FilePrintf(hFile,"\t<CITY_TABLE>\r\n");
|
||||
for(y = 0;y < MAP_WORLD_Y;y++)
|
||||
{
|
||||
FilePrintf(hFile,"\t\t<CITY_TABLE_ROW row=\"%02d\">",y);
|
||||
for(x = 0;x < MAP_WORLD_X;x++)
|
||||
{
|
||||
if(x < MAP_WORLD_X-1)
|
||||
{
|
||||
FilePrintf(hFile,"%3d",StrategicMap[x+y*MAP_WORLD_X].bNameId);
|
||||
}
|
||||
else
|
||||
FilePrintf(hFile,"%3d </CITY_TABLE_ROW>\r\n",StrategicMap[x+y*MAP_WORLD_X].bNameId);
|
||||
}
|
||||
}
|
||||
FilePrintf(hFile,"\t</CITY_TABLE>\r\n");
|
||||
FilePrintf(hFile,"</CITY_INFO>\r\n");
|
||||
}
|
||||
FileClose( hFile );
|
||||
#endif
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -81,6 +81,8 @@ void UpdateMercsInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
|
||||
void UpdateMercInSector( SOLDIERTYPE *pSoldier, INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
|
||||
|
||||
BOOLEAN ReadInMapStructure(STR fileName);
|
||||
BOOLEAN ReadInStrategicMapSectorTownNames(STR fileName);
|
||||
BOOLEAN WriteInStrategicMapSectorTownNames(STR fileName);
|
||||
|
||||
// get short sector name without town name
|
||||
void GetShortSectorString( INT16 sMapX,INT16 sMapY, STR16 sString );
|
||||
|
||||
Reference in New Issue
Block a user