[FE8] Skill System v1.0 - 254 skills done, more on the way

As of right now, they only way to use it in FEBuilder is to build Skill Systems use the buildfile first.

If there was a list of patch conflicts that prevent str/mag split from being installed with skill system in FEBuilder, that would be very useful in resolving them so an FEBuilder patch form would be viable.

Or just patch conflicts in general, having everything work nicely together is always a goal.

Ok guys, just one question, it looks like we are not going to be able to “toggle” the ST/MG split with Febuilder for a while, how can I add that feature to my obviously not clean ROM that has the current Febuilder skill system?

Getting into the edited ROM requires a fairly complex procedure.
It’s a lot of work, so you should stop doing it yourself.

I will briefly explain the work I am doing.

Build SkillSystems using vanilla ROM.

However, if you use it as it is, it will be in the SkillTest stage, so remove unnecessary things.
Enable other options you want to, remove unneeded patches , and enable patch and options.

Although now improved, old SkillSystems created strings on top of prologues and ch1 lines, so they are remapped.
Current SkillSystems are mapped to 0xD4C or later.
FEBuilderGBA reserves 0xE00-0xFFF and maps to this range.
If you want to meet the specifications of FEBuilderGBA, you need to remap.
I make the list by hand.

Build SkillSystems.
At this point, check the operation.

Now you need to merge.
This is also a very troublesome task.

Load the FE8 vanilla ROM at FEBuilderGBA.

MENU->Tool->Diff

Make a difference with the ROM that contains the SkillSystems you built earlier.
The difference is saved as a FEBuilderGBA bin patch.

Apply this bin patch to get the latest SkillSystems.
Just before that, you need to erase the old SKillSystems from your ROM.

Look at the old skillsystems patch in FEBuilderGBA.
Various things are written, but simply explaining, uninstalling existing SkillSystems and installing new SkillSystems.

Apply the bin patch created earlier to this format.

Finally, ready.
Let’s update the skill system from the patch of FEBuilderGBA.

If it is updated correctly, it is a success.
If it doesn’t work, it’s a failure.
It is necessary to proceed while checking the procedure from the beginning.

Even if i omit the detailed work and write it, there is this amount.
There are traps everywhere.
If one fails, it will not work.

I am using an old vision quest to test for updates.
I have saved a copy of 2018 version and have confirmed that this version can be updated properly.

Even with so much care and testing, SkillSystems updates often have unexpected events.

2 Likes

SkillSystems has a bug that allows re-move when the 0x03 flag is enabled.

Please read the suspended file.
The unit starts moving indefinitely.

sample ups
https://cdn.discordapp.com/attachments/235253973588639747/644844482084208641/test_ups.7z

I found the problematic code.

\Engine Hacks\SkillSystem\Post Combat Skills\Post Combat Skills Installer.event

ORG $1D26C //this used to be part of the "check for this turn's action"
SHORT 0x2110

If comment out this code, the bug doesn’t occur.
So this code is causing the bug.
We need to find out more about what this is doing.

If you are worried about this problem, you can fix it with hexeditor as follows.
However, there may be side effects.

Replacing with vanilla code will fix the bug.
1D26C: 41 7C

SkillSystems

