Skrypt to hack "Menu Final Fantasy IX". Tworzy menu na wzór tego z Final Fantasy VIII [PSX], aby działał poprawnie należy wkleić go nad main w edytorze skryptów. Niestety brakuje w nie okna "Help" nad statusem postaci, gdyż po prosu nie potrafiłem go dodać
Skrypt
Spoiler:
Kod:
# ============================================================================ #
# Menu Final Fantasy VIII [VX]
# Edycja skryptu By CrasheR
# Menu Final Fantasy IX [VX]
# Oryginal by BigEd781 ~ PainHurt
# Skrypt tworzy Menu na wzór menu z gry Final Fantasy VIII [PSX].
# ============================================================================ #
# Do poprawnego działania niektórych funkcji skryptu wymagane jest użycie
# skryptu poszerzającego klasę 'Window'.
# ============================================================================ #
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
WLH = 24 # Window Line Height
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super()
self.windowskin = Cache.system("Window")
self.x = x
self.y = y
self.width = width
self.height = height
self.z = 100
self.back_opacity = 20000
self.openness = 255
create_contents
@opening = false
@closing = false
end
#--------------------------------------------------------------------------
def draw_actor_level(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 32, WLH, Vocab::level_a)
self.contents.font.color = normal_color
self.contents.draw_text(x + 32, y, 24, WLH, actor.level, 2)
end
#--------------------------------------------------------------------------
def draw_actor_hp(actor, x, y, width = 120)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 30, WLH, Vocab::hp_a)
self.contents.font.color = hp_color(actor)
xr = x + width
if width < 120
self.contents.draw_text(xr - 40, y, 40, WLH, actor.hp, 2)
else
self.contents.draw_text(xr - 90, y, 40, WLH, actor.hp, 2)
self.contents.font.color = normal_color
self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxhp, 2)
end
end
#--------------------------------------------------------------------------
def draw_actor_mp(actor, x, y, width = 120)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 30, WLH, Vocab::mp_a)
self.contents.font.color = mp_color(actor)
xr = x + width
if width < 120
self.contents.draw_text(xr - 40, y, 40, WLH, actor.mp, 2)
else
self.contents.draw_text(xr - 90, y, 40, WLH, actor.mp, 2)
self.contents.font.color = normal_color
self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxmp, 2)
end
end
end
module FF8_Config
# Użycie własnego tła w menu (true / false)
USE_CUSTOM_BACK = true
# Nazwa obrazka, które ma być tłem (gdy wybrano powyżej true).
# Obrazek należy umieścić w folderze Graphics/Pictures.
BACK_NAME = 'back'
# Jeśli wybrano 'true' w projekcie należy dodatkowo umieścić skrypt
# poszerzający klasę 'Window'. Znaleźć go można na stronie:
# http://www.rpgmakervx.net/index.php?showtopic=8042&hl=
# lub na
# http://www.ultimateam.pl/viewtopic.php?t=3274&p=26367#26367
USE_TILED_WINDOW = false
# Animowany kursor - do przodu i do tyłu (true / false)
ANIMATE_CURSOR = false
# Nazwa czcionki (domyślna)
# Jeśli chcesz ją zmienić zamiasta 'Font.default_name' wpisz nazwę czcionki,
# np. 'Centaur'
DEFAULT_FONT = Font.default_name
# Ustala czcionkę i przezroczystość dla wszystkich okien. Zalecane 'true'.
USE_FOR_ALL = true
# ID ikonki złota w zestawie ikon.
GOLD_ICON_ID = 194
end
if FF8_Config::USE_FOR_ALL
Font.default_name = FF8_Config::DEFAULT_FONT
class Window_Base < Window
alias :eds_pre_ff8_menu_base_initialize :initialize
def initialize(*args)
eds_pre_ff8_menu_base_initialize(*args)
self.stretch = false if FF8_Config::USE_TILED_WINDOW
self.back_opacity = 255
end
end
end
def draw_caption
unless @caption.nil?
h = @caption_sprite.bitmap.height
w = @caption_sprite.bitmap.width
rect = Rect.new( 0, h / 2, w, h / 4 )
@caption_sprite.bitmap.fill_rect(rect, Color.new(0, 0, 0, 96))
@caption_sprite.bitmap.draw_text(@caption_sprite.src_rect, @caption)
end
end
alias :eds_pre_caption_window_dispose :dispose
def dispose
eds_pre_caption_window_dispose
@caption_sprite.dispose
end
def find_window_width(text)
return Bitmap.new(544, 416).text_size(text).width + 32
end
end
class Window_TimeGold < Window_Base
def initialize(x, y)
width = find_window_width("9999999")
width = 140 if width < 140
super(x, y, width, WLH + 58)
self.back_opacity = 255
self.stretch = false if FF8_Config::USE_TILED_WINDOW
self.contents.font.name = FF8_Config::DEFAULT_FONT
@time_icon = Cache.picture('Timer')
@intern_frame_count = 0
refresh
end
def draw_time
sec = (Graphics.frame_count / 60) % 60
min = (Graphics.frame_count / 3600) % 60
hrs = Graphics.frame_count / 216000
self.contents.font.color = Color.new(255, 255, 255)
time = "%02d:%02d:%02d" % [hrs, min, sec]
self.contents.draw_text(0, 0, self.contents.width, WLH, time, 2)
end
def draw_currency_value(value, x, y, width)
gold_text = Vocab.gold
cx = contents.text_size(gold_text[0,1]).width
self.contents.font.color = normal_color
self.contents.draw_text(x, y, width - cx - 2, WLH, value, 2)
self.contents.font.color = normal_color
# just print the first character of Vocab::gold
self.contents.draw_text(x, y, width, WLH, gold_text[0,1], 2)
end
def update
super
@intern_frame_count += 1
return if (@intern_frame_count % 60) != 0
refresh
end
def find_window_width(text)
return Bitmap.new(544, 416).text_size(text).width + 80
end
end
class Window_MenuLocation < Window_Base
def initialize(x, y)
@map_name = load_data("Data/MapInfos.rvdata")[$game_map.map_id].name
width = find_window_width(@map_name)
super(x, y, 360, WLH + 32)
self.stretch = false if FF8_Config::USE_TILED_WINDOW
self.contents.font.name = FF8_Config::DEFAULT_FONT
self.back_opacity = 255
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(0, 0, self.contents.width, WLH, @map_name, 1)
end
def find_window_width(text)
return Bitmap.new(544, 416).text_size(text).width + 48
end
end
class Window_Command < Window_Selectable
alias :eds_pre_ff8_menu_win_command_init :initialize
def initialize(*args)
@font_name = Font.default_name
eds_pre_ff8_menu_win_command_init(*args)
end
#--------------------------------------------------------------------------
# * OVERWRITTEN
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.name = @font_name
for i in 0...@item_max
draw_item(i)
end
end
def font_name=(name)
@font_name = name
end
end
class Window_Uses < Window_Base
def initialize(right, y, item)
@remaining_text = "Remaining: #{$game_party.item_number(item)}"
w = 160
x = right ? (544 - w) : 0
super(x, y, w, WLH + 32)
self.stretch = false if FF8_Config::USE_TILED_WINDOW
self.contents.font.name = FF8_Config::DEFAULT_FONT
refresh
end
end
#--------------------------------------------------------------------------
# * OVERWRITTEN
#--------------------------------------------------------------------------
def create_command_window
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::save
s6 = Vocab::game_end
@command_window = Window_Command.new(155, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
@command_window.stretch = false if FF8_Config::USE_TILED_WINDOW
if $game_party.members.size == 0 # If number of party members is 0
@command_window.draw_item(0, false) # Disable item
@command_window.draw_item(1, false) # Disable skill
@command_window.draw_item(2, false) # Disable equipment
@command_window.draw_item(3, false) # Disable status
end
if $game_system.save_disabled # If save is forbidden
@command_window.draw_item(4, false) # Disable save
end
# new stuff here
@command_window.font_name = FF8_Config::DEFAULT_FONT
@command_window.x = 540 - @command_window.width
@command_window.y = 16
@command_window.back_opacity = 255
end
#--------------------------------------------------------------------------
# * This method is intended to fix some compatibility problems
# that scripts run into when they change the command window
# in some way. So, we let them override "create_command_window"
# and we simply don't call it from the "start" method.
# Instead, we call this method which does some extra checking.
#--------------------------------------------------------------------------
def eds_create_command_window
create_command_window
old_commands = @command_window.commands
return if old_commands == [ Vocab::item,
Vocab::skill,
Vocab::equip,
Vocab::status,
Vocab::save,
Vocab::game_end ]
# so we know that the default command window is not being used
# we don't want to create another window, so we manually resize it
# before the player can see.
long = ''
# dynamically size the width based on the longest command
old_commands.each { |command| long = command if command.length > long.length }
# set the index to -1 so that the rectangle disappears.
# if we don't do this, you can see the selection rectangle resize.
@command_window.index = -1
@command_window.width = @command_window.contents.text_size(long).width + 42
@command_window.contents = Bitmap.new( @command_window.width - 32,
@command_window.height - 32 )
@command_window.font_name = FF8_Config::DEFAULT_FONT
@command_window.x = 528 - @command_window.width
@command_window.y = 16
@command_window.back_opacity = 255
@command_window.refresh
@command_window.index = @menu_index
end
#--------------------------------------------------------------------------
# * OVERWRITTEN
#--------------------------------------------------------------------------
def start
super
create_menu_background
#call this method for compatibility
eds_create_command_window
@gold_window = Window_TimeGold.new(372, 410)
@gold_window.y -= @gold_window.height
@gold_window.x = 540 - @gold_window.width
@status_window = Window_MenuStatus.new(0, 12)
@location_window = Window_MenuLocation.new(0, 0)
@location_window.x = 375 - @location_window.width
@location_window.y = 410 - @location_window.height
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
alias :eds_pre_ff8_menu_scene_menu_terminate :terminate
def terminate
eds_pre_ff8_menu_scene_menu_terminate
@location_window.dispose
end
Sled, tez tak sądzę, ale dzięki temu mamy na forum skrypty "menu FF 6, 7, 8, 9 i 13" trzy pierwsze oraz menu chrono cross dodane przeze mnie. Nadal myślę czy nie dodać jeszcze jakiegoś menu z gier Enix'a :P
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum