diff --git a/include/functions.h b/include/functions.h index 7f5b9cc1..d53ca901 100644 --- a/include/functions.h +++ b/include/functions.h @@ -86,13 +86,13 @@ extern void sub_0806F69C(Entity*); extern void sub_0805E3A0(void*, u32); extern void sub_0806D0B0(Entity*); extern void sub_0807DD64(Entity*); -extern void sub_0807DDAC(Entity*, u32); +extern void sub_0807DDAC(Entity*, void(*function)(Entity*, ScriptExecutionContext*)); extern void sub_0807DDE4(Entity*); extern void sub_0806D02C(Entity*); extern u32 sub_0806F5A4(u32); extern void sub_08078784(Entity*, u32); extern void sub_0807DD50(Entity*); -extern void sub_0807DD94(Entity*, u32); +extern void sub_0807DD94(Entity*, void(*function)(Entity*, ScriptExecutionContext*)); extern s32 sub_0806ED9C(Entity*, u32, u32); extern void sub_0807000C(Entity*); extern void sub_0805E47C(Entity*); @@ -106,7 +106,6 @@ extern void sub_0806FD3C(Entity*); extern u32 sub_0801E99C(Entity*); extern void sub_0807DD50(Entity*); extern void sub_0806F118(Entity*); -extern void sub_0807DD94(Entity*, u32); extern void sub_0805ED14(u32*); extern void sub_080A7C18(u32, u32, u32); extern void sub_08068BEC(Entity*, u32); diff --git a/src/code_0807CC3C.c b/src/code_0807CC3C.c index 68bea878..040cb763 100644 --- a/src/code_0807CC3C.c +++ b/src/code_0807CC3C.c @@ -418,21 +418,20 @@ void sub_0807DD80(Entity* entity, u32 unk1) { sub_0807DD64(entity); } -void sub_0807DD94(Entity* entity, u32 param_2) { - sub_0807DDAC(entity, param_2); +void sub_0807DD94(Entity* entity, void(*function)(Entity*, ScriptExecutionContext*)) { + sub_0807DDAC(entity, function); sub_0807DDE4(entity); sub_0807DE80(entity); } -// TODO: make this a proper function pointer -void sub_0807DDAC(Entity* entity, u32 address) { +void sub_0807DDAC(Entity* entity, void(*function)(Entity*, ScriptExecutionContext*)) { ScriptExecutionContext** piVar1; piVar1 = (ScriptExecutionContext**)&entity->cutsceneBeh; if (*piVar1) { ExecuteScriptCommandSet(entity, *piVar1); - if (address) { - _call_via_r6(entity, *piVar1); + if (function) { + function(entity, *piVar1); } else { sub_0807DB98(entity, *piVar1); } diff --git a/src/npc/beedle.c b/src/npc/beedle.c index 6e6a525a..da25ab1b 100644 --- a/src/npc/beedle.c +++ b/src/npc/beedle.c @@ -108,7 +108,7 @@ void sub_08063410(Entity* this) { if (this->entityType.form != 0) { sub_0806346C(this); } - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0807DDE4(this); GetNextFrame(this); } diff --git a/src/npc/bigGoron.c b/src/npc/bigGoron.c index bb28c9f0..94a6e085 100644 --- a/src/npc/bigGoron.c +++ b/src/npc/bigGoron.c @@ -9,7 +9,6 @@ extern void (*gUnk_081140D4[])(Entity*); extern u16 gUnk_081140CC[]; extern void sub_0806D0B0(Entity*); extern void sub_0807DD64(Entity*); -extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern void PlaySFX(u32); extern void sub_0806D02C(Entity*); @@ -28,7 +27,7 @@ void sub_0806CF30(Entity* this) { sub_0806D0B0(this); sub_0807DD64(this); } else { - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0807DDE4(this); } diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c index f127acf4..3bdc6170 100644 --- a/src/npc/forestMinish.c +++ b/src/npc/forestMinish.c @@ -10,7 +10,6 @@ extern void sub_0807DD50(Entity*); extern void sub_0806F118(Entity*); -extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern void sub_080600F0(Entity*); extern s32 sub_0806EDD8(Entity*, u32, u32); @@ -51,7 +50,7 @@ void ForestMinish(Entity* this) { this->interactType = 0; sub_0806F118(this); } else { - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0807DDE4(this); if (this->frameDuration != 0xf0) { sub_080600F0(this); diff --git a/src/npc/mayorHagen.c b/src/npc/mayorHagen.c index ffa5b0c6..a56ded98 100644 --- a/src/npc/mayorHagen.c +++ b/src/npc/mayorHagen.c @@ -14,7 +14,6 @@ extern void sub_0807DD50(Entity*); extern u32 sub_0806F5A4(u32); extern void sub_0806F118(Entity*); extern void sub_08078784(Entity*, u32); -extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern void sub_08078850(); extern u32 gUnk_08113F44; @@ -43,7 +42,7 @@ void MayorHagen(Entity* this) { sub_0806F118(this); break; } - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0807DDE4(this); UpdateAnimationSingleFrame(this); break; diff --git a/src/npc/melari.c b/src/npc/melari.c index ed324001..1b09ecb6 100644 --- a/src/npc/melari.c +++ b/src/npc/melari.c @@ -8,7 +8,6 @@ extern void sub_08068780(Entity*); extern void sub_08078778(Entity*); extern void sub_0807DD50(Entity*); extern void sub_0806F118(Entity*); -extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern u32 sub_080040A8(Entity*); extern void EnqueueSFX(u32); @@ -82,7 +81,7 @@ void sub_08068780(Entity* this) { this->interactType = 0; sub_0806F118(this); } else { - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0807DDE4(this); GetNextFrame(this); } diff --git a/src/npc/mutoh.c b/src/npc/mutoh.c index c3084796..deed814f 100644 --- a/src/npc/mutoh.c +++ b/src/npc/mutoh.c @@ -12,7 +12,6 @@ extern void sub_0807DD50(Entity*); extern u32 GetFacingDirection(Entity*, Entity*); extern u32 sub_0806F5A4(u32); extern void sub_0806F118(Entity*); -extern void sub_0807DD94(Entity*, u32); extern u32 UpdateFuseInteraction(Entity*); extern void sub_0807000C(Entity*); extern u32 sub_0801E99C(Entity*); @@ -43,7 +42,7 @@ void Mutoh(Entity* this) { InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)) + 4); sub_0806F118(this); } else { - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } break; case 2: diff --git a/src/npc/percy.c b/src/npc/percy.c index 47a9fa43..3d18ed35 100644 --- a/src/npc/percy.c +++ b/src/npc/percy.c @@ -77,7 +77,7 @@ void sub_0806B41C(Entity* this) { sub_0801DFB4(this, tmp[0], tmp[1], tmp[2]); gPlayerState.field_0x8b = 3; } else { - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } break; case 2: diff --git a/src/npc/postman.c b/src/npc/postman.c index 8f387f04..266c3fb6 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -22,7 +22,6 @@ extern void sub_0806F118(Entity*); extern u32 sub_0806F5A4(u32); extern u32 GetFacingDirection(Entity*, Entity*); extern void sub_080606D8(Entity*); -extern void sub_0807DD94(Entity*, u32); extern void sub_080788E0(Entity*); extern void EnqueueSFX(u32); extern void sub_080606C0(Entity*); @@ -145,7 +144,7 @@ void sub_08060528(Entity* this) { sub_080606D8(this); InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity))); } else { - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } } break; diff --git a/src/npc/rem.c b/src/npc/rem.c index 415f7ffa..22d13c31 100644 --- a/src/npc/rem.c +++ b/src/npc/rem.c @@ -2,11 +2,9 @@ #include "functions.h" #include "entity.h" -extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern void PlaySFX(u32); extern void sub_0806A8C8(Entity*); -extern void sub_0807DD94(Entity*, u32); extern void (*gUnk_08112260[])(Entity*); extern void (*gUnk_08112278[])(Entity*); @@ -21,7 +19,7 @@ void sub_0806a370(Entity* this) { u8* pbVar1; gUnk_08112278[this->action](this); - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0807DDE4(this); UpdateAnimationSingleFrame(this); sub_0806ED78(this); @@ -47,5 +45,5 @@ void sub_0806A3D8(Entity* this) { sub_0806A8C8(this); uVar1 = StartCutscene(this, &gUnk_08012F0C); *(u32*)&this->cutsceneBeh = (u32)uVar1; - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } diff --git a/src/npc/simon.c b/src/npc/simon.c index 7c4b7f48..deb8d73e 100644 --- a/src/npc/simon.c +++ b/src/npc/simon.c @@ -22,7 +22,7 @@ void Simon(Entity* this) { this->action++; sub_0807DD50(this); } else { - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } } diff --git a/src/npc/smith.c b/src/npc/smith.c index 430b12af..50772b83 100644 --- a/src/npc/smith.c +++ b/src/npc/smith.c @@ -12,8 +12,6 @@ extern void PlaySFX(u32); extern void sub_0807000C(Entity*); extern u32 sub_0801E99C(Entity*); extern void sub_0807DD50(Entity*); -extern void sub_0807DD94(Entity*, u32); -extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern u32 UpdateFuseInteraction(Entity*); extern u32 GetAnimationState(Entity*); @@ -118,7 +116,7 @@ void sub_08066178(Entity* this) { } void sub_080661B0(Entity* this) { - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } void sub_080661BC(Entity* this) { @@ -131,12 +129,12 @@ void sub_080661BC(Entity* this) { InitAnimationForceUpdate(this, this->field_0x80.HWORD); } } else { - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } } void sub_08066200(Entity* this) { - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0807DDE4(this); UpdateAnimationSingleFrame(this); } diff --git a/src/npc/stamp.c b/src/npc/stamp.c index f77b1fdd..652e6710 100644 --- a/src/npc/stamp.c +++ b/src/npc/stamp.c @@ -8,7 +8,6 @@ extern void sub_0805E47C(Entity*); extern void sub_0805E584(); extern void sub_0807DD64(); extern void sub_08062CA4(); -extern void sub_0807DDAC(); extern void sub_0807DDE4(); extern u32 CheckKinstoneFused(); @@ -68,7 +67,7 @@ void sub_08062C7C(Entity* ent) { } void sub_08062CA4(Entity* ent) { - sub_0807DDAC(ent, 0); + sub_0807DDAC(ent, NULL); sub_0807DDE4(ent); GetNextFrame(ent); } diff --git a/src/npc/talon.c b/src/npc/talon.c index b4ddbe84..302321de 100644 --- a/src/npc/talon.c +++ b/src/npc/talon.c @@ -77,7 +77,7 @@ void sub_08065648(Entity* this) { this->interactType = 0; sub_0806F118(this); } else { - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } } @@ -118,7 +118,7 @@ void sub_080656D4(Entity* this) { } } else { label2: - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } } } diff --git a/src/npc/teachers.c b/src/npc/teachers.c index 2e0e99fd..b633b3d0 100644 --- a/src/npc/teachers.c +++ b/src/npc/teachers.c @@ -9,7 +9,6 @@ extern void sub_0807DD50(Entity*); extern u32 GetFacingDirection(Entity*, Entity*); extern u32 sub_0806F5A4(u32); extern void sub_0806F118(Entity*); -extern void sub_0807DD94(Entity*, u32); extern void sub_08078784(Entity*, u32); extern u32 UpdateFuseInteraction(Entity*); extern void sub_0807000C(Entity*); @@ -37,7 +36,7 @@ void Teachers(Entity* this) { (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity))); sub_0806F118(this); } else { - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); } break; case 2: diff --git a/src/npc/townMinish.c b/src/npc/townMinish.c index 3eab0a5a..6ed67b2e 100644 --- a/src/npc/townMinish.c +++ b/src/npc/townMinish.c @@ -111,7 +111,7 @@ void sub_0806ACC4(Entity* this) { this->interactType = 0; sub_0806F118(this); } else { - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0806AEA8(this); if (this->entityType.parameter == 10 && this->interactType) { this->action = 2; diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c index 1c05c1a4..90e2490a 100644 --- a/src/npc/townsperson.c +++ b/src/npc/townsperson.c @@ -30,7 +30,6 @@ extern void sub_08061D64(Entity*); extern void sub_0806F118(Entity*); extern u32 sub_0806F5A4(u32); extern u32 GetFacingDirection(Entity*, Entity*); -extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern void sub_08062048(Entity*); extern void sub_08078784(Entity*, u32); @@ -144,7 +143,7 @@ void sub_08061D64(Entity* this) { this->field_0x68.HALF.HI = this->animIndex; InitializeAnimation(this, (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity))); } else { - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0807DDE4(this); if (this->frameDuration == 0xff) { this->frameDuration = gUnk_0810B680[this->entityType.form].unk2; diff --git a/src/npc/windTribespeople.c b/src/npc/windTribespeople.c index bb09a0c8..b1499f01 100644 --- a/src/npc/windTribespeople.c +++ b/src/npc/windTribespeople.c @@ -11,7 +11,6 @@ extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); extern void sub_0807DD50(Entity*); extern void sub_0806C7D4(Entity*); extern void sub_0806F118(Entity*); -extern void sub_0807DD94(Entity*, u32); extern void sub_0807DD80(Entity*, u32*); extern u32 sub_0801E99C(); extern void sub_08078784(Entity*, u32); @@ -54,7 +53,7 @@ void sub_0806C7D4(Entity* this) { this->interactType = '\0'; sub_0806F118(this); } else { - sub_0807DD94(this, 0); + sub_0807DD94(this, NULL); if ((this->entityType.parameter == 3) && (!CheckGlobalFlag(WARP_EVENT_END)) && (CheckLocalFlag(0x63)) && (CheckRoomFlag(0))) { (this->entityType).parameter = 7; diff --git a/src/npc/zelda.c b/src/npc/zelda.c index b7dec220..ea12cf4b 100644 --- a/src/npc/zelda.c +++ b/src/npc/zelda.c @@ -6,7 +6,6 @@ extern void PrependEntityToList(Entity*, u32); extern void sub_0807DD50(Entity*); -extern void sub_0807DD94(Entity*, u32); extern Entity* FindEntityBySubtype(u32, u32); void CopyPosition(Entity*, Entity*); void sub_08068680(Entity*, Entity*); @@ -37,7 +36,7 @@ void sub_08066CCC(Entity* ent) { } void sub_08066CF8(Entity* ent) { - sub_0807DD94(ent, 0); + sub_0807DD94(ent, NULL); } void sub_08066D04(Entity* ent) { diff --git a/src/object/windcrest.c b/src/object/windcrest.c index ff559344..4b96f901 100644 --- a/src/object/windcrest.c +++ b/src/object/windcrest.c @@ -4,7 +4,6 @@ #include "save.h" extern void sub_0807DD64(Entity*); -extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern void sub_08078850(Entity*, u32, u32, u8*); extern void PlaySFX(u32); @@ -18,7 +17,7 @@ void Windcrest(Entity* this) { this->frameIndex = 0; sub_0807DD64(this); } - sub_0807DDAC(this, 0); + sub_0807DDAC(this, NULL); sub_0807DDE4(this); }