h3cast Heroes III · obserwator Transmituj mecz

Dla tych, którzy komentują Heroes III

Heroes III nigdy nie miało trybu obserwatora.Więc go zbudowaliśmy.

h3cast czyta gry obu graczy naraz i buduje z nich transmisję — a nie przechwytuje czyjegoś okna. Zobacz obie strony w turach symultanicznych, przewiń do walki, którą przegapiłeś, gdy mecz wciąż trwa, i pokaż widowni mapę, której nie widzi żaden z graczy.

2 → 1
dwie gry, jeden obraz — także w turach symultanicznych
przewijanie
cofnij się w trwającym meczu i wróć na żywo
0 MB/s
gracze nie wysyłają ani jednej klatki wideo

Powyższy kadr to prawdziwa geometria aplikacji, narysowana w CSS. Zrzut, który go zastąpi, pochodzi z prawdziwego meczu — nic na tej stronie nie jest inscenizowane z danych, których narzędzie nie odczytało.

Dlaczego nie zwykłe przechwytywanie ekranu

Cztery rzeczy, których zrzut ekranu nie potrafi

Nie „robi gorzej” — nie potrafi. Heroes III działa peer-to-peer, a w turach symultanicznych klient w ogóle nie dostaje informacji o ruchach przeciwnika. Przechwycony obraz jednej maszyny to nie wolniejsza transmisja; to transmisja, której trwale brakuje tej ciekawszej połowy.

I

Obie strony naraz

Dwaj agenci, po jednym na maszynie każdego gracza, czytają własną grę i wysyłają to, co się zmieniło. Serwer scala oba strumienie w jeden obraz. Oglądasz wyścig, a nie jednego biegacza.

Czerwony · tura 42

tura symultaniczna, rusza się właśnie teraz

  • Solmyr zajmuje kopalnię
  • kupuje Efryty w Inferno

Niebieski · tura 42

połowa, której zrzut ekranu nigdy nie zobaczy

  • walczy z Utopią
  • traci 4 Czempiony

II

Przewijanie trwającego meczu

Walka niebieskiego rozegrała się, gdy patrzyłeś na czerwonego. Cofnij się o półtorej minuty, obejrzyj ją i wróć na żywo. Każdy mecz jest uporządkowanym dziennikiem na serwerze, więc powtórka nie jest osobną funkcją — to ten sam strumień, odtwarzany od miejsca, które wskażesz.

A gdy mecz się kończy, powtórka już jest. Nikt nie nagrywał żadnego wideo.

wymaga meczu na żywo

Pętla · 10 s

Przewijanie do walki i powrót na żywo

Nagrane z paska przewijania podczas najbliższego meczu na żywo — jedyne ujęcie, które musi być prawdziwe.

III

Mgła, którą sam wybierasz

Mgła czerwonego, mgła niebieskiego, obie naraz albo cała mapa reżysera. Buduj napięcie — „żaden z nich nie wie, co jest za tym grzbietem” — albo pokaż mecz dokładnie tak, jak przeżywa go jeden z graczy. Jeden klawisz przełącza to na antenie.

  • Widzi czerwony
  • Widzi niebieski
  • Obaj
  • Reżyser

IV

Gracze nie streamują niczego

Zero OBS, zero enkodera, zero uploadu, zero drugiego monitora, zero klatek straconych w grze. Agent wysyła zdarzenia, nigdy wideo — kilka kilobajtów tam, gdzie stream chciałby megabitów.

Cała rola gracza: uruchomić małą aplikację, wpisać hasło, grać. To znaczy, że możesz wypuścić na antenę dwie osoby, które same nigdy by się nie wystreamowały.

do nagrania dziś

Zrzut

Okno agenta na pulpicie gracza

Z prawdziwego builda na maszynie z grą: połączony, hasło ustawione, widoczne opóźnienie, „transmisja aktywna”.

Czym reżyserujesz

Kadr zbudowany pod transmisję

Obraz jest rysowany, a nie przechwytywany. Obserwator renderuje świat z Twojej własnej instalacji Heroes III, więc rozdzielczość jest Twoja, układ jest Twój, i nie ma tu skalowanego 800×600, ramki okna, kursora gracza ani menu w kadrze.

wymaga meczu na żywo

Zrzut główny · pełna szerokość

Kadr obserwatora podczas meczu na żywo

