Homebrew [RELEASE] BootAnim9 - Custom boot animations for your 3DS!

Status
Not open for further replies.

chinhodado

Member
Newcomer
Joined
May 19, 2010
Messages
18
Trophies
0
XP
159
Country
United States
Does it mean the boot time will be extended by the whole duration of the animation? Or does it only take the time to load the animation and the system loads other things while the animation is playing?
 

MattKimura

3DS & WiiU Enthusiast
Member
Joined
Jun 30, 2014
Messages
2,137
Trophies
1
XP
2,937
Country
United States
Does it mean the boot time will be extended by the whole duration of the animation? Or does it only take the time to load the animation and the system loads other things while the animation is playing?
However long the animation is, that's how long your boot time is. So it's best to stick with shorter ones
 
D

Deleted User

Guest
I guess you could duel boot this with ctrboot9 if you really need a bottom screen animation if you want to run this with a older cfw that supports .bin
 
Last edited by ,

Wolfvak

nyaa~
OP
Member
Joined
Oct 25, 2015
Messages
918
Trophies
1
XP
3,486
Country
Uruguay
Does this increase the boot time?
Yes, it increases it by about 250ms + the length of the animation. There's simply no way around this.
As I've said *several* times before, the point of BA9/BAX wasn't to make long animations, just short things. Especially considering the size of the resulting animation file, which is ((top frames*192000) + (bottom frames * 153600) + 128) bytes long. In average, this results in a ~30MiB file.

I guess you could duel boot this with ctrboot9 if you really need a bottom screen animation if you want to run this with a older cfw that supports .bin
Honestly, I don't plan to support plain binaries, ELF or FIRM is a far superior container for them as it allows relocation and other fancy stuff.
 
Last edited by Wolfvak,
  • Like
Reactions: Joel16 and hurrz

Wolfvak

nyaa~
OP
Member
Joined
Oct 25, 2015
Messages
918
Trophies
1
XP
3,486
Country
Uruguay
Small progress update: I've been sick for a couple of days now and haven't been able to really focus on the main project, so instead I made a simple .NET application that takes in framebuffer dumps and converts them to a BAX animation. I chose .NET because despite my dislike for bytecode interpreters/recompilers, it's portable and thanks to the Mono project, works on all main platforms (Windows, *nix, OSX(?)). It can work both as a GUI application and a console app, in case anyone decides to do batch processing with it. The GUI version supports drag and drop operations, with screen autodetection.

I've tested it under Windows XP Professional 32-bit, Windows 7 Ultimate 64-bit, Debian buster amd64 and Debian stretch mipsel, so it *should* work fine on anything that's somewhat modern.

CJJ07Rq.png

bQVq0We.png

siUtgOo.png
XBdPSPI.png

WbfRRLd.png

IgUesb7.png
399BE2c.png

tKT1SE8.png

vFn62l5.png

This brings me to the second issue, the good ol' screen initialization procedure. Now, I haven't been following the scene too closely but from what people told me the framebuffers are passed through R2 to the payload, which severely limits flexibility. For example, BAX uses RGB565 framebuffers to shrink down the IO load (2 bytes per pixel instead of 3, simple math would tell you this is 1.5x faster but realistically the number is more like 1.2-1.3x), but, without writing my own screen init, I'm kinda fucked.

Considering there's already a perfectly good screen initialization being performed already, I think it'd be a better idea to select certain initialization parameters (screen init, N3DS extra RAM, caches, etc) to be selected through the FIRM reserved bytes in a way that b9s can understand them and act accordingly. Of course, this is not currently a thing, which sucks.

Another issue lays in the chainloading: having every application have it's own FIRM loader, probably with some inconsistencies between them is a terrible idea, and I think it'd be better to leave b9s handle those and call it somehow whenever an application requires to chainload (pretty much all current ARM9 applications have to chainload sooner or later, only alternative is to reboot). A clear way to do it would be using the Software Interrupt feature or maybe just having a "kernel function entrypoint".

Overall, BAX is already finished, the only issues remaining are screen init and the chainloading thing. It would be really simple to just add my own, but personally I think it'd be better for everyone to have something similar to what I just described. Until these are fixed/worked around, I don't think I'll be able to release anything - at least not the way I intended.
 

Blaze Uchiha

Well-Known Member
Member
Joined
Feb 6, 2016
Messages
558
Trophies
0
Age
38
XP
729
Country
United States
Small progress update: I've been sick for a couple of days now and haven't been able to really focus on the main project, so instead I made a simple .NET application that takes in framebuffer dumps and converts them to a BAX animation. I chose .NET because despite my dislike for bytecode interpreters/recompilers, it's portable and thanks to the Mono project, works on all main platforms (Windows, *nix, OSX(?)). It can work both as a GUI application and a console app, in case anyone decides to do batch processing with it. The GUI version supports drag and drop operations, with screen autodetection.

