#==============================================================================
# 「月相システム」(ACE) Ver.1.0
# 製作者:奈々(なな)
# へぷたなすくろーる http://heptanas.mamagoto.com/
#
# ◇使用規約
# 使用される場合はスクリプト作成者として「奈々」を明記して下さい。
# このスクリプトを改変したり、改変したものを配布するなどは自由ですが
# その場合も元のスクリプトの作成者として名前は載せて下さい。
# その他、詳しい利用規約はブログを参照して下さい。
#
#------------------------------------------------------------------------------
#
# 月の画像は、横に8つ並べた「Moon」というファイルを
# GraphicsフォルダのSystemフォルダに入れます。(サイズは自由)
# 月だけでなく、時計や文字などを用意しても面白そうです。
#
# 初期設定は、全て0を指定すると無効になります。
# 導入しただけだと、単に「月が満ち欠けするだけ」のスクリプトですが
# 結果を変数やスイッチに入れて、判定することができます。
#
# ダメージ計算式に変数を使い、月相に応じてダメージ変化
# 敵の戦闘行動にスイッチを条件にして、月相に応じた行動を取らせる
# イベントで、満月でないと開かない扉を作るetc...
# 色々と工夫してみて下さい。
#
# またイベントコマンドのスクリプトから、月相を変化させられます。
# 「moon_phase(n)」と入れると、n番の月相になります。
# nをマイナス、例えば-2とすれば、月相を2段階進めます。
#
#==============================================================================
#------------------------------------------------------------------------------
#◇初期設定
#------------------------------------------------------------------------------
module Nana
module MoonPhase
#月相を格納する変数ID(イベントチェック用)
#新月を0、満月を4とし、0,1,2,3,4,5,6,7と移行する
PHASE_VAL = 1
#月相を格納する変数ID(戦闘計算用)
#新月を0、満月を100とし、0,25,50,75,100,75,50,25と移行する
MOON_VAL = 2
#月相に対応するスイッチID
#新月から順に、対応するスイッチがONに、それ以外がOFFになる
PHASE_SWS = [1, 2, 3, 4, 5, 6, 7, 8]
#月相を一時的に非表示にするスイッチID
NULL_SW = 9
#マップ画面において、月相が変化する歩数
WALK = 4
#バトル画面において、月相が変化するターン数
TURN = 1
#月グラフィックの位置(マップ画面)
# 0:非表示 1:左寄せ 2:中央寄せ 3:右寄せ
MAP_POS = 1
#XY座標の調整値
MAP_AX = 2
MAP_AY = 2
#月グラフィックの位置(バトル画面)
# 0:非表示 1:左寄せ 2:中央寄せ 3:右寄せ
BATTLE_POS = 1
#XY座標の調整値
BATTLE_AX = 2
BATTLE_AY = 2
end
end
#初期設定ここまで
#==============================================================================
#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
# システム周りのデータを扱うクラスです。セーブやメニューの禁止状態などを保存
# します。このクラスのインスタンスは $game_system で参照されます。
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :moon_phase # 月相
attr_accessor :moon_count # 月相カウント
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias moon_initialize initialize
def initialize
moon_initialize
@moon_phase = 0
@moon_count = 0
end
#--------------------------------------------------------------------------
# ● 月相の変更
#--------------------------------------------------------------------------
def moon_phase=(moon_phase)
@moon_phase = moon_phase
@moon_phase = 0 if @moon_phase < 0
while @moon_phase >= 8
@moon_phase -= 8
end
if Nana::MoonPhase::PHASE_VAL > 0
$game_variables[Nana::MoonPhase::PHASE_VAL] = @moon_phase
end
if Nana::MoonPhase::MOON_VAL > 0
case @moon_phase
when 0
$game_variables[Nana::MoonPhase::MOON_VAL] = 0
when 1, 7
$game_variables[Nana::MoonPhase::MOON_VAL] = 25
when 2, 6
$game_variables[Nana::MoonPhase::MOON_VAL] = 50
when 3, 5
$game_variables[Nana::MoonPhase::MOON_VAL] = 75
when 4
$game_variables[Nana::MoonPhase::MOON_VAL] = 100
end
end
Nana::MoonPhase::PHASE_SWS.each{|id| $game_switches[id] = false if id > 0 }
sw = Nana::MoonPhase::PHASE_SWS[@moon_phase]
$game_switches[sw] = true if sw > 0
end
end
#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
# マップ画面のスプライトやタイルマップなどをまとめたクラスです。このクラスは
# Scene_Map クラスの内部で使用されます。
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● タイマースプライトの作成
#--------------------------------------------------------------------------
#initializeをaliasすると都合が悪いのでここに挿入
alias moon_create_timer create_timer
def create_timer
moon_create_timer
create_moon
end
#--------------------------------------------------------------------------
# ● 月相の作成
#--------------------------------------------------------------------------
def create_moon
@moon = Sprite_Moon.new(@viewport1)
@moon.z = 500
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias moon_dispose dispose
def dispose
moon_dispose
@moon.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias moon_update update
def update
moon_update
@moon.update if @moon
end
end
#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
# バトル画面のスプライトをまとめたクラスです。このクラスは Scene_Battle クラ
# スの内部で使用されます。
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● 戦闘背景(床)スプライトの作成
#--------------------------------------------------------------------------
alias moon_create_battleback1 create_battleback1
def create_battleback1
moon_create_battleback1
create_moon
end
#--------------------------------------------------------------------------
# ● 月相の作成
#--------------------------------------------------------------------------
def create_moon
@moon = Sprite_Moon.new(@viewport1)
@moon.z = 5
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias moon_dispose dispose
def dispose
moon_dispose
@moon.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias moon_update update
def update
moon_update
@moon.update if @moon
end
end
#==============================================================================
# ■ Sprite_Moon
#------------------------------------------------------------------------------
# 月相のスプライト。
#==============================================================================
class Sprite_Moon < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
pos = $game_party.in_battle ? Nana::MoonPhase::MAP_POS : Nana::MoonPhase::BATTLE_POS
self.bitmap = pos == 0 ? Bitmap.new(0, 0) : Cache.system("Moon")
phase = $game_system.moon_phase
self.src_rect.set(phase*bitmap.width/8, 0, bitmap.width/8, bitmap.height)
ax = $game_party.in_battle ? Nana::MoonPhase::MAP_AX : Nana::MoonPhase::BATTLE_AX
ay = $game_party.in_battle ? Nana::MoonPhase::MAP_AY : Nana::MoonPhase::BATTLE_AY
case pos
when 1
self.x = ax
self.y = ay
when 2
self.x = (Graphics.width - self.width) / 2 + ax
self.y = ay
when 3
self.x = Graphics.width - self.width + ax
self.y = ay
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
if $game_switches[Nana::MoonPhase::NULL_SW]
self.visible = false
else
self.visible = true
end
phase = $game_system.moon_phase
self.src_rect.set(phase*bitmap.width/8, 0, bitmap.width/8, bitmap.height)
end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias moon_start start
def start
moon_start
if Nana::MoonPhase::WALK > 0 && Nana::MoonPhase::TURN > 0
$game_system.moon_count *= Nana::MoonPhase::TURN / Nana::MoonPhase::WALK
end
end
#--------------------------------------------------------------------------
# ● ターン終了
#--------------------------------------------------------------------------
alias moon_turn_end turn_end
def turn_end
if Nana::MoonPhase::TURN > 0
$game_system.moon_count += 1
if $game_system.moon_count >= Nana::MoonPhase::TURN
$game_system.moon_count = 0
$game_system.moon_phase += 1
end
end
moon_turn_end
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
alias moon_terminate terminate
def terminate
if Nana::MoonPhase::WALK > 0 && Nana::MoonPhase::TURN > 0
$game_system.moon_count *= Nana::MoonPhase::WALK / Nana::MoonPhase::TURN
end
moon_terminate
end
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
# 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● 歩数増加
#--------------------------------------------------------------------------
alias moon_increase_steps increase_steps
def increase_steps
moon_increase_steps
if Nana::MoonPhase::WALK > 0
$game_system.moon_count += 1
if $game_system.moon_count >= Nana::MoonPhase::WALK
$game_system.moon_count = 0
$game_system.moon_phase += 1
end
end
end
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 月相の変更
#--------------------------------------------------------------------------
def moon_phase(phase)
phase < 0 ? $game_system.moon_phase -= phase : $game_system.moon_phase = phase
$game_system.moon_count = 0
end
end