Fixed CTD in editor when changing detailed civ placement from wheelchair to jeep

Fixed memory corruption in detailed placement due to old-inventory behavior
Added Editor.slf to files JA2/Editor will load from
Fixed FindBestPath to not search for a path to NOWHERE


git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1362 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Overhaul
2007-09-14 07:27:14 +00:00
parent 2a4e963983
commit 5035e83261
7 changed files with 16 additions and 3 deletions
+4 -1
View File
@@ -2075,6 +2075,7 @@ void ChangeBodyType( INT8 bOffset ) //+1 or -1 only
break; break;
} }
SetSoldierAnimationSurface( gpSelected->pSoldier, gpSelected->pSoldier->usAnimState ); SetSoldierAnimationSurface( gpSelected->pSoldier, gpSelected->pSoldier->usAnimState );
ConvertAniCodeToAniFrame( gpSelected->pSoldier, 0 );
} }
//Update the placement's info as well. //Update the placement's info as well.
gpSelected->pBasicPlacement->bBodyType = (INT8)iIndex; gpSelected->pBasicPlacement->bBodyType = (INT8)iIndex;
@@ -2973,7 +2974,9 @@ void UpdateMercItemSlots()
{ {
if( gpSelected->pDetailedPlacement->ubProfile != NO_PROFILE ) if( gpSelected->pDetailedPlacement->ubProfile != NO_PROFILE )
{ {
memcpy( &gpSelected->pDetailedPlacement->Inv, &gpSelected->pSoldier->inv, sizeof( OBJECTTYPE ) * NUM_INV_SLOTS ); // 0verhaul: Inventory is now a C++ class. Bad memcpy! No biscuit!
//memcpy( &gpSelected->pDetailedPlacement->Inv, &gpSelected->pSoldier->inv, sizeof( OBJECTTYPE ) * NUM_INV_SLOTS );
gpSelected->pDetailedPlacement->Inv = gpSelected->pSoldier->inv;
} }
for( x = 0; x < 9; x++ ) for( x = 0; x < 9; x++ )
{ {
+1 -1
View File
@@ -281,7 +281,7 @@ UINT32 ProcessLoadSaveScreenMessageBoxResult()
RemoveFileDialog(); RemoveFileDialog();
return EDIT_SCREEN ; return EDIT_SCREEN ;
} }
Assert( 0 ); // Assert( 0 );
return LOADSAVE_SCREEN; return LOADSAVE_SCREEN;
} }
+4
View File
@@ -262,6 +262,10 @@ UINT32 EditScreenShutdown(void)
GameShutdownEditorMercsInfo(); GameShutdownEditorMercsInfo();
RemoveAllFromUndoList(); RemoveAllFromUndoList();
KillClipboard(); KillClipboard();
if( gfWorldLoaded )
{
KillItemPoolList();
}
return TRUE; return TRUE;
} }
+1
View File
@@ -4,6 +4,7 @@ LibraryInitHeader gGameLibaries[ ] =
//Library Name Can be Init at start //Library Name Can be Init at start
// on cd // on cd
{ "Data.slf", FALSE, TRUE }, { "Data.slf", FALSE, TRUE },
{ "Editor.slf", FALSE, FALSE },
{ "Ambient.slf", FALSE, TRUE }, { "Ambient.slf", FALSE, TRUE },
{ "Anims.slf", FALSE, TRUE }, { "Anims.slf", FALSE, TRUE },
{ "BattleSnds.slf", FALSE, TRUE }, { "BattleSnds.slf", FALSE, TRUE },
+1
View File
@@ -6,6 +6,7 @@
enum enum
{ {
LIBRARY_DATA, LIBRARY_DATA,
LIBRARY_EDITOR,
LIBRARY_AMBIENT, LIBRARY_AMBIENT,
LIBRARY_ANIMS, LIBRARY_ANIMS,
LIBRARY_BATTLESNDS, LIBRARY_BATTLESNDS,
+4
View File
@@ -2082,6 +2082,10 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
iOriginationX = iOriginationY = 0; iOriginationX = iOriginationY = 0;
iOrigination = (INT32) s->sGridNo; iOrigination = (INT32) s->sGridNo;
if (sDestination == NOWHERE)
{
return 0; // There is no path to nowhere, because everywhere you can go is somewhere!
}
if (iOrigination < 0 || iOrigination > WORLD_MAX) if (iOrigination < 0 || iOrigination > WORLD_MAX)
{ {
#ifdef JA2BETAVERSION #ifdef JA2BETAVERSION
+1 -1
View File
@@ -301,7 +301,7 @@ BOOLEAN LoadSoldiersFromMap( INT8 **hBuffer )
LOADDATA( &tempDetailedPlacement, *hBuffer, SIZEOF_SOLDIERCREATE_STRUCT_POD ); LOADDATA( &tempDetailedPlacement, *hBuffer, SIZEOF_SOLDIERCREATE_STRUCT_POD );
tempDetailedPlacement.CopyOldInventoryToNew(); tempDetailedPlacement.CopyOldInventoryToNew();
//allocate memory for new static detailed placement //allocate memory for new static detailed placement
pNode->pDetailedPlacement = new (MemAlloc( SIZEOF_SOLDIERCREATE_STRUCT )) SOLDIERCREATE_STRUCT;//(SOLDIERCREATE_STRUCT*)MemAlloc( SIZEOF_SOLDIERCREATE_STRUCT ); pNode->pDetailedPlacement = new SOLDIERCREATE_STRUCT;//(SOLDIERCREATE_STRUCT*)MemAlloc( SIZEOF_SOLDIERCREATE_STRUCT );
if( !pNode->pDetailedPlacement ) if( !pNode->pDetailedPlacement )
{ {
AssertMsg( 0, "Failed to allocate memory for new detailed placement in LoadSoldiersFromMap." ); AssertMsg( 0, "Failed to allocate memory for new detailed placement in LoadSoldiersFromMap." );