Overview
These scripts add a Birthsign system to Essentials; giving your Pokemon certain bonuses right from the start that vary depending on the particular sign they have. Similar to other RPG's such as The Elder Scrolls games; where different Birthsigns grant your character a variety of perks and bonuses to start off with. The difference with this is that these Birthsigns are automatically applied at the moment of the Pokemon's birth - when it hatches from an Egg. So depending on the time of year that you hatch your Pokemon, they will gain different starting bonuses than others! In addition to this, there are other cool additions that builds upon the concept of the Birthsign mechanic such as birthdays, lore, and features that will let you hide secrets throughout the world tied to specific constellations.

This project comes with 30 unique Birthsigns, each with their own effects. You may create your own 12-month zodiac by picking 12 signs that you like best, or feel free to use the default set of 12.

UPDATE As of 12/8/17:
Each month now has a corresponding Rival month, along with two Partner months. When breeding, you'll receive extra bonuses for your eggs if the parents' birthsigns are compatible. However, Rival matches will result in poorer offspring. These bonuses include less random IV inheritance, shortened egg steps to hatching, and random bonus items that offspring may be holding upon hatching.

UPDATE As of 1/7/18:
Three smaller scripts of mine - IV Star Ratings, Egg Group Types, and HGSS Shiny Leaf have been rolled into this project. These are inactive by default, but you may turn them on by setting their appropriate toggles to "true" at the top of the core script, if you'd like to use one or all of them. In addition, this project is now also compatible with the Z-Move Add On script in the form of a toggle as well.

-Pokemon Birthsigns is built to support Pokemon Essentials v17 (all scripts are now compatible).
-Support for Kleinstudio's Essentials Black & White has now been added. Install the designated scripts for compatibility. To preview what this version of the script would look like, check my initial post about it here. Keep in mind Kleinstudio is based off of Essentials 15, so many of the newest features added to this project will not be available in that version.

*Note: It is recommended that you start a new game after installing. Pokemon that existed prior to installing may be randomly assigned a birthsign unintentionally.

The Birthsigns

Spoiler:

'The Apprentice'
Constellation: Pikachu
Type: Passive
Effect: When born under this sign, the Pokemon gains twice as many EV's from battle. This may stack with similar effects.

'The Companion'
Constellation: Luvdisc
Type: Battle Lead
Effect: When born under this sign, the Pokemon is twice as happy than usual. This joy is contagious, and even wild Pokemon encountered will have increased happiness when this Pokemon is leading.

'The Beacon'
Constellation: Ampharos
Type: Field Skill
Effect: When born under this sign, the Pokemon hatches with the ability to use the 'Starlight' skill on the field; allowing it to lighten up dark areas.

'The Savage'
Constellation: Luxray
Type: Passive
Effect: When born under this sign, the Pokemon has maximum IV's in Attack, Sp.Atk, and Speed; however the HP IV is 0.

'The Prodigy'
Constellation: Eevee
Type: Self Skill
Effect: When born under this sign, the Pokemon has access to the 'Ability Swap' skill from the menu; allowing it to swap out its current ability for one of its other abilities.

'The Martyr'
Constellation: Chansey
Type: Party Skill
Effect: When born under this sign, the Pokemon hatches with the ability to use the 'Rescue' skill while on the field; allowing it to sacrifice its own HP to heal an ally.

'The Maiden'
Constellation: Gardevoir
Type: Passive
Effect: When born under this sign, the Pokemon has very high odds of being female. The Pokemon also starts off with 150 EV's in Sp.Atk.

'The Gladiator'
Constellation: Gallade
Type: Passive
Effect: When born under this sign, the Pokemon has very high odds of being male. The Pokemon also starts off with 150 EV's in Attack.

'The Voyager'
Constellation: Beheeyem
Type: Field Skill
Effect: When born under this sign, the Pokemon hatches with the ability to use the 'Navigate' skill while on the field; allowing it to lead its trainer to the previously used Pokemon Center.

'The Thief'
Constellation: Sneasel
Type: Battle Lead
Effect: When born under this sign, the Pokemon will sometimes encounter wild Pokemon holding valuable treasures ripe for the stealing. This includes things such as Pearls, Nuggets, or even ancient Relics.

'The Glutton'
Constellation: Munchlax
Type: Passive
Effect: When born under this sign, the Pokemon hatches with maximum IV's in HP, Defense, and Sp.Def; however the Speed IV is 0.

'The Wishmaker'
Constellation: Jirachi
Type: Passive
Effect: When born under this sign, the Pokemon has much higher odds of being shiny.

'The Phoenix'
Constellation: Ho-oh
Type: Self Skill
Effect: When born under this sign, the Pokemon has access to the 'Rebirth' skill from the menu; allowing the Pokemon to revive themselves from the KO status while on the field.

'The Scholar'
Constellation: Slowking
Type: Passive
Effect: When born under this sign, the Pokemon gains an additional 20% bonus to experience gained from battles. This stacks with similar effects.

'The Fugitive'
Constellation: Klefki
Type: Field Skill
Effect: When born under this sign, the Pokemon has access to the 'Escape' skill from the menu; allowing the Pokemon to flee to the exit of any dungeon with its trainer.

'The Aristocrat'
Constellation: Meowth
Type: Battle Lead
Effect: When born under this sign, the Pokemon demands 20% more prize money from trainer battles when leading the party. The Pokemon also has a good chance at finding spare change after wild battles, too. Also doubles money earned with Pay Day.

'The Cleric'
Constellation: Audino
Type: Party Skill
Effect: When born under this sign, the Pokemon has access to the 'Cure' skill from the menu; allowing the Pokemon to heal the party of any harmful status conditions while on the field, at the cost of its HP.

'The Monk'
Constellation: Medicham
Type: Self Skill
Effect: When born under this sign, the Pokemon has access to the 'Trance' skill from the menu; allowing the Pokemon to enter a meditative state and recall any past moves that have long since been forgotten. No Heart Scales are required.

'The Ancestor'
Month: July
Constellation: Sigilyph
Type: Passive
Effect: When born under this sign, any Eggs yielded by the Pokemon will inherit the user's EV spread.

'The Specialist'
Constellation: Smeargle
Type: Self Skill
Effect: When born under this sign, the Pokemon has access to the 'Re-roll' skill from the menu; allowing the Pokemon to reshuffle its IV's to align with a particular Hidden Power type. The new IV's will be randomized, but will always yield combinations that correspond with a chosen type.

Note that Hidden Power spreads all assume that there are only 17 types to choose from (Including Fairy, but not including Normal or sub-types like ??? and Shadow), so they may not be accurate if you have extra custom types in your game.

'The Assassin'
Constellation: Darkrai
Type: Battle Lead
Effect: When born under this sign, the Pokemon has a high chance of seeking out vulnerable wild Pokemon who are asleep when encountered. The user needs to be leading the party for this effect to work. The odds of finding sleeping Pokemon are lower during the day, but higher during nighttime.

'The Parent'
Constellation: Kangaskahn
Type: Party Skill
Effect: When born under this sign, the Pokemon has access to the 'Incubate' skill from the menu; allowing the Pokemon to nurture any Eggs in the party that are close to hatching, and bring down their remaining step count to 1. The Egg must have less than 1,000 steps left for this to work.

'The Hunter'
Constellation: Houndoom
Type: Battle Lead
Effect: When born under this sign, the Pokemon increases the capture rate of wild Pokemon by 20% when leading the party. This stacks with other effects.

'The Eternal'
Constellation: Mew
Type: Self Skill
Effect: When born under this sign, the Pokemon has access to the 'Reincarnate' skill from the menu; allowing the Pokemon to be reborn with a new birthsign. Reincarnated Pokemon begin their life anew, as if they have just been born. Level, EV's, Happiness, Pokerus, OT, Birthdate and Birthsign are all reset; and any effects of the new birthsign will be applied. IV's, Nature, Ability, Gender, Moves, Shinyness and Evolutionary Stages are NOT reset, unless a newly inherited birthsign alters them.

Once Reincarnated, you are given an opportunity to rename the reborn Pokemon. Also, the obtain method text in the Pokemon's Memo Page in the Summary will now read "From a previous life".The Pokemon is also given a "Second Step Ribbon" to commemorate its new life.

'The Bard'
Constellation: Kricketune
Type: Field Skill
Effect: When born under this sign, the Pokemon has access to the 'Harmonize' skill from the menu; allowing it to lure wild Pokemon with song.

'The Empath'
Constellation: Mesprit
Type: Party Skill
Effect: When born under this sign, the Pokemon has access to the 'Bond' skill from the menu; allowing it to select another party member to copy their nature.

'The Mirror'
Constellation: Bronzor
Type: Battle Lead
Effect: When born under this sign, the Pokemon may get into wild encounters with Pokemon that share similar IV's.

'The Tactician'
Constellation: Bisharp
Type: Self Skill
Effect: When born under this sign, the Pokemon has access to the 'Gambit' skill from the menu; allowing it to reallocate its EV points in a different arrangement. The Pokemon must already have 510 EV's to activate this skill.

'The Fool'
Constellation: Spinda
Type: Party Skill
Effect: When born under this sign, the Pokemon has access to the 'Lunacy' skill from the menu; allowing it to reduce its own level by 3 in order to randomly raise the level of a selected party member by 1-5 levels. The user must be at least level 5 to activate this effect. Doesn't work on targets that are higher level than the user.

