Here is the end of it all.
080684EEh is not an actual label, it's simply where I decided to start. It's twards the bottom of the function which calculates if the soul is given or not.
8000a90h is some mystery function. I'm not sure what that formula is suppose to do, but it will always operate on what ever the pointer in 0x02000008 goes to, then moves it back there, it seems. Possibly 'randomize.'
080D8140h just returns the modulas of r0,r1 into r0.
r5 apears to contain a set value for each bad guy type. Zombies=3, bats=6. The higher the number, the higher the chance of you getting the soul.
I don't care enough to be working on this, but this should be a decent starting point for any one who is intrested.
08000A90h:
ldr r0,=84F0B28h
ldr r2,[r0] ;contains 0x02000000 (wram)
ldr r0,[r2,8h] ;this time loaded 0x4C34683F
lsr r0,r0,8h ;now 0x004C3468
ldr r1,=3243F6ADh
mul r0,r1 ;r0=6911396F, c
ldr r1,=1B0cB175h
add r0,r0,r1 ;r0=0x841DEAE4, nv
str r0,[r2,8h] ;Write this back to where we first read from.
;gets mod of r0/r1. Returns to r0.
MOD:
080D8140h:
swi 6h ;div (r0/r1)
mov r0,r1
bx r14
080684EEh:
cmp r4,0Fh
bgt + ;80684F4h
mov r4,10h
+ bl 8000a90h
lsr r0,r0,2h
mov r1,r4
bl MOD
mov r4,r0
cmp r4,r5
bcs 8068540h ;if r4 < r5, get soul.