Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

L's Custom Menu Scenes

L's Custom Menu Scenes

Version: Initial
By: Landarma

Introduction

A small collection of my custom menu scene scripts. Including my old Simple CMS and new skill and status scenes.

Features
  • SDK compatible
  • For the rest, see the screenshots.

Screenshots
rmxpskillscenetest01nz4.png

Using with DerVVulfman's Grouping and Details
rmxpstatusscenetest01.png

I know it's not pretty, but I don't have any other idea..


Demo

Demo Download - 4Shared

Script

About menu scripts, see my old CMS thread at Script Archive.

Code:
 

# L's Custom Skill Scene

#--------------------------------------------------------------------------

# * Begin SDK Log

#--------------------------------------------------------------------------

SDK.log("L's Skill Scene", 'L', 'Initial', '2009-02-26')

 

#--------------------------------------------------------------------------

# * Begin SDK Requirement Check

#--------------------------------------------------------------------------

SDK.check_requirements(2.0, [1, 3])

 

#--------------------------------------------------------------------------

# * Begin SDK Enable Test

#--------------------------------------------------------------------------

if SDK.enabled?("L's Skill Scene")

 

#==============================================================================

# * Window_Skill_Header (Currently Dummy)

#==============================================================================

class Window_Skill_Header < Window_Base

  #--------------------------------------------------------------------------

  # * Object Initialization 

  #--------------------------------------------------------------------------

  def initialize

    super(0, 0, 640, 64)

    #Create Bitmap

    self.contents = Bitmap.new(width - 32, height - 32)

    #Refresh and add the contents to window

    refresh

  end

  #--------------------------------------------------------------------------

  # * Refresh 

  #--------------------------------------------------------------------------

  def refresh

    #Clear Bitmap

    self.contents.clear

  end

end

 

 

#==============================================================================

# * Window_SkillStatus

#==============================================================================

class Window_SkillStatus < Window_Base

  #--------------------------------------------------------------------------

  # * Object Initialization 

  #--------------------------------------------------------------------------

  def initialize(actor)

    super(0, 64, 240, 352)

    #Create Bitmap

    self.contents = Bitmap.new(width - 32, height - 32)

    #Refresh and add the contents to window

    @actor = actor

    refresh

  end

  #--------------------------------------------------------------------------

  # * Refresh 

  #--------------------------------------------------------------------------

  def refresh

    #Clear Bitmap

    self.contents.clear

    #Draw actor's status

    draw_actor_name(@actor, 16, 0)

    draw_actor_level(@actor, 128, 0)

    draw_actor_graphic(@actor, 96, 128)

    draw_actor_class(@actor, 16, 160)

    draw_actor_state(@actor, 16, 192)

    draw_actor_hp(@actor, 16, 224)

    draw_actor_sp(@actor, 16, 256)

  end  

end

 

 

#==============================================================================

# * Window_Skill

#==============================================================================

class Window_Skill < Window_Selectable

  #--------------------------------------------------------------------------

  # * Object Initialization 

  #--------------------------------------------------------------------------

  def initialize(actor)

    if $game_temp.in_battle

      super(0, 128, 640, 352)

    else

      super(240, 64, 400, 352)

    end

    #Create Bitmap

    self.contents = Bitmap.new(width - 32, height - 32)

    @actor = actor

    if $game_temp.in_battle

     @column_max = 2

    else

     @column_max = 1

    end

    #Refresh and add the contents to window

    refresh

    self.index = 0

    # If in battle, move window to center of screen

    # and make it semi-transparent

    if $game_temp.in_battle

      self.y = 64

      self.height = 256

      self.back_opacity = 160

    end

  end

  #--------------------------------------------------------------------------

  # * Acquiring Skill

  #--------------------------------------------------------------------------

  def skill

    return @data[self.index]

  end

  #--------------------------------------------------------------------------

  # * Refresh

  #--------------------------------------------------------------------------

  def refresh

    if self.contents != nil

      self.contents.dispose

      self.contents = nil

    end

    @data = []

    for i in 0...@actor.skills.size

      skill = $data_skills[@actor.skills[i]]

      if skill != nil

        @data.push(skill)

      end

    end

    # If item count is not 0, make a bit map and draw all items

    @item_max = @data.size

    if @item_max > 0

      self.contents = Bitmap.new(width - 32, row_max * 32)

      for i in 0...@item_max

        draw_item(i)

      end

    end

  end

  #--------------------------------------------------------------------------

  # * Draw Item

  #     index : item number

  #--------------------------------------------------------------------------

  def draw_item(index)

    skill = @data[index]

    if @actor.skill_can_use?(skill.id)

      self.contents.font.color = normal_color

    else

      self.contents.font.color = disabled_color

    end

    x = 4 + index % 2 * (288 + 32)

    y = index / 2 * 32

    rect = Rect.new(x, y, self.width / @column_max - 32, 32)

    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))

    bitmap = RPG::Cache.icon(skill.icon_name)

    opacity = self.contents.font.color == normal_color ? 255 : 128

    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)

    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)

    if $game_temp.in_battle

      self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)

    else

      self.contents.draw_text(x + 310, y, 48, 32, skill.sp_cost.to_s, 2)

    end

  end

  #--------------------------------------------------------------------------

  # * Help Text Update

  #--------------------------------------------------------------------------

  def update_help

    @help_window.set_text(self.skill == nil ? "" : self.skill.description)

  end

