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 14:06
       
      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 16:06
       
      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 17:06 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 17:06
       
      zgraj sobie altirrą sap type r to zobaczysz dokladnie
      • 5:
         
        CommentAuthorMaW
      • CommentTime12 Jun 2023 23:06
       
      Przypomnę sie...

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

      ->link<-
      • 8:
         
        CommentAuthorMaW
      • CommentTime13 Jun 2023 12:06
       
      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 12:06
       
      A ten kod to chyba na A2600 :) Ale i tak zacnie wygląda, przy takich skromnych możliwościach...
      • 10: CommentAuthormarok
      • CommentTime13 Jun 2023 14:06
       
      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 14:06 zmieniony
       
      Super, dziękuję pięknie!