• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
March 28, 2024, 08:03:47 am

News:

Use of ePSXe before 2.0 is highly discouraged. Mednafen, RetroArch, and Duckstation are recommended for playing/testing, pSX is recommended for debugging.


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

1
PSX FFT Hacking / EVTCHR Frame Locations
June 26, 2011, 02:48:48 pm
I've spent a lot of time recently trying to get EVTCHR frames loaded into custom events.  Through trial and error, I've put together a map tying EVTCHR frames within a sheet to the hex value you call within the UnitAnim() Event Instruction.  Hopefully this will be useful to other event editors who wish to insert custom EVTCHR frames into their events.

A few notes:

RAM Block 1 is x00 using the LoadEVTCHR and SaveEVTCHR Instructions, so

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

Loads EVTCHR Sheet 66 into RAM Block 1.  RAM Block 2 is x01, which for sheet 66 would be:

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

When you go to use UnitAnim(), remember that the 4th input variable is now x01 for RAM Block 1, and x02 for RAM Block 2  (x00 is the normal sprite sheet animation, not EVTCHR).

There is no way that I know of to call a frame in the 8th column on the EVTCHR sheet.  If you look at the EVTCHR sheets in the vanilla game, these all seem to be glitchy images anyway, such as a sprite facing directly at the camera, and are never called in-game.

Curiously, loading the EVTCHR Sheet to RAM Block 2 gives you the option to call all 7 frames on all 5 rows (35 total frames), while loading to RAM Block 1 only gives you access to 23 total frames.  You get all of the first row, the first 5 and 7th from the second row, but then only every other frame from there on out.  If you look at the event instructions from Vanilla, you'll see the game almost always uses RAM Block 2, and only loads RAM Block 1 when a secondary EVTCHR load is needed.

Also, I don't have complete notes on this, but in my experience loading an EVTCHR sheet in both RAM Blocks precludes certain regular animations from occurring, such as a weapon strike during a cutscene.  This is somewhat inconsistent that I've observed, but if all of sudden you add both EVTCHR frames to your custom event and then all of a sudden your characters won't swing their weapon when called, try removing one of the EVTCHR loads.

The attached file tells you which animation frame is called for which hex value.  So if you want to load the first frame on the sheet, your event instructions would include either the following using RAM Block 1:

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

UnitAnim(x85,x00,xF4,x01,x00)

or the following using RAM Block 2:


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

UnitAnim(x85,x00,x58,x02,x00)

This example assumes you're trying to load EVTCHR Sheet 66 and replace the Unit x85 sprite.

If you wanted to load the frame at Row 2, Column 6, your only option would be to use RAM Block 2:

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

UnitAnim(x85,x00,x64,x02,x00)

Where my map has xXX, that means that that frame can't be called for the RAM Block.

Why do the EVTCHR Frames have such unusual starting values for the hex bytes?  I have no idea.  It was extremely frustrating at first trying to figure this out, lacking any good explanation that I could find.  Having the map though makes it relatively pain-free.

This should help other event editors get EVTCHR frames into their events without having to go through a lot of trial and error.

Chad
2
PSX FFT Hacking / Effect Testing in Cut Scenes
May 17, 2011, 08:35:25 pm
One thing I've noticed while event editing is that effects can be rather...persnickety.  Some effects work just fine, and some I'm convinced will always be glitchy - they either won't center on the target like they should, or they only display part of the effect (as compared to the full in-battle effect), or some just crash the game altogether.

Additionally, using the Effect() event instruction, the effects do not have the same sequence or hex byte value as the in-battle effects video lists.  This can be particularly maddening as an event editor when you're searching for a particular event.  I've often coded what I was the proper effect, only to compile and watch and find I actually called a completely different effect.

To prevent all that guesswork, I made these Effect Testing events for myself so I could see exactly how each effect would work in a cut scene - which ones would work without glitching and what the exact ID of each effect is for calling it using Effect().

I figured these might be useful for anyone else adding effects to their events, so I'll post the ppfs here.  I don't have video software, but if anyone wanted to make videos of these that would probably be a lot more useful than these ppfs.  Then people could just skid through the video.

Anyway, these helped me, hopefully they'll help someone else.  They all replace the Orbonne event and just show each effect ID cast sequentially on a target.