OdioGliOcr “I hate OCRs” · an MMO market reader, 2016
Everything here is real. Archived screenshots and price logs from the 2016–17 tool, re-decoded live by its logic ported to JavaScript. ·The game stays unnamed.

A 9-pixel-probe price reader

Off-the-shelf OCR choked on the client’s 9-pixel digits, so this reads each one with at most nine single-pixel probes. Pick a real screenshot and watch the original decoder run.

Step through the pipeline

Decision path

Click a digit cell above. Each question reads a single pixel of the thresholded cell; the branch order below is the original Java if/else chain, unchanged.

    Verified against the archive: this page’s port re-decoded stored screenshots into exactly the prices the original tool logged to its CSVs in 2016–17. Zero mismatches.

    From prices to verdicts

    Each night the tool aggregated every item’s history and asked one question: is the current price an outlier against its own past? Pick an item, drag the clock, and the original rules re-run: trimmed means, 5/15/20-day windows, and a verdict routed to a shopping list.

    Last observed price
    Robust mean ± σ (5–95 pct)
    Readings so far

    daily mean single reading buy verdict (instaBuy) sell verdict (instaSell)
    -- nightly report, re-run as of --

    Verified against the archive: re-run “as of 10 Feb 2017, 18:00” (the tool’s actual last run), this port reproduces the original’s output files for items: same routing, same flags, same means to the integer.

    How it worked

    A personal project from 2016, built as a student to answer a simple question: in a game with a player-driven free market and infinite resource supply, can you see mispricings before other players do? It grew into a small pipeline:

    A dozen accounts collect the screenshots

    Game accounts (Bread, Buff, Buy, Drop, Keep, Steak, Meat, Sell…) took turns searching the bazaar and saving a 77×11-pixel crop of each item’s best price, named Item_year_month_day_hour.jpg. The night logs read “ora raccolgo i prezzi”: now I collect the prices.

    A pixel reader turns crops into numbers

    No OCR library. Threshold the crop, slice it into 9 fixed digit cells, and identify each digit through a hand-built decision tree that reads at most 9 pixels per cell. Wrong-by-design for any other font, exact for this one.

    Every reading is appended to a ledger

    One CSV per item: year, month, day, hour, price. Over ~4½ months this grew to 33,292 readings across 193 items, from 80-gold herbs to 24-million-gold gear.

    Statistics, then verdicts

    Per item and night: an outlier-trimmed “robust” mean, 5/15/20-day windows, weekday and monthly means, deciles; then a rule chain turns the latest price into Compra / Vendi (buy / sell) with flags for which evidence fired, plus charts drawn per item.

    Three shopping lists come out

    Strong signals routed to instaBuy.txt and instaSell.txt, weak ones to normal.txt, the morning reading. Buy the lows, relist at the mean, keep the spread.

    The real morning list

    Entries from the archived instaBuy.txt of the final run, 10 Feb 2017; means are ordered robust / 20-day / 15-day / 5-day:

    Straight from the repo

    What it taught me

    With effectively infinite resource supply, prices anchor to habit rather than scarcity, which makes deviations unusually honest signals. Reading the market beat playing it: buy the panicked evening listing, relist at the boring daily mean. And when a general-purpose tool fails on a 10-year-old game font, four coordinates and an if/else chain can be the more rigorous engineering choice. Nobody asked for this project; that’s rather the point.