Try this one instead:
Codelorom
org $03ACE6
autoclean JML CorrectYPos
freecode
CorrectYPos:
LDA $0DB3
ASL
STA $00
LDA #$00
LDX $19
BNE .big
LDA #$01
.big
PHA
ORA $00
TAX
LDY #$4C
LDA $7E
STA $0300,y
LDA $80
CLC : ADC.l YDisp,x
PLX
JML $03ACF8
; Smaller values means that the face
; is more shited to the top.
YDisp:
;small, big
db $01,$11 ; Mario
db $01,$11 ; Luigi
There are two things I forgot: The first one that I forgot to put an
autoclean in front of the
JML.
The second thing that the game determines the powerup number to set the index for both, the Y offset and tile number.
Since I also added a code to check the current character in play, the code uses the wrong values for the face tiles.
This one preserves the index when the powerup number is checked so the game uses the correct index for the tile number.
Edit: Fixed a small thing.