Thread: Research: [Gold/Silver] Running Shoes
View Single Post
Old January 27th, 2010 (10:21 AM). Edited January 29th, 2010 by Coolboyman.
Coolboyman's Avatar
Coolboyman Coolboyman is offline
Veteran Hacker
    Join Date: Sep 2003
    Location: The East Bay
    Age: 29
    Gender: Male
    Nature: Bold
    Posts: 471
    Here's a simple thing I did for Prism. It lets you run when you hold B.

    First thing's first. When the bike shop owner calls you it's pretty buggy without the correct flags. So lets just disable that.

    ld hl,$7BE4 (21 E4 7B) - This will prevent the "bike step count" from working. It will always write 00 to the RAM where it's supposed to add up, so the bike shop owner will never call you.

    10000: call $7E66 (CD 66 7E) - This will call the ASM from 13E66 needed to make this work.

    call $4017 (CD 17 40) - This is what was originally at 10000, to make sure nothing "screws up" we'll just move it here.
    ld de,$D682 (11 82 D6) - Loads D682 from the ram into de (which is what determines if Hiro is on the bike or not)
    ld c,$04 (0E 04) - Since the RAM uses the same location to check if you are surfing (identified with 04), let's make sure this function does nothing if you are surfing.
    ld a,[de] (1A) - Puts the contents of de (D682 in RAM) into a.
    sbc a,c (99) - Subtracts c from a
    jr z,$7E8B (28 18) - Checks if a is equal to 0. If so, jump ahead 18 bytes which is ret (C9), ending the function. Since a can only equal 0 if it was previous 4, this will only happen if you are surfing.
    ld de,$CF29 (11 29 CF) - loads CF29 (indicates what keys are down) into de.
    ld a,[de] (1A) - loads the contents of de into a.

    Since bit 1 is on if B is down, let's make it so it ignores the other bits. Let me know if there's an eaiser way of doing this, for some reason the other bit commands weren't working for me.

    res 0,a (CB 87) - turns bit 0 in a to off (A)
    res 2,a (CB 97) - turns bit 2 in a to off (Select)
    res 3,a (CB 9F) - turns bit 3 in a to off (Start)
    res 4,a (CB A7) - turns bit 4 in a to off (Right)
    res 5,a (CB AF) - turns bit 5 in a to off (Left)
    res 6,a (CB B7) - turns bit 6 in a to off (Up)
    res 7,a (CB BF) - turns bit 7 in a to off (Down)
    rcc, a (CB 0F) - shifts the bits in A down 1, changing 2 into 1.
    ld de,$D682 (11 82 D6) - loads D682 into de again
    ld [de],a (12) - Puts the contents of a into de.
    ret (C9)

    This will make the game write 01 into D682 if B is held down. If D682 is 01, that will make your characters speed increase. If you use this, just please give me credit. Enjoy.
    Reply With Quote