martial69320 Novice
Messages : 18 Date d'inscription : 23/01/2011 Age : 29 Localisation : Feyzin
| Sujet: Avoir une barre PV PM a la Kingdom Hearts Lun 24 Jan - 12:16 | |
| Voila. Apres une demande sur le post de Mouse Over, Je me decide a mettre un script avec les ressources afin d'avoir une barre PV PM a la kingdom hearts. Encore une fois ce script n'est pas de moi mais peut etre tres utile. Je n'envois pas d'image car si vous allez un peu plus hautdans les propositions de scripts, vous verrez a quoi ressembe la barre. - Code:
-
#-------------------------------------------------------------------- # 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 Les gros mot sont interdits ! 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 + ':' # Les gros mot sont interdits ! 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
et voici les fichiersa mettre dans PICTURES : - Fichiers joints
- Barre HUD KH.zip
- Vous n'avez pas la permission de télécharger les fichiers joints.
- (595 Ko) Téléchargé 10 fois
| |
|