Guest User

Untitled

a guest
Aug 23rd, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 7.17 KB | None | 0 0
  1. ; 080AF8DC
  2. ; notes:
  3. ; r0 @ 0x4 points to 08707e74?
  4.     push {r4-r7,lr}
  5.     mov r5, r0
  6.     ; get index list
  7.     ldr r2, =0x08141bb8
  8.     ; get room ID
  9.     ldr r3, [r5, 0x8]
  10.     ldr r1, =0x7f2
  11.     add r0, r3, r1
  12.     ldrh r1, [r0, 0x0]
  13.     ; get start index of drops
  14.     lsl r0, r1, 0x1
  15.     add r0, r0, r2
  16.     ldrh r6, [r0, 0x0]
  17.     ; get end index of drops
  18.     add r1, 0x1
  19.     lsl r1, r1, 0x1
  20.     add r1, r1, r2
  21.     ldrh r7, [r1, 0x0]
  22.     ; get X position
  23.     ldr r2, =0x7f6
  24.     add r4, r3, r2
  25.     ; get direction modifier
  26.     ldr r1, =0x08130c82
  27.     add r2, 0x3
  28.     add r0, r3, r2
  29.     ldrb r0, [r0, 0x0]
  30.     add r0, r0, r1
  31.     ldrb r0, [r0, 0x0]
  32.     ldrb r4, [r4, 0x0]
  33.     ; save X position of examined coordinate
  34.     add r0, r0, r4
  35.     ldr r4 =0x898
  36.     add r3, r3, r4
  37.     strb r0, [r3, 0x0]
  38.    
  39.     ; get Y position
  40.     ldr r1, [r5, 0x8]
  41.     ldr r0, =0x7f7
  42.     add r4, r1, r0
  43.     ; get direction modifier
  44.     ldr r1, =0x08130c86
  45.     add r2, r1, r2
  46.     ldrb r0, [r2, 0x0]
  47.     add r0, r0, r3
  48.     ldrb r0, [r0, 0x0]
  49.     ldrb r4, [r4, 0x0]
  50.     ; save Y position of examined coordinate
  51.     add r0, r0, r4
  52.     ldr r2 =0x899
  53.     add r1, r1, r2
  54.     strb r0, [r1, 0x0]
  55.  
  56.     ; start looping through drops
  57.     cmp r6, r7
  58.     bcc _0x080af932
  59.     b _0x080afc50
  60.    
  61. _0x080af932:
  62.     ; load drop table
  63.     ldr r4, =0x08142000
  64.     lsl r0, r6, 0x3
  65.     add r3, r0, r4
  66.     ldr r2, [r5, 0x8]
  67.     ldr r0, =0x898
  68.     add r1, r2, r0
  69.     ; check if X coordinates match
  70.     ldrb r0, [r3, 0x0]
  71.     ldrb r1, [r1, 0x0]
  72.     cmp r0, r1
  73.     beq _0x080af948
  74.     b _0x080afc44
  75.    
  76. _0x080af948:
  77.     ldr r0, =0x899
  78.     add r1, r2, r0
  79.     ; check if Y coordinates match
  80.     ldrb r0, [r3, 0x1]
  81.     ldrb r1, [r1, 0x0]
  82.     cmp r0, r1
  83.     beq _0x080af956
  84.     b _0x080afc44
  85.    
  86. _0x080af956:
  87.     ; drop was identified at this step
  88.     ldr r3, =0x15a8
  89.     add r0, r2, r3
  90.     mov r7, 0x0
  91.     ; save drop ID
  92.     strh r6, [r0, 0x0]
  93.     ldr r0, [r5, 0x0]
  94.     ldr r2, [r0, 0x4]
  95.     mov r1, 0xc7
  96.     lsl r1, r1, 0x2
  97.     add r2, r2, r1
  98.     ldr r1, [r5, 0x8]
  99.     add r1, r1, r3
  100.     ldrh r1, [r1, 0x0]
  101.     ldr r2, [r2, 0x0]
  102.     bl 0x08101fb4
  103.     lsl r0, r0, 0x10
  104.     lsr r6, r0, 0x10
  105.     ; check if drop was taken?
  106.     cmp r6, 0x0
  107.     beq _0x080af97e
  108.     b _0x080afc50
  109.    
  110. _0x080af97e:
  111.     ldr r0, [r5, 0x8]
  112.     ldr r2, =0x87b
  113.     add r0, r0, r2
  114.     mov r1, 0x1
  115.     strb r1, [r0, 0x0]
  116.    
  117.     ldr r0, [r5, 0x8]
  118.     mov r3, 0x8d
  119.     lsl r3, r3, 0x4
  120.     add r0, r0, r3
  121.     strb r7, [r0, 0x0]
  122.    
  123.     ; get drop ID
  124.     ldr r0, [r5, 0x8]
  125.     ldr r1, =0x15a8
  126.     add r0, r0, r1
  127.     ldrh r0, [r0, 0x0]
  128.     ; get pointer to drop data
  129.     lsl r0, r0, 0x3
  130.     add r0, r0, r4
  131.     ; save X/Y position as halfword?
  132.     ldrb r1, [r0, 0x1]
  133.     lsl r1, r1, 0x6
  134.     ldrb r4, [r0, 0x0]
  135.     orr r4, r1
  136.    
  137.     ldr r0, [r5, 0x0]
  138.     ldr r1, [r0, 0x4]
  139.     add r1, 0xc4
  140.     ldr r1, [r1, 0x0]
  141.     bl 0x08101fb0
  142.    
  143.     ; ?
  144.     add r0, r0, r4
  145.     ldrb r0, [r0, 0x0]
  146.     cmp r0, 0x2
  147.     bne _0x080afa30
  148.    
  149.     mov r0, r5
  150.     mov r1, 0x8e
  151.     bl2 0x080b2d10
  152.    
  153.     ldr r0, [r5, 0x8]
  154.     ldr r2, =0x896
  155.     add r0, r0, r2
  156.     strh r6, [r0, 0x0]
  157.    
  158.     ldr r0, [r5, 0x8]
  159.     ldr r3, =0x84e
  160.     add r0, r0, r3
  161.     ldr r1, =0x101
  162.     strh r1, [r0, 0x0]
  163.    
  164.     ldr r0, [r5, 0x8]
  165.     mov r4, 0xae
  166.     lsl r4, r4, 0x5
  167.     add r0, r0, r4
  168.     mov r1, 0x12
  169.     strb r1, [r0, 0x0]
  170.    
  171.     ldr r0, [r5, 0x0]
  172.     ldr r1, [r0, 0x4]
  173.     mov r2, 0xb4
  174.     lsl r2, r2, 0x2
  175.     add r1, r1, r2
  176.     ldr r1, [r1, 0x0]
  177.     bl 0x08101fb0
  178.     b _0x080afa3a
  179.     .pool
  180.    
  181. _0x080afa30:
  182.     mov r0, r5
  183.     mov r1, 0x68
  184.     bl2 0x080b2d10
  185.    
  186.     ; get drop data pointer
  187.     ldr r2, =0x08142000
  188.     ldr r1, [r5, 0x8]
  189.     ldr r3, =0x15a8
  190.     add r0, r1, r3
  191.     ldrh r0, [r0, 0x0]
  192.     lsl r0, r0, 0x3
  193.     add r0, r0, r2
  194.     ldrb r0, [r0, 0x2]
  195.     ; check drop bitflag
  196.     lsr r4, r0, 0x5
  197.     mov r3, r1
  198.     mov r6, r2
  199.     cmp r4, 0x7
  200.     bls _0x080afa56
  201.     b _0x080afc50
  202.    
  203. _0x080afa56:
  204.     lsl r0, r4, 0x2
  205.     ldr r1, =_0x080afa70
  206.     add r0, r0, r1
  207.     ldr r0, [r0, 0x0]
  208.     mov pc, r0
  209.     .pool
  210.    
  211. _0x080afa70:
  212.     .word _0x080afa90 ; 0x00 ; gold
  213.     .word _0x080afac4 ; 0x20 ; magic
  214.     .word _0x080afaec ; 0x40 ; item
  215.     .word _0x080afb28 ; 0x60 ; trapped chest
  216.     .word _0x080afb28 ; 0x80 ; trapped chest
  217.     .word _0x080afb28 ; 0xa0 ; trapped chest
  218.     .word _0x080afb28 ; 0xc0 ; trapped chest
  219.     .word _0x080afb28 ; 0xe0 ; trapped chest
  220.    
  221.    
  222.     ; gold drop
  223. _0x080afa90:
  224.     ldr r4, =0x15a8
  225.     add r0, r3, r4
  226.     ldrh r0, [r0, 0x0]
  227.     lsl r0, r0, 0x3
  228.     add r0, r0, r6
  229.     ldrb r1, [r0, 0x2]
  230.     ldrb r2, [r0, 0x4]
  231.     ; gold value table
  232.     ; 5 meaningful values: 1, 50, 100, 1000, 10000
  233.     ldr r0, =0x0813c912
  234.     lsl r1, r1, 0x1
  235.     add r1, r1, r0
  236.     ldrh r0, [r1, 0x0]
  237.     mov r1, r0
  238.     mul r1, r2
  239.     ldr r0, [r5, 0x4]
  240.     str r1, [r0, 0x40]
  241.     mov r0, r5
  242.     bl1 0x080b0338
  243.     b _0x080afc50
  244.     .pool
  245.    
  246.     ; magic drops
  247. _0x080afac4:
  248.     ldr r1, =0x15a8
  249.     add r0, r3, r1
  250.     ldrh r0, [r0, 0x0]
  251.     lsl r0, r0, 0x3
  252.     add r0, r0, r6
  253.     ldrb r1, [r0, 0x4]
  254.     ldr r2, =0x015ac
  255.     add r0, r3, r2
  256.     strh r1, [r0, 0x0]
  257.     mov r0, r5
  258.     bl1 0x080b038c
  259.     b _0x080afc50
  260.     .pool
  261.    
  262.     ; item drops
  263. _0x080afaec:
  264.     ldr r0, [r5, 0x0]
  265.     ldr r2, [r0, 0x4]
  266.     mov r4, 0xcc
  267.     lsl r4, r4, 0x2
  268.     add r2, r2, r4
  269.     ldr r4, =0x15a8
  270.     add r1, r3, r4
  271.     ldrh r1, [r1, 0x0]
  272.     lsl r1, r1, 0x3
  273.     add r1, r1, r6
  274.     ldrh r1, [r1, 0x4]
  275.     ldr r2, [r2, 0x0]
  276.     bl 0x08101fb4
  277.    
  278.     ldr r1, [r5, 0x8]
  279.     ldr r2, =0x15aa
  280.     add r1, r1, r2
  281.     strh r0, [r1, 0x0]
  282.     mov r0, r5
  283.     bl1 0x080afe9c
  284.     b _0x080afc50
  285.     .pool
  286.    
  287.     ; items/traps?
  288. _0x080afb28:
  289.     ldr r0, [r5, 0x8]
  290.     ldr r3, =0x8cc
  291.     add r0, r0, r3
  292.     mov r1, 0x5c
  293.     strh r1, [r0, 0x0]
  294.     ldr r0, [r5, 0x0]
  295.     ldr r1, [r0, 0x4]
  296.     mov r2, 0xc3
  297.     lsl r2, r2, 0x2
  298.     add r1, r1, r2
  299.     ldr r1, [r1, 0x0]
  300.     bl 0x08101fb0
  301.    
  302.     ; determine if drop is magic/item
  303.     ; actually checking & 0x40
  304.     mov r0, 0x2
  305.     and r4, r0
  306.     cmp r4, 0x0
  307.     beq _0x080afb80
  308.    
  309.     ldr r0, [r5, 0x8]
  310.     ldr r3, =0x15aa
  311.     add r0, r0, r3
  312.     mov r1, 0x88
  313.     lsl r1, r1, 0x1
  314.     strh r1, [r0, 0x0]
  315.     ldr r1, [r5, 0x8]
  316.     ldr r2, =0x08142000
  317.     ldr r4, =0x15a8
  318.     add r0, r1, r4
  319.     ldrh r0, [r0, 0x0]
  320.     lsl r0, r0, 0x3
  321.     add r0, r0, r2
  322.     ldrh r0, [r0, 0x4]
  323.     add r3, 0x2
  324.     add r1, r1, r3
  325.     strh r0, [r1, 0x0]
  326.     b _0x080afba0
  327.     .pool
  328.  
  329. _0x080afb80:
  330.     ldr r1, [r5, 0x8]
  331.     ldr r2, =0x08142000
  332.     ldr r4, =0x15a8
  333.     add r0, r1, r4
  334.     ldrh r0, [r0, 0x0]
  335.     lsl r0, r0, 0x3
  336.     add r0, r0, r2
  337.     ldrh r0, [r0, 0x4]
  338.     ldr r3, =0x15aa
  339.     add r1, r1, r3
  340.     strh r0, [r1, 0x0]
  341.    
  342.     ldr r0, [r5, 0x8]
  343.     add r4, 0x4
  344.     add r0, r0, r4
  345.     mov r1, 0xff
  346.     strh r1, [r0, 0x0]
  347.    
  348. _0x080afba0:
  349.     mov r6, r2
  350.    
  351.     ldr r0, [r5, 0x8]
  352.     ldr r1, =0x15b4
  353.     add r0, r0, r1
  354.     mov r1, 0x0
  355.     strh r1, [r0, 0x0]
  356.    
  357.     ldr r0, [r5, 0x8]
  358.     ldr r2, =0x15a8
  359.     add r0, r0, r2
  360.     ldrh r0, [r0, 0x0]
  361.     lsl r0, r0, 0x3
  362.     add r0, r0, r6
  363.     ldrb r1, [r0, 0x2]
  364.     mov r0, 0x3f
  365.     and r0, r1
  366.     mov r1, 0x40
  367.     orr r0, r1
  368.    
  369.     ; executes battle?
  370.     ; 0x08110828
  371.     lsl r4, r0, 0x1
  372.     ldr r0, [r5, 0x0]
  373.     ldr r1, [r0, 0x4]
  374.     mov r3, 0xb7
  375.     lsl r3, r3, 0x2
  376.     add r1, r1, r3
  377.     ldr r1, [r1, 0x0]
  378.     bl 0x08101bf0
  379.    
  380.     lsl r0, r0, 0x18
  381.     lsr r0, r0, 0x18
  382.     cmp r0, 0xbf
  383.     bls _0x080afbe0
  384.    
  385.     add r0, r4, 0x1
  386.     mov r4, r0
  387.    
  388. _0x080afbe0:
  389.     ldr r2, [r5, 0x4]
  390.     ldr r1, =0x0813a374
  391.     lsl r0, r4, 0x1
  392.     add r0, r0, r1
  393.     ldrh r0, [r0, 0x0]
  394.     strh r0, [r2, 0x24]
  395.    
  396.     ldr r1, [r5, 0x4]
  397.     ldr r0, [r5, 0x8]
  398.     ldr r4, =0x1028
  399.     add r0, r0, r4
  400.     ldrb r0, [r0, 0x0]
  401.     add r1, 0x26
  402.     strb r0, [r1, 0x0]
  403.    
  404.     ldr r0, [r5, 0x8]
  405.     ldr r1, =0x878
  406.     add r0, r0, r1
  407.     mov r1, 0x1
  408.     strb r1, [r0, 0x0]
  409.    
  410.     ldr r0, [r5, 0x4]
  411.     ldr r2, =0x41a1
  412.     add r0, r0, r2
  413.     strb r1, [r0, 0x0]
  414.     bl0 0x08091018
  415.    
  416.     ldr r1, [r5, 0x4]
  417.     ldrb r0, [r0, 0x0]
  418.     strb r0, [r1, 0x1]
  419.     ldr r1, [r5, 0x4]
  420.     mov r0, 0x11
  421.     strb r0, [r1, 0x0]
  422.     b _0x080afc50
  423.     .pool
  424.  
  425. _0x080afc50:
  426.     pop {r4-r7}
  427.     pop {r0}
  428.     bx r0
Advertisement
Add Comment
Please, Sign In to add comment