• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
March 04, 2024, 04:56:10 am

News:

Please use .png instead of .bmp when uploading unfinished sprites to the forum!


Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Nyzer

1
Completed Mods / FFT The Lion War ReMixed
December 22, 2023, 12:35:48 am

This project started out as my intent to replace the Proposition system in FFT, which has always left me extremely unimpressed. Even knowing before I went in how time-consuming the task would be, I still ended up taking much longer than intended, going well out of my way to make the plot of the missions as sensible, humorous, and referential as possible.

As I approached the end of this task, I took a stab at again trying to understand the ASM hacking format, and finally got somewhere. I also was taught by Kokojo how to use JuraviS, which allowed me to easily see how full all the events were in The Lion War - and how easily I would be able to include the Preparation Menu, a mechanic I came up with some time ago, but wasn't going to be included in a mod at that point in time.

So I ended up also including the Prep Menu and working on some ASM hacks in order to include features like a dynamic Guest roster, refunding abilities, giving Rafa and Malak center tile bias and more reliable hits in their skills, fixing Cancel Movement... tons and tons of work. I also included some level of rebalancing in order to turn options that were otherwise functionally useless into viable options.

New mechanics:

- Preparation Menu, allowing you access to a wide variety of options before a battle begins. No more will you be stuck just randomly guessing what you might want to send out on the field before even seeing it.

