Install Steam
login
|
language
简体中文 (Simplified Chinese)
繁體中文 (Traditional Chinese)
日本語 (Japanese)
한국어 (Korean)
ไทย (Thai)
Български (Bulgarian)
Čeština (Czech)
Dansk (Danish)
Deutsch (German)
Español - España (Spanish - Spain)
Español - Latinoamérica (Spanish - Latin America)
Ελληνικά (Greek)
Français (French)
Italiano (Italian)
Bahasa Indonesia (Indonesian)
Magyar (Hungarian)
Nederlands (Dutch)
Norsk (Norwegian)
Polski (Polish)
Português (Portuguese - Portugal)
Português - Brasil (Portuguese - Brazil)
Română (Romanian)
Русский (Russian)
Suomi (Finnish)
Svenska (Swedish)
Türkçe (Turkish)
Tiếng Việt (Vietnamese)
Українська (Ukrainian)
Report a translation problem
Any ideas about integration? (:
https://github.com/Albeoris/Memoria
Do you mean integration of Memoria into Hades Workshop? Or the other way around?
Both cases will need work as you're in C# and I'm in C++. There seems to be solutions to use both in one project, but those are quiet heavy. The COM feature seems to do that, though I didn't take the time to look at it.
What I can do is replacing parts of IL code's methods by custom parts. It shouldn't be too difficult to copy your custom IL code for, let's say, the fast battle swirl, and add a feature in HW to integrate it.
What's the purpose of having an external Memoria.dll, by the way? You're modifying Assembly-CSharp.dll already, so is there a reason why you don't do all the modifications inside it?
Yeah, I started with IL-code editing. For example:
https://github.com/Albeoris/Memoria/blob/master/Memoria.Patcher/Patches/FF9TextToolPatch.cs
But now I move parts of the game logic in my own library. Look at ff9item class:
https://github.com/Albeoris/Memoria/blob/master/Memoria/Engine/Data/ff9item.cs
I remove this type from the original assembly and add a redirection to Memoria.dll.
In the future, I want to do this for all scenes, the game data and events.
To give modmakers a convenient mechanism for expanding the game.
You can see all changed types here:
https://github.com/Albeoris/Memoria/tree/master/Memoria/Engine
Now I'm getting ready to move "EventEngine" and add my own scripting language to add to the game new characters and quests.
P.S. Your native language? D:
My native language is russian... just kidding, I'm french :p
I just edit sources and comile a new version of Memoria.dll insteed patch IL-code. o,o
This is much more convenient. D:
Mark a whole type by the ExportedType attribute and move it into a separate assembly is easier than to patch every instruction what you want to modify. (=
Hehehe. I was surprised when I saw Kudos and RGR versions support. ^^''
Im not a modder so i dont wanna apply anything that hasnt been confirmed but this looks very promising :)
Fair enough. Since I only patched the IL code, I forgot that you could compile dll usually and that the decompiled C# code wasn't so nice for that.
@Moogy : it's a tool to create mods. You can configure the game a bit like the spreadsheet edition in Memoria.
I'll create a thread for bug-fixing mods this week-end. Also, I'll import Alternate Fantasy to Steam !
With this tool l added 1 more hit to Zedane's Grand Lethal so it hit twice for 9999 each lol.
Is it possible to increase an Enemy's HP to more than 65535 though? l want to give Ozma 222222 HP. Or are they capped due to memory bits/bytes thing?
It is not possible to directly increase the max HP more than 65535, but you can use a trick to bypass the problem. You have to edit the AI script for that. I copy-paste the detailed answer I made when the question was asked for Kuja. The same remarks about Curaga and his counter attacks hold for Ozma.
Note that if you import the file "LocalVariableSettings_v1.hws" (using Open Mod), the variables of AI scripts will be given names fitting their purpose, so it'll be a bit easier to understand the script.
However, there may be bugs in-game when Grand Lethal hits twice.
EDIT : Nevermind, the bugs are not triggering anymore in the Steam version. That's a good news ^^
Are you gonna release some mods for people to download?
I grab the occasion to improve it a bit. Should be available in the week.
Fantastic !!
Cant wait !
So l tried to mess with it but apparently l don't know what l'm doing. :(
l know nothing about script but l understand that l have to restore Ozma HP with the above script about 3 times to simulate 200000 hp so l have to put:
- SV_FunctionEnemy[HP] <$ 20000
- set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
somewhere in Function Ozma_Loop and l have to make him secretly restore his HP 3 times so his total HP will become about (45535 *3) + 65535 = 202140
So basically where do l put the above function in his script? Function Ozma_Loop is as follow:
Function Ozma_Loop
if ( !VAR_B6_24 ) {
set VAR_B6_24 = 1
while ( !( GetBattleLoadState & 8 ) ) {
Wait( 1 )
set VAR_B5_206 = GetRandom
}
set SV_FunctionEnemy[SHADOW] =$ 0
while ( !( GetBattleLoadState & 16 ) ) {
Wait( 1 )
set VAR_B5_206 = GetRandom
}
set SV_FunctionEnemy[ATB] =$ ( FirstOf(SV_FunctionEnemy[MAX_ATB]) - 1 )
if ( #( SV_PlayerTeam & 1 ) ) {
if ( ( FirstOf(1[LEVEL]) % 4 ) == 0 ) {
set #( VAR_B14_26 |= 1 )
}
}
if ( #( SV_PlayerTeam & 2 ) ) {
if ( ( FirstOf(2[LEVEL]) % 4 ) == 0 ) {
set #( VAR_B14_26 |= 2 )
}
}
if ( #( SV_PlayerTeam & 4 ) ) {
if ( ( FirstOf(4[LEVEL]) % 4 ) == 0 ) {
set #( VAR_B14_26 |= 4 )
}
}
if ( #( SV_PlayerTeam & 8 ) ) {
if ( ( FirstOf(8[LEVEL]) % 4 ) == 0 ) {
set #( VAR_B14_26 |= 8 )
}
}
if ( #( SV_PlayerTeam & 1 ) ) {
if ( ( FirstOf(1[LEVEL]) % 5 ) == 0 ) {
set #( VAR_B14_28 |= 1 )
}
}
if ( #( SV_PlayerTeam & 2 ) ) {
if ( ( FirstOf(2[LEVEL]) % 5 ) == 0 ) {
set #( VAR_B14_28 |= 2 )
}
}
if ( #( SV_PlayerTeam & 4 ) ) {
if ( ( FirstOf(4[LEVEL]) % 5 ) == 0 ) {
set #( VAR_B14_28 |= 4 )
}
}
if ( #( SV_PlayerTeam & 8 ) ) {
if ( ( FirstOf(8[LEVEL]) % 5 ) == 0 ) {
set #( VAR_B14_28 |= 8 )
}
}
if ( FriendlyMonster_Complete ) {
set SV_FunctionEnemy[ELEMENT_ABSORB] &=$ 65407
set SV_FunctionEnemy[ELEMENT_WEAK] |=$ 128
while ( GetBattleState != 1 ) {
Wait( 1 )
}
BattleDialog( 16 )
Wait( 60 )
}
while ( GetBattleState != 1 ) {
Wait( 1 )
set VAR_B5_206 = GetRandom
}
RunBattleCode( 35, 0 )
while ( GetBattleState != 4 ) {
Wait( 1 )
}
}
switch 3 ( VAR_B6_40 ) from 0 {
case +0:
if ( GetAttacker == SV_FunctionEnemy ) {
set VAR_B6_40 = 1
break
}
break
case +1:
if ( GetAttacker == SV_FunctionEnemy ) {
set VAR_B6_40 = 1
break
}
set VAR_B6_40 = 2
set SV_FunctionEnemy[ATB] =$ ( FirstOf(SV_FunctionEnemy[MAX_ATB]) - 1 )
break
case +2:
if ( GetAttacker == SV_FunctionEnemy ) {
set VAR_B6_40 = 1
} else {
break
}
}
if ( #( SV_FunctionEnemy[HP] <=$ 10000 ) ) {
while ( IsAttacking != 0 ) {
Wait( 1 )
}
if ( GetBattleState != 4 ) {
return
}
RunBattleCode( 32, 0 )
while ( GetBattleState != 1 ) {
Wait( 1 )
}
set #( SV_Target = SV_FunctionEnemy )
RunBattleCode( 36, 9 )
AttackSpecial( 12 )
set SV_FunctionEnemy[STAND_ANIMATION] =$ 1
while ( IsAttacking != 0 ) {
Wait( 1 )
}
set SV_FunctionEnemy[DEFEATED_ON] =$ 1
set VAR_B5_199 |= 8
RunBattleCode( 33, 1 )
return
}
Wait( 1 )
loop
Sorry to bother you again.
1) An initialization thing, which sets up the targets of Holy lvl 4 and Death Lvl 5, and Ozma's elemental absorbtion, and other stuff like that.
2) The system to replenish Ozma's ATB as soon as someone else has an action.
3) The ending move, that launches once Ozma's HP are under 10,000. It triggers Ozma's death animation.
Change that 3rd part into this :
Also, before parsing, change the "allocate 60" into "allocate 61" because otherwise VAR_B7_60 is not a valid variable.
However, your calculation is wrong. With the script above, it makes
4*55,536 = 22,2144
There's no need to run the script below 20,000 instead of 10,000, and since Ozma dies under 10,000 HP normally, its default max HP is 55,536 in-game.