'The Alchemist'
Constellation: Shuckle
Type: Self Skill
Effect: When born under this sign, the Pokemon has access to the 'Transmute' skill from the menu; allowing it to morph its held item into a different one. Stardust is used as a catalyst in the transmutation process, and 1 will be consumed from your inventory with each use. This skill cannot be used if you don't have any Stardust in your inventory. The type of item you get through transmutation depends on the initial item being held.

Installation

Spoiler:

Pokemon Birthsigns
The core birthsigns script that will add the base mechanic to your game. This is the only installation that is required, but there are several add-ons and optional additions that can further enhance this script found below.

Spoiler:

**Pokemon Birthsigns is a plug-n-play project, but keep in mind that to do this it means several areas such as the Summary, Storage screen, and other areas of the Essentials script will be overwritten by the changes in the Birthsign script. So if you have any personalized changes to those areas in your own project, you must apply those changes to my Birthsign script as well if you don't want them to be overwritten.**

1) First, paste the following folder within the Pictures folder under Graphics. This Birthsigns folder contains by default all the graphics required for everything I add to this project, regardless of what version or which scripts you're using. You may also install the pokegear icon separately in your Pictures folder if you want an icon for the Birthsigns Journal to be displayed in your Pokegear.

2) Then to install the script, create a new section above "Main", and paste all of the code in one of the below links in this new section. Install the first link for default Essentials (v17), or the second for Kleinstudio's Essentials BW (v3).

**Please note that the Kleinstudio version of this script will not be updated regularly, and thus will not match up with many of the current effects, mechanics, and features present in the latest version of this project.

Add-on Scripts
Each of these implement additional features and mechanics to the core birthsign script that all play off of the birthsign mechanics. Highly recommended.

Spoiler:

Birthsigns Journal

Spoiler:

This script adds a Journal feature to your game which displays relevant information of each birthsign. This includes lore, effects of sign bonuses, each sign's Partner/Rival signs (highlighted in blue/red, respectively), and much more. This can be accessed through a script, event, or through the Pokegear by default. Use scene=BirthsignJournalScene.new to access this otherwise.

1) To install the script, Insert a new section above Main, but below the Pokemon Birthsigns script you just installed previously. Paste the following code in the new section. Choose the first link for default Essentials (v17), or choose the second link for Essentials BW (v3).

**Please note that the Kleinstudio version of this script will not be updated regularly, and thus will not match up with many of the current effects, mechanics, and features present in the latest version of this project.

Birthsign Events

Spoiler:

This provides new scripts that'll allow you to easily set up three useful Events utilizing Pokemon Birthsigns. This'll give you a way to utilize the Birthsign mechanic as not just a way to enhance your Pokemon, but as a tool that can be utilized to set up events throughout the actual adventure.

Refer to this linked post for more information about what this script is capable of, and how to set up these events.:Birthsign Events Post

1) To install, use Insert to create a new section below your Pokemon Birthsigns script, and paste the following code in this new section:

This is an entirely new battle mechanic built to support Pokemon Birthsigns. This adds new items known as "Zodiac Gems" to your game that correspond to each of the birthsigns. When your Pokemon with a matching birthsign holds one of these during battle, you can activate its Zodiac Power to unleash a variety of effects. Refer to the post here for an in-depth walkthrough of the mechanic:Zodiac Powers Post

1) To install, use Insert to create a new section below your Pokemon Birthsigns script, and paste the following code in this new section:

2) Next, you'll need to add the Zodiac Gem graphics into your Pictures/Icons folder. I already numbered them so that you may simply drop them into the folder of a fresh copy of Essentials. If your project already has items with these numbers, please re-number the Zodiac Gems to match your project.

3) Now you'll need to add the Zodiac Gems to your Items PBS file. Once again, I already numbered them so you can simply copy/paste them into a fresh installation of Essentials. Please re-number them to match your project if you're already using these numbers.

Items PBS additions:

Spoiler:

Code:

526,JANZODICA,Janzodica,,1,200,"A gem bathed in January's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
527,FEBZODICA,Febzodica,,1,200,"A gem bathed in February's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
528,MARZODICA,Marzodica,,1,200,"A gem bathed in March's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
529,APRIZODICA,Aprizodica,,1,200,"A gem bathed April's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
530,MAYZODICA,Mayzodica,,1,200,"A gem bathed in May's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
531,JUNZODICA,Junzodica,,1,200,"A gem bathed in June's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
532,JULZODICA,Julzodica,,1,200,"A gem bathed in July's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
533,AUGZODICA,Augzodica,,1,200,"A gem bathed in August's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
534,SEPZODICA,Sepzodica,,1,200,"A gem bathed in September's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
535,OCTZODICA,Octzodica,,1,200,"A gem bathed in October's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
536,NOVIZODICA,Novizodica,,1,200,"A gem bathed in November's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,
537,DECIZODICA,Decizodica,,1,200,"A gem bathed in December's starlight. A Pokémon with a matching birthsign may use its Zodiac Power.",0,0,15,

If you're using Luka S.J.'s Elite Battle System, you must also install this compatibility script to allow this add-on to work. Insert a new section below EliteBattle_3, and paste the code from this link in that new section. Name it EliteBattle_ZodiacCompatibility, or whatever you want. ONLY install this if you're using Luka's EliteBattle System!

Optional Additions
These are minor additions that aren't essential to anything, but help supplement the birthsign mechanics in useful ways. None of these are required for the base scripts or add-on scripts to function.

Spoiler:

PBRibbons Update

Spoiler:

This replaces the entire PBRibbons script. This is necessary only to add the "Second Step Ribbon" to your game, which is tied into the effect of 'The Eternal' Birthsign. The Second Step Ribbon is placed onto a Pokemon that has reincarnated itself with that birthsign's effect. It isn't required for anything but that, and the sign will still function perfectly without the ribbon if you don't choose to include it.

1) First, you need to replace the ribbons graphic in your Graphics/Pictures folder with this:

This is necessary only if you'd like access to Debug features that allow you to manually change a Pokemon's birthsign. This is useful for testing purposes, but has no actual use for potential players. Replace your Debug_Pokemon script with this, if you choose to include it:

This is necessary only if you want to fully implement my Legendary Breeding mechanic with Pokemon Birthsigns. This adds 8 new Egg Groups to the game that are required for Legendary Breeding. However, nothing will actually change in your game until you make the appropriate changes to the pokemon PBS file. Consult the thread for more details on this.

FL's script changes the time mechanic in Essentials so that it behaves more like the time system found in Ocarina of Time, or Harvest Moon. However, with some changes you can make it so that time still flows normally, except you have the ability to jump ahead or backwards to whatever month you desire.

My addition to his script adds a feature that will allow you to alter the time so that you can change the current month. This is very useful as it allows you to ensure your eggs will hatch with a particular birthsign. You may call this script in an event with "pbSetMonth", which will open up a command list with all 12 months to choose from. Picking a month will set the date so that it is now the first day of that selected month (the time of day will remain the same). There is also a 13th option, "Reset", which will revert the time back to the appropriate real-world time.

You may also use "pbResetDay" in an Event to reset the current day to the first day of the current month. Also, "pbTimeCheck" will return the current date and time, allowing you to easily check the time to ensure that you've properly set the desired time.

Installation

Spoiler:

1) First off, you'll obviously need to have this script installed first. You may find it here:Unreal Time System
Make sure to credit to FL if using this script.

2) Once installed, you'll have to make several adjustments to his script. First, use CTRL+F to locate every instance of

Code:

NTN_ENABLED

and change it to

Code:

$ntnEnabled

This will allow the "Reset" function to work, allowing you to revert the time back to normal whenever you desire.

3) Now find the line:

Code:

NTS_TIMEPROPORTION=60

And change it to:

Code:

NTS_TIMEPROPORTION=1

This will make it so that time moves forward at the normal rate. This isnt required if you prefer time to advance at a quicker rate (at which case set this to whatever number you want. Read FL's notes for more details).

4) Next, find this line:

Code:

NTN_EXTRADAYS=-1

And change the "-1" into whatever variable number you have available to use. I used 97.

This will make it so that the base time that the Unreal Time system uses is whatever the current date and time is, instead of the default FL uses (January 1st, 2000).

6) Finally, paste all of the following somewhere in your project. Right below the Unreal Time script is a good spot.

Code:

#===============================================================================
# Month Reset
# Allows you to reset the current month to a different one.
# Requires FL's Unreal Time System script, found here:
#===============================================================================
# http://www.pokecommunity.com/showthread.php?p=7283916#7283916
#===============================================================================
# Use pbTimeCheck in an event to check the current date and time.
# Use pbResetDay in an event to change the day to the first of the month.
# Use pbSetMonth in an event to select a new month to set the time to.
# Use so you may check the current date and time.
# Useful way to check if the time has been properly set.
def pbTimeCheck
curmon=pbGetAbbrevMonthName(pbGetTimeNow.mon)
curday=pbGetTimeNow.day
curyear=pbGetTimeNow.year
curhour=pbGetTimeNow.hour
curmin=pbGetTimeNow.min
Kernel.pbMessage(_INTL("Date: {1} {2}, {3}\nTime: {4}:{5}",
curmon,curday,curyear,curhour,curmin))
end
# Used to reset the current day to the first of the month.
# Months may be off by a few days otherwise.
def pbResetDay
curDay = pbGetTimeNow.day
timeDifference = (1-curDay)
setToFirst = timeDifference
$game_variables[NTN_EXTRADAYS]+=setToFirst
Kernel.pbMessage(_INTL("The current day has been reset to the first of the month."))
end
# Allows you to choose the desired month to switch to. The day is reset to
# the first day of the newly selected month.
# Use the "Reset" option at the bottom of the list to revert the month and
# day to its natural time.
def pbSetMonth
curMonth = pbGetTimeNow.mon*30
curDay = pbGetTimeNow.day
timeNow = curMonth+curDay
command=0
loop do
command=Kernel.pbShowCommands(nil,[
_INTL("January"),
_INTL("February"),
_INTL("March"),
_INTL("April"),
_INTL("May"),
_INTL("June"),
_INTL("July"),
_INTL("August"),
_INTL("September"),
_INTL("October"),
_INTL("November"),
_INTL("December"),
_INTL("Reset"),
_INTL("Cancel")
],-1)
case command
### Cancel ###
when -1, 13
Kernel.pbMessage(_INTL("The current date was not changed."))
break
### Jan ###
when 0
month = 1
timeWished = month*30
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to January."))
pbResetDay
break
### Feb ###
when 1
month = 2
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to February."))
pbResetDay
break
### Mar ###
when 2
month = 3
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to March."))
pbResetDay
break
### Apr ###
when 3
month = 4
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to April."))
pbResetDay
break
### May ###
when 4
month = 5
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to May."))
pbResetDay
break
### Jun ###
when 5
month = 6
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to June."))
pbResetDay
break
### Jul ###
when 6
month = 7
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to July."))
pbResetDay
break
### Aug ###
when 7
month = 8
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to August."))
pbResetDay
break
### Sep ###
when 8
month = 9
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to September."))
pbResetDay
break
### Oct ###
when 9
month = 10
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to October."))
pbResetDay
break
### Nov ###
when 10
month = 11
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to November."))
pbResetDay
break
### Dec ###
when 11
month = 12
timeWished = month*31
timeDifference = timeWished-timeNow
monthSet = timeDifference
$game_variables[NTN_EXTRADAYS]+=monthSet
Kernel.pbMessage(_INTL("The month has been set to December."))
pbResetDay
break
### Reset ###
when 12
$game_variables[NTN_EXTRADAYS] = 0
$PokemonGlobal.newFrameCount=0
Kernel.pbMessage(_INTL("The time has been reset to the current date."))
break
end
end
end

~

*Note: You shouldn't bother FL with questions or help with this addition. I made this add-on to his script on my own and he isn't responsible for it if it's causing issues for you. I've tested it and it seems to work perfectly, so there shouldn't be an issue if you follow the instructions. And please remember to give credit to him for his script.

Following Pokemon

Spoiler:

This script, updated by mej71, adds the follower mechanic originally seen in HGSS. Talking to a follower will display various messages that change based on certain factors.

My addition to this project adds a birthday emote and various birthday messages to the Following Pokemon script, which will be displayed on your hatched followers every year during their birthday.

Installation

Spoiler:

1) First off, you'll obviously need to have this script installed first. You may find it here:Following Pokemon
Make sure to credit the appropriate people if using this script.

And paste the following new code above this heading:
(Note that mej71 has already updated his script to include this, so you many not need to add this)

Code:

#===============================================================================
# * Pokemon Messages when birthday
#===============================================================================
elsif e.isBirthday?
$scene.spriteset.addUserAnimation(Emo_Cake, pos_x, pos_y-2)
pbWait(50)
messages=rand(10)
if messages==0
Kernel.pbMessage(_INTL("{1} seems to be reminiscing on all it has learned in the last year.",e.name,$Trainer.name))
elsif messages==1
Kernel.pbMessage(_INTL("{1} seems glad to be spending its birthday with {2}.",e.name,$Trainer.name))
elsif messages==2
Kernel.pbMessage(_INTL("{1} is having the best birthday ever!",e.name,$Trainer.name))
elsif messages==3
Kernel.pbMessage(_INTL("{1} can't believe its been a whole year already!",e.name,$Trainer.name))
elsif messages==4
Kernel.pbMessage(_INTL("{1} seems to be sniffing around for presents...",e.name,$Trainer.name))
elsif messages==5
Kernel.pbMessage(_INTL("{1} seems a bit out of breath...\nYou're getting old!",e.name,$Trainer.name))
elsif messages==6
Kernel.pbMessage(_INTL("{1} looks ready to party!",e.name,$Trainer.name))
elsif messages==7
Kernel.pbMessage(_INTL("You wish {1} a happy birthday.\nHappy birthday, {1}!",e.name,$Trainer.name))
elsif messages==8
Kernel.pbMessage(_INTL("{1} seems to be looking forward to another year with {2}.",e.name,$Trainer.name))
elsif messages==9
Kernel.pbMessage(_INTL("{1} wants to eat some cake!",e.name,$Trainer.name))
end

4) Now go into your Graphics/Animations folder, and add this graphic. It'll ask you to replace the existing graphic in that folder, and click yes.New emo2 graphic

5) Now make sure to save your work and exit RPGMaker before moving onto the next step.

6) Finally, go into your Data folder and add this file. It'll ask you to replace the existing file in that folder, and click yes.New Animations file

*Note: You shouldn't bother mej71 with questions or help with this addition. I made this add-on to his script on my own and he isn't responsible for it if it's causing issues for you. I've tested it and it seems to work perfectly, so there shouldn't be an issue if you follow the instructions. And please remember to give credit to him and the rest of the contributors to the script.

Useful Things to Know

Spoiler:

Toggles

ZODIACSET
This controls which 12-month zodiac will be active in your game. Set this to a number that will give you the desired zodiac set.
0 = No zodiac.
1 = Birthsigns Set 1 (signs 1-12)
2 = Birthsigns Set 2 (signs 13-24)
3 = Random Zodiac
4 = Custom Zodiac

WILDBIRTHSIGNS
This controls whether wild Pokemon will spawn with birthsigns. The number you set this toggle will give different results.
0 = Wild Pokemon spawn with no birthsigns.
1 = Wild Pokemon spawn with whatever the current month's sign is, based on your zodiac.
2 = Wild Pokemon spawn with a random sign out of your 12 month zodiac.
3 = Wild Pokemon spawn with a random sign out of all 30 birthsign options.

SHOW_IV_STARS
This toggles whether or not you want my IV Star Ratings script to be displayed in your game. Set this to true or false.

SHOW_EGG_GROUPS
This toggles whether or not you want my Summary Egg Groups script to be displayed in your game. Set this to true or false.

SHOW_SHINY_LEAF
This toggles whether or not you want my HGSS Shiny Leaf Functionality script to be displayed in your game. Set this to true or false.

INCLUDE_ZMOVES
This toggles compatibility with the Z-Move Add On scripts. Please set this toggle to "true" if using their scripts. Otherwise, this must be set to "false".

Coding

