Hacking Homebrew app Project NinBadges - Nintendo Switch Achievements System

  • Thread starter Thread starter davimassini
  • Start date Start date
  • Views Views 16,053
  • Replies Replies 48
  • Likes Likes 33

davimassini

Member
Newcomer
Joined
Apr 27, 2025
Messages
17
Reaction score
64
Trophies
0
XP
208
Country
Brazil
Hello everyone, I'm excited to show you all my first project for the Nintendo Switch.
It's a WIP for now, but I think it will be a great idea to let others give ideas and/or follow the process.

NinBadges (still under study, open for suggestions)
For months, since I bought my Switch, I have asked myself why Nintendo never made an achievements system even though some first-party games have their own in-game systems for this.
When I started to learn and dive into the homebrew scene, everywhere I searched about it always came down to people complaining about it, but never anything concrete.
I work with Java and my background with C/C++ is pretty low, but I believe everything can be achieved, so I started to learn (especially in this forum).

First things first, why badges? My concept is to make the entire project revolve around scout badges.
I really like the shapes, designs, and I think that they will fit perfectly with the feeling of a Switch.
For example, for the categories I was thinking of something that refers to some classics:
  • Bronze Mushroom (15 points) [Bronze Achievement]
  • Silver Rupee (30 points) [Silver Achievement]
  • Golden Banana (50 points) [Golden Achievement]
  • Power Star (75 points) [Platinum]
  • Maybe other badges for events or other tasks (friendship, level, collaboration at project, etc)

The idea is simple, the project will be split into three parts:
sysmodule: works in the background, handles the memory read, makes requests to get/post the list of badges, shows the popup when unlocking some badge; (60% done)
application: will show and manage the list of games and badges of each, maybe a friend system and other things (nothing done yet, UI is a mess for me);
backend: receives requests, manages the db, login, level, friends, etc.; (70% done)

My biggest fear/concern will be mapping each memory pointer and value for the achievements… For games that already have achievements, my plan is to keep what the developers created (artwork, names, descriptions, etc.) and parse that together with the community (especially if the games are available on other platforms where it's possible to run Cheat Engine or similar tools to extract everything more easily).

For first-party titles and games that don’t have existing achievements, I believe it would be excellent to organize contests with the community where we can vote on and validate achievements created by you all. As soon as I define my search method, I intend to create materials to help people hunt for these addresses and values as a way to contribute to the project. Every bit of help is welcome!

FAQ (will be updated)
Is there a ETA?
Not for now. I'm making this post to show the idea and get some feedback. I'm a solo developer and don't want to rush this (because I'll get stuck and end up abandoning the project), so I am taking my time.

How is it going to work?
Once the sysmodule is enabled, and a game is open, a list of badges (which contains title, description, memory_pointer_address, and memory_pointer_value) will be received. If the badge is still locked, a memory search will happen in real time to see if the value of the address and the expected value match.

What about perfomance?
I developed this on a Switch Lite and have never had an issue or frame drop so far. Of course, a lot of new things will be added and performance is one of my priorities.

Is there any other place where I can get info about this project?
Not for now. This post will be updated with new things when the time comes.

Is there any GitHub project?
That will be my next step. I'm organizing everything to push and allow other people's collaboration.

CONCEPTS
home - concept.png

1. Main Page

Badge Unlock - POPUP - Concept 2.png

2.1. Pop-up Concept

Badge Unlock - POPUP - Concept 1.png

2.2. Pop-up Concept

Badges - Concept.png

3. Badges Concept - For now, it's only stars because I don't want to waste time on this right now.

Actual Badge - POPUP.JPEG

4. Real Badge PopUp - I used Plutonium (thanks to XorTroll), but I discarded the idea because of the limitations.

I have big ideas and many ambitions for the project. I'm trying not to let the scope grow too much until it becomes minimally viable. I would love to hear from you about what I can improve and what I should keep doing.
 
FUCKING SICK AS HELL BRO

Nice work

I don't know C to save my life, but am good with python..in the small chance you need help there HMU. It could runthe server backend. Depending on how you want to track acheivements/accounts or whatever
 
