• Welcome to Final Fantasy Hacktics. Please login or sign up.
 

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
This quick tutorial will assume that you have already downloaded the Resources for TLW, and either patched the PPF of The Lion War to your game or built it from scratch with the Resources. (You shouldn't need to do a full Resources build just for this.)

I'm going to be using The Lion War of the Lions for this, but the process should be the same no matter which version of TLW you use.

We'll be starting with inserting a custom sprite. There are custom sprites all over the place, with one such source being the FFH Custom Sprites page. https://ffhacktics.com/sprites.php You can also find them on the forums, or extract them directly from mods. I'll be using the Agrias sprite from Journey of the Five, because it amuses me.


Within the Resources, you'll want to go to the ASM folder, where the FFTPatcher Suite is kept.


Choose the top option - the .495 folder.


Open ShishiSpriteEditor.


File -> Open ISO. Navigate to your TLW ISO and open it.


Click the dropdown menu for Sprites. TLW opens up several blank slots for you to use.


That said, not all of them are completely free - there also needs to be no existing (used) Job in the same slot in the Patcher. You also need to use the entries earlier up on the list - once you reach the generic unit sprites, you start dealing with some hardcoding issues.

We'll use 22 here. It's free in both Shishi and the FFTPatcher (as we'll see later).


Before importing a sprite, make sure the Type is set correctly. There are few different kinds of sprite types, and if you get it wrong, you can see issues such as how the arms won't be attached correctly. In this case, Jot5 Agrias is Type 1, so it's fine. Move your sprite folder window next to the Shishi window, then drag and drop your chosen sprite in.



Click on the Other Images tab and choose "UNIT.BIN (Formation Screen Sprites)" from the dropdown menu.


Find an entry that goes unused in TLW/vanilla, such as 12 - Balmafula. She never joins the party, not even as a guest in vanilla.


Make sure the same entry is also just as free in WLDFACE.BIN. Entry 12 is also Balmafula there, so we're perfectly fine.


Follow this guide to create and import UNIT and WLDFACE entries for your new unit: https://ffhacktics.com/smf/index.php?topic=6702.0

(In my case, I just exported them from Jot5 Chapter 1 and inserted them here.)


That's the sprite stuff done! Now close Shishi - a very important step, since Shishi remaining open on the ISO prevents other edits from being made to it.
Then, let's go to the Patcher and prepare the job.


Go to File - Open Patch. In the Resources, you'll find the FFTP file within the PATCHER FILES folder.


In the Jobs tab, go to entry 22.


Set up the job however you like. Since I'm using an Agrias sprite, I'll just copy the stats directly from Agrias' 1E Holy Knight Job by right-clicking it, selecting Clone, then right-clicking Job 22 and clicking Paste.


There is one more important thing to do here, though - you must change the Formation Sprites entries, and they must match, or the colors get completely fucked up. Remember that we chose 12 earlier for the UNIT and WLDFACE? Just change these ones to that.

Finally, you may want to customize your own Skill Set for this unit, but I won't cover that here. It's pretty straightforward as is. Besides, most people want sword skills anyway, haha.


Now we'll insert this custom unit into an event that she can join in. Go to the ENTD tab and choose 102, which in TLW is the Military Academy event in which Delita and the generics join the party in Chapter 1.

Note that because our unit has a unique sprite, you should count the number of unique sprites used in the ENTD. There can only be 9 unique sprites on the field at any one time. Thankfully, there are 8 unique sprites total here - so having one more is no problem at all!


Choose an empty unit slot in here and fill out the fields as you like. You can set the unit's equipment, equipped skills and skillsets, gender, and so on, as you like.

Set the Unit and Current Job to 22, the Sprite and Job ID of the custom unit.
The Name ID 22 is set as Mustadio, but in TLW, Mustadio should always use Entry 16 - this is just a now-unused duplicate. So we'll use it here instead.
Pick a free unit ID - 88 should do.
Click the Join After Event and Always Present boxes.


There's one last thing to do, though. Your unit needs a valid X/Y position to stand in - if 0,0 is off the map, they won't appear, even while checked as Always Present. You can take a look at the FFH Map list and see what's open here.

https://ffhacktics.com/maps.php

Since this is the Military Academy Auditorium:

https://ffhacktics.com/maps.php?id=24

Also for reference, you can check out a playthrough if you want to see all the locations on the map that are taken up during the event. 19:50 on this video gives us a good view of the Academy:

https://youtu.be/xwH9kGeG1DU?t=1190

The middle corner on the bottom-left seems free enough. According to the map image, that's got the coordinates of 1,1.


Let's go ahead and put the custom unit there.


That should do it for Patcher changes! Save your patch next to the TLW FFTPatcher file, and then apply the patch to your ISO under PSX - Patch ISO.


Now, close the Patcher. It's time to alter the TacText files.

There are two ways to do this: using TacText directly, and using the FFTText Editor. The FFTText Editor has more functionality, so I'll be using that, but you can feel free to use TacText if you don't have access to Excel or don't feel comfortable unblocking the Editor.

Go back to the Resources folder. This time, open the Spreadsheets folder, and go to the FFTText Editor. Right click it, and select Properties. In the window that pops up, click Unblock. The reason for this is that the FFTText Editor uses macros, which have the capability to write to other files. This functionality is blocked by default on files from unknown sources.



Now open the FFTText Editor. Towards the top, you'll likely see a prompt to enable editing. Click the button.


Go to Column AP: Quick Edit | Units - Names. Click "Ramza". Any one will do.


At the top, click Add-Ins, then Edit All.


You'll have a new view to look at. Scroll down to 022 Mustadio.


Click the "Mustadio" entry on the left and type in your new unit name.


Click Save Edits on the top left of the window.


Go to the next column on the right, AQ: Units - Quotes. Again, click one of the entries and then click Edit All.


Once again, go down to 022 and edit the quote to what you want the unit to have now before clicking Save Edits.


Scroll to the left to Column AI: Jobs - Names. Edit All, once again going to 22 and changing it to what you want before clicking Save Edits. Note: if you want this job to share the name of existing jobs, make sure to add an exclamation mark to it for now.
Then do the same for column AJ: Jobs - Descriptions.


Go to Column AK, Jobs - Requirements. Unlike before, we won't go to 022 - these entries are sorted differently, with generic jobs on the top. Scroll down (or use Ctrl+F) until you find the name of your new job. Looks like it goes in entry 35 this time. But something's off - there are only four lines there for this entry as opposed to the eight that other, full entries have!


Click one of the lines for this entry, then go to the top and click Add Pages.


We only want one more page, so just click OK.


There we go. NOW we have two pages.


Get your Requirements written up - typically, just the job description again but with Requirements: None on the second page - and click Save Edits.


If you gave the unit a unique skillset, go to Columns AN and AO to edit the name and description of it. After that, we're done! Click Export .ffttext on the top left, save it next to your TLWotL Text file with a new name, and then save and close the Excel file.


Now to import the .ffttext into the ISO, we'll need to use FFTactext. Go to the ASM folder like you did for Shishi and the Patcher, and open it.


File - Open .ffttext


You'll get a warning about missing files and will be asked if you want to load the rest from the ISO. Choose no. You DO NOT want that.


It will take a little while for TacText to open the file. But once it does, if you didn't make the changes in the spreadsheet, do so now under the Quick Edit dropdown selection. Otherwise, or when you finish, click ISO - Patch ISO.


Go ahead and patch your ISO. This will take some time as the program calculates what to do and where before getting started.


Eventually, you'll see "Success".


And that's that! Go in game and see how your unit looks.





2
FFT TLW ReMixed / ReMixed Bug Reports
July 02, 2024, 01:41:13 am
Decided to put together a topic for this so I can hopefully keep notes of anything that's popped up for folks that I haven't fixed yet.

As of Sep 22 2024:

- The Pass movement skill allows the player to mount enemy Chocobos. I need to disable that functionality unless the player also has Tame, at which point the Chocobo should switch teams on the unit's next turn (not immediately, to prevent Cancel Movement fuckery).

- Scream seems to remove some status effects from the user.

- Dancing can hit dead units.

- Linear attacks hit allies even when they aren't meant to. (Possibly related to dancing hitting dead units as well?)

- Can't target untraversable tiles as the center of an AoE attack. (Have to double check to make sure that's not vanilla functionality though.)

- Learn on hit skills can ask you to relearn a skill you already know under certain circumstances. Harmless but still undesired.

- Balthier is Petrified at the start of a battle even though he shouldn't be. (Fixed for 1.2.10)

- Move Underwater on certain monsters as a substitute for Swim isn't working as intended. Chocobos stop animating in 2 Depth water and can't act.

- Fly incorrectly allows Black Chocobos to stand on water. Need to make that extra functionality only for humans.

- If Ramza is knocked out at the end of the Luso battle, he may still appear knocked out at the start of the Luso recruitment event. (Fixed for 1.2.09)

- Special portrait settings (for units such as Miluda) are not being cleared upon returning to the world map, causing random battle enemies to occasionally feature wildly incorrect portraits on a unit if the Unit ID matches. (Fixed for 1.2.09)

- Delita in the Miluda battles has some randomized settings instead of fixed ones. Only noticeable in New Game Plus, but still. (Fixed for 1.2.09)

- Abyssal Blade isn't lowering damage the further away a target is if the equipped weapon's power is below a certain amount. (Fixed for 1.2.09)

- Luso incorrectly starts with a longbow and the Equip Shield ability despite not actually having it learned - left over from some of my Monkey Grip functionality testing. (Fixed for 1.2.09)

- Ovelia won't appear after the first battle if the player goes to the Extra Options menu. (Fixed for 1.2.09)

- JP Refunds don't work if you disable the JP Scroll Glitch and then try to refund an ability that would refund more JP than you currently have. (Fixed for 1.2.09)

- Agrias doesn't join after the Bariaus Valley battle. (Fixed for 1.2.09)

- Sometimes, you get 0 Gil from a battle. (Fixed for 1.2.09)
3
A lot of bugs have come up in later builds. If you want to enjoy the features of 1.2, with the minimum messiness of unsquashed bugs, the best option for now is probably 1.2.05.

Version 1.2! This is the version that includes Doublecasting, Mounted Actions, the Cone AoE hack, and Improved Level Scaling.

But for now, it's just an open beta version.

With my free time having become way more limited the last several months than it normally does at this time of year, due to this year's "light season" of work being heavier than our heavy season was, getting through April and May with 50-60 hour workweeks while preparing some major new hacks burned me out pretty badly here. As a result of the burnout (and the still too-long days) I haven't yet been able to commit to a full playthrough of 1.2 in order to find and kill every bug for it. It would have taken months in all likelihood, and I had to choose between a very long delay on release or an open beta version. For the time being, I'll just be trying to get some bugfix updates out on the weekends when I can, based on what's reported to me.

If you're looking for the most current stable version, version 1.1.11 is in the previous topic, which maxed out its number of attachments, hence the need for this topic.

Events:
- Fixed a bug in the Luso battle causing his death to trigger a Game Over even if the decision was made not to worry about him.
- Changed the Retraining mission report to have more wait time before reporting the next unit's results - hopefully this will prevent a crash on console.

Preparation Menu:
- Added the title "Preparation Menu" to the Preparation Menu, because I could.
- Allowed players to leave MOST battle sequences mid-sequence. They'll have to redo the sequence from the start, though.
- Added a new feature: Extra Options, giving a bunch of new features that the player can control.
-- Level Scaling: Units in battles that scale to Party Level can now be set to scale only to the level of the roster units on the field, instead of all roster units.
-- Player Death Options: Permadeath can be disabled for player units, causing them to become unrevivable instead, like in Rendezvous battles.
-- General Death Options: Upon permadeath, units can be set to always become crystals or treasure chests - or just let the RNG gods choose.
-- Guest Control: Turn on or off the ability to control all Guests, rather than just the manually deployed ones.

Archer:
- Thanks to an update to the hack that allows Charge to inflict status, Aim and Disrupt now run the weapon's formula directly - meaning that weapons like the Blood Sword will absorb the damage dealt, guns will have 100% accuracy, and magic guns will use the expected spells.
- Arrow Guard can now also block bullets.

Dark Knight:
- Unholy Sacrifice now adjusts its damage according to the wielder's Brave or Faith depending on the weapon type held. Axes run an Anti-Faith adjustment, while Knight Swords and Katana run a Brave adjustment. Swords do not adjust the damage done.
- Abyssal Blade has a new formula and new targeting range (thanks to a new Cone AoE hack), making it much more in line with WotL. I didn't use the EXACT formula from WotL because I think it's unnecessarily specific and complicated - instead, each row further away from the caster reduces damage dealt by 25%. Also uses the same weapon type damage adjustment as Unholy Sacrifice.
- The Vehemence support skill from WotL has been recreated, increasing damage dealt AND taken by 50%. It replaces Adeptness on the Dark Knight - but Adeptness has not been removed...

Samurai:
- Now has access to Adeptness, which is also an innate skill. Since Adeptness comes after Attack Boost now, it's been given a new feature - the same Draw Out katana shatter protection given to Maintenance. This ought to help Adeptness keep its own little niche.

Ninja:
- Ninjutsu has been reverted to Dual Wield, losing its passive Equip Ninja Blades benefit. Turns out that it was allowing Reis to equip Ninja Blades! >_>'

Calculator:
- Gained EXP Up has been replaced with Doublecast. Doublecast lets the user instantly cast any skill with the old, unused "Require Materia Blade" flag, then take a second action to cast another one of those skills at its regular casting speed. Equipping Doublecast also grants access to limited White and Black Magic skillsets (unless the user already has them available), populated with only Doublecast-flagged skills. Doublecast-flagged skills are marked in their descriptions with "2x", and include Ultima, Elemental Pulse, and several White, Black, Time, Yin Yang, and Summon Magic spells.

Oracle:
- New Reaction skill: MP Rage. Upon taking damage, restores MP equal to either 1/4 the damage or 1/8 the unit's max MP; whichever is higher.

Lancer/Dragons/Reis:
- Added Fire Breath, Ice Breath, and Thunder Breath to the Lancer skillset, which will be available via the tertiary skillset "Dragon Tech" which gets added after Jump in the skillset list. The Breaths can now be learned at the cost of 150 JP apiece for both the Lancer and Reis. They have also been upgraded to attack in a cone, as they do in the FFTA/2 games.

Lancer/Gobbledeguck:
- Mutilate has been changed to have a 100% base hit rate and absorb 30% of the target's max HP. Hits at weapon range, and has become a learnable Lancer skill that requires Spears or Axes if used by a human. (Gobbledegucks with a Beastmaster ally should still be able to use theirs.) It's essentially Lancet but without spending a whole new ability slot on it.

Thief/Sky Pirate:
- Bandit's Eye's Steal/Snipe bonus has been reduced from 20% to 10%. This will make the boost to Balthier's Steal skills (as Bandit's Eye is innate on him) comparable to how much better his Plunder skills are in WotL.
- Barrage will now correctly show the spell effect when using Magic Guns.
- Barrage's compatibility with Secret Hunt and Train has been fixed, so it should no longer risk triggering too early and causing bugs up to and including softlocks.