2560×1440 z maszyny komentatora: mapa, studnia minimapy, obie płyty, pasek surowców, pasek statusu. Otwierający obraz strony.

  1. 01 Mapa bez przykrywekŻaden panel jej nie zasłania — świat pozostaje obrazem, cała reszta stoi obok.
  2. 02 Płyta na graczaWojsko, ruch, mana, co niosą — obaj gracze obok siebie, przez cały mecz.
  3. 03 Kamera podążaWidok sam idzie tam, gdzie dzieje się akcja. F wyłącza to, gdy chcesz spojrzeć gdzie indziej.
  4. 04 Klikalna minimapaKliknij, żeby przesunąć widok; podziemie jest o jeden przycisk stąd.
  5. 05 Szczegóły na klawiszuH karta bohatera, T zamek, B bitwa — każdy skrót do przemapowania.
  6. 06 Status, któremu można wierzyćNa żywo albo Połowa, gdy odpadnie agent. Kadr mówi, który stan trwa; nigdy po cichu nie pokaże jednej strony jako całego meczu.

Czwarta rzecz, której zrzut ekranu nie potrafi

Otwórz ekran, którego nie ma otwartego żaden z graczy

Zrzut ekranu pokazuje to, na co patrzy gracz. h3cast pokazuje to, o co pyta komentator — kartę bohatera, który właśnie wchodzi w zasadzkę, zamek cztery dni drogi stąd, w którym dopiero co stanął Kapitol, walkę, która skończyła się, zanim zdążyłeś się na nią przełączyć. Nic z tego nie wymaga, żeby gracz cokolwiek otwierał, i nic mu nie przerywa.

Karta bohatera

H albo przycisk na płycie tego gracza

Cały rekord, tak jak trzyma go gra — a nie streszczenie, które sami złożyliśmy. Wszystko poniżej i tak leżało w oknie, które agent czyta jednym wywołaniem, więc nie kosztuje ani bajtu dodatkowego ruchu.

do nagrania dziś

Zrzut

Karta bohatera

Z ławki ekranów, prawdziwe archiwa gry.

  • Atak, obrona, moc i wiedza, razem z doświadczeniem i poziomem
  • Dziewiętnaście noszonych slotów — łącznie z zaklęciem w zwoju i slotami zablokowanymi przez artefakt złożony
  • Plecak, w kolejności, w jakiej trzyma go gra
  • Umiejętności drugorzędne w kolejności, w jakiej wypisuje je sama gra — nie alfabetycznej i nie naszej
  • Morale i szczęście jako własne sumy gry, na jej własnych tarczach
  • Specjalizacja czytana ze statycznej tablicy gry — więc jej nazwa przychodzi w języku gracza
  • Księga czarów, z zaklęciami z artefaktów pokazanymi osobno od tych, których się nauczył
  • Pozostały ruch, punkty many i biografia

Ekran zamku

T albo przycisk na płycie tego gracza

Także tego, którego nikt nie ma otwartego. Stan pochodzi z pamięci, a nie z okna, w które ktoś akurat patrzy, więc cztery zamki za linią frontu czyta się tak samo dobrze jak ten broniony.

do nagrania dziś

Zrzut

Ekran zamku

Z ławki ekranów, wszystkie dwanaście frakcji dopasowanych.

  • Własne tło frakcji z jej budynkami, każdy tam, gdzie postawiło go własne okno zamku w grze — nigdy według naszej tabeli
  • Tylko to, co ten zamek naprawdę ZBUDOWAŁ, i najwyższy budynek z każdej rodziny
  • Gildia magów poziom po poziomie, z zaklęciami na półkach
  • Ile jednostek zostało jeszcze do rekrutacji w każdym siedlisku
  • Co ratusz mógłby jeszcze zaoferować, nazwane tak, jak nazywa to gra
  • Garnizon i bohater odwiedzający, każdy z armią, która przy nim stoi
  • Dwaj bohaterowie, których oferuje tawerna
  • Dwanaście frakcji, z Zatoką, Fabryką i Przystanią z HotA włącznie

Bitwa

otwiera się sama — albo na klawisz, albo przez znacznik na płycie gracza

Odtworzona ze zdarzeń na własnym polu bitwy gry i czytelniejsza, niż pokazuje ją sama gra — bo widz może zapauzować walkę, a gracz nie.

do nagrania dziś

Pętla · 8 s

Odtworzona bitwa

Z ławki bitewnej, na własnym polu bitwy gry.

  • Kolejka inicjatywy, więc widownia wie, kto rusza się następny, zanim to się stanie
  • Każdy oddział z tym, co traci, w chwili gdy to traci
  • Liczby obrażeń i własne okno wyniku gry, gdy walka się kończy
  • Otwiera się sama przy walce, którą warto obejrzeć, a pasek przewijania ją cofa

