Darthatron

巨大なトロール。

Age 31
Male
Melbourne, Australia
Seen February 2nd, 2015
Posted October 28th, 2014
1,152 posts
17.4 Years
I think its awesome...but I think I'm blonde, I don't get ANY of the stuff you guys were talking about previously lol I must has this on my hacked rom...
Better start learning ASM, then :)
あなた は しきしゃ です
わたし は ばか です

Darthatron

巨大なトロール。

Age 31
Male
Melbourne, Australia
Seen February 2nd, 2015
Posted October 28th, 2014
1,152 posts
17.4 Years
*cough cough* whats ASM? *cough cough* If I know what that means I can be on my way
ASM is ASseMbly. It's the language the ROM is stored in. Knowing how it works allows you to make hacks like this.
あなた は しきしゃ です
わたし は ばか です

Darthatron

巨大なトロール。

Age 31
Male
Melbourne, Australia
Seen February 2nd, 2015
Posted October 28th, 2014
1,152 posts
17.4 Years
Hi there, this is really great.

Are you thinking of making a tool that can change this without hexing?
Nope. Never. :) Once I release the highly commented code, it will be easy enough to implement.
あなた は しきしゃ です
わたし は ばか です

Full Metal

C(++) Developer.

Age 27
Male
In my mind.
Seen August 19th, 2018
Posted May 27th, 2017
810 posts
15.4 Years
Nope. Never. :) Once I release the highly commented code, it will be easy enough to implement.
Soon, by any chance? c:
;_; I lost the non-commented code you sent me, and the notes I took on it.

★ full metal.

I like to push it,
and push it,
until my luck is over.

karatekid552

What happens if I push it?....

Male
Do you really want to know? Really?
Seen January 12th, 2015
Posted December 14th, 2014
1,771 posts
10.6 Years
-I just talked to Darthatron about 2 minutes ago and got permission to release this-

Source Code:

.text
.align 2
.thumb

/*This goes at 78BF8*/
Branch:
        ldr r1, .New_Routine
        bx r1
        pop {r3}

.align 2
.New_Routine:
        .word 0x08XXXXXX + 1
XXXXXX is the location you put this at:

.text
.align 2
.thumb

