• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Quick Research & Development Thread

JPAN

pokemon rom researcher
104
Posts
15
Years
    • Seen Jul 2, 2016
    Ok, I finished a preliminary version of a replacement for the unsafe Variables. Depending on if you want, or not, to replace the Variable system, there are two features you can get.
    First, the new block saved at the end of the Flash ROM, that contains 4096 bytes of usable, saveable space. That block is located at 0x0203e000 (as it seems free on both Fire Red and Emerald), and can be accessed alone by the use of the byte manipulating commands (in the 0x10 range).
    Second, the ability to use that new area as Variables. The current solution destroys the access to the old ones, So if you're not OK with it, I'm sure we can work something out (after all, we still have 0x9000-0xffff to work with).
    Installing informations are inside the Zip below, as well as the source code.

    Before you go and install that directly in your Hack, I only tested it slightly. The save-load function alone is harmless, but the Variable one needs further testing. So, if you could, please test it in a normal ROM and see if it doesn't break anything.
     
    Last edited:

    Sierraffinity

    Desperately trying to retire from ROM hacking
    1,069
    Posts
    16
    Years
  • Ok, I finished a preliminary version of a replacement for the unsafe Variables. Depending on if you want, or not, to replace the Variable system, there are two features you can get.
    First, the new block saved at the end of the Flash ROM, that contains 4096 bytes of usable, saveable space. That block is located at 0x0203e000 (as it seems free on both Fire Red and Emerald), and can be accessed alone by the use of the byte manipulating commands (in the 0x10 range).
    Second, the ability to use that new area as Variables. The current solution destroys the access to the old ones, So if you're not OK with it, I'm sure we can work something out (after all, we still have 0x9000-0xffff to work with).
    Installing informations are inside the Zip below, as well as the source code.

    Before you go and install that directly in your Hack, I only tested it slightly. The save-load function alone is harmless, but the Variable one needs further testing. So, if you could, please test it in a normal ROM and see if it doesn't break anything.
    The hack (the one that makes the new variables work) broke my ROM. I couldn't start the game (once I pressed Continue, it crashed), I couldn't load my save states (take one step, it freezes) and other stuff.
    My ROM is Emerald.
     

    JPAN

    pokemon rom researcher
    104
    Posts
    15
    Years
    • Seen Jul 2, 2016
    The hack (the one that makes the new variables work) broke my ROM. I couldn't start the game (once I pressed Continue, it crashed), I couldn't load my save states (take one step, it freezes) and other stuff.
    My ROM is Emerald.
    Sorry about that. It seems I forgot to include some steps in the Emerald aplication. The problem comes from the Emerald Var_decrypt function being too simple, and not pushing r4-r6. Fixed instructions are posted.
     

    Sierraffinity

    Desperately trying to retire from ROM hacking
    1,069
    Posts
    16
    Years
  • Sorry about that. It seems I forgot to include some steps in the Emerald aplication. The problem comes from the Emerald Var_decrypt function being too simple, and not pushing r4-r6. Fixed instructions are posted.
    There, it seems to be working fine now. :D
    I was testing this out awhile, and so far, it seems to be working fine.
    Of course, all of my variables (0x5000 and up) were set to 0x0, which told me it was repointed.
    It works great! :D
     

    Sierraffinity

    Desperately trying to retire from ROM hacking
    1,069
    Posts
    16
    Years
  • JPAN! I have a HUGE problem!!
    It appears that the RAM address you specified (0x0203E000) is used by the D/N system!!
    What would be a good RAM address to use instead? (This is using BPEE)
    EDIT: Also, the RAM address I changed it to doesn't seem to get refreshed upon starting a new game, with a game already having been saved!
     
    Last edited:

    JPAN

    pokemon rom researcher
    104
    Posts
    15
    Years
    • Seen Jul 2, 2016
    JPAN! I have a HUGE problem!!
    It appears that the RAM address you specified (0x0203E000) is used by the D/N system!!
    What would be a good RAM address to use instead? (This is using BPEE)
    EDIT: Also, the RAM address I changed it to doesn't seem to get refreshed upon starting a new game, with a game already having been saved!
    Well, 0x0203e000 is the start, but in Emerald, all up to 0x0203ffff seems free. So, just choose 0x1000 area or Ram from where the D/N lets up and use that.
    Also, Emerald appears to load Flash-to-RAM only once, at the start of the first screen. Previously unused areas of the RAM shouldn't be deleted by themselves on New Game. So, use a script that only happens on the new game (set by one of the old 0x40xx variables, that the game clears for you) that clears the entire memory area for you.
     

    Sierraffinity

    Desperately trying to retire from ROM hacking
    1,069
    Posts
    16
    Years
  • Well, 0x0203e000 is the start, but in Emerald, all up to 0x0203ffff seems free. So, just choose 0x1000 area or Ram from where the D/N lets up and use that.
    Also, Emerald appears to load Flash-to-RAM only once, at the start of the first screen. Previously unused areas of the RAM shouldn't be deleted by themselves on New Game. So, use a script that only happens on the new game (set by one of the old 0x40xx variables, that the game clears for you) that clears the entire memory area for you.
    Okay then. Thanks for the fast response.
    But, my question is:
    How would I go about writing a script (or an ASM routine, if necessary) that clears the RAM?
    I remember seeing something about ldstia or something like that in some ASM routines, and heard it does something with an increasing value... Would that help?
     

    JPAN

    pokemon rom researcher
    104
    Posts
    15
    Years
    • Seen Jul 2, 2016
    You can use this routine to clear 0x1000 bytes. Just replace the last pointer for the one you will be using.
    Code:
    .align 2
    .thumb
    Fill_memory: push {r4-r7, lr}
        mov r4, #0x10
        lsl r4, r4, #0x8 /*value = 0x1000*/
        ldr r5, start_addr
        add r4, r5, r4
        mov r0, #0x0
        mov r1, #0x0
        mov r2, #0x0
        mov r3, #0x0
    fill_loop:  stmia r5!, {r0-r3}
        cmp r4, r5
        bgt fill_loop
        pop {r4-r7,pc}
    .hword 0x0000    
    start_addr:  .word 0x0203f000 /*change as needed*/
    or, in byte code, this:
    Code:
    f0 b5 [B]10[/B] 24 240205 4d 2c 19 00 20 00 21 00 22
    00 23 0f c5 ac 42 fc dc f0 bd 00 00 [B]00 f0 03 02[/B]
    The last bolded bytes are the pointer you wish to use. replace for your own. The bolded number above is the instruction needed to replace to make different sizes. For instance, if your replace 10 with 20, you will clear 0x2000 bytes. This code will always cover 0x100 bytes minimum (0x1).
     

    Shiny Quagsire

    I'm Still Alive, Elsewhere
    697
    Posts
    14
    Years
  • Alright, this question is mostly directed to JPAN, but anyone can answer.
    In your berry system, you said htis:

    JPAN said:
    There is a limit of 256 different berry slots, each identified in the person id by the table number 0xfe.

    What exactly does that mean? I've tried everything I could to understand, but the sentence is kinda smeared out in my mind. :\
     

    JPAN

    pokemon rom researcher
    104
    Posts
    15
    Years
    • Seen Jul 2, 2016
    Alright, this question is mostly directed to JPAN, but anyone can answer.
    In your berry system, you said htis:

    There is a limit of 256 different berry slots, each identified in the person id by the table number 0xfe.


    What exactly does that mean? I've tried everything I could to understand, but the sentence is kinda smeared out in my mind. :\
    This means that each of the variables is linked to a specific OW number (person ID wasn't the best choice of words in this one, here it means the Sprite OW) And as OW sprite numbers are limited to a byte (0xfe, the table number, indicating that it is a berry tree), you only have 256 slots where you can have berries.
     

    Shiny Quagsire

    I'm Still Alive, Elsewhere
    697
    Posts
    14
    Years
  • This means that each of the variables is linked to a specific OW number (person ID wasn't the best choice of words in this one, here it means the Sprite OW) And as OW sprite numbers are limited to a byte (0xfe, the table number, indicating that it is a berry tree), you only have 256 slots where you can have berries.

    So to turn the overworld into a berry tree, I'd use your OW hack, set the table # to 0xFE. But where does the variable come in? I'm not quite sure what you mean by the OW number. (Sorry if I'm frustrating you, it's just harder to understand when there's just text :p)

    Wait, do you mean set the sprite to the desired variable index?
     

    HackMew

    Mewtwo Strikes Back
    1,314
    Posts
    17
    Years
    • Seen Oct 26, 2011
    You can use this routine to clear 0x1000 bytes. Just replace the last pointer for the one you will be using.
    Code:
    .align 2
    .thumb
    Fill_memory: push {r4-r7, lr}
        mov r4, #0x10
        lsl r4, r4, #0x8 /*value = 0x1000*/
        ldr r5, start_addr
        add r4, r5, r4
        mov r0, #0x0
        mov r1, #0x0
        mov r2, #0x0
        mov r3, #0x0
    fill_loop:  stmia r5!, {r0-r3}
        cmp r4, r5
        bgt fill_loop
        pop {r4-r7,pc}
    .hword 0x0000    
    start_addr:  .word 0x0203f000 /*change as needed*/

    I really don't understand why would you push r6 and r7 when they're not even used, and not pushing r0-r3 instead, which might be needed depending from where the routine is called. Either way, there are better and faster ways to do that:

    Code:
    .text
    .align 2
    .thumb
    .thumb_func
    .global EraseMemory
    
    main:
    	push {r0-r3, lr}
    	ldr r0, .START_ADDRESS
    	mov r1, #0x0
    	str r1, [r0]
    	add r1, r0, #0x0
    	ldr r2, .LENGTH
    	swi #0xC
    	pop {r0-r3, pc}
    	
    .align 2
    .START_ADDRESS:
    	.word 0x0203F000
    .LENGTH:
    	.word 0x01000400

    In the code above, 0x01000400 stands for 0x400 words, and the 1 is for memory filling, rather then copying (the default behavior). Note that due to the way the SWI 0xC works, the word count (total amount of bytes / 4) must be a multiple of 8.

    JPAN, what about the flags? Is there a way to fix the flags above 0x900 or something?

    FYI, the address of the hypotetical flag 0x900 overlaps the one used by variable 0x4000. I guess I'll be able to tell you more when I implement the safe variables myself (sorry JPAN, but your code is just too messy).

    EDIT: I did some research, and I think I found some safe areas to store the new variables in. For FR/LG, the whole area between 0x0203C000 - 0x0203EFFF appears to be totally unused. I somewhat confirmed it by putting a breakpoint on read/write on the whole area. I wasn't able to get the debugger to break yet. Also, here's a list I made, which clearly shows my theory:

    Code:
    02030000
    02030001
    02030003
    02030014
    0203001C
    02030020
    02030023
    02030028
    0203002F
    02030032
    02030040
    02030050
    0203005F
    02030064
    02030073
    02030076
    0203007E
    0203009F
    020300CD
    020300DB
    020300DF
    020300F5
    020300F9
    02030101
    02030103
    02030104
    02030120
    02030201
    02030202
    0203022F
    0203025F
    02030400
    02030401
    02030405
    0203043F
    020304C0
    020304FF
    02030502
    0203050A
    02030614
    0203081D
    0203083E
    02030908
    02031022
    02031036
    020310B8
    02031208
    02031764
    02031C8C
    02031C90
    02031C94
    02031CCC
    02031DA4
    02031DA8
    02031DAC
    02031DB0
    02031DB4
    02031DBC
    02031DC4
    02031DCC
    02031DD4
    02031DD8
    02031DDA
    02031DDC
    02031DE0
    02031DE4
    02031DE8
    02031DEA
    02031DEC
    02031DFC
    020320AF
    020324C9
    0203281E
    0203303A
    0203306F
    020330BB
    020330F8
    020340FB
    02034B41
    02035046
    020350E3
    02036DFC
    02036E18
    02036E24
    02036E28
    02036E2C
    02036E30
    02036E34
    02036E38
    02037003
    02037044
    02037078
    02037098
    0203709A
    0203709C
    020370A0
    020370A4
    020370A8
    020370AC
    020370AE
    020370B0
    020370B2
    020370B4
    020370B6
    020370B8
    020370BA
    020370BC
    020370BE
    020370C0
    020370C2
    020370C4
    020370C6
    020370C8
    020370CA
    020370CC
    020370CE
    020370D0
    020370D2
    020370D4
    020370D6
    020370D8
    020370DA
    020370DC
    020370DE
    020370E0
    020370F0
    020370F4
    020370F5
    020370F6
    020370FF
    02037100
    02037101
    02037104
    02037108
    020371F8
    020371FA
    02037218
    02037238
    02037258
    02037278
    02037398
    020373F8
    02037408
    020375F8
    020375FA
    02037638
    020376B0
    020377F8
    02037850
    020379F8
    02037AB8
    02037AC8
    02037ACC
    02037ECC
    02037ED0
    02037ED4
    02037ED8
    02037EDC
    02037EE0
    02037EE1
    02037EE2
    02037EE3
    02037EE4
    02037EE8
    02037EEC
    02037EEE
    02037EFE
    02037F00
    02037F02
    02037F12
    02037F14
    02037F16
    02037F17
    02037F18
    02037F1A
    02037F1B
    02037F1C
    02037F24
    02037F28
    02037F30
    02037F34
    02038134
    02038208
    02038394
    02038684
    020386A4
    020386A8
    020386AC
    020386AE
    020386B0
    020386B4
    020386B8
    020386BC
    020386C0
    020386C4
    020386C8
    020386CC
    020386D0
    020386DC
    020386E0
    02038700
    02038702
    02038704
    02038980
    02038E80
    02038FC0
    02039600
    0203961C
    02039620
    02039624
    02039638
    0203963A
    02039654
    020397A4
    020397A8
    020397AC
    020397B0
    020397B4
    020397B5
    020397B6
    020397B7
    020397B8
    020397BA
    020397BC
    02039820
    02039821
    02039822
    02039823
    02039824
    02039825
    02039826
    02039828
    0203982C
    02039830
    02039870
    02039874
    02039878
    02039879
    02039882
    02039884
    02039888
    0203988C
    020398A4
    020398AC
    020398B4
    020398B8
    020398BA
    02039934
    02039942
    02039950
    02039954
    02039958
    0203995C
    02039960
    02039964
    02039968
    0203996C
    02039984
    02039988
    0203998C
    02039990
    02039994
    02039996
    02039998
    0203999C
    020399A4
    020399B4
    020399B8
    020399BC
    020399C0
    020399C4
    020399C8
    020399CC
    020399D0
    020399D4
    020399D8
    020399DC
    020399E0
    020399E4
    020399E8
    020399EC
    020399F0
    020399FC
    02039A00
    02039A04
    02039A0C
    02039A0E
    02039A10
    02039A14
    02039A18
    02039A1A
    02039A1B
    02039A1C
    02039A20
    02039A24
    02039A28
    02039A2C
    02039A30
    02039A34
    02039A38
    0203A066
    0203AA3C
    0203AAB0
    0203AAB4
    0203AAB8
    0203AABC
    0203AAC0
    0203AAC4
    0203AAC6
    0203AAD4
    0203AB00
    0203AB02
    0203AB04
    0203AB06
    0203AB08
    0203AB0A
    0203AB0C
    0203AB0E
    0203AB10
    0203AB12
    0203AB14
    0203AB16
    0203AB18
    0203AB1A
    0203AB1C
    0203AB1E
    0203AB20
    0203AB22
    0203AB24
    0203AB28
    0203AB2C
    0203AB30
    0203AB34
    0203AB38
    0203AB3C
    0203AB40
    0203AB44
    0203AB48
    0203AB4C
    0203AB50
    0203AB54
    0203AB58
    0203AB5C
    0203AB60
    0203ABE0
    0203ABE4
    0203ABE8
    0203ABEC
    0203ABED
    0203ABF0
    0203AC08
    0203ACE4
    0203ACE8
    0203ACEC
    0203ACF0
    0203ACF4
    0203ACFC
    0203AD02
    0203AD04
    0203AD0A
    0203AD10
    0203AD14
    0203AD18
    0203AD1C
    0203AD20
    0203AD24
    0203AD28
    0203AD2C
    0203AD30
    0203AD34
    0203AD40
    0203AD58
    0203ADB8
    0203ADBC
    0203ADC0
    0203ADC4
    0203ADC8
    0203ADCC
    0203ADD0
    0203ADD8
    0203ADDC
    0203ADE0
    0203ADE4
    0203ADF0
    0203ADF2
    0203ADF3
    0203ADF4
    0203ADF8
    0203ADF9
    0203ADFA
    0203ADFC
    0203ADFE
    0203AE04
    0203AE08
    0203AE0C
    0203AE8C
    0203AE90
    0203AE94
    0203AE98
    0203AF98
    0203AF9A
    0203B01A
    0203B01C
    0203B01E
    0203B020
    0203B024
    0203B044
    0203B048
    0203B049
    0203B04A
    0203B04B
    0203B04C
    0203B058
    0203B059
    0203B05C
    0203B064
    0203B068
    0203B06A
    0203B06C
    0203B084
    0203B088
    0203B08C
    0203B090
    0203B094
    0203B098
    0203B09C
    0203B0A0
    0203B0A9
    0203B0AE
    0203B0B4
    0203B0B8
    0203B0BC
    0203B0C0
    0203B0C1
    0203B0C4
    0203B0C8
    0203B0CC
    0203B0D0
    0203B0D4
    0203B0D8
    0203B0DC
    0203B0E0
    0203B0E4
    0203B0E8
    0203B0EC
    0203B0EE
    0203B0F0
    0203B0F4
    0203B0F8
    0203B0FC
    0203B100
    0203B104
    0203B108
    0203B10C
    0203B116
    0203B118
    0203B11C
    0203B120
    0203B124
    0203B128
    0203B12C
    0203B130
    0203B140
    0203B144
    0203B148
    0203B158
    0203B15C
    0203B160
    0203B164
    0203B168
    0203B16C
    0203B16D
    0203B16E
    0203B170
    0203B174
    0203F174
    0203F175
    0203F176
    0203F177
    0203F178
    0203F18A
    0203F190
    0203F1AC
    0203F34C
    0203F36C
    0203F370
    0203F37A
    0203F37C
    0203F380
    0203F384
    0203F388
    0203F38C
    0203F39C
    0203F3A0
    0203F3A4
    0203F3A8
    0203F3AE
    0203F3B0
    0203F3B8
    0203F3BC
    0203F3C0
    0203F3C4
    0203F3C8
    0203F3CC
    0203F3D0
    0203F3D4
    0203F3D8
    0203F3DC
    0203F3E0
    0203F3E4
    0203F3F8
    0203F400
    0203F42C
    0203F43C
    0203F440
    0203F444
    0203F44A
    0203F450
    0203F454
    0203F458
    0203F45C
    0203F464
    0203F754
    0203F758
    0203F76C
    0203F774
    0203FB74
    0203FB78
    0203FB7C
    0203FB80
    0203FB84
    0203FB88
    0203FC00

    As for Emerald, the whole 0x0203XXXX area is mostly used by the game already. So my suggestion is to try the 0x0202XXXX area, in particular anything between 0x02027000 - 0x02027FFF, or 0x0202A000 - 0x0202AFFF, or 0x0202D000 - 0x0202DFFF, or 0x0202F000 - 0x0202FFFF.

    Code:
    02020000
    02020001
    02020004
    020200AC
    020200C6
    020200FF
    02020100
    02020101
    02020102
    02020103
    02020180
    02020184
    02020188
    0202018C
    020201B0
    02020201
    02020202
    02020203
    0202022F
    02020242
    02020243
    02020244
    020202F0
    02020400
    02020401
    0202043F
    020204C0
    020204FF
    02020609
    02020630
    02020638
    0202064C
    0202065E
    02020706
    02020810
    02020815
    02020827
    02020857
    02020859
    0202085C
    020208A6
    02020908
    02020E00
    02021774
    020217F4
    02021834
    02021835
    02021838
    02021B38
    02021B3A
    02021B3C
    02021BBC
    02021BBE
    02021BC0
    02021CC0
    02021CC4
    02021DC4
    02021EC4
    02021FC4
    02022212
    020223AC
    020223BC
    020223BD
    020223C0
    020223C4
    020223C8
    020228C4
    020229C4
    020229C6
    020229C8
    020229CC
    020229E8
    020229F0
    02022A0C
    02022A74
    02022B00
    02022B08
    02022B0C
    02022B10
    02022B14
    02022B22
    02022B2C
    02022B44
    02022C20
    02022C2C
    02022C2D
    02022C30
    02022C38
    02022C3C
    02022C3E
    02022C40
    02022C58
    02022C60
    02022C64
    02022C68
    02022C6C
    02022C70
    02022C74
    02022C78
    02022C7C
    02022C80
    02022C84
    02022C88
    02022C8C
    02022C90
    02022C94
    02022C98
    02022C9C
    02022CB0
    02022CB8
    02022CE4
    02022CF4
    02022CF8
    02022CFC
    02022D00
    02022D04
    02022D06
    02022D08
    02022D09
    02022D0A
    02022D0C
    02022D10
    02022E10
    02022E14
    02022E16
    02022E18
    02022E1A
    02022E1C
    02022E1E
    02022E20
    02022E22
    02022E24
    02022E26
    02022E28
    02022E2A
    02022E2C
    02022F58
    02022F5A
    02022F5C
    02022F68
    02022F6A
    02022F78
    02022F88
    02022FEC
    02022FF0
    02022FF4
    02022FF8
    02023058
    0202305C
    02023060
    02023064
    02023066
    02023067
    02023068
    020235DB
    020237AA
    02023864
    02023868
    02024064
    02024068
    0202406C
    0202406E
    02024076
    0202407A
    0202407E
    02024082
    02024083
    02024084
    02024090
    0202409C
    020240A8
    020240AC
    020240B4
    020240CC
    020240D0
    020240D4
    020241E4
    020241E8
    020241E9
    020241EA
    020241EC
    020241EE
    020241F0
    020241F1
    020241F3
    020241F4
    020241F8
    02024208
    0202420A
    0202420B
    0202420C
    0202420D
    0202420E
    0202420F
    02024210
    02024211
    02024212
    02024214
    0202421C
    02024220
    02024230
    02024240
    02024248
    02024250
    02024258
    02024260
    02024268
    02024270
    02024274
    0202427C
    02024280
    02024284
    02024288
    0202428C
    0202428E
    02024294
    020242AC
    020242BC
    0202432C
    0202432E
    02024330
    02024332
    02024333
    02024335
    02024337
    0202433A
    0202433C
    0202437C
    020243CC
    020243D0
    020243FC
    020243FE
    02024400
    02024402
    02024404
    0202440C
    02024474
    02024478
    0202447C
    02024482
    02024483
    02024484
    02024487
    02024488
    0202448A
    0202448B
    0202448C
    0202448D
    0202448E
    0202448F
    02024492
    0202449C
    020244A0
    020244A4
    020244A8
    020244AC
    020244B0
    020244B4
    020244B8
    020244B9
    020244BC
    020244CC
    020244D0
    020244D4
    020244D8
    020244DC
    020244E0
    020244E2
    020244E4
    020244E8
    020244E9
    020244EA
    020244EC
    02024550
    020245B4
    02024618
    0202467C
    020246E0
    02024744
    020247A8
    0202480C
    02024870
    020248D4
    02024938
    0202499C
    020249B4
    020249BC
    020249C0
    020249C4
    02024A28
    02024A30
    02024A38
    02024A4C
    02024A54
    02024C08
    02025301
    02025A00
    02025E62
    02026B6C
    02026C04
    0202800D
    02029808
    0202BF21
    0202CAAC
    0202E82A

    As for R/S, the whole are between 0x0203B000 - 0x0x0203DFFF should be safe.

    Code:
    02030000
    02030001
    02030004
    02030009
    02030012
    02030014
    0203001C
    02030020
    02030022
    02030023
    02030028
    0203002F
    02030032
    02030034
    02030040
    02030043
    02030044
    02030050
    0203005F
    02030064
    02030066
    02030073
    02030077
    0203007E
    020300A0
    020300A4
    020300AC
    020300CC
    020300DD
    020300DF
    020300F9
    02030101
    02030104
    02030120
    02030200
    02030202
    02030203
    02030206
    02030208
    0203022F
    0203025F
    0203026F
    020302B3
    02030303
    02030400
    02030401
    02030405
    0203043F
    020304C0
    020304FF
    02030502
    0203050A
    02030604
    02030647
    02030800
    0203081D
    0203083D
    02030908
    02030A27
    02030DD2
    02030DDD
    0203100E
    02031016
    02031022
    0203104A
    02031068
    0203106F
    02031096
    02032053
    020320CE
    0203281E
    02032EAA
    020330D2
    020330D5
    020330EE
    0203323F
    02033301
    020340FB
    02034B41
    02035046
    02035100
    02037044
    02037850
    02038208
    020383E4
    02038470
    02038473
    02038474
    02038478
    0203847C
    0203847D
    0203847E
    0203847F
    02038480
    020384E4
    020384E5
    020384E6
    020384E7
    020384E8
    020384E9
    020384EA
    020384EC
    020384F0
    020384F4
    020384F8
    02038538
    0203853C
    02038540
    02038544
    02038550
    02038554
    02038558
    02038559
    0203855A
    0203855B
    0203855C
    0203855E
    02038560
    02038561
    02038562
    02038563
    02038564
    02038568
    0203856C
    02038570
    02038572
    0203857D
    0203858E
    02038596
    02038670
    02038678
    02038680
    02038688
    02038690
    02038694
    02038695
    02038696
    0203869A
    0203869B
    0203869C
    0203869E
    020386A0
    020386A4
    020386A8
    020386AA
    02038724
    02038730
    02038731
    02038734
    02038738
    020387B0
    020387B1
    020387B2
    020387B3
    020387B4
    020387D8
    020387D9
    020387DC
    020387E0
    020387E2
    020387E4
    020387E8
    020387EC
    020387F0
    02038800
    02038804
    02038808
    0203880A
    0203880C
    02038814
    020388AC
    020388B0
    020388B4
    020388B8
    020388BC
    020388C0
    020388C4
    020388CC
    020388D0
    020388D4
    020388D5
    020388D6
    020388E6
    020388F2
    020388F3
    020388F4
    020388F5
    020388F6
    020388F7
    02038900
    02038984
    02039184
    020391A4
    020391A6
    020391A8
    020391A9
    020391AA
    020391AC
    020391B4
    02039234
    02039238
    0203923C
    02039244
    02039248
    0203924C
    02039250
    02039251
    02039254
    02039258
    02039259
    0203925A
    0203925B
    0203925C
    02039260
    02039262
    02039264
    02039266
    02039268
    0203926A
    0203926C
    02039270
    02039274
    02039278
    02039279
    0203927A
    0203927B
    0203927C
    0203927D
    02039284
    02039288
    020392FC
    02039302
    02039304
    02039308
    0203930C
    02039310
    02039312
    02039314
    02039318
    0203931A
    0203931C
    02039320
    02039322
    02039324
    02039325
    02039328
    0203932A
    0203932C
    0203932E
    02039338
    0203933C
    0203933E
    02039350
    02039358
    0203935A
    0203935C
    02039360
    02039460
    02039629
    02039760
    0203A360
    0203A380
    0203A3D0
    0203A3D1
    0203A3D2
    0203A3D3
    0203A3D4
    0203A602
    0203E006
    0203E0ED
    0203F07F

    Although I made those lists as accurate as possible, please note that they're only approximative; testing is always a must. Especially if you're using R/S/E, because I didn't test them.
     
    Last edited:
    2,048
    Posts
    16
    Years
    • Age 31
    • Seen Sep 7, 2023
    Not really that advanced compared to what you guys have been up to, but I was asked whether I knew where Steven's double battle team in Emerald was located. A bit of digging later, and I found it. It's not quite in the same format as normal trainers.

    Metang: 0x5dd6d0
    Skarmory: 0x5dd6e4
    Aggron: 0x5dd6f8

    Format:
    Species (2 bytes)
    IVs (1 byte)
    Level (1 byte)
    Nature? (1 byte) - unconfirmed; check this (Metang should be Lonely, Skarmory Impish, and Aggron Adamant)?
    EVs? (6 bytes) - unconfirmed; check this?
    Padding (1 byte)
    Moves (8 bytes)

    Unlike ordinary trainers (as far as I can remember), Steven's data appears to include nature and EVs. I bet this could be used to add opposing trainers with stronger Pokémon somehow.

    Anyway, a question: this isn't really useful for ROM hacking, but it's related. Could somebody find the formula used to calculate the PIDs of eggs in Emerald if the mother is holding an Everstone? I know the formula without the Everstone already, but I'm stumped as to what happens when one is used.
     

    colcolstyles

    Yours truly
    1,588
    Posts
    15
    Years
  • If anyone's interested, here's a tiny little morsel of information that I found recently. At the address '0x3A72A0' in Fire Red, you will find two bytes: '0xCD' and '0xFF'. These two bytes are used whenever the player is given two or more of some item using the 'giveitem' construct. The '0xCD' corresponds to an uppercase 'S' while the '0xFF' is the terminator byte, signifying the end of the string. If you change the byte from '0xCD' to '0xE7', the 'S' will become a lowercase 's'. I figure this might come in handy for those de-capitalization patches because it's really annoying to see "Player received the Poké BallS!" every time the player receives more than one of an item.
     
    106
    Posts
    15
    Years
    • Seen May 29, 2019
    Realistically, how much work would be needed to change the 64x64 pixel limit in the 3rd generation games to the 80x80 pixel limit used in the 4th generation games? Please don't tell me it's hard or a lot of work. I'm genuinely interested in what would have to be done to increase the limit as it would be extremely beneficial to lots of people, especially as it would allow much higher quality sprites to be used as well as being able to import the 4th and 5th generation pokémon without (too much) resizing.
     

    Shiny Quagsire

    I'm Still Alive, Elsewhere
    697
    Posts
    14
    Years
  • Realistically, how much work would be needed to change the 64x64 pixel limit in the 3rd generation games to the 80x80 pixel limit used in the 4th generation games? Please don't tell me it's hard or a lot of work. I'm genuinely interested in what would have to be done to increase the limit as it would be extremely beneficial to lots of people, especially as it would allow much higher quality sprites to be used as well as being able to import the 4th and 5th generation pokémon without (too much) resizing.

    You would need to modify the games ASM code, which would be a pain and would be way too hard. And, the sprites would go outside the picture box in the status screen. In other words, it's really hard, and it's just not worth it.
     
    Back
    Top