Or you could get the vram address where the font is being written, profile any write accesses to that address or breakpoint, so you can look at link register (your method/function that usually draws will come from a drawfont/sprite function), so you could restore at least 3 or 4 opcodes (depending on cpu mode thumb/arm will be either 2*3/4 bytes or 4*3/4 bytes) from stack (r13) right after you break point.
You should at most fetch 3 to 4 opcodes:
opcode and briefly before, an opcode that writes your desired return address (method where the draw is coming from) to link register(r14).
Repeat this once more and you will find the epilogue method, (the method that called drawfont function).
Make sure you BX jump the PC (r15) using this address.
Now look carefully this address, if you are using a disassembler, you will see (at least 4 -- 12) opcodes before, where usually arg0 and arg1 is being written to r0 or r1, the *SOURCE* address plus an index that is used from the LDR opcode, is the game static variable reserved that you want to modify.
So if you breakpoint any write to that address, you can do the same what I described above and look where the game is taking the variable from. (either static or math generated)
What gameshark/cheat codes do, is write a hook (handler) that constantly overwrite on vblank or vcount your desired new value to this source address, or at startup patch the static variable and stub any method that writes to this source address by modifying the game entrypoint.
(games usually do arg0: source address/index/any , arg1: size in bytes/ array of font,music,data address/any).
If you don't know low level programming, its time to get some books and learn, or do some C programming before. I know this is a messy explanation but thats how I am able to reverse engineer stuff, apologies if not understood fully.