Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # * Script Name : DSI Skill Menu
- # * Author : Nhat Nguyen (dsiver144)
- # * Last Updated : 10/08/2023
- # ------------------------------------------------------------------------
- # Script call: SceneManager.call(Scene_CustomSkill)
- # Image Folder: Graphics/SkillMenu/
- #
- # Actor Notetag: <skill_pic: pictureName>
- # ex: <skill_pic: SMenu_Actor1>
- #
- #==============================================================================
- module DSIVER144
- module SKILL_MENU
- CATEGORIES = {}
- CATEGORIES[0] = ["Skill_Category_1", "Skill_CategorySelected_1"]
- CATEGORIES[1] = ["Skill_Category_2", "Skill_CategorySelected_2"]
- CATEGORIES[2] = ["Skill_Category_3", "Skill_CategorySelected_3"]
- HIGHLIGHT_IMG = "Skill_Category_Highlight"
- BLUE_COLOR = Color.new(0, 255, 251)
- BACKGROUNG_IMG = "Background"
- HELP_WINDOW_IMG = "Help Window"
- SKILL_WINDOW_IMG = "Skill Window"
- TOP_BAR_IMG = "Top Bar"
- CATEGORY_HELP_TEXT = "Choose a category"
- OVERWRITE_MENU_SCENE_ABILITY_COMMAND = true
- ACTOR_WINDOW_OPACITY = 255
- ACTOR_WINDOW_BACKOPACITY = 255
- end
- end
- module Cache
- def self.loadSkillMenu(filename)
- load_bitmap("Graphics/SkillMenu/", filename)
- end
- end
- class Sprite_SkillCategory < Sprite
- attr_accessor :filenames
- attr_accessor :index
- attr_accessor :selector_sprite
- def refresh(index)
- self.bitmap = Cache.loadSkillMenu(self.filenames[self.index == index ? 1 : 0])
- if self.index == index
- @selector_sprite.x = 15 + index * 90
- end
- end
- end
- class Window_CustomSkillStatus < Window_Base
- include DSIVER144::SKILL_MENU
- def actor=(actor)
- @actor = actor
- refresh
- end
- def refresh
- return if !@actor
- contents.clear
- draw_actor_face(@actor, 0, 0)
- cw = contents_width
- ch = contents_height
- lh = line_height
- dx = 96 + 10
- dy = 12
- contents.font.size = 21
- contents.font.name = "Timeless-Normal"
- draw_text(dx, dy, cw - dx, lh, @actor.name)
- dy += lh
- contents.font.size = 17
- change_color(BLUE_COLOR)
- draw_text(dx, dy, cw - dx, lh, "Level")
- change_color(normal_color)
- s1 = @actor.max_level? ? "---" : @actor.exp
- s2 = @actor.max_level? ? "---" : @actor.next_level_exp - @actor.exp
- draw_text(dx + 50, dy, cw - dx, lh, "#{@actor.level} / #{@actor.max_level}")
- dy += lh
- contents.font.size = 17
- change_color(BLUE_COLOR)
- draw_text(dx, dy, cw - dx, lh, "VIT")
- change_color(normal_color)
- draw_text(dx, dy, cw - dx - 4, lh, "#{@actor.hp} / #{@actor.mhp}", 2)
- dy += 16
- contents.font.size = 17
- change_color(BLUE_COLOR)
- draw_text(dx, dy, cw - dx, lh, "EGO")
- change_color(normal_color)
- draw_text(dx, dy, cw - dx - 4, lh, "#{@actor.mp} / #{@actor.mmp}", 2)
- end
- end
- class Window_CustomSkillActorWindow < Window_MenuActor
- def window_width
- 354
- end
- def draw_actor_simple_status(actor, x, y)
- draw_actor_name(actor, x, y)
- draw_actor_level(actor, x, y + line_height * 1)
- draw_actor_icons(actor, x, y + line_height * 2)
- draw_actor_class(actor, x + 120, y)
- draw_actor_hp(actor, x + 90, y + line_height * 1)
- draw_actor_mp(actor, x + 90, y + line_height * 2)
- end
- end
- class Window_CustomHelp < Window_Help
- include DSIVER144::SKILL_MENU
- def set_item(item)
- change_color(normal_color)
- contents.font.name = "Timeless-Normal"
- set_text(item ? "\\i[#{item.icon_index}] #{item.name}\n"+ item.description : "")
- end
- end
- class Scene_CustomSkill < Scene_ItemBase
- include DSIVER144::SKILL_MENU
- def start
- super
- create_help_window
- create_skill_category
- create_category_sprites
- create_item_window
- create_status_window
- refresh_actor_sprite
- end
- def create_help_window
- @help_window = Window_CustomHelp.new(3)
- @help_window.viewport = @viewport
- @help_window.y = Graphics.height - @help_window.height
- @help_window.opacity = 0
- @help_window.back_opacity = 0
- @help_window.set_text(CATEGORY_HELP_TEXT)
- end
- def create_actor_window
- @actor_window = Window_CustomSkillActorWindow.new
- @actor_window.set_handler(:ok, method(:on_actor_ok))
- @actor_window.set_handler(:cancel, method(:on_actor_cancel))
- @actor_window.opacity = ACTOR_WINDOW_OPACITY
- @actor_window.back_opacity = ACTOR_WINDOW_BACKOPACITY
- end
- def create_background
- @background_sprite = Sprite.new
- @background_sprite.bitmap = Cache.loadSkillMenu(BACKGROUNG_IMG)
- @topbar_sprite = Sprite.new
- @topbar_sprite.bitmap = Cache.loadSkillMenu(TOP_BAR_IMG)
- @actor_sprite = Sprite.new
- @help_sprite = Sprite.new
- @help_sprite.bitmap = Cache.loadSkillMenu(HELP_WINDOW_IMG)
- end
- def refresh_actor_sprite
- return unless @actor
- data_actor = $data_actors[@actor.id]
- if data_actor.note =~ /<skill_pic:\s*(.+?)>/i
- @actor_sprite.bitmap = Cache.loadSkillMenu($1)
- else
- @actor_sprite.bitmap = nil
- end
- end
- def create_skill_category
- @command_window = Window_HorizontalSkillCommand.new(0, 0)
- @command_window.actor = $game_party.leader
- @command_window.opacity = 0
- @command_window.back_opacity = 0
- @command_window.visible = false
- @command_window.set_handler(:skill, method(:command_skill))
- @command_window.set_handler(:cancel, method(:return_scene))
- @command_window.set_handler(:pagedown, method(:next_actor))
- @command_window.set_handler(:pageup, method(:prev_actor))
- end
- def create_category_sprites
- sprites = []
- @sprite_category_selector = Sprite.new
- @sprite_category_selector.bitmap = Cache.loadSkillMenu(HIGHLIGHT_IMG)
- @sprite_category_selector.y = 148
- CATEGORIES.each_pair do |id, data|
- sprite = Sprite_SkillCategory.new
- sprite.selector_sprite = @sprite_category_selector
- sprite.filenames = data
- sprite.bitmap = Cache.loadSkillMenu(sprite.filenames[0])
- sprite.index = id
- sprite.x = 20 + id * 90
- sprite.y = 155
- sprites << sprite
- end
- @command_window.category_sprites = sprites
- @command_window.call_update_help
- end
- def terminate
- super
- dispose_custom_sprites
- end
- def dispose_custom_sprites
- @command_window.category_sprites.each {|sprite| sprite.dispose}
- @sprite_category_selector.dispose
- @sprite_window_bg.dispose
- @topbar_sprite.dispose
- @actor_sprite.dispose
- @help_sprite.dispose
- end
- def create_item_window
- wx = 10
- wy = 167
- ww = 272
- wh = 215
- @sprite_window_bg = Sprite.new()
- @sprite_window_bg.bitmap = Cache.loadSkillMenu(SKILL_WINDOW_IMG)
- @sprite_window_bg.x = 0
- @sprite_window_bg.y = 0
- @item_window = Window_SkillList.new(wx, wy, ww, wh)
- @item_window.actor = @actor
- @item_window.viewport = @viewport
- @item_window.help_window = @help_window
- @item_window.set_handler(:ok, method(:on_item_ok))
- @item_window.set_handler(:cancel, method(:on_item_cancel))
- @command_window.skill_window = @item_window
- @item_window.help_window = @help_window
- @item_window.opacity = 0
- @item_window.back_opacity = 0
- end
- def create_status_window
- @status_window = Window_CustomSkillStatus.new(0, 0, 300, 120)
- @status_window.opacity = 0
- @status_window.back_opacity = 0
- @status_window.actor = @actor
- @status_window.x = -2
- @status_window.y = 30
- end
- def user
- @actor
- end
- def command_skill
- @item_window.activate
- @item_window.select_last
- Sound.play_recovery
- end
- def on_item_ok
- @actor.last_skill.object = item
- determine_item
- end
- def on_item_cancel
- @item_window.unselect
- @command_window.activate
- @help_window.set_text(CATEGORY_HELP_TEXT)
- end
- def play_se_for_item
- Sound.play_use_skill
- end
- def use_item
- super
- @status_window.refresh
- @item_window.refresh
- end
- def on_actor_change
- @command_window.actor = @actor
- @status_window.actor = @actor
- @item_window.actor = @actor
- @command_window.activate
- refresh_actor_sprite
- Sound.play_use_item
- end
- end
- class Window_HorizontalSkillCommand < Window_HorzCommand
- attr_accessor :category_sprites
- def call_update_help
- super
- @category_sprites && category_sprites.each {|sprite| sprite.refresh(self.index)}
- end
- attr_reader :skill_window
- def initialize(x, y)
- super(x, y)
- @actor = nil
- end
- def window_width
- return 160
- end
- def actor=(actor)
- return if @actor == actor
- @actor = actor
- refresh
- select_last
- end
- def col_max
- return DSIVER144::SKILL_MENU::CATEGORIES.keys.size
- end
- def make_command_list
- return unless @actor
- @actor.added_skill_types.sort.each do |stype_id|
- name = $data_system.skill_types[stype_id]
- add_command(name, :skill, true, stype_id)
- end
- end
- def update
- super
- @skill_window.stype_id = current_ext if @skill_window
- end
- def skill_window=(skill_window)
- @skill_window = skill_window
- update
- end
- def select_last
- skill = @actor.last_skill.object
- if skill
- select_ext(skill.stype_id)
- else
- select(0)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement