macros in collision.c

This commit is contained in:
theo3 2022-03-30 23:44:03 -07:00
parent 76ca88de8f
commit 7d133d932c
2 changed files with 56 additions and 23 deletions

View File

@ -126,6 +126,34 @@ enum PlayerFlags {
PL_CLIMBING = 0x20000000, PL_CLIMBING = 0x20000000,
}; };
enum PlayerItemId {
PL_ITEM_NONE,
PL_ITEM_SWORD,
PL_ITEM_BOMB,
PL_ITEM_BOOMERANG,
PL_ITEM_BOW,
PL_ITEM_SHIELD,
PL_ITEM_LANTERN,
PL_ITEM_NULLED,
PL_ITEM_GUSTJAR,
PL_ITEM_PACCI_CANE,
PL_ITEM_A,
PL_ITEM_B,
PL_ITEM_DASH_SWORD,
PL_ITEM_CELL_OVERWRITE_SET,
PL_ITEM_BOTTLE,
PL_ITEM_SWORDBEAM,
PL_ITEM_GUST,
PL_ITEM_GUSTBIG,
PL_ITEM_PACCI_CANE_PROJECTILE,
PL_ITEM_HELD_OBJECT,
PL_ITEM_SPIRAL_BEAM,
PL_ITEM_FIREROD_PROJECTILE,
PL_ITEM_SWORDBEAM2,
PL_ITEM_NULLED2,
PL_ITEM_CELL_OVERWRITE_SET2,
};
enum SurfaceType { enum SurfaceType {
SURFACE_NORMAL, SURFACE_NORMAL,
SURFACE_PIT, SURFACE_PIT,

View File

@ -370,8 +370,8 @@ s32 sub_08017B1C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) { s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
if ((tgt->gustJarState & 4) != 0) { if ((tgt->gustJarState & 4) != 0) {
if (tgt->gustJarTolerance) { if (tgt->gustJarTolerance) {
s32 x = tgt->gustJarTolerance = tgt->gustJarTolerance - gPlayerState.gustJarSpeed; tgt->gustJarTolerance = tgt->gustJarTolerance - gPlayerState.gustJarSpeed;
if (x << 24 <= 0) { if ((s8)tgt->gustJarTolerance <= 0) {
tgt->gustJarTolerance = 0; tgt->gustJarTolerance = 0;
tgt->subAction = 2; tgt->subAction = 2;
tgt->knockbackSpeed = 0; tgt->knockbackSpeed = 0;
@ -379,7 +379,7 @@ s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
} }
} else { } else {
tgt->subAction = 0; tgt->subAction = 0;
tgt->gustJarState |= 4u; tgt->gustJarState |= 4;
} }
if (tgt->iframes == 0) if (tgt->iframes == 0)
tgt->iframes = -1; tgt->iframes = -1;
@ -387,12 +387,12 @@ s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
} }
s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) { s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
if ((gPlayerState.flags & (PL_BUSY | PL_MINISH | PL_BURNING | 0x1000)) == 0) { if ((gPlayerState.flags & (PL_BUSY | PL_MINISH | PL_BURNING | PL_IN_MINECART)) == 0) {
Entity* e = CreateObject(OBJECT_42, 1, 0); Entity* e = CreateObject(OBJECT_42, 1, 0);
if (e != NULL) { if (e != NULL) {
e->child = org; e->child = org;
gPlayerState.flags |= PL_BURNING; gPlayerState.flags |= PL_BURNING;
org->animationState = (direction ^ 0x10) >> 2; org->animationState = Direction8ToAnimationState(DirectionTurnAround(direction));
} }
} }
tgt->damage = 4; tgt->damage = 4;
@ -406,7 +406,8 @@ s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
} }
s32 sub_08017C40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) { s32 sub_08017C40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
if ((gPlayerState.flags & (PL_BUSY | PL_MINISH | PL_FROZEN | 0x1000)) == 0 && gPlayerState.queued_action == 0) { if ((gPlayerState.flags & (PL_BUSY | PL_MINISH | PL_FROZEN | PL_IN_MINECART)) == 0 &&
gPlayerState.queued_action == 0) {
if (org->action == 1 || org->action == 24) { if (org->action == 1 || org->action == 24) {
tgt->damage = 4; tgt->damage = 4;
org->health = sub_08017874(org, tgt); org->health = sub_08017874(org, tgt);
@ -423,8 +424,8 @@ s32 sub_08017C40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
} }
s32 sub_08017CBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) { s32 sub_08017CBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
direction = ((direction ^ 0x10) - 0xc) & 0x1f; direction = DirectionNormalize(DirectionTurnAround(direction) - 0xc);
if (((-direction + tgt->direction) & 0x1f) < 0x19) { if (DirectionNormalize(-direction + tgt->direction) < 0x19) {
org->iframes = -12; org->iframes = -12;
tgt->iframes = -12; tgt->iframes = -12;
sub_08017940(org, tgt); sub_08017940(org, tgt);
@ -455,7 +456,8 @@ s32 sub_08017D6C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
u32 y; u32 y;
ColSettings* p; ColSettings* p;
if (((-(((direction ^ 0x10) - 5) & 0x1f) + (tgt->animationState << 3)) & 0x1f) >= 0xb) { if (DirectionNormalize(-DirectionNormalize((DirectionTurnAround(direction) - 5)) +
DirectionFromAnimationState(tgt->animationState)) >= 0xb) {
x = org->hurtType; x = org->hurtType;
y = 0xac2; y = 0xac2;
} else { } else {
@ -510,7 +512,7 @@ s32 sub_08017EB0(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
gPlayerEntity.knockbackDuration = 12; gPlayerEntity.knockbackDuration = 12;
gPlayerEntity.iframes = 16; gPlayerEntity.iframes = 16;
gPlayerEntity.knockbackSpeed = 384; gPlayerEntity.knockbackSpeed = 384;
} else if (org->kind == PLAYER_ITEM && org->id == 5) { } else if (org->kind == PLAYER_ITEM && org->id == PL_ITEM_SHIELD) {
org->knockbackDuration = 8; org->knockbackDuration = 8;
org->iframes = -6; org->iframes = -6;
org->knockbackSpeed = 384; org->knockbackSpeed = 384;
@ -569,7 +571,8 @@ s32 sub_0801802C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
kind = org->kind; kind = org->kind;
if (kind == 1) { if (kind == 1) {
if (PlayerCanBeMoved()) { if (PlayerCanBeMoved()) {
if (((((direction ^ 0x10) - 4 * tgt->animationState + 5) & 0x1F)) > 0xA) { if (((DirectionNormalize(DirectionTurnAround(direction) -
Direction8FromAnimationState(tgt->animationState) + 5))) > 0xA) {
x = 0x11aa; x = 0x11aa;
return sub_08018308(org, tgt, direction, &gCollisionMtx[x + org->hurtType]); return sub_08018308(org, tgt, direction, &gCollisionMtx[x + org->hurtType]);
} else { } else {
@ -578,7 +581,8 @@ s32 sub_0801802C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
} }
} }
} else if (kind == 8) { } else if (kind == 8) {
if ((((org->direction ^ 0x10) - 4 * tgt->animationState + 5) & 0x1F) <= 0xA) { if (DirectionNormalize(
(DirectionTurnAround(org->direction) - Direction8FromAnimationState(tgt->animationState) + 5)) <= 0xA) {
org->health = 0; org->health = 0;
sub_080180BC(org, tgt); sub_080180BC(org, tgt);
return 1; return 1;
@ -689,16 +693,17 @@ s32 sub_080182A8(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
} }
s32 sub_08018308(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) { s32 sub_08018308(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
u32 temp = 0; u32 confused = 0;
if (tgt->confusedTime && tgt->kind == ENEMY && org == &gPlayerEntity) { if (tgt->confusedTime && tgt->kind == ENEMY && org == &gPlayerEntity) {
sub_08004484(tgt, org); sub_08004484(tgt, org);
temp = 1; confused = 1;
} }
if ((org->kind == PLAYER_ITEM && org->id == 0x5) && if ((org->kind == PLAYER_ITEM && org->id == PL_ITEM_SHIELD) &&
gPlayerEntity.animationState == ((((direction + 4) & 0x18) >> 2) ^ 4)) { gPlayerEntity.animationState ==
AnimationStateFlip180(Direction8ToAnimationState(DirectionRoundUp(direction)))) {
return 0; return 0;
} }
if (!temp) { if (!confused) {
u32 tmp2; u32 tmp2;
org->knockbackSpeed = 16 * settings->orgKnockbackSpeed; org->knockbackSpeed = 16 * settings->orgKnockbackSpeed;
org->iframes = settings->orgIframes; org->iframes = settings->orgIframes;
@ -716,7 +721,7 @@ s32 sub_08018308(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
if (settings->tgtIframes == 0) if (settings->tgtIframes == 0)
tgt->iframes = -1; tgt->iframes = -1;
tgt->knockbackDuration = settings->tgtKnockbackDuration; tgt->knockbackDuration = settings->tgtKnockbackDuration;
tmp2 &= org->damage = settings->orgDamage; tmp2 &= (org->damage = settings->orgDamage);
if (tmp2 != 0) if (tmp2 != 0)
tgt->health = sub_08017874(tgt, org); tgt->health = sub_08017874(tgt, org);
if (settings->tgtConfusedTime > tgt->confusedTime) if (settings->tgtConfusedTime > tgt->confusedTime)
@ -740,23 +745,23 @@ s32 sub_08018308(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
} }
} }
if (org->kind == PLAYER_ITEM) { if (org->kind == PLAYER_ITEM) {
if (org->id == 1) { if (org->id == PL_ITEM_SWORD) {
if (settings->orgDamage) { if (settings->orgDamage) {
sub_080179EC(org, tgt); sub_080179EC(org, tgt);
} }
} else if (org->id == 4) { } else if (org->id == PL_ITEM_BOW) {
if (org->damage || (settings->_a & 8)) { if (org->damage || (settings->_a & 8)) {
sub_08017A90(org, tgt); sub_08017A90(org, tgt);
} }
} else if (org->id == 3) { } else if (org->id == PL_ITEM_BOOMERANG) {
if (settings->tgtConfusedTime) { if (settings->tgtConfusedTime) {
SoundReqClipped(tgt, SFX_HIT); SoundReqClipped(tgt, SFX_HIT);
} }
} else if (org->id == 5) { } else if (org->id == PL_ITEM_SHIELD) {
gPlayerEntity.iframes = 0x80; gPlayerEntity.iframes = 0x80;
} }
} }
if (tgt->kind == PLAYER_ITEM && org->id == 5) { if (tgt->kind == PLAYER_ITEM && org->id == PL_ITEM_SHIELD) {
gPlayerEntity.iframes = 0x80; gPlayerEntity.iframes = 0x80;
} }
return 1; return 1;