Merge branch 'main' into 26-03-28-movie-player

This commit is contained in:
Pieter-Jan Briers
2026-04-01 15:15:08 +02:00
committed by GitHub
115 changed files with 3358 additions and 1240 deletions
+19
View File
@@ -54,6 +54,10 @@
#include "res/Object/Alink.h"
#include <cstring>
#if TARGET_PC
bool dusk::tweaks::FastIronBoots = false;
#endif
static int daAlink_Create(fopAc_ac_c* i_this);
static int daAlink_Delete(daAlink_c* i_this);
static int daAlink_Execute(daAlink_c* i_this);
@@ -7509,6 +7513,11 @@ void daAlink_c::setBlendMoveAnime(f32 i_morf) {
f32 sp28 = mpHIO->mMove.m.mFootPositionRatio;
BOOL sp24 = checkEventRun();
BOOL sp20 = checkBootsMoveAnime(1);
#if TARGET_PC
if (dusk::tweaks::FastIronBoots) {
sp20 = FALSE;
}
#endif
f32 var_f29;
@@ -9469,6 +9478,11 @@ void daAlink_c::setStickData() {
} else {
mHeavySpeedMultiplier = mpHIO->mItem.mIronBoots.m.mInputFactor;
}
#if TARGET_PC
if (dusk::tweaks::FastIronBoots) {
mHeavySpeedMultiplier = 1.0f;
}
#endif
mStickValue *= mHeavySpeedMultiplier;
} else if (checkBootsOrArmorHeavy()) {
if (checkZoraWearAbility()) {
@@ -9476,6 +9490,11 @@ void daAlink_c::setStickData() {
} else {
mHeavySpeedMultiplier = mpHIO->mItem.mIronBoots.m.mWaterInputFactor;
}
#if TARGET_PC
if (dusk::tweaks::FastIronBoots) {
mHeavySpeedMultiplier = 1.0f;
}
#endif
mStickValue *= mHeavySpeedMultiplier;
} else if ((checkWolf() && field_0x2fbc == 11 && checkWaterPolygonUnder()) ||
mGndPolyAtt0 == 11)
+1 -1
View File
@@ -976,7 +976,7 @@ void daBgObj_c::setSe() {
temp++;
for (; i != 0; i--) {
fopAcM_seStart(this, *temp, 0);
fopAcM_seStart(this, *(BE(u32)*)temp, 0);
temp++;
}
}
+514 -509
View File
File diff suppressed because it is too large Load Diff
+10 -10
View File
@@ -189,8 +189,8 @@ int daE_OC_c::draw() {
return 1;
}
static void daE_OC_Draw(daE_OC_c* i_this) {
i_this->draw();
static int daE_OC_Draw(daE_OC_c* i_this) {
return i_this->draw();
}
daE_OC_c* E_OC_n::m_battle_oc;
@@ -2639,12 +2639,12 @@ int daE_OC_c::execute() {
return 1;
}
static void daE_OC_Execute(daE_OC_c* i_this) {
i_this->execute();
static int daE_OC_Execute(daE_OC_c* i_this) {
return i_this->execute();
}
static BOOL daE_OC_IsDelete(daE_OC_c* param_0) {
return TRUE;
static int daE_OC_IsDelete(daE_OC_c* param_0) {
return 1;
}
int daE_OC_c::_delete() {
@@ -2662,9 +2662,9 @@ int daE_OC_c::_delete() {
return 1;
}
static void daE_OC_Delete(daE_OC_c* i_this) {
static int daE_OC_Delete(daE_OC_c* i_this) {
fopAcM_RegisterDeleteID(i_this, "E_OC");
i_this->_delete();
return i_this->_delete();
}
int daE_OC_c::CreateHeap() {
@@ -2833,8 +2833,8 @@ cPhs_Step daE_OC_c::create() {
return phase;
}
static void daE_OC_Create(daE_OC_c* i_this) {
i_this->create();
static int daE_OC_Create(daE_OC_c* i_this) {
return i_this->create();
}
static actor_method_class l_daE_OC_Method = {
+201 -181
View File
@@ -10,6 +10,10 @@
#include <cmath>
#include "f_op/f_op_actor_enemy.h"
#define PLAYER_NOT_FOUND 0
#define PLAYER_TARGET 1
#define PLAYER_NEAR 2
class daE_WS_HIO_c : public JORReflexible {
public:
daE_WS_HIO_c();
@@ -28,6 +32,7 @@ public:
/* 0x24 */ u8 debug_ON;
};
namespace {
static dCcD_SrcSph cc_ws_src = {
{
@@ -66,13 +71,27 @@ daE_WS_HIO_c::daE_WS_HIO_c() {
attack_speed = 10.0f;
}
#if DEBUG
void daE_WS_HIO_c::genMessage(JORMContext* ctx) {
ctx->genLabel("スタルウォーーーーーーーール", 0x80000001);
ctx->genSlider("基本サイズ", &base_size, 0.0f, 5.0f);
ctx->genSlider("サーチ角度", &search_angle, 0.0f, 30000.0f);
ctx->genSlider("攻撃速度", &attack_speed, 0.0f, 100.0f);
ctx->genSlider("移動範囲", &move_range, 0.0f, 1000.0f);
ctx->genSlider("サーチ範囲", &search_range, 0.0f, 1000.0f);
ctx->genSlider("サーチY上下範囲", &search_y_range, 0.0f, 1000.0f);
ctx->genSlider("地面までの距離", &dist_to_ground, 0.0f, 1000.0f);
ctx->genCheckBox("デバック表示", &debug_ON, 0x1);
}
#endif
int daE_WS_c::draw() {
J3DModel* model_p = mpModelMorf->getModel();
J3DModel* model = mAnm_p->getModel();
g_env_light.settingTevStruct(0, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(model_p, &tevStr);
g_env_light.setLightTevColorType_MAJI(model, &tevStr);
if (mDownColor) {
J3DModelData* modelData_p = model_p->getModelData();
J3DModelData* modelData_p = model->getModelData();
for (u16 i = 0; i < modelData_p->getMaterialNum(); i++) {
J3DMaterial* material_p = modelData_p->getMaterialNodePointer(i);
material_p->getTevColor(0)->r = mDownColor;
@@ -81,48 +100,48 @@ int daE_WS_c::draw() {
}
}
mpModelMorf->entryDL();
mAnm_p->entryDL();
cXyz sp8;
sp8.set(current.pos.x, 100.0f + current.pos.y, current.pos.z);
mShadowId = dComIfGd_setShadow(mShadowId, 1, model_p, &sp8, 400.0f, 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
mShadowId = dComIfGd_setShadow(mShadowId, 1, model, &sp8, 400.0f, 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
return 1;
}
static int daE_WS_Draw(daE_WS_c* a_this) {
return a_this->draw();
static int daE_WS_Draw(daE_WS_c* i_this) {
return i_this->draw();
}
void daE_WS_c::setBck(int i_anm, u8 i_mode, f32 i_morf, f32 i_speed) {
mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_WS", i_anm), i_mode, i_morf, i_speed, 0.0f, -1.0f);
mAnm_p->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_WS", i_anm), i_mode, i_morf, i_speed, 0.0f, -1.0f);
}
void daE_WS_c::setFootSound() {
if (mpModelMorf->getAnm() == dComIfG_getObjectRes("E_WS", 7)) {
if (mpModelMorf->checkFrame(0.0f) ||
mpModelMorf->checkFrame(4.5f) ||
mpModelMorf->checkFrame(7.5f) ||
mpModelMorf->checkFrame(9.0f) ||
mpModelMorf->checkFrame(13.5f) ||
mpModelMorf->checkFrame(16.0f) ||
mpModelMorf->checkFrame(19.0f) ||
mpModelMorf->checkFrame(23.5f) ||
mpModelMorf->checkFrame(25.0f) ||
mpModelMorf->checkFrame(28.0f) ||
mpModelMorf->checkFrame(32.5f) ||
mpModelMorf->checkFrame(36.0f) ||
mpModelMorf->checkFrame(39.5f))
if (mAnm_p->getAnm() == dComIfG_getObjectRes("E_WS", 7)) {
if (mAnm_p->checkFrame(0.0f) ||
mAnm_p->checkFrame(4.5f) ||
mAnm_p->checkFrame(7.5f) ||
mAnm_p->checkFrame(9.0f) ||
mAnm_p->checkFrame(13.5f) ||
mAnm_p->checkFrame(16.0f) ||
mAnm_p->checkFrame(19.0f) ||
mAnm_p->checkFrame(23.5f) ||
mAnm_p->checkFrame(25.0f) ||
mAnm_p->checkFrame(28.0f) ||
mAnm_p->checkFrame(32.5f) ||
mAnm_p->checkFrame(36.0f) ||
mAnm_p->checkFrame(39.5f))
{
mSound.startCreatureSound(Z2SE_EN_WS_FOOTNOTE, 0, -1);
}
} else if (mpModelMorf->getAnm() == dComIfG_getObjectRes("E_WS", 8)) {
if (mpModelMorf->checkFrame(0.5f) ||
mpModelMorf->checkFrame(6.0f) ||
mpModelMorf->checkFrame(11.0f) ||
mpModelMorf->checkFrame(16.0f) ||
mpModelMorf->checkFrame(21.0f) ||
mpModelMorf->checkFrame(26.5f) ||
mpModelMorf->checkFrame(31.0f))
} else if (mAnm_p->getAnm() == dComIfG_getObjectRes("E_WS", 8)) {
if (mAnm_p->checkFrame(0.5f) ||
mAnm_p->checkFrame(6.0f) ||
mAnm_p->checkFrame(11.0f) ||
mAnm_p->checkFrame(16.0f) ||
mAnm_p->checkFrame(21.0f) ||
mAnm_p->checkFrame(26.5f) ||
mAnm_p->checkFrame(31.0f))
{
mSound.startCreatureSound(Z2SE_EN_WS_FOOTNOTE, 0, -1);
}
@@ -141,13 +160,13 @@ f32 daE_WS_c::calcTargetDist(cXyz i_basePos, cXyz i_targetPos) {
}
s16 daE_WS_c::calcTargetAngle(cXyz i_basePos, cXyz i_targetPos) {
cXyz sp1C;
cXyz sp10 = i_targetPos - i_basePos;
cXyz mae;
cXyz ato = i_targetPos - i_basePos;
mDoMtx_stack_c::XrotS(-field_0x668.x);
mDoMtx_stack_c::YrotM(-field_0x668.y);
mDoMtx_stack_c::multVec(&sp10, &sp1C);
return cM_atan2s(sp1C.x, sp1C.z);
mDoMtx_stack_c::XrotS(-mTargetWallAngle.x);
mDoMtx_stack_c::YrotM(-mTargetWallAngle.y);
mDoMtx_stack_c::multVec(&ato, &mae);
return cM_atan2s(mae.x, mae.z);
}
static u8 hio_set;
@@ -171,13 +190,13 @@ int daE_WS_c::checkPlayerPos() {
dComIfGp_checkPlayerStatus1(0, 0x2000000) ||
dComIfGp_checkPlayerStatus1(0, 0x10000) ||
calcTargetDist(current.pos, player_pos) < 150.0f) &&
checkInSearchRange(player_pos, field_0x65c) && checkInSearchRange(current.pos, field_0x65c))
checkInSearchRange(player_pos, mHomePos) && checkInSearchRange(current.pos, mHomePos))
{
dBgS_GndChk gndchk;
cXyz gndpos;
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(field_0x66e);
mDoMtx_stack_c::ZXYrotM(mWallAngle);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f);
mDoMtx_stack_c::multVecZero(&gndpos);
@@ -187,17 +206,17 @@ int daE_WS_c::checkPlayerPos() {
if (current.pos.y - gndpos.y > l_HIO.dist_to_ground) {
// Return 1 if walltula is looking towards player
if (cLib_distanceAngleS(shape_angle.y, calcTargetAngle(current.pos, player_pos)) < l_HIO.search_angle) {
return 1;
return PLAYER_TARGET;
}
// otherwise return 2 if player is near the walltula
if (calcTargetDist(current.pos, player_pos) < 150.0f) {
return 2;
return PLAYER_NEAR;
}
}
}
return 0;
return PLAYER_NOT_FOUND;
}
bool daE_WS_c::checkAttackEnd() {
@@ -205,17 +224,17 @@ bool daE_WS_c::checkAttackEnd() {
mDoMtx_stack_c::copy(daPy_getLinkPlayerActorClass()->getModelJointMtx(0));
mDoMtx_stack_c::multVecZero(&player_pos);
BOOL r30 = false;
BOOL checkPlayerNear = FALSE;
if (
daPy_getPlayerActorClass()->checkClimbMove() ||
dComIfGp_checkPlayerStatus1(0, 0x02000000) ||
dComIfGp_checkPlayerStatus1(0, 0x10000) ||
calcTargetDist(current.pos, player_pos) < 200.0f
) {
r30 = true;
checkPlayerNear = TRUE;
}
if (!r30 ||
!checkInSearchRange(current.pos, field_0x65c) ||
if (!checkPlayerNear ||
!checkInSearchRange(current.pos, mHomePos) ||
checkBeforeBg(shape_angle.y)
)
{
@@ -228,41 +247,41 @@ bool daE_WS_c::checkAttackEnd() {
}
void daE_WS_c::executeWait() {
int temp_r3 = checkPlayerPos();
if (temp_r3 == 1) {
int playerCheck = checkPlayerPos();
if (playerCheck == PLAYER_TARGET) {
setActionMode(ACTION_ATTACK_e);
return;
}
if (temp_r3 == 2 && mMode != 3 && mMode != 4) {
if (playerCheck == PLAYER_NEAR && mMode != 3 && mMode != 4) {
mMode = 2;
}
switch (mMode) {
case 0:
mMoveWaitTimer = 50.0f + cM_rndF(50.0f);
mWaitTimer = 50.0f + cM_rndF(50.0f);
setBck(9, 2, 3.0f, 1.0f);
mMode = 1;
/* fallthrough */
case 1:
if (mMoveWaitTimer == 0) {
if (mWaitTimer == 0) {
mMode = 2;
}
break;
case 2:
speedF = 0.0f;
field_0x690 = 0;
mTargetAngle = shape_angle.y + cM_rndFX(32768.0f);
mIsReturnHome = 0;
mTargetAngle = shape_angle.y + cM_rndFX(32768.0f); // random turn up to ±180°
if (temp_r3 == 2) {
mTargetStep = 0x200;
if (playerCheck == PLAYER_NEAR) {
mStepAngle = 0x200;
setBck(8, 2, 3.0f, 2.4f);
} else {
if (calcTargetDist(current.pos, field_0x65c) >= l_HIO.move_range) {
mTargetAngle = calcTargetAngle(current.pos, field_0x65c);
field_0x690 = 1;
if (calcTargetDist(current.pos, mHomePos) >= l_HIO.move_range) {
mTargetAngle = calcTargetAngle(current.pos, mHomePos);
mIsReturnHome = 1;
}
mTargetStep = 0x100;
mStepAngle = 0x100;
setBck(8, 2, 3.0f, 1.2f);
}
@@ -271,37 +290,37 @@ void daE_WS_c::executeWait() {
case 3:
setFootSound();
if (cLib_chaseAngleS(&shape_angle.y, mTargetAngle, mTargetStep)) {
if (cLib_chaseAngleS(&shape_angle.y, mTargetAngle, mStepAngle)) {
mMode = 4;
mMoveWaitTimer = 10;
mWaitTimer = 10;
setBck(9, 2, 3.0f, 1.0f);
}
break;
case 4:
if (mMoveWaitTimer == 0) {
if (mWaitTimer == 0) {
mMode = 5;
}
break;
case 5:
mMode = 6;
speedF = 3.0f;
mMoveWaitTimer = 20.0f + cM_rndF(10.0f);
mWaitTimer = 20.0f + cM_rndF(10.0f);
setBck(7, 2, 3.0f, 1.0f);
/* fallthrough */
case 6:
setFootSound();
if (field_0x690 == 0) {
if (calcTargetDist(current.pos, field_0x65c) >= l_HIO.move_range) {
mMoveWaitTimer = 0;
if (mIsReturnHome == 0) {
if (calcTargetDist(current.pos, mHomePos) >= l_HIO.move_range) {
mWaitTimer = 0;
}
}
if (checkBeforeBg(shape_angle.y)) {
mMoveWaitTimer = 0;
mWaitTimer = 0;
}
if (mMoveWaitTimer == 0) {
if (mWaitTimer == 0) {
speedF = 0.0f;
mMode = 0;
}
@@ -333,11 +352,11 @@ void daE_WS_c::executeAttack() {
mMode = 2;
setBck(10, 2, 3.0f, 1.0f);
mSound.startCreatureVoice(Z2SE_EN_WS_V_YOKOKU, -1);
mMoveWaitTimer = 10;
mWaitTimer = 10;
}
break;
case 2:
if (mMoveWaitTimer == 0) {
if (mWaitTimer == 0) {
speedF = l_HIO.attack_speed * mBodyScale;
setBck(7, 2, 3.0f, 3.0f);
mMode = 3;
@@ -352,20 +371,20 @@ void daE_WS_c::executeAttack() {
setFootSound();
cLib_chaseAngleS(&shape_angle.y, calcTargetAngle(current.pos, player_pos), 0x400);
BOOL r28 = false;
BOOL checkAttackStart = FALSE;
if (checkBeforeBg(shape_angle.y)) {
r28 = true;
checkAttackStart = TRUE;
}
if (mCcSph.ChkAtHit()) {
cCcD_Obj* r27 = mCcSph.GetAtHitObj();
if (fopAcM_GetName(dCc_GetAc(r27->GetAc())) == fpcNm_ALINK_e) {
r28 = true;
cCcD_Obj* hitObj = mCcSph.GetAtHitObj();
if (fopAcM_GetName(dCc_GetAc(hitObj->GetAc())) == fpcNm_ALINK_e) {
checkAttackStart = TRUE;
}
}
if (!checkInSearchRange(current.pos, field_0x65c)) {
r28 = true;
if (!checkInSearchRange(current.pos, mHomePos)) {
checkAttackStart = TRUE;
}
if (r28) {
if (checkAttackStart) {
mMode = 4;
speedF = 0.0f;
setBck(4, 0, 3.0f, 1.0f);
@@ -378,11 +397,11 @@ void daE_WS_c::executeAttack() {
break;
}
case 4:
if (mpModelMorf->checkFrame(7.5f)) {
if (mAnm_p->checkFrame(7.5f)) {
mSound.startCreatureVoice(Z2SE_EN_WS_V_ATTACK, -1);
}
if (mpModelMorf->isStop()) {
if (mAnm_p->isStop()) {
setActionMode(ACTION_WAIT_e);
}
/* fallthrough */
@@ -408,9 +427,9 @@ void daE_WS_c::executeDown() {
mSound.startCreatureVoice(Z2SE_EN_WS_V_DAMAGE, -1);
/* fallthrough */
case 1:
if (mpModelMorf->isStop()) {
mAcchCir.SetWall(0.0f, 4.0f);
current.angle.y = field_0x668.y;
if (mAnm_p->isStop()) {
mBgc.SetWall(0.0f, 4.0f);
current.angle.y = mTargetWallAngle.y;
setBck(6, 0, 3.0f, 0.0f);
mSound.startCreatureVoice(Z2SE_EN_WS_V_DEATH, -1);
speedF = 5.0f;
@@ -433,7 +452,7 @@ void daE_WS_c::executeDown() {
speedF = 3.0f + cM_rndF(2.0f);
speed.y = 12.0f;
mMode = 3;
mMoveWaitTimer = 30;
mWaitTimer = 30;
setBck(6, 0, 5.0f, 1.0f);
mSound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1);
}
@@ -467,8 +486,8 @@ void daE_WS_c::executeDown() {
case 4:
cLib_addCalc2(&mDownColor, -20.0f, 1.0f, 0.4f);
if (mpModelMorf->isStop()) {
mMoveWaitTimer = 15;
if (mAnm_p->isStop()) {
mWaitTimer = 15;
mMode = 5;
return;
}
@@ -476,12 +495,12 @@ void daE_WS_c::executeDown() {
case 5:
cLib_addCalc2(&mDownColor, -20.0f, 1.0f, 0.4f);
if (mMoveWaitTimer == 0) {
if (mWaitTimer == 0) {
fopAcM_delete(this);
fopAcM_createDisappear(this, &current.pos, 7, 0, 7);
if (mSwbit != 0xFF && !dComIfGs_isSwitch(mSwbit, fopAcM_GetRoomNo(this))) {
dComIfGs_onSwitch(mSwbit, fopAcM_GetRoomNo(this));
if (bitSw != 0xFF && !dComIfGs_isSwitch(bitSw, fopAcM_GetRoomNo(this))) {
dComIfGs_onSwitch(bitSw, fopAcM_GetRoomNo(this));
}
}
break;
@@ -497,36 +516,36 @@ void daE_WS_c::executeWindDown() {
mCcSph.OffTgSetBit();
mCcBokkuriSph.OffTgSetBit();
mAcchCir.SetWall(0.0f, 4.0f);
mBgc.SetWall(0.0f, 4.0f);
mMode = 1;
setBck(7, 2, 3.0f, 1.0f);
mSound.startCreatureVoice(Z2SE_EN_WS_V_DAMAGE, -1);
mMoveWaitTimer = 5;
mWaitTimer = 5;
mAcch.SetGroundUpY(20.0f);
attention_info.flags = 0;
speed.y = 0.0f;
speedF = 5.0f;
current.angle.y = field_0x668.y;
mTargetStep = -0x800;
current.angle.y = mTargetWallAngle.y;
mStepAngle = -0x800;
break;
case 1:
shape_angle.y += mTargetStep;
cLib_chaseAngleS(&field_0x66e.y, 0, 0x400);
cLib_chaseAngleS(&field_0x66e.x, 0, 0x400);
shape_angle.y += mStepAngle;
cLib_chaseAngleS(&mWallAngle.y, 0, 0x400);
cLib_chaseAngleS(&mWallAngle.x, 0, 0x400);
shape_angle.x += 0x800;
shape_angle.z += 0x800;
speed.y = 30.0f;
if (mMoveWaitTimer == 0) {
if (mWaitTimer == 0) {
mMode = 2;
gravity = -3.0f;
}
break;
case 2:
shape_angle.y += mTargetStep;
cLib_chaseAngleS(&field_0x66e.y, 0, 0x400);
cLib_chaseAngleS(&field_0x66e.x, 0, 0x400);
shape_angle.y += mStepAngle;
cLib_chaseAngleS(&mWallAngle.y, 0, 0x400);
cLib_chaseAngleS(&mWallAngle.x, 0, 0x400);
cLib_chaseAngleS(&shape_angle.x, -0x8000, 0x400);
cLib_chaseAngleS(&shape_angle.z, 0, 0x400);
@@ -534,15 +553,15 @@ void daE_WS_c::executeWindDown() {
speedF = 3.0f + cM_rndF(2.0f);
speed.y = 12.0f;
mMode = 3;
mMoveWaitTimer = 30;
mWaitTimer = 30;
setBck(6, 0, 5.0f, 1.0f);
mSound.startCreatureVoice(Z2SE_EN_WS_V_DEATH, -1);
mSound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1);
}
break;
case 3:
shape_angle.y += mTargetStep;
cLib_chaseAngleS(&mTargetStep, 0, 0x80);
shape_angle.y += mStepAngle;
cLib_chaseAngleS(&mStepAngle, 0, 0x80);
cLib_chaseAngleS(&shape_angle.x, -0x8000, 0x400);
cLib_chaseAngleS(&shape_angle.z, 0, 0x400);
@@ -556,23 +575,23 @@ void daE_WS_c::executeWindDown() {
break;
case 4:
cLib_addCalc2(&mDownColor, -20.0f, 1.0f, 0.4f);
shape_angle.y += mTargetStep;
cLib_chaseAngleS(&mTargetStep, 0, 0x80);
shape_angle.y += mTargetStep;
shape_angle.y += mStepAngle;
cLib_chaseAngleS(&mStepAngle, 0, 0x80);
shape_angle.y += mStepAngle;
if (mpModelMorf->isStop()) {
mMoveWaitTimer = 15;
if (mAnm_p->isStop()) {
mWaitTimer = 15;
mMode = 5;
}
break;
case 5:
cLib_addCalc2(&mDownColor, -20.0f, 1.0f, 0.4f);
if (mMoveWaitTimer == 0) {
if (mWaitTimer == 0) {
fopAcM_delete(this);
fopAcM_createDisappear(this, &current.pos, 7, 0, 7);
if (mSwbit != 0xFF && !dComIfGs_isSwitch(mSwbit, fopAcM_GetRoomNo(this))) {
dComIfGs_onSwitch(mSwbit, fopAcM_GetRoomNo(this));
if (bitSw != 0xFF && !dComIfGs_isSwitch(bitSw, fopAcM_GetRoomNo(this))) {
dComIfGs_onSwitch(bitSw, fopAcM_GetRoomNo(this));
}
}
break;
@@ -653,47 +672,47 @@ void daE_WS_c::action() {
mSound.setLinkSearch(field_0x566);
if (mAction != ACTION_DOWN_e && mAction != ACTION_WIND_DOWN_e) {
cXyz sp14;
mDoMtx_stack_c::YrotS(field_0x668.y);
mDoMtx_stack_c::XrotM(field_0x668.x);
cXyz ato;
mDoMtx_stack_c::YrotS(mTargetWallAngle.y);
mDoMtx_stack_c::XrotM(mTargetWallAngle.x);
mDoMtx_stack_c::YrotM(current.angle.y);
cXyz sp8(0.0f, 0.0f, speedF);
mDoMtx_stack_c::multVec(&sp8, &sp14);
speed = sp14;
cXyz mae(0.0f, 0.0f, speedF);
mDoMtx_stack_c::multVec(&mae, &ato);
speed = ato;
current.pos += speed;
} else {
fopAcM_posMoveF(this, NULL);
}
mAcch.CrrPos(dComIfG_Bgsp());
mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
mAnm_p->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
}
void daE_WS_c::mtx_set() {
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(field_0x66e);
mDoMtx_stack_c::ZXYrotM(mWallAngle);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mDoMtx_stack_c::scaleM(mBodyScale, mBodyScale, mBodyScale);
J3DModel* model_p = mpModelMorf->getModel();
J3DModel* model_p = mAnm_p->getModel();
model_p->setBaseTRMtx(mDoMtx_stack_c::get());
mpModelMorf->modelCalc();
mAnm_p->modelCalc();
}
void daE_WS_c::cc_set() {
cXyz mae;
cXyz ato;
J3DModel* model_p = mpModelMorf->getModel();
J3DModel* model = mAnm_p->getModel();
mDoMtx_stack_c::YrotS(field_0x668.y);
mDoMtx_stack_c::XrotM(field_0x668.x);
mDoMtx_stack_c::YrotS(mTargetWallAngle.y);
mDoMtx_stack_c::XrotM(mTargetWallAngle.x);
mae.set(0.0f, 15.0f + nREG_F(10), 0.0f);
mDoMtx_stack_c::multVec(&mae, &ato);
attention_info.position = current.pos + ato;
attention_info.position.y += 90.0f * mBodyScale;
MTXCopy(model_p->getAnmMtx(1), mDoMtx_stack_c::get());
MTXCopy(model->getAnmMtx(1), mDoMtx_stack_c::get());
mae.set(-15.0f + nREG_F(5), -10.0f + nREG_F(6), nREG_F(7));
mDoMtx_stack_c::multVec(&mae, &eyePos);
@@ -707,8 +726,8 @@ void daE_WS_c::cc_set() {
}
int daE_WS_c::execute() {
if (mMoveWaitTimer != 0) {
mMoveWaitTimer--;
if (mWaitTimer != 0) {
mWaitTimer--;
}
if (mInvulnerabilityTimer != 0) {
@@ -725,8 +744,8 @@ int daE_WS_c::execute() {
return 1;
}
static int daE_WS_Execute(daE_WS_c* a_this) {
return a_this->execute();
static int daE_WS_Execute(daE_WS_c* i_this) {
return i_this->execute();
}
void daE_WS_c::checkInitialWall() {
@@ -739,7 +758,7 @@ void daE_WS_c::checkInitialWall() {
linchk.Set(&current.pos, &endpos, NULL);
if (dComIfG_Bgsp().LineCross(&linchk)) {
if (field_0x691 == 0 && dComIfG_Bgsp().GetWallCode(linchk) != 1 && dComIfG_Bgsp().GetWallCode(linchk) != 4) {
if (arg0 == 0 && dComIfG_Bgsp().GetWallCode(linchk) != 1 && dComIfG_Bgsp().GetWallCode(linchk) != 4) {
return;
}
@@ -749,9 +768,9 @@ void daE_WS_c::checkInitialWall() {
dComIfG_Bgsp().GetTriPla(linchk, &tri);
cXyz* tri_np = tri.GetNP();
field_0x668.y = cM_atan2s(tri_np->x, tri_np->z);
field_0x668.x = cM_atan2s(tri_np->absXZ(), tri_np->y);
field_0x66e = field_0x668;
mTargetWallAngle.y = cM_atan2s(tri_np->x, tri_np->z);
mTargetWallAngle.x = cM_atan2s(tri_np->absXZ(), tri_np->y);
mWallAngle = mTargetWallAngle;
return;
}
}
@@ -759,8 +778,8 @@ void daE_WS_c::checkInitialWall() {
bool daE_WS_c::checkBeforeBg(s16 i_angle) {
dBgS_LinChk linchk;
cXyz sp68;
cXyz sp5C;
cXyz mae;
cXyz ato;
cXyz endpos;
cXyz startpos;
@@ -768,56 +787,56 @@ bool daE_WS_c::checkBeforeBg(s16 i_angle) {
return false;
}
mDoMtx_stack_c::YrotS(field_0x668.y);
mDoMtx_stack_c::XrotM(field_0x668.x);
mDoMtx_stack_c::YrotS(mTargetWallAngle.y);
mDoMtx_stack_c::XrotM(mTargetWallAngle.x);
mDoMtx_stack_c::YrotM(i_angle);
sp68.set(0.0f, 50.0f * mBodyScale, 0.0f);
mDoMtx_stack_c::multVec(&sp68, &startpos);
mae.set(0.0f, 50.0f * mBodyScale, 0.0f);
mDoMtx_stack_c::multVec(&mae, &startpos);
startpos += current.pos;
mDoMtx_stack_c::YrotS(field_0x668.y);
mDoMtx_stack_c::XrotM(field_0x668.x);
mDoMtx_stack_c::YrotS(mTargetWallAngle.y);
mDoMtx_stack_c::XrotM(mTargetWallAngle.x);
mDoMtx_stack_c::YrotM(i_angle);
sp68.set(0.0f, 0.0f, 50.0f * mBodyScale);
mDoMtx_stack_c::multVec(&sp68, &sp5C);
mae.set(0.0f, 0.0f, 50.0f * mBodyScale);
mDoMtx_stack_c::multVec(&mae, &ato);
sp68.set(sp5C.x, 0.0f, sp5C.z);
endpos = startpos + sp68;
mae.set(ato.x, 0.0f, ato.z);
endpos = startpos + mae;
linchk.Set(&startpos, &endpos, NULL);
if (dComIfG_Bgsp().LineCross(&linchk)) {
return 1;
}
if (sp5C.y > 0.0f) {
sp68.set(0.0f, 50.0f * mBodyScale, 0.0f);
if (ato.y > 0.0f) {
mae.set(0.0f, 50.0f * mBodyScale, 0.0f);
} else {
sp68.set(0.0f, -l_HIO.dist_to_ground, 0.0f);
mae.set(0.0f, -l_HIO.dist_to_ground, 0.0f);
}
endpos = startpos + sp68;
endpos = startpos + mae;
linchk.Set(&startpos, &endpos, NULL);
if (dComIfG_Bgsp().LineCross(&linchk)) {
return true;
}
mDoMtx_stack_c::YrotS(field_0x668.y);
mDoMtx_stack_c::XrotM(field_0x668.x);
mDoMtx_stack_c::YrotS(mTargetWallAngle.y);
mDoMtx_stack_c::XrotM(mTargetWallAngle.x);
mDoMtx_stack_c::YrotM(i_angle);
sp68.set(0.0f, 50.0f * mBodyScale, 100.0f * mBodyScale);
mDoMtx_stack_c::multVec(&sp68, &sp5C);
startpos = current.pos + sp5C;
mae.set(0.0f, 50.0f * mBodyScale, 100.0f * mBodyScale);
mDoMtx_stack_c::multVec(&mae, &ato);
startpos = current.pos + ato;
cXyz sp38(0.0f, -40.0f * mBodyScale, 100.0f * mBodyScale);
mDoMtx_stack_c::multVec(&sp38, &sp5C);
endpos = current.pos + sp5C;
mDoMtx_stack_c::multVec(&sp38, &ato);
endpos = current.pos + ato;
linchk.Set(&startpos, &endpos, NULL);
if (!dComIfG_Bgsp().LineCross(&linchk)) {
return true;
}
if (field_0x691 == 0 && dComIfG_Bgsp().GetWallCode(linchk) != 1 && dComIfG_Bgsp().GetWallCode(linchk) != 4) {
if (arg0 == 0 && dComIfG_Bgsp().GetWallCode(linchk) != 1 && dComIfG_Bgsp().GetWallCode(linchk) != 4) {
return true;
}
@@ -825,7 +844,7 @@ bool daE_WS_c::checkBeforeBg(s16 i_angle) {
dComIfG_Bgsp().GetTriPla(linchk, &tri);
cXyz* tri_np = tri.GetNP();
cLib_chaseAngleS(&field_0x66e.y, cM_atan2s(tri_np->x, tri_np->z), 0x100);
cLib_chaseAngleS(&mWallAngle.y, cM_atan2s(tri_np->x, tri_np->z), 0x100);
checkWall();
return false;
}
@@ -834,7 +853,7 @@ bool daE_WS_c::checkWall() {
cXyz startpos;
cXyz endpos;
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(field_0x66e);
mDoMtx_stack_c::ZXYrotM(mWallAngle);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f);
@@ -846,7 +865,7 @@ bool daE_WS_c::checkWall() {
dBgS_LinChk linchk;
linchk.Set(&startpos, &endpos, NULL);
if (dComIfG_Bgsp().LineCross(&linchk)) {
if (field_0x691 == 0 && dComIfG_Bgsp().GetWallCode(linchk) != 1 && dComIfG_Bgsp().GetWallCode(linchk) != 4) {
if (arg0 == 0 && dComIfG_Bgsp().GetWallCode(linchk) != 1 && dComIfG_Bgsp().GetWallCode(linchk) != 4) {
return false;
}
@@ -856,8 +875,8 @@ bool daE_WS_c::checkWall() {
dComIfG_Bgsp().GetTriPla(linchk, &tri);
cXyz* tri_np = tri.GetNP();
field_0x668.y = cM_atan2s(tri_np->x, tri_np->z);
field_0x668.x = cM_atan2s(tri_np->absXZ(), tri_np->y);
mTargetWallAngle.y = cM_atan2s(tri_np->x, tri_np->z);
mTargetWallAngle.x = cM_atan2s(tri_np->absXZ(), tri_np->y);
return true;
}
@@ -871,8 +890,8 @@ static int daE_WS_IsDelete(daE_WS_c* a_this) {
int daE_WS_c::_delete() {
dComIfG_resDelete(&mPhase, "E_WS");
if (mHIOInit) {
hio_set = false;
if (mHioSet) {
hio_set = FALSE;
mDoHIO_DELETE_CHILD(l_HIO.id);
}
@@ -883,24 +902,25 @@ int daE_WS_c::_delete() {
return 1;
}
static int daE_WS_Delete(daE_WS_c* a_this) {
return a_this->_delete();
static int daE_WS_Delete(daE_WS_c* i_this) {
fopAcM_RegisterDeleteID(i_this, "E_WS");
return i_this->_delete();
}
int daE_WS_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_WS", 0xD);
JUT_ASSERT(1401, modelData != NULL);
mpModelMorf = JKR_NEW mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_WS", 7), 0, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084);
if (mpModelMorf == NULL || mpModelMorf->getModel() == NULL) {
mAnm_p = JKR_NEW mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_WS", 7), 0, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084);
if (mAnm_p == NULL || mAnm_p->getModel() == NULL) {
return 0;
}
return 1;
}
static int useHeapInit(fopAc_ac_c* i_this) {
return ((daE_WS_c*)i_this)->CreateHeap();
static int useHeapInit(fopAc_ac_c* actor) {
return ((daE_WS_c*)actor)->CreateHeap();
}
int daE_WS_c::create() {
@@ -910,8 +930,8 @@ int daE_WS_c::create() {
if (phase_state == cPhs_COMPLEATE_e) {
OS_REPORT("E_WS PARAM %x\n", fopAcM_GetParam(this));
mSwbit = (fopAcM_GetParam(this) & 0xFF00) >> 8;
if (mSwbit != 0xFF && dComIfGs_isSwitch(mSwbit, fopAcM_GetRoomNo(this))) {
bitSw = (fopAcM_GetParam(this) & 0xFF00) >> 8;
if (bitSw != 0xFF && dComIfGs_isSwitch(bitSw, fopAcM_GetRoomNo(this))) {
OS_REPORT("E_WS やられ後なので再セットしません\n");
return cPhs_ERROR_e;
}
@@ -922,13 +942,13 @@ int daE_WS_c::create() {
if (!hio_set) {
hio_set = true;
mHIOInit = true;
mHioSet = true;
l_HIO.id = mDoHIO_CREATE_CHILD("スタルウォール", &l_HIO);
}
field_0x691 = fopAcM_GetParam(this);
if (field_0x691 == 0xFF) {
field_0x691 = 0;
arg0 = fopAcM_GetParam(this);
if (arg0 == 0xFF) {
arg0 = 0;
}
if (((fopAcM_GetParam(this) & 0xFF0000) >> 0x10) == 1) {
@@ -938,12 +958,12 @@ int daE_WS_c::create() {
}
attention_info.flags = fopAc_AttnFlag_BATTLE_e;
fopAcM_SetMtx(this, mpModelMorf->getModel()->getBaseTRMtx());
fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx());
fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f);
fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f);
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL);
mAcchCir.SetWall(0.0f, 0.0f);
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mBgc, fopAcM_GetSpeed_p(this), NULL, NULL);
mBgc.SetWall(0.0f, 0.0f);
health = 10;
field_0x560 = 10;
@@ -963,7 +983,7 @@ int daE_WS_c::create() {
setActionMode(ACTION_WAIT_e);
checkInitialWall();
field_0x65c = current.pos;
mHomePos = current.pos;
speed.y = 0.0f;
gravity = 0.0f;
mtx_set();
@@ -972,8 +992,8 @@ int daE_WS_c::create() {
return phase_state;
}
static int daE_WS_Create(daE_WS_c* a_this) {
return a_this->create();
static int daE_WS_Create(daE_WS_c* i_this) {
return i_this->create();
}
static actor_method_class l_daE_WS_Method = {
+3 -3
View File
@@ -495,8 +495,8 @@ int daE_ZS_c::CreateHeap() {
return 1;
}
static void useHeapInit(fopAc_ac_c* i_this) {
static_cast<daE_ZS_c*>(i_this)->CreateHeap();
static int useHeapInit(fopAc_ac_c* i_this) {
return static_cast<daE_ZS_c*>(i_this)->CreateHeap();
}
int daE_ZS_c::create() {
@@ -504,7 +504,7 @@ int daE_ZS_c::create() {
int phase = dComIfG_resLoad(&mPhase, "E_ZS");
if (phase == cPhs_COMPLEATE_e) {
OS_REPORT("E_ZS PARAM %x\n", fopAcM_GetParam(this));
if (!fopAcM_entrySolidHeap(this, (heapCallbackFunc)useHeapInit, 0xFC0)) {
if (!fopAcM_entrySolidHeap(this, useHeapInit, 0xFC0)) {
return cPhs_ERROR_e;
}
+1 -6
View File
@@ -80,12 +80,7 @@ void daGrass_c::deleteGrass() {
}
}
dGrass_packet_c::~dGrass_packet_c() {
#if TARGET_PC
GXDestroyTexObj(&mTexObj_l_M_kusa05_RGBATEX);
GXDestroyTexObj(&mTexObj_l_M_Hijiki00TEX);
#endif
}
dGrass_packet_c::~dGrass_packet_c() {}
void daGrass_c::executeGrass() {
if (m_grass != NULL) {
+3 -3
View File
@@ -268,9 +268,9 @@ void daMant_packet_c::draw() {
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_CLR_RGB, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0);
GXSETARRAY(GX_VA_POS, this->getPos(), sizeof(mPos[0]), 12);
GXSETARRAY(GX_VA_NRM, this->getNrm(), sizeof(mNrm[0]), 12);
GXSETARRAY(GX_VA_TEX0, &l_texCoord, sizeof(l_texCoord), 8);
GXSETARRAY(GX_VA_POS, this->getPos(), sizeof(mPos[0]), 12, true);
GXSETARRAY(GX_VA_NRM, this->getNrm(), sizeof(mNrm[0]), 12, true);
GXSETARRAY(GX_VA_TEX0, &l_texCoord, sizeof(l_texCoord), 8, false); // TODO: set to true when converted to float literals
GXSetZCompLoc(0);
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
+2 -2
View File
@@ -1834,12 +1834,12 @@ void daMidna_c::setBckAnime(J3DAnmTransform* i_bck, int i_attr, f32 i_morf) {
}
} else {
u8* buf = mBckHeap[0].getBuffer();
if (*(u32*)(buf + 0x1c) == 0xffffffff) {
if (*(BE(u32)*)(buf + 0x1c) == 0xffffffff) {
offStateFlg1(FLG1_UNK_800);
bas = NULL;
} else {
onStateFlg1(FLG1_UNK_800);
bas = mBckHeap[0].getBuffer() + *(u32*)(buf + 0x1c);
bas = mBckHeap[0].getBuffer() + *(BE(u32)*)(buf + 0x1c);
}
}
+3 -3
View File
@@ -74,9 +74,9 @@ static char* l_bckFileNameTBL[] = {
static char* l_btpFileNameTBL[] = {"MYNA.btp"};
static void createHeapCallBack(fopAc_ac_c* i_this) {
static int createHeapCallBack(fopAc_ac_c* i_this) {
daMyna_c* a_this = static_cast<daMyna_c*>(i_this);
a_this->createHeap();
return a_this->createHeap();
}
static int jntNodeCallBack(J3DJoint* i_jnt, int param_1) {
@@ -339,7 +339,7 @@ int daMyna_c::create() {
return phase;
}
if (!fopAcM_entrySolidHeap(this, (heapCallbackFunc)&createHeapCallBack, 0x21F0)) {
if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x21F0)) {
return cPhs_ERROR_e;
}
+6 -7
View File
@@ -194,14 +194,13 @@ int daNpc_solA_c::Execute() {
return execute();
}
void daNpc_solA_c::Draw() {
int daNpc_solA_c::Draw() {
if (mpMatAnm[0] != NULL) {
J3DModelData* mdlData_p = mpMorf[0]->getModel()->getModelData();
mdlData_p->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm[0]);
}
draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE,
FALSE);
return;
return draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE, FALSE);
}
BOOL daNpc_solA_c::createHeapCallBack(fopAc_ac_c* a_this) {
@@ -481,12 +480,12 @@ static int daNpc_solA_Execute(void* param_0) {
return static_cast<daNpc_solA_c*>(param_0)->Execute();
}
static void daNpc_solA_Draw(void* param_0) {
static int daNpc_solA_Draw(void* param_0) {
return static_cast<daNpc_solA_c*>(param_0)->Draw();
}
static BOOL daNpc_solA_IsDelete(void* param_0) {
return TRUE;
static int daNpc_solA_IsDelete(void* param_0) {
return 1;
}
static actor_method_class daNpc_solA_MethodTable = {
+2 -2
View File
@@ -2014,7 +2014,7 @@ void daNPC_TK_c::executeWolfPerch() {
mWolfPathData = dPath_GetRoomPath(mpPath1->m_nextID, fopAcM_GetRoomNo(this));
JUT_ASSERT(2498, mWolfPathData != NULL);
field_0x6ea = mWolfPathData->field_0x6;
field_0x6ea = mWolfPathData->swbit;
field_0x6e8 = mWolfPathData->field_0x4;
field_0x6e9 = mWolfPathData->field_0x7;
field_0x6d0.Init(mWolfPathData);
@@ -2518,7 +2518,7 @@ void daNPC_TK_c::executeResistanceDemo() {
0x200, 0x10);
shape_angle.x = -current.angle.x;
cLib_addCalcAngleS(&current.angle.y, cLib_targetAngleY((Vec*)&current, &posWithOffset), 8,
cLib_addCalcAngleS(&current.angle.y, cLib_targetAngleY(&current.pos, &posWithOffset), 8,
0x400, 0x10);
shape_angle.y = current.angle.y;
+8 -8
View File
@@ -356,21 +356,21 @@ int daObjYtaihou_c::Delete() {
return 1;
}
static void daObjYtaihou_create1st(daObjYtaihou_c* i_this) {
static int daObjYtaihou_create1st(daObjYtaihou_c* i_this) {
fopAcM_ct(i_this, daObjYtaihou_c);
i_this->create1st();
return i_this->create1st();
}
static void daObjYtaihou_MoveBGDelete(daObjYtaihou_c* i_this) {
i_this->MoveBGDelete();
static int daObjYtaihou_MoveBGDelete(daObjYtaihou_c* i_this) {
return i_this->MoveBGDelete();
}
static void daObjYtaihou_MoveBGExecute(daObjYtaihou_c* i_this) {
i_this->MoveBGExecute();
static int daObjYtaihou_MoveBGExecute(daObjYtaihou_c* i_this) {
return i_this->MoveBGExecute();
}
static void daObjYtaihou_MoveBGDraw(daObjYtaihou_c* i_this) {
i_this->Draw();
static int daObjYtaihou_MoveBGDraw(daObjYtaihou_c* i_this) {
return i_this->Draw();
}
static actor_method_class daObjYtaihou_METHODS = {
+6
View File
@@ -16,6 +16,8 @@
#include "f_op/f_op_camera_mng.h"
#include <cstring>
#include "dusk/logging.h"
static void ride_call_back(dBgW* i_bgw, fopAc_ac_c* i_bgActor, fopAc_ac_c* i_rideActor) {
obj_brg_class* a_this = (obj_brg_class*)i_bgActor;
@@ -1794,6 +1796,10 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) {
cXyz(334.0f, 85.0f, -16054.0f),
cXyz(334.0f, 150.0f, -16270.0f),
cXyz(334.0f, 216.0f, -16485.0f),
#ifdef TARGET_PC
// Avoids out-of-bounds index (n=22)
cXyz(0.f, 0.f, 0.f),
#endif
};
for (brno = 0; brno < a_this->field_0xb1ea; brno++) {
+2 -2
View File
@@ -310,9 +310,9 @@ int daObjFan_c::Delete() {
return 1;
}
static void daObjFan_create1st(daObjFan_c* param_0) {
static int daObjFan_create1st(daObjFan_c* param_0) {
fopAcM_ct(param_0, daObjFan_c);
param_0->create1st();
return param_0->create1st();
}
static int daObjFan_MoveBGDelete(daObjFan_c* param_0) {
+1 -1
View File
@@ -16,7 +16,7 @@ daObjFlag_c::M_attrs const daObjFlag_c::M_attr = {
};
void daObjFlag_c::create_init() {
field_0x5dc = (*(u32*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), "spec.dat")) & 0xffff;
field_0x5dc = (*(BE(u32)*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), "spec.dat")) & 0xffff;
mPos = cXyz(current.pos.x, current.pos.y + field_0x5dc, current.pos.z);
mFlagJoints[0].mRv = (short)(cM_rnd() * 65535.0f);
mFlagJoints[1].mRv = (short)(cM_rnd() * 65535.0f);
+4 -4
View File
@@ -274,9 +274,9 @@ void FlagCloth_c::draw() {
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_CLR_RGB, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0);
GXSETARRAY(GX_VA_POS, getPos(), sizeof(mPositions), sizeof(cXyz));
GXSETARRAY(GX_VA_NRM, getNormal(), sizeof(mNormals), sizeof(cXyz));
GXSETARRAY(GX_VA_TEX0, mpTexCoord, sizeof(mpTexCoord), 8);
GXSETARRAY(GX_VA_POS, getPos(), sizeof(mPositions), sizeof(cXyz), true);
GXSETARRAY(GX_VA_NRM, getNormal(), sizeof(mNormals), sizeof(cXyz), true);
GXSETARRAY(GX_VA_TEX0, mpTexCoord, sizeof(l_texCoord), 8, true);
GXSetZCompLoc(GX_FALSE);
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
GXLoadTexObj(&mTexObj, GX_TEXMAP0);
@@ -304,7 +304,7 @@ void FlagCloth_c::draw() {
GXSetClipMode(GX_CLIP_ENABLE);
GXSetCullMode(GX_CULL_BACK);
GXCallDisplayList(l_pennant_flagDL, 0x80);
GXSETARRAY(GX_VA_NRM, getNormalBack(), sizeof(mNormalBacks), sizeof(cXyz));
GXSETARRAY(GX_VA_NRM, getNormalBack(), sizeof(mNormalBacks), sizeof(cXyz), true);
GXSetCullMode(GX_CULL_FRONT);
GXCallDisplayList(l_pennant_flagDL, 0x80);
J3DShape::resetVcdVatCache();
+4 -4
View File
@@ -233,9 +233,9 @@ inline void FlagCloth2_c::draw() {
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_CLR_RGB, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0);
GXSETARRAY(GX_VA_POS, getPos(), sizeof(mPositions), sizeof(cXyz));
GXSETARRAY(GX_VA_NRM, getNormal(), sizeof(mNormals), sizeof(cXyz));
GXSETARRAY(GX_VA_TEX0, mTexCoord, sizeof(mTexCoord), 8);
GXSETARRAY(GX_VA_POS, getPos(), sizeof(mPositions), sizeof(cXyz), true);
GXSETARRAY(GX_VA_NRM, getNormal(), sizeof(mNormals), sizeof(cXyz), true);
GXSETARRAY(GX_VA_TEX0, mTexCoord, sizeof(mTexCoord), 8, true);
GXSetZCompLoc(GX_FALSE);
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
GXLoadTexObj(&mTexObj, GX_TEXMAP0);
@@ -276,7 +276,7 @@ inline void FlagCloth2_c::draw() {
GXEnd();
}
GXSETARRAY(GX_VA_NRM, getNormalBack(), sizeof(mNormalBacks), sizeof(cXyz));
GXSETARRAY(GX_VA_NRM, getNormalBack(), sizeof(mNormalBacks), sizeof(cXyz), true);
GXSetCullMode(GX_CULL_FRONT);
for (int i = 0; i < 5; i++) {
+3 -3
View File
@@ -89,8 +89,8 @@ static void* s_boar_sub(void* i_actor, void* i_data) {
return NULL;
}
static void CheckCreateHeap(fopAc_ac_c* i_this) {
static_cast<daObjIBone_c*>(i_this)->CreateHeap();
static int CheckCreateHeap(fopAc_ac_c* i_this) {
return static_cast<daObjIBone_c*>(i_this)->CreateHeap();
}
void daObjIBone_c::initBaseMtx() {
@@ -150,7 +150,7 @@ int daObjIBone_c::create() {
int result = dComIfG_resLoad(&mPhase, l_arcName);
if (result == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, (heapCallbackFunc)CheckCreateHeap, 0x860)) {
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x860)) {
return cPhs_ERROR_e;
} else if (!Create()) {
return cPhs_ERROR_e;
+9 -9
View File
@@ -198,24 +198,24 @@ void daObj_Stick_c::setMtx() {
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
static u32 daObj_Stick_Create(void* i_this) {
static int daObj_Stick_Create(void* i_this) {
return static_cast<daObj_Stick_c*>(i_this)->create();
}
static void daObj_Stick_Delete(void* param_0) {
static_cast<daObj_Stick_c*>(param_0)->Delete();
static int daObj_Stick_Delete(void* param_0) {
return static_cast<daObj_Stick_c*>(param_0)->Delete();
}
static void daObj_Stick_Execute(void* param_0) {
static_cast<daObj_Stick_c*>(param_0)->Execute();
static int daObj_Stick_Execute(void* param_0) {
return static_cast<daObj_Stick_c*>(param_0)->Execute();
}
static void daObj_Stick_Draw(void* param_0) {
static_cast<daObj_Stick_c*>(param_0)->Draw();
static int daObj_Stick_Draw(void* param_0) {
return static_cast<daObj_Stick_c*>(param_0)->Draw();
}
static BOOL daObj_Stick_IsDelete(void* param_0) {
return TRUE;
static int daObj_Stick_IsDelete(void* param_0) {
return 1;
}
static actor_method_class daObj_Stick_MethodTable = {
+1 -1
View File
@@ -126,7 +126,7 @@ static f32 bound(cXyz* param_0, cBgS_PolyInfo const& param_1, f32 param_2) {
cXyz pos;
f32 abs = param_0->abs();
C_VECReflect(param_0, (Vec*)&plane, &pos);
C_VECReflect(param_0, &plane.mNormal, &pos);
*param_0 = pos * abs * param_2;
return param_0->absXZ();
+1 -1
View File
@@ -59,7 +59,7 @@ static daNpcT_motionAnmData_c l_motionAnmData[11] = {
static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_faceMotionSequenceData[20] = {
{1, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {2, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {3, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{4, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{4, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
};
static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[40] = {
+4 -4
View File
@@ -44,15 +44,15 @@ int daTagMagne_c::_delete() {
return 1;
}
static void daTagMagne_Delete(daTagMagne_c* i_this) {
static int daTagMagne_Delete(daTagMagne_c* i_this) {
int id = fopAcM_GetID(i_this);
i_this->_delete();
return i_this->_delete();
}
static void daTagMagne_Create(fopAc_ac_c* i_this) {
static int daTagMagne_Create(fopAc_ac_c* i_this) {
daTagMagne_c* magne = static_cast<daTagMagne_c*>(i_this);
int id = fopAcM_GetID(i_this);
magne->create();
return magne->create();
}
static actor_method_class l_daTagMagne_Method = {
+1 -1
View File
@@ -189,7 +189,7 @@ int daTagSppath_c::execute() {
}
if (mpBestPath->field_0x4 == 0) {
if (mpBestPath->field_0x6 == 0xff || fopAcM_isSwitch(this, mpBestPath->field_0x6) == 0) {
if (mpBestPath->swbit == 0xff || fopAcM_isSwitch(this, mpBestPath->swbit) == 0) {
field_0x6e8 = 1;
} else {
field_0x6e8 = 2;
+42 -12
View File
@@ -5,8 +5,14 @@
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
#include "SSystem/SComponent/c_counter.h"
#if TARGET_PC
const u16 l_J_Ohana00_64TEX__width = 64;
const u16 l_J_Ohana00_64TEX__height = 64;
#else
const u16 l_J_Ohana00_64TEX__width = 63;
const u16 l_J_Ohana00_64TEX__height = 63;
#endif
#include "assets/l_J_Ohana00_64TEX.h"
static u8 l_flowerPos[708] = {
@@ -72,8 +78,8 @@ static u8 l_flowerNormal[180] = {
0x46, 0x54, 0x0D, 0x3C, 0x4B, 0xEE, 0x80, 0x3F, 0x7F, 0xF5, 0xF9, 0x3C, 0x49, 0x81, 0xBF,
};
static u8 l_flowerColor[8] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0xB2, 0xB2, 0xFF,
static GXColor l_flowerColor[2] = {
{0xFF, 0xFF, 0xFF, 0xFF}, {0xB2, 0xB2, 0xB2, 0xFF}
};
static u8 l_flowerTexCoord[] = {
@@ -108,8 +114,14 @@ l_matDL__d_a_grass(l_J_Ohana00_64TEX)
#include "assets/l_matLight4DL.h"
l_matLight4DL(l_J_Ohana00_64TEX)
#if TARGET_PC
const u16 l_J_Ohana01_64128_0419TEX__width = 64;
const u16 l_J_Ohana01_64128_0419TEX__height = 128;
#else
const u16 l_J_Ohana01_64128_0419TEX__width = 63;
const u16 l_J_Ohana01_64128_0419TEX__height = 127;
#endif
#include "assets/l_J_Ohana01_64128_0419TEX.h"
static u8 l_flowerPos2[1224] = {
@@ -213,8 +225,8 @@ static u8 l_flowerNormal2[288] = {
0x3B, 0x76, 0x7B, 0x1C, 0x3B, 0x99, 0x6B, 0x76, 0x3F, 0x7F, 0xF5, 0xF9, 0xBC, 0x8A, 0x1D, 0xFC,
};
static u8 l_flowerColor2[8] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0xFF,
static GXColor l_flowerColor2[2] = {
{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xB2, 0xFF}
};
static u8 l_flowerTexCoord2[] = {
@@ -509,6 +521,16 @@ dFlower_packet_c::dFlower_packet_c() {
unused += 0x2000;
}
#if TARGET_PC
GXInitTexObj(&mTexObj_l_J_Ohana00_64TEX, l_J_Ohana00_64TEX,
l_J_Ohana00_64TEX__width, l_J_Ohana00_64TEX__height, GX_TF_CMPR, GX_MIRROR, GX_MIRROR, GX_FALSE
);
GXInitTexObj(&mTexObj_l_J_Ohana01_64128_0419TEX, l_J_Ohana01_64128_0419TEX,
l_J_Ohana01_64128_0419TEX__width, l_J_Ohana01_64128_0419TEX__height, GX_TF_CMPR, GX_MIRROR, GX_MIRROR, GX_FALSE
);
#endif
m_deleteRoom = &dFlower_packet_c::deleteRoom;
#if AVOID_UB
@@ -531,10 +553,10 @@ void dFlower_packet_c::draw() {
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXSETARRAY(GX_VA_POS, &l_flowerPos, sizeof(l_flowerPos), 0xC);
GXSETARRAY(GX_VA_NRM, &l_flowerNormal, sizeof(l_flowerNormal), 0xC);
GXSETARRAY(GX_VA_CLR0, &l_flowerColor, sizeof(l_flowerColor), 4);
GXSETARRAY(GX_VA_TEX0, &l_flowerTexCoord, sizeof(l_flowerTexCoord), 8);
GXSETARRAY(GX_VA_POS, &l_flowerPos, sizeof(l_flowerPos), 0xC, false);
GXSETARRAY(GX_VA_NRM, &l_flowerNormal, sizeof(l_flowerNormal), 0xC, false);
GXSETARRAY(GX_VA_CLR0, &l_flowerColor, sizeof(l_flowerColor), 4, false);
GXSETARRAY(GX_VA_TEX0, &l_flowerTexCoord, sizeof(l_flowerTexCoord), 8, false);
GXColor sp64;
dFlower_room_c* sp5C = m_room;
@@ -615,6 +637,10 @@ void dFlower_packet_c::draw() {
GXLoadPosMtxImm(sp44->m_modelMtx, 0);
GXLoadNrmMtxImm(j3dSys.getViewMtx(), 0);
#if TARGET_PC
GXLoadTexObj(&mTexObj_l_J_Ohana00_64TEX, GX_TEXMAP0);
#endif
if (!cLib_checkBit<u8>(sp44->m_state, 8)) {
GXCallDisplayList(&l_J_hana00DL, 0x140);
} else {
@@ -626,10 +652,10 @@ void dFlower_packet_c::draw() {
sp5C++;
}
GXSETARRAY(GX_VA_POS, mp_pos, sizeof(l_flowerPos2), 0xC);
GXSETARRAY(GX_VA_NRM, &l_flowerNormal2, sizeof(l_flowerNormal2), 0xC);
GXSETARRAY(GX_VA_CLR0, mp_colors, sizeof(l_flowerColor2), 4);
GXSETARRAY(GX_VA_TEX0, mp_texCoords, sizeof(l_flowerTexCoord2), 8);
GXSETARRAY(GX_VA_POS, mp_pos, sizeof(l_flowerPos2), 0xC, true);
GXSETARRAY(GX_VA_NRM, &l_flowerNormal2, sizeof(l_flowerNormal2), 0xC, false);
GXSETARRAY(GX_VA_CLR0, mp_colors, sizeof(l_flowerColor2), 4, true);
GXSETARRAY(GX_VA_TEX0, mp_texCoords, sizeof(l_flowerTexCoord2), 8, true);
sp5C = m_room;
@@ -757,6 +783,10 @@ void dFlower_packet_c::draw() {
GXLoadPosMtxImm(sp34->m_modelMtx, 0);
GXLoadNrmMtxImm(j3dSys.getViewMtx(), 0);
#if TARGET_PC
GXLoadTexObj(&mTexObj_l_J_Ohana01_64128_0419TEX, GX_TEXMAP0);
#endif
if (!cLib_checkBit<u8>(sp34->m_state, 8)) {
if (!cLib_checkBit<u8>(sp34->m_state, 0x10)) {
GXCallDisplayList(mp_Jhana01DL, m_Jhana01DL_size);
+4 -4
View File
@@ -536,10 +536,10 @@ void dGrass_packet_c::draw() {
GXSetVtxDescv(l_vtxDescList);
GXSetVtxAttrFmtv(GX_VTXFMT0, l_vtxAttrFmtList);
GXSETARRAY(GX_VA_POS, mp_pos, sizeof(l_pos), sizeof(Vec));
GXSETARRAY(GX_VA_NRM, mp_normal, sizeof(l_normal), sizeof(Vec));
GXSETARRAY(GX_VA_CLR0, mp_colors, sizeof(l_color), sizeof(GXColor));
GXSETARRAY(GX_VA_TEX0, mp_texCoords, sizeof(l_texCoord), 8);
GXSETARRAY(GX_VA_POS, mp_pos, sizeof(l_pos), sizeof(Vec), true);
GXSETARRAY(GX_VA_NRM, mp_normal, sizeof(l_normal), sizeof(Vec), true);
GXSETARRAY(GX_VA_CLR0, mp_colors, sizeof(l_color), sizeof(GXColor), true);
GXSETARRAY(GX_VA_TEX0, mp_texCoords, sizeof(l_texCoord), 8, true);
GXColorS10 spA0 = {0, 0, 0, 0};
GXColorS10 sp98 = {0, 0, 0, 0};
+1 -1
View File
@@ -106,7 +106,7 @@ void dBgp_c::modelMaterial_c::set(J3DModelData* i_modelData, J3DMaterial* i_mate
void dBgp_c::model_c::create(J3DModelData* i_modelData, Mtx i_mtx) {
const void* binary = i_modelData->getBinary();
mId = *(u32*)((char*)binary + 0x1C);
mId = *(BE(u32)*)((char*)binary + 0x1C);
if (mId != 0xFFFF) {
addShare(mId);
}
+4
View File
@@ -10532,6 +10532,10 @@ int dCamera_c::StartShake(s32 i_length, u8* i_pattern, s32 i_flags, cXyz i_pos)
#define PATTERN_LENGTH_MAX 4
#endif
#if TARGET_PC
*(u32*)i_pattern = BSWAP32(*(u32*)i_pattern);
#endif
if (i_length < 0 || i_length > PATTERN_LENGTH_MAX << 3) {
OS_REPORT("camera: shake: too long data\n");
i_length = PATTERN_LENGTH_MAX << 3;
+2 -2
View File
@@ -318,7 +318,7 @@ void dCsr_mng_c::bloObj_c::calcPaneObjNum(J2DPane* i_pane) {
}
JSUTreeIterator<J2DPane> iter = i_pane->getPaneTree()->getFirstChild();
while (iter != NULL) {
while (iter) {
calcPaneObjNum(*iter);
++iter;
}
@@ -334,7 +334,7 @@ void dCsr_mng_c::bloObj_c::createPaneObj(paneObj_c** i_panes, J2DPane* i_pane) {
}
JSUTreeIterator<J2DPane> iter = i_pane->getPaneTree()->getFirstChild();
while (iter != NULL) {
while (iter) {
createPaneObj(i_panes, *iter);
++iter;
}
+13 -3
View File
@@ -1402,7 +1402,11 @@ void dDlst_shadowControl_c::init() {
for (int i = 0; i < 2; i++) {
u16 size = l_realImageSize[i];
#ifdef TARGET_PC
u32 buffer_size = 0x20; // No need to allocate memory for texture
#else
u32 buffer_size = GXGetTexBufferSize(size, size, 5, GX_DISABLE, 0);
#endif
field_0x15ef0[i] = JKR_NEW_ARRAY_ARGS(u8, buffer_size, 0x20);
GXInitTexObj(&field_0x15eb0[i], field_0x15ef0[i], size, size, GX_TF_RGB5A3, GX_CLAMP,
GX_CLAMP, GX_DISABLE);
@@ -1516,7 +1520,7 @@ void dDlst_shadowControl_c::draw(Mtx param_0) {
dKy_GxFog_set();
GXSetChanCtrl(GX_ALPHA0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
GXSETARRAY(GX_VA_POS, l_shadowVolPos, sizeof(l_shadowVolPos), sizeof(l_shadowVolPos[0]));
GXSETARRAY(GX_VA_POS, l_shadowVolPos, sizeof(l_shadowVolPos), sizeof(l_shadowVolPos[0]), true);
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0);
GXSetNumTevStages(1);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
@@ -1548,7 +1552,7 @@ void dDlst_shadowControl_c::draw(Mtx param_0) {
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB8, 0);
GXSETARRAY(GX_VA_POS, l_simpleShadowPos, sizeof(l_simpleShadowPos), sizeof(l_simpleShadowPos[0]));
GXSETARRAY(GX_VA_POS, l_simpleShadowPos, sizeof(l_simpleShadowPos), sizeof(l_simpleShadowPos[0]), true);
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
@@ -1636,7 +1640,7 @@ int dDlst_shadowControl_c::setReal(u32 param_1, s8 param_2, J3DModel* param_3, c
u32 rv = pdVar12->set(mNextID, param_3, param_4, param_5, param_6, param_7, dVar17, dVar16);
if (!rv) {
return 0;
}
}
mRealNum++;
if (pdVar10 == NULL) {
if (pdVar11 == NULL) {
@@ -1860,6 +1864,12 @@ int dDlst_list_c::set(dDlst_base_c**& p_start, dDlst_base_c**& p_end, dDlst_base
void dDlst_list_c::draw(dDlst_base_c** p_start, dDlst_base_c** p_end) {
for (; p_start < p_end; p_start++) {
dDlst_base_c* dlst = *p_start;
#if DEBUG && TARGET_PC
char buf[64];
snprintf(buf, sizeof(buf), "%s::draw()", typeid(dlst).name());
GXScopedDebugGroup scope(buf);
#endif
dlst->draw();
}
}
+15 -6
View File
@@ -341,7 +341,6 @@ inline u8 twoValueLineInterpolation(u8 param_0, u8 param_1, f32 param_2) {
}
void renderingAmap_c::draw() {
#if REQUIRES_GX_LINES
f32 tmp = ((f32)(g_Counter.mCounter0 % dMap_HIO_prm_res_dst_s::m_res->field_0x1aa) /
(f32)dMap_HIO_prm_res_dst_s::m_res->field_0x1aa);
tmp = tmp;
@@ -376,8 +375,7 @@ void renderingAmap_c::draw() {
dMap_HIO_prm_res_dst_s::m_res->field_0x1a7, tmp);
setAmapPaletteColor(0x2E, temp_r31, temp_r30, temp_r29, temp_r28);
renderingDAmap_c::draw();
#endif
GX_DEBUG_GROUP(renderingDAmap_c::draw);
}
int renderingAmap_c::getDispType() const {
@@ -1099,7 +1097,7 @@ void dMap_c::resCopy() {
}
}
dMap_c::dMap_c(int param_0, int param_1, int param_2, int param_3) {
dMap_c::dMap_c(int width, int height, int param_2, int param_3) {
m_res_src = NULL;
m_res = NULL;
mResTIMG = NULL;
@@ -1171,8 +1169,8 @@ dMap_c::dMap_c(int param_0, int param_1, int param_2, int param_3) {
resCopy();
mTexSizeX = param_0;
mTexSizeY = param_1;
mTexSizeX = width;
mTexSizeY = height;
if (dMap_HIO_prm_res_dst_s::m_res->field_0x1ae > 0) {
field_0x74 = dMap_HIO_prm_res_dst_s::m_res->field_0x1b0 / 6;
@@ -1182,12 +1180,23 @@ dMap_c::dMap_c(int param_0, int param_1, int param_2, int param_3) {
mImage_p = JKR_NEW_ARRAY_ARGS(u8, buffer_size, 0x20);
JUT_ASSERT(2638, mImage_p != NULL);
#ifdef TARGET_PC
// Increase map render resolution
renderingDAmap_c::init(mImage_p, mTexSizeX * 4, mTexSizeY * 4, mTexSizeX, mTexSizeY);
#else
renderingDAmap_c::init(mImage_p, mTexSizeX, mTexSizeY, mTexSizeX, mTexSizeY);
#endif
mResTIMG = JKR_NEW_ARGS (0x20) ResTIMG;
JUT_ASSERT(2647, mResTIMG != NULL);
#ifdef TARGET_PC
// Increase map render resolution
makeResTIMG(mResTIMG, mTexSizeX * 4, mTexSizeY * 4, mImage_p, (u8*)m_res, 0x33);
#else
makeResTIMG(mResTIMG, mTexSizeX, mTexSizeY, mImage_p, (u8*)m_res, 0x33);
#endif
}
#if DEBUG
+15 -7
View File
@@ -292,11 +292,22 @@ void dDrawPath_c::rendering(dDrawPath_c::floor_class const* p_floor) {
}
}
#ifdef TARGET_PC
static u32 getRoomPosArraySize(const dDrawPath_c::room_class* room) {
if (room->mpFloor == NULL || room->mpFloatData == NULL || room->mFloorNum == 0) {
return 0;
}
const dDrawPath_c::group_class* firstGroup = room->mpFloor[0].mpGroup;
JUT_ASSERT(0, firstGroup != NULL);
JUT_ASSERT(0, (const u8*)firstGroup >= (const u8*)room->mpFloatData);
return (const u8*)firstGroup - (const u8*)room->mpFloatData;
}
#endif
void dDrawPath_c::rendering(dDrawPath_c::room_class const* room) {
JUT_ASSERT(1043, room != NULL);
if (room != NULL) {
// TODO: FILL IN SIZE.
GXSETARRAY(GX_VA_POS, room->mpFloatData, 0, 8);
GXSetArray(GX_VA_POS, room->mpFloatData, getRoomPosArraySize(room), 8, false);
floor_class* floor = room->mpFloor;
if (floor != NULL) {
@@ -346,13 +357,11 @@ void dRenderingMap_c::makeResTIMG(ResTIMG* p_image, u16 width, u16 height, u8* p
void dRenderingMap_c::renderingMap() {
preRenderingMap();
if (isDrawPath()) {
#if REQUIRES_GX_LINES
preDrawPath();
beforeDrawPath();
drawPath();
afterDrawPath();
postDrawPath();
#endif
}
postRenderingMap();
}
@@ -446,7 +455,7 @@ dMpath_n::dTexObjAggregate_c dMpath_n::m_texObjAgg;
* make the map look worse for extra speed in the emulator, especially in large
* areas such as hyrule field.
*/
// #define HYRULE_FIELD_SPEEDHACK
#define HYRULE_FIELD_SPEEDHACK
void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_line) {
s32 width = getDecorationLineWidth(p_line->field_0x1);
@@ -473,7 +482,6 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li
GXSetTevColor(GX_TEVREG1, lineColor);
for (int i = 0; i < data_num; i++) {
#if REQUIRES_GX_LINES
#ifndef HYRULE_FIELD_SPEEDHACK
if (i < data_num - 1) {
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
@@ -494,7 +502,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
#endif
#endif
GXBegin(GX_POINTS, GX_VTXFMT0, 1);
GXPosition1x16(data_p[0]);
GXTexCoord2f32(0, 0);
+3 -6
View File
@@ -617,10 +617,7 @@ bool renderingDAmap_c::isSwitch(dDrawPath_c::group_class const* i_group) {
}
void renderingDAmap_c::draw() {
#if !TARGET_PC
// Currently breaks Aurora.
renderingMap();
#endif
mIsDraw = true;
}
@@ -851,7 +848,7 @@ void renderingPlusDoor_c::drawDoorCommon(stage_tgsc_data_class const* i_doorData
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB565, 0);
GXSETARRAY(GX_VA_TEX0, (void*)l_tex0, sizeof(l_tex0), 2);
GXSETARRAY(GX_VA_TEX0, l_tex0, sizeof(l_tex0), 2, true);
setTevSettingIntensityTextureToCI();
@@ -1010,7 +1007,7 @@ void renderingPlusDoorAndCursor_c::drawTreasure() {
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB565, 0);
GXSETARRAY(GX_VA_TEX0, (void*)l_iconTex0, sizeof(l_iconTex0), 2);
GXSETARRAY(GX_VA_TEX0, l_iconTex0, sizeof(l_iconTex0), 2, true);
setTevSettingIntensityTextureToCI();
@@ -1084,7 +1081,7 @@ void renderingPlusDoorAndCursor_c::drawTreasureAfterPlayer() {
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB565, 0);
GXSETARRAY(GX_VA_TEX0, (void*)l_iconTex0, sizeof(l_iconTex0), 2);
GXSETARRAY(GX_VA_TEX0, l_iconTex0, sizeof(l_iconTex0), 2, true);
setTevSettingIntensityTextureToCI();
+16 -7
View File
@@ -300,16 +300,25 @@ void dMenu_DmapMap_c::_delete() {
}
}
void dMenu_DmapMap_c::setTexture(u16 param_0, u16 param_1, u16 param_2, u16 param_3) {
void dMenu_DmapMap_c::setTexture(u16 width, u16 height, u16 param_2, u16 param_3) {
#ifdef TARGET_PC
// Increase map render resolution
width *= 2;
height *= 2;
#endif
for (int lp1 = 0; lp1 < 2; lp1++) {
u32 var_r27 = GXGetTexBufferSize(param_0, param_1, 9, 0, 0);
mMapImage_p[lp1] = JKR_NEW_ARRAY_ARGS(u8, var_r27, 0x20);
#ifdef TARGET_PC
u32 sz = 0x20; // No need to allocate memory for texture
#else
u32 sz = GXGetTexBufferSize(width, height, 9, 0, 0);
#endif
mMapImage_p[lp1] = JKR_NEW_ARRAY_ARGS(u8, sz, 0x20);
JUT_ASSERT(1672, mMapImage_p[lp1] != NULL);
mRend[lp1].init(mMapImage_p[lp1], param_0, param_1, param_2, param_3);
mRend[lp1].init(mMapImage_p[lp1], width, height, param_2, param_3);
mResTIMG[lp1] = JKR_NEW_ARGS (0x20) ResTIMG;
JUT_ASSERT(1687, mResTIMG[lp1] != NULL);
mRend[lp1].makeResTIMG(mResTIMG[lp1], param_0, param_1, mMapImage_p[lp1], (u8*)dMdm_HIO_prm_res_dst_s::m_res, 30);
mRend[lp1].makeResTIMG(mResTIMG[lp1], width, height, mMapImage_p[lp1], (u8*)dMdm_HIO_prm_res_dst_s::m_res, 30);
}
}
@@ -929,7 +938,7 @@ f32 dMenu_StageMapCtrl_c::m_zoomCenterMinZ;
f32 dMenu_StageMapCtrl_c::m_zoomCenterMaxZ;
void dMenu_StageMapCtrl_c::_create(u16 param_0, u16 param_1, u16 param_2, u16 param_3,
void dMenu_StageMapCtrl_c::_create(u16 width, u16 height, u16 param_2, u16 param_3,
s8 param_4, void* param_5) {
field_0xe6 = dComIfGp_roomControl_getStayNo();
field_0xe7 = param_4;
@@ -946,7 +955,7 @@ void dMenu_StageMapCtrl_c::_create(u16 param_0, u16 param_1, u16 param_2, u16 pa
field_0x98 = param_3;
f32 var_f26 = field_0x98 > field_0x94 ? field_0x98 : field_0x94;
dMenu_DmapMap_c::_create(param_0, param_1, param_2, param_3, param_5);
dMenu_DmapMap_c::_create(width, height, param_2, param_3, param_5);
getInitDispCenter(&field_0x9c, &field_0xa0);
field_0xa4 = field_0x9c;
+1 -1
View File
@@ -2278,7 +2278,7 @@ void dMenu_Fmap_c::decodeFieldMapData() {
dMenuMapCommon_c::Stage_c* stage_data
= (dMenuMapCommon_c::Stage_c*)(field_data + mpFieldDat->mStageDataOffset);
mDataNumMax = stage_data->mCount;
mAllTitleName = *(u16*)(field_data + 0x16);
mAllTitleName = *(BE(u16)*)(field_data + 0x16);
setTitleName(mAllTitleName);
dMenu_Fmap_field_region_data_c::data* regions = region_data->mData;
char tex_path[20];
+10
View File
@@ -657,9 +657,19 @@ const GXColor* dMenu_FmapMap_c::getColor(int param_0) {
}
void dMenu_FmapMap_c::setTexture(u16 i_width, u16 i_height, u16 param_2, u16 param_3) {
#ifdef TARGET_PC
// Increase map render resolution
i_width *= 2;
i_height *= 2;
#endif
mMapImage_p = NULL;
mResTIMG = NULL;
#ifdef TARGET_PC
int size = 0x20; // No need to allocate memory for texture
#else
int size = GXGetTexBufferSize(i_width, i_height, GX_TF_C8, 0, 0);
#endif
mMapImage_p = JKR_NEW_ARRAY_ARGS(u8, size, 0x20);
init(mMapImage_p, i_width, i_height, param_2, param_3);
mResTIMG = JKR_NEW_ARGS (0x20) ResTIMG;
-4
View File
@@ -1262,10 +1262,8 @@ void dMenu_Ring_c::drawItem() {
(g_ringHIO.mItemAlphaMin + fVar16 * (g_ringHIO.mItemAlphaMax - g_ringHIO.mItemAlphaMin));
for (int i = 0; i < mItemsTotal; i++) {
if (i != mCurrentSlot || (mStatus != STATUS_WAIT && mStatus != STATUS_EXPLAIN && mStatus != STATUS_EXPLAIN_FORCE)) {
#if REQUIRES_GX_LINES
J2DDrawFrame(mItemSlotPosX[i] - 24.0f + mCenterPosX, mItemSlotPosY[i] - 24.0f + mCenterPosY,
48.0f, 48.0f, g_ringHIO.mItemFrame[g_ringHIO.UNSELECT_FRAME], 6);
#endif
f32 fVar17 = 1.0f;
if (i != mCurrentSlot) {
fVar17 = ringAlpha / 255.0f;
@@ -1308,10 +1306,8 @@ void dMenu_Ring_c::drawItem() {
void dMenu_Ring_c::drawItem2() {
s32 idx = mCurrentSlot;
if (mStatus == STATUS_WAIT || mStatus == STATUS_EXPLAIN || mStatus == STATUS_EXPLAIN_FORCE) {
#if REQUIRES_GX_LINES
J2DDrawFrame(mItemSlotPosX[idx] - 24.0f + mCenterPosX, mItemSlotPosY[idx] - 24.0f + mCenterPosY,
48.0f, 48.0f, g_ringHIO.mItemFrame[g_ringHIO.SELECT_FRAME], 6);
#endif
for (int i = 0; i < 3; i++) {
if (mpItemTex[idx][i] != NULL) {
+254 -10
View File
@@ -11,6 +11,8 @@
#include "d/d_meter_map.h"
#include "d/d_msg_class.h"
#include "d/d_msg_object.h"
#include "d/d_meter_HIO.h"
#include <cstring>
enum ITEMICON_RES_FILE_ID {
@@ -362,19 +364,18 @@ void dMeter2Info_c::getString(u32 i_stringID, char* o_string, JMSMesgEntry_c* i_
}
JMSMesgInfo_c* bmg_inf = (JMSMesgInfo_c*)(msgRes + sizeof(bmg_header_t));
u8* bmg_data = (u8*)bmg_inf + bmg_inf->header.size + sizeof(bmg_section_t); // pointer to start of message data
u8* bmg_data = (u8*)bmg_inf + bmg_inf->header.size;
u8* string_data = bmg_data + sizeof(bmg_section_t); // pointer to start of message data
char* string_ptr = NULL;
for (u16 i = 0; i < bmg_inf->entry_num; i++) {
u8* entry = ((u8*)bmg_inf + (i * sizeof(JMSMesgEntry_c)));
// check if i_stringID equals the message entry "Message ID"
if (i_stringID == *(BE(u16)*)(entry + 0x14)) {
string_ptr = (char*)(bmg_data + *(BE(u32)*)(entry + 0x10)); // use entry "String Offset" to get string pointer
if (i_stringID == bmg_inf->entries[i].message_id) {
string_ptr = (char*)(string_data + bmg_inf->entries[i].string_offset); // use entry "String Offset" to get string pointer
strcpy(o_string, string_ptr);
if (i_msgEntry != NULL) {
memcpy(i_msgEntry, entry + 0x10, sizeof(JMSMesgEntry_c));
memcpy(i_msgEntry, &bmg_inf->entries[i], sizeof(JMSMesgEntry_c));
}
return;
@@ -508,6 +509,10 @@ void dMeter2Info_c::getStringKanji(u32 i_stringID, char* o_string, JMSMesgEntry_
}
}
static void dummyString() {
OS_REPORT("レボ用ID=====>%d, %d\n");
}
f32 dMeter2Info_c::getStringLength(J2DTextBox* i_textbox, char* i_string) {
f32 str_width = 0.0f;
f32 str_len = 0.0f;
@@ -1003,6 +1008,104 @@ s16 dMeter2Info_c::get4thTexture(u8 i_itemType) {
}
void dMeter2Info_c::set1stColor(u8 i_itemType, J2DPicture* i_pic) {
// TODO: probably some way to rectify this for both versions
#if VERSION == VERSION_SHIELD_DEBUG
static JUtility::TColor const black_color[37] = {
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x60, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0xC0, 0x00),
JUtility::TColor(0xA0, 0x60, 0x00, 0x00), JUtility::TColor(0xA0, 0x00, 0x00, 0x00), JUtility::TColor(0x40, 0x00, 0x60, 0x00),
JUtility::TColor(0xE0, 0x00, 0x00, 0x00), JUtility::TColor(0x40, 0x40, 0x40, 0x00), JUtility::TColor(0x6E, 0x6E, 0x64, 0x00),
JUtility::TColor(0x32, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x7F, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x7F, 0x00),
JUtility::TColor(0xAF, 0x9B, 0x6E, 0x00), JUtility::TColor(0xAA, 0x9B, 0x6E, 0x00), JUtility::TColor(0x55, 0x37, 0x14, 0x00),
JUtility::TColor(0x6E, 0x6E, 0x6E, 0x00), JUtility::TColor(0x6E, 0x6E, 0x6E, 0x00), JUtility::TColor(0xFF, 0x58, 0x00, 0x00),
JUtility::TColor(0x6C, 0x3E, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x32, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x7F, 0x00), JUtility::TColor(0x00, 0x7F, 0x00, 0x00), JUtility::TColor(0x55, 0x37, 0x14, 0x00),
JUtility::TColor(0x00, 0x00, 0x22, 0x00), JUtility::TColor(0x2B, 0x18, 0x22, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x46, 0x46, 0x41, 0x00), JUtility::TColor(0x46, 0x46, 0x41, 0x00), JUtility::TColor(0x46, 0x46, 0x41, 0x00),
JUtility::TColor(0x46, 0x46, 0x41, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00),
};
static JUtility::TColor const white_color[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0x60, 0xFF, 0x00, 0xFF), JUtility::TColor(0x00, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0x00, 0xFF), JUtility::TColor(0xFF, 0x80, 0x80, 0xFF), JUtility::TColor(0xBE, 0x40, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xC0, 0x00, 0xFF), JUtility::TColor(0xC0, 0xC0, 0xC0, 0xFF), JUtility::TColor(0xF5, 0xF5, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xD2, 0xAA, 0xFF), JUtility::TColor(0xEF, 0xF5, 0xC9, 0xFF), JUtility::TColor(0xB0, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xF0, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xF0, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xD7, 0xFF),
JUtility::TColor(0xF5, 0xF5, 0xFF, 0xFF), JUtility::TColor(0xF5, 0xF5, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xC2, 0xFF),
JUtility::TColor(0xFF, 0x9D, 0x00, 0xFF), JUtility::TColor(0xC8, 0xC8, 0xC8, 0xFF), JUtility::TColor(0xFF, 0xD2, 0xAA, 0xFF),
JUtility::TColor(0xB0, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xEF, 0xF5, 0xC9, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xD7, 0xFF),
JUtility::TColor(0xD7, 0xCF, 0xF5, 0xFF), JUtility::TColor(0xFF, 0xFF, 0x33, 0xFF), JUtility::TColor(0xC8, 0xC8, 0xC8, 0xFF),
JUtility::TColor(0xF5, 0xF5, 0xFF, 0xFF), JUtility::TColor(0xF5, 0xF5, 0xFF, 0xFF), JUtility::TColor(0xF5, 0xF5, 0xFF, 0xFF),
JUtility::TColor(0xF5, 0xF5, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
static JUtility::TColor const vertex_color_lu[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00),
JUtility::TColor(0xFF, 0x78, 0xAF, 0xFF), JUtility::TColor(0x5C, 0xB4, 0x16, 0xFF), JUtility::TColor(0xA4, 0xFF, 0x00, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0x00, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0x78, 0xAF, 0xFF),
JUtility::TColor(0xA4, 0xFF, 0x00, 0xFF), JUtility::TColor(0x5C, 0xB4, 0x16, 0xFF), JUtility::TColor(0xFF, 0xFF, 0x00, 0xFF),
JUtility::TColor(0xC9, 0xB4, 0xFF, 0xFF), JUtility::TColor(0x3C, 0x0A, 0x00, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00), JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00), JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00), JUtility::TColor(0xFF, 0xA0, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
static JUtility::TColor const vertex_color_ru[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00),
JUtility::TColor(0xFF, 0xFF, 0x73, 0xFF), JUtility::TColor(0xFF, 0xFF, 0x2A, 0xFF), JUtility::TColor(0x98, 0xFF, 0x00, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0x73, 0xFF),
JUtility::TColor(0x98, 0xFF, 0x00, 0xFF), JUtility::TColor(0xFF, 0xFF, 0x2A, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0x39, 0xFF), JUtility::TColor(0xFF, 0xFF, 0x00, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00), JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00), JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0x00), JUtility::TColor(0xFF, 0xA0, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
static JUtility::TColor const vertex_color_ld[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0x78, 0x6E, 0x3C, 0xFF),
JUtility::TColor(0xFF, 0x00, 0x00, 0xFF), JUtility::TColor(0x3C, 0x32, 0x50, 0xFF), JUtility::TColor(0x00, 0x00, 0x74, 0xFF),
JUtility::TColor(0xFA, 0xC8, 0x9B, 0xFF), JUtility::TColor(0xFA, 0xC8, 0x9B, 0xFF), JUtility::TColor(0x46, 0x87, 0x00, 0xFF),
JUtility::TColor(0x5A, 0xB4, 0xB4, 0xFF), JUtility::TColor(0x5A, 0xB4, 0xB4, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0x00, 0x00, 0x00, 0xFF), JUtility::TColor(0xFF, 0x00, 0x00, 0xFF),
JUtility::TColor(0x00, 0x00, 0x74, 0xFF), JUtility::TColor(0x3C, 0x32, 0x50, 0xFF), JUtility::TColor(0x46, 0x87, 0x00, 0xFF),
JUtility::TColor(0x3C, 0x32, 0x50, 0x49), JUtility::TColor(0xFF, 0xFF, 0x00, 0xFF), JUtility::TColor(0x00, 0x00, 0x00, 0xFF),
JUtility::TColor(0x00, 0x00, 0x00, 0xFF), JUtility::TColor(0x00, 0x00, 0x00, 0xFF), JUtility::TColor(0x00, 0x00, 0x00, 0xFF),
JUtility::TColor(0x00, 0x00, 0x00, 0xFF), JUtility::TColor(0xE0, 0x00, 0xE0, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
static JUtility::TColor const vertex_color_rd[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0x78, 0x6E, 0x3C, 0xFF),
JUtility::TColor(0xFF, 0x96, 0x00, 0xFF), JUtility::TColor(0x55, 0x42, 0x00, 0xFF), JUtility::TColor(0x61, 0x48, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xAA, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xAA, 0xFF), JUtility::TColor(0xAF, 0x91, 0x23, 0xFF),
JUtility::TColor(0xE6, 0xFA, 0xFF, 0xFF), JUtility::TColor(0xE6, 0xFA, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0x00, 0x00, 0x00, 0xFF), JUtility::TColor(0xFF, 0x96, 0x00, 0xFF),
JUtility::TColor(0x61, 0x48, 0xFF, 0xFF), JUtility::TColor(0x55, 0x42, 0x00, 0xFF), JUtility::TColor(0xAF, 0x91, 0x23, 0xFF),
JUtility::TColor(0x3C, 0x09, 0x4E, 0xFF), JUtility::TColor(0xBA, 0x98, 0x00, 0xFF), JUtility::TColor(0x00, 0x00, 0x00, 0xFF),
JUtility::TColor(0x00, 0x00, 0x00, 0xFF), JUtility::TColor(0x00, 0x00, 0x00, 0xFF), JUtility::TColor(0x00, 0x00, 0x00, 0xFF),
JUtility::TColor(0x00, 0x00, 0x00, 0xFF), JUtility::TColor(0xE0, 0x00, 0xE0, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
#else
static GXColor const black_color[37] = {
{0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x00, 0x00}, {0x00, 0x00, 0xC0, 0x00},
{0xA0, 0x60, 0x00, 0x00}, {0xA0, 0x00, 0x00, 0x00}, {0x40, 0x00, 0x60, 0x00},
@@ -1098,6 +1201,7 @@ void dMeter2Info_c::set1stColor(u8 i_itemType, J2DPicture* i_pic) {
{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF},
};
#endif
i_pic->setBlackWhite(*(JUtility::TColor*)&black_color[i_itemType],
*(JUtility::TColor*)&white_color[i_itemType]);
@@ -1108,6 +1212,104 @@ void dMeter2Info_c::set1stColor(u8 i_itemType, J2DPicture* i_pic) {
}
void dMeter2Info_c::set2ndColor(u8 i_itemType, J2DPicture* i_pic) {
// TODO: probably some way to rectify this for both versions
#if VERSION == VERSION_SHIELD_DEBUG
static JUtility::TColor const black_color[37] = {
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x86, 0xD4, 0x00), JUtility::TColor(0xE6, 0x1E, 0xFF, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00), JUtility::TColor(0x00, 0x00, 0x00, 0x00),
JUtility::TColor(0x00, 0x00, 0x00, 0x00),
};
static JUtility::TColor const white_color[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xF5, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xC8, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
static JUtility::TColor const vertex_color_lu[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0x00, 0x00, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
static JUtility::TColor const vertex_color_ru[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0x00, 0xFF, 0xFF, 0x58), JUtility::TColor(0xFF, 0xFF, 0xFF, 0x58), JUtility::TColor(0xFF, 0xFF, 0xFF, 0x58),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0x58), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
static JUtility::TColor const vertex_color_ld[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
static JUtility::TColor const vertex_color_rd[37] = {
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xCD, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xCD, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
};
#else
static GXColor const black_color[37] = {
{0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00},
@@ -1203,6 +1405,7 @@ void dMeter2Info_c::set2ndColor(u8 i_itemType, J2DPicture* i_pic) {
{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF},
};
#endif
i_pic->setBlackWhite(*(JUtility::TColor*)&black_color[i_itemType],
*(JUtility::TColor*)&white_color[i_itemType]);
@@ -1235,6 +1438,8 @@ void dMeter2Info_c::set3rdColor(u8 i_itemType, J2DPicture* i_pic) {
}
void dMeter2Info_c::set4thColor(u8 i_itemType, J2DPicture* i_pic) {
UNUSED(i_itemType);
i_pic->setBlackWhite(JUtility::TColor(0, 0, 0, 0), JUtility::TColor(0xff, 0xff, 0xff, 0xff));
i_pic->setCornerColor(
JUtility::TColor(0xff, 0xff, 0xff, 0xff), JUtility::TColor(0xff, 0xff, 0xff, 0xff),
@@ -1443,6 +1648,18 @@ u8 dMeter2Info_getPixel(f32 i_posX, f32 i_posY, f32 param_2, f32 param_3, f32 i_
return (var_r24 & 0x7000) != 0;
}
bool dMeter2Info_isNextStage(const char* i_name, s16 i_roomNo, s16 i_point, s16 i_layer) {
if (strcmp(dComIfGp_getNextStageName(), i_name) == 0
&& dComIfGp_getNextStageRoomNo() == i_roomNo
&& dComIfGp_getNextStagePoint() == i_point
&& dComIfGp_getNextStageLayer() == i_layer
) {
return true;
}
return false;
}
void dMeter2Info_setCloth(u8 i_clothId, bool i_offItemBit) {
switch (i_clothId) {
case dItemNo_WEAR_CASUAL_e:
@@ -1586,6 +1803,7 @@ u8 dMeter2Info_getNewLetterNum() {
}
int dMeter2Info_setNewLetterSender() {
int ret = 0;
u8 check = 0;
for (int i = 0; i < 0x40; i++) {
@@ -1593,10 +1811,9 @@ int dMeter2Info_setNewLetterSender() {
u16 letterEvent = dMenu_Letter::getLetterEventFlag(i);
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[letterEvent])) {
if (check == 0) {
u16 letterName = dMenu_Letter::getLetterName(i);
dMsgObject_c::setLetterNameID(letterName);
dMsgObject_setLetterNameID(dMenu_Letter::getLetterName(i));
} else {
dMsgObject_c::setLetterNameID(0);
dMsgObject_setLetterNameID(0);
return 0;
}
check++;
@@ -1604,7 +1821,7 @@ int dMeter2Info_setNewLetterSender() {
}
}
return 0;
return ret;
}
int dMeter2Info_recieveLetter() {
@@ -1636,6 +1853,33 @@ int dMeter2Info_recieveLetter() {
return rv;
}
#if WIDESCREEN_SUPPORT
f32 dMeter2Info_getWide2DPosX(f32* param_0) {
J2DOrthoGraph graf(0.0f, 0.0f, 640.0f, 456.0f, -1.0f, 1.0f);
graf.setOrtho(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(), mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getHeightF(), -1.0f, 1.0f);
JGeometry::TBox2<f32>* bounds = graf.getBounds();
const JGeometry::TBox2<f32>* ortho = graf.getOrtho();
f32 var_f31 = 304.0f;
f32 var_f30 = 608.0f / (ortho->f.x - ortho->i.x);
f32 var_f29 = *param_0 - var_f31;
*param_0 = var_f29 * var_f30 + var_f31;
return *param_0;
}
void dMeter2Info_onWide2D() {
g_ringHIO.updateOnWide();
g_drawHIO.updateOnWide();
}
void dMeter2Info_offWide2D() {
g_ringHIO.updateOffWide();
g_drawHIO.updateOffWide();
}
#endif
void dMeter2Info_set2DVibrationT() {}
void dMeter2Info_set2DVibration() {}
void dMeter2Info_set2DVibrationM() {}
+41 -33
View File
@@ -302,12 +302,12 @@ bool dMeterMap_c::isEventRunCheck() {
f32 dMeterMap_c::getMapDispEdgeLeftX_Layout() {
#if (PLATFORM_WII || PLATFORM_SHIELD)
if (mDoGph_gInf_c::isWide()) {
return g_meter_mapHIO.mWideBottomLeftX + field_0x28;
return g_meter_mapHIO.mWideBottomLeftX + mSlidePositionOffset;
}
return g_meter_mapHIO.mNormalBottomLeftX + field_0x28;
return g_meter_mapHIO.mNormalBottomLeftX + mSlidePositionOffset;
#else
return field_0x28 + 35;
return mSlidePositionOffset + 35;
#endif
}
@@ -349,14 +349,14 @@ s16 dMeterMap_c::getDispPosOutSide_OffsetX() {
void dMeterMap_c::setDispPosInsideFlg_SE_On() {
if (isEnableDispMapAndMapDispSizeTypeNo()) {
dComIfGp_mapShow();
field_0x2d = 1;
mMapIsInside = 1;
field_0x2e = 7;
}
}
void dMeterMap_c::setDispPosOutsideFlg_SE_On() {
dComIfGp_mapHide();
field_0x2d = 0;
mMapIsInside = 0;
field_0x2e = 7;
}
@@ -456,44 +456,44 @@ void dMeterMap_c::_create(J2DScreen* unused) {
field_0x2a = 0;
if (dComIfGp_checkMapShow()) {
field_0x2d = 1;
mMapIsInside = 1;
if (!isEnableDispMapAndMapDispSizeTypeNo()) {
field_0x2d = 0;
mMapIsInside = 0;
}
if (!isMapOpenCheck()) {
field_0x2d = 0;
mMapIsInside = 0;
}
} else {
field_0x2d = 0;
mMapIsInside = 0;
}
if (field_0x2d != 0) {
field_0x2d = 1;
field_0x28 = getDispPosInside_OffsetX();
if (mMapIsInside != 0) {
mMapIsInside = 1;
mSlidePositionOffset = getDispPosInside_OffsetX();
dMeter2Info_setMapStatus(1);
} else {
field_0x2d = 0;
field_0x28 = getDispPosOutSide_OffsetX();
mMapIsInside = 0;
mSlidePositionOffset = getDispPosOutSide_OffsetX();
dMeter2Info_setMapStatus(0);
}
field_0x2e = 0;
field_0x28 = 0;
mSlidePositionOffset = 0;
field_0x30 = 0;
/* dSv_event_flag_c::M_085 - Twilight Hyrule Field - Midna dialogue right before Boss Bug's Tear of Light appears */
field_0x2b = dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[118]);
}
void dMeterMap_c::setDispPosOutSide() {
field_0x2d = 0;
field_0x28 = getDispPosOutSide_OffsetX();
mMapIsInside = 0;
mSlidePositionOffset = getDispPosOutSide_OffsetX();
}
void dMeterMap_c::setDispPosInSide() {
field_0x2d = 1;
field_0x28 = getDispPosInside_OffsetX();
mMapIsInside = 1;
mSlidePositionOffset = getDispPosInside_OffsetX();
}
void dMeterMap_c::_delete() {
@@ -506,7 +506,7 @@ void dMeterMap_c::_delete() {
}
if (isEnableDispMapAndMapDispSizeTypeNo()) {
if (field_0x2d != 0) {
if (mMapIsInside != 0) {
dComIfGp_mapShow();
} else {
dComIfGp_mapHide();
@@ -548,16 +548,16 @@ void dMeterMap_c::_move(u32 param_0) {
ctrlShowMap();
}
if (field_0x2d != 0) {
if (field_0x28 != getDispPosInside_OffsetX()) {
if (!cLib_addCalcAngleS(&field_0x28, getDispPosInside_OffsetX(), 2, 60, 10)) {
if (mMapIsInside != 0) {
if (mSlidePositionOffset != getDispPosInside_OffsetX()) {
if (!cLib_addCalcAngleS(&mSlidePositionOffset, getDispPosInside_OffsetX(), 2, 60, 10)) {
#if DEBUG
cLib_checkBit<u8>((int)field_0x2e, 4);
#endif
}
}
} else {
cLib_addCalcAngleS(&field_0x28, getDispPosOutSide_OffsetX(), 2, 60, 10);
cLib_addCalcAngleS(&mSlidePositionOffset, getDispPosOutSide_OffsetX(), 2, 60, 10);
}
Vec map_pos = dMapInfo_n::getMapPlayerPos();
@@ -579,8 +579,8 @@ void dMeterMap_c::_move(u32 param_0) {
mSizeH = (s16)sizeH;
#endif
field_0x18 = field_0x28 + getMapDispEdgeLeftX_Layout();
field_0x1c = getMapDispEdgeBottomY_Layout() - mSizeH;
mDrawPosX = mSlidePositionOffset + getMapDispEdgeLeftX_Layout();
mDrawPosY = getMapDispEdgeBottomY_Layout() - mSizeH;
mMap->_move(map_pos.x, map_pos.z, stayNo, map_pos.y);
field_0x30 = dComIfGp_event_runCheck();
@@ -593,6 +593,14 @@ void dMeterMap_c::_draw() {
dComIfGd_set2DOpa(this);
}
#else
#if TARGET_PC
// Optimization: don't draw map if it's off-screen/invisible.
// Especially useful in debug builds on Hyrule field etc., it's slow!
if ((!mMapIsInside && mSlidePositionOffset == getDispPosOutSide_OffsetX()) || mMapAlpha == 0) {
return;
}
#endif
mMap->_draw();
dComIfGd_set2DOpa(this);
#endif
@@ -609,8 +617,8 @@ void dMeterMap_c::draw() {
graf->setup2D();
f32 sizeX = mSizeW;
f32 sizeY = mSizeH;
f32 tmp2 = field_0x18;
f32 tmp3 = field_0x1c;
f32 drawPosX = mDrawPosX;
f32 drawPosY = mDrawPosY;
u8 alpha = mMapAlpha;
#if DEBUG
@@ -620,7 +628,7 @@ void dMeterMap_c::draw() {
#endif
mMapJ2DPicture->setAlpha(alpha);
mMapJ2DPicture->draw(tmp2, tmp3, sizeX, sizeY, false, false, false);
mMapJ2DPicture->draw(drawPosX, drawPosY, sizeX, sizeY, false, false, false);
mMapJ2DPicture->calcMtx();
}
}
@@ -640,7 +648,7 @@ void dMeterMap_c::ctrlShowMap() {
dMeter2Info_getPauseStatus() == 2 || dMeter2Info_getPauseStatus() == 6)
{
#if !DEBUG
if (dMeter2Info_getMapStatus() == 0 && field_0x2d == 0) {
if (dMeter2Info_getMapStatus() == 0 && mMapIsInside == 0) {
setDispPosInsideFlg_SE_On();
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f,
-1.0f, 0);
@@ -653,7 +661,7 @@ void dMeterMap_c::ctrlShowMap() {
#if DEBUG
dMeter2Info_getMapStatus() == 0 &&
#else
dMeter2Info_getMapStatus() == 1 && field_0x2d != 0 &&
dMeter2Info_getMapStatus() == 1 && mMapIsInside != 0 &&
#endif
isFmapScreen()
) {
@@ -690,7 +698,7 @@ void dMeterMap_c::ctrlShowMap() {
dMeter2Info_resetPauseStatus();
if (isDmapScreen()) {
#if !DEBUG
if (dMeter2Info_getMapStatus() == 0 && field_0x2d == 0) {
if (dMeter2Info_getMapStatus() == 0 && mMapIsInside == 0) {
setDispPosInsideFlg_SE_On();
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f,
-1.0f, -1.0f, 0);
@@ -703,7 +711,7 @@ void dMeterMap_c::ctrlShowMap() {
#if DEBUG
dMeter2Info_getMapStatus() == 0
#else
dMeter2Info_getMapStatus() == 1 && field_0x2d != 0
dMeter2Info_getMapStatus() == 1 && mMapIsInside != 0
#endif
) {
dMeter2Info_setMapStatus(6);
+4 -4
View File
@@ -656,7 +656,7 @@ void dMsgObject_c::setMessageIndexDemo(u32 revoMsgIndex, bool param_2) {
u32 dMsgObject_c::getMessageIndex(u32 param_0) {
u32 i = 0;
JMSMesgInfo_c* pMsg = (JMSMesgInfo_c*)((char*)mpMsgDt + 0x20);
u32 msgIndexCount = *((u16*)((char*)mpMsgDt + 0x28));
u32 msgIndexCount = *((BE(u16)*)((char*)mpMsgDt + 0x28));
int rv;
for (; i < msgIndexCount; i++) {
if (pMsg->entries[i].message_id == param_0) {
@@ -683,12 +683,12 @@ u32 dMsgObject_c::getRevoMessageIndex(u32 param_1) {
JUT_ASSERT(1916, groupID==s_groupID || groupID == 0)
changeGroup(groupID);
pMsg = (JMSMesgInfo_c*)((char*)mpMsgDt + 0x20);
msgIndexCount = *((u16*)((char*)mpMsgDt + 0x28));
msgIndexCount = *((BE(u16)*)((char*)mpMsgDt + 0x28));
for (; i < msgIndexCount; i++) {
if (pMsg->entries[i].message_id == param_1) {
s8* ptr = (s8*)pMsg + pMsg->header.size + pMsg->entries[i].string_offset + 8;
if (ptr[0] == 26 && ptr[2] == 3 && (s8)ptr[4] == 0) {
rv = pMsg->entries[*(int*)(ptr + 5)].message_id;
rv = pMsg->entries[*(BE(int)*)(ptr + 5)].message_id;
} else {
rv = param_1;
}
@@ -706,7 +706,7 @@ u32 dMsgObject_c::getRevoMessageIndex(u32 param_1) {
u32 dMsgObject_c::getMessageIndexAlways(u32 param_0) {
u32 i = 0;
JMSMesgInfo_c* pMsg = (JMSMesgInfo_c*)((char*)mpMsgRes + 0x20);
u32 msgIndexCount = *((u16*)((char*)mpMsgRes + 0x28));
u32 msgIndexCount = *((BE(u16)*)((char*)mpMsgRes + 0x28));
int rv;
for (; i < msgIndexCount; i++) {
if (pMsg->entries[i].message_id == param_0) {
+161 -34
View File
@@ -8,7 +8,38 @@
#include "d/d_path.h"
#include "d/d_com_inf_game.h"
dPnt* dPath_GetPnt(dPath const* path, int pnt_index) {
#if DEBUG
#include "d/d_debug_viewer.h"
#endif
class dPath_HIO : public JORReflexible {
public:
dPath_HIO() {}
~dPath_HIO();
void genMessage(JORMContext* mctx) {
mctx->genCheckBox("デバッグ表示", &flags, 2);
mctx->genSlider("部屋番号", &roomNo, -2, 64);
mctx->genLabel("-3=現在プレイヤーのいる部屋, -2=旧常駐、-1=常駐", 0);
}
void Ct() {
flags = 0;
roomNo = -3;
}
int GetRoomNo() { return roomNo; }
bool ChkDispLine() { return flags & 2; }
/* 0x4 */ s8 id;
/* 0x6 */ u16 flags;
/* 0x8 */ s16 roomNo;
};
dPnt* dPath_GetPnt(const dPath* path, int pnt_index) {
JUT_ASSERT(27, path != NULL);
JUT_ASSERT(28, 0 <= pnt_index && pnt_index < path->m_num);
if (path == NULL || path->m_points == NULL || pnt_index < 0 || pnt_index >= path->m_num) {
return NULL;
}
@@ -17,116 +48,212 @@ dPnt* dPath_GetPnt(dPath const* path, int pnt_index) {
}
dPath* dPath_GetRoomPath(int path_index, int room_no) {
dStage_dPath_c* path;
dStage_dPath_c* pd;
if (room_no == -1) {
path = dComIfGp_getStage()->getPath2Inf();
dStage_dt_c* stage = dComIfGp_getStage();
pd = stage->getPath2Inf();
} else {
JUT_ASSERT(58, 0 <= room_no && room_no < 64);
dStage_roomDt_c* roomDt = dComIfGp_roomControl_getStatusRoomDt(room_no);
if (roomDt == NULL) {
return NULL;
}
path = roomDt->getPath2Inf();
pd = roomDt->getPath2Inf();
}
if (path == NULL || path_index < 0 || path_index >= path->m_num) {
if (pd == NULL || path_index < 0 || path_index >= pd->num) {
return NULL;
}
return &path->m_path[path_index];
return &pd->m_path[path_index];
}
dPath* dPath_GetNextRoomPath(dPath const* p_path, int room_no) {
dStage_dPath_c* path;
dPath* dPath_GetNextRoomPath(const dPath* path, int room_no) {
dStage_dPath_c* pd;
if (room_no == -1) {
path = dComIfGp_getStage()->getPath2Inf();
dStage_dt_c* stage = dComIfGp_getStage();
pd = stage->getPath2Inf();
} else {
dStage_roomDt_c* roomDt = dComIfGp_roomControl_getStatusRoomDt(room_no);
if (roomDt == NULL) {
return NULL;
}
path = roomDt->getPath2Inf();
pd = roomDt->getPath2Inf();
}
int next_id = p_path->m_nextID;
if (path == NULL || next_id == 0xFFFF) {
int next_id = path->m_nextID;
if (pd == NULL || next_id == 0xFFFF) {
return NULL;
}
if (next_id < 0 || next_id >= path->m_num) {
JUT_ASSERT(111, 0 <= next_id && next_id < pd->num);
if (next_id < 0 || next_id >= pd->num) {
return NULL;
}
return &path->m_path[next_id];
return &pd->m_path[next_id];
}
#if !PLATFORM_GCN // Fakematch due to differing return type on non-GCN platforms
int dPath_GetPolyRoomPathVec(cBgS_PolyInfo const& poly, cXyz* p_pathVec, int* param_2) {
int dPath_GetPolyRoomPathVec(const cBgS_PolyInfo& polyinfo, cXyz* vec, int* param_2)
#else
u8 dPath_GetPolyRoomPathVec(cBgS_PolyInfo const& poly, cXyz* p_pathVec, int* param_2) {
u8 dPath_GetPolyRoomPathVec(const cBgS_PolyInfo& polyinfo, cXyz* vec, int* param_2)
#endif
int roomId = dComIfG_Bgsp().GetRoomId(poly);
int roomPathId = dComIfG_Bgsp().GetRoomPathId(poly);
{
int room_no = dComIfG_Bgsp().GetRoomId(polyinfo);
int path_idx = dComIfG_Bgsp().GetRoomPathId(polyinfo);
p_pathVec->x = 0.0f;
p_pathVec->y = 0.0f;
p_pathVec->z = 0.0f;
vec->x = 0.0f;
vec->y = 0.0f;
vec->z = 0.0f;
*param_2 = 0;
if (roomId == -1) {
if (room_no == -1) {
return 0;
}
dPath* path = dPath_GetRoomPath(roomPathId, roomId);
dPath* path = dPath_GetRoomPath(path_idx, room_no);
if (path == NULL) {
return 0;
}
if (path->field_0x6 != 0xFF && dComIfGs_isSwitch(path->field_0x6, roomId)) {
if (path->swbit != 0xFF && dComIfGs_isSwitch(path->swbit, room_no)) {
return 0;
}
int pnt_no = dComIfG_Bgsp().GetRoomPathPntNo(poly);
int pnt_no = dComIfG_Bgsp().GetRoomPathPntNo(polyinfo);
if (pnt_no == 0xFF || pnt_no < 0 || pnt_no >= path->m_num) {
return 0;
}
dPnt* pnt_start = path->m_points;
dPnt* pnt_end = &pnt_start[pnt_no];
dPnt* pnt_end = &path->m_points[pnt_no];
dPnt* pnt_begin;
if (pnt_no == path->m_num - 1) {
pnt_begin = pnt_start;
pnt_begin = path->m_points;
} else {
pnt_begin = &pnt_start[pnt_no + 1];
pnt_begin = &path->m_points[pnt_no + 1];
}
p_pathVec->x = pnt_begin->m_position.x - pnt_end->m_position.x;
p_pathVec->y = pnt_begin->m_position.y - pnt_end->m_position.y;
p_pathVec->z = pnt_begin->m_position.z - pnt_end->m_position.z;
vec->x = pnt_begin->m_position.x - pnt_end->m_position.x;
vec->y = pnt_begin->m_position.y - pnt_end->m_position.y;
vec->z = pnt_begin->m_position.z - pnt_end->m_position.z;
*param_2 = path->field_0x4;
return 1;
}
#if DEBUG
dPath_HIO::~dPath_HIO() {}
static dPath_HIO s_hio;
#endif
#if VERSION == VERSION_SHIELD_DEBUG
void dPath_Ct() {
#if DEBUG
s_hio.Ct();
s_hio.id = mDoHIO_CREATE_CHILD("レール", &s_hio);
#endif
}
void dPath_Dt() {
#if DEBUG
#endif
mDoHIO_DELETE_CHILD(s_hio.id);
}
void dPath_Move() {}
void dPath_Draw() {
#if DEBUG
if (s_hio.ChkDispLine()) {
static int start_counter;
int counter = start_counter / 20;
dStage_dPath_c* pd;
int hio_roomNo = s_hio.GetRoomNo();
if (hio_roomNo == -3) {
int roomNo = dComIfGp_roomControl_getStayNo();
dStage_roomDt_c* roomDt = dComIfGp_roomControl_getStatusRoomDt(roomNo);
if (roomDt == NULL) {
return;
}
pd = roomDt->getPath2Inf();
} else if (hio_roomNo == -2) {
pd = dComIfGp_getStage()->getPathInf();
} else if (hio_roomNo == -1) {
pd = dComIfGp_getStage()->getPath2Inf();
} else {
dStage_roomDt_c* roomDt = dComIfGp_roomControl_getStatusRoomDt(hio_roomNo);
if (roomDt == NULL) {
return;
}
pd = roomDt->getPath2Inf();
}
if (pd != NULL) {
dPath* path = pd->m_path;
for (int i = 0; i < pd->num; i++) {
if (path->m_num >= 1) {
dPnt* pnt = path->m_points;
cXyz start_pos;
cXyz end_pos;
for (int j = 0; j < path->m_num - 1; j++) {
start_pos.set(pnt[0].m_position);
end_pos.set(pnt[1].m_position);
if (counter == 0) {
dDbVw_drawLineOpa(start_pos, end_pos, (GXColor){0xFF, 0xFF, 0xFF, 0xFF}, TRUE, 12);
} else {
dDbVw_drawLineOpa(start_pos, end_pos, (GXColor){0xFF, 0, 0, 0xFF}, TRUE, 12);
}
counter++;
if (counter >= 8) {
counter = 0;
}
pnt++;
}
if (dPath_ChkClose(path)) {
start_pos.set(pnt[0].m_position);
end_pos.set(path[1].m_points->m_position);
if (counter == 0) {
dDbVw_drawLineOpa(start_pos, end_pos, (GXColor){0xFF, 0xFF, 0xFF, 0xFF}, TRUE, 12);
} else {
dDbVw_drawLineOpa(start_pos, end_pos, (GXColor){0xFF, 0, 0, 0xFF}, TRUE, 12);
}
counter++;
if (counter >= 8) {
counter = 0;
}
}
}
path++;
}
}
start_counter--;
if (start_counter < 0) {
start_counter = 160;
}
}
#endif
}
static void dummy() {
cXyz pos;
GXColor color;
dDbVw_drawSphereOpa(pos, 0.0f, color, 0);
}
#endif
+2
View File
@@ -20,6 +20,8 @@
#include <cstdio>
#include <cstring>
#include "dusk/logging.h"
#ifndef __MWERKS__
#include "dusk/extras.h"
#endif
+13 -2
View File
@@ -22,6 +22,7 @@
#include <cstdio>
#include <cstring>
#include "dusk/logging.h"
#include "dusk/string.hpp"
#if TARGET_PC
#include <format>
@@ -391,6 +392,16 @@ static void dummy1(dStage_roomControl_c* roomControl) {
}
JKRExpHeap* dStage_roomControl_c::createMemoryBlock(int i_blockIdx, u32 i_heapSize) {
#if TARGET_PC
// Cave of Ordeals crashes around floor 29 due to no free heap space
// Increasing the size here avoids that, though its ugly. maybe TODO a better fix
if (strcmp(dComIfGp_getStartStageName(), "D_SB01") == 0) {
u32 prev = i_heapSize;
i_heapSize *= 2;
DuskLog.warn("Doubling heap size for D_SB01... ({}) -> ({})", prev, i_heapSize);
}
#endif
if (mMemoryBlock[i_blockIdx] == NULL) {
mMemoryBlock[i_blockIdx] = JKRCreateExpHeap(i_heapSize, mDoExt_getArchiveHeap(), false);
JKRHEAP_NAMEF(mMemoryBlock[i_blockIdx], "Room control memory block %d", i_blockIdx);
@@ -2136,7 +2147,7 @@ static int dStage_pathInfoInit(dStage_dt_c* i_stage, void* i_data, int entryNum,
i_stage->setPathInfo(path_c);
for (int i = 0; i < path_c->m_num; i++) {
for (int i = 0; i < path_c->num; i++) {
#if TARGET_PC
path->m_points.setBase(i_stage->getPntInf()->m_pnt_offset);
#else
@@ -2165,7 +2176,7 @@ static int dStage_rpatInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, vo
dPath* pPath = pStagePath->m_path;
i_stage->setPath2Info(pStagePath);
for (s32 i = 0; i < pStagePath->m_num; pPath++, i++, (void)0) {
for (s32 i = 0; i < pStagePath->num; pPath++, i++, (void)0) {
#if TARGET_PC
pPath->m_points.setBase(i_stage->getPnt2Inf()->m_pnt_offset);
#else
+27
View File
@@ -59,3 +59,30 @@ const vib_pattern dVibration_c::CQ_patt[VIBMODE_Q_MAX] = {
/* VIBMODE_Q_POWER8 */ {4, 32, 0x6B6D6B6D},
/* VIBMODE_Q_HORSE */ {0, 27, 0x20201000},
};
const char* shock_names[VIBMODE_S_MAX] = {
"VIBMODE_S_CUSTOM",
"VIBMODE_S_POWER1",
"VIBMODE_S_POWER2",
"VIBMODE_S_POWER3",
"VIBMODE_S_POWER4",
"VIBMODE_S_POWER5",
"VIBMODE_S_POWER6",
"VIBMODE_S_POWER7",
"VIBMODE_S_POWER8",
"VIBMODE_S_DOKUTT",
"VIBMODE_S_FOR2D",
};
const char* quake_names[VIBMODE_Q_MAX] = {
"VIBMODE_Q_CUSTOM",
"VIBMODE_Q_POWER1",
"VIBMODE_Q_POWER2",
"VIBMODE_Q_POWER3",
"VIBMODE_Q_POWER4",
"VIBMODE_Q_POWER5",
"VIBMODE_Q_POWER6",
"VIBMODE_Q_POWER7",
"VIBMODE_Q_POWER8",
"VIBMODE_Q_HORSE",
};
+374 -52
View File
@@ -5,6 +5,7 @@
#include "f_op/f_op_camera_mng.h"
#include "m_Do/m_Do_controller_pad.h"
#include "SSystem/SComponent/c_math.h"
#include "d/d_s_play.h"
#include <climits>
#define RESET_FRAME -99
@@ -21,6 +22,13 @@ u16* makedata(u16* data, u32 pattern, s32 length) {
data[1] = pattern >> 16;
data[2] = pattern;
data[3] = 0;
#if TARGET_PC
data[0] = BSWAP16(data[0]);
data[1] = BSWAP16(data[1]);
data[2] = BSWAP16(data[2]);
#endif
return data;
}
@@ -31,27 +39,30 @@ s32 rollshift(u32 pattern, s32 length, s32 index) {
#else
index %= length;
#endif
return (pattern >> index) | (pattern << (length - index));
u32 var_r31 = pattern;
return (var_r31 >> index) | (var_r31 << (length - index));
}
u32 makebits(u32 bits, s32 length, s32 numbits) {
bits &= (-1 << (32 - length));
u32 mask = bits;
s32 i;
u32 mask = bits & (-1 << (32 - length));
bits = mask;
for (i = length; i < numbits; i += length) {
bits = mask | (bits >> length);
mask = bits | (mask >> length);
}
return bits;
return mask;
}
u32 randombit(s32 rounds, s32 length) {
u32 value = 0;
int i;
for (int i = 0; i < rounds; i++) {
for (i = 0; i < rounds; i++) {
value |= 0x40000000 >> (u32)(length * cM_rnd());
}
return value;
}
};
@@ -70,10 +81,13 @@ int dVibration_c::Run() {
mMotor.mQuake.field_0x0 |= 1;
}
mMotor.mQuake.mFrame = RESET_FRAME;
mMotor.mShock.mFrame = RESET_FRAME;
mMotor.mShock.mFrame = mMotor.mQuake.mFrame = RESET_FRAME;
}
#if DEBUG
testShake();
#endif
if ((mCamera.mShock.field_0x0 & 1) && mCamera.mShock.mFrame != RESET_FRAME) {
mCamera.mShock.mFrame = 0;
mCamera.mShock.mVibMode = VIBMODE_S_NONE;
@@ -85,6 +99,8 @@ int dVibration_c::Run() {
}
if (mCamera.mShock.mFrame == 0 || mCamera.mQuake.mFrame == 0) {
s32 pattern;
u32 sp1C = 0;
u32 rumble = 0;
if (mCamera.mShock.mVibMode == VIBMODE_S_NONE || (mCamera.mShock.field_0x0 & 1)) {
mCamera.mShock.mFrame = RESET_FRAME;
@@ -104,7 +120,7 @@ int dVibration_c::Run() {
rumble |= RUMBLE_QUAKE;
}
s32 length, pattern, bits, flags;
s32 length, bits, flags;
switch (rumble) {
case RUMBLE_SHOCK:
length = mCamera.mShock.mLength;
@@ -119,6 +135,12 @@ int dVibration_c::Run() {
if (dComIfGp_getCamera(0) != NULL && dComIfGp_getCamera(0)->field_0x22f == 0x47) {
dCam_getBody()->StartShake(length, (u8*)&pattern, flags, mCamera.mShock.mPos.norm());
}
#if DEBUG
if (mVibTest.m_displayDbg & 0x8000) {
OS_REPORT("vibration: %06d: start camera(%d) %x %d\n", mFrame, rumble, pattern, length);
}
#endif
break;
case RUMBLE_QUAKE:
length = mCamera.mQuake.mLength;
@@ -133,11 +155,18 @@ int dVibration_c::Run() {
if (dComIfGp_getCamera(0) != NULL && dComIfGp_getCamera(0)->field_0x22f == 0x47) {
dCam_getBody()->StartShake(length, (u8*)&pattern, flags, mCamera.mQuake.mPos.norm());
}
#if DEBUG
if (mVibTest.m_displayDbg & 0x8000) {
OS_REPORT("vibration: %06d: start camera(%d) %x %d\n", mFrame, rumble, pattern, length);
}
#endif
break;
case RUMBLE_SHOCK | RUMBLE_QUAKE:
pattern = mCamera.mShock.mPattern << mCamera.mShock.mFrame;
length = mCamera.mShock.mLength - mCamera.mShock.mFrame;
pattern |= rollshift(makebits(mCamera.mQuake.mPattern, mCamera.mQuake.mLength, length), length, mFrame);
sp1C = makebits(mCamera.mQuake.mPattern, mCamera.mQuake.mLength, length);
pattern |= rollshift(sp1C, length, mFrame);
pattern |= randombit(mCamera.mShock.mRounds > mCamera.mQuake.mRounds ? mCamera.mShock.mRounds : mCamera.mQuake.mRounds, length);
flags = mCamera.mShock.mFlags | mCamera.mQuake.mFlags;
@@ -149,13 +178,24 @@ int dVibration_c::Run() {
dCam_getBody()->StartShake(length, (u8*)&pattern, flags, cXyz(mCamera.mShock.mPos + mCamera.mQuake.mPos).norm());
}
mCamera.mQuake.mFrame = 0;
mCamera.mShock.mFrame = 0;
mCamera.mShock.mFrame = mCamera.mQuake.mFrame = 0;
#if DEBUG
if (mVibTest.m_displayDbg & 0x8000) {
OS_REPORT("vibration: %06d: start camera(%d) %x %d\n", mFrame, rumble, pattern, length);
}
#endif
break;
default:
if (dComIfGp_getCamera(0) != NULL && dComIfGp_getCamera(0)->field_0x22f == 0x47) {
dCam_getBody()->StopShake();
}
#if DEBUG
if (mVibTest.m_displayDbg & 0x8000) {
OS_REPORT("vibration: %06d: stop camera\n", mFrame);
}
#endif
break;
}
}
@@ -171,6 +211,7 @@ int dVibration_c::Run() {
}
if (mMotor.mShock.mFrame == 0 || mMotor.mQuake.mFrame == 0) {
s32 sp14 = 0;
u32 rumble = 0;
if (mMotor.mShock.mVibMode == VIBMODE_S_NONE || (mMotor.mShock.field_0x0 & 1)) {
mMotor.mShock.mFrame = RESET_FRAME;
@@ -199,39 +240,64 @@ int dVibration_c::Run() {
pattern = mMotor.mShock.mPattern;
pattern |= randombit(mMotor.mShock.mRounds, length);
mMotor.mShock.mStopFrame = length;
mDoCPd_c::startMotorWave(PAD_1, makedata(data, pattern, length), JUTGamePad::CRumble::VAL_0, 60);
mDoCPd_c::startMotorWave(PAD_1, (u8*)makedata(data, pattern, length), JUTGamePad::CRumble::VAL_0, 60);
#if DEBUG
if (mVibTest.m_displayDbg & 0x8000) {
OS_REPORT("vibration: %06d: start motor (%d) %x %d\n", mFrame, rumble, pattern, length);
}
#endif
break;
case RUMBLE_QUAKE:
length = mMotor.mQuake.mLength;
pattern = rollshift(mMotor.mQuake.mPattern, length, mFrame);
pattern |= randombit(mMotor.mQuake.mRounds, length);
mMotor.mQuake.mStopFrame = INT_MAX;
mDoCPd_c::startMotorWave(PAD_1, makedata(data, pattern, length), JUTGamePad::CRumble::VAL_1, 60);
OS_REPORT("d_vibration mDoCPd_c::startMotorWave\n");
mDoCPd_c::startMotorWave(PAD_1, (u8*)makedata(data, pattern, length), JUTGamePad::CRumble::VAL_1, 60);
#if DEBUG
if (mVibTest.m_displayDbg & 0x8000) {
OS_REPORT("vibration: %06d: start motor (%d) %x %d\n", mFrame, rumble, pattern, length);
}
#endif
break;
case RUMBLE_SHOCK | RUMBLE_QUAKE:
pattern = mMotor.mShock.mPattern << mMotor.mShock.mFrame;
length = mMotor.mShock.mLength - mMotor.mShock.mFrame;
pattern |= rollshift(makebits(mMotor.mQuake.mPattern, mMotor.mQuake.mLength, length), length, mFrame);
sp14 = makebits(mMotor.mQuake.mPattern, mMotor.mQuake.mLength, length);
pattern |= rollshift(sp14, length, mFrame);
pattern |= randombit(mMotor.mShock.mRounds > mMotor.mQuake.mRounds ? mMotor.mShock.mRounds : mMotor.mQuake.mRounds, length);
mMotor.mQuake.mStopFrame = length;
mMotor.mShock.mStopFrame = length;
mMotor.mQuake.mFrame = 0;
mMotor.mShock.mFrame = 0;
mDoCPd_c::startMotorWave(PAD_1, makedata(data, pattern, length), JUTGamePad::CRumble::VAL_0, 60);
mMotor.mShock.mFrame = mMotor.mQuake.mFrame = 0;
mDoCPd_c::startMotorWave(PAD_1, (u8*)makedata(data, pattern, length), JUTGamePad::CRumble::VAL_0, 60);
#if DEBUG
if (mVibTest.m_displayDbg & 0x8000) {
OS_REPORT("vibration: %06d: start motor (%d) %x %d\n", mFrame, rumble, pattern, length);
}
#endif
break;
default:
mDoCPd_c::stopMotorWave(PAD_1);
mDoCPd_c::stopMotor(PAD_1);
mMotor.mQuake.mStopFrame = RESET_FRAME;
mMotor.mShock.mStopFrame = RESET_FRAME;
mMotor.mShock.mStopFrame = mMotor.mQuake.mStopFrame = RESET_FRAME;
#if DEBUG
if (mVibTest.m_displayDbg & 0x8000) {
OS_REPORT("vibration: %06d: stop motor\n", mFrame);
}
#endif
break;
}
}
mCamera.mQuake.field_0x0 = 0;
mCamera.mShock.field_0x0 = 0;
mMotor.mQuake.field_0x0 = 0;
mMotor.mShock.field_0x0 = 0;
mCamera.mShock.field_0x0 = mCamera.mQuake.field_0x0 = 0;
mMotor.mShock.field_0x0 = mMotor.mQuake.field_0x0 = 0;
if (mCamera.mShock.mFrame >= 0) {
mCamera.mShock.mFrame++;
@@ -259,9 +325,22 @@ int dVibration_c::Run() {
if (mMotor.mQuake.mFrame >= 930) {
mMotor.mQuake.mFrame = 0;
#if DEBUG
if (mVibTest.m_displayDbg & 0x8000) {
OS_REPORT("vibration: %06d: stop motor @ limit restart\n", mFrame);
}
#endif
} else if (mMotor.mQuake.mFrame >= 900) {
mDoCPd_c::stopMotorWave(PAD_1);
mDoCPd_c::stopMotor(PAD_1);
#if DEBUG
if ((mVibTest.m_displayDbg & 0x8000) && mMotor.mQuake.mFrame == 900) {
OS_REPORT("vibration: %06d: stop motor @ limit\n", mFrame);
}
#endif
mMotor.mQuake.mFrame++;
} else if (mMotor.mQuake.mFrame >= 0) {
mMotor.mQuake.mFrame++;
@@ -297,6 +376,12 @@ bool dVibration_c::StartShock(int i_vibmode, int i_flags, cXyz i_pos) {
ret = true;
}
#if DEBUG
if ((mVibTest.m_displayDbg & 0x8000) && ret) {
OS_REPORT("vibration: %06d: start shock %d %d\n", mFrame, i_vibmode, i_flags);
}
#endif
return ret;
}
@@ -322,6 +407,12 @@ bool dVibration_c::StartQuake(int i_vibmode, int i_flags, cXyz i_pos) {
ret = true;
}
#if DEBUG
if ((mVibTest.m_displayDbg & 0x8000) && ret) {
OS_REPORT("vibration: %06d: start quake %d %d\n", mFrame, i_vibmode, i_flags);
}
#endif
return ret;
}
@@ -354,6 +445,12 @@ bool dVibration_c::StartQuake(const u8* i_pattern, int i_rounds, int i_flags, cX
ret = true;
}
#if DEBUG
if ((mVibTest.m_displayDbg & 0x8000) && ret) {
OS_REPORT("vibration: %06d: start quake %x %d %d\n", mFrame, bits, i_rounds, i_flags);
}
#endif
return ret;
}
@@ -374,9 +471,114 @@ int dVibration_c::StopQuake(int i_flags) {
ret = TRUE;
}
#if DEBUG
if ((mVibTest.m_displayDbg & 0x8000) && ret) {
OS_REPORT("vibration: %06d: stop quake %d\n", mFrame, i_flags);
}
#endif
return ret;
}
#if DEBUG
int dVibration_c::testShake() {
int var_r29, var_r28;
int ret = FALSE;
s32 cam_bits, cam_len, cam_rounds;
s32 motor_bits, motor_len, motor_rounds;
switch (mVibTest.field_0x10) {
case 10:
if (mVibTest.m_vibswitch >= 1 && mVibTest.m_vibswitch < 100) {
var_r29 = mVibTest.m_vibswitch;
cam_bits = CS_patt[var_r29].bits;
cam_len = CS_patt[var_r29].length;
cam_rounds = CS_patt[var_r29].rounds;
motor_bits = MS_patt[var_r29].bits;
motor_len = MS_patt[var_r29].length;
motor_rounds = MS_patt[var_r29].rounds;
OS_REPORT("vibration: TEST C b %x l %d r %d\n", cam_bits, cam_len, cam_rounds);
OS_REPORT("(SHOCK) m %2d M b %x l %d r %d\n", motor_bits, motor_len, motor_rounds);
} else {
motor_bits = cam_bits = (mVibTest.m_pattern << 0x10) | mVibTest.m_pattern2;
motor_len = cam_len = mVibTest.m_length;
motor_rounds = cam_rounds = mVibTest.m_randombit;
}
if (mVibTest.field_0xa & 0x7E) {
mCamera.mShock.mVibMode = 0;
mCamera.mShock.mFrame = 0;
mCamera.mShock.mFlags = mVibTest.field_0xa;
mCamera.mShock.mPos = cXyz(0.0f, 1.0f, 0.0f);
mCamera.mShock.mPattern = cam_bits;
mCamera.mShock.mLength = cam_len;
mCamera.mShock.mRounds = cam_rounds;
}
if (mVibTest.field_0xa & 1) {
mMotor.mShock.mVibMode = 0;
mMotor.mShock.mFrame = 0;
mMotor.mShock.mPattern = motor_bits;
mMotor.mShock.mLength = motor_len;
mMotor.mShock.mRounds = motor_rounds;
}
mVibTest.field_0x10 = 0;
ret = TRUE;
break;
case 20:
if (mVibTest.m_vibswitch >= 100 && mVibTest.m_vibswitch < 200) {
var_r28 = mVibTest.m_vibswitch - 100;
cam_bits = CQ_patt[var_r28].bits;
cam_len = CQ_patt[var_r28].length;
cam_rounds = CQ_patt[var_r28].rounds;
motor_bits = MQ_patt[var_r28].bits;
motor_len = MQ_patt[var_r28].length;
motor_rounds = MQ_patt[var_r28].rounds;
OS_REPORT("vibration: TEST C b %x l %d r %d\n", cam_bits, cam_len, cam_rounds);
OS_REPORT("(QUAKE) m %2d M b %x l %d r %d\n", motor_bits, motor_len, motor_rounds);
} else {
motor_bits = cam_bits = (mVibTest.m_pattern << 0x10) | mVibTest.m_pattern2;
motor_len = cam_len = mVibTest.m_length;
motor_rounds = cam_rounds = mVibTest.m_randombit;
}
if (mVibTest.field_0xa & 0x7E) {
mCamera.mQuake.mVibMode = 0;
mCamera.mQuake.mFrame = 0;
mCamera.mQuake.mFlags = mVibTest.field_0xa;
mCamera.mQuake.mPos = cXyz(0.0f, 1.0f, 0.0f);
mCamera.mQuake.mPattern = cam_bits;
mCamera.mQuake.mLength = cam_len;
mCamera.mQuake.mRounds = cam_rounds;
}
if (mVibTest.field_0xa & 1) {
mMotor.mQuake.mVibMode = 0;
mMotor.mQuake.mFrame = 0;
mMotor.mQuake.mPattern = motor_bits;
mMotor.mQuake.mLength = motor_len;
mMotor.mQuake.mRounds = motor_rounds;
}
mVibTest.field_0x10 = 0;
ret = TRUE;
break;
case 21:
OS_REPORT("vibration: TEST STOP\n");
StopQuake(0x1F);
mVibTest.field_0x10 = 0;
break;
}
return ret;
}
#endif
void dVibration_c::Kill() {
mDoCPd_c::stopMotorWaveHard(PAD_1);
mDoCPd_c::stopMotorHard(PAD_1);
@@ -388,30 +590,18 @@ bool dVibration_c::CheckQuake() {
}
void dVibration_c::setDefault() {
mMotor.mShock.mVibMode = VIBMODE_S_NONE;
mCamera.mShock.mVibMode = VIBMODE_S_NONE;
mMotor.mQuake.mVibMode = VIBMODE_Q_NONE;
mCamera.mQuake.mVibMode = VIBMODE_Q_NONE;
mMotor.mShock.field_0x0 = 0;
mCamera.mShock.field_0x0 = 0;
mMotor.mQuake.field_0x0 = 0;
mCamera.mQuake.field_0x0 = 0;
mMotor.mShock.mPattern = 0;
mCamera.mShock.mPattern = 0;
mMotor.mQuake.mPattern = 0;
mCamera.mQuake.mPattern = 0;
mMotor.mShock.mLength = 0;
mCamera.mShock.mLength = 0;
mMotor.mQuake.mLength = 0;
mCamera.mQuake.mLength = 0;
mMotor.mShock.mRounds = 0;
mCamera.mShock.mRounds = 0;
mMotor.mQuake.mRounds = 0;
mCamera.mQuake.mRounds = 0;
mMotor.mShock.mFrame = RESET_FRAME;
mCamera.mShock.mFrame = RESET_FRAME;
mMotor.mQuake.mFrame = RESET_FRAME;
mCamera.mQuake.mFrame = RESET_FRAME;
mCamera.mShock.mVibMode = mMotor.mShock.mVibMode = VIBMODE_S_NONE;
mCamera.mQuake.mVibMode = mMotor.mQuake.mVibMode = VIBMODE_Q_NONE;
mCamera.mShock.field_0x0 = mMotor.mShock.field_0x0 = 0;
mCamera.mQuake.field_0x0 = mMotor.mQuake.field_0x0 = 0;
mCamera.mShock.mPattern = mMotor.mShock.mPattern = 0;
mCamera.mQuake.mPattern = mMotor.mQuake.mPattern = 0;
mCamera.mShock.mLength = mMotor.mShock.mLength = 0;
mCamera.mQuake.mLength = mMotor.mQuake.mLength = 0;
mCamera.mShock.mRounds = mMotor.mShock.mRounds = 0;
mCamera.mQuake.mRounds = mMotor.mQuake.mRounds = 0;
mCamera.mShock.mFrame = mMotor.mShock.mFrame = RESET_FRAME;
mCamera.mQuake.mFrame = mMotor.mQuake.mFrame = RESET_FRAME;
mMotor.mShock.mStopFrame = RESET_FRAME;
mMotor.mQuake.mStopFrame = RESET_FRAME;
mMode = MODE_WAIT;
@@ -421,6 +611,10 @@ void dVibration_c::setDefault() {
void dVibration_c::Init() {
Kill();
setDefault();
#if DEBUG
mVibTest.Init();
#endif
}
void dVibration_c::Pause() {
@@ -430,10 +624,8 @@ void dVibration_c::Pause() {
mDoCPd_c::stopMotorHard(PAD_1);
}
mMotor.mShock.mVibMode = VIBMODE_S_NONE;
mCamera.mShock.mVibMode = VIBMODE_S_NONE;
mMotor.mShock.mFrame = RESET_FRAME;
mCamera.mShock.mFrame = RESET_FRAME;
mCamera.mShock.mVibMode = mMotor.mShock.mVibMode = VIBMODE_S_NONE;
mCamera.mShock.mFrame = mMotor.mShock.mFrame = RESET_FRAME;
if (mCamera.mQuake.mVibMode != VIBMODE_Q_NONE) {
mCamera.mQuake.mFrame = 0;
@@ -449,3 +641,133 @@ void dVibration_c::Pause() {
void dVibration_c::Remove() {
Kill();
}
#if DEBUG
void dVibTest_c::setDefault() {
m_pattern = m_pattern2 = 0;
field_0xa = 0;
field_0x10 = 0;
m_randombit = 0;
m_vibswitch = 0;
m_displayDbg = 0;
m_length = 32;
}
dVibTest_c::dVibTest_c() {
setDefault();
id = mDoHIO_CREATE_CHILD("振動処理", this);
}
dVibTest_c::~dVibTest_c() {
mDoHIO_DELETE_CHILD(id);
}
void dVibTest_c::Init() {
setDefault();
}
void dVibTest_c::genMessage(JORMContext* mctx) {
int i;
mctx->genLabel("- パターン", 0, 0);
mctx->genCheckBox(" ", &m_pattern, 0x8000, 0, NULL, 10, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x4000, 0, NULL, 0x1e, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x2000, 0, NULL, 0x32, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x1000, 0, NULL, 0x46, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x800, 0, NULL, 0x5a, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x400, 0, NULL, 0x6e, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x200, 0, NULL, 0x82, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x100, 0, NULL, 0x96, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x80, 0, NULL, 0xaa, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x40, 0, NULL, 0xbe, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x20, 0, NULL, 0xd2, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 0x10, 0, NULL, 0xe6, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 8, 0, NULL, 0xfa, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 4, 0, NULL, 0x10e, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 2, 0, NULL, 0x122, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern, 1, 0, NULL, 0x136, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x8000, 0, NULL, 0x14a, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x4000, 0, NULL, 0x15e, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x2000, 0, NULL, 0x172, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x1000, 0, NULL, 0x186, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x800, 0, NULL, 0x19a, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x400, 0, NULL, 0x1ae, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x200, 0, NULL, 0x1c2, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x100, 0, NULL, 0x1d6, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x80, 0, NULL, 0x1ea, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x40, 0, NULL, 0x1fe, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x20, 0, NULL, 0x212, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 0x10, 0, NULL, 0x226, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 8, 0, NULL, 0x23a, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 4, 0, NULL, 0x24e, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 2, 0, NULL, 0x262, 0x14, 0x14, 0x14);
mctx->genCheckBox(" ", &m_pattern2, 1, 0, NULL, 0x276, 0x14, 0x14, 0x14);
mctx->genLabel("-", 0, 0);
mctx->startComboBox("振動切替", &m_vibswitch, 0x130);
for (i = 0; i < 11; i++) {
mctx->genComboBoxItem(shock_names[i], i);
}
for (i = 0; i < 10; i++) {
mctx->genComboBoxItem(quake_names[i], i + 100);
}
mctx->endComboBox();
mctx->genLabel("- VIBMODE_S_* は衝撃型用、VIBMODE_Q_* は地震型用です", 0);
mctx->genLabel("-", 0);
mctx->genLabel("- タイプ", 0);
mctx->genCheckBox("振動パック", &field_0xa, 1, 0);
mctx->genCheckBox("座標揺れ", &field_0xa, 2, 0);
mctx->genCheckBox("座標揺れ(強)", &field_0xa, 0x40, 0);
mctx->genCheckBox("画角揺れ", &field_0xa, 4, 0);
mctx->genCheckBox("Z揺れ", &field_0xa, 8, 0);
mctx->genCheckBox("ブラー", &field_0xa, 0x10, 0);
mctx->genLabel("-", 0);
mctx->genSlider("長さ", &m_length, 0, 0x20);
mctx->genSlider("ランダムビット", &m_randombit, 0, 0x20);
mctx->genLabel("-", 0);
mctx->genButton("衝撃型揺れ開始", 0x12d, 0);
mctx->genButton("地震型揺れ開始", 0x12e, 0);
mctx->genButton("地震型揺れ停止", 0x12f, 0);
mctx->genLabel("-", 0, 0);
mctx->genCheckBox(" デバッグ表示", &m_displayDbg, 0x8000);
mctx->genLabel("-", 0, 0);
mctx->genLabel("-", 0, 0);
mctx->genButton("揺れ実験(強)", 0x131, 0);
mctx->genButton("揺れ実験(中)", 0x132, 0);
mctx->genButton("揺れ実験(弱)", 0x133, 0);
mctx->genLabel("-", 0, 0);
mctx->genLabel("-", 0, 0);
}
void dVibTest_c::listenPropertyEvent(const JORPropertyEvent* event) {
JORReflexible::listenPropertyEvent(event);
switch ((int)event->id) {
case 0x12D:
field_0x10 = 10;
break;
case 0x12E:
field_0x10 = 20;
break;
case 0x12F:
field_0x10 = 21;
break;
case 0x131:
dComIfGp_getVibration().StartShock(XREG_S(1) + 8, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
break;
case 0x132:
dComIfGp_getVibration().StartShock(XREG_S(2) + 4, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
break;
case 0x133:
dComIfGp_getVibration().StartShock(XREG_S(3) + 2, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
break;
}
}
#endif