This script adds a zodiac compatibility modifier that is applied to attacks and skills, enhancing or reducing their effect; it also affects curative skills. The higher the compatibility between the signs of the attacker/skill user and that of the target, the higher the effect.
The compatibility between signs is easily customizable.
EDIT: Updated to include an option for having a new skill, Numerology (functions somewhat like the one from Final Fantasy XII). It is deactivated in default. It does damage as per this equation: Damage 2 ^ N, where N is the number of times it has been used before without missing. The Hit Chance also decreases over time; more details in the customization section below.
1.1: Fixed a bug in the attack damage formula that made the zodiac modifier be multiplied by four. 1.2: Fixed a bug in the attack and skill damage formulae that could cause problems if either user or target didn't have a zodiac sign. Fixed the zodiac compatibility for those with non-specified sign. 1.3: Added the Numerology skill option.
#if this is set to true, actors and enemies with unspecified zodiac sign will #be assigned a random sign instead of no sign at all RANDOM_ZODIAC = false
#if this is set to true, actors with unspecified gender will be assigned a #random gender instead of no gender at all ACTOR_RANDOM_GENDER = false
#if this is set to true, enemies with unspecified gender will be assigned a #random gender instead of no gender at all ENEMY_RANDOM_GENDER = false
#if this is set to true, the actor's zodiac sign will show up at his status #screen SHOW_ZODIAC_STATUS = true
#if this is set to true, the actor's gender will show up at his status #screen SHOW_GENDER_STATUS = false
ACTOR_ZODIAC_TABLE = { # <--- Do not remove # set from 1 to 12, each number representing a zodiac sign, from Aries to Pisces # ActorID Sign 2 => [ 3], #Sign is Gemini 3 => [ 1], #Sign is Aries 4 => [ 8], #Sign is Scorpio } # Do not remove this.
ACTOR_GENDER_TABLE = { # <--- Do not remove # set gender as 5 for male and 10 for female # ActorID Gender 1 => [ 5], 2 => [ 10], } # Do not remove this.
ENEMY_ZODIAC_TABLE = { # <--- Do not remove # EnemyID Sign 1 => [ 2], #Sign is Taurus 13 => [ 11], #Sign is Aquarius } # Do not remove this.
ENEMY_GENDER_TABLE = { # <--- Do not remove # set gender as 5 for male and 10 for female # EnemyID Gender 1 => [ 10], 13 => [ 5], } # Do not remove this.
# What the compatibility numbers do: # 0 means the attack formula works as usual # 1 means 125% damage # -1 means 75% damage # 2 means 150% damage if opposite sexes and 50% if same sex
#if this is set to true, one skill will be assigned to function like the "Numerology" #from Final Fantasy XII; the exact functionality is explained below NUMEROLOGY = false
#this is the skill id for the numerology skill. Ignore if NUMEROLOGY = false NUMEROLOGY_SKILL = 90
#For each time the Numerology skill has been used, it's damage will #increase exponentially. #Damage = 2 ^ N, where n is the number of times Numerology has #been used before without missing (once it misses the counter will be set to 0. #So, the damage will go in this order: 1, 2, 4, 8, 16, 32, 64, 128 and so on, until #it reaches 65,536. At 65,536 damage, it will always miss.
#The hit chance also decreases with each Numerology that doesn't miss, as per #this equation: #Hit Chance for Nth time = 85 - (N/2) ^ 2, where N is again the number of times #Numerology has been used before without missing.
#============================================================================== # ** Almagest Battle Modifications for VX 1.3, by Andrelvis #==============================================================================
#This script adds a zodiac compatibility modifier to the effect of attacks and #skills (including curative ones). The higher the compatibility between the #signs of the attacker/skill user and that of the target, the higher the effect.
module ALMAGEST
#### CUSTOMIZATION ####
#if this is set to true, actors and enemies with unspecified zodiac sign will #be assigned a random sign instead of no sign at all RANDOM_ZODIAC = false
#if this is set to true, actors with unspecified gender will be assigned a #random gender instead of no gender at all ACTOR_RANDOM_GENDER = false
#if this is set to true, enemies with unspecified gender will be assigned a #random gender instead of no gender at all ENEMY_RANDOM_GENDER = false
#if this is set to true, the actor's zodiac sign will show up at his status #screen SHOW_ZODIAC_STATUS = true
#if this is set to true, the actor's gender will show up at his status #screen SHOW_GENDER_STATUS = false
ACTOR_ZODIAC_TABLE = { # <--- Do not remove # set from 1 to 12, each number representing a zodiac sign, from Aries to Pisces # ActorID Sign 2 => [ 3], #Sign is Gemini 3 => [ 1], #Sign is Aries 4 => [ 8], #Sign is Scorpio } # Do not remove this.
ACTOR_GENDER_TABLE = { # <--- Do not remove # set gender as 5 for male and 10 for female # ActorID Gender 1 => [ 5], 2 => [ 10], } # Do not remove this.
ENEMY_ZODIAC_TABLE = { # <--- Do not remove # EnemyID Sign 1 => [ 2], #Sign is Taurus 13 => [ 11], #Sign is Aquarius } # Do not remove this.
ENEMY_GENDER_TABLE = { # <--- Do not remove # set gender as 5 for male and 10 for female # EnemyID Gender 1 => [ 10], 13 => [ 5], } # Do not remove this.
# What the compatibility numbers do: # 0 means the attack formula works as usual # 1 means 125% damage # -1 means 75% damage # 2 means 150% damage if opposite sexes and 50% if same sex
#if this is set to true, one skill will be assigned to function like the "Numerology" #from Final Fantasy XII; the exact functionality is explained below NUMEROLOGY = false
#this is the skill id for the numerology skill. Ignore if NUMEROLOGY = false NUMEROLOGY_SKILL = 90
#For each time the Numerology skill has been used, it's damage will #increase exponentially. #Damage = 2 ^ N, where n is the number of times Numerology has #been used before without missing (once it misses the counter will be set to 0. #So, the damage will go in this order: 1, 2, 4, 8, 16, 32, 64, 128 and so on, until #it reaches 65,536. At 65,536 damage, it will always miss.
#The hit chance also decreases with each Numerology that doesn't miss, as per #this equation: #Hit Chance for Nth time = 85 - (N/2) ^ 2, where N is again the number of times #Numerology has been used before without missing.
#### CUSTOMIZATION ENDS HERE ####
end #closes module
class Game_Actor < Game_Battler
#-------------------------------------------------------------------------- # * Get Zodiacal Sign #-------------------------------------------------------------------------- def zodiac if ALMAGEST::ACTOR_ZODIAC_TABLE.include?(actor.id) actor_zodiac = ALMAGEST::ACTOR_ZODIAC_TABLE[actor.id][0] else if ALMAGEST::RANDOM_ZODIAC if $data_actors[actor.id].zodiac == nil actor_zodiac = 1 + rand(12 - 1 + 1) end else actor_zodiac = 0 end end return actor_zodiac end
#-------------------------------------------------------------------------- # * Get Gender #-------------------------------------------------------------------------- def gender if ALMAGEST::ACTOR_GENDER_TABLE.include?(actor.id) actor_gender = ALMAGEST::ACTOR_GENDER_TABLE[actor.id][0] else if ALMAGEST::ACTOR_RANDOM_GENDER if $data_actors[actor.id].gender == nil actor_gender = (1 + rand(2 - 1 + 1)) * 5 end else actor_gender = 0 end end return actor_gender end
end #end class
class Game_Enemy < Game_Battler
#-------------------------------------------------------------------------- # * Get Zodiacal Sign #-------------------------------------------------------------------------- def zodiac if ALMAGEST::ENEMY_ZODIAC_TABLE.include?(enemy.id) enemy_zodiac = ALMAGEST::ENEMY_ZODIAC_TABLE[enemy.id][0] else if ALMAGEST::RANDOM_ZODIAC if $data_enemies[enemy.id].zodiac == nil enemy_zodiac = 1 + rand(12 - 1 + 1) end else enemy_zodiac = 0 end end return enemy_zodiac end
#-------------------------------------------------------------------------- # * Get Gender #-------------------------------------------------------------------------- def gender if ALMAGEST::ENEMY_GENDER_TABLE.include?(enemy.id) enemy_gender = ALMAGEST::ENEMY_GENDER_TABLE[enemy.id][0] else if ALMAGEST::ENEMY_RANDOM_GENDER if $data_enemies[enemy.id].gender == nil enemy_gender = (1 + rand(2 - 1 + 1)) * 5 end else enemy_gender = 0 end end return enemy_gender end
end #end class
class Game_Battler
#-------------------------------------------------------------------------- # * Calculation of Damage From Normal Attack # attacker : Attacker # The results are substituted for @hp_damage #-------------------------------------------------------------------------- def make_attack_damage_value(attacker) compatibility = ALMAGEST::ZODIAC_COMPATIBILITY_TABLE[attacker.zodiac][self.zodiac] opposite_sex = attacker.gender + self.gender if compatibility == -1 compatibility_modifier = -attacker.atk / 4 end if compatibility == 1 compatibility_modifier = attacker.atk / 4 end if compatibility == 2 if opposite_sex == 15 compatibility_modifier = attacker.atk / 2 else compatibility_modifier = -attacker.atk / 2 end end if compatibility == 0 compatibility_modifier = 0 end damage = (attacker.atk + compatibility_modifier) * 4 - self.def * 2 # base calculation damage = 0 if damage < 0 # if negative, make 0 damage *= elements_max_rate(attacker.element_set) # elemental adjustment damage /= 100 if damage == 0 # if damage is 0, damage = rand(2) # half of the time, 1 dmg elsif damage > 0 # a positive number? @critical = (rand(100) < attacker.cri) # critical hit? @critical = false if prevent_critical # criticals prevented? damage *= 3 if @critical # critical adjustment end damage = apply_variance(damage, 20) # variance damage = apply_guard(damage) # guard adjustment @hp_damage = damage # damage HP end #-------------------------------------------------------------------------- # * Calculation of Damage Caused by Skills or Items # user : User of skill or item # obj : Skill or item (for normal attacks, this is nil) # The results are substituted for @hp_damage or @mp_damage. #-------------------------------------------------------------------------- def make_obj_damage_value(user, obj) compatibility = ALMAGEST::ZODIAC_COMPATIBILITY_TABLE[user.zodiac][self.zodiac] opposite_sex = user.gender + self.gender if compatibility == -1 compatibility_modifier = -user.atk / 4 end if compatibility == 1 compatibility_modifier = user.atk / 4 end if compatibility == 2 if opposite_sex == 15 compatibility_modifier = user.atk / 2 else compatibility_modifier = -user.atk / 2 end end if compatibility == 0 compatibility_modifier = 0 end mod_user_atk = user.atk + compatibility_modifier mod_user_spi = user.spi + compatibility_modifier damage = obj.base_damage # get base damage if damage > 0 # a positive number? damage += mod_user_atk * 4 * obj.atk_f / 100 # Attack F of the user damage += mod_user_spi * 2 * obj.spi_f / 100 # Spirit F of the user unless obj.ignore_defense # Except for ignore defense damage -= self.def * 2 * obj.atk_f / 100 # Attack F of the target damage -= self.spi * 1 * obj.spi_f / 100 # Spirit F of the target end damage = 0 if damage < 0 # If negative, make 0 elsif damage < 0 # a negative number? damage -= mod_user_atk * 4 * obj.atk_f / 100 # Attack F of the user damage -= mod_user_spi * 2 * obj.spi_f / 100 # Spirit F of the user end damage *= elements_max_rate(obj.element_set) # elemental adjustment damage /= 100 damage = apply_variance(damage, obj.variance) # variance damage = apply_guard(damage) # guard adjustment if ALMAGEST::NUMEROLOGY #Final Fantasy XII Numerology Formula if obj == $data_skills[ALMAGEST::NUMEROLOGY_SKILL] #Numerology damage = 2 ** @Numerology @Numerology += 1 end end if obj.damage_to_mp @mp_damage = damage # damage MP else @hp_damage = damage # damage HP end end
if ALMAGEST::NUMEROLOGY #-------------------------------------------------------------------------- # * Calculation of Final Hit Ratio # user : Attacker, or user of skill or item # obj : Skill or item (for normal attacks, this is nil) #-------------------------------------------------------------------------- def calc_hit(user, obj = nil) if obj == nil # for a normal attack hit = user.hit # get hit ratio physical = true elsif obj.is_a?(RPG::Skill) # for a skill if obj != $data_skills[ALMAGEST::NUMEROLOGY_SKILL] #Numerology hit = obj.hit # get success rate physical = obj.physical_attack else physical = false if @Numerology == nil @Numerology = 0 hit = 85 elsif @Numerology == 16 hit = 0 else hit = 85 - (@Numerology / 2 ** 2) end end else # for an item hit = 100 # the hit ratio is made 100% physical = obj.physical_attack end if physical # for a physical attack hit /= 4 if user.reduce_hit_ratio? # when the user is blinded end return hit end
#-------------------------------------------------------------------------- # * Apply Skill Effects # user : Skill user # skill : skill #-------------------------------------------------------------------------- def skill_effect(user, skill) clear_action_results unless skill_effective?(user, skill) @skipped = true return end if rand(100) >= calc_hit(user, skill) # determine hit ratio if skill == $data_skills[ALMAGEST::NUMEROLOGY_SKILL] #Numerology @Numerology = 0 end @missed = true return end if skill != $data_skills[ALMAGEST::NUMEROLOGY_SKILL] #Numerology if rand(100) < calc_eva(user, skill) # determine evasion rate @evaded = true return end end make_obj_damage_value(user, skill) # calculate damage make_obj_absorb_effect(user, skill) # calculate absorption effect execute_damage(user) # damage reflection if skill.physical_attack and @hp_damage == 0 # physical no damage? return end apply_state_changes(skill) # state change end
end #closes Numerology "if"
end #closes class
if ALMAGEST::SHOW_ZODIAC_STATUS #========================================================================== ==== # ** Window_MenuStatus #========================================================================== ==== class Window_Status < Window_Base #-------------------------------------------------------------------------- # * Draw Zodiac Sign # actor : actor # x : draw spot x-coordinate # y : draw spot y-coordinate #-------------------------------------------------------------------------- def draw_actor_zodiac(actor, x, y) self.contents.font.color = system_color self.contents.draw_text(x, y, 120, WLH, "Zodiac Sign") self.contents.font.color = normal_color if actor.zodiac == 1 self.contents.draw_text(x + 134, y, 108, WLH, "Aries") end if actor.zodiac == 2 self.contents.draw_text(x + 134, y, 108, WLH, "Taurus") end if actor.zodiac == 3 self.contents.draw_text(x + 134, y, 108, WLH, "Gemini") end if actor.zodiac == 4 self.contents.draw_text(x + 134, y, 108, WLH, "Cancer") end if actor.zodiac == 5 self.contents.draw_text(x + 134, y, 108, WLH, "Leo") end if actor.zodiac == 6 self.contents.draw_text(x + 134, y, 108, WLH, "Virgo") end if actor.zodiac == 7 self.contents.draw_text(x + 134, y, 108, WLH, "Libra") end if actor.zodiac == 8 self.contents.draw_text(x + 134, y, 108, WLH, "Scorpio") end if actor.zodiac == 9 self.contents.draw_text(x + 134, y, 108, WLH, "Sagittarius") end if actor.zodiac == 10 self.contents.draw_text(x + 134, y, 108, WLH, "Capricorn") end if actor.zodiac == 11 self.contents.draw_text(x + 134, y, 108, WLH, "Aquarius") end if actor.zodiac == 12 self.contents.draw_text(x + 134, y, 108, WLH, "Pisces") end if actor.zodiac == 0 self.contents.draw_text(x + 134, y, 108, WLH, "Unknown") end end
def draw_actor_gender(actor, x, y) self.contents.font.color = system_color self.contents.draw_text(x, y, 120, WLH, "Gender") self.contents.font.color = normal_color if actor.gender == 5 self.contents.draw_text(x + 134, y, 108, WLH, "Male") end if actor.gender == 10 self.contents.draw_text(x + 134, y, 108, WLH, "Female") end if actor.gender == 0 self.contents.draw_text(x + 134, y, 108, WLH, "Unknown") end end
def draw_parameters(x, y) if ALMAGEST::SHOW_GENDER_STATUS draw_actor_zodiac(@actor, x, y + WLH * 0) draw_actor_gender(@actor, x, y + WLH * 1) draw_actor_parameter(@actor, x, y + WLH * 3, 0) draw_actor_parameter(@actor, x, y + WLH * 4, 1) draw_actor_parameter(@actor, x, y + WLH * 5, 2) draw_actor_parameter(@actor, x, y + WLH * 6, 3)
else draw_actor_zodiac(@actor, x, y + WLH * 0) draw_actor_parameter(@actor, x, y + WLH * 2, 0) draw_actor_parameter(@actor, x, y + WLH * 3, 1) draw_actor_parameter(@actor, x, y + WLH * 4, 2) draw_actor_parameter(@actor, x, y + WLH * 5, 3) end end end end
hey dude its me ASCII. you didnt tell me you used multiple script for the Requiem ABS 8 to make it work. can you send me the location of the script you used so i can also make it work... thanks alot.
Group: +Gold Member
Posts: 4,136
Type: Scripter
RM Skill: Undisclosed
Like said in the script instructions...
CODE
ACTOR_ZODIAC_TABLE = { # <--- Do not remove # set from 1 to 12, each number representing a zodiac sign, from Aries to Pisces # ActorID Sign 2 => [ 3], #Sign is Gemini 3 => [ 1], #Sign is Aries 4 => [ 8], #Sign is Scorpio } # Do not remove this.
You set the actor ID and then a zodiac sign.
__________________________
FRACTURE - a SMT inspired game (demo) made by Rhyme, Karsuman and me. Weep and ragequit.
Group: Member
Posts: 13
Type: None
RM Skill: Undisclosed
QUOTE (Kread-EX @ Jan 6 2011, 11:36 AM)
Like said in the script instructions...
CODE
ACTOR_ZODIAC_TABLE = { # <--- Do not remove # set from 1 to 12, each number representing a zodiac sign, from Aries to Pisces # ActorID Sign 2 => [ 3], #Sign is Gemini 3 => [ 1], #Sign is Aries 4 => [ 8], #Sign is Scorpio } # Do not remove this.
You set the actor ID and then a zodiac sign.
Sorry, I'm quite tired of trying to make another script work and didn't see that (yeh, I passed the whole night awake trying to find out what's wrong with the other script) Thanks...And also, would you happen to know how can I make the player choose his sign?
Group: Member
Posts: 13
Type: None
RM Skill: Undisclosed
QUOTE (Kread-EX @ Jan 6 2011, 12:00 PM)
The script doesn't allow you to do that. You can bypass that by making 11 clones of the same actor though.
I didn't think of that, thanks a lot, I'm quite new to all this of game making and such...so yeh.. Thanks a lot, also, do you think you could help me with the other script?