N.A.S.T.Y Extra Stats

Joined
Oct 21, 2014
Messages
30
Reaction score
8
First Language
English
Primarily Uses
RMVXA
N.A.S.T.Y. Extra Stats(Version 1.1)




By: Nelderson




Updated: 3/27/12


Introduction

This script gives actors and enemies extra stats that you can use anywhere in your game!

Features

- New Stats for your game.

- Define a formula for each new stat you make.

- Use these new stats in skill formulas, or whatever else you feel like.

- See your extra stats on the Status screen (Up to 6).

- Equipment can increase these stats with a notetag.

How to Use

The instructions on the script itself has everything you need!

Demo

I'll make one if you guys want one!

Script

#===============================================================================
# N.A.S.T.Y. Extra Stats
# Nelderson's Awesome Scripts To You
# By: Nelderson
# Made On: 12/19/2011
# Last Updated : 3/27/2012
#===============================================================================
# Update History:
# - Version 1.1 - Cleaned up some sheep, and added enemies xstats for Enemies!
# - Version 1.0 - Initial release, made for the sheep of it :p
#===============================================================================
# *Notes:
# - This script can be used to make all sorts of stats that can derive from
# an actor's level, and base stats.
#
# - This thing can be a pain to set up, but once it's done, it can be a very
# powerful way to include new stats into your game!
#
# - Made a quick edit to the status screen to show up to 6 stats!
#
# *Usage
#
# -First is the STATS section. This is an array that holds all the new
# stats that everything else gets info from.
#
# - Next fill out the Default Level formula(Use Example Below as a guide)
# *ANYTHING that an actor has, you can base it off of (Except other XSTATS!)
# (level, hp, mp, atk, spi, agi, maxhp, etc.)
#
# -You can use the ACTOR and ENEMY NOTETAGS to customize
# the formulas for each actor.
#
# Examples:
# Place the following in an actor's notebox(You must make one for each stat):
# <xstat>
# :str => '(level/3.5) + 16',
# :con => '(level/5.6) + 12',
# :dex => '(level/5.25) + 15 + agi',
# :int => '(level/10.5) + 10',
# :wis => '(level/10.5) + 10',
# :cha => '(level/10.5) + 10',
# <xstat_end>
#
# Or you can place this in an actor's/enemy's notebox
# <xstat>
# :str => 15,
# :con => 14,
# :dex => 13,
# :int => 12,
# :wis => 11,
# :cha => 0,
# <xstat_end>
#
# - This script also uses notetags for weapons and armors to increase xstats
# if you want. Just place in a notebox:
#
# <weapon_xstat: STAT x> , where STAT is th name of the new stat
#
# Ex. <weapon_xstat: str 5> , would raise the actor's str +5
#
# *For Scripters
#
# -If you want to access the stats, just use:
# actor.xstat.STAT - Where STAT is the name of the new stat
#
# Ex. $game_actors[1].xstat.str , will return actor 1's str
#
#===============================================================================
# Credits:
# -Nelderson and Zetu
# Original Script was made by Zetu, and I spiced the sheep out of it!
#===============================================================================

module Z26

STATS = [:str,:con,:dex,:int,:wis,:cha]

#Default xstat formulas for ACTORS
DEFAULT_LEVEL_FORMULA =
{
:str => '(level/3.5) + 16 + atk',
:con => '(level/5.6) + 12',
:dex => '(level/5.25) + 15 + agi',
:int => '(level/10.5) + 10',
:wis => '(level/10.5) + 10',
:cha => '(level/10.5) + 10',
}

#Default xstat formulas for ENEMIES
DEFAULT_FOR_ENEMIES =
{
:str => 0,
:con => 0,
:dex => 0,
:int => 0,
:wis => 0,
:cha => 0,
}

def self.actor_level_formulas(actor_id)
jhh = ""
strin = $data_actors[actor_id].get_start_end_cache
strin.each do |i|
jhh += i
end
return DEFAULT_LEVEL_FORMULA if strin == "" or strin == []
return eval("{#{jhh}}")
end

def self.enemy_stats(enemy_id)
jhh = ""
strin = $data_enemies[enemy_id].get_start_end_cache
strin.each do |i|
jhh += i
end
return DEFAULT_FOR_ENEMIES if strin == "" or strin == []
return eval("{#{jhh}}")
end

#=============================================================================
SYMBOLS = []
for stat in STATS
SYMBOLS.push(stat)
end
Xstats = Struct.new(*SYMBOLS)
end

class Game_Enemy < Game_Battler
attr_accessor :xstat

alias z26_enemy_set initialize unless $@
def initialize(*args)
z26_enemy_set(*args)
@xstat = Z26::Xstats.new(*([0]*Z26::STATS.size))
for stat in Z26::STATS
z26variate_stats(stat)
end
end

def z26variate_stats(stat)
return if Z26.enemy_stats(@enemy_id)[stat].nil?
if Z26.enemy_stats(@enemy_id)[stat].is_a?(String)
set_in = eval(Z26.enemy_stats(@enemy_id)[stat]).to_i
eval("@xstat.#{stat} += #{set_in}")
else
set_in = Z26.enemy_stats(@enemy_id)[stat]
@xstat[stat] += set_in
end
end
end

class Game_Actor < Game_Battler
attr_accessor :xstat

