- Joined
- Nov 3, 2012
- Messages
- 71
- Reaction score
- 31
- Primarily Uses
Description
This script implements the Persona System from the Persona games (specifically Persona 4).
Quoting from the Megami Tensei Wiki:
In the original game, the characters have no parameters nor skills and all those depend on the persona they have currently equipped. In this script you can choose the percentages of the parameters contributed by the user and the Persona while, also, use the skills of the currently equipped Persona.
Following the original game's system, Personas can only learn a specific number of skills. When they try to learn a new one, they have to forget an old one (or skip learning it).
Personas can be acquired with two different methods:
Shuffle Time, happens after every battle and if the enemy has dropped any Persona cards. Along with the Persona cards, enemies drop Blank cards and Penalty cards. There are two different Shuffle methods: Rotating cards and Memory match. During the first method, the cards rotate either horizontally, diagonally or a combination of both. During the Memory match, the player has to match two cards together, with a maximum number of attempts. If the player has picked a Blank card during the Shuffle Time, nothing will happen (no Persona will be acquired), but if they pick a Penalty card, they will lose all battle rewards (no EXP or Gold will be acquired).
Additionally, Personas have classes called Arcanas. Quoting (again) the Megami Tensei Wiki:
You can check all the available Arcanas through the Social Link option in the main menu, along with its rank, its individual Social Links and their description. You can choose, for each Social Link, which actors it is consisted of.
You can change for each user which Personas they can use, if he can use only one, set the maximum rank of each Arcana separately, set whoever you want as a Social Link of an Arcana and change them at any point of the game, call the Shuffle Time whenever you want and with which ever cards you want, use a common event when a Persona is being evolved (if you want and for whichever Persona you want), set the position of a couple of small windows, pick some colors here or there, set the percentage of the parameters individually (for each param, xparam, sparam etc.) and many more that I may have missed. You can check all the possible settings in the script.
Screenshots and Videos
Script
Link
Instructions and Demo
The instructions bellow are taken from the demo, which are also present in the script. They cover all the available tags that can be used to setup the system, along with all the scene calls you can make and explanation of each system. There are many option settings you can change in this script, which are not covered in the instructions and are located at the beginning of the script, for each "sub-system" separately.
The script goes above Main and bellow Materials.
Demo
Click on "Download as ZIP" on the top right.
Demo
Terms of use
Free to use in non commercial or commercial games, credits are required (PM me).
If you'd like to share or make a reference to the script, always link to this post.
Updates
Previous Updates
Latest Update 19-07-2020
Credits
TODO
This script implements the Persona System from the Persona games (specifically Persona 4).
Quoting from the Megami Tensei Wiki:
In this system, you can use Personas to fight enemies. Each character can equip one of those Personas which, as a result, increases all of the user's parameters.A Persona is a manifestation of a Persona User's personality in the Persona series, referred to as a "mask" for an individual to use to face hardship.
In the original game, the characters have no parameters nor skills and all those depend on the persona they have currently equipped. In this script you can choose the percentages of the parameters contributed by the user and the Persona while, also, use the skills of the currently equipped Persona.
Following the original game's system, Personas can only learn a specific number of skills. When they try to learn a new one, they have to forget an old one (or skip learning it).
Personas can be acquired with two different methods:
- By fusing two (or three) Personas to create a new one
- During the Shuffle Time
Shuffle Time, happens after every battle and if the enemy has dropped any Persona cards. Along with the Persona cards, enemies drop Blank cards and Penalty cards. There are two different Shuffle methods: Rotating cards and Memory match. During the first method, the cards rotate either horizontally, diagonally or a combination of both. During the Memory match, the player has to match two cards together, with a maximum number of attempts. If the player has picked a Blank card during the Shuffle Time, nothing will happen (no Persona will be acquired), but if they pick a Penalty card, they will lose all battle rewards (no EXP or Gold will be acquired).
Additionally, Personas have classes called Arcanas. Quoting (again) the Megami Tensei Wiki:
Each Arcana has its own rank and when it reaches a specific one the Persona of that Arcana can evolve into a stronger one (you can choose which Personas can evolve and at which rank).Each Social Link represents a single Arcana, and raising a particular Social Link increases the experience bonus the protagonists receive when they fuse Personas of that Arcana. By completing a Social Link, it unlocks the ultimate Persona of that Arcana.
You can check all the available Arcanas through the Social Link option in the main menu, along with its rank, its individual Social Links and their description. You can choose, for each Social Link, which actors it is consisted of.
You can change for each user which Personas they can use, if he can use only one, set the maximum rank of each Arcana separately, set whoever you want as a Social Link of an Arcana and change them at any point of the game, call the Shuffle Time whenever you want and with which ever cards you want, use a common event when a Persona is being evolved (if you want and for whichever Persona you want), set the position of a couple of small windows, pick some colors here or there, set the percentage of the parameters individually (for each param, xparam, sparam etc.) and many more that I may have missed. You can check all the possible settings in the script.
Screenshots and Videos
The bars were made from a really good artist (me) so please don't judge. 
You have the ability to use your own graphics (white bar, small bar empty and filled).
Some more screenshots from the Social Links menu.
There are some minor differences between the uploaded videos and the demo (messages and stuff) which were changed after the recording and upload (my upload speed is potato).
Playlist with all the videos.
You have the ability to use your own graphics (white bar, small bar empty and filled).
Some more screenshots from the Social Links menu.
There are some minor differences between the uploaded videos and the demo (messages and stuff) which were changed after the recording and upload (my upload speed is potato).
Playlist with all the videos.
Script
Link
Instructions and Demo
The instructions bellow are taken from the demo, which are also present in the script. They cover all the available tags that can be used to setup the system, along with all the scene calls you can make and explanation of each system. There are many option settings you can change in this script, which are not covered in the instructions and are located at the beginning of the script, for each "sub-system" separately.
The script goes above Main and bellow Materials.
Tags on actors (that are personas)
You can specify which actor is a persona by simply adding the following tag:
<Persona>
By adding the tag bellow:
<User: actor_id[, actor_id[, ...]]>
on a persona actor you can specify the users that can equip the specific
persona. Remember that for the <User: ...> tag to work the actor must be a
persona. Also, you can specify as many persona users as you want in the list.
For convenience, you can set the default users of a persona that doesn't have
that tag through the options module.
Personas can't learn an infinite number of skills. You can specify the
maximum number of skills a persona can learn by using the following tag:
<Max skills: number>
The default number of maximum skills for all personas is set to 4, but you can
change it through the options module! Lastly, a persona has the ability to evolve
into a stronger one when it reaches a specific arcana rank! You can specify the
rank of the arcana at which the persona will evolve with the following tag:
<Evolve at: rank>
and the persona to which it will evolve to with the following one:
<Evolve to: persona_name>
Tags on actors (that use personas)
You can specify that a specific actor can use ONLY one (which will be
automatically equipped) by using the following tag:
<Persona: actor_id>
Also, to specify which persona will be equipped in Battle test on a specific
ctor, you can use the following tag:
<Battletest persona: actor_id>
Tags on classes (Arcana)
You can specify which classes represent an arcana by adding the tag
bellow:
<Arcana>
Each arcana's current rank is stored in a game variable. Those variables
can be set for each Arcana separately by adding the following tag:
<Rank variable: variable_id>
Of course, you can set the maximum rank of each arcana by adding the
tag bellow on each arcana:
<Max rank: rank>
The default maximum rank is set to 10, but can be changed through the
options module. As in the original game, each arcana has its own social link(s).
You can specify who is or are those links by adding the following tags
to specify by actor id:
<Social links actors: actor_id[,actor_id[,...]]>
and to specify by variable id (in which actor ids are stored):
<Social links actors: actor_id[,actor_id[,...]]>
As far as naming those social links and their description goes, you can
use the tag bellow to specify the name of the social link:
<Social target: name>
and the one bellow to specify its description:
<Description: description>
You can specify the description of an actor's social link by adding
this tag:
<Social description: description>
Tags on enemies
There is only one tag that is used on enemies and it specifies the card
that an enemy can drop:
<Card drop: card_name, chance>
The chance is specified by a floating number and not a percentage, for
example using the tag bellow on an enemy, has a 30% chance to drop the
Ghoul card:
<Card drop: Ghoul, 0.3>
Add persona to party
You can add a persona to your party by calling the following script (by id):
$game_party.add_persona_by_id(actor_id)
or by using the following one (by name)
$game_party.add_persona_by_name("actor_name")
It is important to remember that you cannot have duplicate personas in
your party! Also, for developing purposes a message box will be displayed
if you try adding an actor as a persona that is not actually a persona!
a persona or if you misstype a name by accident!
Personas can also be acquired through the Shuffle Time that happens after
a battle and if the enemy troop has dropped any cards. You can learn
more about Shuffle Time by going to the back of the room.
Remove social link through variable
If you have specified someone as a social link of an arcana via
variables (see Tags on class (Arcanas)) you can remove a social
link by setting the specific variable's value to -1. Do remember
that if you have specified that social link through the actor social
link tag, then even if you remove that actor they will still be a
social link. Social links specified via actor ids cannot be removed!
Increase/Decrease arcana rank
You can increase an arcana's rank by making the following script
call:
$game_player.arcana_rank_up(arcana_name)
You can also decrease an arcana's rank by making the following
script call:
$game_player.arcana_rank_down(arcana_name)
The minimum arcana rank can be set though the persona module!
For convenience you can use the script call bellow to increase the
arcana's rank by
multiple ranks:
$game_party.arcana_rank_up_by(arcana_name, ranks)
The same can be done to decrease the arcana's rank by multiple ranks
by making the following script call:
$game_party.arcana_rank_down_by(arcana_name, ranks)
Persona in party or equipped
You can check if a persona is in the party by using the following
script call:
$game_party.persona_in_party(persona_name)
You can check if a persona is currently equipped by simply calling
the following script:
$game_party.persona_equipped(persona_name)
Also, you can check if a persona is equipped by a specific actor
with the following script call:
$game_party.persona_equipped_by(actor_id, persona_name)
Shuffle Time
Shuffle Time happens after battle and gives the player a chance to
receive new Persona cards. Shuffle Time happens only if the enemies have
dropped at least two cards. Of course, you can change this number
through the options module. There are three types of cards in Shuffle
Time:
Persona cards,
Blank cards and
Penalty cards.
When a Blank card is picked, nothing happens whereas when a Penalty
card is picked, the player gains no battle rewards! There are also
two different shuffle methods:
Rotating card either horizontally, diagonally or a combination
of both and
Memory match, where player matches two cards and has at most
five attempts.
You can change the maximum number of tries the player has through
the options module! Also, you can force the next Shuffle Time method
to be a specific one (among the available) by setting the value of
the variable with ID 1 to the method you want. For example "Horizontal"
if you want the next Shuffle Time method to be Horizontal or "Matching"
if you want it to be the Matching one. Of course, you can change which
variable you want to specify the method, though the options module.
Lastly, you can call the shuffle scene with whichever cards you want
by firstly setting the variable with ID 2 to a script call with a
list of persona names like this:
["name_1", "name_2", ...]
and then by calling the scene with the following command:
$game_system.shuffle_time
It is important to remember that you cannot have duplicate personas
in your party! Additionally, a message box will be displayed if you
try running Shuffle Time without setting the list of cards to be included!
You can access the result of the last shuffle time by simply calling
the following script command:
$game_system.shuffle_result
Fusion
Fusion is the system in which two or more personas are combined
together to create a new persona. You can use the following tag
bellow on a persona to specify which personas need to be fused to
create that one:
<Fusion parents: actor_id1, actor_id2>
For example, if you use the following tag on Himiko:
<Fusion parents: 13, 14>
then when you try fusing Andras with Forneus, the fusion will result
to... Himiko.
Additionally, you can specify arcana rank and player level
requirements to specific fusion children. To apply a minimum
arcana rank requirement for a specific persona you use the following
tag:
<Arcana rank: rank>
To apply a minimum player level requirement for a specific persona
you use the following tag:
<Player level: level>
You can also have a persona of a specific arcana have a different class!
This can be done just by setting its nickname to the arcana you want!
Don't forget to use the following tag to hide its nickname in the status window!
<Hide status nickname>
You can also fuse three personas together to create special
ones too! To specify the parents of a "special" persona you can
use the following tag:
<Special fusion: actor_id1, actor_id2, actor_id3>
Last but not least! To call the persona fusion scene you use the
following script call:
$game_system.fuse_personas(2)
For the special fusion scene you use the following script call:
$game_system.fuse_personas(3)
Persona and user parameters
Personas can be equiped through the main menu command called
"Persona". Personas add percentages of their parameters and
stats to the actor they're equiped on. The default percentage
is set to 100%, but can be changed through the persona options
module. You can also change the percentage of the user's parameters
that are added to the end result. The default percentage is also
set to 100% and can be changed though the options module too.
You can specify which actor is a persona by simply adding the following tag:
<Persona>
By adding the tag bellow:
<User: actor_id[, actor_id[, ...]]>
on a persona actor you can specify the users that can equip the specific
persona. Remember that for the <User: ...> tag to work the actor must be a
persona. Also, you can specify as many persona users as you want in the list.
For convenience, you can set the default users of a persona that doesn't have
that tag through the options module.
Personas can't learn an infinite number of skills. You can specify the
maximum number of skills a persona can learn by using the following tag:
<Max skills: number>
The default number of maximum skills for all personas is set to 4, but you can
change it through the options module! Lastly, a persona has the ability to evolve
into a stronger one when it reaches a specific arcana rank! You can specify the
rank of the arcana at which the persona will evolve with the following tag:
<Evolve at: rank>
and the persona to which it will evolve to with the following one:
<Evolve to: persona_name>
Tags on actors (that use personas)
You can specify that a specific actor can use ONLY one (which will be
automatically equipped) by using the following tag:
<Persona: actor_id>
Also, to specify which persona will be equipped in Battle test on a specific
ctor, you can use the following tag:
<Battletest persona: actor_id>
Tags on classes (Arcana)
You can specify which classes represent an arcana by adding the tag
bellow:
<Arcana>
Each arcana's current rank is stored in a game variable. Those variables
can be set for each Arcana separately by adding the following tag:
<Rank variable: variable_id>
Of course, you can set the maximum rank of each arcana by adding the
tag bellow on each arcana:
<Max rank: rank>
The default maximum rank is set to 10, but can be changed through the
options module. As in the original game, each arcana has its own social link(s).
You can specify who is or are those links by adding the following tags
to specify by actor id:
<Social links actors: actor_id[,actor_id[,...]]>
and to specify by variable id (in which actor ids are stored):
<Social links actors: actor_id[,actor_id[,...]]>
As far as naming those social links and their description goes, you can
use the tag bellow to specify the name of the social link:
<Social target: name>
and the one bellow to specify its description:
<Description: description>
You can specify the description of an actor's social link by adding
this tag:
<Social description: description>
Tags on enemies
There is only one tag that is used on enemies and it specifies the card
that an enemy can drop:
<Card drop: card_name, chance>
The chance is specified by a floating number and not a percentage, for
example using the tag bellow on an enemy, has a 30% chance to drop the
Ghoul card:
<Card drop: Ghoul, 0.3>
Add persona to party
You can add a persona to your party by calling the following script (by id):
$game_party.add_persona_by_id(actor_id)
or by using the following one (by name)
$game_party.add_persona_by_name("actor_name")
It is important to remember that you cannot have duplicate personas in
your party! Also, for developing purposes a message box will be displayed
if you try adding an actor as a persona that is not actually a persona!
a persona or if you misstype a name by accident!
Personas can also be acquired through the Shuffle Time that happens after
a battle and if the enemy troop has dropped any cards. You can learn
more about Shuffle Time by going to the back of the room.
Remove social link through variable
If you have specified someone as a social link of an arcana via
variables (see Tags on class (Arcanas)) you can remove a social
link by setting the specific variable's value to -1. Do remember
that if you have specified that social link through the actor social
link tag, then even if you remove that actor they will still be a
social link. Social links specified via actor ids cannot be removed!
Increase/Decrease arcana rank
You can increase an arcana's rank by making the following script
call:
$game_player.arcana_rank_up(arcana_name)
You can also decrease an arcana's rank by making the following
script call:
$game_player.arcana_rank_down(arcana_name)
The minimum arcana rank can be set though the persona module!
For convenience you can use the script call bellow to increase the
arcana's rank by
multiple ranks:
$game_party.arcana_rank_up_by(arcana_name, ranks)
The same can be done to decrease the arcana's rank by multiple ranks
by making the following script call:
$game_party.arcana_rank_down_by(arcana_name, ranks)
Persona in party or equipped
You can check if a persona is in the party by using the following
script call:
$game_party.persona_in_party(persona_name)
You can check if a persona is currently equipped by simply calling
the following script:
$game_party.persona_equipped(persona_name)
Also, you can check if a persona is equipped by a specific actor
with the following script call:
$game_party.persona_equipped_by(actor_id, persona_name)
Shuffle Time
Shuffle Time happens after battle and gives the player a chance to
receive new Persona cards. Shuffle Time happens only if the enemies have
dropped at least two cards. Of course, you can change this number
through the options module. There are three types of cards in Shuffle
Time:
Persona cards,
Blank cards and
Penalty cards.
When a Blank card is picked, nothing happens whereas when a Penalty
card is picked, the player gains no battle rewards! There are also
two different shuffle methods:
Rotating card either horizontally, diagonally or a combination
of both and
Memory match, where player matches two cards and has at most
five attempts.
You can change the maximum number of tries the player has through
the options module! Also, you can force the next Shuffle Time method
to be a specific one (among the available) by setting the value of
the variable with ID 1 to the method you want. For example "Horizontal"
if you want the next Shuffle Time method to be Horizontal or "Matching"
if you want it to be the Matching one. Of course, you can change which
variable you want to specify the method, though the options module.
Lastly, you can call the shuffle scene with whichever cards you want
by firstly setting the variable with ID 2 to a script call with a
list of persona names like this:
["name_1", "name_2", ...]
and then by calling the scene with the following command:
$game_system.shuffle_time
It is important to remember that you cannot have duplicate personas
in your party! Additionally, a message box will be displayed if you
try running Shuffle Time without setting the list of cards to be included!
You can access the result of the last shuffle time by simply calling
the following script command:
$game_system.shuffle_result
Fusion
Fusion is the system in which two or more personas are combined
together to create a new persona. You can use the following tag
bellow on a persona to specify which personas need to be fused to
create that one:
<Fusion parents: actor_id1, actor_id2>
For example, if you use the following tag on Himiko:
<Fusion parents: 13, 14>
then when you try fusing Andras with Forneus, the fusion will result
to... Himiko.
Additionally, you can specify arcana rank and player level
requirements to specific fusion children. To apply a minimum
arcana rank requirement for a specific persona you use the following
tag:
<Arcana rank: rank>
To apply a minimum player level requirement for a specific persona
you use the following tag:
<Player level: level>
You can also have a persona of a specific arcana have a different class!
This can be done just by setting its nickname to the arcana you want!
Don't forget to use the following tag to hide its nickname in the status window!
<Hide status nickname>
You can also fuse three personas together to create special
ones too! To specify the parents of a "special" persona you can
use the following tag:
<Special fusion: actor_id1, actor_id2, actor_id3>
Last but not least! To call the persona fusion scene you use the
following script call:
$game_system.fuse_personas(2)
For the special fusion scene you use the following script call:
$game_system.fuse_personas(3)
Persona and user parameters
Personas can be equiped through the main menu command called
"Persona". Personas add percentages of their parameters and
stats to the actor they're equiped on. The default percentage
is set to 100%, but can be changed through the persona options
module. You can also change the percentage of the user's parameters
that are added to the end result. The default percentage is also
set to 100% and can be changed though the options module too.
Demo
Click on "Download as ZIP" on the top right.
Demo
Terms of use
Free to use in non commercial or commercial games, credits are required (PM me).
If you'd like to share or make a reference to the script, always link to this post.
Updates
Previous Updates
13-07-2019
- Fixed bug where BGM of map would not replay if the shuffle was canceled.
- Added support for element, debuff and state rate multipliers
- You can now set an arcana by using the nickname. If an arcana has a class which is not an arcana, but its nickname exists as an arcana name then it considers the nickname.
- Fixed a bug when a fusion was canceled and another persona was chosen (even with a wrong combination) it asked if you wanted to create the previous persona.
- Fixed mistake where aliased state_rate, debuff_rate and element_rate methods were not being called.
- Fixed a bug when declining a shuffle the message and windows were not being disposed correctly or in time.
- Fixed an error when pressing enter on an empty Personas menu.
- Fixed an error when equipping persona through the status menu.
- Added <Hide status nickname> and <Hide status classname> tags that hide the corresponding info in the status menu.
- Fixed incorrect arcana display on short Persona status.
- You can now release a persona from the Personas menu.
- You can no longer fuse personas that result into one that already exists in the party.
- Fixed incorrect arcana name being drawn in fusion results window.
- Fixed missing Sprite classes.
- Fixed unordered special fusion bug.
- Personas window now correctly does not take any input if there are no personas.
- Fixed empty line in personas window after releasing the last persona on the list (selects first persona).
- Added additional messages to message window when release a persona (if persona is equipped or if it is the actor's last persona).
- Correctly handles unordered persona fusion.
- Personas that are already in the party have now disabled color in the results window.
- Minor bug fixes.
- Updated description and demo with the changes made to script calls and extra features.
- You can now release personas from the persona list menu.
- Added variables for the release key (RELEASE_PERSONA_KEY) and one that lets (or not) the player release only personas (CAN_RELEASE_ONLY_PERSONAS) (personas used only by one actor).
- Party can no longer receive personas that already exist in the party (More of a bug than a feature).
- Added variables with the text shown when the duplicate persona is picked in the shuffle method (DUPLICATE_PERSONA_DRAW_MSG) and the message shown at the battle result screen (DUPLICATE_PERSONA_RESULT_MSG) and audio that is played upon selection (SHUFFLE_DUPLICATE_SOUND).
- You can now set the arcana of a persona by using the nickname field.
- Added new tag <Hide status nickname> that hides the persona's nickname in the status window (useful in the above cases).
- Renamed methods add_persona and remove_persona to add_persona_by_id and remove_persona_by_id.
- Added two new methods: add_persona_by_name and remove_persona_by_name.
- Updated the input keys window shown when opening the personas window with the release button.
- Added msgbox if a persona is not found when parsing manually selected personas for shuffling.
- Fixed incorrect variable usage in element_rate, debuff_rate and state_rate methods in Game_Actor class.
- Fixed Persona command in battle being enabled in users that use only one persona.
- Fixed bug where after equipping a persona in battle, the window with the personas kept taking inputs.
- Fixed process_handling in Window_Arcanas.
- Fixed window openning and closing when showing the extra exp earned when fusing a persona.
- Fixed cases where the second (or third) persona to be fused was enabled in incorrect cases when choosing personas.
- Fixed incorrect scene handling between battle scene and fusion scene.
- Fixed size of selected card in shuffle time.
Credits
- First and foremost @demifiend700 who requested this script (more than a year ago LUL)
- Arthellinus for his Game Mechanics/Persona Database
- Megami Tensei Wiki
- @Finneess for helping me with finding all the latest bugs.
TODO
- Implement the fusion result calculation as it is in the original game, which can become a bit confusing when using it.
- Implement Arcana effects that can happen after battles.
- Implement "slot machine" Shuffle Time method.
- Bug fixes,
if there are (there probably are I hope not)there were
Last edited:







