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.

[VX] Stat points distribution system

please be more specific when you say "I did everything correctly". Did you put in the point increase code? where did you put it?
 

apkx24

Member

so w8, i just replace the main script with 1.7 and it should work? i hope it does ill add it l8r busy, if it doesnt work ill let you know
 

Marpy

Member

I believe I've noticed a bug in the script, but I'm not sure if it's been addressed yet: it doesn't seem to support dual-wielding. The second weapon shows up as a shield in the status menu, and seems to affect the displayed defense. For example: with nothing else equipped, and all stats one, defense is only 1. But with two swords equipped, the second iron sword registers as a scale shield, with a defense of -3 + 4. Sure, it's still just a 1, but it looks tacky. Plus, the attack of the second weapon affects the points required to raise attack. Like if you were to equip a King's Sword in weapon slot two, with a base attack of 1 in RO mode, the points required to raise attack goes from 2, to 14.
 
Loving this Script, exactly what i wanted for my upcoming project.

Still playing around with a few things and making modifications to fit my needs, but this script is great.
Of course the above bug really does need some looking into.

Thanks for another great on Lettuce, you always pull out some of the most useful Scripts.
 
does this script also interfear with the accuracy of the actor's attack because it seems like my attacks are missing more after i put this system in my game.
 
If people want to put this in their menu, open it up and edit 'Scene_Menu' and the line:
Code:
Create Command Window
To add a new menu entry either add a new line (following suite of course) or edit an existing one. I edited
Code:
s4 = Vocab::status
to
Code:
s4 = "Status"
(If you add a new entry, you must add it to this:
Code:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
so it looks something like this:
Code:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
(Notice s7)) Then go lower so you reach:
Code:
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2,3  # Skill, equipment, status
        start_actor_selection
      when 4      # Save
        $scene = Scene_File.new(true, false, false)
      when 5      # End Game
        $scene = Scene_End.new
      end
    end
  end
You will want to edit it to look something like this:
Code:
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2  # Skill, equipment
        start_actor_selection
      when 3 #Stat distributation
        $scene = Scene_Stat_Dist.new(0)
      when 4      # Save
        $scene = Scene_File.new(true, false, false)
      when 5      # End Game
        $scene = Scene_End.new
      end
    end
  end
or like this:
Code:
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2,3  # Skill, equipment, status
        start_actor_selection
      when 4
        $scene = Scene_Stat_Dist.new(0)     
      when 5      # Save
        $scene = Scene_File.new(true, false, false)
      when 6      # End Game
        $scene = Scene_End.new
      end
    end
  end
If you edited the first section like this:
Code:
s1 = Vocab::item
    s2 = Vocab::skill
    s3 = Vocab::equip
    s4 = Vocab::status
    s5 = "Stat Distributation"
    s6 = Vocab::save
    s7 = Vocab::game_end
(It is 's5' since in the first section 0 is counted. Therefore I have edited it like this.)

That should edit the menu accordingly!

Sam.
 
Not sure if this has been mentioned yet, but the script doesn't allow you to have 0 of any stat (for example, if you want a warrior with 0 MP), it gives you a "divide by zero" error. o.o;
 
This script for some reason doesn't like when you do not have a weapon at all equipped. Kinda crappy for jail scenes or anything like that.
 
Fixed this script to work with no weapons equipped and also two handed weapon styles. Values will properly increase their respected statistics. Let me know if anyone wants the updated version.
 

Marpy

Member

Uh, yeah. Hook me up with that. >:3

I've also noticed an error, that when you change class, the stats all reset back to the default value.
 
A gift for all. Updated to allow for Dual Weapons.

=begin
+------------------------------------------------------------------------------+
� ** Stat points distribution system 1.6                                      �
�     By Lettuce.                                      �
�                                                                              �
�                                                                              �
�Some help:                                                                    �
�    - Position wasn't stored properly in mode 1 (Thanks Akin)                �
�    - Some sort of notification to player (Thanks Akin)                      �
�    - Player switch now supports LEFT and RIGHT arrow (Thanks Akin)          �
�    - Advice on using class attr instead of global var (Thanks GoldenShadow) �
�                                                                              �
�------------------------------------------------------------------------------�
�  This script lets you distribute points onto your actor's stats              �
�                                                                              �
� Call scene using this: $scene = Scene_Stat_Dist.new(0)                      �
�                                                                              �
�                                                                              �
�  You can give points to your actors by using this code                      �
�                                                                              �
� $game_party.members[<member ID>].points += <amount of points>        �
�                                                                              �
�  If you want your actor to get points after leveling:                        �
�  Under Game_Actor, in def change_exp, under the line level_up; paste this    �
�                                                                              �
� difference = @level - last_level                      �
�    $game_actors[@actor_id].points += <amount of points>                      �
�                                                                              �
� OR (if you want RO mode; explained below)      �
�                                                                              �
�      difference = @level - last_level                                        �
�      $game_actors[@actor_id].points += ((@level/5).floor+2).floor*difference �
�                                                                              �
� # It seems the game returns non 0 based array if we use game_party >.<;      �
�                                                                              �
�  **Note**                                                                    �
�  This script does not stop your actors from gaining stats points defined in  �
�  the database. It will just add to it.                                      �
�  Set the stats to 1 all the way in the database to disable growth :0        �
�                                                                              �
�  **Modes**                                                                  �
�  1 : Add one point to the attribute per point                                �
�  2 : Use RO system, attribute with value needs more points to increase.      �
�   Explanation: In RO, if you got high stats, you need more points to  �
� increase it. So if you have 90 ATK and 5 INT...You can                �
� choose to use 10 points for 1 more ATK OR use that 10 points          �
� to get 6 INT                                                          �
+------------------------------------------------------------------------------+
=end
#������������������������������ Configuration ���������������������������������#
#Starting points; how many points to give to actor at the beginning of the game
StartPoints = 30
#Maximum attribute point you allow in your game
MaxStat = 300
MaxHP = 9999
MaxMP = 999
    #Max hit, eva and crit rate are all in percentage
