[ネタ]復活の呪文を解析してみたよ

ゴールデンウィーク(2021-05)に、お勉強を兼ねて React + TypeScript で「ふっかつのじゅもん」の作成ページをGithub Pages 上に作りました（１の方です）。

じつは大昔に、復活の呪文の解析をした日記/作成できる CGI を公開していたことがあります。
（現在は、サイトが消滅して Internet Archive の中だけに存在する）
その時のプログラム（＋α）をもとに実装しました。

ついでなので、大昔に書いた「復活の呪文の解析日記」を少しリライトしたものも置いておきます。
ちなみに、ROMの解析などはしておらず、普通に遊んでいる範囲の情報をあつめて帰納的に推測したものです。

プログラムの不具合の究明や何かの調査をする場合に、仮説検証を繰り返して解き明かすことはエンジニアであればだれでも多少は行うことがあると思うので、何かの参考にはなるかと思います（と、かなり強引に正当化してみた）。

日記に興味ない人は、ぐぐっと下にスクロールすると最後のあたりに復活の呪文の作成ページ（とソース）へのリンクがあります。

## ちなみに

これは、GW に書いた駄文３本のうちの１本です。気が向いたらほかの物も読んでみてください。

https://qiita.com/yoshi389111/items/b83ba301f08b2167739d

https://qiita.com/yoshi389111/items/4471c7a73f785fed4615

# 復活の呪文解析日記

## 【1997/06/08】呪文の解析

ふと思い立って、復活の呪文の解析を始めました。

とりあず、名前は「あ　　　」で始めて、何も持っていない状態で、復活の呪文を聞いてみました。

同じ状態でも何種類かの復活の呪文を聞くことが出来るのですが、実際にやってみると８種類までは聞くことが出来ました。

* おさべつに　はほわげげだど　べうきさそ　さには
* かこぶちな　のへろぐぐぶい　かこせつに　つへむ
* けせいなの　へごべううつに　はほめよれ　よごぜ
* こちおねふ　みずいかかすち　なのへむゆ　むわげ
* ゆるへたと　ねふれぎぎぜづ　びあおけす　けとね
* よわみてぬ　ひまがごごぼえ　くしたとね　とまも
* るげやぬひ　まじあおおとね　ふみやりわ　りじだ
* れぐもには　ほざぼええさそ　てぬひまも　まれぎ

数字もキリがよいので、これで全部だろうと判断し、解析を始めます。

まず気が付くのは、どの呪文も９文字目と 10 文字目が同じ文字だということです。
それに、 ある文字とその次の文字が４文字だけ離れている場合が多いということでしょうか。
それもある呪文で４文字だけ離れていると、他の呪文でも同じ場所は４文字だけ離れていることが多い。
同様に７文字離れていると、他の呪文の同じ場所でも７文字離れていることがほとんどのようです。

どうやら、文字と文字の差分にこそ情報が隠れているようですね。

しかし、ここで問題が一つ。
差分を抜き出すには文字コードが分からないといけないのですが、この場合はどうなっているんでしょう？
まあ、差分から逆に求めればなんとかなりそうな気がするんですが。

## 【1997/07/08】その２

名前は「あ　　　」で、持ち物はたいまつを一つだけの状態で呪文を聞いています。

* おさべざぞ　でぶしたたまも　らろぐじだ　じせつ
* かこぶごぜ　づびさそそには　はめよれぎ　れおけ
* けせいぜづ　びちまももれぎ　ざぞでぶい　ぶのへ
* こちおぢば　ぼとめよよぜづ　びあおけす　けやり
* ゆるへげず　ぢばこせせへむ　ゆるがごぜ　ごした
* よわみじだ　どべすちちねふ　みやりわげ　わきさ
* るげやだど　べてむゆゆわげ　ずぢばぼえ　ぼひま
* れぐもぞで　ぶつみややじだ　どべうきさ　きめよ

## 【1997/07/09】コード表（勘）

復活の呪文で使われている 64 文字のコード表は、おそらく次の表のような感じでしょうか（呪文の入力画面からの推測）。

|     | +0 | +1 | +2 | +3 | +4 |
|:---:|:--:|:--:|:--:|:--:|:--:|
| +00 | あ | い | う | え | お |
| +05 | か | き | く | け | こ |
| +10 | さ | し | す | せ | そ |
| +15 | た | ち | つ | て | と |
| +20 | な | に | ぬ | ね | の |
| +25 | は | ひ | ふ | へ | ほ |
| +30 | ま | み | む | め | も |
| +35 | や | ゆ | よ |    |    |
| +38 | ら | り | る | れ | ろ |
| +43 | わ |    |    |    |    |
| +44 | が | ぎ | ぐ | げ | ご |
| +49 | ざ | じ | ず | ぜ | ぞ |
| +54 | だ | ぢ | づ | で | ど |
| +59 | ば | び | ぶ | べ | ぼ |

この仮定をもとに、前回・前々回の復活の呪文の差分（例： `#2の差分 = #2のコード - #1のコード` ）を取ってみると……。

