Jump to content
New account registrations are disabed. This website is now an archive. Read more here.
Canaanchaos

Request---Alter Status menu for extra stats

Recommended Posts

Hi. I need a script to alter the status screen for each character to include additional stats like Courage, Charm, and Intellect, like in Persona 3. I would need to be able to have events add to them, so maybe have some sort of titled variables that I could check in the status menu? Any help would be appreciated.

Share this post


Link to post
Share on other sites

When you make a request for any sort of help and mention another game as an aid, you need to provide screenshot(s)/video(s) of the mentioned feature. Not everyone has played Persona 3. Myself included. :3

 

As for the stats additions... it doesn't seem that hard to do. I myself do not know ruby/RGSS.. though I really ought to learn. *poutface*

 

I'm sure someone *ahemcoughcough*kellessdee*ahemcoughcough* will help you out soon.

Share this post


Link to post
Share on other sites

This can be done easily, if you kindly just explain WHERE you want the value to appear; and what exactly the name of these values are...I can do this for you.

 

Actually, if you wanted to make a mock-up pic of exactly HOW you want the status menu to look; I could just make one based off of the pic; as the Status Menu would probably have to be rearranged to fit these values in.

Share this post


Link to post
Share on other sites

I attached a little picture with what I want (I suck at picture edits, I know). I do know how to move around all the stats. The only thing I was really worried about was getting them to appear there in the first place. If you can figure out how to put them in there, I can move them around where I want.

 

Thanks so much, man. You're an absolute life saver!

post-20684-0-87571400-1314832875_thumb.png

Share this post


Link to post
Share on other sites

Here, this should do the trick.

 

Due to the usage of game variables, you will be required to set up 3 variables for each actor in the database.

To do this, at the start you will see the "Variable setup"

ACTOR[actor_id] =

{

NAME[0] => variable_id

NAME[1] => variable_id

NAME[2] => variable_id

}

the actor_id values are the corresponding index in the database, and the variable_id is the corresponding index in the variable editor.

 

the NAME = ['Courage', 'Intellect', 'Charm'] is essentially the vocabulary used in the menu. You can change this if you'd like.

 

if you have any issues/further questions, let me know.

 

Anyways, here's the script. I set up the first 2 actors for example, the corresponding variables used (in the current setup) are variables 1-6.

Just put this script above main.


class Window_Status < Window_Base

 #-----------------------------------------------------------------------------
 # * Variable Setup
 #-----------------------------------------------------------------------------
 ACTOR = []
 NAME = ['Courage', 'Intellect', 'Charm']

 ACTOR[1] = 
 {
   NAME[0] => 1,
   NAME[1] => 2,
   NAME[2] => 3
 }

 ACTOR[2] = 
 {
   NAME[0] => 4,
   NAME[1] => 5,
   NAME[2] => 6
 }

 #----------------------------------------------------------------------------
 # * End Variable Setup
 #----------------------------------------------------------------------------

 def refresh
   self.contents.clear
   draw_actor_graphic(@actor, 40, 112)
   draw_actor_name(@actor, 4, 0)
   draw_actor_class(@actor, 4 + 144, 0)
   draw_actor_level(@actor, 96, 32)
   draw_actor_state(@actor, 96, 64)
   draw_actor_hp(@actor, 96, 112, 172)
   draw_actor_sp(@actor, 96, 144, 172)
   7.times { |i| draw_actor_parameter(@actor, 96, 172 + i * 24, i) }
   3.times { |i| draw_actor_other(96, 348 + i * 24, NAME[i]) }
   self.contents.draw_text(320, 48, 80, 32, "EXP")
   self.contents.draw_text(320, 80, 80, 32, "NEXT")
   self.contents.font.color = normal_color
   self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)
   self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2)
   self.contents.font.color = system_color
   self.contents.draw_text(320, 160, 96, 32, "equipment")
   draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 208)
   draw_item_name($data_armors[@actor.armor1_id], 320 + 16, 256)
   draw_item_name($data_armors[@actor.armor2_id], 320 + 16, 304)
   draw_item_name($data_armors[@actor.armor3_id], 320 + 16, 352)
   draw_item_name($data_armors[@actor.armor4_id], 320 + 16, 400)
 end

 def draw_actor_other(x, y, name)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 120, 32, name)
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 120, y, 36, 32, 
     $game_variables[ACTOR[@actor.id][name]].to_s, 2)
 end
