질문과 답변

Extra Form
vx ace를 이용해 이밴트 액알을 만들려고합니다. 그런데 이밴트액알은 무언가가 자연스럽지못하지만 스크립트를 쓰자니 스크립트에 대해 잘 몰라 스크립트를 어떻게 수정할지도 모르겠고... 어떻게 해야할까요?
그리고 제가 vx를 만들다고 ace로 갈아탓는데 vx에서 쓰던 게이지바 스크립트를 어떻게 수정해야할지 알려주세요 사진하고 스크립트 파일 올릴게요 
 
 
#--------------------------------------------------------------------
# A list of colors that you may use to configure the font and gauge
# colors in the config section.  Simply replace the last part of each
# statement, i.e., the part in the brackets <> below:
#
#                       Colors::<White>
#--------------------------------------------------------------------
# Continue below for the configuration section
#--------------------------------------------------------------------
# * Revisions
#   10/10/09 - Creation
#   10/19/09 - Added show_hud command.
#              Added visibility options by switch, map name, or leader
#   11/05/09 - Added fadout option
#   11/08/09 - Fixed bug caused by stale event listeners
#--------------------------------------------------------------------
# * Basic Commands
#--------------------------------------------------------------------
# * You can force the HUD to hide by using the "Script..."
#   event command with this text:
#
#      $scene.hide_hud
#
#   You can show the hud once again by using this line:
#
#      $scene_show_hud
#--------------------------------------------------------------------
module Colors
 
  AliceBlue = Color.new(240,248,255)
  AntiquaWhite = Color.new(250,235,215)
  Aqua = Color.new(0,255,255)
  Aquamarine = Color.new(127,255,212)
  Azure = Color.new(240,255,255)
  Beige = Color.new(245,245,220)
  Bisque = Color.new(255,228,196)
  Black = Color.new(0,0,0)
  BlanchedAlmond = Color.new(255,255,205)
  Blue = Color.new(0,0,255)
  BlueViolet = Color.new(138,43,226)
  Brown = Color.new(165,42,42)
  BurlyWood = Color.new(222,184,135)
  CadetBlue = Color.new(95,158,160)
  Chartreuse = Color.new(127,255,0)
  Chocolate = Color.new(210,105,30)
  Coral = Color.new(255,127,80)
  CornFlowerBlue = Color.new(100,149,237)
  Cornsilk = Color.new(255,248,220)
  Crimson = Color.new(220,20,60)
  Cyan = Color.new(0,255,255)
  DarkBlue = Color.new(0,0,139)
  DarkCyan = Color.new(0,139,139)
  DarkGoldenrod = Color.new(184,134,11)
  DarkGray = Color.new(169,169,169)
  DarkGreen = Color.new(0,100,0)
  DarkKhaki= Color.new(189,183,107)
  DarkMagenta = Color.new(139,0,139)
  DarkOliveGreen = Color.new(85,107,47)
  DarkOrange = Color.new(255,140,0)
  DarkRed = Color.new(139,0,0)
  DarkSalmon = Color.new(233,150,122)
  DarkSeaGreen = Color.new(143,188,143)
  DarkSlateBlue = Color.new(72,61,139)
  DarkSlateGray = Color.new(40,79,79)
  DarkTurquoise = Color.new(0,206,209)
  DarkViolet = Color.new(148,0,211)
  DeepPink = Color.new(255,20,147)
  DeepSkyBlue = Color.new(0,191,255)
  DimGray = Color.new(105,105,105)
  DodgerBlue = Color.new(30,144,255)
  FireBrick = Color.new(178,34,34)
  FloralWhite = Color.new(255,255,240)
  ForestGreen = Color.new(34,139,34)
  Fuschia = Color.new(255,0,255)
  Gainsboro = Color.new(220,220,220)
  GhostWhite = Color.new(248,248,255)
  Gold = Color.new(255,215,0)
  Goldenrod = Color.new(218,165,32)
  Gray = Color.new(128,128,128)
  Green = Color.new(0,128,0)
  GreenYellow = Color.new(173,255,47)
  Honeydew = Color.new(240,255,240)
  HotPink = Color.new(255,105,180)
  IndianRed = Color.new(205,92,92)
  Indigo = Color.new(75,0,130)
  Ivory = Color.new(255,240,240)
  Khaki = Color.new(240,230,140)
  Lavender = Color.new(230,230,250)
  LavenderBlush = Color.new(255,240,245)
  LawnGreen = Color.new(124,252,0)
  LemonChiffon = Color.new(255,250,205)
  LightBlue = Color.new(173,216,230)
  LightCoral = Color.new(240,128,128)
  LightCyan = Color.new(224,255,255)
  LightGoldenrodYellow = Color.new(250,250,210)
  LightGreen = Color.new(144,238,144)
  LightGray = Color.new(211,211,211)
  LightPink = Color.new(255,182,193)
  LightSalmon = Color.new(255,160,122)
  LightSeaGreen = Color.new(32,178,170)
  LightSkyBlue = Color.new(135,206,250)
  LightSlateGray = Color.new(119,136,153)
  LightSteelBlue = Color.new(176,196,222)
  LightYellow = Color.new(255,255,224)
  Lime = Color.new(0,255,0)
  LimeGreen = Color.new(50,205,50)
  Linen = Color.new(250,240,230)
  Magenta = Color.new(255,0,255)
  Maroon = Color.new(128,0,0)
  MediumAquamarine = Color.new(102,205,170)
  MediumBlue = Color.new(0,0,205)
  MediumOrchid = Color.new(186,85,211)
  MediumPurple = Color.new(147,112,219)
  MediumSeaGreen = Color.new(60,179,113)
  MediumSlateBlue = Color.new(123,104,238)
  MediumSpringGreen = Color.new(0,250,154)
  MediumTurquoise = Color.new(72,209,204)
  MediumVioletRed = Color.new(199,21,112)
  MidnightBlue = Color.new(25,25,112)
  MintCream = Color.new(245,255,250)
  MistyRose = Color.new(255,228,225)
  Moccasin = Color.new(255,228,181)
  NavajoWhite = Color.new(255,222,173)
  Navy = Color.new(0,0,128)
  OldLace = Color.new(253,245,230)
  Olive = Color.new(128,128,0)
  OliveDrab = Color.new(107,142,45)
  Orange = Color.new(255,165,0)
  OrangeRed = Color.new(255,69,0)
  Orchid = Color.new(218,112,214)
  PaleGoldenRod = Color.new(238,232,170)
  PaleGreen = Color.new(152,251,152)
  PaleTurquoise = Color.new(175,238,238)
  PaleVioletRed = Color.new(219,112,147)
  PapayaWhip = Color.new(255,239,213)
  PeachPuff = Color.new(255,218,155)
  Peru = Color.new(205,133,63)
  Pink = Color.new(255,192,203)
  Plum = Color.new(221,160,221)
  PowderBlue = Color.new(176,224,230)
  Purple = Color.new(128,0,128)
  Red = Color.new(255,0,0)
  RosyBrown = Color.new(188,143,143)
  RoyalBlue = Color.new(65,105,225)
  SaddleBrown = Color.new(139,69,19)
  Salmon = Color.new(250,128,114)
  SandyBrown = Color.new(244,164,96)
  SeaGreen = Color.new(46,139,87)
  Seashell = Color.new(255,245,238)
  Sienna = Color.new(160,82,45)
  Silver = Color.new(192,192,192)
  SkyBlue = Color.new(135,206,235)
  SlateBlue = Color.new(106,90,205)
  SlateGray = Color.new(112,128,144)
  Snow = Color.new(255,250,250)
  SpringGreen = Color.new(0,255,127)
  SteelBlue = Color.new(70,130,180)
  Tan = Color.new(210,180,140)
  Teal = Color.new(0,128,128)
  Thistle = Color.new(216,191,216)
  Tomato = Color.new(253,99,71)
  Turquoise = Color.new(64,244,208)
  Violet = Color.new(238,130,238)
  Wheat = Color.new(245,222,179)
  White = Color.new(255,255,255)
  WhiteSmoke = Color.new(245,245,245)
  Yellow = Color.new(255,255,0)
  YellowGreen = Color.new(154,205,50)
 
  GaugeGreen = Color.new(202,241,126)
  GaugeBlue = Color.new(137,222,254)
 
end
#--------------------------------------------------------------------
# do not touch this
class Point
  attr_reader :x
  attr_reader :y
  def initialize(x, y)
    @x, @y = x, y
  end
  def to_a
    [@x, @y]
  end
end
# or this
class ScrollDirection
  Left = 0
  Right = 1
end
#--------------------------------------------------------------------
#--------------------------------------------------------------------
# * Configuration Section
#--------------------------------------------------------------------
module HudConfig
 
  # The actor id of the main character in your game.
  # This will be the character in the main hud window.
  PLAYER_ID                  = 1
 
  # if this is set to 'true' the HUD will go opaque.
  # when the player is walking.
  TRANSPARENT_WHEN_MOVING    = true
  # this is the minimum opacity value reached while walking.
  # this should be a value between 0 and 255.
  TRANSPARENCY_WHEN_MOVING   = 64
  # this value determines how fast the HUD will fade out and in.
  # this is in incremenets per frame (60 frames per second).
  TRANSPARENCY_SWITCH_SPEED  = 2
 
  # If this switch is 'ON' the hud will not appear at all.
  # Set this to 'nil' to disable the feature completely
  NO_SHOW_SWITCH             = nil
 
  # If this text is found in a map name the hud will
  # be disabled for that map at all times.  This text
  # will be removed from the map name proper in case
  # you are using a map name script or somethin like that.
  NO_SHOW_TEXT               = 'hud no show'
 
  # Display an empty hud if there is no party leader?
  SHOW_IF_NO_LEADER          = false
 
  # Name of the player (main character) hud graphic
  PLAYER_HUD_IMAGE_NAME      = 'player_hud'
  # Use the gren and blue mp/hp gauges?
  # You may use your own graphics, but they must
  # adhere to the same format as the originals, i.e.,
  #
  #   hud_bar_hp_000.png
  #
  # Where the '000' part is a multiple of five, from 0-100.
  PLAYER_USE_CUSTOM_GAUGE    = true
 
  # The physical location of the hud sprite.
  # All of the other graphic locations are relative to this one.
  PLAYER_HUD_LOC             = Point.new(0, 0)
  # The relative location of the hud image to the hud sprite.
  PLAYER_HUD_IMAGE_LOCATION  = Point.new(0, 0)   
   
  # The starting location of each peice of the HP gauge.
  PLAYER_HP_GAUGE_LOCATION   = Point.new(0, 0)
  # the starting location of each peice of the MP gauge.
  PLAYER_MP_GAUGE_LOCATION   = Point.new(0, 0)
 
  SHOW_PLAYER_FACE_IMAGE     = true
  # The location of the face graphic.
  FACE_LOCATION              = Point.new(35, 0)
 
  # Show all party members? (THESE FEATURES ARE NOT YET IMPLEMENTED)
  USE_MEMBER_WINDOW          = true
  MEMBER_HUD_IMAGE_NAME      = 'member_hud'
  MEMBER_USE_CUSTOM_GAUGE    = false
 
  # Allow the player to hide the HUD by pressing a button?
  ALLOW_HUD_HIDE             = true
  # The button which will trigger a hud move.
  HIDE_HUD_INPUT             = Input::X
  # The speed at which to move the hud.
  HUD_HIDE_SPEED             = 7
  # replace "Left" with "Right" below to change the scroll direction
  HUD_SCROLL_DIRECTION       = ScrollDirection::Left
 
  # Global values which are convenient for setting
  # multiple values to the same thing.
  GLOBAL_FONT_NAME           = ['Magneto', 'Consolas', 'Verdana', 'Ariel', 'Courier New']
  GLOBAL_PLAYER_FONT_SIZE    = 22
  GLOBAL_MEMBER_FONT_SIZE    = 22 
 
  SHOW_PLAYER_NAME            = true
  # The rest of the settings deal with setting the
  # location and style of the text displayed in the HDU
  PLAYER_NAME_FONT           = GLOBAL_FONT_NAME 
  PLAYER_NAME_COLOR          = Colors::Silver
  PLAYER_NAME_USE_ITALICS    = false
  PLAYER_NAME_USE_BOLD       = false
  PLAYER_NAME_USE_SHADOW     = true
  PLAYER_NAME_FONT_SIZE      = 20
  PLAYER_NAME_LOCATION       = Point.new(125,0)
  PLAYER_NAME_WIDTH          = 90
  PLAYER_NAME_HEIGHT         = 22
 
  MEMBER_NAME_FONT           = GLOBAL_FONT_NAME
  MEMBER_NAME_COLOR          = Colors::White
  MEMBER_NAME_FONT_SIZE      = GLOBAL_MEMBER_FONT_SIZE
  MEMBER_NAME_LOCATION       = Point.new(0,0)
 
  USE_HP_TEXT_DISPLAY        = true
  PLAYER_HP_FONT             = ['Consolas', 'Verdana', 'Ariel', 'Courier New']
  PLAYER_FULL_HP_COLOR       = Colors::GaugeGreen
  PLAYER_HP_FONT_USE_ITALICS = false
  PLAYER_HP_FONT_USE_BOLD    = true
  PLAYER_HP_FONT_USE_SHADOW  = true
  PLAYER_HP_FONT_SIZE        = 14
  PLAYER_HP_LOCATION         = Point.new(130,66)
  PLAYER_HP_WIDTH            = 76
  PLAYER_HP_HEIGHT           = 11
 
  MEMBER_HP_FONT             = GLOBAL_FONT_NAME 
  MEMBER_HP_FONT_SIZE        = GLOBAL_MEMBER_FONT_SIZE
  MEMBER_HP_LOCATION         = Point.new(0,0)
 
  USE_MP_TEXT_DISPLAY        = USE_HP_TEXT_DISPLAY
  PLAYER_MP_FONT             = PLAYER_HP_FONT
  PLAYER_FULL_MP_COLOR       = Colors::GaugeBlue
  PLAYER_MP_FONT_USE_ITALICS = PLAYER_HP_FONT_USE_ITALICS
  PLAYER_MP_FONT_USE_BOLD    = PLAYER_HP_FONT_USE_BOLD
  PLAYER_MP_FONT_USE_SHADOW  = PLAYER_HP_FONT_USE_SHADOW
  PLAYER_MP_FONT_SIZE        = PLAYER_HP_FONT_SIZE
  PLAYER_MP_LOCATION         = Point.new(PLAYER_HP_LOCATION.x, PLAYER_HP_LOCATION.y + PLAYER_HP_HEIGHT + 1)
  PLAYER_MP_WIDTH            = PLAYER_HP_WIDTH
  PLAYER_MP_HEIGHT           = PLAYER_HP_HEIGHT
 
  MEMBER_MP_FONT             = GLOBAL_FONT_NAME 
  MEMBER_MP_FONT_SIZE        = GLOBAL_MEMBER_FONT_SIZE
  MEMBER_MP_LOCATION         = Point.new(0,0)
 
  SHOW_PLAYER_LEVEL          = true
  PLAYER_LEVEL_FONT          = GLOBAL_FONT_NAME
  PLAYER_LEVEL_COLOR         = Colors::Gold
  PLAYER_LEVEL_USE_ITALICS   = false
  PLAYER_LEVEL_USE_BOLD      = false
  PLAYER_LEVEL_USE_SHADOW    = true
  PLAYER_LEVEL_FONT_SIZE     = 18
  PLAYER_LEVEL_LOCATION      = Point.new(136,24)
  PLAYER_LEVEL_WIDTH         = 36
  PLAYER_LEVEL_HEIGHT        = 35
 
  MEMBER_LEVEL_FONT          = GLOBAL_FONT_NAME
  MEMBER_LEVEL_COLOR         = PLAYER_LEVEL_COLOR
  MEMBER_LEVEL_FONT_SIZE     = 10
  MEMBER_LEVEL_LOCATION      = Point.new(0,0)
  
  #-------
  # don't change the values below unless you know what you are doing.
 
  # Shows above the map and below the message window by default
  PLAYER_HUD_Z               = 199
 
  # The text format used for gauage images.   
  HEALTH_GAUGE_FORMAT        = 'hud_bar_%s_%.3d'
 
  # the name of the image file used as a mask for the face graphic
  PLAYER_FACE_MASK_NAME      = 'player_face_mask'
 
end
class EventHandler
 
  def initialize
    @client_map = {}
  end
 
  def add_listener(id, func)
    (@client_map[id.hash] ||= []) << func
  end
 
  def remove_listener(id)
    return @client_map.delete(id.hash)
  end
 
  def alert_listeners(*args)
    @client_map.each_value { |v| v.each { |func| func.call(*args) } }
  end
 
  def dispose
    @client_map = nil
  end
 
end
class Game_Actor < Game_Battler
 
  attr_reader :hp_changed
  attr_reader :mp_changed
  attr_reader :maxhp_changed
  attr_reader :maxmp_changed
 
  alias :pre_confhud_ga_init :initialize unless $@
  def initialize(*args)
    @hp_changed = EventHandler.new
    @mp_changed = EventHandler.new
    @maxhp_changed = EventHandler.new
    @maxmp_changed = EventHandler.new
    pre_confhud_ga_init(*args)   
  end
 
  def on_hp_changed(*args)   
    @hp_changed.alert_listeners(*args)
  end
 
  def on_mp_changed(*args)   
    @mp_changed.alert_listeners(*args)
  end
 
  def on_maxhp_changed(*args)
    @maxhp_changed.alert_listeners(*args)
  end
 
  def on_maxmp_changed(*args)
    @maxmp_changed.alert_listeners(*args)
  end
 
  alias :pre_confhud_ga_hpequ :hp= unless $@
  def hp=(*args)
    temp = @hp   
    pre_confhud_ga_hpequ(*args)   
    on_hp_changed(@hp) unless temp == @hp
  end
 
  alias :pre_confhud_ga_maxhpequ :maxhp= unless $@
  def maxhp=(*args)
    temp = self.maxhp
    pre_confhud_ga_maxhpequ(*args)
    cur_max = self.maxhp
    on_maxhp_changed(cur_max) unless temp == cur_max
  end
 
  alias :pre_confhud_ga_mpequ :mp= unless $@
  def mp=(*args)
    temp = @mp
    pre_confhud_ga_mpequ(*args)
    on_mp_changed(@mp) unless temp == @mp
  end
 
  alias :pre_confhud_ga_maxmpequ :maxmp= unless $@
  def maxmp=(*args)
    temp = self.maxmp
    pre_confhud_ga_maxmpequ(*args)
    cur_max = self.maxmp
    on_maxmp_changed(cur_max) unless temp == cur_max
  end
 
  alias :pre_confhud_ga_recover_all :recover_all unless $@
  def recover_all(*args)
    temp_hp, temp_mp = @hp, @mp
    pre_confhud_ga_recover_all(*args)
    on_hp_changed if temp_hp != @hp
    on_mp_changed if temp_mp != @mp
  end
 
