#===============================================================================
# Name: Dark's Super Simple Menu
# Author: Nhat Nguyen (Dark Sky)
# Released on: May 28th 2016
#-------------------------------------------------------------------------------
# Version 1.0: Released!
#-------------------------------------------------------------------------------
# Plug and play!
#===============================================================================
module DarkCreation
module SuperSimpleMenu
WINDOW_X = 140
WINDOW_y = 155
BACKGROUND_OPACITY = 130
HELP_FONT =
NON_COMBAT_STYLE = true
COMMANDS = {
:item => ,
:skill => ,
:equip => ,
:status => ,
:save => ,
:game_end => ,
}
NON_COMBAT_STYLE_LIST =
end
end
#==============================================================================
# ** Window_MenuCommand
#------------------------------------------------------------------------------
# This command window appears on the menu screen.
#==============================================================================
include DarkCreation::SuperSimpleMenu
class Window_MenuCommand < Window_Command
attr_accessor :list
attr_accessor :dhelp_window
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(WINDOW_X, WINDOW_y)
@dcontents.x = self.x
@dcontents.y = self.y
@dcontents2.x = 150 + (self.x - 100)
@dcontents2.y = 105 + (self.y - 100)
@dcontents.opacity = 0
@dcontents2.opacity = 0
self.opacity = 0
self.back_opacity = 0
select_last
end
#--------------------------------------------------------------------------
# * Get Window Width
#--------------------------------------------------------------------------
def window_width
return 48
end
#--------------------------------------------------------------------------
# * Get Window Width
#--------------------------------------------------------------------------
alias :dark_dispose_window_menu_qwe :dispose
def dispose
dark_dispose_window_menu_qwe
@dcontents.bitmap.dispose
@dcontents.dispose
@dcontents2.bitmap.dispose
@dcontents2.dispose
end

#--------------------------------------------------------------------------
# * Draw Character Graphic
#--------------------------------------------------------------------------
def draw_character2(character_name, character_index, x, y)
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)
@cw = cw
@dcontents2.bitmap.blt(x - cw / 2, y - ch, bitmap, src_rect)
end

def draw_actor_graphic2(actor, x, y)
draw_character2(actor.character_name, actor.character_index, x, y)
end

#--------------------------------------------------------------------------
# * Draw Face Graphic
# enabled : Enabled flag. When false, draw semi-transparently.
#--------------------------------------------------------------------------
def draw_face2(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, 96)
@dcontents2.bitmap.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
bitmap.dispose
end
#--------------------------------------------------------------------------
# * Draw Actor Face Graphic
#--------------------------------------------------------------------------
def draw_actor_face2(actor, x, y, enabled = true)
draw_face2(actor.face_name, actor.face_index, x, y, enabled)
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh

contents.clear
@dcontents ||= Sprite.new
@dcontents.bitmap ||= Bitmap.new(self.width - 5,self.height - 5)
@dcontents.bitmap.clear
@dcontents.bitmap.fill_rect(5,5,self.width,self.height,Color.new(0,0,0,BACKGROUND_OPACITY)) #contents.fill_rect(0,0,contents.width,contents.height,Color.new(0,0,0,170))

