Introduction
This script adds a simple and easy-to-use alignment system to your game. This will allow the character to be good, evil, or anything in-between. You can even change it up from alignment to other stuff like Rank or Vampirism.
Features
- Adds Alignment
- Easy to add/subtract points
- Easy to make new alignment names
- Adds alignment name in status menu
- You can add tags to equipment/skills to require a certain alignment condition
Screenshots
[spoiler](https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg85.imageshack.us%2Fimg85%2F6899%2Falignment.png&hash=31ba260ad325bde017033d9839087d3da899c2b3)[/spoiler]
How To Use
[spoiler]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
[/spoiler]
Script
[spoiler]
#===============================================================================
# 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
[/spoiler]
Patches
[spoiler]
Place all patches below my alignment script AND the script being patched.
YERD Status ReDux:
[spoiler]
class Window_Status
alias jet5999_refresh refresh unless $@
def refresh
jet5999_refresh
self.contents.font.color = system_color # redefines the self contained font color
self.contents.draw_text(279, 96, 106, WLH, NAME_OF_ALIGNMENT + ":") # draws the name of alignment
self.contents.font.color = normal_color # redefines the self contained font color
self.contents.draw_text(382, 96, 90, WLH, draw_alignment) # draws the alignment name in the window
end
end[/spoiler]
Show Alignment on Map:
[spoiler]
module AlignmentOptions
OPACITY = 0 # How transperant is the window? 0 is transperant, 255 is solid.
SHOW_ALIGNMENT_NAME = true # Show "Alignment:"?
WINDOW_X = 0 # X location of window
WINDOW_Y = 358 # Y location of window
end
class Scene_Map
include AlignmentOptions
alias jet5390_start start unless $@
def start
@alignment_window = Window_MiniAlignment.new(WINDOW_X, WINDOW_Y)
jet5390_start
end
alias jet0145_terminate terminate unless $@
def terminate
@alignment_window.dispose
jet0145_terminate
end
alias jet1902_update update unless $@
def update
@alignment_window.update
jet1902_update
end
end
class Window_MiniAlignment < Window_Base
include AlignmentOptions
def initialize(x, y)
super(x, y, 240, 58)
@v = $game_system.alignment
self.opacity = OPACITY
refresh
end
def refresh
self.contents.clear
@alignment_x = 0
if SHOW_ALIGNMENT_NAME
@alignment_x = 120
self.contents.font.color = system_color
self.contents.draw_text(0, 0, 140, WLH, NAME_OF_ALIGNMENT + ":")
end
self.contents.font.color = normal_color
self.contents.draw_text(@alignment_x, 0, 140, WLH, draw_alignment)
end
def update
refresh if @v != $game_system.alignment
@v = $game_system.alignment
end
end[/spoiler][/spoiler]
Future Features
- Weapons/armor/skills dependent on alignment DONE
- Choose bewteen an in-game variable and add_alignment(points) DONE
- Suggested Features
FAQ
Q: How do I add or subtract points?
A: Read the Instructions!
Q: How do I add more alignment names?
A: Add the name, in quotes, where you want to. Then add the points requirement in the same place, but in the other array.
EX:
ALIGNMENT_NAMES = ["Very Evil", "Kinda Evil", "evil", "neutral", "good", "very good"]
I added "Kinda Evil" between "very evil" and "evil". Now I must add the requirement.
ALIGNMENT_CONDITION = [-100, -75, -50, 0, 50, 100]
See how i added -75 between the requirement for "very evil" and "evil" just like i put "kinda evil"? Thats how.
Credit and Thanks
- Jet10985
- CrimsonSeas (rpgmakervx.net)
- Piejamas (rpgmakervx.net)
- Mithran (rpgmakervx.net)
- Yanfly
- OriginalWij (rpgmakervx.net)
- Synthesis
Looks pretty neat :)
EDIT: Sorry, just realized you did do my suggestion :), so I erased it and hope you didn't see.
Anyway, great idea and I love that you took the time to integrate a visual component in the Status Scene. I'm always so lazy when it comes to graphical stuff @_@
There is an option to use a variable in the config.
Thanks also. =)
Aww, my edit was 41 seconds too late :P
is there a way to make it show up on the menu screen like next to the gold instead of the status screen?
He hasn't updated the version on here in a while
Go to rpgmaker.net and find the newest version
Any way I could get this to work with Scene Status Melody, rather than Redux? I know for a fact that a patch designed for Redux won't work with Melody. Do I just change parts of the patch or is a new one needed?
Seriously? No one ever makes compatibility patches for YEM? Only Redux?
This is very useful since I plan on having more than one ending to my game, but is there a way for me to not show their Alignment in the menu. Because if it's there, players would tend to do specific things to go a certain way on the good or evil bar rather than playing the game how they would if there wasn't an alignment system.
Anyone interested in making another, more up-to-date compatibility patch, for the melody engine? I've asked this before...
How do we make a skill or an equipment dependent on a negative alignment, it doesn't work when I try but with positive alignment points it works
I'll bump this cause the game I'm planning on making is heavily Alignment Orientated, and I'm curious to fankem's question as well.