d_attention work

This commit is contained in:
Jasper St. Pierre
2023-09-23 03:40:46 -07:00
parent 96b3728ba5
commit d330552361
10 changed files with 384 additions and 102 deletions
+36 -22
View File
@@ -5,6 +5,19 @@
#include "m_Do/m_Do_ext.h"
class fopAc_ac_c;
class mDoExt_McaMorf;
class J3DAnmColor;
class J3DMatColorAnm;
class dAttDraw_c {
public:
void setAnm(int, int, int);
void draw(cXyz&, Mtx);
/* 0x0 */ mDoExt_McaMorf * mpMorf;
/* 0x4 */ J3DAnmColor * mpAnmClr;
/* 0x8 */ J3DMatColorAnm * mpAnmMatClr;
};
class dAttHint_c {
public:
@@ -66,10 +79,11 @@ public:
class dAttLook_c {
public:
/* 80073CA4 */ fopAc_ac_c* convPId(unsigned int);
/* 80073CD4 */ void init();
/* 80073CEC */ void proc();
/* 80073D08 */ void request(fopAc_ac_c*, f32, f32, f32, s16, int);
fopAc_ac_c* convPId(unsigned int);
void init();
void proc();
void request(fopAc_ac_c*, f32, f32, f32, s16, int);
void requestF(fopAc_ac_c*, s16, int);
private:
u32 field_0x0;
@@ -105,24 +119,24 @@ public:
dAttention_c(fopAc_ac_c*, u32);
~dAttention_c();
void GetActionList(s32);
void GetLockonList(s32);
void getActionBtnB();
void getActionBtnXYZ_local(int);
void getActionBtnX();
void getActionBtnY();
void getActionBtnZ();
dAttList_c* GetActionList(s32);
dAttList_c* GetLockonList(s32);
dAttList_c* getActionBtnB();
dAttList_c* getActionBtnXYZ_local(int);
dAttList_c* getActionBtnX();
dAttList_c* getActionBtnY();
dAttList_c* getActionBtnZ();
void chkAttMask(u32, u32);
void calcWeight(int, fopAc_ac_c*, f32, s16, s16, u32*);
void setLList(fopAc_ac_c*, f32, f32, u32);
void setAList(fopAc_ac_c*, f32, f32, u32);
void initList(u32);
void makeList();
s32 makeList();
void SelectAttention(fopAc_ac_c*);
void sortList();
void stockAttention(u32);
void nextAttention(u32);
void freeAttention();
s32 freeAttention();
void chaseAttention();
void EnemyDistance(fopAc_ac_c*);
void runSoundProc();
@@ -136,12 +150,11 @@ public:
void judgementStatusHd(u32);
void Run(u32);
void Draw();
void LockonTarget(s32);
fopAc_ac_c* LockonTarget(s32);
void LockonReleaseDistanse();
void LockonTargetPId(s32);
void ActionTarget(s32);
void LockonTruth();
void Lockon();
unsigned int LockonTargetPId(s32);
fopAc_ac_c* ActionTarget(s32);
bool LockonTruth();
void Init(fopAc_ac_c* i_owner, u32 i_playerNo) {
mpPlayer = (daPy_lk_c*)i_owner;
@@ -158,7 +171,7 @@ public:
public:
/* 0x000 */ daPy_lk_c* mpPlayer;
/* 0x004 */ int mLockOnTargetBsPcID;
/* 0x008 */ dAttDraw_CallBack_c field_0x8;
/* 0x008 */ dAttDraw_CallBack_c mpCallBack;
/* 0x00C */ int mPlayerNo;
/* 0x010 */ u32 mFlagMask;
/* 0x014 */ u8 field_0x014[0x018 - 0x014];
@@ -171,7 +184,9 @@ public:
/* 0x020 */ u32 mFlags;
/* 0x024 */ JKRHeap* mpHeap;
/* 0x028 */ u8 field_0x028;
/* 0x029 */ u8 field_0x029[0x054 - 0x029];
/* 0x02C */ cXyz field_0x02c;
/* 0x038 */ dAttDraw_c mDraw[2];
/* 0x050 */ u32 field_0x050;
/* 0x054 */ dAttList_c mLockOnList[8];
/* 0x0D4 */ int mLockOnNum;
/* 0x0D8 */ int mLockOnOffs;
@@ -180,8 +195,7 @@ public:
/* 0x120 */ int mActionOffs;
/* 0x124 */ dAttHint_c mHint;
/* 0x130 */ dAttCatch_c mCatch;
/* 0x148 */ dAttLook_c field_0x148;
/* 0x158 */ dAttLook_c field_0x158;
/* 0x148 */ dAttLook_c mLook[2];
/* 0x168 */ int mEnemyBsPcId;
/* 0x16C */ f32 mEnemyDistance;
/* 0x170 */ dAttParam_c mAttParam;
+10
View File
@@ -723,6 +723,8 @@ inline u8 dComIfGs_getMaxMagic() {
return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getMaxMagic();
}
u8 dComIfGs_checkGetItemNum(u8 i_itemNo);
/**
* === PLAY ===
*/
@@ -1315,6 +1317,14 @@ inline void dComIfGd_entryZSortXluList(J3DPacket* i_packet, cXyz& param_1) {
g_dComIfG_gameInfo.drawlist.entryZSortXluList(i_packet, param_1);
}
inline view_class* dComIfGd_getView() {
return (view_class*)g_dComIfG_gameInfo.drawlist.mpCamera;
}
inline MtxP dComIfGd_getViewRotMtx() {
return dComIfGd_getView()->mViewMtxNoTrans;
}
/**
* === RESOURCE ===
*/
+1 -1
View File
@@ -35,7 +35,7 @@ struct WIND_INFLUENCE {
/* 0x18 */ f32 mRadius;
/* 0x1C */ f32 mStrength;
/* 0x20 */ f32 field_0x20;
/* 0x24 */ f32 field_0x24;
/* 0x24 */ s32 mRegistIdx;
/* 0x28 */ u8 mbConstant;
};
+2 -2
View File
@@ -149,7 +149,7 @@ void daAgb_c::NameConv() {
int daAgb_c::uploadInitCheck() {
s32 roomNo = dComIfGp_roomControl_getStayNo();
dStage_FileList_dt_c* fili_p =
dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo();
dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo();
if ((dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) != 7 &&
!dMap_c::isEnableDispMap()) ||
@@ -656,7 +656,7 @@ void daAgb_c::GbaItemUse() {
if (temp_r0 == 0 || temp_r0 == 1 || temp_r0 == 2 || temp_r29 == 0x11 || temp_r29 == 0x12) {
s32 roomNo = dComIfGp_roomControl_getStayNo();
dStage_FileList_dt_c* fili_p =
dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo();
dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo();
if (fili_p != NULL && fili_p->mParam & 4) {
if (field_0x67c != 0) {
-3
View File
@@ -3,6 +3,3 @@
// Translation Unit: d_att_dist.cpp
//
#include "d_att_dist.h"
#include "dolphin/types.h"
+205 -57
View File
@@ -3,8 +3,9 @@
// Translation Unit: d_attention.cpp
//
#include "d_attention.h"
#include "dolphin/types.h"
#include "d/d_attention.h"
#include "f_op/f_op_actor_mng.h"
#include "d/d_com_inf_game.h"
/* 8009D220-8009D268 .text __ct__11dAttParam_cFl */
dAttParam_c::dAttParam_c(long) {
@@ -32,38 +33,53 @@ dAttention_c::~dAttention_c() {
}
/* 8009D6EC-8009D728 .text GetActionList__12dAttention_cFl */
void dAttention_c::GetActionList(long) {
/* Nonmatching */
dAttList_c* dAttention_c::GetActionList(long idx) {
if (mActionNum != 0)
return &mActionList[(mActionOffs + idx) % mActionNum];
else
return NULL;
}
/* 8009D728-8009D764 .text GetLockonList__12dAttention_cFl */
void dAttention_c::GetLockonList(long) {
/* Nonmatching */
dAttList_c* dAttention_c::GetLockonList(long idx) {
if (mLockOnNum != 0)
return &mLockOnList[(mLockOnOffs + idx) % mLockOnNum];
else
return NULL;
}
/* 8009D764-8009D858 .text getActionBtnB__12dAttention_cFv */
void dAttention_c::getActionBtnB() {
dAttList_c* dAttention_c::getActionBtnB() {
/* Nonmatching */
}
/* 8009D858-8009D9A8 .text getActionBtnXYZ_local__12dAttention_cFi */
void dAttention_c::getActionBtnXYZ_local(int) {
dAttList_c* dAttention_c::getActionBtnXYZ_local(int) {
/* Nonmatching */
}
/* 8009D9A8-8009D9FC .text getActionBtnX__12dAttention_cFv */
void dAttention_c::getActionBtnX() {
/* Nonmatching */
dAttList_c* dAttention_c::getActionBtnX() {
if (!dComIfGs_checkGetItemNum(g_dComIfG_gameInfo.play.mEquippedItems[0]))
return NULL;
return getActionBtnXYZ_local(0);
}
/* 8009D9FC-8009DA50 .text getActionBtnY__12dAttention_cFv */
void dAttention_c::getActionBtnY() {
/* Nonmatching */
dAttList_c* dAttention_c::getActionBtnY() {
if (!dComIfGs_checkGetItemNum(g_dComIfG_gameInfo.play.mEquippedItems[1]))
return NULL;
return getActionBtnXYZ_local(1);
}
/* 8009DA50-8009DAA4 .text getActionBtnZ__12dAttention_cFv */
void dAttention_c::getActionBtnZ() {
/* Nonmatching */
dAttList_c* dAttention_c::getActionBtnZ() {
if (!dComIfGs_checkGetItemNum(g_dComIfG_gameInfo.play.mEquippedItems[2]))
return NULL;
return getActionBtnXYZ_local(2);
}
/* 8009DAA4-8009DAF4 .text chkAttMask__12dAttention_cFUlUl */
@@ -102,27 +118,86 @@ void dAttention_c::calcWeight(int, fopAc_ac_c*, float, short, short, unsigned lo
}
/* 8009E03C-8009E128 .text setLList__12dAttention_cFP10fopAc_ac_cffUl */
void dAttention_c::setLList(fopAc_ac_c*, float, float, unsigned long) {
/* Nonmatching */
void dAttention_c::setLList(fopAc_ac_c* i_actor, float weight, float distance, unsigned long type) {
float bestWeight = 0.0f;
if (weight > 0.0f) {
int bestIdx;
if (mLockOnNum < (s32)ARRAY_SIZE(mLockOnList)) {
bestIdx = mLockOnNum++;
} else {
for (int i = (s32)ARRAY_SIZE(mLockOnList); i >= 0; i--) {
if (weight > bestWeight) {
bestIdx = i;
bestWeight = weight;
}
}
}
if (weight < mLockOnList[bestIdx].mWeight) {
mLockOnList[bestIdx].setActor(i_actor);
mLockOnList[bestIdx].mWeight = weight;
mLockOnList[bestIdx].mDistance = distance;
mLockOnList[bestIdx].mType = type;
}
}
}
/* 8009E128-8009E214 .text setAList__12dAttention_cFP10fopAc_ac_cffUl */
void dAttention_c::setAList(fopAc_ac_c*, float, float, unsigned long) {
/* Nonmatching */
void dAttention_c::setAList(fopAc_ac_c* i_actor, float weight, float distance, unsigned long type) {
float bestWeight = 0.0f;
if (weight > 0.0f) {
int bestIdx;
if (mActionNum < (s32)ARRAY_SIZE(mActionList)) {
bestIdx = mActionNum++;
} else {
for (int i = (s32)ARRAY_SIZE(mActionList); i >= 0; i--) {
if (weight > bestWeight) {
bestIdx = i;
bestWeight = weight;
}
}
}
if (weight < mActionList[bestIdx].mWeight) {
mActionList[bestIdx].setActor(i_actor);
mActionList[bestIdx].mWeight = weight;
mActionList[bestIdx].mDistance = distance;
mActionList[bestIdx].mType = type;
}
}
}
/* 8009E214-8009E2CC .text initList__12dAttention_cFUl */
void dAttention_c::initList(unsigned long) {
/* Nonmatching */
void dAttention_c::initList(unsigned long flagMask) {
int i;
mFlagMask = flagMask;
for (i = 0; i < (s32)ARRAY_SIZE(mLockOnList); i++) {
mLockOnList[i].setActor(NULL);
mLockOnList[i].mWeight = 3.4028235E38f;
}
mLockOnOffs = 0;
mLockOnNum = 0;
for (i = 0; i < (s32)ARRAY_SIZE(mActionList); i++) {
mActionList[i].setActor(NULL);
mActionList[i].mWeight = 3.4028235E38f;
}
mActionOffs = 0;
mActionNum = 0;
}
/* 8009E2CC-8009E2F8 .text select_attention__FP10fopAc_ac_cPv */
void select_attention(fopAc_ac_c*, void*) {
/* Nonmatching */
void select_attention(fopAc_ac_c* pActor, void* i_attention) {
dAttention_c * pAttention = (dAttention_c*)i_attention;
pAttention->SelectAttention(pActor);
}
/* 8009E2F8-8009E33C .text makeList__12dAttention_cFv */
void dAttention_c::makeList() {
s32 dAttention_c::makeList() {
/* Nonmatching */
}
@@ -137,18 +212,47 @@ void dAttention_c::sortList() {
}
/* 8009E5C4-8009E684 .text stockAttention__12dAttention_cFUl */
void dAttention_c::stockAttention(unsigned long) {
/* Nonmatching */
void dAttention_c::stockAttention(unsigned long interactMask) {
fopAc_ac_c * pTarget = LockonTarget(0);
initList(interactMask);
if (makeList())
sortList();
if (pTarget != mLockOnList[0].getActor()) {
if (pTarget != NULL) {
if (mLockOnList[0].getActor() != NULL)
mFlags |= 2;
} else {
mFlags |= 1;
}
mFlags |= 4;
}
LockonTarget(0);
}
/* 8009E684-8009E728 .text nextAttention__12dAttention_cFUl */
void dAttention_c::nextAttention(unsigned long) {
/* Nonmatching */
void dAttention_c::nextAttention(unsigned long interactMask) {
fopAc_ac_c * pTarget = fopAcM_SearchByID(mLockOnTargetBsPcID);
initList(interactMask);
if (makeList())
sortList();
if (pTarget == mLockOnList[0].getActor() && mLockOnNum > 1)
mLockOnOffs = 1;
LockonTarget(0);
}
/* 8009E728-8009E764 .text freeAttention__12dAttention_cFv */
void dAttention_c::freeAttention() {
/* Nonmatching */
s32 dAttention_c::freeAttention() {
mLockOnOffs = 0;
mLockOnNum = 0;
mActionOffs = 0;
mActionNum = 0;
initList(0xFFFFFFFF);
return 0;
}
/* 8009E764-8009E978 .text chaseAttention__12dAttention_cFv */
@@ -232,8 +336,15 @@ void dAttDraw_c::draw(cXyz&, float(*)[4]) {
}
/* 8009F834-8009F88C .text LockonTarget__12dAttention_cFl */
void dAttention_c::LockonTarget(long) {
/* Nonmatching */
fopAc_ac_c* dAttention_c::LockonTarget(s32 idx) {
if (idx >= mLockOnNum)
return NULL;
s32 listIdx = mLockOnOffs + idx;
if (listIdx >= mLockOnNum)
listIdx -= mLockOnNum;
return mLockOnList[listIdx].getActor();
}
/* 8009F88C-8009F980 .text LockonReleaseDistanse__12dAttention_cFv */
@@ -242,68 +353,101 @@ void dAttention_c::LockonReleaseDistanse() {
}
/* 8009F980-8009F9B8 .text LockonTargetPId__12dAttention_cFl */
void dAttention_c::LockonTargetPId(long) {
/* Nonmatching */
unsigned int dAttention_c::LockonTargetPId(s32 idx) {
if (idx >= mLockOnNum)
return NULL;
s32 listIdx = mLockOnOffs + idx;
if (listIdx >= mLockOnNum)
listIdx -= mLockOnNum;
return mLockOnList[listIdx].getPid();
}
/* 8009F9B8-8009FA10 .text ActionTarget__12dAttention_cFl */
void dAttention_c::ActionTarget(long) {
/* Nonmatching */
fopAc_ac_c* dAttention_c::ActionTarget(s32 idx) {
if (idx >= mActionNum)
return NULL;
s32 listIdx = mActionOffs + idx;
if (listIdx >= mActionNum)
listIdx -= mActionNum;
return mActionList[listIdx].getActor();
}
/* 8009FA10-8009FA64 .text LockonTruth__12dAttention_cFv */
void dAttention_c::LockonTruth() {
/* Nonmatching */
bool dAttention_c::LockonTruth() {
return mLockOnState == 1 || (mLockOnState == 2 && LockonTarget(0));
}
/* 8009FA64-8009FA98 .text getActor__10dAttList_cFv */
void dAttList_c::getActor() {
/* Nonmatching */
fopAc_ac_c* dAttList_c::getActor() {
return fopAcM_SearchByID(mActorID);
}
/* 8009FA98-8009FAB4 .text setActor__10dAttList_cFP10fopAc_ac_c */
void dAttList_c::setActor(fopAc_ac_c*) {
/* Nonmatching */
void dAttList_c::setActor(fopAc_ac_c* i_actor) {
mActorID = fpcM_GetID(i_actor);
}
/* 8009FAB4-8009FACC .text getPId__10dAttHint_cFPv */
void dAttHint_c::getPId(void*) {
/* Nonmatching */
u32 dAttHint_c::getPId(void* i_proc) {
return fpcM_GetID(i_proc);
}
/* 8009FACC-8009FAFC .text convPId__10dAttHint_cFUi */
void dAttHint_c::convPId(unsigned int) {
/* Nonmatching */
fopAc_ac_c* dAttHint_c::convPId(unsigned int i_procID) {
return fopAcM_SearchByID(i_procID);
}
/* 8009FAFC-8009FB58 .text request__10dAttHint_cFP10fopAc_ac_ci */
void dAttHint_c::request(fopAc_ac_c*, int) {
/* Nonmatching */
int dAttHint_c::request(fopAc_ac_c* i_actor, int priority) {
if (priority < 0)
priority = 0x1FF;
if (priority <= mPriority) {
mHintActorID = getPId(i_actor);
mPriority = priority;
}
return TRUE;
}
/* 8009FB58-8009FB70 .text init__10dAttHint_cFv */
void dAttHint_c::init() {
/* Nonmatching */
mHintActorID = -1;
field_0x8 = -1;
mPriority = 0x200;
}
/* 8009FB70-8009FB8C .text proc__10dAttHint_cFv */
void dAttHint_c::proc() {
/* Nonmatching */
field_0x8 = mHintActorID;
mHintActorID = -1;
mPriority = 0x200;
}
/* 8009FB8C-8009FBBC .text convPId__11dAttCatch_cFUi */
void dAttCatch_c::convPId(unsigned int) {
/* Nonmatching */
fopAc_ac_c* dAttCatch_c::convPId(unsigned int i_procID) {
return fopAcM_SearchByID(i_procID);
}
/* 8009FBBC-8009FBDC .text init__11dAttCatch_cFv */
void dAttCatch_c::init() {
/* Nonmatching */
field_0xc = 0x56;
field_0x0 = -1;
mCatghTargetID = -1;
field_0x4 = 3;
}
/* 8009FBDC-8009FC08 .text proc__11dAttCatch_cFv */
void dAttCatch_c::proc() {
/* Nonmatching */
mCatghTargetID = field_0x0;
mChangeItem = field_0xc;
field_0x0 = -1;
field_0x4 = 3;
field_0xc = 0x56;
}
/* 8009FC08-8009FE10 .text request__11dAttCatch_cFP10fopAc_ac_cUcfffsi */
@@ -312,18 +456,22 @@ void dAttCatch_c::request(fopAc_ac_c*, unsigned char, float, float, float, short
}
/* 8009FE10-8009FE40 .text convPId__10dAttLook_cFUi */
void dAttLook_c::convPId(unsigned int) {
/* Nonmatching */
fopAc_ac_c* dAttLook_c::convPId(unsigned int i_procID) {
return fopAcM_SearchByID(i_procID);
}
/* 8009FE40-8009FE58 .text init__10dAttLook_cFv */
void dAttLook_c::init() {
/* Nonmatching */
field_0x0 = -1;
mLookTargetID = -1;
field_0x4 = 3;
}
/* 8009FE58-8009FE74 .text proc__10dAttLook_cFv */
void dAttLook_c::proc() {
/* Nonmatching */
mLookTargetID = field_0x0;
field_0x0 = -1;
field_0x4 = 3;
}
/* 8009FE74-800A009C .text request__10dAttLook_cFP10fopAc_ac_cfffsi */
+2 -2
View File
@@ -616,7 +616,7 @@ stage_camera_class* dComIfGp_getRoomCamera(int i_roomNo) {
return NULL;
}
return status->mRoomDt.getCamera();
return status->getCamera();
}
/* 80053778-800537C8 .text dComIfGp_getRoomArrow__Fi */
@@ -627,7 +627,7 @@ stage_arrow_class* dComIfGp_getRoomArrow(int i_roomNo) {
return NULL;
}
return status->mRoomDt.getArrow();
return status->getArrow();
}
/* 800537C8-8005388C .text dComIfGp_setNextStage__FPCcsScScfUliSc */
+2 -2
View File
@@ -80,7 +80,7 @@ static u16 lightMaskData[] = {
BOOL toon_proc_check() {
s32 roomNo = dComIfGp_roomControl_getStayNo();
if (roomNo >= 0) {
dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo();
dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo();
}
return false;
@@ -1718,7 +1718,7 @@ void dScnKy_env_light_c::SetBaseLight() {
int roomNo = dComIfGp_roomControl_getStayNo();
if (roomNo >= 0) {
plight_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getLightVecInfo();
plight_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->getLightVecInfo();
}
if (plight_p != NULL) {
+117 -4
View File
@@ -74,6 +74,12 @@ void dKy_set_eyevect_calc2(camera_class* i_camera, Vec* param_1, f32 param_2, f3
}
}
static inline void dKyr_init_btitex(GXTexObj* i_obj, ResTIMG* i_img) {
GXInitTexObj(i_obj, (&i_img->format + i_img->imageOffset), i_img->width, i_img->height,
(GXTexFmt)i_img->format, (GXTexWrapMode)i_img->wrapS, (GXTexWrapMode)i_img->wrapT,
(GXBool)(i_img->mipmapCount > 1));
}
/* 8008AD60-8008AE54 .text dKyr_set_btitex__FP9_GXTexObjP7ResTIMG */
void dKyr_set_btitex(GXTexObj* i_obj, ResTIMG* i_img) {
GXInitTexObj(i_obj, (&i_img->format + i_img->imageOffset), i_img->width, i_img->height,
@@ -269,7 +275,19 @@ void vrkumo_move() {
/* 800940D4-80094144 .text dKy_wave_chan_init__Fv */
void dKy_wave_chan_init() {
/* Nonmatching */
g_env_light.mWaveChan.field_0x0 = -1.0f;
g_env_light.mWaveChan.field_0x4 = 0.0f;
g_env_light.mWaveChan.field_0x8 = 0.0f;
g_env_light.mWaveChan.mWaveSpeed = 0.1f;
g_env_light.mWaveChan.mWaveSpawnDist = 3000.0f;
g_env_light.mWaveChan.mWaveSpawnRadius = 3150.0f;
g_env_light.mWaveChan.mWaveScale = 250.0f;
g_env_light.mWaveChan.mWaveScaleRand = 0.217f;
g_env_light.mWaveChan.mWaveCounterSpeedScale = 1.6f;
g_env_light.mWaveChan.mWaveScaleBottom = 5.0f;
g_env_light.mWaveChan.mWaveCount = 0;
g_env_light.mWaveChan.mWaveReset = 0;
g_env_light.mWaveChan.field_0x2f = 0;
}
/* 80094144-8009428C .text snap_sunmoon_proc__FP4cXyzi */
@@ -293,8 +311,103 @@ void dKyr_drawRain(Mtx, u8**) {
}
/* 8009682C-80096D18 .text dKyr_drawSibuki__FPA4_fPPUc */
void dKyr_drawSibuki(Mtx, u8**) {
/* Nonmatching */
void dKyr_drawSibuki(Mtx drawMtx, u8** pImg) {
dKankyo_rain_Packet * pPkt = g_env_light.mpRainPacket;
camera_class *pCamera = dComIfGp_getCamera(0);
if (g_env_light.mSnowCount != 0 || dComIfGd_getView() == NULL)
return;
Mtx camMtx;
MTXInverse(dComIfGd_getViewRotMtx(), camMtx);
f32 alpha = 200.0f;
if (pPkt->mStatus & 1)
alpha = 0.0f;
cLib_addCalc(&pPkt->mSibukiAlpha, alpha, 0.2f, 30.0f, 0.001f);
cXyz eyevect, camDir;
dKy_set_eyevect_calc(pCamera, &eyevect, 7000.0f, 4000.0f);
dKyr_get_vectle_calc(&pCamera->mLookat.mEye, &pCamera->mLookat.mCenter, &camDir);
float alphaFade = 0.0f;
if (camDir.y <= 0.0f)
alphaFade = 1.0f;
else if (camDir.y < 0.5f)
alphaFade = 1.0f - (camDir.y / 0.5f);
GXColor color = { 0xB4, 0xC8, 0xC8, 0x00 };
color.a = (u8)(pPkt->mSibukiAlpha * alphaFade);
GXTexObj texObj;
dKyr_init_btitex(&texObj, (ResTIMG*)pImg[1]);
GXLoadTexObj(&texObj, GX_TEXMAP0);
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, color);
GXSetTevColor(GX_TEVREG1, color);
GXSetNumTexGens(1);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, false, GX_PTIDENTITY);
GXSetNumTevStages(1);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
GXSetZMode(true, GX_GEQUAL, false);
GXSetCullMode(GX_CULL_NONE);
GXSetClipMode(GX_CLIP_DISABLE);
GXSetNumIndStages(0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S16, 8);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
GXSetCurrentMtx(GX_PNMTX0);
f32 scale;
if (dComIfGd_getView() == NULL) {
scale = 0.2f;
} else {
scale = dComIfGd_getView()->mFovy / 20.0f;
if (scale >= 1.0f)
scale = 1.0f;
scale = 1.0f - scale;
}
for (s32 i = 0; i < g_env_light.mRainCount / 2; i++) {
f32 size = 20.0f + scale * cM_rndF(25.0f);
f32 x = eyevect.x + cM_rndFX(3600.0f);
f32 y = eyevect.y + cM_rndFX(1500.0f);
f32 z = eyevect.z + cM_rndFX(3600.0f);
f32 x0 = x - size, x1 = x + size;
f32 z0 = z - size, z1 = z + size;
cXyz p0( x0, y, z0 );
cXyz p1( x1, y, z0 );
cXyz p2( x1, y, z1 );
cXyz p3( x0, y, z1 );
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3f32(p0.x, p0.y, p0.z);
GXTexCoord2s16(0, 0);
GXPosition3f32(p1.x, p1.y, p1.z);
GXTexCoord2s16(0x1FF, 0);
GXPosition3f32(p2.x, p2.y, p2.z);
GXTexCoord2s16(0x1FF, 0x1FF);
GXPosition3f32(p3.x, p3.y, p3.z);
GXTexCoord2s16(0, 0x1FF);
i_GXEnd();
}
GXSetClipMode(GX_CLIP_ENABLE);
J3DShape::sOldVcdVatCmd = NULL;
}
/* 80096D18-800973CC .text drawPoison__FPA4_fPPUc */
@@ -339,7 +452,7 @@ void drawVrkumo(Mtx, GXColor&, u8**) {
/* 8009B9C4-8009B9D8 .text dKyr_thunder_init__Fv */
void dKyr_thunder_init() {
/* Nonmatching */
g_env_light.mThunderEff.mStateTimer = 0;
}
/* 8009B9D8-8009BDEC .text dKyr_thunder_move__Fv */
+9 -9
View File
@@ -399,7 +399,7 @@ void wether_move_windline() {
int roomNo = dComIfGp_roomControl_getStayNo();
if (roomNo >= 0) {
fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo();
fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo();
}
g_env_light.mWindlineCount = 0;
@@ -989,7 +989,7 @@ void dKyw_wind_set() {
s32 roomNo = dComIfGp_roomControl_getStayNo();
if (roomNo >= 0) {
fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo();
fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo();
}
s16 tact_wind_x;
@@ -1146,16 +1146,16 @@ void dKyw_pntwind_init() {
/* 8008A144-8008A1A8 .text pntwind_set__FP14WIND_INFLUENCE */
void pntwind_set(WIND_INFLUENCE* i_influence) {
int i = 0;
for (; i < 30; i++) {
for (; i < ARRAY_SIZE(g_env_light.mpWindInfluence); i++) {
if (g_env_light.mpWindInfluence[i] == NULL) {
g_env_light.mpWindInfluence[i] = i_influence;
g_env_light.mpWindInfluence[i]->field_0x24 = i;
g_env_light.mpWindInfluence[i]->mRegistIdx = i;
break;
}
}
if (i >= 30) {
i_influence->field_0x24 = 9999;
i_influence->mRegistIdx = 9999;
}
}
@@ -1174,8 +1174,8 @@ void dKyw_pwind_cylinder_set(WIND_INFLUENCE* i_influence) {
/* 8008A1F8-8008A230 .text dKyw_pntwind_cut__FP14WIND_INFLUENCE */
void dKyw_pntwind_cut(WIND_INFLUENCE* i_influence) {
if (i_influence != NULL) {
if (i_influence->field_0x24 >= 0 && i_influence->field_0x24 < 30) {
g_env_light.mpWindInfluence[i_influence->field_0x24] = NULL;
if (i_influence->mRegistIdx >= 0 && i_influence->mRegistIdx < 30) {
g_env_light.mpWindInfluence[i_influence->mRegistIdx] = NULL;
}
}
}
@@ -1188,7 +1188,7 @@ void dKyw_pntwind_get_info(cXyz* param_0, cXyz* i_dir, f32* i_power) {
*i_power = 0.0f;
WIND_INFLUENCE* influence;
for (int i = 0; i < 30; i++) {
for (int i = 0; i < ARRAY_SIZE(g_env_light.mpWindInfluence); i++) {
influence = g_env_light.mpWindInfluence[i];
if (influence != NULL) {
f32 dist = param_0->abs(influence->mPos);
@@ -1376,7 +1376,7 @@ BOOL dKyw_gbwind_use_check() {
if (g_env_light.mWind.mpWindVecOverride == NULL) {
s32 roomNo = dComIfGp_roomControl_getStayNo();
if (roomNo >= 0) {
fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo();
fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo();
}
if (fili_p != NULL && dStage_FileList_dt_GlobalWindLevel(fili_p) <= 2) {