So, have I been playing Mahjong? Yeah. I've also been working on a little app to help with drilling specific situations, which has been fun. Let's talk motivation.
I tried a lot of things to stoke motivation or routine, but nothing really worked. One game a day? Blocking everything else? Playing on guest accounts so the rank doesn't exist to begin with? Talking about it? Not talking about it? Nope.
In the end, a combination of two things got me there.
One, changing my schedule. Having a time set for something led to me looking at the calendar, seeing it later, and going "no need to do it now, then." At the same time, the biggest obstacle to me following a schedule is how I have to break my flow to do the scheduled thing. If I'm reading, I don't want to put the book down to go exercise or meditate or something.
So, I changed it to more of a to-do list, though a little more complex than that. Now instead of having set times, I do things at natural breaks. For example, if I break my flow to go to the bathroom, I can then fit in something else along the way. Exercise or meditate or something before returning to the computer.
Of course, mahjong is done at the computer, so it doesn't work quite as cleanly. But not having it scheduled means I can open tenhou whenever I feel like it, without the looming calendar entry enticing me to put it off.
For the second thing, I made a studying app. Or rather, I directed Claude to do it. It's 2026.
A couple weeks ago, Day[9] posted a video titled "How to Improve at Video Games." To summarize:
- Play a lot. Huge volume and experimentation. You need a lot of data before you can make hypotheses.
- Blended, interleaved practice:
- Copying. Trying to match what good players do as closely as possible. "Not to find truth, to find more data."
- Pick one thing and drill it extensively.
- Do complete improvisational sessions. Little planning, wide variation, messing around, still trying to win but using your judgement.
- Something fun within the game that isn't the real game. (Turbo in DotA, 2v2v2v2 big game hunters in Starcraft, etc)
- Use all of the above to generate your questions. If you start with the questions, you don't have enough data to understand the answers. With data, you can make specific, targetted questions.
This is pretty similar to traditional chess practice theory. Some of these are easier than others in Mahjong. Of particular note is the "pick one thing and drill it extensively" part. You could drill something like south 4 mangan tsumo requirements by trying to make a mangan every hand, but how would you drill something like push/pull at 1-shanten? Pretend someone just called riichi whenever you reach 1-shanten? Maybe. Dora pon hands? Pretend a pair you start with is dora? A little off, since the other players will discard it much easier than a normal dora.
This pretend play is okay, but it's also very hard to validate with things like NAGA.
What I want is more like a poker trainer, where you can pick a specific situation and go through all sorts of variations.
So, I'm focusing on the first point, "play a lot," and storing away NAGA judgements in a wide variety of situations to review later. Part one of my little app is a tampermonkey script that runs on NAGA pages and lets me log them with one button press:
When the capture button is clicked, it turns off the NAGA evaluations, saves the image, turns them on, and saves another image, alongside a metadata file with things like the score, shanten, and so on. Capturing the above moment logs this "question" card:
These have transparent backgrounds. If it's black it's from blogger's resizing. And this "answer" card:
Then, I have a local app where I can filter these cards into specific situations:
So, I could filter for things like "push/pull as dealer," or "South 4 cards where any win improves my placement," or "calling when the hand has 2 dora." For niche situations, I can also save cards from my opponents to increase the harvest for things like South 4. Once I have enough data collected, anyway. They're then presented similar to a flashcard:
Then a grade is given. Correct if all the snakes agree, wrong if none do, plausible if at least one does where you can then decide for yourself if it's right:
Both the notes on the guess and the explanations are searchable, so I can later filter for cards that mention specific things, like "chanta" or "sakigiri." Filtering by cards I got wrong is also possible.
I vaguely remember there being a website like this... But having it work exactly how I want appeals.
Multiple card types, too. Since the danger ratings are in the metadata, I can make cards like this:
These cards are pretty hard. I'll put the answer at the bottom if you want to try ordering it yourself before scrolling.
One metadata can be used for multiple cards, so that question above could also be a push/pull style card (where NAGA wants the 6s to be discarded).
This finally gives me some motivation outside of the rank points. Like an incremental game, capturing more cards is rewarding.
Since these cards are just local files, if multiple people used this, they could share their captures. But I'd have quite a bit of work to do first. Making it easy to use, verifying the security so people can't send malicious cards, etc. I'm still adding more things and changing how things work as I use it.
Vibe coding is great for making things that suit your specific case. It's not so great for supporting something lots of people use.
I wonder what non-coders think vibe coding is. It's essentially being a manager for an AI employee. You guide the AI and it does (almost) all the coding. Claude vaguely knows riichi, but not well enough to just say something like "make me a trainer." Each feature is something I want, where I propose it, Claude proposes a solution, I correct things, it writes the code, I suggest polish, etc... Here are my messages for a small feature:
[2026-08-27 22:57:46]
Add a filter to the drills for points ahead/behind. For example so people can do, 4th while behind third by >8000. 1st while ahead by >12000. For ahead, compare it to the score beneath them (1st>2nd, 2nd>3rd, etc), and vice versa for behind. Probably better to have 1st and "behind" incompatible, as well as 4th and "ahead."
[2026-08-27 23:02:30]
They should be stepped by 100. 7900, 7700, and 6500 are useful breakpoints. Other than that sounds good, write the code.
[2026-08-27 23:18:50]
Probably good to only send the request when the field is released if possible. Or maybe just a longer debounce, like a few seconds long. A few chips could be useful here. "Mangan Tsumo Needed" for being behind by 8100~9900, "Any Mangan" for being behind by 6600~7900, "Any Win" for being behind by 1000 or less, "Safe from Mangan" for 12100 ahead.
[2026-08-27 23:25:02]
It's a bit mismatched with the others. They do [Titles, presets] on one row, then the options beneath them. Probably more sensible to match that
From the timestamps, you can see that this took about half an hour, and I could do other things while Claude worked. I didn't have to think about css or SQL queries or how the data was formatted. Much more convenient.
On the topic of NAGA, I've always liked Kagashi's playstyle. I feel like it matches mine best. But I always match more with Nishiki on the analysis...
I suppose Nishiki is closer to how I play, and Kagashi is closer to how I want to play? I wonder if I should try to align more with Nishiki or fix the gaps between me and Kagashi. They're often incompatible, so aligning with one gives bad play marks for the other. Just look at the first image here. Nishiki likes both 5m and 9s, Kagashi doesn't consider it, Omega wants 5m.
I love calling, so the snake that calls the most does have great appeal. Aligning with Nishiki would mean calling less. Gotta keep thinking about it...
And Kagashi is sometimes indecipherable.
Why the heck do you want 7s...
Anyway, here's the answer for the defense question:
2s and 8p are both 2/8 suji, but 2s is also riichi matagi. 7p is non-suji but made safer due to the 5p sakigiri (cutting from 577p or 556p early would be strange), while 9p is urasuji (578p, cut 5p). 3p is the other side of the sakigiri, but it's dora. I don't remember why I put 7m safer than 8m.
Now, time to go collect more screenshots.
No comments:
Post a Comment