On this page
  1. Prices
  2. Money and time
  3. Risks
  4. Compared with Drug Wars
  5. History
  6. Related
  7. Mechanics
  8. References
  9. Sources

dopewars is a free trading game about dealing drugs in New York, written in C by Ben Webb and released under the GPL1. Its credits say it derives from an MS-DOS game of the same name by an unknown author, which was based on John E. Dell’s Drug Wars2. By default it plays multiplayer games through a server3. An “antique” mode tries to keep to the original as closely as possible4, and drops the gun shop and the pub5.

The source is public, so every rule below is read from it. A probe compiles the price code unchanged and runs it a million times per place (probes/trading/dopewars.mjs).

#Prices

Each of the 12 drugs has a range, from Ludes at 11–60 to Cocaine at 15,000–29,0006. On every arrival a drug on sale gets a fresh price drawn uniformly from its range, at least the low figure and below the high one7. The place sets only how many drugs are on sale, between its MinDrug and one less than its MaxDrug8. Drugs not drawn have no price that day.

 * Returns a random price not less than bot and less than top.
…
  return (price_t)((float)(top - bot) * rand() / (RAND_MAX + 1.0)) + bot;
dopewars source · src/dopewars.c L809–8157
To->Drugs[i].Price = prandom(Drug[i].MinPrice, Drug[i].MaxPrice);
dopewars source · src/serverside.c L3245–32507
SendDrugsHere(To, TRUE);
dopewars source · src/serverside.c L2400–24177

A visit then brings zero to three price events, with probabilities 0.30, 0.42, 0.266, and 0.0149. An event picks a drug that can turn, and its price falls to a quarter or rises to four times a normal one10:

  if (brandom(0, 100) < 70)
    NumEvents = 1;
  if (brandom(0, 100) < 40 && NumEvents == 1)
    NumEvents = 2;
  if (brandom(0, 100) < 5 && NumEvents == 2)
    NumEvents = 3;
dopewars source · src/serverside.c L3213–32199
DrugRange6Event6
Acid1,000–4,400cheap
Cocaine15,000–29,000expensive
Hashish480–1,280cheap
Heroin5,500–13,000expensive
Ludes11–60cheap
MDA1,500–4,400none
Opium540–1,250expensive
PCP1,000–2,500none
Peyote220–700none
Shrooms630–1,300none
Speed90–250expensive
Weed315–890cheap

The eight places differ in police presence and in how many drugs are on sale, from Manhattan (police 90, 4–9 drugs) to the Ghetto (police 5, 8–11 drugs)11. Antique mode keeps the first six5.

#Money and time

A game starts on 1 December 1984 with $2,000 cash, a $5,500 debt, and a trenchcoat that holds 10012. Each jet to another place takes a day, and a game has 31 days13 of trading. Each jet multiplies the debt by 1.10 and the bank balance by 1.05, both rounded down14,15. Unpaid, the debt passes $95,000 over 30 jets14. The loan shark in the Bronx takes repayments and makes no new loans16.

#Risks

On arrival, dopewars rolls for an encounter, more often for a richer player17. An encounter is an offer, a random event, or a police attack, and the share of attacks rises with the place’s police presence18. One random event in ten is a mugging that keeps 80 to 94 percent of the cash19. In antique mode, half of all offers are a bigger trenchcoat for $200 to $299, which adds 10 spaces20.

#Compared with Drug Wars

Drug Wars (1984)dopewars, antique mode
Drugs621126
Pricerandom steps plus a price carried from another drug22,23uniform in the drug’s range7
Eventsat most one a day; × 5, ÷ 5, or ÷ 724zero to three a visit; × 4 or ÷ 49,10
Days30253113
Debt10% a day2610% a jet14
Bank5.5% a day275% a jet15
Loansup to twice the cash, less $5028repayment only16
Bigger coat+20 for $200–$29929+10 for $200–$29920

Both games start with $2,000 and a $5,500 debt30,12. So does the Happy Hacker Foundation’s MS-DOS Dope Wars, which credits Dell’s game31,32.

#History

Ben Webb’s first GPL release, 1.4.0, came out on 27 April 19991. The credits thank Dan Wolf for playing the MS-DOS game at length to help re-engineer it2.

Mechanics

MechanicKindHow
Commodity trading12 drugs, 8 places (6 in antique mode), 31 days; a uniform price per drug on each arrival, 0–3 events at ÷4 or ×4
Compound interestsource
Every claim about this game, by concept (23)
generaldopewars's credits say it derives from an MS-DOS game of the same name by an unknown author, which was based on John E. Dell's MS-DOS game Drug Wars.Developer
An MS-DOS Dope Wars opens by calling itself based on John E. Dell's Drug Wars and credits the Happy Hacker Foundation.Verified
In emu2, the Happy Hacker Foundation's MS-DOS Dope Wars (Dopewars.exe of 4 May 1991) starts its first day in the Bronx with $2,000 cash, a $5,500 debt, and 100 spaces.Verified
Ben Webb's first GPL release of dopewars, version 1.4.0, came out on 27 April 1999.Developer
dopewars's “antique” mode tries to keep to the original game as closely as possible.Developer
By default, dopewars plays multiplayer games, connecting to a dopewars server.Developer
Antique mode keeps the first six of the eight locations and drops the gun shop and the pub.Code
A dopewars game starts on 1 December 1984 with $2,000 cash, a $5,500 debt, and a trenchcoat that holds 100.Code
Each jet to another location takes one day, and asking to jet on the 31st turn ends the game, so a game has 31 days of trading.Code
Commodity tradingdopewars has 12 drugs, each with a price range, from Ludes at 11–60 to Cocaine at 15,000–29,000. Acid, Hashish, Ludes, and Weed can turn cheap; Cocaine, Heroin, Opium, and Speed can turn expensive.Verified
Each drug on sale gets a fresh price on every arrival, drawn uniformly from at least its MinPrice to below its MaxPrice; a price event then divides or multiplies one drug's price.Verified
Each visit puts a random number of drugs on sale, from the location's MinDrug to one less than its MaxDrug; the rest have no price that day.Verified
The eight locations differ in police presence and in how many drugs are on sale, from Manhattan (police 90, 4–9 drugs) to the Ghetto (police 5, 8–11 drugs).Verified
Each visit has no price event with probability 0.30, one with 0.42, two with 0.266, and three with 0.014.Verified
A price event picks a random drug that can turn; a cheap drug costs a quarter of a normal price, and an expensive one four times.Verified
Each jet multiplies the loan shark's debt by 1.10, in integer arithmetic, so $5,500 left unpaid grows to $95,917 over 30 jets.Verified
Each jet multiplies the bank balance by 1.05, so $2,000 deposited grows to $8,614 over 30 jets.Verified
The dopewars loan shark, in the Bronx, only takes repayments and offers no new loans.Code
On arrival, dopewars rolls for an encounter, 24 in 100 below $1 million net worth, 39 in 115 above it, and 54 in 130 above $3 million.Code
An encounter is an offer, a random event, or a police attack, and a location's police presence raises the share of attacks. Half of all offers are a helper who carries drugs, or a bigger trenchcoat in antique mode; the rest offer a gun, unless the game is sanitized or has no guns, the player already carries two more guns than helpers, or the drawn gun won't fit the coat, and then nothing is offered.Code
One random event in ten is a mugging that leaves 80 to 94 percent of the cash.Code
In antique mode, half of all offers are a bigger trenchcoat for $200 to $299, and each one adds 10 to the coat's space.Code
Compound interestIn dopewars, each accepted jet applies the 10% debt rate to the current integer balance, so the balance includes prior interest in later updates.Code

References

  1. ^ abcBen Webb's first GPL release of dopewars, version 1.4.0, came out on 27 April 1999.Developerdopewars source
    How we know
    17327th April 1999 
    174     First GPL release of dopewars (1.4.0) 
    
    NEWS lines 173–174 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  2. ^ abdopewars's credits say it derives from an MS-DOS game of the same name by an unknown author, which was based on John E. Dell's MS-DOS game Drug Wars.Developerdopewars source
    How we know
    1dopewars is derived from the MS-DOS game of the same name (author unknown).
    ⋮
    3This is turn was based upon the MS-DOS game "Drug Wars", by John E. Dell.
    
    AUTHORS lines 1–3 at d8bb8ee · upstream ↗
    44based upon the MS-DOS game of the same name, in turn derived from "Drug
    
    doc/index.html lines 43–45 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  3. ^By default, dopewars plays multiplayer games, connecting to a dopewars server.Developerdopewars source
    How we know
    57By default, dopewars supports multi-player games. On starting a game, the
    
    README.md lines 56–59 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  4. ^dopewars's “antique” mode tries to keep to the original game as closely as possible.Developerdopewars source
    How we know
    53This is "antique" dopewars; it tries to keep to the original dopewars, based
    54on the "Drug Wars" game by John E. Dell, as closely as possible.
    
    README.md lines 52–54 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  5. ^ abAntique mode keeps the first six of the eight locations and drops the gun shop and the pub.Codedopewars source
    How we know
    2450    GunShopLoc = RoughPubLoc = 0;
    
    src/dopewars.c lines 2449–2451 at d8bb8ee · upstream ↗
    2476  if (antique) {
    2477    defloc = 6;
    
    src/dopewars.c lines 2474–2478 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  6. ^ abcddopewars has 12 drugs, each with a price range, from Ludes at 11–60 to Cocaine at 15,000–29,000. Acid, Hashish, Ludes, and Weed can turn cheap; Cocaine, Heroin, Opium, and Speed can turn expensive.Verifieddopewars source
    How we know
    719  {N_("Cocaine"), 15000, 29000, FALSE, TRUE, ""},
    
    src/dopewars.c lines 714–734 at d8bb8ee · upstream ↗
    257  price_t MinPrice, MaxPrice;
    258  gboolean Cheap, Expensive;
    
    src/dopewars.h lines 255–260 at d8bb8ee · upstream ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  7. ^ abcdeEach drug on sale gets a fresh price on every arrival, drawn uniformly from at least its MinPrice to below its MaxPrice; a price event then divides or multiplies one drug's price.Verifieddopewars source
    How we know
    810 * Returns a random price not less than bot and less than top.
    ⋮
    814  return (price_t)((float)(top - bot) * rand() / (RAND_MAX + 1.0)) + bot;
    
    src/dopewars.c lines 809–815 at d8bb8ee · upstream ↗
    3248      To->Drugs[i].Price = prandom(Drug[i].MinPrice, Drug[i].MaxPrice);
    
    src/serverside.c lines 3245–3250 at d8bb8ee · upstream ↗
    2411          SendDrugsHere(To, TRUE);
    ⋮
    2417      SendDrugsHere(To, TRUE);
    
    src/serverside.c lines 2400–2417 at d8bb8ee · upstream ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  8. ^Each visit puts a random number of drugs on sale, from the location's MinDrug to one less than its MaxDrug; the rest have no price that day.Verifieddopewars source
    How we know
    3239  NumRandom = brandom(Location[To->IsAt].MinDrug,
    3240                      Location[To->IsAt].MaxDrug);
    
    src/serverside.c lines 3239–3251 at d8bb8ee · upstream ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  9. ^ abcEach visit has no price event with probability 0.30, one with 0.42, two with 0.266, and three with 0.014.Verifieddopewars source
    How we know
    3214  if (brandom(0, 100) < 70)
    3215    NumEvents = 1;
    3216  if (brandom(0, 100) < 40 && NumEvents == 1)
    3217    NumEvents = 2;
    3218  if (brandom(0, 100) < 5 && NumEvents == 2)
    3219    NumEvents = 3;
    
    src/serverside.c lines 3213–3219 at d8bb8ee · upstream ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  10. ^ abA price event picks a random drug that can turn; a cheap drug costs a quarter of a normal price, and an expensive one four times.Verifieddopewars source
    How we know
    3227      To->Drugs[i].Price = prandom(Drug[i].MinPrice, Drug[i].MaxPrice)
    3228          * Drugs.ExpensiveMultiply;
    ⋮
    3233      To->Drugs[i].Price = prandom(Drug[i].MinPrice, Drug[i].MaxPrice)
    
    src/serverside.c lines 3221–3237 at d8bb8ee · upstream ↗
    753  N_("Cops made a big %tde bust! Prices are outrageous!"),
    754  N_("Addicts are buying %tde at ridiculous prices!"),
    755  4, 4
    
    src/dopewars.c lines 751–756 at d8bb8ee · upstream ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  11. ^The eight locations differ in police presence and in how many drugs are on sale, from Manhattan (police 90, 4–9 drugs) to the Ghetto (police 5, 8–11 drugs).Verifieddopewars source
    How we know
    743  {N_("Manhattan"), 90, NUMDRUG / 2 - 2, NUMDRUG - 2},
    
    src/dopewars.c lines 738–748 at d8bb8ee · upstream ↗
    250  int PolicePresence;
    251  int MinDrug, MaxDrug;
    
    src/dopewars.h lines 248–252 at d8bb8ee · upstream ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  12. ^ abA dopewars game starts on 1 December 1984 with $2,000 cash, a $5,500 debt, and a trenchcoat that holds 100.Codedopewars source
    How we know
    114price_t StartCash = 2000, StartDebt = 5500;
    
    src/dopewars.c line 114 at d8bb8ee · upstream ↗
    87  1, 12, 1984
    
    src/dopewars.c lines 86–88 at d8bb8ee · upstream ↗
    882  NewPlayer->CoatSize = 100;
    
    src/dopewars.c line 882 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  13. ^ abEach jet to another location takes one day, and asking to jet on the 31st turn ends the game, so a game has 31 days of trading.Codedopewars source
    How we know
    226int NumTurns = 31;
    
    src/dopewars.c line 226 at d8bb8ee · upstream ↗
    452    if (NumTurns > 0 && Play->Turn >= NumTurns
    ⋮
    462      Play->Turn++;
    463      g_date_add_days(Play->date, 1);
    
    src/serverside.c lines 452–463 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  14. ^ abcEach jet multiplies the loan shark's debt by 1.10, in integer arithmetic, so $5,500 left unpaid grows to $95,917 over 30 jets.Verifieddopewars source
    How we know
    108int DebtInterest = 10, BankInterest = 5;
    
    src/dopewars.c line 108 at d8bb8ee · upstream ↗
    464      Play->Debt = Play->Debt * (DebtInterest + 100) / 100;
    
    src/serverside.c line 464 at d8bb8ee · upstream ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  15. ^ abEach jet multiplies the bank balance by 1.05, so $2,000 deposited grows to $8,614 over 30 jets.Verifieddopewars source
    How we know
    108int DebtInterest = 10, BankInterest = 5;
    
    src/dopewars.c line 108 at d8bb8ee · upstream ↗
    466      Play->Bank = Play->Bank * (BankInterest + 100) / 100;
    
    src/serverside.c line 466 at d8bb8ee · upstream ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  16. ^ abThe dopewars loan shark, in the Bronx, only takes repayments and offers no new loans.Codedopewars source
    How we know
    500  case C_PAYLOAN:
    501    money = strtoprice(Data);
    
    src/serverside.c lines 500–507 at d8bb8ee · upstream ↗
    2351      if (To->IsAt + 1 == LoanSharkLoc && To->Debt > 0) {
    
    src/serverside.c lines 2350–2351 at d8bb8ee · upstream ↗
    216#define DEFLOANSHARK  1
    
    src/dopewars.h line 216 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  17. ^On arrival, dopewars rolls for an encounter, 24 in 100 below $1 million net worth, 39 in 115 above it, and 54 in 130 above $3 million.Codedopewars source
    How we know
    2315      if (Money > 3000000)
    2316        i = 130;
    2317      else if (Money > 1000000)
    2318        i = 115;
    2319      else
    2320        i = 100;
    2321      if (brandom(0, i) > 75) {
    
    src/serverside.c lines 2315–2321 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  18. ^An encounter is an offer, a random event, or a police attack, and a location's police presence raises the share of attacks. Half of all offers are a helper who carries drugs, or a bigger trenchcoat in antique mode; the rest offer a gun, unless the game is sanitized or has no guns, the player already carries two more guns than helpers, or the drawn gun won't fit the coat, and then nothing is offered.Codedopewars sourcerevised
    How we know
    2443  i = brandom(0, 80 + Location[To->IsAt].PolicePresence);
    ⋮
    2449  else
    ⋮
    2451  if (i < 33) {
    2452    return (OfferObject(To, Force == FORCEBITCH));
    2453  } else if (i < 50) {
    2454    return (RandomOffer(To));
    
    src/serverside.c lines 2441–2459 at d8bb8ee · upstream ↗
    3164  if (brandom(0, 100) < 50 || ForceBitch) {
    3165    if (WantAntique) {
    ⋮
    3167      text = dpg_strdup_printf(_("YN^Would you like to buy a bigger "
    ⋮
    3172      text =
    3173          dpg_strdup_printf(_
    3174                            ("YN^Hey dude! I'll help carry your %tde for a "
    ⋮
    3181  } else if (!Sanitized && NumGun > 0
    3182             && (TotalGunsCarried(To) < To->Bitches.Carried + 2)) {
    ⋮
    3185    if (Gun[ObjNum].Space > To->CoatSize)
    3186      return 0;
    
    src/serverside.c lines 3163–3186 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

    Revised after a check by a second AI model, 2026-10-27: The gun offer has conditions, and when they fail nothing is offered.

    In the claim ledger

  19. ^One random event in ten is a mugging that leaves 80 to 94 percent of the cash.Codedopewars source
    How we know
    3056  if (!Sanitized && (r < 10)) {
    3057    g_string_assign(text, _("You were mugged in the subway!"));
    3058    To->Cash = To->Cash * (price_t)brandom(80, 95) / 100l;
    
    src/serverside.c lines 3052–3058 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  20. ^ abIn antique mode, half of all offers are a bigger trenchcoat for $200 to $299, and each one adds 10 to the coat's space.Codedopewars source
    How we know
    3164  if (brandom(0, 100) < 50 || ForceBitch) {
    3165    if (WantAntique) {
    3166      To->Bitches.Price = prandom(MINTRENCHPRICE, MAXTRENCHPRICE);
    
    src/serverside.c lines 3164–3168 at d8bb8ee · upstream ↗
    64static const price_t MINTRENCHPRICE = 200, MAXTRENCHPRICE = 300;
    
    src/serverside.c line 64 at d8bb8ee · upstream ↗
    3547  Play->CoatSize += 10;
    
    src/serverside.c lines 3545–3548 at d8bb8ee · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  21. ^The instructions list six drugs with their prices per unit: cocaine 15,000–30,000, heroin 5,000–14,000, acid 1,000–4,500, weed 300–900, speed 70–250, and ludes 10–60.VerifiedDrug Wars (1984), played in emu2
    How we know
    The prices of drugs per unit are: COCAINE 15000-30000
    instructions screen · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  22. ^Each day every drug gets a new price, a random whole number of steps: cocaine 15 to 28 × $1,000, heroin 5 to 12 × $1,000, acid 10 to 44 × $100, weed 3 to 7 × $100, speed 7 to 24 × $10, and ludes 1 to 5 × $10.VerifiedDrug Wars (1984), played in emu2revised
    How we know
    the day's prices, every day of the passive games · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Revised after a check by a second AI model, 2026-10-27: Same in all six places and the drawn ranges were only printed; each place now turns up every step, and the ranges are the value's drawn, checked.

    In the claim ledger

  23. ^Three prices carry another drug's price from the day before, so cocaine adds the previous day's weed price, heroin adds 4 × the previous day's speed price, and weed adds the previous day's ludes price.VerifiedDrug Wars (1984), played in emu2
    How we know
    the day's prices, every day of the passive games · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  24. ^In the probe's 100 passive games, a price event moved one drug on 688 of 3,000 days, about 23%; a cocaine bust or heroin addicts multiply its price by 5, cheap heroin, acid, or weed divide it by 5, and cheap ludes divide it by 7.VerifiedDrug Wars (1984), played in emu2revised
    How we know
    COPS MADE A BIG COKE BUST !! PRICES ARE OUTRAGEOUS !!
    the event messages and the day's prices · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Revised after a check by a second AI model, 2026-10-27: 688 of 3,000 days is 23%, not one in five; the claim states the run's sample, which the deterministic probe checks exactly.

    In the claim ledger

  25. ^Each jet takes a day, and the jet out of 1/3/84 ends the game after 30 days of trading, with no 12/31 on the calendar.VerifiedDrug Wars (1984), played in emu2
    How we know
    the DATE field, day by day · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  26. ^The debt grows 10% a day, rounded down to the dollar, so $5,500 left unpaid is $87,198 on the last day.VerifiedDrug Wars (1984), played in emu2
    How we know
    the DEBT field, day by day · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  27. ^The bank pays 5.5% a day, rounded down, but the status box can show the balance from before the day's interest.VerifiedDrug Wars (1984), played in emu2
    How we know
    the BANK field after a $2,000 deposit, and a withdrawal on day three · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  28. ^The loan shark lends at most twice the cash in hand, less $50; with $2,000 he lends $3,950 and refuses $3,951, and the rule holds with $1,500, $1,000, and $500.VerifiedDrug Wars (1984), played in emu2
    How we know
    the loan shark's HOW MUCH TO BORROW question · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  29. ^On arrival the game may offer a bigger trench coat for $200 to $299, which adds 20 units of space, or a gun for $400 to $499.VerifiedDrug Wars (1984), played in emu2revised
    How we know
    WILL YOU BUY A NEW TRENCH COAT WITH MORE POCKETS FOR
    the trench coat and gun offers · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Revised after a check by a second AI model, 2026-10-27: The run's coat went from 100 to 120 units with 4 aboard (free space 96 to 116); the check measures the coat's size.

    In the claim ledger

  30. ^A game starts on 12/4/83 in the Bronx with $2,000 cash, a $5,500 debt to the loan shark, and a trench coat that holds 100 units.VerifiedDrug Wars (1984), played in emu2
    How we know
    first day of every game · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Checked by a second AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  31. ^In emu2, the Happy Hacker Foundation's MS-DOS Dope Wars (Dopewars.exe of 4 May 1991) starts its first day in the Bronx with $2,000 cash, a $5,500 debt, and 100 spaces.VerifiedDope Wars (MS-DOS, Happy Hacker Foundation), played in emu2revised
    How we know
    first day's screen, after the opening screen · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Revised after a check by a second AI model, 2026-10-27.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  32. ^An MS-DOS Dope Wars opens by calling itself based on John E. Dell's Drug Wars and credits the Happy Hacker Foundation.VerifiedDope Wars (MS-DOS, Happy Hacker Foundation), played in emu2 · BBS Documentary library, Dopewarsrevised
    How we know
    Based on John E. Dell's old Drug Wars game, Dope Wars is a simulation of an imaginary drug market. … Dope Wars has been brought to you courtesy of the Happy Hacker Foundation.
    opening screen · archived copy ↗
    The program recieved an update from the "Happy Hacker Foundation" with the release of "Dope Wars"
    · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-27.

    Revised after a check by a second AI model, 2026-10-27: The start figures come from our run (hhf-start, with the probe); the opening screen stays T2.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

Sources

Code

Primary

  • Advance, Frame. 2026. “Drug Wars (1984), DRUGWAR.EXE played in the emu2 emulator.” Version drugwars.zip, holding DRUGWAR.EXE: 49,792 bytes, sha256 3f43f9ec88b9379c9ffa22718612bc715bd4c2b4350665ff0e94476e3239c61c. original · archived · licence, all uses
  • Advance, Frame. 2026. “Dope Wars (Happy Hacker Foundation, MS-DOS), DOPEWARS.EXE played in the emu2 emulator.” Version dopewarsd.zip, holding Dopewars.exe: 66,416 bytes, sha256 7bbd1056163c257b37fe774bedc0e0e7f8ae4f2f52fe55f9f2dec0cf1bcd8983, file date 4 May 1991. original · archived · licence, all uses

Secondary