mirror of
https://github.com/zeldaret/ss
synced 2026-08-31 01:20:25 -04:00
Misc Collision (#51)
* Initial Commit - Starting to translate from TP * Collision Updates * Actor Collision -> dBgW (DZB Collision) * bg .text splits complete * fix errors * file organization * missed files * progress * weee * most of cM3dG * Revert mAng change * Progress * Progress -> Need to update from main * Fixup Merge * d_bg_s symbols.... * TList Changes * oops * d_bg_s large progress * d_bg_s_acch majority done * d_bg_s_chk OK * d_bg_s_gnd_chk OK * d_bg_s_grp_pass_chk OK * d_bg_lin_chk OK * d_bg_s_poly_pass_chk OK * d_bg_s_roof_chk and d_bg_s_sph_chk OK * d_bg_s_spl_grp_chk OK * d_bg_s_wtr_chk OK * d_bg_w started * d_bg_w_base OK * name d_bg_w_kcol symbols * d_bg_w_sv split/started * most of d_bg_w_time * stopping d_bg_w_kcol for now * d_bg_w_sv OK * work on d_bg_w_time * revert TList to take offset arg * fixup some compiler warnings * set c_bg_w OK * Update rel_sieve.py * Remove TList Macros * Bomb Header started
This commit is contained in:
@@ -5,19 +5,12 @@
|
||||
#include <toBeSorted/item_story_flag_manager.h>
|
||||
#include <toBeSorted/tlist.h>
|
||||
|
||||
typedef TList<DowsingTarget, 0> DowsingList;
|
||||
typedef TList<DowsingTarget, offsetof(DowsingTarget, mLink)> DowsingList;
|
||||
|
||||
DowsingList DOWSING_LISTS[8];
|
||||
|
||||
static const int DOWSING_TARGET_STORY_FLAGS[8] = {
|
||||
100,
|
||||
105,
|
||||
100,
|
||||
104,
|
||||
108,
|
||||
110,
|
||||
109,
|
||||
102,
|
||||
100, 105, 100, 104, 108, 110, 109, 102,
|
||||
};
|
||||
|
||||
DowsingTarget::~DowsingTarget() {
|
||||
@@ -56,7 +49,7 @@ void DowsingTarget::getPosition(mVec3_c &position) {
|
||||
mMtx_c mtx2;
|
||||
PSMTXTrans(mtx.m, mpActor->position.x, mpActor->position.y, mpActor->position.z);
|
||||
mtx.YrotM(mpActor->rotation.y);
|
||||
PSMTXScale(mtx2.m, mpActor->scale.x, mpActor->scale.y, mpActor->scale.z);
|
||||
PSMTXScale(mtx2.m, mpActor->mScale.x, mpActor->mScale.y, mpActor->mScale.z);
|
||||
PSMTXConcat(mtx.m, mtx2.m, mtx.m);
|
||||
PSMTXMultVec(mtx.m, mOffset, position);
|
||||
}
|
||||
@@ -80,9 +73,9 @@ bool DowsingTarget::hasDesertNodeDowsing() {
|
||||
bool DowsingTarget::hasAnyTrialDowsing() {
|
||||
// TODO more complicated code
|
||||
return ItemFlagManager::sInstance->getFlag(187) && !StoryFlagManager::sInstance->getCounterOrFlag(93) ||
|
||||
ItemFlagManager::sInstance->getFlag(188) && !StoryFlagManager::sInstance->getCounterOrFlag(97) ||
|
||||
ItemFlagManager::sInstance->getFlag(189) && !StoryFlagManager::sInstance->getCounterOrFlag(98) ||
|
||||
ItemFlagManager::sInstance->getFlag(193) && !StoryFlagManager::sInstance->getCounterOrFlag(99);
|
||||
ItemFlagManager::sInstance->getFlag(188) && !StoryFlagManager::sInstance->getCounterOrFlag(97) ||
|
||||
ItemFlagManager::sInstance->getFlag(189) && !StoryFlagManager::sInstance->getCounterOrFlag(98) ||
|
||||
ItemFlagManager::sInstance->getFlag(193) && !StoryFlagManager::sInstance->getCounterOrFlag(99);
|
||||
}
|
||||
|
||||
bool DowsingTarget::hasSacredWaterDowsing() {
|
||||
@@ -132,10 +125,10 @@ bool DowsingTarget::hasDowsingInSlot(int slot) {
|
||||
|
||||
if (slot == 0) {
|
||||
return hasZeldaDowsing() || hasAnyTrialDowsing() || hasSacredWaterDowsing() || hasSandshipDowsing() ||
|
||||
hasTadtoneDowsing() || hasPropellerDowsing() || hasWaterBasinDowsing();
|
||||
hasTadtoneDowsing() || hasPropellerDowsing() || hasWaterBasinDowsing();
|
||||
} else if (slot == 2) {
|
||||
return hasCrystalBallDowsing() || hasPumpkinDowsing() || hasNewPlantSpeciesDowsing() || hasKikwiDowsing() ||
|
||||
hasKeyPieceDowsing() || hasDesertNodeDowsing() || hasPartyWheelDowsing();
|
||||
hasKeyPieceDowsing() || hasDesertNodeDowsing() || hasPartyWheelDowsing();
|
||||
} else if (StoryFlagManager::sInstance->getCounterOrFlag(DOWSING_TARGET_STORY_FLAGS[slot])) {
|
||||
// TODO small instruction shuffle
|
||||
return true;
|
||||
@@ -146,8 +139,9 @@ bool DowsingTarget::hasDowsingInSlot(int slot) {
|
||||
|
||||
#define MYCLAMP(low, high, x) ((x) < (low) ? (low) : ((x) > (high) ? (high) : (x)))
|
||||
|
||||
DowsingTarget *DowsingTarget::getDowsingInfo(const mVec3_c &playerPosition, const mVec3_c &dowsingDirection, f32 *p3,
|
||||
f32 *p4, f32 *intensity, int slot) {
|
||||
DowsingTarget *DowsingTarget::getDowsingInfo(
|
||||
const mVec3_c &playerPosition, const mVec3_c &dowsingDirection, f32 *p3, f32 *p4, f32 *intensity, int slot
|
||||
) {
|
||||
if (slot >= 8) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -199,9 +193,9 @@ void DowsingTarget::init() {}
|
||||
void DowsingTarget::execute() {}
|
||||
|
||||
// Not sure what this is
|
||||
inline static TListNode *getNode(u8 slot, DowsingTarget *t) {
|
||||
inline static TListNode<DowsingTarget> *getNode(u8 slot, DowsingTarget *t) {
|
||||
if (t->mLink.mpNext == nullptr || t->mLink.mpPrev == nullptr) {
|
||||
return &DOWSING_LISTS[slot].mNode;
|
||||
return &DOWSING_LISTS[slot].mStartEnd;
|
||||
} else {
|
||||
return &t->mLink;
|
||||
}
|
||||
@@ -213,7 +207,7 @@ static bool insertDowsingTarget(DowsingTarget *target) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getNode(slot, target) != &DOWSING_LISTS[slot].mNode) {
|
||||
if (getNode(slot, target) != &DOWSING_LISTS[slot].mStartEnd) {
|
||||
return false;
|
||||
}
|
||||
DOWSING_LISTS[slot].insert(target);
|
||||
@@ -226,7 +220,7 @@ static bool removeDowsingTarget(DowsingTarget *target) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getNode(slot, target) != &DOWSING_LISTS[slot].mNode) {
|
||||
if (getNode(slot, target) != &DOWSING_LISTS[slot].mStartEnd) {
|
||||
DOWSING_LISTS[slot].remove(target);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user