Group: Member
Posts: 44
Type: Scripter
RM Skill: Skilled
Introduction
This script adds a simple and easy-to-use alignment system to your game. This will allow the charcter 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
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
#=============================================================================== # 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
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.min elsif $game_system.alignment >= ALIGNMENT_CONDITION.max return ALIGNMENT_NAME.max 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 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
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
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 @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
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:
As neat as this is, are there any mechanical aspects that you'll incorporate into this system? Otherwise, if it's all for just show, there really isn't much reason to use it other than letting the player know how evil or good a character is. I suggest that you add in some effects as such:
1. Characters gain access to Very Evil skills after reaching a certain point. Likewise for Very Good. And even some for staying in between.
2. Characters can equip certain weapons and armors when they reach a certain alignment.
3. Characters that reach certain alignment will turn on/off special switches that allow the script's user to access certain sidequests, and whatnot.
Otherwise, this is good for a beginner scripter. There's only the visual aspects made so far, but try to go for the mechanical aspects, too. Don't stop at one thing when both you and I know what's more important for the game.
Group: Member
Posts: 44
Type: Scripter
RM Skill: Skilled
@shanghai: If you looked at the topic more as well as the script you would have seen my "Future Features" part
so... 1.) Can be evented, and when i add the tags for the skills, it will truly limit the use of them.
2.) Also on the Future Feature part already.
3.) Can be evented as well by the creator using a common event.
Thanks for suggestion all this though anyways.
@draken: Yes, i wrote this code. If you look at the scripts themselves, you will see how mine is shorter and more efficient then Synthesis's. As well as simpler. That Good VS. Evil script inspired me to make this so that the user would have a much easier time using it.
__________________________
My Scripts posted here are outdated, as well as my blog posts. I only update at http://www.rpgmakervx.net/ so find my topics there.
Group: Member
Posts: 1
Type: None
RM Skill: Undisclosed
Hey, this is a really cool script!
I just wanted to ask if you could further explain how to tag skills and items. Where do we type <alignment ##> for example? Do we write this as the name of the item or skill in the database?
Group: Member
Posts: 44
Type: Scripter
RM Skill: Skilled
You will see in the bottom-right corner in the database tabs of "items" and "skill", there is a notebox. Insert <alignment ##> there.
## is equal to the base alignment the player must have to use it. EX: I tag potion with <alignment 50> Now only if the character has an alignment of 50 or above can the use the potion. EX2: I tag Evil-potion with <alignment -50> Now only if the character has -50 or below alignment can they use evil-potion.
__________________________
My Scripts posted here are outdated, as well as my blog posts. I only update at http://www.rpgmakervx.net/ so find my topics there.
A saying that I DID NOT STEAL FROM KUNG FU PANDA! Today is a Gift. That's why they call it the Present. You never know what's inside, Because the Present is always changing. ~Made it up with my cuz 7 Years Ago, without the help of anybody else~
Group: Member
Posts: 1
Type: Artist
RM Skill: Beginner
Hi there, I'm trying to use your great script. sadly I keep getting a syntax error when trying to use it, a syntax error at line 257... all it says on that line is: [Show/Hide] Patches
So I am unsure of what to change... any help would be appreciated.
Group: Revolutionary
Posts: 337
Type: Artist
RM Skill: Advanced
question for ya jet, would there be a simple way for ya to color an item depending on the alignment of the character? like say if he is good and has an evil sword in his invy it appears red in the equip menu and he cant equip it?
Group: Member
Posts: 2
Type: Event Designer
RM Skill: Advanced
Jet, First, I would like to say that your script has unlocked some promising possibilities for my project.
I did some tinkering with your script so that there are actually two separate values - "Morality" and "Ethicality." All I did was copy the alignment script and rename everything listed as "alignment" as "Ethicality", changed the associated var, and renamed the aliases.* Both scripts have been tested and work well with each other. My problem is when I try to use you map display path to display both values on the map. They both appear to on the same coordinates, regardless of the x,y values I enter into their respective modules. If you could give me some tips so that I could rewrite (or even slightly modify) the map patch, I would be most grateful.
Quick Question will this work if I do the following
Snippet
CODE
class Game_System
include AlignmentOptions
alias jet5830_initialize initialize def initialize jet5830_initialize @alignment = $game_variables[29] #0 commented out in case of failure end
Where Variable 29 is being used as my Light/Dark Status (I have 3 variables, a light var, a dark val and the Total) The total is determined after each Choice event. So if I DO NOT use the script to add Light/Dark, things will still work if I for example want Dark Heal (absorbs HP from an ally) to be -80 allignment?
__________________________
CURRENT WORKS DEMON BLADE - RPGVXA SHINIGAMI - ~12 Pages - 3 chapters complete, 1 in progress. --------------------------------- OTHER WORKS INCANTA-corrupted. INCANTA REDUX - RPGVX - On Hold --------------------------------- LITERARY WORKS
Longer Works ANGEL OF DEATH - Short Story ~ 4 Pages. SHINIGAMI - ~12 Pages - 3 chapters complete, 1 in progress. DEMON BLADE - Book/Novel?- 34 pages - On Hold. FERAL - Short Story, Length: 6 pages], 2nd person Narrative. -R3 Writing Competition #2 - First-Place DARKSPAWN - Book - 3 Pages On Hold RELGEA CHRONICLE - Book - 118 pages DRAKENGHOUL - book - 36 handwritten pages
Poems I KNOW - Poem - 30 Lines
Song Lyrics End of Days - Song- 44 Lines Kids Killing Kids - Song - 94 Lines
-If you want this sig in another language, move to a country that speaks it.-
-Lv 13 Thread Killer
My R3 Writing Corner
My Wordpress
Relgea Chronicle
X-M-O Story Quoting.
QUOTE (X-M-O @ Jun 19 2012, 02:45 AM)
QUOTE (Pharonix)
so what's going on in this thread?
QUOTE (kayden997)
Redd's back and the first thing he does is...
QUOTE (Pharonix)
pick my mom up in 15 ...*sigh*
QUOTE (kayden997)
You know it's legit!
QUOTE (Pharonix)
Then again, I wrecked the last one...........
QUOTE (Tsutanai)
Oh ok you can have a pink frosted sprinkled doughnut