end

Share this post


Link to post
Share on other sites

:o

 

Very interesting...The only way I can see that being possible is that if your Window_Base script has been deleted. Is it still there?

 

if you do have the Window_Base script, make sure the first line is (after the comments)

class Window_Base < Window 

Share this post


Link to post
Share on other sites

No, I mean, look at Window_Base and make sure the line in the Window_Base script says "class Window_Base < Window"

leave the class line in my script as class Window_Status < Window_Base

Share this post


Link to post
Share on other sites

Ah. Ok. Yeah, Window_Base is as it should be. Could the error be because I don't have everything put in? All I did so far was put the script above main and changed one of the character ids to 10 to give the character in that slot the status screen.

Share this post


Link to post
Share on other sites

hmm that is really weird, you should only get the error you got if, class Window_Base doesn't exist, and if it does....

well I dunno where to start looking. Have you added any other custom scripts per chance? or modified Window_Base yourself?

 

the only thing I can think of, is if you are willing to upload your Scripts.rxdata file, I can take a look at your scripts and try to find the error myself (or what Might be causing the error)

Share this post


Link to post
Share on other sites

The site isn't wanting to let me upload that file. But if you tell me which in particular could be at fault, I'll copy them down here. I tried to use the script in a new game to see if that would help, but it didn't want to work there either.

Share this post


Link to post
Share on other sites

I did get the same error. Not sure why.

 

Here it is --

 

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

# ■ Window_Base

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

#  ゲーム中のすべてのウィンドウのスーパークラスです。

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

 

class Window_Base < Window

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

# ● オブジェクト初期化

# x : ウィンドウの X 座標

# y : ウィンドウの Y 座標

# width : ウィンドウの幅

# height : ウィンドウの高さ

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

def initialize(x, y, width, height)

super()

@windowskin_name = $game_system.windowskin_name

self.windowskin = RPG::Cache.windowskin(@windowskin_name)

self.x = x

self.y = y

self.width = width

self.height = height

self.z = 100

end

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

# ● 解放

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

def dispose

# ウィンドウ内容のビットマップが設定されていれば解放

if self.contents != nil

self.contents.dispose

end

super

end

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

# ● 文字色取得

# n : 文字色番号 (0~7)

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

def text_color(n)

case n

when 0

return Color.new(255, 255, 255, 255)

when 1

return Color.new(128, 128, 255, 255)

when 2

return Color.new(255, 128, 128, 255)

when 3

return Color.new(128, 255, 128, 255)

when 4

return Color.new(128, 255, 255, 255)

when 5

return Color.new(255, 128, 255, 255)

when 6

return Color.new(255, 255, 128, 255)

when 7

return Color.new(192, 192, 192, 255)

else

normal_color

end

end

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

# ● 通常文字色の取得

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

def normal_color

return Color.new(255, 255, 255, 255)

end

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

# ● 無効文字色の取得

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

def disabled_color

return Color.new(255, 255, 255, 128)

end

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

# ● システム文字色の取得

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

def system_color

return Color.new(192, 224, 255, 255)

end

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

# ● ピンチ文字色の取得

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

def crisis_color

return Color.new(255, 255, 64, 255)

end

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

# ● 戦闘不能文字色の取得

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

def knockout_color

return Color.new(255, 64, 0)

end

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

# ● フレーム更新

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

def update

super

# ウィンドウスキンが変更された場合、再設定

if $game_system.windowskin_name != @windowskin_name

@windowskin_name = $game_system.windowskin_name

self.windowskin = RPG::Cache.windowskin(@windowskin_name)

end

end

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

# ● グラフィックの描画

# actor : アクター

# x : 描画先 X 座標

# y : 描画先 Y 座標

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

def draw_actor_graphic(actor, x, y)

bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)

cw = bitmap.width / 4

ch = bitmap.height / 4

src_rect = Rect.new(0, 0, cw, ch)

self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)

end

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

# ● 名前の描画

# actor : アクター

# x : 描画先 X 座標

# y : 描画先 Y 座標

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

def draw_actor_name(actor, x, y)

self.contents.font.color = normal_color

self.contents.draw_text(x, y, 120, 32, actor.name)

end

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

# ● クラスの描画

# actor : アクター

# x : 描画先 X 座標

# y : 描画先 Y 座標

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

def draw_actor_class(actor, x, y)

self.contents.font.color = normal_color

self.contents.draw_text(x, y, 236, 32, actor.class_name)

end

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

# ● レベルの描画

# actor : アクター

# x : 描画先 X 座標

# y : 描画先 Y 座標

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

def draw_actor_level(actor, x, y)

self.contents.font.color = system_color

self.contents.draw_text(x, y, 32, 32, "Lv")

self.contents.font.color = normal_color

self.contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2)

end

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

# ● 描画用のステート文字列作成

# actor : アクター

# width : 描画先の幅

# need_normal : [正常] が必要かどうか (true / false)

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

def make_battler_state_text(battler, width, need_normal)

# 括弧の幅を取得

brackets_width = self.contents.text_size("[]").width

# ステート名の文字列を作成

text = ""

for i in battler.states

if $data_states.rating >= 1

if text == ""

text = $data_states.name

else

new_text = text + "/" + $data_states.name

text_width = self.contents.text_size(new_text).width

if text_width > width - brackets_width

break

end

text = new_text

end

end

end

# ステート名の文字列が空の場合は "[正常]" にする

if text == ""

if need_normal

text = "[Normal]"

end

else

# 括弧をつける

text = "[" + text + "]"

end

# 完成した文字列を返す

return text

end

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

# ● ステートの描画

# actor : アクター

# x : 描画先 X 座標

# y : 描画先 Y 座標

# width : 描画先の幅

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

def draw_actor_state(actor, x, y, width = 120)

text = make_battler_state_text(actor, width, true)

self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color

self.contents.draw_text(x, y, width, 32, text)

end

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

# ● EXP の描画

# actor : アクター

# x : 描画先 X 座標

# y : 描画先 Y 座標

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

def draw_actor_exp(actor, x, y)

self.contents.font.color = system_color

self.contents.draw_text(x, y, 24, 32, "E")

self.contents.font.color = normal_color

self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)

self.contents.draw_text(x + 108, y, 12, 32, "/", 1)

self.contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)

end

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

# ● HP の描画

# actor : アクター

# x : 描画先 X 座標

# y : 描画先 Y 座標

# width : 描画先の幅

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

def draw_actor_hp(actor, x, y, width = 144)

# 文字列 "HP" を描画

self.contents.font.color = system_color

self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)

# MaxHP を描画するスペースがあるか計算

if width - 32 >= 108

hp_x = x + width - 108

flag = true

elsif width - 32 >= 48

hp_x = x + width - 48

flag = false

end

# HP を描画

self.contents.font.color = actor.hp == 0 ? knockout_color :

actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color

self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2)

# MaxHP を描画

if flag

self.contents.font.color = normal_color

self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)

self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)

end

end

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

# ● SP の描画

# actor : アクター

# x : 描画先 X 座標

# y : 描画先 Y 座標

# width : 描画先の幅

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

def draw_actor_sp(actor, x, y, width = 144)

# 文字列 "SP" を描画

self.contents.font.color = system_color

self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)

# MaxSP を描画するスペースがあるか計算

if width - 32 >= 108

sp_x = x + width - 108

flag = true

elsif width - 32 >= 48

sp_x = x + width - 48

flag = false

end

# SP を描画

self.contents.font.color = actor.sp == 0 ? knockout_color :

actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color

self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)

# MaxSP を描画

if flag

self.contents.font.color = normal_color

self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)

self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)

end

end

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

# ● パラメータの描画

# actor : アクター

# x : 描画先 X 座標

# y : 描画先 Y 座標

# 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

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

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

# ● アイテム名の描画

# item : アイテム

# x : 描画先 X 座標

# y : 描画先 Y 座標

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

def draw_item_name(item, x, y)

if item == nil

return

end

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

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

self.contents.font.color = normal_color

self.contents.draw_text(x + 28, y, 212, 32, item.name)

end

end

Edited by Canaanchaos

Share this post


Link to post
Share on other sites

hmm It must be your default Window_Status that is causing issues. Sorry, for all this but if you could put your original Window_Status here it would be awesome. That MUST be the issue, as I just put your Window_Base into the project with the Window_Status addition, no issues.

Share this post


Link to post
Share on other sites

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

# ■ Window_Status

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

#  ステータス画面で表示する、フル仕様のステータスウィンドウです。

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

 

class Window_Status < Window_Base

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

# ● オブジェクト初期化

# actor : アクター

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

def initialize(actor)

super(0, 0, 640, 480)

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

self.contents.font.name = $fontface

self.contents.font.size = $fontsize

@actor = actor

refresh

end

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

# ● リフレッシュ

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

def refresh

self.contents.clear

draw_actor_graphic(@actor, 40, 112)

draw_actor_name(@actor, 4, 0)

draw_actor_class(@actor, 4 + 144, 0)

draw_actor_level(@actor, 96, 32)

draw_actor_state(@actor, 96, 64)

draw_actor_hp(@actor, 96, 112, 172)

draw_actor_sp(@actor, 96, 144, 172)

draw_actor_parameter(@actor, 96, 192, 0)

draw_actor_parameter(@actor, 96, 224, 1)

draw_actor_parameter(@actor, 96, 256, 2)

draw_actor_parameter(@actor, 96, 304, 3)

draw_actor_parameter(@actor, 96, 336, 4)

draw_actor_parameter(@actor, 96, 368, 5)

draw_actor_parameter(@actor, 96, 400, 6)

self.contents.font.color = system_color

self.contents.draw_text(320, 48, 80, 32, "EXP")

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

self.contents.font.color = normal_color

self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)

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

self.contents.font.color = system_color

self.contents.draw_text(320, 160, 96, 32, "Equipment")

draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 208)

draw_item_name($data_armors[@actor.armor1_id], 320 + 16, 256)

draw_item_name($data_armors[@actor.armor2_id], 320 + 16, 304)

draw_item_name($data_armors[@actor.armor3_id], 320 + 16, 352)

draw_item_name($data_armors[@actor.armor4_id], 320 + 16, 400)

end

def dummy

self.contents.font.color = system_color

self.contents.draw_text(320, 112, 96, 32, $data_system.words.weapon)

self.contents.draw_text(320, 176, 96, 32, $data_system.words.armor1)

self.contents.draw_text(320, 240, 96, 32, $data_system.words.armor2)

self.contents.draw_text(320, 304, 96, 32, $data_system.words.armor3)

self.contents.draw_text(320, 368, 96, 32, $data_system.words.armor4)

draw_item_name($data_weapons[@actor.weapon_id], 320 + 24, 144)

draw_item_name($data_armors[@actor.armor1_id], 320 + 24, 208)

draw_item_name($data_armors[@actor.armor2_id], 320 + 24, 272)

draw_item_name($data_armors[@actor.armor3_id], 320 + 24, 336)

draw_item_name($data_armors[@actor.armor4_id], 320 + 24, 400)

end

end

 

 

I think that's all right.

Share this post


Link to post
Share on other sites

Really? Wow, this is really odd. Everything SHOULD be fine, and you definitely SHOULD NOT be getting Superclass Window_Base undefined error....

 

Just for sh**s nd giggles, try putting replacing your ENTIRE window_Status script, with this:

 

 

 

#==============================================================================
# ** Window_Status
#------------------------------------------------------------------------------
#  This window displays full status specs on the status screen.
#==============================================================================

