lorom header ; if 1 this patch will only change the physics of player 2 ; otherwise it will affect both players !p2_only ?= 0 !curr_player = $0DB3 !riding_yoshi = $187A !player_x_subspeed = $7A !player_x_speed = $7B !player_y_speed = $7D org $00D663 autoclean jml jump_hijack nop jump_hijack_ret: org $00D77C jml neutral_decel_hijack nop neutral_decel_hijack_ret_mario: org $00D6F8 jml accel_hijack nop org $00D742 jml accel_hijack_2 nop nop accel_hijack_2_ret_mario: org $00D948 jml gravity_hijack gravity_hijack_ret: org $00D892 jml dive_speed_hijack nop dive_speed_hijack_ret: org $00D958 jml air_catch_speed_hijack air_catch_speed_hijack_ret1: lda $D7D9,y air_catch_speed_hijack_ret2: org $00D014 jml pspeed_pose_hijack pspeed_pose_hijack_ret1: adc #$03 pspeed_pose_hijack_ret2: org $02916C jml noteblock_bounce_hijack noteblock_bounce_hijack_ret: org $028773 jml turnblock_bounce_hijack turnblock_bounce_hijack_ret: org $01E68D jml spring_bounce_hijack spring_bounce_hijack_ret_mario: org $01E6A4 spring_bounce_hijack_ret_luigi1: sty $1406 spring_bounce_hijack_ret_luigi2: org $02CDE7 jml pea_bouncer_ab_hijack nop pea_bouncer_ab_hijack_ret: org $02CFE5 jml pea_bouncer_noab_hijack nop pea_bouncer_noab_hijack_ret: org $00DB9C jml climb_jump_hijack climb_jump_hijack_ret_mario: lda $DABB,y climb_jump_hijack_ret_luigi: org $01DA33 jml rope_jump_hijack rope_jump_hijack_ret: org $00D2B6 jml diagonal_pipe_hijack org $01AA37 jml enemy_bounce_hijack enemy_bounce_hijack_ret_mario: bpl enemy_bounce_hijack_ret_luigi lda #$A8 enemy_bounce_hijack_ret_luigi: org $00EA9B jml water_jump_hijack water_jump_hijack_ret_mario: lda #$AA water_jump_hijack_ret_luigi: org $029FC8 jml fireball_falling_check_fix nop org $00D23A jml vert_pipe_eject_fix vert_pipe_eject_fix_ret: if !p2_only org $01EDB1 jml yoshi_dismount_speed_hijack yoshi_dismount_speed_ret_mario: org $01EDC1 yoshi_dismount_speed_ret_luigi: org $01F729 jsl yoshi_knocked_off_speed_hijack org $02A490 jsl yoshi_knocked_off_speed_hijack org $00EB6B jml wallrun_jump_hijack wallrun_jump_hijack_ret_mario: lda #$E0 wallrun_jump_hijack_ret_luigi: org $029FCF jml fireball_gravity_hijack fireball_gravity_ret_mario: adc #$04 fireball_gravity_ret_luigi: org $029FF8 jml fireball_bounce_hijack fireball_bounce_hijack_ret: else ; yoshi ; air dismount org $01EDB1 lda #$CA ldy $72 ; ground dismount y org $01EDBF lda #$DA ; ground dismount x org $01EBC0 db $0A,$F6 ; knocked off y org $01F729 lda #$DA org $02A490 lda #$DA ; wallrun org $00EB6F lda #$E2 ; fireball gravity org $029FD3 adc #$0B org $029F99 db $00,$80,$88,$90,$98,$A0,$A8,$B0 db $B8 endif freecode jump_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: lda.l jump_y_speed_luigi,x sta !player_y_speed jml jump_hijack_ret .mario: lda $D2BD,x sta !player_y_speed jml jump_hijack_ret neutral_decel_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: phb phk plb lda $1493 ora $72 rep #$20 bne + lda.w neutral_decel_ice_luigi,y bit $85 bmi ++ + lda.w neutral_decel_luigi,y ++ clc adc !player_x_subspeed sta !player_x_subspeed sec sbc $00D5C9,x eor.w neutral_decel_luigi,y bmi + plb jml $00D79D + plb jml $00D7A2 .mario: lda $1493 ora $72 jml neutral_decel_hijack_ret_mario accel_hijack: pha lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: pla eor.l accel_luigi+1,x bpl + jml $00D6FD + jml $00D713 .mario: pla eor $D345+1,x bpl + jml $00D6FD + jml $00D713 accel_hijack_2: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: phb phk plb lda !player_x_speed sec sbc.w max_x_speed_luigi,y beq ++ eor.w max_x_speed_luigi,y bpl ++ rep #$20 lda.w accel_luigi,x ldy $85 beq + ldy $72 bne + lda.w accel_ice_luigi,x + plb jml $00D75F ++ plb jml $00D76B .mario: lda !player_x_speed sec sbc $D535,y jml accel_hijack_2_ret_mario gravity_hijack: pha lda !riding_yoshi bne .mario lda $71 cmp #$09 beq .mario if !p2_only lda !curr_player beq .mario endif .luigi: pla tyx clc adc.l gravity_luigi,x jml gravity_hijack_ret .mario: pla clc adc $D7A5,y jml gravity_hijack_ret dive_speed_hijack: pha lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: pla phx tyx cmp.l dive_speed_luigi,x bcc + lda.l dive_speed_luigi,x + plx jml $00D89A .mario: pla cmp $D7C8,y bcc + jml dive_speed_hijack_ret + jml $00D89A air_catch_speed_hijack: pha lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: pla lsr lsr lsr tax tay lda.l air_catch_speed_luigi,x jml air_catch_speed_hijack_ret2 .mario: pla lsr lsr lsr tay jml air_catch_speed_hijack_ret1 pspeed_pose_hijack: pha lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: pla cpx #$27 bcc .to_ret2 jml pspeed_pose_hijack_ret1 .mario: pla cpx #$2F bcc .to_ret2 jml pspeed_pose_hijack_ret1 .to_ret2 jml pspeed_pose_hijack_ret2 noteblock_bounce_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: lda #$C6 sta !player_y_speed jml noteblock_bounce_hijack_ret .mario: lda #$A0 sta !player_y_speed jml noteblock_bounce_hijack_ret turnblock_bounce_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: lda #$E2 sta !player_y_speed jml turnblock_bounce_hijack_ret .mario: lda #$D0 sta !player_y_speed jml turnblock_bounce_hijack_ret spring_bounce_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi ldy #$D2 lda $17 bpl + lda #$01 sta $140D bra ++ + lda $15 bpl + ++ lda #$0B sta $72 ldy #$B6 jml spring_bounce_hijack_ret_luigi1 + jml spring_bounce_hijack_ret_luigi2 .mario: ldy #$B0 lda $17 jml spring_bounce_hijack_ret_mario pea_bouncer_ab_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: phx tyx lda.l pea_bouncer_ab_luigi,x plx sta !player_y_speed jml pea_bouncer_ab_hijack_ret .mario: lda $CDFF,y sta !player_y_speed jml pea_bouncer_ab_hijack_ret pea_bouncer_noab_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: phx tyx lda.l pea_bouncer_noab_luigi,x plx sta !player_y_speed jml pea_bouncer_noab_hijack_ret .mario: lda $CE07,y sta !player_y_speed jml pea_bouncer_noab_hijack_ret diagonal_pipe_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: lda #$CC sta !player_y_speed jml $00DC2D .mario: lda #$C0 sta !player_y_speed jml $00DC2D climb_jump_hijack: lda #$0B sta $72 lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: phx tyx lda.l climb_jump_luigi,x plx jml climb_jump_hijack_ret_luigi .mario: jml climb_jump_hijack_ret_mario rope_jump_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: lda #$D2 sta !player_y_speed jml rope_jump_hijack_ret .mario: lda #$B0 sta !player_y_speed jml rope_jump_hijack_ret enemy_bounce_hijack: lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: lda #$E4 bit $15 bpl + lda #$CA + jml enemy_bounce_hijack_ret_luigi .mario: lda #$D0 bit $15 jml enemy_bounce_hijack_ret_mario water_jump_hijack: lda #$0B sta $72 lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: lda #$CF jml water_jump_hijack_ret_luigi .mario: jml water_jump_hijack_ret_mario fireball_falling_check_fix: lda $173D,x bmi + cmp #$30 jml $029FCD + jml $029FCF vert_pipe_eject_fix: ldy $88 beq .finished jml vert_pipe_eject_fix_ret .finished: bcc .entering stz !player_y_speed jml $00D26A .entering jml $00D273 if !p2_only yoshi_dismount_speed_hijack: lda !player_x_speed sta $B6,x lda !curr_player bne .luigi .mario: jml yoshi_dismount_speed_ret_mario .luigi: lda #$CA ldy $72 bne + phk pea.w .jslrtsreturn-1 pea.w $0180CA-1 jml $01AD30 .jslrtsreturn phx tyx lda.l yoshi_dismount_x_speed_luigi,x sta !player_x_speed lda #$DA plx + jml yoshi_dismount_speed_ret_luigi yoshi_knocked_off_speed_hijack: lda !curr_player bne .luigi .mario: lda #$C0 sta !player_y_speed rtl .luigi: lda #$DA sta !player_y_speed rtl wallrun_jump_hijack: lda #$24 sta $72 lda !riding_yoshi bne .mario if !p2_only lda !curr_player beq .mario endif .luigi: lda #$E2 jml wallrun_jump_hijack_ret_luigi .mario: jml wallrun_jump_hijack_ret_mario fireball_gravity_hijack: lda !curr_player bne .luigi .mario: lda $173D,x clc jml fireball_gravity_ret_mario .luigi: lda $173D,x clc adc #$0B jml fireball_gravity_ret_luigi fireball_bounce_hijack: lda !curr_player bne .luigi .mario: tay lda $9F99,y jml fireball_bounce_hijack_ret .luigi: tay lda $9F99,y sec sbc #$38 jml fireball_bounce_hijack_ret endif jump_y_speed_luigi: db $D2,$D5,$D0,$D3,$CD,$D1,$CB,$CF db $C9,$CE,$C7,$CB,$C4,$C9,$C2,$C6 neutral_decel_luigi: dw $FF67,$0099 dw $FF00,$0100,$FF00,$0100 dw $FE80,$00C0,$FF40,$0180 dw $FE00,$0040,$FFC0,$0200 dw $FE00,$0040,$FE00,$0040 dw $FFC0,$0200,$FFC0,$0200 dw $FC00,$FF00,$0100,$0400 dw $FF67,$0099,$FF67,$0099 neutral_decel_ice_luigi: dw $FFED,$0013 dw $FFED,$0013,$FFED,$0013 dw $FFDA,$0013,$FFED,$0026 dw $FFB4,$0013,$FFED,$004C dw $FFB4,$0013,$FFB4,$0013 dw $FFED,$004C,$FFED,$004C dw $FECD,$FFB4,$004C,$0133 dw $FF67,$0099,$FF67,$0099 accel_luigi: dw $FE80,$FE80,$0180,$0180 dw $FE80,$FE80,$0180,$0180 dw $FE80,$FE80,$0180,$0180 dw $FE80,$FE80,$0140,$0140 dw $FEC0,$FEC0,$0180,$0180 dw $FE80,$FE80,$0100,$0100 dw $FF00,$FF00,$0180,$0180 dw $FE80,$FE80,$0100,$0100 dw $FE80,$FE80,$0100,$0100 dw $FF00,$FF00,$0180,$0180 dw $FF00,$FF00,$0180,$0180 dw $FC00,$FC00,$FD00,$FD00 dw $0300,$0300,$0400,$0400 dw $FC00,$FC00,$0600,$0600 dw $FA00,$FA00,$0400,$0400 dw $FF80,$0080,$FF00,$0100 dw $FE80,$0180,$FE80,$FE80 dw $0180,$0180,$FE80,$0280 dw $FEC0,$FD80,$0140,$0280 dw $FD80,$FB00,$0280,$0500 dw $FD80,$FB00,$0280,$0500 dw $FD40,$FA80,$0240,$0480 dw $FDC0,$FB80,$02C0,$0580 dw $FD00,$FA00,$0200,$0400 dw $FE00,$FC00,$0300,$0600 dw $FD00,$FA00,$0200,$0400 dw $FD00,$FA00,$0200,$0400 dw $FE00,$FC00,$0300,$0600 dw $FE00,$FC00,$0300,$0600 dw $FD00,$FA00,$FD00,$FA00 dw $0300,$0600,$0300,$0600 accel_ice_luigi: dw $FF80,$FE80,$0080,$0180 dw $FF80,$FE80,$0080,$0180 dw $FF80,$FE80,$0080,$0180 dw $FE80,$FE80,$0080,$0140 dw $FF80,$FEC0,$0180,$0180 dw $FE80,$FE80,$0080,$0100 dw $FF80,$FF00,$0180,$0180 dw $FE80,$FE80,$0080,$0100 dw $FE80,$FE80,$0080,$0100 dw $FF80,$FF00,$0180,$0180 dw $FF80,$FF00,$0180,$0180 dw $FC00,$FC00,$FE00,$FD00 dw $0300,$0300,$0400,$0400 dw $FC00,$FC00,$0080,$0080 dw $FF80,$FF80,$0400,$0400 dw $FF80,$0080,$FF00,$0100 dw $FE80,$0180,$FE80,$FE80 dw $0180,$0180,$FE80,$0280 dw $FFE0,$FEC0,$0020,$0140 dw $FFE0,$FEC0,$0020,$0140 dw $FFE0,$FEC0,$0020,$0140 dw $FFC0,$FEA0,$0020,$0120 dw $FFE0,$FEE0,$0040,$0160 dw $FE80,$FE80,$0020,$0100 dw $FFE0,$FF00,$0180,$0180 dw $FE80,$FE80,$0020,$0100 dw $FE80,$FE80,$0020,$0100 dw $FFE0,$FF00,$0180,$0180 dw $FFE0,$FF00,$0180,$0180 dw $FE80,$FE80,$FE80,$FE80 dw $0180,$0180,$0180,$0180 max_x_speed_luigi: db $EC,$14,$DC,$24,$DC,$24,$D8,$28 ; copy of mario table db $EC,$14,$DC,$24,$DC,$24,$D0,$30 db $EC,$14,$DC,$24,$DC,$24,$D0,$30 db $E8,$12,$DC,$20,$DC,$20,$D0,$2C db $EE,$18,$E0,$24,$E0,$24,$D4,$30 db $DC,$10,$DC,$1C,$DC,$1C,$D0,$28 db $F0,$24,$E4,$24,$E4,$24,$D8,$30 db $DC,$10,$DC,$1C,$DC,$1C,$D0,$28 db $DC,$10,$DC,$1C,$DC,$1C,$D0,$28 db $F0,$24,$E4,$24,$E4,$24,$D8,$30 db $F0,$24,$E4,$24,$E4,$24,$D8,$30 db $DC,$F0,$DC,$F8,$DC,$F8,$D0,$FC db $10,$24,$08,$24,$08,$24,$04,$30 db $D0,$08,$D0,$08,$D0,$08,$D0,$08 db $F8,$30,$F8,$30,$F8,$30,$F8,$30 db $F8,$08,$F0,$10,$F4,$04,$E8,$08 db $F0,$10,$E0,$20,$EC,$0C,$D8,$18 db $D8,$28,$D4,$2C,$D0,$30,$D0,$D0 db $30,$30,$E0,$20 gravity_luigi: db $02,$01,$04,$10,$F4,$01,$01,$01,$02,$06 dive_speed_luigi: db $01,$0C,$10,$10,$14,$14,$40 air_catch_speed_luigi: db $00,$00,$F4,$F0,$C8,$C8,$C8,$C8,$C8,$02,$01 climb_jump_luigi: db $D2,$F0 pea_bouncer_ab_luigi: db $D6,$D4,$D0,$CC,$C8,$C2,$BC,$B8 pea_bouncer_noab_luigi: db $00,$00,$F6,$F0,$E4,$DE,$DA,$D4 if !p2_only yoshi_dismount_x_speed_luigi: db $0A,$F6 endif