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 (2 godzin 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 (1 godzinę temu)
       
      astrofor - ulala, upps
      • 11:
         
        CommentAuthorMq
      • CommentTime1 Jan 2026 03:34 (1 godzinę 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?