class Window_Status < Window_Base
 #-----------------------------------------------------------------------------
 # * Variable Setup
 #-----------------------------------------------------------------------------
 ACTOR = []
 NAME = ['Courage', 'Intellect', 'Charm']

 ACTOR[1] = 
 {
   NAME[0] => 1,
   NAME[1] => 2,
   NAME[2] => 3
 }

 ACTOR[2] = 
 {
   NAME[0] => 4,
   NAME[1] => 5,
   NAME[2] => 6
 }

 #----------------------------------------------------------------------------
 # * End Variable Setup
 #----------------------------------------------------------------------------


 def initialize(actor)
   super(0, 0, 640, 480)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.contents.font.name = $fontface
   self.contents.font.size = $fontsize
   @actor = actor
   refresh
 end

 def refresh
   self.contents.clear
   draw_actor_graphic(@actor, 40, 112)
   draw_actor_name(@actor, 4, 0)
   draw_actor_class(@actor, 4 + 144, 0)
   draw_actor_level(@actor, 96, 32)
   draw_actor_state(@actor, 96, 64)
   draw_actor_hp(@actor, 96, 112, 172)
   draw_actor_sp(@actor, 96, 144, 172)
   7.times { |i| draw_actor_parameter(@actor, 96, 172 + i * 24, i) }
   3.times { |i| draw_actor_other(96, 348 + i * 24, NAME[i]) }
   self.contents.draw_text(320, 48, 80, 32, "EXP")
   self.contents.draw_text(320, 80, 80, 32, "NEXT")
   self.contents.font.color = normal_color
   self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)
   self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2)
   self.contents.font.color = system_color
   self.contents.draw_text(320, 160, 96, 32, "Equipment")
   draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 208)
   draw_item_name($data_armors[@actor.armor1_id], 320 + 16, 256)
   draw_item_name($data_armors[@actor.armor2_id], 320 + 16, 304)
   draw_item_name($data_armors[@actor.armor3_id], 320 + 16, 352)
   draw_item_name($data_armors[@actor.armor4_id], 320 + 16, 400)
 end

 def draw_actor_other(x, y, name)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 120, 32, name)
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 120, y, 36, 32, 
     $game_variables[ACTOR[@actor.id][name]].to_s, 2)
 end
end

 

Share this post


Link to post
Share on other sites

I think the issue is the scripts. It seems you have a different version of RPG Maker XP than I do.

 

 

 



