#============================================================================== # ■ RGSS3 空間召喚スキル Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 何も無い空間に新たなエネミーを呼び出す敵専用スキルの設定が可能になります。 #============================================================================== # スキルのメモ欄に指定します。 #============================================================================== # <空間召喚:0,-1,75,26> #------------------------------------------------------------------------------ # 召喚領域タイプ0、呼び出すのは使用者自身と同じ敵、 # 呼び出し成功率は75%、敵グループ上限数として扱う数字を26に指定。 # (敵合計数が26を超える場合は強制的に失敗となる) #============================================================================== # <空間召喚:0,-1,75,26,50> #------------------------------------------------------------------------------ # 上に同じ。 # 追加で召喚対象にスキルID50の効果を適用する。 #============================================================================== # <空間召喚:1,1,$game_variables[1],$game_variables[2],$game_variables[3]> #------------------------------------------------------------------------------ # 召喚領域タイプ1、呼び出すのはデータベースのエネミーID1の敵、 # 呼び出し成功率は変数ID1の確率%、 # 敵グループ上限数として扱う数字を変数ID2の値に指定。 # 追加で召喚対象に変数ID3のスキルIDの効果を適用する。 # (敵合計数が変数ID2の値を超える場合は強制的に失敗となる) #============================================================================== # <空間召喚成功:%sがどこからともなく現れた!> #------------------------------------------------------------------------------ # このスキルによる空間召喚成功時のメッセージとして # 「%sがどこからともなく現れた!」が採用されます。 # %sの部分には召喚されたエネミーの名前が自動的に入ります。 #============================================================================== # <空間召喚失敗1:しかし何も現れない……。> #------------------------------------------------------------------------------ # このスキルの確率の空間召喚失敗時のメッセージとして # 「しかし何も現れない……。」が採用されます。 #============================================================================== # <空間召喚失敗2:どうやら打ち止めのようだ。> #------------------------------------------------------------------------------ # このスキルの呼び出し上限・領域不足による空間召喚失敗時のメッセージとして # 「どうやら打ち止めのようだ。」が採用されます。 #============================================================================== # Ver1.01 最大数計算ミスを修正。 # Ver1.02 他スキルの効果を召喚対象に適用する機能を追加。 #============================================================================== module SpaceSummon #空のハッシュを用意。 Type = {} #召喚領域タイプの指定。 #例.Type[0] = [50,444,200,100] #この場合、X座標50から444の距離(50〜494)、 #Y座標200から100の距離(200〜300)を召喚領域とする。 #2番目の数字と4番目の数字に負の値を入れるのは想定していないので注意。 Type[0] = [50,444,200,100] Type[1] = [25,494,250,50] #横の許容範囲を指定。 #大きければ大きいほど画像が重なりにくくなります。 WR = 25 #縦の許容範囲を指定。 #大きければ大きいほど画像が重なりにくくなります。 HR = 25 #幅の最小単位を指定。 #少なくすればするほど処理時間が飛躍的に増加します。 SB = 16 #空間召喚成功のデフォルトメッセージを指定。 #%sの部分には呼び出したエネミー名が自動で入ります。 Text1 = "%sを呼び出した!" #確率による空間召喚失敗のデフォルトメッセージを指定。 Text2 = "しかし何も現れなかった!" #呼び出し上限・領域不足による空間召喚失敗のデフォルトメッセージを指定。 Text3 = "しかしこれ以上呼び出せない!" #空間召喚用キーワードを指定。 Word1 = "空間召喚" #空間召喚成功の設定用キーワードを指定。 Word2 = "空間召喚成功" #確率による空間召喚失敗の設定用キーワードを指定。 Word3 = "空間召喚失敗1" #呼び出し上限・領域不足による空間召喚失敗の設定用キーワードを指定。 Word4 = "空間召喚失敗2" end class Game_ActionResult attr_accessor :space_summon_messages #-------------------------------------------------------------------------- # 命中系フラグのクリア #-------------------------------------------------------------------------- alias clear_hit_flags_space_summons clear_hit_flags def clear_hit_flags clear_hit_flags_space_summons @space_summon_messages = [] end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムの使用者側への効果 #-------------------------------------------------------------------------- alias item_user_effect_space_summon item_user_effect def item_user_effect(user, item) if $game_party.in_battle && user.enemy? item.space_summon.each {|a| if !(eval(a[2]) > rand(100)) type = 1 elsif eval(a[3]) > $game_troop.members.size m = $game_troop.space_summon(user.enemy_id,eval(a[0]),eval(a[1])) if a[4] item2 = $data_skills[eval(a[4])] if item2 m.item_apply(user, item2) m.result.clear end end type = m ? 0 : 2 else type = 2 end case type when 0 t = item.space_summon_success_text @result.space_summon_messages.push(sprintf(!t.empty? ? t : SpaceSummon::Text1,m.name)) when 1 t = item.space_summon_failed_text1 @result.space_summon_messages.push(!t.empty? ? t : SpaceSummon::Text2) when 2 t = item.space_summon_failed_text2 @result.space_summon_messages.push(!t.empty? ? t : SpaceSummon::Text3) end @result.success = true } end item_user_effect_space_summon(user, item) end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # 占有領域の調査 #-------------------------------------------------------------------------- def space_summon_check(x2,y2,new_enemy) sw = new_enemy.space_summon_width sh = new_enemy.space_summon_height rw = enemy.space_summon_width rh = enemy.space_summon_height x3 = x2 - sw / 2 x4 = x2 + sw / 2 y3 = y2 - sh y4 = y2 screen_x + rw / 2 < x3 or x4 < screen_x - rw / 2 or screen_y < y3 or y4 < screen_y - rh end end class Game_Troop < Game_Unit #-------------------------------------------------------------------------- # 空間召喚 #-------------------------------------------------------------------------- def space_summon(parent,type,id) e_id = id == -1 ? parent : id new_enemy = $data_enemies[e_id] return false unless new_enemy a = SpaceSummon::Type[type] sb = SpaceSummon::SB a2 = [a[1] / sb,a[3] / sb] ok_a = [] a2[0].times {|x1| x2 = a[0] + x1 * sb a2[1].times {|y1| y2 = a[2] + y1 * sb ok_a.push([x2,y2]) if $game_troop.members.all? {|m| m.space_summon_check(x2,y2,new_enemy)} } } return false if ok_a.empty? d = ok_a[rand(ok_a.size)] x = d[0] y = d[1] e = Game_Enemy.new(@enemies.size,e_id) e.on_battle_start e.screen_x = x e.screen_y = y @enemies.push(e) SceneManager.scene.space_summon_execute make_unique_names e end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # 空間召喚実行 #-------------------------------------------------------------------------- def space_summon_execute @spriteset.space_summon_execute end end class Spriteset_Battle #-------------------------------------------------------------------------- # 敵キャラスプライトの作成 #-------------------------------------------------------------------------- def space_summon_execute s = Sprite_Battler.new(@viewport1, $game_troop.members[@enemy_sprites.size]) @enemy_sprites.push(s) end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # 影響のあったステータスを表示(空間召喚表示) #-------------------------------------------------------------------------- alias display_affected_status_space_summon display_affected_status def display_affected_status(target, item) display_affected_status_space_summon(target, item) return if target.result.space_summon_messages.empty? add_text("") if line_number < max_line_number target.result.space_summon_messages.each {|t| replace_text(t) wait} end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 空間召喚データ #-------------------------------------------------------------------------- def space_summon @space_summon ||= space_summon_make end #-------------------------------------------------------------------------- # 空間召喚データ作成 #-------------------------------------------------------------------------- def space_summon_make a = [] w = SpaceSummon::Word1 note.each_line {|l| b = (/<#{w}[::](\S+)>/ =~ l ? $1.to_s : "").split(/\s*,\s*/) a.push(b) if b.size.between?(4,5) } a end #-------------------------------------------------------------------------- # 空間成功時テキスト #-------------------------------------------------------------------------- def space_summon_success_text @space_summon_success_text ||= /<#{SpaceSummon::Word2}[::](\S+)>/ =~ note ? $1.to_s : "" end #-------------------------------------------------------------------------- # 空間失敗時テキスト1(確率) #-------------------------------------------------------------------------- def space_summon_failed_text1 @space_summon_failed_text1 ||= /<#{SpaceSummon::Word3}[::](\S+)>/ =~ note ? $1.to_s : "" end #-------------------------------------------------------------------------- # 空間失敗時テキスト2(限界) #-------------------------------------------------------------------------- def space_summon_failed_text2 @space_summon_failed_text2 ||= /<#{SpaceSummon::Word4}[::](\S+)>/ =~ note ? $1.to_s : "" end end class RPG::Enemy #-------------------------------------------------------------------------- # バトラーの幅 #-------------------------------------------------------------------------- def space_summon_width Cache.battler(@battler_name,0).width * SpaceSummon::WR / 100 end #-------------------------------------------------------------------------- # バトラーの高さ #-------------------------------------------------------------------------- def space_summon_height Cache.battler(@battler_name,0).height * SpaceSummon::HR / 100 end end