If the bug only comes from the fact that range modifiers are calculated based on PE*2 it should work.
Instead of multiplying the level of the perk by 2 it's now multiplied by 4 which should be correct.

original code:

BEGTEXT:00424525                 cmp     who, eax
BEGTEXT:00424527                 jnz     short loc_42453F
BEGTEXT:00424529                 mov     edx, PERK_sharpshooter
BEGTEXT:0042452E                 call    has_perk        ; input:
BEGTEXT:0042452E                                         ; eax: who
BEGTEXT:0042452E                                         ; edx: perk
BEGTEXT:0042452E                                         ; output:
BEGTEXT:0042452E                                         ; eax: level of the perk
BEGTEXT:00424533                 mov     edx, [esp+2Ch+var_28]
BEGTEXT:00424537                 add     eax, eax
BEGTEXT:00424539                 sub     edx, eax
BEGTEXT:0042453B                 mov     [esp+2Ch+var_28], edx

new code:

BEGTEXT:00424525                 cmp     who, eax
BEGTEXT:00424527                 jnz     short loc_42453F
BEGTEXT:00424529                 mov     edx, PERK_sharpshooter
BEGTEXT:0042452E                 call    has_perk        ; input:
BEGTEXT:0042452E                                         ; eax: who
BEGTEXT:0042452E                                         ; edx: perk
BEGTEXT:0042452E                                         ; output:
BEGTEXT:0042452E                                         ; eax: level of the perk
BEGTEXT:00424533                 add     eax, eax
BEGTEXT:00424535                 add     eax, eax
BEGTEXT:00424537                 sub     [esp+2Ch+var_28], eax
BEGTEXT:0042453B                 nop
BEGTEXT:0042453C                 nop
BEGTEXT:0042453D                 nop
BEGTEXT:0042453E                 nop

so, at offset 0x14933, the bytes:
8B 54 24 04 01 C0 29 C2 89 54 24 04
were replaced by:
03 C0 03 C0 29 44 24 04 90 90 90 90

ravachol