MaxHIT = 100 # 100 means never miss
MaxEVA = 65 #100 means ALWAYS dodge; very illogical ^^. 50-70 is good rate
MaxCRIT = 90 #100 means always crit o.O

    #How many points needed per increase
PointsPerHP = 5
PointsPerMP = 5
PointsPerHIT = 4
PointsPerEVA = 7
PointsPerCRIT = 5

#How many stats will increase per point?
IncreaseBy = 10
HPIncreaseBy = 100
MPIncreaseBy = 50
HITIncreaseBy = 1
EVAIncreaseBy = 1
CRITIncreaseBy = 1


#1 for normal mode, 2 or RO mode [points required calculated through formula]
Mode = 1
#You can chage font family and size here
Fontname = "Calibri"
Fontsize = 20

#Layout mode, if you use long words for atk,spi,def or agi ; set LayoutMode to 2
LayoutMode = 1

#========================== End Configuration ==================================
OFFSET = -10 #moves equipment part up and down XD
#==============================================================================
# ** Lettuce_Window_Top
#------------------------------------------------------------------------------
#  This window displays Title message
#==============================================================================

class Lettuce_Window_Top < Window_Base
  def initialize
super(0,0,544,70)
self.contents = Bitmap.new(width-32,height-32)
self.contents.font.name = Fontname
self.contents.font.size = Fontsize
refresh
end

  def refresh
self.contents.clear
self.contents.draw_text(0,-10,544-32,32,"Stats distribution",1)
self.contents.font.size = Fontsize-4
self.contents.draw_text(0,10,544-32,32,"Press left or right to change actor",1)
  end

end
#==============================================================================
# ** Lettuce_Window_Points
#------------------------------------------------------------------------------
#  This window displays the attributes of a party member
#==============================================================================
class Lettuce_Window_Points < Window_Base
  def initialize(member_index)
super(401,320,144,52)
self.contents = Bitmap.new(width-32,height-32)
self.contents.font.name = Fontname
self.contents.font.size = Fontsize
refresh(member_index)
  end
 
  def refresh(member_index)
actor = $game_party.members[member_index]
points = actor.points
  self.contents.clear
self.contents.draw_text(0,0,162,20,"Points: "+points.to_s)
  end
end

#==============================================================================
# ** Lettuce_Window_Info
#------------------------------------------------------------------------------
#  This window displays the attributes of a party member
#==============================================================================

class Lettuce_Window_Info < Window_Base
  def initialize(member_index)
super(0,71,400,346)
self.contents = Bitmap.new(width-32,height-32)
self.contents.font.name = Fontname
self.contents.font.size = Fontsize
  @exo = 25 #equipment section X coordinate offset
  @exo2 = 35 #equipment section X coordinate offset
  @eyo = -10 #equipment section Y coordinate offset
refresh(member_index)
  end

  def refresh(member_index)
actor = $game_party.members[member_index]
self.contents.clear
  self.contents.font.size = Fontsize
draw_actor_face(actor,10,10,92)
draw_actor_name(actor,120,10)
self.contents.font.size = Fontsize
self.contents.draw_text(190,30,200,20,"Class: "+actor.class.name)
self.contents.draw_text(120,30,200,20,"Lv. "+actor.level.to_s)
 
  if LayoutMode == 1
    draw_actor_state(actor,200,280,168)
  elsif LayoutMode == 2
    draw_actor_state(actor,220,10)
  end
 
s1 = actor.exp_s #total exp
  s2 = actor.current_lvl_exp #exp to get to this level
  if s1.is_a?(Numeric)
    s3 = s1-s2 #progress in this level
    s4 = actor.next_lvl_exp #exp needed for next level
    self.contents.font.size = Fontsize - 5
    self.contents.draw_text(230,74,90,20,"EXP: "+s3.to_s+"/"+s4.to_s,0)
    self.contents.font.size = Fontsize
  else
    self.contents.draw_text(230,74,85,20,"-----/-----",2)
  end

#Preparing bar colours
back_color = Color.new(39, 58, 83, 255)

str_color1 = Color.new(229, 153, 73, 255)
str_color2 = Color.new(255, 72, 0, 255)

def_color1 = Color.new(210, 255, 0, 255)
def_color2 = Color.new(85, 129, 9, 255)

spi_color1 = Color.new(99, 133, 161, 255)
spi_color2 = Color.new(10, 60,107, 255)