Game Hunter/Malboro:
- Bad Breath has had its vertical range increased from 0 to 2 in order to make it more worthwhile to use.
- Nerfed MA Growth from 45 to 48 (lower is better for Growths). Still has better MA Growth than any generic job other than Mime. Nerfed MA Multiplier from 130 (Time Mage level) to 110 (Priest level).

Riskbreaker:
- Magic Gun damage should now be much more accurately calculated when used for these abilities, thanks to adding in code for Magic Guns in the weapon damage formula routine.

Heaven Knight:
- Nerfed MA Growth from 45 to 48. Nerfed PA Multiplier from 100 to 90, but kept MA Multiplier at 130.

Hell Knight:
- Nerfed MA Growth from 45 to 48. Nerfed MA Multiplier from 130 to 120 (Oracle level), but kept PA Multiplier at 100.

Arc Knight (Zalbag):
- Fixed a bug that prevented stat alteration from correctly being saved during calculations, allowing Alter Power, Alter Mind, and Alter Speed to actually work.

Chocobos:
- Mounting a Chocobo now grants access to a skillset titled Mounted Action. This is the Chocobo's own skillset, which can still have its last Action slot unlocked by having an allied Beastmaster on the field. While all of the animations will be done by the rider, don't be fooled - Mounted Actions use the mount's stats, grant EXP to the mount, and consume the mount's Action instead of the rider's, allowing the rider to act independently of the mount. The mount's Action will be restored when a rider starts their next turn on the Chocobo's back or when the Chocobo gets its own turn after being dismounted (meaning that you can't use a Mounted Action, dismount, and then let another unit hop on before the Chocobo gets its own turn to get a free refresh of Mounted Action).
- Dismounting a Chocobo will either set their CT to 0 if its Action has been used or to 100 if it has not.

