I'd like a script which creates a second "MP" (for my intents and purposes, I shall call it SP). It acts just like MP and skills can cost SP, MP, or both. Otherwise, it's MP under a different name. If I could get a script to do that for me... I'd really appreciate it, thanks.
i know there is a "jp" system you could probably rename, i never used it myself however i believe it works as a second cost for skills much like you describe.
http://rmrk.net/index.php/topic,42396.0.html
i can't for the life of me remember if it's even on there, the computer i'm on currently hasn't got any of my files on it, i'll check for you later unless someone else replies. (there are demos on there displaying scripts, look at a few... i think it may be on http://www.rpgmakervx.net/index.php?showtopic=19726 )
The JP system is in the YEM demo which is on that page. But I don't think that's what you're after.
So basically, you want another MP system that is displayed in actor's statuses, skill costs and can be recovered through potions? That would actually be quite easy if you aren't using any other scripts.
@Wakka: Yes, that's exactly what I'm looking for! :D
Err... I am using these scripts though:
YERD_Victory Aftermath
YERD_Extended Equip
KGC_EquipExtension
SSS Passive Skills
YERD_CustomBattleAction
YERD_Subclass
YERD_Custom_Skill_Effects
:P
I think I have all of those scripts somewhere. I'll look into it.
I added another script which I think is quite relevant:
YERD Party Display:
[spoiler]#===============================================================================
#
# Yanfly Engine RD - Display Party Data 2.0
# Last Date Updated: 2009.05.30
# Level: Easy
#
# This pretty much changes the party information window in battles to show the
# party member names horizontally than vertically. When structured as such,
# you'll be able to see the party members' faces and/or sprites. With the new
# arrangement, the player can also see up to four status effects on each actor
# as opposed to the original two. A big difference.
#
# Version 2.0 gives options to change font size, show extra gauges (for rage and
# morale) and no longer hides the actor sprite behind the states.
#
#===============================================================================
# Instructions
#===============================================================================
#
# Just put this script under Materials and that's it. If you'd like to change
# other settings such as showing the face graphic or changing its opacity, just
# scroll down a bit and make adjustments as necessary.
#
#===============================================================================
# Updates:
# ----------------------------------------------------------------------------
# o 2009.05.30 - Fixed max states shown bug.
# - Greatly improved drawing efficiency.
# o 2009.05.16 - Started and finished version 2.0.
# o 2009.02.23 - Started script and finished.
#===============================================================================
#
# Compatibility
# - Alias: Window_BattleStatus, initialize
# - Overwrites: Window_BattleStatus, draw_item
#
#===============================================================================
$imported = {} if $imported == nil
$imported["DisplayPartyData"] = true
module YE
module BATTLE
module DISPLAY
# This changes what will and will not be shown. If you choose to shown
# the actor's face graphic, you can choose its opacity. 255 means it's
# fully visible while 0 means it's completely transparent. For the
# number of states shown, do not exceed 4 unless you want the states to
# overlap into the next actor's data window.
SHOW_ALLY_FACE = true
ALLY_FACE_OPACITY = 100
SHOW_ALLY_SPRITE = false
MAX_STATES_SHOWN = 4
# This governs the sizes used for each of the items in the display.
NAME_FONT_SIZE = 16
STAT_FONT_SIZE = 16
# This governs how HP and MP are shown. Here is a type listing for each
# individual one.
# Type 1 = Current Type 4 = Current & Percentage
# Type 2 = Current/Maximum Type 5 = Current/Max & Percent
# Type 3 = Percentage
SHOWN_HP_TYPE = 2
SHOWN_MP_TYPE = 2
# For those using Custom Skill Effects and would like to show Rage for
# your bar, input the ID's of the classes you would Rage to appear for.
# The reason this is dependent on class rather than character is because
# if the character switches classes to one that no longer uses rage, the
# rage meter will be useless there.
RAGE_CLASSES = [1, 2]
# This governs the type of display used for Rage. Here's a list of the
# various types of way you can choose to display Rage. If you don't want
# rage to be displayed at all, set it to 0.
# Type 1 - Rage icon and number value appears in lower left corner. MP
# bar is moved over to give room for Rage bar.
# Type 2 - Rage icon and number value appears in lower right corner. MP
# bar is on the left side instead.
RAGE_DISPLAY = 1
# This governs the text shown for rage and the gauge colours used.
RAGE_TEXT = "RG"
RAGE_GAUGE1 = 2
RAGE_GAUGE2 = 10
# For those who are using Battler Stat Morale, this script can place a
# morale gauge under your MP bar (after pushing it upward).
GAUGE_MORALE = false
MORALE_TEXT = "Morale"
MORALE_GAUGE1 = 28 # This is for positive morale.
MORALE_GAUGE2 = 29 # This is for positive morale.
MORALE_GAUGE3 = 30 # This is for positive morale.
MORALE_GAUGE4 = 31 # This is for positive morale.
# For those who don't want an extra gauge but would still like to show
# morale, there's an icon you can display for it instead. Morale icon
# will not appear if morale is equal to zero.
ICON_MORALE = true
ICON_MORALE_HIGH = 242 # Appears when morale is positive.
ICON_MORALE_LOW = 241 # Appears when morale is negative.
MORALE_DIVISOR = 100 # How much morale shown is divided by.
MORALE_FONT_SIZE = 16 # This is the font size used for morale icon.
MORALE_COL_HIGH = 0 # This is the text colour used for high morale.
MORALE_COL_LOW = 8 # This is the text colour used for low morale.
end # end module DISPLAY
end # end module BATTLE
end # end module YE
#===============================================================================
# Don't touch anything past here or else your computer will explode and you will
# be a very sad person.
#===============================================================================
#==============================================================================
# Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Selectable
#--------------------------------------------------------------------------
# Alias Object Initialization
#--------------------------------------------------------------------------
alias displaypartydata_initialize initialize unless $@
def initialize
displaypartydata_initialize
@column_max = $game_party.members.size
@spacing = 0
end
#--------------------------------------------------------------------------
# Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
rect = Rect.new(0, 0, 0, 0)
rect.width = 96
rect.height = 96
rect.x = index * 96
rect.y = 0
self.contents.clear_rect(rect)
self.contents.font.color = normal_color
@actor = $game_party.members[index]
draw_party_face(index)
draw_party_state(index)
draw_party_name(index)
draw_party_graphic(index)
draw_party_hp(index)
draw_party_mp(index)
draw_party_morale(index)
end
#--------------------------------------------------------------------------
# Update Cursor
#--------------------------------------------------------------------------
def update_cursor
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(@index * 96, 0, 96, 96)
end
end
#--------------------------------------------------------------------------
# Draw Party Face
#--------------------------------------------------------------------------
def draw_party_face(index)
return unless YE::BATTLE::DISPLAY::SHOW_ALLY_FACE
opacity = YE::BATTLE::DISPLAY::ALLY_FACE_OPACITY
@actor = $game_party.members[index]
face_name = @actor.face_name
face_index = @actor.face_index
bitmap = Cache.face(face_name)
rect = Rect.new(0, 0, 0, 0)
rect.x = face_index % 4 * 96 + 4 / 2
rect.y = face_index / 4 * 96 + 4 / 2
rect.width = 92
rect.height = 92
self.contents.blt(index * 96 + 2, 2, bitmap, rect, opacity)
bitmap.dispose
end
#--------------------------------------------------------------------------
# Draw Party State
#--------------------------------------------------------------------------
def draw_party_state(index)
return unless YE::BATTLE::DISPLAY::MAX_STATES_SHOWN > 0
dx = index * 96
dy = WLH * 1
dw = YE::BATTLE::DISPLAY::MAX_STATES_SHOWN * 24
draw_actor_state(@actor, dx, dy, dw)
end
#--------------------------------------------------------------------------
# Draw Party Graphic
#--------------------------------------------------------------------------
def draw_party_graphic(index)
return unless YE::BATTLE::DISPLAY::SHOW_ALLY_SPRITE
@actor = $game_party.members[index]
dx = index * 96 + 48
dy = WLH * 3 - YE::BATTLE::DISPLAY::STAT_FONT_SIZE + 16 + 2
if $imported["BattlerStatMorale"] and YE::BATTLE::DISPLAY::GAUGE_MORALE
dy -= YE::BATTLE::DISPLAY::STAT_FONT_SIZE
end
draw_character(@actor.character_name, @actor.character_index, dx, dy)
end
#--------------------------------------------------------------------------
# Draw Party Name
#--------------------------------------------------------------------------
def draw_party_name(index)
self.contents.font.color = hp_color(@actor)
self.contents.font.size = YE::BATTLE::DISPLAY::NAME_FONT_SIZE
dx = 96 * index + 4
dy = 0
dw = 94
if $imported["BattlerStatMorale"] and YE::BATTLE::DISPLAY::ICON_MORALE
dw -= 24
end
self.contents.draw_text(dx, dy, dw, WLH, @actor.name)
end
#--------------------------------------------------------------------------
# Draw Party HP
#--------------------------------------------------------------------------
def draw_party_hp(index)
dx = index * 96 + 2
dy = WLH * 3 - YE::BATTLE::DISPLAY::STAT_FONT_SIZE + 2
if $imported["BattlerStatMorale"] and YE::BATTLE::DISPLAY::GAUGE_MORALE
dy -= YE::BATTLE::DISPLAY::STAT_FONT_SIZE
end
dw = 92
draw_actor_hp_gauge(@actor, dx, dy, dw)
self.contents.font.size = YE::BATTLE::DISPLAY::STAT_FONT_SIZE
self.contents.font.color = system_color
self.contents.draw_text(dx + 2, dy + 4, 28, WLH, Vocab::hp_a, 0)
self.contents.font.color = hp_color(@actor)
text = sprintf("%d/%d", @actor.hp, @actor.maxhp)
percent = @actor.hp * 100.0 / @actor.maxhp
case YE::BATTLE::DISPLAY::SHOWN_HP_TYPE
when 1; text = @actor.hp
when 2; text = sprintf("%d/%d", @actor.hp, @actor.maxhp)
when 3; text = sprintf("%d%%", percent)
when 4; text = sprintf("%d %d%%", @actor.hp, percent)
when 5; text = sprintf("%d/%d %d%%", @actor.hp, @actor.maxhp, percent)
end
self.contents.draw_text(dx + 30, dy + 4, dw - 32, WLH, text, 2)
end
#--------------------------------------------------------------------------
# Draw Party HP
#--------------------------------------------------------------------------
def draw_party_mp(index)
dx = index * 96 + 2
dy = WLH * 3
if $imported["BattlerStatMorale"] and YE::BATTLE::DISPLAY::GAUGE_MORALE
dy -= YE::BATTLE::DISPLAY::STAT_FONT_SIZE
end
dw = 92
#---
move_mp_bar = false
if $imported["CustomSkillEffects"]
if YE::BATTLE::DISPLAY::RAGE_CLASSES.include?(@actor.class.id)
move_mp_bar = true
end
if $imported["SubclassSelectionSystem"] and @actor.subclass != nil
if YE::BATTLE::DISPLAY::RAGE_CLASSES.include?(@actor.subclass.id)
move_mp_bar = true
end
end
end
if move_mp_bar and YE::BATTLE::DISPLAY::RAGE_DISPLAY == 1
dw /= 2
dx += dw
draw_party_rage(index)
elsif move_mp_bar and YE::BATTLE::DISPLAY::RAGE_DISPLAY == 1
dw /= 2
draw_party_rage(index)
end
#---
draw_actor_mp_gauge(@actor, dx, dy, dw)
self.contents.font.size = YE::BATTLE::DISPLAY::STAT_FONT_SIZE
self.contents.font.color = system_color
self.contents.draw_text(dx + 2, dy + 4, 28, WLH, Vocab::mp_a, 0)
self.contents.font.color = mp_color(@actor)
text = sprintf("%d/%d", @actor.mp, @actor.maxmp)
unless @actor.maxmp == 0
percent = @actor.mp * 100.0 / @actor.maxmp
else
percent = 0
end
case YE::BATTLE::DISPLAY::SHOWN_MP_TYPE
when 1; text = @actor.mp
when 2; text = sprintf("%d/%d", @actor.mp, @actor.maxmp)
when 3; text = sprintf("%d%%", percent)
when 4; text = sprintf("%d %d%%", @actor.mp, percent)
when 5; text = sprintf("%d/%d %d%%", @actor.mp, @actor.maxmp, percent)
end
self.contents.draw_text(dx + 30, dy + 4, dw - 32, WLH, text, 2)
end
#--------------------------------------------------------------------------
# Draw Party Rage
#--------------------------------------------------------------------------
def draw_party_rage(index)
return unless $imported["CustomSkillEffects"]
dx = 0
dy = WLH * 3
if $imported["BattlerStatMorale"] and YE::BATTLE::DISPLAY::GAUGE_MORALE
dy -= YE::BATTLE::DISPLAY::STAT_FONT_SIZE
end
dw = 92 / 2
if YE::BATTLE::DISPLAY::RAGE_DISPLAY == 1
dx = index * 96 + 2
elsif YE::BATTLE::DISPLAY::RAGE_DISPLAY == 2
dx = index * 96 + 2 + dw
end
draw_rage_gauge(@actor, dx, dy, dw)
self.contents.font.size = YE::BATTLE::DISPLAY::STAT_FONT_SIZE
self.contents.font.color = system_color
text = YE::BATTLE::DISPLAY::RAGE_TEXT
self.contents.draw_text(dx + 2, dy + 4, 28, WLH, text, 0)
self.contents.font.color = mp_color(@actor)
text = @actor.rage
self.contents.draw_text(dx + 30, dy + 4, dw - 32, WLH, text, 2)
end
#--------------------------------------------------------------------------
# Draw Rage Gauge
#--------------------------------------------------------------------------
def draw_rage_gauge(actor, x, y, width = 120)
return unless $imported["CustomSkillEffects"]
gc0 = gauge_back_color
gc1 = text_color(YE::BATTLE::DISPLAY::RAGE_GAUGE1)
gc2 = text_color(YE::BATTLE::DISPLAY::RAGE_GAUGE2)
gh = 6
gy = y + WLH - 8 - (gh - 6)
gb = width
self.contents.fill_rect(x, gy, gb, gh, gc0)
if actor.rage <= 0
gw = 0
else
gw = gb * actor.rage / YE::BATTLE::MAX_RAGE
end
self.contents.gradient_fill_rect(x, gy, gw, gh, gc1, gc2)
end
#--------------------------------------------------------------------------
# Draw Party Morale
#--------------------------------------------------------------------------
def draw_party_morale(index)
return unless $imported["BattlerStatMorale"]
draw_morale_icon(index)
return unless YE::BATTLE::DISPLAY::GAUGE_MORALE
dx = index * 96 + 2
dy = WLH * 3
dw = 92
draw_morale_gauge(@actor, dx, dy, dw)
self.contents.font.size = YE::BATTLE::DISPLAY::STAT_FONT_SIZE
self.contents.font.color = system_color
text = YE::BATTLE::DISPLAY::MORALE_TEXT
self.contents.draw_text(dx + 2, dy + 4, 44, WLH, text, 0)
self.contents.font.color = normal_color
text = sprintf("%+d", @actor.morale)
self.contents.draw_text(dx + 46, dy + 4, 44, WLH, text, 2)
end
#--------------------------------------------------------------------------
# Draw Morale Gauge
#--------------------------------------------------------------------------
def draw_morale_gauge(actor, x, y, width = 120)
return unless $imported["BattlerStatMorale"]
gc0 = gauge_back_color
gc1 = text_color(YE::BATTLE::DISPLAY::MORALE_GAUGE1)
gc2 = text_color(YE::BATTLE::DISPLAY::MORALE_GAUGE2)
gc3 = text_color(YE::BATTLE::DISPLAY::MORALE_GAUGE3)
gc4 = text_color(YE::BATTLE::DISPLAY::MORALE_GAUGE4)
gh = 6
gy = y + WLH - 8 - (gh - 6)
gb = width
self.contents.fill_rect(x, gy, gb, gh, gc0)
if actor.morale == 0
gw = 0
elsif actor.morale > 0
gw = gb * actor.morale / actor.max_morale
self.contents.gradient_fill_rect(x, gy, gw, gh, gc1, gc2)
else
gw = gb * actor.morale / actor.min_morale
x += gb - gw
self.contents.gradient_fill_rect(x, gy, gw, gh, gc3, gc4)
end
end
#--------------------------------------------------------------------------
# Draw Morale Icon
#--------------------------------------------------------------------------
def draw_morale_icon(index)
return unless YE::BATTLE::DISPLAY::ICON_MORALE
morale = @actor.morale / YE::BATTLE::DISPLAY::MORALE_DIVISOR
return if morale == 0
dx = index * 96 + 72
dy = 0
if morale > 0
icon = YE::BATTLE::DISPLAY::ICON_MORALE_HIGH
colour = YE::BATTLE::DISPLAY::MORALE_COL_HIGH
else
icon = YE::BATTLE::DISPLAY::ICON_MORALE_LOW
colour = YE::BATTLE::DISPLAY::MORALE_COL_LOW
end
draw_icon(icon, dx, dy)
self.contents.font.size = YE::BATTLE::DISPLAY::MORALE_FONT_SIZE
self.contents.font.color = text_color(colour)
text = sprintf("%+d%%", morale)
self.contents.draw_text(dx + 2, dy + 2, 20, 20, text, 1)
end
end # end Window_BattleStatus
#===============================================================================
#
# END OF FILE
#
#===============================================================================[/spoiler]
If it could work with that... Thank you so much for helping me out with this!
EDIT: I'll message you the codes for the rest. Stupid character limit ><
EDIT2: Well, the character limit still applies and even worse, 1 of the scripts can't even fit into a single message. Feel free to tell me if you're missing any of the scripts or too lazy to find, I'll send it to you right away. Thanks again for helping me!
Because of the number of scripts you're using, I think it'd be easier to just upload the project, link it to me and then I'd be able to make the system to your exact specifications. Could you possibly include a text file or whatever that gives me more specific instructions?
Umm sure. Will do.
I'll create a commented text description of what it would do at the top of the script editor above everything else.
Thanks so much for this man :)
Pacman, if you can successfully make this script compatible with Melody, I'll send you a donation through paypal {if you have it}. There have been SEVERAL people asking for a script like this. There is one that exists, and it executes it pretty well, but there is no compatibility for Melody. I'll keep an eye on this topic, because I desperately need this script in order to continue with my project.
Quote from: thechancellor on July 09, 2011, 08:24:18 PM
Pacman, if you can successfully make this script compatible with Melody, I'll send you a donation through paypal {if you have it}. There have been SEVERAL people asking for a script like this. There is one that exists, and it executes it pretty well, but there is no compatibility for Melody. I'll keep an eye on this topic, because I desperately need this script in order to continue with my project.
One exists? I've been searching but no success...
Tell me, can you link it for me?
Yeah, can you give us links? It'd be much easier for me if I just had to make it compatible.
And no, I don't have PayPal, but I wouldn't want to take your money for something as relatively simple as this.
The YEM battle melody has a system like this called rage it can be used as a skill cost rage is earned by taking damage dealing damage things like that rage can also be added or subtraced by putting tags in the item or skill note boxes the rage feature is standard with the YEM battle system but it can be added by itself too you will just have to find the script.
Quote from: CodeMaster on July 10, 2011, 03:22:37 AM
The YEM battle melody has a system like this called rage it can be used as a skill cost rage is earned by taking damage dealing damage things like that rage can also be added or subtraced by putting tags in the item or skill note boxes the rage feature is standard with the YEM battle system but it can be added by itself too you will just have to find the script.
I have the YEM Battle Engine Melody but the compatibility is rather terrible so I left it be.
Anyways, the problem with a rage feature is that the rage system gains rage by being hit, attacking, etc. and to my knowledge, I cannot make a potion of rage.
I'll post a couple reference links.
THIS (http://www.rpgmakervx.net/index.php?showtopic=42217) is the script I was referring to earlier. It allows for multiple resources and can set multiple costs to skills. The scripter had tried a compatibility patch for melody, but couldn't pull it off.
THIS (http://www.rpgmakervx.net/index.php?showtopic=47408) is a request I made that explains how Rage can be tweaked to allow for it to become a more useful alternate resource, thus eliminating the need for a new script. The only thing I forgot to add was that, as doomed2die said, there was no way to replenish rage through items.
That's nearly exactly what I was looking for! Thank you! I just need it to be compatible with the battle HUD now :P
Also, I'm unsure if it can, but I do need skills/items to cost/heal multiple energies (I only have 2 but.. :P)
I've completed all the Data Structure, module, REGEXP and Game data stuff, and I'm now starting on the windows. Would you like the SP bar drawn underneath the MP bar in the menu?
Yeah, under would be nice.
Quote from: Pacman on July 12, 2011, 06:11:35 AM
I've completed all the Data Structure, module, REGEXP and Game data stuff, and I'm now starting on the windows. Would you like the SP bar drawn underneath the MP bar in the menu?
This is fantastic. Any idea of a release date? This will be such a motivator, can't wait.
Quote from: thechancellor on July 13, 2011, 03:08:27 AM
Quote from: Pacman on July 12, 2011, 06:11:35 AM
I've completed all the Data Structure, module, REGEXP and Game data stuff, and I'm now starting on the windows. Would you like the SP bar drawn underneath the MP bar in the menu?
This is fantastic. Any idea of a release date? This will be such a motivator, can't wait.
He looks like he's far along; he sent me a screenshot and it's looking great.
Should be done either today or Friday. I'm busy most of Thursday.
My VX has stopped working for whatever reason, but I'll see what I can do.
I've finished the window work. All that's left is fine-tuning everything and making sure the notetags work.
Wonderful. If you need to test it more, I'll be available pretty much all day today. Just in case your VX is still acting up.
EDIT: Wait, I'm slightly confused. Was this script going to be compatible with Melody? Or was it being made specifically for doomed2die's HUD?
I'll first make it for the YERD Party Display, then I'll try and integrate it into BEM completely.
Excuse the double-post, but I've had a revelation.
Now, both items and skills will be able to cost sp, recover sp by a set percentage or value, and weapons and armor will be able to half sp costs for skills a la mp. Actors can be set as skillful, meaning their skills have half sp cost like pharmacology for mp. Damage done by skills and items can also be applied to sp now. Most of this is done through notebox tags, but because actors don't have noteboxes their features are now handled through arrays built into the script. The script is in a very flimsy beta, the window work is still shaky (I realized something going wrong, it'll be fixed soon), and it is very hopeful to be released on Friday.
Of course, I'm yet to annotate the script, but that should be a very quick process.
That's quite a list of features. Great to hear. Keep us posted, and thanks again.
That's perfect. :) You're awesome lol
Due to personal problems and me not being motivated to doing anything, rather stay in bed all day wishing I could sleep for the next three weeks, I've had to postpone work on this. If anyone else wants to take off where I left off, this is what I have.
module SP
ACTOR_MAXSP = [80, 100, 100, 110]
SP_TEXT = "SP"
SP_ABB = "S"
SKILLFUL = [true, false, false, true]
SHOWN_SP_TYPE = 2
end
module Vocab
def self.sp
return SP::SP_TEXT
end
def self.sp_a
return SP::SP_ABB
end
end
module RPG
class UsableItem < BaseItem
attr_accessor :sp_recovery_rate
attr_accessor :sp_recovery
attr_accessor :sp_cost
attr_accessor :damage_to_sp
alias dual_mpsp_initialize initialize
def initialize
dual_mpsp_initialize
@sp_recovery_rate = 0
@sp_recovery = 0
@sp_cost = 0
@damage_to_sp = false
end
def sp_cost
return @sp_cost if @sp_cost != nil
@sp_cost = 0
self.note.split(/[\r\n]+/).each { |line|
case line
when /<(?:SP_COST|SP COST):[ ](\d+)>/i
@sp_cost = $1.to_i
end
}
return @sp_cost
end
def sp_recovery
return @sp_recovery if @sp_recovery != nil
@sp_recovery = 0
self.note.split(/[\r\n]+/).each { |line|
case line
when /<(?:SP_RECOVERY|SP RECOVERY):[ ](\d+)>/i
@sp_recovery = $1.to_i
end
}
return @sp_recovery
end
def sp_recovery_rate
return @sp_recovery_rate if @sp_recovery_rate != nil
@sp_recovery_rate = 0
self.note.split(/[\r\n]+/).each { |line|
case line
when /<(?:SP_RECOVERY_RATE|SP RECOVERY RATE):[ ](\d+)>/i
@sp_recovery_rate = $1.to_i
end
}
return @sp_recovery_rate
end
end
class Actor
attr_accessor :skillful
alias dual_mpsp_initialize initialize
def initialize
dual_mpsp_initialize
for i in 1..99
@parameters[6,i] = 80+i*10
end
@skillful = false
end
def maxsp
for i in actor
i.maxsp = SP::ACTOR_MAXSP[i]
end
end
def skillful
for i in actor
i.skillful = SP::SKILLFUL[i]
end
end
end
class Enemy
def base_maxsp
return 0 # Not for enemies.
end
end
class BaseItem
attr_accessor :half_sp_cost
alias dual_mpsp_initialize initialize
def initialize
dual_mpsp_initialize
@half_sp_cost = false
end
def half_sp_cost
return if self.is_a?(RPG::Item) or self.is_a?(RPG::Skill)
@half_sp_cost = !self.note[/\\HALF_SP_COST/i].nil? if @half_sp_cost.nil?
return @half_sp_cost
end
end
class System
class Terms
attr_accessor :sp
attr_accessor :sp_a
alias dual_mpsp_initialize initialize
def initialize
dual_mpsp_initialize
@sp = SP::SP_TEXT
@sp_a = SP::SP_ABB
end
end
end
end
class Game_Battler
attr_accessor :sp
attr_accessor :sp_damage
alias dual_mpsp_initialize initialize
def initialize
dual_mpsp_initialize
@sp = 0
end
alias dual_mpsp_clractnres clear_action_results
def clear_action_results
dual_mpsp_clractnres
@sp_damage = 0
end
alias dual_mpsp_clrextval clear_extra_values
def clear_extra_values
dual_mpsp_clrextval
@maxsp_plus = 0
end
def maxsp
maxsp = 0
if self.is_a?(Game_Actor)
maxsp += actor.maxsp
elsif self.is_a?(Game_Enemy)
maxsp += enemy.base_maxsp
end
maxsp += @maxsp_plus
return [[maxsp, 0].max, 9999].min
end
def half_sp_cost
return false
end
def maxsp=(new_maxsp)
@maxsp_plus += new_maxsp - self.maxsp
@maxsp_plus = [[@maxsp_plus, -9999].max, 9999].min
@sp = [@sp, self.maxsp].min
end
def sp=(sp)
@sp = [[sp, maxsp].min, 0].max
end
alias dual_mpsp_recall recover_all
def recover_all
@sp = maxsp
dual_mpsp_recall
end
def calc_sp_cost(skill)
if half_sp_cost
return skill.sp_cost / 2
else
return skill.sp_cost
end
end
alias dual_mpsp_sklcnus skill_can_use?
def skill_can_use?(skill)
return false if calc_sp_cost(skill) > sp
dual_mpsp_sklcnus(skill)
end
alias dual_mpsp_mkdmgal make_obj_damage_value
def make_obj_damage_value(user, obj)
dual_mpsp_mkdmgal(user, obj)
if obj.damage_to_sp
@sp_damage = damage
end
end
def calc_sp_recovery(user, item)
result = maxsp * item.sp_recovery_rate / 100 + item.sp_recovery
result *= 2 if user.skillful # Skillful doubles the effect
return result
end
alias dual_mpsp_exctdmg execute_damage
def execute_damage(user)
dual_mpsp_exctdmg(user)
self.sp -= @sp_damage
end
alias dual_mpsp_skltst skill_test
def skill_test(user, skill)
tester = self.clone
tester.make_obj_damage_value(user, skill)
tester.apply_state_changes(skill)
return true if tester.sp_damage < 0 && tester.sp < tester.maxsp
dual_mpsp_skltst(user, skill)
end
alias dual_mpsp_itmtst item_test
def item_test(user, item)
tester = self.clone
tester.make_obj_damage_value(user, item)
tester.apply_state_changes(item)
if tester.sp_damage < 0 or tester.calc_sp_recovery(user, item) > 0
return true if tester.sp < tester.maxsp
end
dual_mpsp_itmtst(user, item)
end
alias dual_mpsp_itmefct item_effect
def item_effect(user, item)
dual_mpsp_itmefct(user, item)
sp_recovery = calc_sp_recovery(user, item)
@sp_damage -= sp_recovery
end
alias dual_mpsp_itmgrthtp item_growth_effect
def item_growth_effect(user, item)
dual_mpsp_itmgrthtp
if item.parameter_type > 0 and item.parameter_points != 0
case item.parameter_type
when 7 # SP
@maxsp_plus += item.parameter_points
end
end
end
end
class Game_Actor < Game_Battler
def base_maxsp
return SP::ACTOR_MAXSP[actor[@level]]
end
def skillful
return actor.skillful
end
def half_sp_cost
for armor in armors.compact
return true if armor.half_sp_cost
end
for weapon in weapons.compact
return true if weapon.half_sp_cost
end
return false
end
alias dual_mpsp_chngexp change_exp
def change_exp(exp, show)
dual_mpsp_chngexp(exp, show)
@sp = [@sp, maxsp].min
end
end
class Game_Enemy < Game_Battler
def base_maxsp
return 0
end
end
class Window_Base < Window
def sp_gauge_color1
return text_color(24)
end
def sp_gauge_color2
return text_color(28)
end
def sp_color(actor)
return crisis_color if actor.sp < actor.maxsp / 4
return normal_color
end
def draw_actor_sp(actor, x, y, width = 120)
draw_actor_sp_gauge(actor, x, y, width)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, Vocab::sp_a)
self.contents.font.color = sp_color(actor)
last_font_size = self.contents.font.size
xr = x + width
if width < 120
self.contents.draw_text(xr - 44, y, 44, WLH, actor.sp, 2)
else
self.contents.draw_text(xr - 99, y, 44, WLH, actor.sp, 2)
self.contents.font.color = normal_color
self.contents.draw_text(xr - 55, y, 11, WLH, "/", 2)
self.contents.draw_text(xr - 44, y, 44, WLH, actor.maxsp, 2)
end
end
def draw_actor_sp_gauge(actor, x, y, width = 120)
gw = width * actor.sp / [actor.maxsp, 1].max
gc1 = sp_gauge_color1
gc2 = sp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
end
class Window_MenuStatus < Window_Selectable
alias dual_mpsp_refresh refresh
def refresh
dual_mpsp_refresh
if $scene.is_a?(Scene_Menu)
for actor in $game_party.members
y = actor.index * 96 + WLH / 2
draw_actor_sp(actor, x - 64, y + WLH * 2)
end
elsif $scene.is_a?(Scene_Skill)
for actor in $game_party.members
y = actor.index * 96 + WLH / 2
draw_actor_sp(actor, x + 96, y + WLH * 2)
end
end
end
end
class Window_Skill < Window_Selectable
alias dual_mpsp_drwitm draw_item
def draw_item(index)
dual_mpsp_drwitm(index)
sp_rect = item_rect(index)
if skill != nil
self.contents.draw_text(sp_rect, @actor.calc_sp_cost(skill), 1)
end
end
end
class Window_SkillStatus < Window_Base
def refresh
self.contents.clear
draw_actor_name(@actor, 4, 0)
draw_actor_level(@actor, 140, 0)
draw_actor_mp(@actor, 240, 0)
draw_actor_sp(@actor, 392, 0)
end
end
class Window_Status < Window_Base
alias dual_mpsp_drwbscinf draw_basic_info
def draw_basic_info(x, y)
dual_mpsp_drwbscinf(x, y)
sx = x; sy = y
draw_actor_sp(@actor, sx, sy + WLH * 4)
end
end
class Window_BattleStatus < Window_Selectable
if self.method_defined?(:draw_party_morale)
alias dual_mpsp_yerd_item draw_item
def draw_item(index)
dual_mpsp_yerd_item(index)
draw_party_sp(index)
end
def draw_party_hp(index)
dx = index * 96 + 2
dy = WLH * 2.5 - YE::BATTLE::DISPLAY::STAT_FONT_SIZE + 2
if $imported["BattlerStatMorale"] and YE::BATTLE::DISPLAY::GAUGE_MORALE
dy -= YE::BATTLE::DISPLAY::STAT_FONT_SIZE
end
dw = 92
draw_actor_hp_gauge(@actor, dx, dy, dw)
self.contents.font.size = YE::BATTLE::DISPLAY::STAT_FONT_SIZE
self.contents.font.color = system_color
self.contents.draw_text(dx + 2, dy + 4, 28, WLH, Vocab::hp_a, 0)
self.contents.font.color = hp_color(@actor)
text = sprintf("%d/%d", @actor.hp, @actor.maxhp)
percent = @actor.hp * 100.0 / @actor.maxhp
case YE::BATTLE::DISPLAY::SHOWN_HP_TYPE
when 1; text = @actor.hp
when 2; text = sprintf("%d/%d", @actor.hp, @actor.maxhp)
when 3; text = sprintf("%d%%", percent)
when 4; text = sprintf("%d %d%%", @actor.hp, percent)
when 5; text = sprintf("%d/%d %d%%", @actor.hp, @actor.maxhp, percent)
end
self.contents.draw_text(dx + 30, dy + 4, dw - 32, WLH, text, 2)
end
def draw_party_mp(index)
dx = index * 96 + 2
dy = WLH * 3 - YE::BATTLE::DISPLAY::STAT_FONT_SIZE + 2
if $imported["BattlerStatMorale"] and YE::BATTLE::DISPLAY::GAUGE_MORALE
dy -= YE::BATTLE::DISPLAY::STAT_FONT_SIZE
end
dw = 92
#---
move_mp_bar = false
if $imported["CustomSkillEffects"]
if YE::BATTLE::DISPLAY::RAGE_CLASSES.include?(@actor.class.id)
move_mp_bar = true
end
if $imported["SubclassSelectionSystem"] and @actor.subclass != nil
if YE::BATTLE::DISPLAY::RAGE_CLASSES.include?(@actor.subclass.id)
move_mp_bar = true
end
end
end
if move_mp_bar and YE::BATTLE::DISPLAY::RAGE_DISPLAY == 1
dw /= 2
dx += dw
draw_party_rage(index)
elsif move_mp_bar and YE::BATTLE::DISPLAY::RAGE_DISPLAY == 1
dw /= 2
draw_party_rage(index)
end
#---
draw_actor_mp_gauge(@actor, dx, dy, dw)
self.contents.font.size = YE::BATTLE::DISPLAY::STAT_FONT_SIZE
self.contents.font.color = system_color
self.contents.draw_text(dx + 2, dy + 4, 28, WLH, Vocab::mp_a, 0)
self.contents.font.color = mp_color(@actor)
text = sprintf("%d/%d", @actor.mp, @actor.maxmp)
unless @actor.maxmp == 0
percent = @actor.mp * 100.0 / @actor.maxmp
else
percent = 0
end
case YE::BATTLE::DISPLAY::SHOWN_MP_TYPE
when 1; text = @actor.mp
when 2; text = sprintf("%d/%d", @actor.mp, @actor.maxmp)
when 3; text = sprintf("%d%%", percent)
when 4; text = sprintf("%d %d%%", @actor.mp, percent)
when 5; text = sprintf("%d/%d %d%%", @actor.mp, @actor.maxmp, percent)
end
self.contents.draw_text(dx + 30, dy + 4, dw - 32, WLH, text, 2)
end
def draw_party_sp(index)
dx = index * 96 + 2
dy = WLH * 3
if $imported["BattlerStatMorale"] and YE::BATTLE::DISPLAY::GAUGE_MORALE
dy -= YE::BATTLE::DISPLAY::STAT_FONT_SIZE
end
dw = 92
#---
move_sp_bar = false
if $imported["CustomSkillEffects"]
if YE::BATTLE::DISPLAY::RAGE_CLASSES.include?(@actor.class.id)
move_sp_bar = true
end
if $imported["SubclassSelectionSystem"] and @actor.subclass != nil
if YE::BATTLE::DISPLAY::RAGE_CLASSES.include?(@actor.subclass.id)
move_sp_bar = true
end
end
end
if move_sp_bar and YE::BATTLE::DISPLAY::RAGE_DISPLAY == 1
dw /= 2
dx += dw
draw_party_rage(index)
elsif move_sp_bar and YE::BATTLE::DISPLAY::RAGE_DISPLAY == 1
dw /= 2
draw_party_rage(index)
end
#---
draw_actor_sp_gauge(@actor, dx, dy, dw)
self.contents.font.size = YE::BATTLE::DISPLAY::STAT_FONT_SIZE
self.contents.font.color = system_color
self.contents.draw_text(dx + 2, dy + 4, 28, WLH, Vocab::sp_a, 0)
self.contents.font.color = sp_color(@actor)
text = sprintf("%d/%d", @actor.sp, @actor.maxsp)
unless @actor.maxsp == 0
percent = @actor.sp * 100.0 / @actor.maxsp
else
percent = 0
end
case SP::SHOWN_SP_TYPE
when 1; text = @actor.sp
when 2; text = sprintf("%d/%d", @actor.sp, @actor.maxmp)
when 3; text = sprintf("%d%%", percent)
when 4; text = sprintf("%d %d%%", @actor.sp, percent)
when 5; text = sprintf("%d/%d %d%%", @actor.sp, @actor.maxsp, percent)
end
self.contents.draw_text(dx + 30, dy + 4, dw - 32, WLH, text, 2)
end
else
def draw_item(index)
rect = item_rect(index)
rect.x += 4
rect.width -= 8
self.contents.clear_rect(rect)
self.contents.font.color = normal_color
actor = $game_party.members[index]
y = rect.y
draw_actor_name(actor, 4, y)
draw_actor_state(actor, 114, y, 48)
draw_actor_hp(actor, 174, y, 70)
draw_actor_mp(actor, 260, y, 50)
draw_actor_sp(actor, 326, y, 50)
end
end
end
There are some small problems with that code, but it is almost done. I'll try to continue work on it, but it doesn't seem very likely. I deeply apologize for any inconvenience. And to any scripter who feels like completing this, make sure it's below YERD Party Display. Otherwise a method would be overwritten.
Sorry for the lack of completion and notes.
Oh I see. Okay, well thank you for all the work you've put into this so far! I'll ask around and see if anyone is interested in completing a script. You've been really helpful up until now.
Are all the core features already inside or is there anything you've yet to add?
Most of what I promised is there.
I just need to know what isn't there so I'm aware, when I'm seeing if someone will either write the script or complete your script, that they're aware of anything that they must add. So can you give a list of what is incomplete as of now please? Thank you for doing this much so far anyway.
The only thing that isn't there would probably be functionality. I'm not sure how to put it in laymen's terms, but there are a couple methods in RPG::Actor that aren't working and should be placed elsewhere. The script will throw a syntax error upon pressing new game in the title screen.
Alright, that's enough for me. I'll see if I can get it finished. Thanks for helping out to this point :)