- 1980年代の IBM PC 向け BASIC ゲームをベースにした取引シミュレーションゲームで、TI-82・83・83+ 電卓上で TI-BASIC により動作するバージョン
- プレイヤーは6つの都市を移動しながらドラッグを売買し、借金を返済しつつ、1か月間で最大利益を目指す。ランダムイベントや警察の追跡も含まれる構成
- コミュニティでは
.8xp ファイル共有、TI CONNECT での転送、TI-Coder による変換など、導入・実行方法が活発に議論され、さまざまな改造版も制作
- コード解析により、変数の重複使用によるバグや無限利益ループなどのロジック上の不具合が発見され、複数のユーザーが修正して TI-84 CE 互換版を公開
- その後は C/SDL リメイク、Pico-8 および C# への移植、Z80 コンソール移植などへ発展し、古典的な電卓ゲーム復元プロジェクトとしてコミュニティが広がっている
TI-82/83/83+ 向け Drugwars ゲーム概要
- TI-82、TI-83、TI-83+ 電卓で動作する Drugwars は、1980年代の IBM PC 向け BASIC ゲームをベースにした取引シミュレーションゲーム
- プレイヤーはドラッグを売買して高利貸しへの借金を返済し、1か月のあいだにできるだけ多くの金を稼ぐことが目的
- ゲームは TI-BASIC 言語で書かれており、
Lbl、Goto、Menu、Disp 命令を中心に構成
- ゲーム開始時には、初期資金、負債、インベントリ、トレンチコート容量などの変数初期化が行われる
- 例:
2000→Z(現金)、5000→Y(負債)、100→K(空き容量)など
- 「ORIGINAL GAME FOR IBM BY JOHN E. DELL」という文言が表示され、原作の出典を明記
-
ゲーム進行構造
- プレイヤーはブロンクス、ゲットー、セントラルパーク、マンハッタン、コニーアイランド、ブルックリンなど6つの都市を移動しながら取引を行う
Menu("DRUGWAR!", "SEE PRICES", "BUY", "SELL", "JET", "SEE LOAN SHARK", "VISIT BANK") メニューから行動を選択
- 各ドラッグ(コカイン、ヘロイン、LSD、大麻、スピード、ルード)の価格は毎日ランダムに変動
-
イベントシステム
rand 関数を用いてランダムイベントが発生
- ライバルディーラーの投げ売り、警察の一斉摘発、価格高騰、地下鉄での強盗被害など
- 例: 「YOU WERE MUGGED IN THE SUBWAY!」が発生すると現金の1/3を失う
- 一定条件で武器購入、トレンチコート強化、銀行取引、高利貸しへの返済が可能
-
戦闘と警察の追跡
- 一定量以上のドラッグを所持していると警察(
OFFICER HARDASS)に追跡される
- メニューで RUN または FIGHT を選択可能
- 武器がなければ逃走しかできず、体力(
J)が 50 以上だと死亡扱いになる
- 警察を全員倒すと現金報酬を獲得
-
ゲーム終了とスコア計算
- 31日が経過するとゲーム終了
- スコアは
(V+Z-Y) をもとに計算した後、1〜100 の範囲に換算
- 「YOUR SCORE (ON A SCALE OF 1 TO 100)」というメッセージとともに結果を表示
コミュニティでの議論と改良版の共有
- TI-82/83/83+ 向け Drugwars の導入・実行方法について活発な議論が続いている
- 電卓内の BASIC インタプリタ(PRGM → New)を通じて直接コードを入力するか、TI-Coder を使って
.8xp ファイルへ変換して転送可能
- 変換時には
≥ を >=、→ を ->、θ を 0 に置き換えるなどの修正が必要
- TI CONNECT や TI-83 用 USB アダプタを使って、PC から電卓へファイルを転送可能
-
gammalogic の助言
- TI-83 用 USB アダプタを購入して PC からゲームをダウンロードする方法と、ソースコードを直接入力する方法の2つを提示
- 一部のアダプタは Windows XP 用ドライバを使うため、最新の Windows では互換性の問題がある可能性
- Linux や Unix 系の自由ソフトウェアドライバが存在する可能性にも言及
-
ileathan による .8xp ファイル提供
-
darth-crunchus による修正と改善
- TI-Coder 変換時の不等号記号の誤りや変数名の大文字・小文字の問題を指摘
- Lbl 3、Lbl 4 の条件文を BASIC エディタで修正しないと正常動作しない
- TI-84 Plus CE で完全動作するよう修正し、ランダムイベント(警察犬、ブラウニーなど)、武器価格、トレンチコート強化、保存容量のランダム化などを復元
- 最終コードサイズは 6310B、その後の更新版では 11429B まで拡張
- DOS 原作に近づけるため rand( 関数のシード(random seeding)機能を追加
- 最新版のソースは https://pastebin.com/4dUuw0BR で公開
-
TI-BASIC 入力に関する議論
- 英数字入力処理に関する議論では、TI-BASIC が文字列を可変長で処理できることに言及
- 変数に文字を入力すると、その文字の値が変数へ渡される仕組みで動作
-
互換性と実行上の問題
- TI-84 Plus CE および CE Python モデルでも修正なしで実行可能
- 一部ユーザーは、購入・販売時の入力エラーで MirageOS に戻ってしまう問題を報告
-
追加移植とアイデア
- C# コンソールアプリ版として書き直す計画が提示
- Pico-8 版を自作したというユーザーも登場
- Android や PC 向け移植への関心も言及されている
コード構造とバグ分析
-
tibbon による TI-83 BASIC の変数再利用分析
- 変数 N が2つの用途に重複使用されている
- ヘロイン在庫量:
0→N、(N+G)→N、(N-G)→N
- 位置追跡:
2→N(Bronx)、1→N(その他地域)
- これにより、次のような論理バグが発生
- 移動時にヘロイン数量が変化する(Bronx へ移動すると N=2 となり、ヘロイン2個所持と見なされる)
- ヘロイン取引時に位置値が上書きされ、Bronx 判定が誤る
- N=0 の状態では Bronx/非 Bronx の判定がどちらも失敗し、銀行・高利貸しへのアクセス制限が解除される
- Bronx に移動すると自動的にヘロイン2個が生成され、無限利益ループが可能
- 在庫計算式
(T-M-N-O-P-Q-R)→K が位置値を使ってしまい、保存容量の計算ミスが発生
-
主な悪用例
- 銀行・高利貸しへの無制限アクセス: N=0 の状態で地域制限を回避
- 無限ヘロイン生成: Bronx へ移動した際に自動生成される2個を繰り返し売却
- インベントリ不整合: 位置値の上書きによりトレンチコート容量超過が可能
元コードの出典と歴史的背景
- gammalogic は IBM BASIC の元コードに基づくものかを質問し、mattmanning は「TI 版は IBM ゲームをベースにしているが、他プラットフォームへコンパイルはできず、ゲームルールやロジックの参照用としては適している」と述べた
- 彼はインターネット上でコードを見つけ、文字フォーマットだけ整えたと説明
- 原作者 John Dell は、TRS-80 向けゲーム Taipan に着想を得て Drugwars を制作
コミュニティの拡大とその後の活動
- 一部ユーザーは TI-84+ での実行エラーを報告したが、別のユーザーは TI-83+ および TI-84+ エミュレータで正常動作を確認
- MirageOS で認識させるには、コード1行目に
:: を追加する必要があるというヒントも共有
- 電卓上で直接
prgm -> new からコードを入力しても実行可能
- ユーザー DaSovietPotato が TI-84 互換バグを修正した版を別リポジトリで公開
- gammalogic は C/SDL でのリメイク後、Z80 ベースのコンソール(マスターシステム、NES など)への移植計画を共有
- 初期の C/SDL デモでは、NES 解像度ベースのインターフェースと都市・ドラッグ差し替え機能を実装
- 今後は「Drugwars 2.0」バージョンへ拡張する計画にも言及
- 一部ユーザーは高校時代に遊んだ懐かしさに触れつつ、TI-83 用ケーブルを使って再インストールしようとする試みを共有
- コミュニティではコード解析と BASIC 学習を通じた自力移植が勧められ、TI-83 マニュアルの参照も推奨されている
- 2024〜2026年まで継続的にコメントが追加され、TI-84 CE、Pico-8、C# 移植など多様なプラットフォーム拡張の試みが行われている
- 一部ユーザーは
.8xp ファイルの要求や共有をメールでやり取りしている
- コミュニティ内で古典的電卓ゲームの復元・改良プロジェクトへと発展しつつある
1件のコメント
Hacker Newsのコメント
TI-83 Basicは、自分が最初に完全に身につけたと感じたプログラミング言語だった。
大学1年のころは、TI-Basicでコードを書いてからC++に訳したりしていた。当時はDrugwarsとBowlingが本当に印象的なゲームだった。
その後z80アセンブリを知ったときは、まるで魔法のようだった。父の大学の研究室(T1回線が2本入っていた)へ行って、新しく出たアセンブリ製ゲームをダウンロードしていたのを覚えている。Bill NagelのTurbo Breakout、Snake、AShell、Penguins、そしてグレースケールのMarioには衝撃を受けた。でも、最も完成度が高くて繰り返し遊べたのは、TI-86向けのSqrxzとZTetrisだったと思う。
一度、ゲームのz80アセンブリのソースを印刷して、手のひら幅ほどの厚さの束を持ち歩きながら理解しようとしていたこともある。
それから、ランダムな16進コードを打ち込んで実行するのも妙に楽しかった。たまに電卓が文鎮化することもあったが、電池を抜けばまた復活した。
TIのWebサイト戦争を覚えている人はいる? TI Files(のちのTI Philes)は「ticalc.orgよりずっとクールだ」と言っていたが、結局今まで残ったのはticalc.orgの方だった。
このゲームは自分にとって本当に大きな意味がある。高校時代に完全に中毒になっていて、その体験が人生に残っている。
Drugwarsは、自分の情熱プロジェクト Farmhand の直接的なインスピレーションだった。
こうしてまた見られて本当にうれしい。
今ではAI時代になって、みんな小さなコンピュータなしでは何もできなくなっているのを見ると、妙な正当化の感覚がある。
自分の「おもしろい事実」は、TI-83+のマニュアルを読みながらプログラミングを始めたことだ。
9年生の一年間ずっと、TI-BASICとグラフ関数を使ってStreet Fighterの棒人間版を作っていた。
画面に8行しか表示されないので、後には紙にコードを書くようになった。
2人が同じ電卓で遊べる仕組みをGOTOとLABELで実装したのは、今思い返しても不思議なくらいだ。
いちばん気に入っていた最適化は、頭を円ではなく六角形にしたこと。線を6本引くだけで済むので、ずっと速かった。
9年生のときには、代数の問題を段階的に解くプログラムを作ったのだが、試験中にP1級のバグを見つけた。
宿題では完璧に動いていたのに、試験問題でだけ壊れた。結局、試験よりデバッグに多くの時間を使うことになった。
今思えば、数学よりエッジケースを学ぶ授業だった。
今はモバイル開発をしている。自分が作ったものをポケットに入れて持ち歩けるというのが、いつも好きだった。
関連動画
2.4KBを全部使い切り、すべての変数スロットも使い果たした。
このゲームの起源は1984年のDOSにある。
Drug Wars (video game) - Wikipedia
関連アーカイブ
20世紀後半に9年生だった友人がいたのだが、彼はTI-82でピクセルアートのポルノを作るほど才能あるアーティストだった。
各シーンを2フレームで繰り返し、驚くほどリアルな動きを表現していた。
このゲームはHP 48シリーズでも動く。
HP 48向けDrugwars
RPN万歳。
自分の最初のプログラミング体験はTI-83だった。
授業中に友達に選択式アドベンチャーゲームを遊ばせていたのを、今でも鮮明に覚えている。
TI-83+ではこのゲームを本当によく遊んだ。
あの電卓のおかげでプログラミングを学び、TI-BASICで数学・科学向けの計算プログラムや簡単なゲームを作った。
今では文法はかなり忘れてしまったが、当時はかなり使いこなしていた。
コード中の「If Zù500」のような表現を見て、なぜùという文字が使われているのか気になった。
ChatGPTによると、TI-BASICでは≤のバイト値がANSI/Windows-1252ではù(0xF9)と同じなので、エンコーディングの問題らしい。
うわ、本当に懐かしさが爆発する。
9年生のとき、理科の先生に電卓で何をしているのか聞かれて、停学になるかと思って慌ててゲームを消したのを覚えている。
その代わりWing Commander Privateerみたいなゲームを作っているところを見せて、なんとか切り抜けた。