Engineer/Sky Pirate:
- Arm Aim, Leg Aim, and Seal Evil now use the previously unused "Require Sword" flag to optionally consume Move instead of Act, if used before Moving or Acting. This allows Mustadio and Balthier to start their turn by using one of these three abilities, then choosing to either Move or do a different Action. Unlike Doublecast, the followup Action here is not at all restricted - if you want to use Arm Aim and then Barrage, you are perfectly free to do so.
- Speaking of Barrage, it has been given an update that allows Magic Guns to correctly show the correct spell effects when Barrage calls upon them, as it does in WotL. It has also had its Evadeable flag removed - again, as it does in WotL. It still won't call upon special effects like Holy Lance's Holy proc, though - and while that might be a downgrade from WotL, let's be honest, Barrage is still a top tier ability without it, so I don't consider it worth the headache to attempt to figure out.

Other:
- Initial status effects can now be blocked by wearing equipment that prevents them. Or, more specifically - the Stone Gun's effect of making a unit start battle petrified is now blockable by Ribbons and such. To show this off as well as make up for the fact that there is no Ras Algethi gun, Balthier now begins his recruitment battle with a Stone Gun and Jade Armlet equipped instead of a Mythril Gun and Germinas Boots.

Actually included the event changes this time. Whoops! Forgot them while repeatedly rebuilding the ISO due to a bugged hack causing crashes that I was trying to isolate and fix.

