The games
maimai DX: touch zones, judgement & scoring internals
the washing machine. eight buttons around a round touchscreen, two players, infinite slides. this page is about how the thing actually works: where the sensors are, how notes get judged, and how your achievement % is computed down to the 4th decimal.
1. the physical layout#
buttons#
eight physical buttons sit on the ring around the screen, numbered 1 through 8 clockwise, starting at the top-right (just right of 12 o'clock). so:
8 1
7 2
6 3
5 4
- 1 & 8 are the top pair, 4 & 5 the bottom pair
- the gap between 8 and 1 is "12 o'clock", between 4 and 5 is "6 o'clock"
- charts are authored in this numbering, so
1-5means "from button 1 to button 5", a straight line through the centre
taps and holds on the ring can be hit with either the physical button or the touchscreen area right in front of it. most people button-hit taps and screen-hit slides; i do the same except on dense jacks where i swap to screen to save wrist travel.
touch sensor zones#
the screen isn't one big touch surface from the game's point of view. it's a set of discrete sensor zones, and every touch-based judgement (slides, TOUCH notes, screen-hit taps) is resolved per zone.
on DX there are 34 zones in five groups:
| group | count | where | used for |
|---|---|---|---|
| A1–A8 | 8 | outer ring, directly in front of each button | screen-hit taps/holds, slide endpoints, outer TOUCH notes |
| B1–B8 | 8 | inner ring, one step in from each A | slide paths, inner TOUCH notes |
| C (C1, C2) | 2 | dead centre (split into two halves) | centre TOUCH / TOUCH HOLD, slides passing through the middle |
| D1–D8 | 8 | outer ring, between buttons (D1 sits at 12 o'clock, between 8 and 1) | edge TOUCH notes, curved slides hugging the rim |
| E1–E8 | 8 | inner ring, between the B zones | TOUCH notes, wifi/fan slide paths |
rough mental picture: think of the screen as two concentric rings of 16 cells each (outer = A/D interleaved, inner = B/E interleaved) wrapped around a centre disc (C).
outer ring: D1 A1 D2 A2 D3 A3 D4 A4 D5 A5 D6 A6 D7 A7 D8 A8 (clockwise from 12)
inner ring: E1 B1 E2 B2 E3 B3 E4 B4 E5 B5 E6 B6 E7 B7 E8 B8
centre: C1 C2
- the A/B number always matches the button it's in front of
- D_n sits just counter-clockwise of A_n (D1 between A8 and A1), E_n likewise between B(n-1) and B_n (verify exact E alignment)
- pre-DX (FiNALE and older) only had A1–8, B1–8 and C; D and E arrived with the DX cab and are why DX charts can put TOUCH notes basically anywhere
why zones matter for slides#
a slide is judged as a sequence of zones you have to pass through in order. e.g. a straight 1-5 slide walks A1 → B1 → C → B5 → A5. curves, Vs, zigzags (s/z), fans (w, "wifi") and the big circle slides all compile down to zone sequences like this.
practical consequences:
- you don't have to trace the drawn line, you have to light up the zones in order. sloppy-but-correct hand paths are fine
- the game is lenient about skipping some intermediate zones (fast slides would be unplayable otherwise), but you can't skip the last one, and the timing of reaching the end is what gets judged
- wifi slides (
w) need all three end zones lit, which is why a flat palm sweep works better than a finger - a slide whose path crosses C can be "stolen" by the other hand resting in the centre. if a centre-crossing slide keeps breaking for no reason, it's usually your off-hand ghost-touching C
zone sensitivity#
the touch panel has per-zone thresholds that the game configures at boot (see IO protocols). operators can tune sensitivity in the test menu. a cab that "eats" slides or registers ghost touches near the bezel is almost always badly tuned or dirty, not your fault. report it.
2. note types#
| note | how to hit | score weight (vs tap) |
|---|---|---|
| TAP | button or A-zone | 1× |
| HOLD | hold button or A-zone for the duration | 2× |
| SLIDE | star tap (counts as a TAP) + slide track (judged separately) | track = 3× |
| TOUCH | touch the indicated zone(s) | 1× |
| TOUCH HOLD | hold the indicated zone | 2× |
| BREAK | any of the above with the break flag: tap/hold/slide/touch | 5× + bonus pool (see below) |
| EX | modifier: EX notes get a more lenient window (anything Great or better → Critical Perfect) | — |
DX-only bits: TOUCH notes, EX notes, BREAK HOLD / BREAK SLIDE / BREAK EX-TAP (FESTiVAL onwards), off-centre TOUCH HOLD (PRiSM+). STD charts don't have TOUCH or EX notes.
3. judgement#
maimai judges in frames at 60 fps (~16.67 ms each), not continuous ms. the game computes a "correct frame" for each note and grades how many frames off you were.
grades, best to worst:
- CRITICAL PERFECT (the gold one)
- PERFECT (two sub-tiers, matter for breaks)
- GREAT (three sub-tiers, matter for breaks)
- GOOD
- MISS
approximate windows for TAP (±, frames) (verify, these are from community writeups):
| grade | window |
|---|---|
| CRITICAL PERFECT | ±1 |
| PERFECT | ±2 |
| GREAT | ±3 to ±5 (three tiers) |
| GOOD | ±6 |
| MISS | beyond |
- slides are much more lenient on the early side and judged on arrival at the last zone vs the intended end time
- holds judge the head like a tap, then check you held to the end; releasing early drops the grade
- the definitive breakdown is moying's three-part "maimai判定全解" series on bilibili (part 2 = judgement, part 3 = scoring). if you only read one source, read that
the judgement offset#
there's an in-game judgement timing offset (A and B adjust slightly different things) Verify. mine is in about. change it in tiny steps and re-test on a chart you know, not on a new one.
4. achievement % (how your score is actually computed)#
this is the part that makes 100.5% possible.
the base 100%#
- count every note, weighted: TAP = 1, HOLD = 2, SLIDE track = 3, TOUCH = 1, TOUCH HOLD = 2, BREAK = 5
- the base score is 100% split across those weights
- per-judgement credit on non-break notes: CRITICAL PERFECT and PERFECT = full, GREAT = 80%, GOOD = 50%, MISS = 0
the +1% break bonus#
on top of the base, there's a 1% bonus pool split evenly across all BREAK notes. this is where the extra 1% (→ max 101.0000%) comes from:
| break judgement | base credit | bonus credit |
|---|---|---|
| CRITICAL PERFECT | full | 100% |
| PERFECT (high) | full | 75% |
| PERFECT (low) | full | 50% |
| GREAT (3 tiers) | 80% / 60% / 50% | 40% |
| GOOD | 40% | 30% |
| MISS | 0 | 0 |
(verify the great-tier base splits before coding)
consequences:
- on a break-heavy chart, a couple of non-critical breaks can cost you SSS+ even with zero greats elsewhere
- "all perfect" (AP) ≠ max score. AP+ = every note critical, = 101.0000%
- this is why break-heavy charts feel scarier than their level
ranks#
| rank | achievement ≥ |
|---|---|
| SSS+ | 100.5000% |
| SSS | 100.0000% |
| SS+ | 99.5000% |
| SS | 99.0000% |
| S+ | 98.0000% |
| S | 97.0000% |
| AAA | 94.0000% |
| AA | 90.0000% |
| A | 80.0000% |
| BBB | 75.0000% |
| BB | 70.0000% |
| B | 60.0000% |
| C | 50.0000% |
| D | < 50% |
lamps#
- combo lamp: FC (no misses, combo intact), FC+ (FC with a stricter condition on goods/greats, verify exact rule), AP (every note PERFECT or better), AP+ (every note CRITICAL PERFECT, = 101.0000%)
- sync lamp (2P sync play, and solo "sync" vs the CPU partner): FS, FS+, FDX, FDX+
DX score & stars#
separate from achievement. each note has a max DX score (3 per note: crit 3, perfect 2, great 1, good/miss 0) and your DX score ÷ max gives stars: ★1 at 85%, ★2 at 90%, ★3 at 93%, ★4 at 95%, ★5 at 97% Verify. stars are pure flex, they don't touch rating.
5. rating#
per-chart rating:
chart_rating = floor( cc × min(achv, 100.5) / 100 × rank_factor )
where cc is the chart constant (e.g. 14.7) and rank_factor comes from your rank:
| rank | factor |
|---|---|
| SSS+ | 22.4 |
| SSS | 21.6 |
| SS+ | 21.1 |
| SS | 20.8 |
| S+ | 20.3 |
| S | 20.0 |
| AAA | 16.8 |
| AA | 15.2 |
| A | 13.6 |
(lower ranks have smaller factors; irrelevant for anything i'd count.)
player rating = sum of your best 35 "old" charts (songs from previous versions) + best 15 "new" charts (songs from the current version).
rules of thumb:
- achievement is capped at 100.5 inside the formula, so SSS+ is the ceiling. 100.8% is worth exactly the same as 100.5%
- the jump from SSS (21.6) to SSS+ (22.4) on a 14.x chart is worth ~11 points. on new charts that's often the cheapest rating you'll find
- the new-15 frame resets every version, so early-version grinding on new songs is the fastest way up
example: cc 14.7, 100.5% → floor(14.7 × 1.005 × 22.4) = floor(330.93) = 330
6. misc technical notes#
- the 2P sync mechanic exists because the cab is literally two independent screens; each side has its own touch panel and button IO
- the screen is rotated per side, so mirror/rotate options in the game are cheap for them to implement
- utage charts (宴) are joke/gimmick charts, unranked, no rating. some have custom note behaviour, so don't assume anything on this page applies
- jacket art on the results screen is the fastest way for kiroku to identify the song, more reliable than OCR on JP titles
sources#
- moying, "maimai判定全解" parts 1–3 (bilibili)
- sega.bsnk.me maimai touch protocol docs (pre-DX panel)
- silentblue.remywiki.com for chart/version data
