A slickproductions.org /forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;area=showposts;sa=messages;u=29 e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexcfcf.html delayed slickproductions.org /forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;u=29 e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexcfcf.html.z x Ag^ Ћ OK text/html ISO-8859-1 gzip @ H Tue, 10 Mar 2020 07:45:23 GMT 0 0 P Ag^ [+
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.


Even the i-mode sound track hits you in the nostalgic guts, with its way to clone SNES sound.
It'd be nice if more things could be converted with the same scripts, like characters and map tiles, but after several tries I can't ever get them to make any sense. Only a true i-mode rip would make them justice.

I do know more or less how the SFC code works, since it's what I use in IDA to decipher what the PSX counterpart does, but writing optimized code for the 65c816 definitively isn't my field of knowledge.



Too bad I have no freaking idea how tile sets are loaded on the GBA; needs more debugging. 


typedef struct tagNpcRender
{
u8 unk00;
u8 id; // ? 0x20=continuos frame h-flip
u8 movement; // 00=no movement
u8 x_pos, x_tile;
u8 y_pos, y_tile;
u8 unk01[4];
u8 unk02; // doesn't do a thing
u8 move; //
u8 palette:4;
u8 flip:4; // OAM flip flags
u8 frame; // seems like a frame counter
} NPC_RENDER; // located at 0x900 in ramI still need to identify most of this mess and also locate x/y screen coordinates, plus the actual map data in RAM. With these tasks out of the work table, I can pretty much ditch the SNES interpreter and render everything natively with improved graphics and performance.
<Monster ID="105" Name="Balloon">
<Stats lv="33" hp="697" boss="0" mag="0"/>
<Attack mult="6" perc="70" base="72"/>
<Defense mult="3" perc="60" base="4"/>
<MagicDefense mult="4" perc="60" base="19"/>
<Speed min="23" max="26"/>
<Status type="0" atk_elem="0x00" atk_stat="0x0000" def_elem="0x00" def_stat="0x0039" weakness="0x20"/>
<Gain exp="2459" gil="315"/>
<Drops id1="176" id2="178" id3="196" id4="232" rate="1"/>
</Monster> <Monster ID="87" Name="Chimera">
<Stats lv="28" hp="700" boss="0" mag="0"/>
<Attack mult="6" perc="90" base="80"/>
<Defense mult="3" perc="15" base="3"/>
<MagicDefense mult="4" perc="40" base="18"/>
<Speed min="20" max="23"/>
<Status type="0" atk_elem="0x00" atk_stat="0x0000" def_elem="0x47" def_stat="0x30B8" weakness="0x00"/>
<Gain exp="1708" gil="228"/>
<Drops id1="86" id2="176" id3="177" id4="192" rate="1"/>
</Monster> <Monster ID="25" Name="BlackLiz">
<Stats lv="25" hp="792" boss="0" mag="16"/>
<Attack mult="5" perc="90" base="64"/>
<Defense mult="3" perc="40" base="4"/>
<MagicDefense mult="3" perc="60" base="15"/>
<Speed min="21" max="24"/>
<Status type="4" atk_elem="0x00" atk_stat="0x0000" def_elem="0x00" def_stat="0x0018" weakness="0x02"/>
<Gain exp="1298" gil="43"/>
<Drops id1="94" id2="94" id3="94" id4="34" rate="1"/>
</Monster>They are correct, apparently.
自分がピンチになると、「自爆」で相手もWhich roughly translates to:
道連れにする。早いうちに一撃で倒そう
When in a pinch, this enemy uses "Self-destruct" in an attempt to kill its opponents. Defeat it as quickly as possible!
Is that official guidebook easy enough to find or to buy? I could use some good transcription of it.
).
In terms of music my vote is for the original untouched - it's perfect! Or maybe an option?I haven't done much about sound, although I did get myself into a yet-to-be-perfected NDS SEQ tracker that plays most of the FF4 DS tunes more or less indecently. If that can be completed for good, we can use the tracker as a base to port over the SNES tunes and make them play with either original instruments or improved ones. The real challenge in this port is that TOSE didn't bother to use a tracker format for music and simply went streamed instead, locking the CD-Rom unit pretty much entirely. The other horrible gimmick they have in this port is that the entire sound library for SFX is stored inside a single, huge file always cached in the SPU RAM. In other words, they put in there a ton sound samples and made sure they would fit in 400 or so KB, butchering quality beyond redemption.
What about sound effects? They were somewhat muffled in the PSX version, weren't they?
How exactly did TOSE manage to screw up the sound in every single of their PSX ports anyway, I wonder...
Fortunately this problem can be fixed when I'm done identifying most of the sound core aspects of the engine, so that a replacement with dynamic loading can be provided. This is how I'd store the sound fonts:Looking at those Golbez and Rubicant sprites reminds me of something:I do remember some of the sprites going down in size even in other ports, like FFOrigins, but with FF4 it's barely noticeable. Not that I wouldn't like restored size while they retain improved color smoothness.
You probably realize that some sprites were shrunk for the WSC/GBA versions and never made it back to their original size. Even in versions that provided enough space:
Just yesterday I found out that the game "Final Fantasy: All the Bravest" has some of them restored to full size:
SNES/GBA/Bravest
My bestiary module can already take any size of sprites, as long as they fit in 256x256 pixel VRAM pages (they always fit
). Heck, I could even put some of those to break the 16 color limit, like Zeromus EZ/EG.Using the original SNES music with upgraded samples gets my vote.If I can add a way to replace spell formulas and sprite effects, this is definitively going into the project.
I'm most looking forward to the ability to pretty much freely adding "custom parts".
There are quite a few spells and commands I'd like to add.


For those who can't open YT videos, here's what the bestiary looks like right now:

) - should be extremely useful when item/magic usage code starts to get added in. I also took some time to drop most statically defined strings (i.e. function string parameters) and I replaced them with a proper system pool; messages are stored to an external chunk of data and can be rebuilt without the need of a source recompilation or huge #ifdef's in the code. This will be somewhat useful if anybody wants to make a localized version in other languages, plus it strips away all the string padding GCC bloats the binaries with.
When I'm done with string packages, all of them will be moved to independent files that can be cached and accessed at will from the CD-Rom unit, for example from a language selector.
Also, anybody willing to put together a nice list of monster descriptions? I'm totally not good at writing any of those - I may even end up describing Bahamut's lunar palace in detail instead of going background info on him.

I found the spell power by rereading my notes and I totally forgot to copy that bit of information from the extra flags, so the spell power went completely under my nose even if it was accounted for in the parsing procedure. One more bit added to the bestiary. Now I'd really like to parse dynamically all the battle script stuff about spells and make this almost as complete as the Chrono Trigger DS bestiary.
On to the problem:

<Monster ID="187" Name="Rubicant">
<Stats lv="50" hp="34000" boss="1"/>
<Attack mult="8" perc="70" base="80"/>
<Defense mult="2" perc="25" base="3"/>
<MagicDefense mult="8" perc="80" base="37"/>
<Speed min="38" max="38"/>
<Status type="0" atk_elem="0x00" atk_stat="0x0000" def_elem="0x41" def_stat="0x0400" weakness="0x00"/>
<Gain exp="18000" gil="7000"/>
<Drops id1="206" id2="206" id3="206" id4="206" rate="0"/>
</Monster>