← Devlog
v0.4.6-pre-alpha

Ultraviolet v0.4.6-pre-alpha: nadrobienie zaległości i dwa bugi ruchu

Dawno nie było posta tutaj. v0.3.7 to ostatni build wypchnięty na itch; od tego czasu osiem wersji, żadna tu nie wylądowała — ten build nadrobi wszystko, potem wejdzie w to, co naprawdę zainspirowało ten post.

Co cię ominęło, jednym rzutem

  • v0.3.8 — głębsza mapa. Misje są wyższe (~6 pięter / ~42 pokoje zamiast starego korytarza ~4×13). Gwarantowana kaplica przed drzwiami bossa leczy raz 50% max HP — run wreszcie ma zawór bezpieczeństwa.
  • v0.3.9 — prawdziwy moveset. Jeden przycisk ataku, cztery różne hity z kontekstu: hit 1 ≠ hit 2, rising slash (↑+attack), stomp (↓+attack w powietrzu, szybki spadek + krótki recovery), dash-attack follow-through.
  • v0.4.0 — wrogowie do ciebie dochodzą. Wróg, który cię widzi, może przeskoczyć lukę, wskoczyć na stopień albo spaść w dół, zamiast stać przy każdym krawężniku wyższym niż chodnik.
  • v0.4.1 — pass sprzątania. Celowo bez zmiany gameplayu, jak v0.3.7.
  • v0.4.2 — tłum zachowuje się jak jeden. Sojusznicy stoją w kolejce zamiast na jednym pikselu, łucznik bez strzału okrąża, żeby go dostać, albo wchodzi w bójkę zamiast cofać się w nieskończoność.
  • v0.4.3 — AI przestało robić głupoty. Gonzący wróg nie zamarza w pościgu, gdy jego home tile wypada ze streaming window; powtarzanie tego samego ataku jest hamowane; łucznicy szukają pozycji do 240 px dalej, nie tylko tuż za stopami.
  • v0.4.4 — konsola debug. Backtick otwiera konsolę testera: live tail logu silnika, garść cheatów (god, heal, kill_all, give_relic, give_tattoo, tp, timescale) i komenda report, która wrzuca log + dump wersji/sceny/seed/HP do pliku i otwiera go w menedżerze plików — przeciągnij prosto w raport buga.
  • v0.4.5 — sloty zapisu. Trzy sloty, wybór przy „Start”; gra auto-zapisuje przy wejściu do każdego pokoju, przy wyjściu i przy zamknięciu okna. Kontynuuj w menu głównym wraca od razu do ostatniego zapisu, a pauza dostała Powrót do huba na dobrowolne przerwanie runu bez zamykania gry. Zapisany run niesie całą rozwiązaną mapę, nie tylko seed, więc przeżywa aktualizacje puli pokoi bez dryfu.

Jeśli grałeś na v0.3.7, to ta luka. Pełne detale są w komentarzach na itch albo changelogu w repo.


v0.4.6 — właściwy temat tego posta

Dwa raporty z playtestu, oba o dotykaniu rzeczy, które nie powinny cię łapać.

Chwyt krawędzi czytał się jak slide po ścianie

Sięganie krawędzi w biegu, trzymając w jej stronę, często kończyło się… slide’em. Nie spadnięciem obok — przyklejeniem do ściany i powolnym zejściem, bez chwytu, nawet gdy celowałeś w krawędź.

Przyczyna: wall-slide i chwyt krawędzi dzielą jedną klatkę logiki, a wall-slide obraca postać wizualnie od ściany (żeby sprite czytał się dobrze). Chwyt krawędzi używał tej samej wartości „w którą stronę patrzę” do sprawdzenia kierunku krawędzi — więc w momencie startu slide check patrzył w złą stronę, co klatkę, przez cały kontakt. To nie near-miss ani okno timingu; po rozpoczęciu slide chwyt w tym samym ruchu nigdy nie miał wpaść. Teraz chwyt patrzy w kierunek, w którym faktycznie wciskasz albo idziesz, nie w (ewentualnie odwrócone) facing sprite’a — a facing ustawia się explicite w chwili chwytu, żeby poza wiszenia nie dziedziczyło po slide.

Można było odbijać się od wrogów jak od ściany

Gracz, każdy wróg i poziom dzielą jedną warstwę fizyki — celowo, dzięki temu ciała się blokują. Ale wall-slide i wall-jump czytały „dotykam czegoś solidnego” jako „dotykam ściany”, bez sprawdzenia czego. Stań obok wroga i wciskaj się w niego w powietrzu — slide’owałeś po jego ciele i mógłeś odbić się jak od ściany. Wall-slide i wall-jump to narzędzie traversala poziomu, nie sposób na odbicie od człowieka.

