RPGツクールに人工無脳を登場させる

先日、ためしにやってみたらできたのでこんなエントリを投下しようかな。

RPGツクールXPでやりました。
まず、人工無脳エンジンししゃもを用意します。

wget http://yowaken.dip.jp/sixamo/okiba/sixamo/sixamo.rb

次に、sixamo.rbをちょっとだけ加工します。
sixamo.rbの7行目

$KCODE = 'u'

sixamo.rbの203行目〜210行目あたり

=begin
			if $DEBUG
				sum = result_hash.values.sum.to_f
				tmp = result_hash.sort_by{ |k,v| [-v,k] }
				puts "-(候補数: #{result_hash.size})----"
				tmp[0,10].each do |k,v|
					printf("%5.2f%%: %s\n", v/sum*100, k)
				end
			end
=end

次に、RPGツクールXPで新規プロジェクトを作ります。
仮に、「Project1」とします。
このプロジェクトのディレクトリに、ディレクトリを追加します。
こんな感じです。

Project1\lib\sixamo.rb
Project1\sixamo\sixamo.txt
Project1\sixamo\sixamo.dic

次に、RPGツクールXPから外部のライブラリを読み込めるようにします。
RPGツクールXPスクリプトエディタで、GameTempの上にSixamoというスクリプトを作成します。

Sixamo

$LOAD_PATH.unshift('./lib/')
require 'sixamo'
$sixamo = Sixamo.new('sixamo')

次に、RPGツクールXPスクリプトエディタでInterpreter7を編集します。
Interpreter7の281行目あたりに次のコードを追加する

  #--------------------------------------------------------------------------
  # ● 人工無脳がしゃべる
  #--------------------------------------------------------------------------
  def command_356
    # 人工無能の発言を格納
    str = $sixamo.talk.scan(/.{1,20}/).join("\n")
    # メッセージ終了待機中フラグおよびコールバックを設定
    @message_waiting = true
    $game_temp.message_proc = Proc.new { @message_waiting = false }
    # message_text に 1 行目を設定
    $game_temp.message_text = str
    line_count = 1
    # ループ
    loop do
      # 次のイベントコマンドが文章 2 行目以降の場合
      if @list[@index+1].code == 401
        # message_text に 2 行目以降を追加
        $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
        line_count += 1
      # イベントコマンドが文章 2 行目以降ではない場合
      else
        # 次のイベントコマンドが選択肢の表示の場合
        if @list[@index+1].code == 102
          # 選択肢が画面に収まる場合
          if @list[@index+1].parameters[0].size <= 4 - line_count
            # インデックスを進める
            @index += 1
            # 選択肢のセットアップ
            $game_temp.choice_start = line_count
            setup_choices(@list[@index].parameters)
          end
        # 次のイベントコマンドが数値入力の処理の場合
        elsif @list[@index+1].code == 103
          # 数値入力ウィンドウが画面に収まる場合
          if line_count < 4
            # インデックスを進める
            @index += 1
            # 数値入力のセットアップ
            $game_temp.num_input_start = line_count
            $game_temp.num_input_variable_id = @list[@index].parameters[0]
            $game_temp.num_input_digits_max = @list[@index].parameters[1]
          end
        end
        # 継続
        return true
      end
      # インデックスを進める
      @index += 1
    end
  end

仕上げに、RPGツクールXPのコモンイベントとして
スクリプトで「command_356」を実行するようにするとできあがりです。
このコモンイベントを実行すると人工無脳がしゃべってくれます。