forum speccy.pl

ZX Spectrum => GRY => Wątek zaczęty przez: Abrimaal w 2012.11.05, 09:53:10

Tytuł: Muzyka do gotowej gry
Wiadomość wysłana przez: Abrimaal w 2012.11.05, 09:53:10
Po długiej przerwie zrobiłem trainer/selektor ULA+ do kolejnej gry. Tym razem to jest Lightforce.
Okazało się, że po dodaniu intro wraz z muzyką pod koniec pamięci pozostaje jeszcze ponad 1kB.
Gra nie wchodzi na muzykę z intro, stąd mój pomysł, czy mógłby ktoś dopisać procedurę grania muzyki w czasie gry?
Ja już pousuwam wszystkie DI i jeśli się uda, to również odwołania do ROM-u.

Kilka szczegółów (bloki):
Loader w Basic,
Muzyka + palety i inne bajery: 57528, 7709
Kod intro: 62536, 1044
Właściwa gra: 24800, 32427
Standardowy screen: 16384, 6912

Gdyby ktoś potrafił (i chciał) dołączyć taką procedurę byłoby super.
Ja się jeszcze w przerwaniach gubię.

Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: LCD w 2012.11.05, 11:38:42
Ja kiedys programik na to zrobilem: http://www.worldofspectrum.org/infoseekid.cgi?id=0022992
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: Abrimaal w 2012.11.06, 01:24:20
Program jest bardzo dobry. Dzięki, choć z grą nie da się nic zrobić.
Nie dopatrzyłem, że tworzy ona własną tabelę przerwań w tym miejscu gdzie jest muzyka w intro, a poniżej 49152 nic nie zmieszczę, aby przełączać banki.
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: Tygrys w 2012.11.06, 10:20:45
Na szybko rzuciłem okiem w to co podesłałeś.

Intro trzeba poprawić bo działa tylko jedną ramkę. Pewnie coś nie tak z czytaniem klawisza, który wychodzi z pętli intra i odpala grę.

Co do muzyki. Gra włącza IM2 a kod obsługi przerwania znajduje się pod adresem 53928. Wystarczy w tamtym miejscu zrobić CALL do swojej procedurki, która będzie robić to co robił zastąpiony przez tegoż CALLa kod, a następnie będzie grać muzykę.
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: Abrimaal w 2012.11.06, 20:46:07
Tygrys, na czym sprawdzałeś? Może masz wciśnięty fire w joysticku albo za długo wciskasz spację (spróbuj inny klawisz)?
U mnie w 5 emulatorach intro startuje prawidłowo.
Zrobiłem to tak, że grę uruchomić można wciśnięciem spacji, 0 lub kempston fire, jeśli to będzie przeszkadzać,
to zmienię na jeden klawisz, np. 0

Jeśli chodzi o przerwania to pomęczę się z tym przy okazji.
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: Tygrys w 2012.11.06, 20:50:29
Bardzo możliwe że miałem coś nie tak z ZX Spinem, teraz już jest OK, więc przepraszam za fałszywy alarm ;)

Zacząłem grzebać w tym co podesłałeś. Niedługo podeślę moje propozycje poprawek.
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: Tygrys w 2012.11.06, 22:38:53
To jednak nie był fałszywy alarm. Popełniłeś znany błąd -- zacząłeś używać kempstona bez wcześniejszego sprawdzania czy jest dostępny.

Zmiany jakie proponuję to:
- wykrywanie kempstona, zanim nastąpi próba jego użycia
- toggle dla opcji 3 i 4, wiąże to się również z podświetlaniem linijki z opcją
- drobne optymalizacje oraz reorganizacja kodu

Muzyki podczas gry jeszcze się nie dotykałem.
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: Abrimaal w 2012.11.07, 00:26:22
Dzięki za poprawki. Zrobienie toggle zawsze było dla mnie diabelską sztuczką.
Ponadto zatrzymałem się z assemblerem gdzieś koło roku 1990 i taka instrukcja jak
_immunity   equ   $+1
jest dla mnie całkowicie niezrozumiała.
Cieszę się, że pomogłeś.
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: Tygrys w 2012.11.07, 10:09:04
_immunity   equ   $+1
to jest zdefiniowanie etykiety, której wartością jest aktualny adres pamięci $  zwiększony o 1.
To zabieg bardziej estetyczny, połączony z wygodą, co może pokazać przykład. Nie muszę pamiętać, o ile mam zwiększyć adres aby poprawnie zmodyfikować kod:

Przykład bez użycia sztuczki:
_immunity:
       ld   a,0
       inc a
       ld (_immunity+1),a

oraz z jej użyciem:
_immunity: equ $+1
       ld   a,0
       inc a
       ld (_immunity),a
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: Abrimaal w 2012.11.07, 23:19:53
Znalazłem przeróbkę na mysz tej gry i chciałem ją dołączyć, ale nic za cholerę mi nie wychodzi (pierwszy załącznik - oryginał).

Najpierw musiałem wyłączyć muzykę (czy tylko ją zatrzymałem i to może być powód?), bo gra doładowuje blok-sterownik 227b na muzykę, zaraz za kodem gry.

Dalej w Basicowym loaderze (nie usuwałem tego, ale przepisałem na asm i stamtąd to startuje, na samym końcu pliku code3) jest kilkanaście POKE, które wpisywane są w różne miejsca gry.
Jeśli ich nie dodaję, to gra startuje, ale chodzi na joystick Kempston, gdy dodam, to się wiesza.
Gdzie popełniam błąd? Nie mam pojęcia, może szybko spojrzysz na to. Jeśli nie da się tego uruchomić, dam sobie spokój.

Jednocześnie odpada też sprawa muzyki w grze, jeśli ma być mysz, jak wspomniałem sterownik jest ładowany na muzykę.

Ostatnie pytanko odnośnie assemblera. Znalazłem w Twoim kodzie coś takiego jak rept 8. Domyślam się, że znaczy to, że ma powtórzyć 8 razy. Tylko co? Ostatnią operację, czy jakiś zdefiniowany wcześniej fragment?
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: matofesi w 2012.11.07, 23:27:53
Tutaj znajdziesz odpowiedź na temat rept: http://pasmo.speccy.org/pasmodoc.html
Tytuł: Odp: Muzyka do gotowej gry
Wiadomość wysłana przez: Tygrys w 2012.11.13, 12:44:17
Abrimaal, zajrzę do tego niedługo, póki co jestem zawalony inną robotą.