@ploppo: About adding Beatrix, the simplest ways if you don't care about story are to use either CheatEngine or Albeoris's Memoria (the latter is the easiest but not compatible with changes made with HW).
I don't do team viewer or other things like this. I explained precisely how to import Beatrix out of my mod and if you made a mistake the 1st try, just try again ^^'
About Salamender/Zidane trance skills, the most probable if I got it right is that you only swapped the command in the "Stats" panel.
In the "Stats" panel, you need to:
1) Remove the "Trance link" of those characters by setting the option to "None",
2) Replace the abilities from the ability list to the ones used by the trance commands.
If you apply 1) without 2), you should be able to use all the abilities without learning them. If you apply both 1) and 2), you'll make these abilities learnable exactly the same as for the other abilities. In particular, you should also make sure that Zidane's weapons (and Salamender's) teach the trance abilities instead of the normal ones.
@Squid7777: It is not possible without changing the battle engine (the solution proposed by Incinerator doesn't work because Break abilities are not statuses). There are 2 ways of changing the battle engine: using Albeoris's Memoria tool (not compatible with HW) or using a C# DLL editing tool (compatible with HW as long as you don't mess with sensible parts of the engine).
I suggest that you use dnSpy for that.
What you need to do is to edit the class "btl_calc". More specifically, the method "CalcMain" of that class and even more specifically, the cases 33, 34, 35 and 36 in the switch. It should be something like this by default:
Code: [Select]
Code:
case 33: case 34: case 35: case 36: btl_calc.CalcSub_101(cALC_VAR); btl_calc.CalcSub_114(cALC_VAR); if (btl_calc.CalcSub_121(cALC_VAR)) { if (prog_no == 33) { DEF_PARAMS expr_F0B = target.defence; expr_F0B.p_def /= 2; } else if (prog_no == 34) { target.elem.str = target.elem.str * 3 / 4; } else if (prog_no == 35) { DEF_PARAMS expr_F54 = target.defence; expr_F54.m_def /= 2; } else if (prog_no == 36) { target.elem.mgc = target.elem.mgc * 3 / 4; } } break;
The "CalcSub" lines are quite abstruse.
"CalcSub_101" setups the accuracy of the spell,
"CalcSub_114" lowers the accuracy if Shell is on,
"CalcSub_121" performs the accuracy check: what is inside the "if" block is executed only if this check connects and the "missed" flag is turned on otherwise.
In that file, I've copied the "btl_calc" class and renamed the "CalcSub" methods to make it more readable. You can look at it to understand how spell effects work.
What you want to do is changing these lines to something like this:
Code: [Select]
Code:
case 33: case 34: case 35: case 36: btl_calc.CalcSub_101(cALC_VAR); // Accuracy for the break effect btl_calc.CalcSub_114(cALC_VAR); // Shell hit rate malus for the break effect if (((int)v.hit_rate > Comn.random16() % 100) && ((int)v.ev <= Comn.random16() % 100)) // conditionally lower stat { if (prog_no == 33) { DEF_PARAMS expr_F0B = target.defence; expr_F0B.p_def /= 2; } else if (prog_no == 34) { target.elem.str = target.elem.str * 3 / 4; } else if (prog_no == 35) { DEF_PARAMS expr_F54 = target.defence; expr_F54.m_def /= 2; } else if (prog_no == 36) { target.elem.mgc = target.elem.mgc * 3 / 4; } } // Unconditionally damage the target: btl_calc.CalcSub_13A(cALC_VAR); // Setup base damage like a physical strike btl_calc.CalcSub_141(cALC_VAR); // Apply caster bonuses of Bersek/Trance and malus of Mini btl_calc.CalcSub_143(cALC_VAR); // Apply target bonuses of Sleep/Mini and maluses of Defend/Protect btl_calc.CalcSub_159(cALC_VAR); // Apply equipment elemental boosts of the spell element btl_calc.CalcSub_203(cALC_VAR); // Setup the damage... Everything else is handled by "CalcResult" break;
It's a kind of mix between "Break" spells and "Physical Strike" spells.
@ToraCarol: I'm not sure...
These lines from the "Main_Init" function are definitely wrong:
Code: [Select]
Code:
while ( GetBattleState != 1 ) { if ( #VAR_GlobUInt16_42 ) { set VAR_GlobUInt16_42[PRESENCE_OFF] =$ 1 } Wait( 1 ) }
Use these instead:
Code: [Select]
Code:
while ( GetBattleState != 1 ) { Wait( 1 ) } if ( #VAR_GlobUInt16_42 ) { set VAR_GlobUInt16_42[PRESENCE_OFF] =$ 1 }
Also, you should import the .hws file "LocalVariableSettings": in the AI scripts, it gives names to the local variables and make it much more readable (you'll see "dagger" and "blank" instead of "VAR_GlobUInt16_28" and "VAR_GlobUInt16_42" for example).
But I'm not sure that it will fix the bug... I'll try to investigate it if it doesn't work, but I'm busy with the next version of HW right now.