01 / WHERE TO FIND YOUR LOCATION ID
Open building-info, then read the Response.
The supplied Capital Rift Network capture gives us a more precise route than searching every map request. Selecting a building produces a request beginning building-info?ref=player%2F…; its Response JSON exposes chunkId near the top level.
- 01Open the restaurant
Select the restaurant or shop you want to optimize in Capital Rift.
- 02Open DevTools → Network
Use your browser developer tools, choose Network, then open the building again or refresh the view.
- 03Select
building-infoLook for a request beginning
building-info?ref=player%2F…and open its Response tab. - 04Copy only
chunkIdCopy the complete value in
zoom/tileX/tileYformat, including both slashes.
{
"ref": "player/03d34d26-…",
"chunkId": "15/18179/10741",
"label": "Shops",
"archetype": "commercial",
"subtype": "shop_block"
}Sanity check: the same response should describe the building you selected. If you see another building or a neighboring map request, return to the game and reopen the restaurant.
COPY THIS
15/18179/10741Do not copy the player reference, quotation marks, label, or the request URL. The generator needs only the three-number tile value.
If the request is missing
- Keep the Network panel open, return to the game, and select the building again.
- Clear the Network list or filter for
building-infoso older requests do not obscure the newest one. - Choose the request created at the moment you opened the intended restaurant, then verify its response describes that building.
The diagram above is a code-built transcription of the real player-supplied Network capture. Request names and response fields may change after a game update.
02 / LOCATION NORMALIZATION
Every location is reduced to zoom 12.
For z/x/y, the game calculates a power-of-two divisor from z − 12, floors both tile coordinates, and builds 12/x12/y12. Locations inside the same zoom-12 tile therefore share all three trends.
15/18295/10789
divisor = 2 ** (15 - 12) = 8
x12 = floor(18295 / 8) = 2286
y12 = floor(10789 / 8) = 1348
locationKey = 12/2286/1348When only coordinates are available, the fallback converts longitude and latitude to a standard zoom-12 Web Mercator tile. The raw restaurant ID remains preferred because coordinates near a tile boundary can select the wrong side.
03 / LOCAL TREND GENERATION
A name is only the headline.
The seed is exactly crtrend:1:<locationKey>. An xmur3-style hash initializes Mulberry32. Its random-call order is part of the behavior.
Three trends are created. Each gets two distinct primary axes, one additional boosted axis, and baseline values on all eight axes. Unordered primary pairs cannot repeat. Primary eligibility is derived from the ingredient table: an axis needs a known ingredient value of at least 6. Bitter currently fails that threshold, but it still receives a baseline target value.
Two locations can both show “Sour & Sweet” while differing on their other six values. Optimizing the title alone is therefore incorrect.
04 / RECIPE PROFILES
Eight weighted averages, rounded first.
A valid in-game recipe uses 2–8 known ingredients. Shares are whole numbers from 1 to 100 and total exactly 100. There is no 5% step rule. The game validator also requires one of six station values, but available station compatibility is not known.
profile[axis] = sum(ingredient[axis] * share) / sum(shares)
profile[axis] = Math.round(profile[axis] * 100) / 100The rounded profile—not the unrounded intermediate value—is used for match calculation.
05 / MATCH & POPULARITY
All eight errors matter.
distance = sum(abs(recipeProfile[axis] - trendTarget[axis]))
match = clamp(1 - distance / 28, 0, 1)
uiMatchPercent = Math.round(match * 100)
popularityMultiplier = 1 + 0.25 * clamp(match, 0, 1) ** 1.6The overall popularity bonus uses the best match across the three local trends. The exact score ranks recommendations even when two recipes round to the same integer in the game UI.
06 / WORKED EXAMPLE
Ketchup 50% + Vinegar 50%.
For 12/2286/1348, the first target is Sour & Sweet: (5.5, 1, 9, 0.5, 1.5, 5, 0, 1.5).
The recipe profile is (3.5, 2, 7.5, 0.5, 1.5, 0.5, 0, 1.5). Its per-axis absolute errors sum to 9, so:
match = 1 - 9 / 28
= 0.6785714286
= 67.85714286%
game display = 68%
popularity display = +13%The same recipe displays 27% / +3% for Salty & Richness and 16% / +1% for Richness & Spice.
07 / LIMITATIONS & GAME UPDATES
Taste match is not business performance.
This tool does not model cost, inventory, supply, preparation time, station compatibility, pricing, profit, or availability. A field called recipe found in cart state represented the “Secret Recipe” upgrade, not a dish composition; restaurant menu data was empty in the inspected snapshot.
After a patch, re-check the ingredient table, recipe validation, seed version, hash and PRNG constants, eligibility threshold, formulas, and rounding. Reproducing the three known trend names should happen before any new optimization is trusted.
Source confidence: algorithms and vectors were recovered from client JavaScript; key outputs were partially confirmed in the game UI. Generated names and search recommendations are tool output, not game-provided content.
08 / FAQ
Practical answers.
Does the tool contact the game?
No. The generator, trend calculation, scoring, and search run locally in your browser.
Why do nearby restaurants show the same trends?
They can normalize to the same zoom-12 tile, and therefore the same seed.
Is the first recipe globally optimal?
No global claim is made. All two-ingredient recipes are checked exhaustively; larger mixes are refined deterministically and labeled best found.
Why does my in-game number differ after an update?
The developer may have changed an ingredient vector, seed version, generation constant, or scoring rule. Verify the model version and re-check the known fixture.