Każdy z tych ekranów jest rysowany z Twojej własnej kopii gry, w rozdzielczości Twojego streama, a nie gry. Czego archiwa nie potrafią rozstrzygnąć, zostaje widocznie nierozstrzygnięte i mówi o tym wprost — nigdy nie jest wypełniane czymś, co wygląda wystarczająco podobnie.

Krótko o tym, co pod spodem

Trzy części, a jedna z nich jest arbitrem

Żadnego moda, żadnej wtyczki, żadnego pliku wrzuconego do folderu Heroes III. Dwa małe programy i serwer między nimi.

Dwaj agenci, po jednym na maszynie każdego gracza, wysyłają zdarzenia do serwera h3cast, który je scala i publikuje mecz komentatorowi. Gracz A · Windows HotA działa nietknięta agent h3cast czyta jej pamięć hasło = zgoda tego gracza Gracz B · Windows HotA działa nietknięta agent h3cast czyta jej pamięć hasło = zgoda tego gracza Serwer h3cast scala oba · deduplikuje · sprawdza krzyżowo zapisuje dziennik meczu · trzyma ustalone opóźnienie mecz nie istnieje bez zgody obu stron Ty, komentator świat rysowany z TWOICH własnych plików gry zdarzenia + klatki stanu zdarzenia + klatki stanu opóźnione, scalone
Agent tylko czytaZwykły odczyt spoza procesu. Nic nie jest wstrzykiwane, nic podpinane, nic zapisywane, nic w Twojej grze zmieniane.
Serwer jest arbitremTo on trzyma opóźnienie i zgody. Klient widza nie ma czym niczego odblokować u siebie.
Zasoby nigdzie nie wędrująŚwiat jest rysowany z instalacji komentatora, więc żaden plik gry nie jest przez nas rozpowszechniany.

A aktualizacja HotA nie oznacza reinstalacji. Nowy build zmienia zestaw offsetów, a te jadą w paczkach sygnatur, które agent pobiera z serwera. Na buildzie, którego nie zmierzyliśmy, agent staje, zamiast zgadywać — patrz niżej.

Ta część, którą przeczytają Twoi gracze

Legalność, nie inwigilacja

Narzędzie, które czyta działającą grę, musi powiedzieć dokładnie, co robi — i dokładnie, czego nie robi. Jedno i drugie jest poniżej.

Tylko odczyt, i to architektonicznie
Żadnych wstrzyknięć, żadnych hooków, nic zapisywanego do procesu gry. Pomiary pokazały, że ani ruch, ani walka ich nie wymagają, więc narzędzie powstało bez nich.
Nic nigdy nie wraca do gracza
Nie istnieje droga z transmisji na maszynę któregokolwiek z graczy. Strumień płynie tylko w jedną stronę.
Bez zgody nie ma meczu — dla nikogo
Dopóki każde miejsce nie ma podłączonego agenta i zarejestrowanego hasła, mecz nie istnieje: nie ma go na liście, nie ma na gnieździe, nie ma nawet jako nazwa. Nikt nie wypuści cudzej gry na antenę.
Opóźnienie to liczba, którą widzą obaj gracze
Jedna wartość dla całej sesji, pokazywana w obu agentach od chwili przed startem aż do końca. Domyślnie trzy minuty; zero tylko wtedy, gdy obaj się na to zgodzą.
Dwa niezależne odczyty jednego świata
Obaj agenci opisują ten sam stan, więc serwer widzi, gdy się rozjeżdżają. Transmisja karmiona przez jednego zmanipulowanego agenta nie stanie się po cichu prawdą.
Na nieznanym buildzie gry odmawia
Nowe wydanie HotA to build, którego nie zmierzyliśmy. Agent sprawdza własny plik wykonywalny gry; jeśli ten się zmienił, agent nie ruszy. Jeśli wolno mu dziedziczyć, wykonuje każdy odczyt dwoma metodami i zatrzymuje się przed wysłaniem choćby jednego bajtu w chwili, gdy metody się nie zgodzą.
Zepsuta transmisja mówi, że jest zepsuta
Gdy w trakcie meczu odpadnie agent, mecz świeci Połowa, a nie Na żywo, i obraz zamarza z podaną przyczyną. Połowa meczu nigdy nie jest przebierana za całość.
Czego nie da się rozstrzygnąć, zostaje widocznie nierozstrzygnięte
Zasada, na której stoi cały projekt: nie rysujemy niczego, co nie pochodzi z prawdziwych danych gry. Twoja widownia nigdy nie usłyszy czegoś, czego dane nie powiedziały.