Naprawione pytaniem, czy to, o co jesteś oprarty, to faktycznie część poziomu (ten sam check, którego system krawędzi już używał, żeby chwytna krawędź była geometrią poziomu, nigdy ciałem) — wróg przy ścianie, po której slide’ujesz, nietknięty, ale wróg sam nie zachowuje się już jak ściana.

Oba wyszły z dwóch linii na bieżącej liście todo, nie z polowania na bugi — raport był na tyle konkretny, że poszedł prosto do przyczyny. Oba mają test regresji, który pada na starym kodzie i przechodzi na fixie, i oba potwierdzone ręcznie w edytorze przed wypchnięciem buildu.


Sterowanie

Kształt bez zmian od v0.3.7, plus moveset i stomp z v0.3.9.

AkcjaKlawiaturaPad (Xbox)
Ruch← / →lewy stick / d-pad
Skok (podwójny)Spacja / EnterA
Wall-slide / wall-jumpw powietrzu trzymaj w stronę ściany · skok = odbicieto samo
Melee (combo 3-hit)A — tapRB
Atak ładowanyA — trzymaj ≥ ~0.5 sRB — trzymaj
Wariant trzeciego hitutrzymaj ↓ ciężki · nic = szybki · ↑ = launcherto samo
Stomp↓ + attack w powietrzuto samo
Blok / paradaD — trzymaj / tap tuż przed hitemLT
Ripostaautomatyczna — hit w 0,4 s po parady, ten sam wrógto samo
Unik (dash, i-frames)ShiftLB
Strzał (8 kierunków)SRT
PrzeładowanieR (auto przy pustym)Y
Interakcja / wyrzucenieEX
Patrz w górę / dółtrzymaj ↑ / ↓ (stojąc)to samo
Pełna mapa + podgląd (trzymaj)TabSelect
Pauza / menuEscStart
Chwyt krawędziautomatyczny; wspinaczka = skok / ↑, zejście = ↓to samo
Konsola debug~ (backtick)—

Jak uruchomić

SystemPlikUwagi
Windowsultraviolet.exe (+ ultraviolet.pck obok)SmartScreen — „Więcej informacji” → „Uruchom mimo to”.
Linuxultraviolet.x86_64 (+ .pck obok)chmod +x, potem ./ultraviolet.x86_64.
macOSUltraviolet.appNiepodpisane: prawy przycisk → Otwórz → potwierdź, albo xattr -dr com.apple.quarantine Ultraviolet.app.

Wyjście: Esc w menu głównym zamyka grę. W runie Esc otwiera pauzę — stamtąd wyjście albo powrót do huba. Kontynuuj w menu głównym wznawia ostatni zapis.


Wciąż pre-alpha — czego nie ma

  • Placeholderowa grafika. Gracz ma zastępczy pakiet sprite’ów; wrogowie, teren i UI to kolorowe prostokąty.
  • Placeholderowy dźwięk. Chropowate zastępstwa, dwa utwory w pętli.
  • Brak ciągłego zapisu. Auto-zapis przy wejściu do pokoju, przybyciu do huba, wyjściu i zamknięciu okna — twardy crash wciąż gubi wszystko od ostatniego z tych momentów.
  • Balans niedostrojony — obrażenia, HP wrogów, koszty, rampa wrogów na pokój.
  • Brak ekranu śmierci, licznika prób, meta-progresji poza tatuażami i pierwszą duszą od Legionu.

Jak zgłaszać feedback

Najszybsza ścieżka to konsola debug: ~, wpisz report, dostaniesz log + plik wersja/scena/seed/HP prosto w menedżerze plików — przeciągnij w komentarz albo wiadomość.

BŁĄD — co, gdzie, jak odtworzyć, platforma. Dump report pokrywa większość automatycznie.

ODCZUCIA

  • Dwa fixy wyżej — czy chwyt krawędzi jest teraz pewny, czy są miejsca, gdzie wciąż slide zamiast chwytu? Czy coś wciąż odbija się od czegoś, co nie powinno być solidne?
  • Zapis/wznowienie — Kontynuuj stawia tam, gdzie oczekujesz? Run, który wrócił w złe miejsce?
  • Konsola — przydatna, czy bałagan? Cheat, którego brakuje?
  • Wejście → boss — da się w ogóle? Gdzie run się rozpada?

Zostaw feedback w komentarzach pod grą albo tym postem.

Dzięki za granie w coś, co wciąż jest głównie prostokątami.

— SolarNine · v0.4.6-pre-alpha