RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
Jet's Alignment System

0 Members and 1 Guest are viewing this topic.

**
Rep:
Level 82
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 for:

How To Use

Spoiler for:
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

Script

Spoiler for:
Code: [Select]
#===============================================================================
# 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


Patches

Spoiler for:
Place all patches below my alignment script AND the script being patched.

YERD Status ReDux:
Spoiler for:
Code: [Select]
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

Show Alignment on Map:
Spoiler for:
Code: [Select]
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

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:

Code: [Select]
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.

Code: [Select]
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



*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Most Mature Member2012 Favorite Staff Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Most Mature Member2010 Favourite Staff Member
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 @_@
« Last Edit: April 15, 2010, 11:30:43 PM by modern algebra »

**
Rep:
Level 82
There is an option to use a variable in the config.
Thanks also. =)



*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Most Mature Member2012 Favorite Staff Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Most Mature Member2010 Favourite Staff Member
Aww, my edit was 41 seconds too late :P

*
Rep: +0/-0Level 76
RMRK Junior
is there a way to make it show up on the menu screen like next to the gold instead of the status screen?

****
Rep:
Level 83
He hasn't updated the version on here in a while
Go to rpgmaker.net and find the newest version

***
Rep:
Level 77
RMRK Junior
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?

***
Rep:
Level 77
RMRK Junior
Seriously? No one ever makes compatibility patches for YEM? Only Redux?

****
Rep:
Level 76
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
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.

***
Rep:
Level 77
RMRK Junior
Anyone interested in making another, more up-to-date compatibility patch, for the melody engine? I've asked this before...

*
Rep: +0/-0Level 64
RMRK Junior
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

**
Rep:
Level 63
RMRK Junior
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.