• 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.

[Other] Extended diploma screens problems !

  • 94
    Posts
    11
    Years
    • Seen Sep 18, 2023
    Is there a way to use a 256 color palette on the expanded diploma screens?
    (I know that there is this : https://www.pokecommunity.com/threads/299559 ) but since he never released the source code, I think it can't be used now?
    Also (While trying to insert the 255 diploma hack, tutorial here: https://www.pokecommunity.com/threads/280558), How can I got to Offsets like 0x080F4FC8? The Hexeditor says: Cannot find position!
    If I only use 0x080F4FC , the other hex string I have to insert at 0x080F4FE(E) will overwrite parts of the previous!
    Edit: I now inserted them at 0x08F4FC and so on but if I now start the script, the screen goes black and the sound gets strange...Then nothing but this happens!
     
    If I remember correctly 08 states that the offset above is a ram offset. You might want to try 0x0F4FC8 instead or look for its data equivalent.
     
    Is there a way to use a 256 color palette on the expanded diploma screens?
    (I know that there is this : https://www.pokecommunity.com/threads/299559 ) but since he never released the source code, I think it can't be used now?
    Also (While trying to insert the 255 diploma hack, tutorial here: https://www.pokecommunity.com/threads/280558), How can I got to Offsets like 0x080F4FC8? The Hexeditor says: Cannot find position!
    If I only use 0x080F4FC , the other hex string I have to insert at 0x080F4FE(E) will overwrite parts of the previous!
    Edit: I now inserted them at 0x08F4FC and so on but if I now start the script, the screen goes black and the sound gets strange...Then nothing but this happens!

    You are better off making your own routines for this I'd say. Just build a good framework routine, then call a generic BG display one. It'd be much better than hacking the diploma screen in my eyes.

    If I remember correctly 08 states that the offset above is a ram offset. You might want to try 0x0F4FC8 instead or look for its data equivalent.
    No. "08" means it's in the ROM, while "02" would mean RAM. Though when dealing with BGs and Pals these regions are not used (you get 05 and 06).

    You can run a routine to do 256 colored BGs. From there making animating OAMs has already been documented. I've written a "Show BG" routine before for my titlescreen's Latios. I'll share for the uninitiated:

    Code:
    .text
    .align 2
    .thumb
    .thumb_func
    
    main:
    	push {r4-r6, lr}
    	sub SP, SP, #0x4
    	ldr r4, bg_positions_reset
    	bl linker
    	
    loadTileSet:
    	@tileset doesn't require updating
    	ldr r1, image
    	mov r0, #0x0
    	str r0, [sp]
    	mov r0, #0x0
    	mov r2, #0x0
    	mov r3, #0x0
    	ldr r4, decompress_with_fallback
    	bl linker 
    	
    loadPal:
    	ldr r0, new_pal
    	mov r1, #0xD0 @slot
    	mov r2, #0x20 @size
    	ldr r4, gpu_pal_apply
    	bl linker
    	ldr r0, new_pal
    	ldr r4, gpu_pal_obj_alloc_tag_and_apply
    	bl linker
    	
    loadTileMap:
    	ldr r1, tilemap
    	mov r0, #0x0
    	mov r2, #0x0
    	mov r3, #0x0
    	ldr r4, gpu_tilemap_config_and_commit
    	bl linker
    	mov r0, #0x0
    	ldr r4, bgid_send_tilemap
    	bl linker
    	ldr r0, tilemap
    	ldr r4, gpu_tile_obj_alloc_tag_and_upload
    	bl linker
    
    showBG:
    	mov r0, #0x0
    	ldr r4, =(0x80019BC +1)
    	bl linker
    	
    end:
    	add SP, SP, #0x4
    	pop {r4-r6, pc}
    	
    linker:
    	bx r4
    	
    .align 2
    
    @resources:
    new_pal:
    	.word 0x8EAD5E8
    	
    image:
    	.word 0x8B03DE0
    	
    tilemap:
    	.word 0x8B04660
    	
    	
    @Functions:
    gpu_pal_obj_alloc_tag_and_apply:
    	.word 0x8008928 +1
    	
    gpu_tilemap_config_and_commit:
    	.word 0x8002040 +1
    	
    gpu_tile_obj_alloc_tag_and_upload:
    	.word 0x80086DC +1
    	
    bgid_send_tilemap:
    	.word 0x80020BC +1
    	
    decompress_with_fallback:
    	.word 0x80F6878 +1
    
    gpu_pal_apply:
    	.word 0x80703EC +1
    	
    bg_positions_reset:
    	.word 0x812D594 +1

    This Routine requires a set-up routine to fade the screen, and delete existing BGs and OAs. Otherwise it will just overwrite the BG defined by the BG slot in the routine (in this case 0) and just take up your screen.
    You will need to change the "Resources" data and the slot/size field of the loadPal section to match the total amount of colors. Finally, depending on which BG you are planning to use, you must also edit the BG slot. It does support 256 colors.

    Once again, I recommend that you first build your own BG calling framework to call a modified version of this routine. That way you can support as many BGs as you want in an efficient manner.
    After all of that, make sure you credit me if you use my research or routine!
     
    You are better off making your own routines for this I'd say. Just build a good framework routine, then call a generic BG display one. It'd be much better than hacking the diploma screen in my eyes.


    No. "08" means it's in the ROM, while "02" would mean RAM. Though when dealing with BGs and Pals these regions are not used (you get 05 and 06).

    You can run a routine to do 256 colored BGs. From there making animating OAMs has already been documented. I've written a "Show BG" routine before for my titlescreen's Latios. I'll share for the uninitiated:

    Code:
    .text
    .align 2
    .thumb
    .thumb_func
    
    main:
    	push {r4-r6, lr}
    	sub SP, SP, #0x4
    	ldr r4, bg_positions_reset
    	bl linker
    	
    loadTileSet:
    	@tileset doesn't require updating
    	ldr r1, image
    	mov r0, #0x0
    	str r0, [sp]
    	mov r0, #0x0
    	mov r2, #0x0
    	mov r3, #0x0
    	ldr r4, decompress_with_fallback
    	bl linker 
    	
    loadPal:
    	ldr r0, new_pal
    	mov r1, #0xD0 @slot
    	mov r2, #0x20 @size
    	ldr r4, gpu_pal_apply
    	bl linker
    	ldr r0, new_pal
    	ldr r4, gpu_pal_obj_alloc_tag_and_apply
    	bl linker
    	
    loadTileMap:
    	ldr r1, tilemap
    	mov r0, #0x0
    	mov r2, #0x0
    	mov r3, #0x0
    	ldr r4, gpu_tilemap_config_and_commit
    	bl linker
    	mov r0, #0x0
    	ldr r4, bgid_send_tilemap
    	bl linker
    	ldr r0, tilemap
    	ldr r4, gpu_tile_obj_alloc_tag_and_upload
    	bl linker
    
    showBG:
    	mov r0, #0x0
    	ldr r4, =(0x80019BC +1)
    	bl linker
    	
    end:
    	add SP, SP, #0x4
    	pop {r4-r6, pc}
    	
    linker:
    	bx r4
    	
    .align 2
    
    @resources:
    new_pal:
    	.word 0x8EAD5E8
    	
    image:
    	.word 0x8B03DE0
    	
    tilemap:
    	.word 0x8B04660
    	
    	
    @Functions:
    gpu_pal_obj_alloc_tag_and_apply:
    	.word 0x8008928 +1
    	
    gpu_tilemap_config_and_commit:
    	.word 0x8002040 +1
    	
    gpu_tile_obj_alloc_tag_and_upload:
    	.word 0x80086DC +1
    	
    bgid_send_tilemap:
    	.word 0x80020BC +1
    	
    decompress_with_fallback:
    	.word 0x80F6878 +1
    
    gpu_pal_apply:
    	.word 0x80703EC +1
    	
    bg_positions_reset:
    	.word 0x812D594 +1

    This Routine requires a set-up routine to fade the screen, and delete existing BGs and OAs. Otherwise it will just overwrite the BG defined by the BG slot in the routine (in this case 0) and just take up your screen.
    You will need to change the "Resources" data and the slot/size field of the loadPal section to match the total amount of colors. Finally, depending on which BG you are planning to use, you must also edit the BG slot. It does support 256 colors.

    Once again, I recommend that you first build your own BG calling framework to call a modified version of this routine. That way you can support as many BGs as you want in an efficient manner.
    After all of that, make sure you credit me if you use my research or routine!
    So if my Image is at 0x08EF13C , my palette at 0x08EBC44 , my Raw at 0x08EE908
    I have to write:

    @resources:
    new_pal:
    .word 0x8EBC44

    image:
    .word 0x8EF13C

    tilemap:
    .word 0x8EE908

    Is that right? Also, I don´t get what I have to write at the slot/size field if my palette is 16 colors (or when its 256 colors), or how to edit the BG slot...
    And I can´t write a routine to fade the screen, and delete existing BGs and OAs, because I don´t have the required ASM skills for that.
    But if I get this to work, you will be te first one mentioned when I release the hack, I promise you!
     
    So if my Image is at 0x08EF13C , my palette at 0x08EBC44 , my Raw at 0x08EE908
    I have to write:

    @resources:
    new_pal:
    .word 0x8EBC44

    image:
    .word 0x8EF13C

    tilemap:
    .word 0x8EE908

    Is that right? Also, I don´t get what I have to write at the slot/size field if my palette is 16 colors (or when its 256 colors), or how to edit the BG slot...
    And I can´t write a routine to fade the screen, and delete existing BGs and OAs, because I don´t have the required ASM skills for that.
    But if I get this to work, you will be te first one mentioned when I release the hack, I promise you!

    Yes, the way you modified the resources are correct. Makesure all of it is L7SS compressed. The routine works as a standalone, so even if you don't know how to setup it should still display the image (you might have to warp afterwards to clear it if you don't know how to clear it yourself). Ugh, I'll make a more detailed post in the resources thread some other time in the near future.
     
    Yes, the way you modified the resources are correct. Makesure all of it is L7SS compressed. The routine works as a standalone, so even if you don't know how to setup it should still display the image (you might have to warp afterwards to clear it if you don't know how to clear it yourself). Ugh, I'll make a more detailed post in the resources thread some other time in the near future.
    So I also have to insert the Palette with UnLZgba? I thought that I have to insert it with APE! Thanks for the info!
    But I still need to know what exactly to change at the slot/size field if my palette is 16 colors (or when its 256 colors)...
    Edit: I now compiled the code with the changed offsets and then I ran a script with callasm 0x88EBC81 (I inserted the Routine at 0x08EBC80). But when I now start the Script, nothing happens, but only the music plays. The rest of the game gots locked up!
     
    Last edited:
    Any idea how I can make it work, FBI?

    I'm not FBI but

    So if my Image is at 0x08EF13C , my palette at 0x08EBC44 , my Raw at 0x08EE908
    I have to write:

    @resources:
    new_pal:
    .word 0x8EBC44

    image:
    .word 0x8EF13C

    tilemap:
    .word 0x8EE908

    Is that right? Also, I don´t get what I have to write at the slot/size field if my palette is 16 colors (or when its 256 colors), or how to edit the BG slot...
    And I can´t write a routine to fade the screen, and delete existing BGs and OAs, because I don´t have the required ASM skills for that.
    But if I get this to work, you will be te first one mentioned when I release the hack, I promise you!

    These values need to be addresses, not offsets, so you must add 0x08000000 otherwise they will be in an invalid address space. Offsets are never used in ASM
     
    So I have to write 0x88EBC44 instead of 0x8EBC44 or what do you mean?

    Yeah that's exactly it. I didn't notice you forgot the 08 because your offset started at 0x8something. As for the pal slot and size. When you make an image's tilemap, you assign the tiles a pal via whatever editor you're using. 0xD0 needs to change to whichever pal you assigned. And 0x20 = 32 = 16 colors. Change that if you wanted 256.
     
    Yeah that's exactly it. I didn't notice you forgot the 08 because your offset started at 0x8something. As for the pal slot and size. When you make an image's tilemap, you assign the tiles a pal via whatever editor you're using. 0xD0 needs to change to whichever pal you assigned. And 0x20 = 32 = 16 colors. Change that if you wanted 256.
    It still isn´t working.It now gives me a blackscreen and everything gets locked up.. I inserted the tileset,map and pal with UnLzGba at the Ofsets:
    picture1: 8EBC34
    palette1: 8EF288
    tilemap: 8EE958
    I then edited the routine:
    .text
    .align 2
    .thumb
    .thumb_func

    main:
    push {r4-r6, lr}
    sub SP, SP, #0x4
    ldr r4, bg_positions_reset
    bl linker

    loadTileSet:
    @tileset doesn't require updating
    ldr r1, image
    mov r0, #0x0
    str r0, [sp]
    mov r0, #0x0
    mov r2, #0x0
    mov r3, #0x0
    ldr r4, decompress_with_fallback
    bl linker

    loadPal:
    ldr r0, new_pal
    mov r1, #0xD6 @slot
    mov r2, #0x20 @size
    ldr r4, gpu_pal_apply
    bl linker
    ldr r0, new_pal
    ldr r4, gpu_pal_obj_alloc_tag_and_apply
    bl linker

    loadTileMap:
    ldr r1, tilemap
    mov r0, #0x0
    mov r2, #0x0
    mov r3, #0x0
    ldr r4, gpu_tilemap_config_and_commit
    bl linker
    mov r0, #0x0
    ldr r4, bgid_send_tilemap
    bl linker
    ldr r0, tilemap
    ldr r4, gpu_tile_obj_alloc_tag_and_upload
    bl linker

    showBG:
    mov r0, #0x0
    ldr r4, =(0x80019BC +1)
    bl linker

    end:
    add SP, SP, #0x4
    pop {r4-r6, pc}

    linker:
    bx r4

    .align 2

    @resources:
    new_pal:
    .word 0x088EF288

    image:
    .word 0x088EBC34

    tilemap:
    .word 0x088EE958


    @Functions:
    gpu_pal_obj_alloc_tag_and_apply:
    .word 0x8008928 +1

    gpu_tilemap_config_and_commit:
    .word 0x8002040 +1

    gpu_tile_obj_alloc_tag_and_upload:
    .word 0x80086DC +1

    bgid_send_tilemap:
    .word 0x80020BC +1

    decompress_with_fallback:
    .word 0x80F6878 +

    gpu_pal_apply:
    .word 0x80703EC +1

    bg_positions_reset:
    .word 0x812D594 +1
    Here is how I made the tileset:
    [PokeCommunity.com] Extended diploma screens problems !

    I used PAL 6 [7]

    If you want to check the files: https://www.dropbox.com/s/sgi4k5h2i1p1y7h/Project.rar?dl=0

    I really don't know whats wrong this time
     
    Last edited:
    It still isn´t working.It now gives me a blackscreen and everything gets locked up.. I inserted the tileset,map and pal with UnLzGba at the Ofsets:
    picture1: 8EBC34
    palette1: 8EF288
    tilemap: 8EE958
    I then edited the routine:

    Here is how I made the tileset:
    [PokeCommunity.com] Extended diploma screens problems !

    I used PAL 6 [7]

    If you want to check the files: https://www.dropbox.com/s/sgi4k5h2i1p1y7h/Project.rar?dl=0

    I really don't know whats wrong this time

    Check the pal map tab on ntme. Make sure it is filled with pal 06. Also,
    mov r1, #0xD6 @slot
    That line should be mov r1, #0x60 iirc.
     
    Yes, it's filled with Pal 6 in the marked section. You can check it if you want by downloading the archive linked above.
    I will test the 0x60 stuff later today when I get home from school!
     
    Last edited:
    Check the pal map tab on ntme. Make sure it is filled with pal 06. Also,
    mov r1, #0xD6 @slot
    That line should be mov r1, #0x60 iirc.

    I did that.It still stucks at the blackscreen if use

    @resources:
    new_pal:
    .word 0x88EF288

    image:
    .word 0x88EBC34

    tilemap:
    .word 0x88EE958
    and if I use

    @resources:
    new_pal:
    .word 0x088EF288

    image:
    .word 0x088EBC34

    tilemap:
    .word 0x088EE958
    the screen isn´t going black, but nothing happens and the game isn´t recognicing any input...
     
    Can I see your script and the entire routine AFTER you've modified it?
    Yes you can!
    Here is the modified routine:
    .text
    .align 2
    .thumb
    .thumb_func

    main:
    push {r4-r6, lr}
    sub SP, SP, #0x4
    ldr r4, bg_positions_reset
    bl linker

    loadTileSet:
    @tileset doesn't require updating
    ldr r1, image
    mov r0, #0x0
    str r0, [sp]
    mov r0, #0x0
    mov r2, #0x0
    mov r3, #0x0
    ldr r4, decompress_with_fallback
    bl linker

    loadPal:
    ldr r0, new_pal
    mov r1, #0x60 @slot
    mov r2, #0x20 @size
    ldr r4, gpu_pal_apply
    bl linker
    ldr r0, new_pal
    ldr r4, gpu_pal_obj_alloc_tag_and_apply
    bl linker

    loadTileMap:
    ldr r1, tilemap
    mov r0, #0x0
    mov r2, #0x0
    mov r3, #0x0
    ldr r4, gpu_tilemap_config_and_commit
    bl linker
    mov r0, #0x0
    ldr r4, bgid_send_tilemap
    bl linker
    ldr r0, tilemap
    ldr r4, gpu_tile_obj_alloc_tag_and_upload
    bl linker

    showBG:
    mov r0, #0x0
    ldr r4, =(0x80019BC +1)
    bl linker

    end:
    add SP, SP, #0x4
    pop {r4-r6, pc}

    linker:
    bx r4

    .align 2

    @resources:
    new_pal:
    .word 0x88EF288

    image:
    .word 0x88EBC34

    tilemap:
    .word 0x88EE958


    @Functions:
    gpu_pal_obj_alloc_tag_and_apply:
    .word 0x8008928 +1

    gpu_tilemap_config_and_commit:
    .word 0x8002040 +1

    gpu_tile_obj_alloc_tag_and_upload:
    .word 0x80086DC +1

    bgid_send_tilemap:
    .word 0x80020BC +1

    decompress_with_fallback:
    .word 0x80F6878 +1

    gpu_pal_apply:
    .word 0x80703EC +1

    bg_positions_reset:
    .word 0x812D594 +1

    Script:
    '-----------------------
    #org 0x71A38D
    callasm 0x88EF1A1
    waitstate
    end
     
    Last edited:
    Shouldnt there be a
    Code:
    waitstate
    right after your callasm?
    Nah, you don't need it.

    Oops, I forgot that.I fixed that. But it still freezes !

    mov r0, #0x0
    mov r2, #0x0
    mov r3, #0x0
    ldr r4, gpu_tilemap_config_and_commit

    change that to

    mov r0, #0x1
    mov r2, #0x0
    mov r3, #0x0
    str r0, [SP]
    mov r0, r2
    ldr r4, gpu_tilemap_config_and_commit


    then check in VBA's map viewer if BG0 exists/the pals are actually being written to.

    If that doesn't work, idk, it's your image. Remember you've set this up to be on pal 0x6 and a size of 16 colors.
     
    Back
    Top