atarionline.pl Zmiana wartości komórek w pliku xex (lub innym). - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1:
         
        CommentAuthorstring
      • CommentTime30 Dec 2020 19:12 zmieniony
       
      Czy jest jakiś prosty sposób (dla laików) na podmianę komórek pamięci w plikach xex, atr itd? Chodzi np. o zmianę ilości żyć, koloru postaci itp. i zapisanie takiego zmienionego pliku.
      Kombinuję w Altirra (opcja cheat) i udało mi się np. zmienić brzydkie zielone kolory postaci w grze Incydent, ale nie ma opcji zapisania takiego xex'a.
      • 2:
         
        CommentAuthorpirx
      • CommentTime30 Dec 2020 20:12
       
      to nie takie trywialne, bo xexy albo dane na atr'ach mogą się dekompresować, być przenoszone, itp.
      ale jak masz prosty plik bez żadnego kombinowania to możesz w hexedytorze jakimś odnaleźć odp. sekwencję i podmienić.
      • 3: CommentAuthorAdam
      • CommentTime30 Dec 2020 22:12
       
      Tak jak napisał Pirx, to może być nietrywialne, ale dla standardowych przypadków może lepiej niż zwykłego hex editora użyć jakiegoś pecetowego narzędzia do kodu 6502 z wbudowanym edytorem heksadecymalnym, np. Omnivore: ->link<-
      • 4:
         
        CommentAuthorjhusak
      • CommentTime30 Dec 2020 22:12 zmieniony
       
      Chyba najprostszy sposób na podmiankę xex to doklejenie jeszcze jednego bloku z podmienianymi bajtami. Jeśli wiesz, że pod adresem $2345 musisz podmienić $3 na $30, to dolepiasz na końcu pliku xex bajty:
      45,23,45,23,30

      A robi się to pod linuxem/osx tak:
      echo 4523452330 | xxd -r -ps >>gra.xex

      Wówczas RUN wykona się po wszystkim, inity tam, gdzie są, więc w skompresowanych xexach też powinno działać.

      Druga metoda - jest na Win/OSX taki xex edytor OMNIVORE, który wczytuje oddzielnie poszczególne bloki i pozwala na ich edycję.

      ->link<-

      Z ATR jest gorzej/lepiej, trzeba w atr szukać sekwencji pamięci znalezionej w emulatorze i ją podmienić jakimś hexeditorem.
      Jeśli atr jest dosowy, do może się zdarzyć, że taka sekwencja wystąpi na granicy sektorów. Wówczas należy wyekstrachować pliki, znaleźć w nich sekwencję, zapisać i podmienić zmieniony plik na oryginalnym ATR. Z tym "lepiej" jest tak: atr-y nie są kompresowane.

      O, Adam, uprzedziłeś mnie z tym Omnivore :)
      • 5:
         
        CommentAuthorstring
      • CommentTime30 Dec 2020 22:12
       
      Ok, dzięki za sugestie, spróbuję się pobawić.
      • 6:
         
        CommentAuthorstring
      • CommentTime31 Dec 2020 12:12
       
      Coś nie idzie mi z tym OMNIVORE. W altirze podmieniam w komórce $02C0-$02C3 wartości kolorów sprite i działa, ale już w pliku xex tej samej gry (w oknie deasemblacji) nie mogę znaleźć odwołań do tychże komórek. Jak to ew. odnaleźć? Sprawdzałem też obecność $D012-$D015, ale bez powodzenia.
      • 7: CommentAuthorbob_er
      • CommentTime31 Dec 2020 14:12
       
      Najlepiej by było jakąś pułapkę zastawić na zapis do tych komórek. Wtedy Altira do Ci cynk kto tam kombinuje.
      Bo sam zapis nie musi być robiony przez 'STA $02c0' (najłatwiejszy do znalezienia), może być zrobiony przez 'STA $02bf,x' - i tutaj będzie trochę trudniej. A może być też kod samomodyfikujący - i wtedy to już całkiem niebanalne, bo na etapie szukania takiego rozkazu faktycznie może go jeszcze nie być.
      • 8:
         
        CommentAuthorshanti77
      • CommentTime31 Dec 2020 16:12 zmieniony
       
      W oknie "history" (trzeba włączyć przy CPU "Record instruction history") wpisujesz w "search" adres szesnastkowo i altirra znajdzie ci odwołania do niego w kilku ostatnich ramkach.
      Można też dodać pułapkę:

      ba w $2c0 L4

      Powinno zadziałać przy próbie zapisu do komórek $2c0-$2c3