このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

Rustでつくる ふっかつのじゅもん

Rust

2025.04.29

どもです。

GW入りましたねぇ。

それはそうと、Swicth2当選したぞおおおぞおおおぞおおお!!

と。

ありがとうございます。おめでとうございます。

日頃の行いですかね。徳を積んだ結果ですかね。

と言った感じで、気がついた方もいらっしゃるかと思いますが、以前まで「Tauri(Rust) × AI で作る GitGUIクライアントアプリ その5」と、Cusorを用いた「バイブコーディング」(流行りに乗った)を行っていたわけですが、今回はちょっと異なった記事。

そう、来たのです。飽きが。

あるあるなのですが、バァーとやってしまうと飽きが来ちゃうんですよねぇ。。

ですが、やめたわけではなく、ちょっとした休憩です。

そんな休憩中に作業を行ったのは、来年発売40周年を迎える FC版 初代ドラゴンクエストのふっかつのじゅもん生成。

仕事中や、買い物中にふと「あーふっかつのじゅもんを生成したいなぁ」とか、

あ!ふっかつのじゅもんを生成せずに買い物に来てしまった」とか、

言う事あったりしませんか。僕はありません。

そんな時に便利なのが今回のツール。

 

あれ、なんかなかった?」と思われる方は鋭い。

以前「【JS】ドラゴンクエスト バトルシミュレーター (ドラクエ戦闘シーン改)」なるものを12年ほど前に作成させていただきのですが、ありがたいことに今でも観ていただいている方がいらしたりと感謝の限りです。

こちらはバトルシーンのみで今回はバトルも含め、任意のパラメータを作成し、ふっかつのじゅもんを生成、ふっかつのじゅもんからパラメータを生成 etcの機能を持った、ドラクエ コアモジュールなるものをRustで作成したことになります。

ふっかつのじゅもん

FC版 初代ドラゴンクエストは、今じゃ当たり前の「セーブ機能」なんて生温い機能は搭載されていなく、20文字からなるパスワード、その名も「ふっかつのじゅもん」から冒険の続きの再開や、中断を行う形となっています。

たった20文字のバイナリサイズで冒険の情報を保存しているのだから驚きですよね。

そんなボリューム感なので、ゲーム自体のボリュームも大きくなく、ローレベルのコーディングを行うには、FC版 初代ドラゴンクエストぐらいのボリュームが持って来いの仕様だったりします。この作業を行うことによって、あんなに少ない容量で工夫して大作を作り上げた努力の結晶が垣間見えたりして、非常に面白いです。というか、幼少期から多くの時間を過ごし、たくさんの感動を与えてもらったドラクエが故にバイアスかかっているかもですが。

面白くて作業に没頭してしまい、お陰様でGW前半は殆ど、これで潰してしまいました。。

とはいえ、以前から作成したいなぁと思っていたので、今回作成出来てよかったです。

以前の「【JS】ドラゴンクエスト バトルシミュレーター (ドラクエ戦闘シーン改)」では、色んなサイトを参考にしつつ、仕様を汲み取ったのですが、結構曖昧なところもあって、本家とはほど遠かったりしますが、今回は「ふっかつのじゅもん」も絡んで来ることから、しっかりと仕様を理解し本家の挙動や数値に大分近づいているのではないかと思います。

 

説明はいいんで、ソースはよ。って方はこちらになります。

DomDara

https://github.com/retrodig/damdara

 

ふっかつのじゅもんの仕様

では、さっそく「ふっかつのじゅもん」の仕様に関してをと。

以下の図は「ふっかつのじゅもん」の 120bit構造を表している図になります。

このようにマッピングがされているのですが、

  • 名前(6bit×4文字)
  • 経験値(16bit)
  • ゴールド(16bit)
  • ぶき(3bit)
  • よろい(3bit)
  • たて(2bit)
  • アイテム(4bit×8)
  • やくそうの数(4bit)
  • かぎの数(4bit)
  • りゅうのうろこを装備したか(1bit)
  • せんしのゆびわを装備したか(1bit)
  • しのくびかざりを入手したか(1bit)
  • ドラゴンを倒したか(1bit)
  • ゴーレムを倒したか(1bit)
  • パターン(3bit)
  • チェックサム(8bit)
 

