#===============================================================================
# Alignment System V.2
# By Jet10985
# Help by: Crimsonseas, Piejamas, Originalwij, Yanfly, Mithran
# Inspired by: Synthesis
#===============================================================================
# This script is not open for distribution to other sites without permission
# from me, Jet10985. Please credit me if you use this script.
#===============================================================================
# This script will allow you to add a nice alignment system to your game, which
# can be used for more then alignment. EX: Ranks, Vampirism, etc.
# This script has: 5 customization options.
#===============================================================================
=begin
The alignment name and value match to the corresponding one in the other array.
EX: In the default, "Very Evil" is the first name, and -100 is the first condition
This means, if -100 or lower is the value of $game_system.alignment, the
character will be "Very Evil".
--------------------------------------------------------------------------------
How to change alignment: We have 2 command to change alignment points.
sub_alignment(points) and add_alignment(points)
In both commands, replace "points" with the amount of change you want in the
character's alignment points.
sub_alignment will subtract the amount of points.
add_alignment will add the amount of points
--------------------------------------------------------------------------------
Tagging equipment and skills:
To tag these in the database to require a certain amount of alignment points,
add the tag
<alignment ##>
where ## is the number of points required. make sure you keep
the <> because that's actually required.
=end
module AlignmentOptions
ALIGNMENT_NAME = ["Very Evil", "Evil", "Neutral", "Good", "Very Good"]
ALIGNMENT_CONDITION = [-100, -50, 0, 50, 100] # What the value of $game_system.alignment
# needs to be to correspond to the alignment name
NAME_OF_ALIGNMENT = "Alignment" # This is what alignment will be called altogether
USE_VARIABLE = false
VARIABLE_ID = 5
end # ending module
#===============================================================================
class Game_System
include AlignmentOptions
alias jet5830_initialize initialize
def initialize
jet5830_initialize
@alignment = 0
end
def alignment
USE_VARIABLE ? $game_variables[VARIABLE_ID] : @alignment
end
def alignment=(new_value)
USE_VARIABLE ? $game_variables[VARIABLE_ID] = new_value : @alignment = new_value
end
end # ending Game_System addition
class Game_Interpreter
def add_alignment(points) # adding easy-to-us command to add alignment points
$game_system.alignment += points # adding the arguement value from the variable
end # ending definition
def sub_alignment(points) # adding easy-to-us command to subtract alignment points
$game_system.alignment -= points # subtracting the arguement value from the variable
end # ending definition
end # ending addition to Game_Interpreter
class Window_Status
include AlignmentOptions # including the options defined in the module AlignmentOptions
alias jet5839_refresh refresh unless $@ # aliasing my new command to avoid compatibility issues
def refresh
jet5839_refresh # calls the old method
self.contents.font.color = system_color # redefines the self contained font color
self.contents.draw_text(290, 110, 500, 500, NAME_OF_ALIGNMENT + ":") # draws the name of alignment
self.contents.font.color = normal_color # redefines the self contained font color
self.contents.draw_text(400, 110, 500, 500, draw_alignment) # draws the alignment name in the window
end # ending definition alias
end
class Window_Base
include AlignmentOptions
def draw_alignment # Definition of Draw_alignment
if $game_system.alignment <= ALIGNMENT_CONDITION.min
return ALIGNMENT_NAME[0]
elsif $game_system.alignment >= ALIGNMENT_CONDITION.max
return ALIGNMENT_NAME[ALIGNMENT_NAME.size - 1]
elsif
for i in 0...ALIGNMENT_CONDITION.size
if $game_system.alignment < ALIGNMENT_CONDITION[i]
return ALIGNMENT_NAME[i-1]
end
end
end
end
end
module Jet
def self.get_note(obj, tag)
notebox = obj.note.dup
taglist = notebox.scan(/<.+>/)
for t in taglist
text = t.split(/[ <>]/)
text.delete("")
for item in text
return text[text.index(item) + 1] if item == tag
end
end
return nil
end
end
module RPG
class BaseItem
def alignment
if @alignment_req.nil?
txt = Jet.get_note(self, "alignment")
@alignment_req = txt.nil? ? :unaligned : txt.to_i
end
return @alignment_req
end
end
end
class Game_Actor
include AlignmentOptions
alias jet3849_skill_can_use? skill_can_use?
def skill_can_use?(skill)
if skill.alignment != :unaligned
q = (ALIGNMENT_CONDITION.size / 2)
if (skill.alignment < 0 or skill.alignment > 0) && ($game_system.alignment == 0)
return false unless ((ALIGNMENT_CONDITION[q - 1] / 2)..(ALIGNMENT_CONDITION[q + 1] / 2)) === skill.alignment
elsif skill.alignment > 0
return false unless $game_system.alignment >= skill.alignment
elsif skill.alignment < 0
return false unless $game_system.alignment <= skill.alignment
elsif skill.alignment == 0
return false unless (ALIGNMENT_CONDITION[q - 1]..ALIGNMENT_CONDITION[q + 1]) === skill.alignment
end
end
jet3849_skill_can_use?(skill)
end
end
class Scene_Base
def equip_check
check_equipment = @item_window.item.alignment
if check_equipment != :unaligned
if check_equipment < 0
return 1
elsif check_equipment > 0
return 0
elsif check_equipment == 0
return 2
end
else
return 3
end
end
end
class Scene_Equip
include AlignmentOptions
alias jet5839_start start
def start
jet5839_start
@des_window = Window_Base.new(0, 185, 544, 56)
@des_window.visible = false
end
alias jet1047_terminate terminate
def terminate
jet1047_terminate
@des_window.dispose
end
alias jet2094_update update
def update
jet2094_update
@des_window.update
end
def update_item_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@equip_window.active = true
@item_window.active = false
@item_window.index = -1
elsif Input.trigger?(Input::C)
if @item_window.item != nil
q = (ALIGNMENT_CONDITION.size / 2)
final_check = equip_check
if final_check == 0 && $game_system.alignment >= @item_window.item.alignment
full_equip_process
elsif final_check == 1 && $game_system.alignment <= @item_window.item.alignment
full_equip_process
elsif final_check == 3
full_equip_process
elsif final_check == 2 && (ALIGNMENT_CONDITION[q - 1])..(ALIGNMENT_CONDITION[q + 1]) === @item_window.item.alignment
full_equip_process
elsif (final_check == 0 or final_check == 1) && ($game_system.alignment == 0 && ((ALIGNMENT_CONDITION[q - 1] / 2)..(ALIGNMENT_CONDITION[q + 1] / 2)) === @item_window.item.alignment)
full_equip_process
end
else
full_equip_process
end
end
end
def full_equip_process
Sound.play_equip
@actor.change_equip(@equip_window.index, @item_window.item)
@equip_window.active = true
@item_window.active = false
@item_window.index = -1
@equip_window.refresh
for item_window in @item_windows
item_window.refresh
end
end
end
unless $engine_scripts.nil?
JetEngine.active("Alignment System")
end