From 30cc546c093d0b2bcc0cd295ea78a13284e58b81 Mon Sep 17 00:00:00 2001 From: lalien Date: Tue, 8 May 2007 14:42:28 +0000 Subject: [PATCH] bug fixes from Overhaul: - CTD when someone fell off the west side of a building - Assertion failure when Skyrider leaves a sector where a merc cannot be woken up - Boxing fixes: Opponent no longer "seeks cover", ie jumps back out of the ring; no longer will pick up a gun from the ground while boxing - Disappearing corpses (and possibly items) when cursor hovers over a square on the rooftop; also fixes a "write to freed memory" heap check git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@867 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameVersion.cpp | 2 +- JA2.suo | Bin 197632 -> 197632 bytes JA2.vcproj | 2 +- Strategic/Strategic Movement.cpp | 11 +++++++++-- Strategic/mapscreen.cpp | 7 +++---- TacticalAI/FindLocations.cpp | 12 ++++++++++++ TileEngine/tiledef.cpp | 15 ++++++++++++++- 7 files changed, 40 insertions(+), 9 deletions(-) diff --git a/GameVersion.cpp b/GameVersion.cpp index 8e8f3dd65..cf198d5bd 100644 --- a/GameVersion.cpp +++ b/GameVersion.cpp @@ -23,7 +23,7 @@ wchar_t zVersionLabel[256] = { L"Beta v. 0.98" }; #else //RELEASE BUILD VERSION - wchar_t zVersionLabel[256] = { L"Release v1.13.861" }; + wchar_t zVersionLabel[256] = { L"Release v1.13.867" }; #endif diff --git a/JA2.suo b/JA2.suo index 94e507bfdca651f317609b658d1d71335ca72ee0..c8dbacc8dd89e5a3a6cf59126b0a2725ac531b4d 100644 GIT binary patch delta 15821 zcmdU$eNa@_6~OO#>>}bWEC`511Qg;YgcZdoh%6vqg0Ox>;}@)e$mb#uMXGjD$5N9) z^pQP{rPh!Mb)u%|BBaE$i$!Cx9Wm8R5^dGk7$<2{ozhI3NledsLQDU!V`h(k6y`1O zi{GAm&bjBFci*|TMxCuu*O8@x5IIZ};&re7P|D5&?}D2U!nWH{ugL_Rf%c!G?OXbh z%^u;hZHz|#ht?1NChOf}G!N*sBgOp;7;4t+|IB&GnYsVqxl5;ar>#b_9-ivJWLZY$rEMdzzTt+3Lk5Z83{v4RduM7gM;eTQuD4xAC=OS{YI z&I0vP0qvF38Cd}=5`}cP0;r~=-Ht-zy;w^&Z`jn?|n(H;4pewlKzuTie`&(--1-8>9*4Ej%y{1k=&>1P(zI(>Mmpwl7pIBG(>!-iIy}9LX*BcJ4@N|UA?uWhA5Sm4ds^NqUw^$V&(K`Q+auDQAJTnrI15@{fVhg zq=@-qt;i)^TFGQZqKq_KL}wnFFHaan6m2mgkE~-AFVKAjbUjaORrOzn2jU?Zof)8$ zH}(aX3SH&Nr~9U{P$J~J=K}2jIvfDdEOfP*y)RQU|8fO_HAjOP?|8rwF4}!AkQo!kz$Cj4(mh6x@cQmr9lQi`w8jf<QY-A`<(uZ6IeJ%`w1vn7PAgr-PiookZ z(8Y@jK#vJ<1PwD8M7(@LT7aR!OdXeK(=dD@Tu8Pt7((^L1^2)UH-!kc`wwn$Fe*(i9E zXYe}q3|!?Qy&cU(x@aU)$4Z8wM1A5j%mF{t#VDT6%M6^&&FthBF*=q+WJ#JDmO?Tv znM<*;iJ^xL&p6D&x@Sp3mej^48RD>M9!bcN!jgpZux&mktt*a?_90&*|G0qF0)q*x zIL|~@T&Rf^7n{V0yT;fLHl&bXEa~`gSJmOpR0^c^i=GI$lVzy=kF54IIK!yU3+c>( z?>%nge3=QI+)S@5=;VttvDs{WWeHs4lPf=mv*KtfT!&IVwD3eHdZlrL(eI)*ur@ZUfE8C-$ck$$V#T#@WWyB$ zYgFIFCKx?0+DkcUII)Zs7hlebTV275tE(hja|FZqO0P!4u+|D)$t?^|?mq3X0(+`R zIF`|xgfn6SNCtd=Gc>a?FSE>2z!u2CuWOi6f0fo`pr*#Y0L@$i{*?uEf1H$u`?m6l zm4nA8P)obaWYl|GIJ~$X($Em5ILbCg=BF&`Q%&o;ozqd4L{n3jOA)WAve+D$Z$_X_k{d@}0x(DUIwhDc0xHH-03F4^?TQfP6xI!YZT za`)0}Y?j&BVO$W}e!w-7g{_g&P&1Ysm}7?5_&Gh=wf~T8%Vdqud7MP4QtNvWE-;P$ z_2hG(y+n`09P{>SU!B^-q%+k=4E54{T)&@;%3+3Kn= zkok3K4#vMiv5pUyb%+(W_Q#C4MYz3{DH5yGVz!@7Uq_QwWjM6A)BryrTN2U9-gbCMu3{gsr_hLcy{jQYRP}vNv4oISv0410+AcbK2 z&q$LTb<9*bbDv9-E3ooI8i?9^nS4f#GEIL_klxghSzUV~w%!^_H(0u}nwx&{2_e&e z&eVKDX5iWmu9gqyLtdEmwd9ATCz%47agfApI`xFaY;|x2wf|~=IQDlwA&EaYO^RhJ zM-1)eq-}bOXdGc<_*JI?TYkYQ;PoD&aSX3&k>Pu9!!LPK;#==fsgnCUXA?>Hp+R_SI()b*0 z)wIa5gcdedqU|bJ@OBRPqirI19-M9)|L7%Kcy3|7(@^c0r7?vhta|H=+He6#g$p Co2RA# delta 4279 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 py+LJNfB%$j>N?`mNHT{lubSectorX, gpBattleGroup->ubSectorY ); } // debug only if ( gfDisplayPotentialRetreatPaths == TRUE ) { - Assert( gfPreBattleInterfaceActive ); +// Assert( gfPreBattleInterfaceActive ); } diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 1f4e13dc1..ff74faf73 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -12322,11 +12322,10 @@ void HandleNewDestConfirmation( INT16 sMapX, INT16 sMapY ) // tell player the route was CONFIRMED // NOTE: We don't this this for the helicopter any more, since it clashes with Skyrider's own confirmation msg MapScreenMessage( FONT_MCOLOR_LTYELLOW, MSG_MAP_UI_POSITION_MIDDLE, pMapPlotStrings[ 1 ] ); + + // wake up anybody who needs to be awake to travel + WakeUpAnySleepingSelectedMercsOnFootOrDriving(); } - - - // wake up anybody who needs to be awake to travel - WakeUpAnySleepingSelectedMercsOnFootOrDriving(); } diff --git a/TacticalAI/FindLocations.cpp b/TacticalAI/FindLocations.cpp index 03d90f9d8..72523422f 100644 --- a/TacticalAI/FindLocations.cpp +++ b/TacticalAI/FindLocations.cpp @@ -554,6 +554,12 @@ INT16 FindBestNearbyCover(SOLDIERTYPE *pSoldier, INT32 morale, INT32 *piPercentB UINT8 ubLightPercentDifference; BOOLEAN fNight; + // There's no cover when boxing! + if (gTacticalStatus.bBoxingState == BOXING) + { + return (NOWHERE); + } + if ( gbWorldSectorZ > 0 ) { fNight = FALSE; @@ -1638,6 +1644,12 @@ INT8 SearchForItems( SOLDIERTYPE * pSoldier, INT8 bReason, UINT16 usItem ) iTempValue = -1; iItemIndex = iBestItemIndex = -1; + // No fair picking up weapons while boxing! + if (gTacticalStatus.bBoxingState == BOXING) + { + return AI_ACTION_NONE; + } + if (pSoldier->bActionPoints < AP_PICKUP_ITEM) { return( AI_ACTION_NONE ); diff --git a/TileEngine/tiledef.cpp b/TileEngine/tiledef.cpp index e18b6e196..95ed3f11e 100644 --- a/TileEngine/tiledef.cpp +++ b/TileEngine/tiledef.cpp @@ -982,6 +982,8 @@ UINT8 GetLandLevelDepth( UINT32 iMapIndex ) BOOLEAN GetSubIndexFromTileIndex( UINT16 usTileIndex, UINT16 *pusSubIndex ) { UINT32 uiType=0; + *pusSubIndex = 0xffff; + if( GetTileType( usTileIndex, &uiType ) ) { *pusSubIndex = usTileIndex - gTileTypeStartIndex[ uiType ] + 1; @@ -995,6 +997,8 @@ BOOLEAN GetTypeSubIndexFromTileIndex( UINT32 uiCheckType, UINT16 usIndex, UINT16 // Tile database is zero-based, Type indecies are 1-based! + *pusSubIndex = 0xffff; + CHECKF ( uiCheckType < NUMBEROFTILETYPES ); *pusSubIndex = usIndex - gTileTypeStartIndex[ uiCheckType ] + 1; @@ -1004,6 +1008,7 @@ BOOLEAN GetTypeSubIndexFromTileIndex( UINT32 uiCheckType, UINT16 usIndex, UINT16 BOOLEAN GetTypeSubIndexFromTileIndexChar( UINT32 uiCheckType, UINT16 usIndex, UINT8 *pubSubIndex ) { + *pubSubIndex = 0xff; // Tile database is zero-based, Type indecies are 1-based! @@ -1018,6 +1023,8 @@ BOOLEAN GetTileIndexFromTypeSubIndex( UINT32 uiCheckType, UINT16 usSubIndex, UIN { // Tile database is zero-based, Type indecies are 1-based! + *pusTileIndex = 0xffff; + CHECKF ( uiCheckType < NUMBEROFTILETYPES ); *pusTileIndex = usSubIndex + gTileTypeStartIndex[ uiCheckType ] - 1; @@ -1045,6 +1052,8 @@ BOOLEAN GetTileType( UINT16 usIndex, UINT32 *puiType ) { TILE_ELEMENT TileElem; + *puiType = 0xffffffff; + CHECKF( usIndex != NO_TILE ); CHECKF( usIndex < NUMBEROFTILES ); //lal bugfix @@ -1060,6 +1069,8 @@ BOOLEAN GetTileFlags( UINT16 usIndex, UINT32 *puiFlags ) { TILE_ELEMENT TileElem; + *puiFlags = 0; + CHECKF( usIndex != NO_TILE ); CHECKF( usIndex < NUMBEROFTILES ); @@ -1195,8 +1206,10 @@ BOOLEAN AnyLowerLand( UINT32 iMapIndex, UINT32 uiSrcType, UINT8 *pubLastLevel ) BOOLEAN GetWallOrientation( UINT16 usIndex, UINT16 *pusWallOrientation ) { - TILE_ELEMENT TileElem; + TILE_ELEMENT TileElem; + *pusWallOrientation = 0xffff; + CHECKF( usIndex != NO_TILE ); CHECKF( usIndex < NUMBEROFTILES ); //lal bugfix