vcmi-amiga 0.9.20, klient VCMI na 68040/68060

Port na Amige: Rafal "Terror" Fajfrowski (solargrim@gmail.com, eterror.pl)

Caly klient VCMI (silnik Heroes 3) skompilowany na Amige, z serwerem
gry w osobnym watku i wszystkimi AI. Od t9 jest gra przez siec.

Instalacja
  Skopiuj CALA zawartosc katalogu vcmi-amiga-0.9.20 do katalogu z danymi
  gry, tego w ktorym sa Data, Maps i Mp3. Ma wyjsc tak:

    H3data/
      Data/            (z gry)
      Maps/            (z gry)
      Mp3/             (z gry)
      config/          (z paczki)
      scripts/         (z paczki, bez tego nie dzialaja walki)
      Mods/            (z paczki)
      userdata/        (z paczki, tu VCMI zapisze ustawienia, logi, zapisy)
      testy/           (z paczki, programy do pomiarow)
      vcmiclient       (z paczki, wersja na 68040)
      vcmiclient_060   (z paczki, wersja na 68060)
      vcmi-settings    (z paczki, ustawienia i uruchamianie gry)

  Jesli masz tam starsza wersje, nadpisz wszystko, razem z
  userdata/config/settings.json (sa w nim nowe ustawienia lobby).

  Uwaga: 3 pliki w config maja nazwy po 31 znakow. Na partycji FFS
  (limit 30) sie nie zmieszcza, na dysku z Windowsa w WinUAE, PFS i SFS
  nie ma problemu.

  W LIBS: musza byc standardowe biblioteki z Workbencha: locale,
  diskfont, mathieeedoubbas, mathieeedoubtrans, mathieeesingtrans.

Uruchomienie
  Najprosciej z Workbencha: dwuklik na vcmi-settings, ustaw co trzeba
  i "Zapisz i graj". Program sam wybiera vcmiclient albo vcmiclient_060
  (po procesorze) i kieruje wyjscie gry do RAM:vcmi_out.txt.
  Mozna tez kliknac ikone vcmiclient albo vcmiclient_060 (stos jest
  ustawiony w ikonie) albo z Shella:
    cd H3data
    Stack 1000000
    vcmiclient >RAM:vcmi_out.txt

  Na 060 zamiast vcmiclient odpal vcmiclient_060. Na 040 odpalaj
  wylacznie vcmiclient.

Ustawienia (vcmi-settings)
  Okno na Workbenchu (miesci sie na 640x256) z ustawieniami, ktore
  inaczej trzeba by wpisywac w userdata/config/settings.json:
    Obraz: tryb ekranu (Zmien otwiera requester trybow RTG), pelny ekran
      albo okno na Workbenchu, klatki na sekunde, kursor, czcionki
      (oryginalne sa najszybsze), intro przy starcie, filmy
    Gra: jezyk napisow VCMI (polski, angielski, niemiecki i inne; teksty
      z samej gry sa w jezyku Twoich danych), joystick/pad (wylaczony, bo
      mysz w porcie bywa widziana jako joystick)
    Dzwiek: czestotliwosc, mono/stereo, bufor, glosnosc muzyki i efektow
    Siec: nick, serwer lobby, TCP albo WebSocket, porty TCP i WebSocket.
      Nick to Twoja nazwa w lobby i w grach przez siec (4 do 20 liter
      i cyfr). Zmiana nicku zaklada przy nastepnym wejsciu do lobby nowe
      konto pod ta nazwa (gra sama podpowie ja w okienku logowania).
      Kazdy gracz musi miec swoje konto: jesli kopiujesz gre na druga
      Amige, ustaw tam inny nick, bo dwa logowania na to samo konto
      wyrzucaja sie nawzajem.
  Zapisuje tylko to, co zmieniles, reszta pliku zostaje jak byla.
  Odpalaj go przy wylaczonej grze, bo gra przy wyjsciu zapisuje
  settings.json od nowa. Esc albo Anuluj wychodzi bez zapisu.

Ekran
  Od t9 gra domyslnie otwiera wlasny ekran RTG 800x600 w 32 bitach
  (w Prefs/Picasso96 albo w uaegfx musi byc taki tryb). Zeby wybrac
  inny tryb, odpal raz:
    vcmiclient --screenmode
  Pokaze sie requester z trybami 32 bit od 800x600 w gore. Wybor
  zapisuje sie w settings.json, nastepne uruchomienia juz bez pytania.
  Wiekszy tryb = wiecej mapy na ekranie, ale wolniej.

  Gra w oknie na Workbenchu: w settings.json "fullscreen" : false.
  Workbench musi byc wiekszy niz 800x600 (np. 1024x768), bo okno ma
  ramki. Na Workbenchu 800x600 okno sie nie miesci i VCMI zmniejsza
  skale, stad te 816 w logu z t8. Tryby ponizej 800x600 dzialaja, ale
  obraz jest zmniejszany, wiec requester ich nie pokazuje.