end

 

 

#==============================================================================

# ** Scene_Skill

#------------------------------------------------------------------------------

#  This class performs skill screen processing.

#==============================================================================

 

class Scene_Skill < SDK::Scene_Base

  #--------------------------------------------------------------------------

  # * Object Initialization

  #     actor_index : actor index

  #--------------------------------------------------------------------------

  def initialize(actor_index = 0, equip_index = 0)

    @actor_index = actor_index

    super()

  end

  #--------------------------------------------------------------------------

  # * Main Processing : Variable Initialization

  #--------------------------------------------------------------------------

  def main_variable

    super

    # Get actor

    @actor = $game_party.actors[@actor_index]

  end

  #--------------------------------------------------------------------------

  # * Main Processing : Window Initialization

  #--------------------------------------------------------------------------

  def main_window

    super

    # Make help window, status window, and skill window

    @header_window = Window_Skill_Header.new

    @help_window = Window_Help.new

    @help_window.y = 416

    @status_window = Window_SkillStatus.new(@actor)

    @status_window.y = 64

    @skill_window = Window_Skill.new(@actor)

    @skill_window.y = 64

    @skill_window.height = 352

    # Associate help window

    @skill_window.help_window = @help_window

    # Make target window (set to invisible / inactive)

    @target_window = Window_Target.new

    @target_window.visible = false

    @target_window.active = false

  end

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    super

    # If skill window is active: call update_skill

    if @skill_window.active

      update_skill

      return

    # If skill target is active: call update_target

    elsif @target_window.active

      update_target

      return

    end

  end

end

 

#--------------------------------------------------------------------------

# * End SDK Enable Test

#--------------------------------------------------------------------------

end

 
Code:
 

# L's Custom Status Screen

#--------------------------------------------------------------------------

# * Begin SDK Log

#--------------------------------------------------------------------------

SDK.log("L's Custom Status Screen", 'L', 'Initial', '2009-02-27')

 

#--------------------------------------------------------------------------

# * Begin SDK Requirement Check

#--------------------------------------------------------------------------

SDK.check_requirements(2.0, [1, 3])

 

#--------------------------------------------------------------------------

# * Begin SDK Enable Test

#--------------------------------------------------------------------------

if SDK.enabled?("L's Custom Status Screen")

 

class Window_Base < Window

  SYSTEM_WORD_EVA = "Evade" #

  #--------------------------------------------------------------------------

  # * Draw Parameter

  #     actor : actor

  #     x     : draw spot x-coordinate

  #     y     : draw spot y-coordinate

  #     type  : parameter type (0-6)

  #--------------------------------------------------------------------------

  def draw_actor_parameter(actor, x, y, type)

    case type

    when 0

      parameter_name = $data_system.words.atk

      parameter_value = actor.atk

    when 1

      parameter_name = $data_system.words.pdef

      parameter_value = actor.pdef

    when 2

      parameter_name = $data_system.words.mdef

      parameter_value = actor.mdef

    when 3

      parameter_name = $data_system.words.str

      parameter_value = actor.str

    when 4

      parameter_name = $data_system.words.dex

      parameter_value = actor.dex

    when 5

      parameter_name = $data_system.words.agi

      parameter_value = actor.agi

    when 6

      parameter_name = $data_system.words.int

      parameter_value = actor.int

    when 7 #

      parameter_name = SYSTEM_WORD_EVA #

      parameter_value = actor.eva #

    end

    self.contents.font.color = system_color

    self.contents.draw_text(x, y, 120, 32, parameter_name)

    self.contents.font.color = normal_color

    self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)

  end