A oto, czym h3cast nie jest

To nie jest anty-cheat. Dwaj agenci pozwalają wykryć zmanipulowanego agenta — strumień, który kłamie transmisji. Nie mówią nic o tym, co dzieje się wewnątrz czyjegoś Heroes III. Jeśli jedna maszyna widzi całą mapę, to fakt o Heroes III, a nie o naszym narzędziu, i ta scena wie o tym od dwudziestu lat.

Nie chroni też przed właścicielem maszyny: oprogramowanie działające na Twoim komputerze zawsze możesz podmienić. Kto twierdzi inaczej, coś sprzedaje.

To, co h3cast daje turniejowi, to legalność: obaj gracze zgodzili się, na zapis, przy opóźnieniu, które obaj widzieli, na transmisję, której żaden z nich nie może po cichu wyłączyć ani po cichu włączyć. To zasada, którą organizator naprawdę wyegzekwuje — i wolimy powiedzieć to wprost, niż napisać na stronie „anty-cheat” i nie mieć racji w niczym.

Przed pierwszą partią wieczoru

Dwie minuty, dwa razy

Raz dla każdego gracza i raz dla Ciebie. W samym Heroes III nie ma czego ustawiać.

Każdy gracz

  1. Uruchamia agenta h3cast i zostawia go obok gry.
  2. Wpisuje własne hasło i przekazuje je komentatorowi. To hasło jest zgodą — nie ma hasła, nie ma transmisji.
  3. Gra. Agent pokazuje „transmisja aktywna, opóźnienie 3:00” przez cały czas jej trwania, a jego zamknięcie kończy transmisję.

Ty, komentator

  1. Otwierasz obserwatora — aplikację na Windowsie lub macOS, albo przeglądarkę.
  2. Wybierasz mecz z listy i wpisujesz oba hasła. Sprawdza je serwer; po Twojej stronie nic się nie odblokowuje.
  3. Reżyserujesz. Podążaj za akcją, przełączaj mgłę, otwieraj bohatera albo zamek, przewijaj to, co przegapiłeś. Okno obserwatora przechwytujesz w OBS jak każde inne źródło.

Pytania, które padają najpierw

Czy to w jakikolwiek sposób ingeruje w moją grę?

Nie. Czyta pamięć gry z zewnątrz, tak jak debuger albo menedżer zadań patrzy na proces. Nic nie jest wstrzykiwane, łatane, podpinane ani zapisywane. Twój folder Heroes III nie jest modyfikowany i nie trafia do niego żaden plik.

Czy przeciwnik może transmitować naszą grę beze mnie?

Nie, i pilnuje tego serwer, a nie uprzejma prośba. Dopóki oba miejsca nie mają podłączonego agenta i zarejestrowanego hasła, mecz nie jest wypisany, nie da się go streamować i nie da się go nawet nazwać. Obcy, który o niego zapyta, usłyszy, że takiego meczu nie ma.

Co się dzieje, gdy HotA się zaktualizuje?

Agent rozpoznaje, że patrzy na build, którego nikt nie zmierzył, i staje, zamiast czytać niewłaściwe bajty. Publikujemy paczkę sygnatur — zwykle w dzień lub dwa — a agent pobiera ją z serwera. Niczego nie instalujesz od nowa.

Czy muszę mieć zainstalowane Heroes III, żeby komentować?

Tak. Obserwator rysuje świat z Twojej własnej kopii gry, i właśnie dlatego nigdy nie rozprowadzamy ani jednego zasobu gry. Jeśli komentujesz Heroes III, już je masz.

Czy działa z turami symultanicznymi?

To jest przypadek, pod który powstało. Podczas tur symultanicznych pojedynczy klient w ogóle nie dostaje informacji o ruchach przeciwnika, więc jednostronne przechwytywanie nie jest w stanie ich pokazać. Dwaj agenci są.

Ile to kosztuje?

Dziś nic. Budują to dwie osoby dla sceny Heroes III, a pierwsze turnieje, przy których pomagamy, są za darmo — bardziej zależy nam na informacji zwrotnej niż na pieniądzach.

Publiczna wersja wkrótce

Komentujesz turniej? Pierwszą transmisję ustawimy razem z Tobą.

Agent nie jest jeszcze podpisany, więc na tej stronie nie ma przycisku pobierania — wolimy przeprowadzić pierwszych komentatorów przez to osobiście, niż rozdawać niepodpisany plik wykonywalny, który czyta pamięć gry. Napisz, kiedy gracie, a będziemy przy tym.