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.

Messages - MysticLord

Pages: [1] 2 3 4
Unsure if this is being actively worked on, but I might as well report a bug I guess? When attempting to edit whether a weapon can be sold, used in battle, or used in the item menu, flags will be written to the wrong location. Checking those boxes will result in the flags instead being toggled for "Miss if not Dead", "Reflectable", and "Def Ignoring" in the weapon properties table, and will also show up as such in-game. Editing flags within the Weapon Properties works normally/correctly, but attempting to enable flags in the item/sell menu does not. It does however read all these flags correctly when simply viewing the weapons without making any changes, and this problem does not occur in the Armor or Accessory menus.

Apologies if this has been reported already, and thank you for making this program!
I've had this issue with Java.

So I guess the solution is to enforce atomic operations where needed (no idea where that is) and refresh the renderer at the end of every update. Though making the entire program as small as possible so more of it fits in the smallest applicable cache may help too and couldn't hurt. I only encountered this behavior when the editor got huge.

It's a chore, unfortunately.

You have to install Cygwin, and at some point in the installation there will be an option to install a bunch of programs with it. Select gzip there.

If you want to update it and install more programs, run the installer again.

Cygwin is a bunch of linux apps ported to windows, complete with it's own terminal to run them from.

It might be useful for someone to upload the decompressed version of the file, so you can compress it and see how it corresponds to the file you're working with.

I assume so. Make sure you back up your files.

Ask NFITC1 if you run into problems.

Yes I have. They are actually spacer/padding values because the Item data structure is derived from Action data structure. In order to make them loadable by the same method, the first eight bytes of Action data is just dummied out. I have verified this by reversing the PC executable extensively.
I noticed that in the other kernel.bin structures. Does it actually save enough space to justify the wasted bytes? Or is it an issue of speed?

Difference between the link that doesn't work and the one that does:

I have everything I need to do this, but I'm working on Ogre Battle MOTBQ and probably Tactics Ogre TKOL first. They don't have editors.

^Tools for working with FF7 archives, though you'll need to understand how to use the command prompt and how to install the dependencies (Python 2.7 and a couple other things).

Item format is here:
Has anyone tried zeroing out the first eight dummy bytes to see if anything happens?

Where can I find a listing of names for each item in order?

I assume it's 256 items, with a dummy item for empty slot.

I assume no one has a listing of item names, and I'll have to rip them myself to prevent mistakes.
1. Are they index-addressed fixed-length, or pointer-addressed null-terminated?
2. Are they ASCII or some other weird format that lacks the standard ASCII subset?
3. If it's pointer addressed, is there any weird stuff for duplicated names or entries without names?

Found item and materia digits on GameFAQs, in a Gameshark FAQ.

The Damage Calculation page links to a detailed Damage Formula page, but there's nothing there.

I assume that the power in this page is Item byte 0x0F ?

In fact, the first nine sections of the KERNEL.BIN entries should interest you:
Most of that is my work so I'm the one to ask questions of on any of those sections.
Are there programs you recommend to extract the kernel subfiles and ungzip them?

Is there a GUI program that does one or both jobs?

If not, is there anything I can call in a python script to ungzip them and then gzip them later (I prefer to newb-proof things as much as I can)?

Has anyone written something I can reuse (open source because lol it's a python script I ain't compiling shit) to deal with gzips if the best scenario for users is making new scripts to deal with the kernel?