To point out an issue as someone who used extensively dmnt:cht for Status Monitor before ditching it altogether:
dmnt:cht works flawlessly only when not used by external apps. External apps calling dmnt:cht API for read/write are causing much longer time response than using svcDebug directly which results in stuttering/sound cracking in some games when doing multiple reads in a row. This cannot be skipped because there is always a delay when using some external service and some games are very sensitive to it (this is because process must be paused to read anything via another process debugging it, so when using read command you are pausing game for very very very short amount of time). Using svcDebug while dmnt:cht runs is also out of question because each app can be debugged only by one process.

It works in 99.9% of games neatly as long as you don't use too much read calls. In games like Valkyria Chronicles 4 sound cracking occurs with just two readings in a row. One of solutions would be to limit yourself to one call per some time f.e. 1/30s, this should be the least invasive solution.

Only other approach is to patch game to output values into some SharedMemory what I use for Status Monitor by spoofing SaltyNX memory into game, but because it's invasive and there is no 100% compatibility I can understand why you may want to avoid this approach.

FYI
 
Last edited by masagrator,
FUCKING SICK AS HELL BRO

Nice work

I don't know C to save my life, but am good with python..in the small chance you need help there HMU. It could runthe server backend. Depending on how you want to track acheivements/accounts or whatever
You can be sure that all help will be welcome, for now I'm doing the backend using Java (Spring Boot)... But I still need to evaluate, in a finished project, what would be the cost (monetary and performance) of maintaining this. Your Cheat-Engine-NX will certainly help in part of the process of finding memory addresses and values. One of my ideas, at least for third parties that support this, would be to try using an achievement unlocker for the PC ports, search for the affected addresses and validate if they are the same as the Switch port.

To point out an issue as someone who used extensively dmnt:cht for Status Monitor before ditching it altogether:
dmnt:cht works flawlessly only when not used by external apps. External apps calling dmnt:cht API for read/write are causing much longer time response than using svcDebug directly which results in stuttering/sound cracking in some games when doing multiple reads in a row. This cannot be skipped because there is always a delay when using some external service and some games are very sensitive to it (this is because process must be paused to read anything via another process debugging it, so when using read command you are pausing game for very very very short amount of time). Using svcDebug while dmnt:cht runs is also out of question because each app can be debugged only by one process.

It works in 99.9% of games neatly as long as you don't use too much read calls. In games like Valkyria Chronicles 4 sound cracking occurs with just two readings in a row. One of solutions would be to limit yourself to one call per some time f.e. 1/30s, this should be the least invasive solution.

Only other approach is to patch game to output values into some SharedMemory what I use for Status Monitor by spoofing SaltyNX memory into game, but because it's invasive and there is no 100% compatibility I can understand why you may want to avoid this approach.

FYI
That's really good to know. My sysmodule currently receives a list that I'm using to compare with the game's memory addresses. So far I haven't had any problems with the ones I tested (GTA 3: Definitive Edition and Ori and the Blind Forest: Definitive Edition), but I'm going to test it with Valkyria Chronicles 4 and see how it behaves. I don't think I need something 100% real-time, so maybe reducing the reading time would be a good idea regardless of how this test ends.

I didn't end up doing this in the post, but I appreciate your help earlier. Your suggestion to use dmnt:cht and tips on how to do this were essential for this project to move forward.
 
You can be sure that all help will be welcome, for now I'm doing the backend using Java (Spring Boot)... But I still need to evaluate, in a finished project, what would be the cost (monetary and performance) of maintaining this. Your Cheat-Engine-NX will certainly help in part of the process of finding memory addresses and values. One of my ideas, at least for third parties that support this, would be to try using an achievement unlocker for the PC ports, search for the affected addresses and validate if they are the same as the Switch port.


That's really good to know. My sysmodule currently receives a list that I'm using to compare with the game's memory addresses. So far I haven't had any problems with the ones I tested (GTA 3: Definitive Edition and Ori and the Blind Forest: Definitive Edition), but I'm going to test it with Valkyria Chronicles 4 and see how it behaves. I don't think I need something 100% real-time, so maybe reducing the reading time would be a good idea regardless of how this test ends.

