Meatfighter

meatfighter.com · Personal blog · on HN since 2010

Meatfighter is a personal site of programming projects, including Nintendo Tetris AI, Castlevania bots, and the ASCII Silhouettify art tool.

What HN saysHN commenters praise ASCII Silhouettify as the cleanest ASCII-art tool they have seen and point to its gallery and web version.
49HN people shared it
21linked it in comments
34stories submitted
1.3Kstory points
4 months agolast shared
2010people per year2026

Most-shared posts

  1. 1
    Applying Artificial Intelligence to Nintendo Tetris
    9 people · 105 points · first shared 2014 · 6 comments on HN
  2. 2
    The MAD Computer Program
    6 people · 77 points · first shared 2013 · 22 comments on HN
  3. 3
    Tetris Printer Algorithm
    4 people · 239 points · first shared 2013 · 15 comments on HN
  4. 4
    Project Amiga Juggler
    4 people · 13 points · first shared 2010 · 2 comments on HN
  5. 5
    ASCII Silhouettify
    3 people · 539 points · first shared 2024 · 70 comments on HN
  6. 6
    CastlevaniaBot
    3 people · 6 points · first shared 2018 · discussion on HN
  7. 7
    Castlevania III Password Algorithm
    2 people · 182 points · first shared 2020 · 31 comments on HN
  8. 8
    Turing's Maze
    2 people · 4 points · first shared 2023 · discussion on HN
  9. 9
    Puls
    2 people · first shared 2014
  10. 10
    Index
    2 people · first shared 2024
  11. 11
    Open-source browser port of Pitfall from the Atari 2600
    1 people · 92 points · first shared 2025 · 31 comments on HN
  12. 12
    J4K Retrospective
    1 people · 35 points · first shared 2018 · 3 comments on HN
  13. 13
    Encounter with the Woz (2006)
    1 people · 15 points · first shared 2023 · 1 comments on HN
  14. 14
    Weave Maze Generator
    1 people · 6 points · first shared 2024 · 1 comments on HN
  15. 15
    Tetris Is Capable of Universal Computation
    1 people · 5 points · first shared 2023 · 1 comments on HN

What HN people wrote when they linked it

