Conversation Between Blah and robinjea
16 to 30 of 37
  1. Blah
    November 5th, 2015 7:07 PM
    Blah
    Oh, let the Berry system sit out for a while. I'll make a better one in the near future. The current one, there is a small bug with a rountine's execution, and I've been too lazy to fix it because I've been telling myself a better version will be created :P
  2. robinjea
    November 5th, 2015 6:43 PM
    robinjea
    Hey FBI~ I tried your Berry System in Fire Red hack but unfortunately, it freezes (locks up everyone's movements but the music still plays) the moment I talk to the "loamy soil". Do you have any idea why? I mean I did everything exactly as you said in the post with the Berry Bag Hack and Saveblock Hack, the scripts and all. -n-
  3. Blah
    October 23rd, 2015 6:04 PM
    Blah
    You need to use the partyswap routine inbetween
  4. robinjea
    October 23rd, 2015 5:23 PM
    robinjea
    Hello FBI. Hahaha. I've been bugging you endlessly lately. I've got a question about your PSS. First, here's my script.

    Spoiler:
    #dynamic 0x800000

    #org @phase1
    lock
    faceplayer
    msgbox @Text1 0x6
    goto @phase2
    end

    #org @phase2
    preparemsg @Text2
    multichoice 0x0 0x0 0x(multichoice_ID) 0x0
    compare 0x800D 0x0
    if 0x1 goto @Withdraw1
    compare 0x800D 0x1
    if 0x1 goto @Deposit1
    compare 0x800D 0x2
    if 0x1 goto @Swap1
    compare 0x800D 0x3
    if 0x1 goto @Purge1
    compare 0x800D 0x4
    if 0x1 goto @PurgeAll1
    compare 0x800D 0x5
    if 0x1 goto @Info1
    release
    end

    #org @Text1
    = Welcome to the Pokémon Storage\nSystem!

    #org @Text2
    = What would you like to do?

    #org @Withdraw1
    copybyte 0x20370D0 0x203C000
    compare 0x800D 0x0
    if 0x1 goto @Withdraw2
    countpokemon
    compare 0x800D 0x6
    if 0x1 goto @Withdraw3
    setvar 0x8000 0x0
    msgbox @WithdrawText1 0x2
    special 0x9F
    waitstate
    compare 0x8004 0x6
    if 0x4 goto @phase2
    callasm 0x71FDA1
    msgbox @WithdrawText2 0x6
    goto @phase2
    end

    #org @Withdraw2
    msgbox @WithdrawText3 0x6
    goto @phase2
    end

    #org @Withdraw3
    msgbox @WithdrawText4 0x6
    goto @phase2
    end

    #org @WithdrawText1
    = Which Pokémon would you like to\nwithdraw?

    #org @WithdrawText2
    = Pokémon successfully withdrawn!

    #org @WithdrawText3
    = Pokémon Storage System is\ncurrently empty.\pDeposit a Pokémon first.

    #org @WithdrawText4
    = Your party is full!

    #org @Deposit1
    copybyte 0x20370D0 0x203C000
    compare 0x800D 0x6
    if 0x1 goto @Deposit2
    setvar 0x8000 0x1
    msgbox @DepositText1 0x2
    special 0x9F
    waitstate
    compare 0x8004 0x6
    if 0x4 goto @phase2
    callasm 0x71FDA1
    msgbox @DepositText2 0x6
    goto @phase2
    end

    #org @Deposit2
    msgbox @DepositText3 0x6
    goto @phase2
    end

    #org @DepositText1
    = Which Pokémon would you like to\ndeposit?

    #org @DepositText2
    = Pokémon successfully deposited!

    #org @DepositText3
    = Pokémon Storage System is\ncurrently full.\pWithdraw a Pokémon first.

    #org @Swap1
    copybyte 0x20370D0 0x203C000
    compare 0x800D 0x0
    if 0x1 goto @Swap2
    callasm 0x71FEB1
    msgbox @SwapText1 0x6
    goto @phase2
    end

    #org @Swap2
    msgbox @WithdrawText3 0x6
    goto @phase2
    end

    #org @SwapText1
    = Party Pokémon successfully swapped\nwith Storage Pokémon!

    #org @Purge1
    copybyte 0x20370D0 0x203C000
    compare 0x800D 0x0
    if 0x1 goto @Purge2
    msgbox @PurgeText1 0x2
    special 0x9F
    waitstate
    compare 0x8004 0x6
    if 0x4 goto @phase2
    callasm 0x71FF61
    msgbox @PurgeText2 0x6
    goto @phase2
    end

    #org @Purge2
    msgbox @WithdrawText3 0x6
    goto @phase2
    end

    #org @PurgeText1
    = Which Pokémon slot would you like\nto purge?

    #org @PurgeText2
    = Pokémon slot successfully purged!

    #org @PurgeAll1
    copybyte 0x20370D0 0x203C000
    compare 0x800D 0x0
    if 0x1 goto @PurgeAll2
    msgbox @PurgeAllText1 0x5
    compare 0x800D 0x0
    if 0x1 goto @phase2
    setvar 0x8004 0x6
    callasm 0x71FF61
    msgbox @PurgeAllText2 0x6
    goto @phase2
    end

    #org @PurgeAll2
    msgbox @WithdrawText3 0x6
    goto @phase2
    end

    #org @PurgeAllText1
    = Do you want to purge the contents\nof the Pokémon Storage System?

    #org @PurgeAllText2
    = Pokémon Storage System is now\nempty.

    #org @Info1
    msgbox @InfoText1 0x6
    goto @phase2
    end

    #org @InfoText1
    = The Pokémon Storage System is a\nbrand new storage system that also\lfunctions as a Day-Care System.


    Then here's the question: When I select deposit, it shows MY party which is actually correct. But, when I select withdraw or purge slot, it still shows MY party instead of the STORAGE party. Why is that? I'm sure that I inserted the routines correctly because it works, that's the only wrong thing, what it shows me is my party. But when I select withdraw then I select the first slot from my party, it withdraws the first Pokemon in the storage. :(
  5. robinjea
    October 21st, 2015 5:33 PM
    robinjea
    Oh. I didn't know that. ._. Thanks FBI. You're a big bunch of help. :)
  6. Blah
    October 21st, 2015 4:21 PM
    Blah
    Registers r0-r3 are safe to use if you are not hooking :)
  7. Blah
    October 21st, 2015 3:53 PM
    Blah
    Registers r0-r3 are safe to use if you are not hooking :)
  8. robinjea
    October 21st, 2015 12:57 PM
    robinjea
    Woah woah woah. Wait a minute... It works! Ahhh! Thank you! ^O^ I didn't know the function of mov because I didn't see it in your tut. Nut now I know! I have a question though. You didn't push any register so you didn't pop any of them. Why did it work without pushing registers yet I used two registers? How? I don't understand why. -n-"
  9. Blah
    October 21st, 2015 4:47 AM
    Blah
    Try to step through what is happening.

    ldr r0, .PLAYER_DATA
    ldr r0, [r0]
    This part gets the pointer to the dynamic player data.


    ldr r1, .PLAYER_DATA
    ldrb r0, [r0, #0x8]
    Here you once again load the address of the pointer to the player data (this time in R1). Then you load the gender byte into R0.


    add r0, r0, #0x1 @well, 00 is male and 01 is female so I thought this would be necessary
    strb r0, [r1
    OK, so you add one to the gender byte as opposed to doing mov rX, #0x1. Which is bad. Then you store this gender-byte +1 in r1 which contains an address to a pointer to the trainer data. You haven't actually written anything into the player data structure.

    I know you said you wanted to try it on your own, so I advise you to stop reading the rest of the VM and try it now. I'm going to give you a simple solution incase you wanted reference later on.

    Here's a solution:

    push {lr}
    ldr r0, =(0x300500C)
    ldr r0, [r0] @load pointer
    mov r1, #0x1
    strb r1, [r0, #0x8] @set female
    pop {pc}
  10. robinjea
    October 20th, 2015 9:07 PM
    robinjea
    Oh and hey FBI, I've been trying to make a routine to change the player's gender to female mid-game. Surprise surprise! It doesn't work. -.- Honestly, I'm not even sure if it is possible. Here's my routine which is actually a modified version of HackMew's Secret Trainer ID showing routine from his thread about his knowledge and all.

    .text
    .align 2
    .thumb
    .thumb_func

    main:
    push {r0-r1, lr}
    ldr r0, .PLAYER_DATA
    ldr r0, [r0]
    ldr r1, .PLAYER_DATA
    ldrb r0, [r0, #0x8]
    add r0, r0, #0x1 @well, 00 is male and 01 is female so I thought this would be necessary
    strb r0, [r1]
    pop {r0-r1, pc}


    .align 2
    .PLAYER_DATA:
    .word 0x0300500C
    Nothing actually happens when I call this though. I need help as always. Just instructions. I really want to learn this one. Thanks! ^_^
  11. robinjea
    October 11th, 2015 12:22 PM
    robinjea
    I'm sorry it took so long. School and stuff plus the internet speed these days. -.- Here it is. https://www.dropbox.com/s/m43qrqhk5fa2j1k/Pokemon%20-%20Fire%20Red%20Version.gba?dl=0
  12. Blah
    October 4th, 2015 6:17 PM
    Blah
    PM me the ROM link. I don't wanna download a patcher
  13. robinjea
    October 4th, 2015 5:13 PM
    robinjea
    Ooh~ Now I know! Thanks FBI-senpai~ :D

    BTW, here's an ips patch where I inserted the HP Regeneration per step Routine at 0x800000 and at 0x6D5F6 is 01 4A 10 47 00 00 01 00 80 08. I'm sorry for bringing this up again and again. I just really need it. :(
    https://www.dropbox.com/s/4akhekz67l219xb/FR%20-%20HP%20Regeneration%20Per%20Step.ips?dl=0
  14. Blah
    October 4th, 2015 6:37 AM
    Blah
    You'll have to use one of the built in functions to divide. If you're dividing by powers of two, you can use lsr.

    Jambo documented them some ages ago:
    DivMod1 (Takes in R0 as Numerator and R1 as Denominator; Returns INTEGER DIVISION (9/2 = 4 r 1) result to R0): 0x1E4018
    DivMod2 (Takes in R0 as Numerator and R1 as Denominator; Returns REMAINDER OF INTEGER DIVISION (23/4 = 5 r 3 to R0): 0x1E4684
  15. robinjea
    October 3rd, 2015 6:13 PM
    robinjea
    Hahahaha! I love everything you implemented! I just hope you'd share it to the community in the future. :D

    Oh and and a quick question. How would I divide two vars using ASM? I tried using div r0, r0, r1 (I was trying to modify your routine here) but the compiler said it was a bad instruction. I researched a little and found that there was no divide instruction in ARM and THUMB and I'm not sure if they're right. How would I divide them? T^T