Greetings, I'm new member here.
I have looked up some tools for FF IX and found this gem to make the game harder.
My problem is understanding the script, which I didn't know how to find the code reference, i.e the meaning of
VAR_LocInt24_9 means
?, and something like that.
I am now in the editing script of Necron attack pattern.
I just looked at
https://finalfantasy.fandom.com/wiki/Necron_(boss) which there show some sort of Ai Script.
Have compared the script between HadesWorkshop script and ff fandom wiki script shown but still I have difficulties to understand it because some code were different i.e:
- On Hades Workshopset VAR_LocInt8_29 = VAR_LocUInt8_28
while ( VAR_LocInt8_29 >= 0 ) {
switch 8 ( VAR_LocInt24_24 ) from 0 {
case +0:
set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
break
- FF fandom wikiif ( dummyindex == 1 )
if ( ( #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP | LOW_HP) < 4 ) && ( targetamount != 0 ) )
set SV_FunctionEnemy[PREVENT_ATTACK] = 1
elseif ( dummyindex == 2 )
I don't understand how to relate these. What is 257, what is 64, can i put random number like 200 or 120 as I like, and why < 4, why >=0, etc .
If someone could raw translate this Necron script (what is "VAR_LocUInt8_1", or "VAR_LocUInt16_4", or "SV_PlayerTeam[STATUS_CURRENT_B], 32", etc means) :
Function Dummy_ATB
switch 3 ( VAR_LocUInt8_1 ) from 1 {
case +0:
if ( VAR_LocUInt8_8 ) {
set #( VAR_LocUInt16_4 = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
} else {
set #( VAR_LocUInt16_4 = 1 )
}
set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
set VAR_LocInt24_33 = GetRandom
set VAR_LocInt24_36 = 128
set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
while ( VAR_LocInt8_29 >= 0 ) {
if ( VAR_LocInt24_33 > VAR_LocInt24_36 ) {
break
}
set VAR_LocInt24_36 >>= 1
set VAR_LocInt8_29--
}
if ( VAR_LocInt8_29 == 65535 ) {
set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
}
if ( VAR_LocInt8_29 == ( VAR_LocUInt8_28 - 1 ) ) {
set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
} else {
if ( VAR_LocInt8_29 ) {
set VAR_LocInt24_30 = ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
set VAR_LocInt24_33 = ( ( 1 << ( ( VAR_LocInt8_29 + 1 ) * 3 ) ) - 1 )
set VAR_LocInt24_36 = ( ( VAR_LocInt24_33 & VAR_LocInt24_21 ) >> 3 )
set VAR_LocInt24_36 |= VAR_LocInt24_30
set VAR_LocInt24_33 ^= 16777215L
set VAR_LocInt24_21 &= VAR_LocInt24_33
set VAR_LocInt24_21 |= VAR_LocInt24_36
}
}
set VAR_LocInt8_29 = VAR_LocUInt8_28
while ( VAR_LocInt8_29 >= 0 ) {
switch 8 ( VAR_LocInt24_24 ) from 0 {
case +0:
set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
break
case +1:
set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
break
case +2:
set #( SV_Target = SV_PlayerTeam )
break
case +3:
set #( SV_Target = VAR_LocUInt16_4 )
break
case +4:
set #( SV_Target = VAR_LocUInt16_4 )
break
case +5:
set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
break
case +6:
set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
break
case +7:
set #( SV_Target = SV_FunctionEnemy )
}
if ( VAR_LocInt24_24 >= 4 ) {
set VAR_LocInt24_33 = ( ( VAR_LocInt24_18 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
} else {
set VAR_LocInt24_33 = ( ( VAR_LocInt24_15 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
}
set VAR_LocInt24_30 = ( #SV_Target )
set VAR_LocInt24_36 = FirstOf(SV_FunctionEnemy[MP])
if ( VAR_LocInt24_30 && ( VAR_LocInt24_33 <= VAR_LocInt24_36 ) ) {
break
}
if ( VAR_LocInt8_29 <= 0 ) {
break
}
set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( ( VAR_LocUInt8_28 - 1 ) * 3 ) )
set VAR_LocInt8_29--
}
if ( VAR_LocInt24_24 >= 4 ) {
set VAR_LocUInt8_27 = ( ( VAR_LocInt24_12 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
} else {
set VAR_LocUInt8_27 = ( ( VAR_LocInt24_9 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
}
if ( VAR_LocUInt8_27 == 9 ) {
set VAR_LocUInt8_8 = 1
}
break
case +1:
set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
set VAR_LocInt24_33 = GetRandom
set VAR_LocInt24_36 = 128
set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
while ( VAR_LocInt8_29 >= 0 ) {
if ( VAR_LocInt24_33 > VAR_LocInt24_36 ) {
break
}
set VAR_LocInt24_36 >>= 1
set VAR_LocInt8_29--
}
if ( VAR_LocInt8_29 == 65535 ) {
set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
}
if ( VAR_LocInt8_29 == ( VAR_LocUInt8_28 - 1 ) ) {
set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
} else {
if ( VAR_LocInt8_29 ) {
set VAR_LocInt24_30 = ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
set VAR_LocInt24_33 = ( ( 1 << ( ( VAR_LocInt8_29 + 1 ) * 3 ) ) - 1 )
set VAR_LocInt24_36 = ( ( VAR_LocInt24_33 & VAR_LocInt24_21 ) >> 3 )
set VAR_LocInt24_36 |= VAR_LocInt24_30
set VAR_LocInt24_33 ^= 16777215L
set VAR_LocInt24_21 &= VAR_LocInt24_33
set VAR_LocInt24_21 |= VAR_LocInt24_36
}
}
set VAR_LocInt8_29 = VAR_LocUInt8_28
while ( VAR_LocInt8_29 >= 0 ) {
switch 8 ( VAR_LocInt24_24 ) from 0 {
case +0:
set #( SV_Target = SV_PlayerTeam )
break
case +1:
set #( SV_Target = SV_PlayerTeam )
break
case +2:
set #( SV_Target = SV_PlayerTeam )
break
case +3:
set #( SV_Target = SV_FunctionEnemy )
break
case +4:
set #( SV_Target = SV_FunctionEnemy )
break
case +5:
set #( SV_Target = SV_FunctionEnemy )
break
case +6:
set #( SV_Target = SV_FunctionEnemy )
break
case +7:
set #( SV_Target = SV_FunctionEnemy )
}
if ( VAR_LocInt24_24 >= 4 ) {
set VAR_LocInt24_33 = ( ( VAR_LocInt24_18 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
} else {
set VAR_LocInt24_33 = ( ( VAR_LocInt24_15 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
}
set VAR_LocInt24_30 = ( #SV_Target )
set VAR_LocInt24_36 = FirstOf(SV_FunctionEnemy[MP])
if ( VAR_LocInt24_30 && ( VAR_LocInt24_33 <= VAR_LocInt24_36 ) ) {
break
}
if ( VAR_LocInt8_29 <= 0 ) {
break
}
set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( ( VAR_LocUInt8_28 - 1 ) * 3 ) )
set VAR_LocInt8_29--
}
if ( VAR_LocInt24_24 >= 4 ) {
set VAR_LocUInt8_27 = ( ( VAR_LocInt24_12 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
} else {
set VAR_LocUInt8_27 = ( ( VAR_LocInt24_9 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
}
set #( VAR_LocUInt16_6 = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
if ( !( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & VAR_LocUInt16_6 ) ) ) {
set #( SV_Target = 1 )
}
break
case +2:
set #( VAR_LocUInt16_2 = 0 )
if ( ( FirstOf(VAR_GlobUInt16_24[HP]) - 10000 ) < ( ( FirstOf(VAR_GlobUInt16_24[MAX_HP]) - 10000 ) >> 1 ) ) {
set #( VAR_LocUInt16_2 = VAR_GlobUInt16_24 )
} else {
set #( VAR_LocUInt16_2 = 1 )
}
set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
set VAR_LocInt24_33 = GetRandom
set VAR_LocInt24_36 = 128
set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
while ( VAR_LocInt8_29 >= 0 ) {
if ( VAR_LocInt24_33 > VAR_LocInt24_36 ) {
break
}
set VAR_LocInt24_36 >>= 1
set VAR_LocInt8_29--
}
if ( VAR_LocInt8_29 == 65535 ) {
set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
}
if ( VAR_LocInt8_29 == ( VAR_LocUInt8_28 - 1 ) ) {
set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
} else {
if ( VAR_LocInt8_29 ) {
set VAR_LocInt24_30 = ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
set VAR_LocInt24_33 = ( ( 1 << ( ( VAR_LocInt8_29 + 1 ) * 3 ) ) - 1 )
set VAR_LocInt24_36 = ( ( VAR_LocInt24_33 & VAR_LocInt24_21 ) >> 3 )
set VAR_LocInt24_36 |= VAR_LocInt24_30
set VAR_LocInt24_33 ^= 16777215L
set VAR_LocInt24_21 &= VAR_LocInt24_33
set VAR_LocInt24_21 |= VAR_LocInt24_36
}
}
set VAR_LocInt8_29 = VAR_LocUInt8_28
while ( VAR_LocInt8_29 >= 0 ) {
switch 8 ( VAR_LocInt24_24 ) from 0 {
case +0:
set #( SV_Target = VAR_LocUInt16_2 )
break
case +1:
set #( SV_Target = RandomInTeam(( ( NotMatching(SV_EnemyTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_EnemyTeam[STATUS_CURRENT_B], 64) ) & ( ~Matching(SV_EnemyTeam[STATUS_CURRENT_A], 4194304L) ) )) )
break
case +2:
set #( SV_Target = RandomInTeam(( ( NotMatching(SV_EnemyTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_EnemyTeam[STATUS_CURRENT_B], 64) ) & ( ~Matching(SV_EnemyTeam[STATUS_CURRENT_A], 8388608L) ) )) )
break
case +3:
set #( SV_Target = SV_FunctionEnemy )
break
case +4:
set #( SV_Target = SV_FunctionEnemy )
break
case +5:
set #( SV_Target = SV_FunctionEnemy )
break
case +6:
set #( SV_Target = SV_FunctionEnemy )
break
case +7:
set #( SV_Target = SV_FunctionEnemy )
}
if ( VAR_LocInt24_24 >= 4 ) {
set VAR_LocInt24_33 = ( ( VAR_LocInt24_18 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
} else {
set VAR_LocInt24_33 = ( ( VAR_LocInt24_15 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
}
set VAR_LocInt24_30 = ( #SV_Target )
set VAR_LocInt24_36 = FirstOf(SV_FunctionEnemy[MP])
if ( VAR_LocInt24_30 && ( VAR_LocInt24_33 <= VAR_LocInt24_36 ) ) {
break
}
if ( VAR_LocInt8_29 <= 0 ) {
break
}
set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( ( VAR_LocUInt8_28 - 1 ) * 3 ) )
set VAR_LocInt8_29--
}
if ( VAR_LocInt24_24 >= 4 ) {
set VAR_LocUInt8_27 = ( ( VAR_LocInt24_12 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
} else {
set VAR_LocUInt8_27 = ( ( VAR_LocInt24_9 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
}
}
switch 9 ( VAR_LocUInt8_27 ) from 7 {
case +0:
if ( #( SV_FunctionEnemy[MP] <$ 46 ) ) {
set VAR_LocUInt8_27 = 16
}
break
case +1:
if ( #( SV_FunctionEnemy[MP] <$ 36 ) ) {
set VAR_LocUInt8_27 = 16
}
break
case +2:
if ( #( SV_FunctionEnemy[MP] <$ 40 ) ) {
set VAR_LocUInt8_27 = 16
}
break
case +3:
if ( #( SV_FunctionEnemy[MP] <$ 24 ) ) {
set VAR_LocUInt8_27 = 16
}
break
case +4:
if ( #( SV_FunctionEnemy[MP] <$ 24 ) ) {
set VAR_LocUInt8_27 = 16
}
break
case +5:
if ( #( SV_FunctionEnemy[MP] <$ 24 ) ) {
set VAR_LocUInt8_27 = 16
}
break
case +6:
if ( #( SV_FunctionEnemy[MP] <$ 20 ) ) {
set VAR_LocUInt8_27 = 16
}
break
case +7:
if ( #( SV_FunctionEnemy[MP] <$ 8 ) ) {
set VAR_LocUInt8_27 = 16
}
break
case +8:
if ( #( SV_FunctionEnemy[MP] <$ 8 ) ) {
set VAR_LocUInt8_27 = 16
}
break
}
if ( SV_Target == 0 ) {
set VAR_LocUInt8_27 = 16
}
switch 3 ( VAR_LocUInt8_1 ) from 1 {
case +0:
if ( ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & ( ~Matching(SV_PlayerTeam[STATUS_CURRENT_A], 512) ) ) ) < 4 ) {
set #( SV_Target = 0 )
set VAR_LocUInt8_27 = 16
}
break
case +1:
if ( ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & ( ~Matching(SV_PlayerTeam[STATUS_CURRENT_A], 512) ) ) ) < 3 ) {
set #( SV_Target = 0 )
set VAR_LocUInt8_27 = 16
}
break
case +2:
if ( ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & ( ~Matching(SV_PlayerTeam[STATUS_CURRENT_A], 512) ) ) ) < 2 ) {
set #( SV_Target = 0 )
set VAR_LocUInt8_27 = 16
}
break
}
set VAR_LocUInt8_39 = ( #SV_Target )
Attack( VAR_LocUInt8_27 )
return
And tell me how to understand this by relate the code to 'where', maybe later I can read the rest script used on another enemies, I will be very much helped.
I have read the tips on page 1 posted by Tirlititi and still confused. I have no background of reading the code but I want to know.
I am sorry for the inconvenience.
Thank you very much.