atarionline.pl Montezuma - chodzenie/skakanie/odgłosy kroków? - 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:
       
      CommentAuthorMaW
    • CommentTime11 Jun 2023
     
    Hej, cienki jestem w te rzeczy, stąd moja prośba:

    Czy ktoś byłby w stanie wyciągnąć z Monti procedurę skoków/chodzenia/realizacji dźwięku szurania?

    Najbardziej chodzi mi o to, jaki był przesuw px/py na 1 vblk oraz jak realizowane było te "tzss tzss" przy chodzeniu...

    Z góry dzięki!
    • 2: CommentAuthormarok
    • CommentTime11 Jun 2023
     
    Nie mam dostępu do tego narzędzia, ale znakomicie by pomogło wsparcie się "RetroDebuggerem" w poszukiwaniach odpowiedzi.

    "jaki był przesuw px/py na 1 vblk"

    chodzi o skok?
    (chodzenie jest z dokładnością do jednego pixla)

    jak to oceniam (na oko, choć starałem się to policzyć), to w "Preliminatory Monty" skok jest na 24 pixele długi, na 16 wysoki (wysoki zawsze na tyle samo, niezależnie czy skok w górę czy w górę-bok)
    biorąc pod uwagę kształt pixla tr. graf. to dla "skoku w bok" mamy proporcję 1 do 3 (16 do 48) jeśli chodzi o osiągane maksima na długościach obu osi (tak jakby proporcjonalne x / y brać pod uwagę) (chodzi mi tu o wrażenie optyczne bardziej niż o szacunek liczby przemierzanych pixli w skoku, który byłby w takiej sytuacji jak 1 do 1,5 - czyli w pixlach)

    skok może mieć charakterystykę wznoszenia i opadania po przeciwprostokątnej trójkąta prostego (90 stopni kąt - ale tylko "wizualnie") z chwilą utrzymania się na maksimum wysokości przez środkowy odcinek skoku

    przy czym ruch w pionie może być (czy jest?) na 2 pixle /vblk przy 1/vblk w poziomie (taka mała zgadywanka)
    (to by dawało 24-16=8 czasu pixli/vblks na maksimum wysokości, czyli na 1/3 odcinku)


    udźwiękowienie skoku chyba dokładnie opisuje tą sytuację - chwila przerwy między wyodrębnionymi dźwiękiem wznoszenia a opadania to ten moment kiedy bohater przez chwilę "lewituje" w powietrzu (osiąga maksimum wysokości ze skoku i przez moment na nim się utrzymuje)

    więc ode mnie nic konkretnego tutaj (choć wyszło, że starałem się coś już prawdopodobnego ustalić, z samej obserwacji)
    • 3:
       
      CommentAuthorMaW
    • CommentTime11 Jun 2023 zmieniony
     
    No właśnie też próbowałem to odczytywać z obserwacji zrzutów klatek na ekranie (Altirra, 10% procesora -> nagrywanie), przy skoku "średnia" wychodziła mi... 3px. Z tym, że nie jest to liniowy przyrost (albo ja mam tylko takie wrażenie) - próbuję odtworzyć coś takiego w MadPascalu, niestety - średnio wychodzi (a już ten lot, jak Pedro nie trafi w nic po drodze podczas skoku, to marzenie!).

    //EDIT: Tam są dwa dźwięki - na moje ucho przy skoku jest ~proporcjonalny~ do różnicy wysokości aktualnej pozycji Pedra, a pozycji wyjściowej; drugi przy chodzeniu - jaka tam wartość jest liczbowo wysyłana do POKEYa, co ile klatek?
    • 4:
       
      CommentAuthorpirx
    • CommentTime11 Jun 2023
     
    zgraj sobie altirrą sap type r to zobaczysz dokladnie
    • 5:
       
      CommentAuthorMaW
    • CommentTime12 Jun 2023
     
    Przypomnę sie...

    "Zgrywanie" już przerabiałem. Pytanie było o wyciągnięcie procedury maszynowej z kodu.
    • 6:
       
      CommentAuthorKaz
    • CommentTime13 Jun 2023
     
    Najlepiej chyba poprosić konkretnego kodera, jeżeli takiego znasz, o pomoc. Bo odezwy ogólne rzadko działają :)
    • 7: CommentAuthormarok
    • CommentTime13 Jun 2023
     
    Dobra wiadomość. Odtwarzany kod źródłowy gry "Montezuma's Revenge" jest już w sieci (forum AtariAge).

    ->link<-
    • 8:
       
      CommentAuthorMaW
    • CommentTime13 Jun 2023
     
    O, to jest super wiadomość!

    @Kaz, to właśnie zawsze była siła tego forum, że w rzeczach, w których nie dawało się rady, można było pisać o pomoc, nie susząc głowy jednego biednego (przysłowiowo) kodera.
    • 9:
       
      CommentAuthorjhusak
    • CommentTime13 Jun 2023
     
    A ten kod to chyba na A2600 :) Ale i tak zacnie wygląda, przy takich skromnych możliwościach...
    • 10: CommentAuthormarok
    • CommentTime13 Jun 2023
     
    Tak, to jest kod do wersji gry na A2600 (w pierwszej chwili nie zwróciłem na to nawet uwagi).

    Po szybkich oględzinach i próbie odszukania konkretnego fragmentu kodu w wersji na xl wyszło jednak, że to mocno różniące się wersje.

    Natomiast o tyle się źródło przydało do odszukania kodu odpowiedzialnego za zmiany w pionie postaci (na xl), że poszukałem po patternie danych, które są względnie tożsame, a w źródle są przypisane do tych zmian.

    Fragment ze źródła:
    LB1FE	LDX	Z00D6
    LDA Z00AB ; get P0 vertical position
    CLC
    ADC DFE47,X
    STA Z00AB ; update P0 vertical position
    DEC Z00D6
    BMI LB21F
    LDX Z00D7
    BEQ LB259
    DEX
    BNE LB228
    LDA Z00D6
    CMP #$03
    BNE LB259

    DFE47	.byte	$FD,$FD,$FD,$FE,$FE,$FE,$FF,$FF
    .byte $00,$00,$00,$00,$01,$01,$02,$02
    .byte $02,$03,$03,$03


    W "Preliminary Monty"
    B121: FC FC FD FD FE FE FF 00 00 00 00 00 00 00 01 01
    B131: 02 02 02 02 02 02 02

    B0F6: B9 21 B1 LDA $B121,Y
    B0F9: C9 01 CMP #$01
    B0FB: D0 02 BNE $B0FF
    B0FD: E6 90 INC $90 ;MEMTOP
    B0FF: 20 0A B3 JSR $B30A
    B102: 60 RTS
    B103: 20 14 B1 JSR $B114
    B106: C0 16 CPY #$16
    B108: D0 04 BNE $B10E
    B10A: A9 04 LDA #$04
    B10C: 85 90 STA $90 ;MEMTOP
    B10E: 20 43 B3 JSR $B343
    B111: B0 D6 BCS $B0E9
    B113: 60 RTS
    B114: A4 8E LDY $8E ;RUNSTK
    B116: A5 99 LDA $99 ;MVFA
    B118: 18 CLC
    B119: 79 21 B1 ADC $B121,Y
    B11C: 85 99 STA $99 ;MVFA
    B11E: E6 8E INC $8E ;RUNSTK
    B120: 60 RTS


    W "Montezuma's Revenge"
    2DFF: FC FC FD FD FE FE FF 00 00 00 00 00 00 00 01 01
    2E0F: 02 02 02 02 02 02 02 03

    2DA9: A5 D3 LDA $D3 ;VNUM
    2DAB: D0 04 BNE $2DB1
    2DAD: A0 01 LDY #$01
    2DAF: 84 99 STY $99 ;MVFA
    2DB1: C9 10 CMP #$10
    2DB3: 90 0E BCC $2DC3
    2DB5: 20 A3 30 JSR $30A3
    2DB8: 20 7B 30 JSR $307B
    2DBB: F0 06 BEQ $2DC3
    2DBD: A5 CB LDA $CB
    2DBF: 29 06 AND #$06
    2DC1: F0 31 BEQ $2DF4
    2DC3: A4 D3 LDY $D3 ;VNUM
    2DC5: B9 FF 2D LDA $2DFF,Y
    2DC8: 18 CLC
    2DC9: 65 CB ADC $CB
    2DCB: 85 CB STA $CB

    307B: A0 00 LDY #$00
    307D: A9 02 LDA #$02
    307F: 85 DE STA $DE ;FRE+4
    3081: B1 D0 LDA ($D0),Y
    3083: F0 16 BEQ $309B
    3085: 29 7F AND #$7F
    3087: C9 11 CMP #$11
    3089: B0 10 BCS $309B
    308B: C9 10 CMP #$10
    308D: D0 09 BNE $3098
    308F: A5 14 LDA $14 ;RTCLOK+2
    3091: 18 CLC
    3092: 69 01 ADC #$01
    3094: 29 70 AND #$70
    3096: F0 03 BEQ $309B
    3098: A9 01 LDA #$01
    309A: 60 RTS
    309B: C8 INY
    309C: C4 DE CPY $DE ;FRE+4
    309E: D0 E1 BNE $3081
    30A0: A9 00 LDA #$00
    30A2: 60 RTS



    Skupiłbym się generalnie na wersji z Montezumy, bo jest rozwinięciem Preliminary.

    Z tego co można wnosić, skok jest na 19 punktów wzwyż (wartości $Fx to są wartości ujemne do przyrostu na osi Y), osiąganym w 7 ramce po oddaniu skoku. Po 24 ramce po skoku wracamy do tego samego poziomu w Montezuma (jeśli ruch w pionie jest niezakłócony i kładka lądowania jest na poziomie tej z oddawania skoku) lub może po 25 w Preliminary (jeśli dobrze zgaduję). Faza "lewitacji" trwa 7 ramek (to są te zera w definicji).
    • 11:
       
      CommentAuthorMaW
    • CommentTime13 Jun 2023 zmieniony
     
    Super, dziękuję pięknie!