#============================================================================== # ポケ○ン風用アナライズスキル ver1.10 #------------------------------------------------------------------------------ #[特徴] # ポケ○ン風属性設定専用のアナライズスキルを作成できます。 # #[設定方法] # スキルのメモ欄に <ポケアナライズ:確率> と書くだけです。 # 確率は 100 で、確実に成功します。 # エネミーのメモ欄に <アナライズ無効> と書くと、アナライズできなくなります。 # # エネミーのメモ欄に <アナメモ:文字列> と書くと、 # "文字列"がひとことメモとして表示されます。 # 書かなくても大丈夫です。 # #[仕様] # アナライズに成功するとウィンドウが表示されます。 # ウィンドウに描画される内容は以下の通りです。 # # モンスターの名前 # 現在HP / 最大HP # 100 / 100 # タイプ:ノーマル # メモ:食べるとレベルが上がる #※ この文章は設定項目で設定可能です。 # #[導入上の注意] # 「ポケ○ン風属性設定スクリプト」が必要です # #[小ネタ] # 複数タイプを設定しているとき、描画されるタイプの順番が気になるかもしれません。 # その場合、 <ポケタイプ:5,2> と書けば、その通りの順番でタイプ名を描画します。 # ※ 小さい順に書く必要はないです ※ # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net/ # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # バージョンアップ情報 # ver1.10 タイプ名を属性とは別に設定できるようになりました。 # アナライズ画面にひとことメモを設定できるようになりました。 # ver1.00 公開 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module ANALYZE_POCKET # アナライズ成功したときに表示される文章 ANALYZE_MESSAGE = "%sの正体を見破った!" # ウィンドウに描画するタイプの文章 E_MESSAGE = "タイプ:%s" # タイプが複数ある場合、間に挟む文字列 AND_ELE = "・" # タイプを設定していなかった場合に表示するタイプ名 NONE_TYPE = "無" # タイプ名個別設定 # nil : 属性の名前をそのまま使う # ["タイプ1の名前","タイプ2の名前",…] TYPE_NAME = nil #TYPE_NAME = ["ノーマル", "かくとう"] # ウィンドウに描画する ひとことメモ の文章 # nil : ひとことメモを追加しない M_MESSAGE = "メモ:%s" # 表示されるウィンドウのX座標、Y座標、幅、高さ WIN_X = 136 # X座標 WIN_Y = 112 # Y座標 WIN_WIDTH = 272 # 幅 WIN_HEIGHT = 152 # 高さ end end #============================================================================== # ここまで #============================================================================== #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy #-------------------------------------------------------------------------- # ● 属性の取得 #-------------------------------------------------------------------------- def get_poke_type enemy = $data_enemies[self.enemy_id] if enemy.note.include?("<ポケタイプ:") memo = enemy.note.scan(/<ポケタイプ:((?:\d+,\s?)*(?:\d+)>)/i).to_s.split(/,\s?/) type = [] for i in 0...memo.size do type.push(memo[i].to_i) end else type = [0] end return type end #-------------------------------------------------------------------------- # ● ひとことメモの取得 #-------------------------------------------------------------------------- def get_one_word note = $data_enemies[self.enemy_id].note memo = "" if note.include?("<アナメモ:") memo = note.scan(/^<アナメモ:(.+)>/im).to_s end return memo end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base include Kazari::ANALYZE_POCKET #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias analyze_poke_type_start start def start analyze_poke_type_start @analyze_window = Window_Analyze.new end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- alias analyze_poke_type_terminate terminate def terminate analyze_poke_type_terminate @analyze_window.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias poke_type_update update def update @analyze_window.update if @analyze_window.active update_analyze_window return end return if @analyze_window.openness > 0 poke_type_update end #-------------------------------------------------------------------------- # ● アナライズウィンドウの更新 #-------------------------------------------------------------------------- def update_analyze_window if Input.trigger?(Input::C) || Input.trigger?(Input::B) Sound.play_decision @analyze_window.active = false @analyze_window.close end end #-------------------------------------------------------------------------- # ● 「クリティカルヒットの表示」を間借り #-------------------------------------------------------------------------- alias analyze_poke_type_display_critical display_critical def display_critical(target, obj = nil) display_analyze_poke_type(target, obj) analyze_poke_type_display_critical(target, obj) end #-------------------------------------------------------------------------- # ● アナライズ結果の表示 #-------------------------------------------------------------------------- def display_analyze_poke_type(target, obj) return if obj == nil || target == nil return unless obj.note.include?("ポケアナライズ") return if $data_enemies[target.enemy_id].note.include?("<アナライズ無効>") per = obj.note.scan(/^<ポケアナライズ:(.+)>/im).to_s.to_i return if rand(100) > per text = sprintf(ANALYZE_MESSAGE, target.name) @message_window.add_instant_text(text) wait(20) @analyze_window.set_enemy(target) end end #============================================================================== # ■ Window_Analyze #============================================================================== class Window_Analyze < Window_Base include Kazari::ANALYZE_POCKET #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(WIN_X, WIN_Y, WIN_WIDTH, WIN_HEIGHT) self.active = false self.openness = 0 end #-------------------------------------------------------------------------- # ● エネミー情報の描画 #-------------------------------------------------------------------------- def set_enemy(enemy) self.contents.clear self.contents.draw_text(0, 0, self.width - 32, WLH, enemy.original_name) self.contents.draw_text(0, 24, self.width - 32, WLH, "現在HP / 最大HP") self.contents.font.color = hp_color(enemy) self.contents.draw_text(0, 48, 50, WLH, enemy.hp, 2) self.contents.font.color = normal_color self.contents.draw_text(0, 48, 140, WLH, "/", 1) self.contents.draw_text(0, 48, 140, WLH, enemy.maxhp, 2) type = enemy.get_poke_type ele = "" for i in 0...type.size if type[i] == 0 ele = NONE_TYPE else unless TYPE_NAME ele += $data_system.elements[type[i]] else unless TYPE_NAME[type[i] - 1] ele += $data_system.elements[type[i]] else ele += TYPE_NAME[type[i] - 1] end end end if type.size > 1 && i != type.size - 1 ele += AND_ELE end end text = sprintf(E_MESSAGE, ele) self.contents.draw_text(0, 72, self.width - 32, WLH, text) # 属性 if M_MESSAGE text = sprintf(M_MESSAGE, enemy.get_one_word) self.contents.draw_text(0, 96, self.width - 32, WLH, text) # ひとことメモ end self.active = true self.open end end