Darmowy klon Quake w przeglądarce ma zaledwie 13 kilobajtów. Zabawa jest świetna

Darmowy klon Quake w przeglądarce ma zaledwie 13 kilobajtów. Zabawa jest świetna

W ramach konkursu zorganizowanego przez Js13kGames stworzono aż 223 gry zajmujące zaledwie 13 kilobajtów. We wszystkie da się zagrać w przeglądarce internetowej.

  •  

    pokaż komentarz

    13kB to razem z bibliotekami graficznymi czy bez? Oryginalny Quake to był gamingowy bare-metal, wszystko było w kodzie.

    •  

      pokaż komentarz

      z bibliotekami graficznymi to byś chyba musiał dodać cały os, niezależnie od technologii.

    •  

      pokaż komentarz

      Oryginalny Quake to był gamingowy bare-metal, wszystko było w kodzie.

      @kwanty: i dzialal bez zadnego systmu operacyjnego, sterownikow itp?

    •  

      pokaż komentarz

      i dzialal bez zadnego systmu operacyjnego, sterownikow itp?

      @3mortis: Sprawa jest bardziej skomplikowana więc mocno uprościłem żeby uwypuklić pewnego rodzaju oszustwo (quake w 13kB). Oryginalny Quake 1996 był napisany pod DOSa więc można powiedzieć, że działał bez żadnego OSu.

      Wprawdzie DOS to "dyskowy system operacyjny" ale w zupełnie innym rozumieniu niż współczesny Windows czy Linux. DOS nie oferował wielowątkowości, ochrony pamięci, wielo-użytkowników, sterowników, multimediów, sieci (stosu TCP/IP), etc... To był w zasadzie program startujący inne programy. Programy napisane pod DOSa musiał same się zatroszczyć o multimedia, sterowniki, myszkę, etc... Inna sprawa, że wtedy nie było mnogości kart graficznych więc sterowników to było "dwa na krzyż". Jak ktoś miał egzotyczny sprzęt to mu po prostu nie działało...

      Quake wspierał później OpenGL sprzętowo przyspieszany przez 3Dfx (najbardziej popularny ówcześnie akcelerator graficzny). Mógł być uruchamiany pod systemem Windows na zasadzie emulacji DOSa (czy jakoś tak - nie jestem specjalistą od technologi MS).

    •  

      pokaż komentarz

      @kwanty: Niby tak, ale w dzisiejszych czasach w ogole Ciezko tak cos napisac. Bo technologie praktycznie oczekuja ze nie bedziesz wynajdywal rzeczy od nowa ktore sa wbudowane w OS i dostepne od reki. Zrobisz hello world w C i po skompilowaniu sie okaze ze ma cholera wie ile bo biblioteka do wypisywania tekstu ma przy okazji mase niepotrzebnego kodu.

      Z drugiej strony obecna moc obliczeniowa sprawia, ze faktycznie wiele mozna wygenerowac prosto z kodu. Nie trzeba nawet wrzucac tekstur itp liczenie oswietlenia w locie dla takiego czegos to tez pewnie nie problem nawet bez 20 letnich zoptymalizowanych do granic bibliotek.

    •  

      pokaż komentarz

      @kwanty: no na bank nie jest to niezależny kod, bo do wykonania potrzebuje "maszyny wirtualnej", czyli przeglądarki z silinkiem js. często te mikroskopijne dema też nie są, bo zależą od directxa, czy innego opengla.

      Jednak należy chłopu przyznać, przeglądając jego repo, gdzie ma na przykład implementację dekodera MPEG w javascripcie, że wie co robi

    •  

      pokaż komentarz

      @kwanty technicznie rzecz biorąc trzeba by było napisać Quake w asemblerze, żeby był bez OS ( ͡º ͜ʖ͡º)

    •  

      pokaż komentarz

      @kwanty no to chyba oczywista oczywistosc, że korzysta z bibliotek. 13kb to możesz se kłejka na nokie 3310 zrobić

    •  

      pokaż komentarz

      technicznie rzecz biorąc trzeba by było napisać Quake w asemblerze, żeby był bez OS
      @winsxspl: technicznie rzecz biorac, to mylisz sie. W asemblerze moze trzeba byloby napisac bootloader dla starych biosow bez UEFI. Cala gra moze byc napisana w dowolnym jezyku. Dla jezykow wysokopoziomowych trzebaby jednynie dodac silnik p-codu.

    •  

      pokaż komentarz

      Quake wspierał później OpenGL sprzętowo przyspieszany przez 3Dfx (najbardziej popularny ówcześnie akcelerator graficzny).

      @kwanty: 3Dfx wspierał Glide, a OpenGL to inny rodzaj API. Podobno Carmackowi zajęło przepisywanie Quake na OGL dwie godziny.

    •  

      pokaż komentarz

      @kwanty: dziś praktycznie nie da się napisać programu w taki sposób, jak pod DOSem, który dawał bezpośredni, niczym nieograniczony dostęp do sprzętu. Dziś nawet jądro NT w Windows odpalane jest w formie wirtualnej maszyny (dlatego zbudowanie WSL nie było czymś specjalnie trudnym dla MS i linuksowy kernel odpalony obok NT działa z całkiem niezłą wydajnością), praktycznie każdy sprzęt schowany jest pod różnymi abstrakcjami i wirtualizacjami. DirectX12 i Vulkan dają nieco większą kontrolę nad układem graficznym i jego pamięcią, niż jeszcze niedawno, ale i tego nie można nazwać dostępem bezpośrednim, bo finalne operacje dokonywane są przez system i sterownik. Owszem, można dziś napisać coś w assemblerze i będzie to bardziej wydajne, ale poziom skomplikowania kodu plus fakt, że i tak sprzęt jest "schowany" zyski z tego płynące są bez większego znaczenia.

    •  

      pokaż komentarz

      Zrobisz hello world w C i po skompilowaniu sie okaze ze ma cholera wie ile bo biblioteka do wypisywania tekstu ma przy okazji mase niepotrzebnego kodu.

      @3mortis: zwykle ta masa niepotrzebnego kodu nie ląduje w binarce, bo biblioteka standardowa jest linkowana dynamicznie, przykład hello worlda: https://godbolt.org/z/o5PM8nY7E

      oczywiście możesz wymusić linkowanie statyczne, tylko po co

    •  

      pokaż komentarz

      @kwanty: Ale filozofujesz - masz jak wół napisane, że gra jest w przeglądarce, więc chyba trudno się spodziewać, by 13 kilobajtów zajmowała gra + przeglądarka ?

    •  

      pokaż komentarz

      @kwanty: INT 10h i adres A000:0000. Pozdro dla kumatych

    •  

      pokaż komentarz

      Niby tak, ale w dzisiejszych czasach w ogole Ciezko tak cos napisac.

      @3mortis: @henk: @soulburner: @Jan998: Wiecie... jest cała demoscena wariatów wciskających niewiarygodnie złożone gry/dema w ultrakrótkie programy (1k, 4k, etc...). Są różne kategorie, są bare-metal ale też JS/OpenGL, etc... Więc chwalenie się Quake na 13kB to jest słabe jak się zna osiągnięcia chociażby z https://demozoo.org/

      Pamiętam dyskusję za czasów Amigi gdzie goście zrobili jakieś fajne demo bare-metal ale informację potrzebną do budowy obiektów (lokacje, wielkości, parametry, etc...) wzięli z systemowych bibliotek. Te biblioteki są zaszyte w EEPROM-ie obecnym na każdym sprzęcie i okazało się, że niektóre fragmenty kodu interpretowane jako dane tworzyły całkiem ładne konstrukcje geometryczne :-) Zazwyczaj takie rzeczy robiło się jakimś skrzywionym generatorem PRBS (pseudo random binary sequence) ale w tamtym przypadku wykorzystali entropię z wbudowanych bibliotek :-)

      Dlatego chwaląc się wielkością kodu, trzeba podkreślić z jakich zasobów mógł korzystać. Bo jest różnica czy goście użyli JS jako piaskownicy i sami tam zrobili silnik 3D, czy wykorzystali bibliotekę renderującą dostępną na poziomie JS a w tych 13 kB mieszczą się tylko tekstury, geometria sceny i reguły gry.

      EDIT: to żaden zarzut dla autora, tylko raczej zwrócenie uwagi że jak zwykle, diabeł tkwi w szczegółach ;-)

    •  

      pokaż komentarz

      Te biblioteki są zaszyte w EEPROM-ie obecnym na każdym sprzęcie i okazało się, że niektóre fragmenty kodu interpretowane jako dane tworzyły całkiem ładne konstrukcje geometryczne :-)

      @kwanty: to juz brzmi raczej jak seed do generatora ktory rownie dobrze moze uzywac jakiegos losowo generowanego klucza. Pewnie gdyby to wprowadzic na szeroka skale to by sie okazalo ze rzeczy zaszyte w eepromie nie sa az tak unikalnie losowe jakby sie wydawalo. Ale fakt, czesto kluczem do tych miniaturowych dziel jest wlasnie generowanie w locie rzeczy bo normalne gry mase miejsca marnuja na tekstury, predefiniowane mapy itp. Podczas gdy wygenerowanie milionow planet z ziarna np w no mans sky w locie to nie problem, do tego brak tekstur, swiatlo liczone na zywca i zajete miejsce sprowadza sie do linijek kodu.

      Tylko ze dawniej komputery by nie podolaly, i pewnie za jakis czas sie okaze ze technologia pojdzie tak do przodu ze generowanie tekstur, modeli itp w locie to nie bedzie problem i coraz wieksze gry beda mogly byc generowane. A moze nawet z wykorzystaniem AI skonczymy na generowaniu calego kodu generujacego reszte gry.

    •  

      pokaż komentarz

      to juz brzmi raczej jak seed do generatora ktory rownie dobrze moze uzywac jakiegos losowo generowanego klucza

      @3mortis: O ile pamiętam to było o wiele więcej niż "seed do random-a". Z kodu bibliotek robili wręcz sample (szumowe a jakże...) do muzyki :)

    •  

      pokaż komentarz

      O ile pamiętam to było o wiele więcej niż "seed do random-a". Z kodu bibliotek robili wręcz sample (szumowe a jakże...) do muzyki :)

      @kwanty: no rozumiem, ale wykorzystanie kawalka danych w ktorych nie wiemy co jest do wygenerowania czegos co ostatecznie nie wiemy jak bedzie wygladalo to wlasnie definicja uzywania seeda do generowania. To czy on bedzie losowy, wpisany z palca czy np z losowego fragmentu pamieci to juz nie wiele zmienia. Dla mnie to brzmi jako smaczek na zasadzie "moglibysmy wygenerowac 5000 losowych bitow ale uznalismy ze tak bedzie zabawniej, o widzi pan, to koslawe gowno to ze sterownika do prodiża"

    •  

      pokaż komentarz

      no rozumiem, ale wykorzystanie kawalka danych w ktorych nie wiemy co jest do wygenerowania czegos co ostatecznie nie wiemy jak bedzie wygladalo to wlasnie definicja uzywania seeda do generowania

      @3mortis: Dokładnie wiadomo jak będzie wyglądać :-) To nie był generator liczb losowych tylko pseudo-losowych (taki skrót myślowy). Oni szukali tak długo odpowiedniego ustawienia aż otrzymali zadowalający efekt.

    •  

      pokaż komentarz

      @kwanty: Dos to był taki program do uruchamiania innych programów. Ale były pewne standardy np VESA i karty graficzne się tego trzymały. Były standardy w zakresie kart muzycznych i większość kart była kompatybilna z sb16 czy sb pro. Quake był uruchamiany w extenderze doś4gw jak i np duke nukem 3d.

    •  

      pokaż komentarz

      Dos to był taki program do uruchamiania innych programów. Ale były pewne standardy np VESA i karty graficzne się tego trzymały. Były standardy w zakresie kart muzycznych i większość kart była kompatybilna z sb16 czy sb pro. Quake był uruchamiany w extenderze doś4gw jak i np duke nukem 3d.

      @PastaZeSzczypiorku: Te standardy to były raczej takie "best practice" a nie standardy defacto. Po prostu się przyjęło, że w pewnym roku PC oznacza x86 z SVGA, która była obsługiwana tak samo (te same rejestry) bez względu na vendora.

      Dopiero później, w epoce Win95/98, dopracowano się API do sprzętu a pomiędzy API a sprzętem był sterownik zarządzany przez system operacyjny.

    •  

      pokaż komentarz

      @kwanty: Cały sprzęt oparty na IBM PC to były takie "best practice" ;)

    •  

      pokaż komentarz

      Cały sprzęt oparty na IBM PC to były takie "best practice" ;)

      @PastaZeSzczypiorku: Dokładnie tak, IBM wygrał bo opracował standard i go "otworzył". Ale nie był to formalny standard, który certyfikował, etc... IBM robił PC a inni go naśladowali, zachowując takie same interfejsy sprzętowe/programowe żeby działało i było kompatybilne.

      To był trochę spontan, formalny standard wykształca się później. To były dość żywiołowe czasy :)

    •  

      pokaż komentarz

      @kwanty: generalnie gdy standardy ISA 8/16 bit powstały, to nie było czegoś takiego jak ochrona praw autorskich co do elektronicznych rozwiązań. stąd mamy np. klony 6502 MOS'a w atarynkach, NES, pegazusach itd, a Amigi 1000, 2000, 3000, 4000 posiadają 8 i 16 bitowe złącza ISA, obsługujące w Workbenchu np Soundblastery, czy karty VGA :)

    •  

      pokaż komentarz

      @3mortis: a quake nie miał też software renderera? bo wtedy można by było powiedzieć, że bez bibliotek :p

    •  

      pokaż komentarz

      @roman-swoboda: Były prawa aut i patenty a Ricoch z NES był z tego co pamiętam na licencji.

    •  

      pokaż komentarz

      @jeanpaul quake nie jest gra z 2021, więc po co brać pod uwagę uefi pod koniec lat 1990?

    •  

      pokaż komentarz

      quake nie jest gra z 2021, więc po co brać pod uwagę uefi pod koniec lat 1990?

      @winsxspl: tylko zwracalem uwage ze assembler nie jest potrzebny do pisania systemu niezaleznego od OS (a raczej go zastepujacego). Moja uwaga dotyczy kazdego programu, w tym np. klonu tej gry.

    •  

      pokaż komentarz

      @kwanty: Ale to był konkurs na gry przeglądarkowe...
      Nie jest "słąbe", jest po prostu "słabsze" od tych Twoich amigowych full-metal jacket. Ale dla takiego przeciętnego zjadacza makaronu jak ja to jest super osiągnięcie.
      Chciałbym też zwrócić uwagę, że różnorodność hardware wśród konsol Amiga była
      nieporównywalnie mniejsza od obecnych komputerów, więc nie bardzo wyobrażam sobie taką grę bez systemu operacyjnego, którą każdy mógłby sobie odpalić )A taki był sens tego konkursu - stworzenie gry, którą każdy może ściągnąć z neta i sobie zagrać) . Przecież po to jest OS, żeby ogarniał sterowniki urządzeń. Nawet zakładając, że nie potrzebujesz karty graficznej do symulacji takiego Quake'a 3D i ogarniesz to na CPU, to pozostają sterowniki myszki i klawiatury do zaimplementowania w kodzie..+ sterowniki USB 2.0 i USB 3.0. Zmieścisz to wszystko w 13 Kb ?

  •  

    pokaż komentarz

    Dodam, że tego nie napisał byle kto tylko Dominic Szablewski - pionier jeśli chodzi o pisanie gierek JavaScript jako natywne aplikacje mobilne. Dzięki stworzonej przez siebie bibliotece ImpactJS był jedną z pierwszych osób, które mogły poszczycić się natywną wydajnością w grze mobilnej opartej o dobrodziejstwa HTML5.

    ps: Jasne, że nie jest to łatwa sprawa, ale też żadne wielkie osiągnięcie biorąc pod uwagę co potrafi dziś JS/WebGL - prawdopodobnie, gdyby nie było stylizowane na Quake przeszłoby bez echa - ale to też cecha ludzi sukcesu, że potrafią połączyć wysokiej klasy rzemiosło z intuicją jak się z nim wstrzelić.

  •  

    pokaż komentarz

    Trochę bardziej upośledzona imitacja niż pełnoprawna gra ale plus za pomysł.

  •  

    pokaż komentarz

    Kurde krótkie ale wciągające ( ͡° ͜ʖ ͡°)