d_a_player_main anim data/enum + d_a_player_tact work

This commit is contained in:
LagoLunatic
2023-12-31 18:04:58 -05:00
parent 96901725b0
commit 4d85f3c390
7 changed files with 1132 additions and 282 deletions
+16
View File
@@ -17,6 +17,22 @@ public:
static u8 m_maba_timer;
static u8 m_morf_frame;
static void onMabaFlg() { m_maba_flg = 1; }
static void offMabaFlg() { m_maba_flg = 0; }
static void decMabaTimer() {}
static void decMorfFrame() {}
static void getEyeMoveFlg() {}
static void getMabaFlg() {}
static void getMabaTimer() {}
static void getNowOffsetXP() {}
static void getNowOffsetYP() {}
static void offEyeMoveFlg() {}
static void onEyeMoveFlg() {}
static void setMabaTimer(u8 timer) { m_maba_timer = timer; }
static void setMorfFrame(u8) {}
static void setNowOffsetX(f32) {}
static void setNowOffsetY(f32) {}
public:
/* 0x6C */ cXy mEyePosOld;
/* 0x74 */ cXy mEyePos;
+244 -8
View File
@@ -224,7 +224,8 @@ struct daPy_aura_c {
class daPy_anmIndex_c {
public:
/* 0x00 */ u16 mUnderBckIdx;
/* 0x02 */ u16 mUpperBckIdx;
};
enum LINK_RES_FILE_ID { // IDs and indexes are synced
@@ -1217,8 +1218,240 @@ public:
};
enum daPy_ANM {
ANM_UNK_C4 = 0xC4,
ANM_UNK_C5 = 0xC5,
ANM_WAITS = 0x00,
ANM_WALK = 0x01,
ANM_DASH = 0x02,
ANM_DASHKAZE = 0x03,
ANM_WALKHBOOTS = 0x04,
ANM_WALKHBOOTSKAZE = 0x05,
ANM_WALKSLOPE = 0x06,
ANM_ATNLS = 0x07,
ANM_ATNRS = 0x08,
ANM_ATNWLS = 0x09,
ANM_ATNWRS = 0x0A,
ANM_ATNDLS = 0x0B,
ANM_ATNDRS = 0x0C,
ANM_JMPEDS = 0x0D,
ANM_ATNWB = 0x0E,
ANM_ATNDB = 0x0F,
ANM_ATNJL = 0x10,
ANM_ATNJR = 0x11,
ANM_ATNJLLAND = 0x12,
ANM_ATNJRLAND = 0x13,
ANM_ROT = 0x14,
ANM_CUTREL = 0x15,
ANM_DIFENCE = 0x16,
ANM_DIFENCEA = 0x17,
ANM_CUTTURNP = 0x18,
ANM_CUTTURNPWFB = 0x19,
ANM_CUTTURNPWLR = 0x1A,
ANM_TALKA = 0x1B,
ANM_WAITB = 0x1C,
ANM_WAITATOB = 0x1D,
ANM_CUTA = 0x1E,
ANM_CUTF = 0x1F,
ANM_CUTR = 0x20,
ANM_CUTL = 0x21,
ANM_CUTEA = 0x22,
ANM_CUTEB = 0x23,
ANM_EXCA1 = 0x24,
ANM_EXCB1 = 0x25,
ANM_CUTBOKO = 0x26,
ANM_CUTRER = 0x27,
ANM_CUTTURN = 0x28,
ANM_CUTTURNC = 0x29,
ANM_CUTTURNB = 0x2A,
ANM_JATTACK = 0x2B,
ANM_JATTCKP = 0x2C,
ANM_JATTCKCUT = 0x2D,
ANM_JATTCKCUTHAM = 0x2E,
ANM_JATTACKLAND = 0x2F,
ANM_LANDDAMA = 0x30,
ANM_LANDDAMAST = 0x31,
ANM_ROLLF = 0x32,
ANM_ROLLFMIS = 0x33,
ANM_SLIP = 0x34,
ANM_SLIDEF = 0x35,
ANM_SLIDEFLAND = 0x36,
ANM_SLIDEB = 0x37,
ANM_SLIDEBLAND = 0x38,
ANM_ATNGAL = 0x39,
ANM_ATNGAR = 0x3A,
ANM_ATNGAHAM = 0x3B,
ANM_JMPST = 0x3C,
ANM_ROLLB = 0x3D,
ANM_ROLLBLAND = 0x3E,
ANM_CROUCH = 0x3F,
ANM_LIE = 0x40,
ANM_LIEFORWARD = 0x41,
ANM_WALL = 0x42,
ANM_WALLDW = 0x43,
ANM_WALLWL = 0x44,
ANM_WALLWR = 0x45,
ANM_WALLWLDW = 0x46,
ANM_WALLWRDW = 0x47,
ANM_WALLPL = 0x48,
ANM_WALLPR = 0x49,
ANM_WALLPLDW = 0x4A,
ANM_WALLPRDW = 0x4B,
ANM_VJMP = 0x4C,
ANM_VJMPCHA = 0x4D,
ANM_VJMPCHB = 0x4E,
ANM_VJMPCL = 0x4F,
ANM_HANGING = 0x50,
ANM_HANGUP = 0x51,
ANM_HANGMOVEL = 0x52,
ANM_HANGMOVER = 0x53,
ANM_DAM = 0x54,
ANM_DAML = 0x55,
ANM_DAMR = 0x56,
ANM_DAMF = 0x57,
ANM_DAMB = 0x58,
ANM_DAMFL = 0x59,
ANM_DAMFR = 0x5A,
ANM_DAMFF = 0x5B,
ANM_DAMFB = 0x5C,
ANM_DAMFLUP = 0x5D,
ANM_DAMFRUP = 0x5E,
ANM_DAMFFUP = 0x5F,
ANM_DAMFBUP = 0x60,
ANM_LAVADAM = 0x61,
ANM_DIELONG = 0x62,
ANM_SHIPDIE = 0x63,
ANM_SWIMDIE = 0x64,
ANM_GRABP = 0x65,
ANM_GRABUP = 0x66,
ANM_GRABNG = 0x67,
ANM_GRABWAIT = 0x68,
ANM_GRABWAITB = 0x69,
ANM_GRABTHROW = 0x6A,
ANM_GRABRE = 0x6B,
ANM_MJMP = 0x6C,
ANM_MJMPC = 0x6D,
ANM_MROLLL = 0x6E,
ANM_MROLLR = 0x6F,
ANM_MROLLLC = 0x70,
ANM_MROLLRC = 0x71,
ANM_MSTEPOVER = 0x72,
ANM_MSTEPOVERA = 0x73,
ANM_MSTEPOVERLAND = 0x74,
ANM_ROPECATCH = 0x75,
ANM_ROPESWINGF = 0x76,
ANM_ROPESWINGB = 0x77,
ANM_ROPEWAIT = 0x78,
ANM_ROPECLIMB = 0x79,
ANM_ROPEDOWN = 0x7A,
ANM_ROPETHROWCATCH = 0x7B,
ANM_BOOMCATCH = 0x7C,
ANM_VOYAGE1 = 0x7D,
ANM_WAITPUSHPULL = 0x7E,
ANM_WALKPUSH = 0x7F,
ANM_WALKPULL = 0x80,
ANM_SWIMP = 0x81,
ANM_SWIMWAIT = 0x82,
ANM_SWIMING = 0x83,
ANM_LADDERUPST = 0x84,
ANM_LADDERUPEDR = 0x85,
ANM_LADDERUPEDL = 0x86,
ANM_LADDERDWST = 0x87,
ANM_LADDERDWEDR = 0x88,
ANM_LADDERDWEDL = 0x89,
ANM_LADDERRTOL = 0x8A,
ANM_LADDERLTOR = 0x8B,
ANM_FCLIMBSLIDELUP = 0x8C,
ANM_FCLIMBSLIDERUP = 0x8D,
ANM_BOXOPENLINK = 0x8E,
ANM_BOXOPENSHORTLINK = 0x8F,
ANM_ITEMGET = 0x90,
ANM_HOLDUP = 0x91,
ANM_WALLHOLDUP = 0x92,
ANM_WALLHOLDUPDW = 0x93,
ANM_COMEOUT = 0x94,
ANM_WALKBARREL = 0x95,
ANM_SALTATION = 0x96,
ANM_WHO = 0x97,
ANM_PICKUP = 0x98,
ANM_WAITPICKUP = 0x99,
ANM_SURPRISED = 0x9A,
ANM_TURNBACK = 0x9B,
ANM_LOOKUP = 0x9C,
ANM_WAITQ = 0x9D,
ANM_GLAD = 0x9E,
ANM_SHIP_JUMP1 = 0x9F,
ANM_SHIP_JUMP2 = 0xA0,
ANM_USEFANA = 0xA1,
ANM_USEFANB = 0xA2,
ANM_USEFANB2 = 0xA3,
ANM_MOGAKU1 = 0xA4,
ANM_FM_BATA = 0xA5,
ANM_HOOKSHOTJMP = 0xA6,
ANM_VOMITJMP = 0xA7,
ANM_WAITTAKT = 0xA8,
ANM_SLIPICE = 0xA9,
ANM_HAMSWINGA = 0xAA,
ANM_HAMSWINGBPRE = 0xAB,
ANM_HAMSWINGBHIT = 0xAC,
ANM_HAMSWINGBEND = 0xAD,
ANM_SETBOOTS = 0xAE,
ANM_DOOROPENALINK = 0xAF,
ANM_DOOROPENBLINK = 0xB0,
ANM_SEYYES = 0xB1,
ANM_PRESENTATIONA = 0xB2,
ANM_WINDL = 0xB3,
ANM_WINDR = 0xB4,
ANM_PRESENTATIONB = 0xB5,
ANM_BINDRINKPRE = 0xB6,
ANM_BINDRINKING = 0xB7,
ANM_BINDRINKAFTER = 0xB8,
ANM_BINOPENPRE = 0xB9,
ANM_BINOPENA = 0xBA,
ANM_BINOPENB = 0xBB,
ANM_BINSWINGS = 0xBC,
ANM_BINSWINGU = 0xBD,
ANM_BINGET = 0xBE,
ANM_SURPRISEDB = 0xBF,
ANM_RISE = 0xC0,
ANM_USETCEIVER = 0xC1,
ANM_YOBU = 0xC2,
ANM_NENRIKI = 0xC3,
ANM_ESAMAKI = 0xC4,
ANM_SETHYOINOMI = 0xC5,
ANM_GETLETTER = 0xC6,
ANM_WAITLETTER = 0xC7,
ANM_LINK_FREEZ = 0xC8,
ANM_LINK_MOGAKI = 0xC9,
ANM_TAKTDGE = 0xCA,
ANM_DAMBIRI = 0xCB,
ANM_SALVLR = 0xCC,
ANM_SALVRWAIT = 0xCD,
ANM_SALVLWAIT = 0xCE,
ANM_SALVRBAD = 0xCF,
ANM_SALVLBAD = 0xD0,
ANM_SALVRGOOD = 0xD1,
ANM_SALVLGOOD = 0xD2,
ANM_MSTEPOVER_JMPED = 0xD3,
ANM_BOXOPENSLINK = 0xD4,
ANM_SEARESET = 0xD5,
ANM_WARPIN = 0xD6,
ANM_WARPOUT = 0xD7,
ANM_SURPRISEDWAIT = 0xD8,
ANM_PRESENTATIONAWAIT = 0xD9,
ANM_POWUPWAIT = 0xDA,
ANM_POWUP = 0xDB,
ANM_KOSHIKAKE = 0xDC,
ANM_COMBO_LINK = 0xDD,
ANM_CUTKESA = 0xDE,
ANM_WARPOUTFIRST = 0xDF,
ANM_WAITAUCTION = 0xE0,
ANM_FREEA = 0xE1,
ANM_FREEB = 0xE2,
ANM_FREED = 0xE3,
ANM_TAKTKAZE = 0xE4,
ANM_TAKTSIPPU = 0xE5,
ANM_TAKTCHUYA = 0xE6,
ANM_TAKTFUJIN = 0xE7,
ANM_TAKTAYATSURI = 0xE8,
ANM_TAKTCHISIN = 0xE9,
};
enum daPy_UNDER {
@@ -1260,7 +1493,7 @@ public:
JKRHeap* setItemHeap();
void setBlurPosResource(u16);
J3DAnmTransform* getItemAnimeResource(u16);
void getAnimeResource(daPy_anmHeap_c*, u16, u32);
J3DAnmTransform* getAnimeResource(daPy_anmHeap_c*, u16, u32);
void getUnderUpperAnime(daPy_anmIndex_c const*, J3DAnmTransform**, J3DAnmTransform**, int, u32);
void setTextureAnimeResource(J3DAnmTexPattern*, int);
void loadTextureAnimeResource(u32, int);
@@ -1530,7 +1763,7 @@ public:
void animeUpdate();
void simpleAnmPlay(J3DAnmBase*);
void setHandModel(daPy_lk_c::daPy_ANM);
daPy_anmIndex_c* getAnmData(daPy_lk_c::daPy_ANM) const;
const daPy_anmIndex_c* getAnmData(daPy_lk_c::daPy_ANM) const;
BOOL checkGrabWeapon(int);
void endDemoMode();
void setAuraEffect();
@@ -2470,7 +2703,7 @@ public:
/* 0x359C */ u8 m359C[0x35A0 - 0x359C];
/* 0x35A0 */ f32 m35A0;
/* 0x35A4 */ f32 m35A4;
/* 0x35A8 */ u8 m35A8[0x35AC - 0x35A8];
/* 0x35A8 */ f32 m35A8;
/* 0x35AC */ f32 m35AC;
/* 0x35B0 */ f32 m35B0;
/* 0x35B4 */ u8 m35B4[0x35BC - 0x35B4];
@@ -2557,9 +2790,12 @@ public:
}; // Size: 0x04
static const TexAnmTableEntry mTexAnmIndexTable[];
static const daPy_anmIndex_c mSwordAnmIndexTable[];
static const daPy_anmIndex_c mBokoAnmIndexTable[];
static const daPy_anmIndex_c mHammerAnmIndexTable[];
struct AnmDataTableEntry {
/* 0x00 */ u16 mUpperBckIdx;
/* 0x02 */ u16 mUnderBckIdx;
/* 0x00 */ daPy_anmIndex_c mAnmIdx;
/* 0x04 */ u8 mLeftHandIdx;
/* 0x05 */ u8 mRightHandIdx;
/* 0x06 */ u16 mTexAnmIdx;
+4 -2
View File
@@ -84,7 +84,7 @@ public:
void setStartModeWarp() {}
void setSteerMove() {}
void setTactWarp() {}
void setTactWarpID(unsigned long) {}
void setTactWarpID(u32 warpID) { m042C = warpID; }
void setTactWarpPosNum(int) {}
void bodyJointCallBack(int);
@@ -236,7 +236,9 @@ public:
/* 0x0414 */ daGrid_c* mpGrid;
/* 0x0418 */ int m0418;
/* 0x041C */ fopAc_ac_c* m041C;
/* 0x0420 */ u8 m0420[0x0434 - 0x0420];
/* 0x0420 */ u8 m0420[0x042C - 0x0420];
/* 0x042C */ u32 m042C;
/* 0x0430 */ u8 m0430[0x0434 - 0x0430];
/* 0x0434 */ cXyz* m0434;
/* 0x0438 */ cXyz m0438;
/* 0x0444 */ cXyz m0444;
+29
View File
@@ -90,6 +90,10 @@ inline void mDoAud_load2ndDynamicWave() {
mDoAud_zelAudio_c::getInterface()->load2ndDynamicWave();
}
inline void mDoAud_taktModeMute() {
mDoAud_zelAudio_c::getInterface()->taktModeMute();
}
inline void mDoAud_taktModeMuteOff() {
mDoAud_zelAudio_c::getInterface()->taktModeMuteOff();
}
@@ -173,10 +177,35 @@ inline void mDoAud_tact_getBeat() {
return mDoAud_zelAudio_c::getTact().getBeat();
}
inline void mDoAud_tact_setBeat(s32 beat) {
mDoAud_zelAudio_c::getTact().setBeat(beat);
}
inline void mDoAud_tact_getBeatFrames() {
return mDoAud_zelAudio_c::getTact().getBeatFrames();
}
inline void mDoAud_tact_setVolume(f32 volume) {
mDoAud_zelAudio_c::getTact().setVolume(volume);
}
inline void mDoAud_tact_play() {
mDoAud_zelAudio_c::getTact().play();
}
inline void mDoAud_tact_ambientPlay() {
mDoAud_zelAudio_c::getTact().ambientPlay();
}
inline void mDoAud_tact_armSoundPlay(s32) {}
inline void mDoAud_tact_judge(s32, s32) {}
inline void mDoAud_tact_melodyPlay(s32) {}
inline void mDoAud_tact_melodyStop() {}
inline void mDoAud_tact_metronomePlay(s32, s32) {}
inline void mDoAud_tact_playArmSwing(s32, s32) {}
inline void mDoAud_tact_setStickPos(s32, s32) {}
inline void mDoAud_tact_stopArmSwing() {}
inline BOOL mDoAud_checkCbPracticePlay() {
return mDoAud_zelAudio_c::getInterface()->checkCbPracticePlay();
}
+2 -2
View File
@@ -98,7 +98,7 @@ BOOL daPy_lk_c::procFoodThrow_init() {
daPy_matAnm_c::m_maba_flg = 0;
daPy_matAnm_c::m_maba_timer = 1;
setSingleMoveAnime(ANM_UNK_C4, daPy_HIO_food_c0::m.field_0x4, daPy_HIO_food_c0::m.field_0x8, daPy_HIO_food_c0::m.field_0x0, daPy_HIO_food_c0::m.field_0xC);
setSingleMoveAnime(ANM_ESAMAKI, daPy_HIO_food_c0::m.field_0x4, daPy_HIO_food_c0::m.field_0x8, daPy_HIO_food_c0::m.field_0x0, daPy_HIO_food_c0::m.field_0xC);
keepItemData();
if (mDemo.getDemoType() == 5) {
@@ -181,7 +181,7 @@ BOOL daPy_lk_c::procFoodSet_init() {
current.angle.y = shape_angle.y;
mVelocity = 0.0f;
setSingleMoveAnime(ANM_UNK_C5, daPy_HIO_food_c0::m.field_0x10, daPy_HIO_food_c0::m.field_0x14, daPy_HIO_food_c0::m.field_0x2, daPy_HIO_food_c0::m.field_0x18);
setSingleMoveAnime(ANM_SETHYOINOMI, daPy_HIO_food_c0::m.field_0x10, daPy_HIO_food_c0::m.field_0x14, daPy_HIO_food_c0::m.field_0x2, daPy_HIO_food_c0::m.field_0x18);
keepItemData();
setHyoiModel();
File diff suppressed because it is too large Load Diff
+167 -4
View File
@@ -11,6 +11,7 @@
*/
#include "d/actor/d_a_player_main.h"
#include "f_op/f_op_camera.h"
#include "JSystem/J3DGraphLoader/J3DAnmLoader.h"
extern const Vec l_tact_top;
@@ -176,8 +177,123 @@ void daPy_lk_c::resetTactCount() {
}
/* 8014DBEC-8014E100 .text procTactWait_init__9daPy_lk_cFi */
BOOL daPy_lk_c::procTactWait_init(int) {
/* Nonmatching */
BOOL daPy_lk_c::procTactWait_init(int r30) {
if (mCurProc == PROC_TACT_WAIT_e) {
if (m3570 != r30) {
m34D8 = 0;
m34DA = 0;
m34D2 = -1;
}
m3570 = r30;
if (m3570 != -4) {
g_dComIfG_gameInfo.play.field_0x4947 = 1;
} else {
g_dComIfG_gameInfo.play.field_0x4947 = 0;
}
return TRUE;
} else if (r30 == -1) {
if (!dComIfGp_event_compulsory(this, NULL, -1)) {
return FALSE;
}
mDemo.setDemoType(5);
}
int r31 = checkShipRideUseItem(1);
if (r31 == 0) {
if (r30 == -1) {
f32 f31 = 200.0f * cM_ssin(shape_angle.y);
f32 f30 = 200.0f * cM_scos(shape_angle.y);
cXyz startPos(
mAttentionInfo.mPosition.x,
mAttentionInfo.mPosition.y - 50.0f,
mAttentionInfo.mPosition.z
);
cXyz endPos(
startPos.x + f31,
startPos.y,
startPos.z + f30
);
mLinkLinChk.Set(&startPos, &endPos, this);
if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
endPos.x = startPos.x - f31;
endPos.z = startPos.z - f30;
mLinkLinChk.Set(&startPos, &endPos, this);
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
shape_angle.y += 0x8000;
} else {
endPos.x = startPos.x + f30;
endPos.z = startPos.z - f31;
mLinkLinChk.Set(&startPos, &endPos, this);
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
shape_angle.y += 0x4000;
} else {
endPos.x = startPos.x - f30;
endPos.z = startPos.z + f31;
mLinkLinChk.Set(&startPos, &endPos, this);
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
shape_angle.y -= 0x4000;
}
}
}
current.angle.y = shape_angle.y;
}
} else if (r30 == -4 || r30 == -5) {
if (fopAcM_getTalkEventPartner(this)) {
shape_angle.y = fopAcM_searchActorAngleY(this, fopAcM_getTalkEventPartner(this));
}
}
}
commonProcInit(PROC_TACT_WAIT_e);
daPy_matAnm_c::offMabaFlg();
daPy_matAnm_c::setMabaTimer(1);
setSingleMoveAnime(ANM_WAITTAKT, daPy_HIO_tact_c0::m.field_0x0, 0.0f, -1, daPy_HIO_tact_c0::m.field_0x4);
setActAnimeUpper(0x127, UPPER_UNK1, daPy_HIO_tact_c0::m.field_0x0, 0.0f, -1, -1.0f);
mAnmRatioUpper[1].setRatio(0.0f);
setActAnimeUpper(0x127, UPPER_UNK2, daPy_HIO_tact_c0::m.field_0x0, 0.0f, -1, -1.0f);
mAnmRatioUpper[2].setRatio(0.0f);
mVelocity = 0.0f;
m34D4 = 0;
m34D6 = 0;
dComIfGp_setPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e);
if (r30 == -1) {
dCam_getBody()->StartEventCamera(0xC, fopAcM_GetID(this), 0);
mDoAud_seStart(JA_SE_TAKT_USE_BEGIN);
}
mDoAud_tact_reset();
mDoAud_tact_setBeat(0);
mDoAud_tact_setVolume(0.0f);
mDoAud_tact_ambientPlay();
setTactModel();
initShipRideUseItem(r31, 2);
m34D2 = -1;
m32E4.makeEmitter(0x50, mpHeldItemModel->getBaseTRMtx(), &current.pos, NULL);
m3570 = r30;
m34D8 = 0;
m3574 = -1;
m35A0 = 0.0f;
m34DA = 0;
m3624 = 0;
m35A4 = 0.0f;
m35A8 = 0.0f;
if (m3570 == 6 || m3570 == 7) {
m35AC = 600.0f;
} else {
m35AC = 900.0f;
}
m34D0 = -1;
setTactZev(-1, -1, NULL);
if (m3570 != -4) {
g_dComIfG_gameInfo.play.field_0x4947 = 1;
}
mDoAud_taktModeMute();
return TRUE;
}
/* 8014E100-8014E9A4 .text procTactWait__9daPy_lk_cFv */
@@ -186,8 +302,55 @@ BOOL daPy_lk_c::procTactWait() {
}
/* 8014E9A4-8014EBA0 .text procTactPlay_init__9daPy_lk_cFlii */
BOOL daPy_lk_c::procTactPlay_init(s32, int, int) {
/* Nonmatching */
BOOL daPy_lk_c::procTactPlay_init(s32 r27, int r30, int r31) {
int r28 = checkShipRideUseItem(0);
commonProcInit(PROC_TACT_PLAY_e);
dComIfGp_setPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e);
m3570 = r27;
if (r31 == 0) {
m3628 = fopMsgM_messageSet(0x5AD + r27);
} else {
m3628 = -1;
}
mDoAud_tact_setVolume(0.0f);
resetActAnimeUpper(UPPER_UNK2, -1.0f);
resetActAnimeUpper(UPPER_UNK1, -1.0f);
m34DA = 0xA;
daPy_ANM anm;
if (r27 == 0) {
anm = ANM_TAKTKAZE;
} else if (r27 == 1) {
anm = ANM_TAKTSIPPU;
} else if (r27 == 5) {
anm = ANM_TAKTCHUYA;
} else if (r27 == 4) {
anm = ANM_TAKTFUJIN;
} else if (r27 == 2) {
anm = ANM_TAKTAYATSURI;
} else {
anm = ANM_TAKTCHISIN;
}
setSingleMoveAnime(anm, 1.0f, 0.0f, -1, 3.0f);
initShipRideUseItem(r28, 2);
if (r28 != 0 && m3570 == 1) {
stage_stag_info_class* stag_info = dComIfGp_getStageStagInfo();
if (dStage_stagInfo_GetSTType(stag_info) == 7 && m34CC != 1 && r30 != 0) {
daShip_c* ship = dComIfGp_getShipActor();
u32 warpID = fopAcM_create(PROC_TORNADO, 1, &current.pos, current.roomNo);
ship->setTactWarpID(warpID);
}
}
m32E4.makeEmitter(0x51, mpHeldItemModel->getBaseTRMtx(), &current.pos, NULL);
m34D0 = 0;
m3574 = r30;
m3624 = 0;
m34D8 = r31;
return TRUE;
}
/* 8014EBA0-8014EFD4 .text procTactPlay__9daPy_lk_cFv */