1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-07 06:40:15 +00:00

ovl_En_Okarina_Tag OK (#273)

* started okarinatag

* did more

* z_en_okarina_tag OK

* finished okarinatag

* Made suggested changes
This commit is contained in:
Lucas Shaw 2020-07-19 14:41:59 -07:00 committed by GitHub
parent 71e65af9b7
commit 3dd521eef5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 465 additions and 1035 deletions

View file

@ -1,2 +1,3 @@
ovl_En_Okarina_Tag
z_en_okarina_tag_cutscene_data.c
z_en_okarina_tag.c

View file

@ -1,4 +1,11 @@
/*
* File: z_en_okarina_tag.c
* Overlay: ovl_En_Okarina_Tag
* Description: Music Staff (Ocarina) spot
*/
#include "z_en_okarina_tag.h"
#include <vt.h>
#define FLAGS 0x02000010
@ -8,7 +15,13 @@ void EnOkarinaTag_Init(Actor* thisx, GlobalContext* globalCtx);
void EnOkarinaTag_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnOkarinaTag_Update(Actor* thisx, GlobalContext* globalCtx);
/*
void func_80ABEF2C(EnOkarinaTag* this, GlobalContext* globalCtx);
void func_80ABF708(EnOkarinaTag* this, GlobalContext* globalCtx);
void func_80ABF28C(EnOkarinaTag* this, GlobalContext* globalCtx);
void func_80ABF0CC(EnOkarinaTag* this, GlobalContext* globalCtx);
void func_80ABF4C8(EnOkarinaTag* this, GlobalContext* globalCtx);
void func_80ABF7CC(EnOkarinaTag* this, GlobalContext* globalCtx);
const ActorInit En_Okarina_Tag_InitVars = {
ACTOR_EN_OKARINA_TAG,
ACTORTYPE_PROP,
@ -20,21 +33,303 @@ const ActorInit En_Okarina_Tag_InitVars = {
(ActorFunc)EnOkarinaTag_Update,
NULL,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Okarina_Tag/EnOkarinaTag_Destroy.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Okarina_Tag/EnOkarinaTag_Init.s")
extern CutsceneData D_02003C80[];
extern CutsceneData D_02005020[];
extern CutsceneData D_020024A0[];
extern CutsceneData D_80ABF9D0[];
extern CutsceneData D_80ABFB40[];
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Okarina_Tag/func_80ABEF2C.s")
void EnOkarinaTag_Destroy(Actor* thisx, GlobalContext* globalCtx) {
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Okarina_Tag/func_80ABF0CC.s")
void EnOkarinaTag_Init(Actor* thisx, GlobalContext* globalCtx) {
EnOkarinaTag* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Okarina_Tag/func_80ABF28C.s")
osSyncPrintf("\n\n");
// "Ocarina tag outbreak"
osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ オカリナタグ発生 ☆☆☆☆☆ %x\n" VT_RST, this->actor.params);
this->actor.flags &= ~1;
this->unk_150 = (this->actor.params >> 0xA) & 0x3F;
this->unk_152 = (this->actor.params >> 6) & 0xF;
this->switchFlag = this->actor.params & 0x3F;
if (this->switchFlag == 0x3F) {
this->switchFlag = -1;
}
if (this->unk_152 == 0xF) {
this->unk_152 = 0;
this->unk_158 = 1;
}
this->actor.unk_1F = 1;
if (this->actor.posRot.rot.z > 0) {
this->unk_15C = this->actor.posRot.rot.z * 40.0f;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Okarina_Tag/func_80ABF4C8.s")
// "Save information"
osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ セーブ情報\t ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag);
// "Type index"
osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ 種類インデックス ☆☆☆☆☆ %d\n" VT_RST, this->unk_150);
// "Correct answer information"
osSyncPrintf(VT_FGCOL(PURPLE) "☆☆☆☆☆ 正解情報\t ☆☆☆☆☆ %d\n" VT_RST, this->unk_152);
// "Range information"
osSyncPrintf(VT_FGCOL(CYAN) "☆☆☆☆☆ 範囲情報\t ☆☆☆☆☆ %d\n" VT_RST, this->actor.posRot.rot.z);
// "Processing range information"
osSyncPrintf(VT_FGCOL(CYAN) "☆☆☆☆☆ 処理範囲情報\t ☆☆☆☆☆ %f\n" VT_RST, this->unk_15C);
// "Hit?"
osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 当り?\t\t ☆☆☆☆☆ %d\n" VT_RST, this->unk_158);
osSyncPrintf("\n\n");
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Okarina_Tag/func_80ABF708.s")
if ((this->switchFlag >= 0) && (Flags_GetSwitch(globalCtx, this->switchFlag))) {
Actor_Kill(&this->actor);
} else {
switch (this->unk_150) {
case 7:
this->actionFunc = func_80ABEF2C;
break;
case 2:
if (LINK_IS_ADULT) {
Actor_Kill(&this->actor);
break;
}
case 1:
case 4:
case 6:
this->actionFunc = func_80ABF28C;
break;
case 5:
// "This poem is dedicated to the memory of the dearly departed members of the Royal Family."
this->actor.textId = 0x5021;
this->actionFunc = func_80ABF708;
break;
default:
Actor_Kill(&this->actor);
break;
}
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Okarina_Tag/func_80ABF7CC.s")
void func_80ABEF2C(EnOkarinaTag* this, GlobalContext* globalCtx) {
Player* player;
u16 unk_152;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Okarina_Tag/EnOkarinaTag_Update.s")
player = PLAYER;
this->unk_15A++;
if ((this->switchFlag >= 0) && (Flags_GetSwitch(globalCtx, this->switchFlag))) {
this->actor.flags &= ~1;
} else {
if ((this->unk_152 != 6) || (gSaveContext.unk_12C5 != 0)) {
if (player->stateFlags2 & 0x1000000) {
// "North! ! ! ! !"
osSyncPrintf(VT_FGCOL(RED) "☆☆☆☆☆ 北!!!!! ☆☆☆☆☆ %f\n" VT_RST, this->actor.xzDistFromLink);
}
if ((this->actor.xzDistFromLink < (90.0f + this->unk_15C)) &&
(fabsf(player->actor.posRot.pos.y - this->actor.posRot.pos.y) < 80.0f)) {
if (player->stateFlags2 & 0x2000000) {
unk_152 = this->unk_152;
if (unk_152 == 6) {
unk_152 = 0xA;
}
player->stateFlags2 |= 0x800000;
func_8010BD58(globalCtx, unk_152 + 0x22);
this->actionFunc = func_80ABF0CC;
} else if ((this->actor.xzDistFromLink < (50.0f + this->unk_15C) &&
((fabsf(player->actor.posRot.pos.y - this->actor.posRot.pos.y) < 40.0f)))) {
this->unk_15A = 0;
player->unk_6A8 = &this->actor;
}
}
}
}
}
void func_80ABF0CC(EnOkarinaTag* this, GlobalContext* globalCtx) {
Player* player = PLAYER;
if (globalCtx->msgCtx.unk_E3EE == 4) {
this->actionFunc = func_80ABEF2C;
} else {
if (globalCtx->msgCtx.unk_E3EE == 3) {
if (this->switchFlag >= 0) {
Flags_SetSwitch(globalCtx, this->switchFlag);
}
if (globalCtx->sceneNum == SCENE_MIZUSIN) {
globalCtx->msgCtx.msgMode = 0x37;
}
if ((globalCtx->sceneNum != SCENE_DAIYOUSEI_IZUMI) && (globalCtx->sceneNum != SCENE_YOUSEI_IZUMI_YOKO)) {
globalCtx->msgCtx.unk_E3EE = 4;
}
func_80078884(NA_SE_SY_CORRECT_CHIME);
this->actionFunc = func_80ABEF2C;
return;
}
if (this->unk_158 != 0) {
if ((globalCtx->msgCtx.unk_E3EE == 5) || (globalCtx->msgCtx.unk_E3EE == 6) ||
(globalCtx->msgCtx.unk_E3EE == 7) || (globalCtx->msgCtx.unk_E3EE == 8) ||
(globalCtx->msgCtx.unk_E3EE == 9) || (globalCtx->msgCtx.unk_E3EE == 10) ||
(globalCtx->msgCtx.unk_E3EE == 13)) {
if (this->switchFlag >= 0) {
Flags_SetSwitch(globalCtx, this->switchFlag);
}
globalCtx->msgCtx.unk_E3EE = 4;
func_80078884(NA_SE_SY_CORRECT_CHIME);
this->actionFunc = func_80ABEF2C;
return;
}
}
if ((globalCtx->msgCtx.unk_E3EE >= 5) && (globalCtx->msgCtx.unk_E3EE < 0xE)) {
globalCtx->msgCtx.unk_E3EE = 4;
this->actionFunc = func_80ABEF2C;
} else if (globalCtx->msgCtx.unk_E3EE == 1) {
player->stateFlags2 |= 0x800000;
}
}
}
void func_80ABF28C(EnOkarinaTag* this, GlobalContext* globalCtx) {
Player* player = PLAYER;
this->unk_15A++;
if ((this->unk_152 != 6) || (gSaveContext.unk_12C5 != 0)) {
if ((this->switchFlag >= 0) && Flags_GetSwitch(globalCtx, this->switchFlag)) {
this->actor.flags &= ~1;
} else if (((this->unk_150 != 4) || !(gSaveContext.eventChkInf[4] & 0x800)) &&
((this->unk_150 != 6) || !(gSaveContext.eventChkInf[1] & 0x2000)) &&
(this->actor.xzDistFromLink < (90.0f + this->unk_15C)) &&
(fabsf(player->actor.posRot.pos.y - this->actor.posRot.pos.y) < 80.0f)) {
if (player->stateFlags2 & 0x1000000) {
switch (this->unk_150) {
case 1:
func_8010BD58(globalCtx, 0x24);
break;
case 2:
func_8010BD58(globalCtx, 0x27);
break;
case 4:
func_8010BD58(globalCtx, 0x26);
break;
case 6:
func_8010BD58(globalCtx, 0x24);
break;
default:
// "Ocarina Invisible-kun demo start check error source"
osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ オカリナ透明君デモ開始チェックエラー原 ☆☆☆☆☆ %d\n" VT_RST,
this->unk_150);
Actor_Kill(&this->actor);
break;
}
player->stateFlags2 |= 0x800000;
this->actionFunc = func_80ABF4C8;
} else if ((this->actor.xzDistFromLink < (50.0f + this->unk_15C)) &&
(fabsf(player->actor.posRot.pos.y - this->actor.posRot.pos.y) < 40.0f)) {
this->unk_15A = 0;
player->stateFlags2 |= 0x800000;
}
}
}
}
void func_80ABF4C8(EnOkarinaTag* this, GlobalContext* globalCtx) {
Player* player = PLAYER;
if (globalCtx->msgCtx.unk_E3EE == 4) {
this->actionFunc = func_80ABF28C;
} else if (globalCtx->msgCtx.unk_E3EE == 3) {
func_80078884(NA_SE_SY_CORRECT_CHIME);
if (this->switchFlag >= 0) {
Flags_SetSwitch(globalCtx, this->switchFlag);
}
switch (this->unk_150) {
case 1:
Flags_SetSwitch(globalCtx, this->switchFlag);
gSaveContext.eventChkInf[3] |= 0x200;
break;
case 2:
globalCtx->csCtx.segment = D_80ABF9D0;
gSaveContext.cutsceneTrigger = 1;
func_800F574C(1.18921f, 0x5A);
break;
case 4:
globalCtx->csCtx.segment = D_80ABFB40;
gSaveContext.cutsceneTrigger = 1;
break;
case 6:
globalCtx->csCtx.segment =
(LINK_IS_ADULT) ? SEGMENTED_TO_VIRTUAL(&D_02003C80) : SEGMENTED_TO_VIRTUAL(&D_02005020);
gSaveContext.cutsceneTrigger = 1;
gSaveContext.eventChkInf[1] |= 0x2000;
func_80078884(NA_SE_SY_CORRECT_CHIME);
break;
default:
break;
}
globalCtx->msgCtx.unk_E3EE = 4;
this->actionFunc = func_80ABF28C;
} else {
if (globalCtx->msgCtx.unk_E3EE >= 5) {
if (globalCtx->msgCtx.unk_E3EE < 0xE) {
globalCtx->msgCtx.unk_E3EE = 4;
this->actionFunc = func_80ABF28C;
return;
}
}
if (globalCtx->msgCtx.unk_E3EE == 1) {
player->stateFlags2 |= 0x800000;
}
}
}
void func_80ABF708(EnOkarinaTag* this, GlobalContext* globalCtx) {
s16 yawDiff;
s16 yawDiffNew;
if (func_8002F194(&this->actor, globalCtx) != 0) {
this->actionFunc = func_80ABF7CC;
} else {
yawDiff = this->actor.yawTowardsLink - this->actor.posRot.rot.y;
this->unk_15A++;
if (!(this->actor.xzDistFromLink > 120.0f)) {
if (CHECK_QUEST_ITEM(QUEST_SONG_SUN)) {
// "This poem is dedicated to the memory of the dearly departed members of the Royal Family."
this->actor.textId = 0x5021;
}
yawDiffNew = ABS(yawDiff);
if (yawDiffNew < 0x4300) {
this->unk_15A = 0;
func_8002F2CC(&this->actor, globalCtx, 70.0f);
}
}
}
}
void func_80ABF7CC(EnOkarinaTag* this, GlobalContext* globalCtx) {
// "Open sesame sesame!"
osSyncPrintf(VT_FGCOL(PURPLE) "☆☆☆☆☆ 開けゴマゴマゴマ! ☆☆☆☆☆ %d\n" VT_RST, func_8010BDBC(&globalCtx->msgCtx));
if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && (func_80106BC8(globalCtx) != 0)) {
func_80106CCC(globalCtx);
if (!CHECK_QUEST_ITEM(QUEST_SONG_SUN)) {
globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(&D_020024A0);
gSaveContext.cutsceneTrigger = 1;
}
this->actionFunc = func_80ABF708;
}
}
void EnOkarinaTag_Update(Actor* thisx, GlobalContext* globalCtx) {
EnOkarinaTag* this = THIS;
this->actionFunc(this, globalCtx);
if (BREG(0) != 0) {
if (this->unk_15A != 0) {
if (!(this->unk_15A & 1)) {
DebugDisplay_AddObject(this->actor.posRot.pos.x, this->actor.posRot.pos.y, this->actor.posRot.pos.z,
this->actor.posRot.rot.x, this->actor.posRot.rot.y, this->actor.posRot.rot.z,
1.0f, 1.0f, 1.0f, 120, 120, 120, 255, 4, globalCtx->state.gfxCtx);
}
} else {
DebugDisplay_AddObject(this->actor.posRot.pos.x, this->actor.posRot.pos.y, this->actor.posRot.pos.z,
this->actor.posRot.rot.x, this->actor.posRot.rot.y, this->actor.posRot.rot.z, 1.0f,
1.0f, 1.0f, 255, 0, 0, 255, 4, globalCtx->state.gfxCtx);
}
}
}

View file

@ -6,9 +6,18 @@
struct EnOkarinaTag;
typedef void (*EnOkarinaTagActionFunc)(struct EnOkarinaTag*, GlobalContext*);
typedef struct EnOkarinaTag {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x14];
/* 0x014C */ EnOkarinaTagActionFunc actionFunc;
/* 0x0150 */ s16 unk_150;
/* 0x0152 */ s16 unk_152;
/* 0x0154 */ s16 switchFlag;
/* 0x0156 */ char unk_156[0x2];
/* 0x0158 */ s16 unk_158;
/* 0x015A */ s16 unk_15A;
/* 0x015C */ f32 unk_15C;
} EnOkarinaTag; // size = 0x0160
extern const ActorInit En_Okarina_Tag_InitVars;