agi_color1 = Color.new(167, 125, 180, 255)
agi_color2 = Color.new(90, 11, 107, 255)
 
  hp_color1 = Color.new(66, 114, 164, 255)
  hp_color2 = Color.new(122, 175, 229, 255)
 
  mp_color1 = Color.new(93, 50, 158, 255)
  mp_color2 = Color.new(145, 122, 229, 255)
 
  exp_color1 = Color.new(246, 243, 224, 255)
  exp_color2 = Color.new(255, 182, 0, 255)
  if s1.is_a?(Numeric)
    self.contents.fill_rect(230,90,89,7,back_color)
    self.contents.gradient_fill_rect(232,92,(85*s3)/s4,3,exp_color1,exp_color2)

  else
    self.contents.fill_rect(230,60,89,7,back_color)
  end
 

  self.contents.fill_rect(120,67,104,7,back_color)
self.contents.gradient_fill_rect(122,69,100*actor.hp/actor.maxhp,3,hp_color1,hp_color2)
  self.contents.draw_text(120,44,100,30,"HP",0)
  self.contents.draw_text(120,44,100,30,actor.hp.to_s + "/" + actor.maxhp.to_s,2)
 
  self.contents.fill_rect(120,90,104,7,back_color)
self.contents.gradient_fill_rect(122,92,100*actor.mp/actor.maxmp,3,mp_color1,mp_color2)
  self.contents.draw_text(120,67,100,30,"MP",0)
  self.contents.draw_text(120,67,100,30,actor.mp.to_s + "/" + actor.maxmp.to_s,2)
 
  weapon1 = $data_weapons[actor.weapon_id]
  weapon2 = $data_weapons[actor.armor1_id]
  shield = $data_armors[actor.armor1_id]
  helm =$data_armors[actor.armor2_id]
  body =$data_armors[actor.armor3_id]
  accessory =$data_armors[actor.armor4_id]
 
  bonus_atk = 0
  bonus_def = 0
  bonus_spi = 0
  bonus_agi = 0
  evasion = 0
  crit = 4
 
  if $data_actors[actor.id].critical_bonus
    crit +=4
  end
 
  if weapon1
    bonus_atk += weapon1.atk
    bonus_def += weapon1.def
    bonus_spi += weapon1.spi
    bonus_agi += weapon1.agi
    if weapon1.critical_bonus
      crit += 4
    end
  end
 
  if actor.two_swords_style == true
    if weapon2
      bonus_atk += weapon2.atk
      bonus_def += weapon2.def
      bonus_spi += weapon2.spi
      bonus_agi += weapon2.agi
      if weapon2.critical_bonus
        crit += 4
      end
    end
  else
    if shield
      bonus_atk += shield.atk
      bonus_def += shield.def
      bonus_spi += shield.spi
      bonus_agi += shield.agi
      evasion += shield.eva
    end
  end
    if helm
    bonus_atk += helm.atk
    bonus_def += helm.def
    bonus_spi += helm.spi
    bonus_agi += helm.agi
    evasion += helm.eva
  end
    if body
    bonus_atk += body.atk
    bonus_def += body.def
    bonus_spi += body.spi
    bonus_agi += body.agi
    evasion += body.eva
  end
    if accessory
    bonus_atk += accessory.atk
    bonus_def += accessory.def
    bonus_spi += accessory.spi
    bonus_agi += accessory.agi
    evasion += accessory.eva
  end

  if LayoutMode == 1
    draw_item_name(weapon1,160+@exo,125+@eyo,true)
    if actor.two_swords_style == true
      draw_item_name(weapon2,160+@exo,155+@eyo,true)     
    else
      draw_item_name(shield,160+@exo,155+@eyo,true)
    end
    draw_item_name(helm,160+@exo,185+@eyo,true)
    draw_item_name(body,160+@exo,215+@eyo,true)
    draw_item_name(accessory,160+@exo,245+@eyo,true)
   
    #Testing area for Weapon upgrade script
    #self.contents.font.size = Fontsize - 7
    #self.contents.draw_text(160+@exo,135,30,20,"[+"+weapon.level.to_s+"]",0)
   
    self.contents.font.color = Color.new(87,87,87,255)
    if !weapon1
      draw_icon(2909,160+@exo,125+@eyo,true)
      self.contents.draw_text(184+@exo,127+@eyo,200,20,"Unequiped")
    end
    if !shield and !weapon2
      draw_icon(2909,160+@exo,155+@eyo,true)
      self.contents.draw_text(184+@exo,157+@eyo,200,20,"Unequiped")
    end
    if !helm
      draw_icon(2909,160+@exo,185+@eyo,true)
      self.contents.draw_text(184+@exo,187+@eyo,200,20,"Unequiped")
    end
    if !body
      draw_icon(2909,160+@exo,215+@eyo,true)
      self.contents.draw_text(184+@exo,217+@eyo,200,20,"Unequiped")
    end
    if !accessory
      draw_icon(2909,160+@exo,245+@eyo,true)
      self.contents.draw_text(184+@exo,247+@eyo,200,20,"Unequiped")
    end
    self.contents.font.color = Color.new(255,255,255,255)
  end
 
  self.contents.font.size = Fontsize - 5
self.contents.draw_text(10,120,100,20,Vocab::atk+": ")
self.contents.draw_text(10,120,100,20,(actor.atk-bonus_atk).to_s+" + "+bonus_atk.to_s,2)