PBBirthsigns.getName(X)
Returns the name of a particular birthsign, where "X" is the number associated with a particular sign (where 'The Apprentice' is #1, and 'The Alchemist' is #30).

PBZodiacsigns.getName(X)
Returns the name of a particular birthsign within your 12-month zodiac, where "X" is the number of the month associated with that sign (ex. 9 would get the name of September's sign).

pokemon.pbGetBirthsignName
Returns the name of the Pokemon's active birthsign.

pokemon.setZodiacsign(X)
Manually sets a particular sign on a Pokemon, where "X" is the month number associated with a particular sign in your zodiac.

pokemon.setRandomZodiac
Sets a completely random birthsign on a Pokemon out of your 12-month zodiac.

pokemon.setBirthsign(X)
Manually sets a particular sign on a Pokemon, where "X" is the number associated with a particular sign (where 'The Apprentice' is #1, and 'The Alchemist' is #30).

pokemon.setRandomSign
Sets a completely random birthsign on a Pokemon out of the 30 possible options.

pokemon.canHaveSign?
Returns true if the Pokemon in question is capable of having a birthsign.

pokemon.hasXxxBirthsign?
Returns true if the Pokemon in question has a particular zodiac sign, where "Xxx" is the abbreviated month, such as Jan or Dec.

pokemon.hasPartnerSign?pokemon.hasRivalSign?
Returns true if the Pokemon in question has a corresponding Partner or Rival sign to the current month.

pokemon.hasCurrentSign?
Returns true if the Pokemon in question has the current month's birthsign.

pokemon.hasBirthsign?
Returns true if the Pokemon in question has any birthsign.

pokemon.isBirthday?
Returns true if it's the Pokemon's birthday. Only applies to hatched Pokemon.

pokemon.setShinyLeaf(X)
Sets a number of shiny leaves on a Pokemon, where "X" is the number of desired leaves (0-6). This wont be displayed unless the SHOW_SHINY_LEAF toggle is set to "true".

pokemon.addShinyLeaf
Adds 1 shiny leaf to a Pokemon's total. This wont be displayed unless the SHOW_SHINY_LEAF toggle is set to "true".

pokemon.removeShinyLeaf
Removes 1 shiny leaf from a Pokemon's total. This wont be displayed unless the SHOW_SHINY_LEAF toggle is set to "true".

pokemon.hasLeafCrown?
Returns true if the Pokemon has a leaf crown (6 leaves).

pbArceusEggSpawn
Running this script in an event allows you to trigger a unique event that allows Arceus to spawn an egg of specific legendary species based on its held item. This is a feature introduced in my Legendary Breeding script, so consult that thread for more details on its mechanics.

Control Switches
The Birthsign Events script utilizes 15 different control switches (numbers 111-125). 12 for months, and 3 for the actual event types. If your project already uses these switch numbers for something else, you must re-number the Birthsign Event switches in the script itself. To avoid confusion, it's best if you name all of the switches as so:

To set up an Event, all you need to do is turn ON the desired month switch, and the desired event type switch. Then insert the script pbBirthsignEvent. Page 2 of the event should be blank (for Birthstone and Sign Conversion events), but have the Self Switch A turned on. Birthpath events are different only in that Page 2 should have an "unlocked" event in place, for when the player meets the requirements of Page 1.

Here's an example of a Sign Conversion event for December's birthsign:

Giving NPC Trainers the ability to use Zodiac Powers in battle:
If the Zodiac Powers Add-On is installed, make the following changes -

That's it! Now, if you want to give a trainer's Pokemon a Zodiac Power, you may do so in the Trainer PBS file. Simply give the Pokemon the desired Zodiac Gem to hold, and then add the month of the birthsign as the final variable by writing the 3 letter abbreviation in caps (ex: JAN). Doing so will give the trainer's Pokemon the required birthsign to activate its item.

Keep in mind that NPC Trainers will always activate their Zodiac Powers on turn 1.

Imposing a once-per-battle rule for Zodiac Powers:
By default, you can use Zodiac Powers an unlimited number of times in battle. This is balanced by the Zodiac Gems (which trigger the powers) being consumables. However, you can still implement a once per battle rule by simply doing this -

Spoiler:

Find this line in the Zodiac Power script, and remove the comment tag in front of it

(Zodiac Powers) Not every move/ability/zodiac power combination has been tested. There are bound to be certain things that break when stacked together. One example is using 'The Voyager' Zodiac Power (U-Turn effect) and Baton Pass on the same turn, which causes Baton Pass to break and create an awkward situation in battle. I'll fix some of these issues as I find them, if possible.

Complementary Scripts
Other scripts that work well in conjunction with Pokemon Birthsigns are:

Wow... I've never really seen anyone tackle how hatching works in such a way. Quite the imagination! The is fantastic and the tutorial enables the birth (haha) of an entire host of fantastic ideas. I didn't really expect you'd set out-of-battle HM moves to be naturally known by the Pokemon with a specific sign--brilliant!

I didn't have enough time to play with the summary screens or the Birthsign TM/HM effect hiccup, but if you wish I could help you out via PM with those quirks on my free time.

Wow... I've never really seen anyone tackle how hatching works in such a way. Quite the imagination! The is fantastic and the tutorial enables the birth (haha) of an entire host of fantastic ideas. I didn't really expect you'd set out-of-battle HM moves to be naturally known by the Pokemon with a specific sign--brilliant!

I didn't have enough time to play with the summary screens or the Birthsign TM/HM effect hiccup, but if you wish I could help you out via PM with those quirks on my free time.

Thanks, I'm glad you like it. Ever since i discovered the 'zodiac' def in the scripts, it's been bugging me how such a cool element has gone (as far as I can tell) completely unused by anyone working with Essentials. That's basically where the idea began. The out-of-battle moves was born out of how im trying to design my own Pokemon game; I'm trying to make it really challenging where items and quick travel are scarce, so it seemed like a cool idea to me to give them as optional bonuses to Pokemon if you went out of your way to customize them from birth. This way the player is forced into making a choice; do I go for the better battling potential right out of the gate? Or maybe for effects that'll make things easier for me outside of battle?

I also tried to capitalize on the lesser-used moves that are usually abandoned by players. Most players ditch Teleport for Fly, Flash is generally not even mandatory, and Soft-Boiled has an extremely small userbase. This way, those effects can still be useful without having to lug around an otherwise useless move, or a Pokemon you don't want to train. This is why I didn't choose things like Surf, which is something everyone is likely to have in their party anyway; even if it wasn't an HM.

As far as any help goes, I would really appreciate it! I'm sure if I played around with things long enough, I'd eventually figure out how to fix those small quirks. I just got sort of burnt out trying to fix them when they're ultimately pretty minor.

(And I agree those scripts are overlooked! I use a few of them myself and I think they're great!)

Also I just edited the post to fix a couple of naming issues I noticed. Nothing major, it was just bugging me that I wrote the wrong names in one of the commented-out sections.

i did what you say, but it nothing happen , i have to swicht "ON" son variable ?

There shouldn't be anything you have to switch on. Just hatch an egg, and whatever month it currently is will have its effects applied. If your Pokemon has a round purple icon graphic on its summary pages, then it already has the corresponding effect applied.

Did you download and install the graphics from the link in Step 11? If your computer is following the standard time, it should be applying May's effect - 'The Prodigy'. This means any Pokemon you hatch will ALWAYS hatch with its Hidden Ability.

Check the Pokemon you're hatching, and see if they all have their HA's. If they do, then the scripts are working, you just didn't implement the graphics correctly.

# Gets a Tone object representing a suggested shading
# tone for the current time of day.
def self.getTone()
return Tone.new(0,0,0) if !ENABLESHADING
if [email protected]
@cachedTone=Tone.new(0,0,0)
end
if [email protected] || @dayNightToneLastUpdate!=Graphics.frame_count
@cachedTone=getToneInternal()
@dayNightToneLastUpdate=Graphics.frame_count
end
return @cachedTone
end

def self.pbGetDayNightMinutes
now=pbGetTimeNow # Get the current in-game time
return (now.hour*60)+now.min
end

private

# Internal function

def self.getToneInternal()
# Calculates the tone for the current frame, used for day/night effects
realMinutes=pbGetDayNightMinutes
hour=realMinutes/60
minute=realMinutes%60
tone=PBDayNight::HourlyTones[hour]
nexthourtone=PBDayNight::HourlyTones[(hour+1)%24]
# Calculate current tint according to current and next hour's tint and
# depending on current minute
return Tone.new(
((nexthourtone.red-tone.red)*minute/60.0)+tone.red,
((nexthourtone.green-tone.green)*minute/60.0)+tone.green,
((nexthourtone.blue-tone.blue)*minute/60.0)+tone.blue,
((nexthourtone.gray-tone.gray)*minute/60.0)+tone.gray
)
end
end

#=======================================================================================
# New Birthsigns
#
# If you want to modify the date ranges for each Birthsign:
#-The first number on each line corresponds to the month that Birthsign begins.
#-The second number on each line corresponds to the day of the given month that the Birthsign begins.
#-The third number on each line corresponds to the month that the Birthsign ends.
#-The fourth number on each line corresponds to the day of the given month that the Birthsign ends.
#
#If you change the date ranges for any of the Birthsigns, make sure to reflect these changes in the
#Birthsign Page text in PScreen_Summary
#=======================================================================================
def zodiac(month,day)
time=[
1,1,1,31, # The Companion
2,1,2,28, # The Lover
3,1,3,31, # The Beacon
4,1,4,30, # The Savage
5,1,5,31, # The Prodigy
6,1,6,30, # The Martyr
7,1,7,31, # The Widow
8,1,8,31, # The Gladiator
9,1,9,30, # The Voyager
10,1,10,31, # The Thief
11,1,11,30, # The Glutton
12,1,12,31 # The Wishmaker
]
for i in 0...12
return i if month==time[i*4] && day>=time[i*4+1]
return i if month==time[i*4+2] && day<=time[i*4+2]
end
return 0
end
#=======================================

# 0 is Aries, 11 is Pisces.
def zodiacComplements(sign)
return [(sign+1)%12,(sign+11)%12]
end
#===============================================================================
# Birthsigns - Names & Descriptions
#
#If you choose to change the names of 'The Beacon', 'The Martyr', or 'The Voyager', you will also
#need to change the text in PScreen_Party & PScreen_Summary to match your new names.
#
#If you choose to change the names of any of the other Birthsigns, you will need to change the
#text in PScreen_EggHatching & PScreen_Summary to match your new names.
#
#If you choose to change the description text for any of the Birthsigns, your next text may no
#longer fit on the page and may require new positioning in PScreen_Summary, and may
#also need changes to the 'summaryzboarder' graphic.
#===============================================================================
def zodiacValue(sign)
return (sign)%12
end

def pbGetZodiacDesc(sign)
return [_INTL(""),
_INTL("The Pokémon is born cured of Pokérus."),
_INTL("The Pokémon is born with max happiness."),
_INTL("The Pokémon can use Flash without the move."),
_INTL("The Pokémon has max IV's in offense & Speed, but 0 HP."),
_INTL("The Pokémon is born with its Hidden Ability."),
_INTL("The Pokémon can use Soft-Boiled without the move."),
_INTL("The Pokémon is always born female, if able."),
_INTL("The Pokémon is born with 100 EV's in Atk & Sp.Atk."),
_INTL("The Pokémon can use Teleport without the move."),
_INTL("The Pokémon is born with max EV's in Speed."),
_INTL("The Pokémon has max IV's in defenses & HP, but 0 Speed."),
_INTL("The Pokémon is always born shiny.")][sign]
end
#===========================================================================

# Returns whether the specified Trainer is NOT this Pokemon's original trainer.
def isForeign?(trainer)
return @trainerID!=trainer.id || @ot!=trainer.name
end

# Returns the public portion of the original trainer's ID.
def publicID
return @trainerID&0xFFFF
end

# Returns this Pokémon's level when this Pokémon was obtained.
def obtainLevel
@obtainLevel=0 if [email protected]
return @obtainLevel
end

# Returns the time when this Pokémon was obtained.
def timeReceived
return @timeReceived ? Time.at(@timeReceived) : Time.gm(2000)
end

# Sets the time when this Pokémon was obtained.
def timeReceived=(value)
# Seconds since Unix epoch
if value.is_a?(Time)
@timeReceived=value.to_i
else
@timeReceived=value
end
end

# Returns the time when this Pokémon hatched.
def timeEggHatched
if obtainMode==1
return @timeEggHatched ? Time.at(@timeEggHatched) : Time.gm(2000)
else
return Time.gm(2000)
end
end

# Sets the time when this Pokémon hatched.
def timeEggHatched=(value)
# Seconds since Unix epoch
if value.is_a?(Time)
@timeEggHatched=value.to_i
else
@timeEggHatched=value
end
end

def birthsign
if obtainMode==1
return pbGetZodiacName(self.timeEggHatched.mon)
end
end

################################################################################
# Form Change Time
################################################################################

def form_change_time
if [email protected]_change_time
@form_change_time=Time.now
end
return @form_change_time
end

################################################################################
# Party Index
# Returns the index of the pokemon in the trainers party, if applicable
################################################################################

def partyIndex
ret=-1
return ret if !$Trainer || !($Trainer.party)
for i in 0...$Trainer.party.length
return i if $Trainer.party[i]==self
end
return ret
end

################################################################################
# Moves
################################################################################
# Returns the number of moves known by the Pokémon.
def numMoves
ret=0
for i in 0...4
ret+=1 if @moves[i].id!=0
end
return ret
end

# Returns true if the Pokémon knows the given move.
def knowsMove?(move)
if move.is_a?(String) || move.is_a?(Symbol)
move=getID(PBMoves,move)
end
return false if !move || move<=0
for i in 0...4
return true if @moves[i].id==move
end
return false
end

# Sets this Pokémon's movelist to the default movelist it originally had.
def resetMoves
moves=self.getMoveList
movelist=[]
for i in moves
if i[0]<=self.level
movelist[movelist.length]=i[1]
end
end
movelist|=[] # Remove duplicates
listend=movelist.length-4
listend=0 if listend<0
j=0
for i in listend...listend+4
moveid=(i>=movelist.length) ? 0 : movelist[i]
@moves[j]=PBMove.new(moveid)
j+=1
end
end

# Silently learns the given move. Will erase the first known move if it has to.
def pbLearnMove(move)
if move.is_a?(String) || move.is_a?(Symbol)
move=getID(PBMoves,move)
end
return if move<=0
for i in 0...4
if @moves[i].id==move
j=i+1; while j<4
break if @moves[j].id==0[email protected][j]
@moves[j][email protected][j-1]
@moves[j-1]=tmp
j+=1
end
return
end
end
for i in 0...4
if @moves[i].id==0
@moves[i]=PBMove.new(move)
return
end
end
@moves[0][email protected][1]
@moves[1][email protected][2]
@moves[2][email protected][3]
@moves[3]=PBMove.new(move)
end

# Deletes the given move from the Pokémon.
def pbDeleteMove(move)
if move.is_a?(String) || move.is_a?(Symbol)
move=getID(PBMoves,move)
end
return if !move || move<=0
newmoves=[]
for i in 0...4
newmoves.push(@moves[i]) if @moves[i].id!=move
end
newmoves.push(PBMove.new(0))
for i in 0...4
@moves[i]=newmoves[i]
end
end

# Deletes the move at the given index from the Pokémon.
def pbDeleteMoveAtIndex(index)
newmoves=[]
for i in 0...4
newmoves.push(@moves[i]) if i!=index
end
newmoves.push(PBMove.new(0))
for i in 0...4
@moves[i]=newmoves[i]
end
end

# Deletes all moves from the Pokémon.
def pbDeleteAllMoves
for i in 0...4
@moves[i]=PBMove.new(0)
end
end

# Copies currently known moves into a separate array, for Move Relearner.
def pbRecordFirstMoves
@firstmoves=[]
for i in 0...4
@firstmoves.push(@moves[i].id) if @moves[i].id>0
end
end

# Replaces one ribbon with the next one along, if possible.
def upgradeRibbon(*arg)
@ribbons=[] if [email protected]
for i in 0...arg.length-1
for j in [email protected]
thisribbon=(arg[i].is_a?(Integer)) ? arg[i] : getID(PBRibbons,arg[i])
if @ribbons[j]==thisribbon
nextribbon=(arg[i+1].is_a?(Integer)) ? arg[i+1] : getID(PBRibbons,arg[i+1])
@ribbons[j]=nextribbon
return nextribbon
end
end
end
if !hasRibbon?(arg[arg.length-1])
firstribbon=(arg[0].is_a?(Integer)) ? arg[0] : getID(PBRibbons,arg[0])
giveRibbon(firstribbon)
return firstribbon
end
return 0
end

# Removes the specified ribbon from this Pokémon.
def takeRibbon(ribbon)
return if [email protected]
ribbon=getID(PBRibbons,ribbon) if !ribbon.is_a?(Integer)
return if ribbon==0
for i in [email protected]
if @ribbons[i]==ribbon
@ribbons[i]=nil; break
end
end
@ribbons.compact!
end

# Removes all ribbons from this Pokémon.
def clearAllRibbons
@ribbons=[]
end

# Returns the items this species can be found holding in the wild.
def wildHoldItems
dexdata=pbOpenDexData
pbDexDataOffset(dexdata,@species,48)
itemcommon=dexdata.fgetw
itemuncommon=dexdata.fgetw
itemrare=dexdata.fgetw
dexdata.close
itemcommon=0 if !itemcommon
itemuncommon=0 if !itemuncommon
itemrare=0 if !itemrare
return [itemcommon,itemuncommon,itemrare]
end

# Returns the EV yield of this Pokémon.
def evYield
ret=[]
dexdata=pbOpenDexData
pbDexDataOffset(dexdata,@species,23)
for i in 0...6
v=dexdata.fgetb
v=0 if !v
ret.push(v)
end
dexdata.close
return ret
end

def pbRefresh
for i in 0...6[email protected]["pokemon#{i}"]
if sprite
if sprite.is_a?(PokeSelectionSprite)
sprite.pokemon=sprite.pokemon
else
sprite.refresh
end
end
end
end

def pbRefreshSingle(i)[email protected]["pokemon#{i}"]
if sprite
if sprite.is_a?(PokeSelectionSprite)
sprite.pokemon=sprite.pokemon
else
sprite.refresh
end
end
end

def pbHardRefresh
oldtext=[]
lastselected=-1
for i in 0...6
oldtext.push(@sprites["pokemon#{i}"].text)
lastselected=i if @sprites["pokemon#{i}"].selected
@sprites["pokemon#{i}"].dispose
end[email protected] if lastselected>[email protected]
lastselected=0 if lastselected<0
for i in 0...6
if @party[i]
@sprites["pokemon#{i}"]=PokeSelectionSprite.new(
@party[i],i,@viewport)
else
@sprites["pokemon#{i}"]=PokeSelectionPlaceholderSprite.new(
@party[i],i,@viewport)
end
@sprites["pokemon#{i}"].text=oldtext[i]
end
pbSelect(lastselected)
end

def pbPreSelect(pkmn)
@activecmd=pkmn
end

def pbChoosePokemon(switching=false)
for i in 0...6
@sprites["pokemon#{i}"].preselected=(switching&&[email protected])
@sprites["pokemon#{i}"].switching=switching
end
pbRefresh
loop do
Graphics.update
Input.update
self.update[email protected]
key=-1
key=Input::DOWN if Input.repeat?(Input::DOWN)
key=Input::RIGHT if Input.repeat?(Input::RIGHT)
key=Input::LEFT if Input.repeat?(Input::LEFT)
key=Input::UP if Input.repeat?(Input::UP)
if key>=0
@activecmd=pbChangeSelection(key,@activecmd)
end
if @activecmd!=oldsel # Changing selection
pbPlayCursorSE()
numsprites=(@multiselect) ? 8 : 7
for i in 0...numsprites
@sprites["pokemon#{i}"].selected=([email protected])
end
end
if Input.trigger?(Input::B)
return -1
end
if Input.trigger?(Input::C)
pbPlayDecisionSE()
cancelsprite=(@multiselect) ? 7 : 6
return (@activecmd==cancelsprite) ? -1 : @activecmd
end
end
end

def pbSelect(item)
@activecmd=item
numsprites=(@multiselect) ? 8 : 7
for i in 0...numsprites
@sprites["pokemon#{i}"].selected=([email protected])
end
end

def pbTakeMail(pkmn)
if !pkmn.hasItem?
pbDisplay(_INTL("{1} isn't holding anything.",pkmn.name))
elsif !$PokemonBag.pbCanStore?(pkmn.item)
pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
elsif pkmn.mail
if pbConfirm(_INTL("Send the removed mail to your PC?"))
if !pbMoveToMailbox(pkmn)
pbDisplay(_INTL("Your PC's Mailbox is full."))
else
pbDisplay(_INTL("The mail was sent to your PC."))
pkmn.setItem(0)
end
elsif pbConfirm(_INTL("If the mail is removed, the message will be lost. OK?"))
pbDisplay(_INTL("Mail was taken from the Pokémon."))
$PokemonBag.pbStoreItem(pkmn.item)
pkmn.setItem(0)
pkmn.mail=nil
end
else
$PokemonBag.pbStoreItem(pkmn.item)
itemname=PBItems.getName(pkmn.item)
pbDisplay(_INTL("Received the {1} from {2}.",itemname,pkmn.name))
pkmn.setItem(0)
end
end

def pbGiveMail(item,pkmn,pkmnid=0)
thisitemname=PBItems.getName(item)
if pkmn.isEgg?
pbDisplay(_INTL("Eggs can't hold items."))
return false
end
if pkmn.mail
pbDisplay(_INTL("Mail must be removed before holding an item."))
return false
end
if pkmn.item!=0
itemname=PBItems.getName(pkmn.item)
pbDisplay(_INTL("{1} is already holding one {2}.\1",pkmn.name,itemname))
if pbConfirm(_INTL("Would you like to switch the two items?"))
$PokemonBag.pbDeleteItem(item)
if !$PokemonBag.pbStoreItem(pkmn.item)
if !$PokemonBag.pbStoreItem(item) # Compensate
raise _INTL("Can't re-store deleted item in bag")
end
pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
else
if pbIsMail?(item)
if pbMailScreen(item,pkmn,pkmnid)
pkmn.setItem(item)
pbDisplay(_INTL("The {1} was taken and replaced with the {2}.",itemname,thisitemname))
return true
else
if !$PokemonBag.pbStoreItem(item) # Compensate
raise _INTL("Can't re-store deleted item in bag")
end
end
else
pkmn.setItem(item)
pbDisplay(_INTL("The {1} was taken and replaced with the {2}.",itemname,thisitemname))
return true
end
end
end
else
if !pbIsMail?(item) || pbMailScreen(item,pkmn,pkmnid) # Open the mail screen if necessary
$PokemonBag.pbDeleteItem(item)
pkmn.setItem(item)
pbDisplay(_INTL("{1} was given the {2} to hold.",pkmn.name,thisitemname))
return true
end
end
return false
end

def pbChooseMove(pokemon,helptext)
movenames=[]
for i in pokemon.moves
break if i.id==0
if i.totalpp==0
movenames.push(_INTL("{1} (PP: ---)",PBMoves.getName(i.id),i.pp,i.totalpp))
else
movenames.push(_INTL("{1} (PP: {2}/{3})",PBMoves.getName(i.id),i.pp,i.totalpp))
end
end
return @scene.pbShowCommands(helptext,movenames)
end

def pbEndScene
@scene.pbEndScene
end

# Checks for identical species
def pbCheckSpecies(array)
for i in 0...array.length
for j in i+1...array.length
return false if array[i].species==array[j].species
end
end
return true
end

# Checks for identical held items
def pbCheckItems(array)
for i in 0...array.length
next if !array[i].hasItem?
for j in i+1...array.length
return false if array[i].item==array[j].item
end
end
return true
end

def pbRefreshAnnotations(ableProc) # For after using an evolution stone
annot=[]
for pkmn in @party
elig=ableProc.call(pkmn)
annot.push(elig ? _INTL("ABLE") : _INTL("NOT ABLE"))
end
@scene.pbAnnotate(annot)
end

def pbPokemonScreen
@scene.pbStartScene(@party,
@party.length>1 ? _INTL("Elige un Pokemon") : _INTL("Elige un pokemon o cancela"),nil)
loop do
@scene.pbSetHelpText(
@party.length>1 ? _INTL("Elige un Pokemon.") : _INTL("Elige un Pokemon o Cancela."))[email protected]
if pkmnid<0
break
end[email protected][pkmnid]
commands=[]
cmdSummary=-1
cmdSwitch=-1
# Birthsigns - Menu Options (Softboiled, Teleport, Flash)
#===============================================================================
cmdSoftboiled=-1
cmdTeleport=-1
cmdFlash=-1
#===============================================================================
cmdItem=-1
cmdDebug=-1
cmdMail=-1
# Build the commands
commands[cmdSummary=commands.length]=_INTL("DATOS")
if $DEBUG
# Commands for debug mode only
commands[cmdDebug=commands.length]=_INTL("Debug")
end
cmdMoves=[-1,-1,-1,-1]
for i in 0...pkmn.moves.length
move=pkmn.moves[i]
# Check for hidden moves and add any that were found
if !pkmn.isEgg? && (
isConst?(move.id,PBMoves,:MILKDRINK) ||
isConst?(move.id,PBMoves,OFTBOILED) ||
HiddenMoveHandlers.hasHandler(move.id)
)
commands[cmdMoves[i]=commands.length]=PBMoves.getName(move.id)
end
end
#===============================================================================
# Birthsigns - Menu Options (Softboiled, Teleport, Flash)
#
#If you changed the names for 'The Martyr', 'The Voyager', or 'The Beacon' in
#PField_Time, then you must change their names below to match your new names.
#===============================================================================
if pkmn.birthsign==_INTL("'The Martyr'")
commands[cmdSoftboiled=commands.length]=_INTL("Soft-Boiled")
end
if pkmn.birthsign==_INTL("'The Voyager'")
commands[cmdTeleport=commands.length]=_INTL("Teleport")
end
if pkmn.birthsign==_INTL("'The Beacon'")
commands[cmdFlash=commands.length]=_INTL("Flash")
end
#===============================================================================
commands[cmdSwitch=commands.length]=_INTL("Switch") if @party.length>1
if !pkmn.isEgg?
if pkmn.mail
commands[cmdMail=commands.length]=_INTL("Mail")
else
commands[cmdItem=commands.length]=_INTL("Item")
end
end
commands[commands.length]=_INTL("Cancel")[email protected](_INTL("Do what with {1}?",pkmn.name),commands)
havecommand=false
for i in 0...4
if cmdMoves[i]>=0 && command==cmdMoves[i]
havecommand=true
if isConst?(pkmn.moves[i].id,PBMoves,OFTBOILED) ||
isConst?(pkmn.moves[i].id,PBMoves,:MILKDRINK)
if pkmn.hp<=pkmn.totalhp/5
pbDisplay(_INTL("Not enough HP..."))
break
end
@scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
oldpkmnid=pkmnid
loop do
@scene.pbPreSelect(oldpkmnid)[email protected](true)
break if pkmnid<0[email protected][pkmnid]
if newpkmn.isEgg? || newpkmn.hp==0 || newpkmn.hp==newpkmn.totalhp || pkmnid==oldpkmnid
pbDisplay(_INTL("This item can't be used on that Pokémon."))
else
pkmn.hp-=pkmn.totalhp/5
hpgain=pbItemRestoreHP(newpkmn,pkmn.totalhp/5)
@scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.",newpkmn.name,hpgain))
pbRefresh
end
end
break
elsif Kernel.pbCanUseHiddenMove?(pkmn,pkmn.moves[i].id)
@scene.pbEndScene
if isConst?(pkmn.moves[i].id,PBMoves,:FLY)
scene=PokemonRegionMapScene.new(-1,false)
screen=PokemonRegionMap.new(scene)
ret=screen.pbStartFlyScreen
if ret
$PokemonTemp.flydata=ret
return [pkmn,pkmn.moves[i].id]
end
@scene.pbStartScene(@party,
@party.length>1 ? _INTL("Elige un Pokemon") : _INTL("Elige un Pokemon o Cancela"))
break
end
return [pkmn,pkmn.moves[i].id]
else
break
end
end
end
next if havecommand
if cmdSummary>=0 && command==cmdSummary
@scene.pbSummary(pkmnid)
#===============================================================================
# Birthsigns - Softboiled Effect
#
#If you changed the name for 'The Martyr', in PField_Time, then you
#must change the name below to match your new name. Changes will
#also need to be made in PScreen_Summary.
#===============================================================================
elsif pkmn.birthsign==_INTL("'The Martyr'") && command==cmdSoftboiled
@scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
oldpkmnid=pkmnid
loop do
@scene.pbPreSelect(oldpkmnid)[email protected](true)[email protected][pkmnid]
if newpkmn.isEgg? || newpkmn.hp==0 || newpkmn.hp==newpkmn.totalhp || newpkmn==pkmn
pbDisplay(_INTL("Can't be used on that Pokémon."))
break
pbRefresh
elsif pkmn.hp<=pkmn.totalhp/5
pbDisplay(_INTL("Not enough HP..."))
break
pbRefresh
else
pkmn.hp-=pkmn.totalhp/5
hpgain=pbItemRestoreHP(newpkmn,pkmn.totalhp/5)
@scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.",newpkmn.name,hpgain))
break
pbRefresh
end
end
#===============================================================================
# Birthsigns - Teleport Effect
#
#If you changed the name for 'The Voyager', in PField_Time, then you
#must change the name below to match your new name. Changes will
#also need to be made in PScreen_Summary.
#===============================================================================
elsif pkmn.birthsign==_INTL("'The Voyager'") && command==cmdTeleport
if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
Kernel.pbMessage(_INTL("Can't use that here."))
break
pbRefresh
end
if $game_player.pbHasDependentEvents?
Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
break
pbRefresh
end
healing=$PokemonGlobal.healingSpot
if !healing
healing=pbGetMetadata(0,MetadataHome) # Home
end
if healing
mapname=pbGetMapNameFromId(healing[0])
if Kernel.pbConfirmMessage(_INTL("Want to return to the healing spot used last in {1}?",mapname))
if true
healing=$PokemonGlobal.healingSpot
if !healing
healing=pbGetMetadata(0,MetadataHome)
end
if healing
if !pbHiddenMoveAnimation(pkmn)
Kernel.pbMessage(_INTL("{1} used Teleport!",pkmn.name))
end
pbFadeOutIn(99999){
Kernel.pbCancelVehicles
$game_temp.player_new_map_id=healing[0]
$game_temp.player_new_x=healing[1]
$game_temp.player_new_y=healing[2]
$game_temp.player_new_direction=2
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
pbEraseEscapePoint
pbDisplay(_INTL("{1} transported you back to {2}!",pkmn.name,mapname))
end
else
break
pbRefresh
end
end
end
#===============================================================================
# Birthsigns - Flash Effect
#
#If you changed the name for 'The Beacon', in PField_Time, then you
#must change the name below to match your new name. Changes will
#also need to be made in PScreen_Summary.
#===============================================================================
elsif pkmn.birthsign==_INTL("'The Beacon'") && command==cmdFlash
if !pbGetMetadata($game_map.map_id,MetadataDarkMap)
Kernel.pbMessage(_INTL("Can't use that here."))
break
pbRefresh
end
if $PokemonGlobal.flashUsed
Kernel.pbMessage(_INTL("This is in use already."))
break
pbRefresh
end
darkness=$PokemonTemp.darknessSprite
if !darkness || darkness.disposed?
darkness!=$PokemonTemp.darknessSprite
end
if !pbHiddenMoveAnimation(pkmn)
pbDisplay(_INTL("{1} used Flash!",pkmn.name))
end
pbDisplay(_INTL("{1} lit up the area!",pkmn.name))
$PokemonGlobal.flashUsed=true
while darkness.radius<176
Graphics.update
Input.update
pbUpdateSceneMap
darkness.radius+=4
end
#===============================================
elsif cmdSwitch>=0 && command==cmdSwitch
@scene.pbSetHelpText(_INTL("Mover a donde?"))
oldpkmnid=pkmnid[email protected](true)
if pkmnid>=0 && pkmnid!=oldpkmnid
pbSwitch(oldpkmnid,pkmnid)
end
elsif cmdDebug>=0 && command==cmdDebug
pbPokemonDebug(pkmn,pkmnid)
elsif cmdMail>=0 && command==cmdMail[email protected](_INTL("Quieres ver el correo?"),[_INTL("Leer"),_INTL("Tomar"),_INTL("Cancelar")])
case command
when 0 # Read
pbFadeOutIn(99999){
pbDisplayMail(pkmn.mail,pkmn)
}
when 1 # Take
pbTakeMail(pkmn)
pbRefreshSingle(pkmnid)
end
elsif cmdItem>=0 && command==cmdItem[email protected](_INTL("Do what with an item?"),[_INTL("Give"),_INTL("Take"),_INTL("Use"),_INTL("Move"),_INTL("Cancel")])
case command
when 0 # Give[email protected]($PokemonBag)
if item>0
pbGiveMail(item,pkmn,pkmnid)
pbRefreshSingle(pkmnid)
end
when 1 # Take
pbTakeMail(pkmn)
pbRefreshSingle(pkmnid)
when 2 # Use
@scene.pbUseItem($PokemonBag,pkmn)
when 3
if pkmn.item>0
moveitem=pkmn.item
pkmn.item=0
pbRefreshSingle(pkmnid)
pokeid=pbChoosePokemon(_INTL("Give {1} to which Pokemon?",PBItems.getName(moveitem)))
poke=$Trainer.party[pokeid]
if pokeid>=0 && !poke.isEgg?
if poke.item>0
if pbConfirm(_INTL("{1} is already holding an item, would you like to put the {3} in your bag?",
poke.name,PBItems.getName(poke.item),PBItems.getName(poke.item)))
pbTakeMail(poke)
poke.item=moveitem
pbDisplay(_INTL("{1} was given {2} to hold",poke.name,PBItems.getName(poke.item)))
pbRefreshSingle(pokeid)
end
else
poke.item=moveitem
pbDisplay(_INTL("{1} was given {2} to hold",poke.name,PBItems.getName(poke.item)))
end
else
if poke.isEgg?
pbDisplay(_INTL("An egg can't hold an item!"))
end
pkmn.item=moveitem
end
else
pbDisplay(_INTL("{1} isn't holding an item",pkmn.name))
end
end
end
end
@scene.pbEndScene
return nil
end
end

#===============================================================================
def pbGoToPrevious
if @page!=0 && !(SHOWFAMILYEGG && @page==5)[email protected]
while newindex>0
newindex-=1
if @party[newindex] && [email protected][newindex].isEgg?
@partyindex=newindex
break
end
end
else[email protected]
while newindex>0
newindex-=1
if @party[newindex]
@partyindex=newindex
break
end
end
end
end

def pbGoToNext
if @page!=0 && !(SHOWFAMILYEGG && @page==5)[email protected]
while newindex<@party.length-1
newindex+=1
if @party[newindex] && [email protected][newindex].isEgg?
@partyindex=newindex
break
end
end
else[email protected]
while newindex<@party.length-1
newindex+=1
if @party[newindex]
@partyindex=newindex
break
end
end
end
end

def pbHatch(pokemon)
speciesname=PBSpecies.getName(pokemon.species)
pokemon.name=speciesname
pokemon.trainerID=$Trainer.id
pokemon.ot=$Trainer.name
pokemon.happiness=120
pokemon.timeEggHatched=pbGetTimeNow
pokemon.obtainMode=1 # hatched from egg
pokemon.hatchedMap=$game_map.map_id
#=================================================
# Applies Birthsign Effects
#
#If you changed any Birthsign names in PField_Time, you must
#also change the names below to match your changes.
#Changes will also need to be made in PScreen_Summary and
#PScreen_Party
#=================================================
if pokemon.birthsign==_INTL("'The Apprentice'")
pokemon.pokerus=16 #Gives cured Pokerus
end
if pokemon.birthsign==_INTL("'The Companion'")
#Happiness ranges from 0-255.
#You can change the value to whatever you want.
pokemon.happiness=255 #Gives max happiness
end
if pokemon.birthsign==_INTL("'The Savage'")
#The number in brackets next to "iv" corresponds to the 6 stats.
#0=HP, 1=Atk, 2=Def, 3=Speed, 4=Sp.Atk, 5=Sp.Def
#The number after the '=' sign is the value that will be given to the
#IV of that stat.
pokemon.iv[0]=0 #HP
pokemon.iv[1]=31 #ATK
pokemon.iv[3]=31 #SPEED
pokemon.iv[4]=31 #SPATK
end
if pokemon.birthsign==_INTL("'The Prodigy'")
#abilityflag=0 or =1 will yield either the first or second
#natural abilities, respectively.
pokemon.abilityflag=2 #Gives Hidden Ability
end
if pokemon.birthsign==_INTL("'The Maiden'")
#setGender(0) will make them male, instead.
pokemon.setGender(1) #Makes female
end
if pokemon.birthsign==_INTL("'The Gladiator'")
#The numbers in brackets next to 'ev' correspond to the 6 stats,
#exactly how the IV example works.
pokemon.ev[1]=100 #ATK
pokemon.ev[4]=100 #SPATK
end
if pokemon.birthsign==_INTL("'The Thief'")
pokemon.ev[3]=252 #SPEED
end
if pokemon.birthsign==_INTL("'The Glutton'")
pokemon.iv[0]=31 #HP
pokemon.iv[2]=31 #DEF
pokemon.iv[3]=0 #SPEED
pokemon.iv[5]=31 #SPDEF
end
if pokemon.birthsign==_INTL("'The Wishmaker'")
pokemon.shinyflag=true #Makes shiny
end
#=================================================
$Trainer.seen[pokemon.species]=true
$Trainer.owned[pokemon.species]=true
pbSeenForm(pokemon)
pokemon.pbRecordFirstMoves
if !pbHatchAnimation(pokemon)
Kernel.pbMessage(_INTL("Huh?\1"))
Kernel.pbMessage(_INTL("...\1"))
Kernel.pbMessage(_INTL("... .... .....\1"))
Kernel.pbMessage(_INTL("{1} hatched from the Egg!",speciesname))
if Kernel.pbConfirmMessage(_INTL("Would you like to nickname the newly hatched {1}?",speciesname))
species=PBSpecies.getName(pokemon.species)
nickname=pbEnterPokemonName(_INTL("{1}'s nickname?",speciesname),0,10,"",pokemon)
pokemon.name=nickname if nickname!=""
end
end
end

Events.onStepTaken+=proc {|sender,e|
next if !$Trainer
for egg in $Trainer.party
if egg.eggsteps>0
egg.eggsteps-=1
for i in $Trainer.party
if !i.isEgg? && (isConst?(i.ability,PBAbilities,:FLAMEBODY) ||
isConst?(i.ability,PBAbilities,:MAGMAARMOR))
egg.eggsteps-=1
break
end
end
if egg.eggsteps<=0
egg.eggsteps=0
pbHatch(egg)
end
end
end
}

Hmm, I'm not sure what to tell you, because everything looks correct at a glance.

The only thing I can see that you missed was putting

Code:

zodiactoken=sprintf("Graphics/Pictures/Birthsigns/token%02d",zodiacValue(@pokemon.timeEggHatched.mon))
if @pokemon.obtainMode==1
imagepos.push([zodiactoken,150,260,0,0,-1,-1])
end

under the first instance of imagepos.push([ballimage in PScreen_Summary, but that shouldn't be causing these issues.

So either I forgot to include a step in the instructions, you have other modifications that are overriding everything, or there's a mistake you made that I'm not seeing. Give me a minute and I'll look it all over again.

Oh wait, I see what you did. In PField_Time, this whole section:
Needs to be commented out or deleted. You were supposed to paste over it, but you just pasted the changes above it but still kept the default in there. I probably should've worded that step better.

Well then I hate to say it, but I'm stumped. I just re-downloaded a clean copy of v.15.1, followed all the steps myself, and was able to get it working as intended. So this leads me to believe that you have other modifications in your scripts that are conflicting with the steps I provided. Either that, or there's some mistake in your scripts that I'm somehow overlooking that is interfering with everything.

Make sure you're actually hatching an egg to test this with, not just generating a new Pokemon. The Pokemon *must* be obtained via an egg for anything to take effect. If you're still not getting anything, try starting a new game and see if it works. A new game shouldn't be necessary, but who knows.

Well then I hate to say it, but I'm stumped. I just re-downloaded a clean copy of v.15.1, followed all the steps myself, and was able to get it working as intended. So this leads me to believe that you have other modifications in your scripts that are conflicting with the steps I provided. Either that, or there's some mistake in your scripts that I'm somehow overlooking that is interfering with everything.

Make sure you're actually hatching an egg to test this with, not just generating a new Pokemon. The Pokemon *must* be obtained via an egg for anything to take effect. If you're still not getting anything, try starting a new game and see if it works. A new game shouldn't be necessary, but who knows.

you can put that clean copy of v.15.1 , but with this script added , in MEGA , so i can download it and comparing , apologizes for any inconvenience :)

Update 5/14/15: Birthsign Set 2
I've managed to create a whole new set of birthsigns in addition to the original 12.
You can now mix and match from the defaults and the new options to create your own personal zodiac for your game.
The first post has been updated with all the changes and additions, so check there to see what's new!

Here's a rundown of the new birthsigns:

The New Birthsigns

'The Phoenix'
Constellation: Ho-oh
Type: Skill
Effect: When born under this sign, the Pokemon has access to the 'Revive' skill from the menu; allowing the Pokemon to revive themselves from the KO status while on the field.

'The Scholar'
Constellation: Slowking
Type: Passive
Effect: When born under this sign, the Pokemon gains an additional 20% bonus to experience gained from battles. This stacks with similar effects.

'The Fugitive'
Constellation: Klefki
Type: Skill
Effect: When born under this sign, the Pokemon has access to the 'Escape' skill from the menu; allowing the Pokemon to flee to the exit of any dungeon with its trainer.

'The Aristocrat'
Constellation: Meowth
Type: Passive
Effect: When born under this sign, the Pokemon demands double the prize money awarded from trainer battles when leading the party. This effect does not stack with similar effects on the same Pokemon. However, this can stack with similar effects used by other party members.

'The Cleric'
Constellation: Audino
Type: Skill
Effect: When born under this sign, the Pokemon has access to the 'Cure' skill from the menu; allowing the Pokemon to heal themselves of any harmful status conditions while on the field.

'The Monk'
Constellation: Medicham
Type: Skill
Effect: When born under this sign, the Pokemon has access to the 'Trance' skill from the menu; allowing the Pokemon to enter a meditative state and recall any past moves that have long since been forgotten. No Heart Scales are required.

'The Ancestor'
Constellation: Sigilyph
Type: Passive
Effect: When born under this sign, any Eggs yielded by the Pokemon will only require half the necessary steps to hatch. This effect can stack if shared by both parents; yielding Eggs that only require 1/4th the necessary steps to hatch.

'The Specialist'
Constellation: Smeargle
Type: Skill
Effect: When born under this sign, the Pokemon has access to the 'Reroll' skill from the menu; allowing the Pokemon to reshuffle its IV's to align with a particular Hidden Power type. The new IV's will be randomized, but will always yield combinations that correspond with a chosen type.

'The Assassin'
Constellation: Darkrai
Type: Passive
Effect: When born under this sign, the Pokemon has a high chance of seeking out vulnerable wild Pokemon who are asleep when encountered.

'The Parent'
Constellation: Kangaskahn
Type: Skill
Effect: When born under this sign, the Pokemon has access to the 'Incubate' skill from the menu; allowing the Pokemon to nurture any Eggs in the party that are close to hatching, and bring down their remaining step count to 1. The Egg must have less than 1,000 steps left for this to work.

'The Hunter'
Constellation: Houndoom
Type: Passive
Effect: When born under this sign, the Pokemon increases the capture rate of wild Pokemon by 20% when leading the party. This stacks with other effects.

'The Eternal'
Constellation: Mew
Type: Skill
Effect: When born under this sign, the Pokemon has access to the 'Reincarnate' skill from the menu; allowing the Pokemon to be reborn with a new birthsign. Reincarnated Pokemon begin their life anew, as if they have just been born. Level, EV's, Happiness, Pokerus, Birthdate and Birthsign are all reset; and any effects of the new birthsign will be applied. IV's, Nature, Ability, Gender, Moves, Shinyness and Evolutionary Stages are NOT reset, unless a newly inherited birthsign alters them.

Once Reincarnated, you are given an opportunity to rename the reborn Pokemon. Also, the text in the Pokemon's Memo Page in the Summary will now read "From a previous life" instead of "Day-Care Couple" on the line pertaining to how the Pokemon was obtained; and "Reincarnated" instead of "Egg Hatched" on the line pertaining to how the Pokemon was met. The Pokemon is also given a "Second Step Ribbon" to commemorate its new life.

-The first screenshot displays Volcarona with 'The Ancestor' birthsign.
-The second screenshot shows what the default step count is for a new Larvesta Egg.
-The third screenshot shows what the step count is for a new Larvesta Egg if one parent has 'The Ancestor' birthsign.
-The fourth screenshot shows what the step count is for a new Larvesta Egg if BOTH parents have 'The Ancestor' birthsign.

Combine this with the 'The Parent' birthsign's Incubate skill, along with the effects of Flame Body/Magma Armor to hatch Eggs in no time!

-The first screenshot shows Salamence with 'The Eternal' birthsign.
-The second screenshot shows the Reincarnate skill in Salamence's menu options.
-The third screenshot shows Salamence's Memo Page BEFORE using Reincarnate.
-The fourth screenshot shows Salamence's Memo Page AFTER using Reincarnate. Notice the new text to describe its met conditions, and its new date of birth. Salamence's birthsign is reset to his new birthday (May - 'The Cleric') and his level is reset back to 1.
-The fifth screenshot shows Salamence with the "Second Step Ribbon", which is added automatically whenever a Pokemon is reincarnated.

Use 'The Eternal' to reset your Pokemon for new birthsign effects! Wait for a month with a birthsign you really want, and reincarnate your Pokemon for the new effect.

Be careful! Using Reincarnate will reset the Level, Happiness, EV's, birthsign and probably more I'm not thinking of. The Pokemon is treated as if it was born from an egg - but random attributes (gender, IV's, Nature, shinyness, etc) will NOT be reset. Make absolutely sure you want to reset your Pokemon before using this skill!

Fixed a spacing issue in the PField_Time scripts that could prevent the game from loading up. Corrected some typos, and went a little more in-depth with some of the Birthsign descriptions. Everything should be complete now and ready to go.

First and foremost, AMAZING job. GREAT changes! As always, the information you supplied is easy to follow and easy to implement. The Pokemon you've chosen for the new Zodiac are quite clever. You know, with a bit of tinkering, one could make several "weekly Birthsigns" per month to allow for an even more options, even an "Ordinary Time" where nothing happens to a Pokemon's birth in between ranges... but then again it wouldn't exactly be a 12-month Zodiac anymore, haha.

I'm loving the new ribbon. Looks wonderful, especially if the user is using my Ribbon Description/Selection script and finds that curious new ribbon as a delightful surprise. (You reminded me that seriously need to update it for 15.1.)
I'll tell you what I gathered in just a moment.

First and foremost, AMAZING job. GREAT changes! As always, the information you supplied is easy to follow and easy to implement. The Pokemon you've chosen for the new Zodiac are quite clever. You know, with a bit of tinkering, one could make several "weekly Birthsigns" per month to allow for an even more options, even an "Ordinary Time" where nothing happens to a Pokemon's birth in between ranges... but then again it wouldn't exactly be a 12-month Zodiac anymore, haha.

I'm loving the new ribbon. Looks wonderful, especially if the user is using my Ribbon Description/Selection script and finds that curious new ribbon as a delightful surprise. (You reminded me that seriously need to update it for 15.1.)
I'll tell you what I gathered in just a moment.

Thanks for the support, I'm glad you like it.

And I agree that there's a lot of potential with what could be done with this system. One of my goals when designing this was to give people options, and just lay the groundwork to allow them to create their own systems using this as a base.

And I actually use your Ribbon script! Haha that's part of what gave me the idea to add that in as part of the effect.

The PokéCommunity

Meta

Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, or The Pokémon Company International. We just love Pokémon.