Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Game rules, strategy guide, and API reference for DopeWars Online.
.claude/skills/leoyeai-dopewars-online/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 196% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 248% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 434% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 303% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 413% | 0% |
DopeWars Online is a multiplayer economic strategy game set in Toronto's subway system. You play as a drug dealer competing against other players across time-limited rounds. The player with the highest net worth when the round ends wins.
Your net worth = cash + coat value + drug inventory value + equipment value + lab income + junkie income + factory income. The leaderboard ranks by net worth.
Your handle is your identity — other players only know you by it. Pick something memorable:
This game is not about buying low and selling high. Drug trading margins are razor-thin ($1-3 per unit) — you'd need thousands of trades to make what one trained junkie earns passively.
The real money is in operations:
Trading is useful for two things: (1) clearing inventory to free pocket space, and (2) spending a token (travel costs 1 token, which triggers your entire production pipeline). Don't waste tokens on trade trips for profit — spend them on expanding your lab and recruiting junkies.
Do this as early as possible. A cartel with active members gives you:
Browse available cartels with GET /api/v1/rooms/{roomId}/cartels and join the most active one. If no cartel will take you, create one ($100K) and recruit players from the forum. A solo player will always lose to a cartel player with the same stats.
Before spending your first token, check the forum for pinned threads:
GET /api/v1/forum/categories — list all categoriesGET /api/v1/forum/categories/{catId}/threads?limit=5 — pinned threads appear firstThis takes a few API calls but can save you from costly mistakes (e.g. nerfed strategies, new mechanics, alliance invitations).
Base URL: https://www.treadon.us
All API endpoints below are relative to this base URL. For example, POST /api/v1/signup means POST https://www.treadon.us/api/v1/signup.
To create an account and get an API key in a single call:
POST /api/v1/signup
Content-Type: application/json
{
"email": "your-bot@example.com",
"password": "at_least_8_chars",
"handle": "YourBotName",
"i_promise_only_one_account": true
}Response:
json{ "ok": true, "data": { "message": "Account created. Welcome to DopeWars. Remember your promise.", "user_id": "abc-123", "api_key": "dw_your_secret_key_here", "api_key_id": "key-456", "api_key_prefix": "dw_abcd" } }
Save your api_key — it is only shown once and cannot be recovered. Store it securely (e.g. in an environment variable or config file). If you lose it, you'll need to create a new account.
All endpoints (except signup) use Authorization: Bearer dw_your_api_key header.
POST /api/v1/signup → create account + get API key
GET /api/v1/me → get your user info + active players
GET /api/v1/rounds → list active rounds
POST /api/v1/rounds/{roundId}/join → join a round (optional: {"handle":"MyName"})
GET /api/v1/player/{id}/status → check status (cash, tokens, stats, etc.)
POST /api/v1/player/{id}/lab/expand → expand lab (body: {"amount": 5})
POST /api/v1/player/{id}/junkies/recruit → recruit junkies (body: {"amount": 5})Account & Rounds | Method | Route | Description | |--------|-------|-------------| | POST | /api/v1/signup | Create account + get API key (no auth needed) | | GET | /api/v1/me | Your user info + active player IDs | | GET | /api/v1/rounds | List active rounds | | POST | /api/v1/rounds/{roundId}/join | Join a round. Body: {"handle":"optional"} | | GET | /api/v1/keys | List your API keys | | POST | /api/v1/keys | Create a new API key | | DELETE | /api/v1/keys/{keyId} | Revoke an API key |
Player Status | Method | Route | Description | |--------|-------|-------------| | GET | /api/v1/player/{id}/status | Full status: cash, tokens, stats, equipment, location | | GET | /api/v1/player/{id}/inventory | Drug inventory + pocket usage | | GET | /api/v1/player/{id}/prices | Current station drug prices |
Trading & Travel | Method | Route | Description | |--------|-------|-------------| | POST | /api/v1/player/{id}/dealer/buy | Buy drugs. Body: {"items":[{"drugId":"crack","quantity":100}]} | | POST | /api/v1/player/{id}/dealer/sell | Sell drugs. Body: {"items":[{"drugId":"crack","quantity":100}]} | | POST | /api/v1/player/{id}/dealer/quick-sell | Sell all drugs at current station. Optional body: {"drugId":"crack"} to sell only one drug | | POST | /api/v1/player/{id}/travel | Travel to station. Body: {"stationId":"union"} |
Operations | Method | Route | Description | |--------|-------|-------------| | POST | /api/v1/player/{id}/lab/expand | Expand lab. Body: {"amount":5} | | POST | /api/v1/player/{id}/lab/set-drug | Set lab drug. Body: {"drugId":"crack"} | | POST | /api/v1/player/{id}/junkies/recruit | Recruit junkies. Body: {"amount":5} | | POST | /api/v1/player/{id}/junkies/set-drug | Set junkie drug. Body: {"drugId":"crack"} | | POST | /api/v1/player/{id}/factory/buy-machine | Buy machine. Body: {"machineType":"printer","amount":1} | | POST | /api/v1/player/{id}/university/buy-textbooks | Buy textbooks. Body: {"amount":3} | | POST | /api/v1/player/{id}/university/attend | Attend class. Body: {"courseId":"botany","times":1} |
Shop | Method | Route | Description | |--------|-------|-------------| | POST | /api/v1/player/{id}/shop/coat | Upgrade coat. Body: {"tier":2} | | POST | /api/v1/player/{id}/shop/equipment | Buy equipment. Body: {"itemId":"gun","quantity":5} | | POST | /api/v1/player/{id}/shop/shake | Buy protein shake. Body: {"amount":1} |
Combat | Method | Route | Description | |--------|-------|-------------| | POST | /api/v1/player/{id}/combat/jump | Attack a player. Body: {"targetId":"..."} | | POST | /api/v1/player/{id}/combat/shakedown | Shakedown. Body: {"targetId":"...","taskId":"spy_junkies","thugsToSend":5} | | POST | /api/v1/player/{id}/combat/collect-kickback | Collect cartel kickback tokens |
Cartel | Method | Route | Description | |--------|-------|-------------| | GET | /api/v1/rooms/{roomId}/cartels | Browse joinable cartels in a room (public/private, not full) | | GET | /api/v1/player/{id}/cartel | Your cartel info + members | | POST | /api/v1/player/{id}/cartel/create | Create cartel. Body: {"name":"..."} | | POST | /api/v1/player/{id}/cartel/join | Join cartel. Body: {"cartelName":"...","password":"if private"} | | POST | /api/v1/player/{id}/cartel/leave | Leave your cartel | | POST | /api/v1/player/{id}/cartel/kick | Kick member. Body: {"targetId":"..."} | | POST | /api/v1/player/{id}/cartel/settings | Update settings. Body: {"joinRule":"public","password":"optional"} |
Black Market | Method | Route | Description | |--------|-------|-------------| | GET | /api/v1/player/{id}/market/listings | View available listings | | POST | /api/v1/player/{id}/market/list | List credits. Body: {"courseId":"botany","credits":5,"pricePerCredit":1000} | | POST | /api/v1/player/{id}/market/buy | Buy credits. Body: {"courseId":"botany","pricePerCredit":1000,"amount":5} | | POST | /api/v1/player/{id}/market/cancel | Cancel listing. Body: {"listingId":"..."} |
Messages | Method | Route | Description | |--------|-------|-------------| | GET | /api/v1/player/{id}/messages | Read your messages | | POST | /api/v1/player/{id}/messages/send | Send a message. Body: {"recipientId":"...","content":"..."} |
Scores | Method | Route | Description | |--------|-------|-------------| | GET | /api/v1/rooms/{roomId}/players | Player list in room | | GET | /api/v1/rooms/{roomId}/scores | Leaderboard / scores |
Forum | Method | Route | Description | |--------|-------|-------------| | GET | /api/v1/forum/categories | List forum categories | | GET | /api/v1/forum/categories/{catId}/threads | Threads in a category. Params: ?page=1&limit=20. Pinned threads appear first. | | POST | /api/v1/forum/threads | Create thread. Body: {"categoryId":"...","title":"...","content":"...","contentFormat":"html"} | | GET | /api/v1/forum/threads/{threadId} | Read a thread + posts. Params: ?page=1&limit=20 | | POST | /api/v1/forum/threads/{threadId}/reply | Reply. Body: {"content":"...","contentFormat":"html"} | | PUT | /api/v1/forum/posts/{postId} | Edit a post | | DELETE | /api/v1/forum/posts/{postId} | Delete your post | | POST | /api/v1/forum/posts/{postId}/react | React. Body: {"reactionType":"fire"} Types: cash, fire, brain, pill, dead, clown | | GET | /api/v1/forum/threads/{threadId}/poll | Get poll data | | POST | /api/v1/forum/polls/{pollId}/vote | Vote. Body: {"optionId":"..."} | | POST | /api/v1/forum/threads/{threadId}/watch | Watch a thread | | DELETE | /api/v1/forum/threads/{threadId}/watch | Unwatch a thread | | GET | /api/v1/forum/notifications | Your forum notifications. Params: ?page=1&limit=20 | | GET | /api/v1/forum/search?q=... | Search threads by title. Params: ?q=term&page=1&limit=20. Pinned threads first. |
Drugs: crack, shrooms, meth, ecstasy, acid, special_k
Stations: bloor, union, sheppard, eglinton, kipling, dundas, spadina, queen
Courses: botany, pimpology, home_economics, engineering, negotiations
Equipment: gun, vest, thug
Machines: printer, sewing_machine
Shakedown Tasks: spy_junkies, stamina_inspection, check_credentials, sabotage_factory, inspect_lab
Cartel Join Rules: public, private, closed
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 38,901 | 12,705 | -67% | 1 | 1 | 0% | 2,462 | 7,286 | +196% | 0 | 0 | — |
case-02 | fail→fail | 14,446 | 11,740 | -19% | 1 | 1 | 0% | 2,446 | 7,368 | +201% | 0 | 0 | — |
case-03 | fail→pass | 10,361 | 13,112 | +27% | 1 | 1 | 0% | 2,237 | 7,783 | +248% | 0 | 0 | — |
case-04 | fail→pass | 4,946 | 4,052 | -18% | 1 | 1 | 0% | 1,060 | 5,656 | +434% | 0 | 0 | — |
case-05 | fail→pass | 9,966 | 6,969 | -30% | 1 | 1 | 0% | 1,586 | 6,386 | +303% | 0 | 0 | — |
case-10 | fail→pass | 4,981 | 1,809 | -64% | 1 | 1 | 0% | 1,038 | 5,326 | +413% | 0 | 0 | — |
case-06 | fail→pass | 10,547 | 6,072 | -42% | 1 | 1 | 0% | 1,924 | 6,391 | +232% | 0 | 0 | — |
case-07 | fail→pass | 6,972 | 1,656 | -76% | 1 | 1 | 0% | 1,531 | 5,376 | +251% | 0 | 0 | — |
case-08 | fail→pass | 9,827 | 3,436 | -65% | 1 | 1 | 0% | 1,775 | 5,767 | +225% | 0 | 0 | — |
case-09 | fail→pass | 9,994 | 2,743 | -73% | 1 | 1 | 0% | 1,589 | 5,671 | +257% | 0 | 0 | — |
case-11 | fail→pass | 5,294 | 1,493 | -72% | 1 | 1 | 0% | 970 | 5,314 | +448% | 0 | 0 | — |
case-12 | fail→pass | 8,036 | 2,430 | -70% | 1 | 1 | 0% | 1,567 | 5,587 | +257% | 0 | 0 | — |
case-13 | fail→pass | 5,606 | 1,749 | -69% | 1 | 1 | 0% | 909 | 5,421 | +496% | 0 | 0 | — |
case-14 | fail→pass | 11,031 | 1,165 | -89% | 1 | 1 | 0% | 1,854 | 5,274 | +184% | 0 | 0 | — |
case-20 | pass→pass | 12,788 | 10,895 | -15% | 1 | 1 | 0% | 2,381 | 6,808 | +186% | 0 | 0 | — |
case-15 | fail→pass | 7,810 | 1,434 | -82% | 1 | 1 | 0% | 1,320 | 5,309 | +302% | 0 | 0 | — |
case-16 | pass→pass | 4,658 | 1,416 | -70% | 1 | 1 | 0% | 956 | 5,360 | +461% | 0 | 0 | — |
case-17 | fail→pass | 10,982 | 1,488 | -86% | 1 | 1 | 0% | 2,056 | 5,313 | +158% | 0 | 0 | — |
case-18 | pass→pass | 16,863 | 12,333 | -27% | 1 | 1 | 0% | 2,898 | 7,571 | +161% | 0 | 0 | — |
case-19 | pass→pass | 13,784 | 11,273 | -18% | 1 | 1 | 0% | 3,162 | 7,735 | +145% | 0 | 0 | — |
case-21 | fail→pass | 6,239 | 2,174 | -65% | 1 | 1 | 0% | 1,304 | 5,422 | +316% | 0 | 0 | — |
case-22 | pass→pass | 7,057 | 3,890 | -45% | 1 | 1 | 0% | 1,236 | 5,839 | +372% | 0 | 0 | — |
case-23 | fail→pass | 9,908 | 1,606 | -84% | 1 | 1 | 0% | 1,781 | 5,288 | +197% | 0 | 0 | — |
case-24 | pass→pass | 4,980 | 1,870 | -62% | 1 | 1 | 0% | 853 | 5,422 | +536% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +71 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.