これらの構造をバラして、「ふっかつのじゅもん」を生成するために再配置した構造は以下の通りです。

Byte Index フィールド概要 ビット数

0

チェックサム (CRC-8) 8bit
1 経験値 (下位8bit) 8bit
2 パターン 3bit目 + しのくびかざり入手フラグ + 名前の3文字目 1bit + 1bit + 6bit
3 アイテム 4つ目 + アイテム 3つ目 4bit + 4bit
4 ゴールド (下位8bit) 8bit
5 名前の1文字目 + ゴーレムを倒したかフラグ + パターン 2bit目 6bit + 1bit + 1bit
6 アイテム 8つ目 + アイテム 7つ目 4bit + 4bit
7 パターン 1bit目 + ドラゴンを倒したかフラグ + 名前の4文字目 1bit + 1bit + 6bit
8 ぶき + よろい + たて 3bit + 3bit + 2bit
9 ゴールド (上位8bit) 8bit
10 かぎの数 + やくそうの数 4bit + 4bit
11 アイテム 6つ目 + アイテム 5つ目 4bit + 4bit
12 経験値 (上位8bit) 8bit
13 りゅうのうろこを装備したかフラグ + 名前の2文字目 + せんしのゆびわを装備したかフラグ 1bit + 6bit + 1bit
14 アイテム 2つ目 + アイテム 1つ目 4bit + 4bit

図で表すと以下の様な感じ。

 ここから更に、分解したり組み替えたりして「ふっかつのじゅもん」を生成するのですが、それまで解説するとそれなりの量になるので今回は割愛させていただきます。

 

ドムドーラの使い方

ドムドーラとは?

Damdara は、ファミコン版『ドラゴンクエスト』の「ふっかつのじゅもん」システムを完全再現しつつ、プレイヤーの名前によるステータス生成、アイテム装備、戦闘処理などの機能を持つ、Rustで構築可能にしたレトロファンタジー向けコアロジッククレートです。

インストール

Brewの場合は、

brew tap webcyou-org/tap
brew install damdara

で、cargoの場合は、

cargo install damdara

でインストールが可能ですね。

cargo run <input>

か、

damdara <input>

で使用が可能。

早速コマンド実行すると、

damdara

player name: ゆうてい
summary: PlayerSummary { name: "ゆうてい", level: 1, hp: 15, mp: 3, gold: 0, experience: 0 }
strength_status: StrengthStatus { level: 1, strength: 4, agility: 6, max_hp: 15, max_mp: 3, attack_power: 4, defense_power: 3, weapon: "なし", armor: "なし", shield: "なし" }で

 

デフォルトの勇者が生成され、パラメータが表示します。

名前を指定するには -n オプションを指定。

cargo run -- -n だい

player name: た゛い
summary: PlayerSummary { name: "た゛い\u{3000}", level: 1, hp: 14, mp: 0, gold: 0, experience: 0 }
strength_status: StrengthStatus { level: 1, strength: 4, agility: 4, max_hp: 14, max_mp: 0, attack_power: 4, defense_power: 2, weapon: "なし", armor: "なし", shield: "なし" }

 

オプションを付与することで、パラメータの変更、アイテムの所持、装備の変更など、様々なパラメータが指定可能です。

経験値を200与えた場合、-e オプションを付与することで経験値が増えた状態で生成できます。

レベルは自動的に反映されます。

cargo run -- -n だい -e 200

player name: た゛い
summary: PlayerSummary { name: "た゛い\u{3000}", level: 5, hp: 32, mp: 20, gold: 0, experience: 200 }
strength_status: StrengthStatus { level: 5, strength: 11, agility: 10, max_hp: 32, max_mp: 20, attack_power: 11, defense_power: 5, weapon: "なし", armor: "なし", shield: "なし" }

さらに、300ゴールドを与えたい場合は -g オプションを付与。

