Generalnie chodzi o zliczanie cykli i nie musi to być koniecznie fi2, ale skoro jest to można wykorzystać - jest w końcu bardzo stabilne i nim oba komputer syę rozsynchronizują minie duuużo czasu ;)
Załóżmy, że są dwaj gracze A i B. Obaj mają odpowiedni zestaw (komputer, interface, joystick, etc.). Po podłączeniu i uruchomieniu wszystkiego oba zestawy obliczają średnie i najgorsze czasy opóźnień między sobą. Aby te dane były na tyle zadowalające, aby można było grać zakładam, że obliczanie trwa 40 minut. Oba zestawy synchronizują swoje liczniki (chodzi o liczniki w IMGL'ach) czyli ustawiają je na zero :)
- Gracz A wciska fire.
- A wysyła informację do B, jednak nie przekazuje tej informacji do komputera tylko czeka.
- B otrzymuje informację, bierze wartość najgorszego opóźnienia (z B do A), przelicza je na cykle, dodaje do aktualnego stanu licznika i wysyła do A potwierdzenie z wyliczoną wartością, po czym zaczyna liczyć.
- A otrzymuje potwierdzenie najprawdopodobniej szybciej niz wynosi najgorsze opóźnienie (albo równo z nim) i czeka, aż jego licznik będzie równy odebranej wartości, po czym zapodaje fire do komputera :)
- Dokładnie w tym samym czasie B również dolicza się tego samego stanu i również zapodaje fire do swojego komputera.
Tak po krótce wyglądałaby komunikacja. Oczywiście przelanie tego na software i hardware nie jest takie proste i wybmaga dużo żmudnej roboty i pomiarów, ale to co opisałem jest realne mimo, iz oparte na statystyce i prawdopodobieństwie, bo w końcu nastąpi ten moment, że opóźnienie maksymalne zostanie przekroczone i komenda przyjdzie po czasie :(
Największym problemem w tym całym zaganieniu jest porornie banalna rzecz, a mianowicie początkowe wyzerowanie liczników. Żeby to wszystko, co napisałem, działało oba liczniki muszą być w miarę dobrze zsynchronizowane, żeby ewentualny poślizg o kilka cykli nie był większy niż powiedzmy 1/10 ramki (gra przecież może sprawdzać joya nawet 3 razy na ramkę).
De facto mamy tutaj znany problem synchronizacji czasu w sieciach teletransmisyjnych i możnaby pokusić się o wykorzystanie znanych sposobów. Dość ciekawą opcją byłoby wykorzystanie sygnału GPS. Moznaby też pokusić się o skonstruowanie liczników w formie dołączanych modułów, zsynchronizować je przy produkcji i po prostu fizycznie wysłać pocztą. Wtedy (zakładając, że bateria pozwoli im działać przez kilka miesięcy) mamy dwa idealnie zsynchronizowane liczniki - przynajmniej na jakiś czas :) Podobny sposób wykorzystuje się bodajże w tokenach bankowych.
Także reasumując - zostawmy na razie problem realizacji IMGL'a i sprawdźmy czy możliwe jest posiadanie dwóch identycznych liczników, które będą ze sobą porządnie zsynchronizowane?