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

Pages: [1] 2 3
1
Misc. Tools / Re: [FFX] Skill editor - Ronso (v0.3.1.0)
« on: 2023-09-25 09:03:07 »
It's complicated to set up because I haven't had the motivation or drive to spend time and energy on making it easy to use for non-developers. It works with IntelliJ and that's good enough for me and likely most others that have been using it. The answer to "why like this and not like that" is always "first thing that came to mind to make it do what I need it to". Mind you by now the tool *can* read files from an external path, it now has that as its first argument (the <SourcesRootPath>). And far as I'm concerned it won't be a proper tool worth caring deeply about user experience for until it has some edit functionality with a proper UI at least like this Ronso editor, and that's still far off at best, and may be outside the scope of what I myself even want to take on, so who knows when anyone else will take up the task.

Regardless like I said before, dead as this forum may be this is still seriously off topic in here and I made a topic for my own parser here:
https://forums.qhimm.com/index.php?topic=21411.0

It also now contains links to both a built (.jar) version of the parser as well as some parsing output directly as text files. This should give you what you need. And please, don't make me regret making this public in its current state in the first place by bombarding me with complaints over why it's not done in a different way. I've done what I can to share what I'm doing without having to go out of my way to spend time and energy on something I don't want to, and coming in here like you just did certainly does absolutely nothing to motivate me into making it more accessible.

2
Hey there qhimm, figured I'd share a project of mine going on - it's a Java tool that parses and prints out data and script from Final Fantasy X files in readable formats. The intent of the tool is mainly to give enough context into what bytes do what so that you may use a Hex Editor to achieve results you want, though it may yet grow into something bigger or at least hopefully inspire proper tools to be made. What originally started as being my own solo work (however using files from pbirdman's mod to gain some initial insights) has since grown into being more collaborative, getting lots of extra information from other modders on the FFX Speedrunning Discord and Noclip.

Link to the Repo: https://github.com/Karifean/FFXDataParser
Link to a .jar of the Parser (status 25.09.2023): https://drive.google.com/file/d/1oMzROUYfSy4J1oh8U_01FCT4kSeLqSuj/view?usp=sharing

What can you do with it currently?

 - First and most importantly, extract script code from field events, battle encounters and monster AIs and print them in a (more) readable format.
 - Extract and print information on all abilities usable in battle including items.
 - Extract and print information on auto-abilities on gear.
 - Extract and print information on treasure and weapon pickups.
 - Translate text strings to and from FFX formats including parsing entire files.
 - Potentially more to come.

If you're having trouble with the tool setup but still want to see some of the disassembled code of the game's internals, I periodically run the parser across the entire set of field scripts (jppc/event/obj, excluding the /bl/ blitzball folder because it's massive, instead separating them into their own output), encounter scripts (jppc/battle/btl) and monster files (jppc/battle/mon), as well as parsing of all abilities and upload them to my Google Drive; you can find them here:

Field Scripts: https://drive.google.com/file/d/15Tml4Q87ZGJ8NbDvC1nVA-IST4hMPLk2/view?usp=sharing
Encounter Scripts: https://drive.google.com/file/d/15ZjWRhtKVV_wsMNKqPgnGB6UtW7TQq6W/view?usp=sharing
Blitzball Scripts: https://drive.google.com/file/d/12GZAndawUfrAvMKI5uHxBqb4_KX8qDkP/view?usp=sharing
Monster AIs: https://drive.google.com/file/d/1QTdIA_J9VtATPLl7Pkd9iAywAI2ThVkX/view?usp=sharing
Abilities: https://drive.google.com/file/d/1O9y4pXPOfDtNUT7bm5mtW0_5_zJUITCk/view?usp=sharing

Preview:


A lot of this tool's script parsing capabilities are based upon the work of fkelava/peppy and his Fahrenheit github project (https://github.com/fkelava/fahrenheit) and Ghidra project into disassembling the game's .exe file. Major shoutouts to him.

This is a public github project for anyone to contribute to or take anything from, and I welcome assistance in further disassembling the yet unknown data, constants and functions. For now, I hope this tool and parser output will be of use to some people looking for information on this game's internals, like I was looking for when I started this whole thing. Cheers!

3
Misc. Tools / Re: [FFX] Skill editor - Ronso (v0.3.1.0)
« on: 2023-06-14 15:03:38 »
Ah the instructions were a bit wrong. The .java files are source files, there's no .jar already existing in the repository; since you need to bring your own extracted ffx_ps2 folder (pretty sure it'd be illegal to just put those up myself) you do need to generate the executable manually after you add it. I updated the readme.md to give more instructions on how to do that as well as how to then run it.

I don't really do memory editing myself, but your battle flag lists seems to be referring to the same structures as these files:

https://github.com/fkelava/fahrenheit/blob/main/ctables/x_btlactor.ct
https://github.com/fkelava/fahrenheit/blob/main/src/cs/Fahrenheit.CoreLib/x_btlactor.g.cs

That being said, we are kinda misusing this topic at this point. Might need to move this to the Scripting & Reverse Engineering forum from here on.

4
Misc. Tools / Re: [FFX] Skill editor - Ronso (v0.3.1.0)
« on: 2023-06-13 17:08:15 »
Hey, just so you know like I said before you're not the only one who's been trying to figure this out, I've also been collecting and interpreting what these byte structures mean. I'm using it in a little Java project of mine that can parse out the files from the vbf archive directly, you can check it out here if you want:

https://github.com/Karifean/FFXDataParser/blob/master/src/main/java/model/AbilityDataObject.java

The parseBytes and parseFlags functions can give some insight. I guess to answer some of your confusions directly, for example, flag 24 seems to be the Piercing flag, which makes the attack ignore the target's Armored status. Flag 17 I found makes the ability miss if the target is alive. There's a lot more I mapped out, though also a lot more I don't yet know myself, including some things I'm sure must be in there somewhere (such as flags whether an ability is affected by Alchemy and Magic Booster) but haven't managed to place. I also had no idea about the Copycattable flag among some other things such as the meaning of byte 31 (which is actually byte 27 or 0x1B due to the 4 byte shift you identified), so thanks for sharing.

5
Misc. Tools / Re: [FFX] Skill editor - Ronso (v0.3.1.0)
« on: 2023-05-12 19:48:30 »
Seems everyone trying to figure FFX's internals out is kinda scattered all over the place. I've done some work on figuring out the actual data files and scripts of the HD version myself; not in-memory but rather the very files the game loads (you can extract them from the FFX_Data.vbf in the installation, the ffx_ps2/ffx/master is the root for data files), so I can tell you that yeah there's two more skill tables - one more for enemies as you thought, and the other is for items; in the vbf archive, the relevant files are named command.bin, monmagic1.bin, monmagic2.bin and item.bin and are found in the active locale's battle/kernel folder. It doesn't seem like the data structures there match up perfectly to the in-memory ones, unfortunately, but after tinkering with Ronso for a bit myself I figured I'd rather go that route.

There's no in-game limitation on the amount of status effects on an ability, otherwise Sin's "Negation" move would well surpass it.

6
Hello qhimm,

so there's a few ways to change characters' Attack/Magic/Defense/MDefense/Def% bonus values during battle. From what I know they're only controllable through the "Additional Effects" on Attacks, namely effects 0x15, 0x16, 0x17 and 0x1C. Now the problem here is that while 0x15 and 0x1C affect the target of the attack as is right (given that they're from Hero Drink and Dragon Force respectively), 0x16 and 0x17 affect the caster instead. I would like to add magic spells to the game akin to the Persona series' Tarukaja, Rakukaja and Sukukaja spells (if you don't know them, basically think Attack Buff, Defense Buff and Agility Buff) but the fact that these affect the caster instead of the target is a bit of a problematic wrench there. And from what I know there's no other way to affect these stats.

Is there a way to change these Effects so that they affect the target of the attack instead of the caster, like 0x15 and 0x1C? Or is there maybe a different way to affect stat bonus values altogether?