I've tested it under Windows XP Professional 32-bit, Windows 7 Ultimate 64-bit, Debian buster amd64 and Debian stretch mipsel, so it *should* work fine on anything that's somewhat modern.

CJJ07Rq.png

bQVq0We.png

siUtgOo.png
XBdPSPI.png

WbfRRLd.png

IgUesb7.png
399BE2c.png

tKT1SE8.png

vFn62l5.png

This brings me to the second issue, the good ol' screen initialization procedure. Now, I haven't been following the scene too closely but from what people told me the framebuffers are passed through R2 to the payload, which severely limits flexibility. For example, BAX uses RGB565 framebuffers to shrink down the IO load (2 bytes per pixel instead of 3, simple math would tell you this is 1.5x faster but realistically the number is more like 1.2-1.3x), but, without writing my own screen init, I'm kinda fucked.

Considering there's already a perfectly good screen initialization being performed already, I think it'd be a better idea to select certain initialization parameters (screen init, N3DS extra RAM, caches, etc) to be selected through the FIRM reserved bytes in a way that b9s can understand them and act accordingly. Of course, this is not currently a thing, which sucks.

Another issue lays in the chainloading: having every application have it's own FIRM loader, probably with some inconsistencies between them is a terrible idea, and I think it'd be better to leave b9s handle those and call it somehow whenever an application requires to chainload (pretty much all current ARM9 applications have to chainload sooner or later, only alternative is to reboot). A clear way to do it would be using the Software Interrupt feature or maybe just having a "kernel function entrypoint".

Overall, BAX is already finished, the only issues remaining are screen init and the chainloading thing. It would be really simple to just add my own, but personally I think it'd be better for everyone to have something similar to what I just described. Until these are fixed/worked around, I don't think I'll be able to release anything - at least not the way I intended.
Probably a stupid question but what is BAX?
 

Blaze Uchiha

Well-Known Member
Member
Joined
Feb 6, 2016
Messages
558
Trophies
0
Age
38
XP
729
Country
United States
Small progress update: I've been sick for a couple of days now and haven't been able to really focus on the main project, so instead I made a simple .NET application that takes in framebuffer dumps and converts them to a BAX animation. I chose .NET because despite my dislike for bytecode interpreters/recompilers, it's portable and thanks to the Mono project, works on all main platforms (Windows, *nix, OSX(?)). It can work both as a GUI application and a console app, in case anyone decides to do batch processing with it. The GUI version supports drag and drop operations, with screen autodetection.

I've tested it under Windows XP Professional 32-bit, Windows 7 Ultimate 64-bit, Debian buster amd64 and Debian stretch mipsel, so it *should* work fine on anything that's somewhat modern.

CJJ07Rq.png

bQVq0We.png

siUtgOo.png
XBdPSPI.png

WbfRRLd.png

IgUesb7.png
399BE2c.png

tKT1SE8.png

vFn62l5.png

This brings me to the second issue, the good ol' screen initialization procedure. Now, I haven't been following the scene too closely but from what people told me the framebuffers are passed through R2 to the payload, which severely limits flexibility. For example, BAX uses RGB565 framebuffers to shrink down the IO load (2 bytes per pixel instead of 3, simple math would tell you this is 1.5x faster but realistically the number is more like 1.2-1.3x), but, without writing my own screen init, I'm kinda fucked.

Considering there's already a perfectly good screen initialization being performed already, I think it'd be a better idea to select certain initialization parameters (screen init, N3DS extra RAM, caches, etc) to be selected through the FIRM reserved bytes in a way that b9s can understand them and act accordingly. Of course, this is not currently a thing, which sucks.

Another issue lays in the chainloading: having every application have it's own FIRM loader, probably with some inconsistencies between them is a terrible idea, and I think it'd be better to leave b9s handle those and call it somehow whenever an application requires to chainload (pretty much all current ARM9 applications have to chainload sooner or later, only alternative is to reboot). A clear way to do it would be using the Software Interrupt feature or maybe just having a "kernel function entrypoint".

Overall, BAX is already finished, the only issues remaining are screen init and the chainloading thing. It would be really simple to just add my own, but personally I think it'd be better for everyone to have something similar to what I just described. Until these are fixed/worked around, I don't think I'll be able to release anything - at least not the way I intended.
I know no one likes when people ask these kind of questions, but it has been quite a few months since we've heard anything. Any new news on this yet?
 

MasterJ360

Well-Known Member
Member
Joined
Jan 10, 2016
Messages
2,802
Trophies
1
Age
35
XP
3,465
Country
United States
Yeah i was wondering if this ever got an update boot.firm since Luma got the 9.0 update it removed my animation
 