alias z26_s setup unless $@
def setup(actor_id)
z26_s(actor_id)
@xstat = Z26::Xstats.new(*([0]*Z26::STATS.size))
for item in equips.compact
z26variate_equip(item)
end
for stat in Z26::STATS
z26variate_stats(stat, @level)
end
end

alias z26_change_equip change_equip
def change_equip(equip_type, item, test = false)
last_item = equips[equip_type]
z26_change_equip(equip_type, item)
z26variate_equip(item)
z26variate_equip(last_item, false)
end

#=====================#
##EDITED BY NELDERSON##
#=====================#
def z26variate_equip(item, adding = true)
return if item.nil?
for line in item.note.split(/[\r\n]+/).each{ |a|
case a
when /<weapon_xstat:[ ](.*)[ ](\d+)>/i
if Z26::STATS.include?(eval(":" + $1))
if adding
eval("@xstat.#{$1} += #{$2}")
else
eval("@xstat.#{$1} -= #{$2}")
end
end
end
}
end
end

def z26variate_stats(stat, level, adding = true)
return if Z26.actor_level_formulas(@actor_id)[stat].nil?
if Z26.actor_level_formulas(@actor_id)[stat].is_a?(String)
amount = eval(Z26.actor_level_formulas(@actor_id)[stat]).to_i
else
amount = Z26.actor_level_formulas(@actor_id)[stat]
end
if adding
eval("@xstat.#{stat} += #{amount}")
else
eval("@xstat.#{stat} -= #{amount}")
end
end

alias z26level_up level_up unless $@
def level_up
for stat in Z26::STATS
z26variate_stats(stat, @level, false)
end
z26level_up
for stat in Z26::STATS
z26variate_stats(stat, @level)
end
end
end

class Window_Status < Window_Selectable
def draw_block3(y)
draw_parameters(0, y)
draw_equipments(344, y)#288
draw_xstat_parameters(172, y)
end

def draw_xstat_parameters(x, y)
@actor.xstat.size.times {|i|
draw_actor_xstat_param(@actor, x, y + line_height * i, i) }
end
end

class Window_Base < Window
def draw_actor_xstat_param(actor, x, y, param_id)
id = Z26::STATS[param_id]
change_color(system_color)
draw_text(x, y, 120, line_height, id.capitalize)
change_color(normal_color)
draw_text(x + 120, y, 36, line_height, actor.xstat[id], 2)
end
end

class RPG::BaseItem
def get_start_end_cache
record = false
temp = []
self.note.split(/[\r\n]+/).each do |line|
if line =~ /<xstat>/i
record = true
elsif line =~ /<xstat_end>/i
record = false
end
if record
temp << line
end
end
return nil if temp == ""
temp.delete_at(0)
temp
end
end

Code:
FAQ

Q: What does N.A.S.T.Y. stand for?

A: Nelderson's Awesome Scripts to You!

Credit and Thanks

- Nelderson

- Zetu, for her original script, and showing me the value of Structs <3
I know this is a really late reply but Can you have 8 more stats with this? Because for my game Detective Raven she is going to need more stats, I just have to figure out how many xD Also would this be able to be used in a game that is being sold as long as I credit you and the other person that you credited.
 

Ninjakillzu

Veteran
Veteran
Joined
Aug 19, 2013
Messages
263
Reaction score
218
First Language
English
Primarily Uses
RMVXA
I know this is a really late reply but Can you have 8 more stats with this? Because for my game Detective Raven she is going to need more stats, I just have to figure out how many xD Also would this be able to be used in a game that is being sold as long as I credit you and the other person that you credited.
Yes, you can have 8 more stats. For an older version of the of the games I'm making, I had at least 10 extra stats. You just have to put them in the correct areas of the script. If you are using Yanfly's Ace Status Menu, you can make as many that will fit in the "properties" screen.
 

Ninjakillzu

Veteran
Veteran
Joined
Aug 19, 2013
Messages
263
Reaction score
218
First Language
English
Primarily Uses
RMVXA
I have noticed something weird with this script. Stat modifiers such as atk, agi, mdf, etc are not updated in the default and character specific formulas when gear is equipped. For instance, let's say I have 5 atk, and the default formula for STR: 1 + atk. Without atk increasing gear, atk is currently 6. If I equip some gear that increases my atk by another 5, then the total is still shown as 6, when it should be 11. The script doesn't seem to refresh the displayed number. It seems like the formula is only calculated once and not every time there is a change in the default stats.
 

NeoMasterZX

Villager
Member
Joined
Jun 14, 2018
Messages
7
Reaction score
0
First Language
English
Primarily Uses
RMVXA
It was asked like, five years ago, but is there a way to create growth items to increase or decrease the new stats using this script? I have 0 scripting know-how so I can't figure it out on my own.
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

Couple hours of work. Might use in my game as a secret find or something. Not sure. Fancy though no? :D
Holy stink, where have I been? Well, I started my temporary job this week. So less time to spend on game design... :(
Cartoonier cloud cover that better fits the art style, as well as (slightly) improved blending/fading... fading clouds when there are larger patterns is still somewhat abrupt for some reason.
Do you Find Tilesetting or Looking for Tilesets/Plugins more fun? Personally I like making my tileset for my Game (Cretaceous Park TM) xD
How many parameters is 'too many'??

Forum statistics

Threads
105,860
Messages
1,017,038
Members
137,567
Latest member
sashalag
Top