1

Hello everybody! ;)

Wpadłem na dość ciekawy pomysł wykorzystania internetu do naszych atarowskich celów ;)
Nie jest to nic odkrywczego i pewnie nie znajdzie się zbyt wielu chętnych, ale z tego co wiem nikt czegoś takiego jeszcze nie zrobił, a myślę, że mogłoby to pomóc wszystkim zapracowanym atarowcom na powrót do korzeni czyli grania w oldschool'owe gry :D

Otóż, pomysł polega na stworzeniu prostego urządzenia pozwalającego grać w gry dla dwóch graczy przez internet! ;)

Urządzenie składałoby się z dwóch (lub czterech) kabli od joysticków, dwóch lub czterech gniazdek do podłączenia joysticków, czarnej puszki i kabelka USB.

Zasada działania podstawowej wersji urządzenia byłaby następująca (dla 2 osób). Każdu z graczy:
- podpina do swojej atarki swój interface IMGL (dwa kabelki),
- podpina swój joystick do gniazdka nr 1 w IMGL'u,
- podpina swój IMGL do PC z internetem i uruchamia specjalny software,
- odpala swoją atarkę, a na niej tą sama grę (np. Spy vs Spy - moja ulubiona gra :) ).

I gotowe - obie osoby mogą ze sobą grać tak, jakby siedziały obok siebie ;)
IMGL dałby unikalną możliwość pogrania z atarowacami z USA, a może nawet z dawnymi twórcami atarowskich gier?... :)

Od strony technicznej urządzenie oprócz przekazywania sygnałów z joysticków miałoby za zadanie synchronizować joysticki obu graczy aby czas reakcji był jednakowy i obaj mieli równe szanse. Można to ustalić na podstawie opóźnienia transmisji pakietów przesyłanych w obie strony.

No i jak sie Wam podoba taki pomysł? Jest sens?.... :)

2 Ostatnio edytowany przez pr0be (2006-01-03 21:01:58)

pomysl moze i ciekawy, ale teoretycznie wiekszosc gier na atari dziala w tepie "1raz na ramke" co oznacza ,ze stan joysticka jest sprawdzany 50razy na sekunde, wiedz ,zeby nie bylo by zadnych opoznien ping pomiedzy dwoma kompami podpietymi do internetu powinien byc <20ms, a raczej malo osob moze sie pochwalic takim dobrym laczem...
synchronizacja polaczenia by w pewnym sensie zalatwila sprawe, ale sterowanie bylo by bardzo "skokowe", pomiejajac nieregularny "ping" i packet lost...
przez co wiekszosc gier stala by sie srednio grywalna wlasnie ze wzgledu na sterowanie...

3

Ale w Hammurabiego można byłoby pograć.

KMK
? HEX$(6670358)

4

W Hammurabiego, w Spy vs Spy i wiele innych ;) Nie twierdzę, że we wszystkie. Poza tym możnaby stworzyć specjalne gry pod taki interface czy nawet zaimplementować coś podobnego w emulatorze Atari800, wowczas moznaby opóźnić obraz no i obyłoby się bez lutowania :))

Wiadomo, wszystko zależy od opóźnień, ale jeśli np. w grze trzeba szybko ruszać joystickiem, to ruchy będą tak samo szybkie jak normlnie ale odrobinke opóźnione. Zresztzą skoro w Doom'a i inne gry sieciowe grają ludzie z całego świata i jakoś to wszystko chodzi to czemu by to nie miało sie sprawdzić z atarowskimi hitami ;)

Jeśli obaj gracze korzystaliby z tego samego providera i mielinp. neostradę to opóźnienia mogłyby być poniżej 20 ms.

Zreszta, póki się nie spróbuje to sie nie dowiemy w się da grać a w co nie ;)
Pomyślcie tylko... a do tego dodatkowa komunikacja przez Skype :)

5 Ostatnio edytowany przez pr0be (2006-01-03 22:48:07)

alex napisał/a:

