Beruflich Dokumente
Kultur Dokumente
This is an ongoing project of mine that will bring the Final Fantasy VII Materia System to an rm2k3 game
near you. If you seriously need to take a look at the coding, take a look at the demo of The Song of Elegin
for now, but I will create a project specifically for this tutorial in the very near future.
So say I had Cloud, Aeris, and Tifa. I, being extremely tired at the moment, make only four Materia Types,
Ice, Fire, Thunder, and Cure. That means I'd need, according to this system
STATUSES:
ICE
FIRE
CURE
THUNDER
VARIABLES
CloudIceValue
CloudFireValue
CloudCureValue
CloudThunderValue
...(repeat for Aeris and Tifa.)
FireMateriaHave
IceMateriaHave
CureMateriaHave
ThunderMateriaHave
FireEquipped
IceEquipped
ThunderEquipped
CureEquipped
CloudMateriaLimit
AerisMateriaLimit
TifaMateriaLimit
CloudMateriaHave
AerisMateriaHave
TifaMateriaHave
SWITCHES
CloudFireON
CloudIceON
CloudCureON
CloudThunderON
...(Again repeat for Aeris and Tifa.)
Less then you thought it would be, huh? Now, at the begining of the game Set all Character Materia values
(These will determine the spells they learn) to 1.
We'll finish up here later
Repeat this for each of Cloud Materia's, then Aeris and Tifa.
At the end, have it cancel all Materia-related status. (The ones I told you to create.)
MateriaLearning
[CODE]If CloudFireON is ON
Then
Memorize Skill Fire
IF CloudFireValue is greater than/equal to 2
Memorize Fira
IF CloudFireValue is greater than/equal to 3
Memorize Firaga
ELSE
Forget Fire
Forget Fira
Forget Firaga[/CODE]
(Repeat this for the rest of Cloud Materia and then Aeris, Tifa, and whoever else.)
Recent Improvements:
---------------------------
-I didn't have this in here before, but I'll add it now. Each materia CAN gain its own EXP. You have to have
a battle event with a conditional branch that checks if each materia is worn. If it is, EXP is added to a
variable that tracks the materia's EXP. Of course, you would then need a common event that tracks the
EXP, levels up the materia accordingly, and changes the skills accordingly. An example of how this is done
(though not EXACTLY) can be found in my demo of The Song of Elegin, just look at the events labled
"Essences."
-"All" Materia:
This one can be a bit tricky, but is still possible. The trick is to make a copy of every skill in the database
that can be applied to "All." The only difference with these skills is that it damages all enemies (or heals all
allies) instead of the usual single target. At the beginning of every battle, set a variable called "All Value"
equal to the level of the "All" Materia. This step will have to be repeated for each "All" Materia equipped,
so make sure to make distincitions between each of them (whether by switch or variable, just track where
your "All Materia are). Because they are tracked, you know which of your "All" skills to add. This sounds
like a hastle, but only needs to be done once. You'll want to remove those skills that are affected and replace
them with the "All" versions (I believe this requires a common event). Now (assuming you are using the
DBS, the process is actually simpler in a CBS), make a new page in your battle events with the trigger of
the hero (a page for each hero) using the battle command that corresponds to the equipped materia type.
The only code you need here is to subtract 1 from the variable "All Value" and then a conditional branch
that checks if "All Value" is less than or equal to 0. If it is, replace all of your "All" skills with the regular
ones. I realize this is a pain, and I will try my hardest to make an easier way. I know this is bug free,
however, and I'd rather be that than short.
[CODE]
Variable Operation [0001:HeroA WepMat] Set 0
*Repeat above step for other pieces of equipment and the other *heroes . This variable keeps track of how
many materia that *weapon can hold
Branch if Hero1 has Longsword equipped
Variable Operation [0001:HeroA WepMat] +X
*Where X is equal to the number of slots you want that piece of *equipment to have. Repeat this for each
weapon. Long, yes, but *not difficult
[/CODE]
After giving each of the weapons a value, all that's left is to show pictures accordingly and to restrict cursor
movement accordingly, each of which are basic CMS principles
-Materia Mastery
So what happens when that Fire materia gets to level 5 and is ready to spawn a lesser Fire materia? Pretty
easily actually! Just for reference, we'll be using level 5 as the level in which this particular materia is
mastered. So, the materia is gathering experience points and is about ready to hit level 5. BUT BEFORE IT
DOES, WE HAVE TO MAKE SOME PREPARATIONS! Before advancing the materia to level 5, display
a message stating that the materia has been mastered (or any other sort of indication that the mastery has
been completed). Then, add the new, blank materia (lvl. 1, so make sure to assign it a variable). Only after
this may we advance to level 5. Easy enough right? Here's the modification to the code:
[CODE]
Branch if Var[Fire1Xp] is equal to X [where X equals the experience to level 5]
Message: Fire Materia was mastered!
Change Items: Fire Materia 1 Add
Variable Oper [Fire2 Lvl] Set 1
Variable Oper [Fire1 Lvl] Set 5
[/CODE]
Easy enough, right? Anyway, it is highly advisable that you set a limit to the number of materia of each
type that the party can carry. Otherwise you will bury yourself in variable goo.
And that should do it. If you're about ready to take my head off for a small error, please know this was done
VERY LATE, so bear with me if there were small mistakes. As I said, I will continue to update this thread
as I get deeper and deeper into the system. I apologize for its incompleteness at the moment (I altered it for
my own game and so abandoned the methodology for the original materia system).
If you haven't realized it already, you pretty much are required to make a CMS for this system. Although I
can show you how to do that, this is meant to be an advanced tutorial and will assume that you know how
to make it already. If you are struggling with it, contact me and we'll get you started.
If you have any questions regarding it, either throw up a post here or feel free to get in contact with me via
PM or any of the messenger services found in my profile.