View file

@ -0,0 +1,137 @@
#include "z_en_okarina_tag.h"
#include <z64cutscene_commands.h>
// clang-format off
CutsceneData D_80ABF9D0[] = {
CS_BEGIN_CUTSCENE(4, 360),
CS_TERMINATOR(KAKARIKO_VILLAGE_DRAIN_WELL, 200, 201),
CS_CAM_POS_LIST(0, 331),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 3100, 201, -100, 0x3235),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 3100, 201, -100, 0x3336),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 3100, 201, -100, 0x392C),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 3178, 201, 113, 0x2C20),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 3178, 201, 113, 0x3235),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 3178, 201, 113, 0x3238),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 3178, 201, 113, 0x3639),
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 60.0f, 3178, 201, 113, 0x2C20),
CS_CAM_FOCUS_POINT_LIST(0, 360),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 3054, 137, -64, 0x3235),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 3054, 137, -64, 0x3336),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 90, 60.0f, 3054, 137, -64, 0x392C),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 90, 60.0f, 3118, 142, 96, 0x2C20),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 3118, 142, 96, 0x3235),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 3118, 142, 96, 0x3238),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 3118, 142, 96, 0x3639),
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 60.0f, 3118, 142, 96, 0x2C20),
CS_MISC_LIST(1),
CS_MISC(0x0013, 30, 31, 0x0000, 0x00000000, 0xFFFFFFFE, 0x00000000, 0x00000002, 0xFFFFFFFE, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000),
CS_END(),
};
CutsceneData D_80ABFB40[] = {
CS_BEGIN_CUTSCENE(18, 3000),
CS_UNK_DATA_LIST(0x00000021, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFAA, 0xFFFFFFAE, 0x00000000, 0xFFFFFFAA, 0xFFFFFFAE, 0x00000000, 0x00000000, 0x00000000),
CS_PLAYER_ACTION_LIST(3),
CS_PLAYER_ACTION(0x0011, 0, 80, 0x0000, 0x8000, 0x0000, 0, -40, 1400, 0, -40, 1400, 0.0f, 0.0f, 1.401298464324817e-45f),
CS_PLAYER_ACTION(0x0012, 80, 201, 0x0000, 0x8000, 0x0000, 0, -40, 1400, 0, -40, 1400, 0.0f, 0.0f, 1.401298464324817e-45f),
CS_PLAYER_ACTION(0x0005, 201, 662, 0x0000, 0x8000, 0x0000, 0, -40, 1400, 0, -40, 1400, 0.0f, 0.0f, 1.401298464324817e-45f),
CS_MISC_LIST(1),
CS_MISC(0x000D, 510, 611, 0x0000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000),
CS_NPC_ACTION_LIST(48, 1),
CS_NPC_ACTION(0x0003, 160, 289, 0x0000, 0x0000, 0x0000, 0, 20, 1400, 0, 60, 1400, 0.0f, 0.3100775182247162f, 0.0f),
CS_NPC_ACTION_LIST(48, 3),
CS_NPC_ACTION(0x0004, 340, 420, 0x0000, 0x0000, 0x0000, 0, 120, 1335, 0, 40, 1335, 0.0f, -1.0f, 0.0f),
CS_NPC_ACTION(0x0004, 420, 465, 0x0000, 0x0000, 0x0000, 0, 40, 1335, 0, 16, 1335, 0.0f, -0.5333333611488342f, 0.0f),
CS_NPC_ACTION(0x0002, 465, 519, 0x0000, 0x0000, 0x0000, 0, 16, 1335, 0, 16, 1335, 0.0f, 0.0f, 0.0f),
CS_MISC_LIST(1),
CS_MISC(0x0003, 620, 621, 0x0000, 0x00000000, 0x00000001, 0x00000000, 0xFFFFFFFF, 0x00000001, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000),
CS_SCENE_TRANS_FX(0x0001, 338, 341),
CS_SCENE_TRANS_FX(0x0005, 344, 349),
CS_MISC_LIST(1),
CS_MISC(0x000C, 790, 791, 0x0000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000),
CS_SCENE_TRANS_FX(0x0001, 157, 160),
CS_SCENE_TRANS_FX(0x0005, 159, 166),
CS_PLAY_BGM_LIST(1),
CS_PLAY_BGM(0x005A, 560, 561, 0x0000, 0x00000000, 0x00000003, 0x00000000, 0x00000004, 0x00000003, 0x00000000, 0x00000004),
CS_CAM_POS_LIST(0, 451),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 2, 11, 1397, 0xA220),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 2, 11, 1397, 0xB820),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 2, 11, 1397, 0xD0A1),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 0, 27, 1445, 0xBAEE),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 56, 27, 1385, 0xA5AF),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -19, 27, 1341, 0xAE0A),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -44, -4, 1429, 0xA8A5),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -44, -4, 1429, 0xA5ED),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -44, -4, 1429, 0xA220),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -44, -4, 1429, 0xA5A4),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -44, -4, 1429, 0x20BA),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -44, -4, 1429, 0xC9A5),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -44, -4, 1429, 0xA5A2),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -44, -4, 1429, 0xA5BB),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -44, -4, 1429, 0xAE0A),
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 60.0f, -44, -4, 1429, 0xB3A5),
CS_CAM_POS_LIST(340, 1461),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -6, 15, 1560, 0xA220),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -6, 15, 1560, 0xB820),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -6, 15, 1560, 0xD0A1),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -6, 15, 1560, 0xBAEE),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, -6, 15, 1560, 0xA5AF),
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 60.0f, -6, 15, 1560, 0xAE0A),
CS_CAM_POS_LIST(490, 941),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 0, 264, 1379, 0xA220),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 0, 264, 1379, 0xB820),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 0, 264, 1379, 0xD0A1),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 0, 264, 1379, 0xBAEE),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 0, 153, 1379, 0xA5AF),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 55, 32, 1398, 0xAE0A),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 111, -38, 1511, 0xA8A5),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 111, -38, 1511, 0xA5ED),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 111, -38, 1511, 0xA220),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 111, -38, 1511, 0xA5A4),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 111, -38, 1511, 0x20BA),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 111, -38, 1511, 0xC9A5),
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.0f, 111, -38, 1511, 0xA5A2),
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 60.0f, 111, -38, 1511, 0xA5BB),
CS_CAM_FOCUS_POINT_LIST(0, 480),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 2, 36, 1335, 0xA220),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 2, 36, 1335, 0xB820),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 2, 36, 1335, 0xD0A1),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 0, -8, 1391, 0xBAEE),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 1, -5, 1398, 0xA5AF),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -2, -3, 1394, 0xAE0A),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 5, 0, 1399, 0xA8A5),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 1, 14, 1399, 0xA5ED),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -9, 33, 1402, 0xA220),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -14, 41, 1409, 0xA5A4),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -14, 41, 1409, 0x20BA),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -14, 41, 1409, 0xC9A5),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -14, 41, 1409, 0xA5A2),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -14, 41, 1409, 0xA5BB),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -14, 41, 1409, 0xAE0A),
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 60.0f, -14, 41, 1409, 0xB3A5),
CS_CAM_FOCUS_POINT_LIST(340, 1490),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -3, 48, 1414, 0xA220),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -3, 48, 1414, 0xB820),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 1000, 60.0f, -3, 48, 1414, 0xD0A1),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -3, 48, 1414, 0xBAEE),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, -3, 47, 1414, 0xA5AF),
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 60.0f, -3, 47, 1414, 0xAE0A),
CS_CAM_FOCUS_POINT_LIST(490, 970),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 0, 264, 1274, 0xA220),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 60, 60.0f, 0, 264, 1274, 0xB820),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 60, 60.0f, 0, 264, 1274, 0xD0A1),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 0, 264, 1274, 0xBAEE),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 0, 170, 1275, 0xA5AF),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 10, 51, 1306, 0xAE0A),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 68, -2, 1424, 0xA8A5),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 68, -2, 1424, 0xA5ED),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 68, -2, 1424, 0xA220),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 68, -2, 1424, 0xA5A4),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 68, -2, 1424, 0x20BA),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 68, -2, 1424, 0xC9A5),
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.0f, 68, -2, 1424, 0xA5A2),
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 60.0f, 68, -2, 1424, 0xA5BB),
CS_END(),
};
// clang-format on