Generate Treasure

From Final Fantasy Hacktics Wiki
Revision as of 13:51, 2 March 2012 by Choto (talk | contribs)
Jump to navigation Jump to search

ROUTINE : GENERATE TREASURE FOR TREASURE CHEST

  PARAMETERS:
     r4    =   [Treasure unit]
     
  RETURNS:
     r2   =   [Item]

SECTION 1 : SET UP

00180a08: 3c028019 lui r2,0x8019
00180a0c: 8c42f5fc lw r2,-0x0a04(r2)            #   r2 = MEM[0x18f5fc]
00180a10: 27bdffe0 addiu r29,r29,0xffe0
00180a14: afbf001c sw r31,0x001c(r29)            #   IF (r2 != 0)
00180a18: 14400033 bne r2,r0,0x 00180ae8            #      RETURN r2
00180a1c: afb0 0018 sw r16,0x 0018(r29)
00180a20: 00008021 addu r16,r0,r0               #   r16 = 0   [Count of valid items]
00180a24: 00003021 addu r6,r0,r0               #   r6 = 0    [Current equipment slot index]
00180a28: 27a50010 addiu r5,r29,0x0010            #   r5 =    [Valid item array pointer]

SECTION 2 : FIND VALID ITEMS ON TREASURE UNIT (EQUIPMENT)

                                      #   DO {
00180a2c: 00861021 addu r2,r4,r6               #      
00180a30: 9042001a lbu r2,0x001a(r2)            #      r2 = MEM[r4+r6+0x1a) [Equip] (Equipment in current slot of treasure unit)
00180a34: 00000000 nop
00180a38: a0a20000 sb r2,0x0000(r5)               #      ValidItems[i-th] (MEM[r5]) = [Equip]
00180a3c: 90a30000 lbu r3,0x0000(r5)
00180a40: 00000000 nop                        #      r6++ (LoopCount++)
00180a44: 2c6200fe sltiu r2,r3,0x00fe            #      IF ([Equip] >= 0xFE) (empty)
00180a48: 10400005 beq r2,r0,0x 00180a60            #         CONTINUE (skip this item)
00180a4c: 24c60001 addiu r6,r6,0x0001
00180a50: 10600004 beq r3,r0,0x 00180a64            #      IF ([Equip] == 0x00)
00180a54: 28c20007 slti r2,r6,0x0007            #         CONTINUE (skip this item)
00180a58: 24a50001 addiu r5,r5,0x0001            #      r5++ 
00180a5c: 26100001 addiu r16,r16,0x0001            #      r16++ (ValidItemCount++)
00180a60: 28c20007 slti r2,r6,0x0007
00180a64: 1440fff1 bne r2,r0,0x 00180a2c            #   } WHILE (r6 < 7)
00180a68: 00000000 nop

SECTION 3 : NO VALID ITEMS : FIND USABLE ITEM? (POTION, ETC?)

00180a6c: 16000014 bne r16,r0,0x 00180ac0         #   IF ([Valid item count] = 0)
00180a70: 00000000 nop                        #   {   
00180a74: 0c0088c3 jal 0x0002230c               #       r2 = [Random number]
00180a78: 00000000 nop
00180a7c: 00021840 sll r3,r2,0x01
00180a80: 00621821 addu r3,r3,r2
00180a84: 00031880 sll r3,r3,0x02
00180a88: 00621021 addu r2,r3,r2               
00180a8c: 04410002 bgez r2,0x 00180a98            
00180a90: 00000000 nop                        
00180a94: 24427fff addiu r2,r2,0x7fff            
00180a98: 000213c3 sra r2,r2,0x0f               
00180a9c: 2442fff0 addiu r2,r2,0xfff0            #      r2 = [Random usable item]
00180aa0: a3a20010 sb r2,0x0010(r29)            #      ValidItems[0] (STACK[0x10]) = r2
00180aa4: 93a30010 lbu r3,0x0010(r29)            #      r3 = r2
00180aa8: 00000000 nop                        #      IF (r3 >= 0xf5) (We found a usable item?)
00180aac: 2c6200f5 sltiu r2,r3,0x00f5            #      {   
00180ab0: 14400003 bne r2,r0,0x 00180ac0            #         ValidItemCount (r16) = 1
00180ab4: 34100001 ori r16,r0,0x0001            #         r2 = r3 + 1
00180ab8: 24620001 addiu r2,r3,0x0001            #         ValidItems[0] = r2
00180abc: a3a20010 sb r2,0x0010(r29)            #      }

SECTION 4 : RETURN RANDOM ITEM FROM VALID ITEMS LIST

00180ac0: 0c0088c3 jal 0x0002230c               #    r2 = [Random number]
00180ac4: 00000000 nop
00180ac8: 0050 0018 mult r2,r16
00180acc: 00001012 mflo r2                     #   r2 = [Random index]
00180ad0: 04410003 bgez r2,0x 00180ae0
00180ad4: 000233c3 sra r6,r2,0x0f
00180ad8: 24427fff addiu r2,r2,0x7fff
00180adc: 000233c3 sra r6,r2,0x0f
00180ae0: 03a61021 addu r2,r29,r6               
00180ae4: 90420010 lbu r2,0x0010(r2)            #   r2 = ValidItems[RandomIndex]
00180ae8: 8fbf001c lw r31,0x001c(r29)
00180aec: 8fb0 0018 lw r16,0x 0018(r29)
00180af0: 27bd0020 addiu r29,r29,0x0020
00180af4: 03e00008 jr r31                     #   RETURN r2
00180af8: 00000000 nop


Return Locations

001805d8: Generate Crystal or Treasure