self.contents.fill_rect(10,140,104,7,back_color)
self.contents.gradient_fill_rect(12,142,((actor.atk-bonus_atk)*100)/MaxStat,3,str_color1,str_color2)

self.contents.draw_text(10,150,100,20,Vocab::def+": ")
self.contents.draw_text(10,150,100,20,(actor.def-bonus_def).to_s+" + "+bonus_def.to_s,2)

self.contents.fill_rect(10,170,104,7,back_color)
self.contents.gradient_fill_rect(12,172,((actor.def-bonus_def)*100)/MaxStat,3,def_color1,def_color2)

self.contents.draw_text(10,180,100,20,Vocab::spi+": ")
self.contents.draw_text(10,180,100,20,(actor.spi-bonus_spi).to_s+" + "+bonus_spi.to_s,2)

self.contents.fill_rect(10,200,104,7,back_color)
self.contents.gradient_fill_rect(12,202,((actor.spi-bonus_spi)*100)/MaxStat,3,spi_color1,spi_color2)

self.contents.draw_text(10,210,100,20,Vocab::agi+": ")
self.contents.draw_text(10,210,100,20,(actor.agi-bonus_agi).to_s+" + "+bonus_agi.to_s,2)

self.contents.fill_rect(10,230,104,7,back_color)
self.contents.gradient_fill_rect(12,232,((actor.agi-bonus_agi)*100)/MaxStat,3,agi_color1,agi_color2)

  if weapon1
    hit_rate = weapon1.hit
  else
    hit_rate = 95
  end
   
  self.contents.font.size = Fontsize - 5
  self.contents.font.color = Color.new(162,212,98,255)
  self.contents.draw_text(10,245,100,20,"Maximum ATK :",2)
  self.contents.draw_text(10,260,100,20,"Hit rate (%) :",2)
  self.contents.draw_text(10,275,100,20,"Evasion rate (%) :",2)
  self.contents.draw_text(10,290,100,20,"Critical Rate (%) :",2)
 
  self.contents.draw_text(120,245,60,20,(actor.atk*4).to_s,0)
  self.contents.draw_text(120,260,60,20,actor.base_hit.to_s + "+" + actor.hitr.to_s,0)
  self.contents.draw_text(120,275,60,20,actor.base_eva.to_s + "+" + actor.evar.to_s,0)
  self.contents.draw_text(120,290,60,20,actor.base_cri.to_s + "+" + actor.crir.to_s,0)
 
  self.contents.font.size = Fontsize-6
  self.contents.font.color = text_color(16)
  self.contents.draw_text(135,260,60,20,"[Req:"+PointsPerHIT.to_s+"pt.]",2)
  self.contents.draw_text(135,275,60,20,"[Req:"+PointsPerEVA.to_s+"pt.]",2)
  self.contents.draw_text(135,290,60,20,"[Req:"+PointsPerCRIT.to_s+"pt.]",2)
 
  #self.contents.draw_text(120,260,60,20,(hit_rate+actor.hit_bonus).to_s,0)
  #self.contents.draw_text(120,275,60,20,(evasion+actor.eva).to_s,0)
  #self.contents.draw_text(120,290,60,20,(crit+actor.cri_bonus).to_s,0)
 
  if LayoutMode == 1
    self.contents.font.color = Color.new(155,199,206,255)
    self.contents.font.size = Fontsize - 8
    if weapon1
      self.contents.draw_text(185+@exo,140+@eyo,100,20,Vocab::atk+"+"+weapon1.atk.to_s)
      self.contents.draw_text(219+@exo,140+@eyo,100,20,Vocab::def+"+"+weapon1.def.to_s)
      self.contents.draw_text(253+@exo,140+@eyo,100,20,Vocab::spi+"+"+weapon1.spi.to_s)
      self.contents.draw_text(287+@exo,140+@eyo,100,20,Vocab::agi+"+"+weapon1.agi.to_s)
    end
    if actor.two_swords_style == true
      if weapon2
        self.contents.draw_text(185+@exo,170+@eyo,100,20,Vocab::atk+"+"+weapon2.atk.to_s)
        self.contents.draw_text(219+@exo,170+@eyo,100,20,Vocab::def+"+"+weapon2.def.to_s)
        self.contents.draw_text(253+@exo,170+@eyo,100,20,Vocab::spi+"+"+weapon2.spi.to_s)
        self.contents.draw_text(287+@exo,170+@eyo,100,20,Vocab::agi+"+"+weapon2.agi.to_s)
      end
    else
      if shield
        self.contents.draw_text(185+@exo,170+@eyo,100,20,Vocab::atk+"+"+shield.atk.to_s)
        self.contents.draw_text(219+@exo,170+@eyo,100,20,Vocab::def+"+"+shield.def.to_s)
        self.contents.draw_text(253+@exo,170+@eyo,100,20,Vocab::spi+"+"+shield.spi.to_s)
        self.contents.draw_text(287+@exo,170+@eyo,100,20,Vocab::agi+"+"+shield.agi.to_s)
      end
    end
    if helm
      self.contents.draw_text(185+@exo,200+@eyo,100,20,Vocab::atk+"+"+helm.atk.to_s)
      self.contents.draw_text(219+@exo,200+@eyo,100,20,Vocab::def+"+"+helm.def.to_s)
      self.contents.draw_text(253+@exo,200+@eyo,100,20,Vocab::spi+"+"+helm.spi.to_s)
      self.contents.draw_text(287+@exo,200+@eyo,100,20,Vocab::agi+"+"+helm.agi.to_s)
    end
    if body
      self.contents.draw_text(185+@exo,230+@eyo,100,20,Vocab::atk+"+"+body.atk.to_s)
      self.contents.draw_text(219+@exo,230+@eyo,100,20,Vocab::def+"+"+body.def.to_s)
      self.contents.draw_text(253+@exo,230+@eyo,100,20,Vocab::spi+"+"+body.spi.to_s)
      self.contents.draw_text(287+@exo,230+@eyo,100,20,Vocab::agi+"+"+body.agi.to_s)
    end
    if accessory
      self.contents.draw_text(185+@exo,260+@eyo,100,20,Vocab::atk+"+"+accessory.atk.to_s)
      self.contents.draw_text(219+@exo,260+@eyo,100,20,Vocab::def+"+"+accessory.def.to_s)
      self.contents.draw_text(253+@exo,260+@eyo,100,20,Vocab::spi+"+"+accessory.spi.to_s)
      self.contents.draw_text(287+@exo,260+@eyo,100,20,Vocab::agi+"+"+accessory.agi.to_s)
    end
  end
 
if Mode == 2
  self.contents.font.size = Fontsize - 8
  self.contents.font.color = Color.new(155,199,206,255)
  self.contents.draw_text(23,100,125,20,"POINTS",2)
  self.contents.draw_text(29,110,125,20,"REQUIRED",2)
  self.contents.font.size = Fontsize - 4
  self.contents.draw_text(20,125,115,20,required(actor.atk-bonus_atk).to_s,2)
  self.contents.draw_text(20,155,115,20,required(actor.def-bonus_def).to_s,2)
  self.contents.draw_text(20,185,115,20,required(actor.spi-bonus_spi).to_s,2)
  self.contents.draw_text(20,215,115,20,required(actor.agi-bonus_agi).to_s,2)
end
 
  if LayoutMode == 2
    self.contents.font.color = Color.new(155,199,206,255)
    self.contents.font.size = Fontsize - 8
    if weapon1
      self.contents.draw_text(185+@exo2,140+OFFSET+@eyo,100,20,Vocab::atk+"+"+weapon.atk.to_s)
      self.contents.draw_text(185+@exo2,150+OFFSET+@eyo,100,20,Vocab::def+"+"+weapon.def.to_s)
      self.contents.draw_text(253+@exo2,140+OFFSET+@eyo,100,20,Vocab::spi+"+"+weapon.spi.to_s)
      self.contents.draw_text(253+@exo2,150+OFFSET+@eyo,100,20,Vocab::agi+"+"+weapon.agi.to_s)
    end
    if actor.two_swords_style == true
      if weapon2
        self.contents.draw_text(185+@exo,180+OFFSET+@eyo,100,20,Vocab::atk+"+"+weapon2.atk.to_s)
        self.contents.draw_text(185+@exo,190+OFFSET+@eyo,100,20,Vocab::def+"+"+weapon2.def.to_s)
        self.contents.draw_text(253+@exo,180+OFFSET+@eyo,100,20,Vocab::spi+"+"+weapon2.spi.to_s)
        self.contents.draw_text(253+@exo,190+OFFSET+@eyo,100,20,Vocab::agi+"+"+weapon2.agi.to_s)
      end
    else
      if shield
        self.contents.draw_text(185+@exo2,180+OFFSET+@eyo,100,20,Vocab::atk+"+"+shield.atk.to_s)
        self.contents.draw_text(185+@exo2,190+OFFSET+@eyo,100,20,Vocab::def+"+"+shield.def.to_s)
        self.contents.draw_text(253+@exo2,180+OFFSET+@eyo,100,20,Vocab::spi+"+"+shield.spi.to_s)
        self.contents.draw_text(253+@exo2,190+OFFSET+@eyo,100,20,Vocab::agi+"+"+shield.agi.to_s)
      end
    end
 
  if helm
    self.contents.draw_text(185+@exo2,220+OFFSET+@eyo,100,20,Vocab::atk+"+"+helm.atk.to_s)
    self.contents.draw_text(185+@exo2,230+OFFSET+@eyo,100,20,Vocab::def+"+"+helm.def.to_s)
    self.contents.draw_text(253+@exo2,220+OFFSET+@eyo,100,20,Vocab::spi+"+"+helm.spi.to_s)
    self.contents.draw_text(253+@exo2,230+OFFSET+@eyo,100,20,Vocab::agi+"+"+helm.agi.to_s)
  end
 
  if body
    self.contents.draw_text(185+@exo2,260+OFFSET+@eyo,100,20,Vocab::atk+"+"+body.atk.to_s)
    self.contents.draw_text(185+@exo2,270+OFFSET+@eyo,100,20,Vocab::def+"+"+body.def.to_s)
    self.contents.draw_text(253+@exo2,260+OFFSET+@eyo,100,20,Vocab::spi+"+"+body.spi.to_s)
    self.contents.draw_text(253+@exo2,270+OFFSET+@eyo,100,20,Vocab::agi+"+"+body.agi.to_s)
  end
 
  if accessory
    self.contents.draw_text(185+@exo2,300+OFFSET+@eyo,100,20,Vocab::atk+"+"+accessory.atk.to_s)
    self.contents.draw_text(185+@exo2,310+OFFSET+@eyo,100,20,Vocab::def+"+"+accessory.def.to_s)
    self.contents.draw_text(253+@exo2,300+OFFSET+@eyo,100,20,Vocab::spi+"+"+accessory.spi.to_s)
    self.contents.draw_text(253+@exo2,310+OFFSET+@eyo,100,20,Vocab::agi+"+"+accessory.agi.to_s)
  end
  end