end
class Game_Party
 
  attr_reader :party_leader_changed
 
  alias :pre_confhud_gp_init :initialize
  def initialize(*args)
    pre_confhud_gp_init(*args)
    @party_leader_changed = EventHandler.new
  end
 
  def on_party_leader_changed(*args)
    party_leader_changed.alert_listeners(*args)
  end
 
  alias :pre_confhud_gp_add_actor :add_actor
  def add_actor(*args)
    leader = $game_party.members.first
    pre_confhud_gp_add_actor(*args)
    on_party_leader_changed unless leader == $game_party.members.first
  end
 
  alias :pre_confhud_gp_remove_actor :remove_actor
  def remove_actor(*args)
    leader = $game_party.members.first
    pre_confhud_gp_remove_actor(*args)
    on_party_leader_changed unless leader == $game_party.members.first
  end
 
end
class Game_Player < Game_Character
 
  attr_reader :move_begun
  attr_reader :move_end
 
  alias :pre_confhud_gp_init :initialize
  def initialize(*args)
    @move_begun = EventHandler.new
    @move_end = EventHandler.new
    @move_started = false
    pre_confhud_gp_init(*args)
  end
 
  def on_move_begun
    @move_started = true
    @move_begun.alert_listeners
  end
 
  def on_move_end
    @move_started = false
    @move_end.alert_listeners
  end
 
  alias :pre_confhud_gp_update :update
  def update
    on_move_end if !moving? && @move_started
    pre_confhud_gp_update
  end
 
  alias :pre_conf_hud_gp_move_d :move_down
  def move_down(*args)
    on_move_begun if passable?(@x, @y + 1)
    pre_conf_hud_gp_move_d(*args)
  end
 
  alias :pre_conf_hud_gp_move_l :move_left
  def move_left(*args)
    on_move_begun if passable?(@x - 1, @y)
    pre_conf_hud_gp_move_l(*args)
  end
 
  alias :pre_conf_hud_gp_move_u :move_up
  def move_up(*args)
    on_move_begun if passable?(@x, @y - 1)
    pre_conf_hud_gp_move_u(*args)
  end
 
  alias :pre_conf_hud_gp_move_r :move_right
  def move_right(*args)
    on_move_begun if passable?(@x + 1, @y)
    pre_conf_hud_gp_move_r(*args)
  end
 
