mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-28 06:57:02 -04:00
d_vibration / JUTGamePad matched + linked (#2256)
* d_vibration done * JUTGamePad done * cleanup JUTGamePad * d_menu_window cleanup
This commit is contained in:
+307
-380
@@ -1,503 +1,427 @@
|
||||
//
|
||||
// Generated By: dol2asm
|
||||
// Translation Unit: d/d_vibration
|
||||
//
|
||||
|
||||
#include "d/d_vibration.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "m_Do/m_Do_controller_pad.h"
|
||||
#include "SSystem/SComponent/c_math.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
#define RESET_FRAME -99
|
||||
|
||||
extern "C" static void func_8006F168__FPUsUll();
|
||||
extern "C" static void func_8006F184__FUlll();
|
||||
extern "C" static u32 func_8006F1A4__FUlll();
|
||||
extern "C" static void func_8006F1D8__Fll();
|
||||
extern "C" void Run__12dVibration_cFv();
|
||||
extern "C" void StartShock__12dVibration_cFii4cXyz();
|
||||
extern "C" void StartQuake__12dVibration_cFii4cXyz();
|
||||
extern "C" void StartQuake__12dVibration_cFPCUcii4cXyz();
|
||||
extern "C" void StopQuake__12dVibration_cFi();
|
||||
extern "C" void Kill__12dVibration_cFv();
|
||||
extern "C" void CheckQuake__12dVibration_cFv();
|
||||
extern "C" void setDefault__12dVibration_cFv();
|
||||
extern "C" void Init__12dVibration_cFv();
|
||||
extern "C" void Pause__12dVibration_cFv();
|
||||
extern "C" void Remove__12dVibration_cFv();
|
||||
extern "C" extern u8 on_final_boss_stg[8];
|
||||
#define RUMBLE_SHOCK 1
|
||||
#define RUMBLE_QUAKE 2
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void checkVibration__19dSv_player_config_cCFv();
|
||||
extern "C" void StartShake__9dCamera_cFlPUcl4cXyz();
|
||||
extern "C" void StopShake__9dCamera_cFv();
|
||||
extern "C" void dCam_getBody__Fv();
|
||||
extern "C" void dKy_darkworld_check__Fv();
|
||||
extern "C" void __pl__4cXyzCFRC3Vec();
|
||||
extern "C" void norm__4cXyzCFv();
|
||||
extern "C" void cM_rnd__Fv();
|
||||
extern "C" void stopMotor__Q210JUTGamePad7CRumbleFib();
|
||||
extern "C" void startPatternedRumble__Q210JUTGamePad7CRumbleFPvQ310JUTGamePad7CRumble7ERumbleUl();
|
||||
extern "C" void stopPatternedRumble__Q210JUTGamePad7CRumbleFs();
|
||||
extern "C" void stopPatternedRumbleAtThePeriod__Q210JUTGamePad7CRumbleFv();
|
||||
extern "C" void __cvt_fp2unsigned();
|
||||
extern "C" void _savegpr_26();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_26();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" u8 const MS_patt__12dVibration_c[88];
|
||||
extern "C" u8 const CS_patt__12dVibration_c[88];
|
||||
extern "C" u8 const MQ_patt__12dVibration_c[80];
|
||||
extern "C" u8 const CQ_patt__12dVibration_c[80];
|
||||
extern "C" u8 m_gamePad__8mDoCPd_c[16];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
#define FLAG_CAMERA_VIB 0x7E
|
||||
#define FLAG_MOTOR_VIB 0x1
|
||||
|
||||
namespace {
|
||||
/* 8006F168-8006F184 069AA8 001C+00 1/1 0/0 0/0 .text makedata__25@unnamed@d_vibration_cpp@FPUsUll
|
||||
*/
|
||||
static u16* func_8006F168(u16* param_0, u32 param_1, s32 param_2) {
|
||||
param_0[0] = param_2;
|
||||
param_0[1] = param_1 >> 16;
|
||||
param_0[2] = param_1;
|
||||
param_0[3] = 0;
|
||||
return param_0;
|
||||
u16* makedata(u16* data, u32 pattern, s32 length) {
|
||||
data[0] = length;
|
||||
data[1] = pattern >> 16;
|
||||
data[2] = pattern;
|
||||
data[3] = 0;
|
||||
return data;
|
||||
}
|
||||
|
||||
/* 8006F184-8006F1A4 069AC4 0020+00 1/1 0/0 0/0 .text rollshift__25@unnamed@d_vibration_cpp@FUlll
|
||||
*/
|
||||
static s32 func_8006F184(u32 param_0, s32 param_1, s32 param_2) {
|
||||
s32 temp = param_2 / param_1;
|
||||
temp = temp * param_1;
|
||||
temp = param_2 - temp;
|
||||
param_2 = param_0 >> temp;
|
||||
temp = param_1 - temp;
|
||||
temp = param_0 << temp;
|
||||
return param_2 | temp;
|
||||
s32 rollshift(u32 pattern, s32 length, s32 index) {
|
||||
index %= length;
|
||||
return (pattern >> index) | (pattern << (length - index));
|
||||
}
|
||||
|
||||
/* 8006F1A4-8006F1D8 069AE4 0034+00 2/2 0/0 0/0 .text makebits__25@unnamed@d_vibration_cpp@FUlll
|
||||
*/
|
||||
static u32 func_8006F1A4(u32 param_0, s32 param_1, s32 param_2) {
|
||||
s32 uVar1 = -1;
|
||||
u32 temp = param_0 & (uVar1 << (32 - param_1));
|
||||
param_0 = temp;
|
||||
uVar1 = param_1;
|
||||
while (uVar1 < param_2) {
|
||||
param_0 = temp | (param_0 >> param_1);
|
||||
uVar1 += param_1;
|
||||
}
|
||||
return param_0;
|
||||
}
|
||||
u32 makebits(u32 bits, s32 length, s32 numbits) {
|
||||
s32 i;
|
||||
u32 mask = bits & (-1 << (32 - length));
|
||||
bits = mask;
|
||||
|
||||
/* ############################################################################################## */
|
||||
for (i = length; i < numbits; i += length) {
|
||||
bits = mask | (bits >> length);
|
||||
}
|
||||
|
||||
return bits;
|
||||
}
|
||||
|
||||
/* 8006F1D8-8006F268 069B18 0090+00 1/1 0/0 0/0 .text randombit__25@unnamed@d_vibration_cpp@Fll */
|
||||
static u32 func_8006F1D8(s32 param_0, s32 param_1) {
|
||||
u32 uVar3 = 0;
|
||||
u32 randombit(s32 rounds, s32 length) {
|
||||
u32 value = 0;
|
||||
|
||||
for (s32 iVar2 = 0; iVar2 < param_0; iVar2++) {
|
||||
u32 dVar4 = param_1 * cM_rnd();
|
||||
uVar3 |= 0x40000000 >> dVar4;
|
||||
for (int i = 0; i < rounds; i++) {
|
||||
value |= 0x40000000 >> (u32)(length * cM_rnd());
|
||||
}
|
||||
return uVar3;
|
||||
return value;
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80450F50-80450F58 000450 0008+00 1/1 0/0 0/0 .sbss data$3831 */
|
||||
static u16 data[4];
|
||||
};
|
||||
|
||||
/* 8006F268-8006FA24 069BA8 07BC+00 0/0 2/2 0/0 .text Run__12dVibration_cFv */
|
||||
// Stack issues
|
||||
#ifdef NONMATCHING
|
||||
int dVibration_c::Run() {
|
||||
mMode = MODE_RUN;
|
||||
|
||||
field_0x8c = 1;
|
||||
if (dComIfGs_checkOptVibration() != 1) {
|
||||
if (field_0x54 != -1) {
|
||||
field_0x54 = -1;
|
||||
field_0x50 |= 1;
|
||||
if (mMotor.mShock.mVibMode != VIBMODE_S_NONE) {
|
||||
mMotor.mShock.mVibMode = VIBMODE_S_NONE;
|
||||
mMotor.mShock.field_0x0 |= 1;
|
||||
}
|
||||
if (field_0x70 != -1) {
|
||||
field_0x70 = -1;
|
||||
field_0x6c |= 1;
|
||||
|
||||
if (mMotor.mQuake.mVibMode != VIBMODE_Q_NONE) {
|
||||
mMotor.mQuake.mVibMode = VIBMODE_Q_NONE;
|
||||
mMotor.mQuake.field_0x0 |= 1;
|
||||
}
|
||||
field_0x80 = -99;
|
||||
field_0x64 = 0xffffff9d;
|
||||
|
||||
mMotor.mQuake.mFrame = RESET_FRAME;
|
||||
mMotor.mShock.mFrame = RESET_FRAME;
|
||||
}
|
||||
|
||||
if (((field_0x0.mShock.field_0x0 & 1) != 0) && (field_0x0.mShock.field_0x24 != -99)) {
|
||||
field_0x0.mShock.field_0x24 = 0;
|
||||
field_0x0.mShock.field_0x4 = -1;
|
||||
}
|
||||
if (((field_0x0.mQuake.field_0x0 & 1) != 0) && (field_0x0.mQuake.field_0x24 != -99)) {
|
||||
field_0x0.mQuake.field_0x24 = 0;
|
||||
field_0x0.mQuake.field_0x4 = -1;
|
||||
if ((mCamera.mShock.field_0x0 & 1) && mCamera.mShock.mFrame != RESET_FRAME) {
|
||||
mCamera.mShock.mFrame = 0;
|
||||
mCamera.mShock.mVibMode = VIBMODE_S_NONE;
|
||||
}
|
||||
|
||||
if (field_0x0.mShock.field_0x24 == 0 || field_0x0.mQuake.field_0x24 == 0) {
|
||||
s32 local_68 = 0;
|
||||
if (field_0x0.mShock.field_0x4 == -1 || (field_0x0.mShock.field_0x0 & 1) != 0) {
|
||||
field_0x0.mShock.field_0x24 = -99;
|
||||
field_0x0.mShock.field_0x8 = 0;
|
||||
field_0x0.mShock.field_0xc = 0;
|
||||
field_0x0.mShock.field_0x10 = 0;
|
||||
} else if (field_0x0.mShock.field_0x24 >= 0) {
|
||||
local_68 |= 1;
|
||||
if ((mCamera.mQuake.field_0x0 & 1) && mCamera.mQuake.mFrame != RESET_FRAME) {
|
||||
mCamera.mQuake.mFrame = 0;
|
||||
mCamera.mQuake.mVibMode = VIBMODE_Q_NONE;
|
||||
}
|
||||
|
||||
if (mCamera.mShock.mFrame == 0 || mCamera.mQuake.mFrame == 0) {
|
||||
u32 rumble = 0;
|
||||
if (mCamera.mShock.mVibMode == VIBMODE_S_NONE || (mCamera.mShock.field_0x0 & 1)) {
|
||||
mCamera.mShock.mFrame = RESET_FRAME;
|
||||
mCamera.mShock.mPattern = 0;
|
||||
mCamera.mShock.mLength = 0;
|
||||
mCamera.mShock.mRounds = 0;
|
||||
} else if (mCamera.mShock.mFrame >= 0) {
|
||||
rumble |= RUMBLE_SHOCK;
|
||||
}
|
||||
|
||||
if (field_0x0.mQuake.field_0x4 == -1 || (field_0x0.mQuake.field_0x0 & 1) != 0) {
|
||||
field_0x0.mQuake.field_0x24 = -99;
|
||||
field_0x0.mQuake.field_0x8 = 0;
|
||||
field_0x0.mQuake.field_0xc = 0;
|
||||
field_0x0.mQuake.field_0x10 = 0;
|
||||
} else if (field_0x0.mQuake.field_0x24 >= 0) {
|
||||
local_68 |= 2;
|
||||
if (mCamera.mQuake.mVibMode == VIBMODE_Q_NONE || (mCamera.mQuake.field_0x0 & 1)) {
|
||||
mCamera.mQuake.mFrame = RESET_FRAME;
|
||||
mCamera.mQuake.mPattern = 0;
|
||||
mCamera.mQuake.mLength = 0;
|
||||
mCamera.mQuake.mRounds = 0;
|
||||
} else if (mCamera.mQuake.mFrame >= 0) {
|
||||
rumble |= RUMBLE_QUAKE;
|
||||
}
|
||||
|
||||
switch (local_68) {
|
||||
case 1:
|
||||
s32 x = field_0x0.mShock.field_0xc;
|
||||
u32 local_60 = field_0x0.mShock.field_0x8;
|
||||
local_60 |= func_8006F1D8(field_0x0.mShock.field_0x10, x);
|
||||
s32 uVar3 = field_0x0.mShock.field_0x14;
|
||||
s32 length, pattern, bits, flags;
|
||||
switch (rumble) {
|
||||
case RUMBLE_SHOCK:
|
||||
length = mCamera.mShock.mLength;
|
||||
pattern = mCamera.mShock.mPattern;
|
||||
pattern |= randombit(mCamera.mShock.mRounds, length);
|
||||
|
||||
flags = mCamera.mShock.mFlags;
|
||||
if (dKy_darkworld_check()) {
|
||||
uVar3 &= ~0x30;
|
||||
flags &= ~0x30;
|
||||
}
|
||||
camera_class* pCamera = dComIfGp_getCamera(0);
|
||||
if (pCamera && pCamera->field_0x22f == 0x47) {
|
||||
dCam_getBody()->StartShake(x, (u8*)&local_60, uVar3, field_0x0.mShock.field_0x18.norm());
|
||||
|
||||
if (dComIfGp_getCamera(0) != NULL && dComIfGp_getCamera(0)->field_0x22f == 0x47) {
|
||||
dCam_getBody()->StartShake(length, (u8*)&pattern, flags, mCamera.mShock.mPos.norm());
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
x = field_0x0.mQuake.field_0xc;
|
||||
local_60 = func_8006F184(field_0x0.mQuake.field_0x8, x, field_0x88);
|
||||
local_60 |= func_8006F1D8(field_0x0.mQuake.field_0x10, x);
|
||||
uVar3 = field_0x0.mQuake.field_0x14;
|
||||
case RUMBLE_QUAKE:
|
||||
length = mCamera.mQuake.mLength;
|
||||
pattern = rollshift(mCamera.mQuake.mPattern, length, mFrame);
|
||||
pattern |= randombit(mCamera.mQuake.mRounds, length);
|
||||
|
||||
flags = mCamera.mQuake.mFlags;
|
||||
if (dKy_darkworld_check()) {
|
||||
uVar3 &= ~0x30;
|
||||
flags &= ~0x30;
|
||||
}
|
||||
pCamera = dComIfGp_getCamera(0);
|
||||
if (pCamera && pCamera->field_0x22f == 0x47) {
|
||||
dCam_getBody()->StartShake(x, (u8*)&local_60, uVar3, field_0x0.mQuake.field_0x18.norm());
|
||||
|
||||
if (dComIfGp_getCamera(0) != NULL && dComIfGp_getCamera(0)->field_0x22f == 0x47) {
|
||||
dCam_getBody()->StartShake(length, (u8*)&pattern, flags, mCamera.mQuake.mPos.norm());
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
local_60 = field_0x0.mShock.field_0x8 << field_0x0.mShock.field_0x24;
|
||||
x = field_0x0.mShock.field_0xc - field_0x0.mShock.field_0x24;
|
||||
local_60 |= func_8006F184(func_8006F1A4(field_0x0.mQuake.field_0x8, field_0x0.mQuake.field_0xc, x), x, field_0x88);
|
||||
local_60 |= func_8006F1D8(
|
||||
field_0x0.mShock.field_0x10 > field_0x0.mQuake.field_0x10 ? field_0x0.mShock.field_0x10 : field_0x0.mQuake.field_0x10,
|
||||
x
|
||||
);
|
||||
uVar3 = field_0x0.mShock.field_0x14 | field_0x0.mQuake.field_0x14;
|
||||
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);
|
||||
pattern |= randombit(mCamera.mShock.mRounds > mCamera.mQuake.mRounds ? mCamera.mShock.mRounds : mCamera.mQuake.mRounds, length);
|
||||
|
||||
flags = mCamera.mShock.mFlags | mCamera.mQuake.mFlags;
|
||||
if (dKy_darkworld_check()) {
|
||||
uVar3 &= ~0x30;
|
||||
flags &= ~0x30;
|
||||
}
|
||||
pCamera = dComIfGp_getCamera(0);
|
||||
if (pCamera && pCamera->field_0x22f == 0x47) {
|
||||
cXyz tempSum = field_0x0.mShock.field_0x18 + field_0x0.mQuake.field_0x18;
|
||||
dCam_getBody()->StartShake(x, (u8*)&local_60, uVar3, tempSum.norm());
|
||||
|
||||
if (dComIfGp_getCamera(0) != NULL && dComIfGp_getCamera(0)->field_0x22f == 0x47) {
|
||||
dCam_getBody()->StartShake(length, (u8*)&pattern, flags, cXyz(mCamera.mShock.mPos + mCamera.mQuake.mPos).norm());
|
||||
}
|
||||
field_0x0.mQuake.field_0x24 = 0;
|
||||
field_0x0.mShock.field_0x24 = 0;
|
||||
|
||||
mCamera.mQuake.mFrame = 0;
|
||||
mCamera.mShock.mFrame = 0;
|
||||
break;
|
||||
default:
|
||||
pCamera = dComIfGp_getCamera(0);
|
||||
if (pCamera && pCamera->field_0x22f == 0x47) {
|
||||
if (dComIfGp_getCamera(0) != NULL && dComIfGp_getCamera(0)->field_0x22f == 0x47) {
|
||||
dCam_getBody()->StopShake();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (((field_0x50 & 1) != 0) && (field_0x64 != -99)) {
|
||||
field_0x64 = 0;
|
||||
field_0x54 = -1;
|
||||
if ((mMotor.mShock.field_0x0 & 1) && mMotor.mShock.mFrame != RESET_FRAME) {
|
||||
mMotor.mShock.mFrame = 0;
|
||||
mMotor.mShock.mVibMode = VIBMODE_S_NONE;
|
||||
}
|
||||
|
||||
if (((field_0x6c & 1) != 0) && (field_0x80 != -99)) {
|
||||
field_0x80 = 0;
|
||||
field_0x70 = -1;
|
||||
if ((mMotor.mQuake.field_0x0 & 1) && mMotor.mQuake.mFrame != RESET_FRAME) {
|
||||
mMotor.mQuake.mFrame = 0;
|
||||
mMotor.mQuake.mVibMode = VIBMODE_Q_NONE;
|
||||
}
|
||||
|
||||
if (field_0x64 == 0 || field_0x80 == 0) {
|
||||
s32 local_68 = 0;
|
||||
if (field_0x54 == -1 || (field_0x50 & 1) != 0) {
|
||||
field_0x64 = -99;
|
||||
field_0x58 = 0;
|
||||
field_0x5c = 0;
|
||||
field_0x60 = 0;
|
||||
} else if (field_0x64 >= 0) {
|
||||
local_68 |= 1;
|
||||
if (mMotor.mShock.mFrame == 0 || mMotor.mQuake.mFrame == 0) {
|
||||
u32 rumble = 0;
|
||||
if (mMotor.mShock.mVibMode == VIBMODE_S_NONE || (mMotor.mShock.field_0x0 & 1)) {
|
||||
mMotor.mShock.mFrame = RESET_FRAME;
|
||||
mMotor.mShock.mPattern = 0;
|
||||
mMotor.mShock.mLength = 0;
|
||||
mMotor.mShock.mRounds = 0;
|
||||
} else if (mMotor.mShock.mFrame >= 0) {
|
||||
rumble |= RUMBLE_SHOCK;
|
||||
}
|
||||
|
||||
if (field_0x70 == -1 || (field_0x6c & 1) != 0) {
|
||||
field_0x80 = -99;
|
||||
field_0x74 = 0;
|
||||
field_0x78 = 0;
|
||||
field_0x7c = 0;
|
||||
} else if (field_0x80 >= 0) {
|
||||
local_68 |= 2;
|
||||
if (mMotor.mQuake.mVibMode == VIBMODE_Q_NONE || (mMotor.mQuake.field_0x0 & 1)) {
|
||||
mMotor.mQuake.mFrame = RESET_FRAME;
|
||||
mMotor.mQuake.mPattern = 0;
|
||||
mMotor.mQuake.mLength = 0;
|
||||
mMotor.mQuake.mRounds = 0;
|
||||
} else if (mMotor.mQuake.mFrame >= 0) {
|
||||
rumble |= RUMBLE_QUAKE;
|
||||
}
|
||||
switch (local_68) {
|
||||
case 1:
|
||||
u32 local_60;
|
||||
s32 x = field_0x5c;
|
||||
local_60 = field_0x58;
|
||||
local_60 |= func_8006F1D8(field_0x60, x);
|
||||
field_0x68 = x;
|
||||
mDoCPd_c::startMotorWave(0, func_8006F168(data, local_60, x), JUTGamePad::CRumble::VAL_0, 0x3c);
|
||||
|
||||
static u16 data[4];
|
||||
s32 pattern, length, bits;
|
||||
|
||||
switch (rumble) {
|
||||
case RUMBLE_SHOCK:
|
||||
length = mMotor.mShock.mLength;
|
||||
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);
|
||||
break;
|
||||
case 2:
|
||||
x = field_0x78;
|
||||
local_60 = func_8006F184(field_0x74, x, field_0x88);
|
||||
local_60 |= func_8006F1D8(field_0x7c, x);
|
||||
field_0x84 = 0x7fffffff;
|
||||
mDoCPd_c::startMotorWave(0, func_8006F168(data, local_60, x), JUTGamePad::CRumble::VAL_1, 0x3c);
|
||||
case RUMBLE_QUAKE:
|
||||
length = mMotor.mQuake.mLength;
|
||||
pattern = rollshift(mMotor.mQuake.mPattern, length, mFrame);
|
||||
pattern |= randombit(mMotor.mQuake.mRounds, length);
|
||||
mMotor.mQuake.mStopFrame = INT32_MAX;
|
||||
mDoCPd_c::startMotorWave(PAD_1, makedata(data, pattern, length), JUTGamePad::CRumble::VAL_1, 60);
|
||||
break;
|
||||
case 3:
|
||||
local_60 = field_0x58 << field_0x64;
|
||||
x = field_0x5c - field_0x64;
|
||||
local_60 |= func_8006F184(func_8006F1A4(field_0x74, field_0x78, x), x, field_0x88);
|
||||
local_60 |= func_8006F1D8(
|
||||
field_0x60 > field_0x7c ? field_0x60 : field_0x7c,
|
||||
x
|
||||
);
|
||||
field_0x84 = x;
|
||||
field_0x68 = x;
|
||||
field_0x80 = 0;
|
||||
field_0x64 = 0;
|
||||
mDoCPd_c::startMotorWave(0, func_8006F168(data, local_60, x), JUTGamePad::CRumble::VAL_0, 0x3c);
|
||||
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);
|
||||
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);
|
||||
break;
|
||||
default:
|
||||
mDoCPd_c::stopMotorWave(0);
|
||||
mDoCPd_c::stopMotor(0);
|
||||
field_0x84 = -99;
|
||||
field_0x68 = -99;
|
||||
mDoCPd_c::stopMotorWave(PAD_1);
|
||||
mDoCPd_c::stopMotor(PAD_1);
|
||||
mMotor.mQuake.mStopFrame = RESET_FRAME;
|
||||
mMotor.mShock.mStopFrame = RESET_FRAME;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
field_0x0.mQuake.field_0x0 = 0;
|
||||
field_0x0.mShock.field_0x0 = 0;
|
||||
field_0x6c = 0;
|
||||
field_0x50 = 0;
|
||||
mCamera.mQuake.field_0x0 = 0;
|
||||
mCamera.mShock.field_0x0 = 0;
|
||||
mMotor.mQuake.field_0x0 = 0;
|
||||
mMotor.mShock.field_0x0 = 0;
|
||||
|
||||
if (field_0x0.mShock.field_0x24 >= 0) {
|
||||
field_0x0.mShock.field_0x24++;
|
||||
if (mCamera.mShock.mFrame >= 0) {
|
||||
mCamera.mShock.mFrame++;
|
||||
|
||||
if (field_0x0.mShock.field_0x24 > field_0x0.mShock.field_0xc) {
|
||||
field_0x0.mShock.field_0x0 |= 1;
|
||||
if (mCamera.mShock.mFrame > mCamera.mShock.mLength) {
|
||||
mCamera.mShock.field_0x0 |= 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (field_0x64 >= 0) {
|
||||
field_0x64++;
|
||||
if (mMotor.mShock.mFrame >= 0) {
|
||||
mMotor.mShock.mFrame++;
|
||||
|
||||
if (field_0x64 > field_0x68) {
|
||||
field_0x50 |= 1;
|
||||
if (mMotor.mShock.mFrame > mMotor.mShock.mStopFrame) {
|
||||
mMotor.mShock.field_0x0 |= 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (field_0x0.mQuake.field_0x24 >= 0) {
|
||||
field_0x0.mQuake.field_0x24++;
|
||||
if (mCamera.mQuake.mFrame >= 0) {
|
||||
mCamera.mQuake.mFrame++;
|
||||
|
||||
if (field_0x0.mQuake.field_0x24 > field_0x0.mQuake.field_0xc) {
|
||||
field_0x0.mQuake.field_0x24 = 0;
|
||||
if (mCamera.mQuake.mFrame > mCamera.mQuake.mLength) {
|
||||
mCamera.mQuake.mFrame = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (field_0x80 >= 930) {
|
||||
field_0x80 = 0;
|
||||
} else if (field_0x80 >= 900) {
|
||||
mDoCPd_c::stopMotorWave(0);
|
||||
mDoCPd_c::stopMotor(0);
|
||||
field_0x80++;
|
||||
} else if (field_0x80 >= 0) {
|
||||
field_0x80++;
|
||||
if (field_0x80 > field_0x84) {
|
||||
field_0x80 = 0;
|
||||
if (mMotor.mQuake.mFrame >= 930) {
|
||||
mMotor.mQuake.mFrame = 0;
|
||||
} else if (mMotor.mQuake.mFrame >= 900) {
|
||||
mDoCPd_c::stopMotorWave(PAD_1);
|
||||
mDoCPd_c::stopMotor(PAD_1);
|
||||
mMotor.mQuake.mFrame++;
|
||||
} else if (mMotor.mQuake.mFrame >= 0) {
|
||||
mMotor.mQuake.mFrame++;
|
||||
if (mMotor.mQuake.mFrame > mMotor.mQuake.mStopFrame) {
|
||||
mMotor.mQuake.mFrame = 0;
|
||||
}
|
||||
}
|
||||
|
||||
field_0x88++;
|
||||
mFrame++;
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
int dVibration_c::Run() {
|
||||
// NONMATCHING
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 8006FA24-8006FB10 06A364 00EC+00 0/0 62/62 298/298 .text StartShock__12dVibration_cFii4cXyz */
|
||||
bool dVibration_c::StartShock(int param_0, int param_1, cXyz param_2) {
|
||||
bool dVibration_c::StartShock(int i_vibmode, int i_flags, cXyz i_pos) {
|
||||
bool ret = false;
|
||||
if (param_1 & 0x7eU) {
|
||||
field_0x0.mShock.field_0x4 = param_0;
|
||||
field_0x0.mShock.field_0x24 = 0;
|
||||
field_0x0.mShock.field_0x14 = param_1;
|
||||
field_0x0.mShock.field_0x18 = param_2;
|
||||
field_0x0.mShock.field_0x8 = CS_patt[param_0].field_0x04;
|
||||
field_0x0.mShock.field_0xc = CS_patt[param_0].field_0x02;
|
||||
field_0x0.mShock.field_0x10 = CS_patt[param_0].field_0x00;
|
||||
if (i_flags & FLAG_CAMERA_VIB) {
|
||||
mCamera.mShock.mVibMode = i_vibmode;
|
||||
mCamera.mShock.mFrame = 0;
|
||||
mCamera.mShock.mFlags = i_flags;
|
||||
mCamera.mShock.mPos = i_pos;
|
||||
|
||||
mCamera.mShock.mPattern = CS_patt[i_vibmode].bits;
|
||||
mCamera.mShock.mLength = CS_patt[i_vibmode].length;
|
||||
mCamera.mShock.mRounds = CS_patt[i_vibmode].rounds;
|
||||
ret = true;
|
||||
}
|
||||
if (param_1 & 1 && dComIfGs_checkOptVibration() == 1) {
|
||||
field_0x54 = param_0;
|
||||
field_0x64 = 0;
|
||||
field_0x58 = MS_patt[param_0].field_0x04;
|
||||
field_0x5c = MS_patt[param_0].field_0x02;
|
||||
|
||||
if ((i_flags & FLAG_MOTOR_VIB) && dComIfGs_checkOptVibration() == 1) {
|
||||
mMotor.mShock.mVibMode = i_vibmode;
|
||||
mMotor.mShock.mFrame = 0;
|
||||
|
||||
mMotor.mShock.mPattern = MS_patt[i_vibmode].bits;
|
||||
mMotor.mShock.mLength = MS_patt[i_vibmode].length;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* 8006FB10-8006FC0C 06A450 00FC+00 0/0 8/8 67/67 .text StartQuake__12dVibration_cFii4cXyz */
|
||||
bool dVibration_c::StartQuake(int param_0, int param_1, cXyz param_2) {
|
||||
bool dVibration_c::StartQuake(int i_vibmode, int i_flags, cXyz i_pos) {
|
||||
bool ret = false;
|
||||
if (param_1 & 0x7eU) {
|
||||
field_0x0.mQuake.field_0x4 = param_0;
|
||||
field_0x0.mQuake.field_0x24 = 0;
|
||||
field_0x0.mQuake.field_0x14 = param_1;
|
||||
field_0x0.mQuake.field_0x18 = param_2;
|
||||
field_0x0.mQuake.field_0x8 = CQ_patt[param_0].field_0x04;
|
||||
field_0x0.mQuake.field_0xc = CQ_patt[param_0].field_0x02;
|
||||
field_0x0.mQuake.field_0x10 = CQ_patt[param_0].field_0x00;
|
||||
if (i_flags & FLAG_CAMERA_VIB) {
|
||||
mCamera.mQuake.mVibMode = i_vibmode;
|
||||
mCamera.mQuake.mFrame = 0;
|
||||
mCamera.mQuake.mFlags = i_flags;
|
||||
mCamera.mQuake.mPos = i_pos;
|
||||
mCamera.mQuake.mPattern = CQ_patt[i_vibmode].bits;
|
||||
mCamera.mQuake.mLength = CQ_patt[i_vibmode].length;
|
||||
mCamera.mQuake.mRounds = CQ_patt[i_vibmode].rounds;
|
||||
ret = true;
|
||||
}
|
||||
if (param_1 & 1 && dComIfGs_checkOptVibration() == 1) {
|
||||
field_0x70 = param_0;
|
||||
field_0x80 = 0;
|
||||
field_0x74 = MQ_patt[param_0].field_0x04;
|
||||
field_0x78 = MQ_patt[param_0].field_0x02;
|
||||
field_0x7c = CQ_patt[param_0].field_0x00;
|
||||
|
||||
if ((i_flags & FLAG_MOTOR_VIB) && dComIfGs_checkOptVibration() == 1) {
|
||||
mMotor.mQuake.mVibMode = i_vibmode;
|
||||
mMotor.mQuake.mFrame = 0;
|
||||
mMotor.mQuake.mPattern = MQ_patt[i_vibmode].bits;
|
||||
mMotor.mQuake.mLength = MQ_patt[i_vibmode].length;
|
||||
mMotor.mQuake.mRounds = CQ_patt[i_vibmode].rounds;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* 8006FC0C-8006FD94 06A54C 0188+00 0/0 2/2 2/2 .text StartQuake__12dVibration_cFPCUcii4cXyz */
|
||||
bool dVibration_c::StartQuake(u8 const* param_0, int param_1, int param_2, cXyz param_3) {
|
||||
int iVar7;
|
||||
int iVar6;
|
||||
int iVar5;
|
||||
int iVar4;
|
||||
bool bVar8 = false;
|
||||
int uVar1 = (param_0[0] << 8) | param_0[1];
|
||||
if (uVar1 >= 9) {
|
||||
iVar7 = 3;
|
||||
} else {
|
||||
iVar7 = 0;
|
||||
bool dVibration_c::StartQuake(const u8* i_pattern, int i_rounds, int i_flags, cXyz i_pos) {
|
||||
bool ret = false;
|
||||
|
||||
int length = (i_pattern[0] << 8) | i_pattern[1];
|
||||
u32 bits = i_pattern[length >= 1 ? 2 : 0] << 24 |
|
||||
i_pattern[length >= 9 ? 3 : 0] << 16 |
|
||||
i_pattern[length >= 17 ? 4 : 0] << 8 |
|
||||
i_pattern[length >= 25 ? 5 : 0] << 0;
|
||||
|
||||
if (i_flags & FLAG_CAMERA_VIB) {
|
||||
mCamera.mQuake.mVibMode = VIBMODE_Q_CUSTOM;
|
||||
mCamera.mQuake.mFrame = 0;
|
||||
mCamera.mQuake.mFlags = i_flags;
|
||||
mCamera.mQuake.mPos = i_pos;
|
||||
mCamera.mQuake.mPattern = makebits(bits, i_pattern[1], 32);
|
||||
mCamera.mQuake.mLength = 32;
|
||||
mCamera.mQuake.mRounds = i_rounds;
|
||||
ret = true;
|
||||
}
|
||||
if (uVar1 >= 1) {
|
||||
iVar6 = 2;
|
||||
} else {
|
||||
iVar6 = 0;
|
||||
|
||||
if ((i_flags & FLAG_MOTOR_VIB) && dComIfGs_checkOptVibration() == 1) {
|
||||
mMotor.mQuake.mVibMode = VIBMODE_Q_CUSTOM;
|
||||
mMotor.mQuake.mFrame = 0;
|
||||
mMotor.mQuake.mPattern = makebits(bits, i_pattern[1], 32);
|
||||
mMotor.mQuake.mLength = 32;
|
||||
mMotor.mQuake.mRounds = i_rounds;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (uVar1 >= 0x11) {
|
||||
iVar5 = 4;
|
||||
} else {
|
||||
iVar5 = 0;
|
||||
}
|
||||
if (uVar1 >= 0x19) {
|
||||
iVar4 = 5;
|
||||
} else {
|
||||
iVar4 = 0;
|
||||
}
|
||||
u32 this_00 =
|
||||
param_0[iVar6] << 24 | param_0[iVar7] << 16 | param_0[iVar5] << 8 | (param_0[iVar4]);
|
||||
if ((param_2 & 0x7e) != 0) {
|
||||
field_0x0.mQuake.field_0x4 = 0;
|
||||
field_0x0.mQuake.field_0x24 = 0;
|
||||
field_0x0.mQuake.field_0x14 = param_2;
|
||||
field_0x0.mQuake.field_0x18 = param_3;
|
||||
field_0x0.mQuake.field_0x8 = func_8006F1A4(this_00, param_0[1], 0x20);
|
||||
field_0x0.mQuake.field_0xc = 0x20;
|
||||
field_0x0.mQuake.field_0x10 = param_1;
|
||||
bVar8 = true;
|
||||
}
|
||||
if (((param_2 & 1) != 0) &&
|
||||
(dComIfGs_checkOptVibration() == 1))
|
||||
{
|
||||
field_0x70 = 0;
|
||||
field_0x80 = 0;
|
||||
field_0x74 = func_8006F1A4(this_00, param_0[1], 0x20);
|
||||
field_0x78 = 0x20;
|
||||
field_0x7c = param_1;
|
||||
bVar8 = true;
|
||||
}
|
||||
return bVar8;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* 8006FD94-8006FE00 06A6D4 006C+00 0/0 6/6 82/82 .text StopQuake__12dVibration_cFi */
|
||||
int dVibration_c::StopQuake(int param_0) {
|
||||
int ret = 0;
|
||||
if (param_0 & 0x7eU) {
|
||||
if (field_0x0.mQuake.field_0x24 >= 0) {
|
||||
field_0x0.mQuake.field_0x14 &= ~param_0;
|
||||
if (field_0x0.mQuake.field_0x14 == 0) {
|
||||
field_0x0.mQuake.field_0x0 |= 1;
|
||||
int dVibration_c::StopQuake(int i_flags) {
|
||||
int ret = FALSE;
|
||||
if (i_flags & FLAG_CAMERA_VIB) {
|
||||
if (mCamera.mQuake.mFrame >= 0) {
|
||||
mCamera.mQuake.mFlags &= ~i_flags;
|
||||
if (mCamera.mQuake.mFlags == 0) {
|
||||
mCamera.mQuake.field_0x0 |= 1;
|
||||
}
|
||||
ret = 1;
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
if (param_0 & 1 && field_0x80 >= 0) {
|
||||
field_0x6c |= 1;
|
||||
ret = 1;
|
||||
|
||||
if ((i_flags & FLAG_MOTOR_VIB) && mMotor.mQuake.mFrame >= 0) {
|
||||
mMotor.mQuake.field_0x0 |= 1;
|
||||
ret = TRUE;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* 8006FE00-8006FE5C 06A740 005C+00 2/2 0/0 0/0 .text Kill__12dVibration_cFv */
|
||||
void dVibration_c::Kill() {
|
||||
mDoCPd_c::stopMotorWaveHard(0);
|
||||
mDoCPd_c::stopMotorHard(0);
|
||||
mDoCPd_c::stopMotorWaveHard(PAD_1);
|
||||
mDoCPd_c::stopMotorHard(PAD_1);
|
||||
setDefault();
|
||||
}
|
||||
|
||||
/* 8006FE5C-8006FE84 06A79C 0028+00 0/0 0/0 10/10 .text CheckQuake__12dVibration_cFv */
|
||||
bool dVibration_c::CheckQuake() {
|
||||
return field_0x0.mQuake.field_0x4 != -1 || field_0x70 != -1;
|
||||
return mCamera.mQuake.mVibMode != VIBMODE_Q_NONE || mMotor.mQuake.mVibMode != VIBMODE_Q_NONE;
|
||||
}
|
||||
|
||||
/* 8006FE84-8006FF04 06A7C4 0080+00 2/2 0/0 0/0 .text setDefault__12dVibration_cFv */
|
||||
void dVibration_c::setDefault() {
|
||||
field_0x54 = -1;
|
||||
field_0x0.mShock.field_0x4 = -1;
|
||||
field_0x70 = -1;
|
||||
field_0x0.mQuake.field_0x4 = -1;
|
||||
field_0x50 = 0;
|
||||
field_0x0.mShock.field_0x0 = 0;
|
||||
field_0x6c = 0;
|
||||
field_0x0.mQuake.field_0x0 = 0;
|
||||
field_0x58 = 0;
|
||||
field_0x0.mShock.field_0x8 = 0;
|
||||
field_0x74 = 0;
|
||||
field_0x0.mQuake.field_0x8 = 0;
|
||||
field_0x5c = 0;
|
||||
field_0x0.mShock.field_0xc = 0;
|
||||
field_0x78 = 0;
|
||||
field_0x0.mQuake.field_0xc = 0;
|
||||
field_0x60 = 0;
|
||||
field_0x0.mShock.field_0x10 = 0;
|
||||
field_0x7c = 0;
|
||||
field_0x0.mQuake.field_0x10 = 0;
|
||||
field_0x64 = -99;
|
||||
field_0x0.mShock.field_0x24 = -99;
|
||||
field_0x80 = -99;
|
||||
field_0x0.mQuake.field_0x24 = -99;
|
||||
field_0x68 = -99;
|
||||
field_0x84 = -99;
|
||||
field_0x8c = 0;
|
||||
field_0x88 = 0;
|
||||
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;
|
||||
mMotor.mShock.mStopFrame = RESET_FRAME;
|
||||
mMotor.mQuake.mStopFrame = RESET_FRAME;
|
||||
mMode = MODE_WAIT;
|
||||
mFrame = 0;
|
||||
}
|
||||
|
||||
/* 8006FF04-8006FF38 06A844 0034+00 0/0 2/2 0/0 .text Init__12dVibration_cFv */
|
||||
@@ -508,26 +432,29 @@ void dVibration_c::Init() {
|
||||
|
||||
/* 8006FF38-8006FFF8 06A878 00C0+00 0/0 1/1 0/0 .text Pause__12dVibration_cFv */
|
||||
void dVibration_c::Pause() {
|
||||
if (field_0x8c != -1) {
|
||||
if (field_0x54 != -1 || field_0x70 != -1) {
|
||||
mDoCPd_c::stopMotorWaveHard(0);
|
||||
mDoCPd_c::stopMotorHard(0);
|
||||
if (mMode != MODE_PAUSE) {
|
||||
if (mMotor.mShock.mVibMode != VIBMODE_S_NONE || mMotor.mQuake.mVibMode != VIBMODE_Q_NONE) {
|
||||
mDoCPd_c::stopMotorWaveHard(PAD_1);
|
||||
mDoCPd_c::stopMotorHard(PAD_1);
|
||||
}
|
||||
field_0x54 = -1;
|
||||
field_0x0.mShock.field_0x4 = -1;
|
||||
field_0x64 = -99;
|
||||
field_0x0.mShock.field_0x24 = -99;
|
||||
if (field_0x0.mQuake.field_0x4 != -1) {
|
||||
field_0x0.mQuake.field_0x24 = 0;
|
||||
|
||||
mMotor.mShock.mVibMode = VIBMODE_S_NONE;
|
||||
mCamera.mShock.mVibMode = VIBMODE_S_NONE;
|
||||
mMotor.mShock.mFrame = RESET_FRAME;
|
||||
mCamera.mShock.mFrame = RESET_FRAME;
|
||||
|
||||
if (mCamera.mQuake.mVibMode != VIBMODE_Q_NONE) {
|
||||
mCamera.mQuake.mFrame = 0;
|
||||
}
|
||||
if (field_0x70 != -1) {
|
||||
field_0x80 = 0;
|
||||
if (mMotor.mQuake.mVibMode != VIBMODE_Q_NONE) {
|
||||
mMotor.mQuake.mFrame = 0;
|
||||
}
|
||||
field_0x8c = -1;
|
||||
|
||||
mMode = MODE_PAUSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8006FFF8-80070018 06A938 0020+00 0/0 1/1 0/0 .text Remove__12dVibration_cFv */
|
||||
void dVibration_c::Remove() {
|
||||
Kill();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user