Branch distance has a limit.
So, if you want to jump to a far memory position, you will get an error. That is a good new, because, in other case, you program will have an erratic behaviour when running.
My solution for this issue is (first) trying to reallocate the code (cut & paste), so the branch target is closer.
If I cannot do that, I branch to a jmp instruction. Jump instruct jumps to the subroutine too far from the branch.
Here you can see how the first branch (bcs) just to a jump the subroutine I want to execute.
Take_CMD
; Name is an item
jsr Name_Is_Item
bcs Take_P_Useless
; Item is in current loc
;jsr Lda_Obj_Status
;cmp loc
jsr Item_in_Loc
bne Lbl_No_Item
; I AM NOT SAVING SPECIAL BITS
lda #LOC_INVENTORY
sta obj_status,x
; Call inventory to confirm
jsr Inventory_CMD
rts
Lbl_No_Item
lda #no_item
jsr PRTSTR
rts
Take_P_Useless
jmp P_Useless
I lose 3 bytes of memory but I have no a better solution so I am eager to listen to alternatives.