top of page
Technologia
Wpisy techniczne o Unity, trybie wieloosobowym, serwerach, self-hostingu, open source, buildach i narzędziach deweloperskich.
Dlaczego nowa wersja nazywa się 2026.7.19, a nie 0.9.2 🗓️
Kto dziś aktualizuje, przeskakuje z wersji 0.9.1 do 2026.7.19. Wygląda to jak literówka, a jest świadomą decyzją: zmieniliśmy schemat wersjonowania, z wersji „semantycznych” na wersje oparte na dacie (rok.miesiąc.licznik). Oto dlaczego. Stary schemat odpowiadał na pytania, których nikt nie zadaje. Wersjonowanie semantyczne (0.9.1, 1.2.3 …) pochodzi ze świata bibliotek programistycznych. Tam jest świetne: pierwsza liczba obiecuje „nic się nie psuje”, druga „same dodatki”, trze
Marcel Dütscher
28 lip2 minut(y) czytania
Porządki: jak wreszcie dobrze korzystamy z pamięci podręcznej GitHuba 🧹
W ostatnim wpisie technicznym zmierzyliśmy, ile naprawdę kosztuje nasz potok budowania i sprawdzania, i odkryliśmy, że nie pieniądze, tylko czas oczekiwania i miejsce. Artykuł kończył się słowami „porządki są zaplanowane, ale jeszcze nie zrobione”. Poszło szybciej, niż myśleliśmy: od południa dzisiaj jest to w głównej gałęzi. Oto liczby. Najpierw wynik. Zajętość pamięci podręcznej naszego repozytorium spadła z 5,32 GB w 63 wpisach do 2,46 GB w 13. Analiza bezpieczeństwa C#, k
Marcel Dütscher
27 lip4 minut(y) czytania
Tysiąc uruchomień buildów miesięcznie — i żadne nie kosztuje ani grosza ⚙️
Najpierw sprostowanie. Pierwsza wersja tego artykułu twierdziła, że skończyły nam się minuty buildów na GitHubie i że to wymusiło przejście na konto Pro. To było błędne — i wystarczyłby jeden rzut oka do dokumentacji, żeby to wyjaśnić: dla publicznych repozytoriów minuty buildów na GitHubie są darmowe. Artefakty i cache też. Nasze repozytorium jest publiczne od końca maja — więc nigdy nie zapłaciliśmy za ani jedną minutę i nigdy nie zapłacimy. Zamiast po cichu poprawiać tekst
Marcel Dütscher
26 lip3 minut(y) czytania
SignPath odmówił: nasze buildy na Windows na razie pozostają niepodpisane
Kilka dni temu opowiedzieliśmy wam na blogu, że złożyliśmy wniosek do darmowego programu open source SignPath Foundation o certyfikat do podpisywania kodu naszych instalatorów na Windows. Odpowiedź już przyszła — i brzmi: nie. Ponieważ ten devblog nie służy tylko do świętowania sukcesów, ale do uczciwego opowiadania, jak naprawdę wygląda taki projekt, ta wiadomość też tu musi się znaleźć. Krótkie przypomnienie: o co chodziło? Niepodpisane programy na Windows wywołują przy pie
Marcel Dütscher
15 lip2 minut(y) czytania
Nasz GitHub już mówi: automatyczny podcast deweloperski 🎙️
Rozwój Blocks Beyond The Stars odbywa się całkowicie otwarcie na GitHubie — każdy commit, każdy pull request, każde wydanie można przeczytać. Ale bądźmy szczerzy: kto wieczorem przewija listę commitów? Od teraz jest wygodniejsza opcja: możecie po prostu kazać sobie przeczytać na głos nowości z projektu. Nasz GitHub ma teraz własny podcast. Czym jest Podlog? Podlog to usługa, która obserwuje repozytorium GitHub i automatycznie zamienia je w podcast audio. Podłączacie swój proj
Marcel Dütscher
13 lip2 minut(y) czytania
Darmowe podpisywanie kodu dla open source: nasz wniosek do SignPath 🔏
Każdy, kto instaluje naszą grę na Windows, może znać ten moment: „System Windows ochronił ten komputer” — SmartScreen ostrzega przed „nieznanym wydawcą” i trzeba najpierw kliknąć „Więcej informacji → Uruchom mimo to”. To nie wirus; po prostu nasze instalatory nie są jeszcze podpisane. Chcemy, żeby to ostrzeżenie zniknęło — bez kupowania drogiego certyfikatu. Problem z certyfikatami do podpisywania kodu. Certyfikat wydawcy dla Windows (OV albo EV) kosztuje co roku, często wyma
Marcel Dütscher
12 lip2 minut(y) czytania
Od taga Git do działającego serwera: nasz potok wydań
Wydanie Blocks Beyond The Stars to dziś jedno polecenie: wypchnięcie taga git. Wszystko po tym robi maszyna. W tym artykule pokażę nasz potok CI/CD — i dlaczego wysiłek się opłaca nawet w hobbystycznym projekcie. Workflow wydania. Gdy tylko tag taki jak v0.7.4 zostanie wypchnięty, GitHub Actions buduje kompletny pakiet: instalatory Windows (setup, portable, MSI), wersję na Linux, wersję WebGL dla przeglądarki i obraz Dockera dla serwera — sześć artefaktów z jednego taga. Nume
Marcel Dütscher
7 lip1 minut(y) czytania
Konserwacja serwera bez wyrzucania graczy
Co właściwie dzieje się z graczami, gdy musimy zaktualizować serwer? Prosta odpowiedź brzmiałaby: wyciągnąć wtyczkę. Zbudowaliśmy lepszą — i to jedna z moich ulubionych funkcji, choć idealnie powinno się jej prawie nie zauważać. Zapowiedź. Serwer może wysłać komunikat o konserwacji do każdego działającego świata. W grze pojawia się wtedy baner z odliczaniem: „Restart serwera za 10 minut.” Komunikat trzeba aktywnie zamknąć — ale dopiero po kilku sekundach, żeby nikt nie klikną
Marcel Dütscher
6 lip1 minut(y) czytania
Hasła, limity zapytań i konta bez e-maila
W Blocks Beyond The Stars grają też dzieci. To kształtuje nie tylko projekt gry, ale także inżynierię bezpieczeństwa, która za nią stoi. Trzy przykłady. Konta bez e-maila — celowo. Konto gracza u nas nie wymaga adresu e-mail. To nie brak funkcji, tylko decyzja: chcemy mieć jak najmniej danych osobowych, zwłaszcza od młodych graczy. Czego nie przechowujemy, tego nie da się zgubić. (Uczciwa druga strona: w związku z tym nie ma „przypomnienia hasła” przez e-mail — mówimy o tym o
Marcel Dütscher
6 lip1 minut(y) czytania
Mały VPS jako flota serwerów gry
Wszystkie nasze światy online — portal, oficjalne światy, światy tworzone przez graczy — działają na jednym wynajętym serwerze z Linuksem (VPS). Bez centrum danych, bez pięciocyfrowego rachunku za chmurę. W tym artykule pokażę, jak ten serwer jest ustawiony i czego się po drodze nauczyliśmy. Najpierw utwardzanie. Zanim gra została wpuszczona na serwer, na pierwszym miejscu stanęło podstawowe bezpieczeństwo: zapora (ufw), która otwiera tylko niezbędne porty, fail2ban przeciw a
Marcel Dütscher
5 lip1 minut(y) czytania
Jak działają nasze światy hostowane
Twój własny świat w internecie, do którego znajomi mogą dołączyć w każdej chwili — bez konieczności stawiania przez kogokolwiek serwera. Taki jest pomysł naszych Światów hostowanych, a w tym artykule pokażę ci, co naprawdę dzieje się za przyciskiem „Graj” w portalu. Sercem wszystkiego jest WorldHost: mała usługa na naszym serwerze, która zarządza światami. Każdy świat działa we własnym kontenerze Dockera — w pełni odizolowany, z własnym plikiem zapisu, własnym limitem pamięci
Marcel Dütscher
5 lip1 minut(y) czytania
Za kulisami: jak zrobiliśmy 28 filmów na YouTube w 30 minut 🎬
Jak tata, dzieciak i AI zamienili stos surowych nagrań z gry w dwie pełne playlisty — bez ani jednej godziny w programie do montażu. W końcu mamy YouTube'a dla Blocks Beyond the Stars — 22 Shortsy i 6 dłuższych filmów typu Let's Play i poradniki. I szczerze? Sposób, w jaki powstały, to historia, którą warto opowiedzieć, bo sam „montaż” zajął mniej więcej pół godziny. Oto cały proces. Krok 1: Justus naciska nagrywanie 🎮 Każdy dobry film o grach zaczyna się od kogoś, kto napra
Marcel Dütscher
2 lip3 minut(y) czytania
Ponad 1000 testów dla hobbystycznej gry – strata czasu?
Nasz projekt ma teraz grubo ponad tysiąc automatycznych testów: około 990 po stronie serwera, około 120 w kliencie Unity. Dla projektu rodzinnego brzmi to jak przesada. Jest odwrotnie – i oto dlaczego. Testy to nasz drugi deweloper. W projekcie jednoosobowym nikt nie powie przy code review: „Czekaj, to psuje wytwarzanie.” Testy są tym kolegą. Każda mechanika gry – przepisy, tlen, głód, zachowanie stworzeń, hasła światów – ma testy uruchamiane przy każdej zmianie. Refaktoryzac
Marcel Dütscher
2 lip1 minut(y) czytania
Gra voxelowa w przeglądarce
Blocks Beyond The Stars działa nie tylko jako program na Windows i Linux, ale też bezpośrednio w przeglądarce – bez instalacji, wystarczy jedno kliknięcie w portalu. Droga do tego była bardziej pouczająca, niż się spodziewaliśmy. Unity WebGL to osobny świat. Unity od dawna potrafi eksportować do sieci, ale diabeł tkwi w szczegółach. Nasza największa przeszkoda: w przeglądarce nie ma prawdziwych wątków w tle jak w buildzie natywnym. Nasz system terenu normalnie buduje siatki k
Marcel Dütscher
30 cze1 minut(y) czytania
Dzień, w którym z buildu zniknęły nasze shadery
W edytorze Unity wszystko wyglądało idealnie. W gotowym buildzie: różowe powierzchnie i brakujące efekty. Witajcie w jednej z najparszywszych pułapek Unity – i kilku jej krewnych. Shader stripping. Przy budowaniu Unity wyrzuca wszystko, co pozornie nie jest potrzebne – w tym shadery. Problem: jeśli ładujesz shadery w czasie działania przez Shader.Find() (tak jak my z ponad 20 własnymi shaderami do wody, atmosfery, hologramów i nie tylko), Unity nie widzi żadnego odniesienia d
Marcel Dütscher
27 cze1 minut(y) czytania
Światło w świecie voxeli: prawdziwe światła czy flood fill?
Gracz stawia lampę świecącą w swojej bazie. Co dzieje się technicznie? To niewinne pytanie wywołało u nas fundamentalną decyzję – a odpowiedź to ładny przykład tego, że „nowocześniejsze” rozwiązanie nie zawsze jest lepsze. Opcja A: prawdziwe światła Unity. Każdy świecący blok staje się punktowym źródłem światła, silnik wszystko liczy. Wygląda świetnie – ale się nie skaluje. W świecie voxelowym w zasięgu wzroku mogą być setki świecących bloków; światła punktowe w czasie rzeczy
Marcel Dütscher
27 cze1 minut(y) czytania
W 100% generowane przez AI: nasz proces z Unity 6, .NET 8 i Pythonem
Jedno z najczęstszych pytań, jakie dostajemy, brzmi: Jak dokładnie buduje się złożoną grę voxelową z multiplayerem w całości z AI? Krótka odpowiedź: z bardzo ścisłymi wytycznymi. AI fantastycznie pisze kod, ale szybko traci z oczu perspektywę architektury. Dlatego od pierwszego dnia wymusiłem ścisłą architekturę klient/serwer. Nasz stos technologiczny w skrócie: Klient: Unity 6 do renderowania, wejścia i meshowania voxeli. Serwer: serwer dedykowany .NET 8 do generowania chunk
Marcel Dütscher
26 cze1 minut(y) czytania
Przebudowa grafiki: więcej wyglądu bez zmiany silnika
W pewnym momencie na stole leżała uczciwa diagnoza: gra dobrze się grało, ale wyglądała jak prototyp. Zamiast zerkać na inny potok renderowania czy nawet inny silnik, zadaliśmy sobie jedno pytanie: ile wyglądu wciąż kryje się w URP Unity, jeśli naprawdę wyciśniesz je do granic? Odpowiedź: zdumiewająco dużo. Antyaliasing (SMAA). Światy z bloków składają się z krawędzi – a migoczące krawędzie psują każdy zrzut ekranu. SMAA wygładza je bez rozmywania obrazu. Ambient occlusion (S
Marcel Dütscher
26 cze1 minut(y) czytania
Od MIT do AGPL: dlaczego zmieniliśmy licencję
Blocks Beyond The Stars jest open source – od samego początku. Ale licencję w trakcie drogi zmieniliśmy zasadniczo: z liberalnej licencji MIT na AGPL-3.0. Oto dlaczego. Co oznaczałoby MIT: Przy MIT każdy może wziąć nasz kod, zmodyfikować go i sprzedawać jako zamknięty produkt – bez oddawania czegokolwiek. W przypadku bibliotek to często dokładnie to, co trzeba. Dla kompletnej gry z serwerami wydawało się to złe: ktoś mógłby wziąć naszą pracę, zrobić z niej komercyjną usługę s
Marcel Dütscher
25 cze1 minut(y) czytania
Tekstury i dźwięki z AI w potoku zasobów
Blocks Beyond The Stars nie ma grafika ani projektanta dźwięku. A mimo to każdy nowy blok dostaje własną teksturę, a każda nowa funkcja swój dźwięk. Nasze narzędzie do tego: generatywna AI – z jasnym procesem wokół niej. Tekstury. Nowe kafelki bloków powstają w modelach obrazów OpenAI. Prompt opisuje materiał, styl i voxelową estetykę gry; wynik jest zmniejszany do rozmiaru kafelka i wsortowywany w nasz atlas bloków – jedną dużą teksturę, w której każdy typ bloku ma swój stał
Marcel Dütscher
23 cze1 minut(y) czytania
bottom of page