Posts tagged games
Hacks of 2015
28 December 2015 (programming haskell idris javascript games electronics avr fpga meta)Encsé writes in his blog that one of the reasons he created a tiny CPS-based Scheme interpreter was because he realized he hasn't done any fun side projects all year. So I thought I'd make an inventory of fun hacks I've done in 2015.
Bit-fiddling
- An FPGA implementation of the Commodore PET. This is still not fully finished: although I managed to hunt down the bug mentioned at the end of the blog post, I still haven't gotten around to implementing Datasette (tape) I/O.
- Viki & I put together a prototype for an AVR-based CHIP-8 handheld. This one has no web presence yet; we're hoping to finalize the design into a PCB-based one, before releasing the schematics and the code.
- Went to a hackerspace.sg workshop/hackathon for the Fernvale platform. Not much came out of that, I think I was the only person who at least got as far as running my own code on the device (reusing the low-level bitbanging from Fernly of course). I ended up doing some lame but colourful animations on the screen that would have gotten me boo'd off the stage in a 1986 demo compo.
Games
- I wanted to do some old-school 8-bit hacking, and ended up reverse-engineering and then reimplementing in Inform 6 the classic Hungarian text adventure game Időrégész. This even got me my fifteen minutes on Hungarian retro-gaming blog IDDQD.
- I managed to convince Viki to join me in participating in MiniLD #56. We decided early on to go with only 2 keyboard keys, 4 colours, one game mechanic, and a dancing theme — so, a rhythm game! To make deployment easy, we wanted it to be playable via just a web browser, and ended up choosing Elm as our development platform. The end result, after a frantic weekend of hacking, is Two-Finger Boogie.
Talks
- I gave an introductory talk on Kansas Lava first at Haskell.SG and then again at FP-BUD while visiting friends & family back in Hungary.
- Presented McBride's seminal paper on zippers (that was sadly never published AFAIK) at Papers We Love's Singapore chapter (slides and Haskell implementation available here).
- Back in October, the self-interpreting in Fω paper started making huge waves in PLT circles. I was only three pages in when I knew I had to present it at Papers We Love. The eventual talk took a couple weeks to prepare for, but it was worth it because it went really well.
Functional programming
- Fixed a long-standing bug in MetaFun, the "Haskell"-to-C++ template metaprogram compiler: patterns in function definitions are now tried for matching in the correct order.
- Wrote a Bison summary parser that a co-worker wanted to use to generate exhaustive test cases for Bison-generated parsers. That project ended up not going anywhere as far as I know.
- If you use every GHC extension and then some, you can write a fairly nifty untyped-to-typed embedding of STLC that is almost as nice as doing it in a proper dependently typed language!
Stack Overflow highlights
Some of the answers I wrote this year on Stack Overflow required me to learn just enough of something new to be able to answer the question:
- Learned just enough about Uniplate to figure out how to do out-of-band code generation.
- Learned just enough about Persistent to figure out how entity keys are represented on SQL database backends.
- Learned just enough about Spock to figure out how to store state between handler invocations (spoiler alert: it's horrible).
- Learned just enough about data-reify to figure out how to observe sharing in a graph
- Learned just enough about Pipes to figure out not just how to generalize runEffect, but also a way to get notified about the end of the input.
- Learned just enough about Accelerate to figure out marshalling of Arrays.
- Learned just enough about Template Haskell to figure out how to create and use custom annotations. OK, so maybe this isn't strictly true, as Template Haskell is something I've known already, but the annotations stuff was definitely new.
- Learned just enough about Euterpea, and the Karplus-Strong algorithm, to figure out how to synthesize a plucked string-like sound out of thin air and white noise.
- Learned just enough about GHCJS to figure out how unboxed Vectors can be efficiently marshalled to Javascript.
- Learned just enough about GHC's RULES facility to figure out how to wrangle it to submission when rewriting overloaded functions.
- Learned just enough about LLVM and GHC's run-time system to figure out how to present handwritten LLVM assembly to GHC as a prim-op.
Then, there were those where it turned out there was a bug to be found by scratching the surface of the question deep enough:
- I've found a bug in Idris's typechecker in the face of typeclass polymorphism
- Even though Tardis and rev-state should be mostly the same code (and they are even written by the same developer!), the latter's MonadFix instance had a one-character, fatal flaw.
Then there were the answers that were just too much fun to write:
- A small romp in integer arithmetic to implement rational addition in Agda
- Reimplementing Parsec in Idris because I was too lazy to look into Lightyear.
- What is the codensity-like representation of MonadPlus? This paper answers the question by wonderfully building up a generalization of DList and Codensity for something which is almost MonadPlus. I ended up writing a summary of the paper.
- Having worked on GHC two years ago to implement pattern synonyms, with the understanding of GHC's type checker internals still fresh in my mind, I was just the right person to explain the GHC code base's usage of the word zonking.
All in all, it seems this has been quite a productive year for me out of the office, even if you exclude the Stack Overflow part. I was actually surprised how long this list was while compiling it for this blog post. Maybe I should write a list like this every year from now...
Időrégész 2015
5 June 2015 (programming retro c64 games)Amikor már megvolt a C64-ünk, megkaptam egyszerre az LSI-féle 1001 játék sorozat első három részét anyukáméktól (ez úgy '89 körül lehetett), azt hiszem a negyedik-ötödik rész később jelent meg. Annyira nem voltam a scene-ben, hogy azt sem tudtam, hogy van olyan, hogy scene. Az én scene-em az a pár általános iskolai osztálytárs volt, akinek legalább egy ZX Spectrumja volt. Szóval a lényeg, hogy ez a pár könyv volt minden kapcsolatom a C64 játékokkal. Azon a néhány játékon kívül, amik így apukám ismerősein keresztül jutottak hozzánk, a többiről csak olvasni tudtam. Persze a leírás alapján mindegyik a legjobb játéknak tűnt EVER!, és volt néhány, amit el is kezdtem BASIC-ben leprogramozni az alapján, ahogy elképzeltem; ez nyilván több oldalról is ab ovo teljes sikertelenségre volt ítélve.
A harmadik 1001 játékban volt egy végigjátszás az Időrégészről, amibe persze azonnal beleszerettem. A szöveges kalandjáték volt az egyetlen játék-műfaj, aminek a programozásában akkortájt labdába tudtam rúgni annyira, hogy valami játszható jöjjön ki belőle, és emiatt pláne úgy éreztem, hogy ez a játék megszólít engem. Ráadásul nem is tudom, hogy volt-e akkor már CoV, de az biztos, hogy én nem ismertem (a Magic Candle-ös szám volt az első, amikor belefutottam, ha minden igaz, '92-ben), úgyhogy a leírás stílusa, humora is egy teljesen új világot nyitott meg előttem.
Mivel a fent ecsetelt okok miatt warez-ként esélyem se volt hozzájutni, ez lett a második játék, amit eredetiben megvettünk (az első az Impossible Mission 2 volt (kazettán), de azzal én nem sokat játszottam, azt apukám tolta — külön post lehetne, amikor az éjszaka közepén, a TV hangerejét éppen csak hallhatóra állítva ordított a figura leesés közben).
A játék csalódást nem okozott, de végigjátszani az istennek se ment, még az 1001-leírás alapján sem. Az áttörést csak 1991-ben hozta egy osztálytársam, aki rájött, hogy SPOILER ALERT a papnál még imádkozni is kell, nem elég odaadni neki az aranykeresztet vagy mit.
Most illene arról is írni, hogy akkor most ez egy jó játék volt-e. Azt gondolom, hogy most tudom a legkevésbé ezt megítélni, mert túl közelről látom (mint majd mindjárt kiderül hogy miért). Az biztos, hogy akinek annak idején volt C64-e (vagy akár +4-e!), és magyar, az ismeri az Időrégészt meg a többi Rátkai-játékot: nem véletlenül volt róla IDDQD cikk meg Index illetve Facebook csoportok. Igazi cult classic.
Egy modern Időrégész-reprodukció terve
Mostanában elkezdtek érdekelni a régi 8-bites gépek, mivel annak idején az alacsonyszintű programozásuk, meg úgy egyáltalán a felépítésük totál kimaradt nekem. Most, hogy autodidakta módon FPGA-fejlesztést tanulok, elértem oda, hogy épkézláb számítógépeket tudok építeni, amihez persze elkerülhetetlen, hogy megismerjem minden kis részletüket. Ennek egyébként egy nem várt, de kellemes mellékhatása, hogy tudom értékelni a korabeli és azóta készült demókat, amikor minden képkockát önmagában is lehetetlennek tűnik előállítani a C64-en.
Szóval kitaláltam, hogy kipróbálnám egy játék teljes visszafejtését, mivel ilyesmit sose csináltam még. Egy ilyen nem-realtime, nem-grafikus játék, mint az Időrégész, remek kezdő projektnek tűnt. Az alap-elképzelés (még május elején) az volt, hogy visszafejtem a programot annyira, hogy tudjam minden részéről hogy mit csinál, és ezalapján megértem, és minél magasabb szinten reprodukálom a működését. Hogy valami igazán örök formában rögzítsem, mindenképpen a ZMachine virtuális gépet terveztem célbavenni, mivel a modern interactive fiction-világban ez tűnik egyértelműen a bevett eszköznek már évtizedek óta.
Continue reading »Konzolok vs. HDTV-k
7 August 2008 (gadget games) (2 comments)Ahhoz képest, hogy a House és a Hogyan készül? szinte az egyetlen TV-műsorok, amiket meg szoktam nézni, nem volt nehéz rábeszélni magamat egy böhömnagy Samsung LE40A557 HDTV-re. Marha jól néz ki, még a szobát is feldobja, egy sima d-sub bemenettel monitornak is használható (nem nagyon szar pl. Top Geart nézni az egyméteres képernyőn), de volt vele gond is.
Elsősorban ugye mégiscsak játékokhoz akarom használni, úgyhogy amikor mindent összedugtam, egyik első dolgom volt betolni a Guitar Herot. Igaz, hogy hónapok óta nem játszottam vele, de azt azért nem akartam elhinni, hogy egyetlen átkozott hangot sem találok el. És itt derült ki a turpisság: a TV-nek egy csomó ideig (majd' egytized másodpercig) tart az interlace-elt PAL jelből megfelelő 1080p képet készíteni, és úgytűnik, ehhez igazítja a hangot is — csak épp a Playstation nem tud erről, ezért mire én pengetek, ő már azthiszi, rég elkéstem.
Konkrétan a Guitar Hero esetén van erre kludge, be lehet rajta állítani a TV lag-jét, de persze akkor meg az lesz iszonyú béna, hogy minden eltalált pengetés feedback-je fog késni (persze ekkor már kétszer egytized másodpercet). A jó megoldást viszont az adta, hogy feltűnt, hogy az újonan vett komponenskábellel gyönyörű, és főleg nem késik a Wii képe. Innen már csak egy rövid ugrás volt szerezni a PS2-höz is komponenskábelt, és most azzal jobb.
De ez sem tökéletes, mert sajnos játékonként változik, hogy a komponenskimeneten támogatják-e a progresszív képmódot, ígyaztán pl. a Guitar Hero most már tökéletes, a Rez olyan gyönyörű, hogy leesik a képernyőről, de mondjuk a szintén időérzékeny Mad Maestro nem tud erről a feature-ről, és így mintha a komponenskimeneten adott képére is rárakódna valamennyi késés. Azt meg nem sikerült eldöntenem, hogy a Gran Turismo 4-ben létezik-e a probléma. Sajnos minden idők legszebb PS2 játéka (és minden idők egyik legjobb játéka EVER), az Ico a Czinőnél van kölcsönben, úgyhogy nem tudtam kipróbálni, pedig emlékszem, hogy az támogatta a progresszív módot, és alig várom, hogy lássam egyméteres szépségében...
Nintendo a seggem
30 October 2007 (games) (9 comments)Kibaszott Super Paper Mario bazmeg, végigviszem a 100 szintes kurva dungeon-t ahol persze végig nem lehet save-elni, erre a végén megbasz a boss, és persze hogy game over, holnap kezdhetem előlről...
Eeez bazmeg ez a Nintendo, akik elvileg a játéktervezés meg a fun-csinálás csúcsa? Hogy egy órán keresztül nem lehet save-elni? Tán még majd vizet is melegítek, nem?!
Jönnek a letölthető Wii demók?
15 October 2007 (games) (3 comments)Az előbb vettem észre, hogy jött a Nintendotól egy üzenet a Wii-mre, hogy a Shop Channel-en keresztül letölthető a Metroid Prime 3-hoz egy preview videó. Hogy maga a videó milyen, azt még nem tudom, mert ahogy egész Európa rácuppant a témára, a Shop Channel hihetetlenül laaaaaaaaaaaasssúúúúú lett. Viszont azt érdekes lesz meglátni, hogy rámegy-e a Nintendo az X-Box Live-vonalra, lesznek-e később játszható letölthető demók.
Persze az is lehet, hogy az egésznek az lesz a vége, hogy a Nintendo csúnyán megbánja, hogy csak fél gigányi tárolókapacitást tervezett a konzolba, és egyetlen játszható demót sem fognak tudni megjelentetni, ever.
Older posts:
- 7 October 2007: Egy jó doboz bármit elad
- 8 July 2007: Goblin
- 14 June 2007: Foglalkozása: aranytestű rock-isten (4 comments)
- 17 March 2007: Interactivity and Games as an Artform (9 comments)
- 16 March 2007: Encsé leverte a köcsögöket (5 comments)
- 11 February 2007: Wii buli Warioval és Raymannel (3 comments)
- 9 February 2007: Szóval a Wii-ről (32 comments)
- 21 January 2007: Ami a Wii használati utasításából kimaradt
- 29 December 2006: Playstation retrospektív: Gran Turismo (6 comments)
- 27 August 2006: Mad Maestro