まずは、名前「あ　　　」アイテム無し

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:--------:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:--:|:--:|:--:|:-:|:--:|:--:|:--:|:--:|:--:|:-:|:--:|:--:|:--:|
| 文字 | け | せ | い | な | の | - | へ | ご | べ | う | う | つ | に | - | は | ほ | め | よ | れ | - | よ | ご | ぜ |
| 文字コード(10進数) | 08 | 13 | 01 | 20 | 24 | - | 28 | 48 | 62 | 02 | 02 | 17 | 21 | - | 25 | 29 | 36 | 37 | 41 | - | 37 | 48 | 52 |
| １つ前の文字との差 | -- | 05 | 52 | 19 | 04 | - | 04 | 20 | 14 | 04 | 00 | 15 | 04 | - | 04 | 04 | 04 | 04 | 04 | - | 60 | 11 | 04 |
| 文字の差(８進数) | 10 | 05 | 64 | 23 | 04 | - | 04 | 24 | 16 | 04 | 00 | 17 | 04 | - | 04 | 04 | 04 | 04 | 04 | - | 74 | 13 | 04 |

となりました。
最後の行は８進数です（文字は64種類、つまり 6bit なので、８進数の方がビット単位で見やすいと思ったため）。
最初のコード(#1の位置)は、１文字目のコードをそのまま書いてあります。

残りのものも含めて、「文字の差(８進数)」の個所だけ表にしてみます。
まずは、アイテム無しのもの。

名前「あ　　　」アイテム無し（文字の差(８進数)）。

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| １つ目   | 04 | 06 | 64 | 23 | 04 | -  | 04 | 04 | 16 | 04 | 00 | 07 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 13 | 04 |
| ２つ目   | 05 | 04 | 64 | 23 | 04 | -  | 04 | 04 | 16 | 04 | 00 | 17 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 13 | 04 |
| ３つ目   | 10 | 05 | 64 | 23 | 04 | -  | 04 | 24 | 16 | 04 | 00 | 17 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 13 | 04 |
| ４つ目   | 11 | 07 | 64 | 23 | 04 | -  | 04 | 24 | 16 | 04 | 00 | 07 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 13 | 04 |
| ５つ目   | 44 | 04 | 64 | 63 | 04 | -  | 04 | 04 | 16 | 04 | 00 | 07 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 13 | 04 |
| ６つ目   | 45 | 06 | 64 | 63 | 04 | -  | 04 | 04 | 16 | 04 | 00 | 17 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 13 | 04 |
| ７つ目   | 50 | 07 | 64 | 63 | 04 | -  | 04 | 24 | 16 | 04 | 00 | 17 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 13 | 04 |
| ８つ目   | 51 | 05 | 64 | 63 | 04 | -  | 04 | 24 | 16 | 04 | 00 | 07 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 13 | 04 |

次は、名前「あ　　　」たいまつ１つだけ（文字の差(８進数)）。

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| １つ目   | 04 | 06 | 64 | 63 | 04 | -  | 04 | 04 | 16 | 04 | 00 | 17 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 33 | 04 |
| ２つ目   | 05 | 04 | 64 | 63 | 04 | -  | 04 | 04 | 16 | 04 | 00 | 07 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 33 | 04 |
| ３つ目   | 10 | 05 | 64 | 63 | 04 | -  | 04 | 24 | 16 | 04 | 00 | 07 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 33 | 04 |
| ４つ目   | 11 | 07 | 64 | 63 | 04 | -  | 04 | 24 | 16 | 04 | 00 | 17 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 33 | 04 |
| ５つ目   | 44 | 04 | 64 | 23 | 04 | -  | 04 | 04 | 16 | 04 | 00 | 17 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 33 | 04 |
| ６つ目   | 45 | 06 | 64 | 23 | 04 | -  | 04 | 04 | 16 | 04 | 00 | 07 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 33 | 04 |
| ７つ目   | 50 | 07 | 64 | 23 | 04 | -  | 04 | 24 | 16 | 04 | 00 | 07 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 33 | 04 |
| ８つ目   | 51 | 05 | 64 | 23 | 04 | -  | 04 | 24 | 16 | 04 | 00 | 17 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 74 | 33 | 04 |

大きな違いは、最後から２番目のコード（#19）。 このあたりに１番目のアイテムのデータが入っているのかな？

## 【1997/07/10】勇者「ああああ」

復活の呪文の文字と、名前の文字は別のコードですよね。
勝手な想像ですけど、名前のコードは「あ」が `0` で あ行～ま行・やゆよ・ら行・わをん・濁点・半濁点・ っゃゅょ－・数字の０～９・空白の順に並び、 最後の空白が `63` ( 10 進数 ) の様な気がします。
まあ、何の根拠もないんですけどね。

というわけで、名前「ああああ」アイテム何もなし。

* なひべおけ　すちまもそひま　もらろぐじ　きした
* にはぶえく　したほめせつに　はほめよれ　ぶうき
* のほいくし　たやざぞめよれ　ぎざぞでぶ　つぬひ
* はむおさそ　てらぜづゆごぜ　づびあおけ　へめよ
* ぜづへうき　さそへむすのへ　むゆるがご　おこせ
* ぞばみかこ　せつみやたとね　ふみやりわ　ぼおけ
* づぼやこせ　つよずぢやりわ　げずぢばぼ　とのへ
* でべもけす　ちゆじだもぐじ　だどべうき　ひみや

そして、その差分。名前「ああああ」アイテムなし（文字の差(８進数)）。

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| １つ目   | 24 | 06 | 44 | 06 | 04 | -  | 04 | 04 | 16 | 04 | 54 | 14 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |
| ２つ目   | 25 | 04 | 44 | 06 | 04 | -  | 04 | 04 | 16 | 04 | 54 | 04 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |
| ３つ目   | 30 | 05 | 44 | 06 | 04 | -  | 04 | 24 | 16 | 04 | 54 | 04 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |
| ４つ目   | 31 | 07 | 44 | 06 | 04 | -  | 04 | 24 | 16 | 04 | 54 | 14 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |
| ５つ目   | 70 | 07 | 44 | 46 | 04 | -  | 04 | 24 | 16 | 04 | 54 | 04 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |
| ６つ目   | 71 | 05 | 44 | 46 | 04 | -  | 04 | 24 | 16 | 04 | 54 | 14 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |
| ７つ目   | 64 | 04 | 44 | 46 | 04 | -  | 04 | 04 | 16 | 04 | 54 | 14 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |
| ８つ目   | 65 | 06 | 44 | 46 | 04 | -  | 04 | 04 | 16 | 04 | 54 | 04 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |

## 【1997/07/11】120 bit


今回はいつもとは逆に、復活の呪文 ( 6 bit * 20 文字 = 120 bit ) にどんなデータが含まれているか、を考えます。

* 名前４文字 ( 6 bit * 4 )
* 経験値 0 ～ 65535 ( 16 bit )
* ゴールド 0 ～ 65535 ( 16 bit )
* 武器 ７種 ( 3 bit )  
	なし / たけざお / こんぼう / どうのつるぎ / てつのおの / はがねのつるぎ / ほのおのつるぎ / ロトのつるぎ
* 鎧 ７種 ( 3 bit )  
	なし / ぬののふく / かわのふく / くさりかたびら / てつのよろい / はがねのよろい / まほうのよろい / ロトのよろい
* 盾 ３種 ( 2 bit )  
	なし / かわのたて / てつのたて / みかがみのたて
* 薬草 0 ～ 6 ( 3 bit )
* 鍵 0 ～ 6 ( 3 bit )
* 道具 14 種 ( 4 bit * 8 )  
	なし / たいまつ / せいすい / キメラのつばさ / りゅうのうろこ / ようせいのふえ / せんしのゆびわ / ロトのしるし / おうじょのあい / のろいのベルト / ぎんのたてごと / しのくびかざり / たいようのいし / あまぐものつえ / にじのしずく

以上ですね。

全部合わせると 102 bit かな？

ってことは、残りは 18 bit ( 3 文字分 )。
……チェックコードが 18 bit もあるのかなぁ？

## 【1997/07/12】差分の見方

差分の見方ですが、`04` とかのいつもあるデータはそのビットを XOR するのか、ビット自体を削除してしまうのか、その `04` 自体を引くのか、またはそれらを組み合わせた計算をするのだと思います。
どうやっているのかは、まだ分かりませんが。
（なんとなく 特定の数字パターンを引いていくんじゃないかな）

それと、同じ状態で聞ける８種類の復活の呪文で相違のあるビットはチェックコードかなにかなのでしょう。
最初の１文字目(#1)はどうやったらいいか分からないのでとりあえずおいといて。

チェックコードらしき箇所。

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| コード   | 77 | 03 | 00 | 40 | 00 | -  | 00 | 20 | 00 | 00 | 00 | 10 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 |

上記の数字の入っているビットが、チェックコード（かもしれない）ビットでしょう。

最初の１文字目がどうやって決まるかが全く分かりません。
が、ちょっとだけ気になることがあります。
８パターンの復活の呪文をならべると、９文字目(#9)が連続しているように思えることです。

上記の復活の呪文の９文字目(#9)を縦に見てください。
並べ替えると……。

* 名前「あ　　　」でアイテム無し：「うえおか」「ぎぐげご」
* 名前「あ　　　」でたいまつだけ：「せそたち」「もやゆよ」
* 名前「ああああ」でアイテム無し：「ぞだぢづ」「むめもや」

このように４つ連続した組が２つあるみたいじゃないですか？

わかりにくいかな？
「あいうえおかきくけこ」の中の連続した４文字「うえおか」と、「がぎぐげご」の中の連続した４文字「ぎぐげご」になっている。

もしかすると、このあたりが解析の鍵になるかもしれません。
ただの偶然かもしれませんが。

## 【1997/07/13】勇者「あああ＊」

少しだけ名前を変えて調べてみます。

名前「あああい」アイテム無し（文字の差(８進数)）。

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 文字               | さ | そ | じ | づ | び | -  | あ | な | も | ら | ぬ | も | ら | -  | ろ | ぐ | じ | だ | ど | -  | そ | と | ね |
| 文字の差(８進数)   | 12 | 04 | 44 | 06 | 04 | -  | 04 | 24 | 16 | 04 | 60 | 14 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |

面倒なんで、１つだけ。

先日の差分の見方を参考にすると、変わった箇所は名前「ああああ」で `54` (８進数) 固定だった部分(#10)が `60`(８進数)  になっているってとこでしょうか。

固定の部分を引くと **仮定** すると `60 - 54 = 4` で (注：８進数です)、ビットが１つ立ったわけですね。

で、もう一つの **仮定** として「あ」のコードが `0` 、「い」が `1` であれば、このビットこそが名前の４文字目の１番下のビットということでしょう。

続いて、勇者「あああう」アイテム無し（文字の差(８進数)）。</p>

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 文字               | み | ゆ | け | そ | て | -  | ぬ | ひ | る | が | む | が | ご | -  | ぜ | づ | び | あ | お | -  | の | ほ | め |
| 文字の差(８進数)   | 37 | 05 | 44 | 06 | 04 | -  | 04 | 04 | 16 | 04 | 64 | 14 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |

変わっている箇所は……やはり `54` 固定の場所(#10)が `64` になっていますね。
`64 - 54 = 10` で名前の４文字目の下から２番目のビットがここ、ということかな。

さらに続いて勇者「あああ　」アイテム無し（文字の差(８進数)）。

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 文字               | ど | べ | も | る | が | -  | ご | お | て | ぬ | ぬ | ほ | め | -  | よ | れ | ぎ | ざ | ぞ | -  | こ | そ | て |
| 文字の差(８進数)   | 72 | 04 | 44 | 06 | 04 | -  | 04 | 24 | 16 | 04 | 00 | 07 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 24 | 05 | 04 |

空白が `63` ( 10 進数 ) であるという **仮定** であれば、ここで変わるビットが、４文字目の全ビットということでしょう。

で、変わっている箇所は、例の `54` のところとその次のところ(#10～#11)です。
`54` のところが `00` になっていますね。
`00 - 54 = 24` ( 8 進数 で mod 64 ) です。
あれ？　これは、さっきの名前の４文字目の下から２ビット目の位置の **仮定** と矛盾しますね。
ってことは、名前用の文字コードの **仮定** か、もしくは `54` を引くという **仮定** のどちらかが間違っているということ……。
４文字目を色々と変えてみたり、１～３文字目を色々と変えてみれば多少は分かるかもしれないが……うーん、先は長そうだ。

## 【1997/07/18】勇者「００００」

「大技林」（注：という裏技系情報の本があった）の中の勇者「００００」の呪文「おけすちな　のへむゆるがご　ぜづびあお　けすち」を眺めていたら、差分が全て 04 の様に思えてきました。

早速実際に確認してみると…。

名前「００００」アイテム無し（文字の差(８進数)）。


| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 文字               | お | け | す | ち | な | -  | の | へ | む | ゆ | る | が | ご | -  | ぜ | づ | び | あ | お | -  | け | す | ち |
| 文字の差(８進数)   | 04 | 04 | 04 | 04 | 04 | -  | 04 | 04 | 04 | 04 | 04 | 04 | 04 | -  | 04 | 04 | 04 | 04 | 04 | -  | 04 | 04 | 04 |

はっ！本当に全部 `04` だ！

ということは、差分から４を引く、名前のコードは「０」が `0` ということかな。

* おけすちな　のへむゆるがご　ぜづびあお　けすち
* かしたとね　ふみやりわぢば　ぼえくした　とねふ
* けたとねふ　みずぢばぼした　とねふみや　りわげ
* こそてぬひ　まじだどべうき　さそてぬひ　まもら
* ゆろぐてぬ　ひまもらろぐじ　だどべうき　さそて
* よれぎつに　はほめよれぞで　ぶいかこせ　つには
* るぎざには　ほざぞでぶこせ　つにはほめ　よれぎ
* れごぜのへ　むぜづびあおけ　すちなのへ　むゆる

で、差分。全部の数字から４を引いてあります（例： `#2の差分 = #2のコード - #1のコード -4` ）。

名前「００００」アイテム無し（文字の差-4(８進数)）。

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| １つ目   | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 |
| ２つ目   | 01 | 02 | 00 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | 10 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 |
| ３つ目   | 04 | 03 | 00 | 00 | 00 | -  | 00 | 20 | 00 | 00 | 00 | 10 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 |
| ４つ目   | 05 | 01 | 00 | 00 | 00 | -  | 00 | 20 | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 |
| ５つ目   | 40 | 02 | 00 | 40 | 00 | -  | 00 | 00 | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 |
| ６つ目   | 41 | 00 | 00 | 40 | 00 | -  | 00 | 00 | 00 | 00 | 00 | 10 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 |
| ７つ目   | 44 | 01 | 00 | 40 | 00 | -  | 00 | 20 | 00 | 00 | 00 | 10 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 |
| ８つ目   | 45 | 03 | 00 | 40 | 00 | -  | 00 | 20 | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 00 |


差分から４を引いている。チェックビットも削除している。先頭１文字目も無視。

いろいろな名前　アイテム無し（文字の差-4(８進数)）。

| 文字位置 | #1 | #2 | #3 | #4 | #5 | - | #6 | #7 | #8 | #9 | #10 | #11 | #12 | - | #13 | #14 | #15 | #16 | #17 | - | #18 | #19 | #20 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 「ああああ」 | 00 | 00 | 40 | 02 | 00 | -  | 00 | 00 | 12 | 00 | 50 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「あああい」 | 00 | 00 | 40 | 02 | 00 | -  | 00 | 00 | 12 | 00 | 54 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「あああう」 | 00 | 00 | 40 | 02 | 00 | -  | 00 | 00 | 12 | 00 | 60 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「あああえ」 | 00 | 00 | 40 | 02 | 00 | -  | 00 | 00 | 12 | 00 | 64 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「あああお」 | 00 | 00 | 40 | 02 | 00 | -  | 00 | 00 | 12 | 00 | 70 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「あああか」 | 00 | 00 | 40 | 02 | 00 | -  | 00 | 00 | 12 | 00 | 74 | 00 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「あああき」 | 00 | 00 | 40 | 02 | 00 | -  | 00 | 00 | 12 | 00 | 00 | 01 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「あああぬ」 | 00 | 00 | 40 | 02 | 00 | -  | 00 | 00 | 12 | 00 | 00 | 02 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「あああ　」 | 00 | 00 | 40 | 02 | 00 | -  | 00 | 00 | 12 | 00 | 74 | 03 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「ああ　　」 | 00 | 00 | 60 | 17 | 00 | -  | 00 | 00 | 12 | 00 | 74 | 03 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 20 | 01 | 00 |
| 「あ　　　」 | 00 | 00 | 60 | 17 | 00 | -  | 00 | 00 | 12 | 00 | 74 | 03 | 00 | -  | 00 | 00 | 00 | 00 | 00 | -  | 70 | 07 | 00 |

「あ」が `10` ( 10 進数 ) 、「い」が `11` 、「う」が `12` といった感じかな。

## 【1997/07/19】名前

どうやら、後ろの方から差分を取った方が見やすいようですね。
（注：複数の文字にまたがっているビット列の、上下関係のため。詳細後述）

いろいろな名前　アイテム無し（文字の差-4(８進数)・逆順）

| 文字位置 | #20 | #19 | #18 | - | #17 | #16 | #15 | #14 | #13 | - | #12 | #11 | #10 | #9 | #8 | #7 | #6 | - | #5 | #4 | #3 | #2 | #1 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 「ああああ」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 50 | 00 | 12 | 00 | 00 | -  | 00 | 02 | 40 | 00 | 00 |
| 「あああい」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 54 | 00 | 12 | 00 | 00 | -  | 00 | 02 | 40 | 00 | 00 |
| 「あああう」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 60 | 00 | 12 | 00 | 00 | -  | 00 | 02 | 40 | 00 | 00 |
| 「あああえ」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 64 | 00 | 12 | 00 | 00 | -  | 00 | 02 | 40 | 00 | 00 |
| 「あああお」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 70 | 00 | 12 | 00 | 00 | -  | 00 | 02 | 40 | 00 | 00 |
| 「あああか」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 00 | 74 | 00 | 12 | 00 | 00 | -  | 00 | 02 | 40 | 00 | 00 |
| 「あああき」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 01 | 00 | 00 | 12 | 00 | 00 | -  | 00 | 02 | 40 | 00 | 00 |
| 「あああぬ」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 02 | 00 | 00 | 12 | 00 | 00 | -  | 00 | 02 | 40 | 00 | 00 |
| 「あああ　」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 03 | 74 | 00 | 12 | 00 | 00 | -  | 00 | 02 | 40 | 00 | 00 |
| 「ああ　　」 | 00 | 01 | 20 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 03 | 74 | 00 | 12 | 00 | 00 | -  | 00 | 17 | 60 | 00 | 00 |
| 「あ　　　」 | 00 | 07 | 70 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 03 | 74 | 00 | 12 | 00 | 00 | -  | 00 | 17 | 60 | 00 | 00 |
| 「を　　　」 | 00 | 07 | 70 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 03 | 74 | 00 | 66 | 00 | 00 | -  | 00 | 17 | 60 | 00 | 00 |
| 「ん　　　」 | 00 | 07 | 70 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 03 | 74 | 00 | 67 | 00 | 00 | -  | 00 | 17 | 60 | 00 | 00 |
| 「っゃゅょ」 | 00 | 07 | 10 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 03 | 54 | 00 | 70 | 00 | 00 | -  | 00 | 16 | 40 | 00 | 00 |
| 「゛゜　　」 | 00 | 07 | 50 | -  | 00 | 00 | 00 | 00 | 00 | -  | 00 | 03 | 74 | 00 | 74 | 00 | 00 | -  | 00 | 17 | 60 | 00 | 00 |

* 名前の１文字目はおそらく #8 の位置でしょう
* ２文字目は #20 の下 3bit と #19 の上 3bit 。
* ３文字目は #4 の下 4bit と #3 の上 2bit 。
* ４文字目は #11 の下 2bit と #10 の上 4bit 。

（注：名前の2文字目が #20 の下 3bit から #19 の上 3bit へと続いて配置になっているように、ビットイメージで見た場合に、#20 を先頭、#1 を末尾にしたほうが見やすかった）

名前用のコードは以下のようになっているようです。

|     | +0 | +1 | +2 | +3 | +4 |
|:---:|:--:|:--:|:--:|:--:|:--:|
| +00 | ０ | １ | ２ | ３ | ４ |
| +05 | ５ | ６ | ７ | ８ | ９ |
| +10 | あ | い | う | え | お |
| +15 | か | き | く | け | こ |
| +20 | さ | し | す | せ | そ |
| +25 | た | ち | つ | て | と |
| +30 | な | に | ぬ | ね | の |
| +35 | は | ひ | ふ | へ | ほ |
| +40 | ま | み | む | め | も |
| +45 | や | ゆ | よ |    |    |
| +48 | ら | り | る | れ | ろ |
| +53 | わ | を | ん |    |    |
| +56 | っ | ゃ | ゅ | ょ |    |
| +60 | ゛ | ゜ | ー | 　 |    |

## 【1997/07/20】各データ（未確定版）

名前以外のデータも大体把握できました。
１ビットづつ変えた復活の呪文を聞いて変わったビットを確認して、というのを延々とやりました。
面倒なんで、結果だけ。

それと 8bit 毎に区切り直した方が見やすいようなので、そうなってます。
また、順番も逆になっています（末尾のバイトが先頭文字含む）。

* アイテム２番目(4bit)＋１番目(4bit)
* 鱗装備(1bit)＋名前２文字目(6bit)＋未使用(1bit)
* 経験値上(8bit)
* アイテム６番目(4bit)＋５番目(4bit)
* 鍵(4bit)＋薬草(4bit)
* 所持金上(8bit)
* 武器(3bit)＋鎧(3bit)＋盾(2bit)
* チェックコード(1bit)＋未使用(1bit)＋名前４文字目(6bit)
* アイテム８番目(4bit)＋７番目(4bit)
* 名前１文字目(6bit)＋未使用(1bit)＋チェックコード(1bit)
* 所持金下(8bit)
* アイテム４番目(4bit)＋３番目(4bit)
* チェックコード(1bit)＋未使用(1bit)＋名前３文字目(6bit)
* 経験値下(8bit)
* チェックコード(8bit)

鱗装備というのは、「りゅうのうろこ」を身に付けたことがあるかどうかです。

「未使用」といっているものが本当に未使用かは分かりません。

1bit 単位のチェックコードは８パターンある復活の呪文のキーじゃないかと思っています。

かなりのデータが分かり、なんとなくもう少しで復活の呪文の捏造ができるような気になりますが、実際には最後のそして最大の難関が手付かずのままのこってますね。
つまり、チェックコードの計算方法です。

## 【1997/07/22】チェックコード

チェックコードの解析ですね。
とりあえず、一番シンプルな勇者「００００」でしょう。
経験値を1づつ取得して、復活の呪文を聞いてみました。

```
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - EXP 0
00 00 00 00 00 00 00 00 00 00 00 00 00 01 61 - EXP 1
00 00 00 00 00 00 00 00 00 00 00 00 00 02 c2 - EXP 2
00 00 00 00 00 00 00 00 00 00 00 00 00 03 a3 - EXP 3
00 00 00 00 00 00 00 00 00 00 00 00 00 04 a5 - EXP 4
00 00 00 00 00 00 00 00 00 00 00 00 00 05 c4 - EXP 5
```

例の 8bit 毎に切り直した結果を 16 進数で表しています。

`0x61 * 2 = 0xc2` ですが……偶然かな？

それよりも `0x61 xor 0xc2 = 0xa3` の方が気になりますね（経験値 1, 2, 3 を比較）。
それに `0x61 xor 0xa5 = 0xc4` （経験値 1, 4, 5 を比較）。

どうやら、各 bit がある数値と括りついていてそれらの xor がチェックコードということかな？
（経験値の下1bit目が `0x61` とくくりついて、下2bit目が `0xc2` とくくりついて、下3bit目が `0xa5` とくくりついている想定）

……いろいろ検証してみたが、どうやらそーらしい。
でも、 14 byte * 8 = 112 bit 分もマジックナンバーがあるの？

おそらくはいくつかの数字から計算で求められるんじゃないかとおもいますが、それを調べるのは、 112 個のデータを集めないと……。

## 【1997/07/25】完成！！かな？（注：未完成です）

ここ数日ひたすらチェックコードを解析していました。
で、結果。

一番左に書いてあるのが最上位ビット、一番右が最下位ビットと括りついたマジックナンバーです。</p>

```
0x88 0xc4 0x62 0x31 0x08 0x84 0x42 0x21
0x98 0xcc 0xe6 0x73 0xa9 0xc4 0x62    0
0x5a 0xad 0xc6 0x63 0xa1 0xc0 0x60 0x30
0x38 0x9c 0x4e 0xa7 0xc3 0xf1 0x68 0xb4
   0 0x68 0xb4 0x5a    0 0x06 0x83 0x51
0x20 0x10 0x08 0x84 0x42 0xa1 0x40 0xa0
0xf9 0xec 0xf6 0x7b 0xad 0xc6 0xe3 0x61
0x81 0xd0 0x68 0xb4 0xda 0x6d 0xa6 0xd3
0xb2 0xd9 0xfc 0xfe 0xff 0xef 0x67 0x23
0x34 0x1a 0x0d 0x96 0x4b 0x35 0x8a 0x45
0xaa 0xd5 0x7a 0x3d 0x8e 0x47 0xb3 0x49
0xa1 0x40 0xa0 0x50 0xa8 0xd4 0xea 0x75
0xa0    0 0x68 0xb4 0x5a 0xad 0xc6 0x63
0x7e 0xbf 0xcf 0xf7 0x6b 0xa5 0xc2 0x61
```

こんな感じでした。
`0` が４か所ありますが、そこはチェックできていません。

それと 8byte 目の上から 2bit 目は王女の所のドラゴンを倒したかどうか、のようです。
同様に 10byte 目の下から 2bit 目はゴーレムを倒したかどうか、のようです。
ということは、ほかの未使用ビットも意味があるのかな。

それとなんとなく規則が見えそうで、でも良く分からないです。

上位 4bit と下位 4bit は別に見る。
下位 4bit は 0x08 → 0x0c → 0x06 → 0x03 → 0x09 → 0x04 → 0x02 → ?? の様に
1bit づつ 8 段階にシフトしているのかな。
上位 4bit は……同様にシフトしているけど 4 段階ってことなのか？
でも違うところもあるなぁ。単純にミスだったりして。

ま、いいや。とりあえずここまでで CGI を作って公開しました。
（注：昔、公開していました）

## 【1998/02/07】戦士の指輪

2byte 目の一番下の bit は「戦士の指輪」を装備しているかどうかのようですね。

## 【1998/05/31】最後のフラグ

情報提供がありまして、最後のフラグは「死の首飾り」を入手したかどうかのようです。

また、チェックコードの求め方についても、判明しました。おそらく CRC を求めているようです。
（CRC-16-CCITT, 多項式は 0x1021。とあるCRCを計算しているプログラムを見ていて気が付きました）

https://ja.wikipedia.org/wiki/%E5%B7%A1%E5%9B%9E%E5%86%97%E9%95%B7%E6%A4%9C%E6%9F%BB

例のマジックナンバーは、以下のようなコーディングで求める事ができます。

```c
   int cd = 0x8000;
   for (int i = 0; i < 15 * 8; i++) {
       if (cd & 0x8000) {
           cd = (cd << 1) ^ 0x1021;
       } else {
           cd <<= 1;
       }
       printf("0x%.2x\n", cd & 0xff);
   }
```

結果：（先頭の下のビットから順番に）

```
0x21
0x42
0x84
0x08
0x31
0x62
（以下略）
```

マジックナンバーの完全版は、以下の通り。

```
0x88 0xc4 0x62 0x31 0x08 0x84 0x42 0x21
0x98 0xcc 0xe6 0x73 0xa9 0xc4 0x62 0x31
0x5a 0xad 0xc6 0x63 0xa1 0xc0 0x60 0x30
0x38 0x9c 0x4e 0xa7 0xc3 0xf1 0x68 0xb4
0xd0 0x68 0xb4 0x5a 0x2d 0x06 0x83 0x51
0x20 0x10 0x08 0x84 0x42 0xa1 0x40 0xa0
0xf9 0xec 0xf6 0x7b 0xad 0xc6 0xe3 0x61
0x81 0xd0 0x68 0xb4 0xda 0x6d 0xa6 0xd3
0xb2 0xd9 0xfc 0xfe 0xff 0xef 0x67 0x23
0x34 0x1a 0x0d 0x96 0x4b 0x35 0x8a 0x45
0xaa 0xd5 0x7a 0x3d 0x8e 0x47 0xb3 0x49
0xa1 0x40 0xa0 0x50 0xa8 0xd4 0xea 0x75
0xa0 0xd0 0x68 0xb4 0x5a 0xad 0xc6 0x63
0x7e 0xbf 0xcf 0xf7 0x6b 0xa5 0xc2 0x61
```

## 【2001/07/14】各データの最終版

相変わらず 8bit 毎に区切り直してあります（順番も逆になっています）。

* アイテム２番目(4bit)＋１番目(4bit)
* 鱗装備(1bit)＋名前２文字目(6bit)＋戦士の指輪装備有無(1bit)
* 経験値上(8bit)
* アイテム６番目(4bit)＋５番目(4bit)
* 鍵(4bit)＋薬草(4bit)
* 所持金上(8bit)
* 武器(3bit)＋鎧(3bit)＋盾(2bit)
* チェックコード(1bit)＋見張りのドラゴンを倒したか(1bit)＋名前４文字目(6bit)
* アイテム８番目(4bit)＋７番目(4bit)
* 名前１文字目(6bit)＋ゴーレムを倒したか(1bit)＋チェックコード(1bit)
* 所持金下(8bit)
* アイテム４番目(4bit)＋３番目(4bit)
* チェックコード(1bit)＋死の首飾り入手済(1bit)＋名前３文字目(6bit)
* 経験値下(8bit)
* チェックコード(8bit)

順番を戻して、6bit 毎つまり文字単位に切ると以下の通り。
制限のあるもの（チェックコードやアイテム、それに鍵・薬草など）を強調してあります。
また、５文字，７文字，５文字，３文字に区切って、間に（空白）と記述しておきます。

*  **チェックコード下(6bit)**
* 経験値４(4bit)＋ **チェックコード上(2bit)**
* 名前３文字目の下(2bit)＋経験値３(4bit)
* チェックコード(1bit)＋死の首飾り入手済(1bit)＋名前３文字目の上(4bit)
*  **アイテム４番目の下(2bit)** ＋ **アイテム３番目(4bit)**
* （空白）
* 所持金４(4bit)＋ **アイテム４番目の上(2bit)**
* ゴーレムを倒したか(1bit)＋ **チェックコード(1bit)** ＋所持金３(4bit)
* 名前１文字目(6bit)
*  **アイテム８番目の下(2bit)**  **アイテム７番目(4bit)**
* 名前４文字目の下(4bit)＋ **アイテム８番目の上(2bit)**
* 盾(2bit)＋ **チェックコード(1bit)** ＋見張りのドラゴンを倒したか(1bit)＋名前４文字目の上(2bit)
* 武器(3bit)＋鎧(3bit)
* （空白）
* 所持金２(6bit)
*  **薬草(4bit)** ＋所持金１(2bit)
*  **アイテム５番目の下(2bit)** ＋ **鍵(4bit)**
*  **アイテム６番目(4bit)** ＋ **アイテム５番目の上(2bit)**
* 経験値２(6bit)
* （空白）
* 名前２文字目の下(3bit)＋戦士の指輪装備有無(1bit)＋経験値１(2bit)
*  **アイテム１番目の下(2bit)** ＋鱗装備(1bit)＋名前２文字目の上(3bit)
*  **アイテム２番目(4bit)** ＋ **アイテム１番目の上(2bit)**

# 「ふっかつのじゅもん」の作成ページ

上記の内容をもとに、あらためて「ふっかつのじゅもん」を作成できるページを作りました。
React のいろいろな部品を使って今風なUI/UXにしようかと思ったけど、そんなセンスもないのでとりあえず非常にシンプルな感じの画面になっています。

https://yoshi389111.github.io/dq1pswd/

ソースはこちら

https://github.com/yoshi389111/dq1pswd

（うまく動かなかったらごめんね）

各種項目を入力して呪文を作る方法と、呪文を入力して妥当性を確認する方法があります。

## 項目を入力して呪文を作る

「[ふっかつのじゅもん](https://yoshi389111.github.io/dq1pswd/)」のページにいって、初期表示の画面が項目入力画面です。
（また、後述の呪文入力画面で左下の「項目を入力」ボタンを押すことで、画面遷移します）

４文字までで、名前を入力してください。
使用できる文字はひらがな（一部使えない文字があります）、数字、スペースのみです。
濁点、半濁点も一文字として数えます。

具体的な使える文字は以下の通りです（見えませんが、スペースも使えます）。

```
０１２３４５６７８９
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
はひふへほ
まみむめも
やゆよ
らりるれろ
わをん
っゃゅょ
゛゜－　
```

その他の項目を選択して「呪文を確認」をクリックすると、呪文が表示されます。

クリップボードにコピーするか、ツイッターにツイートすることができます。

## 呪文を入力して妥当性を確認

「[ふっかつのじゅもん](https://yoshi389111.github.io/dq1pswd/)」のページにいって、左下の「呪文を入力」ボタンを押すと、呪文入力画面が表示されます。

呪文を２０文字で入力してください。
呪文として使える文字はひらがなだけです（一部使えない文字があります）。

濁点・半濁点は、分離せずに１文字と数えます（例：「が」は１文字）。

単独の濁点・半濁点の文字は無効です（例：「か゛」は無効な文字を除外して「か」と判断されます）。

具体的な使える文字は以下の通りです。

```
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
はひふへほ
まみむめも
やゆよ
らりるれろ
わ
がぎぐげご
ざじずぜぞ
だぢづでど
ばびぶべぼ
```

見やすさのため、スペースを入力することもできます（呪文の文字数にはカウントしません）

右下の「呪文を確認」ボタンを押すと、呪文をチェックします。

## 語呂合わせの「ふっかつのじゅもん」を作りたい場合

呪文を入力する際、ひらがな以外に「？」を入力していると、呪文として使えるパターンが表示されます。

* 例：`ふるいけや　かわずとびこむ　みずのおと　ば？？`

「？」は最大３つまで書けますが、３つ書くと処理に時間がかかるので注意してください。

また、特定の位置に特定の文字を並べると、例えば不正なアイテムを持っていることになって、残りの場所をどのように変えても有効な呪文にならないことがあります。
（あるいはMAX以上の薬草や鍵を持っていることになるケースもある）

その場合には「n～m文字目のどこかを変更してね」といったメッセージが出ますので、修正してください。

また、上記メッセージがでなくても有効な呪文でないことがあります。
これは、呪文全体のチェックコード（内部的には CRC を使っています）での検証が通っていないものです。
呪文のどこかを修正すると有効な呪文になるはずなので、言い回しを変えられそうな部分に「？」を入れて、候補をしらべてください。

おもしろい語呂合わせのふっかつのじゅもんができたら、ツイッターなどで自慢しましょう。

既存の作品を見てみたい方は、以下の「奇妙な「復活の呪文」大辞典」までどうぞ（古い記事を掘り起こしたので、古いネタが多いです。時事ネタとか）。

https://yoshi389111.github.io/dq1pswd/dq1oddpswd.html

github のマークダウンを github pages に置いただけなので、見た目がしょぼいのはご容赦を。

## ついでに

あわせて GW に書いた駄文です。気が向いたら読んでください。

https://qiita.com/yoshi389111/items/b83ba301f08b2167739d

https://qiita.com/yoshi389111/items/4471c7a73f785fed4615