Store hardcoded AI stuff (blood suck, frog, berserk abilities)

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
BATTLE.BIN :  :  - Store hardcoded AI stuff (blood suck, frog, berserk abilities)
------------------------------------------------------------------------------------------
00199d20: 27bdffd0 addiu r29,r29,-0x0030     |
00199d24: afb00010 sw r16,0x0010(r29)        |
00199d28: 00008021 addu r16,r0,r0            |
00199d2c: afb20018 sw r18,0x0018(r29)        |
00199d30: 00009021 addu r18,r0,r0            |
00199d34: afb3001c sw r19,0x001c(r29)        |
00199d38: 00009821 addu r19,r0,r0            |
00199d3c: afb50024 sw r21,0x0024(r29)        |
00199d40: 341500ff ori r21,r0,0x00ff         |
00199d44: afb10014 sw r17,0x0014(r29)        |
00199d48: 00008821 addu r17,r0,r0            |
00199d4c: afb40020 sw r20,0x0020(r29)        |
00199d50: 3c14801a lui r20,0x801a            |
00199d54: 2694f3c4 addiu r20,r20,-0x0c3c     |AI Data pointer  8019f3c4
00199d58: 3c028019 lui r2,0x8019             |
00199d5c: 24423924 addiu r2,r2,0x3924        |AI Extended Status data pointer   80193924
00199d60: 3c01801a lui r1,0x801a             |
00199d64: ac22f3c0 sw r2,-0x0c40(r1)         |Store pointer at 8019f3c0
00199d68: 340200a7 ori r2,r0,0x00a7          |
00199d6c: 3c01801a lui r1,0x801a             |
00199d70: a0220b36 sb r2,0x0b36(r1)          |store bloodsuck  skillset 801a0b36
00199d74: 340200c8 ori r2,r0,0x00c8          |
00199d78: 3c04800e lui r4,0x800e             |
00199d7c: 90844e9c lbu r4,0x4e9c(r4)         |Map max x
00199d80: 3c05800e lui r5,0x800e             |
00199d84: 90a54ea0 lbu r5,0x4ea0(r5)         |Map max Y
00199d88: 34030084 ori r3,r0,0x0084          |
00199d8c: 3c01801a lui r1,0x801a             |
00199d90: a4220b34 sh r2,0x0b34(r1)          |Store Blood Suck Ability ID (0x00c8) 801a0b34
00199d94: 340200a9 ori r2,r0,0x00a9          |
00199d98: 3c01801a lui r1,0x801a             |
00199d9c: a0220b3a sb r2,0x0b3a(r1)          |Store Empty skillset (0xA9)  801a0b3a for Frog ? 
00199da0: 3402016f ori r2,r0,0x016f          |
00199da4: afbf0028 sw r31,0x0028(r29)        |
00199da8: 3c01801a lui r1,0x801a             |
00199dac: ac34f3ac sw r20,-0x0c54(r1)        |Store AI data pointer
00199db0: 3c01801a lui r1,0x801a             |
00199db4: a0200d7b sb r0,0x0d7b(r1)          |Reset 801a0d7b - AI 0x19b7 (Decision state)
00199db8: 3c01801a lui r1,0x801a             |
00199dbc: a0200bdc sb r0,0x0bdc(r1)          |Reset 801a0dbc - AI 0x1818 
00199dc0: 3c01801a lui r1,0x801a             |
00199dc4: a0200bc7 sb r0,0x0bc7(r1)          |Reset 801a0bc7 - AI 0x1803
00199dc8: 3c01801a lui r1,0x801a             |
00199dcc: a0230b37 sb r3,0x0b37(r1)          |Store bloodsuck usage type (0x84)
00199dd0: 3c01801a lui r1,0x801a             |
00199dd4: a4220b38 sh r2,0x0b38(r1)          |Store frog ability ID (0x16f)
00199dd8: 3c01801a lui r1,0x801a             |
00199ddc: a0230b3b sb r3,0x0b3b(r1)          |Store Frog usage type (0x84)
00199de0: 3c01801a lui r1,0x801a             |
00199de4: a02001db sb r0,0x01db(r1)          |Reset 801a01db - AI 0x0e17
00199de8: 3c01801a lui r1,0x801a             |
00199dec: a02401fe sb r4,0x01fe(r1)          |Store map max x
00199df0: 3c01801a lui r1,0x801a             |
00199df4: a02501ff sb r5,0x01ff(r1)          |Store map max y
                                            @LOOP - Do all units
