설명 : xp의 여러 기능에 도움을 주는 스크립트 입니다. 전투의 배경 전체화, 윈도우 투과, 전투 트란지션 끄기, 간단한 버그 수정등의 기능이 들어있습니다. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #_/ ◆기본 설정 강화 - KGC_Base Reinforce◆ #_/---------------------------------------------------------------------------- #_/ RPGXP의 기본 기능을 미묘하게 강화합니다. (버그 수정도 있어) #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #============================================================================== # ★ 커스터마이즈 항목 ★ #============================================================================== # (true 또는 flase로 조절합니다. true를 입력하면 동작하는 거고 false를 쓰시면 동장하지 않습니다.) module KGC # ◆전투 배경 전체화 BR_BATTLEBACK_FULL = true # ◆메인 국면시에 윈도우 투과 # BR_BATTLEBACK_FULL 가 true 때에 유효. BR_WINDOW_CLEAR_MAIN_PHASE = true # ◆메인 국면시에 윈도우 배경만 반투과 # BR_WINDOW_CLEAR_MAIN_PHASE 가 false 때에 유효. BR_WINDOW_BACK_CLEAR_MAIN_PHAS = true # ◆전투 개시 트란지션(nil 로 해제) BR_BATTLE_START_TRANSITION = "016-Diamond02" end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ $imported["Base Reinforce"] = true #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ RPG::Sprite #============================================================================== class RPG::Sprite def animation_set_sprites(sprites, cell_data, position) for i in 0..15 sprite = sprites[i] pattern = cell_data[i, 0] if sprite == nil || pattern == nil || pattern == -1 sprite.visible = false if sprite != nil next end sprite.visible = true sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192) if position == 3 if self.viewport != nil sprite.x = self.viewport.rect.width / 2 sprite.y = self.viewport.rect.height / 2 else sprite.x = 320 sprite.y = 240 end else sprite.x = self.x - self.ox + self.src_rect.width / 2 sprite.y = self.y - self.oy + self.src_rect.height / 2 sprite.y -= self.src_rect.height / 4 if position == 0 sprite.y += self.src_rect.height / 4 if position == 2 end sprite.x += cell_data[i, 1] sprite.y += cell_data[i, 2] sprite.z = 2000 sprite.ox = 96 sprite.oy = 96 sprite.zoom_x = cell_data[i, 3] / 100.0 sprite.zoom_y = cell_data[i, 3] / 100.0 sprite.angle = cell_data[i, 4] sprite.mirror = (cell_data[i, 5] == 1) sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 sprite.blend_type = cell_data[i, 7] end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Spriteset_Battle #============================================================================== class Spriteset_Battle #-------------------------------------------------------------------------- # ● 프레임 갱신 #-------------------------------------------------------------------------- alias update_KGC_Base_Reinforce update def update # 원래의 처리를 실행 update_KGC_Base_Reinforce if KGC::BR_BATTLEBACK_FULL @viewport1.rect.height = 480 # 배틀 백 하지만 변경되었을 경우 if @battleback_name2 != $game_temp.battleback_name # 전체화 @battleback_name2 = $game_temp.battleback_name mag_x = 640.0 / @battleback_sprite.bitmap.width mag_y = 480.0 / @battleback_sprite.bitmap.height @battleback_sprite.zoom_x = mag_x @battleback_sprite.zoom_y = mag_y end end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Window_BattleStatus #============================================================================== class Window_BattleStatus < Window_Base #-------------------------------------------------------------------------- # ● フレ?ム更新 #-------------------------------------------------------------------------- def update super # メインフェ?ズのときは不透明度をやや下げる(ついでにウィンドウ消去) if $game_temp.battle_main_phase self.contents_opacity -= 2 if self.contents_opacity > 224 if self.opacity > 0 && KGC::BR_BATTLEBACK_FULL && KGC::BR_WINDOW_CLEAR_MAIN_PHASE self.opacity -= 16 end if self.back_opacity > 128 && KGC::BR_BATTLEBACK_FULL && KGC::BR_WINDOW_BACK_CLEAR_MAIN_PHAS self.back_opacity -= 8 end else self.contents_opacity += 2 if self.contents_opacity < 255 if self.opacity < 255 && KGC::BR_BATTLEBACK_FULL && KGC::BR_WINDOW_CLEAR_MAIN_PHASE self.opacity += 16 end if self.back_opacity < 255 && KGC::BR_BATTLEBACK_FULL && KGC::BR_WINDOW_BACK_CLEAR_MAIN_PHAS self.back_opacity += 8 end end end #-------------------------------------------------------------------------- # ● 名前の描? #-------------------------------------------------------------------------- def draw_actor_name(actor, x, y) self.contents.font.color = normal_color self.contents.draw_shadow_text(x, y, 120, 32, actor.name) end #-------------------------------------------------------------------------- # ● ステ?トの描? #-------------------------------------------------------------------------- def draw_actor_state(actor, x, y, width = 120) text = make_battler_state_text(actor, width, true) self.contents.font.color = actor.dead? ? knockout_color : normal_color self.contents.draw_shadow_text(x, y, width, 32, text) end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ class Interpreter #============================================================================== # ■□■□■ Interpreter 3 ■□■□■ #============================================================================== #-------------------------------------------------------------------------- # ● ?件分岐 #-------------------------------------------------------------------------- def command_111 # ロ?カル?? result を初期化 result = false # ?件判定 case @parameters[0] when 0 # スイッチ result = ($game_switches[@parameters[1]] == (@parameters[2] == 0)) when 1 # ?? value1 = $game_variables[@parameters[1]] if @parameters[2] == 0 value2 = @parameters[3] else value2 = $game_variables[@parameters[3]] end case @parameters[4] when 0 # と同値 result = (value1 == value2) when 1 # 以上 result = (value1 >= value2) when 2 # 以下 result = (value1 <= value2) when 3 # 超 result = (value1 > value2) when 4 # 未? result = (value1 < value2) when 5 # 以外 result = (value1 != value2) end when 2 # セルフスイッチ if @event_id > 0 key = [$game_map.map_id, @event_id, @parameters[1]] if @parameters[2] == 0 result = ($game_self_switches[key] == true) else result = ($game_self_switches[key] != true) end end when 3 # タイマ? if $game_system.timer_working sec = $game_system.timer / Graphics.frame_rate if @parameters[2] == 0 result = (sec >= @parameters[1]) else result = (sec <= @parameters[1]) end end when 4 # アクタ? actor = $game_actors[@parameters[1]] if actor != nil case @parameters[2] when 0 # パ?ティにいる result = ($game_party.actors.include?(actor)) when 1 # 名前 result = (actor.name == @parameters[3]) when 2 # スキル result = (actor.skill_learn?(@parameters[3])) when 3 # 武器 result = (actor.weapon_id == @parameters[3]) when 4 # 防具 result = (actor.armor1_id == @parameters[3] or actor.armor2_id == @parameters[3] or actor.armor3_id == @parameters[3] or actor.armor4_id == @parameters[3]) when 5 # ステ?ト result = (actor.state?(@parameters[3])) end end when 5 # エネミ? enemy = $game_troop.enemies[@parameters[1]] if enemy != nil case @parameters[2] when 0 # 出現している result = (enemy.exist?) when 1 # ステ?ト result = (enemy.state?(@parameters[3])) end end when 6 # キャラクタ? character = get_character(@parameters[1]) if character != nil result = (character.direction == @parameters[2]) end when 7 # ゴ?ルド if @parameters[2] == 0 result = ($game_party.gold >= @parameters[1]) else result = ($game_party.gold <= @parameters[1]) end when 8 # アイテム result = ($game_party.item_number(@parameters[1]) > 0) when 9 # 武器 result = ($game_party.weapon_number(@parameters[1]) > 0) when 10 # 防具 result = ($game_party.armor_number(@parameters[1]) > 0) when 11 # ボタン result = (Input.press?(@parameters[1])) when 12 # スクリプト result = eval(@parameters[1]) end # 判定結果をハッシュに格納 @branch[@list[@index].indent] = result # 判定結果が?だった場合 if @branch[@list[@index].indent] == true # 分岐デ?タを削除 @branch.delete(@list[@index].indent) # ?? return true end # ?件に該?しない場合 : コマンドスキップ return command_skip end #============================================================================== # ■□■□■ Interpreter 7 ■□■□■ #============================================================================== #-------------------------------------------------------------------------- # ● スクリプト #-------------------------------------------------------------------------- def command_355 # script-x に 1 行目を設定 script-x = @list[@index].parameters[0] + "n" # ル?プ loop do # 次のイベントコマンドがスクリプト 2 行目以降の場合 if @list[@index+1].code == 655 # script-x に 2 行目以降を追加 script-x += @list[@index+1].parameters[0] + "n" # イベントコマンドがスクリプト 2 行目以降ではない場合 else # ル?プ中? break end # インデックスを進める @index += 1 end # 評? result = eval(script-x) # ?? return true end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ class Scene_Battle #============================================================================== # ■□■□■ Scene_Battle 1 ■□■□■ #============================================================================== #-------------------------------------------------------------------------- # ● メイン?理 #-------------------------------------------------------------------------- def main # トランジション?行 if KGC::BR_BATTLE_START_TRANSITION != nil Graphics.transition(40, "Graphics/Transitions/" + KGC::BR_BATTLE_START_TRANSITION) end # トランジション準備 Graphics.freeze # ??用の各種一時デ?タを初期化 $game_temp.in_battle = true $game_temp.battle_turn = 0 $game_temp.battle_event_flags.clear $game_temp.battle_abort = false $game_temp.battle_main_phase = false $game_temp.battleback_name = $game_map.battleback_name $game_temp.forcing_battler = nil # バトルイベント用インタプリタを初期化 $game_system.battle_interpreter.setup(nil, 0) # トル?プを準備 @troop_id = $game_temp.battle_troop_id $game_troop.setup(@troop_id) # アクタ?コマンドウィンドウを作成 s1 = $data_system.words.attack s2 = $data_system.words.skill s3 = $data_system.words.guard s4 = $data_system.words.item @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4]) @actor_command_window.y = 160 @actor_command_window.back_opacity = 160 @actor_command_window.active = false @actor_command_window.visible = false # その他のウィンドウを作成 @party_command_window = Window_PartyCommand.new @help_window = Window_Help.new @help_window.back_opacity = 160 @help_window.visible = false @status_window = Window_BattleStatus.new @message_window = Window_Message.new # スプライトセットを作成 @spriteset = Spriteset_Battle.new # ウェイトカウントを初期化 @wait_count = 0 # トランジション?行 if $data_system.battle_transition == "" Graphics.transition(20) else Graphics.transition(40, "Graphics/Transitions/" + $data_system.battle_transition) end # プレバトルフェ?ズ開始 start_phase1 # メインル?プ loop do # ゲ?ム?面を更新 Graphics.update # 入力情報を更新 Input.update # フレ?ム更新 update # ?面が切り替わったらル?プを中? if $scene != self break end end # マップをリフレッシュ $game_map.refresh # トランジション準備 Graphics.freeze # ウィンドウを解放 @actor_command_window.dispose if @actor_command_window != nil @party_command_window.dispose @help_window.dispose @status_window.dispose @message_window.dispose @skill_window.dispose if @skill_window != nil @item_window.dispose if @item_window != nil @result_window.dispose if @result_window != nil # スプライトセットを解放 @spriteset.dispose # タイトル?面に切り替え中の場合 if $scene.is_a?(Scene_Title) # ?面をフェ?ドアウト Graphics.transition Graphics.freeze end # ??テストからゲ?ムオ?バ??面以外に切り替え中の場合 if $BTEST && !$scene.is_a?(Scene_Gameover) $scene = nil end end #-------------------------------------------------------------------------- # ● フレ?ム更新 #-------------------------------------------------------------------------- def update # バトルイベント?行中の場合 if $game_system.battle_interpreter.running? @running = true # インタプリタを更新 $game_system.battle_interpreter.update # アクションを?制されているバトラ?が存在しない場合 if $game_temp.forcing_battler == nil # バトルイベントの?行が終わった場合 unless $game_system.battle_interpreter.running? # ????の場合、バトルイベントのセットアップを再?行 unless judge setup_battle_event end end # アフタ?バトルフェ?ズでなく、メッセ?ジが表示されていない # かつアニメ表示中ではない場合 if @phase != 5 && !@message_window.visible && !@spriteset.effect? # ステ?タスウィンドウをリフレッシュ @status_window.refresh end end elsif @running # ステ?タスウィンドウをリフレッシュ @status_window.refresh @running = false end # システム (タイマ?)、?面を更新 $game_system.update $game_screen.update # タイマ?が 0 になった場合 if $game_system.timer_working and $game_system.timer == 0 # バトル中? $game_temp.battle_abort = true end # ウィンドウを更新 @help_window.update @party_command_window.update @actor_command_window.update if @actor_command_window != nil @status_window.update @message_window.update # スプライトセットを更新 @spriteset.update # トランジション?理中の場合 if $game_temp.transition_processing # トランジション?理中フラグをクリア $game_temp.transition_processing = false # トランジション?行 if $game_temp.transition_name == "" Graphics.transition(20) else Graphics.transition(40, "Graphics/Transitions/" + $game_temp.transition_name) end end # メッセ?ジウィンドウ表示中の場合 if $game_temp.message_window_showing return end # エフェクト表示中の場合 if @spriteset.effect? return end # ゲ?ムオ?バ?の場合 if $game_temp.gameover # ゲ?ムオ?バ??面に切り替え $scene = Scene_Gameover.new return end # タイトル?面に?す場合 if $game_temp.to_title # タイトル?面に切り替え $scene = Scene_Title.new return end # バトル中?の場合 if $game_temp.battle_abort # バトル開始前の BGM に?す $game_system.bgm_play($game_temp.map_bgm) # バトル終了 battle_end(1) return end # ウェイト中の場合 if @wait_count > 0 # ウェイトカウントを減らす @wait_count -= 1 return end # アクションを?制されているバトラ?が存在せず、 # かつバトルイベントが?行中の場合 if $game_temp.forcing_battler == nil and $game_system.battle_interpreter.running? return end # フェ?ズによって分岐 case @phase when 1 # プレバトルフェ?ズ update_phase1 when 2 # パ?ティコマンドフェ?ズ update_phase2 when 3 # アクタ?コマンドフェ?ズ update_phase3 when 4 # メインフェ?ズ update_phase4 when 5 # アフタ?バトルフェ?ズ update_phase5 end end #-------------------------------------------------------------------------- # ● バトル終了 # result : 結果 (0:勝利 1:逃走 2:敗北) #-------------------------------------------------------------------------- alias battle_end_KGC_Base battle_end def battle_end(result) # オ?トステ?トを更新 for actor in $game_party.actors for i in 1...($imported["EquipExtension"] ? actor.equip_type.size : 5) actor.update_auto_state(nil, $data_armors[ $imported["EquipExtension"] ? actor.armor_id[i] : eval("actor.armor#{i}_id")]) end end # 元の?理を?行 battle_end_KGC_Base(result) end end