I've spent enough time. Seems that setting the flag does nothing, and I don't have enough understanding of how the game's scripts are structured to know exactly what's happening and what is getting called when. As far as I can tell, the Krotite entity never gets instantiated at all, and therefore no matter what code I might put into its class nothing happens because it won't be called... but I can't be sure. Even so - like I said before I was able to make it so that Li breaks out without any song or having all 4 spirits.
Here's how, just in case anyone else has this problem. I'll report over whether or not I can actually finish the game after doing this.
* Go into /scripts/entities/licage.lua
* You're going to modify the if statement at line 94.
* Change it to the following:
if not isFlag(FLAG_FINAL, FINAL_FREEDLI) then
if not seen and entity_isEntityInRange(me, n, 600) then
entity_flipToEntity(n, me)
entity_idle(n)
emote(EMOTE_NAIJALI)
seen = true
cam_toEntity(me)
watch(1)
cam_toEntity(n)
entity_setState(me, STATE_OPEN);
enterState(me);
end
end
The last two lines (setting the state to open) will make it so that when Naija sees the cage and yells, "Li!" it will suddenly bust open no matter what. This gave me the dual form and so appears to fix the problem. It's possible that I'll need the Krotite's flag to be correctly set later, though, I'm unsure.
You can also use the above to completely skip The Body and just bust Li out, if you want.
I'd recommend poking around in the scripts - I also noticed you can do things like make the enemies drop tons of arcane poultice and the like.
(If you're interested in checking out my save file to see what exactly is happening, here it is ZIPped up:
http://www.mediafire.com/?sharekey=5d17cac6b27cf18100d27174b47c6657e04e75f6e8ebb871 )