Dzwiek
  Najprosciej przez Paule (dziala w WinUAE i na prawdziwej Amidze/PiStormie):
    1. WinUAE: Host, Sound: Sound emulation wlaczone (nie Disabled).
    2. Na Amidze zainstaluj AHI (Aminet: driver/audio/ahiusr_4.18.lha),
       instalator wrzuca ahi.device do DEVS:, sterowniki do DEVS:AHI
       i tryby do DEVS:AudioModes.
    3. Prefs/AHI: Unit 0 i Music unit ustaw na "Paula: 8 bit stereo++"
       (najmniej CPU) albo "Paula: HiFi 14 bit stereo++", 22050 Hz,
       kliknij Play test sound, ma zagrac. Save.
  Zamiast Pauli mozna uzyc sterownika UAE z katalogu WinUAE "Amiga
  Programs" albo karty dzwiekowej. Jak AHI nie wstanie, gra pojdzie bez
  dzwieku. Ustawienia w userdata/config/settings.json, sekcja "general":
    "audioFrequency" : 22050     (11025, 22050 albo 44100)
    "audioChannels" : 1          (1 mono, 2 stereo)
    "audioBufferSize" : 2048     (wiecej = mniej przerywa)

Filmy
  Od t9l gra odtwarza filmy z Data/VIDEO.VID i Data/H3ab_ahd.vid: prologi
  kampanii, karczme, wygrana i przegrana bitwe, poddanie, ucieczke, intro
  (jesli wlaczone) i animacje w menu kampanii. Dekoduje je okrojony
  ffmpeg (tylko formaty Smacker i Bink). Na 060 i PiStormie powinny isc
  plynnie, na 040 duze filmy 800x600 moga zwalniac gre. Wylaczenie:
  vcmi-settings, Filmy (albo w settings.json "video" : { "playVideos" :
  false }). Bez filmow prolog kampanii to czarny ekran z tekstem
  i lektorem, po skonczeniu przechodzi sam do mapy. Klikniecie albo
  Enter pomija prolog.
  Szybkosc dekodowania na swoim sprzecie sprawdzisz programem
  testy/vidtest (opis w sekcji Testy).

