Loki
Preferowany:
Pomógł: 12 razy Dołączył: 25 Kwi 2012 Posty: 162
Wysłany: Czw 28 Cze, 2012 10:59
MSX Menu
~ MSX - Scene_Menu MOD ~
Krótki opis:
Inne menu z ikonami i paskami hp/mp w menu.
Kompatybilność:
RPG Maker VX Ace
Skrypt:
Spoiler:
Kod: #=============================================================================
# ** MSX - Scene_Menu MOD
#=============================================================================
# Author: Melosx
# Version: 2.0 Beta 1
# Release Date: 06-01-2012 => v1.0
# 13-06-2012 => v2.0 Beta 1
#
#=============================================================================
# * Instructions
#-----------------------------------------------------------------------------
# Copy the script below Materials and above Main.
#
#=============================================================================
# * Rewrite
#-----------------------------------------------------------------------------
#
# Window_Base:
#
# def draw_character
# def draw_actor_graphic
# def draw_gauge
#
#=============================================================================
# * Add
#-----------------------------------------------------------------------------
#
# Window_Base:
#
# def draw_actor_exp_gauge
#
#==============================================================================
module MSX
#==============================================================================#
#=============================CONFIGURATION START==============================#
#==============================================================================#
ACTIVE_MEMBERS = 4 # Default -> 4. Number ofactive member in menu.
USE_GRAPHIC = true # true/false - Use/Not use graphic
USE_FACE = true # true/false - Use/Not use face.
MAIN_X = 50 # General x coordinate
MAIN_Y = 0 # General y coordinate
# FACE
FACE_X = 1 # Actor Face x coordinate
FACE_Y = 1 # Actor Face y coordinate
FACE_HEIGHT = 64 # Actor Face height
# GRAPHIC
GRAPHIC_X = 24 # Actor Graphic x coordinate
GRAPHIC_Y = 52 # Actor Graphic y coordinate
# GAUGE STYLE
GAUGE_HEIGHT = 6 # HP/MP Gauge width
GAUGE_BORDER = true # HP/MP Gauge Border
# HP
HP_X = 170 # Gauge x coordinate
HP_Y = 20 # Gauge y coordinate
HP_WIDTH = 130 # Gauge width
HP_TYPE = 0 # 0 -> default; 1 -> center; 2 -> inverse;
# MP
MP_X = 175 # Gauge x coordinate
MP_Y = 44 # Gauge y coordinate
MP_WIDTH = 130 # Gauge width
MP_TYPE = 0 # 0 -> default; 1 -> center; 2 -> inverse;
# EXP
EXP_GAUGE_X = 345 # Gauge x coordinate
EXP_GAUGE_Y = 44 # Gauge y coordinate
EXP_GAUGE_WIDTH = 90 # Gauge width
EXP_GAUGE_HEIGHT = 6 # Gauge height
EXP_INFO_X = 340 # Exp Info x coordinate
EXP_INFO_Y = 18 # Exp Info y coordinate
# NAME
NAME_X = 0 # Name x coordinate
NAME_Y = 0 # Name y coordinate
# NICKNAME
NICK_X = 0 # Nickname x coordinate
NICK_Y = 20 # Nickname y coordinate
# LEVEL
LVL_X = 290 # Level x coordinate
LVL_Y = 0 # Level y coordinate
# CLASS
CLASS_X = 100 # Class x coordinate
CLASS_Y = 0 # Class y coordinate
# STATE
STATE_X = 50 # State x coordinate
STATE_Y = 0 # State y coordinate
STATE_NUMBER = 6 # Number of state
#==============================================================================#
#==============================CONFIGURATION END===============================#
#==============================================================================#
end
#==============================================================================
# ** Game_Party
#==============================================================================
class Game_Party < Game_Unit
def menu_members
all_members[0, MSX::ACTIVE_MEMBERS].select {|actor| actor.exist? }
end
end
#==============================================================================
# ** Scene_Menu
#==============================================================================
class Scene_Menu < Scene_MenuBase
def start
super
create_command_window
create_gold_window
create_status_window
end
def create_gold_window
@gold_window = Window_MenuPlus_Horz.new
@gold_window.x = 0
@gold_window.y = Graphics.height - @gold_window.height
end
def create_status_window
@status_window = Window_MenuStatus.new(0, 48)
end
end
#==============================================================================
# ** Window_MenuCommand
#==============================================================================
class Window_MenuCommand < Window_Command
def initialize
super(0, 0)
self.contents.font.size = 16
select_last
end
def visible_line_number
return 1
end
def col_max
return 7
end
def spacing
return 4
end
def window_width
return 544
end
def window_height
return 48
end
end
#==============================================================================
# ** Window_MenuStatus
#==============================================================================
class Window_MenuStatus < Window_Selectable
attr_reader :pending_index
def initialize(x, y)
super(x, y, window_width, window_height)
self.contents.font.size = 16
@pending_index = -1
refresh
end
def window_width
544
end
def window_height
320
end
def draw_item(index)
actor = $game_party.members[index]
enabled = $game_party.menu_members.include?(actor)
rect = item_rect(index)
draw_item_background(index)
if MSX::USE_FACE
draw_actor_menu_face(actor, rect.x + MSX::FACE_X, rect.y + MSX::FACE_Y, enabled)
draw_actor_simple_status(actor, rect.x + MSX::MAIN_X, rect.y + MSX::MAIN_Y)
else
draw_actor_simple_status(actor, rect.x + MSX::MAIN_X, rect.y + MSX::MAIN_Y)
end
if MSX::USE_GRAPHIC
draw_actor_graphic(actor, MSX::GRAPHIC_X, rect.y + MSX::GRAPHIC_Y, enabled)
end
end
def draw_actor_simple_status(actor, x, y)
draw_actor_name(actor, x + MSX::NAME_X, y + MSX::NAME_Y)
draw_actor_nickname(actor, x + MSX::NICK_X, y + MSX::NICK_Y, 160)
draw_actor_level(actor, x + MSX::LVL_X, y + MSX::LVL_Y)
draw_actor_icons(actor, MSX::STATE_X, MSX::STATE_Y + line_height * 2, MSX::STATE_NUMBER * 24)
draw_actor_class(actor, x + MSX::CLASS_X, y + MSX::CLASS_Y)
draw_actor_hp(actor, x + MSX::HP_X, y + MSX::HP_Y, MSX::HP_WIDTH, MSX::HP_TYPE)
draw_actor_mp(actor, x + MSX::MP_X, y + MSX::MP_Y, MSX::MP_WIDTH, MSX::MP_TYPE)
draw_actor_exp_gauge(actor, x + MSX::EXP_GAUGE_X, y + MSX::EXP_GAUGE_Y, MSX::EXP_GAUGE_WIDTH)
draw_exp_info(actor, x + MSX::EXP_INFO_X, y + MSX::EXP_INFO_Y)
end
def draw_actor_class(actor, x, y, width = 112)
change_color(system_color)
draw_text(x, y, 52, line_height, "Class:")
change_color(normal_color)
draw_text(x + 54, y, width, line_height, actor.class.name)
end
def draw_exp_info(actor, x, y)
self.contents.font.color = text_color(0)
if actor.level != 99
s1 = actor.exp - actor.current_level_exp
s2 = actor.next_level_exp - actor.current_level_exp
else
s1 = "-"
s2 = "-"
end
exp = s1.to_s + " / " + s2.to_s
change_color(system_color)
draw_text(x, y, 100, line_height, "Experience")
change_color(normal_color)
draw_text(x, y + 12, 100, line_height, exp, 2)
end
end
#==============================================================================
# ** Window_Base
#==============================================================================
class Window_Base < Window
def draw_menu_face(face_name, face_index, x, y, enabled = true)
bitmap = Cache.face(face_name)
rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, MSX::FACE_HEIGHT)
contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
bitmap.dispose
end
def draw_actor_menu_face(actor, x, y, enabled = true)
draw_menu_face(actor.face_name, actor.face_index, x, y, enabled)
end
def draw_character(character_name, character_index, x, y, enabled=true)
return unless character_name
bitmap = Cache.character(character_name)
sign = character_name[/^[\!\$]./]
if sign && sign.include?('$')
cw = bitmap.width / 3
ch = bitmap.height / 4
else
cw = bitmap.width / 12
ch = bitmap.height / 8
end
n = character_index
src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
contents.blt(x - cw / 2, y - ch, bitmap, src_rect, enabled ? 255 : translucent_alpha)
end
def draw_actor_graphic(actor, x, y, enabled=true)
draw_character(actor.character_name, actor.character_index, x, y, enabled)
end
def draw_gauge(x, y, width, rate, color1, color2, type = 0)
fill_w = (width * rate).to_i
gauge_y = y + line_height - 8
if MSX::GAUGE_BORDER
contents.fill_rect(x - 2, gauge_y - 2, width + 4, MSX::GAUGE_HEIGHT + 4, gauge_back_color)
contents.fill_rect(x - 1, gauge_y - 1, width + 2, MSX::GAUGE_HEIGHT + 2, normal_color)
end
case type
when 0
contents.fill_rect(x, gauge_y, width, MSX::GAUGE_HEIGHT, gauge_back_color)
contents.gradient_fill_rect(x, gauge_y, fill_w, MSX::GAUGE_HEIGHT, color1, color2)
when 1
gr_x = x + (width - fill_w) / 2
contents.fill_rect(x, gauge_y, width, MSX::GAUGE_HEIGHT, gauge_back_color)
contents.gradient_fill_rect(gr_x, gauge_y, fill_w, MSX::GAUGE_HEIGHT, color1, color2)
when 2
gr_x = x + (width - fill_w)
contents.fill_rect(x, gauge_y, width, MSX::GAUGE_HEIGHT, gauge_back_color)
contents.gradient_fill_rect(gr_x, gauge_y, fill_w, MSX::GAUGE_HEIGHT, color1, color2)
end
end
def draw_actor_hp(actor, x, y, width = 124, type = 0)
draw_gauge(x, y, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2, type)
change_color(system_color)
draw_text(x, y, 30, line_height, Vocab::hp_a)
draw_current_and_max_values(x, y, width, actor.hp, actor.mhp,
hp_color(actor), normal_color)
end
def draw_actor_mp(actor, x, y, width = 124, type = 0)
draw_gauge(x, y, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2, type)
change_color(system_color)
draw_text(x, y, 30, line_height, Vocab::mp_a)
draw_current_and_max_values(x, y, width, actor.mp, actor.mmp,
mp_color(actor), normal_color)
end
def draw_actor_exp_gauge(actor, x, y, width = 100)
if actor.level != 99
s1 = actor.exp - actor.current_level_exp
s2 = actor.next_level_exp - actor.current_level_exp
gw = width * s1 / s2
else
gw = 0
end
gc1 = text_color(14)
gc2 = text_color(6)
self.contents.fill_rect(x - 1, y - 1, width + 4, MSX::EXP_GAUGE_HEIGHT + 4, gauge_back_color)
self.contents.fill_rect(x, y, width + 2, MSX::EXP_GAUGE_HEIGHT + 2, normal_color)
self.contents.fill_rect(x + 1, y + 1, width, MSX::EXP_GAUGE_HEIGHT, gauge_back_color)
self.contents.gradient_fill_rect(x + 1, y + 1, gw, MSX::EXP_GAUGE_HEIGHT, gc1, gc2)
end
end
#==============================================================================
# ** Window_MenuPlus_Horz
#==============================================================================
class Window_MenuPlus_Horz < Window_Base
def initialize
super(0, 0, window_width, fitting_height(1))
self.contents.font.size = 16
refresh
end
def update
super
sec = (Graphics.frame_count / Graphics.frame_rate) % 60
if sec > @total_sec % 60 or sec == 0
refresh
end
end
def window_width
return 544
end
def refresh
contents.clear
draw_currency_value(value, currency_unit, 4, 0, 120)
draw_text(4, 0, 120, line_height, "Gold:", 0)
draw_text(195, 0, 120, line_height, "Steps:", 0)
draw_text(390, 0, 120, line_height, "Time:", 0)
change_color(normal_color)
draw_text(195, 0, 120, line_height, $game_party.steps, 2)
@total_sec = Graphics.frame_count / Graphics.frame_rate
ora = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
tempo = sprintf("%02d:%02d:%02d", ora, min, sec)
draw_text(390, 0, 120, line_height, tempo, 2)
end
def value
$game_party.gold
end
def currency_unit
Vocab::currency_unit
end
def open
refresh
super
end
end
Screeny: