mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-12 02:44:54 +00:00
Merge branch 'main' into doc_pause_menu
This commit is contained in:
commit
4ee4b93b4f
356 changed files with 6097 additions and 3907 deletions
|
@ -6,24 +6,24 @@ u32 gObjectTableSize = ARRAY_COUNT(gObjectTable);
|
|||
|
||||
// Object linker symbol declarations (used in the table below)
|
||||
#define DEFINE_OBJECT(name, _1) DECLARE_ROM_SEGMENT(name)
|
||||
#define DEFINE_OBJECT_NULL(_0, _1)
|
||||
#define DEFINE_OBJECT_EMPTY(_0, _1)
|
||||
#define DEFINE_OBJECT_UNSET(_0)
|
||||
|
||||
#include "tables/object_table.h"
|
||||
|
||||
#undef DEFINE_OBJECT
|
||||
#undef DEFINE_OBJECT_NULL
|
||||
#undef DEFINE_OBJECT_EMPTY
|
||||
#undef DEFINE_OBJECT_UNSET
|
||||
|
||||
// Object Table definition
|
||||
#define DEFINE_OBJECT(name, _1) ROM_FILE(name),
|
||||
#define DEFINE_OBJECT_NULL(name, _1) ROM_FILE_EMPTY(name),
|
||||
#define DEFINE_OBJECT_UNSET(_0) { 0 },
|
||||
#define DEFINE_OBJECT_EMPTY(name, _1) ROM_FILE_EMPTY(name),
|
||||
#define DEFINE_OBJECT_UNSET(_0) ROM_FILE_UNSET,
|
||||
|
||||
RomFile gObjectTable[] = {
|
||||
#include "tables/object_table.h"
|
||||
};
|
||||
|
||||
#undef DEFINE_OBJECT
|
||||
#undef DEFINE_OBJECT_NULL
|
||||
#undef DEFINE_OBJECT_EMPTY
|
||||
#undef DEFINE_OBJECT_UNSET
|
||||
|
|
|
@ -10,7 +10,7 @@ void Overlay_LoadGameState(GameStateOverlay* overlayEntry) {
|
|||
if (overlayEntry->vramStart == NULL) {
|
||||
overlayEntry->unk_28 = 0;
|
||||
} else {
|
||||
overlayEntry->loadedRamAddr = Overlay_AllocateAndLoad(overlayEntry->vromStart, overlayEntry->vromEnd,
|
||||
overlayEntry->loadedRamAddr = Overlay_AllocateAndLoad(overlayEntry->file.vromStart, overlayEntry->file.vromEnd,
|
||||
overlayEntry->vramStart, overlayEntry->vramEnd);
|
||||
|
||||
if (overlayEntry->loadedRamAddr == NULL) {
|
||||
|
|
|
@ -2877,8 +2877,8 @@ Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 pos
|
|||
return NULL;
|
||||
}
|
||||
|
||||
Overlay_Load(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd,
|
||||
overlayEntry->loadedRamAddr);
|
||||
Overlay_Load(overlayEntry->file.vromStart, overlayEntry->file.vromEnd, overlayEntry->vramStart,
|
||||
overlayEntry->vramEnd, overlayEntry->loadedRamAddr);
|
||||
|
||||
PRINTF(VT_FGCOL(GREEN));
|
||||
PRINTF("OVL(a):Seg:%08x-%08x Ram:%08x-%08x Off:%08x %s\n", overlayEntry->vramStart, overlayEntry->vramEnd,
|
||||
|
@ -4324,24 +4324,24 @@ u8 Actor_ApplyDamage(Actor* actor) {
|
|||
void Actor_SetDropFlag(Actor* actor, ColliderElement* elem, s32 freezeFlag) {
|
||||
if (elem->acHitElem == NULL) {
|
||||
actor->dropFlag = 0x00;
|
||||
} else if (freezeFlag && (elem->acHitElem->toucher.dmgFlags & (DMG_UNKNOWN_1 | DMG_MAGIC_ICE | DMG_MAGIC_FIRE))) {
|
||||
actor->freezeTimer = elem->acHitElem->toucher.damage;
|
||||
} else if (freezeFlag && (elem->acHitElem->atDmgInfo.dmgFlags & (DMG_UNKNOWN_1 | DMG_MAGIC_ICE | DMG_MAGIC_FIRE))) {
|
||||
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage;
|
||||
actor->dropFlag = 0x00;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_FIRE) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_FIRE) {
|
||||
actor->dropFlag = 0x01;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_ICE) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_ICE) {
|
||||
actor->dropFlag = 0x02;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_UNK1) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK1) {
|
||||
actor->dropFlag = 0x04;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_UNK2) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK2) {
|
||||
actor->dropFlag = 0x08;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_UNK3) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK3) {
|
||||
actor->dropFlag = 0x10;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_LIGHT) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_LIGHT) {
|
||||
actor->dropFlag = 0x20;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_MAGIC_LIGHT) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_MAGIC_LIGHT) {
|
||||
if (freezeFlag) {
|
||||
actor->freezeTimer = elem->acHitElem->toucher.damage;
|
||||
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage;
|
||||
}
|
||||
actor->dropFlag = 0x40;
|
||||
} else {
|
||||
|
@ -4361,24 +4361,24 @@ void Actor_SetDropFlagJntSph(Actor* actor, ColliderJntSph* jntSph, s32 freezeFla
|
|||
if (elem->acHitElem == NULL) {
|
||||
flag = 0x00;
|
||||
} else if (freezeFlag &&
|
||||
(elem->acHitElem->toucher.dmgFlags & (DMG_UNKNOWN_1 | DMG_MAGIC_ICE | DMG_MAGIC_FIRE))) {
|
||||
actor->freezeTimer = elem->acHitElem->toucher.damage;
|
||||
(elem->acHitElem->atDmgInfo.dmgFlags & (DMG_UNKNOWN_1 | DMG_MAGIC_ICE | DMG_MAGIC_FIRE))) {
|
||||
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage;
|
||||
flag = 0x00;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_FIRE) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_FIRE) {
|
||||
flag = 0x01;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_ICE) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_ICE) {
|
||||
flag = 0x02;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_UNK1) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK1) {
|
||||
flag = 0x04;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_UNK2) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK2) {
|
||||
flag = 0x08;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_UNK3) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK3) {
|
||||
flag = 0x10;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_ARROW_LIGHT) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_LIGHT) {
|
||||
flag = 0x20;
|
||||
} else if (elem->acHitElem->toucher.dmgFlags & DMG_MAGIC_LIGHT) {
|
||||
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_MAGIC_LIGHT) {
|
||||
if (freezeFlag) {
|
||||
actor->freezeTimer = elem->acHitElem->toucher.damage;
|
||||
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage;
|
||||
}
|
||||
flag = 0x40;
|
||||
} else {
|
||||
|
|
|
@ -26,34 +26,41 @@
|
|||
#if OOT_DEBUG
|
||||
|
||||
#define DEFINE_ACTOR(name, _1, allocType, nameString) \
|
||||
{ (uintptr_t)_ovl_##name##SegmentRomStart, \
|
||||
(uintptr_t)_ovl_##name##SegmentRomEnd, \
|
||||
_ovl_##name##SegmentStart, \
|
||||
_ovl_##name##SegmentEnd, \
|
||||
NULL, \
|
||||
&name##_InitVars, \
|
||||
nameString, \
|
||||
allocType, \
|
||||
0 },
|
||||
{ \
|
||||
ROM_FILE(ovl_##name), \
|
||||
_ovl_##name##SegmentStart, \
|
||||
_ovl_##name##SegmentEnd, \
|
||||
NULL, \
|
||||
&name##_InitVars, \
|
||||
nameString, \
|
||||
allocType, \
|
||||
0, \
|
||||
},
|
||||
|
||||
#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, nameString) \
|
||||
{ 0, 0, NULL, NULL, NULL, &name##_InitVars, nameString, allocType, 0 },
|
||||
#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, nameString) \
|
||||
{ \
|
||||
ROM_FILE_UNSET, NULL, NULL, NULL, &name##_InitVars, nameString, allocType, 0, \
|
||||
},
|
||||
|
||||
#else
|
||||
|
||||
// Actor name is set to NULL in retail builds
|
||||
#define DEFINE_ACTOR(name, _1, allocType, _3) \
|
||||
{ (uintptr_t)_ovl_##name##SegmentRomStart, \
|
||||
(uintptr_t)_ovl_##name##SegmentRomEnd, \
|
||||
_ovl_##name##SegmentStart, \
|
||||
_ovl_##name##SegmentEnd, \
|
||||
NULL, \
|
||||
&name##_InitVars, \
|
||||
NULL, \
|
||||
allocType, \
|
||||
0 },
|
||||
#define DEFINE_ACTOR(name, _1, allocType, _3) \
|
||||
{ \
|
||||
ROM_FILE(ovl_##name), \
|
||||
_ovl_##name##SegmentStart, \
|
||||
_ovl_##name##SegmentEnd, \
|
||||
NULL, \
|
||||
&name##_InitVars, \
|
||||
NULL, \
|
||||
allocType, \
|
||||
0, \
|
||||
},
|
||||
|
||||
#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, _3) { 0, 0, NULL, NULL, NULL, &name##_InitVars, NULL, allocType, 0 },
|
||||
#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, _3) \
|
||||
{ \
|
||||
ROM_FILE_UNSET, NULL, NULL, NULL, &name##_InitVars, NULL, allocType, 0, \
|
||||
},
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -80,7 +87,7 @@ void ActorOverlayTable_LogPrint(void) {
|
|||
PRINTF("RomStart RomEnd SegStart SegEnd allocp profile segname\n");
|
||||
|
||||
for (i = 0, overlayEntry = &gActorOverlayTable[0]; i < (u32)gMaxActorId; i++, overlayEntry++) {
|
||||
PRINTF("%08x %08x %08x %08x %08x %08x %s\n", overlayEntry->vromStart, overlayEntry->vromEnd,
|
||||
PRINTF("%08x %08x %08x %08x %08x %08x %s\n", overlayEntry->file.vromStart, overlayEntry->file.vromEnd,
|
||||
overlayEntry->vramStart, overlayEntry->vramEnd, overlayEntry->loadedRamAddr, &overlayEntry->initInfo->id,
|
||||
overlayEntry->name != NULL ? overlayEntry->name : "?");
|
||||
}
|
||||
|
|
|
@ -139,18 +139,19 @@ void Collider_ResetOCBase(PlayState* play, Collider* col) {
|
|||
col->ocFlags2 &= ~OC2_HIT_PLAYER;
|
||||
}
|
||||
|
||||
s32 Collider_InitElementTouch(PlayState* play, ColliderElementTouch* touch) {
|
||||
static ColliderElementTouch init = { 0x00000000, 0, 0 };
|
||||
s32 Collider_InitElementDamageInfoAT(PlayState* play, ColliderElementDamageInfoAT* atDmgInfo) {
|
||||
static ColliderElementDamageInfoAT init = { 0x00000000, 0, 0 };
|
||||
|
||||
*touch = init;
|
||||
*atDmgInfo = init;
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 Collider_DestroyElementTouch(PlayState* play, ColliderElementTouch* touch) {
|
||||
s32 Collider_DestroyElementDamageInfoAT(PlayState* play, ColliderElementDamageInfoAT* atDmgInfo) {
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 Collider_SetElementTouch(PlayState* play, ColliderElementTouch* dest, ColliderElementTouch* src) {
|
||||
s32 Collider_SetElementDamageInfoAT(PlayState* play, ColliderElementDamageInfoAT* dest,
|
||||
ColliderElementDamageInfoAT* src) {
|
||||
dest->dmgFlags = src->dmgFlags;
|
||||
dest->effect = src->effect;
|
||||
dest->damage = src->damage;
|
||||
|
@ -160,51 +161,52 @@ s32 Collider_SetElementTouch(PlayState* play, ColliderElementTouch* dest, Collid
|
|||
void Collider_ResetATElement_Unk(PlayState* play, ColliderElement* elem) {
|
||||
}
|
||||
|
||||
s32 Collider_InitElementBump(PlayState* play, ColliderElementBump* bump) {
|
||||
static ColliderElementBump init = { 0xFFCFFFFF, 0, 0, { 0, 0, 0 } };
|
||||
s32 Collider_InitElementDamageInfoAC(PlayState* play, ColliderElementDamageInfoAC* acDmgInfo) {
|
||||
static ColliderElementDamageInfoAC init = { 0xFFCFFFFF, 0, 0, { 0, 0, 0 } };
|
||||
|
||||
*bump = init;
|
||||
*acDmgInfo = init;
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 Collider_DestroyElementBump(PlayState* play, ColliderElementBump* bump) {
|
||||
s32 Collider_DestroyElementDamageInfoAC(PlayState* play, ColliderElementDamageInfoAC* acDmgInfo) {
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 Collider_SetElementBump(PlayState* play, ColliderElementBump* bump, ColliderElementBumpInit* init) {
|
||||
bump->dmgFlags = init->dmgFlags;
|
||||
bump->effect = init->effect;
|
||||
bump->defense = init->defense;
|
||||
s32 Collider_SetElementDamageInfoAC(PlayState* play, ColliderElementDamageInfoAC* acDmgInfo,
|
||||
ColliderElementDamageInfoACInit* init) {
|
||||
acDmgInfo->dmgFlags = init->dmgFlags;
|
||||
acDmgInfo->effect = init->effect;
|
||||
acDmgInfo->defense = init->defense;
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 Collider_InitElement(PlayState* play, ColliderElement* elem) {
|
||||
static ColliderElement init = {
|
||||
{ 0, 0, 0 }, { 0xFFCFFFFF, 0, 0, { 0, 0, 0 } },
|
||||
ELEMTYPE_UNK0, TOUCH_NONE,
|
||||
BUMP_NONE, OCELEM_NONE,
|
||||
ELEMTYPE_UNK0, ATELEM_NONE,
|
||||
ACELEM_NONE, OCELEM_NONE,
|
||||
NULL, NULL,
|
||||
NULL, NULL,
|
||||
};
|
||||
|
||||
*elem = init;
|
||||
Collider_InitElementTouch(play, &elem->toucher);
|
||||
Collider_InitElementBump(play, &elem->bumper);
|
||||
Collider_InitElementDamageInfoAT(play, &elem->atDmgInfo);
|
||||
Collider_InitElementDamageInfoAC(play, &elem->acDmgInfo);
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 Collider_DestroyElement(PlayState* play, ColliderElement* elem) {
|
||||
Collider_DestroyElementTouch(play, &elem->toucher);
|
||||
Collider_DestroyElementBump(play, &elem->bumper);
|
||||
Collider_DestroyElementDamageInfoAT(play, &elem->atDmgInfo);
|
||||
Collider_DestroyElementDamageInfoAC(play, &elem->acDmgInfo);
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 Collider_SetElement(PlayState* play, ColliderElement* elem, ColliderElementInit* elemInit) {
|
||||
elem->elemType = elemInit->elemType;
|
||||
Collider_SetElementTouch(play, &elem->toucher, &elemInit->toucher);
|
||||
Collider_SetElementBump(play, &elem->bumper, &elemInit->bumper);
|
||||
elem->toucherFlags = elemInit->toucherFlags;
|
||||
elem->bumperFlags = elemInit->bumperFlags;
|
||||
Collider_SetElementDamageInfoAT(play, &elem->atDmgInfo, &elemInit->atDmgInfo);
|
||||
Collider_SetElementDamageInfoAC(play, &elem->acDmgInfo, &elemInit->acDmgInfo);
|
||||
elem->atElemFlags = elemInit->atElemFlags;
|
||||
elem->acElemFlags = elemInit->acElemFlags;
|
||||
elem->ocElemFlags = elemInit->ocElemFlags;
|
||||
return true;
|
||||
}
|
||||
|
@ -212,15 +214,15 @@ s32 Collider_SetElement(PlayState* play, ColliderElement* elem, ColliderElementI
|
|||
void Collider_ResetATElement(PlayState* play, ColliderElement* elem) {
|
||||
elem->atHit = NULL;
|
||||
elem->atHitElem = NULL;
|
||||
elem->toucherFlags &= ~TOUCH_HIT;
|
||||
elem->toucherFlags &= ~TOUCH_DREW_HITMARK;
|
||||
elem->atElemFlags &= ~ATELEM_HIT;
|
||||
elem->atElemFlags &= ~ATELEM_DREW_HITMARK;
|
||||
Collider_ResetATElement_Unk(play, elem);
|
||||
}
|
||||
|
||||
void Collider_ResetACElement(PlayState* play, ColliderElement* elem) {
|
||||
elem->bumper.hitPos.x = elem->bumper.hitPos.y = elem->bumper.hitPos.z = 0;
|
||||
elem->bumperFlags &= ~BUMP_HIT;
|
||||
elem->bumperFlags &= ~BUMP_DRAW_HITMARK;
|
||||
elem->acDmgInfo.hitPos.x = elem->acDmgInfo.hitPos.y = elem->acDmgInfo.hitPos.z = 0;
|
||||
elem->acElemFlags &= ~ACELEM_HIT;
|
||||
elem->acElemFlags &= ~ACELEM_DRAW_HITMARK;
|
||||
elem->acHit = NULL;
|
||||
elem->acHitElem = NULL;
|
||||
}
|
||||
|
@ -929,7 +931,7 @@ s32 Collider_QuadSetNearestAC(PlayState* play, ColliderQuad* quad, Vec3f* hitPos
|
|||
f32 acDistSq;
|
||||
Vec3f dcMid;
|
||||
|
||||
if (!(quad->elem.toucherFlags & TOUCH_NEAREST)) {
|
||||
if (!(quad->elem.atElemFlags & ATELEM_NEAREST)) {
|
||||
return true;
|
||||
}
|
||||
Math_Vec3s_ToVec3f(&dcMid, &quad->dim.dcMid);
|
||||
|
@ -1366,21 +1368,15 @@ s32 CollisionCheck_SetOCLine(PlayState* play, CollisionCheckContext* colChkCtx,
|
|||
return index;
|
||||
}
|
||||
|
||||
/**
|
||||
* Skips AT elements that are off.
|
||||
*/
|
||||
s32 CollisionCheck_SkipElementTouch(ColliderElement* elem) {
|
||||
if (!(elem->toucherFlags & TOUCH_ON)) {
|
||||
s32 CollisionCheck_IsElementNotAT(ColliderElement* elem) {
|
||||
if (!(elem->atElemFlags & ATELEM_ON)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Skips AC elements that are off.
|
||||
*/
|
||||
s32 CollisionCheck_SkipElementBump(ColliderElement* elem) {
|
||||
if (!(elem->bumperFlags & BUMP_ON)) {
|
||||
s32 CollisionCheck_IsElementNotAC(ColliderElement* elem) {
|
||||
if (!(elem->acElemFlags & ACELEM_ON)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -1390,7 +1386,7 @@ s32 CollisionCheck_SkipElementBump(ColliderElement* elem) {
|
|||
* If the AT element has no dmgFlags in common with the AC element, no collision happens.
|
||||
*/
|
||||
s32 CollisionCheck_NoSharedFlags(ColliderElement* atElem, ColliderElement* acElem) {
|
||||
if (!(atElem->toucher.dmgFlags & acElem->bumper.dmgFlags)) {
|
||||
if (!(atElem->atDmgInfo.dmgFlags & acElem->acDmgInfo.dmgFlags)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -1538,9 +1534,9 @@ void CollisionCheck_RedBloodUnused(PlayState* play, Collider* collider, Vec3f* v
|
|||
* Plays sound effects and displays hitmarks for solid-type AC colliders (METAL, WOOD, HARD, and TREE)
|
||||
*/
|
||||
void CollisionCheck_HitSolid(PlayState* play, ColliderElement* elem, Collider* collider, Vec3f* hitPos) {
|
||||
s32 flags = elem->toucherFlags & TOUCH_SFX_MASK;
|
||||
s32 flags = elem->atElemFlags & ATELEM_SFX_MASK;
|
||||
|
||||
if (flags == TOUCH_SFX_NORMAL && collider->colType != COLTYPE_METAL) {
|
||||
if (flags == ATELEM_SFX_NORMAL && collider->colType != COLTYPE_METAL) {
|
||||
EffectSsHitMark_SpawnFixedScale(play, EFFECT_HITMARK_WHITE, hitPos);
|
||||
if (collider->actor == NULL) {
|
||||
Audio_PlaySfxGeneral(NA_SE_IT_SHIELD_BOUND, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
|
@ -1549,14 +1545,14 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderElement* elem, Collider* c
|
|||
Audio_PlaySfxGeneral(NA_SE_IT_SHIELD_BOUND, &collider->actor->projectedPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}
|
||||
} else if (flags == TOUCH_SFX_NORMAL) { // collider->colType == COLTYPE_METAL
|
||||
} else if (flags == ATELEM_SFX_NORMAL) { // collider->colType == COLTYPE_METAL
|
||||
EffectSsHitMark_SpawnFixedScale(play, EFFECT_HITMARK_METAL, hitPos);
|
||||
if (collider->actor == NULL) {
|
||||
CollisionCheck_SpawnShieldParticlesMetal(play, hitPos);
|
||||
} else {
|
||||
CollisionCheck_SpawnShieldParticlesMetalSfx(play, hitPos, &collider->actor->projectedPos);
|
||||
}
|
||||
} else if (flags == TOUCH_SFX_HARD) {
|
||||
} else if (flags == ATELEM_SFX_HARD) {
|
||||
EffectSsHitMark_SpawnFixedScale(play, EFFECT_HITMARK_WHITE, hitPos);
|
||||
if (collider->actor == NULL) {
|
||||
Audio_PlaySfxGeneral(NA_SE_IT_SHIELD_BOUND, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
|
@ -1565,7 +1561,7 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderElement* elem, Collider* c
|
|||
Audio_PlaySfxGeneral(NA_SE_IT_SHIELD_BOUND, &collider->actor->projectedPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}
|
||||
} else if (flags == TOUCH_SFX_WOOD) {
|
||||
} else if (flags == ATELEM_SFX_WOOD) {
|
||||
EffectSsHitMark_SpawnFixedScale(play, EFFECT_HITMARK_DUST, hitPos);
|
||||
if (collider->actor == NULL) {
|
||||
Audio_PlaySfxGeneral(NA_SE_IT_REFLECTION_WOOD, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
|
@ -1655,10 +1651,10 @@ static HitInfo sHitInfo[] = {
|
|||
*/
|
||||
void CollisionCheck_HitEffects(PlayState* play, Collider* atCol, ColliderElement* atElem, Collider* acCol,
|
||||
ColliderElement* acElem, Vec3f* hitPos) {
|
||||
if (acElem->bumperFlags & BUMP_NO_HITMARK) {
|
||||
if (acElem->acElemFlags & ACELEM_NO_HITMARK) {
|
||||
return;
|
||||
}
|
||||
if (!(atElem->toucherFlags & TOUCH_AT_HITMARK) && atElem->toucherFlags & TOUCH_DREW_HITMARK) {
|
||||
if (!(atElem->atElemFlags & ATELEM_AT_HITMARK) && atElem->atElemFlags & ATELEM_DREW_HITMARK) {
|
||||
return;
|
||||
}
|
||||
if (acCol->actor != NULL) {
|
||||
|
@ -1677,7 +1673,7 @@ void CollisionCheck_HitEffects(PlayState* play, Collider* atCol, ColliderElement
|
|||
}
|
||||
} else if (sHitInfo[acCol->colType].effect != HIT_NONE) {
|
||||
EffectSsHitMark_SpawnFixedScale(play, sHitInfo[acCol->colType].effect, hitPos);
|
||||
if (!(acElem->bumperFlags & BUMP_NO_SWORD_SFX)) {
|
||||
if (!(acElem->acElemFlags & ACELEM_NO_SWORD_SFX)) {
|
||||
CollisionCheck_SwordHitAudio(atCol, acElem);
|
||||
}
|
||||
}
|
||||
|
@ -1709,33 +1705,33 @@ s32 CollisionCheck_SetATvsAC(PlayState* play, Collider* atCol, ColliderElement*
|
|||
if (acCol->acFlags & AC_HARD && atCol->actor != NULL && acCol->actor != NULL) {
|
||||
CollisionCheck_SetBounce(atCol, acCol);
|
||||
}
|
||||
if (!(acElem->bumperFlags & BUMP_NO_AT_INFO)) {
|
||||
if (!(acElem->acElemFlags & ACELEM_NO_AT_INFO)) {
|
||||
atCol->atFlags |= AT_HIT;
|
||||
atCol->at = acCol->actor;
|
||||
atElem->atHit = acCol;
|
||||
atElem->atHitElem = acElem;
|
||||
atElem->toucherFlags |= TOUCH_HIT;
|
||||
atElem->atElemFlags |= ATELEM_HIT;
|
||||
if (atCol->actor != NULL) {
|
||||
atCol->actor->colChkInfo.atHitEffect = acElem->bumper.effect;
|
||||
atCol->actor->colChkInfo.atHitEffect = acElem->acDmgInfo.effect;
|
||||
}
|
||||
}
|
||||
acCol->acFlags |= AC_HIT;
|
||||
acCol->ac = atCol->actor;
|
||||
acElem->acHit = atCol;
|
||||
acElem->acHitElem = atElem;
|
||||
acElem->bumperFlags |= BUMP_HIT;
|
||||
acElem->acElemFlags |= ACELEM_HIT;
|
||||
if (acCol->actor != NULL) {
|
||||
acCol->actor->colChkInfo.acHitEffect = atElem->toucher.effect;
|
||||
acCol->actor->colChkInfo.acHitEffect = atElem->atDmgInfo.effect;
|
||||
}
|
||||
acElem->bumper.hitPos.x = hitPos->x;
|
||||
acElem->bumper.hitPos.y = hitPos->y;
|
||||
acElem->bumper.hitPos.z = hitPos->z;
|
||||
if (!(atElem->toucherFlags & TOUCH_AT_HITMARK) && acCol->colType != COLTYPE_METAL &&
|
||||
acElem->acDmgInfo.hitPos.x = hitPos->x;
|
||||
acElem->acDmgInfo.hitPos.y = hitPos->y;
|
||||
acElem->acDmgInfo.hitPos.z = hitPos->z;
|
||||
if (!(atElem->atElemFlags & ATELEM_AT_HITMARK) && acCol->colType != COLTYPE_METAL &&
|
||||
acCol->colType != COLTYPE_WOOD && acCol->colType != COLTYPE_HARD) {
|
||||
acElem->bumperFlags |= BUMP_DRAW_HITMARK;
|
||||
acElem->acElemFlags |= ACELEM_DRAW_HITMARK;
|
||||
} else {
|
||||
CollisionCheck_HitEffects(play, atCol, atElem, acCol, acElem, hitPos);
|
||||
atElem->toucherFlags |= TOUCH_DREW_HITMARK;
|
||||
atElem->atElemFlags |= ATELEM_DREW_HITMARK;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -1751,12 +1747,12 @@ void CollisionCheck_ATJntSphVsACJntSph(PlayState* play, CollisionCheckContext* c
|
|||
|
||||
if (atJntSph->count > 0 && atJntSph->elements != NULL && acJntSph->count > 0 && acJntSph->elements != NULL) {
|
||||
for (atJntSphElem = atJntSph->elements; atJntSphElem < atJntSph->elements + atJntSph->count; atJntSphElem++) {
|
||||
if (CollisionCheck_SkipElementTouch(&atJntSphElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atJntSphElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
for (acJntSphElem = acJntSph->elements; acJntSphElem < acJntSph->elements + acJntSph->count;
|
||||
acJntSphElem++) {
|
||||
if (CollisionCheck_SkipElementBump(&acJntSphElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acJntSphElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atJntSphElem->base, &acJntSphElem->base) == true) {
|
||||
|
@ -1803,11 +1799,11 @@ void CollisionCheck_ATJntSphVsACCyl(PlayState* play, CollisionCheckContext* colC
|
|||
f32 centerDist;
|
||||
|
||||
if (atJntSph->count > 0 && atJntSph->elements != NULL && acCyl->dim.radius > 0 && acCyl->dim.height > 0) {
|
||||
if (CollisionCheck_SkipElementBump(&acCyl->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acCyl->elem) == true) {
|
||||
return;
|
||||
}
|
||||
for (atJntSphElem = atJntSph->elements; atJntSphElem < atJntSph->elements + atJntSph->count; atJntSphElem++) {
|
||||
if (CollisionCheck_SkipElementTouch(&atJntSphElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atJntSphElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atJntSphElem->base, &acCyl->elem) == true) {
|
||||
|
@ -1855,11 +1851,11 @@ void CollisionCheck_ATCylVsACJntSph(PlayState* play, CollisionCheckContext* colC
|
|||
ColliderJntSphElement* acJntSphElem;
|
||||
|
||||
if (acJntSph->count > 0 && acJntSph->elements != NULL && atCyl->dim.radius > 0 && atCyl->dim.height > 0) {
|
||||
if (CollisionCheck_SkipElementTouch(&atCyl->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atCyl->elem) == true) {
|
||||
return;
|
||||
}
|
||||
for (acJntSphElem = acJntSph->elements; acJntSphElem < acJntSph->elements + acJntSph->count; acJntSphElem++) {
|
||||
if (CollisionCheck_SkipElementBump(&acJntSphElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acJntSphElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atCyl->elem, &acJntSphElem->base) == true) {
|
||||
|
@ -1910,11 +1906,11 @@ void CollisionCheck_ATJntSphVsACTris(PlayState* play, CollisionCheckContext* col
|
|||
|
||||
if (atJntSph->count > 0 && atJntSph->elements != NULL && acTris->count > 0 && acTris->elements != NULL) {
|
||||
for (atJntSphElem = atJntSph->elements; atJntSphElem < atJntSph->elements + atJntSph->count; atJntSphElem++) {
|
||||
if (CollisionCheck_SkipElementTouch(&atJntSphElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atJntSphElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
for (acTrisElem = acTris->elements; acTrisElem < acTris->elements + acTris->count; acTrisElem++) {
|
||||
if (CollisionCheck_SkipElementBump(&acTrisElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acTrisElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atJntSphElem->base, &acTrisElem->base) == true) {
|
||||
|
@ -1952,11 +1948,11 @@ void CollisionCheck_ATTrisVsACJntSph(PlayState* play, CollisionCheckContext* col
|
|||
|
||||
if (acJntSph->count > 0 && acJntSph->elements != NULL && atTris->count > 0 && atTris->elements != NULL) {
|
||||
for (acJntSphElem = acJntSph->elements; acJntSphElem < acJntSph->elements + acJntSph->count; acJntSphElem++) {
|
||||
if (CollisionCheck_SkipElementBump(&acJntSphElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acJntSphElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
for (atTrisElem = atTris->elements; atTrisElem < atTris->elements + atTris->count; atTrisElem++) {
|
||||
if (CollisionCheck_SkipElementTouch(&atTrisElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atTrisElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atTrisElem->base, &acJntSphElem->base) == true) {
|
||||
|
@ -1994,13 +1990,13 @@ void CollisionCheck_ATJntSphVsACQuad(PlayState* play, CollisionCheckContext* col
|
|||
ColliderJntSphElement* atJntSphElem;
|
||||
|
||||
if (atJntSph->count > 0 && atJntSph->elements != NULL) {
|
||||
if (CollisionCheck_SkipElementBump(&acQuad->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acQuad->elem) == true) {
|
||||
return;
|
||||
}
|
||||
Math3D_TriNorm(&tri1, &acQuad->dim.quad[2], &acQuad->dim.quad[3], &acQuad->dim.quad[1]);
|
||||
Math3D_TriNorm(&tri2, &acQuad->dim.quad[1], &acQuad->dim.quad[0], &acQuad->dim.quad[2]);
|
||||
for (atJntSphElem = atJntSph->elements; atJntSphElem < atJntSph->elements + atJntSph->count; atJntSphElem++) {
|
||||
if (CollisionCheck_SkipElementTouch(&atJntSphElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atJntSphElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atJntSphElem->base, &acQuad->elem) == true) {
|
||||
|
@ -2041,13 +2037,13 @@ void CollisionCheck_ATQuadVsACJntSph(PlayState* play, CollisionCheckContext* col
|
|||
ColliderJntSphElement* acJntSphElem;
|
||||
|
||||
if (acJntSph->count > 0 && acJntSph->elements != NULL) {
|
||||
if (CollisionCheck_SkipElementTouch(&atQuad->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atQuad->elem) == true) {
|
||||
return;
|
||||
}
|
||||
Math3D_TriNorm(&tri1, &atQuad->dim.quad[2], &atQuad->dim.quad[3], &atQuad->dim.quad[1]);
|
||||
Math3D_TriNorm(&tri2, &atQuad->dim.quad[2], &atQuad->dim.quad[1], &atQuad->dim.quad[0]);
|
||||
for (acJntSphElem = acJntSph->elements; acJntSphElem < acJntSph->elements + acJntSph->count; acJntSphElem++) {
|
||||
if (CollisionCheck_SkipElementBump(&acJntSphElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acJntSphElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atQuad->elem, &acJntSphElem->base) == true) {
|
||||
|
@ -2091,10 +2087,10 @@ void CollisionCheck_ATCylVsACCyl(PlayState* play, CollisionCheckContext* colChkC
|
|||
Vec3f hitPos;
|
||||
|
||||
if (atCyl->dim.radius > 0 && atCyl->dim.height > 0 && acCyl->dim.radius > 0 && acCyl->dim.height > 0) {
|
||||
if (CollisionCheck_SkipElementBump(&acCyl->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acCyl->elem) == true) {
|
||||
return;
|
||||
}
|
||||
if (CollisionCheck_SkipElementTouch(&atCyl->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atCyl->elem) == true) {
|
||||
return;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atCyl->elem, &acCyl->elem) == true) {
|
||||
|
@ -2128,11 +2124,11 @@ void CollisionCheck_ATCylVsACTris(PlayState* play, CollisionCheckContext* colChk
|
|||
Vec3f hitPos;
|
||||
|
||||
if (atCyl->dim.radius > 0 && atCyl->dim.height > 0 && acTris->count > 0 && acTris->elements != NULL) {
|
||||
if (CollisionCheck_SkipElementTouch(&atCyl->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atCyl->elem) == true) {
|
||||
return;
|
||||
}
|
||||
for (acTrisElem = acTris->elements; acTrisElem < acTris->elements + acTris->count; acTrisElem++) {
|
||||
if (CollisionCheck_SkipElementBump(&acTrisElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acTrisElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atCyl->elem, &acTrisElem->base) == true) {
|
||||
|
@ -2162,11 +2158,11 @@ void CollisionCheck_ATTrisVsACCyl(PlayState* play, CollisionCheckContext* colChk
|
|||
ColliderCylinder* acCyl = (ColliderCylinder*)acCol;
|
||||
|
||||
if (acCyl->dim.radius > 0 && acCyl->dim.height > 0 && atTris->count > 0 && atTris->elements != NULL) {
|
||||
if (CollisionCheck_SkipElementBump(&acCyl->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acCyl->elem) == true) {
|
||||
return;
|
||||
}
|
||||
for (atTrisElem = atTris->elements; atTrisElem < atTris->elements + atTris->count; atTrisElem++) {
|
||||
if (CollisionCheck_SkipElementTouch(&atTrisElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atTrisElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atTrisElem->base, &acCyl->elem) == true) {
|
||||
|
@ -2197,8 +2193,8 @@ void CollisionCheck_ATCylVsACQuad(PlayState* play, CollisionCheckContext* colChk
|
|||
ColliderQuad* acQuad = (ColliderQuad*)acCol;
|
||||
|
||||
if (atCyl->dim.height > 0 && atCyl->dim.radius > 0) {
|
||||
if (CollisionCheck_SkipElementTouch(&atCyl->elem) == true ||
|
||||
CollisionCheck_SkipElementBump(&acQuad->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atCyl->elem) == true ||
|
||||
CollisionCheck_IsElementNotAC(&acQuad->elem) == true) {
|
||||
return;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atCyl->elem, &acQuad->elem) == true) {
|
||||
|
@ -2253,8 +2249,8 @@ void CollisionCheck_ATQuadVsACCyl(PlayState* play, CollisionCheckContext* colChk
|
|||
ColliderCylinder* acCyl = (ColliderCylinder*)acCol;
|
||||
|
||||
if (acCyl->dim.height > 0 && acCyl->dim.radius > 0) {
|
||||
if (CollisionCheck_SkipElementBump(&acCyl->elem) == true ||
|
||||
CollisionCheck_SkipElementTouch(&atQuad->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acCyl->elem) == true ||
|
||||
CollisionCheck_IsElementNotAT(&atQuad->elem) == true) {
|
||||
return;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atQuad->elem, &acCyl->elem) == true) {
|
||||
|
@ -2319,11 +2315,11 @@ void CollisionCheck_ATTrisVsACTris(PlayState* play, CollisionCheckContext* colCh
|
|||
|
||||
if (acTris->count > 0 && acTris->elements != NULL && atTris->count > 0 && atTris->elements != NULL) {
|
||||
for (acTrisElem = acTris->elements; acTrisElem < acTris->elements + acTris->count; acTrisElem++) {
|
||||
if (CollisionCheck_SkipElementBump(&acTrisElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acTrisElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
for (atTrisElem = atTris->elements; atTrisElem < atTris->elements + atTris->count; atTrisElem++) {
|
||||
if (CollisionCheck_SkipElementTouch(&atTrisElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atTrisElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atTrisElem->base, &acTrisElem->base) == true) {
|
||||
|
@ -2369,13 +2365,13 @@ void CollisionCheck_ATTrisVsACQuad(PlayState* play, CollisionCheckContext* colCh
|
|||
ColliderQuad* acQuad = (ColliderQuad*)acCol;
|
||||
|
||||
if (atTris->count > 0 && atTris->elements != NULL) {
|
||||
if (CollisionCheck_SkipElementBump(&acQuad->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acQuad->elem) == true) {
|
||||
return;
|
||||
}
|
||||
Math3D_TriNorm(&tri1, &acQuad->dim.quad[2], &acQuad->dim.quad[3], &acQuad->dim.quad[1]);
|
||||
Math3D_TriNorm(&tri2, &acQuad->dim.quad[1], &acQuad->dim.quad[0], &acQuad->dim.quad[2]);
|
||||
for (atTrisElem = atTris->elements; atTrisElem < atTris->elements + atTris->count; atTrisElem++) {
|
||||
if (CollisionCheck_SkipElementTouch(&atTrisElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atTrisElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atTrisElem->base, &acQuad->elem) == true) {
|
||||
|
@ -2416,13 +2412,13 @@ void CollisionCheck_ATQuadVsACTris(PlayState* play, CollisionCheckContext* colCh
|
|||
ColliderTrisElement* acTrisElem;
|
||||
|
||||
if (acTris->count > 0 && acTris->elements != NULL) {
|
||||
if (CollisionCheck_SkipElementTouch(&atQuad->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atQuad->elem) == true) {
|
||||
return;
|
||||
}
|
||||
Math3D_TriNorm(&tri1, &atQuad->dim.quad[2], &atQuad->dim.quad[3], &atQuad->dim.quad[1]);
|
||||
Math3D_TriNorm(&tri2, &atQuad->dim.quad[1], &atQuad->dim.quad[0], &atQuad->dim.quad[2]);
|
||||
for (acTrisElem = acTris->elements; acTrisElem < acTris->elements + acTris->count; acTrisElem++) {
|
||||
if (CollisionCheck_SkipElementBump(&acTrisElem->base) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acTrisElem->base) == true) {
|
||||
continue;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atQuad->elem, &acTrisElem->base) == true) {
|
||||
|
@ -2468,10 +2464,10 @@ void CollisionCheck_ATQuadVsACQuad(PlayState* play, CollisionCheckContext* colCh
|
|||
s32 i;
|
||||
s32 j;
|
||||
|
||||
if (CollisionCheck_SkipElementTouch(&atQuad->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAT(&atQuad->elem) == true) {
|
||||
return;
|
||||
}
|
||||
if (CollisionCheck_SkipElementBump(&acQuad->elem) == true) {
|
||||
if (CollisionCheck_IsElementNotAC(&acQuad->elem) == true) {
|
||||
return;
|
||||
}
|
||||
if (CollisionCheck_NoSharedFlags(&atQuad->elem, &acQuad->elem) == true) {
|
||||
|
@ -2522,14 +2518,14 @@ void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCh
|
|||
ColliderJntSphElement* jntSphElem;
|
||||
|
||||
for (jntSphElem = jntSph->elements; jntSphElem < jntSph->elements + jntSph->count; jntSphElem++) {
|
||||
if ((jntSphElem->base.bumperFlags & BUMP_DRAW_HITMARK) && (jntSphElem->base.acHitElem != NULL) &&
|
||||
!(jntSphElem->base.acHitElem->toucherFlags & TOUCH_DREW_HITMARK)) {
|
||||
if ((jntSphElem->base.acElemFlags & ACELEM_DRAW_HITMARK) && (jntSphElem->base.acHitElem != NULL) &&
|
||||
!(jntSphElem->base.acHitElem->atElemFlags & ATELEM_DREW_HITMARK)) {
|
||||
Vec3f hitPos;
|
||||
|
||||
Math_Vec3s_ToVec3f(&hitPos, &jntSphElem->base.bumper.hitPos);
|
||||
Math_Vec3s_ToVec3f(&hitPos, &jntSphElem->base.acDmgInfo.hitPos);
|
||||
CollisionCheck_HitEffects(play, jntSphElem->base.acHit, jntSphElem->base.acHitElem, &jntSph->base,
|
||||
&jntSphElem->base, &hitPos);
|
||||
jntSphElem->base.acHitElem->toucherFlags |= TOUCH_DREW_HITMARK;
|
||||
jntSphElem->base.acHitElem->atElemFlags |= ATELEM_DREW_HITMARK;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -2538,13 +2534,13 @@ void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCh
|
|||
void CollisionCheck_SetCylHitFX(PlayState* play, CollisionCheckContext* colChkCtx, Collider* col) {
|
||||
ColliderCylinder* cyl = (ColliderCylinder*)col;
|
||||
|
||||
if ((cyl->elem.bumperFlags & BUMP_DRAW_HITMARK) && (cyl->elem.acHitElem != NULL) &&
|
||||
!(cyl->elem.acHitElem->toucherFlags & TOUCH_DREW_HITMARK)) {
|
||||
if ((cyl->elem.acElemFlags & ACELEM_DRAW_HITMARK) && (cyl->elem.acHitElem != NULL) &&
|
||||
!(cyl->elem.acHitElem->atElemFlags & ATELEM_DREW_HITMARK)) {
|
||||
Vec3f hitPos;
|
||||
|
||||
Math_Vec3s_ToVec3f(&hitPos, &cyl->elem.bumper.hitPos);
|
||||
Math_Vec3s_ToVec3f(&hitPos, &cyl->elem.acDmgInfo.hitPos);
|
||||
CollisionCheck_HitEffects(play, cyl->elem.acHit, cyl->elem.acHitElem, &cyl->base, &cyl->elem, &hitPos);
|
||||
cyl->elem.acHitElem->toucherFlags |= TOUCH_DREW_HITMARK;
|
||||
cyl->elem.acHitElem->atElemFlags |= ATELEM_DREW_HITMARK;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2553,14 +2549,14 @@ void CollisionCheck_SetTrisHitFX(PlayState* play, CollisionCheckContext* colChkC
|
|||
ColliderTrisElement* trisElem;
|
||||
|
||||
for (trisElem = tris->elements; trisElem < tris->elements + tris->count; trisElem++) {
|
||||
if ((trisElem->base.bumperFlags & BUMP_DRAW_HITMARK) && (trisElem->base.acHitElem != NULL) &&
|
||||
!(trisElem->base.acHitElem->toucherFlags & TOUCH_DREW_HITMARK)) {
|
||||
if ((trisElem->base.acElemFlags & ACELEM_DRAW_HITMARK) && (trisElem->base.acHitElem != NULL) &&
|
||||
!(trisElem->base.acHitElem->atElemFlags & ATELEM_DREW_HITMARK)) {
|
||||
Vec3f hitPos;
|
||||
|
||||
Math_Vec3s_ToVec3f(&hitPos, &trisElem->base.bumper.hitPos);
|
||||
Math_Vec3s_ToVec3f(&hitPos, &trisElem->base.acDmgInfo.hitPos);
|
||||
CollisionCheck_HitEffects(play, trisElem->base.acHit, trisElem->base.acHitElem, &tris->base,
|
||||
&trisElem->base, &hitPos);
|
||||
trisElem->base.acHitElem->toucherFlags |= TOUCH_DREW_HITMARK;
|
||||
trisElem->base.acHitElem->atElemFlags |= ATELEM_DREW_HITMARK;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -2570,11 +2566,11 @@ void CollisionCheck_SetQuadHitFX(PlayState* play, CollisionCheckContext* colChkC
|
|||
ColliderQuad* quad = (ColliderQuad*)col;
|
||||
Vec3f hitPos;
|
||||
|
||||
if ((quad->elem.bumperFlags & BUMP_DRAW_HITMARK) && (quad->elem.acHitElem != NULL) &&
|
||||
!(quad->elem.acHitElem->toucherFlags & TOUCH_DREW_HITMARK)) {
|
||||
Math_Vec3s_ToVec3f(&hitPos, &quad->elem.bumper.hitPos);
|
||||
if ((quad->elem.acElemFlags & ACELEM_DRAW_HITMARK) && (quad->elem.acHitElem != NULL) &&
|
||||
!(quad->elem.acHitElem->atElemFlags & ATELEM_DREW_HITMARK)) {
|
||||
Math_Vec3s_ToVec3f(&hitPos, &quad->elem.acDmgInfo.hitPos);
|
||||
CollisionCheck_HitEffects(play, quad->elem.acHit, quad->elem.acHitElem, &quad->base, &quad->elem, &hitPos);
|
||||
quad->elem.acHitElem->toucherFlags |= TOUCH_DREW_HITMARK;
|
||||
quad->elem.acHitElem->atElemFlags |= ATELEM_DREW_HITMARK;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2661,7 +2657,7 @@ void CollisionCheck_AC(PlayState* play, CollisionCheckContext* colChkCtx, Collid
|
|||
* Iterates through all AT colliders, testing them for AC collisions with each AC collider, setting the info regarding
|
||||
* the collision for each AC and AT collider that collided. Then spawns hitmarks and plays sound effects for each
|
||||
* successful collision. To collide, an AT collider must share a type (AC_TYPE_PLAYER, AC_TYPE_ENEMY, or AC_TYPE_OTHER)
|
||||
* with the AC collider and the toucher and bumper elements that overlapped must share a dmgFlag.
|
||||
* with the AC collider and the AT and AC elements that overlapped must share a dmgFlag.
|
||||
*/
|
||||
void CollisionCheck_AT(PlayState* play, CollisionCheckContext* colChkCtx) {
|
||||
Collider** atColP;
|
||||
|
@ -3052,20 +3048,20 @@ void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colChkCt
|
|||
if (col->actor == NULL || !(col->acFlags & AC_HIT)) {
|
||||
return;
|
||||
}
|
||||
if (!(elem->bumperFlags & BUMP_HIT) || elem->bumperFlags & BUMP_NO_DAMAGE) {
|
||||
if (!(elem->acElemFlags & ACELEM_HIT) || elem->acElemFlags & ACELEM_NO_DAMAGE) {
|
||||
return;
|
||||
}
|
||||
|
||||
ASSERT(elem->acHitElem != NULL, "pclobj_elem->ac_hit_elem != NULL", "../z_collision_check.c", 6493);
|
||||
tbl = col->actor->colChkInfo.damageTable;
|
||||
if (tbl == NULL) {
|
||||
damage = (f32)elem->acHitElem->toucher.damage - elem->bumper.defense;
|
||||
damage = (f32)elem->acHitElem->atDmgInfo.damage - elem->acDmgInfo.defense;
|
||||
if (damage < 0) {
|
||||
damage = 0;
|
||||
}
|
||||
} else {
|
||||
s32 i;
|
||||
u32 flags = elem->acHitElem->toucher.dmgFlags;
|
||||
u32 flags = elem->acHitElem->atDmgInfo.dmgFlags;
|
||||
|
||||
for (i = 0; i < 32; i++, flags >>= 1) {
|
||||
if (flags == 1) {
|
||||
|
|
|
@ -2204,7 +2204,8 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
|
|||
|
||||
void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx) {
|
||||
if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
|
||||
if (OOT_DEBUG && BREG(0) != 0) {
|
||||
#if OOT_DEBUG
|
||||
if (BREG(0) != 0) {
|
||||
Gfx* displayList;
|
||||
Gfx* prevDisplayList;
|
||||
|
||||
|
@ -2218,8 +2219,11 @@ void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx) {
|
|||
Gfx_Close(prevDisplayList, displayList);
|
||||
POLY_OPA_DISP = displayList;
|
||||
|
||||
if (1) {}
|
||||
CLOSE_DISPS(play->state.gfxCtx, "../z_demo.c", 4108);
|
||||
}
|
||||
#endif
|
||||
|
||||
csCtx->curFrame++;
|
||||
|
||||
if (OOT_DEBUG && R_USE_DEBUG_CUTSCENE) {
|
||||
|
|
|
@ -12,7 +12,8 @@ void EffectSs_InitInfo(PlayState* play, s32 tableSize) {
|
|||
for (i = 0; i < ARRAY_COUNT(gEffectSsOverlayTable); i++) {
|
||||
overlay = &gEffectSsOverlayTable[i];
|
||||
PRINTF("effect index %3d:size=%6dbyte romsize=%6dbyte\n", i,
|
||||
(uintptr_t)overlay->vramEnd - (uintptr_t)overlay->vramStart, overlay->vromEnd - overlay->vromStart);
|
||||
(uintptr_t)overlay->vramEnd - (uintptr_t)overlay->vramStart,
|
||||
overlay->file.vromEnd - overlay->file.vromStart);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -205,13 +206,13 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams) {
|
|||
return;
|
||||
}
|
||||
|
||||
Overlay_Load(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd,
|
||||
overlayEntry->loadedRamAddr);
|
||||
Overlay_Load(overlayEntry->file.vromStart, overlayEntry->file.vromEnd, overlayEntry->vramStart,
|
||||
overlayEntry->vramEnd, overlayEntry->loadedRamAddr);
|
||||
|
||||
PRINTF(VT_FGCOL(GREEN));
|
||||
PRINTF("EFFECT SS OVL:SegRom %08x %08x, Seg %08x %08x, RamStart %08x, type: %d\n", overlayEntry->vromStart,
|
||||
overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd, overlayEntry->loadedRamAddr,
|
||||
type);
|
||||
PRINTF("EFFECT SS OVL:SegRom %08x %08x, Seg %08x %08x, RamStart %08x, type: %d\n",
|
||||
overlayEntry->file.vromStart, overlayEntry->file.vromEnd, overlayEntry->vramStart,
|
||||
overlayEntry->vramEnd, overlayEntry->loadedRamAddr, type);
|
||||
PRINTF(VT_RST);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,18 +19,15 @@
|
|||
#undef DEFINE_EFFECT_SS_UNSET
|
||||
|
||||
// Effect SS Overlay Table definition
|
||||
#define DEFINE_EFFECT_SS(name, _1) \
|
||||
{ \
|
||||
(uintptr_t)_ovl_##name##SegmentRomStart, \
|
||||
(uintptr_t)_ovl_##name##SegmentRomEnd, \
|
||||
_ovl_##name##SegmentStart, \
|
||||
_ovl_##name##SegmentEnd, \
|
||||
NULL, \
|
||||
&name##_InitVars, \
|
||||
1, \
|
||||
#define DEFINE_EFFECT_SS(name, _1) \
|
||||
{ \
|
||||
ROM_FILE(ovl_##name), _ovl_##name##SegmentStart, _ovl_##name##SegmentEnd, NULL, &name##_InitVars, 1, \
|
||||
},
|
||||
|
||||
#define DEFINE_EFFECT_SS_UNSET(_0) { 0 },
|
||||
#define DEFINE_EFFECT_SS_UNSET(_0) \
|
||||
{ \
|
||||
ROM_FILE_UNSET, NULL, NULL, NULL, NULL, 0, \
|
||||
},
|
||||
|
||||
EffectSsOverlay gEffectSsOverlayTable[] = {
|
||||
#include "tables/effect_ss_table.h"
|
||||
|
|
|
@ -45,8 +45,8 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
ELEMTYPE_UNK2,
|
||||
{ 0x00000000, 0x00, 0x00 },
|
||||
{ 0xFFCFFFFF, 0x00, 0x00 },
|
||||
TOUCH_NONE,
|
||||
BUMP_ON,
|
||||
ATELEM_NONE,
|
||||
ACELEM_ON,
|
||||
OCELEM_ON,
|
||||
},
|
||||
{ 25, 60, 0, { 0, 0, 0 } },
|
||||
|
|
|
@ -45,8 +45,8 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
ELEMTYPE_UNK0,
|
||||
{ 0x00000000, 0x00, 0x00 },
|
||||
{ 0x00000010, 0x00, 0x00 },
|
||||
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||
BUMP_ON,
|
||||
ATELEM_NONE | ATELEM_SFX_NORMAL,
|
||||
ACELEM_ON,
|
||||
OCELEM_NONE,
|
||||
},
|
||||
{ 10, 30, 0, { 0, 0, 0 } },
|
||||
|
|
|
@ -10,22 +10,26 @@
|
|||
#undef DEFINE_GAMESTATE_INTERNAL
|
||||
|
||||
// Gamestate Overlay Table definition
|
||||
#define DEFINE_GAMESTATE_INTERNAL(typeName, enumName) \
|
||||
{ NULL, 0, 0, NULL, NULL, NULL, typeName##_Init, typeName##_Destroy, NULL, NULL, 0, sizeof(typeName##State) },
|
||||
#define DEFINE_GAMESTATE_INTERNAL(typeName, enumName) \
|
||||
{ \
|
||||
NULL, ROM_FILE_UNSET, NULL, NULL, NULL, typeName##_Init, typeName##_Destroy, NULL, NULL, \
|
||||
0, sizeof(typeName##State), \
|
||||
},
|
||||
|
||||
#define DEFINE_GAMESTATE(typeName, enumName, name) \
|
||||
{ NULL, \
|
||||
(uintptr_t)_ovl_##name##SegmentRomStart, \
|
||||
(uintptr_t)_ovl_##name##SegmentRomEnd, \
|
||||
_ovl_##name##SegmentStart, \
|
||||
_ovl_##name##SegmentEnd, \
|
||||
NULL, \
|
||||
typeName##_Init, \
|
||||
typeName##_Destroy, \
|
||||
NULL, \
|
||||
NULL, \
|
||||
0, \
|
||||
sizeof(typeName##State) },
|
||||
{ \
|
||||
NULL, \
|
||||
ROM_FILE(ovl_##name), \
|
||||
_ovl_##name##SegmentStart, \
|
||||
_ovl_##name##SegmentEnd, \
|
||||
NULL, \
|
||||
typeName##_Init, \
|
||||
typeName##_Destroy, \
|
||||
NULL, \
|
||||
NULL, \
|
||||
0, \
|
||||
sizeof(typeName##State), \
|
||||
},
|
||||
|
||||
GameStateOverlay gGameStateOverlayTable[] = {
|
||||
#include "tables/gamestate_table.h"
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
#include "global.h"
|
||||
#include "terminal.h"
|
||||
|
||||
#define KALEIDO_OVERLAY(name, nameString) \
|
||||
{ \
|
||||
NULL, (uintptr_t)_ovl_##name##SegmentRomStart, (uintptr_t)_ovl_##name##SegmentRomEnd, \
|
||||
_ovl_##name##SegmentStart, _ovl_##name##SegmentEnd, 0, nameString, \
|
||||
}
|
||||
#define KALEIDO_OVERLAY(name, nameString) \
|
||||
{ NULL, ROM_FILE(ovl_##name), _ovl_##name##SegmentStart, _ovl_##name##SegmentEnd, 0, nameString, }
|
||||
|
||||
KaleidoMgrOverlay gKaleidoMgrOverlayTable[] = {
|
||||
KALEIDO_OVERLAY(kaleido_scope, "kaleido_scope"),
|
||||
|
@ -20,7 +17,7 @@ void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl) {
|
|||
LOG_UTILS_CHECK_NULL_POINTER("KaleidoArea_allocp", sKaleidoAreaPtr, "../z_kaleido_manager.c", 99);
|
||||
|
||||
ovl->loadedRamAddr = sKaleidoAreaPtr;
|
||||
Overlay_Load(ovl->vromStart, ovl->vromEnd, ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr);
|
||||
Overlay_Load(ovl->file.vromStart, ovl->file.vromEnd, ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr);
|
||||
|
||||
PRINTF(VT_FGCOL(GREEN));
|
||||
PRINTF("OVL(k):Seg:%08x-%08x Ram:%08x-%08x Off:%08x %s\n", ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr,
|
||||
|
|
|
@ -16,8 +16,7 @@ typedef struct {
|
|||
|
||||
typedef struct {
|
||||
/* 0x00 */ void* loadedRamAddr; // original name: "allocp"
|
||||
/* 0x04 */ uintptr_t vromStart;
|
||||
/* 0x08 */ uintptr_t vromEnd;
|
||||
/* 0x04 */ RomFile file;
|
||||
/* 0x0C */ void* vramStart;
|
||||
/* 0x10 */ void* vramEnd;
|
||||
/* 0x14 */ void* vramTable;
|
||||
|
@ -43,12 +42,7 @@ static MapMarkInfo sMapMarkInfoTable[] = {
|
|||
};
|
||||
|
||||
static MapMarkDataOverlay sMapMarkDataOvl = {
|
||||
NULL,
|
||||
(uintptr_t)_ovl_map_mark_dataSegmentRomStart,
|
||||
(uintptr_t)_ovl_map_mark_dataSegmentRomEnd,
|
||||
_ovl_map_mark_dataSegmentStart,
|
||||
_ovl_map_mark_dataSegmentEnd,
|
||||
gMapMarkDataTable,
|
||||
NULL, ROM_FILE(ovl_map_mark_data), _ovl_map_mark_dataSegmentStart, _ovl_map_mark_dataSegmentEnd, gMapMarkDataTable,
|
||||
};
|
||||
|
||||
static MapMarkData** sLoadedMarkDataTable;
|
||||
|
@ -60,7 +54,8 @@ void MapMark_Init(PlayState* play) {
|
|||
overlay->loadedRamAddr = GAME_STATE_ALLOC(&play->state, overlaySize, "../z_map_mark.c", 235);
|
||||
LOG_UTILS_CHECK_NULL_POINTER("dlftbl->allocp", overlay->loadedRamAddr, "../z_map_mark.c", 236);
|
||||
|
||||
Overlay_Load(overlay->vromStart, overlay->vromEnd, overlay->vramStart, overlay->vramEnd, overlay->loadedRamAddr);
|
||||
Overlay_Load(overlay->file.vromStart, overlay->file.vromEnd, overlay->vramStart, overlay->vramEnd,
|
||||
overlay->loadedRamAddr);
|
||||
|
||||
sLoadedMarkDataTable = gMapMarkDataTable;
|
||||
sLoadedMarkDataTable =
|
||||
|
|
|
@ -30,24 +30,28 @@ u16 sOcarinaSongBitFlags = 0; // ocarina bit flags
|
|||
MessageTableEntry sNesMessageEntryTable[] = {
|
||||
#define DEFINE_MESSAGE(textId, type, yPos, nesMessage, gerMessage, fraMessage) \
|
||||
{ textId, (_SHIFTL(type, 4, 8) | _SHIFTL(yPos, 0, 8)), _message_##textId##_nes },
|
||||
#define DEFINE_MESSAGE_FFFC
|
||||
#define DEFINE_MESSAGE_NES(textId, type, yPos, nesMessage) DEFINE_MESSAGE(textId, type, yPos, nesMessage, , )
|
||||
#include "assets/text/message_data.h"
|
||||
#undef DEFINE_MESSAGE_FFFC
|
||||
#undef DEFINE_MESSAGE
|
||||
#undef DEFINE_MESSAGE_NES
|
||||
{ 0xFFFF, 0, NULL },
|
||||
};
|
||||
|
||||
const char* sGerMessageEntryTable[] = {
|
||||
#define DEFINE_MESSAGE(textId, type, yPos, nesMessage, gerMessage, fraMessage) _message_##textId##_ger,
|
||||
#define DEFINE_MESSAGE_NES(textId, type, yPos, nesMessage)
|
||||
#include "assets/text/message_data.h"
|
||||
#undef DEFINE_MESSAGE
|
||||
#undef DEFINE_MESSAGE_NES
|
||||
NULL,
|
||||
};
|
||||
|
||||
const char* sFraMessageEntryTable[] = {
|
||||
#define DEFINE_MESSAGE(textId, type, yPos, nesMessage, gerMessage, fraMessage) _message_##textId##_fra,
|
||||
#define DEFINE_MESSAGE_NES(textId, type, yPos, nesMessage)
|
||||
#include "assets/text/message_data.h"
|
||||
#undef DEFINE_MESSAGE
|
||||
#undef DEFINE_MESSAGE_NES
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue