dopewars
Ben Webb's open-source descendant of Drug Wars (GPL, first public release 1999); 12 drugs, uniform random prices on every arrival, and busts that multiply or divide by 4.
On this page
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;To->Drugs[i].Price = prandom(Drug[i].MinPrice, Drug[i].MaxPrice);SendDrugsHere(To, TRUE);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;| Drug | Range6 | Event6 |
|---|---|---|
| Acid | 1,000–4,400 | cheap |
| Cocaine | 15,000–29,000 | expensive |
| Hashish | 480–1,280 | cheap |
| Heroin | 5,500–13,000 | expensive |
| Ludes | 11–60 | cheap |
| MDA | 1,500–4,400 | none |
| Opium | 540–1,250 | expensive |
| PCP | 1,000–2,500 | none |
| Peyote | 220–700 | none |
| Shrooms | 630–1,300 | none |
| Speed | 90–250 | expensive |
| Weed | 315–890 | cheap |
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 | |
|---|---|---|
| Drugs | 621 | 126 |
| Price | random steps plus a price carried from another drug22,23 | uniform in the drug’s range7 |
| Events | at most one a day; × 5, ÷ 5, or ÷ 724 | zero to three a visit; × 4 or ÷ 49,10 |
| Days | 3025 | 3113 |
| Debt | 10% a day26 | 10% a jet14 |
| Bank | 5.5% a day27 | 5% a jet15 |
| Loans | up to twice the cash, less $5028 | repayment 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
| Mechanic | Kind | How |
|---|---|---|
| Commodity trading | 12 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 interest | source |
Every claim about this game, by concept (23)
References
- ^ 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.
- ^ 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 "Drugdoc/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.
- ^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, theREADME.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.
- ^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.
- ^ 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.
- ^ 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.
- ^ 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.
- ^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.
- ^ 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.
- ^ 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.
- ^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.
- ^ 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, 1984src/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.
- ^ 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.
- ^ 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.
- ^ 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.
- ^ 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 1src/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.
- ^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.
- ^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.
- ^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.
- ^ 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.
- ^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.
- ^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.
- ^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 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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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 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.
- ^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.
Sources
Code
- Webb, Ben. 2026. “dopewars source code.” Commit d8bb8ee. benmwebb/dopewars @ d8bb8ee · licence, all uses
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
- Scott, Jason. n.d. “Programs: Doors: Dopewars.” The BBS Documentary Library. original · archived · licence, all uses