7
It should happen to every character that survives the end of the battle (meaning if they are dead at the end of the battle their limit bar will not be affected, but at that point it should be 0, right?). There may be some cases where this code doesn't activate, but I'm pretty sure it happens any time experience is gained (you didn't have all characters run from battle).

Well that's a problem, since your limit bar is saved as-is in those cases. Can something be done so it works on *all* battles?

8
Hmm... it seems to work only when it feels like it. Like I'm pretty certain I saw the Limit Bar go down at some point, but at another point both Cloud's and Barret's were nearly full at the end of a battle and they were both still that high when I entered the next battle.

9
Thanks man! And yeah I'm aware of the implications of this change, but that's part of the intent.

Too bad about the menu. I was really starting to get into that idea too. Oh well, gonna have to think of something...

10
The plan is to make it so that the Limit Gauge halves for all party members when a battle ends. So if they had a full bar and finish the battle it's now at 50%, if they enter another battle and finish it without getting hit at all, it's going to be at 25%.

11
Goddamnit. Why can't things ever be as simple as one would hope =P

Regarding max HP, I presume there's no way to modify the correct value then? To, like, call an outside script that can actually do it or something?

Regarding the limit bar, hmm, I haven't done direct .exe asm changes in FF7 before (only editing single hex values). Can you point me to a place where I can start educating myself on how to approach this?

12
Hey there. I've just had some ideas for a mod of mine to make the game balance a little different, but unfortunately I've run into problems with them.

First is to have a fraction of all damage you take persist to your max HP for that battle. Easily done with a Post-Attack Character AI script in WallMarket and works fine; only problem is that the max HP value does not update in the battle menu. It works - you cannot heal above the new max HP value - but the menu doesn't reflect that. Anybody know a way to deal with this issue in the PC version?

Secondly, I'd like to halve the party members' limit gauges after every battle to make it more of a challenge to use higher level Limit Breaks effectively. Fortunately there's a Post-Battle Character AI script I can (hopefully) use for that purpose. Unfortunately, I haven't found anything indicating the address on this address list or WallMarket/ProudClod's dat files. Tifa's Premium Heart uses the value for damage calculation so I'm guessing it's readable? Anybody know this one?

13
You describe exactly how I would've liked it to work, but Item Damage Formula is "Power x 16", and the 'Power' of the Attack Command is 16. The user's Level or Strength or Attack Damage are completely ignored.

Hmm, that's a possibility, I don't really know how those formulas work but I'll look into it.

14
So I had the idea of having Barret's and Vincent's guns work similar to FF XII, in that they completely ignore the enemy's defense, always hit, and mostly (in FFXII: completely) run off their own attack stat rather than the user's stats having much/any influence. So I turned to the item formula.

Now of course the problem I had already predicted would appear did indeed appear, which is that the attacks always deal between 240 and 256 damage, because Attack has an attack strength of 16, and nobody cares about the weapon's or character's strength. Is there an easy way to circumvent this problem or would that require rewriting the game's damage calculations? Or is there a good alternative? If it doesn't work out I guess I'll just go with the regular damage formula.

15
I have an answer for the PC side. Is that what you're using?

Even if that's not what you're using I'll explain anyway.
There's a table of bytes located at 0x91EAD0 (0x51D4D0) that is 16 x 10. These are either 0, 1, or 2 (other values will cause graphical glitches). When the Limit attack is chosen this is used to form the reel for the limit attack. 0 is miss, 1 is hit and 2 is yeah!. The entries on rows 3, 6, and 9 are all 0. That will make them all miss. Setting them to other values will re-populate them.

HOWEVER! Here's some bad news. It won't work. Due to restraints on the mechanics (which I won't bother going in to), there can only be 8 attacks chained at a time. Setting third limits will make a maximum of 10 so you would NEVER GET 3-2 AND HIGHER. This happened to me years ago when I was GS-ing the PSX game to enable all limits. If you tell the game Tifa has learned her X-3 limits it will bring up those full-miss reels. Even if you get Yeahs on all of the valid ones, it won't go higher than Dolphin Blow. I never saw Meteor Strike or Final Heaven until I played the PC version and legit'ly taught it to her.
Altering this would require a re-write of some core mechanics that aren't entirely known. It is possible, but not recommended.

Thank you very much! Exactly what I'm looking for. That second part shouldn't be a problem since I didn't actually add new Limit Breaks, but reorganized them so most characters have 3 Level 1 LBs, 2 Level 2 LBs, 1 Level 3 LB and 1 Level 4 LB. With some rebalancing of required HP loss for each Limit Level and added elemental attributes to some of her hits, it's worth thinking about which Limit Level you'll pick. If the enemy absorbs Water you'll want to get the MISS on Waterkick and Dolphin Blow anyways, you know?

16
So I've been experimenting with letting characters have 3 Limit Breaks on the LB Level 1. Problem is, Tifa's reels don't play along. The reel for her third Level 1 Limit Break is always a pure MISS reel. Is there any way to fix this?

17
FF7 Tools / Re: [REL 1.5.0/FINAL] Proud Clod
« on: 2014-04-14 00:17:18 »
I see. Well that's unfortunate.

18
FF7 Tools / Re: [REL 1.5.0/FINAL] Proud Clod
« on: 2014-04-13 13:09:06 »
So I've just noticed I was using this "outdated" version of ProudClod for a while now. This may be unrelated but it seems my formations got quite screwed up (and yes, I did check the scene.bin lookup table in the KERNEL, it's correct). Like for example instead of fighting Airbuster, I suddenly fought three Special Combatants that overlapped (as in, their position was the same). Or sometimes enemies in the back row would suddenly appear in the front (and you'd get an Out of Range if you tried attacking them O_o).

I redownloaded PC just yesterday so I should have the up-to-date version, and I had hoped that this PC simply read and stored values somewhat wrongly, but it seems the problem isn't quite that easily fixed. The strangest part being.. I never even tinkered with the formations at all. Just the enemies.

I'm posting this here because I can't think of anything else that could've caused this. Anyone know a way to fix this?

19
Releases / Re: [REL/FF7] Superboss Rush Challenge v1.1 PC
« on: 2014-01-19 12:11:31 »
I feel I should apologize for that. :( It may be the only tool, but it's not great.

I'll gladly overlook the flaws of the tool in favor of what the tool makes possible.

Quote
Also, does this affect the other boss encounters or is this just a battle arena battle string?

This does affect the actual encounters with the bosses in the main game. The battles are just together in one long string, Hojo-style.

20
Releases / Re: [REL/FF7] Superboss Rush Challenge v1.1 PC
« on: 2014-01-19 02:42:27 »
Do you have a list of how many bosses are fightable?

Guard Scorpion, Air Buster, Aps, Reno, Sample:H0512, Hundred Gunner, Heli Gunner, Rufus + Dark Nation, Motor Ball, Midgar Zolom, Bottomswell, Jenova:BIRTH, Dyne, Reno + Rude, Gi Nattak, Materia Keeper, Palmer, Red Dragon, Demon's Gate, Jenova:LIFE, Schizo, Jenova:DEATH, Corel Train, CMD Grand Horn, Carry Armor, Rude, Diamond WEAPON, Elena + Reno + Rude, Proud Clod, Lifeform Hojo N, Jenova:SYNTHESIS, Sephiroth.

Quote
Have you thought about moving them to previously empty or dummied out scenes so you could have this as an optional add-on to the game instead of a conversion? In theory you should be able to copy entire scenes and just adjust the battle called for that.

Well I kinda started modifying some bosses and it eventually evolved into what it became. Had I from the start decided to make ths a mod, I might've done that. Although I'm not sure if there would've been enough free spaces...

Quote
How long did it take you to create the new attacks, AI and(?) animations(if any)?

No new animations, just a lot of ProudClod'ing. As for AI, I always tried to at least keep the spirit of the original battle a little bit. Take Guard Scorpion for example. He still uses his Search Scope, but for one, it reduces your HP to 1, secondly, he casts Bolt3 on himself during his Tail Phase, and third, his Rifle inflicts Berserk which might cause a character to trigger his counter. Aps was a lot simpler, I just adjusted his abilities a bit to make them more unique and had him absorb Water. From that point it was just determining when he should use what.

Some bosses had an entirely redone AI and attacks, like Rufus. A lot of the multi-enemy battles are similar in nature though, there's one that takes care of the other while one is the big hitter.

I spent a lot more time planning than coding. All in all, I'd say one boss on average took around 5 hours' time.

21
Releases / Re: [REL/FF7] Superboss Rush Challenge v1.1 PC
« on: 2014-01-17 11:26:42 »
Did you give the NCPs dialogue choices and upon selection pull a battle from the scene.bin?

Exactly.

Quote
What are you doing about the 'set music for battle'?

Birth of a God plays during the battles. But if you don't like it, PC FF7 always gives you the option to turn off the music and have your own playing in the background.

Quote
Did you change the background layers for the encounters in the scene?

Yes, the background is the Battle Square Arena.

Quote
Is this monster hall triggered by a gamemoment variable or is it technically always available?
Do you have to have fought a boss before you can fight the super boss version? (again, gamemoment variable)
Will the super boss version replace the boss in his original location if you play the game normally?(Since there are only so many bosses and there are actually a lot of empty slots it should be possible to combine this)

Since this mod is made to be played with a high-level team at the end of the game, the Hall of Battles is always available and yes, the bosses replace the original versions - except for the final boss battles because I wanted you to still be able to play normally as long as you're in the endgame. I think if you try talking to the NPCs in there while you're in the Shinra uniform on your first visit to here, the game is likely to lock up.

If you were to try playing a new game with these changes intact, Guard Scorpion will probably be an insurmountable barrier.

22
Releases / Re: [REL/FF7] Superboss Rush Challenge v1.1 PC
« on: 2014-01-16 22:18:37 »
Junon's Hall is correctly "Experts' Hall"  The Beginners' Hall is in Midgar :)

Quote from: Junon, FF7
“This is the Beginner's Hall (Intermediate)!”

That's good enough for me.

23
Releases / [FF7PC] Superboss Rush Challenge (v1.1)
« on: 2014-01-16 21:15:14 »
Final Fantasy VII - Superboss Rush Challenge

Version 1.1, Made by Karifean

DOWNLOAD VERSION 1.1

File Type: RAR, includes one EXE file (patcher) and one TXT file (readme).

What is this?

This is a slight modification of Final Fantasy VII PC, simply changing the "Hall of Beginners" in Junon to a "Hall of Battles". In there, you can fight all the storyline bosses in order, but they've all been made into superbosses! Do you think you can beat them?

The idea is that you install this mod, load up your best save file and give these bosses a try. There're no rewards for it, it's just to challenge yourself. All bosses' AIs and stats have been reworked. Many of them still act in a similar fashion as their original versions did, but none are the same. How far can you get before you get (your first) Game Over?

I strongly urge you not to use any of the 'forbidden' items or materia. They are classified as such for a reason.

How to install this mod?

The following files from an English FF7 PC installation are required:
scene.bin, KERNEL.BIN, flevel.lgp, battle.lgp

Copy them into a separate directory, all together, and then let the patcher run. Replace the original files with the patched ones (don't forget to make backups of the original files!) and you're done!

Note: Even though the KERNEL.BIN must be updated, this is solely for the scene.bin lookup table. Character stats and materia functions etc. are completely unchanged.

Further information can be taken from the Readme.

Special Thanks goes to SegaChief, XeroKynos, NTIFC1 and GeneralIronside for helping when I needed it. You guys are awesome!

Screenshots

Rufus has been playing some FFX-2.


Reno is not oblivious to the power of his Pyramids.

24
So I'm trying to make a custom Jenova SYNTH battle and I'm having some trouble: one of the tentacles is in the wrong spot. As in, both tentacles' "target" marker are on the right tentacle.

Now I don't quite understand what even places the markers in the first place. All 3 instances of JSYN are in the same location, at least in the Formation preset, yet I assume via AI their marker is replaced to where, graphically, the tentacle is located. One line of code seems to be doing this:

Code: [Select]
Self.Unknown(4278) <- 16
This applies to the JSYN instance with FormationNumber == 1. For the instance with FormationNumber == 2, this variable is set to 20 instead. Finally, the instance with FormationNumber == 0, in other words the main body, has it set to 3.

This is the case both in the original JSYN battle as well as my own. Yet the problem still occurs.

If you need it for better understanding, here is the Pre-Battle Routine of my homemade JSYN:

Code: [Select]
0x000LocalVar:0020 <-  (ActiveMask.FormationNumber == 0)
0x00ELocalVar:0040 <-  (ActiveMask.FormationNumber == 2)
0x01CSelf.Flag:Unknown(00001000) <- 1
0x026 If ( (Self.FormationNumber == 0) )
0x026 {
0x033 Self.Flag:Unknown(00001000) <- 0
0x03D Self.Unknown(4278) <- 3
0x047 LocalVar:0020 <-  (ActiveMask.FormationNumber == 1)
0x055 }
0x055 Else
0x055 {
0x058 If ( (Self.FormationNumber == 1) )
0x058 {
0x065 Self.Unknown(4278) <- 16 (MBarrier)
0x06F Self.MHP <- 150000
0x07B Self.HP <- 150000
0x087 }
0x087 Else
0x087 {
0x08A LocalVar:0040 <-  (ActiveMask.FormationNumber == 1)
0x098 Self.Unknown(4278) <- 20
0x0A2 Self.MHP <- 150000
0x0AE Self.HP <- 150000
0x0BASCRIPT END

Edit:

Seems the problem lies elsewhere: a test message revealed that the query (Self.FormationNumber == 1) never returns true, which means that both tentacles have their Unknown(4278) variables set to 20, which makes them overlap. Now to find out just why the condition doesn't work...

Editga:

Solved it, the problem was that I called on the FormationNumber with the "02" command instead of the "01" command. Silly me. Works fine now.

25
So basically, use the BitCount(Self.FormationNumber) == ActiveMask.FormationNumber variant if there are multiple instances of one enemy and you want to refer to the first of them? Or... in the reverse case, there are multiple instances of your own enemy type, then only the first of you can successfully refer to the boss (the monsters in the Sample:H0512 fight do this)?

Edit: And one thing that would definitely help - can you refer to other instances of your own Enemy ID by using the ActiveMask.EnemyID method and then doing a bitwise AND with NOT Self? I haven't quite understood how exactly masks and lists work yet. Edit2: Okay, just found that Nibel Wolf does that so it should work.

Pages: [1] 2 3