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

Pages: [1]
1
Hello, Tirlititi.
I have some problem with HW, but this is not the code thing probelm like I have posted before.

First, When I tried to 'Open Mod' my .hws save file (compiled completely from Spells to Fields) to the original clean game, it suddenly force close the Hades Workshop.
I try to find the cause by opening the hws once again and checking 1 by 1 category (from Spells, Items, then Enemies, etc) and once it open on the 'World Maps', HW closed itself with no loading bar at all (the loading bar with 'n/n' text)
I have unchecked 'including text' and 'including locals', and checked the text only, checked the locals only, still force closed.
So then the problems found while I open Mod the 'World Maps' only.

My FF IX game is clean with no mod except HW mods only.

Notes: In 'World Maps', I have some modified only on the 'Battle Spots' tab, to change what enemy should show on the specific places. And also I find that the 'battle spots' tab is actually loaded incorrectly at first opened the HW (e.g. on Battle Spot 1, Normal, Mist Continent, Grassland (Day), etc. the enemy selection shown a bit mess), but after I maximize the HW window, it loaded correctly. And it always like that whenever I open the HW and load the game.

Second, I want to combine the mods with Moguri Mod. However, after I successfully patched the Moguri Mod, and wanted to 'open Mod' my .hws to get my HW mods back after the Moguri patch by opening the FF9Launcher.exe file, it takes very long to load the HW data. I assume the HW won't work on the patched with any mods FFIX Launcher. So I decided to reinstall the game, and open mod my .hws on it, then the first problem above appeared.
I have downloaded the latest 0.41b HW.

2
SV_Target does not work like that.

"set SV_Target = 1" -> Only the 1st player's character is targeted (usually Zidane).
"set SV_Target = 2" -> Only the 2nd player's character is targeted.
"set SV_Target = 4" -> Only the 3rd player's character is targeted.
"set SV_Target = 8" -> Only the 4th player's character is targeted.
"set SV_Target = 16" -> Only the 1st enemy is targeted.
"set SV_Target = 32" -> Only the 2nd enemy is targeted.
"set SV_Target = 64" -> Only the 3rd enemy is targeted.
"set SV_Target = 128" -> Only the 4th enemy is targeted.
And then, you add numbers to have multiple targets. The whole player's party is thus targeted with "set SV_Target = 15" and not 5 (if you watch more carefully, you'll see that only two characters are affected when you use 5).
However, because the number of characters/enemies may vary, it is very unusual to use the numbers directly; oftentimes, "SV_PlayerTeam" or "SV_EnemyTeam" are used instead of "15" or "240" respectively. The "NotMatching" or "Matching" rules out characters not matching some conditions (the "32" means "Reflect": again, select that number and see how it converts to the "Status List B" which can be seen on the left of the window, inside the "Battle" panel). For single-targeted spells, a "RandomInTeam" is used.

The number used as an argument for the "Attack" corresponds to the attack in the attack list. Look at what's displayed on the right.

Hello, sorry for late replying. I have some work to do.
Strange. I find that '5' has done some damage to all of the character in the team, however this is very useful information. Now I know how to use the SV_target value properly.
Actually, I'm aware the left panel were use to define the conditions. I did some change for the treasure item by looking at it, but in this case it was very confusing at first because when I hit on some number in the script, it defines some condition even if the number does not relate to 'item' or something else.

Now I get the point of how to hit on the right number so it will define the right condition (based on your short explanation above). Much appreciate it. I will update anything later including anything confuse me. For someone who had no idea of reading script your explanation was very much helpful. Thank you.

3
Thank you very much for the help, Tirlititi

I don't know if the zip compile contains the localvariable which at first I don't know what is the use of it. I have open the LocalVariableSettings.hws and the code now seems a bit clear to understand. I'm not aware of it at first, thank you anyway.

Actually, I didn't plan to rework the Necron attack pattern script, I just want Necron to use all its skills beside Grand Cross, Neutron ring, and Blue Shockwave (it felt so monotone for me and less challenging if it only attacks with those 3 skills). I'm a bit confused that when I check the skill it had, there's more than Grand Cross, which are Thundaga, Firaga, Holy, etc but it still use only those 3 skills. So I recheck again at wiki and found out Necron had script which detects whose character using Reflect then he won't ever use any reflectable magic attacks (even after I unchecked the "reflect" and "return magic").

After I follow your suggestion to learn first Tantarian script (and I find it very easy to understand), I understood a bit how to read Necron's script. So then I just have to edit the "reflecttargetcheck" to make Necron use all its skills to attack by modifying:
Code: [Select]
        set #( reflecttargetcheck = 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) & reflecttargetcheck ) ) ) {
            set #( SV_Target = 0 )}

to

Code: [Select]
        set #( reflecttargetcheck = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) )) )
        if ( !( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & reflecttargetcheck ) ) ) {
            set #( SV_Target = 1)}


assuming the SV_Target value is both 0 and 1 only (on/off), I modify it to  (assuming it will be activated even after the reflect checker detects them on 'reflect' or not). Up until now I still don't know why is there '& ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32)' and don't know the meaning of 32. And because it's different than wiki (where there are no 'Matching' only the 'NotMatching'), I decided to remove them.

Problem solved. However, the multiple target magic attack only deals on 1 character. So I tried to relearn again the Tantarian's script, found out it's on the SV_Target. On Necron case it shows 1 (and my assumption is wrong, it's not the on/off value, but actually it's 'amount' value), then I edit it to 5 (just like Tantarian's 'Attack(5)' on 'default: set #( SV_Target = SV_PlayerTeam )' which I don't know the meaning of it and just try it). In my opinion, if Necron's multiple magic deals on 1 character equals to 'SV_Target = 1', and Tantarian's multiple attack deals on all 4 character, it should be equal to 'Attack(4)' (which I still don't know the meaning of 5 it has).

Then finally, all character can be damaged by modifying:
Code: [Select]
            set #( SV_Target = 1)
to

Code: [Select]
            set #( SV_Target = 5)

I agree that Necron's script case is a whole complicated one, but I do believe Ozma one will be the most complicated. Fortunately, all I want to do is minor modify.

Anyway, thank you so much for the help.

4
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 Workshop
Code: [Select]
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

- FF fandom wiki
Code: [Select]
if ( 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) :
Code: [Select]
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.

Pages: [1]