Language…
8 users online: Alansanchez412,  Anorakun, Daniel30sp,  idol, Jaozin712, Natsuz2, RicardoDeMelo, TheSpreee333 - Guests: 105 - Bots: 199
Users: 69,709 (2,536 active)
Latest user: Spudd_4343

1up Mushroom not working after Coin on Kill Patches

I just recently installed 2 patches in my hack and have noticed 1up Mushrooms don't add a 1up to the life counter anymore. But you can still get 1ups from 100 coins or 5 dragon coins (as seen here).

The 2 patches I used were "Give coin instead of points" patch by KevinM & "Spinning Coin on Fireball Kill" by RussianMan. Both were patch in an effort entirely replace score with coins, and both work well outside of this 1up issue. to Below are the respective codes.

"Give coin instead of points"
Code
if read1($00FFD5) == $23        ; check if the rom is sa-1
    sa1rom
    !addr = $6000
    !D8 = $3216
    !E4 = $322C
    !14D4 = $3258
    !14E0 = $326E
else
    lorom
    !addr = $0000
    !D8 = $D8
    !E4 = $E4
    !14D4 = $14D4
    !14E0 = $14E0
endif

org $02ACE6
autoclean JSL GiveCoin
PLX
RTL

freedata

GiveCoin:
    INC $13CC|!addr     ; Give 1 coin
    LDA $0DC0|!addr     ;\ Update the green star block counter
    BEQ +               ;|
    DEC $0DC0|!addr     ;/
+   LDA !14E0,x         ;\ If the sprite is offscreen, don't spawn the spinning coin
    XBA                 ;|
    LDA !E4,x           ;|
    REP #$20            ;|
    SEC                 ;|
    SBC $1A             ;|
    CLC                 ;|
    ADC #$0010          ;|
    CMP #$0120          ;|
    SEP #$20            ;|
    BCS .Return         ;/
;    LDA #$01           ;\ Play coin sfx
;    STA $1DFC|!addr    ;/
    PHY                 ; Save Y for later
    LDY #$03            ;\ Find free spinning coin slot (and overrite if necessary)
-   LDA $17D0|!addr,y   ;|
    BEQ +               ;|
    DEY                 ;|
    BPL -               ;|
    INY                 ;/
+   LDA #$01            ;\ Set slot as taken
    STA $17D0|!addr,y   ;/
    LDA !E4,x           ;\ Position of coin = position of sprite
    STA $17E0|!addr,y   ;|
    LDA !14E0,x         ;|
    STA $17EC|!addr,y   ;|
    LDA !D8,x           ;|
    STA $17D4|!addr,y   ;|
    LDA !14D4,x         ;|
    STA $17E8|!addr,y   ;/
    LDA #$00            ;\ Set spawned from layer 1
    STA $17E4|!addr,y   ;/
    LDA #$D0            ;\ Y speed
    STA $17D8|!addr,y   ;/
    PLY                 ; Restore Y
.Return
    RTL                 ; Return


"Spinning Coin on Fireball Kill"
Code
!bank = $800000
!addr = $0000
!D8 = $D8
!E4 = $E4
!14D4 = $14D4
!14E0 = $14E0
!14C8 = $14C8
if read1($00FFD5) == $23
sa1rom
!bank = $000000
!addr = $6000
!D8 = $3216
!E4 = $322C
!14D4 = $3258
!14E0 = $326E
!14C8 = $3242
endif

org $02A124
autoclean JML TurnIntoSpinningCoin

freecode
TurnIntoSpinningCoin:
LDA #$03			;restore sound effect
STA $1DF9|!addr			;

STZ !14C8,x			;the sprite is dead, really dead

SpawnSpinningCoin:
LDY #$03			;all spinning coin sprite slots

.Loop
LDA $17D0|!addr,y		;
BEQ .Spawn			;
DEY				;
BPL .Loop			;

DEC $1865|!addr			;if no slot is free, replace one of them
BPL .UseDisAddr			;

LDA #$03			;
STA $1865|!addr			;

.UseDisAddr
LDY $1865|!addr			;

.Spawn
LDA #$01			;
STA $17D0|!addr,y		;
DEC				;process on layer 1
STA $17E4|!addr,y		;

JSL $05B34A|!bank		;add a single coin

LDA !D8,x			;set position, Y
STA $17D4|!addr,y		;

LDA !14D4,x			;high byte
STA $17E8|!addr,y		;

LDA !E4,x			;set position, X
STA $17E0|!addr,y		;

LDA !14E0,x			;high byte
STA $17EC|!addr,y		;

LDA #$D0			;coin timer
STA $17D8|!addr,y		;
JML $02A143|!bank		;next slot and stuff


Any ideas on what the problem may be?
The culprit is my patch, since it overrides all score sprites which include 1/2/5-UPs (which are just a special case of score). The original requester also nuked lives so it didn't really matter. You can try to replace the patch with this and reapply it:
Code
if read1($00FFD5) == $23        ; check if the rom is sa-1
    sa1rom
    !addr = $6000
    !bank = $000000
    !D8 = $3216
    !E4 = $322C
    !14D4 = $3258
    !14E0 = $326E
else
    lorom
    !addr = $0000
    !bank = $800000
    !D8 = $D8
    !E4 = $E4
    !14D4 = $14D4
    !14E0 = $14E0
endif

org $02ACE6
autoclean JSL GiveCoin
PLX
RTL

freedata

GiveCoin:
    cmp #$08 : bcc .coin
.lives:
    clc : adc #$05
    jml $02ACEF|!bank
.coin:
    INC $13CC|!addr     ; Give 1 coin
    LDA $0DC0|!addr     ;\ Update the green star block counter
    BEQ +               ;|
    DEC $0DC0|!addr     ;/
+   LDA !14E0,x         ;\ If the sprite is offscreen, don't spawn the spinning coin
    XBA                 ;|
    LDA !E4,x           ;|
    REP #$20            ;|
    SEC                 ;|
    SBC $1A             ;|
    CLC                 ;|
    ADC #$0010          ;|
    CMP #$0120          ;|
    SEP #$20            ;|
    BCS .Return         ;/
;    LDA #$01           ;\ Play coin sfx
;    STA $1DFC|!addr    ;/
    PHY                 ; Save Y for later
    LDY #$03            ;\ Find free spinning coin slot (and overrite if necessary)
-   LDA $17D0|!addr,y   ;|
    BEQ +               ;|
    DEY                 ;|
    BPL -               ;|
    INY                 ;/
+   LDA #$01            ;\ Set slot as taken
    STA $17D0|!addr,y   ;/
    LDA !E4,x           ;\ Position of coin = position of sprite
    STA $17E0|!addr,y   ;|
    LDA !14E0,x         ;|
    STA $17EC|!addr,y   ;|
    LDA !D8,x           ;|
    STA $17D4|!addr,y   ;|
    LDA !14D4,x         ;|
    STA $17E8|!addr,y   ;/
    LDA #$00            ;\ Set spawned from layer 1
    STA $17E4|!addr,y   ;/
    LDA #$D0            ;\ Y speed
    STA $17D8|!addr,y   ;/
    PLY                 ; Restore Y
.Return
    RTL                 ; Return