Cebix has tools to do this stuff, though they're python 2.7 and have some other dependencies.
The tools are entirely written in Python and have the following

 * Python >= 2.7.6
   The tools are not compatible with Python 3.

 * Pillow >= 5.1.1 (
   Used by the 'tim2png' and 'subending' tools.

 * NumPy >= 1.8.0 (
   Used by the 'subending' tool.

 * PSXImager >= 1.0 (
   Used by the 'fixup' tool.

Most of the tools use the included 'ff7' package which must be in the
PYTHONPATH or reside in the same directory as the tools themselves.

Shouldn't be too hard to port the code I need to Python 3, and grab whatever license he uses.

The KERNEL.BIN gets unpacked into the same location in RAM each time the game is loaded. I know where the pointer to the PC values is (nine Dword values at 7BA070 point to the locations in memory where each of the sections end up), but it might not translate the same for PS1. PS1 might unload the KERNEL files into the same addresses each time.
If I were you, I'd just crack open a save state and search for the first few bytes of item data. If that doesn't work, search for a set of adjacent and very distinct bytes, first using XVI32's count function, then the search function when you get a small enough data set.

Let's start with something simple like items. What format do you want the data in? Can you give me an example?
1. File it's found in.
2. Starting address of data.
3. Ending address of data.
4. Number of entries of data if it's 1 entry per item, otherwise describe the scheme for delimiting it.
5. Number of bytes per entry if it's a fixed number per entry, otherwise describe the delimiting scheme for it.
6. Explanations of each byte.

Example of number 6:
Code: [Select]
0x00: Item ID

0x01: Item Weight

0x02: Item Power
    : Context depends on if item is weapon, armor, or shield.
    : All skills that are present on this item use this byte to modify their formulas.

0x03: Strength modifier
    : Signed byte.

0x04: Dexterity modifier
    : Signed byte.


0x0C: Additional effects
    : This byte determines the context of bytes 0x0D, 0x0E, and 0x0F.
    : Values
        0x00: null
        0x01: weapon attack - 0x0D = element, 0x0E = status effect, 0x0F = critical rate
        0x02: weapon healing - 0x0D = element, 0x0E = status effect, 0x0F = critical rate
        0x03: Use skill 100% of time - 0x0D = upper 8 bits of skill ID, 0x0E = lower 8 bits of skill ID, 0x0F = bit 0x80 sets detroy on use, other bits unknown

You don't have to type "0x" in front of all hex values, you can just say that all numbers are hex unless prefixed by a "d", or use the $ prefix for hex or what have you. As long as it's consistent, unambiguous, and you tell me your scheme it's all good.

I'm going to reread whatever you post a dozen times as I transcribe it into a spreadsheet and double/triple check it after that, so the only possible issue is something not being answered, inconsistencies, or mistakes. If the first two are present, I will definitely notice and ask for clarification. I might notice a mistake if it doesn't jibe with the data.

If it seems that something needs to be organized in it's own way (if - god help us - several bytes have values whose context is completely unique depending on several other values), then put that stuff with the byte that determines the context and leave a note for the stuff that very rarely changes context like "... unless byte 0x0c says otherwise".

So if byte 0x0c can change the meaning of bytes 0x00, 0x01, and 0x02 in a handful of circumstances, then add "see byte 0x0c for context dependent information" to bytes 0x00, 0x01, and 00x2; then identify in byte 0x0c's entry the circumstances where it does this.

Think of it as trying to reduce the duplications of explanations so you edit as few places as possible when you find an error or update something.

I think I see what you're getting at. I haven't done much PS1 emulator hacking, but since the RAM is always the same it shouldn't be difficult to find the data. I know the entire KERNEL.BIN (where all the battle-related object data is) is always present in memory during battle so it should be in a static place each time. It can't be too hard to find it.
IIRC pSX emulator has a header 0x2b0 bytes long for it's save states, and all others have footers (so the address doesn't change). Addresses shouldn't be any different if it's a footer.

RE save states: If the data is exactly the same format for the PC versions, post the same info for them too... though you should only need to specify things that differ, like file and starting address.

If the data is a subfile in another file, is only ever accessed by doing math on the header of the file, and you can reasonably expect the change the sizes of the subfiles previous to it, then include an explanation of the header. I understand what little endian means, and have basically a sophomore++ level of CS education.

I've got data for battle related stuff (except for encounter tables), but it's not super well organized. Every byte and most bits have documented functions too. Just tell me what you need and I'll work with you.

What de-hardcoding hack are you thinking about? It seems possible to un-hardcode some things with the right memory hooks. To my knowledge there are no such hacks for battle-related mechanics.
I want to make spreadsheet editors for everything, so uhhh, give me everything is the best way to start I guess... but we can start with whatever you want to start with. I really don't know much about hacking FF7.

Though it seems you're talking about battle mechanics code instead of data. That's not quite as easy to deal with using spreadsheets, but it can still be very useful. Either way it can wait until later, as it's not that useful without data unless you're talking about a catch-all spreadsheet for battle mechanic hacks. Still, that sort of thing is better used as a commented and labeled disassembly.

Give me the data related to battle stuff - general 1 sentence description of what each table does, what file it's in, starting address, ending address, number of entries, entry size if fixed and entry delimiting scheme if it's not. That should be enough to set up a spreadsheet that can be used for editing. If it requires decompressing or has a subfile scheme, tell me where to find that tool and parameters for using it, as well as any byte massaging (delete bytes, add bytes, etc) I need to do to use it.

Then a description of what you think each byte per entry does, and as much of a breakdown on valid inputs for each byte as you've got. If it's too complicated, just post your unedited notes and I'll fill in what I can then hand it over to you for editing my notes, and of course you can use it to test things.

If the table is also found intact in RAM - or the entries are - in a location that is always the same place (like 0x13c00, always), then post that, because it will enable hot-patching of save states for faster editing. If your emulator has a special header, post that too.

I want to make some things like this but for FF7 when I'm done with the Ogre series.

I'm also curious if anyone has made any hacks that de-hardcode things, or expands tables, which can integrated with them, as well as the locations of names for digits (items, skills, materia) if it's uncompressed and can be easily integrated into the vlookup functions that generate previews.

I need explanations of each byte/bit too, or someone I can pester about the subject.

I don't care about animations or models, just data for things like skills, items, materia, enemies, encounter tables, and so on.

Would be handy to know what to look for when searching, and how best to format a post so people can find it in the future.

Completely Unrelated / Re: Cloud: "...A lot has happened"
« on: 2021-05-09 12:52:18 »
Join the Discord, much more activity there.

General Discussion / Anti-Powergaming Mod Ideas?
« on: 2021-04-12 12:24:46 »
I'm slightly obsessive-compulsive, and I find that the drive to powergame is insatiable. With this in mind, how could one mod FF 7, 8, and 9 to remove the incentives to powergame? My thoughts on each are below.

Obviously these games have a lot of other problems that need fixing, but these are just the ones relevant to powergaming.


1. Need to grind for sources in the Sunken Gelinka.
2. Need to grind for Vincent's kills.
3. Need to grind AP for Barret's ultimate weapon.

1A. Remove stat boost items from non-super-boss item drops, and provide a lot as a reward for their completion.
1B. Add stat boost items as rewards for stuff that's actually fun, like snowboarding.

2A. Reduce Vincent's kill counter to a single 8-bit byte.
2B. Give Vincent's ultimate weapon some other method to power up.

3A. Put a limit on how much you can power up Barret's ultimate weapon with materia AP.
3B. Change how it powers up.


1. Need to LLG and use Card to help max stats while gaining levels.
2. Need to grind for gil or devour to max stats.
3. Can't get some stuff (Odin, Tonberry) until late in game to complete point 1.

1. Remove stat growth gf skills.
2. Put stat boost items needed to max everyone's stats behind incrementally tougher superbosses, and provide devour as a reward for defeating one of the first superbosses for those with less skill. And by that I mean you get 100 of all of them for defeating one superboss.
3. Point number 1 fixes this, but making Zantetsuken percentage based damage instead of instant death is a good half-measure.


1. Need to run a LLG to optimize stats.
2. Need to somehow get under the time limit for Excalibur 2.
3. Can't miss anything.

1A. Slightly rework gear so you have several options at each upgrade checkpoint, which provide varying stat boosts. The sum of stat boosts should all be equal, and they should not change as you upgrade. We don't need to worry about enemies using gear, so you could make something like FFT or FF12 for armor, and let anyone equip anything (though that doesn't mean they'll be optimal IRT skills. Stat boosts to each would be (in the meta sense) alloted to each armor class in a point-buy system.

Mage armors: more Str, some Spr and Spd, least Mag
Warrior armors: same as mage, but switch Str and Mag
Utility armors: generally balanced.

1B. Remove gear stat boosts entirely and use only character levels to determine stats.

2A. Use something other than time to get Excalibur 2. I'm fond of superbosses.

2B. Do something entirely different with Steiner's weapons so you don't need a super weapon.

3. Ensure that nothing is permanently missible, but erect barriers to this. These can be theft/rewards from tough enemies, exorbitant gil costs for those who can't jump rope, puzzles, and challenging side quests.


1. Powergaming isn't actually that useful.
2. Powergaming is boring and repetitive.

1. Make maximal powergaming something that is actually useful rather than pathological, by increasing the difficulty and adding unlocks which boost the final bosses powers after you beat optional superbosses, like in Star Ocean 2.
2. Create optional non-missible content periodically that challenges the player proportional to it's rewards.

Update on my previous issues.

No idea what it was, bought a better computer and Hades Workshop works.

Could you clarify in the original post what exactly this is, and how it works with the PSX version? Seems like a save editor to me.

Can you throw together a tl;dr five step bullet list on how to use it to edit memory card files or what have you if that's what it does?

How do I extract the relevant file from /FF8DISK1.IMG, which I assume is a custom archive format SE used?

Completely Unrelated / Re: The Brain-Computer Interface
« on: 2021-03-02 00:16:20 »
From The Diamond Age, by Neal Stephenson.

Here's the output of dir > files.txt
Code: [Select]
    Directory: C:\Users\pc\Downloads\HadesWorkshop

Mode                LastWriteTime         Length Name                                                                 
----                -------------         ------ ----                                                                 
d-----        9/29/2020   1:27 AM                msvcp140                                                             
-a----        9/29/2020   6:22 AM              0 files.txt                                                             
-a----        9/20/2020   3:21 PM          39609 HadesWorkshop.conf                                                   
-a----        9/20/2020   3:21 PM       42273792 HadesWorkshop.exe                                                     
-a----        9/20/2020   3:21 PM        6919640 libfbxsdk.dll                                                         
-a----        9/20/2020   3:21 PM         294931 LocalVariableSettings_v1.hws                                         
-a----        9/29/2020   6:21 AM         590096 msvcp140.dll                                                         
-a----        9/20/2020   3:21 PM        1526976 ucrtbased.dll                                                         
-a----        9/20/2020   3:21 PM        2134528 wxbase31u_vc_custom.dll                                               
-a----        9/20/2020   3:21 PM         143360 wxbase31u_xml_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM        1350144 wxmsw31u_adv_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM         441344 wxmsw31u_aui_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM        5010944 wxmsw31u_core_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM          75776 wxmsw31u_gl_vc_custom.dll                                             
-a----        9/20/2020   3:21 PM         605696 wxmsw31u_html_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM        1512448 wxmsw31u_richtext_vc_custom.dll                                       


Here is the output of a hashes on all those files.
Code: [Select]
[email protected] /cygdrive/c/Users/pc/Downloads/HadesWorkshop
$ sha256sum *
16b8f2cc0647648a86a86c2a62e5bbf226f23d94f50a6b7695f9904e977e7c64 *files.txt
466a8e172708a14f526c1da86395a4e9b50456211580065617835a7a553df078 *HadesWorkshop.conf
f0bdace03cd9adb7b1089e425603d7e6904272d138099d2c6e890eaf7dbc4ebc *HadesWorkshop.exe
2dae86a328f4852380ae5f8361badaac562d1c0c72e07d2c781950891d83eedc *libfbxsdk.dll
a81208bf8cf41b8299925855b403a314415bc309f9344b06a61ba1961b87cde7 *LocalVariableSettings_v1.hws
sha256sum: msvcp140: Is a directory
a2cb9cae4b86468ca44ba36320814a204ec8ad311df624b94e12c47e328e2726 *msvcp140.dll
c8fda4b882281f5a4d921416c1f565eddbdd552ef782a32380e0975fcc2696c1 *ucrtbased.dll
313f87259aa568811f2a63fac3e308b8f661dd623317ea655d027e67314443df *wxbase31u_vc_custom.dll
ad5a595cfb4043d3334420fd71adc89c262a0b1c87ec5660d825a3d29f3c2080 *wxbase31u_xml_vc_custom.dll
e44b11ad1de31c2e123bb04dd9d038ddc07b071df3f83cf9c4ee55c856dde3c7 *wxmsw31u_adv_vc_custom.dll
205c3ae91377b9b2c303f7faa947a4978b308c09711ac26a8c03a29cd54d2ac9 *wxmsw31u_aui_vc_custom.dll
7626628b10f75bc999dbc66190c0832cabf118ede7babc06e419ad3125e72a55 *wxmsw31u_core_vc_custom.dll
091e0c4c7a362d8bbe9d2828c38ddc9d49b260ad822aede7a94daffb67c1226b *wxmsw31u_gl_vc_custom.dll
6f566491714e46ad38c4a02b60ee584a20414475a75bd486dece521e0b8c52cf *wxmsw31u_html_vc_custom.dll
44174abf00f498b2ae83827206dd4d9a961efa6ed8d37b7e37ae34f9731e2926 *wxmsw31u_richtext_vc_custom.dll

My understanding of Visual Studio or whatever it's called is that it's an Electron app; which is to say that it contains a web browser (HTML/CSS/Javascript engine), the web browser contains a sort of operating system for dealing with all kinds of stuff that it is very unfair to force a web browser to deal with, and contained within that are the things that make Visual Studio an IDE.

So yes, I probably wouldn't be terribly happy having Visual Studio on my computer.

I don't care about putting Visual Studio on a Linux machine - it's like performing a lobotomy on a cockroach - and from what I understand it's just a couple sudo apt-get installs to get it. I think I remember you saying it works on Linux.

@Tirlititi I have a new error message, it occurs with all versions of the DLL in the English version of that link.

HadesWorkshop.exe - Application Error
The application was unable to start correctly(0xc000007b). Click OK to close the application.

Tried running it from Powershell both with and without the DLL for more informative error messages, but none were printed.

Would building Hades Workshop help, you think?

If i remember right there are two Moogles in the Evil Forrest.
Spoiler: show
One before the 1st or 3rd Boss fight hidden in a tree stumpand one in front of the Ship where you started, but i think this moogle will not be there from beginning, i think after a certain boss it will be added.

Yep, you're right! I was worried that there were added events requiring constant backtracking. Some modders love that for some reason.

Playing the PS1 version; currently in the Evil Forest with Zidane, Steiner, and Vivi. Is there something I need to do to make the moogle who will accept a letter appear in Alexandria Castle? Does that moogle appear later on, or have I already missed something?

Bit of a long shot here, but I get this error when I try to run Hades Workshop.
The code execution cannot proceed because MSVCP140.dll was not found. Reinstalling the program may fix this problem.

I run Windows 10, 64-bit, however I used BCUninstaller (Bulk Crap Uninstaller) to remove such wonderful applications as the WordPad (Now With Ads!), the People icon, Contacts, Maps, and numerous others which I have thankfully forgotten.

Trying to reinstall the framework which google tells me contains MSVCP140.dll doesn't make Hades Workshop work, so I assume something else is required or a configuration file is broken.

If you know, could you tell me more about what Hades Workshop requires to run on Windows 10? Or should I give up and run it on a Linux machine instead?

Do you have any advice for those who want to rediscover your findings?

I know the world map varies between discs 1 and 2. I would look for files that differ between them.

How is the documentation for the over/underworld polygons and how they are all linked together?

Would modifying over/underworld require additional assembly hacking, or event modification?

How much room does the over/underworld take up? I assume one would need to rebuild the disc image to fit new entries.

FF7 Tools / Re: [PS/PC] FF7 Steam Translation to FF7 PS1
« on: 2020-09-07 08:10:43 »
Any time you fart around with a disc image you should always update the EDC/ECC. I have no idea if this is the cause of your troubles but it has been for me.

Pages: [1] 2 3 4