[RElog] – Oel (Pompowacze) port z C64 (część 1)

Wstęp


Hej, witam Was w kolejnym RElog’u. Tym razem razem postanowiłem zabrać się za coś co miałem zamiar zrobić jeszcze rok temu, a mianowicie postanowiłem się podjąć portem gry [Oel] z [Commodore64] na coś nowszego zgodnie z tym co zaproponował arhon w swoim [odcinku] o tej grze.

Dla niewtajemniczonych: Oel jest grą od niemieckiego studia, wydaną w latach 80 na platformę Commodore64, a sama gra została napisana w [BASIC’u] (będzie to istotna informacja w dalszej części wpisu). Sama gra polega na stworenie imperium naftowego.

Autor podanego wyżej filmu zasugerował stworzenie portu na „nowoczesne” platformy, co wydaje mi się nieprzesadnie skomplikowanym zadaniem, ale jednocześnie wciąż ciekawym.

 

Port gry


Jak to będzie wyglądać?

Samego portu gry nie pokażę Wam w jednym wpisie z prostej przyczyny: nie jest gotowy, jednakże chciałbym się z Wami dzielić tym co udało mi się osiągnąć, a gdy nowości będzie nieco więcej (tzn po osiągnięciu każdego milestone’a) to utworzę nowy wpis.

Postęp prac nad portem można będzie śledzić na moim GitHubie: /sheadovas/oel-port

 

Część 1 – przygotowanie

Jak to w każdym projekcie warto na początku odpowiednio się przygotować. Pierwszym krokiem to oczywiście zaznajomienie się z tym co chcemy portować, a więc warto zaopatrzyć się w [obraz gry] oraz jakiś emulator (np. [VICE]).

Dalszym krokiem jest wstępny głębszy research: jak wspomniałem gra powstała w BASIC’u, co jest o tyle ważne że dostępne są jej [źródła].

Skoro mamy źródła, a nie mieliśmy wcześniej do czynienia z tym językiem to warto zaopatrzyć się w jakiś [instruction set], aby móc względnie komfortowo dokonywać translacji na bardziej nowoczesny język.

Powyższy listing skojarzył mi się pierwotnie z kodem assemblera i z góry założyłem że gosub to nic innego jak wywołanie funkcji, z kolei dalszy fragment to etykieta miejsca gdzie znajduje się funkcja lub jak w tym przypadku oznacza miejsce pod określonym adresem / offsetem. Skojarzenie okazało się trafne i zgodne z tym co mówi dokumentacja.

Dalszy fragment przypomina tradycyjną pętlę for, dla lepszej czytelności zmodyfikujmy ją nieco:

Co mniej więcej oznacza tyle: „wykonaj 6 razy funkcję print”, zauważamy też że print nie jest zwyczajny („format” string), a jego finalny efekt to wykonanie komendy „cursor down”. O specjalnych komendach możemy przeczytać [tutaj].

Po takim wstępnym rozpoznaniu jesteśmy w stanie stwierdzić, że składnia jest dość łatwa, ale może mieć kilka niuansów, które warto będzie rozpatrzyć w przyszłości.

Po takim rozpoznaniu języka, warto ustalić sobie kilka „kamieni milowych”, które wyznaczą także tematykę dalszych wpisów:

  1. PoC, kod „1:1” w C++ i SFML.
  2. Dodatkowe optymalizacje, modyfikacje pod nowoczesny styl programowania.

Jak można zauważyć, wybrałem C++ i SFML. Powód jest dość prosty: dzisiaj do programowania gier korzysta się z odpowiednich narzędzi, SFML już jest overkill’em dla takiej gry, ale je znam dość dobrze i pisze mi się w nim komfortowo więc świetnie się nadaje do kodu w stylu Working Demo.

 

Podsumowanie


To tyle jeżeli chodzi o pierwszą część „dziennika” dotyczącego portu tej gry, w dalszych częściach przedstawię znacznie ciekawsze rzeczy. Zapraszam także na git’a projektu oraz do dzielenia się swoimi przemyśleniami np. poprzez system komentarzy.

Code ON!