Quest log entry to union

This commit is contained in:
GriffinR
2022-11-10 13:25:17 -05:00
parent 78b07aace5
commit 9721926b58
4 changed files with 86 additions and 69 deletions
+16 -5
View File
@@ -12,11 +12,22 @@
struct QuestLogEntry struct QuestLogEntry
{ {
// When command == 2, these fields have different meanings union {
u8 localId; // cmd == 2: Pressed A/B, checked wild, held direction, took step struct {
u8 mapNum; // cmd == 2: Always set to 0 u8 localId;
u8 mapGroup; // cmd == 2: Dpad direction u8 mapNum;
u8 animId; // cmd == 2: Always set to 0 u8 mapGroup;
u8 movementActionId;
} a; // Data when command == 0
struct {
u8 localId;
u8 mapNum;
u8 mapGroup;
u8 gfxState;
} b; // Data when command == 1
u8 fieldInput[4]; // Data when command == 2
u8 raw[4];
} data;
u16 duration; u16 duration;
u8 command; u8 command;
}; };
+3 -3
View File
@@ -5262,13 +5262,13 @@ static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *objectEvent
return FALSE; return FALSE;
} }
static void ObjectEventSetSingleMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 animId) static void ObjectEventSetSingleMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 movementActionId)
{ {
objectEvent->movementActionId = animId; objectEvent->movementActionId = movementActionId;
sprite->data[2] = 0; sprite->data[2] = 0;
if (gQuestLogPlaybackState == QL_PLAYBACK_STATE_2) if (gQuestLogPlaybackState == QL_PLAYBACK_STATE_2)
QuestLogRecordNPCStep(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, animId); QuestLogRecordNPCStep(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, movementActionId);
} }
static void FaceDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction) static void FaceDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction)
+43 -37
View File
@@ -1316,10 +1316,10 @@ void QuestLogRecordNPCStep(u8 localId, u8 mapNum, u8 mapGroup, u8 movementAction
{ {
sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay;
sCurQuestLogEntry[sQuestLogCursor].command = 0; sCurQuestLogEntry[sQuestLogCursor].command = 0;
sCurQuestLogEntry[sQuestLogCursor].localId = localId; sCurQuestLogEntry[sQuestLogCursor].data.a.localId = localId;
sCurQuestLogEntry[sQuestLogCursor].mapNum = mapNum; sCurQuestLogEntry[sQuestLogCursor].data.a.mapNum = mapNum;
sCurQuestLogEntry[sQuestLogCursor].mapGroup = mapGroup; sCurQuestLogEntry[sQuestLogCursor].data.a.mapGroup = mapGroup;
sCurQuestLogEntry[sQuestLogCursor].animId = movementActionId; sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId = movementActionId;
sQuestLogCursor++; sQuestLogCursor++;
sNextStepDelay = 0; sNextStepDelay = 0;
} }
@@ -1331,10 +1331,10 @@ void QuestLogRecordNPCStepWithDuration(u8 localId, u8 mapNum, u8 mapGroup, u8 mo
{ {
sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay;
sCurQuestLogEntry[sQuestLogCursor].command = 0; sCurQuestLogEntry[sQuestLogCursor].command = 0;
sCurQuestLogEntry[sQuestLogCursor].localId = localId; sCurQuestLogEntry[sQuestLogCursor].data.a.localId = localId;
sCurQuestLogEntry[sQuestLogCursor].mapNum = mapNum; sCurQuestLogEntry[sQuestLogCursor].data.a.mapNum = mapNum;
sCurQuestLogEntry[sQuestLogCursor].mapGroup = mapGroup; sCurQuestLogEntry[sQuestLogCursor].data.a.mapGroup = mapGroup;
sCurQuestLogEntry[sQuestLogCursor].animId = movementActionId; sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId = movementActionId;
sQuestLogCursor++; sQuestLogCursor++;
sNextStepDelay = duration; sNextStepDelay = duration;
} }
@@ -1344,12 +1344,12 @@ void QuestLogRecordPlayerStep(u8 movementActionId)
{ {
if (!RecordHeadAtEndOfEntryOrScriptContext2Enabled()) if (!RecordHeadAtEndOfEntryOrScriptContext2Enabled())
{ {
if (movementActionId != sCurQuestLogEntry[sLastQuestLogCursor].animId || movementActionId > MOVEMENT_ACTION_FACE_RIGHT) if (movementActionId != sCurQuestLogEntry[sLastQuestLogCursor].data.a.movementActionId || movementActionId > MOVEMENT_ACTION_FACE_RIGHT)
{ {
sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay;
sCurQuestLogEntry[sQuestLogCursor].command = 0; sCurQuestLogEntry[sQuestLogCursor].command = 0;
sCurQuestLogEntry[sQuestLogCursor].localId = 0; sCurQuestLogEntry[sQuestLogCursor].data.a.localId = 0;
sCurQuestLogEntry[sQuestLogCursor].animId = movementActionId; sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId = movementActionId;
sLastQuestLogCursor = sQuestLogCursor; sLastQuestLogCursor = sQuestLogCursor;
sQuestLogCursor++; sQuestLogCursor++;
sNextStepDelay = 0; sNextStepDelay = 0;
@@ -1363,35 +1363,35 @@ void QuestLogRecordPlayerStepWithDuration(u8 movementActionId, u8 duration)
{ {
sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay;
sCurQuestLogEntry[sQuestLogCursor].command = 0; sCurQuestLogEntry[sQuestLogCursor].command = 0;
sCurQuestLogEntry[sQuestLogCursor].localId = 0; sCurQuestLogEntry[sQuestLogCursor].data.a.localId = 0;
sCurQuestLogEntry[sQuestLogCursor].animId = movementActionId; sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId = movementActionId;
sLastQuestLogCursor = sQuestLogCursor; sLastQuestLogCursor = sQuestLogCursor;
sQuestLogCursor++; sQuestLogCursor++;
sNextStepDelay = duration; sNextStepDelay = duration;
} }
} }
void QuestLogRecordPlayerAvatarGfxTransition(u8 movementActionId) void QuestLogRecordPlayerAvatarGfxTransition(u8 gfxState)
{ {
if (!RecordHeadAtEndOfEntry()) if (!RecordHeadAtEndOfEntry())
{ {
sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay;
sCurQuestLogEntry[sQuestLogCursor].command = 1; sCurQuestLogEntry[sQuestLogCursor].command = 1;
sCurQuestLogEntry[sQuestLogCursor].localId = 0; sCurQuestLogEntry[sQuestLogCursor].data.b.localId = 0;
sCurQuestLogEntry[sQuestLogCursor].animId = movementActionId; sCurQuestLogEntry[sQuestLogCursor].data.b.gfxState = gfxState;
sQuestLogCursor++; sQuestLogCursor++;
sNextStepDelay = 0; sNextStepDelay = 0;
} }
} }
void QuestLogRecordPlayerAvatarGfxTransitionWithDuration(u8 movementActionId, u8 duration) void QuestLogRecordPlayerAvatarGfxTransitionWithDuration(u8 gfxState, u8 duration)
{ {
if (!RecordHeadAtEndOfEntry()) if (!RecordHeadAtEndOfEntry())
{ {
sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay;
sCurQuestLogEntry[sQuestLogCursor].command = 1; sCurQuestLogEntry[sQuestLogCursor].command = 1;
sCurQuestLogEntry[sQuestLogCursor].localId = 0; sCurQuestLogEntry[sQuestLogCursor].data.b.localId = 0;
sCurQuestLogEntry[sQuestLogCursor].animId = movementActionId; sCurQuestLogEntry[sQuestLogCursor].data.b.gfxState = gfxState;
sQuestLogCursor++; sQuestLogCursor++;
sNextStepDelay = duration; sNextStepDelay = duration;
} }
@@ -1412,10 +1412,10 @@ void sub_81127F8(struct FieldInput * a0)
u32 r2 = *(u32 *)a0 & 0x00FF00F3; u32 r2 = *(u32 *)a0 & 0x00FF00F3;
sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay;
sCurQuestLogEntry[sQuestLogCursor].command = 2; sCurQuestLogEntry[sQuestLogCursor].command = 2;
sCurQuestLogEntry[sQuestLogCursor].localId = r2; sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[0] = r2;
sCurQuestLogEntry[sQuestLogCursor].mapNum = r2 >> 8; // always 0 sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[1] = r2 >> 8; // always 0
sCurQuestLogEntry[sQuestLogCursor].mapGroup = r2 >> 16; sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[2] = r2 >> 16;
sCurQuestLogEntry[sQuestLogCursor].animId = r2 >> 24; // always 0 sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[3] = r2 >> 24; // always 0
sQuestLogCursor++; sQuestLogCursor++;
if (ArePlayerFieldControlsLocked()) if (ArePlayerFieldControlsLocked())
sNextStepDelay = TRUE; sNextStepDelay = TRUE;
@@ -1487,7 +1487,7 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size)
sLastQuestLogCursor = 0; sLastQuestLogCursor = 0;
gQuestLogFieldInput = (struct FieldInput){}; gQuestLogFieldInput = (struct FieldInput){};
sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].duration; sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].duration;
sMovementScripts[0][0] = sCurQuestLogEntry[sQuestLogCursor].animId; sMovementScripts[0][0] = sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId;
sMovementScripts[0][1] = QL_PLAYER_GFX_NONE; sMovementScripts[0][1] = QL_PLAYER_GFX_NONE;
gQuestLogPlaybackState = QL_PLAYBACK_STATE_1; gQuestLogPlaybackState = QL_PLAYBACK_STATE_1;
break; break;
@@ -1496,37 +1496,40 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size)
sNumEventsInLogEntry = size / sizeof(*sCurQuestLogEntry); sNumEventsInLogEntry = size / sizeof(*sCurQuestLogEntry);
for (i = 0; i < sNumEventsInLogEntry; i++) for (i = 0; i < sNumEventsInLogEntry; i++)
{ {
sCurQuestLogEntry[i] = (struct QuestLogEntry){ 0, 0, 0, 0, 0xFFFF, 0xFF }; sCurQuestLogEntry[i] = (struct QuestLogEntry){
.duration = 0xFFFF,
.command = 0xFF
};
} }
sQuestLogCursor = 0; sQuestLogCursor = 0;
sNextStepDelay = 0; sNextStepDelay = 0;
sCurQuestLogEntry[sQuestLogCursor].duration = 0; sCurQuestLogEntry[sQuestLogCursor].duration = 0;
sCurQuestLogEntry[sQuestLogCursor].command = 0; sCurQuestLogEntry[sQuestLogCursor].command = 0;
sCurQuestLogEntry[sQuestLogCursor].localId = 0; sCurQuestLogEntry[sQuestLogCursor].data.a.localId = 0;
switch (GetPlayerFacingDirection()) switch (GetPlayerFacingDirection())
{ {
case DIR_NONE: case DIR_NONE:
case DIR_SOUTH: case DIR_SOUTH:
sCurQuestLogEntry[sQuestLogCursor].animId = MOVEMENT_ACTION_FACE_DOWN; sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId = MOVEMENT_ACTION_FACE_DOWN;
break; break;
case DIR_EAST: case DIR_EAST:
sCurQuestLogEntry[sQuestLogCursor].animId = MOVEMENT_ACTION_FACE_RIGHT; sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId = MOVEMENT_ACTION_FACE_RIGHT;
break; break;
case DIR_NORTH: case DIR_NORTH:
sCurQuestLogEntry[sQuestLogCursor].animId = MOVEMENT_ACTION_FACE_UP; sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId = MOVEMENT_ACTION_FACE_UP;
break; break;
case DIR_WEST: case DIR_WEST:
sCurQuestLogEntry[sQuestLogCursor].animId = MOVEMENT_ACTION_FACE_LEFT; sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId = MOVEMENT_ACTION_FACE_LEFT;
break; break;
} }
sLastQuestLogCursor = 0; sLastQuestLogCursor = 0;
sQuestLogCursor++; sQuestLogCursor++;
sCurQuestLogEntry[sQuestLogCursor].duration = 0; sCurQuestLogEntry[sQuestLogCursor].duration = 0;
sCurQuestLogEntry[sQuestLogCursor].command = 2; sCurQuestLogEntry[sQuestLogCursor].command = 2;
sCurQuestLogEntry[sQuestLogCursor].localId = 0; sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[0] = 0;
sCurQuestLogEntry[sQuestLogCursor].mapNum = 0; sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[1] = 0;
sCurQuestLogEntry[sQuestLogCursor].mapGroup = 0; sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[2] = 0;
sCurQuestLogEntry[sQuestLogCursor].animId = 0; sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[3] = 0;
sQuestLogCursor++; sQuestLogCursor++;
gQuestLogPlaybackState = QL_PLAYBACK_STATE_2; gQuestLogPlaybackState = QL_PLAYBACK_STATE_2;
break; break;
@@ -1552,15 +1555,18 @@ void sub_8112B3C(void)
{ {
case 0: case 0:
// NPC movement action // NPC movement action
sMovementScripts[sCurQuestLogEntry[sQuestLogCursor].localId][0] = sCurQuestLogEntry[sQuestLogCursor].animId; sMovementScripts[sCurQuestLogEntry[sQuestLogCursor].data.a.localId][0] = sCurQuestLogEntry[sQuestLogCursor].data.a.movementActionId;
break; break;
case 1: case 1:
// State transition // State transition
sMovementScripts[sCurQuestLogEntry[sQuestLogCursor].localId][1] = sCurQuestLogEntry[sQuestLogCursor].animId; sMovementScripts[sCurQuestLogEntry[sQuestLogCursor].data.b.localId][1] = sCurQuestLogEntry[sQuestLogCursor].data.b.gfxState;
break; break;
case 2: case 2:
// Player input command // Player input command
*(u32 *)&gQuestLogFieldInput = ((sCurQuestLogEntry[sQuestLogCursor].animId << 24) | (sCurQuestLogEntry[sQuestLogCursor].mapGroup << 16) | (sCurQuestLogEntry[sQuestLogCursor].mapNum << 8) | (sCurQuestLogEntry[sQuestLogCursor].localId << 0)); *(u32 *)&gQuestLogFieldInput = ((sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[3] << 24)
| (sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[2] << 16)
| (sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[1] << 8)
| (sCurQuestLogEntry[sQuestLogCursor].data.fieldInput[0] << 0));
break; break;
case 3: case 3:
// End // End
+24 -24
View File
@@ -648,10 +648,10 @@ u16 *sub_8113C20(u16 *a0, struct QuestLogEntry * a1)
return NULL; return NULL;
a1->command = 0xFF; a1->command = 0xFF;
a1->duration = 0; a1->duration = 0;
a1->localId = 0; a1->data.raw[0] = 0;
a1->mapNum = 0; a1->data.raw[1] = 0;
a1->mapGroup = 0; a1->data.raw[2] = 0;
a1->animId = 0; a1->data.raw[3] = 0;
return a0 + 1; return a0 + 1;
} }
@@ -670,10 +670,10 @@ u16 *sub_8113C8C(u16 *a0, struct QuestLogEntry * a1)
return NULL; return NULL;
a1->command = 0xFE; a1->command = 0xFE;
a1->duration = a0[1]; a1->duration = a0[1];
a1->localId = 0; a1->data.raw[0] = 0;
a1->mapNum = 0; a1->data.raw[1] = 0;
a1->mapGroup = 0; a1->data.raw[2] = 0;
a1->animId = 0; a1->data.raw[3] = 0;
return a0 + 2; return a0 + 2;
} }
@@ -685,10 +685,10 @@ u16 *sub_8113CC8(u16 *a0, struct QuestLogEntry * a1)
return NULL; return NULL;
a0[0] = 0; a0[0] = 0;
a0[1] = a1->duration; a0[1] = a1->duration;
r6[0] = a1->localId; r6[0] = a1->data.raw[0];
r6[1] = a1->mapNum; r6[1] = a1->data.raw[1];
r6[2] = a1->mapGroup; r6[2] = a1->data.raw[2];
r6[3] = a1->animId; r6[3] = a1->data.raw[3];
return (u16 *)(r6 + 4); return (u16 *)(r6 + 4);
} }
@@ -700,10 +700,10 @@ u16 *sub_8113D08(u16 *a0, struct QuestLogEntry * a1)
return NULL; return NULL;
a1->command = 2; a1->command = 2;
a1->duration = a0[1]; a1->duration = a0[1];
a1->localId = r6[0]; a1->data.raw[0] = r6[0];
a1->mapNum = r6[1]; a1->data.raw[1] = r6[1];
a1->mapGroup = r6[2]; a1->data.raw[2] = r6[2];
a1->animId = r6[3]; a1->data.raw[3] = r6[3];
return (u16 *)(r6 + 4); return (u16 *)(r6 + 4);
} }
@@ -719,10 +719,10 @@ u16 *sub_8113D48(u16 *a0, struct QuestLogEntry * a1)
else else
r4[0] = 1; r4[0] = 1;
r4[1] = a1->duration; r4[1] = a1->duration;
r6[0] = a1->localId; r6[0] = a1->data.raw[0];
r6[1] = a1->mapNum; r6[1] = a1->data.raw[1];
r6[2] = a1->mapGroup; r6[2] = a1->data.raw[2];
r6[3] = a1->animId; r6[3] = a1->data.raw[3];
return (u16 *)(r6 + 4); return (u16 *)(r6 + 4);
} }
@@ -738,10 +738,10 @@ u16 *sub_8113D94(u16 *a0, struct QuestLogEntry * a1)
else else
a1->command = 1; a1->command = 1;
a1->duration = r5[1]; a1->duration = r5[1];
a1->localId = r6[0]; a1->data.raw[0] = r6[0];
a1->mapNum = r6[1]; a1->data.raw[1] = r6[1];
a1->mapGroup = r6[2]; a1->data.raw[2] = r6[2];
a1->animId = r6[3]; a1->data.raw[3] = r6[3];
return (u16 *)(r6 + 4); return (u16 *)(r6 + 4);
} }