@dcontents2 ||= Sprite.new
@dcontents2.bitmap ||= Bitmap.new(233,108)#self.width - 5,self.height - 5)
@dcontents2.bitmap.clear
@dcontents2.bitmap.font.name = HELP_FONT
@dcontents2.bitmap.fill_rect(0,0,233,108,Color.new(0,0,0,BACKGROUND_OPACITY))
draw_actor_graphic2($game_party.members,20,43)
x = @dcontents2.width - 96
draw_actor_face2($game_party.members,x,7)
@actor_info = "#{$game_party.members.name}"# | #{$game_party.members.class.name}"
@dcontents2.bitmap.font.size -= 6
@dcontents2.bitmap.draw_text(@cw + 10,5,233,24,@actor_info)
@dcontents2.bitmap.font.color = Color.new(253,155,51)
@dcontents2.bitmap.draw_text(@cw + 10,5+24,233,24,"#{$game_party.members.class.name}")
@dcontents2.bitmap.font.color = Color.new(255,255,255)
@dcontents2.bitmap.draw_text(5,5+24+24,233,24,"Gold: #{$game_party.gold}G")
@dcontents2.bitmap.draw_text(5,5+24*3,233,24,"Place: #{$game_map.display_name}")
draw_all_items
end
#--------------------------------------------------------------------------
# * Create Command List
#--------------------------------------------------------------------------
def make_command_list
add_main_commands
end
#--------------------------------------------------------------------------
# * Add Main Commands to List
#--------------------------------------------------------------------------
def add_main_commands
COMMANDS.each_key do |key|
next if NON_COMBAT_STYLE_LIST.include?(key) && NON_COMBAT_STYLE
add_command(COMMANDS, key, main_commands_enabled)
end
end
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
change_color(normal_color, command_enabled?(index))
rect = item_rect_for_text(index)
rect.x = 0
draw_icon(COMMANDS[@list],rect.x,rect.y)
end
#--------------------------------------------------------------------------
# * Process cursor move
#--------------------------------------------------------------------------
alias dark_menucommand_process_cursor_move_213 process_cursor_move
def process_cursor_move
dark_menucommand_process_cursor_move_213
@dhelp_window.refresh(true)
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
alias dark_menucommand_update_213 update
def update
dark_menucommand_update_213
if @dcontents.opacity < 255
@dcontents.opacity += 10
@dcontents2.opacity += 10
end
if @dhelp_window
@dhelp_window.refresh
end
end
end

include DarkCreation::SuperSimpleMenu
class Window_HelpScroll < Window_Base
attr_accessor :target
attr_accessor :index
def initialize(x,y,width,height)
super(x,y,width,height)
self.opacity = 0
self.back_opacity = 0
@scroll_pos = 0
@opacity = 0
end
def target=(tar)
if tar.is_a?(Window)
@target = tar
create_assets
refresh
end
end
def dispose
super
@dcontents.bitmap.dispose
@dcontents.dispose
@d_scroll.bitmap.dispose
@d_scroll.dispose
end
def cal_text_width(text)
size = 0
for i in 0...text.size
size += text_size(text).width
end
return size
end
def create_assets
@dcontents = Sprite.new
@dcontents.bitmap = Bitmap.new(self.width - 5,self.height - 5)
@dcontents.bitmap.clear
@dcontents.bitmap.fill_rect(5,5,self.width,self.height,Color.new(0,0,0,BACKGROUND_OPACITY - 20))
@d_scroll = Sprite.new
@d_scroll.bitmap ||= Bitmap.new(544,416)
@dcontents.bitmap.fill_rect(8,@dcontents.bitmap.height - 30,self.width - 16,26,Color.new(0,0,0,BACKGROUND_OPACITY + 30))
@w_width = self.width - 16
@w_height = 26
@w_x = 8
@w_y = @dcontents.bitmap.height - 30
@viewport = Viewport.new(5,5,544,416)
@viewport.z = 990
@dcontents.viewport = @viewport
@d_scroll.bitmap.clear
@dcontents.x = self.x
@dcontents.y = self.y
@viewport1 = Viewport.new(self.x + 14,self.y+32,@w_width-1,@w_height)
@viewport1.z = 999
@dcontents.bitmap.font.name = HELP_FONT
@d_scroll.bitmap.font.name = HELP_FONT
@d_scroll.bitmap.font.size = 15
@d_scroll.viewport = @viewport1
@dcontents.opacity = @d_scroll.opacity = 0
@index = -1
end
def refresh(reset=false)
@d_scroll.bitmap.clear
@dcontents.bitmap.clear
@text = COMMANDS[@target.list]
if @dcontents.opacity < 255
@dcontents.opacity += 5
@d_scroll.opacity += 5
end
if @index != @target.index
@scroll_pos = -@w_width+1
@d_scroll.ox = @scroll_pos
@index = @target.index
else
@dcontents.bitmap.fill_rect(5,5,self.width,self.height,Color.new(0,0,0,BACKGROUND_OPACITY - 20))
@dcontents.bitmap.fill_rect(8,@dcontents.bitmap.height - 30,self.width - 16,26,Color.new(0,0,0,BACKGROUND_OPACITY + 30))
@dcontents.bitmap.draw_text(8,-1,@dcontents.bitmap.width,24,COMMANDS[@target.list])
end
@d_scroll.bitmap.draw_text(2,4,cal_text_width(@text),24,@text)
@d_scroll.ox = @scroll_pos
@scroll_pos += 1
if @scroll_pos > cal_text_width(@text) - 10
@scroll_pos = -@w_width+1
end
end
end