D

Deleted User

Guest
Yeah i was wondering if this ever got an update boot.firm since Luma got the 9.0 update it removed my animation
How did you go about updating Luma? If you used Luma3DS Updater (aka the updater you should have installed with the guide) and didn't have Luma as your default boot.firm payload beforehand, then it simply replaced your old payload with the newest version of Luma.
 

MasterJ360

Well-Known Member
Member
Joined
Jan 10, 2016
Messages
2,802
Trophies
1
Age
35
XP
3,465
Country
United States
How did you go about updating Luma? If you used Luma3DS Updater (aka the updater you should have installed with the guide) and didn't have Luma as your default boot.firm payload beforehand, then it simply replaced your old payload with the newest version of Luma.
Ah I see something simple I overlooked just had to rename Luma 9.0's boot.firm into bootluma.firm
 
Last edited by MasterJ360, , Reason: can't spell

Wolfvak

nyaa~
OP
Member
Joined
Oct 25, 2015
Messages
918
Trophies
1
XP
3,486
Country
Uruguay
Probably a stupid question but what is BAX?
Complete rewrite of BootAnim9.


Speaking of which... it's kinda done already, I'll probably upload some videos tomorrow or the day after, but I've hit a block with the animation transcoder.
Basically, libav is a bit of a mess to work with so unless I find an alternative library to decode video frames to raw RGB data I'll have to rely on scripts that use ffmpeg and other utils rather than a full self-contained utility that can do everything (video decompression, delta encoding, transposing, compression, BAX file creation).

So, I'm mostly just posting here asking for suggestions - whether they are about better video libraries or whatever else. Thanks for reading, I guess. Good to see some people are still interested in a concept like this.

The repo will eventually be made public @ gitlab.com/Wolfvak/BAX
 

hannibalburress

Member
Newcomer
Joined
Feb 8, 2018
Messages
12
Trophies
0
Age
26
Location
Washington, DC
XP
45
Country
United States
Complete rewrite of BootAnim9.


Speaking of which... it's kinda done already, I'll probably upload some videos tomorrow or the day after, but I've hit a block with the animation transcoder.
Basically, libav is a bit of a mess to work with so unless I find an alternative library to decode video frames to raw RGB data I'll have to rely on scripts that use ffmpeg and other utils rather than a full self-contained utility that can do everything (video decompression, delta encoding, transposing, compression, BAX file creation).

So, I'm mostly just posting here asking for suggestions - whether they are about better video libraries or whatever else. Thanks for reading, I guess. Good to see some people are still interested in a concept like this.

The repo will eventually be made public @ gitlab.com/Wolfvak/BAX
'

Will this work with B9S and Luma 9.0?
 

Wolfvak

nyaa~
OP
Member
Joined
Oct 25, 2015
Messages
918
Trophies
1
XP
3,486
Country
Uruguay
Paraphrased from the README: "This requires a loader that provides services compatible to those from boot9strap v1.2."

Haven't tested Luma 9 but I'm pretty sure it'll work, I've thrown some really weird FIRMs at my loader and it hasn't let me down yet.
 

Wolfvak

nyaa~
OP
Member
Joined
Oct 25, 2015
Messages
918
Trophies
1
XP
3,486
Country
Uruguay
Alright, second update.

I've decided to go with IVF/VP8/9 only to escape the hell that is libav programming. You can easily convert any video to IVF with ffmpeg anyway, so I don't think it's a big deal.

I hope to have a release by late February, so as a sort of preview I'll post the README I have planned - any suggestions/questions about it is well received, as always.
https://gist.github.com/Wolfvak/a763a876d0a76ca653c79272248bbb8a <- main BAX readme

https://gist.github.com/Wolfvak/59a0cba1b45271998e61e4eeee4ba72f <- makebax readme
 
Last edited by Wolfvak,

Wolfvak

nyaa~
OP
Member
Joined
Oct 25, 2015
Messages
918
Trophies
1
XP
3,486
Country
Uruguay
can there be boot sounds in the future?
Depends on your definition of "future". If you meant some time before the end of the universe, then yeah, probably.

If you mean in the following 3 months, I don't think so.

Wouldn't hold my breath either way.

The main issue with sound is that we don't know how to initialize the DSP... if that's solved (and a path is opened up to it), sending audio data shouldn't be too hard. Compared to (compressed) video data, audio is really small (less than 1/8th of it, depending on your settings).
 
Last edited by Wolfvak, , Reason: moar explanation
Status
Not open for further replies.

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    Psionic Roshambo @ Psionic Roshambo: https://www.youtube.com/watch?v=_9PnFJMnYT0