Wiadomo, wszystko zależy od opóźnień, ale jeśli np. w grze trzeba szybko ruszać joystickiem, to ruchy będą tak samo szybkie jak normlnie ale odrobinke opóźnione. Zresztzą skoro w Doom'a i inne gry sieciowe grają ludzie z całego świata i jakoś to wszystko chodzi to czemu by to nie miało sie sprawdzić z atarowskimi hitami ;)

klopot w tym ,ze w tych grach pobieranie danych od klienta (uzytkownika) nie jest tak rozwiazany jak w grach na atari...
np w Quake wyglada to mniej wiecej tak: jesli gracz wykona jakis ruch nastepuje wysylanie pakietu z ta informacja do servera, teraz server wysyla ta informacje do wszystkich graczy, teraz jak gracz otrzyma informacje ,ze on lub jakis inny gracz/obiekt wykonal ruch wykonuje go (wiedz w tym momecie sa pewne opoznienia), tylko ,ze teraz ten ruch bedzie sie wykonywal przez iles tam nastpenych klatek (poniewaz gracz tam nie przesuwa sie o wsporzedne rzedu -1/+1(tak jak to ma miejsce na atari) a o wartosci zmiennoprzecinkowe tzn. jesli gracz wykona ruch do przodu o vector np. [0.0, 2.0, 0.0] to w zaleznosci od szybkosci poruszania sie gracza (i ilosci klatek na sekunde na danym komputerze) co klatke ten gracz bedzie wykonywac ruch o np. [0.0, 0.2, 0.0] wiedz wykonanie calego ruchu zajmie mu 10klatek i to daje sporo czasu na wyslanie lub odbior nowych pakietow dzieki czemu mimo np. pingu 300 da sie uniknac "zabich skokow"

na atari jak by byl ping 300 to w ciagu sekundy byly by mozna wykonane max 3-4 ruchy gracza... w innych grach typu Quake itp tez ale jak juz wczesniej wspominalem tam te 3-4 ruchy starczyly by aby zajac 1sekunde na ich wykonanie dzieki czemu gracze caly czas by plynnie sie poruszali i nie bylo by zadnych przeskokow, na atari gracz by wykonal tylko 3-4 ruchy na 50 mozliwych (tzn przesunol by sie np. o 3-4pixele chociaz moglby w tym samym czasie przesunac sie o 50pixeli)

chodzi mi o to,ze gry na atari nie byly pisane pod katem gry sieciowej ;)

wezmy prosty przyklad: niech jeden gracz ma caly czas joy'a w prawo, w grze w ktorej poruszamy postacia w prawo i w lewo o 1 pixel. Przy pingu stalym <20ms bedzie wszystko ok postac plynnie bedzie sie poruszac w prawo. Przy pingu ,ktory chodz przez chwile bedzie miec opoznienie >20ms nastapi "zabi skok" poniewaz pakiet nie zdazy dojsc w odpowiednim momecie do Atari i postac jako ,ze interfejs nie otrzymal stanu joysticka pozostanie przez 1/50 sekundy w miejscu
jak cos takiego bedzie wystepowac troche czesciej niz 1 raz na sekunde bedzie to napewno widoczne.
w sumie mozna bylo by to rozwiac tak ,ze jesli interfejs na czas nie otrzymal by odpowiedzi od gracza moglby powtorzyc ostatni komunikat jaki dostal od gracza, dzieki czemu zostal by usuniety problem z "zabimi skokami" i przy pingu <50ms dalo by sie sensownie grac, ale przy pingu wiekszym powielanie ostatniego stanu joysticka dalo by efekt slizgania sie postaci na lodzie...

moze zbytnio teoretycznie i za bardzo sie czepiam ;) ale mysle ,ze problem z obsluga i przesylaniem pakietow powinien byc rozwiazany w pierwszej kolejnosci...

6

Co to znaczy "wiedz"? Tryb rozkazujący od "wiedzieć"? Nie bardzo mi pasuje do kontekstu.

KMK
? HEX$(6670358)

7

IMO "więc" (kierując się kontekstem właśnie)

I Ty zostaniesz big endianem...

8

Istnieje cos takiego jak Kailera (zaimplementowane w Atari800Win [Atari800?]). Jak to dziala tam?

9

