Kiedyś myślałem nad czymś podobnym, czyli nad pojedynkiem w ramach społeczności 4programmers. Jednak nie chodziło tutaj o game jam, czyli o robienie prostych gierek w krótkim czasie, a o stworzenie jednej gry, do której każdy mógłby podłączyć swój plugin i grać za pomocą napisanego przez siebie AI.
Weźmy dla przykładu taką grę jak Micro Machines na SNES — prosta gierka, prosty gameplay. Tworzy się podobną grę, implementuje mapę, pojazdy, system fizyki, liczenia okrążeń itd. Ale zamiast dodawać opcję sterowania za pomocą urządzeń wejścia, tworzy się interfejs obsługujący logikę sterowania z poziomu biblioteki DLL. Jeśli ktoś chce się przyłączyć do zabawy, to tworzy własną bibliotekę i implementuje zestaw funkcji do sterowania pojazdem (swoje AI). Te funkcje są wywoływane po stronie gry w każdej klatce, gra przekazuje im informacje na temat pojazdu oraz wycinka mapy — niewielkiego, tylko najbliższe otoczenie pojazdu. Mowa tutaj o kształcie terenu, znacznikach określających w którą stronę pojazd ma jechać, pobliskich pojazdach innych graczy (i ich parametrów, takich jak wektor ruchu oraz prędkość) itd.
Czyli w skrócie — gra jest jedna, każdy może sobie pobrać exe. Zadaniem gracza (czyli programisty) jest napisać bibliotekę-plugin, która implementowała by AI pojazdu i umożliwiała jak najlepsze śmiganie po dowolnej trasie, zważając na kształt terenu oraz na przeciwników. Każdy gracz tworzy swoją bibliotekę i rywalizuje z innymi graczami. Cały czas ma do dyspozycji grę, więc może sprawdzać efekty działania swojego AI. Trasy mogą być tworzone za pomocą jakiegoś prostego edytora, w znanym i prostym formacie, tak aby pisanie AI było w miarę proste (czyli aby każdy mógł spróbować swoich sił, bez względu na swój skill).
Co do właściwej gry — np. raz na tydzień (w weekend) każdy z graczy przysyłałby do użytkownika-hosta swoją bibliotekę i ten użytkownik odpalałby właściwy wyścig. Gra korzystałaby ze swojego silnika oraz z bibliotek DLL graczy do przeprowadzenia symulacji na żywo. Całość byłaby nagrywana np. za pomocą OBS i streamowana do sieci (YouTube, Twitch itp.), aby każdy gracz mógł podziwiać swój kod w akcji.
Zadaniem operatora gry (ligii) byłoby nie tylko odpalanie relacji na żywo i tworzenie/publikowanie powtórki wyścigu, ale także tworzenie tras dla każdego wyścigu. Chodzi o to, aby gracze nie wiedzieli jak będzie wyglądać trasa, a więc aby nie pisali kodu specjalnie dla niej. Kod graczy powinien być uniwersalny, dla dowolnej trasy.
DLL są uniwersalne, można je tworzyć w dowolnym jezyku, więc każdy kto używa technologii, w której można te biblioteki tworzyć, mógłby wziąć udział w zabawie. Jednak tutaj problemem może być bezpieczeństwo (w końcu do DLL można wsadzić dowolny kod, w tym szkodliwy), wiec zamiast bibliotek można by wykorzystać system skryptów — np. Lua, bo to prosty, przyjemny i funkcjonalny język. Chodzi o to, aby gracz nie mógł zaszkodzić ani silnikowi, ani nie miał możliwości narobić szkód w systemie użytkownika-operatora. Dlatego skrypty byłyby lepsze niż DLL, ale implementacja ich interpretera w silniku wymagałyby dużo więcej pracy.
Aby stream wyglądał ciekawie, trzeba by napisać grę w taki sposób, aby pozwalała operatorowi przykuć kamerę do dowolnego gracza lub do dowolnego miejsca na trasie — jak np. w relacji F1, w której chwilę pokazuje się czołówkę, potem np. jakiś konkretny zakręt, potem pojedynek na dalszych miejscach w stawce itd. Czyli aby relacja wyglądała ciekawie. Silnik mógłby sam automatycznie co jakiś czas pokazywać różne miejsca trasy i miejsca w stawce, tak aby relacja była ciekawa i dobrze się ją oglądało (plus komentarz ze strony operatora).
Silnik powinien też zapisywać przebieg wyścigu do pliku, tak aby każdy mógł sobie go pobrać już po relacji i odtworzyć wyścig u siebie, w silniku gry. W ten sposób można by było sprawdzać jak wypadło własne AI (oraz innych graczy), co AI zrobiło słabo lub źle, szukać słabych punktów i poprawiać swój kod. Powtórka powinna dać się dowolnie przewijać, zatrzymywać itd., czyli aby można było szybko i wygodnie sprawdzać jak wypadło AI w wyścigu.
Coś takiego byłoby świetną zabawą, nie wymagającą zbyt wiele pracy. Głowną zaletą byłoby to, że to nie gracze grają, a ich kod — czegoś takiego jeszcze nie widziałem. Klon Micro Machines to tylko przykład, bo tam niewiele jest do roboty — tylko się porusza pojazdem po trasach, uważając na innych graczy.
Urozmaiceniem dla koderów mogła by być mechanika gry nieco bardziej skomplikowana, np. coś jak stary dobry Re-Volt — nie tylko jeżdżenie po fikuśnych trasach, ale też łapanie ”błyskawic” i używanie broni. Znów w formie prostej gry 2D w pixelarcie, z widokiem od góry. Tyle że gracz miałby szersze pole manewru i nieco więcej kodu do naklepania, a więc nieco więcej zabawy, pomysłów, algorytmów, strategii itd.
Wypierdzistyy