Start:
        push {r0-r3}
        ldr r3, .RAM_Address
        ldr r1, .Ani_Table
        ldrb r2, [r3, #0x1]
        lsl r2, #0x3
        add r1, r2
        ldrb r0, [r1, #0x4]
        ldrb r2, [r3]
        cmp r2, r0
        bge LoadFrame
        add r2, #0x1
        strb r2, [r3]

        b PressStart
LoadFrame:
        mov r2, #0x0
        strb r2, [r3]
        ldrb r2, [r1, #0x5]
        strb r2, [r3, #0x1]
        ldr r0, [r1]
        ldr r1, .VRAM_Animated_Image
        swi #0x12

PressStart:
        ldrb r2, [r3, #0x2]
        add r2, #1
        strb r2, [r3, #0x2]
        cmp r2, #0x10
        ble Finish
        mov r2, #0
        strb r2, [r3, #0x2]
FlashOn:
        ldrb r2, [r3, #0x3]
        cmp r2, #0
        bne FlashOff
        ldr r0, .Start_Image
        ldr r1, .VRAM_Start
        swi #0x12
        mov r2, #1
        strb r2, [r3, #0x3]
        b Finish
FlashOff:
        ldr r0, .Blank
        ldr r1, .VRAM_Start
        ldr r2, .CPUSET
        swi #0xB
        mov r2, #0
        strb r2, [r3, #0x3]

Finish:
        pop {r0-r3}
ExitRightNow:
        ldr r1, [r0]
        ldr r0, .Frame_Count
        push {r3}
        ldr r3, .Old_Routine
        bx r3

.align 2
.Ani_Table:
        .word 0x08YYYYYY
.RAM_Address:
        .word 0x020370c0
.VRAM_Animated_Image:
        .word 0x06004000
.VRAM_Start:
        .word 0x06001D40
.Frame_Count:
        .word 0x0000FFFF
.Start_Image: /*An image of the press start, 256 color*/
        .word 0x08BAA550
.Blank: /*An blank (completely transparent) image the same size as the press start, 256 color*/
        .word 0x08BAA688
.Old_Routine:
        .word 0x08078C01
.CPUSET:
        .word 0x05000300

YYYYYY = a table somewhere with this structure: Word [Pointer to Image]; Byte [Pause Length]; Byte [Next Frame];

For an example of how this works as is (I modified it in DC) see Liquid Crystal's titlescreen.

The images basically replace the layer that the charizard is on in FR, so you will need to change the palette for that image to be the palette of your new animated frames. You don't need to change the original image, but you do need to change the .raw and make sure that all of your images use the same .raw. The way to do this is to insert you images all the same size and don't make tilesets. Just create your frames, all with the same dimensions, and insert them. Then create a .raw with one of them and replace the .raw for the charizard with it.

All credits go to Dathatron.

I will write a more thorough tutorial when I get around to it....

Edit:
Here is a quick mod of the routine so you don't have to worry about the flashing press start.
.text
.align 2
.thumb

Start:
        push {r0-r3}
        ldr r3, .RAM_Address
        ldr r1, .Ani_Table
        ldrb r2, [r3, #0x1]
        lsl r2, #0x3
        add r1, r2
        ldrb r0, [r1, #0x4]
        ldrb r2, [r3]
        cmp r2, r0
        bge LoadFrame
        add r2, #0x1
        strb r2, [r3]

        b PressStart
LoadFrame:
        mov r2, #0x0
        strb r2, [r3]
        ldrb r2, [r1, #0x5]
        strb r2, [r3, #0x1]
        ldr r0, [r1]
        ldr r1, .VRAM_Animated_Image
        swi #0x12

Finish:
        pop {r0-r3}
ExitRightNow:
        ldr r1, [r0]
        ldr r0, .Frame_Count
        push {r3}
        ldr r3, .Old_Routine
        bx r3

.align 2
.Ani_Table:
        .word 0x08YYYYYY
.RAM_Address:
        .word 0x020370c0
.VRAM_Animated_Image:
        .word 0x06004000
.Frame_Count:
        .word 0x0000FFFF
.Old_Routine:
        .word 0x08078C01
.CPUSET:
        .word 0x05000300

Paired with Simba

MrDollSteak

Formerly known as 11bayerf1

Age 28
Male
Hong Kong
Seen March 16th, 2023
Posted September 26th, 2022
859 posts
14.5 Years
All credits go to Dathatron.

I will write a more thorough tutorial when I get around to it....
That's fantastic! I've been interested in this for awhile :P

supersoursky

Co-Leader of Dark Illusion

Age 23
Male
Philippines
Seen November 26th, 2014
Posted September 9th, 2013
42 posts
10.5 Years
i need somthing that will work for emerald
Co-leader of the hack Dark Illusion
Graphic monsta of the hack Dark Illusion
Misc. Editor of the hack Dark Illusion


Hacks im currently working on :
Pokemon Dark Illusion
Pokemon Dark Illusion
HTML code:
<a href="http://imgur.com/gf90Jh7"><img src="http://i.imgur.com/gf90Jh7.png" title="Hosted by imgur.com"/></a>
Supports are appreciated

Shiny Quagsire

I'm Still Alive, Elsewhere

Age 25
Male
Hoenn Safari Zone
Seen August 7th, 2020
Posted April 17th, 2017
697 posts
14.1 Years
Can anyone tell me what i have to do that i can create a animated titlescreen in Fire red ?
Or can you give me a tutorial please i dont unsterstand this thread!
9 times out of 10 if you ask for a tutorial or a patch in Research and Development you aren't going to get one. Just so ya know. ;)

On a slightly different note if you want to be able to learn how to do things like this I'd suggest first learning how to use a hex editor. Find tutorials that require you to use one and follow along. Keep trying to do the hack until you finally get it right. If you can't then find something on how to script, and learn that, and then go back and try to learn how to hex edit. Then move on to just compiling ASM. You can use the routine in Hackmew's Knowledge and try inserting and using it. Find ASM hacks to apply. Not everyone can understand routines like this or even insert them, but there really isn't any easy way to do this.

Lance32497

LanceKoijer of Pokemon_Addicts

Male
Criscanto town-Ginoa Region xD
Seen August 13th, 2017
Posted January 1st, 2017
792 posts
8.8 Years
Ahhhm... sorry for being noob in my question, but I dont really get it.....
For anyone who's interested, at '0x078c1c'
there is a 32-bit number (the default value is
'0x00000a8b') which dictates the number of
frames for which the titlescreen is displayed
before resetting. The GBA operates at roughly
60 frames per second and '0xa8b' divided by
60 is 45 so the unedited titlescreen is
displayed for 45 seconds. You can change that
number (remember to reverse it) to lengthen
or shorten the amount of time it takes for the
titlescreen to reset.
This is for Fire Red, by the way.
How can I make the titlescreen moves?
This signature has been disabled.
Scrollbar appears
Please review and fix the issues by reading the signature rules.

You must edit it to meet the limits set by the rules before you may remove the [sig-reason] code from your signature. Removing this tag will re-enable it.

Do not remove the tag until you fix the issues in your signature. You may be infracted for removing this tag if you do not fix the specified issues. Do not use this tag for decoration purposes.

Shiny Quagsire

I'm Still Alive, Elsewhere

Age 25
Male
Hoenn Safari Zone
Seen August 7th, 2020
Posted April 17th, 2017
697 posts
14.1 Years
Ahhhm... sorry for being noob in my question, but I dont really get it.....


How can I make the titlescreen moves?
If you scroll up in this page (page 2) you should find karatekid's post which has the ASM needed to do it. From there you just adjust the ASM accordingly, compile, and insert.

Lance32497

LanceKoijer of Pokemon_Addicts

Male
Criscanto town-Ginoa Region xD
Seen August 13th, 2017
Posted January 1st, 2017
792 posts
8.8 Years
wow-o-wow!
Thanks for it!
This signature has been disabled.
Scrollbar appears
Please review and fix the issues by reading the signature rules.

You must edit it to meet the limits set by the rules before you may remove the [sig-reason] code from your signature. Removing this tag will re-enable it.

Do not remove the tag until you fix the issues in your signature. You may be infracted for removing this tag if you do not fix the specified issues. Do not use this tag for decoration purposes.
Seen January 7th, 2017
Posted August 6th, 2016
58 posts
7.8 Years
For anyone who is interested in this hack, I've corrected Karatekid's source code and I've decided to publish it here.
The branch:
0x78BFC - 07 49 08 47 08 BC
0x78C1C - XX XX XX 08 //Pointer to the following code, (+1)
The routine itself:
.thumb
Start:
        push {r0-r3}
        ldr r3, .RAM_Address
        ldr r1, .Ani_Table
        ldrb r2, [r3, #0x1]
        lsl r2, #0x3
        add r1, r2
        ldrb r0, [r1, #0x4]
        ldrb r2, [r3]
        cmp r2, r0
        bge LoadFrame
        add r2, #0x1
        strb r2, [r3]
        b Finish
LoadFrame:
        mov r2, #0x0
        strb r2, [r3]
        ldrb r2, [r1, #0x5]
        strb r2, [r3, #0x1]
        ldr r0, [r1]
        ldr r1, .VRAM_Animated_Image
        swi #0x12

Finish:
        pop {r0-r3}
ExitRightNow:
        ldr r1, [r0]
        ldr r0, .Frame_Count
        push {r3}
        ldr r3, .Old_Routine
        bx r3

.align 2
.Ani_Table:
        .word 0x08YYYYYY @animation table offset
.RAM_Address:
        .word 0x020370c0
.VRAM_Animated_Image:
        .word 0x06004000
.Frame_Count:
        .word 0x0000FFFF
.Old_Routine:
        .word 0x08078C01
Age 25
Male
Seen April 27th, 2023
Posted September 2nd, 2020
534 posts
10.8 Years
For anyone who is interested in this hack, I've corrected Karatekid's source code and I've decided to publish it here.
The branch:
0x78BFC - 07 49 08 47 08 BC
0x78C1C - XX XX XX 08 //Pointer to the following code, (+1)
The routine itself:
.thumb
Start:
        push {r0-r3}
        ldr r3, .RAM_Address
        ldr r1, .Ani_Table
        ldrb r2, [r3, #0x1]
        lsl r2, #0x3
        add r1, r2
        ldrb r0, [r1, #0x4]
        ldrb r2, [r3]
        cmp r2, r0
        bge LoadFrame
        add r2, #0x1
        strb r2, [r3]
        b Finish
LoadFrame:
        mov r2, #0x0
        strb r2, [r3]
        ldrb r2, [r1, #0x5]
        strb r2, [r3, #0x1]
        ldr r0, [r1]
        ldr r1, .VRAM_Animated_Image
        swi #0x12

Finish:
        pop {r0-r3}
ExitRightNow:
        ldr r1, [r0]
        ldr r0, .Frame_Count
        push {r3}
        ldr r3, .Old_Routine
        bx r3

.align 2
.Ani_Table:
        .word 0x08YYYYYY @animation table offset
.RAM_Address:
        .word 0x020370c0
.VRAM_Animated_Image:
        .word 0x06004000
.Frame_Count:
        .word 0x0000FFFF
.Old_Routine:
        .word 0x08078C01
Questioooon~! ^U^ If I use this, would I still use any of the stuff from karatekid552's post?
Seen January 7th, 2017
Posted August 6th, 2016
58 posts
7.8 Years
Questioooon~! ^U^ If I use this, would I still use any of the stuff from karatekid552's post?
Yes, basically you should build a table for tileset and replace pointers and palette as mentioned in Karatekid's post.
I've tested it, and everything run perfectly.
Age 25
Male
Seen April 27th, 2023
Posted September 2nd, 2020
534 posts
10.8 Years
Yes, basically you should build a table for tileset and replace pointers and palette as mentioned in Karatekid's post.
I've tested it, and everything run perfectly.
Ooops. Sorry, I meant these. If I would need any of them.

.text
.align 2
.thumb

/*This goes at 78BF8*/
Branch:
        ldr r1, .New_Routine
        bx r1
        pop {r3}

.align 2
.New_Routine:
        .word 0x08XXXXXX + 1
XXXXXX is the location you put this at:

.text
.align 2
.thumb

Start:
        push {r0-r3}
        ldr r3, .RAM_Address
        ldr r1, .Ani_Table
        ldrb r2, [r3, #0x1]
        lsl r2, #0x3
        add r1, r2
        ldrb r0, [r1, #0x4]
        ldrb r2, [r3]
        cmp r2, r0
        bge LoadFrame
        add r2, #0x1
        strb r2, [r3]

        b PressStart
LoadFrame:
        mov r2, #0x0
        strb r2, [r3]
        ldrb r2, [r1, #0x5]
        strb r2, [r3, #0x1]
        ldr r0, [r1]
        ldr r1, .VRAM_Animated_Image
        swi #0x12

PressStart:
        ldrb r2, [r3, #0x2]
        add r2, #1
        strb r2, [r3, #0x2]
        cmp r2, #0x10
        ble Finish
        mov r2, #0
        strb r2, [r3, #0x2]
FlashOn:
        ldrb r2, [r3, #0x3]
        cmp r2, #0
        bne FlashOff
        ldr r0, .Start_Image
        ldr r1, .VRAM_Start
        swi #0x12
        mov r2, #1
        strb r2, [r3, #0x3]
        b Finish
FlashOff:
        ldr r0, .Blank
        ldr r1, .VRAM_Start
        ldr r2, .CPUSET
        swi #0xB
        mov r2, #0
        strb r2, [r3, #0x3]

Finish:
        pop {r0-r3}
ExitRightNow:
        ldr r1, [r0]
        ldr r0, .Frame_Count
        push {r3}
        ldr r3, .Old_Routine
        bx r3

.align 2
.Ani_Table:
        .word 0x08YYYYYY
.RAM_Address:
        .word 0x020370c0
.VRAM_Animated_Image:
        .word 0x06004000
.VRAM_Start:
        .word 0x06001D40
.Frame_Count:
        .word 0x0000FFFF
.Start_Image: /*An image of the press start, 256 color*/
        .word 0x08BAA550
.Blank: /*An blank (completely transparent) image the same size as the press start, 256 color*/
        .word 0x08BAA688
.Old_Routine:
        .word 0x08078C01
.CPUSET:
        .word 0x05000300
.text
.align 2
.thumb

Start:
        push {r0-r3}
        ldr r3, .RAM_Address
        ldr r1, .Ani_Table
        ldrb r2, [r3, #0x1]
        lsl r2, #0x3
        add r1, r2
        ldrb r0, [r1, #0x4]
        ldrb r2, [r3]
        cmp r2, r0
        bge LoadFrame
        add r2, #0x1
        strb r2, [r3]

        b PressStart
LoadFrame:
        mov r2, #0x0
        strb r2, [r3]
        ldrb r2, [r1, #0x5]
        strb r2, [r3, #0x1]
        ldr r0, [r1]
        ldr r1, .VRAM_Animated_Image
        swi #0x12

Finish:
        pop {r0-r3}
ExitRightNow:
        ldr r1, [r0]
        ldr r0, .Frame_Count
        push {r3}
        ldr r3, .Old_Routine
        bx r3

.align 2
.Ani_Table:
        .word 0x08YYYYYY
.RAM_Address:
        .word 0x020370c0
.VRAM_Animated_Image:
        .word 0x06004000
.Frame_Count:
        .word 0x0000FFFF
.Old_Routine:
        .word 0x08078C01
.CPUSET:
        .word 0x05000300
Seen January 7th, 2017
Posted August 6th, 2016
58 posts
7.8 Years
I really want to do this on my hack, but really would need a tutorial!

I don't get what I have to do.
I know, I have to compile + insert the ASM Routines, but how/where do I have to inject the single pictures for the animation?
Follow my post and you will find that it requires a table, which is partially composed of image pointers. (You can follow Karatekid552's reply to get the accurate structure of the table)