end
class Window_Base < Window
 
  alias :pre_confhud_wb_hp_color :hp_color unless $@
  def hp_color(actor, for_hud=false)
    return HudConfig::PLAYER_FULL_HP_COLOR if for_hud && actor.hp == actor.maxhp
    return pre_confhud_wb_hp_color(actor)
  end
 
  alias :pre_confhud_wb_mp_color :mp_color unless $@
  def mp_color(actor, for_hud=false)
    return HudConfig::PLAYER_FULL_MP_COLOR if for_hud && actor.mp == actor.maxmp
    return pre_confhud_wb_mp_color(actor)
  end
 
end
class MainHud < Sprite_Base
include HudConfig
  WLH = Window_Base::WLH
  attr_accessor :actor
 
  def initialize(location, viewport=nil, actor=nil, visible=true)
    $game_player.move_begun.add_listener(self, lambda { player_begin_move })
    $game_player.move_end.add_listener(self, lambda { player_end_move })
    @hud_visible = visible
    @new_opacity = 255
    super(viewport)
    self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
    self.x, self.y = location.x, location.y   
    self.actor = actor
  end
 
  def player_end_move
    @new_opacity = 255
  end
 
  def player_begin_move
    @new_opacity = TRANSPARENCY_WHEN_MOVING
  end
 
  def update
    if TRANSPARENT_WHEN_MOVING && self.opacity != @new_opacity
      incr = TRANSPARENCY_SWITCH_SPEED
      if @new_opacity < self.opacity
        new_opacity = [self.opacity - incr, @new_opacity].max
      else
        new_opacity = [self.opacity + incr, @new_opacity].min
      end
      self.opacity = new_opacity
    end
    super
  end
 
  def actor=(value)
    # allow nil values to cause a refresh so that the hud
    # is painted at all times, even when there are no party members.
    return if @actor == value unless value.nil?
    remove_listeners(@actor)
    add_listeners(value)
    @actor = value
    create_player_face_image
    refresh
  end
 
  def hud_visible?
    @hud_visible
  end
 
  def hud_visible=(value)
    if @hud_visible != value
      @hud_visible = value
      refresh
    end
  end
 
  def image_rect
    ret = hud_image.rect
    ret.x, ret.y = *PLAYER_HUD_LOC.to_a
    return ret
  end
 
  def create_dummy_window
    win = Window_Base.new(0, 0, 64, 64)
    win.visible = false  
    return win
  end
 
  # Stupid hack to get standard text colors because
  # I did not feel like copy & pasting those methods.
  def hp_color
    return (@window ||= create_dummy_window).hp_color(@actor, true)
  end
 
  def mp_color
    return (@window ||= create_dummy_window).mp_color(@actor, true)
  end
 
  def hud_image
    return Cache.picture(PLAYER_HUD_IMAGE_NAME)
  end
 
  def hud_location
    return PLAYER_HUD_IMAGE_LOCATION 
  end
 
  def hp_gauge_location
    return PLAYER_HP_GAUGE_LOCATION 
  end
 
  def mp_gauge_location
    return PLAYER_MP_GAUGE_LOCATION 
  end
 
  def name_draw_rect
    return Rect.new(
             PLAYER_NAME_LOCATION.x,
             PLAYER_NAME_LOCATION.y,
             PLAYER_NAME_WIDTH,
             PLAYER_NAME_HEIGHT
             )
  end
 
  def level_draw_rect   
    return Rect.new(
             PLAYER_LEVEL_LOCATION.x,
             PLAYER_LEVEL_LOCATION.y,
             PLAYER_LEVEL_WIDTH,
             PLAYER_LEVEL_HEIGHT
             )
  end
 
  def hp_draw_rect
    return Rect.new(
             PLAYER_HP_LOCATION.x,
             PLAYER_HP_LOCATION.y,
             PLAYER_HP_WIDTH,
             PLAYER_HP_HEIGHT
             )
  end
 
  def mp_draw_rect
    return Rect.new(
             PLAYER_MP_LOCATION.x,
             PLAYER_MP_LOCATION.y,
             PLAYER_MP_WIDTH,
             PLAYER_MP_HEIGHT
             )
  end
 
  def name_font
    font = Font.new(PLAYER_NAME_FONT, PLAYER_NAME_FONT_SIZE)
    font.color = PLAYER_NAME_COLOR
    font.italic = PLAYER_NAME_USE_ITALICS
    font.bold = PLAYER_NAME_USE_BOLD
    font.shadow = PLAYER_NAME_USE_SHADOW
    return font
  end
 
  def hp_font
    font = Font.new(PLAYER_HP_FONT, PLAYER_HP_FONT_SIZE)
    font.color = hp_color
    font.italic = PLAYER_HP_FONT_USE_ITALICS
    font.bold = PLAYER_HP_FONT_USE_BOLD
    font.shadow = PLAYER_HP_FONT_USE_SHADOW
    return font
  end
 
  def mp_font
    font = Font.new(PLAYER_MP_FONT, PLAYER_MP_FONT_SIZE)
    font.color = mp_color
    font.italic = PLAYER_MP_FONT_USE_ITALICS
    font.bold = PLAYER_MP_FONT_USE_BOLD
    font.shadow = PLAYER_MP_FONT_USE_SHADOW
    return font
  end
 
  def level_font
    font = Font.new(PLAYER_LEVEL_FONT, PLAYER_LEVEL_FONT_SIZE)
    font.color = PLAYER_LEVEL_COLOR
    font.italic = PLAYER_LEVEL_USE_ITALICS
    font.bold = PLAYER_LEVEL_USE_BOLD
    font.shadow = PLAYER_LEVEL_USE_SHADOW
    return font
  end
 
  def player_face_mask_image
    return Cache.picture(PLAYER_FACE_MASK_NAME)
  end
 
  def create_player_face_image(size=96)
    if @actor.nil?
      @face_image = Bitmap.new(size, size)
      return
    end   
    rect = Rect.new(0, 0, 0, 0)
    rect.x = @actor.face_index % 4 * 96 + (96 - size) / 2
    rect.y = @actor.face_index / 4 * 96 + (96 - size) / 2
    rect.width = size
    rect.height = size
    face = Cache.face(@actor.face_name)
    mask = player_face_mask_image
    @face_image = Bitmap.new(rect.width, rect.height)
    @face_image.blt(0, 0, face, rect)
    for y in 0...rect.height
      for x in 0...rect.width
        mask_color = mask.get_pixel(x, y)
        @face_image.set_pixel(x, y, mask_color) if mask_color.alpha.zero?
      end
    end
  end
 
  def add_listeners(actor)
    return if actor.nil?
    func = lambda { refresh }
    actor.hp_changed.add_listener(self, func)
    actor.maxhp_changed.add_listener(self, func)
    actor.mp_changed.add_listener(self, func)
    actor.maxmp_changed.add_listener(self, func)
  end
 
  def hp_value_changed
   
    refresh
  end
 
  def remove_listeners(actor)
    return if actor.nil?
    actor.hp_changed.remove_listener(self) 
    actor.maxhp_changed.remove_listener(self)
    actor.mp_changed.remove_listener(self)
    actor.maxmp_changed.remove_listener(self)
  end
 
  def draw_hud
    draw_custom_mp_gauge
    draw_custom_hp_gauge
    image = hud_image
    location = hud_location
    self.bitmap.blt(location.x, location.y, image, image.rect)
  end
 
  def draw_custom_hp_gauge
    cur, max = *(@actor.nil? ? [0,1] : [@actor.hp,@actor.maxhp])
    draw_gauge(hp_gauge_location, 'hp', cur, max)
  end
 
  def draw_custom_mp_gauge
    cur, max = *(@actor.nil? ? [0,1] : [@actor.mp,@actor.maxmp])
    draw_gauge(mp_gauge_location, 'mp', cur, max)
  end
 
  def draw_gauge(location, stat_name, current, max)
    percent_health = (current / max.to_f) * 100
    multiple = 5   
    percent_health = check_health_bounds(percent_health, multiple)
    percent_health = round_to_multiple_of(multiple, percent_health.round)
    file_name = HEALTH_GAUGE_FORMAT % [stat_name, percent_health]   
    image = Cache.picture(file_name)   
    self.bitmap.blt(location.x, location.y, image, image.rect)
  end 
     
  def round_to_multiple_of(multiple_of, num)
    # why in the fuck did I do this this way?
    # leave comments for yourself in the future dumbass.
    leftover = num % multiple_of
    return num if leftover.zero?
    if leftover > multiple_of / 2
      sym = :+
    else
      sym = :-
    end
    ret = num
    loop do
      ret = ret.send sym, 1
      break if ret % multiple_of == 0
    end
    return ret
  end
 
  def check_health_bounds(num, multiple)
    # dont allow the gauge to read 100 or 0 unless
    # the current health actually is 100 or 0.
    next_lower = 100 - multiple
    if num > next_lower && num < 100
      return next_lower
    elsif num < multiple && num > 0
      return multiple
    else
      return num
    end
  end
 
  def draw_face
    self.bitmap.blt(FACE_LOCATION.x, FACE_LOCATION.y, @face_image, @face_image.rect)
  end
 
  def draw_name
    return if @actor.nil?
    name = @actor.name
    rect = name_draw_rect   
    font = name_font
    temp_font = self.bitmap.font
    self.bitmap.font = font
    self.bitmap.draw_text(rect, name)
    self.bitmap.font = temp_font
  end
 
  def draw_level
    return if @actor.nil?
    level = @actor.level
    rect = level_draw_rect   
    font = level_font
    temp_font = self.bitmap.font
    self.bitmap.font = font
    self.bitmap.draw_text(rect, level, 1)
    self.bitmap.font = temp_font
  end
 
  def use_custom_gauges?
    return PLAYER_USE_CUSTOM_GAUGE 
  end
 
  def health_text(prefix, cur, max)
    return "#{prefix}: #{cur}/#{max}"
  end
 
  def draw_health(rect, font, prefix, cur, max)
    self.bitmap.font = font
    xr = rect.x + rect.width
    health_width = (rect.width * 0.33).round
    spacer_width = (health_width / 2.1).round
    temp_font = self.bitmap.font
    prefixf = prefix + ':'
    # fuck this pile of shit, move along, this will just hurt your head
    self.bitmap.draw_text(rect.x, rect.y, self.bitmap.text_size(prefixf).width, rect.height, prefixf)
    self.bitmap.draw_text(xr - spacer_width - health_width * 2 + (health_width * 0.15).round, rect.y, health_width, rect.height, cur, 2)
    self.bitmap.draw_text(xr - spacer_width - health_width, rect.y, spacer_width, rect.height, "/", 2)
    self.bitmap.draw_text(xr - health_width, rect.y, health_width, rect.height, max, 2)
    self.bitmap.font = temp_font
  end
 
  def draw_hp
    return if @actor.nil?
    draw_health(hp_draw_rect, hp_font, Vocab.hp_a, @actor.hp, @actor.maxhp)   
  end 
 
  def draw_mp
    return if @actor.nil?
    draw_health(mp_draw_rect, mp_font, Vocab.mp_a, @actor.mp, @actor.maxmp)
  end 
 
  def refresh  
    self.bitmap.clear 
    return unless hud_visible?
    draw_face if SHOW_PLAYER_FACE_IMAGE
    draw_hud   
    draw_name if SHOW_PLAYER_NAME
    draw_level if SHOW_PLAYER_LEVEL
    draw_hp if USE_HP_TEXT_DISPLAY
    draw_mp if USE_MP_TEXT_DISPLAY      
  end
 
  def dispose
    remove_listeners(@actor)
    $game_player.move_begun.remove_listener(self)
    $game_player.move_end.remove_listener(self)
    unless @window.nil?
      @window.dispose
      @window = nil
    end
    super   
  end
 
