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

Pages: [1] 2 3 ... 17
Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-11-14 18:34:12 »
@savokgear: You ask for changing the battle engine in-depth. Hades Workshop cannot do that. Albeoris's Memoria tool is more suited for that but it is unfortunatly not compatible with HW yet.

@Loseless: The important line, defining the Magic Stone progression, is this C# line:
Code: [Select]
int num3 = (int)fF9LEVEL_BASE.cap + lv * 4 / 10 + (bonus.cap >> 5);"fF9LEVEL_BASE.cap" is the base number at lvl 1 that you can set in the "Party->Stats" panel.
"lv * 4 / 10" means that you'll get +0.4 Magic Stone every level (so +1 after 3 levels and +1 after the next 2 levels).
"bonus.cap >> 5" is useless. It may add 5/32 = 0 Magic Stone (since it is an integer division) in certain situation (I think that's when your character has 0 available Magic Stone but I'm not sure). For info, "X >> n" is the same as "X/(2^n)" mathematically.

So in term of CIL Code that you can see and edit in HW, the easy way is to change those "4" and "10" numbers:
Code: [Select]
ldc.i4.4 -> Change it to ldc.i4.s 9 for instance
ldc.i4.s 10 -> Change it to ldc.i4.s 2 for instance
With these figures, you would get +4.5 Magic Stone every level (so +4 Magic Stone on odd levels and +5 on even levels).

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-11-08 16:39:24 »
No, that's not really possible. These numbers are divided by 2 for the minimal randomized stat. I didn't add a limit for fun.

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-11-06 21:07:37 »
Yes it does. However, for the PSX version, not all the battles are present in all the discs. So if you opened disc 1 you only have the bosses of disc 1. Same for the other discs with a few exceptions (Gizamaluke is present on all the discs because the Grotto fields are still there as well).

Also, no need to quote a whole message of 215 lines (yeah, I checked that) for a 3 lines long reply. That's like subcontracting your speech, somehow :p

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-10-20 20:39:40 »
About the ID, I'll do things like that if I think about it.

About the jump animation, they are very special: the script code "SetJumpAnimation" is the only one that doesn't check if the animation is loaded in the RAM. In case that the animation was not loaded, it bugs instead of loading it. You can use things like:
Code: [Select]
SetStandAnimation( JUMP_ANIM )
SetStandAnimation( STAND_ANIM )
SetJumpAnimation( JUMP_ANIM )
This will force the jump animation to load up in the RAM so it can be used.