end

 

 

#==============================================================================

# * Window_Actor_NamePlate

#==============================================================================

class Window_Actor_NamePlate < Window_Base

  #--------------------------------------------------------------------------

  # * Object Initialization 

  #--------------------------------------------------------------------------

  def initialize(actor)

    super(240, 0, 400, 64)

    #Create Bitmap

    self.contents = Bitmap.new(width - 32, height - 32)

    @actor = actor

    #Refresh and add the contents to window

    refresh

  end

  #--------------------------------------------------------------------------

  # * Refresh 

  #--------------------------------------------------------------------------

  def refresh

    #Clear Bitmap

    self.contents.clear

    draw_actor_name(@actor, 16, 0)

    draw_actor_class(@actor, 240, 0)

  end

end

 

 

#==============================================================================

# * Window_Actor_Info1

#==============================================================================

class Window_Actor_Info1 < Window_Base

  #--------------------------------------------------------------------------

  # * Object Initialization 

  #--------------------------------------------------------------------------

  def initialize(actor)

    super(0, 0, 240, 480)

    #Create Bitmap

    self.contents = Bitmap.new(width - 32, height - 32)

    @actor = actor

    #Refresh and add the contents to window

    refresh

  end

  #--------------------------------------------------------------------------

  # * Refresh 

  #--------------------------------------------------------------------------

  def refresh

    #Clear Bitmap

    self.contents.clear

    self.contents.draw_text(64, 64, 120, 32, "- No Picture - ")

    draw_actor_state(@actor, 16, 224)

    draw_actor_level(@actor, 16, 256)

    draw_actor_hp(@actor, 16, 352, 172)

    draw_actor_sp(@actor, 16, 384, 172)

    self.contents.font.color = system_color

    self.contents.draw_text(16, 288, 80, 32, "EXP")

    self.contents.draw_text(16, 320, 80, 32, "NEXT")

    self.contents.font.color = normal_color

    self.contents.draw_text(16 + 80, 288, 84, 32, @actor.exp_s, 2)

    self.contents.draw_text(16 + 80, 320, 84, 32, @actor.next_rest_exp_s, 2)

  end

end

 

 

#==============================================================================

# * Window_Actor_Info2

#==============================================================================

class Window_Actor_Info2 < Window_Base

  #--------------------------------------------------------------------------

  # * Object Initialization 

  #--------------------------------------------------------------------------

  def initialize(actor)

    super(240, 64, 400, 416)

    #Create Bitmap

    self.contents = Bitmap.new(width - 32, height - 32)

    self.contents.font.size = 21

    @actor = actor

    #Refresh and add the contents to window

    refresh

  end

  #--------------------------------------------------------------------------

  # * Refresh 

  #--------------------------------------------------------------------------

  def refresh

    #Clear Bitmap

    self.contents.clear

    self.contents.font.color = system_color

    self.contents.draw_text(0, 0, 96, 32, "Status")

    self.contents.font.color = normal_color

    draw_actor_parameter(@actor, 0, 32, 0)

    draw_actor_parameter(@actor, 0, 64, 1)

    draw_actor_parameter(@actor, 0, 96, 2)

    draw_actor_parameter(@actor, 0, 184, 3)

    draw_actor_parameter(@actor, 0, 216, 4)

    draw_actor_parameter(@actor, 0, 248, 5)

    draw_actor_parameter(@actor, 0, 280, 6)

    draw_actor_parameter(@actor, 0, 128, 7)

    self.contents.font.color = system_color

    self.contents.draw_text(200, 0, 96, 32, "Equipment")

    self.contents.font.color = normal_color

    draw_item_name($data_weapons[@actor.weapon_id], 200 + 16, 32)

    draw_item_name($data_armors[@actor.armor1_id], 200 + 16, 64)

    draw_item_name($data_armors[@actor.armor2_id], 200 + 16, 96)

    draw_item_name($data_armors[@actor.armor3_id], 200 + 16, 128)

    draw_item_name($data_armors[@actor.armor4_id], 200 + 16, 160)

  end