Trochę źle mnie zrozumieliście. Żadnych "skoków" nie będzie ;)
Ja wcale nie zamierzałem wysyłać 50 pakietów na sekundę ;) To byłby kompletny bezsens.
Jeśli już miałoby tak być to lepiej byłoby przesyłać dane w formie streamingu (tj. streaming audio lub wideo). Wtedy w ciągu jednej sekundy można przesłać znacznie więcej niż 50 bajtów :) A generalnie chodzi o to, żeby mozliwie najdokładniej odtworzyć stany remote joya.

Pierwotnie myślałem o komunikacji takiej, jak w klawiaturze od PC. Przy każdej zmianie jest generowana komenda czyli jeden gracz rusza joyem w prawo to idzie tylko jeden pakiet - gdy puszcza idzie drugi pakiet. Tym sposobem dokładność ruchów jest zachowana za wyjątkiem drobnego opóźnienia od kilkunastu do kilkuset ms.

Podsumowając mamy dwie metody:
- data streaming, w której przesyłany jest aktualny stan portu Joya,
- blitter style packet, w której przesyłane są tylko zmiany stanów.

Teoretycznie pierwsza metoda mimo, że jest bardziej pasmożerna powinna dać mniejsze opóźnienie, ale póki się tego nie sprawdzi to pewności mieć nie można.

Jeśli ktokolwiek oprócz mnie jest zainteresowany proponowanym przeze mnie rozwiązaniem myślę, że watoby znaleźć ochotnika, który podjąłby się wykonania dwóch propotypów. Przetestuje się wszystkie możliwości i zobaczymy. Na pewno w jakąś grę w ten sposób pograć się da :)

10

druga metoda + komunikacja po udp - to moze nawet miec sens...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

problemem nie jest predkosc laczy, ale opoznienia wprowadzane przez elementy posrednie. Kazdy router, switch czy  hub po drodze wprowadza takie opoznienie.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

12

alex - pomysl kuszacy (bo nie trzeba by przerabiac gierek) ale niestety awykonalny. Ty nie chcesz zrobic podlaczenia Atarki do sieci (chcialo juz wielu) tylko przesylac ruchy joya kazdego gracza do dwoch komputerow na raz, przy czym do jednego przez internet np. w USA? I jesli bedziesz przesylal tylko ruchy joya to te komputery Ci sie ZAWSZE rozsynchronizuja (znaczy w sensie ruchow postaci, a wiec rowniez obrazu na ekranie). Czasami po paru sekundach, czasami po paru minutach ale zawsze. Czyli na moim ekranie moj bialy szpieg bedzie wchodzil w drzwi, a na Twoim ten sam bialy szpieg bedzie walil glowa w sciane, bo drzwi beda obok. I co najgorsze, ja nie bede mial zadnego sposobu, zeby sie o tym dowiedziec!
Jak juz chcesz robic cos takiego to zainteresuj sie czeskim wynalazkiem - polaczenie lokalne Atarek przez porty joyow. Taki rodzaj sieci. Kilka gier toto wykorzystuje. Wez noza, przetnij taki kabelek wstaw z kazdej strony "czarne pudelko" podpiete do internetu i bedziesz mial zdalne polaczenie atarek przez internet. I zadna ze stron nie zauwazy roznicy w grach (oczywiscie napisanych dla tego polaczenia only).
Tyle. Ale fajnie, ze ktos ma jakies nowe pomysly :)

13

Jedynym dobrym pomysłem jest Kaillera, dawno nie sprawdziałem czy w kolejnych buildach PLusa nie zostało coś popsute, ale grać się spokojnie dało. <lans>sam zaproponowałem Harremu, żeby to dodał</lans>

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

14

Komunikacja po UDP jest tym, co powinno być zastosowane w opcji nr 2 IMHO ;)

Jeśli chodzi o problem rozsynchronizowania komputerów to wyjdzie w praniu. Kiedyś było takie demo WFMH gdzie trzeba było puścić muzyczkę z dwóch komputerów, żeby było stereo - o ile pamiętam słuchałem i nagrywałem przez dobre kilkanaście minut i nic się nie rozjechało, jakkolwiek szansa na rozsynchronizowanie komputerów jakaś tam jest. Aby temu zapobiedz możnaby zrobić dodatkowo kabelek do gniazdka cartridge i synchronizować komputery za pomocą Fi2 i HLT tak, żeby żaden z komputerów nie wyjechal z taktowaniem ani o jeden cykl zegara. jednak w niektórych grach (tych niezręcznościowych) rozsynchronizowanie zegarów miałoby wpływ jedynie na muzyczkę. Np. we wspomnianej rpzeze mnie grze Spy vs Spy wszelkie eventy w grze generowane sa przez grających więc rozsynchronizowanie komputerow o sekunde czy dwie nie będzie miało znaczenia.

Co do czeskiego wynalazku to nie słyszałem, nie sprawdzałem ale w wolnym czasie jak znajde to zobaczę.

15 Ostatnio edytowany przez drac030 (2006-01-04 19:19:25)

Alex, nosty ma rację, przemyśl to jeszcze. Tu nie chodzi o rozjechanie się zegarów, tylko właśnie sytuacji w grze, co będzie spowodowane tym, że "ewenty" joysticka będą docierały do obydwu komputerów nierównomiernie: do jednego - lokalnego - natychmiast, do remotnego natomiast - z opóźnieniem powodowanym przesłaniem pakietu przez internet. I odwrotnie, remotny komp będzie dostawał lokalne wydarzenia natychmiast, ale do twojego będą one docierały z opóźnieniem np. pół sekundy.

Efekt będzie taki, że ty go w ryj, i on na twoim ekranie w ryj dostaje, ale na drugim komputerze on jest już w drugim pokoju a ty nie wiadomo gdzie.

PS. demko to była Pierestroyka.

KMK
? HEX$(6670358)

16 Ostatnio edytowany przez alex (2006-01-04 19:35:00)

Takiej sytuacji nie bedzie. Napisałem przecież, że do komputera podłączany jest interface a Joy do interfaceu i zadaniem czarnego pudełka jest opóźnić Joy'a loklanie tak, aby w obu komputerach event nastpąpił równocześnie. Nie jest to łatwe - wiem, ale mam pewien pomysł jak to rozwiązać :) Kluczem jest tutaj dokładna synchronizacja wszystkich urządzeń.

17

Żeby było jasne - ja nie twierdzę, że to się da zrobić. To jest tylko teoretyczny pomysł, ale może ktoś wymyśli sposób, żeby to działało.

18

jesli potrafisz nie tylko teoretycznie zaprojektowac, ale i praktycznie zaimplementowac protokol ktory by zapewnil w lokalnym kompie TAKIE SAMO opoznienie jak w zdalnym (nawet teoretycznie nie wiem jak to zrealizowac) - to ok.

mocno naciagany pomysl...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

19 Ostatnio edytowany przez drac030 (2006-01-04 22:03:45)

Moim zdaniem nie ma siły - pudełko może wysłać pakiet z informacją o zdarzeniu do komputera remotnego, poczekać na potwierdzenie przyjęcia i dopiero wtedy przesłać tę samą informację do kompa lokalnego ALE to też niewiele da, bo pakiet z informacją zwrotną nie nadejdzie natychmiast, lecz droga też zabierze mu nieco czasu.

Jeśli więc pomiędzy wysłaniem pakietu z informacją o zdarzeniu a potwierdzeniem przyjęcia upłyną np. 2 sekundy, to nie znaczy, że komputer zdalny dostał informację po dwóch sekundach, tylko że dostał ją gdzieś w czasie od t+0 do t+2, że tak powiem. Kiedy konkretnie - to jest kompletnie nie do ustalenia.

(EDIT: a może i jest - w pakiecie zdarzenia trzeba byłoby zaznaczyć czas nadania, a w zwrotnym czas przyjęcia; a dalej jak poniżej).

Rozwiązaniem jedynym realnym moim zdaniem jest transmisja synchroniczna, to znaczy pudełka generują określoną liczbę pakietów na sekundę niezależnie od tego co robią gracze. Streaming pakietów, innymi słowy, wtedy opóźnienia transmisji dałoby się łatwo przeliczyć w oparciu o podstawę czasu nazwijmy to, co pomogłoby wyeliminować desynch.