#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base < Window
 #--------------------------------------------------------------------------
 # * Object Initialization
 #     x      : window x-coordinate
 #     y      : window y-coordinate
 #     width  : window width
 #     height : window height
 #--------------------------------------------------------------------------
 def initialize(x, y, width, height)
   super()
   @windowskin_name = $game_system.windowskin_name
   self.windowskin = RPG::Cache.windowskin(@windowskin_name)
   self.x = x
   self.y = y
   self.width = width
   self.height = height
   self.z = 100
 end
 #--------------------------------------------------------------------------
 # * Dispose
 #--------------------------------------------------------------------------
 def dispose
   # Dispose if window contents bit map is set
   if self.contents != nil
     self.contents.dispose
   end
   super
 end
 #--------------------------------------------------------------------------
 # * Get Text Color
 #     n : text color number (0-7)
 #--------------------------------------------------------------------------
 def text_color(n)
   case n
   when 0
     return Color.new(255, 255, 255, 255)
   when 1
     return Color.new(128, 128, 255, 255)
   when 2
     return Color.new(255, 128, 128, 255)
   when 3
     return Color.new(128, 255, 128, 255)
   when 4
     return Color.new(128, 255, 255, 255)
   when 5
     return Color.new(255, 128, 255, 255)
   when 6
     return Color.new(255, 255, 128, 255)
   when 7
     return Color.new(192, 192, 192, 255)
   else
     normal_color
   end
 end
 #--------------------------------------------------------------------------
 # * Get Normal Text Color
 #--------------------------------------------------------------------------
 def normal_color
   return Color.new(255, 255, 255, 255)
 end
 #--------------------------------------------------------------------------
 # * Get Disabled Text Color
 #--------------------------------------------------------------------------
 def disabled_color
   return Color.new(255, 255, 255, 128)
 end
 #--------------------------------------------------------------------------
 # * Get System Text Color
 #--------------------------------------------------------------------------
 def system_color
   return Color.new(192, 224, 255, 255)
 end
 #--------------------------------------------------------------------------
 # * Get Crisis Text Color
 #--------------------------------------------------------------------------
 def crisis_color
   return Color.new(255, 255, 64, 255)
 end
 #--------------------------------------------------------------------------
 # * Get Knockout Text Color
 #--------------------------------------------------------------------------
 def knockout_color
   return Color.new(255, 64, 0)
 end
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
   super
   # Reset if windowskin was changed
   if $game_system.windowskin_name != @windowskin_name
     @windowskin_name = $game_system.windowskin_name
     self.windowskin = RPG::Cache.windowskin(@windowskin_name)
   end
 end
 #--------------------------------------------------------------------------
 # * Draw Graphic
 #     actor : actor
 #     x     : draw spot x-coordinate
 #     y     : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_actor_graphic(actor, x, y)
   bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
   cw = bitmap.width / 4
   ch = bitmap.height / 4
   src_rect = Rect.new(0, 0, cw, ch)
   self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
 end
 #--------------------------------------------------------------------------
 # * Draw Name
 #     actor : actor
 #     x     : draw spot x-coordinate
 #     y     : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_actor_name(actor, x, y)
   self.contents.font.color = normal_color
   self.contents.draw_text(x, y, 120, 32, actor.name)
 end
 #--------------------------------------------------------------------------
 # * Draw Class
 #     actor : actor
 #     x     : draw spot x-coordinate
 #     y     : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_actor_class(actor, x, y)
   self.contents.font.color = normal_color
   self.contents.draw_text(x, y, 236, 32, actor.class_name)
 end
 #--------------------------------------------------------------------------
 # * Draw Level
 #     actor : actor
 #     x     : draw spot x-coordinate
 #     y     : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_actor_level(actor, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 32, 32, "Lv")
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2)
 end
 #--------------------------------------------------------------------------
 # * Make State Text String for Drawing
 #     actor       : actor
 #     width       : draw spot width
 #     need_normal : Whether or not [normal] is needed (true / false)
 #--------------------------------------------------------------------------
 def make_battler_state_text(battler, width, need_normal)
   # Get width of brackets
   brackets_width = self.contents.text_size("[]").width
   # Make text string for state names
   text = ""
   for i in battler.states
     if $data_states[i].rating >= 1
       if text == ""
         text = $data_states[i].name
       else
         new_text = text + "/" + $data_states[i].name
         text_width = self.contents.text_size(new_text).width
         if text_width > width - brackets_width
           break
         end
         text = new_text
       end
     end
   end
   # If text string for state names is empty, make it [normal]
   if text == ""
     if need_normal
       text = "[Normal]"
     end
   else
     # Attach brackets
     text = "[" + text + "]"
   end
   # Return completed text string
   return text
 end
 #--------------------------------------------------------------------------
 # * Draw State
 #     actor : actor
 #     x     : draw spot x-coordinate
 #     y     : draw spot y-coordinate
 #     width : draw spot width
 #--------------------------------------------------------------------------
 def draw_actor_state(actor, x, y, width = 120)
   text = make_battler_state_text(actor, width, true)
   self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
   self.contents.draw_text(x, y, width, 32, text)
 end
 #--------------------------------------------------------------------------
 # * Draw EXP
 #     actor : actor
 #     x     : draw spot x-coordinate
 #     y     : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_actor_exp(actor, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 24, 32, "E")
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
   self.contents.draw_text(x + 108, y, 12, 32, "/", 1)
   self.contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)
 end
 #--------------------------------------------------------------------------
 # * Draw HP
 #     actor : actor
 #     x     : draw spot x-coordinate
 #     y     : draw spot y-coordinate
 #     width : draw spot width
 #--------------------------------------------------------------------------
 def draw_actor_hp(actor, x, y, width = 144)
   # Draw "HP" text string
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
   # Calculate if there is draw space for MaxHP
   if width - 32 >= 108
     hp_x = x + width - 108
     flag = true
   elsif width - 32 >= 48
     hp_x = x + width - 48
     flag = false
   end
   # Draw HP
   self.contents.font.color = actor.hp == 0 ? knockout_color :
     actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
   self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2)
   # Draw MaxHP
   if flag
     self.contents.font.color = normal_color
     self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
     self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
   end
 end
 #--------------------------------------------------------------------------
 # * Draw SP
 #     actor : actor
 #     x     : draw spot x-coordinate
 #     y     : draw spot y-coordinate
 #     width : draw spot width
 #--------------------------------------------------------------------------
 def draw_actor_sp(actor, x, y, width = 144)
   # Draw "SP" text string
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
   # Calculate if there is draw space for MaxHP
   if width - 32 >= 108
     sp_x = x + width - 108
     flag = true
   elsif width - 32 >= 48
     sp_x = x + width - 48
     flag = false
   end
   # Draw SP
   self.contents.font.color = actor.sp == 0 ? knockout_color :
     actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
   self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)
   # Draw MaxSP
   if flag
     self.contents.font.color = normal_color
     self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
     self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
   end
 end
 #--------------------------------------------------------------------------
 # * 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
   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
 #--------------------------------------------------------------------------
 # * Draw Item Name
 #     item : item
 #     x    : draw spot x-coordinate
 #     y    : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_item_name(item, x, y)
   if item == nil
     return
   end
   bitmap = RPG::Cache.icon(item.icon_name)
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 28, y, 212, 32, item.name)
 end