- Removed the Improved Level Scaling feature for now. While I did tackle some bugs for it, there are still others that need to be solved, such as certain multi-phase Rendezvous battles that don't use the normal routines for loading encounter table data for generating new units and thus have issues. Guests also seemed to be loaded incorrectly with it.

- Reapplied the Event Instruction Hack Update, restoring end-of-chapter images and preventing softlocks if the player doesn't skip the scenes.

- Fixed a bug with Doublecast which prevented Math Skill from loading the full list of White and Black spells.

- Removed some testing event commands that caused a blank, buggy unit to spawn during the Gariland battle.

- Oracles correctly have Defense UP instead of Attack UP again.

- Talcall fixed a bug that caused menu corruption sometimes when reading ability descriptions.

- Removed passive Vehemence from Reis. (Vehemence replaced Monster Talk.)

- Talcall fixed a bug that caused menu corruption sometimes when reading ability descriptions - this time, without breaking item graphics if the player returns to Formation from the Prep Menu (we have no fucking idea how it happened tbh, but at least taking a different route fixed it)

- Don't Act should no longer prevent the unit from Moving.

- Reis' Dragon Boost correctly actually boosts stats now.

- The Archer's Aim skill will no longer "hit" by doing nothing when the attack would have missed. Now, it always hits properly.