Ale obawiam się, że z tym będzie problem, o którym pisano już powyżej, to znaczy gra typu Spy vs. Spy przestanie być grywalna jeśli na na reakcję na ruch joystickiem trzeba będzie poczekać do paru sekund.

KMK
? HEX$(6670358)

20

A ja Wam mówię, że jest na to sposób :) Jedyny mankament tego rozwiązania to to, że opóźnienie może się dodatkowo zwiększyć o kilka procent względem rzeczywistego no i trzeba się strasznie nakombinować, żeby to wszystko działało jak trzeba.

Draco: dobrze kombinujesz :) dodaj tylko do tego specjalne timery i synchronizację z fi2.

Pytanie tylko czy warto...

21

No to podziel się tym sposobem, bo mi na razie synchronizacja internetu z fi2 wydaje się koncepcją dość egzotyczną.

KMK
? HEX$(6670358)

22 Ostatnio edytowany przez alex (2006-01-05 01:14:23)

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?

23

alex napisał/a:

- odpala swoją atarkę, a na niej tą sama grę (np. Spy vs Spy - moja ulubiona gra :) ).

Pięknie, ślicznie - kolejny projekt którego nie ukończysz z braku czasu, ale nie w tym rzecz. Imho, jeżeli gra nie jest napisana na sieć a będzie odpalona na dwu kompach nie jesteś w stanie zapewnić tego, aby na nich było to samo (wspomniany tu Spy vs Spy, Zybex czy World Karate Championship). Wszak odpalasz dwie kopie, tam gdzie odpalasz startem a nie joyem - dodatkowe różnice czasowe w uruchomieniu gry, plus opóźnienia... Jak zamierzasz to zrealizować?
Co do kwesti opóźniej joya - wbrew pozorom to jest najmniejszy problem, można to zrealizować na kilka sposobów (sposób podany przez Draco jest nawet w miarę obiecujący).
Jest (to znaczy byłoby) to jednak idealne rozwiązanie dla gier logicznych dla wielu graczy (jak Kolony czy Mule), za to o ile pamiętam - w hammurabim posługujemy się klawiaturą chyba, więc już nie? (mogę się mylić, dawno nie grałem). Takich gier jest zresztą więcej (kariera, chessmaster 2000...), więc sam pomysł jako taki byłby niezły, tylko... Czy ktoś go zrealizuje...? Sory, Alex, ale w Twoje wykonanie czegoś do końca nie przemawia do mnie jakoś... ;( Ale, abym się mylił...

Sikor umarł...

24 Ostatnio edytowany przez drac030 (2006-01-05 10:09:43)

W Hammurabim posługujemy się klawiaturą (to tekstówka jest), a co więcej, input uzytkownika - a nie np. VBL - stanowi podstawę czasu. Dlatego jest to gra, która najbardziej nadawałaby się do grania przez internet.

Nawet kiedyś chciałem zrobić serwer Hammurabiego, który pozwalałby pewnej ilości użytkowników grać jednocześnie - ale tu na chceniu się skończyło.

KMK
? HEX$(6670358)

25

Sikor: mylisz się - gra może zachowywać się na dwóch komputerach tak samo pod warunkiem, że uruchomisz je jednocześnie i że nie ma zdarzeń losowych. W tym przypadku uruchamianie gry z klawiatury może ale nie musi stanowić problemu. Jakkolwiek gdyby odpalić oba komputery idealnie jednocześnie to liczby losowe (a właściwie pseudolosowe) byłyby na obu identyczne - wiem bo sprawdzałem.
Opóźnienia joysticka będą w zależności od jakości sieci, jednak tak jak napisałem wczoraj największy problem to synchronizacja obu interfaceów.
Czy ktoś to zrealizuje? Nie wiem :) Przedstawiłem tutaj pomysł - zapytałem publicznie czy ktoś jest zainteresowany, czy warto. Jak na razie nikt sie nie zgłosił. Ja nie obiecałem nikimu, że ten projekt będę realizował, także nie ma co do Ciebie przemawiać ;)