02-27-2009, 02:23 PM
L's Custom Menu Scenes
Version: InitialBy: 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
Scene_Skill
Using with DerVVulfman's Grouping and Details
Scene_Status
Demo
Demo Download - 4Shared
Script
About menu scripts, see my demo.
L's Custom Skill Scene
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
L's Custom Status Scene
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.