- Game Over recovery, allowing you to immediately retry the battle or even return to the world map (provided you aren't in the middle of a battle sequence).

- Dispatch Missions, the far superior replacement for Propositions. Also gives a wide variety of extra training options for units to make things like catching up in levels or Brave/Faith manipulation significantly easier. Or even to let them undergo gender transition!

Character/job changes:

- Two Archer skills have been replaced with Aim (removes effects and elements, cannot miss) and Disrupt (removes effects and elements, interrupts casting and charging). Equip Crossbow has been changed to Equip Bow, adding Bows to the equipment granted by the skill. Archers can now equip knives.

- Dragoon Jump skills have been changed so they all add +1 to the range, stacking on top of each other. Jump now works with boosting skills like Attack Up or Two Hands.

- The Mediator's Praise and Preach got a 30% accuracy boost.

- Dark Knight skills can be used with katana and axes.

- Dark Knight (F) and Bard have been swapped around. This should now cause Dark Knight JP to spill over with other Dark Knights, and Bards with Dancers, rather than the mix we had before.

- Guests have been brought back, at least for a first playthrough. They should remain as battle-only Guests in New Game Plus.

- Luso has been brought back as a Blue Mage and given one Blue Magic skill from each monster family. Monsters and their skills have been tweaked so that their MA has almost all been nerfed to make them roughly as strong as they were in vanilla without making Blue Magic basically useless on a human. Certain skills have been redesigned or buffed to make them more worthwhile as Blue Magic. Certain monsters have had their access to skills improved. He does not have the same stats or weapons available to him as WotL's Luso, as he is more of a Blue Mage than a cheap Ramza clone.

- Mustadio's Snipe skillset comes with a free passive Equip Guns.

- When Mustadio, Agrias, and Ovelia are temporarily unavailable during Chapter 2, as well as Rafa during Chapter 3, they're flagged Missing instead of being removed from the Roster. Upon reappearing, they use the stats and equipment they had saved in battle. (Sadly, Ovelia is then removed for good at the end of Chapter 2.)

- Ashley Riot's skills no longer jump to the Holy Sword formula with a damage boost before being halved. They do damage based on the standard weapon formula for each weapon type, all multiply damage by X/16, include elemental effects (overwriting weapon elements with ability elements if there are any), and have a 100% chance of status infliction. He also has a unique Support skill: Armsmaster, which allows him to equip all non-female weapons and shields regardless of Job, and gives him access to Equip Change.

- Rafa and Malak's skills will always strike the center tile on the first hit if it's a valid option. They will always hit a minimum of half the maximum number of hits (rounded down). The skills themselves no longer have exactly the same size and number of hits - they have been diversified a bit so they don't just feel like carbon copies of each other. All of Malak's skills now have a chance to inflict Innocent (which now increases the damage of his skills rather than reducing them), and his skill that causes status effects uses different status effects compared to Rafa's, but are still roughly equally likely to disrupt the enemy in similar ways. They also got access to more weapon types, and had their job stats rebalanced so they actually have MA growth now.

- Meliadoul can now use Mighty Sword skills with spears. Mighty Sword skills can now hit monsters.

- When Beowulf asks to join you, rather than being given a choice, it just jumps directly to the Join Up screen for him. Choosing whether or not to let him join determines how the rest of the scene goes. If he's rejected from the party, you can reread the rumor to view the event again.

- Cloud's skills have been copied over directly from the Journey of the Five design, aside from Finishing Touch which has been left at a 100% chance to hit, and Cherry Blossom, which is just a hard-hitting, wide-range magic AoE attack. Limits work with many more weapons, not just the Materia Blade as in vanilla, or swords & knight swords as in TLW.

- Alma joins the party after the final battle against Altima. Once she joins, she automatically learns Ultima 2 and All-Ultima. Ramza still has to pay to learn these skills in the Depths of Murond New Game Plus menu. Like Ramza, she has both Male PA and Female MA, and cannot abandon the party due to low Brave or high Faith.

- Dragons lost Tail Sweep. Each dragon gets its Dash attack and elemental breath attack normally, as well as access to a Beastmaster skill. Green Dragons get Dragon Quicken from Reis, Blue Dragons get the new Blue Magic skill Mighty Guard, and Red Dragons get Dragon Boost from Reis.

- New monsters have been included in the Deep Dungeon's END, both during the Elidibs fight and one of END's random battles afterwards: Lamias, sprite made by Twinees. I based their skills off of the Journey of the Five Lamias too, because why not. I figured they made for thematically appropriate minions for Elidibs/Zodiark. They are vulnerable to Invite.

Weapon changes:

- Axes now use the WotL Fell Sword formula.

- Flails' random damage now goes from 0.5x to 1.5x damage rather than 1 damage - 1x damage.

- Magic Guns have taken a 6 WP hit in order to avoid them being ridiculously broken when using an ability formula that uses standard weapon damage (WP * WP for guns). In order to compensate, they also get boosted back up by half of the unit's Magic Attack.

New choices/event options/alterations:

- Several maps/events that didn't have Move-Find Item options now do. Mostly because of the Reveal Treasures option in the Preparation Menu. Battles which don't let you deploy units now have at least one controllable unit with Move-Find Item. The player's inventory will no longer be reset after the Orbonne Monastery prologue battle, allowing the items there to be retained for Chapter 1.

- Ashley Riot's fight now uses fixed levels.

- You can skip the Wiegraf fight and get straight to Velius.

- You can choose not to Save Rafa on the Riovanes Rooftop. She'll join the party regardless.

- If you have enough units, you can choose to send a second group to the side of Bethla Garrison you didn't choose first. (Leaving this battle via the Prep Menu will cause returning to Bethla to load up the Sluice.)

- Any unit can flip the switches at Bethla, not just Ramza.

- Instead of Reis being kidnapped by Aliste and Bremondt during the questline from WotL, the player can choose which of three units to leave behind on the hill: Reis, Beowulf, or Ramza. The unit left behind will be kidnapped, leaving the others to rescue them.

- The Deep Dungeon has been reworked. Exits are no longer randomized - instead, every possible exit is a viable exit. Landing on an exit during the battle gives the player the option to go through it, which skips War Funds and War Trophy rewards, but ends the battle and unlocks the next floor. Beating the battle without finding the exit causes five crystals to drop over the five exit tiles, and allows the player to choose whether to leave the battle without unlocking the exit (just in case they have one unit with Death Sentence or something). Choosing to stay lights up the map (from the crystals) and ends the battle once the player steps onto one of the exit tiles. Elidibs no longer keeps his human name in Lucavi form or uses the Serpentarius title, as these don't line up with how the other Lucavi work. Instead, he's taken inspiration from the Espers tied to Zodiac Stones in other FF lore, and he is now named Zodiark, with the job title Master of Rule.

Quality of Life changes:

- The starting generics have fixed Brave and Faith. One is deliberately given low Brave and Faith in an effort to encourage players to use Dispatch Mission Special Training.

- New version of the Roster Hack which allows the return of Guests during the first playthrough. Slots 18, 19, and 20 start out reserved for Guests, decreasing as the game goes on and fewer slots are needed. Units can also be flagged as Guests without NEEDING to be in the Guest-designated slots, allowing Beowulf and Reis to be flagged accordingly during their sidequests as needed. The Load Formation functionality is now ignored if units aren't in the Roster, rather than loading junk data. The Bench Hack ignores Guests and can't be used to fill the slots designated for Guests until they're no longer reserved for them. Guests can be freely deployed in battles they aren't already reserved for - meaning you can bring units like Alma and Ovelia along to battles as long as they're still in the party.

- L1 and R1 shift units around on the Formation screen.

- A customized version of the Permadeath Terminator has been included, which can be toggled on or off. When active, once a unit's timer runs out, it becomes unrevivable, but does not turn into treasure or a crystal. It is currently enabled for all Rendezvous battles, meaning that you can't permanently lose units during those battles.

- Purchased abilities can be refunded to regain the JP spent on them. Reaction/Support/Movement skills equipped by the player cannot be refunded, and must be unequipped first.

- Scene skipping: for non-battle events, hold Start at the beginning of the scene, after a camera movement, or as a dialogue box is finished in order to instantly skip the scene. In order to better facilitate this change, Start now also works as a text advancement button, the same as O, X, or Select.

- Cross-Skip: Hold X to automatically speed up and rush through events. Useful for battle events which cannot be Scene Skipped.

- Zodiac Compatibility Highlighting: Hold Square overtop a unit, and units with non-neutral Zodiac compatibility will light up according to what that compatibility matchup is. Blue: Best Compatibility, Green: Good, Yellow: Bad, Red: Worst.

- Cancel Movement 1.14e Unofficial: After Moving in battle, but before Acting, press X to revert the unit's position back to where they started, reloading any stat gains they may have obtained via Move-JP Up and the like. Failed teleportations or found treasures disable movement cancelling.

- Learn on Hit skills can now be learned by both the current Primary AND Secondary skillsets. For example, if Ramza is a Monk and has Guts equipped, he can learn Ultima after being struck by it.

- Missing units can have their equipment and skills changed, preventing any of them from locking their gear away from others - or being unable to have their gear reset before returning for a future battle.

- Equip Change no longer consumes your Action for that turn if you only change weapons/shields.

- Defend now blocks loss of control status effects. Mostly to make Bad Breath far more possible to learn as Blue Magic.

- Some of the Engrish script has been tweaked. There's very little rhyme or reason for it, it mostly was just whatever I happened to stumble upon at a time that I felt like changing it.

Version 1.01 Resources

- Your inventory is no longer reset after Orbonne Monastery, allowing you to keep any Move-Find Items from it. This doesn't cause a temporal paradox at all - don't worry about it.

- Smrt Encounters has been incorporated. No, not Smart Encounters, S-M-R-T. Holding O after selecting a dot will give you the functionality of Smart Encounters, but not holding it will keep the default random battle chance in. You should be able to patch the real Smart Encounters over top of it if you want to, though.

- The Flee penalty from random battles used to only be reduced by a small amount for every battle beaten. It now fully resets to zero upon beating any single battle.

- Extended Warranty has been included to the list of QoL hacks in ReMixed. If the enemy steals your gear, once you're done beating the shit out of them and win the battle, you'll get it back from their unconscious and/or dead bodies. If they break your gear, you can buy it back at the Fur Shop. If you break a katana with Draw Out, you can buy that back at the Fur Shop, too.

- The event telling players about the Rendezvous battles has had its dialogue altered to now include mention that you can't die in them, but you can't bring Math Skill.

- You can't bring Math Skill to RDV battles anymore.

- Units sent out on Dispatch Missions can now be stripped of gear while dispatched.

- After beating the battle at Goug, you retain access to Zigolis Swamp, on the off chance that you need to grind random battles before the Barius Valley battle.

- Agrias' Bariaus Valley equipment from vanilla will now be earned as War Trophies after that battle. I forgot to give Rafa the same treatment, whoops.

- Axes have gotten a WP buff.

- Cat Kick and Dash (Squire) now have a 100% knockback rate. Pretty sure this gives it to Counter Tackle as well.

- Maintenance now prevents katanas from breaking through Draw Out and also prevents the user's stats from being reduced.
- The Blue Magic ability Wind Soul has been given guaranteed knockback - even if it misses.

- Oracles now have the Support ability "Equip Pole".

- The Geomancy skillset has been condensed down to just three abilities. Elemental Pulse hits a single target and chooses a specific Geomancy type depending on their tile. Elemental Surge does the same, but hits in an area. Elemental Blast does the same as Surge, but uses your tile to determine the type of Geomancy.

- Fixed a bug with Dragoons in which they would lose most of the vertical Jump range if they Mastered the job.

- Equip Katana and Two Hands have now been merged into one ability - Bushido.

- Two Swords has been renamed to Ninjutsu. Units with Two Swords can equip Ninja Blades, regardless of job. Books, crossbows, and nonmagical guns can now also be dual-wielded (though books currently don't say so in their descriptions); the way this works is that, as long as the second weapon does not have less range than the first one, you will get your second attack. If the second weapon does have less range, then even if the attack was still within its range, it will not go off.

- Rafa and Malak have been buffed even further. Their chance to inflict status effects has increased. Truth skills will now heal allies that are hit by them, whereas Un-Truth skills will never hit allies. Having the Un-Truth skillset equipped will cause Malak's low Faith to act as high Faith when he uses a Faith-based spell. Rafa has one skill that will never hit allies, and Malak has one skill that will always inflict Innocent.

- Truth and Un-Truth skills have been renamed, because shit like "Heaven BltBack" is dumb. I tried to aim for a mix of less ridiculous translation and sticking to a theme of heaven/hell, good/bad naming convention. For example, Heaven Thunder vs Hell Thunder, or Diamond Sword vs Slicing Sword.

- Move-Find Item has been given an extra advantage: equipping it will cause low Brave to act as high Brave for Reactions.

- Oracles have lost Any Weather and received a new Movement skill: Move-Cleanse, which removes negative status effects after Moving.

- Geomancers have lost Move on Lava and Any Terrain and received a new Movement skill: Terrain Mastery, which grants them Waterwalking, Lavawalking, and all the benefits of Move-Find Item. An all-around upgrade to Move-Find Item, essentially.

- Ninjas have lost Move in Water Waterwalking and received a new Movement skill: Pass, which grants +1 Move and lets them walk through enemies as if they were allies. Discount Teleport, essentially.

- Samurais' Walk on Water Swim skill has been buffed and renamed. Now called Athlete, it allows them to swim, grants +1 Jump, and causes Move to not consume CT.

- The Fly skill has been buffed. It now has all the benefits of Terrain Mastery, making it an upgrade to that skill - which itself was already an update to Move-Find Item. The final form of Move-Find Item, essentially.

- Added Monkey Grip functionality to Equip Axe and Equip Shield; with either support skill equipped, two-handed weapons can be held in one hand.

- Fixed a bug with Ninjutsu (Dual Wield) that prevented attacking with both hands when barehanded.

- Fixed a bug with the Game Over event that prevented you from retrying random battles.

- Fixed a bug with the second Delita/Ovelia battle that caused it to potentially be re-triggered by making certain choices during unrelated events.

- Added War Trophies to (mostly) match Guest Rafa's starting equipment in Riovanes Entrance, to make up for the duplication of her starting equipment when Guest Rafa leaves and Joining Rafa appears with a full set of gear.

- Fixed a bug with the knockback abilities that prevented them from having 100% knockback if they had a max range of 1.

- Blade Grasp, Finger Guard, and Arrow Guard should now correctly display the hit chance if the target is using the low Brave reaction protection with the Move-Find Item movement skills.

- Malak's skills should now correctly avoid ally tiles.

- If using a pincer attack at Bethla, the first group should now correctly be flagged Missing while the second group attacks.

- Fixed an issue with reactions that caused them to be 100% regardless of what the hit chance said because I forgot to add a minus sign at one key point.

- Fixed Death Knight Algus being unable to use Dark Sword in Limberry Castle.

- Fixed issues with trying to use scene skip during the Delita's Betrayal event with Delita, Olan, Balmafula, and Ovelia.

- Gave Cloud's Soldier job the ability to use Knight Swords and Katanas.

- This was changed in an earlier patch but I forgot to note it: The Dragon and Hydra families now have Non-Charge to allow them to instant cast their Blue Magic abilities.

- Fixed a bug with the Prep Menu that accidentally assumed the maximum number of units on the field was 17, not 16, and messing up Reveal Treasures at exactly 12 units on the field.

- Fixed a bug causing Zalbag's Matra Magic spell to be a one-hit KO. Also increased its MP cost to 50, so he can't use it nearly as often (and basically shouldn't be able to use it at all in Igros).

- Fixed a bug with trying to scene skip during the funeral event at the end of the game.

- Re-added in the TLW Credits and Depths of Murond Events. (I really needed to delete the empty "event files" from my event folder much sooner than this.)

- Enemy Sing skills now correctly give beneficial effects to units on the same team.

- Mustadio's Snipe skill no longer allows him access to Female specific gear.

- The final battle against Altima should now correctly do the "This Game Is Complete" victory rather than a generic one.

- Fixed a softlock in the optional Disorder in the Order battle.

- Fixed an issue with the Luso Recruitment event that caused the screen to remain completely black if the scene was skipped as soon as it began.

- Changed Monster Skill functionality. Now, instead of giving a skill to monsters within 1 tile of the user, it affects all allied monsters on the field. It also grants all allied monsters +1 Move (which doesn't stack with multiple uses of Monster Skill).

- Tame also gets all the above Monster Skill functionality.

ReMixed Resources v1.1.08

- Fixed a bug in which the Roster size was getting screwed up in NG+, causing Benching not to work anymore. Now, upon viewing the Orbonne Prayer event at the start of NG+, or the Military Academy event shortly after (or in the Brave Story's Records, for those of you with save files from older versions), the game will check whether you're in NG+, and if so - and if the Roster variable is zeroed out - it will properly set the Roster size to 20.

2
Event Editing / Event Nickname Helper
December 16, 2023, 04:25:43 pm
Through event editing, it's possible to give units custom unit nicknames on the fly - the equivalent of taking a unit to the soldier office and renaming them. They don't lose their base name/quote ID, but as far as the player's concerned, they go by their new nickname now. You can also do this with job nicknames, though these only last during battle, and using Select on them in the status screen will give the description according to the unit's Job ID. Still, if you're looking to make use of temporary nicknames for one-off units whose stats are never saved or whatever other shenanigans you can imagine, this does allow for some interesting possibilities. ArmoredKori uses it in her mod Unexplored to give the Ordallian units unique job nicknames to help them stand out as foreign versions of Ivalician units, for example.

They're a pain in the ass to fill out by hand, though, since you need to cross-check the Font page character by character while filling out each set of LUI and ADD commands while keeping in mind that the four bytes per set need to be filled in in reverse order compared to how the name will be read later, but the (up to) four sets themselves need to be in the correct order.

I got sick of doing it and decided just to make a spreadsheet to do it for me so I could C&P the commands I wanted and be done with it.

Note that since these commands include SaveAddress, you'll need to use the Event Instruction Upgrade Hack in order for this to work.
3
PSX FFT Hacking / Equip X Skills Reworked
October 20, 2023, 10:25:02 pm
I wanted to make a clone of Equip Change that also gave some Equip X options to the unit, allowing them to have more of a reason to bring it along to all of the various generic jobs that only have one weapon type and wouldn't have any use for Equip Change beyond replacing stolen/broken gear. Turned out the routine was super inefficient and I was able to save a ridiculous amount of space in it. Akashachi mentioned how much he liked the way that Tweak allows secondary skillsets to grant Equip skills as well, and while I don't currently intend to use it myself, I'd freed more than enough space to make it happen, so I went "sure, why not?"

I made it super customizable - seriously, it has twenty-eight variables for the end user to set up, if they so desire - but by default, it turns Equip Crossbow into Equip Bow (and Crossbow), turns the blank support 0x01E1 into "Armsmaster" (which allows shields and all non-female weapons to be equipped while also granting access to Equip Change), then grants Armsmaster to Ashley Riot's Break Arts, Equip Gun to Mustadio's Snipe, and Equip Sword to Agrias' Holy Sword, Cloud's Limit, Meliadoul's Mighty Sword, Beowulf's Magic Sword, and Orlandu's All Swordskill. Since these are dependent on specific skillsets and designed for The Lion War, they may need some tweaking if taken to vanilla. Can't remember if, say, guest Agrias uses the same skillset as joining Agrias, but if not, one of them would lack the free Equip Sword attached to the skillset.
4
The Lion War / Quick Fix for the Balthier Softlock
July 18, 2023, 04:20:01 pm
A while ago, I prepared a quick fix for anyone dealing with the Balthier softlock that comes from having 4 or fewer characters in Ramza's name, but I wasn't able to upload it here.

I don't have a save file that can test this myself, but it should work fine. But just to be safe, make sure to apply the patch to a different copy of your TLW/TLWotL ISO - the save file will still work with this other copy afterwards. Do not apply the patch to a vanilla ISO - it's just a quick fix patch, not a new version of TLW.
5
The Lion War / Skip Chapter One
September 25, 2022, 02:44:43 pm
For ArmoredKori's work in progress - Unexplored, based off The Lion War - he was discussing the idea of skipping Chapter 1 entirely, because his additions all take place after Chapter 2 starts. My response was not to do that, but to let it be a player choice.

Then I came up with events that set that up for him, as well as anyone else who would like to use such a feature.

Both events need to be imported into a copy of TLW's TEST.EVT using EVSP, then imported to the ISO via CDMage.
6
News / The Lion War of the Lions has released!
September 18, 2022, 11:37:21 pm
At long last, the WotL translation is available in the PSX version of FFT! It's part of The Lion War, and comes with all the fun extras that can be found in that mod, such as single-player Rendezvous battles, the Sound Novels, and a New Game Plus feature!

You can find it here.
7
On the ninth of September, Kokojo released the first chapter of the Call of Power remake, which adds new and never-before-seen features such as a world map! Kokojo's been hard at work using all the latest upgrades to the tools to show off a lot of what can be done with modding nowadays, so if you're interested in seeing just how far FFT modding can go, and checking out a totally unique story in the FFT engine, head on over!

You can also go check out the new 2.03 update to The Lion War for something a lot closer to the vanilla experience. The Lion War brings as much WotL content to the PSX version as possible, with some liberties taken to enhance that content where possible (such as replacing Luso, a blatant Ramza clone, with Ashley Riot, or replacing the bland loot system from the WotL Rendezvous with the more robust Treasure Wheel, or replacing the option to continue on the world map after beating Altima with an entire New Game Plus set of bonuses and options). 2.03 comes with a bunch of bug fixes as well as our third unique new Rendezvous battle, Be a Beta, which sends you to Bethla Sluice to beat up our beta testers.
8
One of the questions I saw often from those seeking to use TLW as a base mod for their work was: "What if I want to change the items? What would I do about the Treasure Wheel after doing a Rendezvous?"

For a fair while, our answer has been to shrug and suggest that either the Treasure Wheel should be dummied out in your patch, or to roll up your sleeves and dive into the event commands, painstakingly adjusting every set of loot.

However, early on in the Treasure Wheel's production, Elric commented that Kokojo would love the concept for his mod, Call of Power, in which guests would silently join the party after fights. These guests had a treasure chest for a sprite, and their purpose was to be stripped of their gear before they were auto-dismissed.
Once the Wheel was made public (or was shared with him; I forget which), Kokojo himself expressed the same sentiment.

However, not even Kokojo was finding any real success in taking the Treasure Wheel event and customizing it to work as he wanted, just because of how stuffed the event was, and difficult it was to edit it.

He and I ended up discussing the issue for a while, until one day I suggested keeping the treasure box guests so that he could set up a similar event to use their gear to populate some loot tables. A bit later, I realized that if that was an option, so was using the gear of the units in the ENTD. There are 16 units, after all, which means that if we divide them into half common and half rare loot, we can have up to 8 different options for each type of equipment. That's certainly smaller than some of my loot tables currently are in TLW, but it's still a fairly respectable amount. More than adequate for the Wheel's needs. So, I got to work, and built this new variant: the Loot Wheel.


=====

So how can you set up the Loot Wheel's loot? There are two sets of things to edit: ENTD and some of the early event commands. You should also make sure to import the included EVTCHR so that the treasure chests show up properly - many of the new treasure chest palettes are blank in the Treasure Wheel version.

=====

You'll want 16 units in the ENTD, with the first 12 set to both Always Present and Randomly Present*.  They should all be set to the same special Unit (such as 02 Ramza) to make sure they have the same spritesheet. They should have IDs of x90-x9F.

*(Using both will cause the unit to spawn automatically Erased, and trigger the "Zalera bug" that prevents units with Always: Float from having the Float animation. After all, we don't want the chests to have a Float animation.)

At the start of the event, it builds loot tables from the units' Right Hand Weapon, Left Hand Shield, Head, Body, and Accessory slots. The first eight units are used to generate common loot. The last eight are used to generate rare loot. The first eight units' War Trophies are also used to generate Consumable loot, with their Bonus Money set to the number of those consumables you'll get. These item types don't always have to match the loot category - for example, you can put katanas in the war trophies slots and they'll be awarded just fine. However, the Loot Wheel will still call them Consumables. Additionally, the game has different bytes for Right Hand Weapon and Right Hand Shield, or Left Hand Weapon and Left Hand Shield, so it's best not to mess around with the equipment slots too much.

If an equipment slot is left empty, the loot wheel will ignore it when figuring out its loot tables. If that equipment slot is empty for the entire set of common loot, every chest of that type will be converted to Consumables. If that equipment slot is empty for the entire set of rare loot, any rare upgrades for that category will award the common loot, but also with some bonus JP. If a common unit's War Trophy slot is empty, it'll be set to Item FD - normally Phoenix Downs. If Bonus Money is set to 0, it'll get a random value between 1 and 9.

You can also adjust any of the first 12 units' Faith in order to force them to spawn as a specific chest.

Common loot:
- 2 will be a Weapon Chest.
- 3, Shield.
- 4, Helmet.
- 5, Armor.
- 6, Accessory.
- 7, Consumable.

Rare loot:
- 8 will be a Rare Weapon.
- 9, Rare Shield.
- 10, Rare Helmet.
- 11, Rare Armor.
- 12, Rare Accessory.
- 13, since Consumables won't upgrade to Rare, will be a Mystery chest, which holds one random piece of common loot, and awards bonus JP.

Loot+:
- 18 will be a Weapon+ chest, which holds a common weapon and awards bonus JP.
- 19 will be Shield+.
- 20, Helmet+.
- 21, Armor+.
- 22, Accessory+.
- 23, Consumable+.

Units that don't have hard-set Faith can never reach these values, and any unit with Faith higher than 32 (which is still below the lowest possible minimum random Faith range) will have their loot category randomized.

Speaking of randomized, you can actually just leave units' equipment set to Random if you like. As long as you aren't planning to get Unique equipment from this event, you can handle normal and rare rewards by setting the first eight units to be around the Party Level, and the last eight to be something like Party Level +10. Setting the units to different Jobs (but keeping their Units as the same special units) will allow them to spawn with different gear; for example, you can use Archers, Knights, and Wizards to get a good mix of different randomized equipment.

=====

As for the event commands: In the event itself, there are a few lines near the top that determine how many chests you can open and how rare chests are handled. You can set the odds of rare chests spawning at the start, the odds of common chests granting you a free upgrade when you open them, whether or not multiple common chests can become rares at the start or just one at most, whether or not the player can pay gil to upgrade individual chests, and how much gil that would cost. And this is all in addition to being able to hard-set chest types via their Faith in the ENTD.

=====
The last thing to mention is that, since these lists are indeed generated by the ENTD, you will need to set up multiple ENTDs for multiple different sets of rewards. Normally, in TLW, there's only one Treasure Wheel event. Going with the Loot Wheel, unless you want every Rendezvous to use Random loot, you'll need to set up a new event for every single different set of loot, and alter the Rendezvous events' final PostEvent(x81,x????) command to point at the correct one.

The good news is that this is relatively simple to set up. You can copy and paste the ENTDs, and just have to adjust units' equipment, War Trophies, Bonus Money, and/or Faith accordingly. You can also copy and paste the event scripts, just adjusting those first few lines accordingly. Same thing with the ATTACK.OUT and conditional stuff. It's a bit more work than it would be to just adjust the ENTDs if we'd set it up this way from the start, but it is still very doable.
9
For now, this eventing tutorial is going to be fairly simple, focused only on the event commands themselves rather than the other necessary steps like setting up the ENTD, ATTACK.OUT, and conditional settings. So, we're going to be making the Agrias Motherfucking Oaks version of the Orbonne Prayer scene at the very start of the game, which already has all of this set up and ready to go for our purposes.

It's important to note that this tutorial is being done up with the expectation that you're using The Lion War as the base for your edits, and that the emulator you're using for this is psxfin v1.13. Also, if you ever have any confusion about the specific functionality of an event command, refer to the Event Instructions page on the wiki.

It would be relatively easy for me to simply edit the existing commands of the event to accomplish what I want here, but since this is a tutorial, we're going to start from scratch. Later on, I'll be tossing some of the vanilla commands in more freely, though.

Anyway, here's what you should see once you first open EVSP.



There are some basic commands we need to establish before this can actually be imported and seen in-game.

Offset(x00002000) will tell the game that this is the first event.

LoadConditionals(x0000) will (if using The Lion War) tell the game which Conditionals to use for this event.

Camera(+00840,-00220,+00504,+00302,+03584,+00000,+04096,+00000)will tell the game where we want the camera to be at the very start of the event. The final video itself uses different initial camera commands, but for this tutorial, this is what we'll use.

Reveal(030) will let us fade in from the black screen. You need a Reveal command near the start of every event or else you won't be able to see anything.

Wait(00030) will prevent any of the next commands from happening until after 30 frames have passed. We're using this to prevent anything from happening until after the Reveal command is finished.

Pause() is a command that basically exists only for the purpose of doing event work. This will keep the event paused until you hit X or O. We're using it to keep the event from ending once the other commands are finished.

EventEnd() is, well, the command that marks the end of the event commands. Note that you should never have more than one of these in an event, or else the compiler will end the commands after the first one and consider all the rest to be message text.

So, take these commands and put them in EVSP.

Offset(x00002000)
LoadConditionals(x0000)
Camera(+00840,-00220,+00504,+00302,+03584,+00000,+04096,+00000)
Reveal(030)
Wait(00030)
Pause()
EventEnd()



Click Compile Event, and choose the correct .EVT file to compile to. Then go into CDMage and import the .EVT. Then go into psxfin, open the game, and choose New Game. Get to the first event and you should end up with this:


If you were to press O or X at this point, it would end the Pause, and then end the event. Since there's no further directions in this event, it would go into a "battle" in which the units just kinda stand in a corner and don't do anything because there are no enemies.


We'll go put some more stuff in the event in a moment, but for now, while we've got psxfin open, let's make sure the savestate path is set to our EVSP folder. This will allow us to use savestate editing, which is many times faster than importing the .EVT every single time we make a change.



Back to EVSP.

We're going to add another Pause() command, this time immediately after the Offset command. This Pause will be where we make our savestates.



Once again, hit Compile Event, then go to CDMage and import the .EVT. Go back to psxfin and choose File > Reset. Now, when you start a New Game and get to the event, you'll see a black screen and hear the normal background music. That's good - that's exactly what we want. Use Quick Save 1, 2, and 3 (F6, F7, and F8 by default in psxfin's controls).

Go back to EVSP. Click the checkbox for Compile to SaveState. A small popup menu will appear, asking you to choose which savestate to save to. Choose "quicksave_TLW2_942.21_1.psv", and click Compile to Chosen SaveState.



Go to the Offset command and comment it out by putting "//" at the start. This is because EVSP has a minor bug that will cause it to throw the cursor back to the start of the event sometimes after compiling to a savestate.

Now, let's add some more commands.

After the Camera instruction, add
UnitAnim(x00,x00,x0002,x00). This will target all units currently alive and on the field, and make them use the standing animation, rather than the walking-in-place we saw before.

However, Ovelia is supposed to be kneeling in prayer at the start of this scene, not standing upright. And her prayer doesn't use a standard animation. So what we need to do is to load in a special set of animation frames known as an "EVTCHR". Add in the following instructions:

LoadEVTCHR(x01,x00,x00)
WaitForInstruction(x34,x00)
SaveEVTCHR(x01)

Now the EVTCHR is ready to be used. Ovelia's Unit ID is x0C, and the frame we need for her can be called with Anim x0259, so add the following command:

UnitAnim(x0C,x00,x0259,x00)
Your EVSP should look like this:



Click Compile Event. Note that this time it doesn't ask you which .EVT to compile the event to.
Go to psxfin and choose Quick Load 1 (F1 by default).


Now, time to add some text to the event. Text is put into an event script below the EventEnd() command, with the end of each individual message marked by either {close} or {end}. For the sake of readability, the lines "Message x01", "Message x02" and so on are included as comments (lines beginning with "//" that the compiler automatically ignores).

Beneath the EventEnd() command, add these lines.

//INSTRUCTION SECTION END -  TEXT START
//Message x01
Ignore this message for now.{br}
We're not including Ovelia's prayer yet.{end}

//Message x02
{font:08}Female Knight{font:00}{br}
Don't worry about that, Ovelia.{br}
Let's get going.{end}

//Message x03
{font:08}Ovelia{font:00}{br}
Just a moment, Agrias...{end}

//Message x04
{font:08}Agrias{font:00}{br}
That's {font:08}Dame{font:00} Agrias, Princess.{br}
{br}
I appreciate your religious{br}
devotion, but I'm the knight{br}
in charge of your safety.{br}
And we need to get to{br}
Dorter before nightfall.{end}

//Message x05
{font:08}Priest{font:00}{br}
Princess Ovelia, please.{br}
{br}
You... you don't want to{br}
give Agrias any trouble,{br}
do you? It's n{D11D}not wise.{end}

We also need to actually have the units say these lines in-game. So, after the Wait(00030), add these lines:

//Agrias talks to Ovelia.
DisplayMessage(x10,x12,x0002,x34,x00,x00,+00000,+00000,+00000,x03)
//The game waits for this message to finish.
WaitForInstruction(x01,x00)
//Ovelia says just a minute.
DisplayMessage(x10,x11,x0003,x0C,x00,x00,+00000,+00000,+00008,x02)
//The game waits for this message to finish.
WaitForInstruction(x01,x00)
//Agrias insists.
DisplayMessage(x10,x12,x0004,x34,x00,x00,+00000,+00000,+00000,x03)
//The game waits for this message to finish.
WaitForInstruction(x01,x00)
//Simon warns Ovelia that it's not wise to ignore Agrias.
DisplayMessage(x10,x12,x0005,x13,x00,x00,+00000,+00000,-00008,x02)
//The game waits for this message to finish.
WaitForInstruction(x01,x00)

It's now too long for me to screenshot, but the text in your EVSP should now look like this:

//Offset(x00002000)

Pause()

LoadConditionals(x0000)
Camera(+00840,-00220,+00504,+00302,+03584,+00000,+04096,+00000)

UnitAnim(x00,x00,x0002,x00)
LoadEVTCHR(x01,x00,x00)
WaitForInstruction(x34,x00)
SaveEVTCHR(x01)
UnitAnim(x0C,x00,x0259,x00)

Reveal(030)
Wait(00030)

//Agrias talks to Ovelia.
DisplayMessage(x10,x12,x0002,x34,x00,x00,+00000,+00000,+00000,x03)
//The game waits for this message to finish.
WaitForInstruction(x01,x00)
//Ovelia says just a minute.
DisplayMessage(x10,x11,x0003,x0C,x00,x00,+00000,+00000,+00008,x02)
//The game waits for this message to finish.
WaitForInstruction(x01,x00)
//Agrias insists.
DisplayMessage(x10,x12,x0004,x34,x00,x00,+00000,+00000,+00000,x03)
//The game waits for this message to finish.
WaitForInstruction(x01,x00)
//Simon warns Ovelia that it's not wise to ignore Agrias.
DisplayMessage(x10,x12,x0005,x13,x00,x00,+00000,+00000,-00008,x02)
//The game waits for this message to finish.
WaitForInstruction(x01,x00)


Pause()
EventEnd()


//INSTRUCTION SECTION END -  TEXT START
//Message x01
Ignore this message for now.{br}
We're not including Ovelia's prayer yet.{end}
//Message x02
{font:08}Female Knight{font:00}{br}
Don't worry about that, Ovelia.{br}
Let's get going.{end}
//Message x03
{font:08}Ovelia{font:00}{br}
Just a moment, Agrias...{end}
//Message x04
{font:08}Agrias{font:00}{br}
That's {font:08}Dame{font:00} Agrias, Princess.{br}
{br}
I appreciate your religious{br}
devotion, but I'm the knight{br}
in charge of your safety.{br}
And we need to get to{br}
Dorter before nightfall.{end}
//Message x05
{font:08}Priest{font:00}{br}
Princess Ovelia, please.{br}
{br}
You... you don't want to{br}
give Agrias any trouble,{br}
do you? It's n{D11D}not wise.{end}


Hit Compile Event, go back to psxfin and load the savestate.


So that was just their dialogue added in. If you know the opening of FFT, though, you'll probably have noticed that the characters aren't very animated during this little chat. We'll add in some commands to make that happen. You can delete the earlier set of message commands and replace them with this.


//Agrias says it's time to go.
DisplayMessage(x10,x12,x0002,x34,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)

//A brief pause, then Ovelia looks up.
Wait(00030)
UnitAnim(x0C,x00,x025A,x00)
Wait(00030)

//Ovelia tells Agrias "just a minute", then looks down again.
DisplayMessage(x10,x11,x0003,x0C,x00,x00,+00000,+00000,+00008,x02)
WaitForInstruction(x01,x00)
Wait(00050)
UnitAnim(x0C,x00,x0259,x00)
Wait(00050)

//Agrias walks up behind Ovelia's shoulder and reminds her who's in charge.
WalkTo(x34,x00,007,003,x00,x00,+008,x01)
WalkToAnim(x34,x00,x0002)
WaitWalk(x34,x00)
RotateUnit(x34,x00,x0A,x00,x00,x00)
WaitRotateAll()
DisplayMessage(x10,x12,x0004,x34,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)

//Simon timidly steps forward and warns Ovelia not to ignore Agrias.
WalkTo(x13,x00,006,005,x00,x00,+006,x01)
WalkToAnim(x13,x00,x0002)
WaitWalk(x13,x00)
DisplayMessage(x10,x12,x0005,x13,x00,x00,+00000,+00000,-00008,x02)
WaitForInstruction(x01,x00)

So now your EVSP should look like this:

//Offset(x00002000)

Pause()

LoadConditionals(x0000)
Camera(+00840,-00220,+00504,+00302,+03584,+00000,+04096,+00000)

UnitAnim(x00,x00,x0002,x00)
LoadEVTCHR(x01,x00,x00)
WaitForInstruction(x34,x00)
SaveEVTCHR(x01)
UnitAnim(x0C,x00,x0259,x00)

Reveal(030)
Wait(00030)

//Agrias says it's time to go.
DisplayMessage(x10,x12,x0002,x34,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)

//A brief pause, then Ovelia looks up.
Wait(00030)
UnitAnim(x0C,x00,x025A,x00)
Wait(00030)

//Ovelia tells Agrias "just a minute", then looks down again.
DisplayMessage(x10,x11,x0003,x0C,x00,x00,+00000,+00000,+00008,x02)
WaitForInstruction(x01,x00)
Wait(00050)
UnitAnim(x0C,x00,x0259,x00)
Wait(00050)

//Agrias walks up behind Ovelia's shoulder and reminds her who's in charge.
WalkTo(x34,x00,007,003,x00,x00,+008,x01)
WalkToAnim(x34,x00,x0002)
WaitWalk(x34,x00)
RotateUnit(x34,x00,x0A,x00,x00,x00)
WaitRotateAll()
DisplayMessage(x10,x12,x0004,x34,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)

//Simon timidly steps forward and warns Ovelia not to ignore Agrias.
WalkTo(x13,x00,006,005,x00,x00,+006,x01)
WalkToAnim(x13,x00,x0002)
WaitWalk(x13,x00)
DisplayMessage(x10,x12,x0005,x13,x00,x00,+00000,+00000,-00008,x02)
WaitForInstruction(x01,x00)


Pause()
EventEnd()


//INSTRUCTION SECTION END -  TEXT START
//Message x01
Ignore this message for now.{br}
We're not including Ovelia's prayer yet.{end}
//Message x02
{font:08}Female Knight{font:00}{br}
Don't worry about that, Ovelia.{br}
Let's get going.{end}
//Message x03
{font:08}Ovelia{font:00}{br}
Just a moment, Agrias...{end}
//Message x04
{font:08}Agrias{font:00}{br}
That's {font:08}Dame{font:00} Agrias, Princess.{br}
{br}
I appreciate your religious{br}
devotion, but I'm the knight{br}
in charge of your safety.{br}
And we need to get to{br}
Dorter before nightfall.{end}
//Message x05
{font:08}Priest{font:00}{br}
Princess Ovelia, please.{br}
{br}
You... you don't want to{br}
give Agrias any trouble,{br}
do you? It's n{D11D}not wise.{end}

Compile the event.


Now we need to get the rest of the units for this scene added in. The ENTD in the Patcher only has Agrias, Simon, and Ovelia present by default. Normally, this scene also requires Ramza, Gafgarion, Rad, and the wounded female Knight. But for the sake of this Agrias Motherfucking Oaks video, we'll also add in Lezales, the enemy male Knight.

None of these units are placed where they should be in the ENTD, but the WarpUnit command can put them where they're needed.

Units can only be added one at a time. However, if we put the AddUnit commands within an AddUnitStart/AddUnitEnd block, and set them not to be drawn immediately, the game will quietly add them in, one by one, while other commands happen. They'll remain invisible until the Draw command is used on them, but their spritesheets and battle stats ARE fully loaded in. This is often very useful, since AddUnit takes some time, but Draw is instantaneous. You might notice some events avoid Adding units in early, though, due to issues like the sprite limit.

Put these commands after the Camera instruction:

WarpUnit(x02,x00,002,003,x00,x03)
WarpUnit(x17,x00,003,004,x00,x03)
WarpUnit(x83,x00,002,005,x00,x03)
WarpUnit(x84,x00,001,004,x00,x03)
WarpUnit(x81,x00,001,004,x00,x03)

AddUnitStart()
AddUnit(x02,x00,x01)
AddUnit(x17,x00,x01)
AddUnit(x83,x00,x01)
AddUnit(x84,x00,x01)
AddUnit(x81,x00,x01)
AddUnitEnd()

And add this command before the Pause:

WaitAddUnitEnd()
If, for any reason, all the units haven't finished being added in yet, that WaitAddUnitEnd will make the event wait until they are.

Now, let's add in the sound of the door being thrown open, the camera turning to face the door, and making Ramza, Gafgarion, and Rad appear.

SoundEffect(x0048)
Camera(+00616,-00220,+00504,+00302,+04432,+00000,+04096,+00064)
Draw(x02,x00)
Draw(x17,x00)
Draw(x83,x00)
//Wait for the camera to finish turning before continuing with the event.
WaitForInstruction(x04,x00)

//Offset(x00002000)

Pause()



LoadConditionals(x0000)
Camera(+00840,-00220,+00504,+00302,+03584,+00000,+04096,+00000)

WarpUnit(x02,x00,002,003,x00,x03)
WarpUnit(x17,x00,003,004,x00,x03)
WarpUnit(x83,x00,002,005,x00,x03)
WarpUnit(x84,x00,001,004,x00,x03)
WarpUnit(x81,x00,001,004,x00,x03)

AddUnitStart()
AddUnit(x02,x00,x01)
AddUnit(x17,x00,x01)
AddUnit(x83,x00,x01)
AddUnit(x84,x00,x01)
AddUnit(x81,x00,x01)
AddUnitEnd()

UnitAnim(x00,x00,x0002,x00)
LoadEVTCHR(x01,x00,x00)
WaitForInstruction(x34,x00)
SaveEVTCHR(x01)
UnitAnim(x0C,x00,x0259,x00)

Reveal(030)
Wait(00030)

//Agrias says it's time to go.
DisplayMessage(x10,x12,x0002,x34,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)

//A brief pause, then Ovelia looks up.
Wait(00030)
UnitAnim(x0C,x00,x025A,x00)
Wait(00030)

//Ovelia tells Agrias "just a minute", then looks down again.
DisplayMessage(x10,x11,x0003,x0C,x00,x00,+00000,+00000,+00008,x02)
WaitForInstruction(x01,x00)
Wait(00050)
UnitAnim(x0C,x00,x0259,x00)
Wait(00050)

//Agrias walks up behind Ovelia's shoulder and reminds her who's in charge.
WalkTo(x34,x00,007,003,x00,x00,+008,x01)
WalkToAnim(x34,x00,x0002)
WaitWalk(x34,x00)
RotateUnit(x34,x00,x0A,x00,x00,x00)
WaitRotateAll()
DisplayMessage(x10,x12,x0004,x34,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)

//Simon timidly steps forward and warns Ovelia not to ignore Agrias.
WalkTo(x13,x00,006,005,x00,x00,+006,x01)
WalkToAnim(x13,x00,x0002)
WaitWalk(x13,x00)
DisplayMessage(x10,x12,x0005,x13,x00,x00,+00000,+00000,-00008,x02)
WaitForInstruction(x01,x00)

WaitAddUnitEnd()

SoundEffect(x0048)
Draw(x02,x00)
Draw(x17,x00)
Draw(x83,x00)
Camera(+00616,-00220,+00504,+00302,+04432,+00000,+04096,+00064)
//Wait for the camera to finish turning before continuing with the event.
WaitForInstruction(x04,x00)

Pause()
EventEnd()


//INSTRUCTION SECTION END -  TEXT START
//Message x01
Ignore this message for now.{br}
We're not including Ovelia's prayer yet.{end}
//Message x02
{font:08}Female Knight{font:00}{br}
Don't worry about that, Ovelia.{br}
Let's get going.{end}
//Message x03
{font:08}Ovelia{font:00}{br}
Just a moment, Agrias...{end}
//Message x04
{font:08}Agrias{font:00}{br}
That's {font:08}Dame{font:00} Agrias, Princess.{br}
{br}
I appreciate your religious{br}
devotion, but I'm the knight{br}
in charge of your safety.{br}
And we need to get to{br}
Dorter before nightfall.{end}
//Message x05
{font:08}Priest{font:00}{br}
Princess Ovelia, please.{br}
{br}
You... you don't want to{br}
give Agrias any trouble,{br}
do you? It's n{D11D}not wise.{end}


So there's a few issues to notice. One is that you can very clearly see the three just pop onto the screen. The second is that these three units are still doing the marching animation, because they weren't Added in until after the UnitAnim that made all units stand still. The third is that Ovelia ends up facing directly away from the screen rather than staying in her prayer animation (because EVTCHRs hate camera rotation).

So, we'll make use of SpriteMove here. SpriteMoves are different from WalkTos in that they don't automatically change to a walking or running animation, only move the unit's sprite, not the unit itself, and they aren't affected by the map's terrain. So using WalkTo to move up a hill will let the unit automatically climb the hill to get to the correct X/Y, whereas SpriteMove will just slide the sprite to wherever those coordinates are relative to the unit's current position. Similarly, WalkTo won't let a unit walk through a wall, but SpriteMove will - and that's what we want here, for these units to have walked in through a wall.

We'll start by SpriteMoving all three of them into the doorway once the WaitAddUnitEnd is over. Each tile moved is worth a value of 28. Gafgarion (unit ID x17) needs to move 3 tiles west. Ramza (unit ID x02) needs to move 2 tiles west and 1 tile north. Rad (unit ID x83) needs to move 2 tiles west and 1 tile north.

SpriteMove(x17,x00,-00084,+00000,-00000,x00,x01,+00000)
SpriteMove(x02,x00,-00056,+00000,+00028,x00,x01,+00000)
SpriteMove(x83,x00,-00056,-00000,-00028,x00,x01,+00000)

After that, we need to get them to move in place. This is a bit trickier, because we also have to make them stop the marching animation once they do, but unlike WalkTo, there is no command to automatically set them to a specific animation once they stop moving. We can use WaitSpriteMove to make the rest of the event wait until after they finish moving, but there will be three of them moving at once, and at different times to make it seem like they didn't all phase through each other to enter the door at the same time.

So we'll also use Blocks. Most commands work in Blocks, and Blocks allow the commands within to run independently of the rest of the event. Since Gafgarion is the first one to talk after the three of them enter the room, we'll have Ramza and Rad's movement in Blocks, while Gafgarion's movement is the one the rest of the event waits on.

We'll also have Simon turn around to face the three shortly after he hears the sound. There's a built-in Delay feature in RotateUnit, so we'll just use it to save us a Wait command and avoid the need to put it in a Block as a result.

And finally, Ovelia will be given more EVTCHR animations (in a Block) to switch her to a front-facing prayer animation as the camera goes around to the other side of her.

So, after the second Camera command:

//Ovelia stays in a prayer animation.
BlockStart()
Wait(00020)
UnitAnim(x0C,x00,x025D,x00)
Wait(00014)
UnitAnim(x0C,x00,x025E,x00)
BlockEnd()

//Simon turns around after a moment.
RotateUnit(x13,x00,x04,x00,x00,x34)

//Ramza walks in.
BlockStart()
Wait(00030)
SpriteMove(x02,x00,+00000,+00000,+00000,x00,x01,+00080)
WaitSpriteMove(x02,x00)
UnitAnim(x02,x00,x0002,x00)
BlockEnd()

//Rad walks in.
BlockStart()
Wait(00050)
SpriteMove(x83,x00,+00000,+00000,+00000,x00,x01,+00080)
WaitSpriteMove(x83,x00)
UnitAnim(x83,x00,x0002,x00)
BlockEnd()

//Gafgarion walks in. We'll actually have him walk a bit further in than his real unit position, so he can step back a moment later.
SpriteMove(x17,x00,+00028,+00000,+00000,x00,x01,+00100)
WaitSpriteMove(x17,x00)
UnitAnim(x17,x00,x0002,x00)

//Wait for the camera to finish turning before continuing with the event.
WaitForInstruction(x04,x00)

Now, let's add in some dialogue.

//Message x06
{font:08}Black Knight{font:00}{br}
Okay, seriously, this is{br}
getting ridiculous.{br}
We've been waiting in the{br}
rain for an hour, now.{br}
{br}
Who's supposed to be in{br}
charge here, exactly?{br}
{br}
Because I've got half a{br}
mind to just take our pay{br}
and head out instead.{end}

//Message x07
{font:08}Agrias{font:00}{br}
I'm the one in charge. Care{br}
to repeat that, Gafgarion?{end}

//Message x08
{font:08}Gafgarion{font:00}{br}
(Oh, God, it's Agrias{br}
Motherfucking Oaks...!){br}
*cough* Erm, t{D11D}-that is,{br}
I just wished to express my{br}
concern over this delay.{br}
We were... we were worried{br}
something might be amiss.{end}

//Message x09
{font:08}Agrias{font:00}{br}
Yeah, I'm sure you were.{br}
{br}
I'm no more pleased with this{br}
delay than you, but don't you{br}
forget where you stand.{br}
You're a gang of sellswords,{br}
not royal knights. You're lucky{br}
to have this job at all.{br}
Run your mouth again, and{br}
I'll rip your tongue right{br}
out of it. Are we clear?{end}

//Message x0A
{font:08}Ovelia{font:00}{br}
Please, there's no{br}
need to fight.{br}
I'm finished.{br}
Sorry for the delay.{end}

//Message x0B
{font:08}Priest{font:00}{br}
Go with God.{end}

//Message x0C
{font:08}Ovelia{font:00}{br}
You, too, Simon.{end}

And now that we've added in some dialogue, we need to add in the commands for that dialogue as well.

//Gafgarion protests the wait. Since he's SpriteMoved a bit out of place, we'll move the DisplayMessage a bit to match.
DisplayMessage(x10,x11,x0006,x17,x00,x00,+00028,+00005,+00000,x02)
WaitForInstruction(x01,x00)

//Agrias slowly turns around.
RotateUnit(x34,x00,x04,x00,x34,x00)
WaitRotateAll()
Wait(00020)

//Gafgarion sees the look in her eyes, and steps back a tile.
BlockStart()
UnitAnim(x17,x00,x0003,x00)
SpriteMove(x17,x00,+00000,+00000,+00000,x00,x01,+00080)
WaitSpriteMove(x17,x00)
UnitAnim(x17,x00,x0002,x00)
BlockEnd()

//Agrias walks close to him, and lets him know who's in charge.
WalkTo(x34,x00,005,003,x00,x00,+008,x00)
WalkToAnim(x34,x00,x0002)
WaitWalk(x34,x00)
DisplayMessage(x10,x12,x0007,x34,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)

//Gafgarion bows his head respectfully and backpedals. This is also an EVTCHR animation, but it's on the same sheet as Ovelia's, so it's just a matter of using a UnitAnim command, there's no need to load another one.
UnitAnim(x17,x00,x025F,x00)
DisplayMessage(x10,x11,x0008,x17,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)

//Agrias puts him firmly in his place.
DisplayMessage(x10,x12,x0009,x34,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)

//Ovelia finishes her prayer and interrupts before blood is split. Note that other characters react to her talking after the DisplayMessage but before the WaitForInstruction.
UnitAnim(x0C,x00,x0265,x00)
Wait(00003)
UnitAnim(x0C,x00,x0002,x00)
Wait(00015)
DisplayMessage(x10,x11,x000A,x0C,x00,x00,+00000,+00000,+00000,x03)
Wait(00020)
UnitAnim(x17,x00,x0260,x00)
RotateUnit(x34,x00,x0A,x00,x34,x20)
RotateUnit(x13,x00,x0E,x00,x34,x50)
WaitForInstruction(x01,x00)
WaitRotateAll()

//Gafgarion looks like he's standing still right now, but it's often a good idea to manually set a unit to UnitAnim x0002 if they had just used a different animation. Otherwise fun stuff can happen after commands like a camera or sprite movement.
UnitAnim(x17,x00,x0002,x00)


//The camera rotates a bit as it does in vanilla.
Camera(+00616,-00220,+00616,+00302,+04608,+00000,+04096,+00060)
WaitForInstruction(x04,x00)

//Ovelia turns around and walks over to Simon.
RotateUnit(x0C,x00,x04,x02,x00,x00)
WaitRotateAll()
WalkTo(x0C,x00,006,004,x00,x00,+004,x00)
WalkToAnim(x0C,x00,x0002)
RotateUnit(x13,x00,x00,x00,x34,xFC)
WaitWalk(x0C,x00)
RotateUnit(x0C,x00,x08,x01,x00,x10)
Wait(00030)

//Here's a different way to do DisplayMessage. When you want multiple messages to close at the same time, you can change the message type from x1X to x9X. They then won't close until you use a ChangeDialog command.
DisplayMessage(x10,x91,x000B,x13,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
DisplayMessage(x10,x92,x000C,x0C,x00,x00,+00000,+00000,+00001,x03)
WaitForInstruction(x01,x00)
ChangeDialog(x01,xFFFF,x00,x00)
ChangeDialog(x02,xFFFF,x00,x00)


And here's how the instructions should look now:
//Offset(x00002000)

Pause()



LoadConditionals(x0000)
Camera(+00840,-00220,+00504,+00302,+03584,+00000,+04096,+00000)

WarpUnit(x02,x00,002,003,x00,x03)
WarpUnit(x17,x00,003,004,x00,x03)
WarpUnit(x83,x00,002,005,x00,x03)
WarpUnit(x84,x00,001,004,x00,x03)
WarpUnit(x81,x00,001,004,x00,x03)

AddUnitStart()
AddUnit(x02,x00,x01)
AddUnit(x17,x00,x01)
AddUnit(x83,x00,x01)
AddUnit(x84,x00,x01)
AddUnit(x81,x00,x01)
AddUnitEnd()

UnitAnim(x00,x00,x0002,x00)
LoadEVTCHR(x01,x00,x00)
WaitForInstruction(x34,x00)
SaveEVTCHR(x01)
UnitAnim(x0C,x00,x0259,x00)

Reveal(030)
Wait(00030)

//Agrias says it's time to go.
DisplayMessage(x10,x12,x0002,x34,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)

//A brief pause, then Ovelia looks up.
Wait(00030)
UnitAnim(x0C,x00,x025A,x00)
Wait(00030)

//Ovelia tells Agrias "just a minute", then looks down again.
DisplayMessage(x10,x11,x0003,x0C,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)
Wait(00050)
UnitAnim(x0C,x00,x0259,x00)
Wait(00050)

//Agrias walks up behind Ovelia's shoulder and reminds her who's in charge.
WalkTo(x34,x00,007,003,x00,x00,+008,x01)
WalkToAnim(x34,x00,x0002)
WaitWalk(x34,x00)
RotateUnit(x34,x00,x0A,x00,x00,x00)
WaitRotateAll()
DisplayMessage(x10,x12,x0004,x34,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)

//Simon timidly steps forward and warns Ovelia not to ignore Agrias.
WalkTo(x13,x00,006,005,x00,x00,+006,x01)
WalkToAnim(x13,x00,x0002)
WaitWalk(x13,x00)
DisplayMessage(x10,x12,x0005,x13,x00,x00,+00000,+00000,-00000,x02)
WaitForInstruction(x01,x00)

WaitAddUnitEnd()

SpriteMove(x17,x00,-00084,+00000,-00000,x00,x01,+00000)
SpriteMove(x02,x00,-00056,+00000,+00028,x00,x01,+00000)
SpriteMove(x83,x00,-00056,-00000,-00028,x00,x01,+00000)

SoundEffect(x0048)
Draw(x02,x00)
Draw(x17,x00)
Draw(x83,x00)
Camera(+00616,-00220,+00504,+00302,+04432,+00000,+04096,+00064)

//Ovelia stays in a prayer animation.
BlockStart()
Wait(00020)
UnitAnim(x0C,x00,x025D,x00)
Wait(00014)
UnitAnim(x0C,x00,x025E,x00)
BlockEnd()

//Simon turns around after a moment.
RotateUnit(x13,x00,x04,x00,x34,xB0)

//Ramza walks in.
BlockStart()
Wait(00030)
SpriteMove(x02,x00,+00000,+00000,+00000,x00,x01,+00080)
WaitSpriteMove(x02,x00)
UnitAnim(x02,x00,x0002,x00)
BlockEnd()

//Rad walks in.
BlockStart()
Wait(00050)
SpriteMove(x83,x00,+00000,+00000,+00000,x00,x01,+00080)
WaitSpriteMove(x83,x00)
UnitAnim(x83,x00,x0002,x00)
BlockEnd()

//Gafgarion walks in. We'll actually have him walk a bit further in than his real unit position, so he can step back a moment later.
SpriteMove(x17,x00,+00028,+00000,+00000,x00,x01,+00130)
WaitSpriteMove(x17,x00)
UnitAnim(x17,x00,x0002,x00)

//Wait for the camera to finish turning before continuing with the event.
WaitForInstruction(x04,x00)

//Gafgarion protests the wait. Since he's SpriteMoved a bit out of place, we'll move the DisplayMessage a bit to match.
DisplayMessage(x10,x11,x0006,x17,x00,x00,+00028,+00005,+00000,x02)
WaitForInstruction(x01,x00)

//Agrias slowly turns around.
RotateUnit(x34,x00,x04,x00,x34,x00)
WaitRotateAll()
Wait(00020)

//Gafgarion sees the look in her eyes, and steps back a tile.
BlockStart()
UnitAnim(x17,x00,x0003,x00)
SpriteMove(x17,x00,+00000,+00000,+00000,x00,x01,+00080)
WaitSpriteMove(x17,x00)
UnitAnim(x17,x00,x0002,x00)
BlockEnd()

//Agrias walks close to him, and lets him know who's in charge.
WalkTo(x34,x00,005,003,x00,x00,+008,x00)
WalkToAnim(x34,x00,x0002)
WaitWalk(x34,x00)
DisplayMessage(x10,x12,x0007,x34,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)

//Gafgarion bows his head respectfully and backpedals. This is also an EVTCHR animation, but it's on the same sheet as Ovelia's, so it's just a matter of using a UnitAnim command, there's no need to load another one.
UnitAnim(x17,x00,x025F,x00)
DisplayMessage(x10,x11,x0008,x17,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)

//Agrias puts him firmly in his place.
DisplayMessage(x10,x12,x0009,x34,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)

//Ovelia finishes her prayer and interrupts before blood is split. Note that other characters react to her talking after the DisplayMessage but before the WaitForInstruction.
UnitAnim(x0C,x00,x0265,x00)
Wait(00003)
UnitAnim(x0C,x00,x0002,x00)
Wait(00015)
DisplayMessage(x10,x11,x000A,x0C,x00,x00,+00000,+00000,+00000,x03)
Wait(00020)
UnitAnim(x17,x00,x0260,x00)
RotateUnit(x34,x00,x0A,x00,x34,x20)
RotateUnit(x13,x00,x0E,x00,x34,x50)
WaitForInstruction(x01,x00)
WaitRotateAll()

//Gafgarion looks like he's standing still right now, but it's often a good idea to manually set a unit to UnitAnim x0002 if they had just used a different animation. Otherwise fun stuff can happen after commands like a camera or sprite movement.
UnitAnim(x17,x00,x0002,x00)


//The camera rotates a bit as it does in vanilla.
Camera(+00616,-00220,+00616,+00302,+04608,+00000,+04096,+00060)
WaitForInstruction(x04,x00)

//Ovelia turns around and walks over to Simon.
RotateUnit(x0C,x00,x04,x02,x00,x00)
WaitRotateAll()
WalkTo(x0C,x00,006,004,x00,x00,+004,x00)
WalkToAnim(x0C,x00,x0002)
RotateUnit(x13,x00,x00,x00,x34,xFC)
WaitWalk(x0C,x00)
RotateUnit(x0C,x00,x08,x01,x00,x10)
Wait(00030)

//Here's a different way to do DisplayMessage. When you want multiple messages to close at the same time, you can change the message type from x1X to x9X. They then won't close until you use a ChangeDialog command.
DisplayMessage(x10,x91,x000B,x13,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
DisplayMessage(x10,x92,x000C,x0C,x00,x00,+00000,+00000,+00001,x03)
WaitForInstruction(x01,x00)
ChangeDialog(x01,xFFFF,x00,x00)
ChangeDialog(x02,xFFFF,x00,x00)

Pause()
EventEnd()


//INSTRUCTION SECTION END -  TEXT START
//Message x01
Ignore this message for now.{br}
We're not including Ovelia's prayer yet.{end}

//Message x02
{font:08}Female Knight{font:00}{br}
Don't worry about that, Ovelia.{br}
Let's get going.{end}

//Message x03
{font:08}Ovelia{font:00}{br}
Just a moment, Agrias...{end}

//Message x04
{font:08}Agrias{font:00}{br}
That's {font:08}Dame{font:00} Agrias, Princess.{br}
{br}
I appreciate your religious{br}
devotion, but I'm the knight{br}
in charge of your safety.{br}
And we need to get to{br}
Dorter before nightfall.{end}

//Message x05
{font:08}Priest{font:00}{br}
Princess Ovelia, please.{br}
{br}
You... you don't want to{br}
give Agrias any trouble,{br}
do you? It's n{D11D}not wise.{end}

//Message x06
{font:08}Black Knight{font:00}{br}
Okay, seriously, this is{br}
getting ridiculous.{br}
We've been waiting in the{br}
rain for an hour, now.{br}
{br}
Who's supposed to be in{br}
charge here, exactly?{br}
{br}
Because I've got half a{br}
mind to just take our pay{br}
and head out instead.{end}

//Message x07
{font:08}Agrias{font:00}{br}
I'm the one in charge. Care{br}
to repeat that, Gafgarion?{end}

//Message x08
{font:08}Gafgarion{font:00}{br}
(Oh, God, it's Agrias{br}
Motherfucking Oaks...!){br}
*cough* Erm, t{D11D}-that is,{br}
I just wished to express my{br}
concern over this delay.{br}
We were... we were worried{br}
something might be amiss.{end}

//Message x09
{font:08}Agrias{font:00}{br}
Yeah, I'm sure you were.{br}
{br}
I'm no more pleased with this{br}
delay than you, but don't you{br}
forget where you stand.{br}
You're a gang of sellswords,{br}
not royal knights. You're lucky{br}
to have this job at all.{br}
Run your mouth again, and{br}
I'll rip your tongue right{br}
out of it. Are we clear?{end}

//Message x0A
{font:08}Ovelia{font:00}{br}
Please, there's no{br}
need to fight.{br}
I'm finished.{br}
Sorry for the delay.{end}

//Message x0B
{font:08}Priest{font:00}{br}
Go with God.{end}

//Message x0C
{font:08}Ovelia{font:00}{br}
You, too, Simon.{end}


Now we add the part where the female knight comes in, wounded, and Simon runs over to tend to her.

At this point, it might be a good idea to set your Save State 1 to the point when Ovelia and Simon's farewell Messages are up on screen, to avoid replaying the entire rest of the event with every new savestate edit. You can simply Load State 2 and Save State 1 later when you want to go back to applying your edits to the start of the event.

//Thumps are heard at the door.
Wait(00040)
SoundEffect(x0048)
Wait(00010)
SoundEffect(x0048)

//Open the door with UseFieldObject.
UseFieldObject(x01,x00)

//When a unit comes in from off screen, color them in shadows for the transition.
ColorUnit(x84,x00,x01,+000,+000,+000,000)

//Move her sprite back a bit and set her limping animation.
SpriteMove(x84,x00,-00030,+00000,+00000,x00,x01,+00000)
UnitAnim(x84,x00,x026A,x00)

//Draw her, slowly return her color to normal, and have her limp inside. We'll use multiple SpriteMoves for this so she moves irregularly, as you'd expect someone as badly wounded as her to do.
BlockStart()
Wait(00020)
Draw(x84,x00)
ColorUnit(x84,x00,x08,+000,+000,+000,004)
SpriteMove(x84,x00,+00000,+00000,+00000,x02,x0E,+00046)
WaitSpriteMove(x84,x00)
SpriteMove(x84,x00,+00024,+00000,+00000,x02,x0E,+00062)
WaitSpriteMove(x84,x00)
SpriteMove(x84,x00,+00032,+00000,+00000,x01,x0C,+00026)
WaitSpriteMove(x84,x00)
UnitAnim(x84,x00,x0021,x00)
Wait(00006)
SoundEffect(x0028)
UnitAnim(x84,x00,x0024,x00)
BlockEnd()

//The camera pans over to her. Everyone else moves out of her way as she stumbles inside.
Camera(+00440,-00204,+00600,+00302,+04608,+00000,+04096,+00064)
UnitAnim(x17,x00,x0002,x00)
RotateUnit(x17,x00,x00,x01,x00,x00)
SpriteMove(x17,x00,-00014,+00000,+00034,x00,x01,+00040)
Wait(00010)
FadeSound(x00,030)
FaceUnit(x84,x00,x0C,x00,x00,x00,x00)
RotateUnit(x13,x00,x04,x01,x01,x00)
UnitAnim(x83,x00,x0002,x00)
RotateUnit(x83,x00,x00,x01,x00,x00)
SpriteMove(x83,x00,-00014,+00000,+00022,x00,x01,+00032)
Wait(00010)
UnitAnimRotate(x02,x00,x06,x0002,x00)
UnitAnim(x02,x00,x0002,x00)
SpriteMove(x02,x00,+00000,+00000,-00016,x00,x01,+00040)
RotateUnit(x34,x00,x04,x00,x01,x00)
Wait(00035)
UnitAnim(x13,x00,x0003,x00)
SpriteMove(x13,x00,-00092,-00001,-00021,x02,x0C,+00100)
Wait(00040)
RotateUnit(x02,x00,x08,x00,x01,x00)
WaitSpriteMove(x13,x00)
UnitAnim(x13,x00,x0267,x00)
SoundEffect(x0041)
Wait(00030)
SwitchTrack(x01,+096,000)
Wait(00030)



With that done, let's add some more dialogue.

//Message x0D
{font:08}Knight{font:00}{br}
Dame Agrias...!{br}
The enemy...!{end}

//Message x0E
{font:08}The Enemy{font:00}{br}
For Duke Goltana!!{end}

//Message x0F
{font:08}Gafgarion{font:00}{br}
Where the hell did{br}
they come from?{br}
Over an hour of nothing{br}
but as soon as we walk in,{br}
something happens?{br}
Well, whatever.{br}
Shall we go earn{br}
our pay, boys?{end}

//Message x10
{font:08}{Ramza}{font:00}{br}
Sure. That is how being a{br}
mercenary works, isn't it?{end}

//Message x11
{font:08}Gafgarion{font:00}{br}
You're goddamn right.{br}
This is the way! Geronimo!!{end}

//Message x12
{font:08}Ovelia{font:00}{br}
Oh, God...{br}
Be safe, all of you...!{end}

And then all the commands for the rest of the event. By now, I hope you're passably familiar with enough of the commands to generally follow along with what I'm doing here. I won't bore you with the finer points of constantly reloading save states with minor tweaks until everything SpriteMoves and animates with the correct timing, but it can take a while to properly set up something the part where Agrias's attack knocks the enemy over the railing.

//The knight warns Agrias that "the enemy" has appeared.
DisplayMessage(x10,x11,x000D,x84,x00,x00,-00011,+00014,+00032,x12)
WaitForInstruction(x01,x00)

//The Enemy walks in the chapel after her. We'll set him up much like we did with her - he'll be spritemoved some space back, and covered in shadows.
SpriteMove(x81,x00,-00026,-00000,-00010,x00,x01,+00000)
ColorUnit(x81,x00,x01,+000,+000,+000,000)

Draw(x81,x00)
SpriteMove(x81,x00,+00000,+00000,-00016,x00,x01,+00022)
ColorUnit(x81,x00,x08,+000,+000,+000,004)
WaitSpriteMove(x81,x00)
UnitAnim(x81,x00,x0002,x00)

//Ramza, Rad, and Gafgarion will turn to face him. This time we'll use FaceUnit so we can mostly just copy and paste the commands each time, but with different Unit IDs and delays.
FaceUnit(x81,x00,x02,x00,x00,x00,x00)
FaceUnit(x81,x00,x17,x00,x00,x00,x20)
FaceUnit(x81,x00,x83,x00,x00,x00,x40)

//The Enemy screams "For Goltana!"
DisplayMessage(x10,x12,x000E,x81,x00,x00,-00000,+00010,+00005,x12)
WaitForInstruction(x01,x00)

//Use the TempWeapon command to give both Agrias and The Enemy swords. This is because they aren't given fixed weapons in this event's ENTD, so they could be holding axes or daggers or whatever.
TempWeapon(x34,x00,x16)
TempWeapon(x81,x00,x14)


//The Enemy rushes at Agrias. This will mostly just be a WalkTo, but we'll throw in a simultaneous SpriteMove, because otherwise Simon and the Knight would be in the way. We could just make him walk one tile further down, but since he's rushing an enemy, it would make more sense for him to run in a straight line at her than to walk one panel down, make a right angle turn, and resume walking.
WalkTo(x81,x00,004,004,x00,x00,+024,x00)
SpriteMove(x81,x00,+00000,+00000,-00028,x00,x01,+00012)

//Agrias sees him coming for her and crouches defensively.
Wait(00010)
UnitAnim(x34,x00,x0022,x00)

//Ovelia, Ramza, Rad, and Gafgarion turn to face Agrias now.
FaceUnit(x34,x00,x0C,x00,x00,x01,x30)
FaceUnit(x34,x00,x02,x00,x00,x01,x00)
FaceUnit(x34,x00,x17,x00,x00,x01,x10)
FaceUnit(x34,x00,x83,x00,x00,x01,x20)

//The enemy knight tries to attack her.
WaitWalk(x81,x00)
UnitAnim(x81,x00,x0041,x00)

//Agrias jumps to the right.
UnitAnim(x34,x00,x0069,x00)
SpriteMove(x34,x00,-00008,-00006,+00014,x00,x01,+00008)
WaitSpriteMove(x34,x00)
SpriteMove(x34,x00,-00016,+00000,+00028,x00,x01,+00008)
WaitSpriteMove(x34,x00)
Wait(00005)
UnitAnim(x34,x00,x0002,x00)
RotateUnit(x34,x00,x00,x00,x01,x00)
SpriteMove(x34,x00,-00020,+00000,+00028,x00,x01,+00004)
WaitRotateAll()

//Remove the enemy knight's shadow or else it looks weird when he goes over the railing.
UnitShadow(x81,x00,x01)

//Also, yeah, throw that motherfucker over the railing.
UnitAnim(x81,x00,x0002,x00)
Wait(00001)
UnitAnim(x34,x00,x0041,x00)
SpriteMove(x34,x00,-00020,+00000,+00014,x00,x01,+00012)
Wait(00016)
SoundEffect(x0072)
UnitAnimRotate(x81,x00,x00,x0019,x00)
SpriteMove(x81,x00,+00004,-00020,-00060,x00,x01,+00010)
Wait(00010)
SpriteMove(x81,x00,+00006,-00012,-00076,x00,x01,+00006)
Wait(00006)

//Start a block, because Agrias is going to be running even before he lands.
BlockStart()
SpriteMove(x81,x00,+00008,+00065,-00085,x00,x01,+00010)
Wait(00003)
UnitAnim(x81,x00,x0034,x00)
Wait(00007)
SoundEffect(x0015)
BlockEnd()

//Agrias puts her sword away and turns to the door.
UnitAnim(x34,x00,x0002,x00)
RotateUnit(x34,x00,x04,x00,x00,x10)
WaitRotateUnit(x34,x00)

//The other four turn towards the door, but with a delay, so it comes across as if they're just watching Agrias go. This time, we'll use FaceTile.
FaceTile(x02,x00,000,004,x00,x00,x00,x40)
FaceTile(x0C,x00,000,004,x00,x00,x00,x20)
FaceTile(x17,x00,000,004,x00,x00,x00,x40)
FaceTile(x83,x00,000,004,x00,x00,x00,x50)

//Agrias runs out the door. As she runs, pan the camera a little more.
Camera(+00240,-00204,+00600,+00302,+04608,+00000,+04096,+00064)
WalkTo(x34,x00,001,003,x00,x00,+020,x00)
SpriteMove(x34,x00,-00030,+00000,+00008,x00,x03,+00016)
WaitSpriteMove(x34,x00)
SpriteMove(x34,x00,-00040,+00000,+00014,x00,x01,+00016)
Wait(00016)
ColorUnit(x34,x00,x01,+000,+000,+000,002)
WaitSpriteMove(x34,x00)
WaitWalk(x34,x00)
Erase(x34,x00)

Wait(00040)
WaitForInstruction(x04,x00)

//Gafgarion wonders where the hell these guys even came from. Ramza and Rad rotate to face him as he talks.
DisplayMessage(x10,x91,x000F,x17,x00,x00,+00012,-00010,+00000,x12)
RotateUnit(x02,x00,x08,x00,x00,x30)
RotateUnit(x83,x00,x0E,x00,x00,x40)
WaitForInstruction(x01,x00)

//Ramza confirms he's ready to go earn his pay. Gafgarion faces him as he talks.
DisplayMessage(x10,x92,x0010,x02,x00,x00,-00000,+00000,+00000,x12)
RotateUnit(x17,x00,x00,x00,x00,x30)
WaitForInstruction(x01,x00)

//Gafgarion yells Geronimo and charges out. Because this is a continuation of a DisplayMessage we set to manually close, this requires ChangeDialog rather than a new DisplayMessage.
ChangeDialog(x01,x0011,x00,x00)
RotateUnit(x17,x00,x04,x00,x00,x90)
WaitForInstruction(x01,x00)

//Now close both messages with the closing ChangeDialog.
ChangeDialog(x01,xFFFF,x00,x00)
ChangeDialog(x02,xFFFF,x00,x00)

WaitForInstruction(x01,x00)
WaitRotateAll()

//Set Gaf to the run animation and make him leave.
BlockStart()
UnitAnim(x17,x00,x0004,x00)
SpriteMove(x17,x00,-00098,+00000,-00000,x00,x01,+00040)
Wait(00030)
ColorUnit(x17,x00,x01,+000,+000,+000,002)
WaitSpriteMove(x17,x00)
Erase(x17,x00)
BlockEnd()

//Set Ramza to the run animation and make him leave.
BlockStart()
RotateUnit(x02,x00,x04,x00,x00,x20)
WaitRotateUnit(x02,x00)
UnitAnim(x02,x00,x0004,x00)
SpriteMove(x02,x00,-00056,+00000,+00010,x00,x01,+00030)
Wait(00020)
ColorUnit(x02,x00,x01,+000,+000,+000,002)
WaitSpriteMove(x02,x00)
Erase(x02,x00)
BlockEnd()

//Set Rad to the run animation and make him leave.
RotateUnit(x83,x00,x04,x00,x00,x50)
WaitRotateUnit(x83,x00)
UnitAnim(x83,x00,x0004,x00)
SpriteMove(x83,x00,-00040,-00000,-00035,x00,x01,+00028)
WaitSpriteMove(x83,x00)
SpriteMove(x83,x00,-00056,-00000,-00035,x00,x01,+00008)
ColorUnit(x83,x00,x01,+000,+000,+000,003)
WaitSpriteMove(x83,x00)
Erase(x83,x00)
Wait(00040)

//Ovelia goes "Oh, God..."
DisplayMessage(x10,x11,x0012,x0C,x00,x00,+00000,+00000,-00000,x00)
WaitForInstruction(x01,x00)

//Zoom the camera out. We'll add the CameraSpeedCurve command to make it have a smoother zoom.
CameraSpeedCurve(xAA)
Camera(+00680,-00204,+00600,+00430,+04656,+00000,+02656,+00133)

//Fade the screen.
ColorScreen(x02,000,000,000,200,200,200,+00140)
Wait(00140)

//Use PostEvent to set the event to play the Orbonne battle immediately after this event.
PostEvent(x81,x0002)

Continued below.
10
War of the Lions Hacking / WotL Outfitter Bug
October 06, 2020, 02:24:43 pm
This bug was discovered courtesy of Zeke on the Discord, and I figured I'd just document the path to fixing it here.

Apparently, it is possible to encounter a bug in which the Outfitter tells you "I'm afraid you can't hold any more of that item. Might I interest you in something else?" despite having plenty of space.

Zeke took video clips showing his depleted inventory and the bug in action.

https://i.gyazo.com/9907a479bd4bdcaea7545475e8eccf4e.mp4

https://i.gyazo.com/f21ab6e61d3476d67db8a010c5bedbaa.mp4

Zeke used the slowdown fix patch, but it was still bugged in his vanilla ISO, and apparently this is a very rare issue even in vanilla:

https://gamefaqs.gamespot.com/boards/638808-final-fantasy-tactics-the-war-of-the-lions/62492805

https://gamefaqs.gamespot.com/boards/937312-final-fantasy-tactics-the-war-of-the-lions/48101886

https://gamefaqs.gamespot.com/boards/937312-final-fantasy-tactics-the-war-of-the-lions/4219876

Dakitty on Discord also mentioned that they'd had the same issue once, but had suspected it was the result of using the US slowdown fix on a PAL ISO. They'd had to scrap their entire save file in order to restart on a US ISO.

Zeke, however, WAS using a US ISO.

We ended up suggesting to him to go get the Lion Editor and see if any inventory slots were borked up in the save file. He didn't find anything. But I kept trying different Google searches and finally found something that shed some light on the issue, even if the trigger for the cause was unrelated:

https://code.google.com/archive/p/lioneditor/issues/4

I suggested that given this, there might be a bug with the Nothing slot in Zeke's game - but he might not see it now that the Lion Editor automatically compensates for this bug after having previously caused it itself. I told him to save the file and try again.

And it worked!

So if anyone in the future ever comes across this rare and apparently purely vanilla bug, try a quick fix with the Lion Editor to see if your problem is that you have too much of Nothing.
11
The Lion War / Rendezvous Ideas Thread
September 19, 2020, 11:53:47 pm
There are nine Rendezvous slots remaining right now, and Elric is definitely considering doing something up for them. We were talking about it here on the Discord when I figured, hey, why not put out a topic in case anyone has any good ideas that they want to mention?

Here's what we have so far.

  • Chocobo Race: Unlocks at the start of Ch. 2. Map 103, Windmill Shed.
  • Treasure Hunt: Unlocks at the start of Ch. 2. Map 78, Zigolis Swamp.
  • Teioh: After the Zaland/Mustadio battle. Map 80, Araguay Woods.
  • Lost Heirloom: After saving Besrodio. Map 40, Slums in Goug.
  • The Fete: At the start of Ch. 3. Map 13, Inside of Lionel Castle.
  • Desert Minefield: After Orbonne Monastery. Map 76, Zeklaus Desert.
  • Littering: After Yardow's Rafa/Malak battle. Map 27, Goland Coal City.
  • Shades of the Past: At the start of Ch. 4. Map 91, Thieves' Fort.
  • The Knights Templar: After the Bethla Sluice battle. Map 3, Hall of St. Murond Temple.
  • All-Star Melee: After the Murond battles. Map 22, Magic City Gariland.
  • The Guarded Temple: After the Murond battles. Map 70, Nelveska Temple.
  • Nightmares: After the Murond battles. Map 17, Underground City of Limberry Castle.
  • Brave Story: After the Murond battles. Map 61, Underground Book Storage Fifth Floor.
  • Ill Wind: After the Murond battles. Map 49, Fort Zeakden.

Currently, the treasure wheel works by saving the Current Map Number to another variable during the rendezvous event, and then checking that during the treasure wheel to determine which loot set the player should get. As a result, any new Rendezvous battles should not use maps already in use.

It'd be a bit preferable to get a one-battle Rendezvous to go with the After Sluice unlock (as the Knights Templar is a battle sequence) and to get a sequence to go with the Chapter 4 unlock, as the treasure wheel currently increases the odds of rare items & number of chests to open if the player did a battle sequence rather than just one battle.

The ideal might be to add one battle to every unlock point that only has one battle as is. There are five pre-Chapter 4 Rendezvous like this, and the two previously mentioned post-Ch.4 Rendezvous. That still leaves two more Rendezvous free, which can maybe be added into those two Chapter 4 points.

So if anyone's ever had any ideas for some possibly interesting one-off battles in FFT, now's the time to mention them! If Elric likes an idea well enough, you might see it featured in the next release of The Lion War!
12
The Lion War / The Treasure Wheel
September 06, 2020, 09:27:36 pm
Here's a couple videos showing what the Treasure Wheel will look like in the next version of TLW, after the Rendezvous missions are included as single player content, in case anyone's interested. (It is still in debug mode, though, which is why you can choose from a list of loot sets. That won't be an option in game.)

There's a lot about the WotL treasure wheel that left me unimpressed. In fact, why does it even exist? There's no apparent reason to have it, since each chest is just a totally random piece of loot - this would go much faster for the players if it just gave them a reward list with randomly generated War Trophies. On top of that, the mechanics for determining loot seem to be poorly understood by players, since the system is so hazy about how to get anything. And then the loot pools are so large, it's nearly impossible to actually get anything that you're seeking.

So I completely reworked the concept.

1: Loot is separated into four subsets: Weapons, Armor, Accessories, and Consumables. This allows players to be able to target a specific kind of loot. 
I wasn't going to include the last category, since if there were nothing but Chemist items it would be fairly dull - however, some talk on Discord about the difficulty of getting late-game katanas to be able to actually run Draw Out convinced me to add them to the pool as well, with Consumable chests being able to reward multiple katanas (unlike Weapon chests rewarding just one).
Later on, once we had TLW 2.0 in beta and could watch multiple people streaming it, I realized real quick that no one was ever going for Consumables even with katanas thrown into the pool, so I removed every Item except Elixirs, allowing the player to get Ninja Balls as a weaker reward, Elixirs as a pretty decent reward, and katanas as a fairly great reward. I also retooled the progression so that whenever the player does an older Rendezvous, the common Consumables are always randomly 1-10 Elixirs. This actually makes the Elixir skill worth learning for probably the first time, since Rendezvous are now a viable way to accumulate Elixirs. It also helps make sure that older Rendezvous will always have something worth looting.

2: Rare items are rewarded based on a dual check system. Specially colored chests can be generated, and they are guaranteed to carry a rare item. But even if you don't get a special chest, you still have a secondary chance of just getting a rare from a common chest. Until Chapter 4, you have a 50% chance of getting a single Silver Chest and a 25% rare chance from any common chest. Those rares will reward the player with loot that hasn't been unlocked at a shop yet.
After Chapter 4, the Treasure Wheel background changes from silver to gold, and Silver Chests no longer appear. Instead, you have a 5% chance of getting a single Gold Chest, and a 5% rare chance from any common chest. At first, this seems like a downgrade - but once the wheel has turned gold, you can pay gil to slowly increase the odds and continually reroll the Gold chance until the current chest is gilded, and you can do this with every single chest in the wheel if you so desire. Gold Chests will exclusively reward loot that can never be bought at a shop.
Also, after some playtesting, I retooled the Rare system to scale up to the start of Chapter 4, no matter which Rendezvous the player does, based on which Rendezvous they've unlocked. In that way, Rare items are always all but guaranteed to give loot you can't (yet) buy at a shop. It does stop scaling after the start of Chapter 4, to encourage the player to not just keep spamming the easiest Rendezvous battles for easy Excaliburs, but even then, the Rare loot is still stuff that isn't buyable.

3: While the player will be able to open three chests by default, battle sequences such as Knights Templar or Brave Story, or particularly hard battles like Guarded Temple, will increase the number of chests that can be opened, as well as increase the odds of getting a Gold Chest at the start.

4: The player can Cash In unopened chests. This was inspired by a suggestion from a beta tester. If the player is doing an older Rendezvous, doesn't get any rare chests, doesn't need Elixirs, and isn't in a position to pay to reroll chests until they become rare, they can instead opt to cash in their remaining chests for gil. The amount of gil increases as new sets of Rendezvous are unlocked. They also get more gil depending on the number of chests remaining. Furthermore, after beating the game at least once, a second Cash In option is unlocked - one that rewards JP to every unbenched unit's current job.


With all this, I intend to justify the existence of the Treasure Wheel instead of just tossing the player some randomly generated loot, as well as giving the player the ability to work around the RNG to a large degree, though without going so far as to basically make rare loot purchasable.

Below are two videos of the rough alpha version of the Treasure Wheel, to give you an idea of how Silver and Gold wheels work.


13
Hacking/Patching Tools / Fully lit Deep Dungeon!
June 30, 2020, 11:18:38 pm
Jan 08, 2024: Thanks to recent fixes, the combined efforts of Xifanie, Pride, Talcall, and MrGudenheim have produced a thorough fix to the Deep Dungeon map light! Using the .xml files provided, you can set each map to a custom light level that it will start at, and permanently stay at, regardless of crystals or whether the map was changed mid-event. These fixes also successfully light up the units on the field. This makes these .xml fixes superior to both old methods, as the GNS file fixes could have the light flicker out, and the mesh file fixes left the units darkened. Still, for the sake of archival, I've left both old versions of the fixes, and the information this topic used to provide, in this post.

But for all current conceivable uses of the fix, use one of the provided .xmls, not the .zip or .rar files.

I've attached a .rar archive of all the fixed Deep Dungeon .GNS files. Open your ISO in CDMage, go to the MAP section, and import these files over the existing .GNS files. After that, all your Deep Dungeon maps will start fully lit, and stay that way. Unless you ChangeMap to them with event commands, anyway.

Also, Pride set up an XML to do this via OrgASM down below, which ought to be quicker and easier than importing each individual GNS file in CDMage.

Note that this fix is still vulnerable to the issue of dealing with the lights going out when a unit crystallizes. There's a different set of mesh edits to the maps, which is used by Arena and Battleground. While this leaves the units darkened out, it doesn't have to deal with the crystallization issue. So, pick your poison.

Combining them doesn't seem to produce any novel results. It just leads to the Mesh fix outcome.
14
War of the Lions Hacking / Valhalla Editor
April 12, 2020, 03:35:25 pm
So the only reason I heard about this editor is that it was mentioned on Reddit. There seems to be next to no discussion about it on Reddit, GameFAQs, or here, so as far as I know it was just spawned out of the ether by a ghost.

It seems to allow modders a whole lot more functionality, and while I've not experimented with it at all myself, I figured I should at least put a link up to it so that people can find it more easily. A PSP ASM tool is so rare and unique it's worth it, I think.

You can find it here. I've also uploaded it to this topic just in case that link ever goes down, since who knows what's going on with the author there.

If anyone has any more to add about this, feel free to mention it in this topic. I know @BleuVII has mentioned using it before, at least, and like I said - there is just no existing discussion about this tool that I can find so far.

Note: You also need to download the Python deps file and merge it into the Valhalla folder in order to get it to run. That link is dead. Try taking this python folder and inserting it into the Valhalla folder, merging it with the existing python folder. See if that does it.
15
Jan 08, 2024:

This tutorial is now outdated, as it resulted in an inferior version of a fix to the Deep Dungeon maps, vulnerable to having the lights flicker out and be unable to return under certain circumstances. For all current uses of lit up Deep Dungeon maps, use one of the XML files found here.


===========

Originally this topic talked about using Ganesha to edit the lighting of the maps. However, the maps have a hard cap on the max amount of light allowed per state, with the highest light levels only being allowed on states inaccessible to the ATTACK.OUT editor. This post has now been altered to show how to make them work with full light, which is done via hex editing instead.

If you just want to download the files directly without editing them yourself, you can find them here.


All credit goes to Xifanie, of course! She's the one who showed me what to edit in the first place.

To get this to work, you've got to do some hex editing. To the best of my understanding, the Deep Dungeon maps use multiple different states to determine the lighting, and the fully lit map is set as the fifth state. Which you can't access with the ATTACK.OUT editor since only the DD maps work this way. So, instead, we just hex edit the .GNS files for each of the maps to set all four previous states to have the same texture lighting settings as the fifth.

Open up your ISO in CDMage. Open the MAP section. Scroll down to the .GNS files for each of the maps (you can tell which of them is which by looking at the numbers on FFH's Maps page). Export them. Open them up in a hex editor. I'm using HxD, personally, and I don't have a whole lot of experience with other hex editors so I'm not sure how they might look, but hopefully enough of the process is similar to be able to follow along. For the sake of this example I'm going to be cracking open MAP106.GNS.


It's currently set to show the rows 16 bytes wide, but it'll be a lot easier to see the parts we need if they're set to 20.


Now you can see the five separate states labeled in order here under column 02. They start at 00, not 01, as is common with hexadecimal work, so they go from 00 to 04. And 04 is where the useful data is. Looks like the only difference is with the bytes under column 08, so let's take the one from state 04 and copy it to 00-03.


That's that. Save it, reimport it with CDMage, and test it out in game.

Edit: It turns out that if a specific byte is set to a different value than in the other states, it'll spawn a glitched second level that crashes your game depending on the tile. And Map 112 has this problem. You'll also need to edit that byte so it matches the value that the other states have.



Success.[/color]
16
Tutorials and Learning / Ability Effect Chart
November 09, 2016, 09:34:23 pm
I put this together for my own purposes a ways back when I was planning out all the Jot5 abilities that would be featured in future chapters. There's an Effect Video Compilation that shows how every Effect in the game works, but it's tedious to go through all of them wondering "will this one show properly for AoE or not?"

I don't know if this'll end up being useful for anyone, but I figured no point in letting the chart go to waste, so I'll be putting it below for anyone interested.

Quote from: R999 on March 18, 2010, 03:48:11 am

10 effects per video. Multi-target effects will be shown on 2+ targets.

Use Cmd+F or Ctrl+F  to search

Goals:

To be able to observe:

  • if the effects works on multiple targets, if so how does it look like (whether it is the repeated effect, broken into separate parts, or something else)

  • where the effect is centered on (whether it is the cursor location, average of enemy locations, first target location, self, or center of map)

  • determine if the effect has different phases (for example Cure4 has two phases (first phase is centered on caster, second phase occurs on each target)

  • the sound effects

  • the speed/pace of spell

  • whether the effect can display aftermath status (damage taken, stat change, etc) on single or multiple targets



=========================================================================================
Effects Set 1

1 001   Cure       
2 002   Cure 2       
3 003   Cure 3       
4 004   Cure 4       
5 005   Raise       
6 006   Raise 2       
7 007   Reraise       
8 008   Regen/Regenerator       
9 009   Protect       
10 00A   Protect 2

=========================================================================================
Effects Set 2

1 00B   Shell       
2 00C   Shell 2       
3 00D   Wall       
4 00E   Esuna   
5 00F   Holy       
6 010   Fire       
7 011   Fire 2       
8 012   Fire 3       
9 013   Fire 4

=========================================================================================
Effects Set 3

1 014   Bolt       
2 015   Bolt 2       
3 016   Bolt 3       
4 017   Bolt 4       
5 018   Ice       
6 019   Ice 2       
7 01A   Ice 3       
8 01B   Ice 4       
9 01C   Poison       
10 01D   Frog

=========================================================================================
Effects Set 4

1 01E   Death       
2 01F   Flare       
3 020   Haste       
4 021   Haste 2       
5 022   Slow       
6 023   Slow 2       
7 024   Stop       
X 025           
X 026           
8 027   Don't Move       
9 028   Float       
10 029   Reflect

=========================================================================================
Effects Set 5

1 02B   Summon Demon       
2 02C   Quick/Critical Quick       
3 02D   Demi       
4 02E   Demi 2       
5 02F   Meteor       
X 030           
6 031   Blind       
7 032   Aspel       
8 033   Drain       
9 034   Faith/Face Up       
10 035   Innocent

=========================================================================================
Effects Set 6

1 036   Zombie       
2 037   Silence       
3 038   Berserk/Brave Up       
4 039   Chicken       
5 03A   Confuse       
6 03B   Despair       
7 03C   Don't Act       
8 03D   Sleep       
9 03E   Break       
10 03F   Moogle

=========================================================================================
Effects Set 7

1 041   Shiva       
2 042   Ramuh       
3 043   Ifrit       
4 044   Titan       
5 045   Golem (freezes game at end of effect if not using golem formula)       
6 046   Carbuncle       
7 047   Bahamut       
8 048   Odin       
9 049   Leviathan       
10 04A   Salamander   

=========================================================================================
Effects Set 8

1 04C   Silf       
2 04D   Fairy       
3 04E   Lich
4 04F   Cyclops       
5 050   Zodiac       
6 051   Angel Song       
7 052   Life Song       
8 053   Cheer Song       
9 054   Battle Song       
10 055   Magic Song   

=========================================================================================
Effects Set 9

1 056   Nameless Song       
2 057   Last Song       
3 058   Witch Hunt       
4 059   Wiznaibus       
5 05A   Slow Dance       
6 05B   Polka Polka       
7 05C   Disillusion       
8 05D   Nameless Dance       
9 05E   Last Dance       
10 05F   Spin Fist

=========================================================================================
Effects Set 10

1 060   Repeating Fist       
2 061   Wave Fist       
3 062   Earth Slash       
4 063   Secret Fist       
5 101   064   Stigma Magic       
6 102   065   Chakra       
7 103   066   Revive       
8 104   067   Gil Taking/Gilgame Heart       
9 105   068   Steal Heart       
10 106   069   Steal Helmet

=========================================================================================
Effects Set 11

1 107   06A   Steal Armor       
2 108   06B   Steal Shield       
3 109   06C   Steal Weapon       
4 110   06D   Steal Accessory       
5 111   06E   Steal Experience       
6 112   06F   Invitation       
7 113   070   Persuade       
8 114   071   Praise       
9 115   072   Threaten       
10 116   073   Preach   

=========================================================================================
Effects Set 12

1 117   074   Solution       
2 118   075   Death Sentence       
3 119   076   Negotiate       
4 120   077   Insult       
5 121   078   Mimic Daravon       
6 122   079   Pitfall       
7 123   07A   Water ball       
8 124   07B   Hell Ivy       
9 125   07C   Carve Model       
10 126   07D   Local Quake

=========================================================================================
Effects Set 13

1 127   07E   Kamaitachi       
2 128   07F   Demon Fire       
3 129   080   Quicksand       
4 130   081   Sand Storm       
5 131   082   Blizzard       
6 132   083   Gusty Wind       
7 133   084   Lava Ball       
8 134   085   Asura       
9 135   086   Koutetsu       
10 136   087   Bizen Boat

=========================================================================================
Effects Set 14

1 137   088   Murasame       
2 138   089   Heaven's Cloud       
3 139   08A   Kiyomori       
4 140   08B   Muramasa       
5 141   08C   Kikuichimoji       
6 142   08D   Masamune       
7 143   08E   Chirijiraden       
X 144   08F           
8 155   09A   Dash/Wing Attack       
X 156   09B           
9 157   09C   Heal       
10 158   09D   Yell

=========================================================================================
Effects Set 15

1 159   09E   Cheer Up       
2 160   09F   Scream       
3 161   0A0   Ultima (lvl1)       
4 162   0A1   Wish       
X 163   0A2           
5 164   0A3   Stasis Sword       
6 165   0A4   Split Punch       
7 166   0A5   Crush Punch       
8 167   0A6   Lightning Stab       
9 168   0A7   Holy Explosion       
10 169   0A8   Shellbust Stab   

=========================================================================================
Effects Set 16

1 170   0A9   Blastar Punch       
2 171   0AA   Hellcry Punch       
3 172   0AB   Icewolf Bite       
4 173   0AC   Dark Sword       
5 174   0AD   Night Sword       
6 175   0AE   Dark Holy       
7 176   0AF   Deathspell 2       
8 177   0B0   Galaxy Stop       
9 178   0B1   Heaven Thunder       
10 179   0B2   Asura

=========================================================================================
Effects Set 17

1 180   0B3   Diamond Sword       
2 181   0B4   Hydragon Pit       
3 182   0B5   Space Storage       
4 183   0B6   Sky Demon       
5 184   0B7   Heaven Thunder Back       
6 185   0B8   Asura Back       
7 186   0B9   Diamond Sword Back       
8 187   0BA   Hydragon Pit Back       
9 188   0BB   Space Storage Back       
10 189   0BC   Sky Demon Back   

=========================================================================================
Effects Set 18

1 190   0BD   Sunken State       
2 191   0BE   Shadow Stitch       
3 192   0BF   Stop Bracelet       
4 193   0C0   Summon Angel       
5 194   0C1   Shock (byblos)       
6 195   0C2   Difference       
7 196   0C3   Seal       
8 197   0C4   Chicken Race       
9 198   0C5   Hold Tight       
10 199   0C6   Darkness

=========================================================================================
Effects Set 19

1 200   0C7   Lose Voice       
2 201   0C8   Loss       
3 202   0C9   Spell       
4 203   0CA   Nightmare       
5 204   0CB   Death Cold       
6 205   0CC   Magic Ruin       
7 206   0CD   Speed Ruin       
8 207   0CE   Power Ruin       
X 208   0CF           
9 209   0D0   Mind Ruin       
X 210   0D1           
10 211   0D2   Blood Suck

=========================================================================================
Effects Set 20

1 212   0D3   Allure       
2 213   0D4   Bio       
3 214   0D5   Bio       
4 215   0D6   Bio       
5 216   0D7   Bio 2       
6 217   0D8   Bio 2       
7 218   0D9   Bio 2       
8 219   0DA   Bio 2       
9 220   0DB   Bio 3       
10 221   0DC   Bio 3   

=========================================================================================
Effects Set 21

1 222   0DD   Bio 3       
2 223   0DE   Magic Barrier       
X 224   0DF           
3 226   0E1   Very Quick Bloody Strike (don't exist?)    
4 227   0E2   Very Quick Strike (damage output or status output will display twice)       
X 228   0E3           
5 229   0E4   Melt       
6 230   0E5   Tornado       
7 231   0E6   Quake       
8 232   0E7   Teleport 3: Send       
9 233   0E8   Teleport 3: Arrive       
10 234   0E9   Toad 2   



=========================================================================================
Effects Set 22

1 235   0EA   Gravi 2       
2 236   0EB   Flare 2       
3 237   0EC   Blind 2       
4 238   0ED   Small Bomb (blue)       
5 239   0EE   Small Bomb (black)       
6 240   0EF   Confuse 2       
7 241   0F0   Sleep 2       
8 242   0F1   Ultima (lvl2)       
9 243   0F2   All-Ultima       
10 244   0F3   Mute   

=========================================================================================
Effects Set 23

1 245   0F4   Despair 2       
2 246   0F5   Return 2       
3 247   0F6   Shock (M. Sword)       
4 248   0F7   Braver       
5 249   0F8   Blade Beam       
6 250   0F9   Cross Slash       
X 251   0FA           
7 256   0FF   Climhazzard       
8 257   100   Meteorain       
9 258   101   Finish Touch       
10 259   102   Cherry Blossom

=========================================================================================
Effects Set 24

1 260   103   Omnislash       
2 261   104   Potion/Auto-Potion/Distribute       
3 262   105   Antidote       
4 263   106   Eye Drop       
5 264   107   Hi-Potion/HP Restore       
6 265   108   Remedy       
7 266   109   Echo Grass       
8 267   10A   X-Potion       
9 268   10B   Soft       
10 269   10C   Phoenix Down   

=========================================================================================
Effects Set 25

1 270   10D   Ether/Absorb Used MP       
2 271   10E   Holy Water       
3 272   10F   Maiden Kiss       
4 273   110   Hi-Ether/MP Restore       
5 274   111   Elixir/Dragon Spirit       
X 275   112           
6 289   120   Blind       
7 290   121   Spell Absorb       
8 291   122   Life Drain       
9 292   123   Pray Faith       
10 293   124   Doubt Faith   

=========================================================================================
Effects Set 26

1 294   125   Zombie       
2 295   126   Silence Song       
3 296   127   Blind Rage       
X 297   128                   
4 307   132   White Talk skill       
5 308   133   Ice Bracelet       
6 309   134   Fire Bracelet       
7 310   135   Thunder Bracelet       
8 311   136   Dragon Tame       
9 312   137   Dragon Care       
10 313   138   Dragon Power Up   

=========================================================================================
Effects Set 27

1 314   139   Dragon Level Up       
2 315   13A   Holy Bracelet       
X 316   13B           
3 317   13C   Choco Attack       
4 318   13D   Choco Ball       
5 319   13E   Choco Meteor       
6 320   13F   Choco Esuna       
7 321   140   Choco Cure        
8 322   141   Tackle       
9 323   142   Goblin Punch       
10 324   143   Turn Punch

=========================================================================================
Effects Set 28

1 325   144   Eye Gouge       
2 326   145   Mutilate       
3 327   146   Bite       
4 328   147   Small Bomb (red)       
5 329   148   Self Destruct       
6 330   149   Flame Attack       
7 331   14A   Spark       
8 332   14B   Cat Scratch       
9 333   14C   Cat Kick       
10 334   14D   Blaster   

=========================================================================================
Effects Set 29

1 335   14E   Poison Nail       
2 336   14F   Blood Suck (Vampire)       
3 337   150   Tentacle       
4 338   151   Black Ink       
5 339   152   Odd Soundwave       
6 340   153   Mind Blast       
7 341   154   Level Blast       
8 342   155   Knife Hand/Damage Split       
9 343   156   Thunder Soul       
10 344   157   Aqua Soul

=========================================================================================
Effects Set 30

1 345   158   Ice Soul       
2 346   159   Wind Soul       
3 347   15A   Throw Spirit       
4 348   15B   Zombie Touch       
5 349   15C   Sleep Touch       
6 350   15D   Drain Touch       
7 351   15E   Grease Touch       
8 352   15F   Wing Attack       
9 353   160   Look of Devil       
10 354   161   Look of Fright   

=========================================================================================
Effects Set 31

1 355   162   Circle       
2 356   163   Death Sentence       
3 357   164   Scratch Up       
4 358   165   Beak
5 359   166   Shiny Love       
6 360   167   Feather Bomb       
7 361   168   Beaking       
8 362   169   Straight Dash       
9 363   16A   Nose Bracelet       
10 364   16B   Oink   

=========================================================================================
Effects Set 32

1 365   16C   Pooh-       
2 366   16D   Please Eat       
3 367   16E   Leaf Dance       
4 368   16F   Protect Spirit       
5 369   170   Calm Spirit       
6 370   171   Life Spirit       
7 371   172   Magic Spirit       
8 372   173   Shake Off       
9 373   174   Wave Around       
10 374   175   Mimic Titan   

=========================================================================================
Effects Set 33

1 375   176   Gather Power/Caution       
2 376   177   Blow Fire       
3 377   178   Tentacle       
4 378   179   Lick       
5 379   17A   Goo       
6 380   17B   Bad Bracelet       
7 381   17C   Moldball Virus       
8 382   17D   Stab Up       
9 383   17E   Sudden Cry       
10 384   17F   Hurricane   

=========================================================================================
Effects Set 34

1 385   180   Ulmaguest       
2 386   181   Giga Flare       
3 387   182   Dash       
4 388   183   Tail Swing       
5 389   184   Ice Bracelet       
6 390   185   Fire Bracelet       
7 391   186   Thunder Bracelet       
8 392   187   Triple Attack    (freezes game without special flags?)   
9 393   188   Triple Bracelet       
10 394   189   Triple Thunder   

=========================================================================================
Effects Set 35

1 395   18A   Triple Flame       
2 396   18B   Dark Whisper       
3 397   18C   Foxbird       
4 398   18D   Confusion Song       
5 399   18E   Energy       
6 400   18F   Parasite       
7 401   190   Dispel Magic       
8 402   191   Snake Carrier       
9 403   192   Poison Frog       
10 404   193   Midgar Swarm

=========================================================================================
Effects Set 36

1 405   194   Paralyze       
2 406   195   Sleep       
3 407   196   Petrify       
4 408   197   Lifebreak       
5 409   198   Nanoflare       
6 410   199   Grand Cross       
7 411   19A   Destroy       
8 412   19B   Compress       
9 413   19C   Dispose       
10 414   19D   Crush   

=========================================================================================
Story Related Effects
Story Effects Set 37

1 451   1C2   Dejeon: Send (orbonne, battle vs Rofel)    (only visible on level 1 panels)
2 452   1C3   Scorpio's Revive spell (Rafa revives Malak)    (target shows no reaction ie not in pain)   
3 453   1C4   Altima's Ultimate Transformation       
4 454   1C5   End of the World (Altima's Death)        (freezes on certain maps? special flags?)
5 455   1C6   Banish (Murond's entrance)        (turns screen to white at the end, and statys white)
6 456   1C7   Fire (unknown)        (freezes at the end)
7 457   1C8   Flood (Bethla Sluice)    (freezes on certain maps?)   
8 458   1C9   Fire Explosion (Fort Zeakden)       
9 459   1CA   Strong Fire Explosion (Fort Zeakden)    (camera flies up at the end, stays for a while)   
10 460   1CB   Mini Explosion (Fort Zeakden)



The effects are a shade of green if they work with AoE, and blue if they do not. "Multi" means multiple target (so AoE), "Rep." is for Repeating, as in whether the ability's full effect will repeat for every unit affected by it.
17
So I was poking around the Onion Knights and reading here about them, trying to think about some ways to make them more viable for use in the game.

I know the idea of giving them a standard skillset means that the skillset is inherently tied to whatever they've learned in Squire as opposed to their own skillset's abilities. I mean, it works, but it's messed up that way. And if you're changing Squire's skillset, or OK's requirements, there's no guarantee you'll have every ability going into OK.

But something I haven't seen pointed out on here is that, if you change their skillset's Action Menu command to Monster, then Onion Knights always have 3 guaranteed abilities - four, if you put four abilities in the set and walk next to a Beastmaster.

Just thought I'd throw that out there for anyone that might be interested. 3 abilities at least makes the OK halfway decent, right? Depends on how powerful your chosen abilities are...

Something to note is that this setup not only prevents other classes from using the OK's action skills, but it doesn't prevent them from using any support or movement skills you learn in the OK (if you equip Accumulate JP or use that small amount of starter JP, since that's the only way to get any).
18
Spriting / Male Mystic Knight (probably final)
July 05, 2015, 04:10:32 pm
So Twin came up with a portrait back in April for this little spriting project of mine, and at the time I didn't immediately want to use it since I wanted to try to learn from the example first.

And then, uh, I never actually did that. And then I also forgot to include it here.

Despite using the portrait as my avatar for friggin' ever by now.

So I'm putting it in today, before I forget again! I did slightly edit his portrait, but only by, like, ten pixels.

This MK comes with a second green palette to match my avatar, because why not.


Took some suggestions from Twinees and added two more colors into the sprite to give it its full 16 per palette. Mostly focused on filling in more of the shirt with the new dark purple color - there are more sleeves instead of shadows.
Also fixed up a lot of the arm/cloak frames now that I'm using more color and less shadow in them.
Twinees was also able to provide me a much better turban design for the portrait, which I'm now using.

In fact, I sent several messages to Twinees over the last few days, giving me some vital feedback as I worked on the sprite. Twinees is boss.

I don't yet have any more than a single palette in for this version. It's late-o-clock here and I'll get to that another day. Feel free to suggest color schemes if you're interested though! (i.e. brown cloak, grey clothing, red trim)



Note that I am still editing the sprite as feedback comes in. Until I have a new version ready, I won't be changing the files on this post.

I noticed we didn't have one of these in the Sprites section, so I made one using Beowulf as a base.

Preview with all five palettes, and compared to Mystic Knight sprites from other games:
    

And now I've got one I put together from the Knight sprite instead:

19
I'm playing around with adding Ladd as a guest up until the waterfall battle, where he then chooses to stay with Ramza rather than betray the team with Gaffgarion. He's just got one line at the moment, but it's the last one, and doesn't close.

This is what it looks like unedited: Ramza says Ovelia won't be another Tietra, then talking ends.

WaitForInstruction(x04,x00)
Wait(00016)
DisplayMessage(x10,x92,x000E,x02,x00,x00,+00000,+00008,+00000,x03)
WaitForInstruction(x01,x00)
CloseDialog(x02,xFFFF,x00,x00)
WaitForInstruction(x01,x00)
{6A}(r021E0001FA)
{6A}(r0B460000FA)
{1C}(r02)
Focus(x0C,x00,x0C,x00,x00)

Edited. Ladd, with the ID of Orran (he's getting a custom job/sprite for this, and I figured it would be best to make his Unit ID match his job)

WaitForInstruction(x04,x00)
Wait(00016)
DisplayMessage(x10,x92,x000E,x02,x00,x00,+00000,+00008,+00000,x03)
WaitForInstruction(x01,x00)
CloseDialog(x02,xFFFF,x00,x00)
WaitForInstruction(x01,x00)
Wait(00030)
Focus(x15,x00,x15,x00,x00)
Camera(+18539,-09805,-01847,+00302,+03584,+00000,+04096,+00032)
WaitForInstruction(x04,x00)
Wait(00016)
DisplayMessage(x10,x92,x0029,x15,x00,x00,+00000,+00008,+00000,x03)
WaitForInstruction(x01,x00)
CloseDialog(x01,xFFFF,x00,x00)
WaitForInstruction(x01,x00)
Wait(00010)

{6A}(r021E0001FA)
{6A}(r0B460000FA)
{1C}(r02)

As well, Message 29 is unused in the TEST.EVT.

//Message x28
{font:08}Gaffgarion{br}
{font:00}Damn it...{end}

//Message x29
{font:08}Ladd{br}
{font:00}Gaffgarion, you bastard!{br}
{br}
You think I'll betray them?{br}
No way!{br}
{br}
{Ramza}! I'm with you!{end}


Anyone know what I'm missing when it comes to making a text box close?
20
Help! / Making new Weapon Strike based skills
October 30, 2011, 11:22:18 pm
I've been trying to make some weapon strike skills work... mostly simple stuff for a revamped Archer, things that will allow the archer to fire a poison shot, a sleep shot, a mana restoration shot (mostly because I found that one amusing), and a death shot.

Anyway, I managed to get them all functioning wonderfully, but when I use the skills with a melee weapon, they won't show the damage done or effects inflicted. The spells use the FFFF animation, formula 2D for the damage ones; ether formula for the mana shot, and they're basically copies of the Rend skills.

I know the effects of the Rend skills appear even when you do them with a melee weapon, so I'm wondering if there's anything I could possibly be missing as I work on this.
21
Help! / Weapon modification
October 27, 2011, 05:59:46 pm
I haven't made any major, sweeping changes yet, but I was planning on doing such things as changing all Flails into Axes, changing Axes to the 2D formula (which gives them the same effect as the Sword formula), changing the Books into Bags, changing some Knives into Ninja Blades...

Anyway, I've been testing this weapon swapping on Dragoons, and when I tried changing a polearm into a bag, it seems to work okay - except when attacking, the final outstretched animation changes it into a bow.

Is there something I don't know about weapon editing that's coming back to bite me on the ass? >_>

The attributes of the Spear match the attributes of the Croakadile Bag for palette, graphic, item type, second table, range, formula, weapon power,
Striking, Lunging, 2 Hands, and Throwable.

(I'll be playing with more editing after posting this, seeing if it glitches for other weapon types too.)

Edit:

Hmm. Changing the options in Patcher failed even harder for the Flail -> Axe, Ninja Blade -> Knife (graphic), and Book -> Bag... this time instead of one animation being wonky and the others successful, none of them changed in the slightest. :/
22
First, I hope this is the right board for this :P

Secondly, can I just make a request, for anyone coming in hoping to modify the text of the PSP version, to have the 457 TacText file either included in the most recent Patcher Suite, or to have it or its Patcher Suite up separately?

It took me several days and required me to open my own topic before I was able to find out what the problem was (the TacText files currently on that tab seem to be totally incompatible with War of the Lions) and to find a copy of the download.

The download address for a 457 bundle right now is here: ffhacktics.com/smf/index.php?action=dlattach;topic=7837.0;attach=8927
23
Solution:
Quote from: pesmerga001 on October 03, 2011, 12:09:06 am
You are using fftactext 457 right? Thats the ONLY one i have gotten to work for the psp...
Also, have a clean ISO, I had the same stinking problem a while back.
I tried it with a clean iso, no prob, then i tried it again 5 min after patching it with tactext, then it failed so...my guess its a one time deal.

(Linked:) ffhacktics.com/smf/index.php?action=dlattach;topic=7837.0;attach=8927


Quote from: RandMuadDib on October 02, 2011, 04:13:29 pm
Delete all of the japanese characters you find, save your file as an fftext or whatever, CLOSE FFTACTEXT, and then reopen it, load the file, then try patching. If that doesn't work, try shortening some descriptions oe other entries in the .lzw file that tactext is complaining about.


I've been trying to edit an ISO that I pulled myself from my physical copy of Final Fantasy Tactics: War of the Lions.

I can't edit the text in any way, shape, or form using TacText Editor. If I take my copy of an unchanged ISO, open it with TacText, change nothing, save that as Unchanged.fftext, open that, then try to patch the ISO it came from ... "DTE for BOOT.BIN 5 Failed. ISO was NOT changed!"

I'm currently copying the ISO over to my computer again, just to double-check that.

Edit: I've also gotten the "DTE for Open.LZW failed" message a couple times, too, while trying to patch the actual modified text.


Fixed, thanks to following the tips from these two. I haven't needed to delete Japanese characters yet though :)