#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
# This class performs the menu screen processing.
#==============================================================================

class Scene_Menu < Scene_MenuBase
#--------------------------------------------------------------------------
# * Start Processing
#--------------------------------------------------------------------------
def start
super
create_command_window
#create_gold_window
#create_status_window
end
#--------------------------------------------------------------------------
# * Create Command Window
#--------------------------------------------------------------------------
def create_command_window
@command_window = Window_MenuCommand.new
@scroll_help = Window_HelpScroll.new(@command_window.x - 4,@command_window.y,9*32,32*2)
@scroll_help.y = @command_window.y - @scroll_help.height
@scroll_help.target = @command_window
@command_window.dhelp_window = @scroll_help
@command_window.set_handler(:item, method(:command_item))
@command_window.set_handler(:skill, method(:on_personal_ok))
@command_window.set_handler(:equip, method(:on_personal_ok))
@command_window.set_handler(:status, method(:on_personal_ok))
#@command_window.set_handler(:formation, method(:command_formation))
@command_window.set_handler(:save, method(:command_save))
@command_window.set_handler(:game_end, method(:command_game_end))
@command_window.set_handler(:cancel, method(:return_scene))
end
#--------------------------------------------------------------------------
# * Create Gold Window
#--------------------------------------------------------------------------
def create_gold_window
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = Graphics.height - @gold_window.height
end
#--------------------------------------------------------------------------
# * Create Status Window
#--------------------------------------------------------------------------
def create_status_window
@status_window = Window_MenuStatus.new(@command_window.width, 0)
end
#--------------------------------------------------------------------------
# * Command
#--------------------------------------------------------------------------
def command_item
SceneManager.call(Scene_Item)
end
#--------------------------------------------------------------------------
# * , and Commands
#--------------------------------------------------------------------------
def command_personal
@status_window.select_last
@status_window.activate
@status_window.set_handler(:ok, method(:on_personal_ok))
@status_window.set_handler(:cancel, method(:on_personal_cancel))
end
#--------------------------------------------------------------------------
# * Command
#--------------------------------------------------------------------------
def command_formation
@status_window.select_last
@status_window.activate
@status_window.set_handler(:ok, method(:on_formation_ok))
@status_window.set_handler(:cancel, method(:on_formation_cancel))
end
#--------------------------------------------------------------------------
# * Command
#--------------------------------------------------------------------------
def command_save
SceneManager.call(Scene_Save)
end
#--------------------------------------------------------------------------
# * Command
#--------------------------------------------------------------------------
def command_game_end
SceneManager.call(Scene_End)
end
#--------------------------------------------------------------------------
# * Personal Command
#--------------------------------------------------------------------------
def on_personal_ok
case @command_window.current_symbol
when :skill
SceneManager.call(Scene_Skill)
when :equip
SceneManager.call(Scene_Equip)
when :status
SceneManager.call(Scene_Status)
end
end
#--------------------------------------------------------------------------
# * Personal Command
#--------------------------------------------------------------------------
def on_personal_cancel
@status_window.unselect
@command_window.activate
end
#--------------------------------------------------------------------------
# * Formation
#--------------------------------------------------------------------------
def on_formation_ok
if @status_window.pending_index >= 0
$game_party.swap_order(@status_window.index,
@status_window.pending_index)
@status_window.pending_index = -1
@status_window.redraw_item(@status_window.index)
else
@status_window.pending_index = @status_window.index
end
@status_window.activate
end
#--------------------------------------------------------------------------
# * Formation
#--------------------------------------------------------------------------
def on_formation_cancel
if @status_window.pending_index >= 0
@status_window.pending_index = -1
@status_window.activate
else
@status_window.unselect
@command_window.activate
end
end
end