This hack, in its current incarnation, allows you to define weapon locks for characters or classes by an
array located anywhere you wish. It can also distinguish between 'hard' locks, which operate the same
as the vanilla GBA locks, or 'soft' locks, which let the matching character use the weapon at Level E,
no matter what its normal rank is.
This, however, requires some setup. Part of the ASM code will point to a pointer table; each
pointer in that table should lead to an array that determines which character IDs are part of the lock,
and whether the lock is a soft or hard one.
Which pointer in that table is used is determined by the Ability Byte 4 in the weapon you wish to give
the lock to. 0x01 means the weapon will use the first pointer; 0x02 the second, and so forth. 0x00 indicates that the weapon will not use a custom lock.
The proper format for each array is as follows: the first byte indicates whether or not the lock is
soft or hard, and whether it uses character or class IDs: 0x00 = soft character, 0x01 = hard character, 0x02 = soft class, 0x3 = hard class.
(So the first bit determines hard/soft; the second bit determines class/character)
Then follows the IDs of every character/class that is part of the lock. At the end of the array must be
a 0x00 byte, so the routine knows to stop looking for character IDs. There is also a feature whereby you can set a weapon to require ranks in multiple weapon types, or one among multiple. See the readme for more.
This hack will also nullify all of the default weapon locks based on the vanilla system. More details, and complete installation instructions, can be found in the readme itself.
The hack itself can be downloaded here.