#if DEBUG #include "d/d_debug_camera.h" #include "d/d_event_data.h" #include "d/d_debug_viewer.h" #include "d/d_com_inf_game.h" #include "f_ap/f_ap_game.h" #include "JSystem/JUtility/JUTDbPrint.h" #include "JSystem/JUtility/JUTReport.h" namespace zevwork { const int CutMaxNum = 32; const int DataMaxNum = 0x100; const int FDataMaxNum = 0x200; const int IDataMaxNum = 0x100; const int SDataMaxNum = 0x100; const int WorkSize = (sizeof(event_binary_data_header) - 8) + sizeof(dEvDtEvent_DBG_c) + sizeof(dEvDtStaff_DBG_c) + sizeof(dEvDtStaff_DBG_c) + (sizeof(dEvDtCut_c) * CutMaxNum) + (sizeof(dEvDtData_DBG_c) * DataMaxNum) + (sizeof(f32) * FDataMaxNum) + (sizeof(int) * IDataMaxNum) + (sizeof(char) * SDataMaxNum); u8* WorkBuffer; }; dDbgCamera_c dDbgCamera; dDbgCamKey_c::~dDbgCamKey_c() {} namespace { cXyz rel2wld(cXyz* param_0, fopAc_ac_c* actor) { if (actor == NULL) { OS_REPORT("debug camera: error: actor NULL in rel2wld() \n"); return cXyz::Zero; } cSGlobe sp18(*param_0); sp18.U(cSAngle(actor->shape_angle.y) + sp18.U()); return actor->attention_info.position + sp18.Xyz(); } cXyz wld2rel(cXyz* param_0, fopAc_ac_c* actor) { if (actor == NULL) { OS_REPORT("debug camera: error: actor NULL in wld2rel() \n"); return cXyz::Zero; } cSGlobe sp18(*param_0 - actor->attention_info.position); sp18.U(sp18.U() - cSAngle(actor->shape_angle.y)); return sp18.Xyz(); } inline fpc_ProcID ActorID(fopAc_ac_c* actor) { return fopAcM_GetID(actor); } inline fopAc_ac_c* Actor(fpc_ProcID id) { return fopAcM_SearchByID(id); } } dDbgCamSetup_c::dDbgCamSetup_c() { mpDbgCam = NULL; mMoveSpeed = 20.0f; mMoveTurbo = 400.0f; mFovyTick = 2.5; mMoveParallelShift = 10.0f; mRotateSpeed = 20.0f; mTransAccel = 0.1f; mRotAccel = 0.01; mMoveMax = 100.0f; mUnkMax = 2000.0f; mRotateMax = 30.0f; mCenterCross = 400.0f; mCenterBall = 20.0f; mCenterMarker = 1; mActorSrchType = 0; mActorID = fpcM_ERROR_PROCESS_ID_e; mFlag = 0; mFlag |= (u16)0x8000; mPosX = 40; mPosY = 320; mGazePoint.x = 0.0f; mGazePoint.y = 0.0f; mGazePoint.z = 0.0f; mPerspective.x = 0.0f; mPerspective.y = 0.0f; mPerspective.z = 0.0f; mAngle = 0.0f; field_0x68.set(0.0f, 1.0f, 0.0f); } void dDbgCamSetup_c::Init(dDbgCamera_c* i_dbgCamera) { // "Debug Camera" m_childNo = mDoHIO_CREATE_CHILD("デバッグカメラ", this); mpDbgCam = i_dbgCamera; } void dDbgCamSetup_c::Finish() { mDoHIO_DELETE_CHILD(m_childNo); } f32 dDbgCamSetup_c::Translate(f32 param_0) { f32 var_f31 = mMoveSpeed * param_0; f32 var_f30; if (var_f31 > mMoveMax) { var_f30 = mMoveMax; } else { var_f30 = var_f31; } return var_f30; } s16 dDbgCamSetup_c::Rotate(f32 param_0) { f32 var_f31 = mRotateSpeed * param_0; f32 var_f30; if (var_f31 > mRotateMax) { var_f30 = mRotateMax; } else { var_f30 = var_f31; } return cAngle::d2s(var_f30); } f32 dDbgCamSetup_c::FlatMove(f32 param_0) { f32 var_f31 = mMoveParallelShift * param_0; f32 var_f30; if (var_f31 > mMoveMax) { var_f30 = mMoveMax; } else { var_f30 = var_f31; } return var_f30; } f32 dDbgCamSetup_c::Turbo(f32 param_0) { f32 var_f31 = mMoveTurbo * param_0; f32 var_f30; if (var_f31 > mUnkMax) { var_f30 = mUnkMax; } else { var_f30 = var_f31; } return var_f30; } static int search_actor(fopAc_ac_c* actor, void* data) { dDbgCamSetup_c* camsetup = (dDbgCamSetup_c*)data; cXyz sp18 = dDbgCamera.Center() - actor->attention_info.position; if (sp18.abs() < camsetup->mActorSrchRange) { camsetup->mActorSrchRange = sp18.abs(); camsetup->mActorID = ActorID(actor); } return 0; } void dDbgCamSetup_c::genMessage(JORMContext* mctx) { mctx->genLabel("- カメラ位置表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genCheckBox(" 現在位置", &mFlag, 4, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genCheckBox(" (補正前)", &mFlag, 8, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("- ヒットポリゴン表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genCheckBox(" 壁あたり", &mFlag, 0x10, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("- 移動", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" スピード", &mMoveSpeed, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 最大", &mMoveMax, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" ターボ", &mMoveTurbo, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 最大", &mUnkMax, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 平行移動", &mMoveParallelShift, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 加速度", &mTransAccel, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("- 回転", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" スピード", &mRotateSpeed, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 最大", &mRotateMax, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 加速度", &mRotAccel, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("- 画角", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" スピード", &mFovyTick, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("- センターマーカ", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 線の長さ", &mCenterCross, 0.0f, 4000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 球の大きさ", &mCenterBall, 0.0f, 4000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->startRadioButton("表示", &mCenterMarker, 0, NULL, 0xFFFF, 0xFFFF, 0x100, 0xFFFF); mctx->genRadioButtonItem("常に表示", 3, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); mctx->genRadioButtonItem("動くと表示", 1, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); mctx->genRadioButtonItem("常に非表示", 0, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); mctx->endRadioButton(); mctx->genLabel("- 情報表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genCheckBox(" 有効", &mFlag, 0x8000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 表示位置 X", &mPosX, 0, 640, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" Y", &mPosY, 0, 480, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("- 座標系", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->startRadioButton("基準", &mActorSrchType, 0, NULL, 0xFFFF, 0xFFFF, 0x100, 0xFFFF); mctx->genRadioButtonItem("絶対座標", 0, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); mctx->genRadioButtonItem("プレイヤー相対座標", 1, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); mctx->genRadioButtonItem("指定アクター相対座標", 2, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); mctx->endRadioButton(); mctx->genButton(" 更新 ", 0x66, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("- イベント", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genButton(" 保存 ", 0x68, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("- 座標指定", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 注視点 X", &mGazePoint.x, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider("     Y", &mGazePoint.y, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider("     Z", &mGazePoint.z, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genButton(" 更新 ", 0x69, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 視点   X", &mPerspective.x, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider("     Y", &mPerspective.y, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider("     Z", &mPerspective.z, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genButton(" 更新 ", 0x6A, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 画角   ", &mAngle, 0.0f, 180.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genButton(" 更新 ", 0x6B, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); } void dDbgCamera_c::InitlChk() { mLchkNum = 0; } int dDbgCamera_c::SetlChk(dBgS_LinChk lchk) { if (mLchkNum <= 1) { mLchk[mLchkNum] = lchk; return ++mLchkNum; } return -1; } void dDbgCamSetup_c::listenPropertyEvent(const JORPropertyEvent* property) { int var_r27 = 0; JORReflexible::listenPropertyEvent(property); JORMContext* mctx = attachJORMContext(8); switch ((u32)property->id) { case 0x66: mActorSrchRange = 10000000.0f; mActorID = fpcM_ERROR_PROCESS_ID_e; switch (mActorSrchType) { case 1: { fopAc_ac_c* player = dComIfGp_getPlayer(dComIfGp_getCameraPlayer1ID(0)); mActorID = ActorID(player); break; } case 2: fopAcIt_Executor((fopAcIt_ExecutorFunc)search_actor, this); break; } break; case 0x68: mpDbgCam->WriteZevData(); break; case 0x69: if (mActorID == fpcM_ERROR_PROCESS_ID_e) { mpDbgCam->Center(mGazePoint); } else { mpDbgCam->Center(wld2rel(&mGazePoint, Actor(mActorID))); } break; case 0x6A: if (mActorID == fpcM_ERROR_PROCESS_ID_e) { mpDbgCam->Eye(mPerspective); } else { mpDbgCam->Eye(wld2rel(&mPerspective, Actor(mActorID))); } break; case 0x6B: mpDbgCam->Fovy(mAngle); break; } } int dDbgCamera_c::moveTool() { f32 substick_x = mDoCPd_c::getSubStickX3D(mPadNo); f32 substick_y = mDoCPd_c::getSubStickY(mPadNo); int sp4C = field_0xc00; if (mDoCPd_c::getHoldA(mPadNo)) { if (field_0xc0c != 0) { field_0xc00 = 6; } else { field_0xc00 = 0; } } else if (mDoCPd_c::getHoldB(mPadNo)) { if (field_0xc0c != 0) { field_0xc00 = 7; } else { field_0xc00 = 1; } } else if (mDoCPd_c::getSubStickValue(mPadNo) > 0.001f) { field_0xc00 = 3; } else { field_0xc00 = 18; } if (field_0xc00 != 18) { if (field_0xc00 != sp4C) { field_0xc10 = 0.1f; } else { field_0xc10 += field_0xc10 * mCamSetup.TransAccel(); } } else { field_0xc10 = 0.0f; } int sp48 = field_0xc04; f32 stick_x = mDoCPd_c::getStickX3D(mPadNo); f32 stick_y = mDoCPd_c::getStickY(mPadNo); if (mDoCPd_c::getTrigY(mPadNo)) { field_0xc04 = 16; } else if (mDoCPd_c::getTrigX(mPadNo)) { field_0xc04 = 17; } else if (mDoCPd_c::getTrigLeft(mPadNo)) { if (field_0x54 == 0) { field_0xc04 = 4; } else if (field_0x54 == 1) { field_0xc04 = 10; } else if (field_0x54 == 2) { field_0xc04 = 14; } field_0xc1c = 0; } else if (mDoCPd_c::getHoldLeft(mPadNo)) { if (field_0xc1c++ > 20) { if (field_0x54 == 0) { field_0xc04 = 4; } else if (field_0x54 == 1) { field_0xc04 = 10; } else if (field_0x54 == 2) { field_0xc04 = 14; } } else { field_0xc04 = 18; } } else if (mDoCPd_c::getTrigRight(mPadNo)) { if (field_0x54 == 0) { field_0xc04 = 5; } else if (field_0x54 == 1) { field_0xc04 = 11; } else if (field_0x54 == 2) { field_0xc04 = 15; } field_0xc1c = 0; } else if (mDoCPd_c::getHoldRight(mPadNo)) { if (field_0xc1c++ > 20) { if (field_0x54 == 0) { field_0xc04 = 5; } else if (field_0x54 == 1) { field_0xc04 = 11; } else if (field_0x54 == 2) { field_0xc04 = 15; } } else { field_0xc04 = 18; } } else if (mDoCPd_c::getStickValue(mPadNo) > 0.001f) { field_0xc04 = 8; } else { field_0xc04 = 18; } if (field_0xc04 != 18) { if (field_0xc04 != sp48) { field_0xc14 = 0.1f; } else { field_0xc14 += field_0xc14 * mCamSetup.RotAccel(); } } else { field_0xc14 = 0.0f; } switch (field_0xc04) { case 12: if (mRunKey.mAction == dDbgCam_KeyAction_FIXEDFRM) { mRunKey.mAction = dDbgCam_KeyAction_NOACTION; } else { mRunKey.mAction--; } break; case 13: if (mRunKey.mAction == dDbgCam_KeyAction_NOACTION) { mRunKey.mAction = dDbgCam_KeyAction_FIXEDFRM; } else { mRunKey.mAction++; } break; case 14: if (field_0x58 > 0) { field_0x58--; if (mActionKey[field_0x58] != '-') { mRunKey = mKeys[field_0x58]; if (mKeys[field_0x58].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { fopAc_ac_c* sp3C = Actor(mRunKey.mActorInfo.id); if (sp3C != NULL) { mRunKey.mCenter = rel2wld(&mKeys[field_0x58].mCenter, sp3C); mRunKey.mEye = rel2wld(&mKeys[field_0x58].mEye, sp3C); } } } } break; case 15: if (field_0x58 < 31) { field_0x58++; if (mActionKey[field_0x58] != '-') { mRunKey = mKeys[field_0x58]; if (mKeys[field_0x58].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { fopAc_ac_c* sp38 = Actor(mRunKey.mActorInfo.id); if (sp38 != NULL) { mRunKey.mCenter = rel2wld(&mKeys[field_0x58].mCenter, sp38); mRunKey.mEye = rel2wld(&mKeys[field_0x58].mEye, sp38); } } } } break; case 16: if (mRunKey.mAction == dDbgCam_KeyAction_NOACTION) { OSReport(" "); OSReport("%.3f %.3f %.3f\n", mRunKey.mCenter.x, mRunKey.mCenter.y, mRunKey.mCenter.z); OSReport(" "); OSReport("%.3f %.3f %.3f\n", mRunKey.mEye.x, mRunKey.mEye.y, mRunKey.mEye.z); OSReport(" "); OSReport("%.3f\n", mRunKey.mFovy); OSReport(" "); OSReport("%.3f\n", mRunKey.mBank); } if (mActionKey[field_0x58] != '-' || mRunKey.mAction == dDbgCam_KeyAction_NOACTION) { int var_r27 = field_0x58; for (; var_r27 < 31; var_r27++) { if (mActionKey[var_r27] == '-') { break; } } while (var_r27 > field_0x58) { mActionKey[var_r27] = mActionKey[var_r27 - 1]; mKeys[var_r27] = mKeys[var_r27 - 1]; var_r27--; } } mActionKey[field_0x58] = ActionSymbol(mRunKey.mAction); mKeys[field_0x58] = mRunKey; if (mKeys[field_0x58].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { fopAc_ac_c* actor = Actor(mRunKey.mActorInfo.id); if (actor != NULL) { mKeys[field_0x58].mCenter = wld2rel(&mRunKey.mCenter, actor); mKeys[field_0x58].mEye = wld2rel(&mRunKey.mEye, actor); } } if (mActionKey[field_0x58 + 1] == '-') { field_0x58++; } break; case 17: if (mActionKey[field_0x58] != '-' && (mActionKey[field_0x58 + 1] != '-' || mRunKey.mAction == dDbgCam_KeyAction_NOACTION)) { int var_r29 = field_0x58 + 1; for (; var_r29 < 33; var_r29++) { if (var_r29 == 0x20) { mActionKey[var_r29 - 1] = '-'; mKeys[var_r29 - 1] = PlaneKey(); } else { mActionKey[var_r29 - 1] = mActionKey[var_r29]; mKeys[var_r29 - 1] = mKeys[var_r29]; } if (mActionKey[var_r29] == '-') { break; } } } else { mActionKey[field_0x58] = '-'; mKeys[field_0x58] = PlaneKey(); } mRunKey.mCenter = mKeys[field_0x58].mCenter; break; } if (mCmdMode == 3) { fopAc_ac_c* sp2C = dComIfGp_getPlayer(0); /* if (this->unk730 != 0x3E7) { &field_0x704 = &sp2C->unk558 this->unk730 = 0x3E7; } else { (sp15C, (Vec* ) &sp2C->unk558); &mRunKey.mCenter += sp15C &field_0x704 = &sp2C->unk558 } */ } else { // this->unk730 = 3; } cXyz* var_r28; cXyz* sp30; f32 temp_f31; f32 var_f30; f32 var_f29; if (field_0xc08 != 0) { var_r28 = &mRunKey.mCenter; sp30 = &mRunKey.mEye; var_f30 = -1.0f; var_f29 = 1.0f; } else { var_r28 = &mRunKey.mEye; sp30 = &mRunKey.mCenter; var_f30 = 1.0f; var_f29 = -1.0f; } field_0x44.Val(*sp30 - *var_r28); switch (field_0xc00) { case 2: *var_r28 = *var_r28 + (field_0x44.Norm() * mCamSetup.Turbo(field_0xc10 * var_f30)); if (field_0xc0c != 0) { *var_r28 = *var_r28 + (field_0x44.Norm() * mCamSetup.Turbo(field_0xc10 * var_f30)); } break; case 0: *var_r28 = *var_r28 + (field_0x44.Norm() * mCamSetup.Translate(field_0xc10 * var_f30)); break; case 1: *var_r28 = *var_r28 - (field_0x44.Norm() * mCamSetup.Translate(field_0xc10 * var_f30)); break; case 3: { f32 temp_f26 = fabsf(substick_x); f32 temp_f1_2 = fabsf(substick_y); if (field_0xc0c == 0 || temp_f26 < temp_f1_2) { cXyz sp1B0(0.0f, 1.0f, 0.0f); *var_r28 = *var_r28 + (sp1B0 * mCamSetup.FlatMove(field_0xc10 * substick_y)); } if (field_0xc0c == 0 || temp_f26 > temp_f1_2) { cSGlobe sp58(1.0f, cSAngle::_0, field_0x44.U() + cSAngle::_90); temp_f31 = var_f30 * (field_0xc10 * substick_x); *var_r28 = *var_r28 - (sp58.Xyz() * mCamSetup.FlatMove(temp_f31)); } break; } case 6: { temp_f31 = field_0x44.R(); field_0x44.R(temp_f31 - (0.1f * (temp_f31 * field_0xc10))); if (field_0x44.R() < 10.0f) { field_0x44.R(10.0f); } break; } case 7: temp_f31 = field_0x44.R(); field_0x44.R(temp_f31 + (0.1f * (temp_f31 * field_0xc10))); break; } if (mRunKey.mActorInfo.id != mCamSetup.mActorID) { fopAc_ac_c* actor = Actor(mCamSetup.mActorID); if (actor != NULL) { mRunKey.mActorInfo.id = mCamSetup.mActorID; fopAcM_getNameString(actor, mRunKey.mActorInfo.name); } else { mRunKey.mActorInfo.id = mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e; } } u8 sp8 = 1; switch (field_0xc04) { case 4: mRunKey.mFovy -= 0.1f * mCamSetup.FovyTick(); if (mRunKey.mFovy < 1.0f) { mRunKey.mFovy = 1.0f; } break; case 5: mRunKey.mFovy += 0.1f * mCamSetup.FovyTick(); if (mRunKey.mFovy > 179.0f) { mRunKey.mFovy = 179.0f; } break; case 10: mRunKey.mBank += cDegree(mCamSetup.FovyTick()) * 0.1f; break; case 11: mRunKey.mBank -= cDegree(mCamSetup.FovyTick()) * 0.1f; break; case 8: s16 temp_r26 = mCamSetup.Rotate(var_f29 * (stick_x * field_0xc14)); field_0x44.U(field_0x44.U() + temp_r26); temp_r26 = mCamSetup.Rotate(var_f29 * (stick_y * field_0xc14)); field_0x44.V(field_0x44.V() + temp_r26); } if (sp8 != 0) { *sp30 = *var_r28 + field_0x44.Xyz(); } cSGlobe sp50(mRunKey.mEye - mRunKey.mCenter); mUp.set(0.0f, 1.0f, 0.0f); return 1; } int dDbgCamera_c::cmdTool() { if (mDoCPd_c::getTrigRight(mPadNo)) { if (mCmdMode >= 3) { mCmdMode = 0; } else { mCmdMode++; } } else if (mDoCPd_c::getTrigLeft(mPadNo)) { if (mCmdMode <= 0) { mCmdMode = 3; } else { mCmdMode--; } } if (!mIsPlaying) { switch (mCmdMode) { case 1: if (mDoCPd_c::getTrigA(mPadNo)) { mIsPlaying = true; field_0x704.field_0x0 = 0; field_0x704.field_0x4 = 0; makeZevData(); } break; case 2: if (mDoCPd_c::getTrigA(mPadNo)) { printZevData(); } break; case 0: if (mDoCPd_c::getTrigA(mPadNo)) { mCamSetup.mActorSrchRange = 10000000.0f; mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e; fopAcIt_Executor((fopAcIt_ExecutorFunc)search_actor, &mCamSetup); fopAc_ac_c* actor = Actor(mCamSetup.mActorID); if (actor != NULL) { mRunKey.mActorInfo.id = mCamSetup.mActorID; fopAcM_getNameString(actor, mRunKey.mActorInfo.name); } else { mRunKey.mActorInfo.id = fpcM_ERROR_PROCESS_ID_e; mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e; } } else if (mDoCPd_c::getTrigB(mPadNo)) { mRunKey.mActorInfo.id = fpcM_ERROR_PROCESS_ID_e; mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e; } break; case 3: if (mDoCPd_c::getTrigY(mPadNo)) { mRunKey.mCenter = dComIfGp_getPlayer(0)->attention_info.position; // field_0x704 = mRunKey.mCenter = dComIfGp_getPlayer(0)->attention_info.position; // this->unk730 = 3; } /* fallthrough */ default: return 1; } } else if (dComIfGp_event_runCheck() == 0) { mIsPlaying = false; } if (mIsPlaying) { field_0x704.field_0x4++; } return 1; } int dDbgCamera_c::makeZevData() { int keyNo; int spline_keyNo; int sp48; int spline_keyNum; int size = 0; int spline_timer; int sp38 = 0; field_0xb14 = 0; if (zevwork::WorkBuffer == NULL) { zevwork::WorkBuffer = new u8[zevwork::WorkSize]; if (zevwork::WorkBuffer == NULL) { OSReport("debug camera: memory allocate error!! %d byte\n", zevwork::WorkSize); return 0; } } OSReport("debug camera: making demo data...\n"); event_binary_data_header* header = (event_binary_data_header*)(zevwork::WorkBuffer + size); size += sizeof(event_binary_data_header) - 8; header->cutNum = 0; dEvDtEvent_DBG_c* event = (dEvDtEvent_DBG_c*)(zevwork::WorkBuffer + size); header->eventTop = size; header->eventNum = 1; size += sizeof(dEvDtEvent_DBG_c); event->Init(); strcpy(event->mName, "_DebugCamera"); event->mStaff[0] = 0; event->mStaff[1] = 1; event->mNStaff = 2; dEvDtStaff_DBG_c* camera_staff = (dEvDtStaff_DBG_c*)(zevwork::WorkBuffer + size); header->staffTop = size; header->staffNum = 2; size += sizeof(dEvDtStaff_DBG_c); camera_staff->Init(); strcpy(camera_staff->mName, "CAMERA"); camera_staff->mType = dEvDtStaff_c::TYPE_CAMERA; camera_staff->mIndex = 0; camera_staff->mStartCut = 1; camera_staff->mFlagID = sp38++; dEvDtStaff_DBG_c* all_staff = (dEvDtStaff_DBG_c*)(zevwork::WorkBuffer + size); size += sizeof(dEvDtStaff_DBG_c); all_staff->Init(); strcpy(all_staff->mName, "ALL"); all_staff->mType = dEvDtStaff_c::TYPE_ALL; all_staff->mIndex = 1; all_staff->mStartCut = 0; all_staff->mFlagID = sp38++; dEvDtCut_DBG_c* cut = (dEvDtCut_DBG_c*)(zevwork::WorkBuffer + size); header->cutTop = size; header->cutNum = 0; size += sizeof(dEvDtCut_c) * zevwork::CutMaxNum; dEvDtCut_DBG_c* prev_cut = NULL; cut->Init(); strcpy(cut->mName, "DUMMY"); cut->mIndex = header->cutNum++; cut->mFlagId = sp38++; event->mFlags[0] = cut->mFlagId; cut++; dEvDtData_DBG_c* pdata = (dEvDtData_DBG_c*)(zevwork::WorkBuffer + size); header->dataTop = size; header->dataNum = 0; size += sizeof(dEvDtData_DBG_c) * zevwork::DataMaxNum; f32* fdata = (f32*)(zevwork::WorkBuffer + size); header->fDataTop = size; header->fDataNum = 0; size += sizeof(f32) * zevwork::FDataMaxNum; int* idata = (int*)(zevwork::WorkBuffer + size); header->iDataTop = size; header->iDataNum = 0; size += sizeof(int) * zevwork::IDataMaxNum; char* sdata = (char*)(zevwork::WorkBuffer + size); header->sDataTop = size; header->sDataNum = 0; size += sizeof(char) * zevwork::SDataMaxNum; if (size > zevwork::WorkSize) { OSReport("debug camera: too big data!! %d > %d byte\n", size, zevwork::WorkSize); return 0; } int sp14 = 0; int sp10; for (keyNo = 0; keyNo < ARRAY_SIZE(mKeys); keyNo++) { cut->Init(); strcpy(cut->mName, ActionName(mKeys[keyNo].mAction)); cut->mDataTop = header->dataNum; switch (mKeys[keyNo].mAction) { case dDbgCam_KeyAction_FIXEDFRM: case dDbgCam_KeyAction_UNITRANS: if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { pdata->Init(); strcpy(pdata->mName, "RelActor"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_STRING; pdata->mDataIndex = sp14; pdata->mNumber = 1; pdata->mNext = header->dataNum; pdata++; strcpy(sdata, mKeys[keyNo].mActorInfo.name); sp48 = strlen(mKeys[keyNo].mActorInfo.name) + 1; header->sDataNum++; sdata += sp48; sp14 += sp48; } pdata->Init(); strcpy(pdata->mName, "Center"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_VEC; pdata->mDataIndex = header->fDataNum; pdata->mNumber = 3; pdata->mNext = header->dataNum; pdata++; *fdata++ = mKeys[keyNo].mCenter.x; *fdata++ = mKeys[keyNo].mCenter.y; *fdata++ = mKeys[keyNo].mCenter.z; header->fDataNum += 3; pdata->Init(); strcpy(pdata->mName, "Eye"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_VEC; pdata->mDataIndex = header->fDataNum; pdata->mNumber = 3; pdata->mNext = header->dataNum; pdata++; *fdata++ = mKeys[keyNo].mEye.x; *fdata++ = mKeys[keyNo].mEye.y; *fdata++ = mKeys[keyNo].mEye.z; header->fDataNum += 3; pdata->Init(); strcpy(pdata->mName, "Fovy"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_FLOAT; pdata->mDataIndex = header->fDataNum; pdata->mNumber = 1; pdata->mNext = header->dataNum; pdata++; *fdata++ = mKeys[keyNo].mFovy; header->fDataNum += 1; pdata->Init(); strcpy(pdata->mName, "Bank"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_FLOAT; pdata->mDataIndex = header->fDataNum; pdata->mNumber = 1; pdata->mNext = header->dataNum; pdata++; *fdata++ = mKeys[keyNo].mBank; header->fDataNum += 1; pdata->Init(); strcpy(pdata->mName, "Timer"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_INT; pdata->mDataIndex = header->iDataNum; pdata->mNumber = 1; pdata++; *idata++ = mKeys[keyNo].mTimer; header->iDataNum += 1; field_0xb14 += mKeys[keyNo].mTimer; break; case dDbgCam_KeyAction_BSPLINE: spline_timer = 0; sp48 = 0; int sp8; sp8 = spline_keyNum = keyNo; for (; spline_keyNum < ARRAY_SIZE(mActionKey); spline_keyNum++) { if (mActionKey[spline_keyNum] != ActionSymbol(dDbgCam_KeyAction_BSPLINE)) { break; } sp48++; spline_timer += mKeys[spline_keyNum].mTimer; } if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { pdata->Init(); strcpy(pdata->mName, "RelActor"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_STRING; pdata->mDataIndex = sp14; pdata->mNumber = 1; pdata->mNext = header->dataNum; pdata++; strcpy(sdata, mKeys[keyNo].mActorInfo.name); sp10 = strlen(mKeys[keyNo].mActorInfo.name) + 1; header->sDataNum += 1; sdata += sp10; sp14 += sp10; } pdata->Init(); strcpy(pdata->mName, "Centers"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_VEC; pdata->mDataIndex = header->fDataNum; pdata->mNumber = sp48 * 3; pdata->mNext = header->dataNum; pdata++; for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { *fdata++ = mKeys[spline_keyNo].mCenter.x; *fdata++ = mKeys[spline_keyNo].mCenter.y; *fdata++ = mKeys[spline_keyNo].mCenter.z; } header->fDataNum += sp48 * 3; pdata->Init(); strcpy(pdata->mName, "Eyes"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_VEC; pdata->mDataIndex = header->fDataNum; pdata->mNumber = sp48 * 3; pdata->mNext = header->dataNum; pdata++; for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { *fdata++ = mKeys[spline_keyNo].mEye.x; *fdata++ = mKeys[spline_keyNo].mEye.y; *fdata++ = mKeys[spline_keyNo].mEye.z; } header->fDataNum += sp48 * 3; pdata->Init(); strcpy(pdata->mName, "Fovys"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_FLOAT; pdata->mDataIndex = header->fDataNum; pdata->mNumber = sp48; pdata->mNext = header->dataNum; pdata++; for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { *fdata++ = mKeys[spline_keyNo].mFovy; } header->fDataNum += sp48; pdata->Init(); strcpy(pdata->mName, "Timer"); pdata->mIndex = header->dataNum++; pdata->mType = dEvDtData_c::TYPE_INT; pdata->mDataIndex = header->iDataNum; pdata->mNumber = 1; pdata++; *idata++ = spline_timer; header->iDataNum += 1; field_0xb14 += spline_timer; keyNo += sp48; } cut->mIndex = header->cutNum++; cut->mFlagId = sp38++; if (prev_cut != NULL) { cut->mFlags[0] = prev_cut->mFlagId; prev_cut->mNext = cut->mIndex; } prev_cut = cut; event->mFlags[0] = cut->mFlagId; cut++; } if (header->cutNum > zevwork::CutMaxNum) { OSReport("debug camera: too many cuts: %d > %d: broken event data\n", header->cutNum, zevwork::CutMaxNum); return 0; } if (header->dataNum > zevwork::DataMaxNum) { OSReport("debug camera: too many data: %d > %d: broken event data\n", header->dataNum, zevwork::DataMaxNum); return 0; } if (header->fDataNum > zevwork::FDataMaxNum) { OSReport("debug camera: too many fdata: %d > %d: broken event data\n", header->fDataNum, zevwork::FDataMaxNum); return 0; } if (header->fDataNum > zevwork::IDataMaxNum) { OSReport("debug camera: too many idata: %d > %d: broken event data\n", header->iDataNum, zevwork::IDataMaxNum); return 0; } if (header->sDataNum > zevwork::SDataMaxNum) { OSReport("debug camera: too many idata: %d > %d: broken event data\n", header->sDataNum, zevwork::SDataMaxNum); return 0; } if (header->cutNum != 0) { OSReport(" cut %d \n", header->cutNum); OSReport(" data %d \n", header->dataNum); OSReport(" float %d \n", header->fDataNum); OSReport(" integer %d \n", header->iDataNum); OSReport(" string %d \n", header->sDataNum); dEvM_HIO_c& hio = dComIfGp_getPEvtManager()->getEventHIO(); hio.setDebugCameraData(zevwork::WorkBuffer); } return 1; } void dDbgCamera_c::printZevData() { OSReport("\n"); OSReport("\n\n"); OSReport("\n"); OSReport("\n"); OSReport(" \n"); OSReport(" \n"); int keyNo; int spline_keyNo, spline_keyNum, spline_timer; for (keyNo = 0; keyNo < ARRAY_SIZE(mKeys); keyNo++) { switch (mKeys[keyNo].mAction) { case dDbgCam_KeyAction_FIXEDFRM: OSReport(" \n", keyNo); if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { OSReport(" "); OSReport("%s\n", mKeys[keyNo].mActorInfo.name); } OSReport(" "); OSReport("%.3f %.3f %.3f\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z); OSReport(" "); OSReport("%.3f %.3f %.3f\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z); OSReport(" "); OSReport("%.3f\n", mKeys[keyNo].mFovy); OSReport(" "); OSReport("%.3f\n", mKeys[keyNo].mBank); OSReport(" "); OSReport("%d\n", mKeys[keyNo].mTimer); OSReport(" \n"); break; case dDbgCam_KeyAction_UNITRANS: OSReport(" \n", keyNo); if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { OSReport(" "); OSReport("%s\n", mKeys[keyNo].mActorInfo.name); } OSReport(" "); OSReport("%.3f %.3f %.3f\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z); OSReport(" "); OSReport("%.3f %.3f %.3f\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z); OSReport(" "); OSReport("%.3f\n", mKeys[keyNo].mFovy); OSReport(" "); OSReport("%.3f\n", mKeys[keyNo].mBank); OSReport(" "); OSReport("%d\n", mKeys[keyNo].mTimer); OSReport(" \n"); break; case dDbgCam_KeyAction_BSPLINE: spline_keyNum = keyNo; for (; spline_keyNum < ARRAY_SIZE(mActionKey); spline_keyNum++) { if (mActionKey[spline_keyNum] != ActionSymbol(dDbgCam_KeyAction_BSPLINE)) { break; } } OSReport(" \n", keyNo); if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { OSReport(" "); OSReport("%s\n", mKeys[keyNo].mActorInfo.name); } OSReport(" \n"); for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { OSReport(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mCenter.x, mKeys[spline_keyNo].mCenter.y, mKeys[spline_keyNo].mCenter.z); } OSReport(" \n"); OSReport(" \n"); for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { OSReport(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mEye.x, mKeys[spline_keyNo].mEye.y, mKeys[spline_keyNo].mEye.z); } OSReport(" \n"); OSReport(" \n"); for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { OSReport(" %.3f\n", mKeys[spline_keyNo].mFovy); } OSReport(" \n"); spline_timer = 0; for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { spline_timer += mKeys[spline_keyNo].mTimer; } OSReport(" %d\n", spline_timer); OSReport(" \n"); keyNo = spline_keyNum - 1; break; } } OSReport(" \n"); OSReport(" \n"); OSReport(" \n"); OSReport(" \n"); OSReport(" \n"); OSReport("\n"); OSReport("\n"); } void dDbgCamera_c::WriteZevData() { OpenFile(); PrintFile("\n"); PrintFile("\n\n"); PrintFile("\n"); PrintFile("\n"); PrintFile(" \n"); PrintFile(" \n"); int keyNo; int spline_keyNo, spline_keyNum, spline_timer; for (keyNo = 0; keyNo < ARRAY_SIZE(mKeys); keyNo++) { switch (mKeys[keyNo].mAction) { case dDbgCam_KeyAction_FIXEDFRM: PrintFile(" \n", keyNo); if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { PrintFile(" "); PrintFile("%s\n", mKeys[keyNo].mActorInfo.name); } PrintFile(" "); PrintFile("%.3f %.3f %.3f\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z); PrintFile(" "); PrintFile("%.3f %.3f %.3f\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z); PrintFile(" "); PrintFile("%.3f\n", mKeys[keyNo].mFovy); PrintFile(" "); PrintFile("%.3f\n", mKeys[keyNo].mBank); PrintFile(" "); PrintFile("%d\n", mKeys[keyNo].mTimer); PrintFile(" \n"); break; case dDbgCam_KeyAction_UNITRANS: PrintFile(" \n", keyNo); if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { PrintFile(" "); PrintFile("%s\n", mKeys[keyNo].mActorInfo.name); } PrintFile(" "); PrintFile("%.3f %.3f %.3f\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z); PrintFile(" "); PrintFile("%.3f %.3f %.3f\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z); PrintFile(" "); PrintFile("%.3f\n", mKeys[keyNo].mFovy); PrintFile(" "); PrintFile("%.3f\n", mKeys[keyNo].mBank); PrintFile(" "); PrintFile("%d\n", mKeys[keyNo].mTimer); PrintFile(" \n"); break; case dDbgCam_KeyAction_BSPLINE: spline_keyNum = keyNo; for (; spline_keyNum < ARRAY_SIZE(mActionKey); spline_keyNum++) { if (mActionKey[spline_keyNum] != ActionSymbol(dDbgCam_KeyAction_BSPLINE)) { break; } } PrintFile(" \n", keyNo); if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { PrintFile(" "); PrintFile("%s\n", mKeys[keyNo].mActorInfo.name); } PrintFile(" \n"); for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { PrintFile(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mCenter.x, mKeys[spline_keyNo].mCenter.y, mKeys[spline_keyNo].mCenter.z); } PrintFile(" \n"); PrintFile(" \n"); for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { PrintFile(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mEye.x, mKeys[spline_keyNo].mEye.y, mKeys[spline_keyNo].mEye.z); } PrintFile(" \n"); PrintFile(" \n"); for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { PrintFile(" %.3f\n", mKeys[spline_keyNo].mFovy); } PrintFile(" \n"); spline_timer = 0; for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { spline_timer += mKeys[spline_keyNo].mTimer; } PrintFile(" %d\n", spline_timer); PrintFile(" \n"); keyNo = spline_keyNum - 1; break; } } PrintFile(" \n"); PrintFile(" \n"); PrintFile(" \n"); PrintFile(" \n"); PrintFile(" \n"); PrintFile("\n"); PrintFile("\n"); CloseFile(); } void dDbgCamera_c::monitor() { s32 pos_x = mCamSetup.mPosX; s32 pos_y = mCamSetup.mPosY; s32 y_offset = 15; if (!mIsPlaying) { cXyz center(mRunKey.mCenter); cXyz eye(mRunKey.mEye); fopAc_ac_c* actor = NULL; f32 u = field_0x44.U().Degree(); if (mRunKey.mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { actor = Actor(mRunKey.mActorInfo.id); if (actor != NULL) { cSGlobe sp70(mRunKey.mCenter - actor->attention_info.position); sp70.U(sp70.U() - cSAngle(actor->shape_angle.y)); center = sp70.Xyz(); cSGlobe sp68(mRunKey.mEye - actor->attention_info.position); sp68.U(sp68.U() - cSAngle(actor->shape_angle.y)); eye = sp68.Xyz(); u = cSAngle(field_0x44.U() - actor->shape_angle.y).Degree(); } } Report(pos_x, pos_y, 1, "CTR%11.3f%11.3f%11.3f", center.x, center.y, center.z); Report(pos_x, pos_y += y_offset, 1, "EYE%11.3f%11.3f%11.3f", eye.x, eye.y, eye.z); Report(pos_x, pos_y += y_offset, 1, "RVU %10.3f %10.3f %10.3f", field_0x44.R(), field_0x44.V().Degree(), u); Report(pos_x, pos_y += y_offset, 1, "FVY %10.3f %s %s %s", mRunKey.mFovy, field_0xc08 ? "[L]" : "[ ]", field_0xc0c ? "[R]" : "[ ]", field_0xc08 ? "CTR->EYE" : "EYE->CTR"); Report(pos_x - 13, pos_y + (y_offset * field_0x54), 7, "*"); if (actor != NULL) { Report(pos_x, pos_y += y_offset, 1, "BNK %10.3f @%7.7s", mRunKey.mBank, &mRunKey.mActorInfo.name); } else { Report(pos_x, pos_y += y_offset, 1, "BNK %10.3f @ WORLD", mRunKey.mBank); } Report(pos_x, pos_y += y_offset, 1, "KEY %s", mActionKey); char spC0[32]; int var_r27; for (var_r27 = 0; var_r27 < ARRAY_SIZE(spC0); var_r27++) { if (var_r27 == field_0x58) { spC0[var_r27] = '_'; var_r27++; break; } spC0[var_r27] = ' '; } spC0[var_r27] = 0; Report(pos_x, pos_y, 7, " %s", spC0); Report(pos_x, pos_y += y_offset, 1, "CMD BASE PLAY TERM FIXP"); *spC0 = 0; for (var_r27 = 0; var_r27 < 4; var_r27++) { if (var_r27 == mCmdMode) { strcat(spC0, "____ "); break; } strcat(spC0, " "); } Report(pos_x, pos_y, 7, " %s", spC0); Report(pos_x, pos_y += y_offset, 1, "ACT %c %8.8s", ActionSymbol(mRunKey.mAction), ActionName(mRunKey.mAction)); Report(pos_x, pos_y += y_offset, 1, "TIM %3d", mRunKey.mTimer); } else { Report(pos_x, pos_y, 1, "CNT %4d/%4d", field_0x704.field_0x4 - 1, field_0xb14); } } bool dDbgCamera_c::showCenterMarker() { switch (mCamSetup.CenterMarker()) { case 1: if (field_0xc00 != 18 || field_0xc04 != 18 || field_0xc08 != 0 || field_0xc0c != 0) { field_0xc18 = 60; } if (field_0xc18 != 0) { field_0xc18--; } return field_0xc18 != 0; case 3: return true; case 2: case 0: default: return false; } } bool dDbgCamera_c::showCameraPos() { return mCamSetup.CheckFlag(4); } bool dDbgCamera_c::showIdlCameraPos() { return mCamSetup.CheckFlag(8); } void dDbgCamera_c::Init(dCamera_c* i_dbgCamera) { mpCamera = i_dbgCamera; mRunKey = PlaneKey(); mRunKey.mAction = dDbgCam_KeyAction_FIXEDFRM; field_0x58 = 0; int i; for (i = 0; i < ARRAY_SIZE(mKeys); i++) { mKeys[i] = PlaneKey(); } memset(mActionKey, '-', sizeof(mActionKey)); field_0x80 = 0; field_0x54 = 0; mCmdMode = 0; mCamSetup.Init(this); } void dDbgCamera_c::Finish() { mCamSetup.Finish(); } void dDbgCamera_c::Reset(dCamera_c* i_dbgCamera) { mpCamera = i_dbgCamera; mPadNo = PAD_3; field_0x50 = 0; mUp = i_dbgCamera->Up(); if (mActionKey[field_0x58] == '-') { mRunKey = PlaneKey(); } field_0xc04 = field_0xc00 = 18; field_0xc10 = field_0xc14 = 0.0f; field_0xc08 = field_0xc0c = 0; field_0xc18 = 0; mCmdMode = 0; mIsPlaying = false; } int dDbgCamera_c::Run() { int rt; if (mDoCPd_c::getHoldLockL(mPadNo)) { field_0xc08 = 1; } else { field_0xc08 = 0; } if (mDoCPd_c::getHoldLockR(mPadNo)) { field_0xc0c = 1; } else { field_0xc0c = 0; } if (mDoCPd_c::getTrigUp(mPadNo)) { if (field_0x54 == 0) { field_0x54 = 5; } else { field_0x54--; } } else if (mDoCPd_c::getTrigDown(mPadNo)) { if (field_0x54 >= 5) { field_0x54 = 0; } else { field_0x54++; } } if (field_0x54 == 4) { if (mDoCPd_c::getTrigLeft(mPadNo)) { if (mRunKey.mAction == dDbgCam_KeyAction_FIXEDFRM) { mRunKey.mAction = dDbgCam_KeyAction_NOACTION; } else { mRunKey.mAction--; } } else if (mDoCPd_c::getTrigRight(mPadNo)) { if (mRunKey.mAction == dDbgCam_KeyAction_NOACTION) { mRunKey.mAction = dDbgCam_KeyAction_FIXEDFRM; } else { mRunKey.mAction++; } } } else if (field_0x54 == 5) { if (mDoCPd_c::getTrigRight(mPadNo)) { mRunKey.mTimer++; field_0xc1c = 0; } else if (mDoCPd_c::getHoldRight(mPadNo)) { if (field_0xc1c++ > 20) { mRunKey.mTimer++; } } else if (mDoCPd_c::getTrigLeft(mPadNo)) { mRunKey.mTimer--; field_0xc1c = 0; } else if (mDoCPd_c::getHoldLeft(mPadNo)) { if (field_0xc1c++ > 20) { mRunKey.mTimer--; } } } else if (field_0x54 == 3) { rt = cmdTool(); } else { rt = moveTool(); } if (mCamSetup.CheckFlag(0x8000)) { monitor(); } return rt; } int dDbgCamera_c::DrawShape() { int rt = 0; if (showCameraPos()) { cXyz sp2F0[] = { cXyz(5.0f, 6.5f, 10.0f), cXyz(-5.0f, 6.5f, 10.0f), cXyz(5.0f, -7.5f, 10.0f), cXyz(-5.0f, -7.5f, 10.0f), cXyz(5.0f, 6.5f, -10.0f), cXyz(-5.0f, 6.5f, -10.0f), cXyz(5.0f, -5.0f, -10.0f), cXyz(-5.0f, -5.0f, -10.0f), }; cXyz sp290[] = { cXyz(3.0f, 3.0f, 10.0f), cXyz(-3.0f, 3.0f, 10.0f), cXyz(3.0f, -3.0f, 10.0f), cXyz(-3.0f, -3.0f, 10.0f), cXyz(3.0f, 3.0f, 16.0f), cXyz(-3.0f, 3.0f, 16.0f), cXyz(3.0f, -3.0f, 16.0f), cXyz(-3.0f, -3.0f, 16.0f), }; cXyz sp1A0[] = { cXyz(80.0f, 0.0f, 0.0f), cXyz(-80.0f, 0.0f, 0.0f), cXyz(0.0f, 80.0f, 0.0f), cXyz(0.0f, -80.0f, 0.0f), }; dCamera_c* camera = dCam_getBody(); GXColor sp6C = {0xFF, 0xDC, 0x80, 0x96}; GXColor sp68 = {0xDC, 0xFF, 0x80, 0x96}; GXColor sp64 = {0xFF, 0xFF, 0xFF, 0x32}; cXyz cam_center = camera->Center(); cXyz cam_eye = camera->Eye(); cSAngle cam_u(camera->U()); cSAngle cam_v(camera->V()); int i; for (i = 0; i < 8; i++) { sp2F0[i] = dCamMath::xyzRotateX(sp2F0[i], cam_v); sp2F0[i] = dCamMath::xyzRotateY(sp2F0[i], cam_u); sp2F0[i] += cam_eye; sp290[i] = dCamMath::xyzRotateX(sp290[i], cam_v); sp290[i] = dCamMath::xyzRotateY(sp290[i], cam_u); sp290[i] += cam_eye; } dDbVw_drawCube8pOpa(sp2F0, sp6C); dDbVw_drawCube8pOpa(sp290, sp6C); dDbVw_drawSphereXlu(cam_eye, 3.0f, sp68, 1); dDbVw_drawSphereXlu(cam_center, 5.0f, sp68, 1); for (i = 0; i < 4; i++) { sp1A0[i] = dCamMath::xyzRotateX(sp1A0[i], cam_v); sp1A0[i] = dCamMath::xyzRotateY(sp1A0[i], cam_u); sp1A0[i] += cam_center; } cSGlobe sp78(80.0f + camera->R(), -cam_v, cam_u); dDbVw_drawLineXlu(cam_eye, cam_center, sp64, 1, 0xC); dDbVw_drawLineXlu(sp1A0[0], sp1A0[1], sp64, 1, 0xC); dDbVw_drawLineXlu(sp1A0[2], sp1A0[3], sp64, 1, 0xC); rt = 1; } if (showIdlCameraPos()) { cXyz sp230[] = { cXyz(5.0f, 6.5f, 10.0f), cXyz(-5.0f, 6.5f, 10.0f), cXyz(5.0f, -7.5f, 10.0f), cXyz(-5.0f, -7.5f, 10.0f), cXyz(5.0f, 6.5f, -10.0f), cXyz(-5.0f, 6.5f, -10.0f), cXyz(5.0f, -5.0f, -10.0f), cXyz(-5.0f, -5.0f, -10.0f), }; cXyz sp1D0[] = { cXyz(3.0f, 3.0f, 10.0f), cXyz(-3.0f, 3.0f, 10.0f), cXyz(3.0f, -3.0f, 10.0f), cXyz(-3.0f, -3.0f, 10.0f), cXyz(3.0f, 3.0f, 16.0f), cXyz(-3.0f, 3.0f, 16.0f), cXyz(3.0f, -3.0f, 16.0f), cXyz(-3.0f, -3.0f, 16.0f), }; cXyz sp170[] = { cXyz(80.0f, 0.0f, 0.0f), cXyz(-80.0f, 0.0f, 0.0f), cXyz(0.0f, 80.0f, 0.0f), cXyz(0.0f, -80.0f, 0.0f), }; dCamera_c* camera = dCam_getBody(); GXColor sp60 = {0x80, 0xFF, 0xDC, 0x5A}; GXColor sp5C = {0x80, 0xDC, 0xFF, 0x5A}; GXColor sp58 = {0xFF, 0xFF, 0xFF, 0x1E}; cXyz cam_icenter = camera->iCenter(); cXyz cam_ieye = camera->iEye(); cSAngle cam_iu(camera->iU()); cSAngle cam_iv(camera->iV()); int i; for (i = 0; i < 8; i++) { sp230[i] = dCamMath::xyzRotateX(sp230[i], cam_iv); sp230[i] = dCamMath::xyzRotateY(sp230[i], cam_iu); sp230[i] += cam_ieye; sp1D0[i] = dCamMath::xyzRotateX(sp1D0[i], cam_iv); sp1D0[i] = dCamMath::xyzRotateY(sp1D0[i], cam_iu); sp1D0[i] += cam_ieye; } dDbVw_drawCube8pOpa(sp230, sp60); dDbVw_drawCube8pOpa(sp1D0, sp60); dDbVw_drawSphereXlu(cam_ieye, 3.0f, sp5C, 1); dDbVw_drawSphereXlu(cam_icenter, 5.0f, sp5C, 1); for (i = 0; i < 4; i++) { sp170[i] = dCamMath::xyzRotateX(sp170[i], cam_iv); sp170[i] = dCamMath::xyzRotateY(sp170[i], cam_iu); sp170[i] += cam_icenter; } cSGlobe sp70(80.0f + camera->iR(), -cam_iv, cam_iu); cam_icenter = cam_ieye + sp70.Xyz(); dDbVw_drawLineXlu(cam_ieye, cam_icenter, sp58, 1, 0xC); dDbVw_drawLineXlu(sp170[0], sp170[01], sp58, 1, 0xC); dDbVw_drawLineXlu(sp170[2], sp170[3], sp58, 1, 0xC); rt = 1; } if (showCenterMarker()) { f32 cam_cross = mCamSetup.CenterCloss(); GXColor color = {0x80, 0x80, 0xFF, 0x80}; cXyz sp134; cXyz sp128; sp134 = mRunKey.mCenter; sp128 = mRunKey.mCenter; sp134.x += cam_cross; sp128.x -= cam_cross; dDbVw_drawLineXlu(sp134, sp128, color, 1, 0xC); sp134.x -= cam_cross; sp128.x += cam_cross; sp134.y += cam_cross; sp128.y -= cam_cross; dDbVw_drawLineXlu(sp134, sp128, color, 1, 0xC); sp134.y -= cam_cross; sp128.y += cam_cross; sp134.z += cam_cross; sp128.z -= cam_cross; dDbVw_drawLineXlu(sp134, sp128, color, 1, 0xC); cam_cross = mCamSetup.CenterBall(); GXColor sp50 = {0xFF, 0x80, 0x80, 0x80}; if (field_0xc08 != 0) { sp50.g = 0xFF; } if (field_0xc0c != 0) { sp50.b = 0xFF; } dDbVw_drawSphereXlu(mRunKey.mCenter, cam_cross, sp50, 1); rt = 1; } if (mCamSetup.CheckFlag(0x10)) { switch (mLchkNum) { case 2: // dComIfG_Bgsp().DrawPoly(mLchk[1], l_color2); /* fallthrough */ case 1: // dComIfG_Bgsp().DrawPoly(mLchk[0], l_color1); break; } } return rt; } JUtility::TColor get_color(JUtility::TColor color) { static JUtility::TColor colors[] = { JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xC0, 0xFF), JUtility::TColor(0xFF, 0xC0, 0xC0, 0xFF), JUtility::TColor(0xC0, 0xFF, 0xC0, 0xFF), JUtility::TColor(0xC0, 0xC0, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0x80, 0xFF), JUtility::TColor(0xFF, 0x80, 0x80, 0xFF), JUtility::TColor(0xC0, 0xFF, 0x80, 0xFF), JUtility::TColor(0x80, 0x80, 0xFF, 0xFF), }; (void)(u32)color; int var_r30 = 1; if (var_r30 && (u32)color < 9) { return colors[(u32)color & ~0x80000000]; } return color; } int dDbgCamera_c::Report(int x, int y, JUtility::TColor color, const char* mesg, ...) { char buffer[0x100]; static JUtility::TColor ShadowDarkColor(0, 0, 0, 0x80); va_list list; va_start(list, mesg); vsnprintf(buffer, sizeof(buffer), mesg, list); va_end(list); JUTDbPrint::getManager()->flush(); JUTDbPrint::getManager()->setCharColor(ShadowDarkColor); JUTReport(x + 2, y + 2, buffer); JUTDbPrint::getManager()->flush(); JUTDbPrint::getManager()->setCharColor(get_color(color)); JUTReport(x, y, buffer); JUTDbPrint::getManager()->flush(); JUTDbPrint::getManager()->setCharColor(g_HIO.mColor); return 1; } void dDbgCamera_c::OpenFile() { const char ext[] = "イベントファイル(*.zev)\0*.zev\0その他のファイル(*.*)\0*.*\0"; mFile.open("dbgcam.zev", 2, ext, NULL, NULL, NULL); } void dDbgCamera_c::PrintFile(char* string, ...) { char buffer[0x100]; va_list args; va_start(args, string); vsnprintf(buffer, sizeof(buffer), string, args); va_end(args); mFile.writeData(buffer, strlen(buffer)); } void dDbgCamera_c::CloseFile() { mFile.close(); } #endif