[FE8] Understanding MOVEFORCED command

I’m trying to understand manual moves in FE8:

This is Franz in the prologue:

SETVAL 0xD 0x0 //start
SETVAL 0x1 0x104 //left
SAVETOQUEUE
SETVAL 0x1 0x0 //separator?
SAVETOQUEUE
SETVAL 0x1 0x84 //up
SAVETOQUEUE
SETVAL 0x1 0x0
SAVETOQUEUE
SETVAL 0x1 0x80 //left
SAVETOQUEUE
SETVAL 0x1 0x0
SAVETOQUEUE
MOVEFORCED 0x0 0x4 0x0 //actually move
ENUN

And this is Seth a bit later:

SETVAL 0xD 0x0
SETVAL 0x1 0x18104
SAVETOQUEUE
SETVAL 0x1 0x0
SAVETOQUEUE
SETVAL 0x1 0x18084
SAVETOQUEUE
SETVAL 0x1 0x0
SAVETOQUEUE
SETVAL 0x1 0x18080
SAVETOQUEUE
SETVAL 0x1 0x0
SAVETOQUEUE
MOVEFORCED 0x0 0x2 0x0
ENUN

It seems like the two moves are very similar, except Seth starts one square down from Franz, and Seth has 0x18000 added to his SETVALs. Can someone help me make sense of these parameters?

Edit: maybe the last digit is the X-coordinate? But there seems to be no Y-coordinate.

Maybe this will help you?

Err, the second post has the link for it.

1 Like

Scratch all of that I’m an idiot apparently and this was the correct solution all along. At least I got to see Franz go crazytownbananapants.

Maybe?

I can see that [4,2] converts to 84 00 which works for SETVAL 0x1 0x84 and [0,2] converts to 80 00 which works for SETVAL 0x1 0x80

But [4,5] converts to 44 01 when I expected 04 01. And none of it explains Seth’s extra 0x18000.

EDIT:
Okay, now I’m really lost. I tried changing Franz’s first move (0x104) to 0x80, and he moves to [0,2], then [4,2], then back to [0,2]. So it seems like they are just coordinates.

Then I tried 0x1, and he moved to [1,0] then [4,2] etc. Same for 0x18000+1.
Then I tried 0x2, which makes him go to [3,0].
0x4 makes him go to [5,0].
So I figured that 0x8 might make him go to [7,0] but instead I get this:
http://gfycat.com/SizzlingAngryGossamerwingedbutterfly
Now, maybe that’s just the pathfinding screwing up from the terrain, but he also went straight to [9,0]

More stuff:
0x10 makes him head to [-1, 1] and crashes the game.
0x11 is [0,1]
0x100 is [3,0]
0x101 is [4,1]

I think I’m a bit too late for this, but I think I figured out how MOVEFORCED works.
It uses 6 bits for X position and 6 bits for Y, and Y goes before X.

Also

0x10 actually is [16,0], but it crashes because it goes beyond the map size.

5 Likes