cargo run -- -n だい -e 200 -g 300

player name: た゛い
summary: PlayerSummary { name: "た゛い\u{3000}", level: 5, hp: 32, mp: 20, gold: 300, experience: 200 }
strength_status: StrengthStatus { level: 5, strength: 11, agility: 10, max_hp: 32, max_mp: 20, attack_power: 11, defense_power: 5, weapon: "なし", armor: "なし", shield: "なし" }

 

アイテムの所持を変更したい場合は、対応するアイテムIDをカンマ区切りで渡します。

cargo run -- -n だい -i 2,3,4

player name: た゛い
summary: PlayerSummary { name: "た゛い\u{3000}", level: 1, hp: 14, mp: 0, gold: 0, experience: 0 }
strength_status: StrengthStatus { level: 1, strength: 4, agility: 4, max_hp: 14, max_mp: 0, attack_power: 4, defense_power: 2, weapon: "なし", armor: "なし", shield: "なし" }
item: ["せいすい", "キメラのつばさ", "りゅうのうろこ", "なし", "なし", "なし", "なし", "なし"]

 

その他、フラグの入れ替えなど、様々な設定が行えるので公式レポジトリの方を参考にしていただければと。

Damdara

https://github.com/retrodig/damdara

ふっかつのじゅもんを生成

本題のふっかつのじゅもん生成ですが、-m save コマンドで表示することができます。

cargo run -- -n だい -m save

ぢばげぞでぶいまももれぎざぞでぶいよごぜ

 

なので、

上記で説明したオプションを与え、パラメータを変更したうえで、実行するとそのパラメータの「ふっかつのじゅもん」を生成することができます。

cargo run -- -n だい -e 7000 -m save

きがよわげずぢなののみやりわげずてだいか

 

-m loadオプションを付与することによって、逆にふっかつのじゅもんから勇者を生成することも可能です。

cargo run -- -m load -p ぢばげぞでぶいまももれぎざぞでぶいよごぜ

new_player from Password
player name: た゛い
summary: PlayerSummary { name: "た゛い\u{3000}", level: 1, hp: 14, mp: 0, gold: 0, experience: 0 }
strength_status: StrengthStatus { level: 1, strength: 4, agility: 4, max_hp: 14, max_mp: 0, attack_power: 4, defense_power: 2, weapon: "なし", armor: "なし", shield: "なし" }

 

更に –o maxオプションを付与することによって最強装備で生成することも可能です。

cargo run -- -o max
player name: ゆうてい
summary: PlayerSummary { name: "ゆうてい", level: 30, hp: 210, mp: 180, gold: 65535, experience: 65535 }
strength_status: StrengthStatus { level: 30, strength: 140, agility: 117, max_hp: 210, max_mp: 180, attack_power: 182, defense_power: 108, weapon: "ロトのつるぎ", armor: "ロトのよろい", shield: "みかがみのたて" }
item: ["りゅうのうろこ", "せんしのゆびわ", "ロトのしるし", "おうじょのあい", "ぎんのたてごと", "たいようのいし", "あまぐものつえ", "にじのしずく"]

といった感じで、任意のレベルやパラメータ、ぶき、よろい、たて、どうぐ、ストーリーフラグなどなどを設定しつつ、ふっかつのじゅもんを生成したり確認したりすることが可能となっております。

 

バトル

ふっかつのじゅもん生成のみならず、コマンドライン上で戦闘を開始することも可能です。

戦闘を開始するには -m battle オプションを付与すればよいです。

cargo run -- -m battle

スライムがあらわれた!

ゆうてい HP: 15
スライム HP: 3

--- ゆうていのターン ---
コマンド?
1: たたかう
2: じゅもん
3: どうぐ
4: にげる

各モンスターの特徴やパラメータや、ダメージ計算なども忠実に再現。

 ヘルゴーストは ギラの
 じゅもんを となえた!
 た゛い は 6ポイントの
 ダメージを うけた!

た゛い  HP: 36 MP: 25
ヘルゴースト HP: 31

じゅもんだって、どうぐだって利用可能。

--- じゅもん ---
0: もどる
1: ホイミ
2: ギラ
3: ラリホー
4: レミーラ
5: マホトーン
6: リレミト
7: ルーラ
8: トヘロス
9: ベホイミ
10: ベギラマ
番号を選んでください (0-10): 2

もしやられてしまったのならば、最強装備で再び挑戦しましょう!

cargo run -- -n だい -o max -m battle

スライムがあらわれた!

た゛い  HP: 190
スライム HP: 3

--- た゛い のターン ---
コマンド?
1: たたかう
2: じゅもん
3: どうぐ
4: にげる

 

–viewオプション付与し、敵のidを指定することで、どんなモンスターとも戦うことができます。

最後のボス「りゅうおう」ともすぐに戦えます。

戦えるからって、LV.1で挑むなよ。

た゛い  のこうげき!
ミス
 りゅうおう のこうげき!
 た゛い は 46ポイントの
 ダメージを うけた!

た゛い  HP: 0 MP: 0
りゅうおう HP: 110

あなたは しにました

 

できれば、最強状態で挑もう。

cargo run -- -n だい -o max -m battle --view 39

りゅうおうがあらわれた!

た゛い  HP: 190
りゅうおう HP: 129

--- た゛い のターン ---
コマンド?
1: たたかう
2: じゅもん
3: どうぐ
4: にげる

 りゅうおうは  ほのおをはいた!
 た゛い は 44ポイントの
 ダメージを うけた

た゛い  HP: 146
りゅうおう HP: 129

 

その他

というわけで、「ふっかつのじゅもん」生成のみならず、任意のパラメータで任意の敵と戦闘をエミュレートしたり、様々なことが行える「Domdara」を、このGWの長期連休に使ってみてはいかがでしょうか。

現在、バージョンは0.8.0なのですが、実はまだやりたいことが沢山あり、最低限

  • 勇者生成時の成長パラメータ補正のズレがあるので修正
  • 戦闘のメッセージ表示がBattle struct内部でPrintlnを実行しているので、Message structを設け、メッセージシステムの構築
  • ソース全体の整理

などを行いつつ、

  • 連続バトルでの勇者の成長
  • 疑似フィールド散策し敵とエンカウント
  • 疑似街、城を散策し街人との会話やお買い物
  • その他、マスターデータ

などの作成も検討していきたいと思っております。

と言ったわけで、「ドラゴンクエスト コアモジュール」の「Domdara」のご紹介でした。

ではではぁ。

またまた。

 

 

 

 

 

Comment

Related Article

Rustでつくる ふっかつのじゅもん

2025.04.29

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その5

2025.04.14

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その4

2025.04.10

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その3

2025.04.08

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その2

2025.04.07

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その1

2025.04.05

keyring-rsで、Macのキーチェーンに登録する。

2025.04.04

RustとWebAssemblyによるゲーム開発 Webpack5対応

2025.03.27

Rustで創る MOS 6502 CPU その3 (Cursorと共に)

2025.02.24

Rust-SDL2 examplesをすべて試す

2024.09.01

CATEGORY LIST

LATEST NEWS

Rustでつくる ふっかつのじゅもん

Rust

2025.04.29

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その5

Rust

2025.04.14

う、動くぞ! Mac mini Apple M4 Pro で PS3ソフトを遊ぶ。RPCS3 Mac版を起動

Game

2025.04.12

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その4

Rust

2025.04.10

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その3

Rust

2025.04.08

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その2

Rust

2025.04.07

時代を先取りし過ぎた ニューラルネットワークが導入されたゲーム『がんばれ森川君2号』を令和に嗜んでみる。

Game

2025.04.06

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その1

Rust

2025.04.05

keyring-rsで、Macのキーチェーンに登録する。

Rust

2025.04.04

RustとWebAssemblyによるゲーム開発 Webpack5対応

Rust

2025.03.27

Rustで創る MOS 6502 CPU その3 (Cursorと共に)

Rust

2025.02.24

あけましておめでとうございます(24日経過)

イベント

2025.01.24

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US