end
  def required(base)
return (((base-1)/10)+2).floor
  end
 
end

#==============================================================================
# ** Lettuce_Window_Help
#------------------------------------------------------------------------------
#  This window displays property of each attribute
#==============================================================================
class Lettuce_Window_Help < Window_Base
  def initialize(index)
super(401,372,144,44)
self.contents = Bitmap.new(width-32,height-32)
self.contents.font.size = Fontsize - 6
refresh(index)
  end
 
  def refresh(index)
self.contents.clear
  self.contents.font.color = text_color(16)

    case index
    when 0
      self.contents.draw_text(0,-5,112,20,"HP + "+HPIncreaseBy.to_s)
    when 1
      self.contents.draw_text(0,-5,112,20,"MP + "+MPIncreaseBy.to_s)
    when 2
      self.contents.draw_text(0,-5,112,20,Vocab::atk+" + "+IncreaseBy.to_s)
    when 3
      self.contents.draw_text(0,-5,112,20,Vocab::def+" + "+IncreaseBy.to_s)
    when 4
      self.contents.draw_text(0,-5,112,20,Vocab::spi+" + "+IncreaseBy.to_s)
    when 5
      self.contents.draw_text(0,-5,112,20,Vocab::agi+" + "+IncreaseBy.to_s)
    when 6
      self.contents.draw_text(0,-5,112,20,"HIT + "+HITIncreaseBy.to_s)
    when 7
      self.contents.draw_text(0,-5,112,20,"EVA + "+EVAIncreaseBy.to_s)
    when 8
      self.contents.draw_text(0,-5,112,20,"CRIT + "+CRITIncreaseBy.to_s)
    end

 
  end
 
end
 

#==============================================================================
# ** Scene_Stat_Dist
#------------------------------------------------------------------------------
#  Performs stat distribution process :)
#==============================================================================
class Scene_Stat_Dist < Scene_Base
  def initialize(menu_index)
@menu_index = menu_index
  end
 
  def start
super
create_menu_background
  ihp = Vocab::hp
  imp = Vocab::mp
i1 = Vocab::atk
i2 = Vocab::def
i3 = Vocab::spi
i4 = Vocab::agi
  i5 = "HIT"
  i6 = "EVA"
  i7 = "CRIT"
@window_select = Window_Command.new(144,[ihp,imp,i1,i2,i3,i4,i5,i6,i7])
if $position
  @window_select.index = $position - 1
else
  @window_select.index = 0
end

@window_select.active = true
@window_select.x = 401
@window_select.y = 71

@window_top = Lettuce_Window_Top.new
@window_points = Lettuce_Window_Points.new(@menu_index)
@window_info = Lettuce_Window_Info.new(@menu_index)
@window_help = Lettuce_Window_Help.new(@window_select.index)
  end

  def terminate
super
dispose_menu_background
@window_top.dispose
@window_points.dispose
@window_info.dispose
@window_help.dispose
@window_select.dispose
  end
 
  def update
update_menu_background
#@window_points.refresh(@menu_index)
 
@window_select.update
#@window_help.refresh(@window_select.index)
  if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
    @window_help.refresh(@window_select.index)
  end
 
@changes = 0
if Input.trigger?(Input::B)
  Sound.play_cancel
  $scene = Scene_Map.new
elsif Input.trigger?(Input::R) or Input.trigger?(Input::RIGHT)
  @menu_index += 1
  @menu_index %= $game_party.members.size
  $scene = Scene_Stat_Dist.new(@menu_index)
elsif Input.trigger?(Input::L) or Input.trigger?(Input::LEFT)
  @menu_index += $game_party.members.size - 1
  @menu_index %= $game_party.members.size
  $scene = Scene_Stat_Dist.new(@menu_index)
elsif Input.trigger?(Input::C)
  #Points addition begins
  #which attribute
  if Mode == 1
do_point_reg
  elsif Mode == 2
do_point_rag
  end
end 

  end
 
  def do_point_reg
@att = @window_select.index
 
  actor = $game_party.members[@menu_index]
 
##weapons
  weapon = $data_weapons[actor.weapon_id]
  shield = $data_armors[actor.armor1_id]
  helm =$data_armors[actor.armor2_id]
  body =$data_armors[actor.armor3_id]
  accessory =$data_armors[actor.armor4_id]
 
  bonus_atk = 0
  bonus_def = 0
  bonus_spi = 0
  bonus_agi = 0
 
  if weapon
    bonus_atk += weapon.atk
    bonus_def += weapon.def
    bonus_spi += weapon.spi
    bonus_agi += weapon.agi
  end
  if shield
    bonus_atk += shield.atk
    bonus_def += shield.def
    bonus_spi += shield.spi
    bonus_agi += shield.agi
  end
    if helm
    bonus_atk += helm.atk
    bonus_def += helm.def
    bonus_spi += helm.spi
    bonus_agi += helm.agi
  end
    if body
    bonus_atk += body.atk
    bonus_def += body.def
    bonus_spi += body.spi
    bonus_agi += body.agi
  end
    if accessory
    bonus_atk += accessory.atk
    bonus_def += accessory.def
    bonus_spi += accessory.spi
    bonus_agi += accessory.agi
  end
 
  case @att
   
    when 0 #HP
