engrave.c: wipeout_text(engr, cnt, seed);
- engr 書かれている文字列
- cnt 何文字分消すか
- seed どの文字をどう消すかの乱数制御
- 文字列から1文字を選択
- "?"や、小さい文字なら" "に
- 乱数で処理を決定:
- 25%で"?"に
- 75%で他の文字に変更。rubout[]の候補から等確率で選択
- 末尾の空白を切り詰める
seedが0以外の場合、通常の乱数ではなく、seedを種とした擬似乱数を用いる。
これは痛んだTシャツの文字を再現するために用いられる。
JNetHack
- 選択された文字が2バイト文字の2バイト目の場合、1バイト目が選択されたものとする
- 2バイト文字の1バイト目がが選択され場合:
- "?"なら" "(半角空白2つ)に
- それ以外なら"?"に
- 1バイト文字が選択された場合はNetHackと同じ
- 選択された文字が2バイト文字の2バイト目の場合、何もしない(cntが減る)
- 2バイト文字の1バイト目がが選択された場合、*ro0,*ro1,*ro2のテーブルにある文字に変換する
- 2つの候補がある文字の場合は等確率で選択(この場合seedは考慮されない)