engrave.c: wipeout_text(engr, cnt, seed);

  • engr 書かれている文字列
  • cnt 何文字分消すか
  • seed どの文字をどう消すかの乱数制御

NetHack

  1. 文字列から1文字を選択
  2. "?"や、小さい文字なら" "に
  3. 乱数で処理を決定:
    1. 25%で"?"に
    2. 75%で他の文字に変更。rubout[]の候補から等確率で選択
  4. 末尾の空白を切り詰める

seedが0以外の場合、通常の乱数ではなく、seedを種とした擬似乱数を用いる。 これは痛んだTシャツの文字を再現するために用いられる。

JNetHack

  • 選択された文字が2バイト文字の2バイト目の場合、1バイト目が選択されたものとする
  • 2バイト文字の1バイト目がが選択され場合:
    • "?"なら" "(半角空白2つ)に
    • それ以外なら"?"に
  • 1バイト文字が選択された場合はNetHackと同じ

NetHack brass

  • 選択された文字が2バイト文字の2バイト目の場合、何もしない(cntが減る)
  • 2バイト文字の1バイト目がが選択された場合、*ro0,*ro1,*ro2のテーブルにある文字に変換する
    • 2つの候補がある文字の場合は等確率で選択(この場合seedは考慮されない)