Driveable vehicle Update: Externalized vehicle seats (by anv)

- externalised vehicle seats (TableData\Vehicles.xml) influence position of passenger, field of view, ability to shoot and being hidden,
- seat can chosen by using ctrl+RMB on vehicle (ctrl + LMB just takes the first visible seat)
- seats can be changed or swapped while inside vehicle,
- remade JSD files for cars,
- vehicles aren't transparent anymore,
- vehicles are louder than people, depending how fast they move.
see: http://www.bears-pit.com/board/ubbthreads.php/topics/332790/5.html


git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7212 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2014-05-18 15:26:15 +00:00
parent cf1b9982ba
commit bbff053fc5
35 changed files with 1209 additions and 144 deletions
+104 -2
View File
@@ -19,6 +19,7 @@ struct
UINT32 maxArraySize;
UINT32 curIndex;
UINT32 curSeatIndex;
UINT32 currentDepth;
UINT32 maxReadDepth;
}
@@ -65,6 +66,28 @@ newCarStartElementHandle(void *userData, const XML_Char *name, const XML_Char **
pData->curElement = ELEMENT_PROPERTY;
pData->maxReadDepth++;
}
else if(strcmp(name, "SEAT") == 0 && pData->curElement == ELEMENT)
{
pData->curElement = ELEMENT_SUBLIST;
pData->maxReadDepth++;
}
else if(pData->curElement == ELEMENT_SUBLIST &&
(strcmp(name, "SeatIndex") == 0 ||
strcmp(name, "SeatName") == 0 ||
strcmp(name, "Driver") == 0 ||
strcmp(name, "Hidden") == 0 ||
strcmp(name, "BlockedView") == 0 ||
strcmp(name, "BlockedShots") == 0 ||
strcmp(name, "Rotation") == 0 ||
strcmp(name, "OffsetX") == 0 ||
strcmp(name, "OffsetY") == 0 ||
strcmp(name, "Coverage") == 0 ||
strcmp(name, "Compartment") == 0 ||
strcmp(name, "MountedGun") == 0 ))
{
pData->curElement = ELEMENT_SUBLIST_PROPERTY;
pData->maxReadDepth++; //we are not skipping this element
}
pData->szCharData[0] = '\0';
}
@@ -121,13 +144,16 @@ newCarEndElementHandle(void *userData, const XML_Char *name)
wcscpy(gNewVehicle[pData->curNewCar.uiIndex].NewVehicleName, pData->curNewCar.NewVehicleName);
wcscpy(gNewVehicle[pData->curNewCar.uiIndex].NewShortVehicleStrings, pData->curNewCar.NewShortVehicleStrings);
gNewVehicle[ pData->curNewCar.uiIndex ].NewUsed = FALSE;
memcpy( gNewVehicle[ pData->curNewCar.uiIndex ].VehicleSeats, pData->curNewCar.VehicleSeats, sizeof(pData->curNewCar.VehicleSeats) );
}
else
{
wcscpy(gNewVehicle[pData->curNewCar.uiIndex].NewVehicleStrings, pData->curNewCar.NewVehicleStrings);
wcscpy(gNewVehicle[pData->curNewCar.uiIndex].NewVehicleName, pData->curNewCar.NewVehicleName);
wcscpy(gNewVehicle[pData->curNewCar.uiIndex].NewShortVehicleStrings, pData->curNewCar.NewShortVehicleStrings);
}
wcscpy(gNewVehicle[pData->curNewCar.uiIndex].NewShortVehicleStrings, pData->curNewCar.NewShortVehicleStrings);
}
memset( pData->curNewCar.VehicleSeats, 0, sizeof(pData->curNewCar.VehicleSeats) );
}
else if(strcmp(name, "uiIndex") == 0)
{
@@ -213,6 +239,81 @@ newCarEndElementHandle(void *userData, const XML_Char *name)
pData->curNewCar.szIconFace[i] = temp;
}
}
else if(strcmp(name, "SEAT") == 0 )
{
pData->curElement = ELEMENT;
if (!NewCar_TextOnly)
{
memcpy( gNewVehicle[pData->curNewCar.uiIndex].VehicleSeats, pData->curNewCar.VehicleSeats, sizeof(pData->curNewCar.VehicleSeats) );
}
else
{
wcscpy( gNewVehicle[pData->curNewCar.uiIndex].VehicleSeats[pData->curSeatIndex].zSeatName, pData->curNewCar.VehicleSeats[pData->curSeatIndex].zSeatName );
}
}
else if(strcmp(name, "SeatIndex") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curSeatIndex = (int) atol(pData->szCharData);
pData->curNewCar.VehicleSeats[pData->curSeatIndex].ubSeatIndex = pData->curSeatIndex;
}
else if(strcmp(name, "SeatName") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
MultiByteToWideChar( CP_UTF8, 0, pData->szCharData, -1, pData->curNewCar.VehicleSeats[pData->curSeatIndex].zSeatName, sizeof(pData->curNewCar.VehicleSeats[pData->curSeatIndex].zSeatName)/sizeof( pData->curNewCar.VehicleSeats[pData->curSeatIndex].zSeatName[0]) );
pData->curNewCar.VehicleSeats[pData->curSeatIndex].zSeatName[sizeof(pData->curNewCar.VehicleSeats[pData->curSeatIndex].zSeatName)/sizeof(pData->curNewCar.VehicleSeats[pData->curSeatIndex].zSeatName[0]) - 1] = '\0';
}
else if(strcmp(name, "Driver") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].fDriver = (BOOLEAN) atol(pData->szCharData);
}
else if(strcmp(name, "Hidden") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].fHidden = (BOOLEAN) atol(pData->szCharData);
}
else if(strcmp(name, "BlockedView") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].fBlockedView = (BOOLEAN) atol(pData->szCharData);
}
else if(strcmp(name, "BlockedShots") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].fBlockedShots = (BOOLEAN) atol(pData->szCharData);
}
else if(strcmp(name, "Rotation") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].ubRotation = (UINT8) atol(pData->szCharData);
}
else if(strcmp(name, "OffsetX") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].bOffsetX = (INT8) atol(pData->szCharData);
}
else if(strcmp(name, "OffsetY") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].bOffsetY = (INT8) atol(pData->szCharData);
}
else if(strcmp(name, "Coverage") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].ubCoverage = (UINT8) atol(pData->szCharData);
}
else if(strcmp(name, "Compartment") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].ubCompartment = (UINT8) atol(pData->szCharData);
}
else if(strcmp(name, "MountedGun") == 0)
{
pData->curElement = ELEMENT_SUBLIST;
pData->curNewCar.VehicleSeats[pData->curSeatIndex].usMountedGun = (UINT32) atol(pData->szCharData);
}
pData->maxReadDepth--;
@@ -301,6 +402,7 @@ void InitNewVehicles ()
gNewVehicle[ iCount ].NewVehicleName[127] = '\0';
gNewVehicle[ iCount ].NewShortVehicleStrings[127] = '\0';
gNewVehicle[ iCount ].NewUsed = FALSE;
memset( &gNewVehicle[ iCount ].VehicleSeats, 0, sizeof(gNewVehicle[ iCount ].VehicleSeats) );
}
}