0801D266 2800   cmp r0, #0x0
0801D268 D116   bne #0x801d298
    0801D26A 480E   ldr r0, [pc, #0x38] # pointer:0801D2A4 -> 0203A958 (ActionData@gActionData._u00 )
    0801D26C 2110   MOV r1, #0x10 <<<<
    0801D26E 1C02   mov r2 ,r0
    0801D270 2903   cmp r1, #0x3
    0801D272 DC01   bgt #0x801d278

Vanilla

0801D266 2800   cmp r0, #0x0
0801D268 D116   bne #0x801d298
    0801D26A 480E   ldr r0, [pc, #0x38] # pointer:0801D2A4 -> 0203A958 (ActionData@gActionData._u00 )
    0801D26C 7C41   ldrb r1, [r0, #0x11] # pointer:0203A969 (ActionData@gActionData.unitActionType )
    0801D26E 1C02   mov r2 ,r0
    0801D270 2903   cmp r1, #0x3
    0801D272 DC01   bgt #0x801d278

I’m not sure what this code wants to do.
It seems that 0x10 is forcibly assigned to r1 and the branch is ignored.

Does anyone know what this code wants to do?

I understand the cause of the bug that the enemy AI ignores Silence.
It is caused by the hook of WeaponLockCalcLoop.event.
Disabling this routine will solve the problem.

WeaponLockCalcLoop.event

PUSH
ORG 0x16574
#incbin "CanUnitWieldWeapon.dmp"
POIN ItemTable
POIN WLockLookupList
POIN WeaponLockLoop
POP

FEBuilderGBA has a patch that disables this hook.
“Uninstall SkillSystems ShadowGift 20191108”

This is a feature for installing WeaponLockEx, but it can also be used as a workaround for this bug.

2 Likes

Like I said yesterday, this is part of Canto and Galeforce, all of these checks were moved to the PostCombatLoop, if there’s something the loop is missing just add it in.

I see.
I think we just moved forward just by knowing where the problem was.
I understand that the side effects are too strong.
I hope it will be modified in a coordinated manner with other skills.

1 Like

how do I apply the bin file to my current ROM?
edit: I found out, save it in the patches area of febuilder.

Ok Guys, how do I unlock the weapons with the new array? this way every weapon is locked by default…

Based on the documentation in Teq’s “better notes” dropbox file, in the battle struct, normally the following indexes are unused:

0x59, 0x7A, 0x7F

With 0x6C, 0x6D unused for all intents and purposes if GBA lethality isn’t in place (not sure about the skill system’s implementation), 0x58 for tile resistance (which I don’t think is ever used in vanilla FE8?) and 0x7E being occasionally set to 0 by two routines I’m not sure when are called.

However, the Str/Mag split now makes use of 0x7A for allowing the stat to grow. Are any of the other entries in the battle struct safe to manipulate? They would be as follows:

0x58 (If no resistance tiles are used)
0x59
0x6C (with no GBA lethality)
0x6D (with no GBA lethality)
0x7E (?)
0x7F

I’m trying to add in con and movement growth and deciding where to store the level up value is the only thing I’m having trouble with at this point.

EDIT: Oh, and figuring out where to manipulate the animation off extended level up screen. Where is this routine stored? I was able to figure out the one for when animations are on.

Strength/Magic split does a lot to the level up screen. You can look in Strmag/Strength Magic Split/Level Up.

That’s where I’ve been looking, but unlike for when animations are on, there isn’t just one file that manages how the animation off level up screen works, so it seems to be a bit more complex.

Using IDs 0x59 and 0x7F seem to be working for my other question.

I think I found a different glitch though, however it may only be in appearance. It seems that on the unit stat screen, for players and enemies, all units get a bonus of +10 hit and avoid. This happens with a vanilla install of the latest available version of the skill system even when the leadership hack is turned off. When a unit enters battle, calculations occur normally and as they should be, even with leadership stars on.

Can the skill system change the Miracle formula so it targets the Luck Stat? A character of mine has around 56 HP, high defense and 50 Luck but can’t effectively use Miracle because of the current formula.

You can always edit the source to change the effect

The issue with that is others might prefer the actual formula no ?

1 Like

I don’t know ASM well. Don’t have time to learn right now either.

Guess you’ll have to stick with the most commonly preferred formula until then. It’s unlikely there’s going to be enough demand for someone else to create another version of Miracle for a public release.

1 Like

I didn’t test this and essentially just combined pavise and miracle to make this. Someone else can check to see if it works, but I think this will do it.

.thumb
.macro blh to, reg=r3
  ldr \reg, =\to
  mov lr, \reg
  .short 0xf800
.endm
.equ MiracleID, SkillTester+4
.equ d100Result, 0x802a52c
@ r0 is attacker, r1 is defender, r2 is current buffer, r3 is battle data
push {r4-r7,lr}
mov r4, r0 @attacker
mov r5, r1 @defender
mov r6, r2 @battle buffer
mov r7, r3 @battle data
ldr     r0,[r2]           @r0 = battle buffer                @ 0802B40A 6800     
lsl     r0,r0,#0xD                @ 0802B40C 0340     
lsr     r0,r0,#0xD        @Without damage data                @ 0802B40E 0B40     
mov r1, #0xC0 @skill flag @it's a passive, regardless of skills
lsl r1, #8 @0xC000
add r1, #2 @miss - why was this originally mov...?
tst r0, r1
bne End

@get max HP
ldrb r1, [r5,#0x13] @current hp

@check damage >= currhp
mov r0, #4
ldrsh r0, [r7, r0]
cmp r0, r1
blt End @not gonna die

@check for Miracle
ldr r0, SkillTester
mov lr, r0
mov r0, r5 @defender data
ldr r1, MiracleID
.short 0xf800
cmp r0, #0
beq End

@if skill found, check proc

ldrb r0, [r5, #0x19] @luck stat as activation rate
mov r1, r5 @skill user
blh d100Result
cmp r0, #1
bne End

@if we proc, set the defensive skill flag
ldr     r2,[r6]    
lsl     r1,r2,#0xD                @ 0802B42C 0351     
lsr     r1,r1,#0xD                @ 0802B42E 0B49     
mov     r0, #0x80
lsl     r0, #8           @0x8000, defender skill activated
orr     r1, r0

@and unset the crit flag
mov r0, #1
mvn  r0, r0
and     r1,r0            @unset it

ldr     r0,=#0xFFF80000                @ 0802B434 4804     
and     r0,r2                @ 0802B436 4010     
orr     r0,r1                @ 0802B438 4308     
str     r0,[r6]                @ 0802B43A 6018   
ldrb r0, MiracleID
strb r0, [r6,#4]


@and set damage to currhp-1
ldrb r0, [r5, #0x13] @currhp
sub r0, #1
strh r0, [r7, #4] @final damage

End:
pop {r4-r7}
pop {r15}

.align
.ltorg
SkillTester:
@POIN SkillTester
@WORD MiracleID
3 Likes

There seems to be a bug with the Watchful skill that allows you to capture units with it. A ups file of this bug can be found here: https://www.dropbox.com/s/1otgal35yladjnt/WatchfulBug.ups?dl=0

The bug occurs during certain unit formations when you can attack one unit that you can capture when another unit is in range that you cannot.

1 2 3 4 5 6

In the above example, while the game thinks I am targeting O’Neill, you can see that the armor knight is highlighted. If I try and switch to attack Bone and then back, it will target Breguet instead. If I attack the highlighted O’Neill, I will attack Breguet.

The event file used to create the formation can be found below:

////////////////////////////////////////////////////
//                                                //
// Disassembled with Nintenlord's Event Assembler //
// Version: 11.0.0.0                              //
// Game: FE8                                      //
// File: FE8_clean.gba                            //
// Offset: $9EC66C                                //
//                                                //
////////////////////////////////////////////////////

EventPointerTable(0x7, PointerList)

VeinEffect(0, FreezeAllEnemies)

PointerList:
POIN TurnBasedEvents
POIN CharacterBasedEvents
POIN LocationBasedEvents
POIN MiscBasedEvents
POIN Dunno1 Dunno2 Dunno3 Tutorial
POIN Traps1 Traps2
POIN Units1 Units1  //This unit group determines the number and position of deployment slots when there is a prep screen
POIN $0 $0 $0
POIN $0 $0 $0
POIN BeginningScene EndingScene

TurnBasedEvents:
END_MAIN

CharacterBasedEvents:
CharacterEventBothWays(0x10,TalkEvent, Eirika, Ephraim)
END_MAIN

LocationBasedEvents:
Vendor(ShopItems,2,7)
Armory(ArmoryItems,10,26)
Village(0x8,VillageEvent,18,27)
House(0,HouseEvent,6,24)
Seize(10,2)
END_MAIN

MiscBasedEvents:
CauseGameOverIfLordDies
END_MAIN

Dunno1:
END_MAIN

Dunno2:
END_MAIN

Dunno3:
END_MAIN

Tutorial:
END_MAIN

Units1:
UNIT Eirika  0x4 0x1 0xA1   [9,24] 0b 0x0 0x0 0x0 [0x1,0x98,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Ephraim  0x1 0x1 0xA1  [7,24] 0b 0x0 0x0 0x0 [0x14,0x99,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Seth  0x7 0x1 0xA1     [11,24] 0b 0x0 0x0 0x0 [0x1,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT Gilliam  0x9 0x1 0xA1  [8,25] 0b 0x0 0x0 0x0 [0x14,0x65,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Franz  0x5 0x1 0xA1    [10,25] 0b 0x0 0x0 0x0 [0x1,0x65,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Moulder  Bishop 0x1 0xA1 [12,25] 0b 0x0 0x0 0x0 [Heal,Lightning,Flux,0x0] [0x0,0x0,0x0,0x0]
UNIT Vanessa  0x48 0x1 0xA1 [11,26] 0b 0x0 0x0 0x0 [0x14,0x67,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Ross  Pirate 0x1 0xA1    [7,26] 0b 0x0 0x0 0x0 [0x1F,0x64,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Neimi  Ranger_F 0x1 0xA1   [9,26] 0b 0x0 0x0 0x0 [0x2D,0x66,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Colm  Rogue 0x1 0xA1     [10,27] 0b 0x0 0x0 0x0 [0x1,0,0,0x0] [0x0,0x0,0x0,0x0]
UNIT Garcia  Fighter 0x1 0xA1  [12,27] 0b 0x0 0x0 0x0 [0x1F,0x64,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Innes  0x1B 0x1 0xA1   [13,26] 0b 0x0 0x0 0x0 [0x2D,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT Lute  Sage_F 0x1 0xA1    [6,27] 0b 0x0 0x0 0x0 [0x38,0,0,0x0] [0x0,0x0,0x0,0x0]
UNIT Natasha  0x4A 0x1 0xA1 [14,27] 0b 0x0 0x0 0x0 [Heal,Lightning,0,0x0] [0x0,0x0,0x0,0x0]
UNIT Cormag  0x1F 0x1 0xA1  [14,25] 0b 0x0 0x0 0x0 [0x14,0x67,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Forde 0x5 0x1 0xA1     [6,25] 0b 0x0 0x0 0x0 [0x14,0x65,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Kyle 0x5 0x1 0xA1      [5,26] 0b 0x0 0x0 0x0 [0x14,0x65,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT

Units2:
UNIT Amelia Cavalier_F 0x1 0xA1   [11,26] 0b 0x0 0x0 0x0 [0x14,0x65,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Artur Monk 0x1 0xA1    [12,26] 0b 0x0 0x0 0x0 [0x3F,0x68,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Gerik Hero 0x1 0xA1     [13,26] 0b 0x0 0x0 0x0 [0x1,0x64,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Tethys 0x4D 0x1 0xA1   [14,26] 0b 0x0 0x0 0x0 [0x0,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT Marisa Swordmaster_F 0x1 0xA1   [15,27] 0b 0x0 0x0 0x0 [0x1,0,0,0x0] [0x0,0x0,0x0,0x0]
UNIT Saleh 0x27 0x1 0xA1    [14,27] 0b 0x0 0x0 0x0 [0x38,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT Ewan Mage 0x1 0xA1     [13,27] 0b 0x0 0x0 0x0 [0x38,0x68,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT LArachel 0x4B 0x1 0xA1 [12,27] 0b 0x0 0x0 0x0 [0x68,0x88,Mend,0x0] [0x0,0x0,0x0,0x0]
UNIT Dozla 0x43 0x1 0xA1    [11,27] 0b 0x0 0x0 0x0 [0x1F,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT Rennac 0x33 0x1 0xA1   [10,27] 0b 0x0 0x0 0x0 [0x1,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT Duessel 0x35 0x1 0xA1  [9,27] 0b 0x0 0x0 0x0 [0x1,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT Myrrh 0x3C 0x1 0xA1    [7,27] 0b 0x0 0x0 0x0 [0xAA,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT Knoll 0x2D 0x1 0xA1    [6,27] 0b 0x0 0x0 0x0 [0x45,0x68,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Joshua 0x13 0x1 0xA1   [9,28] 0b 0x0 0x0 0x0 [0x1,0x64,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT Syrene 0x49 0x1 0xA1   [13,28] 0b 0x0 0x0 0x0 [0x14,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT Tana 0x48 0x1 0xA1     [14,28] 0b 0x0 0x0 0x0 [0x14,0x67,0x88,0x0] [0x0,0x0,0x0,0x0]
// UNIT Orson_Ch5x 0x7 0x1 0xA1 [9,5] 0b 0x0 0x0 0x0 [0x14,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]
UNIT

MoreUnits:
UNIT CaellachCC 0x11 0x1 0xA1 [18,28] 0b 0x0 0x0 0x0 [0x21,0x29,0x7C,0x0] [0x0,0x0,0x0,0x0]
UNIT GlenCC 0x21 0x1 0xA1     [17,29] 0b 0x0 0x0 0x0 [0x17,0x4,0x75,0x0] [0x0,0x0,0x0,0x0]
UNIT OrsonCC 0x07 0x1 0xA1    [19,29] 0b 0x0 0x0 0x0 [0x11,0x17,0x76,0x0] [0x0,0x0,0x0,0x0]
UNIT ValterCC 0x23 0x1 0xA1   [16,30] 0b 0x0 0x0 0x0 [0x17,0x1D,0x71,0x0] [0x0,0x0,0x0,0x0]
UNIT RievCC 0x2B 0x1 0xA1     [18,30] 0b 0x0 0x0 0x0 [0x43,0x42,0x75,0x0] [0x0,0x0,0x0,0x0]
UNIT HaydenCC 0x1D 0x1 0xA1   [15,31] 0b 0x0 0x0 0x0 [0x4,0x2F,0x74,0x0] [0x0,0x0,0x0,0x0]
UNIT FadoCC 0x0B 0x1 0xA1     [17,31] 0b 0x0 0x0 0x0 [0x4,0x17,0x21,0x88] [0x0,0x0,0x0,0x0]
UNIT IsmaireCC 0x16 0x1 0xA1  [19,31] 0b 0x0 0x0 0x0 [0xC,0xA1,0x88,0x0] [0x0,0x0,0x0,0x0]
UNIT SelenaCC 0x2A 0x1 0xA1   [16,28] 0b 0x0 0x0 0x0 [0x3B,0x3A,0x4D,0x0] [0x0,0x0,0x0,0x0]
UNIT LyonCC 0x4F 0x1 0xA1     [18,32] 0b 0x0 0x0 0x0 [0x8F,0x4E,0x57,0x0] [0x0,0x0,0x0,0x0]
UNIT

EnemyUnits:
UNIT Morva_Ch20 0x3B 0x40 0xA5    [15,2] 0b 0x0 0x0 0x0 [WretchedAir,0x0,0x0,0x0] AttackInRangeAI
UNIT ONeill Fighter 0x40 0xA5     [8,19] 0b 0x0 0x0 0x0 [SteelAxe, HandAxe] AttackInRangeAI
UNIT Breguet Knight 0x40 0xA5     [7,20] 0 0 0 0 [SteelLance, Javelin] AttackInRangeAI
UNIT Bone Brigand 0x40 0xA5       [9,20] 0 0 0 0 [SteelAxe, HandAxe] AttackInRangeAI
UNIT Bazba Brigand 0x40 0xA5      [16,18] 0 0 0 0 [SteelAxe, HandAxe] AttackInRangeAI
UNIT Saar Knight 0x40 0xA5        [8,15] 0 0 0 0 [SteelLance, Javelin] AttackInRangeAI
UNIT Novala Shaman 0x40 0xA5      [12,13] 0 0 0 0 [Nosferatu] AttackInRangeAI
UNIT Murray Cavalier 0x40 0xA5    [3,13] 0 0 0 0 [SteelSword, Javelin] AttackInRangeAI
UNIT Tirado General 0x40 0xA5     [16,9] 0 0 0 0 [SilverLance, Javelin] AttackInRangeAI
UNIT Binks Warrior 0x40 0xA5      [1,10] 0 0 0 0 [SteelAxe, SteelBow] AttackInRangeAI
UNIT Pablo Sage 0x40 0xA5         [5,11] 0 0 0 0 [Elfire, Purge] AttackInRangeAI
UNIT

EnemyUnits2:
UNIT Vigarde General 0x40 0xA5    [10,2] 0 0 0 0 [Spear, SilverBlade, Tomahawk] NeverMoveAI
UNIT Cyclops_boss Cyclops 0x40 0xA5       [9,4] 0 0 0 0 [BattleAxe, Tomahawk] AttackInRangeAI
UNIT Cyclops_boss Cyclops 0x40 0xA5       [11,4] 0 0 0 0 [BattleAxe, Tomahawk] AttackInRangeAI
UNIT Aias GreatKnight 0x40 0xA5   [7,11] 0 0 0 0 [ShortSpear, SilverBlade, SilverAxe] AttackInRangeAI
UNIT Carlyle Swordmaster 0x40 0xA5 [10,9] 0 0 0 0 [WindSword] AttackInRangeAI
UNIT Gheb Warrior 0x40 0xA5       [2,4] 0 0 0 0 [KillerAxe, KillerBow] NeverMoveAI
UNIT Beran Ranger 0x40 0xA5       [17,14] 0 0 0 0 [Lancereaver, KillerBow, Longbow] AttackInRangeAI
UNIT

Traps1:
Vein(9,23,0x0,DV1Desc) //freeze enemies
ENDTRAP
ALIGN 4

Traps2:
ENDTRAP
ALIGN 4

BeginningScene:
ENUT 0x1 //no more boss quotes
ENUT 0x2 //no more death quotes
LOAD1 0x1 EnemyUnits
ENUN
LOAD1 0x1 EnemyUnits2
ENUN
LOAD1 0x0 Units1 //0x0 instead of 0x1 seems to be for allies on maps with prep screens
ENUN
LOAD1 0x0 Units2
ENUN
LOAD1 0x0 MoreUnits
ENUN
// FADI 10
// MOVE 0 Carlyle [7,10]
// ENUN
//   StartBattle //scripted fight setup
//   MissedAttack(0,0) //Seth misses
//   NormalDamage(1,0) //Valter hits
//   EndAttack
// FIG1 Carlyle Aias 0
// STAL 60
// FADU 10
GotoPrepScreen

EndingScene:
ASMC 0x85C71 0x381F5 0x37CF9 //show records screen
STAL 120
EVBIT_F 0x2
MNTS 0x1 //return to title screen
NoFade
ENDA

VillageEvent:
	VillageEventItem(VillageText, Village, Boots)

HouseEvent:
	// Set parameters
	SVAL r1 NiceThighsID
	SVAL r2 (-1) // (-1) is active unit
	
	// Check if unit has skill
	// If they have, goto label #0 (end)
	ASMC (ASMC_HasSkill+1)
	BNE 0 rC r0
	
	// Learn skill to unit
	ASMC (ASMC_LearnNewSkill+1)
	
LABEL 0
	// end
	
	Text(HouseText)
	
	NoFade
	ENDA
	
	// HouseEvent(HouseText, HouseBG)

FreezeAllEnemies:
VeinActivation
ASMC FreezeAllASMC|1
NoFade
ENDA

TalkEvent:
Text(0xc0a)
NoFade
ENDA

ShopItems:
SHLI Thunder Elfire Nosferatu Divine Mend Physic PureWater Elixir
ALIGN 4

ArmoryItems:
SHLI SteelAxe SteelLance SteelBow SteelSword HandAxe Javelin
ALIGN 4