Gra przez siec
  Potrzebny dzialajacy stos TCP/IP (Roadshow, AmiTCP, Miami albo
  w WinUAE: Misc, bsdsocket.library emulation). Bez niego gra dziala
  normalnie, tylko siec jest wylaczona.

  Lobby (pokoje, czat, gra z innymi przez internet)
    W userdata/config/settings.json, sekcja "lobby":
      "hostname" : "95.31.37.122"     adres serwera lobby (sama domena albo IP)
      "port" : 3031                   port TCP lobby
      "transport" : "tcp"             tcp albo websocket
      "websocketPort" : 3032          port WebSocket
      "websocketUrl" : "ws://95.31.37.122:3032/"
                                      pelny adres WebSocket (ws:// albo wss://)
    Domyslnie gra laczy sie z lobby autora portu (95.31.37.122, TCP na
    porcie 3031, WebSocket na 3032), nawet bez sekcji "lobby" w settings.json. Laczy sie jednym
    sposobem, tym z "transport": websocket idzie tylko na websocketUrl,
    tcp tylko na hostname:port. Ustawienia zmieniaj przy wylaczonej grze,
    bo przy wyjsciu gra zapisuje settings.json od nowa.
    W grze: Multiplayer, Online lobby (przycisk z kula ziemska). Za pierwszym razem wpisujesz
    nazwe konta (4 do 20 liter i cyfr), potem loguje sie samo. Utworz
    pokoj: jesli serwer odpala mecze sam, gra liczy sie na serwerze
    i Amiga jest tylko klientem.

  Bezposrednio po IP
    Multiplayer, Join: wpisz adres i port komputera, ktory hostuje gre
    (PC z vcmiserver albo druga Amiga). Multiplayer, Host: Amiga sama
    hostuje gre na porcie 3030, inni lacza sie do niej po IP.

  wss:// (szyfrowane) wymaga AmiSSL 5 w systemie. Jeszcze nie testowane.

Testy (katalog testy)
    cd H3data
    testy/audiobench_040 Mp3/MAINMENU.MP3 >RAM:ab.txt
    testy/perfbench_040 >RAM:pb.txt
  Na 060 to samo z _060 na koncu.

  testy/vidtest dekoduje film z Data/VIDEO.VID tak jak gra, bez
  wyswietlania, i podaje klatki na sekunde:
    testy/vidtest GOOD1A.SMK >RAM:vt.txt     prolog kampanii 800x600
    testy/vidtest TAVERN.BIK >>RAM:vt.txt    karczma (Bink)
    testy/vidtest C1AB7.BIK Data/H3ab_ahd.vid >>RAM:vt.txt
  Filmy w grze ida 10 do 15 klatek na sekunde; wynik nizszy znaczy, ze
  w grze film bedzie zwalnial i lepiej wylaczyc Filmy w vcmi-settings.

  testy/filerace sprawdza, czy kilka watkow moze naraz czytac pliki
  (odpal w katalogu na dysku, z ktorego mozna pisac); ma wyjsc
  FILERACE OK.

  testy/nettest sprawdza siec bez gry: na PC odpal python3 echo.py
  (potrzebny pip install websockets), na Amidze testy/nettest ADRES_PC.
  Na koncu ma byc NETTEST OK (TCP i WebSocket, po 100 B i 300 KB).

Co odeslac
  - userdata/VCMI_Client_log.txt
  - RAM:vcmi_out.txt
  - screen tego, co sie pokazalo, albo numer bledu z requestera
  - czy slychac muzyke i dzwieki, czy sie tna
  - RAM:ab.txt, RAM:pb.txt i RAM:vt.txt, jesli odpaliles testy
  - na czym: WinUAE 040/060, z JIT czy bez, albo PiStorm

Wersje
  Numer wersji portu jest w lewym dolnym rogu menu glownego, w Shellu
  przy starcie, w tytule okna vcmi-settings i w Version vcmiclient FILE
  (albo Version vcmi-settings FILE). Kazda kolejna paczka ma
  numer o jeden wiekszy (0.9.15, 0.9.16, ...). Paczki t9i do t9n to
  wersje 0.9.9 do 0.9.14.

Co sie zmienilo w 0.9.20
  - szybsze tury przeciwnikow. Pomiar w emulatorze (6 graczy AI):
    tura jednego gracza bez walk z okolo 7,4 s spadla do okolo 3 s
    - ruch wroga domyslnie "natychmiast": bohater wroga od razu staje
      na koncu ruchu zamiast isc pole po polu. Gra czekala na koniec
      kazdej animacji, zanim AI moglo ruszyc dalej. Animacje mozna
      wlaczyc z powrotem w grze: Opcje, zakladka przygody, predkosc
      ruchu wroga (albo "enemyMoveTime" w settings.json, 0 to
      natychmiast, 150 to domyslna predkosc VCMI)
    - w turze przeciwnika gra nie rysuje mapy 30 razy na sekunde, gdy
      nic sie na niej nie rusza, wiec procesor idzie na AI (wylacza to
      "throttleEnemyTurn" : false w sekcji "video" w settings.json)
  - w userdata/VCMI_Client_log.txt sa linie PERF z czasami kazdej
    tury AI (myslenie, wykonanie ruchow, czekanie na animacje, klatki)
    i kazdej walki. Jak tury dalej sie wloka, przyslij ten plik

Co sie zmienilo w 0.9.19
  - napis "Wczytywanie, prosze czekac" w czasie, gdy gra przeglada
    liste scenariuszy, zapisow i kampanii (wczesniej obraz stal bez
    zadnej informacji)
  - do okna Shell trafiaja tylko bledy, reszta dalej idzie do pliku
    userdata/VCMI_Client_log.txt. Wypisywanie ostrzezen z map do okna
    Shell bylo bardzo wolne: lista scenariuszy otwiera sie teraz
    wielokrotnie szybciej

Co sie zmienilo w 0.9.18
  - czysta instalacja: okienko lobby (kula ziemska) pokazuje puste pole
    na nazwe konta zamiast podpowiadac domyslne "Player", a vcmi-settings
    pokazuje pusty nick i nie wymaga go do zapisu

Co sie zmienilo w 0.9.17
  - autor portu w oknie vcmi-settings

Co sie zmienilo w 0.9.16
  - numer wersji w vcmi-settings (tytul okna i Version vcmi-settings)

Co sie zmienilo w 0.9.15
  - numer wersji portu w menu glownym, nazwa paczki z numerem wersji

Co sie zmienilo od t9m (0.9.14)
  - naprawione kampanie Odrodzenie Erathii i Cien Smierci (i losowe
    bledy przy wczytywaniu): biblioteka C (libnix) nie byla gotowa na
    kilka watkow otwierajacych pliki naraz. Serwer gry wczytywal skrypty
    i mape w tym samym momencie, w ktorym klient wczytywal grafike,
    i zdarzalo sie, ze dwa watki dostawaly ten sam uchwyt pliku, wiec
    jeden czytal plik drugiego ("incorrect header check", popsute skrypty,
    brak schematow i w efekcie zwiecha albo Guru po prologu)

Co sie zmienilo od t9l
  - vcmi-settings: wybor jezyka i nick gracza sieciowego (zmiana nicku
    zaklada nowe konto w lobby), porty TCP i WebSocket w jednym wierszu
  - domyslne polaczenie z lobby po TCP (port 3031), WebSocket dalej do
    wyboru
  - okienko zakladania konta w lobby podpowiada nick z ustawien
  - domyslny jezyk napisow VCMI: polski

Co sie zmienilo od t9k
  - filmy: Smacker i Bink przez okrojony ffmpeg, do wylaczenia
    w vcmi-settings (Filmy)
  - dzwiek z filmow zapisywany poprawnie na Amidze (naglowek WAV
    i probki w little-endian)
  - zapetlony film nie wyciaga dzwieku od nowa przy kazdym obiegu
  - jednostka FPU ustawiana na pelna precyzje i zaokraglanie do
    najblizszej na starcie gry i kazdego watku (AROS startowal zadania
    z precyzja single, liczby double liczyly sie zle)
  - testy/vidtest do pomiaru szybkosci filmow

Co sie zmienilo od t9j
  - nowy program vcmi-settings: ustawienia w okienku i start gry
    (sam wybiera wersje 040 albo 060)
  - ikony dla vcmiclient, vcmiclient_060 i vcmi-settings
  - lobby na standardowych portach: TCP 3031, WebSocket 3032
    (ws://95.31.37.122:3032/)

Co sie zmienilo od t9i
  - kampanie Odrodzenie Erathii i Cien Smierci (i reszta): prolog bez
    filmu nigdy sie nie konczyl, gra stala na napisach. Teraz po tekscie
    i lektorze sama przechodzi do mapy. Klikniecie w trakcie prologu
    uruchamia scenariusz tylko raz (wczesniej kilka klikniec moglo
    wyslac start kilka razy)
  - przy bledzie polaczenia komunikat mowi, co sie stalo: przekroczony
    czas (firewall, zly port), polaczenie odrzucone (nic nie slucha na
    porcie), host albo siec nieosiagalne

Co sie zmienilo od t8
  - wylaczona obsluga joysticka/pada: port myszy byl widziany jako
    joystick i ruch myszy klikal w menu i wybieral mapy sam z siebie.
    Wlaczenie: w settings.json "input" : { "enableController" : true }
  - autor portu w Shellu przy starcie, w logu, w menu glownym (pod
    przyciskiem Wyjscie), na poczatku napisow koncowych (Credits)
    i w Version vcmiclient FILE
  - urzadzenie AHI zamykane w watku dzwieku, ktory je otworzyl (wczesniej
    zamykal je glowny watek, a odpowiedz z AHI szla do watku, ktorego
    juz nie bylo)
  - pelny ekran w trybie o tej samej rozdzielczosci co Workbench
    (np. 800x600 na Workbenchu 800x600) dzialal w pustke: gra rysowala,
    ale ekran sie nie otwieral (blad w SDL2, poprawiony)
  - poprawiony malloc: duze bloki (od ok. 1 MB) potrafily sie nie
    przydzielic mimo wolnej pamieci, stad "Unable to create surface
    816x600 with 32 bpp: Out of memory"
  - domyslnie wlasny ekran 800x600, --screenmode do wyboru trybu
  - poprawiony blad w libpthread: konczacy sie watek wysylal sygnal do
    watku, ktory mogl juz nie istniec (losowe zwiechy i Guru po dluzszej
    grze)
  - gra przez siec: lobby po TCP albo WebSocket, Join i Host po IP
  - zapisy gier i pakiety sieciowe w tym samym formacie co na PC

Co sie zmienilo od t7
  - wersja vcmiclient_060 pod 68060
  - ustawienia dzwieku w settings.json, domyslnie 22050 Hz mono
  - muzyka z glosnoscia 0 jest zatrzymana zamiast grac w tle
  - dekoder MP3 nie wpada w wolne obliczenia na bardzo malych liczbach
  - szybsze watki, malloc i wczytywanie modow
