In the instructions on the left, the following happens: ldr r0[sp,0x4] loads the stack pointer with an address to the 32bit value I want to change (030007DB4). The next set of instructions load in the enemies health (r0) and subtracts r1 (attack damage) from it. From other tests I've done it looks like it's using the value from r7.
When I do anything like trying to set a break on [030007DB4] it causes the debugger to break constantly, not allowing any time for me to input controls before tracing.
Maybe someone knows a better approach? I'm just just in the dark.
EDIT: So I just kept following function calls and I eventually found where the game calls the function. After a bit on tinkering I can find where the value is stored for each attack. It's in the format mov r0,0xY, where "Y" is the amount of damage (byte).
I found some really interesting information on how the attacks work, including how much each attack does and how the collision of each attack works. Did you know a falling stone attack does more damage than a direct hit from missile?