end
class SubHud < MainHud
 
 
 
end
class Game_Map
 
  alias :pre_confhud_gm_setup :setup
  def setup(*args)
    id = *args
    @info = load_data('Data/MapInfos.rvdata')[id]   
    pre_confhud_gm_setup(*args)
  end
 
  def display_hud?
    return !@info.name.include?(HudConfig::NO_SHOW_TEXT)
  end
 
end
class Scene_Map < Scene_Base
include HudConfig
 
  attr_reader :player_hud
 
  # used to keep track of the hud location between
  # setups and teardowns, i.e., if you enter the menu or battle.
  @@last_hud_ox = 0
 
  alias :pre_confhud_sm_start :start unless $@
  def start
    pre_confhud_sm_start
    initialize_hud
    $game_party.party_leader_changed.add_listener(self, lambda { @player_hud.actor = $game_party.members.first })
  end
 
  def initialize_hud
    @hud_viewport = Viewport.new(0, 0, 544, 416)
    @hud_viewport.z = PLAYER_HUD_Z
    @hud_viewport.ox = @@last_hud_ox   
    @@target_hud_location ||= @hud_viewport.ox   
    actor = $game_party.members.first
    @player_hud = MainHud.new(
      PLAYER_HUD_LOC,
      @hud_viewport,
      actor,
      hud_enabled?(actor)
      )
  end
 
  alias :pre_confhud_sm_update :update unless $@
  def update
    pre_confhud_sm_update
    update_hud
    update_hud_input
    update_hud_transition
  end
 
  alias :pre_confhud_sm_update_basic :update_basic unless $@
  def update_basic(*args)
    pre_confhud_sm_update_basic
    update_hud
  end
 
  def show_hud
    trigger_scroll
  end
 
  def hide_hud
    trigger_scroll(true)
  end
 
  def trigger_scroll(force_hide=false)
    @@hud_moving = true
    if @hud_viewport.ox.zero?
      hud_rect = @player_hud.image_rect     
      left = HUD_SCROLL_DIRECTION  == ScrollDirection::Left       
      offset = left ? hud_rect.width + hud_rect.x : -(Graphics.width - hud_rect.x)
      @@target_hud_location = @hud_viewport.ox + offset
    elsif !force_hide
      @@target_hud_location = 0
    end                     
  end
 
  def update_hud
    @player_hud.hud_visible = hud_enabled?
    @player_hud.update
    @hud_viewport.update
  end
 
  def hud_enabled?(actor=nil)
    return false if !SHOW_IF_NO_LEADER && (actor ||= @player_hud.actor).nil?
    return false unless $game_map.display_hud?
    return false unless NO_SHOW_SWITCH.nil? || !$game_switches[NO_SHOW_SWITCH]   
    return true
  end
 
  def update_hud_input
    trigger_scroll if ALLOW_HUD_HIDE && Input.trigger?(HIDE_HUD_INPUT)               
  end
 
  def update_hud_transition
    @@hud_moving = @hud_viewport.ox != @@target_hud_location
    return unless @@hud_moving   
    incr = @hud_viewport.ox < @@target_hud_location ? HUD_HIDE_SPEED : -HUD_HIDE_SPEED   
    @hud_viewport.ox += [incr, (@hud_viewport.ox - @@target_hud_location).abs].min
  end
 
  alias :pre_confhud_sm_terminate :terminate unless $@
  def terminate
    pre_confhud_sm_terminate
    $game_party.party_leader_changed.remove_listener(self)
    @player_hud.dispose
    @@last_hud_ox = @hud_viewport.ox
  end
 