if actor.points < PointsPerHP
  Sound.play_cancel
elsif actor.maxhp >= MaxHP
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].maxhp += HPIncreaseBy
      if $game_party.members[@menu_index].maxhp > MaxHP
        $game_party.members[@menu_index].maxhp = MaxHP
      end
  actor.points -= PointsPerHP
  @changes += 1
      $position = 1
end
   
    when 1 #MP
if actor.points < PointsPerMP
  Sound.play_cancel
elsif actor.maxmp >= MaxMP
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].maxmp += MPIncreaseBy
      if $game_party.members[@menu_index].maxmp > MaxMP
        $game_party.members[@menu_index].maxmp = MaxMP
      end
  actor.points -= PointsPerMP
  @changes += 1
      $position = 1
end
   
  when 2 #ATK
if actor.points < 1
  Sound.play_cancel
elsif (actor.atk-bonus_atk) >= MaxStat
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].atk += IncreaseBy
      if ($game_party.members[@menu_index].atk-bonus_atk) > MaxStat
        $game_party.members[@menu_index].atk = MaxStat+bonus_atk
      end
  actor.points -= 1
  @changes += 1
      $position = 1
end

  when 3 #DEF
if actor.points < 1
  Sound.play_cancel
elsif (actor.def-bonus_def) >= MaxStat
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].def += IncreaseBy
      if ($game_party.members[@menu_index].def-bonus_def) > MaxStat
        $game_party.members[@menu_index].def = MaxStat+bonus_def
      end
  actor.points -= 1
  @changes += 1
      $position = 2
end

  when 4 #SPI
if actor.points < 1
  Sound.play_cancel
elsif (actor.spi-bonus_spi) >= MaxStat
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].spi += IncreaseBy
      if ($game_party.members[@menu_index].spi-bonus_spi) > MaxStat
        $game_party.members[@menu_index].spi = MaxStat+bonus_spi
      end
  actor.points -= 1
  @changes += 1
      $position = 3
end
  when 5 #AGI
if actor.points < 1
  Sound.play_cancel
elsif (actor.agi-bonus_agi) >= MaxStat
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].agi += IncreaseBy
      if ($game_party.members[@menu_index].agi-bonus_agi) > MaxStat
        $game_party.members[@menu_index].agi = MaxStat+bonus_agi
      end
  actor.points -= 1
  @changes += 1
      $position = 4
end
 
 
    when 6 #HIT
if actor.points < PointsPerHIT
  Sound.play_cancel
elsif actor.hitr >= MaxHIT
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].hitr += HITIncreaseBy
      if $game_party.members[@menu_index].hitr > MaxHIT
        $game_party.members[@menu_index].hitr = MaxHIT
      end
  actor.points -= PointsPerHIT
  @changes += 1
      $position = 1
end
    when 7 #EVA
if actor.points < PointsPerEVA
  Sound.play_cancel
elsif actor.evar >= MaxEVA
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].evar += EVAIncreaseBy
      if $game_party.members[@menu_index].evar > MaxEVA
        $game_party.members[@menu_index].evar = MaxEVA
      end
  actor.points -= PointsPerEVA
  @changes += 1
      $position = 1
end
    when 8 #CRIT
if actor.points < PointsPerCRIT
  Sound.play_cancel
elsif actor.crir >= MaxCRIT
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].crir += CRITIncreaseBy
      if $game_party.members[@menu_index].crir > MaxCRIT
        $game_party.members[@menu_index].crir = MaxCRIT
      end
  actor.points -= PointsPerCRIT
  @changes += 1
      $position = 1
end
  end
 
  if @changes > 0
      @window_info.refresh(@menu_index)
      @window_points.refresh(@menu_index)
  #$scene = Scene_Stat_Dist.new(@menu_index)
  end
  end
 
  def do_point_rag
@att = @window_select.index
 
  actor = $game_party.members[@menu_index]
 
##weapons
  weapon = $data_weapons[actor.weapon_id]
  shield = $data_armors[actor.armor1_id]
  helm =$data_armors[actor.armor2_id]
  body =$data_armors[actor.armor3_id]
  accessory =$data_armors[actor.armor4_id]
 
  bonus_atk = 0
  bonus_def = 0
  bonus_spi = 0
  bonus_agi = 0
 
  if weapon
    bonus_atk += weapon.atk
    bonus_def += weapon.def
    bonus_spi += weapon.spi
    bonus_agi += weapon.agi
  end
  if shield
    bonus_atk += shield.atk
    bonus_def += shield.def
    bonus_spi += shield.spi
    bonus_agi += shield.agi
  end
    if helm
    bonus_atk += helm.atk
    bonus_def += helm.def
    bonus_spi += helm.spi
    bonus_agi += helm.agi
  end
    if body
    bonus_atk += body.atk
    bonus_def += body.def
    bonus_spi += body.spi
    bonus_agi += body.agi
  end
    if accessory
    bonus_atk += accessory.atk
    bonus_def += accessory.def
    bonus_spi += accessory.spi
    bonus_agi += accessory.agi
  end
 
  case @att
   
    when 0 #HP