- Adeptness correctly prevents katana breakage.

- Actually used a version of the ISO that didn't have the first and the second menu corruption fix this time, preventing the bugs caused by the first fix thanks to... y'know... not having it applied this time. Whoops!

- Fixed a bug in which going to a Rendezvous from the Deep Dungeon dot on the world map would cause the Preparation Menu to give the same options used in Deep Dungeon battles.

- Included two new Extra Options in the Preparation Menu: Parrying and Zodiac Compatibility.

-- Parrying includes options for W-EV to have some use without needing to learn/equip the Weapon Guard skill. The default for ReMixed is that Weapon Guard grants 100% of the W-EV, but without it, the unit still gains 50% of the W-EV. Since this effectively nerfs Weapon Guard, its cost has been dropped from 200 JP to 50. You can disable this change (or pick different variations of it) if you so desire.

-- Zodiac Compatibility options change how drastically compatibility affects the power of abilities. You can reduce or increase the boost by a further 50%, or even just turn off compatibility alteration entirely.

- Balthier will now have a Stone Gun equipped while being recruited instead of merely just during the battle.

- Move-Find Item is now set to have a 0% chance to be learned, to ensure enemies have a significantly lower chance of being able to take Move-Find Items from the map.

- Allowed the Preparation Menu to access Dispatch Missions once the event has been unlocked. I think I actually included the Dispatch Missions option in an earlier patch, but never noted it. Two minor bugs regarding its earlier inclusion have also been fixed: it now isn't accessible until it's unlocked, and you won't be kicked out after choosing Exit even if you choose to Stay instead.

- Moved Extra Options into its own separate event from the Preparation Menu due to the size of the text data used by it. Extra Options can now be accessed from the Bonus Content menu after viewing the Rendezvous Introduction event in Chapter 1 or accessing the event through the Preparation Menu.

- Included multiple new options in Extra Options.

-- Unit Generation, including Level Scaling and Job Levels.

--- Level Scaling, which brings back Improved Level Scaling now that it's finally been fixed, and includes Fixed Level Scaling.
---- Improved Level Scaling: Enabled by default, causes new units to scale according to the level of party members on the field instead of every unit in the Roster.
---- Fixed Level Scaling: Disabled by default, causes new units in battles that normally have fixed levels to scale up if your "Party Level" is higher than theirs.

--- Job Levels: Allows the setting of which job is set to a certain level to apply to more than one job. By default, the number of jobs that can be leveled will increase as the game goes on. Can also be hard set to just the specified job (like in vanilla), the specified job and the current job, or the specified job, the current job, and the job of the secondary skillset. This will generally tend to increase the number of skills the unit can generate with, as they can have up to three jobs set to the specified level instead of just one.

-- JP
--- JP Boost: Enabled by default, passively grants units 1.5x JP to make up for losing Gained JP Up.
--- JP Refund: Can be set to grant 100% of an ability's JP when refunded, or 50%. Or refunds can be blocked entirely. Set to 100% by default.
--- JP Scroll Glitch: Enabled by default, can allow skills to be purchased with the JP Scroll Glitch. (JP underflow cannot be reenabled, though.)

-- Bravery/Wariness: Enabled by default, Wariness causes units below 50 Brave to start taking less damage the lower their Brave is.

- Female Dark Knights at the end of the Brave Story Rendezvous should correctly be using Darkness instead of Sing as their Primary skillset.

- The summoners that can appear in the END map after beating Zodiark should now have Summon unlocked even when using the vanilla setting of units only generating with their specified job at the specified level (formerly Thief as per vanilla). They should also now come with the Zodiac summon, as intended.

- The Bandit's Eye interaction with Gil Taking incorrectly only allowed the user to deal unarmed damage. Now it deals weapon damage if using a knife, as well as double damage if the user attacks the enemy from behind with said knife. I'm not 100% happy with it, and I'll probably rework which weapons work with it and how the backstab functionality works later down the line, but this'll do for now.

- Improved Level Scaling should no longer allow non-deployed units to get double boosted on certain stats (like Move) from equipment.

- Manually deployed Guests should no longer leave the party. They might still join again if sent to a random battle immediately after joining as guests - I wanted to do more thorough testing and a full rewrite of a routine, but I just ran out of time this weekend.

- Katanas have been returned to their non-testing, correctly intended Weapon Power levels.

- The Shine Lover skill from the bird monster family has been changed into Mug.

- Bandit's Eye now swaps out Gil Taking with Mug in the Steal skillset instead of just buffing Gil Taking.

- Bandit's Eye no longer boosts the accuracy of Snipe abilities, only Steal.

- Back Attacks have been implemented. Can be customized or outright disabled in Extra Options. By default, Thieves and the Mug ability will get a guaranteed critical hit if attacking the target from behind, which can stack with a standard critical hit if the unit also hits that 4% chance. Most weapons will do an extra 25% damage for attacking from behind, but bows and crossbows will do an extra 50% damage, while knives will do an extra 100%.

- Fixed a bug in which units in multi-round battles (such as the Brave Story Rendezvous) did not properly show their status effect animation if they appeared at the start of the round.

- Fixed a bug that caused Meliadoul's joining to be skipped if the scene was skipped.

