Tetris na NES-a pozamiatany, ostateczne wyzwanie osiągnięte — przekręcono licznik poziomu (uint8
), a więc osiągnięto długo wyczekiwany ”rebirth screen”, do którego do tej pory jedynie AI potrafiła dotrzeć. Trzeba będzie wymyślić jakieś nowe wyzwanie — znowu. ;)
Zainspirowany tematem od @tBane retro gierek ciekawostka:
https://pcmod.pl/quandoom-czyli-doom-na-komputery-kwantowe.html
Doom na komputerze kwantowym. Szacun dla autora
Luke Martimer, naukowiec w Instytucie Nauk Fotonicznych w Barcelonie stworzył Quandoom, czyli Dooma na komputery kwantowe.
https://pcmod.pl/quandoom-czyli-doom-na-komputery-kwantowe.html@superdurszlak: Wygląda na to, że sama gra to zaledwie ok. 10k, na początku myślałem, że bufor ekranu jest zrobiony na tradycyjnej pamięci, a procesor kwantowy po prostu emituje obraz, ale oczywiście mogę się mylić. Skoro jest, jak jest, to starszy Wolf3D, czy jeszcze prostsza gra, jaką jest np. Mario Bros lub Tetris będzie podobnie wymagająca, o ile zrealizowana w podobnej rozdzielczości.
Zupełnie przez przypadek trafiłem na to , ktoś zrobił wersję tej gry w trybie tekstowym. Jak dobrze liczę, jeden znak to 16 bitów, bo 8 bitów na znak, 4 bity pierwszego kolory i 4 bity drugiego koloru. W czasie, gdy rozdzielczość 320x200x1 wymaga 64k bitów, rozdzielczość 40x25x16 wymaga tylko 16k bitów. A jak się ograniczy zestaw znaków i kolorów, to jeszcze mniej. Ciekawe, jaki komputer kwantowy jest potrzebny, żeby uruchomić wersję Doom z tego filmiku.
Pograłem dziś w Fairtrisa, coby nie zdziadzieć do reszty ”w te klocki”. No i tak wyszło, że trzy rekordy padły dziś, jeśli chodzi o region JAPAN
i randomizer BALANCED
:
1.438.619
,252
i poziom 31
, przy starcie z poziomu 18
.Zdaje się, że nadal trzymam niezłą formę.
@Tevi: to jest Tetris, klon wersji na NES-a, tyle że nie wymaga emulatora, ma naprawione sterowanie i kupę innych, dodatkowych funkcji.
Mera 400 aka polski komputer rodem z PRLu.
Niedawno przez przypadek trafiłem na profil GH tego oto Pana https://github.com/jakubfi oraz prowadzoną przez niego stronę https://mera400.pl/ i kanał na YT
Wielkie kudos za to że ktoś nadal robi takie projekty.
jakubfi has 26 repositories available. Follow their code on GitHub.
https://github.com/jakubfiPrędkość procesora MERY-400 nie jest opisana częstotliwością zegara, ponieważ go nie posiada. Jego architektura jest asynchronicznie sekwencyjna, a jedynym miernikiem wydajności jest liczba rozkazów wykonywanych w jednostce czasu. Wynosi ona przeciętnie około 400tys. operacji/sekundę i zależy nie tylko od tego jakie instrukcje są w danej chwili wykonywane, ale również od parametrów układów scalonych zastosowanych do wyprodukowania danego egzemplarza.
I jeszcze to - Nazwa systemu operacyjnego zrodziła się, kiedy autorzy opisali jego budowę na seminarium w Instytucie Maszyn Matematycznych. Koncepcja spotkała się tam z mocnym sceptycyzmem i konkluzją, że na takich zasadach system nie może działać. Mimo to w laboratorium autorów już działał, więc najwyraźniej było w tym oszustwo - stąd CROOK.
:D
W ostatnim czasie dość mocno użerałem się z moim chińskim kontrolerem, który nierzadko oszukiwał mnie, psując mi tetrisowe gry. Jego jakość nie jest rewelacyjna, ale głównym problemem było to, że raz na jakiś czas, wciśnięcie danego przycisku nie było rejestrowane — gumowy bumper uginał się, ale jakimś cudem węglowy jego styk nie zamykał obwodu. Głównie chodzi o D-Pad, albowiem jego precyzyjne działanie jest kluczowe w przypadku Tetrisa. Niestety chińskie kontrolery mają niemiłosiernie twarde gumowe bumpery, co powoduje, że palce męczą się szybciej niż w przypadku oryginalnych, nintendowskich kontrolerów, w których bumpery są mięciutkie. W dodatku ich trwałość nie jest wysoka.
Wpadłem więc na pomysł, aby przerobić ten kontroler i pozbyć się problemu z nierejestrowaniem wciśnięć przycisków. Rozebrałem kontroler, pomierzyłem, pokombinowałem i doszedłem do wniosku, że jest opcja zamontować w nim przełączniki wykorzystywane powszechnie w komputerowych myszkach. Są one małe, precyzyjne, zbudowane z dwóch miękkich blaszek zamykających obwód (czyli mechaniczne), do tego ich żywotność jest solidna. A że miałem ich kilkadziesiąt (z rozbiórek różnych staroci), to nie potrzebowałem niczego więcej prócz chęci i czasu.
Płytka sterująca jest wybitnie prostej konstrukcji — scalak zalany lakierem, jedna duża pętla GND
i osiem ścieżek dla każdego pola każdego przycisku. Układ ma druk jednostronny, płytka jest jednowarstwowa, więc spokojnie można robić co dusza zapragnie — ciąć, wiercić itd. Przełączniki nie są małe, ale bez problemu dało się je rozmieścić w taki sposób, aby po pierwsze wyciąć pola zamykane przez styk bumperów, a po drugie, aby przełączniki pomieściły się w obudowie.
Pierwsze co należało zrobić po wymierzeniu wszystkiego, to wyciąć otwory na przełączniki. Te mają kształt prostokątny, więc postanowiłem nakleić trochę taśmy na wierzch układu, formując okienka do wycięcia. Następnie nawierciłem w każdym okienku otwór, przez który trzeba było przewlec brzeszczot piłki jubilerskiej:
A potem cóż — wyharatać okienka. Wycinać trzeba było ostrożnie, bo płytka była lekko pęknięta, a gdyby pękła całkiem, to nadawałaby się jedynie do kosza i po robocie. Otwory trzeba było wyciąć mniejsze niż przełączniki — tak z grubsza, bo później i tak należało je wyszlifować w celu wypracowania ostatecznego kształtu.
Po wycięciu wszystkich okienek, przyszedł czas na szlifowanie. Otwory powinny mieć taki kształt, aby przełączniki wchodziły pasownie oraz były rozmieszczone precyzyjnie. Tutaj precyzja była wymagana, dlatego że węglowe końcówki bumperów stanowiły elementy, które miały przyciskać mikro-przyciski w przełącznikach. Margines błędu i tak był na tyle duży, że nie trzeba było szlifować patrząc przez mikroskop.
Po wsunięciu przełączników, układ wyglądał tak:
Aby osadzić je stałe, skorzystałem z gorącego kleju, bo lepszego rozwiązania nie znalazłem. ;)
Osiem przełączników to łącznie szesnaście przewodów — za dużo, bo miejsca w obudowie nie było zbyt wiele. Postanowiłem więc, że zredukuję liczbę przewodów GND
z ośmiu do jednego, łączącego wszystkie minusowe nóżki switchów, dzięki czemu wystarczy łącznie dziewięć kabelków. Przewód będący pętlą GND
wyszedł dość fikuśny:
Teraz wystarczyło go przylutować w dwóch miejscach ścieżki GND
i dolutować do nóżek przełączników:
Jeden z przełączników pominąłem, dlatego że kształt tego przewodu byłby zbyt skomplikowany i zajmowałby za dużo miejsca, dlatego później dorobiłem sobie osobne połączenie z tym jednym, brakującym.
Kolejnym krokiem było dolutowanie ośmiu przewodów łączących pozostałe nóżki przełączników z odpowiednimi ścieżkami. Nie można było tego zrobić byle jak, dlatego że musiało zostać miejsce na bumpery, a także na główną wiązkę przewodu USB. Do tego trzeba też było zwrócić uwagę na to, gdzie znajdują się słupki montażowe w obudowie i nie zająć przewodami miejsc dla nich przeznaczonych, bo w przeciwnym razie obudowa by się nie zamknęła. Trochę gimnastyki było.
Po przymiarce wszystko grało — bumpery mieściły się (choć wymagały docięcia), obudowa zamykała się bez problemu:
Po dokładnym przetestowaniu kontrolera, sprawdzeniu czy wszystkie elementy są dobrze rozmieszczone, czy obudowa zamyka się dobrze i przede wszystkim czy kontroler działa prawidłowo (w systemowym narzędziu do testowania i kalibracji kontrolerów, z którego korzystałem na bieżąco), przyszedł czas na ostateczne zabezpieczenie przełączników. Podczas gry zdarza się przyciski wciskać dość mocno, dlatego dołożyłem konkretną ilość gorącego kleju, tak aby mieć pewność, że podczas grania przełączniki nie odkleją się.
Pomimo tego, że wszystko wykonałem ręcznie, precyzja jest na tyle wysoka, że komfort grania jest zbliżony do stanu sprzed modyfikacji. Siła, jaką trzeba przyłożyć do wciśnięcia przycisku musi być nieco większa niż wcześniej, dlatego że oprócz ugięcia gumowego bumpera, trzeba też przezwyciężyć sztywność blaszki przełącznika. A że chińskie bumpery robione są z betonu, to całość działa trochę za twardo. :/
To mało, bo zależało mi na tym, aby grało się lepiej, dlatego przede mną jeszcze jedna modyfikacja — wymiana bumperów na elastyczne blaszki, które będą podtrzymywać krzyżak i powodować jego odbijanie (czyli robić to samo co bumper). Różnica polegać będzie na tym, że blaszka będzie miękka, więc siły trzeba będzie przyłożyć niewiele, tylko tyle, aby się ugięła i aby mikro-przycisk przełącznika zaskoczył. Po tej modyfikacji, komfort gry powinien być wysoki, tak samo jak precyzja działania kontrolera.
Ogólnie z tej roboty jestem bardzo zadowolony. Płytka co prawda wygląda jak ulepiona ze śmieci bomba wykonana w lepiance afgańskich terrorystów, ale mimo to spełnia zadanie bardzo dobrze. Teraz pozostało tylko skalibrować całość, tak aby grało się lekko i przyjemnie. Przełączniki już teraz robią niesamowitą robotę, a co będzie jak wymienię bumpery na blaszki? Dam jeszcze znać. :]
Wczoraj i dziś kilka razy przelutowywałem przełączniki, szukając odpowiednich sztuk, bo mam tylko używane, a one bywają mocno zużyte i dopiero w praniu wychodzi jak działają). Wymieniłem na miększe, ale znalazłem wadę, więc użyłem twardszych. W międzyczasie testowałem też różną głębokość ich zatopienia na płytce. Ostatecznie wybrałem w miarę twarde przełączniki, wklejone ~0.5mm niżej od płaszczyzny układu — dzięki temu nieco głębiej trzeba wciskać krzyżak i gra się lepiej.
Po drugie, użyłem starych gumek, które zostały mi z oryginalnego kontrolera Nintendo. One są znacznie miększe niż chińskie, a poza tym mają niższy skok i znacznie dłuższą żywotność od tanich podróbek. Co prawda gumki dla przycisków B
/A
mają lekko naderwane membrany, ale to nie przeszkadza, bo za otwieranie obwodów odpowiadają teraz przełączniki — gumki stanowią jedynie część roboczą, wciskającą mikro-przyciski w przełącznikach. W każdym razie teraz przyciski wymagają dużo mniejszej siły nacisku.
Po trzecie, zauważyłem, że przy zamkniętej obudowie, plastikowy krzyżak jest przyciśnięty do obudowy i bumpera, i z tego powodu ciężko się go wciskało. Aby ten problem naprawić, zeszlifowałem ze spodu krzyżaka plastikowe wypusty oraz trochę podstawy krzyżaka — łącznie z 2-2.5mm. Teraz po zamknięciu obudowy, krzyżak luźno leży na gumce i wystarczy bardzo mało siły, aby wciskać strzałki. Po złożeniu wszystkiego do kupy, krzyżak w pionie ma z milimetr luzu.
I to tyle — te trzy zmiany spowodowały, że teraz gra się lekko i przyjemnie, a myszkowe przełączniki dają większą precyzję niż chińskie gumki. W porównaniu do stanu sprzed modyfikacji, obecnie gra się rewelacyjnie. Choć to nie tak, że wersja zmodowana jest super-precyzyjna — po prostu chiński klon nie jest zbyt dobry sam w sobie. Cóż, teraz pozostało sobie uszyć bawełniane kondomy na kciuki i można atakować wypracowane do tej pory rekordy. :D
furious zrob cos takiego :) https://pl.aliexpress.com/item/32806382293.html ktos pamieta street fightera mortal kombat czy samurai shadow ? ;-)
Edytowałem wpis — dorzuciłem krótki opis drugiej części modyfikacji, czyli obniżenia wymaganej siły nacisku. Jest miodzio. ;)
Piszę sobie kod kolejnych ficzerów w Richtrisie. Tym razem na potrzeby odtwarzacza powtórek, przymierzam się do zaprogramowania funkcji pozwalającej chwytać za bieżący/następny klocek oraz przesuwać go po stosie — wszystko na potrzeby wizualnej analizy własnej gry, gdybym kiedyś chciał nagrać filmik z taką analizą.
Normalnie zapełniany stos składa się z kostek różnego koloru, wizualnie odseparowanych od siebie. Wymyśliłem, że przesuwany po stosie klocek za pomocą myszki będzie duszkiem — renderowane będzie samo jego obramowanie, dzięki czemu będzie się mocno wyróżniał od pozostałej części stosu. Naszkicowałem sobie duszki dla wszystkich rotacji wszystkich klocków, w celu wyłonienia minimalnego zbioru, który zostanie opisany enumami. Zbiór zawiera 14 różnych typów kostek (zakreślone na dole):
Teraz weź se je nazwij tak, aby nazwy enumów cokolwiek o sobie mówiły, a nie brzmiały jak śmieci pokroju tych dla kursorów, à la E
, N
, NE
, NESW
, NS
, NW
, NWSE
, S
, SE
, SW
, W
, WE
… Śmieszne, że do napisania mam jeszcze ze dwa tysiące linii kodu nagrywarki, kodera i dekodera strumieni, obsługi interfejsu itd., a utknąłem na nazewnictwie durnych enumów… :D
Ogólnie chodzi o to, że implementacja stosu (tej ramki z klockami ;)) wygląda tak, że jest to macierz obiektów przechowujących stan każdej kostki z dwustu. Jeśli stan danej kostki się zmienia, ta kostka jest przemalowywana w buforze. Dzięki takiej optymalizacji, renderowanie klatki gry jest pierońsko efektywne — w każdej klatce odmalowuje się raptem kilka kostek (tylny bufor nigdy nie jest czyszczony, a tylko zamalowuje się te fragmenty, które wymagają aktualizacji).
Czyli w dużym skrócie - wciskanie strzałki w dól nie jest wymogiem gry samej w sobie, ale po prostu w ten sposób można ominąć buga, który spowoduje wysypanie się całej gry. Dobrze rozumiem?