How many changes was it at the asm level? Hijacking P1 for shroom and most other things in-place worked?
How far can you go off-screen?
The way the enemies move is actually pretty straightforward:
-They have a byte that specifies the direction they are facing,
-And another one which is their current animation ID,
The animations handle the movements, so if a monster is facing left and its current animation is 01 (Walk), the monster will play its walking animation and move towards the left.
-all enemies use the first 3 animation IDs for the same behaviours:
Idle, walk, Run (if I recall correctly)
-There is a byte that specifies if the character is attacking or not
If the character is not attacking, it plays(or continue playing) the "current animation" every frame
Otherwise it performs an attack, each monster have different attacks and they dont use the same IDs as the "normal" animations
I expanded the rom and made a routine that gets called every frames:
It only controls the enemy in the 1st enemy "slot",
It reads P2's D-Pad, sets the monster's facing direction accordingly and set 01 (Walk) as the current animation
if the D-Pad is released, it sets the current animation to 00 (Idle)
P2's A,B,X,Y button are then read
if any button is pressed then The "attacking" flag is set to true and the AttackID is set depending on which button is pressed (A = 00, B = 01, X = 02, Y = 03)
The routine also sets a byte in the "controlled" monster's character data that specifies if the character is control by the CPU or by a human to prevent it to read it's AI scriptps.
Its all that was needed to control any monster, altho I only tested with a few different monsters, I think it should work fine with all monsters.
Well..anyhing but bosses.. which instantly crash the game horribly when the fight starts lol
and about how far I can go off-screen.. No idea I would need to test it