Wziąłem się za ustawienie środkowiska pod libnds (nie będę w końcu pisał całej gry w vimie). Pobrałem CLiona, żeby mieć ze sobą wszystkie najlepsze udogodnienia z Intellij którego używam na codzień do Javy – problem w tym, że CLion nie ma wersji community, jedynie 30 dniowy trial. Trzeba będzie pojanuszować i ściągać ponownie za miesiąc (jakoś nie mam ochoty na wydawanie 200€ na rok).
Wrzuciłem też gotowy projekt na githuba, teraz można śledzić progress:
https://github.com/dbeef/spelunky-ds
Co chcemy osiągnąć:
Screen z intra Spelunky
Na start gry, zdanie po zdaniu, z interwałem ~2.5s, odkrywane są kolejne linie intra. Chcemy napisać klasę, która będzie odpowiedzialna za takie przerywniki.
Za szablon wziąłem sobie plik z przykładów devkitPro/examples/nds/Graphics/Printing/customFont.
To jest miejsce w którym zapoznam się z timerami w libnds. Każda z linii pojawia się co określony odstęp czasu, który trzeba sobie odliczyć. Z tego co znalazłem w docsach i wypróbowałem, za odliczanie czasu odpowiada specjalny układ na płytce DSa, a właściwie jeden z czterech układów, w zależności który wybierzemy.
Start i zatrzymanie układu wygląda następująco:
Wygląda to tak:
- w pierwszym argumencie podajemy który timer używać
- w drugim podajemy jakiego dzielnika używać, czytaj – co jaki czas ma być naliczany ‘tick’ timera
- trzeci – liczba ticków która musi minąć, zanim bufor timera się przepełni
- funkcja która ma być wywołana w momencie, kiedy bufor się przepełni
Przykładowo, napisałem taki kod, który ma za zadanie co około sekundę wypisać na konsolę NDS czas jaki upłynął (wytłumaczenie w komentarzach):
Efekt wygląda tak:
Wracając więc do tego co mamy zrobić, to inicjalizujemy zmienne int trzymające wartości czasu w milisekundach i zdejmujemy z nich upłynięty czas. Jeśli upłynął i nie ustawiliśmy jeszcze flagi ‘narysowano’, to wywołujemy funkcję wypisującą na konsolę i ustawiamy flagę na 1. Robimy tak dla każdej z trzech linii.
Timery dla każdej z linii ustawiłem jako tablicę:
{1000, 3500, 6000}
Z czego można się domyślić, że pierwsza linia wyskoczy po sekundzie, druga po 3.5, trzecia po 6.
Efekt:
Linki: