[ASM] Free Movement (FE8)
This allows you to freely control a character on a map in lieu of traditional cursor-based gameplay.
Of course, if the only thing you could do is move around it would be pretty useless. You can also interact with the map using the A button.
This means you can do shops as well.
Shops aren’t the only thing you can interact with. Interacting with a door or chest will open it.
You can also have events that run when you enter a certain area or every time you take a step.
You can also interact with other units on the map.
Lastly, you have a menu, which you can do anything you want with content-wise. By default, it contains some map menu commands specifically the ones that I tested and didn’t crash the game.
Movement collision is based upon whether or not the tile is passable by the unit you’re controlling, or if there is a unit in the space you’re attempting to move onto. You are always in control of the first player unit (to let the player choose who this is, make a prep screen with 1 deploy slot; otherwise, this will usually be your lord if they are force-deployed on every map). Move around with the D-pad as you would expect, and press A to interact with the tile you’re standing on. If you hold a direction and press A, you interact with the tile next to you in that direction; standing next to a unit, holding towards them, and pressing A will interact with them. The L button opens the menu.
Events for this are set up largely the same way that you would normally do events for a chapter. AFEVs and AREAs will run the step after the condition to run them is met, largely analogous to them running after each unit’s action in normal gameplay. Chests and doors are defined the same way as they are normally, but you don’t need a key/lockpick/etc to open them in free movement mode. You can place chest events anywhere, but note that if there is not a tile change at that position the chest won’t work properly (the tile change can be a single tile of the tile that denotes “don’t change this tile”). Talk events are defined in the same place as normal, but note that the only thing read is the second character and the event pointer, so you can’t have multiple talk events with one unit from different initiators set up in the normal way. You can do checks within the event called by talking to determine character-specific interactions, however. There’s an input for char ID that lets you use the first player unit, but the unit you’re controlling is set to the active unit as well for ease of use. Shops do not work as normal, but instead require the use of an ASMC to call the shop, included with Free Movement (but not installed in its installer). To use it, put a pointer to the shop list in s2 and the shop type ID in s3, then ASMC MakeShopASMC
.
To enable Free Movement mode, call the EnableFreeMovementASMC
. This comes with the definition EnableFreeMovement
for ease of use. As this works by hijacking the phase controller, this will only go into effect at the next phase change. As such, the ideal place for this is in a chapter start event. There’s no way to normally end phase while already in Free Movement mode, and enabling it mid-chapter can lead to some weirdness. There’s also a DisableFreeMovementASMC
, but as before there’s no way to normally end phase while in free movement mode and disabling it mid-chapter will break things, so I would not recommend using this. Note that the game does not suspend automatically while in Free Movement mode. You can call the make suspend save ASMC ASMC 0xB5D5D
to make one at points within your events that you want to save the player’s progress. Of course, manual suspend saves from the menu do function as well. If you have debuffs installed, free movement mode will be automatically turned off between chapters. Otherwise, you’ll need to turn it off manually.
Installing is just #include
ing FreeMovement.event
. To save the state of being in Free Movement mode through suspend, you’ll need Expanded Modular Save (its default configuration should be fine). The command list for the menu is near the bottom of FreeMovement.event
. This will conflict with anything that affects the phase controller function, as it rewrites it. For the shop ASMC, #include "MakeShopASMC.lyn.event"
.
Map used for demonstration here was made by @ZoramineFae with minor edits for the purpose of showing off doors and chests.