Skip to content

Some features and improvements#1255

Draft
DV666 wants to merge 48 commits intoAlbeoris:mainfrom
DV666:FeaturesAndImprovements
Draft

Some features and improvements#1255
DV666 wants to merge 48 commits intoAlbeoris:mainfrom
DV666:FeaturesAndImprovements

Conversation

@DV666
Copy link
Copy Markdown
Collaborator

@DV666 DV666 commented Jul 30, 2025

I made this PR for many little ideas i want to make... i note them here and i will work on it when i get time.

✅ New hack for AllCharactersAvailable (option 2) : keep the default name for the characters.
⚙️Need to improve the SwapFieldModelTexture feature : precise the actorId to be more precise... (or maybe NCalc ?)
✅Need a new NCalc to check if a player has a SA or not (different to HasSA).... ?
❌Need to improve some btl_scrp functions for my NPC debug => Will be useful later for a kind of "Debug room project".
Editing a variable, give all items, learns all SA on a characters, etc... (EDIT: For an another update i think....)
⚙️Feature to hide SaHidden in player's menu (need an option in Memoria ? new parameter for SaHidden ?)
✅Need a new feature in DictionnaryPatch.txt to add specific parameters for custom model (#1252)
Tirlititi suggests this format => 3DModelParameter MODELID HEIGHT RADIUS BONENECK
Source : https://github.com/Albeoris/Memoria/blob/main/Assembly-CSharp/Global/ff9/Battle/FF9BattleDBHeightAndRadius.cs

❌Memoria supports folder instead of an .ogg file for music : meaning you can put a kind of "playlist" for a specific ID. (EDIT: i will do that later... don't have enough time rn).
✅Add a new parameter for Libra => Show stats on the target and loot earned.
BanishSA show the SA, even if the player hasn't teach the SA on the character.
⚙️When altering HP or MP via SA with a piece of equipment, the player can't loose HP/MP, even if he didn't equip it.
✅Need to replace btl_abil.CheckCoverAbility position for monsters, when using Cover :
target.pos[2] += target.bi.player != 0 ? -400f : 400f;
✅ Need to create a HardDisable argument for AA (AbilityFeatures.txt)
⚙️ Remove the hardcoded limit for EffectElement and EnemyCategory
✅ Idea for Sitri, a way to order manually AA and SA in game (in the menu player)
✅ Added a small safety feature to disable a player's SAs when loading a save, if they no longer have them in his .csv

@WarpedEdge
Copy link
Copy Markdown
Contributor

WarpedEdge commented Aug 4, 2025 via email

@DV666 DV666 force-pushed the FeaturesAndImprovements branch from 13c783a to 40dbbae Compare December 17, 2025 16:40
@DV666
Copy link
Copy Markdown
Collaborator Author

DV666 commented Feb 5, 2026

➡️ DisableNameChoice new hack keep default name

As discussed with Tirlititi, this is an option to force/display the default character names.
Very useful for demonstrations or videos where you want to keep the original names intact.

➡️ overloadedMethod.OnBattleScriptEnd fixed

The Overload was misplaced and didn't trigger for players (due to the target.bi.player != 0 check)... my fault -_-

➡️ [WIP] Fix for DisplayParameter() in EquipUI.cs

Fixed a bug involving the SAForced system, where previewing certain equipment would unintentionally disable specific SAs.

➡️ Fix Cover for monsters

Cover works for monsters now... but the visualization was originally designed for players (meaning the coverer would face away from the camera and stand "behind" the target).
This logic has been adapted so monsters position themselves correctly relative to the party.

➡️ HasSupportAbilityInData

A new NCalc function to check if a character currently "possesses" an SA (meaning either mastered OR currently learning via equipment).
I'm not a huge fan of the current implementation method... not sure if it can be improved yet.

➡️ HardDisable feature for AA (in battle and now, in menu too)

Based on the CMDs hard disable system, but applied to Active Abilities (AAs).

➡️ Clean FF9BattleDBHeightAndRadius code =>Now compatible with DictionaryPatch.txt`

TargetBone for 3DModelParameter

Cleaned up this code block: it is now possible to manually add entries, specifically for custom models.
Format: 3DModelParameter MODELID HEIGHT RADIUS BONENECK TARGETBONE

TargetBone is a new argument I added, specifically for the targeting cursor anchor (which defaults to bone000). This allows remapping it, which is especially useful for custom models where bone000 isn't located at the "waist".

➡️ Custom .seq for AttackSpecial()

It is now possible to use custom .seq files for special attacks. Very useful for complex battle intros (like the boss in my Trance Seek CD4 preview video, for example).

➡️ SFX.EndBattle for Soft Reset

Occasionally, after a Soft Reset, the game could "softlock" entering a battle (at init). I stumbled upon this function by chance and added it to the Soft Reset routine... hoping this fixes the bug?

@DV666
Copy link
Copy Markdown
Collaborator Author

DV666 commented Feb 5, 2026

➡️ Extending save slots to 100 (To validate) + Custom Name for Save folder

This is a really cool feature I finally managed to implement.
Over the years, many mods have been released for the Steam version of FFIX, and switching between save files for different mods (especially gameplay overhauls) has always been a hassle.

Personally, for Trance Seek, I use nearly every single slot to maintain full access to the mod for testing... and with the upcoming Disc 4 content, the need for space is only going to grow.

So, following requests from the community, I have increased the save slot limit: basically, it's now multiplied by 10 (100 slots total).

  • Save Pages: It is now possible to navigate between different "pages" of save slots.
  • Storage: These new saves are identical to "vanilla" files but are stored in separate subfolders within EncryptedSavedData (e.g., ExtraSave_5).
  • Custom Naming: You can now assign a custom name to each of these pages/folders, effectively allowing you to have dedicated save lists for different mods (e.g., one page for Vanilla, one for Trance Seek, etc.).
2026-01-05_23-04-41.1.mp4

@DV666
Copy link
Copy Markdown
Collaborator Author

DV666 commented Feb 5, 2026

➡️ EquipmentHelper feature for AbilityFeatures.txt Optimization + Cache "Basic" NCalc formulas (WIP)

These two points are primarily focused on optimizing Memoria.

When modders create conditions based on equipment to alter SAs (using FreeSA, BanishSA), stats, or other elements... they usually have to rely on the "Permanent" tag.
However, this list can grow very quickly depending on the mod's complexity.
You can easily end up with 50+ Permanent features, leading to a major issue: significant lag in the player's Menu HUD (out of battle) when scrolling through equipment.
This happens because Memoria has to recalculate ALL the "Permanent" entries registered in AbilityFeatures.txt every single time.

My idea was to create an EquipmentHelper to link NCalc formulas directly to specific equipment IDs, especially for the equip menu.
So, instead of Memoria evaluating 50+ Permanent conditions for every item, it will check items individually to see if a specific feature is attached to that specific item.
This optimization drastically reduces menu lag when there are too many Permanent entries declared.

The format is as follows:

>Item_Equip 11003
Permanent
[code=Condition] !(HasLearntSupport(12011) || HasLearntSupport(12012)) [/code]
[code=ActivateFreeSA] 12011 [/code]

You can be even more precise and specify which equipment slot is concerned:

⚔️ Item_Equip_Weapon
🎩 Item_Equip_Head
🧤 Item_Equip_Wrist
🛡️ Item_Equip_Armor
💍 Item_Equip_Accessory

The >Item_Equip Global tag also exists for more general cases.

The second optimization is still a bit WIP.
The goal is to ensure the vast majority of Ncalc are cached, particularly those using "general" NCalc elements like commonNCalcFunctions and commonNCalcParameters.
Instead of caching the "condition", we cache the feature's "expression".
The result is a massive improvement in save file loading times.

Demonstration in these videos, explanations from the Discord :
1️⃣ First part of the first video => Original setup
2️⃣ Second part of the first video (around 27 seconds) => Caching mostly NCalc formulas
3️⃣ Third video => Caching NCalc + AbilityFeatures optimised with ⁨⁨⁨>Item_Equip⁩⁩⁩

First video :
https://github.com/user-attachments/assets/c9d4f46d-9310-4fcb-ab27-c8b51f1e1eb3

Second video :
https://github.com/user-attachments/assets/7ce09564-44a4-4bc3-9b8c-af06820cec84

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants