king-exit/Scripts/_.37.rb
2024-08-31 14:17:23 -05:00

406 lines
No EOL
16 KiB
Ruby

#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
#  システム周りのデータを扱うクラスです。乗り物や BGM などの管理も行います。
# このクラスのインスタンスは $game_system で参照されます。
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :revive_position
attr_accessor :revive_gameover
attr_accessor :all_apply_revive
attr_accessor :stop_timer_gameover
#--------------------------------------------------------------------------
# ● インスタンスの複製
#--------------------------------------------------------------------------
alias revive_game_over_initialize initialize
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# 通常の処理を実行
revive_game_over_initialize
# 都合で(!)システム情報を取得
data = load_data("Data/System.rvdata2")
# ゲームオーバーから復活する際のマップIDと座標を初期化
@revive_position = [data.start_map_id, data.start_x, data.start_y, 2]
# ゲームオーバー時の復活フラグを立てる
@revive_gameover = true
# 復活時、『透明化OFF』と『不透明度=255』を実行する設定にする
@all_apply_revive = false
# 全滅時タイマーをストップさせる?
@stop_timer_gameover = UMSSS_Setting::ReviveGameOverTimerStop
end
end
#==============================================================================
# ■ Game_Character
#------------------------------------------------------------------------------
#  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
# クラスのスーパークラスとして使用されます。
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# ● 透明化OFF&不透明度=255を実行
#--------------------------------------------------------------------------
def all_apply_character
# 透明化OFF
@transparent = false
# 不透明度=255
@opacity = 255
end
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 復活しないゲームオーバーを実行
#--------------------------------------------------------------------------
def no_revive_gameover
# ゲームオーバー時の復活フラグを下ろす
$game_system.revive_gameover = false
# ゲームオーバー処理
command_353
end
#--------------------------------------------------------------------------
# ● 復活時、『透明化OFF』と『不透明度=255』の実行フラグを変更
#--------------------------------------------------------------------------
def all_apply_revive(value = true)
# フラグを変更
$game_system.all_apply_revive = value
end
#--------------------------------------------------------------------------
# ● ゲームオーバー時、復活の可否を設定
#--------------------------------------------------------------------------
def revive_gameover_set(value = true)
# ゲームオーバー時の復活フラグを変更
$game_system.revive_gameover = value
end
#--------------------------------------------------------------------------
# ● ゲームオーバー時の復活位置を現在の場所に設定
#--------------------------------------------------------------------------
def revive_point_here(d = $game_player.direction)
# 現在のマップID、X座標、Y座標を記憶
$game_system.revive_position[0] = $game_map.map_id
$game_system.revive_position[1] = $game_player.x
$game_system.revive_position[2] = $game_player.y
$game_system.revive_position[3] = d
end
#--------------------------------------------------------------------------
# ● ゲームオーバー時の復活位置を手動設定
#--------------------------------------------------------------------------
def revive_point_manual(map, px, py, d = $game_player.direction)
# マップID、X座標、Y座標を記憶
$game_system.revive_position[0] = map
$game_system.revive_position[1] = px
$game_system.revive_position[2] = py
$game_system.revive_position[3] = d
end
#--------------------------------------------------------------------------
# ● ゲームオーバー時、タイマーを停止させる?
#--------------------------------------------------------------------------
def stop_timer_gameover(value)
$game_system.stop_timer_gameover = value
end
end
#==============================================================================
# ■ Scene_Gameover
#------------------------------------------------------------------------------
#  ゲームオーバー画面の処理を行うクラスです。
#==============================================================================
class Scene_Gameover < Scene_Base
#--------------------------------------------------------------------------
# ● インスタンスの複製
#--------------------------------------------------------------------------
alias revive_game_over_goto_title goto_title
#--------------------------------------------------------------------------
# ● タイトル画面へ遷移
#--------------------------------------------------------------------------
def goto_title
return execute_revive if $game_system.revive_gameover
# 通常の処理
revive_game_over_goto_title
end
#--------------------------------------------------------------------------
# ● 復活処理
#--------------------------------------------------------------------------
def execute_revive
# MEをフェードアウト
RPG::ME.fade(1000)
# MEをフェード中に少しウェイト
Graphics.wait(30)
# 復活処理
revive_player
# マップのBGM、BGSを再生
$game_map.autoplay
# 画面をフェードアウトさせる
Graphics.fadeout(60)
# MEを停止(※一応)
RPG::ME.stop
end
#--------------------------------------------------------------------------
# ● 復活処理
#--------------------------------------------------------------------------
def revive_player
# 経験値を調整
revive_setting_exp
# パーティの状態を調整
revive_setting_party
# 所持金を調整
revive_setting_money
# 復活位置を取得
pn = $game_system.revive_position
# 指定されたマップ&座標を復活位置に設定
$game_player.reserve_transfer(pn[0], pn[1], pn[2], pn[3])
$game_player.perform_transfer
# スイッチ操作が存在する場合
if UMSSS_Setting::ReviveGameOverMemorizeSwitch > 0
# スイッチをONにする
$game_switches[UMSSS_Setting::ReviveGameOverMemorizeSwitch] = true
end
# 全滅回数を記憶する場合
if UMSSS_Setting::ReviveGameOverCountMemorizeVariable > 0
# 変数に +1 する。
$game_variables[UMSSS_Setting::ReviveGameOverCountMemorizeVariable] += 1
end
# 『透明化OFF』と『不透明度=255』を実行する場合
if $game_system.all_apply_revive
# プレイヤーを表示
$game_player.all_apply_character
end
# タイマーを停止させる設定の場合、停止。
$game_timer.stop if $game_system.stop_timer_gameover
# 『イベントの処理を中断』を強制実行
#$game_map.interpreter.command_115
# マップ画面呼び出し
SceneManager.goto(Scene_Map)
end
#--------------------------------------------------------------------------
# ● 経験値を調整
#--------------------------------------------------------------------------
def revive_setting_exp
# パーティを全員チェック
for actor in $game_party.members
now = actor.class.exp_for_level(actor.level)
pre = actor.class.exp_for_level([actor.level - 1, 1].max)
aft = actor.class.exp_for_level([actor.level + 1, actor.max_level].min)
last_level = actor.level
# 設定で分岐
case UMSSS_Setting::ReviveGameOverPenaltyForExpSetting
when 0
# 特になし
when 1
n = (now - pre) / actor.level
# 経験値を減らす
actor.change_exp([actor.exp - n, 0].max, false)
when 2
n = (now - pre) / actor.level
n *= 2
# 経験値を減らす
actor.change_exp([actor.exp - n, 0].max, false)
when 3
n = (aft - now) / (actor.level + 1)
# 経験値を減らす
actor.change_exp([actor.exp - n, 0].max, false)
when 4
n = (aft - now) / (actor.level + 1)
n *= 2
# 経験値を減らす
actor.change_exp([actor.exp - n, 0].max, false)
when 5
n = actor.exp / (actor.level + 1)
# 経験値を減らす
actor.change_exp([actor.exp - n, 0].max, false)
when 6
# 失う経験値を計算
n = actor.exp / (actor.level + 1)
# 倍化
n *= 2
# 経験値を減らす
actor.change_exp([actor.exp - n, 0].max, false)
when 7
n = actor.exp / 10
# 経験値を減らす
actor.change_exp([actor.exp - n, 0].max, false)
when 8
n = actor.exp / 5
# 経験値を減らす
actor.change_exp([actor.exp - n, 0].max, false)
else
# マイナスの数値の場合
if UMSSS_Setting::ReviveGameOverPenaltyForExpSetting < 0
# ペナルティを受けた後のレベルを算出
lv = actor.level - UMSSS_Setting::ReviveGameOverPenaltyForExpSetting.abs
# アクターのレベルを下げる
actor.change_level(lv, false)
end
end
# レベルダウンメッセージがある場合
if UMSSS_Setting::ReviveGameOverPenaltyForExpMessage != ""
# レベルが下がっている場合
if actor.level < last_level
# メッセージウィンドウを作成
@message_window = Window_Message.new
# ウィンドウの背景を設定
$game_message.background = UMSSS_Setting::ReviveGameOverPenaltyMessageWindowType
# ウィンドウの表示位置を設定
$game_message.position = UMSSS_Setting::ReviveGameOverPenaltyMessageWindowPosition
# メッセージを準備
text = sprintf(UMSSS_Setting::ReviveGameOverPenaltyForExpMessage, actor.name, Vocab::level, actor.level)
# メッセージを表示
$game_message.add(text)
# メッセージウィンドウがビジーの間、ループ
while $game_message.busy?
@message_window.update
Graphics.update
Input.update
end
@message_window.dispose
@message_window = nil
end
end
end
end
#--------------------------------------------------------------------------
# ● パーティの状態を調整
#--------------------------------------------------------------------------
def revive_setting_party
# 復活時の設定で分岐
case UMSSS_Setting::ReviveGameOverPartyStatusSetting
when 0
# 先頭のアクターのHPを 1 に設定
$game_party.members[0].hp = 1
when 1
# パーティ全員をチェック
for actor in $game_party.members
# HPを 1 に設定
actor.hp = 1
end
when 2
# パーティ全員をチェック
for actor in $game_party.members
# 全回復処理
actor.recover_all
end
when 3
# 先頭のアクターのHPを 1 に設定
$game_party.members[0].hp = 1
# パーティ全員をチェック
for actor in $game_party.members
# MPを 0 に設定
actor.mp = 0
end
when 4
# パーティ全員をチェック
for actor in $game_party.members
# HPを 1 に設定
actor.hp = 1
# MPを 0 に設定
actor.mp = 0
end
when 5
# 先頭のアクターのHPを 1 に設定
$game_party.members[0].hp = 1
# パーティ全員をチェック
for actor in $game_party.members
# MPを全回復
actor.mp += 9999
end
when 6
# パーティ全員をチェック
for actor in $game_party.members
# HPを 1 に設定
actor.hp = 1
# MPを全回復
actor.mp += 9999
end
when 7
# 先頭のアクターだけ全回復
$game_party.members[0].recover_all
when 8
# 先頭のアクターだけ全回復
$game_party.members[0].recover_all
# 戦闘不能のアクターをチェック
for actor in $game_party.dead_members
# MPを 0 に設定
actor.mp = 0
end
end
end
#--------------------------------------------------------------------------
# ● 所持金を調整
#--------------------------------------------------------------------------
def revive_setting_money
# 現在の所持金を取得
g = $game_party.gold
n = 0
# 設定で分岐
case UMSSS_Setting::ReviveGameOverPenaltyForMoneySetting
when 0
# 特になし。
when 1
# 所持金の半分を取得
n = g / 2
# 所持金を減らす
$game_party.lose_gold(n)
when 2
# 所持金の4分の1を取得
n = g / 4
# 所持金を減らす
$game_party.lose_gold(n)
when 3
# 所持金の3分の1を取得
n = g / 3
# 所持金を減らす
$game_party.lose_gold(n)
when 4
# 所持金の4分の3を取得
n = g * 3 / 4
# 所持金を減らす
$game_party.lose_gold(n)
when 5
# 所持金の3分の2を取得
n = g * 2 / 3
# 所持金を減らす
$game_party.lose_gold(n)
when 6
# 所持金を取得
n = g
# 所持金をゼロにする
$game_party.lose_gold(n)
end
# メッセージがある場合
if UMSSS_Setting::ReviveGameOverPenaltyForMoneyMessage != ""
# 所持金が減っている場合
if n > 0
# メッセージウィンドウを作成
@message_window = Window_Message.new if @message_window.nil?
# ウィンドウの背景を設定
$game_message.background = UMSSS_Setting::ReviveGameOverPenaltyMessageWindowType
# ウィンドウの表示位置を設定
$game_message.position = UMSSS_Setting::ReviveGameOverPenaltyMessageWindowPosition
# メッセージを準備
text = sprintf(UMSSS_Setting::ReviveGameOverPenaltyForMoneyMessage, n, Vocab::currency_unit)
# メッセージを表示
$game_message.texts.push(text)
# メッセージウィンドウがビジーの間、ループ
while $game_message.busy?
@message_window.update
Graphics.update
Input.update
end
end
end
# メッセージウィンドウが nil ではない場合
unless @message_window.nil?
# メッセージウィンドウを解放
@message_window.dispose
@message_window = nil
end
end
end