00199df8: 02901821 addu r3,r20,r16               |Dynamic AI pointer - 1 byte per Unit iteration
00199dfc: a075198c sb r21,0x198c(r3)             |Store 0xff unit battle id
00199e00: 3c018019 lui r1,0x8019                 |
00199e04: 00310821 addu r1,r1,r17                |Part of Dynamic pointer to Unit battle data - +0x1c0 bytes per unit iteration
00199e08: 902208cd lbu r2,0x08cd(r1)             |This Unit battle id
00199e0c: 00000000 nop                           |
00199e10: 10550008 beq r2,r21,0x00199e34         #If Unit exists (not 0xff)
00199e14: 02002021 addu r4,r16,r0                    |Send Unit ID
00199e18: 0c0667b2 jal 0x00199ec8                    |-->Usable_Ability_Setting/ENTD_AI_Calculations
00199e1c: a072198c sb r18,0x198c(r3)                 |store Unit ID
00199e20: 3c018019 lui r1,0x8019                     |
00199e24: 00310821 addu r1,r1,r17                    |Part of Dynamic pointer to Unit battle data - +0x1c0 bytes per unit iteration
00199e28: 942208f6 lhu r2,0x08f6(r1)                 |Unit  max hp (0x2A)
00199e2c: 26520001 addiu r18,r18,0x0001              |Existing Unit counter +1
00199e30: 02629821 addu r19,r19,r2                   |add max hp (of all units ??)
00199e34: 26100001 addiu r16,r16,0x0001          |Loop Counter + 1
00199e38: 2a020015 slti r2,r16,0x0015            |
00199e3c: 1440ffee bne r2,r0,0x00199df8      #Loop 0x15 Times
00199e40: 263101c0 addiu r17,r17,0x01c0          |Offset of Unit battle data
00199e44: 1240000c beq r18,r0,0x00199e78     #If No Units found : Avoid average HP math
00199e48: 340300ff ori r3,r0,0x00ff              |
00199e4c: 0272001a div r19,r18               |All max hp / nb of units
00199e50: 00001812 mflo r3                   |r3 = average hp of units
00199e54: 00000000 nop                       |
00199e58: 28620100 slti r2,r3,0x0100         |
00199e5c: 14400004 bne r2,r0,0x00199e70      #If Average HP > 256
00199e60: 00000000 nop                           |
00199e64: 340200ff ori r2,r0,0x00ff              |cap at 256
00199e68: 0806679d j 0x00199e74                  |
00199e6c: a2820e17 sb r2,0x0e17(r20)             |store average max hp of team members
                                            Else : Average HP < 256
00199e70: a2830e17 sb r3,0x0e17(r20)             |store average max hp of team members
00199e74: 340300ff ori r3,r0,0x00ff          |
00199e78: 34100003 ori r16,r0,0x0003         |Initialize counter
00199e7c: 2682000c addiu r2,r20,0x000c       |Dynamic Pointer to AI + 0x0c
                                            @LOOP - 4 times
00199e80: a043181c sb r3,0x181c(r2)              |Store 0xff at 0x181c Table (3 entries)
00199e84: 2610ffff addiu r16,r16,0xffff          |Counter -1
00199e88: 0601fffd bgez r16,0x00199e80       Λ LOOP while counter is >=0
00199e8c: 2442fffc addiu r2,r2,-0x0004           |Dynamic offset - 0x04
00199e90: 3402017f ori r2,r0,0x017f          |
00199e94: a6820e14 sh r2,0x0e14(r20)         |Store 0x017f at AI 0x0e14 Initialize acting Unit choosen Throw Ability ID
00199e98: 34020001 ori r2,r0,0x0001          |
00199e9c: a2820e16 sb r2,0x0e16(r20)         |Store 0x01 at AI 0x0e16   Initialize ID of best weapon to throw
00199ea0: 8fbf0028 lw r31,0x0028(r29)
00199ea4: 8fb50024 lw r21,0x0024(r29)
00199ea8: 8fb40020 lw r20,0x0020(r29)
00199eac: 8fb3001c lw r19,0x001c(r29)
00199eb0: 8fb20018 lw r18,0x0018(r29)
00199eb4: 8fb10014 lw r17,0x0014(r29)
00199eb8: 8fb00010 lw r16,0x0010(r29)
00199ebc: 27bd0030 addiu r29,r29,0x0030
00199ec0: 03e00008 jr r31
00199ec4: 00000000 nop

Return locations

BATTLE.BIN
 00078674: [[000785ac_-_000787d8]]
 0008ec50: [[0008ea6c_-_0008ec6c]]
 0008ef04: [[0008ec70_-_0008ef20]]