Hello, everyone!
I have a request that might sound strange to some of you.
My name is Mike and I'm a totally blind gamer. My request is this.
Would it be possible to add wall bump sounds to dragon quest Ix for the ds? I've been playing the pokemon games since RBY, which are playable by the blind thanks to this mechanic. Some of the previous dq games have this as well, including dragon quest Xi's 2d mode. If anyone could add this I would be eternally grateful!
I don't know what the blind gamer setups are like for the DS right now but DS emulators have Lua and thus you could probably add something like a player location detection script (might be related to OAM but more likely a virtual one, easy enough to find with cheats) and note something like if it sees a button press but does not see an attendant change in the location value.
Many other games function like this so you could probably even adapt the script and render some other games more playable in the future (and as Lua is on many other emulators then those too). If you find the game's internal map (a bit more involved but still well within reason) you can do things like coordinate readouts, distances to walls, sprite detection if someone on a little walk loop walks in the way and so forth. I did have a basics of how such things might work in another thread a few days back
https://gbatemp.net/threads/possibility-of-game-changes-when-i-x-with-ds-emulators.577526/Otherwise should not be too bad to find the movement routines and if another map action has a sound (open door, open chest, if there is an attack then that...) then borrow the call method to play a sound in the game's SDAT file; most DS games use the same sound format which is well understood and easy enough to add things to, even easier to call an existing sound if that will do.
I don't have my DS hacking setup with me at this point, however if someone else is wanting to start on DS assembly this would be a nice starter project.
Find some action that uses a key press and calls a sound. Now you hopefully know the sound call (should mostly be a matter of telling it to play a numbered effect). If you used a key press then should be easy enough to find the thing handling direction presses too (it will tend to be the same thing or nearby), if you used something else then time to find the key press (
http://problemkaputt.de/gbatek.htm#dskeypad ).
Find the direction button handler and what it does for collisions (probably compares against some internal map but can be trickier, you don't really care what it does as much as finding it to tack something on). When a collision happens then rather than just handling the collision take the sound call you learned earlier and have it fire off one for the collision as well.
I can't imagine doing this will be too long an addition to the binary, however if you do need extra space then I would suggest looking at the DS ARM9 binary. For wifi enabled games then all the random error strings for odd network failures tend to be there. As said network is now down and even if you are on the replacement service you are unlikely to encounter this error.
If you need to edit the SDAT there are plenty of tools. Chances are most effects will be using the SWAV sub type, possibly buried in SWAR. 99% of games will have something that will suffice, or a leftover from development that is not used in the game you can overwrite. If you are a funny type you can have it call a nice character death scream. Adding new SWAV, be it standalone or in SWAR, is not the worst thing in the world though.