Height vs Water and Float Routine

From Final Fantasy Hacktics Wiki
Revision as of 23:15, 19 October 2024 by Nyzer (talk | contribs) (Fixed "exit if in Deep Water" to "exit if not in water".)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Get Caster Height From Water Supports and Float
001797b4: 27bdffe0 addiu r29,r29,-0x0020
001797b8: afb00010 sw r16,0x0010(r29)
001797bc: 00808021 addu r16,r4,r0					r16 = Caster data
001797c0: afb10014 sw r17,0x0014(r29)
001797c4: afbf0018 sw r31,0x0018(r29)
001797c8: 0c060428 jal 0x001810a0					Map Location Calculation
001797cc: 00008821 addu r17,r0,r0					Clear Weapon Range
001797d0: 000210c0 sll r2,r2,0x03					
001797d4: 3c038019 lui r3,0x8019
001797d8: 2463f8cc addiu r3,r3,-0x0734				r3 = 8018f8cc(tile data)
001797dc: 00431021 addu r2,r2,r3					r2 = 18f8cc + caster tile id
001797e0: 92050182 lbu r5,0x0182(r16)				Caster's Mount Data
001797e4: 90440002 lbu r4,0x0002(r2)				Caster Tile's Height
001797e8: 90430003 lbu r3,0x0003(r2)				Caster Tile's Height (halves)
001797ec: 90420003 lbu r2,0x0003(r2)				Caster Tile's Height (halves)
001797f0: 00042040 sll r4,r4,0x01
001797f4: 3063001f andi r3,r3,0x001f				Ignore Depth
001797f8: 00832021 addu r4,r4,r3					Height + Height(halves)
001797fc: 00021142 srl r2,r2,0x05					Ignore Halves
00179800: 00023040 sll r6,r2,0x01					r6 = Depth
00179804: 30a20080 andi r2,r5,0x0080				Is Unit Riding?
00179808: 10400009 beq r2,r0,0x00179830				Branch if false
0017980c: 00801821 addu r3,r4,r0					r3 = Height and halves
00179810: 30a2001f andi r2,r5,0x001f				r2 = Mount ID
00179814: 000218c0 sll r3,r2,0x03
00179818: 00621823 subu r3,r3,r2
0017981c: 00031980 sll r3,r3,0x06
00179820: 3c028019 lui r2,0x8019
00179824: 244208cc addiu r2,r2,0x08cc				Get Unit Data
00179828: 00628021 addu r16,r3,r2					Get Mount's Unit Data (replacing Caster's Data)
0017982c: 24830002 addiu r3,r4,0x0002				r3 = Height + 2
00179830: 92050095 lbu r5,0x0095(r16)				Get Movement 3
00179834: 00000000 nop
00179838: 30a20008 andi r2,r5,0x0008				If Unit has Float(movement)
0017983c: 14400006 bne r2,r0,0x00179858				Branch if True
00179840: 00000000 nop
00179844: 9202005a lbu r2,0x005a(r16)				Get Unit Current Status 3
00179848: 00000000 nop
0017984c: 30420040 andi r2,r2,0x0040				If Unit = Float (status)
00179850: 10400003 beq r2,r0,0x00179860				Branch if False
00179854: 00000000 nop
00179858: 24630002 addiu r3,r3,0x0002				Height + 2
0017985c: 34110001 ori r17,r0,0x0001				r17 = True
00179860: 10c0000c beq r6,r0,0x00179894				Exit if not in water
00179864: 322200ff andi r2,r17,0x00ff
00179868: 14400004 bne r2,r0,0x0017987c				branch if Float = True
0017986c: 00661021 addu r2,r3,r6					r2 = Height + Depth
00179870: 30a20080 andi r2,r5,0x0080				If Walk on Water (Water Walk)
00179874: 10400003 beq r2,r0,0x00179884				Branch if false
00179878: 00661021 addu r2,r3,r6					r2 = Height + Depth
0017987c: 0805e625 j 0x00179894						Skip next branch
00179880: 00401821 addu r3,r2,r0					r3 = Height + Height(Halves)
00179884: 30a20040 andi r2,r5,0x0040				If Move in Water (Swim)
00179888: 10400002 beq r2,r0,0x00179894				Branch if false
0017988c: 246200fe addiu r2,r3,0x00fe				0 if Height = 1
00179890: 00c21821 addu r3,r6,r2					Height + Height(Halves) + Depth
00179894: 306200ff andi r2,r3,0x00ff				r2 = Height
00179898: 8fbf0018 lw r31,0x0018(r29)
0017989c: 8fb10014 lw r17,0x0014(r29)
001798a0: 8fb00010 lw r16,0x0010(r29)
001798a4: 27bd0020 addiu r29,r29,0x0020
001798a8: 03e00008 jr r31
001798ac: 00000000 nop

Return Locations

001798cc: Set initial panels
00179b88: Strike/Lunge Routine