atarionline.pl Kod źródłowy Agent USA - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthorforsberg
      • CommentTime2 Mar 2017 13:03
       
      Czy wie ktoś, czy można gdzieś zdobyć kod źródłowy do gry Agent USA? Konkretnie chciałbym podejrzeć w jaki sposób na Atari rozwiązali kwestię wyboru miast z każdego miasta - w końcu w Stanach (i grze) trochę ich jest. Podejrzewam, że zrobili to w dość naiwny sposób (każde miasto ma przyporządkowaną liczbę indeksową, i ręcznie wprowadzali szereg indeksów dla każdego z miast skąd dokąd można jechać), ale może odpowiada za to jakiś algorytm?

      A może kody źródłowe do innych gier są też dostępne?
      • 2: CommentAuthorastrofor
      • CommentTime27 Sep 2024 13:33
       
      wczoraj na kanale Borsuka, goście (Mq) , grali w swe ulubione gry, czyli oczywiście między innymi w agent usa, i Mq opowiadając o zasadach gry powiedział że kiedy agent ma 100 diamentów to oczywiście może rozbroić bombę, ale też że bomba wtedy przestaje zarażać, co mnie bardzo zdziwiło, z ciekawości przejrzałem dostępne instrukcję gry, i nigdzie tej zasady nie znalazłem, czy ktoś jeszcze słyszał że bomba kiedy agent posiada 100 kryształków przestaje zarażać, czy to miejski mit ?
      • 3: CommentAuthorbartgo
      • CommentTime27 Sep 2024 15:19
       
      Może "przestaje zarażać" - w sensie, że można jej wtedy dotknąć i w ten sposób zakończyć grę?
      • 4: CommentAuthortebe
      • CommentTime27 Sep 2024 16:04
       
      celem gry jest zniszczyć bombę, czyli dotknąć jej mając 100 kryształów
      • 5: CommentAuthorastrofor
      • CommentTime27 Sep 2024 16:19
       
      ja zrozumialem ze bomba przestaje rozsiewac zaraze kiedy bohater posiada 100 krysztalkow, co jest dosc niejasne.
      1) bomba napewno zaraza npcow kiedy jest na tym samym ekranie co bohater, czego doswiadczylem osobiscie bo majac 100 krysztalkow i tak trzeba sie nagimnastykowac aby jej dotknac, bo npce caly czas sa na nowo infekowani, i caly czas trzeba ich leczyc.
      2) jedyne co mi przychodzi do glowy ze bomba nie zaraza kiedy jest w innym miescie, co ma moim zdaniem i tak male znaczenie bo glownie zakazaja zainfekowani npce ktorych musi byc calkiem sporo.
      3) 2ka moze byc prawdziwa jezeli gra naprawde liczy wszystkich zakazonych npcow gdzie obecnie sie przemieszczaja i jak zakazaja innych, ja podejzewam jednak ze algorytm jest duzo bardziej uproszczony, nie ma policzonych liczby npcow, ani tym bardziej gdzie i jakim pociagiem sie przemieszczaja, a kolejne miasta sa zakazane dosc losowo , npc wysiadaja z pociagu tylko jezeli jestesmy na dworcu w sposob losowy, jedynie na co algorytm musi zwracac uwage czy pociag przyjezdza z zakazonego miasta. W skrocie podejzewam ze gra nie jest emulacja zycia jak w algorytmach genetycznych.
      • 6:
         
        CommentAuthorMq
      • CommentTime30 Sep 2024 12:53
       
      Może być tak, że powtórzyłem częściowo jakieś "urban legends". W ciągu ostatnich kilku dni graliśmy dużo w Agent USA z Bocianu i widzieliśmy, że bomba trafia czarne kapelusze bez względu na to czy mamy 100 kryształów czy nie. Tak sobie myślę, że być może ów "urban legend" wzięło się stąd, że trzeba mieć 100 kryształów, żeby bomba nas samych nie zakaziła i wtedy możemy wejść w nią i zakończyć grę. Może było to źle zrozumiane, lub źle przetłumaczone kiedyś i tak później powtarzane.
      • 7: CommentAuthorbruno_j
      • CommentTime1 Oct 2024 16:13
       
      Astrofor, pozostawiając kryształy w mijanych miastach, "fortyfikujesz" je. Dodatkowo jeśli zostaniesz zarażony, to możesz liczyć na pomoc tubylców "ufortyfikowanego" miasta.

      Wszystko jest opisane w instrukcji:
      ->link<-
      • 8: CommentAuthortebe
      • CommentTime1 Oct 2024 20:19 zmieniony
       
      ale że jak? po angielsku? co Pan

      ileż nas ominęło pięknie wydanych tytułów
      • 9: CommentAuthorastrofor
      • CommentTime1 Jan 2026 02:56 (3 dni temu) zmieniony
       
      w opisie fussbomba = zakazony obywatel , a nie prawdziwa fussbomba
      Gra funkcjonuje na dwóch zupełnie różnych płaszczyznach: Rzeczywistości (Fizyki) dla miasta, w którym przebywa gracz, oraz Abstrakcji (Matematyki) dla pozostałych 99 miast.
      1. Dwa Światy Gry
      Aktywne Miasto (Tam, gdzie jesteś): Gra śledzi dokładne pozycje X/Y, animacje i kolizje dla maksymalnie ok. 12 obiektów (Sprite’ów). Tutaj zachodzi fizyka: jeśli kryształ dotknie Fuzzbomby, zmienia się ona w cywila.
      Symulacja w Tle (Pozostałe miasta): Gra nie wie, co dzieje się w innych miastach. Przechowuje stan każdego z 99 miast jako pojedynczy bajt (8 bitów) w tablicy pamięci (LB965). Ten bajt nie wie, gdzie są ludzie, ani ile mają lat. Przechowuje tylko jedną wartość liczbową: Siłę Miasta.
      2. Jak Gra Liczy Populację („Bogactwo = Zdrowie”)
      To najważniejszy mechanizm. Gra nie liczy „głów” (liczby obywateli). Siła miasta jest obliczana na podstawie sumy kryształów trzymanych przez obywateli w momencie, gdy gracz opuszcza miasto.
      Algorytm Zapisu: Kiedy wsiadasz do pociągu, gra skanuje ekran. Sumuje kryształy trzymane przez cywilów (NPC).
      5 cywilów bez kryształów = Wartość miasta 0 (Miasto bezbronne).
      1 cywil z 5 kryształami = Wartość miasta 5 (Miasto silne).
      Wniosek: Cywile, którzy zostają w mieście, ale nie posiadają kryształów, są dla symulacji matematycznie niewidzialni. Nie stanowią żadnej ochrony przed infekcją.
      3. Problem „Czarnej Dziury” (Utrata Danych)
      Ze względu na ograniczenia pamięci, gra bezpowrotnie kasuje pewne informacje po opuszczeniu miasta przez gracza:
      Leżące Kryształy: Wszystkie kryształy leżące na ziemi są usuwane z pamięci w momencie wyjazdu pociągu. Nie wliczają się do obrony miasta.
      Podróżni: Jeśli wepchniesz cywila z kryształami do pociągu, gra usuwa go z bieżącego miasta, ale nie przenosi jego liczby kryształów do miasta docelowego. Kryształy te przepadają. Cywil dociera do celu jako „pusty” pasażer (tylko jako jednostka, bez ekwipunku).
      Oto szczegółowy opis mechanizmu symulacji w tle ("The Background Simulation"), rozbity na czynniki pierwsze. Opisuje on dokładnie, jak kod asemblera przetwarza dane 99 miast, których gracz nie widzi.
      Struktura Danych Mapy (Geografia Gry)
      Zanim algorytm zadziała, musi wiedzieć, jak połączone są miasta. W pamięci ROM gry znajdują się statyczne tabele (w okolicach adresu L7AEE i powiązanych), które definiują mapę USA.
      Lista Sąsiedztwa (Adjacency List): Gra nie używa współrzędnych geograficznych do symulacji. Każde miasto ma przypisaną listę identyfikatorów (ID) miast sąsiednich.
      Przykład: Jeśli Nowy Jork ma ID 05, to w tabeli połączeń pod indeksem 05 znajdują się ID np. 06 (Philadelphia) i 04 (Boston).
      Węzły Komunikacyjne (Hubs): Miasta takie jak Chicago, Atlanta czy St. Louis mają wiele połączeń. W kodzie oznacza to, że ich ID pojawia się w wielu listach sąsiedztwa. Są to Super-Roznosiciele (Super-Spreaders). Jeśli Chicago upadnie, infekcja rozlewa się na 5-6 miast jednocześnie.
      Algorytm "Tyknięcia" (The Tick Algorithm)
      Główna pętla symulacji (L75B4) wykonuje się cyklicznie (prawdopodobnie sprzężona z zegarem pociągów). Oto co robi krok po kroku dla każdego miasta:
      Krok 1: Lokalny Wzrost (Pączkowanie)
      Dla każdego miasta (X od 0 do 99) gra sprawdza bajt statusu w LB965.
      Jeśli miasto jest CZYSTE (Bit 7 = 0):
      Wzrost jest powolny lub zerowy. Populacja (liczba kryształów) jest stabilna, chyba że gracz tam był i "zasiał" wzrost.
      Jeśli miasto jest ZAINFEKOWANE (Bit 7 = 1):
      Następuje Podział Binarny (Bit Shift). Fuzzbomby rozmnażają się wykładniczo.
      Kod: Wartość (np. -10) jest przesuwana bitowo lub dodawana do siebie. -10 staje się -20, potem -40.
      Limit: Wartość nasyca się przy maksimum (np. -127). To jest "Silna Infekcja".
      Krok 2: Emigracja (Wirtualne Pociągi)
      Gra symuluje ruch pociągów. Nie śledzi każdego pociągu w tle, ale oblicza Prawdopodobieństwo Transferu.
      Algorytm losuje jedno z miast połączonych z aktualnie przetwarzanym miastem.
      Oblicza "Pakiet Podróżny". Zazwyczaj jest to ułamek aktualnej siły miasta (np. 1/4 populacji).
      Odejmowanie: Ten pakiet jest odejmowany od miasta źródłowego (ludzie/bomby wyjeżdżają).
      Dodawanie: Ten pakiet jest wysyłany do miasta docelowego.
      Krok 3: Konfrontacja (Bitwa Matematyczna)
      To jest moment, w którym decyduje się los miasta docelowego. Algorytm bierze "Pakiet Podróżny" z Miasta A i uderza nim w Miasto B.
      Scenariusz: Silna Infekcja atakuje Słabą Obronę.
      Miasto A (Zainfekowane): Wysyła pakiet o sile -40 (Fuzzbomby).
      Miasto B (Czyste): Ma stan +10 (Słaba populacja/mało kryształów).
      Obliczenie: +10 (Obrona) + -40 (Atak) = -30.
      Wynik: Wynik jest ujemny. Bit 7 Miasta B zmienia się na 1. Miasto B zostaje przejęte. Populacja cywilna została "skonwertowana". Teraz Miasto B jest zainfekowane z siłą 30.
      Scenariusz: Silna Obrona odpiera Atak.
      Miasto A (Zainfekowane): Wysyła pakiet o sile -20.
      Miasto B (Czyste): Ma stan +100 (Gracz zostawił tam tłum bogatych obywateli).
      Obliczenie: +100 + -20 = +80.
      Wynik: Wynik nadal dodatni. Bit 7 pozostaje 0. Miasto B obroniło się. Ale jego siła spadła ze 100 do 80 (część kryształów została zużyta/część ludzi zginęła).
      Definicja Siły Infekcji
      W kodzie "Słaba" i "Silna" infekcja to po prostu wartości liczbowe w bajcie statusu:
      Słaba Infekcja (Wartości bliskie 128 / -1):
      Oznacza to 1 lub 2 Fuzzbomby w całym mieście.
      Zagrożenie: Minimalne. Jeśli wyślą "pakiet" do sąsiada, będzie on miał siłę 0 lub 1. Łatwo go odeprzeć.
      Dla Gracza: Po wejściu do takiego miasta zobaczysz pustki i jednego Fuzzbombę.
      Silna Infekcja (Wartości bliskie 255 / -127):
      Miasto jest pełne. Fuzzbomby osiągnęły limit zagęszczenia.
      Zagrożenie: Krytyczne. Miasto działa jak "działo", wysztrzymujące pakiety o sile -30 lub -40 w każdą stronę w każdym cyklu symulacji. Szybko przełamie obronę sąsiadów.
      Dla Gracza: Po wejściu na ekran, gra wylosuje maksymalną liczbę sprite'ów (ok. 8-10) i wszystkie będą Fuzzbombami. Od razu rzucą się na gracza.
      Wpływ Geografii na Algorytm
      Algorytm jest "ślepy" na odległość, widzi tylko połączenia (krawędzie grafu).
      Miasta Ślepe (Dead Ends): Np. Miami czy miasta na krańcach mapy. Są bezpieczniejsze, ponieważ atak może nadejść tylko z jednej strony. Łatwiej w nich utrzymać "Wysoką Obronę".
      Węzły Centralne (Crossroads): Są poddawane matematycznemu atakowi z 3, 4 lub 5 stron jednocześnie.
      W kodzie oznacza to, że bajt statusu Węzła jest modyfikowany wielokrotnie w jednym cyklu pętli głównej (za każdym razem, gdy pętla przetwarza jego sąsiada).
      Dlatego utrzymanie Chicago lub St. Louis w stanie "Czystym" jest matematycznie bardzo trudne. Wymaga ogromnej nadwyżki kryształów (populacji), aby zbuforować ataki ze wszystkich stron.
      Podsumowanie Algorytmu (Pseudo-kod)
      code
      Text
      DLA KAŻDEGO MIASTA (X = 0 do 99):
      1. Pobierz STAN miasta X.
      2. Jeśli ZAINFEKOWANE:
      - Zwiększ STAN (Wzrost lokalny).
      3. Pobierz listę SĄSIADÓW dla miasta X.
      4. Wybierz (losowo) SĄSIADA Y.
      5. Oblicz SIŁĘ UDERZENIA = (STAN miasta X) / 4.
      6. Odejmij SIŁĘ UDERZENIA od miasta X (Bomby wyjeżdżają).
      7. Dodaj SIŁĘ UDERZENIA do miasta Y (Bomby przyjeżdżają).
      8. Sprawdź MIASTO Y:
      - Jeśli (Nowy STAN < 0): Miasto Y staje się ZAINFEKOWANE.
      - Jeśli (Nowy STAN > 0): Miasto Y pozostaje CZYSTE (ale słabsze).
      • 10: CommentAuthorGonzo
      • CommentTime1 Jan 2026 03:33 (3 dni temu)
       
      astrofor - ulala, upps
      • 11:
         
        CommentAuthorMq
      • CommentTime1 Jan 2026 03:34 (3 dni temu)
       
      Bardzo fajna analiza. Dzięki!

      Zastanawia mnie jeszcze jedna rzecz. Z tego opisu wynika, że algorytm opiera się tylko na tym jaka jest liczba określająca siłę poszczególnych miast. Z tego też algorytmu wynika ile dobrych i złych charakterów pojawi się w danym mieście i ile będą mieli kryształów. W takim razie pytanie jest o samą bombę, której szukamy. Czy jej lokalizacja nie jest w ogóle związana z tym algorytmem? Po prostu bomba jest opisana jeszcze odrębnym algorytmem samej bomby i w zasadzie wtedy wystarczy, że raz na jakiś czas bomba przesunie się do któregoś sąsiedniego miasta, a gra ma tylko zapisane w którym mieście aktualnie jest bomba i na nic więcej nie ma to wpływu, to już cały algorytm?
      • 12: CommentAuthorastrofor
      • CommentTime1 Jan 2026 18:01 (2 dni temu) zmieniony
       
      1. Procedura: Źródło Infekcji
      Krok 1: Pobierz zmienną Lokalizacja_Bossa (ID miasta).
      Krok 2: W tablicy stanu mapy znajdź to miasto.
      Krok 3: Nadpisz wartość tego miasta na -127 (Maksymalna Wartość Negatywna).
      Rezultat: Miasto staje się natychmiastowo i całkowicie zainfekowane, niezależnie od wcześniejszego stanu.
      2. Procedura: Ruch po Mapie
      Krok 1: Sprawdź Licznik_Ruchu.
      Jeśli Licznik > 0: Zmniejsz licznik, zakończ procedurę.
      Jeśli Licznik == 0: Przejdź do kroku 2.
      Krok 2: Pobierz z pamięci ROM listę miast sąsiadujących z obecną Lokalizacją_Bossa.
      Krok 3: Wykonaj funkcję Losuj(Sąsiedzi).
      Krok 4: Zaktualizuj zmienną Lokalizacja_Bossa na wynik losowania.
      Uwaga: Algorytm nie sprawdza pozycji gracza. Ruch jest chaotyczny (błądzenie losowe).

      2. Mechanika Czasu i Synchronizacja
      Czas w grze jest walutą, którą płacisz za przemieszczanie się. Gra używa systemu „Tyknięć” (Ticks) do synchronizacji Twoich działań z symulacją w tle.
      A. Gra w czasie rzeczywistym (Chodzenie)
      Kiedy chodzisz po mieście:
      Zegar: Główny licznik czasu (L0619) tyka powoli (np. raz na sekundę).
      Symulacja: W każdym tyknięciu algorytm infekcji wykonuje jeden mały krok.
      Efekt: Masz czas na reakcję. Infekcja rozprzestrzenia się powoli. Możesz rzucać kryształy i leczyć ludzi szybciej, niż matematyka gry ich infekuje.
      B. Podróż Pociągiem (Pętla Fast-Forward)
      Kiedy wsiadasz do pociągu i widzisz ekran z zegarem:
      Koszt Podróży: Gra sprawdza w tabeli mapy, ile czasu zajmuje podróż (np. z Nowego Jorku do Chicago = 8 godzin).
      Przeliczenie: Gra zamienia te 8 godzin na liczbę cykli symulacji (np. 16 tyknięć).
      Pętla Wykonawcza: Procesor wchodzi w pętlę i wykonuje algorytm infekcji oraz ruchu Bossa 16 razy z rzędu, najszybciej jak potrafi.
      Dla Gracza: Mija kilka sekund animacji zegara.
      Dla Bossa: Otrzymał on właśnie 16 darmowych ruchów. Mógł w tym czasie przejść przez 3 stany, infekując wszystko po drodze.
      • 13:
         
        CommentAuthorMq
      • CommentTime1 Jan 2026 18:32 (2 dni temu)
       
      Czyli w czasie jak jesteśmy w mieście, chodzimy sobie, mnożymy kryształy, zaglądamy do info itd., to też odbywa się ruch "międzymiastowy"? Czyli np. może się zdarzyć tak, że w trakcie jak jesteśmy w jakimś mieście, to nagle pojawi nam się w nim bomba? Np. wchodzimy do innego pomieszczenia, przechodzimy z powrotem a tam jest bomba.

      Ponadto jeśli tak jest, że w czasie pobytu w mieście odbywa się ruch międzymiastowy, to ciekawe z jaką prędkością się on odbywa, tzn. czy ma znaczenie realne jak długo marudzimy w mieście, że sobie tam np. mnożymy kryształy w kilku pomieszczeniach itp.

      I ciekawe ile realnie trzeba dać kryształów npc-tom, żeby było wiadomo że miasto ma już maksymalną siłę.
      • 14: CommentAuthorastrofor
      • CommentTime1 Jan 2026 18:57 (2 dni temu) zmieniony
       
      kazdy krysztal w kieszeni npc albo na ziemi dodaje 1 do sily miasta , maksymalna sila to 127 . Mozliwe jest ze fussbomba nagle wteleportuje sie do twojego pokoju, ale prawdopodobienstwo tego jest niskie - w normalnym trybie boss teleportuje sie raz na 5 minut , pozatym tylko do losowych miast w bezposrednim sasiedztwie, mi sie nigdy nie zdazyla taka sytulacaj pozatym teoretycznie mozliwy jest "Spawn Kill" - czyli boss teleportuje sie na gracza, wtedy masz 100 krysztalow - kongratulejszyn!!!, nie masz - no to masz duzy problem...
      • 15: CommentAuthorastrofor
      • CommentTime1 Jan 2026 23:16 (2 dni temu)
       
      tutaj symulacja rozprzestrzeniania infekcji , z algorytmami jak najbliżej oddającymi grę agent usa : ->link<-