The "Preloading" data should be the one that preloads the animations if things were done in a clean way. But preloading data for Steam is not very good for now (you can't add a model and its animations to the preloading list).

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-10-16 09:47:08 »
The copies are for the remapping of the buttons: you can remap them in FF9 config menu just like the others. I think the "Ex" version is the remapped button while the normal is the controller button ignoring the remapping.
I don't think there's any limit on the code you can put/execute in a loop function. However, I thought that maybe "IsButton" doesn't work with the directional arrows and only "IsButtonDown" works with them.

The theoritical difference can be seen in this kind of loops:
Code: [Select]
while (1) {
    if (IsButton(16)) {
        AddItem( 1, 1 ) // Add 1 Dagger everytime the player presses "Up"
    if (IsButtonDown(16)) {
        AddGil( 1 ) // Add 1 gil every frame as long as the button "Up" is pressed
In practice, maybe they disabled the check of "IsButton" on the arrows for some reason. They use "IsButtonDown" for sure for special windows such as the Treno Action bidding (for selecting the amount of gil you want to bid).

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-10-14 12:57:34 »
Thanks you Satoh for this other animation list :D

I think the "IsButton" worked well for directions in the PSX version. That'd be a shame if they don't work anymore :/
Here's a list of the buttons :
Code: [Select]
0 : Select
3 : Start
4 : Up
5 : Right
6 : Down
7 : Left
8 : L2
9 : R2
10 : L1
11 : R1
12 : Triangle
13 : Circle
14 : Cross
15 : Square
16 : Cancel
17 : Confirm
19 : Moogle
20 : L1 Ex
21 : R1 Ex
22 : L2 Ex
23 : R2 Ex
24 : Menu
25 : Select Ex
Use the power of 2 for the number in the script.
For instance, "8" corresponds to 2^3 -> Start button. "40" corresponds to 2^3 + 2^5 -> Start or Right button.

You see that there seems to be duplicates: there is "Square" but also "Moogle". In fact, the first will always react to a square button input while the second one will react depending on the player's settings (in FF9 config menu). Same for the L/R buttons and there "Ex" counterpart.
Maybe you can try both "Select Ex" and "Select". However, I know that my controller's select button has trouble with several games and FF9 is part of them.

The "Start" button, at least in PSX, is triggered if the player pauses the game and then unpause it, but it triggers only once.

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-10-07 09:35:05 »
Thank you very much Satoh :)
I'll need names for the animations but knowing with which animation code they are used will be of a great help! Not to mention which model(s) use them.
As I said some time ago, there is a database for animations inside the game's source code, but I need mostly naming them. You can find that database here (search for "AnimationDB"):

@TW_Bear: For changing the dialogs, it's in the "Environment -> Texts" panel. You need to double-click on a text to edit it.
However, there is already a russian translation out there, using Albeoris's tool, as Fraggoso said ^^'

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-10-06 08:17:41 »
@gledson999: No, very doubtfully. I guess you *could* simulate an "encounter none" and a "9999 damage" booster with tedious work (you can handle encounters and there rate in field scripts and you can know when a button is pressed, and also you can change the damage formulas in MIPS code). I wouldn't recommend to try it anyway, it's not worth the effort by a large scale.

@Weisshuf: There is a Max HP cap for enemies and it can't be just removed like this. It can however be bypassed using a trick in the AI script:

Doing damage twice can be done in the "Environment -> Spell Animations" panel. When editing the animation sequence, you should spot two important line: "effect point -> damage point" and "effect point -> figure point". The first is about dealing damage and spell effects (such as statuses), the second is used afterwards for displaying the damage number. You can see how I did that with "1000 Needles" by opening my mod with HW for instance. You should care about a few issues with adding more damage point if you're modding the PSX version:

About Status Sets, they work like the "Primary Stat Sets" for the items or the "Card Sets" for the Tetra Master decks: there are a limited number of sets and changing a set will change it for all the objects using that set.
If you want to use a whole custom status set (let's say "Trouble + Freeze") for only one custom spell, then you need to choose an unused status set in the list (all the "No Status" at the bottom are unused) and then use "Edit Status Set". This way you won't change anything for the other spells (by the way, theses sets are shared with the enemies spells).

Hum. If I recall correctly, Fraggoso's HD mod came after the last update of Alternate Fantasy, so any assembly file compatible with both should be v4.3 of AF.
If you're talking about the file in this post, it's not for compatibility with Fraggoso's mod. It's for a "Normal difficulty/gameplay but with recruitable Beatrix" version.

See there for an assembly file that's compatible AF + HD mods. And thank Fraggoso for it ;)

No I didn't add new bosses. New Threat really is a huge piece of work (and FF7 modding community is older and better than FF9 modding community). Maybe for a future version.

Unfortunatly not: increasing the steal rate is something that requires to change the engine in the "CIL Code" panel. And that panel is not working very well. In particular, the method in which steal rate is defined ("btl_calc::CalcMain") is a huge method that can't be edited because HW would crash.

It's possible to increase the steal rate using Albeoris's Memoria tool but it's not compatible with this mod.

Yep she can.

Thanks Murasame & Levantine :)
It only looks like it works with the french language but that's not true:
1) the cutscene modifications (hidden scenes, recruiting Beatrix, etc...) are not present if you choose the french language,
2) some bosses will act very strangely in battle and it may even crash the game (early game, there's a fight against Steiner who uses a death strike way too often, or the Sealion fight that is unbalanced...),
3) and of course, the names and descriptions of the different spells and items will not fit the change.

So yeah, I would still recommend you to switch to english at that point. Also, playing the game in english makes you realize how the french translation was good sometimes :p

Hi Murasame,
You can see the Wrist's abilities at the very start of the game:
- if it only teaches Flee-Gil, then the mod is not installed,
- if it teaches both Flee-Gil and Antibody, then the mod is installed.

Also, on the Steam version, the little girl who picks up Vivi's ticket says different things: "Here!  You dropped your ticket." by default, and "Here!  You dwopped your ticket." in the mod (the accent was in the PSX version and they removed it for some reason in the port ; I've put it back in the mod).

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-09-05 12:56:27 »
No problem, Blues. I have indeed no clear idea on when that would happen and I'm not going to make wild guesses (I'm already wrong on those when it depends solely on myself... I can only be extremely wrong since it depends on both Albeoris and me there).

I couldn't reproduce the crash on the World Map panel though. That panel works properly for me. Can you confirm that opening an un-modded game, then selecting the "English (US)" language, then immediately going to the "Environment -> World Maps" panel results in a crash? If it doesn't crash, please try to find how you got that crash so I can reproduce it.

You can't correct those errors in the World Map panel anyway, though. The "mist covers the whole planet early game" problem was already there in the PSX version and I'm quite sure that it wouldn't be easy to edit a world map such that only a part of it is misted.

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-08-24 09:37:57 »
@ammudava: Disabling the cheat is part of the mod. If you want to play with cheats, you have to change the mod: you can do that by opening an un-modded game with HW, importing the .hws file ("Open Mod") and then go to "CIL Code" -> "Macros" -> "Disable Cheats" and disable the macros. Then "Save Steam Mod" creates files similar to my mod but with cheats re-enabled.

@blues: The plan is indeed to wait for Memoria compatibility for CIL code. You can do very small tweaks to the game's engine but as you say, there are bugs and I don't plan to fix them since editing the C# code will be 10x better.
I will fix that copy/paste bug for the next release. I have no idea why there is such bug but you might want to use the version 0.37c of HW in which this bug shouldn't occur. It is the only way to add new spells/enemies.
Thanks for the pinpointing the misspell of this "this" ^^

@Fransguf: I guess it will be doable by editing the C# code, so you have to wait for HW-Memoria compatibility.

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-08-15 12:14:53 »
@sutebenukun: As said, the whole btlcalc source code is available here:
It contains everything hardcoded for the spell effects in battle.
The Magic Sword requirement is different since it is about the availability inside the menu, and not the effect during the casting of the spell.
Albeoris has a good part of a slightly modified source code of the game on his github project there:
You see that there's a btl_cmd::DecideMagicSword function and a BattleHUD::DisplayCommand function that are handling the Steiner/Vivi magic sword combination.
You may also get the source code of the game using a CIL decompiler (JetBrains DotPeek is free but it can only show you the code, not modify it).

@GARDIN: I need to have a list of the musics and their related ID for that. If you want to do it, you're more than welcome (see this post).

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-08-13 20:05:25 »
@Tedrainbow: it's not possible for the PSX version. It's part of the MIPS code, but not even the one that is available using HW.

@davaammu: maybe you didn't select the english (US) language. Either that or you didn't install the mod properly. I got your messages but I have been away for some time (and will probably be away some more).

@MDS0LDI3R: No you can't do that. The Memoria save editor can do that.

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-07-22 22:19:04 »
You're welcome :)
Yes, that last part is in the function "Ragtime_Mouse_Loop".

However, attacking a defensless creepy animally show leader doesn't seem right to me :/

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-07-22 21:37:03 »
The correct/wrong answers are in the functions "True_CounterEx" and "False_Loop". Specifically these lines:
Code: [Select]
if ( 27789 & ( 1 << questionid ) ) {
    set endbattlestep = 6
} else {
    set endbattlestep = 4
"endbattlestep = 4" makes the Ragtime Mouse cast its "Correct" reaction while "endbattlestep = 6" is the wrong answer.
The number "27789" encodes the correct/wrong answers as bitflags. If you look at the binary writing, you have:
27789 (decimal) = 0x6c8d (hexadecimal) = 0110 1100 1000 1101 (binary)
That means, reading the binary from right to left, that the questions with ID 0, 2, 3, 7, 10, 11, 13 and 14 must be answered with "False".

Notice that I added a couple of lines right above it for my mod:
Code: [Select]
if ( questionnumber == 16 ) {
    set endbattlestep = 6
} ....
If it's the 16th time that you see the Ragtime Mouse, attacking any of "True" of "False" will be a wrong answer. So what you have is normal: you must do something else to answer the riddle. It's a kind of Epimenides paradox.

For his drop, there's a subtility in his script (schematically):
Code: [Select]
if ( (successrate >= 80) && (successrate < 100) ) {
    set true[DEFEATED_ON] =$ 1
} else {
    set ragtime_mouse[DEFEATED_ON] =$ 1
So you're getting the drop of the enemy "True", which is a dark matter in my mod until you change it. The Ragtime Mouse drops a dark matter + Exp + Gil.

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-07-21 09:04:18 »
Thanks Dan.
The field cameras are in the same file as the tiling data (what defines the different layers of the backgrounds): the ".bgs.bytes" file (in the p0data1X archives). I should be able to read them properly now. I'll do that for the next update (maybe not export the cameras, but at least use them as the default cameras in the field script window).

Tools / Re: [FF9] General editor - Hades Workshop (0.38)
« on: 2017-07-20 18:37:29 »
In the panel "Environment -> Fields", search for the field "Blue Narciss/Bridge" near the end of the list (there are 2 of them, select the top one) and click on "Edit Script".
You'll see a list of functions on the top-right of the window: select the "Function Main_Loop". Browse the function's script ; around the middle of that function, you can find these lines:
Code: [Select]
        set Setting_OptionalQuina = 1
        set Setting_DaggerDepresses = 1
        0xDB( 2, 0 )
        0xDB( 7, 0 )
        set Setting_MPx4 = 0
        SetHP( 0, 9999 )
        SetHP( 1, 9999 )
        SetHP( 3, 9999 )
        SetHP( 2, 9999 )
        SetHP( 4, 9999 )
        SetHP( 5, 9999 )
        SetHP( 7, 9999 )
        SetHP( 6, 9999 )
        SetHP( 8, 9999 )
        SetMP( 0, 999 )
        SetMP( 1, 999 )
        SetMP( 3, 999 )
        SetMP( 2, 999 )
        SetMP( 4, 999 )
        SetMP( 5, 999 )
        SetMP( 7, 999 )
        SetMP( 6, 999 )
        SetMP( 8, 999 )
Replace that "set Setting_DaggerDepresses = 1" by "set Setting_DaggerDepresses = 0", then click on "Parse" and then confirm.

Unfortunatly, it's not enough: you need to do the same thing for a few other scripts (the game turns that flag on regularly even if it's supposed to be on already). Search for that line "set Setting_DaggerDepresses = 1" in the following field scripts:
- function "Zidane_54" of the field "Palace/Sanctum",
- function "Zidane_Init" of the field "Esto Gaza/Altar" (1st one),
- function "Eiko_Init" of the field "Gulug/Path" (4th one, right under the "Well").

Tools / Re: [FF9] General editor - Hades Workshop (0.37c)
« on: 2017-07-20 16:23:47 »
Nice to see that you solved your problem without me Meian ^^

Update to v0.38 :
- Updated the UI libraries ; the program opens faster,
- Improved the 3D model exporters (see below),
- Improved the "Preferences" and configuration file:
--- In the "Preferences" window, you can now select the background resolution in order to display/export the backgrounds properly even with a mod. By default, the resolution is 32 but you should set it to 64 if you use Fraggoso's or Meru's HD mod.
--- Most of the options are saved in the "HadesWorskshop.conf" file, meaning that the program remembers when you change the settings.
- Fixed a bug making the world map battle spot changes inefficient for the Steam version,
- Fixed a few bugs with the importation of files in some archives.

The .dll have changed: you need to extract them and you can dump the ones used by the old versions.

So, I am sorry for not making the importer yet but it was a pain to install, learn and use the FBX libraries. You can now export the 3D models in the following formats:
- FBX binary version 7500,
- FBX text version 7500,
- DXF,
- DAE,
- OBJ.
It seems though that only the two FBX versions formats are handled without problem. The OBJ version also works fine but doesn't have any bone or animation.
Blender unfortunatly can't import those FBX files (to my knowledge) and I couldn't find a nice and free replacement for it. Autodesk has everything you need, but it's not free most of the time. You can use FBX Review to see the models (but not edit them) and you can import them in Unity. If anyone knows a free FBX editor (or converter), that would be very nice.

In order to export a 3D model, it's like for the last version: in the Unity Assets Viewer, verify that you have some "Automatically Convert 3D Models" option checked, select a file ".fbx" of type "1 (Game Object)" in one of the archives, and then right-click -> export selection. You can export the models from the archives p0data2 (weapons and battle scenes), p0data3 (a couple of World Map objects) and p0data4 (everything else: characters, accessories, monsters...). You need to export the related textures separatly.
It creates a single .fbx file containing the model + its skeleton + all its animations (most of them are automatically extracted from the p0data5 archive).

The models as they are exported are near complete. They only miss the texture animations (for Sealion's core, for instance (there are few of them)). Also, the material properties are mostly exported as custom properties and they can be ignored by the FBX editors (maybe Unity uses them): it mostly means that you'll see black textures when they should be transparent, which is also fairly rare.
It may also happen, for some reason, that the name of the texture(s) is not found and thus you can't see the textured model. For the FBX text version, you can fix that by opening the model with a text editor and specify the texture's name in the field "Path" of the related "Video" clip. Otherwise, a good editor allows you to select a texture.

The models that are not in the p0data4 archive are upside-down. It seems that everything in the p0data2 and p0data3 archives are upside-down since that's also the case for the textures. Nothing troublesome.

Finally, about the animation speed, it seems that the field models are properly timed but the battle models are twice faster than they should. For what I understood, all the models are timed in 60 fps but since the battles are played in 30 fps, they had to fasten the animations.

That's all there is to know. If you want to help to list the different models' animations, now is the time ^^
I saw that there are more unused animations than I thought: the party members have some unused animations and I saw a couple of enemy models with unused ones as well. All in all, it's very rewarding to be able to see all these animations :D

Next, I will do that model importer. It should take less time since I already have the file formats (both the FBX and the game's internal format). I will also see how the texture animations are made.

This last sentence is false. The escape chance is disabled during an enemy attack. Casting (long) spells does help to run away.
I'm not sure about the battle speed though. Maybe the check is slowed as well.

Tools / Re: [FF9] General editor - Hades Workshop (0.37c)
« on: 2017-06-28 15:26:29 »
Walkmesh contains a few informations about "how the objects behave" on each triangles. For instance, there is a data about which kind of step sound should be used when walking on it, or whether it is in the shade or not.

Also, each triangle has specified neighborood to let the characters moving from one triangle to another. Most of the time, that can be computed automatically from the mesh (if there is a common edge or not), but you may want to not make some connections, or on the contrary add connection between distant triangles to make kind of teleporters (though that could be better done by script).

Here's the known walkmesh format so far:
Code: [Select]
struct FieldWalkmeshDataStruct : public ChunkChild {
uint32_t magic_walkmesh;
int16_t unknown1;
int16_t offset_x2;
int16_t offset_z2;
int16_t offset_y2;
int16_t offset_x;
int16_t offset_z;
int16_t offset_y;
int16_t offset_x3;
int16_t offset_z3;
int16_t offset_y3;
int16_t unknown4;
int16_t unknown5;
int16_t unknown6;
int16_t unknown7;
int16_t unknown8;
int16_t unknown9;
int16_t active_walkpath;
int16_t active_triangle;

uint16_t triangle_amount;
uint16_t triangle_offset;
uint16_t edge_amount;
uint16_t edge_offset;
uint16_t animation_amount;
uint16_t animation_offset;
uint16_t walkpath_amount;
uint16_t walkpath_offset;
uint16_t normal_amount;
uint16_t normal_offset;
uint16_t vertex_amount;
uint16_t vertex_offset;

// As many as "triangle_amount"
uint8_t* triangle_unk1;
uint8_t* triangle_stepsound;
uint16_t* triangle_unk2;
uint16_t* triangle_walkpath;
uint16_t* triangle_normal;
uint16_t* triangle_unk4;
uint16_t* triangle_unk5;
uint16_t* triangle_vertex1;
uint16_t* triangle_vertex2;
uint16_t* triangle_vertex3;
uint16_t* triangle_edge1;
uint16_t* triangle_edge2;
uint16_t* triangle_edge3;
uint16_t* triangle_adjacenttriangle1;
uint16_t* triangle_adjacenttriangle2;
uint16_t* triangle_adjacenttriangle3;
int16_t* triangle_centerx;
int16_t* triangle_centerz;
int16_t* triangle_centery;
uint16_t* triangle_unk9;
uint16_t* triangle_unk10;

// As many as "edge_amount"
uint16_t* edge_flag;
int16_t* edge_clone;

// As many as "animation_amount"
uint16_t* animation_flag;
uint16_t* animation_frameamount;
int16_t* animation_framerate;
uint16_t* animation_counter;
int32_t* animation_currentframe;
uint32_t* animation_frameoffset;

// As many as "walkpath_amount"
uint16_t* walkpath_unk1;
uint16_t* walkpath_unk2;
int16_t* walkpath_minx;
int16_t* walkpath_minz;
int16_t* walkpath_miny;
int16_t* walkpath_offsetx;
int16_t* walkpath_offsetz;
int16_t* walkpath_offsety;
int16_t* walkpath_unkx3;
int16_t* walkpath_unkz3;
int16_t* walkpath_unky3;
int16_t* walkpath_unkx4;
int16_t* walkpath_unkz4;
int16_t* walkpath_unky4;
uint16_t* walkpath_triangleamount;
uint16_t* walkpath_trianglelistoffset;
uint32_t** walkpath_trianglelist;

// As many as "normal_amount"
int32_t* normal_x;
int32_t* normal_z;
int32_t* normal_y;
int32_t* normal_overz;

// As many as "vertex_amount"
int16_t* vertex_x;
int16_t* vertex_z;
int16_t* vertex_y;

Pages: [1] 2 3 ... 17