end

 

 

#==============================================================================

# ** Scene_Status

#------------------------------------------------------------------------------

#  This class performs status screen processing.

#==============================================================================

 

class Scene_Status < SDK::Scene_Base

  #--------------------------------------------------------------------------

  # * Object Initialization

  #     actor_index : actor index

  #--------------------------------------------------------------------------

  def initialize(actor_index = 0, equip_index = 0)

    @actor_index = actor_index

  end

  #--------------------------------------------------------------------------

  # * Main Processing : Variable Initialization

  #--------------------------------------------------------------------------

  def main_variable

    super

    # Get actor

    @actor = $game_party.actors[@actor_index]

  end

  #--------------------------------------------------------------------------

  # * Main Processing : Window Initialization

  #--------------------------------------------------------------------------

  def main_window

    super

    # Make status window

    @window_actor_name = Window_Actor_NamePlate.new(@actor)

    @window_actor_state1 = Window_Actor_Info1.new(@actor)

    @window_actor_state2 = Window_Actor_Info2.new(@actor)

  end

end

 

#--------------------------------------------------------------------------

# * End SDK Enable Test

#--------------------------------------------------------------------------

end

 

Instructions

These scripts require RMXP SDK 2.x. Copy and paste script under SDK, above 'main'. It's a simple 'copy & paste', but you may need some tweaking(like showing face or battler picture in Scene_Status).

FAQ

Q: Can you make them non-SDK?
A: I have no plan. But it's not hard to convert them.
Q: What is the purpose of 'Window_Skill_Header'?
A: It's just a dummy, a placeholder. You can add some text there, or remove it from the scene(you have to change height of 'Window_SkillStatus' and 'Window_Skill' if you do that)
Q: 'No Picture'? WTF?
A: You can add face picture, but since I didn't provide the 'draw_actor_face' method, you have to add the method and picture.

Compatibility

So far, this is compatible to:
- Any CMS that changes main menu only
- Grouping and Details by DerVVulfman. Although you have to edit window position to make it look right.
(compatibility with KGC_SkillGrouping is yet unconfirmed)

Credits and Thanks

Thanks to:
Mr. Mo for Window Scene Wizard
and other scripters for showing me how to make these scenes

Authoress' Notes

Since I'm away from the scene now, maybe there won't be enough support for my scripts.

Terms and Conditions

Feel free to use. Credit would be fine.
 
Geez, Adding one more script broke everything. I had to copy and paste it from other place which I posted these scripts. Should I add it by making new thread? or attach it on this topic?
 

Jason

Awesome Bro

Hmm, it looks pretty decent, although I think your Scene_Skill (And maybe the other) would benefit alot more if you used the battler image instead of the characterset, cause it seems too small and isn't filling the space up.
 
jbrist":x879chbr said:
Hmm, it looks pretty decent, although I think your Scene_Skill (And maybe the other) would benefit alot more if you used the battler image instead of the characterset, cause it seems too small and isn't filling the space up.

Heh... You can replace it to battler or face picture if you want. ;)
 
I had an error with your script in my game. It said

"Script [name of script] line 6: NameError occurred.
uninitalized SDK."

Is there a way to fix this? I really like the script.
 
ConstantReminder":1w2fxbk1 said:
I had an error with your script in my game. It said

"Script [name of script] line 6: NameError occurred.
uninitalized SDK."

Is there a way to fix this? I really like the script.

Are you sure you have SDK in your project? I'm now away from the scene(started to play TES4: Oblivion again), so I wouldn't give enought support for my scripts.
 
Considering that this may be an old thread, I don't know where I could find a scripter to help me.

As much as I like the script, I currently have Rune's Biography script and Momomo's Bestiary script in my project... I have them shown on the normal menu, but not being a scripter, I can't seem to get it to replace the 'Order' command, and insert the two new entries. Nor can I remove the 'Option' command from the save/load/exit menu... I would also like the 'load' option removed.
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top