Witam wszystkich
Chciałem sobie dla własnych potrzeb zmodyfikować plik EXE z modyfikacji do gry Jagged Alliance 2. Cały kod źródłowy do JA2 jest od dawna dostępny w wersji Freeware i w nim wszystkie zmiany bez problemu wykonuje, a później wszystko kompiluje i gra działa bez żadnych problemów. Problem zaczyna się gdy chce się dostosować plik EXE z modyfikacji do tej gry. Z reguły moderzy udostępniają samą modyfikację do JA2, a o kodzie źródłowym już niestety zapominają, dlatego czasami trzeba się posłużyć HEX Editorem.
Chciałbym za pomocą HEX Edytora zmienić w pliku EXE tylko dwie rzeczy, które tak naprawdę są tylko dwoma cyframi i do Was kieruję pytanie czy jest to możliwe.
Tak to wygląda w kodzie źródłowym: to jest w pliku “ja2 / build / tactical / weapons.c” w linijce 2644 (Notepad ++)
if ( Item[usInHand].usItemClass == IC_GUN )
{
bAttachPos = FindAttachment( pInHand, GUN_BARREL_EXTENDER );
if ( bAttachPos != ITEM_NOT_FOUND )
{
// reduce status and see if it falls off
pInHand->bAttachStatus[bAttachPos] -= (INT8) Random( 2 );
if ( pInHand->bAttachStatus[bAttachPos] - Random( 35 ) - Random( 35 ) < USABLE )
{
// barrel extender falls off!
OBJECTTYPE Temp;
// since barrel extenders are not removable we cannot call RemoveAttachment here
// and must create the item by hand
CreateItem( GUN_BARREL_EXTENDER, pInHand->bAttachStatus[bAttachPos], &Temp );
pInHand->usAttachItem[bAttachPos] = NOTHING;
pInHand->bAttachStatus[bAttachPos] = 0;
// drop it to ground
AddItemToPool( pSoldier->sGridNo, &Temp, 1, pSoldier->bLevel, 0, -1 );
// big penalty to hit
iChance -= 30;
// curse!
if ( pSoldier->bTeam == OUR_TEAM )
{
DoMercBattleSound( pSoldier, BATTLE_SOUND_CURSE1 );
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, gzLateLocalizedString[46], pSoldier->name );
}
}
}
iMaxRange = GunRange( pInHand );
}
else
{
iMaxRange = CELL_X_SIZE; // one tile
}
Bardzo mi zależy aby zamiast po “Random” nie było 2 tylko 1
// reduce status and see if it falls off
pInHand->bAttachStatus[bAttachPos] -= (INT8) Random( 2 );
oraz aby po “iChance” nie było 30 tylko 1
// big penalty to hit
iChance -= 30;
Niestety akurat do tej modyfikacji (na której mi najbardziej zależy) autor zapomniał udostępnić kod dlatego pozostaje mi tylko HEX. Sprawa się tyczy przedłużki do lufy, która w domyślnym ustawieniu jest do niczego, a wystarczy tylko zmienić te dwie cyfry i staje się ona bardzo pożyteczna. Hex nie jest moją mocną stroną, dlatego z góry dziękuje za jakiekolwiek informacje.
Jeśli ktoś by chciał spróbować, to tu jest cały kod źródłowy razem z plikiem EXE, który chcę zmienić. Obydwa pliki są na licencji Freeware z pozwoleniem na dowolne zmiany.