```
bridge item decision
----------------------------
02005736 6863 ldr r3,[r4,#0x4]
02005738 F096EC98 blx #0x209C06C // switch to ARM, go forth and prosper to 0209C06C
-----RNG advancement here branch with link and exchange(link back to link register, exchange- THUMB<->ARM)
(rng.multiply())
0209C06CE92D4030 stmfd r13!, (r4,r5,r14) //push to the stack- highest to lowest registers(link reg, 0x64, lower half rng-location, not value)p
0209C070 E0845290 umull r5, r4, r0, r2 //mult. r0 x r2, move result to r4/r5
0209C074 E0244390 mla r4, r0, r3, r4 // seems to always resolve to 0
0209C078 E0244192 mla r4, r2, r1, r4 // seems to always resolve to 0
0209C07C E1A01004 mov r1, r4 // (upper half of next rng seed is set)
0209C080 E1A00005 mov r0, r5 // (lower half of next rng seed is set)
0209C084 E8BD4030 ldmfd r13!,(r4, r5, r14)//unwind the stack! the math is done!
0209C088 E12FFF1E bx r14 //follow the link register home!(02005701)
0200573C 6922 ldr r2,[r4,#0x10] // put the rng back, get ready to do the standard u32 * XXX(or skip it for pid calcs)
0200573E 6963 ldr r3,[r4,#0x14]
02005740 1810 add r0,r2,r0
02005742 414B adc r3,r1
02005744 6020 str r0,[r4]
02005746 6063 str r3,[r4,#0x4]
02005748 1C18 mov r0,r3
0200574A 2100 mov r1,#0x0
0200574C 2300 mov r3,#0x0
0200574E 1C2A mov r2,r5
02005750 F096EC8C blx #0x209C06C
//this is where does the u32 x1000 same as the dust clouds. it turns out a bit different in the end, though
64bit_Mult();
02005754 1C08 mov r0, r1 // final result
02005756 BD38 pop (r3-r5,r15) // restore stack, jump back to restored r15
021AB09C 0400 lsl r0,r0,#0x10 // clearing up the multiplied out result from u32 * X
021AB09E 0C00 lsr r0,r0,#0x10 // /\
021AB0A0 3C64 sub r4,#0x64 // 1000 - 100 == 900dec
021AB0A2 42A0 cmp r0,r4 // compare the last u32 multiply with 900dec
021AB0A4 D20E bcs #0x21AB0C4 // branch here if greater than or equal to 900
021AB0A6 2496 mov r4,#0x96 // r4(900dec) is done, set it to 0x96 and get ready to set it up for the next multiplier
021AB0A8 00A4 lsl r4,r4,#0x2 // set r4 to 0x258(600dec)
021AB0AA 1C20 mov r0,r4 // move the 600dec to r0 as an argument for the next multiplication
021AB0AC F65AFB3C bl #0x2005728
--less than 900, so u32 * 600dec multiplier
rng.advance();
02005728 B538 push {r3-r5,r14} // this all just sets up the rng for multiplication
0200572A 1C05 mov r5,r0
0200572C 480A ldr r0,=#0x20AA1B4
0200572E 6904 ldr r4,[r0,#0x10]
02005730 68A0 ldr r0,[r4,#0x8]
02005732 68E1 ldr r1,[r4,#0xC]
02005734 6822 ldr r2,[r4]
02005736 6863 ldr r3,[r4,#0x4]
02005738 F096EC98 blx #0x209C06C
(rng.multiply())(via 64-bit multiply function)
0200573C 6922 ldr r2,[r4,#0x10] // put the rng back, get ready to do the standard u32 * XXX(or skip it for pid calcs)
0200573E 6963 ldr r3,[r4,#0x14]
02005740 1810 add r0,r2,r0
02005742 414B adc r3,r1
02005744 6020 str r0,[r4]
02005746 6063 str r3,[r4,#0x4]
02005748 1C18 mov r0,r3
0200574A 2100 mov r1,#0x0
0200574C 2300 mov r3,#0x0
0200574E 1C2A mov r2,r5
02005750 F096EC8C blx #0x209C06C
u32 * XXX multiplier
rnd.calc();
02005754 1C08 mov r0, r1 // final result
02005756 BD38 pop (r3-r5,r15) // restore stack, jump back to restored r15
021AB0B0 2164 mov r1,#0x64 // r1 to 100dec
021AB0B2 F6F1E90A blx #0x209C2C8
--switch statement?--
0209C2C8 E3510000 cmp r1,#0x0 // r1 to 0 and then...
0209C2CC 012FFF1E bxeq r14 // not equal, no branch
0209C2D0 E1500001 cmp r0,r1 // r0 to r1 and then
0209C2D4 31A01000 movcc r1,r0 // false
0209C2D8 33A00000 movcc r0,#0x0 // false
0209C2DC 312FFF1E bxcc r14 // false
0209C2E0 E3A0201C mov r2,#0x1C
0209C2E4 E1A03220 mov r3,r0,lsr #0x4 // right-shift r0 by 4, place in r3 - knock off rightmost digit
0209C2E8 E1510623 cmp r1,r3,lsr #0xC (if r1 < 0)
0209C2EC D2422010 suble r2,r2,#0x10 // r1 isn;t so don't
0209C2F0 D1A03823 movle r3,r3,lsr #0x10 // same here
0209C2F4 E1510223 cmp r1,r3,lsr #0x4 (if r1 < 1)
0209C2F8 D2422008 suble r2,r2,#0x8 // don;t
0209C2FC D1A03423 movle r3,r3,lsr #0x8 // no
0209C300 E1510003 cmp r1,r3 (if r1 < r3)
0209C304 D2422004 suble r2,r2,#0x4 // false
0209C308 D1A03223 movle r3,r3,lsr #0x4 // false
0209C30C E1A00210 mov r0,r0,lsl r2 // left-shift r0 by 28 bits, leaving just the lowest digit
0209C310 E2611000 rsb r1,r1,#0x0 // this does the "opposite" subtract. instead of 64-0, it's 0-64, leaving it as FFFFFF9C, not 64
0209C314 E0900000 adds r0,r0,r0 // double r0- hasn't overflowed yet
0209C318 E0822082 add r2,r2,r2,lsl #0x1
0209C31C E08FF102 add r15,r15,r2,lsl #0x2 // i think this is sort of the "switch" part . 1c << 1 = 38 << 2 = E0 == 224dec; this tells it how much to skip. add E0 to r15(program counter) to make it skip to a specific spot in the list -> to C474
0209C320 E1A00000 nop
0209C474 E0B13083 adcs r3,r1,r3,lsl #0x1
0209C478 30433001 subcc r3,r3,r1
0209C47C E0B00000 adcs r0,r0,r0
0209C480 E0B13083 adcs r3,r1,r3,lsl #0x1
0209C484 30433001 subcc r3,r3,r1
0209C488 E0B00000 adcs r0,r0,r0
0209C48C E0B13083 adcs r3,r1,r3,lsl #0x1
0209C490 30433001 subcc r3,r3,r1
0209C494 E0B00000 adcs r0,r0,r0
0209C498 E0B13083 adcs r3,r1,r3,lsl #0x1
0209C49C 30433001 subcc r3,r3,r1
0209C4A0 E0B00000 adcs r0,r0,r0 // last add with carry - single digit
0209C4A4 E1A01003 mov r1,r3
0209C4A8 E12FFF1E bx r14
[b]
021AB0B6 0400 lsl r0,r0,#0x10 // prepping result of adcs operations
021AB0B8 0C00 lsr r0,r0,#0x10 // here too
021AB0BA 3C23 sub r4,#0x23 // this is the 258(600dec) from the last u32 multiply calc-> gives us 258-23 == 235(value of the first wing in hex)
021AB0BC 1900 add r0,r0,r4 // add result of the adcs calcs with the "base" wing value to give a wing hex number to give the player
021AB0BE 0400 lsl r0,r0,#0x10 // prep result of operation
021AB0C0 0C00 lsr r0,r0,#0x10 // still...
021AB0C2 BD10 pop {r4,r15}
[/b]
---------------------------------------------------------------------------------------------------------
021AB0A4 D20E bcs #0x21AB0C4 // branch here if greater than or equal to 900
--if greater than or equal to 900
[b]021AB0C4 4800 ldr r0,=#0x23B // this is the item to give if >=900 and then jump back to the program[/b]
021AB0C6 BD10 pop {r4,r15}
--------------------------------------------------------------------------------------
```