Hypersomnia - multiplayer top-down shooter z otwartym źródłem


#21

Zawsze byłem zwolennikiem Arch Linuxa. Cieszy mnie twoje przejście. Życzę dalszych owocnych prac. Można cię jakoś wesprzeć? umowa kupna sprzedaży samochodu


#22

@sinin Ciepłe słowa są wsparciem zanadto!
Jeśli chodzi o pomoc przy programowaniu, to oficjalna to-do lista projektu zawsze znajduje się w githubowych issuesach, ale nie zachęcam jeszcze nikogo do podejmowania się tych rzeczy dopóki we właściwy sposób nie udokumentuję większej części kodu.

Niedawno zacząłem pisać taką właśnie dokumentację - ale piszę ją tylko gdy nie mam akurat natchnienia do właściwego programowania, bo moim priorytetem jest pchnięcie samej gry do przodu.

Gdy dokumentacja będzie już jakaś ludzka, będę trąbił o tym wszędzie na pewno!


#23

Wybaczcie długą ciszę, ale oprócz tego, że refactorowałem kod pod edytor, to jeszcze spędzałem mnóstwo czasu nad podrasowywaniem swojego Linuxa oraz… Vima. Dzięki temu jestem coraz bardziej produktywny w pisaniu kodu. Zarzucę kilka smaczków ze zbliżającego się edytora świata:

image

Ciekawostka - powyższe pola są wygenerowane automatycznie przez magię którą zaklepałem do generowania introspektorów dla typów w C++. Np. nie musiałem oddzielnie pisać kodu dla pól z “effective radius” oraz “damage” - dla każdego typu danych piszę logikę tylko raz.

A tutaj specjalnie trochę nabałaganiłem:



Unicode support, opisy z bbcode:

Historia zmian, klikalna (również nawigowalna przez Ctrl+Z oraz Ctrl+Shift+Z), trochę inspirowana PhotoShopem:

image

Zielony wpis - ostatnia zapisana na dysku zmiana.
Szary wpis - dalej od obecnej w historii (można tam przejść przez Ctrl+Shift+Z).
Podświetlony na niebiesko wpis - obecna zmiana.

Sporo czasu zajęło mi bawienie się w Linuxa, ale była to bardzo dobra inwestycja z perspektywy zdrowia - otóż ogromna odmiana! Staram się w miarę każdy dzień mieć produktywny w jakikolwiek sposób.

W międzyczasie rozszerza się nam dokumentacja projektu na http://wiki.hypersomnia.xyz/ - jednak jest to mocno work in progress i muszę ją zaktualizować po ostatnich ogromnych refactorach.

Obecnie skupiam się nad pisaniem edytora aby można było stworzyć jakąkolwiek prostą mapę do testów, oraz aby było mi łatwiej prototypować nowe mechaniki.


#24

Progress:

Okno które pozwala wykonywać operacje na hierarchii zaznaczenia:

Widać, że mamy podświedlone statyczne światło, trzy skrzynki i jedną dekorację z wędrującymi pikselkami. Przycisk “Ex” służy do usunięcia danego typu z zaznaczenia.

Widzimy też na screenie działające ikonki dla specjalnych obiektów które nie mają sprite’a ani ciał fizycznych. Jest też oznakowanie bounding boxa całego zaznaczenia.

To samo okno pozwala też na masowe ustawianie własności zaznaczonym bytom i ich typom. Jeśli wartość nie jest identyczna dla całego zaznaczenia, pole pokazuje się na pomarańczowo.

Dzięki temu udało mi się np. wysadzić kilkaset granatów jednocześnie, z poziomu edytora:

(scena zrobiła się trochę biała bo każdy wybuch daje mocne światło)

Implementacja siatki. Jest dosyć konfigurowalna.

Gęstość da się szybko zmieniać przez [ oraz ], jak w VHE.
Siatka również nie pokazuje tych gęstszych warstw przy niższym zoomie, żeby nie zapaprać całego ekranu kreskami:

Tutaj zaznaczyłem trochę podłóg i siatka snapuje mi je zgodnie z ich sumarycznym bounding boxem. Przycisk “s” toggluje snapowanie, gdyby ktoś chciał postawić coś dokładnie co do piksela.

Można też obracać całe zaznaczenie, również ze snapowaniem, tym razem do wielokrotności 15 stopni:

Duplikacja zaznaczenia przez wciśnięcie C:

Mirroring zaznaczenia. Dzięki temu można zrobić tylko jeden róg pokoju i automatycznie zrobić symetryczne odbicia. Np. startując od tego:

Wciskam Ctrl+Strzałka do góry:

