How do I increase movement above 15 without bugs?
You can’t. The game can only keep track of things like the arrow for so long, and the further past 15 you go, the more likely it is that issues will occur. The arrow might break, you might move to an incorrect tile, or you might just crash the game.
Why would you want such a crazy long range anyway?
You could give a unit effectively endless range by refreshing them after acting, similar to Galeforce from the 3ds games. Or you could have a unit warp around via events. To actually walk that many squares seems unnecessary.
Big is better.
It’s probably not too difficult to create an asm code for ‘can walk to any tile’, but as Darmann said it is otherwise difficult to process large movement ranges.
Not impossible. The game crashes if you go over 18? tiles because the x coordinate buffer overflows into the y coordinate buffer, so we just need to repoint the whole thing. I make no guarantees this won’t break something else, however.
The maximum distance with this seems to be about 60 tiles; past that, something weird happens that I never bothered trying to debug, because really, when are you going to need to move more than 60 squares? (NO THIS ISN’T A CHALLENGE.)
#include this with EA
//make pathfinding arrow not screw up
//Modify global mov cap, according to Venno (gonna change it to 30)
#define ExtraMov 45 //(max value minus 0xF)
#define MovCap 0x0F+ExtraMov
#define YCoord 0x41+ExtraMov
#define Add55 0x55+(ExtraMov*2)
#define Move_Ram_Loc 0x203FB00
PUSH
//Change movement cap
ORG $18286
BYTE MovCap
ORG $18290
BYTE MovCap
ORG $87310
BYTE MovCap
//Change place that everything is written to
ORG $59DBA0
WORD Move_Ram_Loc
//Change y coord location by adding 0x50 instead of 0x41 at certain spots
ORG $32ACC //write when selecting new character (also when moving) (seems to be related to the cursor blinking)
BYTE YCoord
ORG $32B3C //read when selecting a character, also when returning cursor onto character
BYTE YCoord
ORG $32FA0 //read after moving
BYTE YCoord
ORG $331C2 //read
BYTE YCoord
ORG $330AE //read
BYTE YCoord
ORG $33120 //read
BYTE YCoord
ORG $32C6A //read; not sure under what circumstances this is called (same with rest)
BYTE YCoord
ORG $32A44
BYTE YCoord
ORG $32C1C
BYTE YCoord
ORG $32C46
BYTE YCoord
ORG $32CE0
BYTE YCoord
ORG $32D4E
BYTE YCoord
ORG $32DD4
BYTE YCoord
//Change whatever's after the y coordinates to be shifted down by 0x1E (2*0xF)
//For cases that are add (register)
ORG $32AE2
BYTE Add55
ORG $32F54
BYTE Add55
ORG $32E80
BYTE Add55
ORG $32A3A
BYTE Add55
ORG $32D58
BYTE Add55
ORG $32FEA
BYTE Add55
//This one is in the same vein, but adds 0x2C and then 0x29, rather than 0x55 directly
ORG $32A10
BYTE Add55-0x29
POP
It absolutely is a challenge now.