I didn't end up doing this in the post, but I appreciate your help earlier. Your suggestion to use dmnt:cht and tips on how to do this were essential for this project to move forward.
I'd assume you are also a fan of RetroAchievements then?
 
  • Like
Reactions: davimassini
I'd assume you are also a fan of RetroAchievements then?
I was deeply inspired by them, but I’ve actually never used it… I know the core is the same; I need to take some time to carefully look at their application and learn from the positive aspects (I think it’s brilliant how they managed to create such a strong sense of community).
 
  • Like
Reactions: RyanTheArchivist
Modders do what Nintendon't! I wish you luck. Logged in on this account after not being on this site for years - I'm excited to see how this project progresses.
 
  • Like
Reactions: davimassini
Good Luck !! i opened gbatemp just to look for something similar and found this instantly. I suggest you check the persona 5 modding discord since the switch version is easy to mod so maybe they can help. I shared the thread there too
Post automatically merged:

Good Luck !! i opened gbatemp just to look for something similar and found this instantly. I suggest you check the persona 5 modding discord since the switch version is easy to mod so maybe they can help. I shared the thread there too
 
  • Like
Reactions: davimassini
My work is kind of overloading my time right now, so my progress on this is slower than I expected… But I’ll post an update to this thread in a couple of days. I really appreciate all the kind words and support — I can’t wait to see this online. There’s still a long road ahead, but we’re going to achieve that goal.

Just in case, I’ve already done some tests regarding the possible issue Masagrator mentioned. I didn’t find the same behavior (dmnt:cht is not being called by any external source, so we’re good), but unfortunately, in Valkyria Chronicles 4, when I have my sysmodule and another one (like sys-ftpd) enabled at the same time and try to open the Tesla Menu, the system crashes due to memory limits being reached. My first step when I return to this project will be to try and solve that.

Good Luck !! i opened gbatemp just to look for something similar and found this instantly. I suggest you check the persona 5 modding discord since the switch version is easy to mod so maybe they can help. I shared the thread there too
Post automatically merged:

Good Luck !! i opened gbatemp just to look for something similar and found this instantly. I suggest you check the persona 5 modding discord since the switch version is easy to mod so maybe they can help. I shared the thread there too
Really great to know about the Persona 5 Modding Discord! I’ll definitely need a lot of help soon mapping the pointer addresses for the achievements, and now I know Persona already has a place where I can ask for this. xD

I’ve mapped 3 pointers for GTA III so far, just as a test. Once I manage this better, I might share a default template for it. My goal is to create a simple tutorial on how to search for these pointers (no ETA), but for now, I encourage everyone to build their own tables and find them for any game they want. I’m also planning a special badge for those who contribute as finders, along with a system that will let you showcase it on your profile.

1749496693514.png
 
will it have achievements for games that dont outside of switch? like bayonetta 2 and 3 or smash ultimate
Post automatically merged:

Will this work for games without achievements? like bayonetta 2 and 3 and the xenoblade chronicles games?
 
  • Like
Reactions: davimassini
will it have achievements for games that dont outside of switch? like bayonetta 2 and 3 or smash ultimate
Post automatically merged:

Will this work for games without achievements? like bayonetta 2 and 3 and the xenoblade chronicles games?

Yep, any game... If a game has a list of achievements on another platform (PlayStation, Xbox, Steam, etc), my goal is for us to be able to replicate that. And if not, the community is free to create their own. I'm thinking about the best way to grow the community and set up polls for things like this.
 
  • Like
Reactions: FFTW and linuxares
From what I can see, you're planning to make this work with a server like RetroAchievement. Have you thought about adding a totally local operation? This would allow you to unlock achievements even without an internet connection, as well as being able to use your own achievements even if they haven't been approved.
 
  • Like
Reactions: FFTW and hippy dave

Site & Scene News

Popular threads in this forum