end
 
대답부탁드립니다.
Comment '1'
  • ?
    허걱 2012.11.04 10:18
    글을 읽기 힘들어서 답변하기가 힘듭니다.
    글씨 크기등은 기본 글씨체로 해주시고 스크립트 전문은 따로 첨부파일 등으로 제공하시기 바랍니다.

    http://avangs.info/kin/290902
    질문 게시판 이용방법, 게시글 양식 등이 지켜지지 않을 경우 경고없이 삭제될 수 있습니다.

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 13235
RMVXA 대화창에 나오는 얼굴사진 크기조절 문제 4 file xzrjs 2012.11.08 1359
RMVX 멀티 메시지 스크립트에서 message_input_stop_mode로 분기 생성시 오류 2 file 톨톨 2012.11.08 1224
기타 일어 질문입니다. 3 하늘바라KSND 2012.11.07 789
RMVX 엔피시나 물체가 주인공에게 닿으면 주인공이 타격을 입게 만들고 싶어요. 5 레모네이드립톤 2012.11.04 722
기타 이상과 현실의 타협점은? 4 kian 2012.11.04 1354
RMVX 몬스터 스킬 질문입니다. 김늅늅 2012.11.04 771
RMVX $scene = Scene_ATB.new 이게 안됩니다 2 file 욕쟁이스님 2012.11.04 933
RMVX VX에서 물체에 이벤트를 적용하고 버튼으로 실행시키는 법에 대한 질문입니다. 2 레모네이드립톤 2012.11.03 738
RMVXA 여기있는 VX용 전체키스크립트 VX ACE로 변환해주시거나 있으신분?? 2 카로 2012.11.03 1094
RMVXA VX ACE 네트워크플레이(멀티플레이)하는법 좀 가릊쳐주세요 ㅠ 4 카로 2012.11.03 1132
RMVXA 액알에 대해 질문 1 file tony 2012.11.03 982
RMVX 대화 인공지능이 구현가능할까요..?? 2 아바세 2012.11.03 3869
RMXP 이 스크립트 실행 될까요? 1 file 생초짜 2012.11.03 837
기타 VX에서는 3등신 케릭터를 구현할 수 없나요? 2 레모네이드립톤 2012.11.03 1204
RMVX 호감도 시스템을 구현할 수 있나요? 4 얍얍 2012.11.02 1985
RMVXA 맵이름 표시가 안 됩니다. 2 님믹 2012.11.02 886
RMVXA 플레이시간이 100시간이 될 수도 있나요? 2 님믹 2012.11.02 1022
RMVX VX에서 대기를 누르면 타이머가 초기화요 ㅜ 비켜비켜 2012.11.01 1014
RMXP 겹쳤을때 이벤트 발생하기 / 이벤트변수 참조법 질문입니다. 1 한우형 2012.11.01 1106
RMVXA 특정 시간, 복수변수, 스위치 조건에 발동하는 이벤트. 4 레스트 2012.11.01 1298
Board Pagination Prev 1 ... 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 ... 517 Next
/ 517