if actor.points < PointsPerHP
  Sound.play_cancel
elsif actor.maxhp >= MaxHP
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].maxhp += HPIncreaseBy
      if $game_party.members[@menu_index].maxhp > MaxHP
        $game_party.members[@menu_index].maxhp = MaxHP
      end
  actor.points -= PointsPerHP
  @changes += 1
      $position = 1
end
   
    when 1 #MP
if actor.points < PointsPerMP
  Sound.play_cancel
elsif actor.maxmp >= MaxMP
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].maxmp += MPIncreaseBy
      if $game_party.members[@menu_index].maxmp > MaxMP
        $game_party.members[@menu_index].maxmp = MaxMP
      end
  actor.points -= PointsPerMP
  @changes += 1
      $position = 1
end
   
  when 2 #ATK
base_value = actor.atk-bonus_atk
points = actor.points
if enough_point(base_value,points)
  Sound.play_cancel
elsif (actor.atk-bonus_atk) >= MaxStat
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].atk += IncreaseBy
      if ($game_party.members[@menu_index].atk-bonus_atk) > MaxStat
        $game_party.members[@menu_index].atk = MaxStat+bonus_atk
      end
  actor.points -= required(base_value)
  @changes += 1
  $position = 1
end

  when 3 #DEF
base_value = actor.def-bonus_def
points = actor.points
if enough_point(base_value,points)
  Sound.play_cancel
elsif (actor.def-bonus_def) >= MaxStat
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].def += IncreaseBy
      if ($game_party.members[@menu_index].def-bonus_def) > MaxStat
        $game_party.members[@menu_index].def = MaxStat+bonus_def
      end
  actor.points -= required(base_value)
  @changes += 1
  $position = 2
end

  when 4 #SPI
base_value = actor.spi-bonus_spi
points = actor.points
if enough_point(base_value,points)
  Sound.play_cancel
elsif (actor.spi-bonus_spi) >= MaxStat
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].spi += IncreaseBy
      if ($game_party.members[@menu_index].spi-bonus_spi) > MaxStat
        $game_party.members[@menu_index].spi = MaxStat+bonus_spi
      end
  actor.points -= required(base_value)
  @changes += 1
  $position = 3
end
  when 5 #AGI
base_value = actor.agi-bonus_agi
points = actor.points
if enough_point(base_value,points)
  Sound.play_cancel
elsif (actor.agi-bonus_agi) >= MaxStat
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].agi += IncreaseBy
      if ($game_party.members[@menu_index].agi-bonus_agi) > MaxStat
        $game_party.members[@menu_index].agi = MaxStat+bonus_agi
      end
  actor.points -= required(base_value)
  @changes += 1
  $position = 4
end
    when 6 #HIT
if actor.points < PointsPerHIT
  Sound.play_cancel
elsif actor.hitr >= MaxHIT
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].hitr += HITIncreaseBy
      if $game_party.members[@menu_index].hitr > MaxHIT
        $game_party.members[@menu_index].hitr = MaxHIT
      end
  actor.points -= PointsPerHIT
  @changes += 1
      $position = 1
end
    when 7 #EVA
if actor.points < PointsPerEVA
  Sound.play_cancel
elsif actor.evar >= MaxEVA
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].evar += EVAIncreaseBy
      if $game_party.members[@menu_index].evar > MaxEVA
        $game_party.members[@menu_index].evar = MaxEVA
      end
  actor.points -= PointsPerEVA
  @changes += 1
      $position = 1
end
    when 8 #CRIT
if actor.points < PointsPerCRIT
  Sound.play_cancel
elsif actor.crir >= MaxCRIT
  Sound.play_cancel
else
      Sound.play_use_item
  $game_party.members[@menu_index].crir += CRITIncreaseBy
      if $game_party.members[@menu_index].crir > MaxCRIT
        $game_party.members[@menu_index].crir = MaxCRIT
      end
  actor.points -= PointsPerCRIT
  @changes += 1
      $position = 1
end
  end
  if @changes > 0
      @window_points.refresh(@menu_index)
      @window_info.refresh(@menu_index)
#$scene = Scene_Stat_Dist.new(@menu_index)
  end
  end
 
  def enough_point(base,points)
required = (((base-1)/10)+2).floor
if required > points
  return true
elsif required <= points
  return false
end
  end
 
  def required(base)
return (((base-1)/10)+2).floor
  end
 
end


#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  Giving game actor a point attribute
#  -> $game_party.member 
 
 
There's a syntax error in line 1045; The ".points" is supposed to be part of the comment from the previous line.
Also, when you switch to layout mode 2, you get a NameError in line 443.
I don't mind using layout 1, but I just thought you should know.

Other than that, it works just fine. Thanks for the fix. :smile:
 
On lines 443-446 change weapon to weapon1. and the .points on line 1045 are in the comments but when putting it onto the forum it removed it. Odd.
 

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