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.