0.0/5 rating (0 votes)
Hits: 2862

Level Up Point Spend System

Friday, 10 April 2009
  • Author: Drago del fato
  • Version: 2.4

Introduction

This script gives the party members the ability to increase their stats(HP/SP, Integrity, Strength, Speed etc.) with points gained each time the player levels up. The script integrates a system where you can use these points once you enter the status window and a player has leveled up(see screenshots belows)

Screenshots

Video

Get Adobe Flash player

Script Download

  • Hits: 79

The Script

 

#===================================================== # Drago del fato's Level Up Point Spend System # --------------------------------------------- # Written by Drago del Fato # Version 2.4 # Just insert a new script above main and call it whatever you want. #===================================================== #--Res Text PSPEND_LVUPTEXT = "New Level! Do you want to Level up?" PSPEND_SPTEXT = "Special Points Left:" PSPEND_ANSWERS = ["Yes!","No"] PSPEND_HELP_TEXT = ["Change Strength...","Change Agility...", "Change Dexterity...","Change Inteligence...","Change Maximum Health Points...", "Change Maximum Skill Points...","Reset all Values to Normal...","Finnish Editing...."] PSPEND_B1 = "Reset" PSPEND_B2 = "Done!" LVUP_TEXT = "(Lv Up!)" DESC_TEXT = "LEFT - Decrease, RIGHT - Increase,C - Confirm,B - Exit" #-- Other Res SPADD = 6 AGILITY_ADD = 1 DEXTERITY_ADD = 1 INTELIGENCE_ADD = 1 STRENGTH_ADD = 1 HP_ADD = 4 SP_ADD = 3 #-- If you aren't experienced scripter then don't change lines below!!! #--Global Variables $PSPEND_POINTS = [] $PSPEND_ACTORS = [] $PSPEND_ADD = [1,1,1,1,1,1] $PSPEND_ATTR = [1,1,1,1,1,1] $PSPEND_RET = 0 #== Part One - Class for Setting and Getting Attributes from Actors class PSPEND_GET_SET_ACTOR_ATRIBUTTES def initialize(type) if !$BTEST case type when 0 return when 1 get_attributes when 2 set_attributes end end end def get_attributes(actorid) @actor = $game_actors[actorid] $PSPEND_ATTR[1] = @actor.str $PSPEND_ATTR[2] = @actor.agi $PSPEND_ATTR[3] = @actor.dex $PSPEND_ATTR[4] = @actor.int $PSPEND_ATTR[5] = @actor.maxhp $PSPEND_ATTR[6] = @actor.maxsp end def set_attributes(actorid) @actor = $game_actors[actorid] @actor.str = $PSPEND_ATTR[1] @actor.agi = $PSPEND_ATTR[2] @actor.dex = $PSPEND_ATTR[3] @actor.int = $PSPEND_ATTR[4] @actor.maxhp = $PSPEND_ATTR[5] @actor.maxsp = $PSPEND_ATTR[6] end end #-- End of Part One #-- Part Two - Disabling actor attributes so that they have same attributes at the next level! class Game_Actor def exp=(exp) @exp = [[exp, 9999999].min, 0].max while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0 $actor_attr.get_attributes(@actor_id) @level += 1 $actor_attr.set_attributes(@actor_id) $PSPEND_POINTS[@actor_id - 1] += SPADD $PSPEND_ACTORS[@actor_id - 1] = true for j in $data_classes[@class_id].learnings if j.level == @level learn_skill(j.skill_id) end end end while @exp < @exp_list[@level] $actor_attr.get_attributes(@actor_id) @level -= 1 $actor_attr.set_attributes(@actor_id) $PSPEND_ACTORS[@actor_id - 1] = false end @hp = [@hp, self.maxhp].min @sp = [@sp, self.maxsp].min end def level=(level) if level < self.level $actor_attr.get_attributes(@actor_id) level = [[level, $data_actors[@actor_id].final_level].min, 1].max $actor_attr.set_attributes(@actor_id) $PSPEND_ACTORS[@actor_id - 1] = false self.exp = @exp_list[level] return end $actor_attr.get_attributes(@actor_id) level = [[level, $data_actors[@actor_id].final_level].min, 1].max $actor_attr.set_attributes(@actor_id) $PSPEND_POINTS[@actor_id - 1] += SPADD $PSPEND_ACTORS[@actor_id - 1] = true self.exp = @exp_list[level] return end end #-- End of Part Two #-- Part Three # Changing the code so that some other variables will be added... class Scene_Title def command_new_game $game_system.se_play($data_system.decision_se) Audio.bgm_stop Graphics.frame_count = 0 $game_temp = Game_Temp.new $game_system = Game_System.new $game_switches = Game_Switches.new $game_variables = Game_Variables.new $game_self_switches = Game_SelfSwitches.new $game_screen = Game_Screen.new $game_actors = Game_Actors.new $game_party = Game_Party.new $game_troop = Game_Troop.new $game_map = Game_Map.new $game_player = Game_Player.new #edit $actor_attr = PSPEND_GET_SET_ACTOR_ATRIBUTTES.new(0) for i in 0..$data_actors.size - 2 $PSPEND_ACTORS.push(false) $PSPEND_POINTS.push(0) end #end edit $game_party.setup_starting_members $game_map.setup($data_system.start_map_id) $game_player.moveto($data_system.start_x, $data_system.start_y) $game_player.refresh $game_map.autoplay $game_map.update $scene = Scene_Map.new end def battle_test $data_actors = load_data("Data/BT_Actors.rxdata") $data_classes = load_data("Data/BT_Classes.rxdata") $data_skills = load_data("Data/BT_Skills.rxdata") $data_items = load_data("Data/BT_Items.rxdata") $data_weapons = load_data("Data/BT_Weapons.rxdata") $data_armors = load_data("Data/BT_Armors.rxdata") $data_enemies = load_data("Data/BT_Enemies.rxdata") $data_troops = load_data("Data/BT_Troops.rxdata") $data_states = load_data("Data/BT_States.rxdata") $data_animations = load_data("Data/BT_Animations.rxdata") $data_tilesets = load_data("Data/BT_Tilesets.rxdata") $data_common_events = load_data("Data/BT_CommonEvents.rxdata") $data_system = load_data("Data/BT_System.rxdata") Graphics.frame_count = 0 $game_temp = Game_Temp.new $game_system = Game_System.new $game_switches = Game_Switches.new $game_variables = Game_Variables.new $game_self_switches = Game_SelfSwitches.new $game_screen = Game_Screen.new $game_actors = Game_Actors.new $game_party = Game_Party.new $game_troop = Game_Troop.new $game_map = Game_Map.new $game_player = Game_Player.new #edit $actor_attr = PSPEND_GET_SET_ACTOR_ATRIBUTTES.new(0) for i in 0..$data_actors.size - 2 $PSPEND_ACTORS.push(false) $PSPEND_POINTS.push(0) end #end edit $game_party.setup_battle_test_members $game_temp.battle_troop_id = $data_system.test_troop_id $game_temp.battle_can_escape = true $game_map.battleback_name = $data_system.battleback_name $game_system.se_play($data_system.battle_start_se) $game_system.bgm_play($game_system.battle_bgm) $scene = Scene_Battle.new end end #End of Part Three #Mid Part - Adding Draw Actor Battler class Window_Base < Window def draw_actor_battler(actor, x, y) bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue) cw =bitmap.width ch = bitmap.height src_rect = Rect.new(0, 0, cw,ch) self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect) end def draw_actor_name(actor, x, y) self.contents.font.color = normal_color self.contents.draw_text(x, y, 120, 32, actor.name) cx = self.contents.text_size(actor.name).width if $PSPEND_ACTORS[actor.id - 1] self.contents.font.color = crisis_color self.contents.draw_text(x + cx, y, 90, 32, " " + LVUP_TEXT) end self.contents.font.color = normal_color end end #End of Mid Part #Part Four - The Hard one! Making Custom Windows class PSPEND_CUSTOM_WINDOW < Window_Selectable def initialize(winactorid) super(0, 64, 640, 480 - 64) commands = [1,2,3,4,5,6,7,8] @item_max = commands.size @commands = commands self.contents = Bitmap.new(width - 32,height - 32) self.contents.font.name = "Tahoma" self.contents.font.size = 20 @actor = $game_actors[winactorid + 1] @y = 10 $PSPEND_RET = $PSPEND_POINTS[@actor.id - 1] refresh(true) self.index = 0 end def refresh(ret = false) self.contents.clear @y = 10 if ret $PSPEND_ADD[1] = @actor.str $PSPEND_ADD[2] = @actor.agi $PSPEND_ADD[3] = @actor.dex $PSPEND_ADD[4] = @actor.int $PSPEND_ADD[5] = @actor.maxhp $PSPEND_ADD[6] = @actor.maxsp $PSPEND_POINTS[@actor.id - 1] = $PSPEND_RET ret = false end draw_actor_battler(@actor,20 + 100,@y + 200) draw_actor_name(@actor,20 + 32,@y + 220) cx = self.contents.text_size(PSPEND_SPTEXT + $PSPEND_POINTS[@actor.id - 1].to_s).width self.contents.draw_text(52,@y + 252,cx,32,PSPEND_SPTEXT + $PSPEND_POINTS[@actor.id - 1].to_s) cx = self.contents.text_size(DESC_TEXT).width self.contents.draw_text(52,self.height - 32 - 40,cx,32,DESC_TEXT) @y += 150 @x = 260 for i in 0...@item_max draw_item(i, normal_color) end end def draw_item(index, color) if $PSPEND_POINTS[@actor.id - 1] <= 0 self.contents.font.color = disabled_color else self.contents.font.color = color end rect = Rect.new(@x, 32 * index, self.contents.width - 8, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) case index when 0 self.contents.draw_text(rect, $data_system.words.str) cx = self.contents.text_size(@actor.str.to_s + " > " + $PSPEND_ADD[1].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 ,@actor.str.to_s + " > " + $PSPEND_ADD[1].to_s) when 1 self.contents.draw_text(rect, $data_system.words.agi ) cx = self.contents.text_size(@actor.agi.to_s + " > " + $PSPEND_ADD[2].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 ,@actor.agi.to_s + " > " + $PSPEND_ADD[2].to_s) when 2 self.contents.draw_text(rect, $data_system.words.dex ) cx = self.contents.text_size( @actor.dex.to_s + " > " + $PSPEND_ADD[3].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 , @actor.dex.to_s + " > " + $PSPEND_ADD[3].to_s) when 3 self.contents.draw_text(rect, $data_system.words.int ) cx = self.contents.text_size(@actor.int.to_s + " > " + $PSPEND_ADD[4].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 ,@actor.int.to_s + " > " + $PSPEND_ADD[4].to_s) when 4 self.contents.draw_text(rect, $data_system.words.hp ) cx = self.contents.text_size( @actor.maxhp.to_s + " > " + $PSPEND_ADD[5].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 , @actor.maxhp.to_s + " > " + $PSPEND_ADD[5].to_s) when 5 self.contents.draw_text(rect, $data_system.words.sp ) cx = self.contents.text_size(@actor.maxsp.to_s + " > " + $PSPEND_ADD[6].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 ,@actor.maxsp.to_s + " > " + $PSPEND_ADD[6].to_s) when 6 self.contents.font.color = color self.contents.draw_text(rect,PSPEND_B1) when 7 self.contents.font.color = color self.contents.draw_text(rect,PSPEND_B2) end end def disable_item(index) draw_item(index, disabled_color) end def update_cursor_rect if @index < 0 self.cursor_rect.empty return end row = @index / @column_max if row < self.top_row self.top_row = row end if row > self.top_row + (self.page_row_max - 1) self.top_row = row - (self.page_row_max - 1) end cursor_width = self.width / @column_max - 32 x = @index % @column_max * (cursor_width + 32) y = @index / @column_max * 32 - self.oy self.cursor_rect.set(@x - 10, y, self.width - @x - 17, 32) end end #End of Part Four #Part Five - Making Scene_Status to show level up window when character #get's a new level class Scene_Status def initialize(actor_index = 0, equip_index = 0) @actor_index = actor_index end def main @actor = $game_party.actors[@actor_index] $ACTORD = @actor @status_window = Window_Status.new(@actor) Graphics.transition if $PSPEND_ACTORS[@actor.id - 1] @h = Window_Help.new @h.set_text(PSPEND_LVUPTEXT) @h.y = 100 @h.z = 9997 @c = Window_Command.new(140,PSPEND_ANSWERS) @c.y = 170 @c.x = 200 @c.z = 9998 loop do Graphics.update Input.update update_pspend_lvup_win if $scene != self break end end Graphics.freeze @h.z = 0 @c.z = 1 @status_window.z = 2 @status_window.dispose @h.dispose @c.dispose return end loop do Graphics.update Input.update update if $scene != self break end end @status_window.dispose end def update_pspend_lvup_win @c.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $PSPEND_ACTORS[@actor.id - 1] = false $scene = Scene_Menu.new return end if Input.trigger?(Input::C) case @c.index when 0 $game_system.se_play($data_system.decision_se) $scene = Scene_PSPEND_Main_Screen.new(@actor.id - 1) return when 1 $game_system.se_play($data_system.cancel_se) $PSPEND_ACTORS[@actor.id - 1] = false $scene = Scene_Menu.new return end end end end #End of Part Five #Part Six - Hell is coming...AAAAAAAAH! class Scene_PSPEND_Main_Screen def initialize(actor_id_index) @actor_ind = actor_id_index main end def main @help = Window_Help.new @spend = PSPEND_CUSTOM_WINDOW.new(@actor_ind) @spend.y = 64 @spend.z = 99998 @help.z = 99998 Graphics.transition loop do Graphics.update Input.update update_spend_help_win if $scene != self break end end Graphics.freeze @spend.dispose @help.dispose end def update_spend_help_win @spend.update @help.update @help.set_text(PSPEND_HELP_TEXT[@spend.index]) if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Menu.new $PSPEND_POINTS[@actor_ind] = $PSPEND_RET $PSPEND_ACTORS[@actor_ind] = false return end if Input.repeat?(Input::RIGHT) unless $PSPEND_POINTS[@actor_ind] > 0 $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.cursor_se) $PSPEND_POINTS[@actor_ind] -= 1 case @spend.index when 0 $PSPEND_ADD[1] += STRENGTH_ADD when 1 $PSPEND_ADD[2] += AGILITY_ADD when 2 $PSPEND_ADD[3] += DEXTERITY_ADD when 3 $PSPEND_ADD[4] += INTELIGENCE_ADD when 4 $PSPEND_ADD[5] += HP_ADD when 5 $PSPEND_ADD[6] += SP_ADD when 6 $PSPEND_POINTS[@actor_ind] += 1 when 7 $PSPEND_POINTS[@actor_ind] += 1 end @spend.refresh return end if Input.repeat?(Input::LEFT) unless $PSPEND_POINTS[@actor_ind] < $PSPEND_RET $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.cursor_se) case @spend.index when 0 if $PSPEND_ADD[1] <= $ACTORD.str $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[1] -= STRENGTH_ADD when 1 if $PSPEND_ADD[2] <= $ACTORD.agi $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[2] -= AGILITY_ADD when 2 if $PSPEND_ADD[3] <= $ACTORD.dex $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[3] -= DEXTERITY_ADD when 3 if $PSPEND_ADD[4] <= $ACTORD.int $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[4] -= INTELIGENCE_ADD when 4 if $PSPEND_ADD[5] <= $ACTORD.maxhp $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[5] -= HP_ADD when 5 if $PSPEND_ADD[6] <= $ACTORD.maxsp $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[6] -= SP_ADD when 6 $PSPEND_POINTS[@actor_ind] -= 1 when 7 $PSPEND_POINTS[@actor_ind] -= 1 end $PSPEND_POINTS[@actor_ind] += 1 @spend.refresh return end if Input.trigger?(Input::C) case @spend.index when 6 @spend.refresh(true) when 7 $ACTORD.str = $PSPEND_ADD[1] $ACTORD.agi = $PSPEND_ADD[2] $ACTORD.dex = $PSPEND_ADD[3] $ACTORD.int = $PSPEND_ADD[4] $ACTORD.maxhp = $PSPEND_ADD[5] $ACTORD.maxsp = $PSPEND_ADD[6] $game_system.se_play($data_system.decision_se) $scene = Scene_Menu.new $PSPEND_ACTORS[@actor_ind] = false return end end end end #End of Part Six - Yipee!!! I made it! #Part Seven - Save Load part! class Scene_Save < Scene_File def write_save_data(file) characters = [] for i in 0...$game_party.actors.size actor = $game_party.actors[i] characters.push([actor.character_name, actor.character_hue]) end Marshal.dump(characters, file) Marshal.dump(Graphics.frame_count, file) $game_system.save_count += 1 $game_system.magic_number = $data_system.magic_number Marshal.dump($game_system, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_screen, file) Marshal.dump($game_actors, file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) Marshal.dump($PSPEND_POINTS,file) Marshal.dump($PSPEND_ACTORS,file) Marshal.dump($actor_attr,file) end end # -- And now for the load screen class Scene_Load < Scene_File def read_save_data(file) characters = Marshal.load(file) Graphics.frame_count = Marshal.load(file) $game_system = Marshal.load(file) $game_switches = Marshal.load(file) $game_variables = Marshal.load(file) $game_self_switches = Marshal.load(file) $game_screen = Marshal.load(file) $game_actors = Marshal.load(file) $game_party = Marshal.load(file) $game_troop = Marshal.load(file) $game_map = Marshal.load(file) $game_player = Marshal.load(file) $PSPEND_POINTS = Marshal.load(file) $PSPEND_ACTORS = Marshal.load(file) $actor_attr = Marshal.load(file) if $game_system.magic_number != $data_system.magic_number $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end $game_party.refresh end end #-- END OF SAVE AND LOAD SCREEN #-- END OF THE SCRIPT #======================= # Written by Drago del fato #=======================

