#----------------------------------------------------------------------------
#マップにウインドウ表示
#----------------------------------------------------------------------------
module MARU_MAP_WINDOW
#★設定項目
SWITCH = 1 #在地圖表示窗口/使用開関番号
#指定開関ON表示、OFF非表示
MANPUKU = 2 #指定「満腹度」減少有効的開関
#指定開関OFF時、満腹度及HP(満腹度到0時)
#不會減少。
WINDOW = true #窗口スキン自作
#「true」…自作窗口
#「false」…預設窗口
#true之場合、自作窗口スキン圖片放在「system」文件夾
#該当ウインドウを入れる事。
#WINDOWtrue之場合設定項目------------------------------------------
W_NAME = [
"backwin", #自作窗口文件名(「system」フォルダを参照する)
"backwin2", #コンマ(,)で区切れば項目数を増やせます。
"Actor1"
]
W_NAME_V = 5 #自作窗口画像変更に使用的変数番号
#這変数0之時、使用W_NAME一番目的項目文件名、
#1の時、W_NAME二番目の項目のファイルを読み込みます。
#項目数を増やせば、3や4も指定出来ます。
#(項目数-1)以上の数字は入れない事!エラーで強制終了します。
W_X = 6 #自作窗口画像之X座標
W_Y = 7 #自作窗口画像之Y座標
W_WSIZE = 8 #自作窗口画像之寛決定之変数番号
W_HSIZE = 9 #自作窗口画像之高決定之変数番号
#自作ウインドウ描画スペースは544×96ピクセル。
#画像の引き延ばし等は出来ません。
OPACITY = 200 #自作窗口画像之透明度(0で透明、255で不透明)
#---------------------------------------------------------------------------
ACTOR = 2 #ステータスを表示するアクターIDを参照する変数の番号
#変数が0の時はアクターID1番のステータスを表示
NAME = "満腹度" #満腹度(仮)の名前
VALUE = 3 #満腹度(仮)の値を操作する変数の番号
MVALUE = 4 #満腹度(仮)の値の最大値とする変数の番号
STEP = 10 #満腹度(仮)を1減らす歩数
DAMEGE = 10 #満腹度(仮)が0の時、一歩毎に受けるHPダメージ
#★設定終わり
end
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
# マップ画面の処理を行うクラスです。
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● 全ウィンドウの作成
#--------------------------------------------------------------------------
alias ma__create_all_windows create_all_windows
def create_all_windows
ma__create_all_windows #既存のウインドウ作成
create_mapwin_window #「マップウインドウ作成」メソッドへ
end
#--------------------------------------------------------------------------
# ● マップウインドウの作成
#--------------------------------------------------------------------------
def create_mapwin_window
@map_window = Window_Mapwin.new #マップウインドウを作る
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias ma_update update
def update
ma_update #既存のアップデート
@map_window.update #マップウインドウのアップデート
end
end
#==============================================================================
# ■ Window_Mapwin
#------------------------------------------------------------------------------
# マップに表示するウィンドウです。
#==============================================================================
class Window_Mapwin < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(win_adjust1,win_adjust1,Graphics.width+win_adjust2,fitting_height(3)+win_adjust2)
if $game_switches[MARU_MAP_WINDOW::SWITCH] == false
self.visible = false
else
self.visible = true
end
if $game_variables[MARU_MAP_WINDOW::ACTOR] != 0
@actorsta = $game_actors[$game_variables[MARU_MAP_WINDOW::ACTOR]]
else
@actorsta = $game_actors[1]
end
refresh
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return 140
end
#--------------------------------------------------------------------------
# ● ウインドウの更新
#--------------------------------------------------------------------------
def update
super
if $game_switches[MARU_MAP_WINDOW::SWITCH] == false
self.visible = false
return
else
self.visible = true
end
if $game_variables[MARU_MAP_WINDOW::ACTOR] != 0
@actorsta = $game_actors[$game_variables[MARU_MAP_WINDOW::ACTOR]]
else
@actorsta = $game_actors[1]
end
#値のチェック。描画時の値と違っていたらリフレッシュする。
actors = @actorsta.id
hpp = @actorsta.hp
mpp = @actorsta.mp
mhpp = @actorsta.mhp
mmpp = @actorsta.mmp
gold = $game_party.gold
mname = $game_map.display_name
expp = @actorsta.exp
value = $game_variables[MARU_MAP_WINDOW::VALUE]
mvalue = $game_variables[MARU_MAP_WINDOW::MVALUE]
if MARU_MAP_WINDOW::WINDOW
skin = $game_variables[MARU_MAP_WINDOW::W_NAME_V]
x = $game_variables[MARU_MAP_WINDOW::W_X]
y = $game_variables[MARU_MAP_WINDOW::W_Y]
width = $game_variables[MARU_MAP_WINDOW::W_WSIZE]
height = $game_variables[MARU_MAP_WINDOW::W_HSIZE]
if actors != @lastactor or gold != @last_g or mname != @last_name or
value != @last_value or mvalue != @last_mvalue or hpp != @last_hp or
mpp != @last_mp or mhpp != @last_mhp or mmpp != @last_mmp or
expp != @last_exp or skin != @last_skin or x != @last_x or
y != @last_y or width != @last_width or height != @last_height
refresh
end
else
if actors != @lastactor or gold != @last_g or mname != @last_name or
value != @last_value or mvalue != @last_mvalue or hpp != @last_hp or
mpp != @last_mp or mhpp != @last_mhp or mmpp != @last_mmp or
expp != @last_exp
refresh
end
end
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
if MARU_MAP_WINDOW::WINDOW
self.opacity = 0
bitmap = Cache.system(MARU_MAP_WINDOW::W_NAME[$game_variables[MARU_MAP_WINDOW::W_NAME_V]])
rect = Rect.new(0,0,$game_variables[MARU_MAP_WINDOW::W_WSIZE],$game_variables[MARU_MAP_WINDOW::W_HSIZE])
contents.blt($game_variables[MARU_MAP_WINDOW::W_X],$game_variables[MARU_MAP_WINDOW::W_Y], bitmap, rect,MARU_MAP_WINDOW::OPACITY)
bitmap.dispose
end
#名前・ステータス描写
draw_actor_name(@actorsta,win_adjust3,win_adjust3,96)
draw_actor_level(@actorsta,win_adjust3,24+win_adjust3)
draw_actor_hp(@actorsta, 96+win_adjust3, win_adjust3)
draw_actor_mp(@actorsta, 96+win_adjust3, 24+win_adjust3)
#マップ情報描写
change_color(system_color)
draw_text(230+win_adjust3,win_adjust3,165,line_height, "現在地")
change_color(normal_color)
draw_text(230+win_adjust3,24+win_adjust3,165,line_height, $game_map.display_name)
#経験値描写
draw_actor_next_exp(@actorsta, 395+win_adjust3, win_adjust3,120)
s_next = sprintf("Next")
change_color(system_color)
draw_text(395+win_adjust3, win_adjust3, 140, line_height, s_next)
change_color(normal_color)
#所持金描写
draw_currency_value($game_party.gold, Vocab::currency_unit, 395+win_adjust3, 24+win_adjust3, 120)
#おまけ描写
o_text = MARU_MAP_WINDOW::NAME
value = $game_variables[MARU_MAP_WINDOW::VALUE]
mvalue = $game_variables[MARU_MAP_WINDOW::MVALUE]
draw_actor_hara_gauge(win_adjust3, 48+win_adjust3,220)
change_color(system_color)
draw_text(win_adjust3, 48+win_adjust3, 140, line_height, o_text)
change_color(normal_color)
draw_text(win_adjust3, 48+win_adjust3, 220, line_height, value.to_s + "/" + mvalue.to_s, 2)
#描画時点での各値の取得
@lastactor = @actorsta.id
@last_hp = @actorsta.hp
@last_mhp = @actorsta.mhp
@last_mp = @actorsta.mp
@last_mmp = @actorsta.mmp
@last_g = $game_party.gold
@last_name = $game_map.display_name
@last_exp = @actorsta.exp
@last_value = $game_variables[MARU_MAP_WINDOW::VALUE]
@last_mvalue = $game_variables[MARU_MAP_WINDOW::MVALUE]
if MARU_MAP_WINDOW::WINDOW
@last_skin = $game_variables[MARU_MAP_WINDOW::W_NAME_V]
@last_x = $game_variables[MARU_MAP_WINDOW::W_X]
@last_y = $game_variables[MARU_MAP_WINDOW::W_Y]
@last_width = $game_variables[MARU_MAP_WINDOW::W_WSIZE]
@last_height = $game_variables[MARU_MAP_WINDOW::W_HSIZE]
end
end
#--------------------------------------------------------------------------
# ● 満腹度 の割合を取得
#--------------------------------------------------------------------------
def hara_rate
$game_variables[MARU_MAP_WINDOW::MVALUE] > 0 ? $game_variables[MARU_MAP_WINDOW::VALUE].to_f / $game_variables[MARU_MAP_WINDOW::MVALUE] : 0
end
#--------------------------------------------------------------------------
# ○ 満腹度 ゲージの描画
# actor : アクター
# x, y : 描画先 X, Y 座標
# width : 幅
#--------------------------------------------------------------------------
def draw_actor_hara_gauge(x, y, width = 120)
draw_gauge(KMS_GenericGauge::TP_IMAGE,
x, y, width, hara_rate,
KMS_GenericGauge::TP_OFFSET,
KMS_GenericGauge::TP_LENGTH,
KMS_GenericGauge::TP_SLOPE
)
end
#--------------------------------------------------------------------------
# ● ウインドウ位置調整その1
#--------------------------------------------------------------------------
def win_adjust1
MARU_MAP_WINDOW::WINDOW ? -12 : 0
end
#--------------------------------------------------------------------------
# ● ウインドウ位置調整その2
#--------------------------------------------------------------------------
def win_adjust2
MARU_MAP_WINDOW::WINDOW ? 24 : 0
end
#--------------------------------------------------------------------------
# ● ウインドウ位置調整その3
#--------------------------------------------------------------------------
def win_adjust3
MARU_MAP_WINDOW::WINDOW ? 12 : 0
end
end
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
# パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
# スのインスタンスは $game_party で参照されます。
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias hara_initialize initialize
def initialize
hara_initialize
@haraheri = MARU_MAP_WINDOW::STEP
end
#--------------------------------------------------------------------------
# ● プレイヤーが 1 歩動いたときの処理
#--------------------------------------------------------------------------
alias hara_on_player_walk on_player_walk
def on_player_walk
hara_on_player_walk
manpuku
end
#--------------------------------------------------------------------------
# ● 満腹度の処理
#--------------------------------------------------------------------------
def manpuku
if $game_player.normal_walk?
update_haraheri_steps if $game_switches[MARU_MAP_WINDOW::MANPUKU]
update_haraheri_damege if $game_switches[MARU_MAP_WINDOW::MANPUKU]
end
end
#--------------------------------------------------------------------------
# ● 満腹度の歩数カウントを更新
#--------------------------------------------------------------------------
def update_haraheri_steps
@haraheri -= 1 if @haraheri > 0
if @haraheri == 0
$game_variables[MARU_MAP_WINDOW::VALUE] -= 1 if $game_variables[MARU_MAP_WINDOW::VALUE] > 0
@haraheri = MARU_MAP_WINDOW::STEP
end
end
#--------------------------------------------------------------------------
# ● 満腹度が0の時のダメージ更新
#--------------------------------------------------------------------------
def update_haraheri_damege
if $game_variables[MARU_MAP_WINDOW::VALUE] == 0
all_members.size.times{|i| $game_party.members[i].hp -= MARU_MAP_WINDOW::DAMEGE}
end
end
end