diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index c925eda39..0e25737d1 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -17156,6 +17156,44 @@ glabel func0f028e6c /* f028f78: 00601025 */ or $v0,$v1,$zero ); +// Mismatch: Reordered instructions +//bool func0f028e6c(s32 arg0, struct prop *prop, struct prop **propptr, struct modelnode **nodeptr, struct model **modelptr) +//{ +// while (true) { +// bool result = false; +// struct model *model; +// s32 stack; +// +// if (prop->type == PROPTYPE_CHR || prop->type == PROPTYPE_PLAYER) { +// model = prop->chr->model; +// } else { +// model = prop->obj->model; +// } +// +// if (1); +// +// if (arg0 >= model->filedata->nummatrices) { +// arg0 -= model->filedata->nummatrices; +// +// if (prop->child) { +// result = func0f028e6c(arg0, prop->child, propptr, nodeptr, modelptr); +// } +// +// if (prop->next && !result) { +// prop = prop->next; +// continue; +// } +// } else { +// *propptr = prop; +// *nodeptr = func0001a634(model, arg0); +// *modelptr = model; +// result = true; +// } +// +// return result; +// } +//} + GLOBAL_ASM( glabel func0f028f7c /* f028f7c: 27bdffd8 */ addiu $sp,$sp,-40 @@ -17383,18 +17421,18 @@ void func0f0292bc(struct prop *prop) s32 func0f02932c(struct prop *prop, s32 arg1) { s32 result = -1; - struct prop *sp38; - struct prop *sp34; - struct prop *sp30; - struct prop *sp2c; + struct modelnode *node2; + struct prop *prop2; + struct modelnode *node; + struct model *model; - if (func0f028e6c(arg1, prop, &sp34, &sp30, &sp2c) && sp30) { - sp38 = func0001a784(sp30); + if (func0f028e6c(arg1, prop, &prop2, &node, &model) && node) { + node2 = func0001a784(node); - if (sp38) { - result = func0f028e18(sp34, sp38, sp2c, prop); - } else if (sp34->parent && sp2c->parent && sp2c->child) { - result = func0f028e18(sp34->parent, sp2c->child, sp2c->parent, prop); + if (node2) { + result = func0f028e18(prop2, node2, model, prop); + } else if (prop2->parent && model->attachedto && model->unk1c) { + result = func0f028e18(prop2->parent, model->unk1c, model->attachedto, prop); } } diff --git a/src/include/game/chr/chr.h b/src/include/game/chr/chr.h index 2f73424f8..aaa2c2696 100644 --- a/src/include/game/chr/chr.h +++ b/src/include/game/chr/chr.h @@ -46,9 +46,8 @@ u32 func0f027e1c(void); void func0f028498(bool value); void func0f028590(f32 arg0); u32 func0f028a50(void); -u32 func0f028d50(void); -s32 func0f028e18(struct prop *arg0, struct prop *arg1, struct prop *arg2, struct prop *arg3); -s32 func0f028e6c(s32 arg0, struct prop *arg1, struct prop **arg2, struct prop **arg3, struct prop **arg4); +s32 func0f028e18(struct prop *arg0, struct modelnode *arg1, struct model *arg2, struct prop *arg3); +bool func0f028e6c(s32 arg0, struct prop *prop, struct prop **propptr, struct modelnode **nodeptr, struct model **modelptr); void func0f028f7c(struct prop *prop, f32 shield, struct prop *arg2, struct modelnode *node, struct model *model, s32 side, s32 arg6); void func0f0291d4(struct var80062a8c *thing); void func0f0292bc(struct prop *prop); diff --git a/src/include/lib/model.h b/src/include/lib/model.h index a073ff2aa..d90134882 100644 --- a/src/include/lib/model.h +++ b/src/include/lib/model.h @@ -10,9 +10,9 @@ void func0001a518(void *callback); s32 func0001a524(struct modelnode *node, s32 arg1); Mtxf *func0001a5cc(struct model *model, struct modelnode *node, s32 arg2); u32 func0001a60c(void); -u32 func0001a634(void); +struct modelnode *func0001a634(struct model *model, s32 arg1); u32 func0001a740(void); -struct prop *func0001a784(struct prop *prop); +struct modelnode *func0001a784(struct modelnode *node); u32 func0001a7cc(void); u32 func0001a85c(void); struct modelnode *modelGetPart(struct modelfiledata *arg0, s32 partnum);