end

 

 

 

if you want to update all your scripts, replace your Scripts.rxdata (back up any custom scripts you want to keep/use)

with this version:

http://dl.dropbox.com/u/30100812/Scripts.rxdata

 

It includes the modified Window_Status, and should work fine.

Share this post


Link to post
Share on other sites

I'm an idiot who has been wasting your time . . . the errors came from the fact that I had two copies of that script somehow. One at the bottom, right above main . . . and one somewhere in the middle. The one in the middle must have been screwing it up, since any script it was to draw from (like Window_Base) was below it. I'm sorry. It actually works now.

Edited by Canaanchaos

Share this post


Link to post
Share on other sites

haha no worries, I am glad it works. It's odd that you were getting the error that you did however o.O

 

I love when ruby errors point you in the exact opposite direction of the actual cause.

Share this post


Link to post
Share on other sites

Yup definitely! I set up in a way so it wouldn't be too much of a pain to add/remove

 

for the NAME constant, just add a new stat like:

NAME = ['Courage', 'Intellect', 'Charm', 'New Stat']

 

Then for each of the ACTOR variable ID hashes, add the new stat:

ACTOR[1] = 
{
 NAME[0] => 1,
 NAME[1] => 2,
 NAME[2] => 3,
 NAME[3] => 4
}

 

Then the portion of the code that draws the other stats:

 

3.times { |i| draw_actor_other(96, 348 + i * 24, NAME[i]) }

 

Change it to: (I should have done this in the first place D: I didn't think about it)

 

NAME.each_index { |i| draw_actor_other(96, 348 + i * 24, NAME[i]) }

 

That will iterate through each stat, no matter how many are in there (so it will be easier to add more)

Then, to mess around with the positioning, you will mainly want to look at the y value:

 

348 + i * 24

 

348 is the starting pixel location (348 pixels DOWN from the top of the screen), and 24 is how much height to give each line.

So the first stat would be at 348 + (0) * 24 = 348; the next is at 348 + (1) * 24 = 372; etc.

 

If you need any help rearranging anything, let me know.

Share this post


Link to post
Share on other sites

I love this script. Its just what I was looking for. I'm only having one problem. I have six added stats and only three are apearing in game.

Thay were working fine until I tried to make all 6 apear in the menu like this...

 

Yup definitely! I set up in a way so it wouldn't be too much of a pain to add/remove

for the NAME constant, just add a new stat like:

NAME = ['Courage', 'Intellect', 'Charm', 'New Stat']
Then for each of the ACTOR variable ID hashes, add the new stat:
ACTOR[1] = 
{
  NAME[0] => 1,
  NAME[1] => 2,
  NAME[2] => 3,
  NAME[3] => 4
}
Then the portion of the code that draws the other stats:

3.times { |i| draw_actor_other(96, 348 + i * 24, NAME[i]) }
Change it to: (I should have done this in the first place D: I didn't think about it)

NAME.each_index { |i| draw_actor_other(96, 348 + i * 24, NAME[i]) }
That will iterate through each stat, no matter how many are in there (so it will be easier to add more)
Then, to mess around with the positioning, you will mainly want to look at the y value:

348 + i * 24

348 is the starting pixel location (348 pixels DOWN from the top of the screen), and 24 is how much height to give each line.
So the first stat would be at 348 + (0) * 24 = 348; the next is at 348 + (1) * 24 = 372; etc.

If you need any help rearranging anything, let me know.

 

 

I'm getting an error...

 

Script 'Game_Variables line 20:No MethodError Occurred

undefined method '<=' for NilClass

 

 

I haven't played with the y value yet. Is this happening because there isn't space, or is there another reason?

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...