A teraz Ctrl+Strzałka w prawo:

I gotowe!

Inne przykłady, np. tutaj z uwzględnieniem obrotu:


Wszystko z powyższych da się oczywiście cofać i powtarzać z historii, albo przez Ctrl+Z oraz Ctrl+Shift+Z.

Detale:

  • po wciśnięciu “f” możemy zaznaczać szybko tylko obiekty tego samego typu.
  • z centruje kamerę na zaznaczeniu, a Shift+z również resetuje na nim zoom.

#25

Cześć, dawno nic nie pisałeś, jak Ci idą prace nad grą?


#26

Czas na update! Wiem, że mało was informuję, ale dzięki temu mam czas rzeźbić ile sił w palcach.

Może zacznę od tych bardziej ekscytujących rzeczy.
Poznajcie kompletnie odnowioną postać!

Jak widać wróciłem na moment do gameplayowych rzeczy, żeby tą grę wreszcie trochę odświeżyć…

Co nowego w gameplayu:

  • Animacje wszelakie!
    • Animacja nóg.
      • Gdy stopa uderzy w grunt, jest odgrywany dźwięk w zależności od rodzaju podłogi, obecnie są trzy: laboratoryjna podłoga, grunt albo ulica.
        • Pitch i głośność dźwięku są proporcjonalne do prędkości w momencie kroku.
        • Można się skradać, po prostu trzeba nie rozwijać maksymalnej prędkości.
      • Gdy stopa uderzy w grunt, w miejscu uderzenia pojawia się dymek.
      • Animacja nóg zmienia się w zależności od kąta nachylenia twarzy do prędkości gracza.
        • Np. jeśli nachylenie przekroczy 50 stopni, to przełączamy na animację strafe’owania. To jest konfigurowalne.
    • Animacje torsu dla gracza.
      • Artysta rysuje tylko animację samego torsu.
        • Głowa, trzymany item oraz plecak są rysowane i pozycjonowane oddzielnie przez grę! Wszystko wystarczy narysować raz.
        • Zauważcie na filmiku że głowę często widać nad trzymaną bronią.
      • Animacja torsu zmienia się w zależności od tego czy idziemy z niczym, czy z karabinem, czy z pistoletem, czy akimbo.
    • Animacja dla broni podczas strzelania.
      • Rozskrzydlająca się lufa podczas strzelania? Co byś nie chciał!
  • Udźwiękowienie wszelakie! Dodano dźwięki dla:
    • Podnoszenia itemów.
    • Chowania itemów do plecaka.
    • Wyciągania itemów do rąk - każdy ma swój dźwięk.
    • Ubierania plecaka - każdy ma swój dźwięk.
  • Prosty efekt cząsteczkowy przy podnoszeniu itemów.
  • Parę nowych broni do zestawu testowego.

Co nowego w edytorze:

Do wspomnianych animacji ustawiać offsety dla itemów, dla poszczególnych klatek:

Na podobnej zasadzie dodałem kontrolkę do wybierania kolorów dla neon map:

A tutaj ustawianie offsetu dla lufy broni:

Bardziej techniczne:

Edytor potrafi już zrobić dużo więcej rzeczy!

Masywny remont edytora właściwości.

Po zaznaczeniu na scenie można filtrować to zaznaczenie a potem zaznaczać checkboxami które byty (lub typy bytów) chcemy masowo modyfikować.

Działa import obrazków i dźwięków z dysku, automatyczny - gdy dla rodzaju entita wybierzesz obrazek którego nie ma na dysku, zostaje dodany do listy i śledzony.

Jest też edycja właściwości animacji oraz efektów cząsteczkowych.

Misc:

Asynchroniczne ładowanie atlasu oraz dźwięków!
Gra nie czeka z pokazaniem czegoś na ekranie aż zasoby się wczytają. Przez pierwszy ułamek sekundy po odpaleniu gra już wygląda tak:

…czyli mamy kolory zamiast tekstur, a zaraz potem tak:

Dzięki temu operacje w edytorze które muszą przebudować atlas - np. tuningowanie neon map albo dodanie nowego obrazka - nie freezują nam aplikacji i możemy swobodnie przesuwać slidery albo przemieszczać się w historii. Później, ten sam feature pozwoli nam na implementację dużego, ciągłego świata.

Przeładowywanie atlasu odbywa się również wielowątkowo, tj. mamy kilka worker threadów które równolegle dekodują pliki .png i przerysowują ją na dużą teksturę atlasu.

Jak byłem przy atlasach, to przepisałem też kompletnie swoją bibliotekę do pakowania prostokątów.
Jest o WIELE wydajniejsza, zobaczcie README:

Praca ciągle wre!


#27

Wygląda bardzo fajnie :smiley:
Intrygują mnie dwie rzeczy:

  • efekty dzwiękowe robisz sam? Czy znalazłeś jakieś fajne miejsce gdzie można znaleźć coś ciekawego?
  • jak wygląda aktualna architektura serwera? Idziesz już w mmo? Czy małe szybkie mecze?

#28

Hej @ByerN! Dzięki za dobre słowa :blush:
Wszystkie dźwięki które słyszysz w grze pochodzą z freesound.org - wybieram tylko te które są w domenie publicznej, ale można w ten sposób znaleźć zaskakująco dobre dźwięki! Tutaj jest lista wszystkich ściągniętych przeze mnie dźwięków (chociaż niektóre na liście mogą być już nieużywane):

https://freesound.org/people/Hypernet/downloaded_sounds/

Jedyne co robię z nimi sam, to kroję w Audacity jeśli potrzebuję tylko fragmentu, a czasami trochę equalizuję i poprawiam pitch.

Co do networkingu:

Wcześniejsze wersje, takie sprzed lat, udawało mi się odpalać testowo przez sieć z paroma graczami, jednak od tamtej pory gra przeszła kilka kompletnych remontów… zatem architektury serwera, można powiedzieć że na razie nie ma :grin: Jednak, gra jest pisana od podstaw z myślą o kompletnym determinizmie - np. filmik o granatach na YT powstał przez nagranie odtworzenia rozgrywki - potem to komentowałem - nie grałem nagrywając jednocześnie. Dzięki temu że gra jest odtwarzalna z precyzją do bajta, kiedyś udało się zrobić testowy multiplayer przez sieć i mam nadzieję uda się jeszcze raz, już na dobre.

Etap areny do szybkich meczy jest jeszcze przed nami i to mój największy priorytet - zatem MMO to nadal bardzo odległa perspektywa. Tak czy siak, jak będzie się dało pykać przez sieć to na pewno będziemy trąbić o tym!


#29

Nowy filmik!

Co nowego:

  • Podziemne akwarium!
  • Rykoszety z efektami dźwiękowymi/cząsteczkowymi.
  • Odłamki pocisków.
  • Dźwięki rozbicia pocisków na poszczególnych materiałach.

#30

Wyglada to naprawde super… :wink: nie potrzebujesz pomocy w sprawie muzyki? :slight_smile:


#31

Hej, fajnie że Ci się podoba! :smiley:
Muzyka jest na razie na odległym planie, mam wrażenie że jak gra się w bardzo szybkie gry na multi to muzyka raczej rozprasza - albo jak już to się załącza swoją ulubioną - a sam zawsze wyłączałem muzykę do CS:GO żeby skupić się na komunikacji i fragowaniu. Jeśli kiedyś przyjdzie moment że będę robił singla, a do tego jeszcze daleko, to mam na oku swojego wymarzonego artystę którego będę prosił o pozwolenie użycia.


#32

Wygląda super :smiley: Ma coś w sobie z Hotline Miami jeśli chodzi o dynamikę :smiley:


#33

Nowy filmik:

Co nowego:

  • Mechanika bomby.
    • Plantowanie i defusowanie.
      • Aby plantować i defusować, trzeba stać w miejscu. Można się obracać, ale…
      • …przy defowaniu trzeba też w miarę patrzeć się na pakę. Zasięg “widzenia” naszego przycisku do defusowania jest narysowany liniami kreskowanymi gdy go wciskamy.
    • Kaskadowe eksplozje - w sensie, że jedna po drugiej!
      • Ciała eksplozyjne są fizyczne, więc eksplozja może się rozprzestrzenić po pustych przestrzeniach dookoła.
  • Interaktywne rozszerzanie bytów w edytorze. Wystarczy wcisnąć “e” na zaznaczeniu. Zaczyna rozszerzać się krawędź (lub dwie jeśli wciśniemy “shift + e”) która jest najbliżej kursora myszki w momencie wciśnięcia. Demo:
  • Okno do filtrowania warstw renderowania w edytorze. Wyobraźmy sobie że chcemy przesunąć wszystkie wydmy w akwarium. Nie jest to proste zadanie, bo nad wydmami jest masa różnych innych obiektów, m. in. color overlay powierzchni wody, animacje kaustyk, kwiatuszki, ryby, co byś nie chciał… dlatego zrobiłem okno w którym można odfajkować rzeczy których nie chcemy zaznaczać (albo pokazywać i zaznaczać):