appendGfx_animator_node (#1018)

* appendGfx_animator_node

Co-authored-by: Mr-Wiseguy <68165316+Mr-Wiseguy@users.noreply.github.com>

* find_similar_areas improvements

* oopz

---------

Co-authored-by: Mr-Wiseguy <68165316+Mr-Wiseguy@users.noreply.github.com>
This commit is contained in:
Ethan Roseman 2023-04-18 04:51:16 +09:00 committed by GitHub
parent 771113de21
commit dec110160c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 67 additions and 759 deletions

View File

@ -815,15 +815,11 @@ void appendGfx_animator(ModelAnimator* animator) {
gSPPopMatrix(gMainGfxPos++, G_MTX_MODELVIEW);
}
#ifdef NON_EQUIVALENT
void appendGfx_animator_node(ModelAnimator* animator, AnimatorNode* node, Matrix4f mtx) {
s32 i, dlSize, bufferIdx;
DisplayListBufferHandle* bufferHandle;
Gfx* gfxPos;
s32 j;
u32 w0,w1;
s32 totalVtxCount;
s32 cmd;
s32 i;
if (node->flags & MODEL_ANIMATOR_FLAG_HIDDEN) {
for (i = 0; i < ARRAY_COUNT(node->children); i++) {
@ -854,45 +850,51 @@ void appendGfx_animator_node(ModelAnimator* animator, AnimatorNode* node, Matrix
}
gDPPipeSync(gMainGfxPos++);
if (animator->fpRenderCallback != NULL) {
animator->fpRenderCallback(animator->renderCallbackArg);
}
if (animator->fpRenderCallback != NULL) animator->fpRenderCallback(animator->renderCallbackArg);
gDPPipeSync(gMainGfxPos++);
if (node->displayList != NULL) {
if (node->vertexStartOffset < 0) {
gSPDisplayList(gMainGfxPos++, node->displayList);
} else {
dlSize = 0;
if (node->displayList[dlSize].words.w0 >> 0x18 != G_ENDDL) {
while (TRUE) {
w0 = node->displayList[dlSize++].words.w0;
Gfx* gfxPos;
s32 vtxIdx, dlIdx;
s32 j = 0;
s32 k;
if ((node->displayList[0].words.w0 >> 0x18) != G_ENDDL) {
Gfx* gfxPtr = node->displayList;
s32 endDL = G_ENDDL;
for(;; j++) {
w0 = gfxPtr->words.w0;
gfxPtr++;
cmd = w0 >> 0x18;
if (cmd == G_ENDDL) {
if (cmd == endDL) {
break;
}
}
}
for (bufferIdx = 0; bufferIdx < ARRAY_COUNT(D_801536C0); bufferIdx++) {
bufferHandle = &D_801536C0[bufferIdx];
j++;
for (k = 0; k < ARRAY_COUNT(D_801536C0); k++) {
bufferHandle = &D_801536C0[k];
if (bufferHandle->ttl < 0) {
break;
}
}
ASSERT(bufferIdx < ARRAY_COUNT(D_801536C0));
ASSERT(k < ARRAY_COUNT(D_801536C0));
gfxPos = general_heap_malloc(dlSize * sizeof(Gfx));
bufferHandle->addr = gfxPos;
bufferHandle->addr = gfxPos = general_heap_malloc(j * sizeof(Gfx));
ASSERT(gfxPos != NULL);
bufferHandle->ttl = 3;
vtxIdx = 0;
dlIdx = 0;
totalVtxCount = 0;
j = 0;
do {
w0 = ((s32*)node->displayList)[j++];
w1 = ((s32*)node->displayList)[j++];
w0 = ((s32*)node->displayList)[dlIdx++];
w1 = ((s32*)node->displayList)[dlIdx++];
cmd = w0 >> 0x18;
if (cmd == G_ENDDL) {
break;
@ -900,22 +902,32 @@ void appendGfx_animator_node(ModelAnimator* animator, AnimatorNode* node, Matrix
if (cmd == G_VTX) {
s32 startIdx = _SHIFTR(w0,1,7);
s32 vtxCount = _SHIFTR(w0,12,8);
Vtx* newBuffer;
startIdx -= vtxCount;
if (node->fcData.vtxList == NULL) {
Vtx* newBuffer = &((Vtx*)w1)[node->vertexStartOffset + totalVtxCount];
newBuffer = &((Vtx*)w1)[node->vertexStartOffset + vtxIdx];
gSPVertex(gfxPos++, newBuffer, vtxCount, startIdx);
} else {
// if node->fcData.vtxList != NULL, all vertex buffers in gSPVertex commands are pointers to Vec3s, not to Vtx
Vtx* newBuffer = animator_copy_vertices_to_buffer(animator, node, w1 + (node->vertexStartOffset + totalVtxCount) * 0x6, vtxCount, startIdx, totalVtxCount);
newBuffer = animator_copy_vertices_to_buffer(
animator,
node,
(Vec3s*)(w1 + (node->vertexStartOffset + vtxIdx) * 0x6),
vtxCount,
startIdx,
vtxIdx
);
gSPVertex(gfxPos++, newBuffer, vtxCount, startIdx);
}
totalVtxCount += vtxCount;
vtxIdx += vtxCount;
} else {
gfxPos++;
gfxPos->words.w0 = w0;
gfxPos->words.w1 = w1;
Gfx* temp[1] = {gfxPos++}; // required to match
temp[0]->words.w0 = w0;
temp[0]->words.w1 = w1;
}
} while (TRUE);
gSPEndDisplayList(gfxPos++);
gSPDisplayList(gMainGfxPos++, bufferHandle->addr);
}
@ -928,9 +940,6 @@ void appendGfx_animator_node(ModelAnimator* animator, AnimatorNode* node, Matrix
}
}
}
#else
INCLUDE_ASM(s32, "B4580", appendGfx_animator_node);
#endif
AnimatorNode* get_animator_node_for_tree_index(ModelAnimator* animator, s32 arg1) {
return get_animator_child_with_id(animator->rootNode, animator->staticNodeIDs[arg1 - 1]);

View File

@ -41,7 +41,7 @@ class Symbol:
class Bytes:
offset: int
normalized: str
bytes: list[int]
bytes: bytes
def read_rom() -> bytes:
@ -83,6 +83,7 @@ def get_symbol_bytes(func: str) -> Optional[Bytes]:
sym = syms[func]
bs = list(rom_bytes[sym.rom_start : sym.rom_end])
# trim nops
while len(bs) > 0 and bs[-1] == 0:
bs.pop()
@ -92,7 +93,7 @@ def get_symbol_bytes(func: str) -> Optional[Bytes]:
for ins in insns:
ret.append(ins >> 2)
return Bytes(0, bytes(ret).decode("utf-8"), bs)
return Bytes(0, bytes(ret).decode("utf-8"), rom_bytes[sym.rom_start : sym.rom_end])
def parse_map() -> OrderedDict[str, Symbol]:
@ -349,7 +350,7 @@ def get_c_range(insn_start: int, insn_end: int, line_numbers: Dict[int, int]) ->
return range
def get_matches(query: str, window_size: int, min: Optional[int], max: Optional[int], contains: Optional[int]):
def get_matches(query: str, window_size: int, min: Optional[int], max: Optional[int], contains: Optional[int], show_disasm: bool):
query_bytes: Optional[Bytes] = get_symbol_bytes(query)
if query_bytes is None:
@ -366,7 +367,7 @@ def get_matches(query: str, window_size: int, min: Optional[int], max: Optional[
if not sym_bytes:
continue
if len(sym_bytes.bytes) < window_size:
if len(sym_bytes.bytes) / 4 < window_size:
continue
sym_hashes = get_hashes(sym_bytes, window_size)
@ -375,7 +376,7 @@ def get_matches(query: str, window_size: int, min: Optional[int], max: Optional[
if not matches:
continue
results = group_matches(query, symbol, matches, window_size, min, max, contains)
results: list[Result] = group_matches(query, symbol, matches, window_size, min, max, contains)
if not results:
continue
@ -412,11 +413,26 @@ def get_matches(query: str, window_size: int, min: Optional[int], max: Optional[
)
print(f"\t{query_str} matches {target_str}")
if show_disasm:
try:
import rabbitizer
except ImportError:
print("rabbitizer not found, cannot show disassembly")
sys.exit(1)
result_query_bytes = query_bytes.bytes[result.query_start * 4 : result.query_end * 4]
result_target_bytes = sym_bytes.bytes[result.target_start * 4 : result.target_end * 4]
for i in range(0, len(result_query_bytes), 4):
q_insn = rabbitizer.Instruction(int.from_bytes(result_query_bytes[i:i+4], "big"))
t_insn = rabbitizer.Instruction(int.from_bytes(result_target_bytes[i:i+4], "big"))
print(f"\t\t{q_insn.disassemble():35} | {t_insn.disassemble()}")
return OrderedDict(sorted(ret.items(), key=lambda kv: kv[1], reverse=True))
def do_query(query, window_size, min, max, contains):
get_matches(query, window_size, min, max, contains)
def do_query(query, window_size, min, max, contains, show_disasm):
get_matches(query, window_size, min, max, contains, show_disasm)
parser = argparse.ArgumentParser(
@ -434,6 +450,7 @@ parser.add_argument(
parser.add_argument("--min", help="lower bound of instruction for matches against query", type=int, required=False)
parser.add_argument("--max", help="upper bound of instruction for matches against query", type=int, required=False)
parser.add_argument("--contains", help="All matches must contain this number'th instruction from the query", type=int, required=False)
parser.add_argument("--show-disasm", help="Show disassembly of matches", action="store_true", required=False)
args = parser.parse_args()
@ -443,4 +460,4 @@ if __name__ == "__main__":
func_sizes = get_func_sizes()
syms = parse_map()
do_query(args.query, args.window_size, args.min, args.max, args.contains)
do_query(args.query, args.window_size, args.min, args.max, args.contains, args.show_disasm)

View File

@ -1,360 +0,0 @@
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
/* Generated by spimdisasm 1.11.1 */
glabel appendGfx_animator_node
/* B4D14 8011DE34 27BDFFC0 */ addiu $sp, $sp, -0x40
/* B4D18 8011DE38 AFB60030 */ sw $s6, 0x30($sp)
/* B4D1C 8011DE3C 00A0B02D */ daddu $s6, $a1, $zero
/* B4D20 8011DE40 AFBF003C */ sw $ra, 0x3C($sp)
/* B4D24 8011DE44 AFBE0038 */ sw $fp, 0x38($sp)
/* B4D28 8011DE48 AFB70034 */ sw $s7, 0x34($sp)
/* B4D2C 8011DE4C AFB5002C */ sw $s5, 0x2C($sp)
/* B4D30 8011DE50 AFB40028 */ sw $s4, 0x28($sp)
/* B4D34 8011DE54 AFB30024 */ sw $s3, 0x24($sp)
/* B4D38 8011DE58 AFB20020 */ sw $s2, 0x20($sp)
/* B4D3C 8011DE5C AFB1001C */ sw $s1, 0x1C($sp)
/* B4D40 8011DE60 AFB00018 */ sw $s0, 0x18($sp)
/* B4D44 8011DE64 AFA40040 */ sw $a0, 0x40($sp)
/* B4D48 8011DE68 96C200F4 */ lhu $v0, 0xF4($s6)
/* B4D4C 8011DE6C 30420080 */ andi $v0, $v0, 0x80
/* B4D50 8011DE70 10400015 */ beqz $v0, .LIQUE_8011DEC8
/* B4D54 8011DE74 00C0982D */ daddu $s3, $a2, $zero
/* B4D58 8011DE78 0000882D */ daddu $s1, $zero, $zero
/* B4D5C 8011DE7C 26D200B4 */ addiu $s2, $s6, 0xB4
/* B4D60 8011DE80 02C0802D */ daddu $s0, $s6, $zero
.LIQUE_8011DE84:
/* B4D64 8011DE84 8E020004 */ lw $v0, 0x4($s0)
/* B4D68 8011DE88 5040000A */ beql $v0, $zero, .LIQUE_8011DEB4
/* B4D6C 8011DE8C 26310001 */ addiu $s1, $s1, 0x1
/* B4D70 8011DE90 0240202D */ daddu $a0, $s2, $zero
/* B4D74 8011DE94 0260282D */ daddu $a1, $s3, $zero
/* B4D78 8011DE98 0C0196F0 */ jal guMtxCatF
/* B4D7C 8011DE9C 0240302D */ daddu $a2, $s2, $zero
/* B4D80 8011DEA0 8FA40040 */ lw $a0, 0x40($sp)
/* B4D84 8011DEA4 8E050004 */ lw $a1, 0x4($s0)
/* B4D88 8011DEA8 0C04778D */ jal appendGfx_animator_node
/* B4D8C 8011DEAC 0240302D */ daddu $a2, $s2, $zero
/* B4D90 8011DEB0 26310001 */ addiu $s1, $s1, 0x1
.LIQUE_8011DEB4:
/* B4D94 8011DEB4 2A220020 */ slti $v0, $s1, 0x20
/* B4D98 8011DEB8 1440FFF2 */ bnez $v0, .LIQUE_8011DE84
/* B4D9C 8011DEBC 26100004 */ addiu $s0, $s0, 0x4
/* B4DA0 8011DEC0 080478C9 */ j .LIQUE_8011E324
/* B4DA4 8011DEC4 00000000 */ nop
.LIQUE_8011DEC8:
/* B4DA8 8011DEC8 26D000B4 */ addiu $s0, $s6, 0xB4
/* B4DAC 8011DECC 0200202D */ daddu $a0, $s0, $zero
/* B4DB0 8011DED0 0260282D */ daddu $a1, $s3, $zero
/* B4DB4 8011DED4 0C0196F0 */ jal guMtxCatF
/* B4DB8 8011DED8 0200302D */ daddu $a2, $s0, $zero
/* B4DBC 8011DEDC 3C120001 */ lui $s2, (0x12230 >> 16)
/* B4DC0 8011DEE0 36522230 */ ori $s2, $s2, (0x12230 & 0xFFFF)
/* B4DC4 8011DEE4 0200202D */ daddu $a0, $s0, $zero
/* B4DC8 8011DEE8 3C108007 */ lui $s0, %hi(gMatrixListPos)
/* B4DCC 8011DEEC 26102E60 */ addiu $s0, $s0, %lo(gMatrixListPos)
/* B4DD0 8011DEF0 3C11800A */ lui $s1, %hi(gDisplayContext)
/* B4DD4 8011DEF4 2631924C */ addiu $s1, $s1, %lo(gDisplayContext)
/* B4DD8 8011DEF8 96050000 */ lhu $a1, 0x0($s0)
/* B4DDC 8011DEFC 8E220000 */ lw $v0, 0x0($s1)
/* B4DE0 8011DF00 00052980 */ sll $a1, $a1, 6
/* B4DE4 8011DF04 00B22821 */ addu $a1, $a1, $s2
/* B4DE8 8011DF08 0C0196B0 */ jal guMtxF2L
/* B4DEC 8011DF0C 00452821 */ addu $a1, $v0, $a1
/* B4DF0 8011DF10 3C03DA38 */ lui $v1, (0xDA380003 >> 16)
/* B4DF4 8011DF14 34630003 */ ori $v1, $v1, (0xDA380003 & 0xFFFF)
/* B4DF8 8011DF18 3C05E300 */ lui $a1, (0xE3000F00 >> 16)
/* B4DFC 8011DF1C 34A50F00 */ ori $a1, $a1, (0xE3000F00 & 0xFFFF)
/* B4E00 8011DF20 3C06E300 */ lui $a2, (0xE3001001 >> 16)
/* B4E04 8011DF24 34C61001 */ ori $a2, $a2, (0xE3001001 & 0xFFFF)
/* B4E08 8011DF28 3C07D9FD */ lui $a3, (0xD9FDFFFF >> 16)
/* B4E0C 8011DF2C 3C09800A */ lui $t1, %hi(gMainGfxPos)
/* B4E10 8011DF30 25299244 */ addiu $t1, $t1, %lo(gMainGfxPos)
/* B4E14 8011DF34 34E7FFFF */ ori $a3, $a3, (0xD9FDFFFF & 0xFFFF)
/* B4E18 8011DF38 8D280000 */ lw $t0, 0x0($t1)
/* B4E1C 8011DF3C 96020000 */ lhu $v0, 0x0($s0)
/* B4E20 8011DF40 0100202D */ daddu $a0, $t0, $zero
/* B4E24 8011DF44 25080008 */ addiu $t0, $t0, 0x8
/* B4E28 8011DF48 AD280000 */ sw $t0, 0x0($t1)
/* B4E2C 8011DF4C AC830000 */ sw $v1, 0x0($a0)
/* B4E30 8011DF50 24430001 */ addiu $v1, $v0, 0x1
/* B4E34 8011DF54 3042FFFF */ andi $v0, $v0, 0xFFFF
/* B4E38 8011DF58 00021180 */ sll $v0, $v0, 6
/* B4E3C 8011DF5C A6030000 */ sh $v1, 0x0($s0)
/* B4E40 8011DF60 8E230000 */ lw $v1, 0x0($s1)
/* B4E44 8011DF64 00521021 */ addu $v0, $v0, $s2
/* B4E48 8011DF68 00621821 */ addu $v1, $v1, $v0
/* B4E4C 8011DF6C 25020008 */ addiu $v0, $t0, 0x8
/* B4E50 8011DF70 AC830004 */ sw $v1, 0x4($a0)
/* B4E54 8011DF74 AD220000 */ sw $v0, 0x0($t1)
/* B4E58 8011DF78 3C02E700 */ lui $v0, (0xE7000000 >> 16)
/* B4E5C 8011DF7C AD020000 */ sw $v0, 0x0($t0)
/* B4E60 8011DF80 25020010 */ addiu $v0, $t0, 0x10
/* B4E64 8011DF84 AD000004 */ sw $zero, 0x4($t0)
/* B4E68 8011DF88 AD220000 */ sw $v0, 0x0($t1)
/* B4E6C 8011DF8C 3C02D700 */ lui $v0, (0xD7000000 >> 16)
/* B4E70 8011DF90 AD020008 */ sw $v0, 0x8($t0)
/* B4E74 8011DF94 25020018 */ addiu $v0, $t0, 0x18
/* B4E78 8011DF98 AD00000C */ sw $zero, 0xC($t0)
/* B4E7C 8011DF9C AD220000 */ sw $v0, 0x0($t1)
/* B4E80 8011DFA0 25020020 */ addiu $v0, $t0, 0x20
/* B4E84 8011DFA4 AD050010 */ sw $a1, 0x10($t0)
/* B4E88 8011DFA8 AD000014 */ sw $zero, 0x14($t0)
/* B4E8C 8011DFAC AD220000 */ sw $v0, 0x0($t1)
/* B4E90 8011DFB0 25020028 */ addiu $v0, $t0, 0x28
/* B4E94 8011DFB4 AD060018 */ sw $a2, 0x18($t0)
/* B4E98 8011DFB8 AD00001C */ sw $zero, 0x1C($t0)
/* B4E9C 8011DFBC AD220000 */ sw $v0, 0x0($t1)
/* B4EA0 8011DFC0 AD070020 */ sw $a3, 0x20($t0)
/* B4EA4 8011DFC4 AD000024 */ sw $zero, 0x24($t0)
/* B4EA8 8011DFC8 8FAA0040 */ lw $t2, 0x40($sp)
/* B4EAC 8011DFCC 8D420000 */ lw $v0, 0x0($t2)
/* B4EB0 8011DFD0 3C030001 */ lui $v1, (0x10000 >> 16)
/* B4EB4 8011DFD4 00431024 */ and $v0, $v0, $v1
/* B4EB8 8011DFD8 10400007 */ beqz $v0, .LIQUE_8011DFF8
/* B4EBC 8011DFDC 3C02D9FF */ lui $v0, (0xD9FFFFFF >> 16)
/* B4EC0 8011DFE0 3442FFFF */ ori $v0, $v0, (0xD9FFFFFF & 0xFFFF)
/* B4EC4 8011DFE4 25030030 */ addiu $v1, $t0, 0x30
/* B4EC8 8011DFE8 AD230000 */ sw $v1, 0x0($t1)
/* B4ECC 8011DFEC AD020028 */ sw $v0, 0x28($t0)
/* B4ED0 8011DFF0 24020400 */ addiu $v0, $zero, 0x400
/* B4ED4 8011DFF4 AD02002C */ sw $v0, 0x2C($t0)
.LIQUE_8011DFF8:
/* B4ED8 8011DFF8 3C028015 */ lui $v0, %hi(gAnimModelFogEnabled)
/* B4EDC 8011DFFC 8C4221C4 */ lw $v0, %lo(gAnimModelFogEnabled)($v0)
/* B4EE0 8011E000 1440000C */ bnez $v0, .LIQUE_8011E034
/* B4EE4 8011E004 3C04FC12 */ lui $a0, (0xFC121E04 >> 16)
/* B4EE8 8011E008 3C05FCFF */ lui $a1, (0xFCFFFFFF >> 16)
/* B4EEC 8011E00C 34A5FFFF */ ori $a1, $a1, (0xFCFFFFFF & 0xFFFF)
/* B4EF0 8011E010 3C04FFFC */ lui $a0, (0xFFFCF279 >> 16)
/* B4EF4 8011E014 8D220000 */ lw $v0, 0x0($t1)
/* B4EF8 8011E018 3484F279 */ ori $a0, $a0, (0xFFFCF279 & 0xFFFF)
/* B4EFC 8011E01C 0040182D */ daddu $v1, $v0, $zero
/* B4F00 8011E020 24420008 */ addiu $v0, $v0, 0x8
/* B4F04 8011E024 AD220000 */ sw $v0, 0x0($t1)
/* B4F08 8011E028 AC650000 */ sw $a1, 0x0($v1)
/* B4F0C 8011E02C 08047815 */ j .LIQUE_8011E054
/* B4F10 8011E030 AC640004 */ sw $a0, 0x4($v1)
.LIQUE_8011E034:
/* B4F14 8011E034 8D220000 */ lw $v0, 0x0($t1)
/* B4F18 8011E038 34841E04 */ ori $a0, $a0, (0xFC121E04 & 0xFFFF)
/* B4F1C 8011E03C 0040182D */ daddu $v1, $v0, $zero
/* B4F20 8011E040 24420008 */ addiu $v0, $v0, 0x8
/* B4F24 8011E044 AD220000 */ sw $v0, 0x0($t1)
/* B4F28 8011E048 2402F3F8 */ addiu $v0, $zero, -0xC08
/* B4F2C 8011E04C AC640000 */ sw $a0, 0x0($v1)
/* B4F30 8011E050 AC620004 */ sw $v0, 0x4($v1)
.LIQUE_8011E054:
/* B4F34 8011E054 3C10800A */ lui $s0, %hi(gMainGfxPos)
/* B4F38 8011E058 26109244 */ addiu $s0, $s0, %lo(gMainGfxPos)
/* B4F3C 8011E05C 8E020000 */ lw $v0, 0x0($s0)
/* B4F40 8011E060 3C11E700 */ lui $s1, (0xE7000000 >> 16)
/* B4F44 8011E064 0040182D */ daddu $v1, $v0, $zero
/* B4F48 8011E068 AC710000 */ sw $s1, 0x0($v1)
/* B4F4C 8011E06C AC600004 */ sw $zero, 0x4($v1)
/* B4F50 8011E070 8FAA0040 */ lw $t2, 0x40($sp)
/* B4F54 8011E074 8D4302D4 */ lw $v1, 0x2D4($t2)
/* B4F58 8011E078 24420008 */ addiu $v0, $v0, 0x8
/* B4F5C 8011E07C 10600004 */ beqz $v1, .LIQUE_8011E090
/* B4F60 8011E080 AE020000 */ sw $v0, 0x0($s0)
/* B4F64 8011E084 8D4402D8 */ lw $a0, 0x2D8($t2)
/* B4F68 8011E088 0060F809 */ jalr $v1
/* B4F6C 8011E08C 00000000 */ nop
.LIQUE_8011E090:
/* B4F70 8011E090 8E040000 */ lw $a0, 0x0($s0)
/* B4F74 8011E094 0080102D */ daddu $v0, $a0, $zero
/* B4F78 8011E098 AC510000 */ sw $s1, 0x0($v0)
/* B4F7C 8011E09C AC400004 */ sw $zero, 0x4($v0)
/* B4F80 8011E0A0 8EC50000 */ lw $a1, 0x0($s6)
/* B4F84 8011E0A4 24840008 */ addiu $a0, $a0, 0x8
/* B4F88 8011E0A8 10A00089 */ beqz $a1, .LIQUE_8011E2D0
/* B4F8C 8011E0AC AE040000 */ sw $a0, 0x0($s0)
/* B4F90 8011E0B0 86C200F8 */ lh $v0, 0xF8($s6)
/* B4F94 8011E0B4 04410008 */ bgez $v0, .LIQUE_8011E0D8
/* B4F98 8011E0B8 240200DF */ addiu $v0, $zero, 0xDF
/* B4F9C 8011E0BC 3C02DE00 */ lui $v0, (0xDE000000 >> 16)
/* B4FA0 8011E0C0 AC820000 */ sw $v0, 0x0($a0)
/* B4FA4 8011E0C4 8EC30000 */ lw $v1, 0x0($s6)
/* B4FA8 8011E0C8 24820008 */ addiu $v0, $a0, 0x8
/* B4FAC 8011E0CC AE020000 */ sw $v0, 0x0($s0)
/* B4FB0 8011E0D0 080478B4 */ j .LIQUE_8011E2D0
/* B4FB4 8011E0D4 AC830004 */ sw $v1, 0x4($a0)
.LIQUE_8011E0D8:
/* B4FB8 8011E0D8 90A30000 */ lbu $v1, 0x0($a1)
/* B4FBC 8011E0DC 10620008 */ beq $v1, $v0, .LIQUE_8011E100
/* B4FC0 8011E0E0 0000202D */ daddu $a0, $zero, $zero
/* B4FC4 8011E0E4 0040302D */ daddu $a2, $v0, $zero
/* B4FC8 8011E0E8 24A20008 */ addiu $v0, $a1, 0x8
.LIQUE_8011E0EC:
/* B4FCC 8011E0EC 24840001 */ addiu $a0, $a0, 0x1
/* B4FD0 8011E0F0 8C450000 */ lw $a1, 0x0($v0)
/* B4FD4 8011E0F4 00051E02 */ srl $v1, $a1, 24
/* B4FD8 8011E0F8 1466FFFC */ bne $v1, $a2, .LIQUE_8011E0EC
/* B4FDC 8011E0FC 24420008 */ addiu $v0, $v0, 0x8
.LIQUE_8011E100:
/* B4FE0 8011E100 24840001 */ addiu $a0, $a0, 0x1
/* B4FE4 8011E104 0000182D */ daddu $v1, $zero, $zero
/* B4FE8 8011E108 3C058015 */ lui $a1, %hi(D_801536C0)
/* B4FEC 8011E10C 24A51E40 */ addiu $a1, $a1, %lo(D_801536C0)
/* B4FF0 8011E110 000310C0 */ sll $v0, $v1, 3
.LIQUE_8011E114:
/* B4FF4 8011E114 0045B821 */ addu $s7, $v0, $a1
/* B4FF8 8011E118 8EE20000 */ lw $v0, 0x0($s7)
/* B4FFC 8011E11C 04400006 */ bltz $v0, .LIQUE_8011E138
/* B5000 8011E120 28620060 */ slti $v0, $v1, 0x60
/* B5004 8011E124 24630001 */ addiu $v1, $v1, 0x1
/* B5008 8011E128 28620060 */ slti $v0, $v1, 0x60
/* B500C 8011E12C 1440FFF9 */ bnez $v0, .LIQUE_8011E114
/* B5010 8011E130 000310C0 */ sll $v0, $v1, 3
/* B5014 8011E134 28620060 */ slti $v0, $v1, 0x60
.LIQUE_8011E138:
/* B5018 8011E138 14400003 */ bnez $v0, .LIQUE_8011E148
/* B501C 8011E13C 00000000 */ nop
.LIQUE_8011E140:
/* B5020 8011E140 08047850 */ j .LIQUE_8011E140
/* B5024 8011E144 00000000 */ nop
.LIQUE_8011E148:
/* B5028 8011E148 0C00AA3E */ jal general_heap_malloc
/* B502C 8011E14C 000420C0 */ sll $a0, $a0, 3
/* B5030 8011E150 0040982D */ daddu $s3, $v0, $zero
/* B5034 8011E154 16600003 */ bnez $s3, .LIQUE_8011E164
/* B5038 8011E158 AEF30004 */ sw $s3, 0x4($s7)
.LIQUE_8011E15C:
/* B503C 8011E15C 08047857 */ j .LIQUE_8011E15C
/* B5040 8011E160 00000000 */ nop
.LIQUE_8011E164:
/* B5044 8011E164 0000A82D */ daddu $s5, $zero, $zero
/* B5048 8011E168 24020003 */ addiu $v0, $zero, 0x3
/* B504C 8011E16C AEE20000 */ sw $v0, 0x0($s7)
/* B5050 8011E170 8EC20000 */ lw $v0, 0x0($s6)
/* B5054 8011E174 8C450000 */ lw $a1, 0x0($v0)
/* B5058 8011E178 8C470004 */ lw $a3, 0x4($v0)
/* B505C 8011E17C 240200DF */ addiu $v0, $zero, 0xDF
/* B5060 8011E180 00051E02 */ srl $v1, $a1, 24
/* B5064 8011E184 10620044 */ beq $v1, $v0, .LIQUE_8011E298
/* B5068 8011E188 24140002 */ addiu $s4, $zero, 0x2
/* B506C 8011E18C 3C1E0100 */ lui $fp, (0x1000000 >> 16)
/* B5070 8011E190 2672FFFC */ addiu $s2, $s3, -0x4
.LIQUE_8011E194:
/* B5074 8011E194 24020001 */ addiu $v0, $zero, 0x1
/* B5078 8011E198 5462002F */ bnel $v1, $v0, .LIQUE_8011E258
/* B507C 8011E19C 0260102D */ daddu $v0, $s3, $zero
/* B5080 8011E1A0 00451006 */ srlv $v0, $a1, $v0
/* B5084 8011E1A4 3051007F */ andi $s1, $v0, 0x7F
/* B5088 8011E1A8 00051302 */ srl $v0, $a1, 12
/* B508C 8011E1AC 305000FF */ andi $s0, $v0, 0xFF
/* B5090 8011E1B0 8EC200FC */ lw $v0, 0xFC($s6)
/* B5094 8011E1B4 14400010 */ bnez $v0, .LIQUE_8011E1F8
/* B5098 8011E1B8 02308823 */ subu $s1, $s1, $s0
/* B509C 8011E1BC 26520008 */ addiu $s2, $s2, 0x8
/* B50A0 8011E1C0 26730008 */ addiu $s3, $s3, 0x8
/* B50A4 8011E1C4 00101300 */ sll $v0, $s0, 12
/* B50A8 8011E1C8 02301821 */ addu $v1, $s1, $s0
/* B50AC 8011E1CC 3063007F */ andi $v1, $v1, 0x7F
/* B50B0 8011E1D0 00031840 */ sll $v1, $v1, 1
/* B50B4 8011E1D4 007E1825 */ or $v1, $v1, $fp
/* B50B8 8011E1D8 86C400F8 */ lh $a0, 0xF8($s6)
/* B50BC 8011E1DC 00431025 */ or $v0, $v0, $v1
/* B50C0 8011E1E0 AE42FFFC */ sw $v0, -0x4($s2)
/* B50C4 8011E1E4 00952021 */ addu $a0, $a0, $s5
/* B50C8 8011E1E8 00042100 */ sll $a0, $a0, 4
/* B50CC 8011E1EC 00E41821 */ addu $v1, $a3, $a0
/* B50D0 8011E1F0 08047894 */ j .LIQUE_8011E250
/* B50D4 8011E1F4 AE430000 */ sw $v1, 0x0($s2)
.LIQUE_8011E1F8:
/* B50D8 8011E1F8 02C0282D */ daddu $a1, $s6, $zero
/* B50DC 8011E1FC 26520008 */ addiu $s2, $s2, 0x8
/* B50E0 8011E200 8FA40040 */ lw $a0, 0x40($sp)
/* B50E4 8011E204 86C200F8 */ lh $v0, 0xF8($s6)
/* B50E8 8011E208 26730008 */ addiu $s3, $s3, 0x8
/* B50EC 8011E20C AFB10010 */ sw $s1, 0x10($sp)
/* B50F0 8011E210 AFB50014 */ sw $s5, 0x14($sp)
/* B50F4 8011E214 00551021 */ addu $v0, $v0, $s5
/* B50F8 8011E218 00023040 */ sll $a2, $v0, 1
/* B50FC 8011E21C 00C23021 */ addu $a2, $a2, $v0
/* B5100 8011E220 00063040 */ sll $a2, $a2, 1
/* B5104 8011E224 00E63021 */ addu $a2, $a3, $a2
/* B5108 8011E228 0C047098 */ jal animator_copy_vertices_to_buffer
/* B510C 8011E22C 0200382D */ daddu $a3, $s0, $zero
/* B5110 8011E230 00102300 */ sll $a0, $s0, 12
/* B5114 8011E234 02301821 */ addu $v1, $s1, $s0
/* B5118 8011E238 3063007F */ andi $v1, $v1, 0x7F
/* B511C 8011E23C 00031840 */ sll $v1, $v1, 1
/* B5120 8011E240 007E1825 */ or $v1, $v1, $fp
/* B5124 8011E244 00832025 */ or $a0, $a0, $v1
/* B5128 8011E248 AE44FFFC */ sw $a0, -0x4($s2)
/* B512C 8011E24C AE420000 */ sw $v0, 0x0($s2)
.LIQUE_8011E250:
/* B5130 8011E250 0804789A */ j .LIQUE_8011E268
/* B5134 8011E254 02B0A821 */ addu $s5, $s5, $s0
.LIQUE_8011E258:
/* B5138 8011E258 26520008 */ addiu $s2, $s2, 0x8
/* B513C 8011E25C 26730008 */ addiu $s3, $s3, 0x8
/* B5140 8011E260 AC450000 */ sw $a1, 0x0($v0)
/* B5144 8011E264 AC470004 */ sw $a3, 0x4($v0)
.LIQUE_8011E268:
/* B5148 8011E268 00141080 */ sll $v0, $s4, 2
/* B514C 8011E26C 26940001 */ addiu $s4, $s4, 0x1
/* B5150 8011E270 00141880 */ sll $v1, $s4, 2
/* B5154 8011E274 8EC40000 */ lw $a0, 0x0($s6)
/* B5158 8011E278 00441021 */ addu $v0, $v0, $a0
/* B515C 8011E27C 00641821 */ addu $v1, $v1, $a0
/* B5160 8011E280 8C450000 */ lw $a1, 0x0($v0)
/* B5164 8011E284 240200DF */ addiu $v0, $zero, 0xDF
/* B5168 8011E288 8C670000 */ lw $a3, 0x0($v1)
/* B516C 8011E28C 00051E02 */ srl $v1, $a1, 24
/* B5170 8011E290 1462FFC0 */ bne $v1, $v0, .LIQUE_8011E194
/* B5174 8011E294 26940001 */ addiu $s4, $s4, 0x1
.LIQUE_8011E298:
/* B5178 8011E298 3C05800A */ lui $a1, %hi(gMainGfxPos)
/* B517C 8011E29C 24A59244 */ addiu $a1, $a1, %lo(gMainGfxPos)
/* B5180 8011E2A0 0260202D */ daddu $a0, $s3, $zero
/* B5184 8011E2A4 8CA30000 */ lw $v1, 0x0($a1)
/* B5188 8011E2A8 3C02DF00 */ lui $v0, (0xDF000000 >> 16)
/* B518C 8011E2AC AC820000 */ sw $v0, 0x0($a0)
/* B5190 8011E2B0 3C02DE00 */ lui $v0, (0xDE000000 >> 16)
/* B5194 8011E2B4 AC800004 */ sw $zero, 0x4($a0)
/* B5198 8011E2B8 0060202D */ daddu $a0, $v1, $zero
/* B519C 8011E2BC AC820000 */ sw $v0, 0x0($a0)
/* B51A0 8011E2C0 8EE20004 */ lw $v0, 0x4($s7)
/* B51A4 8011E2C4 24630008 */ addiu $v1, $v1, 0x8
/* B51A8 8011E2C8 ACA30000 */ sw $v1, 0x0($a1)
/* B51AC 8011E2CC AC820004 */ sw $v0, 0x4($a0)
.LIQUE_8011E2D0:
/* B51B0 8011E2D0 0000882D */ daddu $s1, $zero, $zero
/* B51B4 8011E2D4 3C03800A */ lui $v1, %hi(gMainGfxPos)
/* B51B8 8011E2D8 24639244 */ addiu $v1, $v1, %lo(gMainGfxPos)
/* B51BC 8011E2DC 8C620000 */ lw $v0, 0x0($v1)
/* B51C0 8011E2E0 02C0802D */ daddu $s0, $s6, $zero
/* B51C4 8011E2E4 0040202D */ daddu $a0, $v0, $zero
/* B51C8 8011E2E8 24420008 */ addiu $v0, $v0, 0x8
/* B51CC 8011E2EC AC620000 */ sw $v0, 0x0($v1)
/* B51D0 8011E2F0 3C02E700 */ lui $v0, (0xE7000000 >> 16)
/* B51D4 8011E2F4 AC820000 */ sw $v0, 0x0($a0)
/* B51D8 8011E2F8 AC800004 */ sw $zero, 0x4($a0)
.LIQUE_8011E2FC:
/* B51DC 8011E2FC 8E050004 */ lw $a1, 0x4($s0)
/* B51E0 8011E300 50A00005 */ beql $a1, $zero, .LIQUE_8011E318
/* B51E4 8011E304 26310001 */ addiu $s1, $s1, 0x1
/* B51E8 8011E308 8FA40040 */ lw $a0, 0x40($sp)
/* B51EC 8011E30C 0C04778D */ jal appendGfx_animator_node
/* B51F0 8011E310 26C600B4 */ addiu $a2, $s6, 0xB4
/* B51F4 8011E314 26310001 */ addiu $s1, $s1, 0x1
.LIQUE_8011E318:
/* B51F8 8011E318 2A220020 */ slti $v0, $s1, 0x20
/* B51FC 8011E31C 1440FFF7 */ bnez $v0, .LIQUE_8011E2FC
/* B5200 8011E320 26100004 */ addiu $s0, $s0, 0x4
.LIQUE_8011E324:
/* B5204 8011E324 8FBF003C */ lw $ra, 0x3C($sp)
/* B5208 8011E328 8FBE0038 */ lw $fp, 0x38($sp)
/* B520C 8011E32C 8FB70034 */ lw $s7, 0x34($sp)
/* B5210 8011E330 8FB60030 */ lw $s6, 0x30($sp)
/* B5214 8011E334 8FB5002C */ lw $s5, 0x2C($sp)
/* B5218 8011E338 8FB40028 */ lw $s4, 0x28($sp)
/* B521C 8011E33C 8FB30024 */ lw $s3, 0x24($sp)
/* B5220 8011E340 8FB20020 */ lw $s2, 0x20($sp)
/* B5224 8011E344 8FB1001C */ lw $s1, 0x1C($sp)
/* B5228 8011E348 8FB00018 */ lw $s0, 0x18($sp)
/* B522C 8011E34C 03E00008 */ jr $ra
/* B5230 8011E350 27BD0040 */ addiu $sp, $sp, 0x40

View File

@ -1,358 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel appendGfx_animator_node
/* B6154 8011FA54 27BDFFC0 */ addiu $sp, $sp, -0x40
/* B6158 8011FA58 AFB60030 */ sw $s6, 0x30($sp)
/* B615C 8011FA5C 00A0B02D */ daddu $s6, $a1, $zero
/* B6160 8011FA60 AFBF003C */ sw $ra, 0x3c($sp)
/* B6164 8011FA64 AFBE0038 */ sw $fp, 0x38($sp)
/* B6168 8011FA68 AFB70034 */ sw $s7, 0x34($sp)
/* B616C 8011FA6C AFB5002C */ sw $s5, 0x2c($sp)
/* B6170 8011FA70 AFB40028 */ sw $s4, 0x28($sp)
/* B6174 8011FA74 AFB30024 */ sw $s3, 0x24($sp)
/* B6178 8011FA78 AFB20020 */ sw $s2, 0x20($sp)
/* B617C 8011FA7C AFB1001C */ sw $s1, 0x1c($sp)
/* B6180 8011FA80 AFB00018 */ sw $s0, 0x18($sp)
/* B6184 8011FA84 AFA40040 */ sw $a0, 0x40($sp)
/* B6188 8011FA88 96C200F4 */ lhu $v0, 0xf4($s6)
/* B618C 8011FA8C 30420080 */ andi $v0, $v0, 0x80
/* B6190 8011FA90 10400015 */ beqz $v0, .L8011FAE8
/* B6194 8011FA94 00C0982D */ daddu $s3, $a2, $zero
/* B6198 8011FA98 0000882D */ daddu $s1, $zero, $zero
/* B619C 8011FA9C 26D200B4 */ addiu $s2, $s6, 0xb4
/* B61A0 8011FAA0 02C0802D */ daddu $s0, $s6, $zero
.L8011FAA4:
/* B61A4 8011FAA4 8E020004 */ lw $v0, 4($s0)
/* B61A8 8011FAA8 5040000A */ beql $v0, $zero, .L8011FAD4
/* B61AC 8011FAAC 26310001 */ addiu $s1, $s1, 1
/* B61B0 8011FAB0 0240202D */ daddu $a0, $s2, $zero
/* B61B4 8011FAB4 0260282D */ daddu $a1, $s3, $zero
/* B61B8 8011FAB8 0C019D80 */ jal guMtxCatF
/* B61BC 8011FABC 0240302D */ daddu $a2, $s2, $zero
/* B61C0 8011FAC0 8FA40040 */ lw $a0, 0x40($sp)
/* B61C4 8011FAC4 8E050004 */ lw $a1, 4($s0)
/* B61C8 8011FAC8 0C047E95 */ jal appendGfx_animator_node
/* B61CC 8011FACC 0240302D */ daddu $a2, $s2, $zero
/* B61D0 8011FAD0 26310001 */ addiu $s1, $s1, 1
.L8011FAD4:
/* B61D4 8011FAD4 2A220020 */ slti $v0, $s1, 0x20
/* B61D8 8011FAD8 1440FFF2 */ bnez $v0, .L8011FAA4
/* B61DC 8011FADC 26100004 */ addiu $s0, $s0, 4
/* B61E0 8011FAE0 08047FD1 */ j .L8011FF44
/* B61E4 8011FAE4 00000000 */ nop
.L8011FAE8:
/* B61E8 8011FAE8 26D000B4 */ addiu $s0, $s6, 0xb4
/* B61EC 8011FAEC 0200202D */ daddu $a0, $s0, $zero
/* B61F0 8011FAF0 0260282D */ daddu $a1, $s3, $zero
/* B61F4 8011FAF4 0C019D80 */ jal guMtxCatF
/* B61F8 8011FAF8 0200302D */ daddu $a2, $s0, $zero
/* B61FC 8011FAFC 3C120001 */ lui $s2, 1
/* B6200 8011FB00 36521630 */ ori $s2, $s2, 0x1630
/* B6204 8011FB04 0200202D */ daddu $a0, $s0, $zero
/* B6208 8011FB08 3C108007 */ lui $s0, %hi(gMatrixListPos)
/* B620C 8011FB0C 261041F0 */ addiu $s0, $s0, %lo(gMatrixListPos)
/* B6210 8011FB10 3C11800A */ lui $s1, %hi(gDisplayContext)
/* B6214 8011FB14 2631A674 */ addiu $s1, $s1, %lo(gDisplayContext)
/* B6218 8011FB18 96050000 */ lhu $a1, ($s0)
/* B621C 8011FB1C 8E220000 */ lw $v0, ($s1)
/* B6220 8011FB20 00052980 */ sll $a1, $a1, 6
/* B6224 8011FB24 00B22821 */ addu $a1, $a1, $s2
/* B6228 8011FB28 0C019D40 */ jal guMtxF2L
/* B622C 8011FB2C 00452821 */ addu $a1, $v0, $a1
/* B6230 8011FB30 3C03DA38 */ lui $v1, 0xda38
/* B6234 8011FB34 34630003 */ ori $v1, $v1, 3
/* B6238 8011FB38 3C05E300 */ lui $a1, 0xe300
/* B623C 8011FB3C 34A50F00 */ ori $a1, $a1, 0xf00
/* B6240 8011FB40 3C06E300 */ lui $a2, 0xe300
/* B6244 8011FB44 34C61001 */ ori $a2, $a2, 0x1001
/* B6248 8011FB48 3C07D9FD */ lui $a3, 0xd9fd
/* B624C 8011FB4C 3C09800A */ lui $t1, %hi(gMainGfxPos)
/* B6250 8011FB50 2529A66C */ addiu $t1, $t1, %lo(gMainGfxPos)
/* B6254 8011FB54 34E7FFFF */ ori $a3, $a3, 0xffff
/* B6258 8011FB58 8D280000 */ lw $t0, ($t1)
/* B625C 8011FB5C 96020000 */ lhu $v0, ($s0)
/* B6260 8011FB60 0100202D */ daddu $a0, $t0, $zero
/* B6264 8011FB64 25080008 */ addiu $t0, $t0, 8
/* B6268 8011FB68 AD280000 */ sw $t0, ($t1)
/* B626C 8011FB6C AC830000 */ sw $v1, ($a0)
/* B6270 8011FB70 24430001 */ addiu $v1, $v0, 1
/* B6274 8011FB74 3042FFFF */ andi $v0, $v0, 0xffff
/* B6278 8011FB78 00021180 */ sll $v0, $v0, 6
/* B627C 8011FB7C A6030000 */ sh $v1, ($s0)
/* B6280 8011FB80 8E230000 */ lw $v1, ($s1)
/* B6284 8011FB84 00521021 */ addu $v0, $v0, $s2
/* B6288 8011FB88 00621821 */ addu $v1, $v1, $v0
/* B628C 8011FB8C 25020008 */ addiu $v0, $t0, 8
/* B6290 8011FB90 AC830004 */ sw $v1, 4($a0)
/* B6294 8011FB94 AD220000 */ sw $v0, ($t1)
/* B6298 8011FB98 3C02E700 */ lui $v0, 0xe700
/* B629C 8011FB9C AD020000 */ sw $v0, ($t0)
/* B62A0 8011FBA0 25020010 */ addiu $v0, $t0, 0x10
/* B62A4 8011FBA4 AD000004 */ sw $zero, 4($t0)
/* B62A8 8011FBA8 AD220000 */ sw $v0, ($t1)
/* B62AC 8011FBAC 3C02D700 */ lui $v0, 0xd700
/* B62B0 8011FBB0 AD020008 */ sw $v0, 8($t0)
/* B62B4 8011FBB4 25020018 */ addiu $v0, $t0, 0x18
/* B62B8 8011FBB8 AD00000C */ sw $zero, 0xc($t0)
/* B62BC 8011FBBC AD220000 */ sw $v0, ($t1)
/* B62C0 8011FBC0 25020020 */ addiu $v0, $t0, 0x20
/* B62C4 8011FBC4 AD050010 */ sw $a1, 0x10($t0)
/* B62C8 8011FBC8 AD000014 */ sw $zero, 0x14($t0)
/* B62CC 8011FBCC AD220000 */ sw $v0, ($t1)
/* B62D0 8011FBD0 25020028 */ addiu $v0, $t0, 0x28
/* B62D4 8011FBD4 AD060018 */ sw $a2, 0x18($t0)
/* B62D8 8011FBD8 AD00001C */ sw $zero, 0x1c($t0)
/* B62DC 8011FBDC AD220000 */ sw $v0, ($t1)
/* B62E0 8011FBE0 AD070020 */ sw $a3, 0x20($t0)
/* B62E4 8011FBE4 AD000024 */ sw $zero, 0x24($t0)
/* B62E8 8011FBE8 8FAA0040 */ lw $t2, 0x40($sp)
/* B62EC 8011FBEC 8D420000 */ lw $v0, ($t2)
/* B62F0 8011FBF0 3C030001 */ lui $v1, 1
/* B62F4 8011FBF4 00431024 */ and $v0, $v0, $v1
/* B62F8 8011FBF8 10400007 */ beqz $v0, .L8011FC18
/* B62FC 8011FBFC 3C02D9FF */ lui $v0, 0xd9ff
/* B6300 8011FC00 3442FFFF */ ori $v0, $v0, 0xffff
/* B6304 8011FC04 25030030 */ addiu $v1, $t0, 0x30
/* B6308 8011FC08 AD230000 */ sw $v1, ($t1)
/* B630C 8011FC0C AD020028 */ sw $v0, 0x28($t0)
/* B6310 8011FC10 24020400 */ addiu $v0, $zero, 0x400
/* B6314 8011FC14 AD02002C */ sw $v0, 0x2c($t0)
.L8011FC18:
/* B6318 8011FC18 3C028015 */ lui $v0, %hi(gAnimModelFogEnabled)
/* B631C 8011FC1C 8C423A44 */ lw $v0, %lo(gAnimModelFogEnabled)($v0)
/* B6320 8011FC20 1440000C */ bnez $v0, .L8011FC54
/* B6324 8011FC24 3C04FC12 */ lui $a0, 0xfc12
/* B6328 8011FC28 3C05FCFF */ lui $a1, 0xfcff
/* B632C 8011FC2C 34A5FFFF */ ori $a1, $a1, 0xffff
/* B6330 8011FC30 3C04FFFC */ lui $a0, 0xfffc
/* B6334 8011FC34 8D220000 */ lw $v0, ($t1)
/* B6338 8011FC38 3484F279 */ ori $a0, $a0, 0xf279
/* B633C 8011FC3C 0040182D */ daddu $v1, $v0, $zero
/* B6340 8011FC40 24420008 */ addiu $v0, $v0, 8
/* B6344 8011FC44 AD220000 */ sw $v0, ($t1)
/* B6348 8011FC48 AC650000 */ sw $a1, ($v1)
/* B634C 8011FC4C 08047F1D */ j .L8011FC74
/* B6350 8011FC50 AC640004 */ sw $a0, 4($v1)
.L8011FC54:
/* B6354 8011FC54 8D220000 */ lw $v0, ($t1)
/* B6358 8011FC58 34841E04 */ ori $a0, $a0, 0x1e04
/* B635C 8011FC5C 0040182D */ daddu $v1, $v0, $zero
/* B6360 8011FC60 24420008 */ addiu $v0, $v0, 8
/* B6364 8011FC64 AD220000 */ sw $v0, ($t1)
/* B6368 8011FC68 2402F3F8 */ addiu $v0, $zero, -0xc08
/* B636C 8011FC6C AC640000 */ sw $a0, ($v1)
/* B6370 8011FC70 AC620004 */ sw $v0, 4($v1)
.L8011FC74:
/* B6374 8011FC74 3C10800A */ lui $s0, %hi(gMainGfxPos)
/* B6378 8011FC78 2610A66C */ addiu $s0, $s0, %lo(gMainGfxPos)
/* B637C 8011FC7C 8E020000 */ lw $v0, ($s0)
/* B6380 8011FC80 3C11E700 */ lui $s1, 0xe700
/* B6384 8011FC84 0040182D */ daddu $v1, $v0, $zero
/* B6388 8011FC88 AC710000 */ sw $s1, ($v1)
/* B638C 8011FC8C AC600004 */ sw $zero, 4($v1)
/* B6390 8011FC90 8FAA0040 */ lw $t2, 0x40($sp)
/* B6394 8011FC94 8D4302D4 */ lw $v1, 0x2d4($t2)
/* B6398 8011FC98 24420008 */ addiu $v0, $v0, 8
/* B639C 8011FC9C 10600004 */ beqz $v1, .L8011FCB0
/* B63A0 8011FCA0 AE020000 */ sw $v0, ($s0)
/* B63A4 8011FCA4 8D4402D8 */ lw $a0, 0x2d8($t2)
/* B63A8 8011FCA8 0060F809 */ jalr $v1
/* B63AC 8011FCAC 00000000 */ nop
.L8011FCB0:
/* B63B0 8011FCB0 8E040000 */ lw $a0, ($s0)
/* B63B4 8011FCB4 0080102D */ daddu $v0, $a0, $zero
/* B63B8 8011FCB8 AC510000 */ sw $s1, ($v0)
/* B63BC 8011FCBC AC400004 */ sw $zero, 4($v0)
/* B63C0 8011FCC0 8EC50000 */ lw $a1, ($s6)
/* B63C4 8011FCC4 24840008 */ addiu $a0, $a0, 8
/* B63C8 8011FCC8 10A00089 */ beqz $a1, .L8011FEF0
/* B63CC 8011FCCC AE040000 */ sw $a0, ($s0)
/* B63D0 8011FCD0 86C200F8 */ lh $v0, 0xf8($s6)
/* B63D4 8011FCD4 04410008 */ bgez $v0, .L8011FCF8
/* B63D8 8011FCD8 240200DF */ addiu $v0, $zero, 0xdf
/* B63DC 8011FCDC 3C02DE00 */ lui $v0, 0xde00
/* B63E0 8011FCE0 AC820000 */ sw $v0, ($a0)
/* B63E4 8011FCE4 8EC30000 */ lw $v1, ($s6)
/* B63E8 8011FCE8 24820008 */ addiu $v0, $a0, 8
/* B63EC 8011FCEC AE020000 */ sw $v0, ($s0)
/* B63F0 8011FCF0 08047FBC */ j .L8011FEF0
/* B63F4 8011FCF4 AC830004 */ sw $v1, 4($a0)
.L8011FCF8:
/* B63F8 8011FCF8 90A30000 */ lbu $v1, ($a1)
/* B63FC 8011FCFC 10620008 */ beq $v1, $v0, .L8011FD20
/* B6400 8011FD00 0000202D */ daddu $a0, $zero, $zero
/* B6404 8011FD04 0040302D */ daddu $a2, $v0, $zero
/* B6408 8011FD08 24A20008 */ addiu $v0, $a1, 8
.L8011FD0C:
/* B640C 8011FD0C 24840001 */ addiu $a0, $a0, 1
/* B6410 8011FD10 8C450000 */ lw $a1, ($v0)
/* B6414 8011FD14 00051E02 */ srl $v1, $a1, 0x18
/* B6418 8011FD18 1466FFFC */ bne $v1, $a2, .L8011FD0C
/* B641C 8011FD1C 24420008 */ addiu $v0, $v0, 8
.L8011FD20:
/* B6420 8011FD20 24840001 */ addiu $a0, $a0, 1
/* B6424 8011FD24 0000182D */ daddu $v1, $zero, $zero
/* B6428 8011FD28 3C058015 */ lui $a1, %hi(D_801536C0)
/* B642C 8011FD2C 24A536C0 */ addiu $a1, $a1, %lo(D_801536C0)
/* B6430 8011FD30 000310C0 */ sll $v0, $v1, 3
.L8011FD34:
/* B6434 8011FD34 0045B821 */ addu $s7, $v0, $a1
/* B6438 8011FD38 8EE20000 */ lw $v0, ($s7)
/* B643C 8011FD3C 04400006 */ bltz $v0, .L8011FD58
/* B6440 8011FD40 28620060 */ slti $v0, $v1, 0x60
/* B6444 8011FD44 24630001 */ addiu $v1, $v1, 1
/* B6448 8011FD48 28620060 */ slti $v0, $v1, 0x60
/* B644C 8011FD4C 1440FFF9 */ bnez $v0, .L8011FD34
/* B6450 8011FD50 000310C0 */ sll $v0, $v1, 3
/* B6454 8011FD54 28620060 */ slti $v0, $v1, 0x60
.L8011FD58:
/* B6458 8011FD58 14400003 */ bnez $v0, .L8011FD68
/* B645C 8011FD5C 00000000 */ nop
.L8011FD60:
/* B6460 8011FD60 08047F58 */ j .L8011FD60
/* B6464 8011FD64 00000000 */ nop
.L8011FD68:
/* B6468 8011FD68 0C00AB0A */ jal general_heap_malloc
/* B646C 8011FD6C 000420C0 */ sll $a0, $a0, 3
/* B6470 8011FD70 0040982D */ daddu $s3, $v0, $zero
/* B6474 8011FD74 16600003 */ bnez $s3, .L8011FD84
/* B6478 8011FD78 AEF30004 */ sw $s3, 4($s7)
.L8011FD7C:
/* B647C 8011FD7C 08047F5F */ j .L8011FD7C
/* B6480 8011FD80 00000000 */ nop
.L8011FD84:
/* B6484 8011FD84 0000A82D */ daddu $s5, $zero, $zero
/* B6488 8011FD88 24020003 */ addiu $v0, $zero, 3
/* B648C 8011FD8C AEE20000 */ sw $v0, ($s7)
/* B6490 8011FD90 8EC20000 */ lw $v0, ($s6)
/* B6494 8011FD94 8C450000 */ lw $a1, ($v0)
/* B6498 8011FD98 8C470004 */ lw $a3, 4($v0)
/* B649C 8011FD9C 240200DF */ addiu $v0, $zero, 0xdf
/* B64A0 8011FDA0 00051E02 */ srl $v1, $a1, 0x18
/* B64A4 8011FDA4 10620044 */ beq $v1, $v0, .L8011FEB8
/* B64A8 8011FDA8 24140002 */ addiu $s4, $zero, 2
/* B64AC 8011FDAC 3C1E0100 */ lui $fp, 0x100
/* B64B0 8011FDB0 2672FFFC */ addiu $s2, $s3, -4
.L8011FDB4:
/* B64B4 8011FDB4 24020001 */ addiu $v0, $zero, 1
/* B64B8 8011FDB8 5462002F */ bnel $v1, $v0, .L8011FE78
/* B64BC 8011FDBC 0260102D */ daddu $v0, $s3, $zero
/* B64C0 8011FDC0 00451006 */ srlv $v0, $a1, $v0
/* B64C4 8011FDC4 3051007F */ andi $s1, $v0, 0x7f
/* B64C8 8011FDC8 00051302 */ srl $v0, $a1, 0xc
/* B64CC 8011FDCC 305000FF */ andi $s0, $v0, 0xff
/* B64D0 8011FDD0 8EC200FC */ lw $v0, 0xfc($s6)
/* B64D4 8011FDD4 14400010 */ bnez $v0, .L8011FE18
/* B64D8 8011FDD8 02308823 */ subu $s1, $s1, $s0
/* B64DC 8011FDDC 26520008 */ addiu $s2, $s2, 8
/* B64E0 8011FDE0 26730008 */ addiu $s3, $s3, 8
/* B64E4 8011FDE4 00101300 */ sll $v0, $s0, 0xc
/* B64E8 8011FDE8 02301821 */ addu $v1, $s1, $s0
/* B64EC 8011FDEC 3063007F */ andi $v1, $v1, 0x7f
/* B64F0 8011FDF0 00031840 */ sll $v1, $v1, 1
/* B64F4 8011FDF4 007E1825 */ or $v1, $v1, $fp
/* B64F8 8011FDF8 86C400F8 */ lh $a0, 0xf8($s6)
/* B64FC 8011FDFC 00431025 */ or $v0, $v0, $v1
/* B6500 8011FE00 AE42FFFC */ sw $v0, -4($s2)
/* B6504 8011FE04 00952021 */ addu $a0, $a0, $s5
/* B6508 8011FE08 00042100 */ sll $a0, $a0, 4
/* B650C 8011FE0C 00E41821 */ addu $v1, $a3, $a0
/* B6510 8011FE10 08047F9C */ j .L8011FE70
/* B6514 8011FE14 AE430000 */ sw $v1, ($s2)
.L8011FE18:
/* B6518 8011FE18 02C0282D */ daddu $a1, $s6, $zero
/* B651C 8011FE1C 26520008 */ addiu $s2, $s2, 8
/* B6520 8011FE20 8FA40040 */ lw $a0, 0x40($sp)
/* B6524 8011FE24 86C200F8 */ lh $v0, 0xf8($s6)
/* B6528 8011FE28 26730008 */ addiu $s3, $s3, 8
/* B652C 8011FE2C AFB10010 */ sw $s1, 0x10($sp)
/* B6530 8011FE30 AFB50014 */ sw $s5, 0x14($sp)
/* B6534 8011FE34 00551021 */ addu $v0, $v0, $s5
/* B6538 8011FE38 00023040 */ sll $a2, $v0, 1
/* B653C 8011FE3C 00C23021 */ addu $a2, $a2, $v0
/* B6540 8011FE40 00063040 */ sll $a2, $a2, 1
/* B6544 8011FE44 00E63021 */ addu $a2, $a3, $a2
/* B6548 8011FE48 0C0477A0 */ jal animator_copy_vertices_to_buffer
/* B654C 8011FE4C 0200382D */ daddu $a3, $s0, $zero
/* B6550 8011FE50 00102300 */ sll $a0, $s0, 0xc
/* B6554 8011FE54 02301821 */ addu $v1, $s1, $s0
/* B6558 8011FE58 3063007F */ andi $v1, $v1, 0x7f
/* B655C 8011FE5C 00031840 */ sll $v1, $v1, 1
/* B6560 8011FE60 007E1825 */ or $v1, $v1, $fp
/* B6564 8011FE64 00832025 */ or $a0, $a0, $v1
/* B6568 8011FE68 AE44FFFC */ sw $a0, -4($s2)
/* B656C 8011FE6C AE420000 */ sw $v0, ($s2)
.L8011FE70:
/* B6570 8011FE70 08047FA2 */ j .L8011FE88
/* B6574 8011FE74 02B0A821 */ addu $s5, $s5, $s0
.L8011FE78:
/* B6578 8011FE78 26520008 */ addiu $s2, $s2, 8
/* B657C 8011FE7C 26730008 */ addiu $s3, $s3, 8
/* B6580 8011FE80 AC450000 */ sw $a1, ($v0)
/* B6584 8011FE84 AC470004 */ sw $a3, 4($v0)
.L8011FE88:
/* B6588 8011FE88 00141080 */ sll $v0, $s4, 2
/* B658C 8011FE8C 26940001 */ addiu $s4, $s4, 1
/* B6590 8011FE90 00141880 */ sll $v1, $s4, 2
/* B6594 8011FE94 8EC40000 */ lw $a0, ($s6)
/* B6598 8011FE98 00441021 */ addu $v0, $v0, $a0
/* B659C 8011FE9C 00641821 */ addu $v1, $v1, $a0
/* B65A0 8011FEA0 8C450000 */ lw $a1, ($v0)
/* B65A4 8011FEA4 240200DF */ addiu $v0, $zero, 0xdf
/* B65A8 8011FEA8 8C670000 */ lw $a3, ($v1)
/* B65AC 8011FEAC 00051E02 */ srl $v1, $a1, 0x18
/* B65B0 8011FEB0 1462FFC0 */ bne $v1, $v0, .L8011FDB4
/* B65B4 8011FEB4 26940001 */ addiu $s4, $s4, 1
.L8011FEB8:
/* B65B8 8011FEB8 3C05800A */ lui $a1, %hi(gMainGfxPos)
/* B65BC 8011FEBC 24A5A66C */ addiu $a1, $a1, %lo(gMainGfxPos)
/* B65C0 8011FEC0 0260202D */ daddu $a0, $s3, $zero
/* B65C4 8011FEC4 8CA30000 */ lw $v1, ($a1)
/* B65C8 8011FEC8 3C02DF00 */ lui $v0, 0xdf00
/* B65CC 8011FECC AC820000 */ sw $v0, ($a0)
/* B65D0 8011FED0 3C02DE00 */ lui $v0, 0xde00
/* B65D4 8011FED4 AC800004 */ sw $zero, 4($a0)
/* B65D8 8011FED8 0060202D */ daddu $a0, $v1, $zero
/* B65DC 8011FEDC AC820000 */ sw $v0, ($a0)
/* B65E0 8011FEE0 8EE20004 */ lw $v0, 4($s7)
/* B65E4 8011FEE4 24630008 */ addiu $v1, $v1, 8
/* B65E8 8011FEE8 ACA30000 */ sw $v1, ($a1)
/* B65EC 8011FEEC AC820004 */ sw $v0, 4($a0)
.L8011FEF0:
/* B65F0 8011FEF0 0000882D */ daddu $s1, $zero, $zero
/* B65F4 8011FEF4 3C03800A */ lui $v1, %hi(gMainGfxPos)
/* B65F8 8011FEF8 2463A66C */ addiu $v1, $v1, %lo(gMainGfxPos)
/* B65FC 8011FEFC 8C620000 */ lw $v0, ($v1)
/* B6600 8011FF00 02C0802D */ daddu $s0, $s6, $zero
/* B6604 8011FF04 0040202D */ daddu $a0, $v0, $zero
/* B6608 8011FF08 24420008 */ addiu $v0, $v0, 8
/* B660C 8011FF0C AC620000 */ sw $v0, ($v1)
/* B6610 8011FF10 3C02E700 */ lui $v0, 0xe700
/* B6614 8011FF14 AC820000 */ sw $v0, ($a0)
/* B6618 8011FF18 AC800004 */ sw $zero, 4($a0)
.L8011FF1C:
/* B661C 8011FF1C 8E050004 */ lw $a1, 4($s0)
/* B6620 8011FF20 50A00005 */ beql $a1, $zero, .L8011FF38
/* B6624 8011FF24 26310001 */ addiu $s1, $s1, 1
/* B6628 8011FF28 8FA40040 */ lw $a0, 0x40($sp)
/* B662C 8011FF2C 0C047E95 */ jal appendGfx_animator_node
/* B6630 8011FF30 26C600B4 */ addiu $a2, $s6, 0xb4
/* B6634 8011FF34 26310001 */ addiu $s1, $s1, 1
.L8011FF38:
/* B6638 8011FF38 2A220020 */ slti $v0, $s1, 0x20
/* B663C 8011FF3C 1440FFF7 */ bnez $v0, .L8011FF1C
/* B6640 8011FF40 26100004 */ addiu $s0, $s0, 4
.L8011FF44:
/* B6644 8011FF44 8FBF003C */ lw $ra, 0x3c($sp)
/* B6648 8011FF48 8FBE0038 */ lw $fp, 0x38($sp)
/* B664C 8011FF4C 8FB70034 */ lw $s7, 0x34($sp)
/* B6650 8011FF50 8FB60030 */ lw $s6, 0x30($sp)
/* B6654 8011FF54 8FB5002C */ lw $s5, 0x2c($sp)
/* B6658 8011FF58 8FB40028 */ lw $s4, 0x28($sp)
/* B665C 8011FF5C 8FB30024 */ lw $s3, 0x24($sp)
/* B6660 8011FF60 8FB20020 */ lw $s2, 0x20($sp)
/* B6664 8011FF64 8FB1001C */ lw $s1, 0x1c($sp)
/* B6668 8011FF68 8FB00018 */ lw $s0, 0x18($sp)
/* B666C 8011FF6C 03E00008 */ jr $ra
/* B6670 8011FF70 27BD0040 */ addiu $sp, $sp, 0x40