- Fixed a bug that caused the Dorter battle with Agrias and Gafgarion to set up the units in the battle incorrectly. The bug is due to a Preparation Menu setting from the Zeakden battle not being cleared at the end like it was supposed to, as well as a recent change to the Prep Menu that causes it to remember the units that were in the battle last time and ensure you fight the same ones. As a result, it may still remain in some save files - if so, just enter the battle and then return to the world map, as that clears out those flags and fixes the issue.

- Removed the knockback protection on the party leader and Immortal units. Added a new Extra Option that allows the player to reenable that knockback protection.

- Fixed the following bugs:
-- If Ramza is knocked out at the end of the Luso battle, he may still appear knocked out at the start of the Luso recruitment event.

-- Special portrait settings (for units such as Miluda) are not being cleared upon returning to the world map, causing random battle enemies to occasionally feature wildly incorrect portraits on a unit if the Unit ID matches.

-- Delita in the Miluda battles has some randomized settings instead of fixed ones. Only noticeable in New Game Plus, but still.

-- Abyssal Blade isn't lowering damage the further away a target is if the equipped weapon's power is below a certain amount.

-- Luso incorrectly starts with a longbow and the Equip Shield ability despite not actually having it learned - left over from some of my Monkey Grip functionality testing.

-- Ovelia won't appear after the first battle if the player goes to the Extra Options menu.

-- JP Refunds don't work if you disable the JP Scroll Glitch and then try to refund an ability that would refund more JP than you currently have.

-- Agrias doesn't join after the Bariaus Valley battle.

-- Sometimes, you get 0 Gil from a battle.

- Fixed several bugs associated with Improved Level Scaling and trying to save the current loaded units during story battles by just not doing the latter anymore. Sorry, but make sure you don't save after finding the pig at Zigolis Swamp.

- Balthier should no longer be petrified (though not animated like it) during his battle.

- Certain enemies not giving gil rewards has become an issue again despite the issue with their "will not give rewards" byte of data being fixed. (Seriously, everything else works. War Trophies and joining were broken by this before, but not anymore. Why is the gil broken?) Would have waited on this patch until I got this fixed but the other issues were getting really out of hand. Being left poor is way better than that.
4

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:

- JP Boost is now innate for all units.

- 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 only activates during Rendezvous battles. When active, once a unit's timer runs out, it becomes unrevivable for the rest of the battle, but does not turn into treasure or a crystal.

- 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.

Version 1.1.08 Resources

- 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.

Version 1.1.09 Resources

- Fixed a text bug in the event that introduces Rendezvous battles and Dispatch Missions.

- Zodiac has now been given a 100% chance of Learn on Hit.

- The two summoners that can appear in the END map after beating Elidibs/Zodiark should now come with the Zodiac summon learned.

- Fixed a bug in the final Altima battle that prevented Alma from learning Ultima 2 and All-Ultima upon clearing the battle. Also set it so that if Alma is already in the Roster, her stats will be loaded at the start and saved at the end.

- Made a new "Smart Auto-Potion" hack. Auto-Potion will now automatically default to stronger potions depending on the damage of the last hit taken, according to specific damage thresholds.

- Defending will now reduce physical and magical damage taken by 1/3, and no longer consumes Act.

- Secret Hunt has been moved to Archer in order to make room for a new Thief support skill.

- New support skill: Bandit's Eye. Ignores 20% of the target's Evasion, boosts the base success rate of Steal and Snipe skills by 20%, and causes Steal Gil to also deal weapon damage.

- Balthier has lost innate Maintenance, as that skill makes more sense on Mustadio. But in return, he's gained innate Bandit's Eye, which should help emulate the boosted Steal chances he has via his Plunder skills in WotL.

- Monster Talk is no longer its own support skill, due to being almost useless. Instead, Equip Gun now grants the benefit of Monster Talk. Mediator now has innate Equip Gun instead of innate Monster Talk.

- Fixed a bug with generating units under certain circumstances caused by some side testing that had unintended consequences.

5
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.

Edit: New update, including If commands after the UnitAddress so it won't try to save 16 bytes of data after not being able to find a unit with that ID.
6
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.
7
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.
8
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.
9
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.
10
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.
11
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.
12
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.
13
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.
14
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!
15
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.


16
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.
17
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.
18
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]
19
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.
20
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).
21
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:

22
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?
23
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.
24
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. :/
25
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
26
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 :)