Instructions

Copy and Paste this script above the "Main" script in RPG Maker XP's Script editor.

Comments (10)

  • MasterJiet
    MasterJiet
    19 August 2010 at 15:21 |

    Hiya ;)

    I can't get the script to work...

    Could you tell me how it will work?
    Cause I really want this one xcD

    regards

    • Marked
      Marked
      21 August 2010 at 02:21 |

      Hey MasterJiet, I added a video for you so you can see how it works.

      • MasterJiet
        MasterJiet
        21 August 2010 at 17:26 |

        Thnx ^^ But I just figured otu the problem it didn't work on a menu script I'm using for my game xcD So now I'm figuring it out. It's called ** Ryex's_Collapsing_CMS. Also I tried the system without the menu and it worked good ;) greetz

        • MasterJiet
          MasterJiet
          21 August 2010 at 17:59 |

          Okay I had it with script adjustments this was the second time I had to mve my game to a whole new project and I'm tired of it... But still I want to work with your script. You are a scripter so can't you find a way to let your script and **Ryex's_Collapsing_CMS work together??? Greetz

    • chinas
      chinas
      25 August 2010 at 19:00 |

      It did't work cuz you didn't download the script. U used the button show script u copied and pasted it. You should have noticed by doing that there is only 1 line on the script try downloading it opening the text file copying all of it and paste it above main it should work !

  • MasterJiet
    MasterJiet
    23 August 2010 at 17:07 |

    Hi!!! I got it to work!!!:D :D With the Menu-system!!! In that system there was a script for handling custom scenes so just 2 minutes before I just thought of, hey let's try this out and it worked on my script tester game :D:D Regards:D

    • Marked
      Marked
      23 August 2010 at 22:45 |

      Awesome, glad you got it sorted.

  • MasterJiet
    MasterJiet
    22 August 2010 at 12:46 |

    okay thnx:)

Leave a comment

Please login to leave a comment.

Archive Stats

Login to remove our Sponsored Links.

Latest Comments

  • Indeed it is.
    Kiriashi

    Kiriashi

    03. September, 2010 |

  • o.o That link gives a corupt zip file
    Darkwick

    Darkwick

    03. September, 2010 |

  • I'm having trouble adding custom face sets. Can anyone help me figure this out?
    VianoceGames

    VianoceGames

    28. August, 2010 |

  • Why does it matter?

    It won't effect the script. I tested it; works fine.
    Kiriashi

    Kiriashi

    26. August, 2010 |

  • I tell you how to do it, and you go and tell him wrong... silly Marked.

    Its like this:

    $scene = Scene_Beastairy.new
    Kiriashi

    Kiriashi

    26. August, 2010 |

  • You can't. Use the second one, it allows full screen only when the game is played when you open Game.exe. When you test play it from the...
    Marked

    Marked

    26. August, 2010 |

  • Use the call script command and type this:
    $scene=Game_Beastairy.new
    Marked

    Marked

    26. August, 2010 |

  • can't you just remove the japanese characters? I'm pretty sure the author isn't japanese so that's strange they're there. Its super old...
    Marked

    Marked

    26. August, 2010 |

  • I added screens. Everytime you test run the game, your data is backed up. Prevents the error you get when you open your game and it says...
    Marked

    Marked

    26. August, 2010 |

  • Just make sure your characterset and battler graphic have the same filename
    Marked

    Marked

    26. August, 2010 |

Affiliates