crazygringo · 2026-01-17
> I don’t believe I’ve ever seen shape utilized in generated ASCII art, and I think that’s because it’s not really obvious how to consider shape when building an ASCII renderer. Not to take away from this truly amazing write-up (wow), but there's at least one generator that uses shape: https://meatfighter.com/ascii-silhouettify/ See particularly the image right above where it says "Note how the algorithm selects the largest characters that fit within the outlines of each colored region." There's also a description at the bottom of how its algorithm works, if anyone wants to compare.
x187463 · 2025-08-27
Awesome. This is the cleanest ascii-art tool I've seen, so far. To date, I've been using https://asciiflow.com/#/ and https://meatfighter.com/ascii-silhouettify/ to create input text for TerminalTextEffects to create terminal animations like the following: https://chrisbuilds.github.io/terminaltexteffects/img/changeblog_media… https://github.com/ChrisBuilds/terminaltexteffects
throwup238 · 2024-06-07
> Would love a web version that's easily usable though; as much as I live in the terminal, just too much of a mental burden installing a new package. The link is above the fold: https://meatfighter.com/ascii-silhouettify/spa/index.html#/
shagie · 2026-06-24
He was a proponent of a style of programming that was reasonable... you could reason about it and prove / demonstrate that it is doing what it should within that block of code as being correct. Imagine teaching someone BASIC or FORTRAN... IF (IA .GT. 0 .AND. IB .GT. 0 .AND. IC .GT. 0) GOTO 10 WRITE (6, 602) 602 FORMAT (42H IA, IB, AND IC MUST BE GREATER THAN ZERO.) STOP 1 10 CONTINUE Or for something more complicated... https://github.com/ArthurFerreira2/STARTREK/blob/master/startrek.bas ... and arguably, that's well structured (its not doing a GOTO into the middle of a subroutine... I think). Tangent to that source code https://meatfighter.com/startrek1971/ for a port to C# (with line numbered goto). Dijkstra's approach to programming help take software development from a craft where each woodworker did things their own way and going from one shop to another meant relearning everything to something were one could more easily reason about how an application worked by removing some of the ability to write unstructured code. You can still write it... and I'm sure you can find some code that is convoluted ("... the determined Real Programmer can write FORTRAN programs in any language." https://www.ee.torontomu.ca/~elf/hack/real-programmers.html ). Structured programming is also easier to teach. Yes, you can teach people how to write line numbered BASIC but the challenge is also teaching them discipline to not cut off their fingers when doing…
woodrowbarlow · 2023-01-09
the claim is that this is theoretically possible in stock tetris with only one modification: an infinite board (with a floor). the infinite board solves piece randomization, because you can have a "junkyard" where you dump pieces until you get the one you want. it also solves the time pressure, because blocks spawned at row inifinity will never reach the canvas until you hard-drop them. finally, it prevents rows from clearing because they have infinite width (so the game won't interfere with your construction). their concept for gates is that if you nudge a block at a certain row as it's falling, it will either shift one column over or be blocked. this page is a good visualization: https://meatfighter.com/tetromino-computer/inverter-not.html except... once you hard-drop a block in tetris, you can't nudge it. and if you don't hard-drop it, it will never reach your canvas. they kind-of hand-wave this in the section "infinite playfield". after describing the mechanics of a hard drop, they say: > A more generalized version, the semihard drop, attempts to vertically translate the piece from “row infinity” to a specified, finite row. if the fall timer can't get the block into a finite row, how would a player (without hard-dropping)? loved reading through this, though. the animations were perfect for describing the mechanism! very high-quality documentation for a fun project.
dahart · 2025-10-19
Typing in BASIC programs from magazines… brings back memories. Remember the Mad Magazine that had a program to draw Alfred E. Neumann? Here I just found it: https://meatfighter.com/mad/ That and going to the weird room at the dept. of education across from the library that kept drawers full of floppies and sifting through all the random public domain code & shareware.
m463 · 2024-09-23
dedication to create an svg version... https://meatfighter.com/mad/mad.svg
mdf · 2024-09-23
I remember, as a child, attempting to reproduce the BASIC program in one of the MAD magazine issues. Somewhere, I had made a typo, which completely screwed the output. I guessed that the tediousness of the whole exercise was part of the joke, shrugged, and moved on. Luckily, someone else succeeded: https://meatfighter.com/mad/
jgtrosh · 2023-08-14
And this article describes a simplified version of the NES Tetris randomiser. The actual one is barely distinguishable from the described one, but is technically a bit biased[0]. I made a small script to compare randomiser probabilities a couple of months ago[1], in which I wrote a vaguely readable version of the NES randomiser. [0]: https://meatfighter.com/nintendotetrisai/#Picking_Tetriminos [1]: https://pastebin.com/XumxE1tV
pncnmnp · 2023-01-29
I recently stumbled upon a blog post by Mike Birken where he describes a 2006 meeting with Steve Wozniak at a Barnes & Noble. (https://meatfighter.com/woz/) Apparently, Wozniak had played a prank in the 70s where he created a fake advertisement for Zaltair, a fictitious successor to the MITS Altair computer built around the Zilog Z80 instead of the Intel 8080. He copied some of the worst ads he could find for wording and distributed the brochures at the West Coast Computer Faire. Birken recreated the brochure and was able to get Wozniak to sign it. Interestingly, Wozniak was carrying laser-cut stainless-steel business cards, which he handed out at the Barnes & Noble event.
zero__one · 2023-01-09
From https://meatfighter.com/tetromino-computer/input-language.html > In practice, IL programs direct the agent to construct a pile near the origin that progressively grows taller and wider. That being the case, it can work with a Tetris implementation that defines “row infinity” as a finite row whose index increases as a function of the number of spawns. In such an implementation, the agent emulates a semihard drop with a finite number of soft drops.
remysharp · 2019-08-13
Hey there \o. original author of said hubba article :) Just wanted to offer some missing bits you might find interesting, specifically, the third function you don't recognise is the random function from the original Tetris on the NES. It comes from the article[0] that went through all the asm of the NES Tetris cartridge. And yup, that first one is quite quite terrible for random - it came from some of the first results in StackOverflow intentionally looking for something that was overly simple and "bad" at random. But really the article was about testing and visualising how your own random functions might be. [0]: https://meatfighter.com/nintendotetrisai/#Picking_Tetriminos
Supersaiyan_IV · 2019-06-06
If that brought a tear to your eye, you might enjoy: http://www.pouet.net/prod.php?which=53816 "Puls" by Řrřola, 256b, MS-Dos Along with this interesting explanation https://meatfighter.com/puls/ of what's happening with the "binary-search" raytracing, lattice-effect, and tricks to make it fit in 256b.
memco · 2016-01-23
Most of the Tetris versions since 2001 are theoretically able to go on forever[1]. Even the old NES version which doesn't have the same cyclic bag randomization is able to be played far enough to be considered infinite by some[2]. Your life however, has no such guarantee of fixed randomness and you might be forced into a losing situation. [1]https://tetris.wiki/Playing_forever [2]http://meatfighter.com/nintendotetrisai/
indypb · 2015-04-10
Project Amiga Juggler: http://meatfighter.com/juggler/ Step by step tutorial in Java.
userbinator · 2014-11-30
Overlapping instructions/data is something also commonly encountered in tiny demos (512b and below), e.g. http://meatfighter.com/puls/ and http://finalpatch.blogspot.ca/2014/06/dissecting-128-byte-raycaster.ht… I have no doubt that viruses of the computer kind also have made use of such techniques; and overlapping for obfuscation, not size-optimisation, is also a commonly seen trick in malware.
gus_massa · 2014-01-28
To skip the Tetris rules and read the A.I. parts, go to http://meatfighter.com/nintendotetrisai/#The_Algorithm
hi-v-rocknroll · 2024-06-07
The web version never finishes (Chromium-based browser), but the CLI version works. https://meatfighter.com/ascii-silhouettify/spa/index.html#/ Obligatory pandering: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@T@@@@L@@@@@@@@@@@Wg@@@@/@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@\@@@@L@@@@@@@@@DJ@@@@'@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@\@@@@\@@@@@@@Dj@@@@,@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@'@@@@\@@@@@@{@@@@,@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@'@@@@\@@@WJ@@@@/@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@,@@@@,@DJ@@@@/@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@\@@@@\/@@@W/@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@L@@@@@@@Pj@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@LQ@@@@PA@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@ @@@@[@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@ @@@@[@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@ @@@@[@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@ @@@@[@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@ @@@@[@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@ @@@@[@@@@@@@@@@@@@@@@@@@@@@@@g @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g …

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close