Merge branch 'master' into tilemap-docs

This commit is contained in:
octorock
2024-01-06 12:26:39 +01:00
226 changed files with 2058 additions and 1984 deletions
+12 -12
View File
@@ -208,7 +208,7 @@ u32 UpdatePlayerCollision(void) {
((gPlayerState.sword_state & 0x10) != 0)) ||
((sub_080806BC(gPlayerEntity.base.x.HALF.HI - gRoomControls.origin_x,
gPlayerEntity.base.y.HALF.HI - gRoomControls.origin_y, index, 5) == 0 &&
(((gPlayerState.heldObject != 0 || ((gPlayerState.field_0x1c & 0xf) != 0)) ||
(((gPlayerState.heldObject != 0 || ((gPlayerState.gustJarState & 0xf) != 0)) ||
(sub_0807BD14(&gPlayerEntity.base, index) == 0)))))) {
return 3;
}
@@ -640,7 +640,7 @@ bool32 sub_0801A370(MapLayer* mapLayer, u32 position) {
if (!sub_0801A4F8()) {
return FALSE;
}
topLayer = GetLayerByIndex(2);
topLayer = GetLayerByIndex(LAYER_TOP);
offset = gUnk_080B4488[gPlayerEntity.base.animationState >> 1];
pos = position + offset;
tileType = GetMetaTileType(pos, gPlayerEntity.base.collisionLayer);
@@ -932,7 +932,7 @@ u32 sub_0801A8D0(Entity* this, u32 param_2) {
bool32 sub_0801A980(void) {
u16 tileType;
const s16* ptr;
GetLayerByIndex(gPlayerEntity.base.collisionLayer);
GetLayerByIndex(gPlayerEntity.base.collisionLayer); // TODO result unused?
ptr = &gUnk_080B44A8[gPlayerEntity.base.animationState & 6];
tileType =
GetMetaTileType(COORD_TO_TILE_OFFSET(&gPlayerEntity.base, -ptr[0], -ptr[1]), gPlayerEntity.base.collisionLayer);
@@ -1009,7 +1009,7 @@ bool32 sub_0801AA58(Entity* this, u32 param_2, u32 param_3) {
void RenderMapLayerToTileMap(u16* tileMap, MapLayer* mapLayer) {
u16* tiles;
u16* mapData;
u16* mapDataClone;
u16* mapDataOriginal;
u16 metaTileY;
u16 metaTileX;
u32 metaTilePositionAndLayer;
@@ -1023,7 +1023,7 @@ void RenderMapLayerToTileMap(u16* tileMap, MapLayer* mapLayer) {
layerIndex = 2;
}
metaTilePositionAndLayer = layerIndex << 0xc;
mapDataClone = mapLayer->mapDataClone;
mapDataOriginal = mapLayer->mapDataOriginal;
mapData = mapLayer->mapData;
for (metaTileY = 0; metaTileY < 0x40; metaTileY++) {
@@ -1033,7 +1033,7 @@ void RenderMapLayerToTileMap(u16* tileMap, MapLayer* mapLayer) {
if (mapData[0] < 0x4000) {
metaTileSetIndex = mapData[0] * 4;
} else {
metaTileSetIndex = GetMetaTileSetIndexForSpecialTile(metaTilePositionAndLayer, mapDataClone[0]);
metaTileSetIndex = GetMetaTileSetIndexForSpecialTile(metaTilePositionAndLayer, mapDataOriginal[0]);
}
tiles = mapLayer->metatiles + metaTileSetIndex;
tileMap[0] = tiles[0];
@@ -1045,7 +1045,7 @@ void RenderMapLayerToTileMap(u16* tileMap, MapLayer* mapLayer) {
if (mapData[1] < 0x4000) {
metaTileSetIndex = mapData[1] * 4;
} else {
metaTileSetIndex = GetMetaTileSetIndexForSpecialTile(metaTilePositionAndLayer + 1, mapDataClone[1]);
metaTileSetIndex = GetMetaTileSetIndexForSpecialTile(metaTilePositionAndLayer + 1, mapDataOriginal[1]);
}
tiles = mapLayer->metatiles + metaTileSetIndex;
tileMap[0] = tiles[0];
@@ -1057,7 +1057,7 @@ void RenderMapLayerToTileMap(u16* tileMap, MapLayer* mapLayer) {
if (mapData[2] < 0x4000) {
metaTileSetIndex = mapData[2] * 4;
} else {
metaTileSetIndex = GetMetaTileSetIndexForSpecialTile(metaTilePositionAndLayer + 2, mapDataClone[2]);
metaTileSetIndex = GetMetaTileSetIndexForSpecialTile(metaTilePositionAndLayer + 2, mapDataOriginal[2]);
}
tiles = mapLayer->metatiles + metaTileSetIndex;
tileMap[0] = tiles[0];
@@ -1069,7 +1069,7 @@ void RenderMapLayerToTileMap(u16* tileMap, MapLayer* mapLayer) {
if (mapData[3] < 0x4000) {
metaTileSetIndex = mapData[3] * 4;
} else {
metaTileSetIndex = GetMetaTileSetIndexForSpecialTile(metaTilePositionAndLayer + 3, mapDataClone[3]);
metaTileSetIndex = GetMetaTileSetIndexForSpecialTile(metaTilePositionAndLayer + 3, mapDataOriginal[3]);
}
tiles = mapLayer->metatiles + metaTileSetIndex;
tileMap[0] = tiles[0];
@@ -1079,7 +1079,7 @@ void RenderMapLayerToTileMap(u16* tileMap, MapLayer* mapLayer) {
tileMap += 2;
mapData += 4;
mapDataClone += 4;
mapDataOriginal += 4;
metaTilePositionAndLayer = (u16)(metaTilePositionAndLayer + 4);
}
tileMap = tileMap + 0x80;
@@ -1229,7 +1229,7 @@ void SetMultipleTiles(const TileData* tileData, u32 basePosition, u32 layer) {
}
// Add a new entry at the end of gMetaTilesForSpecialTiles
void StoreMetaTileForSpecialTile(u32 metaTileIndex, u32 metaTilePos, u32 layer) {
void RegisterInteractTile(u32 metaTileIndex, u32 metaTilePos, u32 layer) {
u32 index;
if ((metaTileIndex < 0x4000) && (gRoomTransition.field30 == 0)) {
index = gRoomVars.tileEntityCount;
@@ -1241,7 +1241,7 @@ void StoreMetaTileForSpecialTile(u32 metaTileIndex, u32 metaTilePos, u32 layer)
}
}
void DeleteLoadedTileEntity(u32 metaTilePos, s32 layer) {
void UnregisterInteractTile(u32 metaTilePos, s32 layer) {
u32 count;
SpecialTileEntry* ptr;
u32 metaTilePosAndLayer;
+15 -14
View File
@@ -1,5 +1,6 @@
#include "global.h"
#include "room.h"
#include "enemy.h"
extern void MemFill32(u32, void*, u32);
@@ -8,35 +9,35 @@ RoomMemory* AddCurrentRoom(void);
void ClearRoomMemory(void) {
MemFill32(0xFFFFFFFF, gRoomMemory, 0x40);
gRoomMemoryPtr = gRoomMemory;
gCurrentRoomMemory = gRoomMemory;
}
void SetRoomTrackerFlag(GenericEntity* ent) {
u8 field_0x6c = ent->field_0x6c.HALF.LO;
if (field_0x6c & 0x80) {
gRoomMemoryPtr->flags |= 1 << (field_0x6c & 0x1f);
void EnemyDisableRespawn(Enemy* ent) {
u8 idx = ent->idx;
if (idx & 0x80) {
gCurrentRoomMemory->enemyBits |= 1 << (idx & 0x1f);
}
}
bool32 IsRoomTrackerFlagSet(u32 arg0) {
u32 bitmask = gRoomMemoryPtr->flags >> arg0;
u32 EnemyEnableRespawn(u32 enemyIdx) {
u32 bitmask = gCurrentRoomMemory->enemyBits >> enemyIdx;
u32 output = 1;
output &= ~bitmask;
return output;
}
void UpdateRoomTracker(void) {
gRoomMemoryPtr = gRoomMemory;
gCurrentRoomMemory = gRoomMemory;
do {
if (gRoomMemoryPtr->area == gRoomControls.area && gRoomMemoryPtr->room == gRoomControls.room) {
UpdateCurrentRoom(gRoomMemoryPtr);
if (gCurrentRoomMemory->area == gRoomControls.area && gCurrentRoomMemory->room == gRoomControls.room) {
UpdateCurrentRoom(gCurrentRoomMemory);
return;
}
gRoomMemoryPtr++;
gCurrentRoomMemory++;
} while (gRoomMemoryPtr < gRoomMemory + 8);
gRoomMemoryPtr = AddCurrentRoom();
} while (gCurrentRoomMemory < gRoomMemory + 8);
gCurrentRoomMemory = AddCurrentRoom();
}
RoomMemory* AddCurrentRoom(void) {
@@ -54,7 +55,7 @@ RoomMemory* AddCurrentRoom(void) {
rm->room = gRoomControls.room;
rm->unk_02 = 0xFFFF;
rm->flags = 0;
rm->enemyBits = 0;
UpdateCurrentRoom(rm);
+4 -24
View File
@@ -10,8 +10,6 @@
extern Entity* gUnk_020000B0;
extern Entity* (*const gUnk_080D3BE8[])(void);
extern void ReplaceMonitoredEntity(Entity*, Entity*);
Entity* sub_08049DF4(u32 arg0) {
if (gUnk_020000B0 != NULL) {
return gUnk_020000B0;
@@ -20,7 +18,7 @@ Entity* sub_08049DF4(u32 arg0) {
}
Entity* sub_08049E18(void) {
if ((gPlayerState.field_0x3c == 0) &&
if ((gPlayerState.killed == 0) &&
!(gPlayerState.flags &
(PL_BUSY | PL_DROWNING | PL_CAPTURED | PL_USE_PORTAL | PL_HIDDEN | PL_DISABLE_ITEMS | PL_FALLING | PL_FROZEN |
PL_IN_MINECART | PL_PIT_IS_EXIT | PL_MOLDWORM_CAPTURED | PL_IN_HOLE | PL_CONVEYOR_PUSHED | PL_CLIMBING))) {
@@ -31,7 +29,7 @@ Entity* sub_08049E18(void) {
}
Entity* sub_08049E4C(void) {
if ((gPlayerState.field_0x3c == 0) &&
if ((gPlayerState.killed == 0) &&
!(gPlayerState.flags & (PL_BUSY | PL_DROWNING | PL_CAPTURED | PL_USE_PORTAL | PL_HIDDEN | PL_MINISH |
PL_DISABLE_ITEMS | PL_FALLING | PL_FROZEN | PL_IN_MINECART | PL_PIT_IS_EXIT |
PL_MOLDWORM_CAPTURED | PL_IN_HOLE | PL_CONVEYOR_PUSHED | PL_CLIMBING))) {
@@ -42,7 +40,7 @@ Entity* sub_08049E4C(void) {
}
Entity* sub_08049E80(void) {
if ((gPlayerState.field_0x3c != 0) || !(gPlayerState.flags & PL_MINISH)) {
if ((gPlayerState.killed != 0) || !(gPlayerState.flags & PL_MINISH)) {
return NULL;
}
gUnk_020000B0 = &gPlayerEntity.base;
@@ -50,7 +48,7 @@ Entity* sub_08049E80(void) {
}
Entity* sub_08049EB0(void) {
if ((gPlayerState.field_0x3c == 0) &&
if ((gPlayerState.killed == 0) &&
!(gPlayerState.flags & (PL_MOLDWORM_CAPTURED | PL_DISABLE_ITEMS | PL_MINISH | PL_CAPTURED))) {
gUnk_020000B0 = &gPlayerEntity.base;
return &gPlayerEntity.base;
@@ -311,21 +309,3 @@ bool32 sub_0804A4BC(u8* from, u8* to, s32 step, u32 bitmask) {
return TRUE;
}
void sub_0804A4E4(Entity* entA, Entity* entB) {
GenericEntity* r5 = (GenericEntity*)entA;
GenericEntity* r6 = (GenericEntity*)entB;
r6->field_0x6c.HALF.HI = (r5->field_0x6c.HALF.HI & 0x40) | 4;
r6->field_0x6c.HALF.LO = r5->field_0x6c.HALF.LO;
r6->field_0x70.HALF.LO = r5->field_0x70.HALF.LO;
r6->field_0x70.HALF.HI = r5->field_0x70.HALF.HI;
r6->field_0x6e.HALF.LO = r5->field_0x6e.HALF.LO;
r6->field_0x6e.HALF.HI = r5->field_0x6e.HALF.HI;
CopyPositionAndSpriteOffset(&r5->base, &r6->base);
if (r5->field_0x6c.HALF.HI & 0x40) {
ReplaceMonitoredEntity(&r5->base, &r6->base);
}
}
+8 -8
View File
@@ -248,7 +248,7 @@ s32 CalculateDamage(Entity* org, Entity* tgt) {
}
health = org->health - damage;
if (org->kind == ENEMY) {
if ((((GenericEntity*)org)->field_0x6c.HALF.HI & 1) != 0)
if (((Enemy*)org)->enemyFlags & EM_FLAG_BOSS)
SoundReqClipped(org, SFX_BOSS_HIT);
else
SoundReqClipped(org, SFX_HIT);
@@ -372,7 +372,7 @@ CollisionResult CollisionNoOp(Entity* org, Entity* tgt, u32 direction, ColSettin
// target: item
CollisionResult CollisionGroundItem(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
COLLISION_OFF(tgt);
tgt->contactFlags = org->hurtType | 0x80;
tgt->contactFlags = org->hurtType | CONTACT_NOW;
if ((tgt->type == 0x5F || tgt->type == 0x60) && sub_08081420(tgt))
tgt->health = 0;
return RESULT_COLLISION_WITHOUT_SET;
@@ -392,7 +392,7 @@ CollisionResult sub_08017B1C(Entity* org, Entity* tgt, u32 direction, ColSetting
CollisionResult sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
if ((tgt->gustJarState & 4) != 0) {
if (tgt->gustJarTolerance) {
tgt->gustJarTolerance = tgt->gustJarTolerance - gPlayerState.gustJarSpeed;
tgt->gustJarTolerance = tgt->gustJarTolerance - gPlayerState.gustJarCharge;
if ((s8)tgt->gustJarTolerance <= 0) {
tgt->gustJarTolerance = 0;
tgt->subAction = 2;
@@ -504,7 +504,7 @@ CollisionResult sub_08017DD4(Entity* org, Entity* tgt, u32 direction, ColSetting
sub_08079D84();
org->iframes = 90;
} else {
gPlayerEntity.base.contactFlags = tgt->hurtType | 0x80;
gPlayerEntity.base.contactFlags = tgt->hurtType | CONTACT_NOW;
gPlayerEntity.base.iframes = 12;
gPlayerEntity.base.knockbackDuration = 16;
gPlayerEntity.base.knockbackDirection = DirectionTurnAround(direction);
@@ -581,7 +581,7 @@ CollisionResult sub_08017F40(Entity* org, Entity* tgt, u32 direction, ColSetting
org->health = 0;
}
} else if (tgt->kind == ENEMY && org == &gPlayerEntity.base) {
sub_08004484(tgt, org);
CalcCollisionStaticEntity(tgt, org);
}
return RESULT_NO_COLLISION;
}
@@ -671,14 +671,14 @@ CollisionResult sub_08018168(Entity* org, Entity* tgt, u32 direction, ColSetting
org->health = 0;
}
} else if ((tgt->kind == ENEMY) && (org == &gPlayerEntity.base)) {
sub_08004484(tgt, &gPlayerEntity.base);
CalcCollisionStaticEntity(tgt, &gPlayerEntity.base);
}
return RESULT_NO_COLLISION;
}
CollisionResult sub_08018228(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
if (org == &gPlayerEntity.base && PlayerCanBeMoved())
sub_08004484(tgt, org);
CalcCollisionStaticEntity(tgt, org);
return RESULT_NO_COLLISION;
}
@@ -717,7 +717,7 @@ CollisionResult sub_080182A8(Entity* org, Entity* tgt, u32 direction, ColSetting
CollisionResult CollisionDefault(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
u32 confused = 0;
if (tgt->confusedTime && tgt->kind == ENEMY && org == &gPlayerEntity.base) {
sub_08004484(tgt, org);
CalcCollisionStaticEntity(tgt, org);
confused = 1;
}
if ((org->kind == PLAYER_ITEM && org->id == PL_ITEM_SHIELD) &&
+6 -6
View File
@@ -210,15 +210,15 @@ static void StoreKeyInput(Input* input, u32 keyInput) {
u32 difference = keyInput & ~heldKeys;
input->newKeys = difference;
if (keyInput == heldKeys) {
if (--input->unk7 == 0) {
input->unk7 = 4;
input->unk4 = keyInput;
if (--input->menuScrollTimer == 0) {
input->menuScrollTimer = 4;
input->menuScrollKeys = keyInput;
} else {
input->unk4 = 0;
input->menuScrollKeys = 0;
}
} else {
input->unk7 = 20;
input->unk4 = difference;
input->menuScrollTimer = 20;
input->menuScrollKeys = difference;
}
input->heldKeys = keyInput;
}
-23
View File
@@ -1,23 +0,0 @@
#include "enemy.h"
/** Unsets bitfield 0x80 before calling GetNextFunction, so that the enemyFunction 1 is not called. */
void EnemyFunctionHandlerAfterCollision(Entity* entity, void (*const fntable[])()) {
u32 idx;
entity->contactFlags &= ~0x80;
idx = GetNextFunction(entity);
entity->contactFlags |= 0x80;
fntable[idx](entity);
}
Entity* CreateEnemy(u32 subtype, u32 form) {
Entity* enemy;
enemy = GetEmptyEntity();
if (enemy != NULL) {
enemy->kind = ENEMY;
enemy->id = subtype;
enemy->type = form;
AppendEntityToList(enemy, 4);
}
return enemy;
}
+1 -1
View File
@@ -73,7 +73,7 @@ void sub_0805FA98(void) {
MessageInitialize();
break;
default:
switch (gInput.unk4) {
switch (gInput.menuScrollKeys) {
case DPAD_LEFT:
iVar1 = -1;
break;
+4 -4
View File
@@ -81,7 +81,7 @@ void AcroBandit(AcroBanditEntity* this) {
gUnk_080012C8[index](super);
} else {
AcroBandit_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
}
@@ -96,7 +96,7 @@ void AcroBandit_OnTick(AcroBanditEntity* this) {
void AcroBandit_OnCollision(AcroBanditEntity* this) {
Entity* brother;
if (super->contactFlags != 0x80 && super->contactFlags != 0x81) {
if (super->contactFlags != CONTACT_NOW && super->contactFlags != (CONTACT_NOW | 0x1)) {
if (super->type == 1) {
if (super->action < 7 && super->knockbackDuration != 0) {
brother = super->child;
@@ -150,7 +150,7 @@ void AcroBandit_OnCollision(AcroBanditEntity* this) {
}
if (super->confusedTime)
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
EnemyFunctionHandlerAfterCollision(super, AcroBandit_Functions);
}
@@ -528,7 +528,7 @@ void AcroBandit_Type1Action6(AcroBanditEntity* this) {
void AcroBandit_Type1Action7(AcroBanditEntity* this) {
ProcessMovement2(super);
if (sub_080044EC(super, 0x2000) == 0)
if (BounceUpdate(super, Q_8_8(32.0)) == BOUNCE_DONE_ALL)
super->action = 8;
}
+5 -5
View File
@@ -85,7 +85,7 @@ void sub_08030150(ArmosEntity* this) {
void Armos(ArmosEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)&gUnk_080CE124);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
sub_08030150(this);
}
@@ -103,7 +103,7 @@ void sub_080301D4(ArmosEntity* this) {
sub_080309E8(this);
}
if (super->confusedTime != 0) {
Create0x68FX(super, 0x1c);
EnemyCreateFX(super, 0x1c);
}
this->unk_81 = super->health;
EnemyFunctionHandlerAfterCollision(super, gUnk_080CE124);
@@ -178,7 +178,7 @@ void sub_08030338(ArmosEntity* this) {
if (super->frame == 2) {
super->frame = 0;
if (this->unk_80 != 2) {
super->flags2 = 0xb;
super->collisionMask = 0xb;
super->hitType = 8;
super->hitbox = (Hitbox*)&gUnk_080FD2F0;
}
@@ -283,7 +283,7 @@ void sub_08030580(ArmosEntity* this) {
void sub_08030590(ArmosEntity* this) {
super->action = 5;
super->flags2 = 1;
super->collisionMask = 1;
super->hitType = 1;
super->hitbox = (Hitbox*)&gHitbox_15;
sub_080309C8(this, 5);
@@ -339,7 +339,7 @@ bool32 sub_080305BC(ArmosEntity* this) {
bool32 sub_08030650(ArmosEntity* this) {
if (super->type == 0) {
if (super->contactFlags == 0x80) {
if (super->contactFlags == CONTACT_NOW) {
return 1;
}
} else if (this->unk_80 != 2) {
+2 -2
View File
@@ -55,7 +55,7 @@ void BallChainSoldier_OnKnockback(BallChainSoldierEntity* this) {
}
void BallChainSoldier_OnDeath(BallChainSoldierEntity* this) {
CreateDeathFx(super, 0xff, 0x57);
EnemyCreateDeathFX((Enemy*)super, 0xff, 0x57);
}
void BallChainSoldier_OnGrabbed(BallChainSoldierEntity* this) {
@@ -64,7 +64,7 @@ void BallChainSoldier_OnGrabbed(BallChainSoldierEntity* this) {
void BallChainSoldier_Init(BallChainSoldierEntity* this) {
Entity* entity;
sub_0804A720(super);
entity = CreateProjectileWithParent(super, BALL_AND_CHAIN, 0);
entity = EnemyCreateProjectile(super, BALL_AND_CHAIN, 0);
if (entity == NULL)
return;
+4 -4
View File
@@ -35,7 +35,7 @@ void Beetle_OnTick(BeetleEntity* this) {
void Beetle_OnCollision(BeetleEntity* this) {
switch (super->contactFlags) {
case 0x80:
case CONTACT_NOW:
if (gPlayerState.framestate == PL_STATE_CLIMB) {
Beetle_OnTick(this);
} else {
@@ -50,7 +50,7 @@ void Beetle_OnCollision(BeetleEntity* this) {
InitializeAnimation(super, 6);
}
break;
case 0x93:
case CONTACT_NOW | 0x13:
Beetle_OnTick(this);
break;
}
@@ -70,7 +70,7 @@ void Beetle_OnDeath(BeetleEntity* this) {
entity->subtimer--;
super->parent = NULL;
}
CreateDeathFx(super, 0xf0, 0);
EnemyCreateDeathFX((Enemy*)super, 0xf0, 0);
}
}
@@ -120,7 +120,7 @@ void sub_080218CC(BeetleEntity* this) {
GetNextFrame(super);
if (super->frame & 1) {
ProcessMovement2(super);
if (sub_080044EC(super, 0x1c00) == 0)
if (BounceUpdate(super, Q_8_8(28.0)) == BOUNCE_DONE_ALL)
super->frameDuration = 1;
}
+2 -2
View File
@@ -38,7 +38,7 @@ void Bobomb_OnTick(BobombEntity* this) {
}
void Bobomb_OnCollision(BobombEntity* this) {
if (super->contactFlags & 0x80) {
if (super->contactFlags & CONTACT_NOW) {
switch (super->contactFlags & 0x7f) {
case 0:
case 1:
@@ -250,7 +250,7 @@ void sub_0802CAF8(BobombEntity* this) {
if (--super->timer == 0) {
sub_0802CBC4(this);
} else {
if (this->unk_81 && sub_080044EC(super, 0x2800) == 1) {
if (this->unk_81 && BounceUpdate(super, Q_8_8(40.0)) == BOUNCE_INIT_NEXT) {
EnqueueSFX(SFX_PLACE_OBJ);
}
sub_0802CC18(this);
+4 -4
View File
@@ -96,8 +96,8 @@ void sub_0802A8F4(BombPeahatEntity* this) {
}
void sub_0802A8FC(BombPeahatEntity* this) {
if ((gPlayerState.field_0x1c & 0xf) == 0) {
super->health = gPlayerState.field_0x1c & 0xf;
if ((gPlayerState.gustJarState & 0xf) == 0) {
super->health = gPlayerState.gustJarState & 0xf;
}
}
@@ -474,7 +474,7 @@ void sub_0802AEBC(BombPeahatEntity* this) {
void sub_0802AED4(BombPeahatEntity* this) {
GetNextFrame(super);
if (this->unk_81 < 2) {
if (sub_080044EC(super, 0x2800) == 1) {
if (BounceUpdate(super, Q_8_8(40.0)) == BOUNCE_INIT_NEXT) {
this->unk_81++;
}
} else {
@@ -673,7 +673,7 @@ void sub_0802B1BC(BombPeahatEntity* this) {
#endif
void sub_0802B204(BombPeahatEntity* this) {
if (sub_080044EC(super, 0x2800) == 1) {
if (BounceUpdate(super, Q_8_8(40.0)) == BOUNCE_INIT_NEXT) {
Entity* entity = CreateEnemy(BOBOMB, 1);
if (entity != NULL) {
CopyPosition(super, entity);
+4 -4
View File
@@ -42,7 +42,7 @@ const s8 gUnk_080CFFC4[8];
void BowMoblin(Entity* this) {
EnemyFunctionHandler(this, BowMoblin_Functions);
SetChildOffset(this, 0, 1, -0x18);
EnemySetFXOffset(this, 0, 1, -0x18);
}
void BowMoblin_OnTick(BowMoblinEntity* this) {
@@ -53,10 +53,10 @@ void BowMoblin_OnCollision(BowMoblinEntity* this) {
Entity* pEVar1;
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, (EntityActionArray)BowMoblin_Functions);
if ((super->contactFlags & 0x80) != 0) {
if (super->contactFlags & CONTACT_NOW) {
sub_0803C5F0(this);
pEVar1 = super->child;
if (pEVar1 != NULL) {
@@ -213,7 +213,7 @@ void sub_0803C400(BowMoblinEntity* this) {
switch (++super->timer) {
case 1:
super->direction = super->animationState << 2;
projectile = CreateProjectileWithParent(super, ARROW_PROJECTILE, super->animationState >> 1);
projectile = EnemyCreateProjectile(super, ARROW_PROJECTILE, super->animationState >> 1);
if (projectile) {
super->child = projectile;
projectile->direction = (super->direction + 4) & 0x18;
+5 -5
View File
@@ -155,7 +155,7 @@ void BusinessScrub_Action2(BusinessScrubEntity* this) {
unk = 1;
sub_080290FC(this);
if (super->frame & 1) {
Entity* entity = CreateProjectileWithParent(super, DEKU_SEED_PROJECTILE, 0);
Entity* entity = EnemyCreateProjectile(super, DEKU_SEED_PROJECTILE, 0);
if (entity != NULL) {
entity->parent = super;
entity->direction = super->direction;
@@ -222,7 +222,7 @@ void BusinessScrub_Action3(BusinessScrubEntity* this) {
super->timer = 30;
super->subtimer = 5;
sub_080290E0(this, 0);
iVar1 = Create0x68FX(super, FX_STARS);
iVar1 = EnemyCreateFX(super, FX_STARS);
if (iVar1 != NULL) {
iVar1->spritePriority.b0 = 3;
iVar1->z.HALF.HI -= 12;
@@ -238,7 +238,7 @@ void BusinessScrub_Action3(BusinessScrubEntity* this) {
sub_0800445C(super);
}
extern void sub_0804AA1C(Entity*);
extern void EnemyDetachFX(Entity*);
void sub_08028F0C(BusinessScrubEntity*);
void BusinessScrub_Action4(BusinessScrubEntity* this) {
@@ -246,7 +246,7 @@ void BusinessScrub_Action4(BusinessScrubEntity* this) {
super->timer = 48;
if (super->subtimer) {
if (--super->subtimer == 0) {
sub_0804AA1C(super);
EnemyDetachFX(super);
}
} else if (sub_08028FDC(this) || this->unk_80) {
this->unk_80 = 0;
@@ -382,7 +382,7 @@ void sub_08028F0C(BusinessScrubEntity* this) {
const struct SalesOffering* offer = (const struct SalesOffering*)this->unk_7c;
super->interactType = INTERACTION_NONE;
sub_0804AA1C(super);
EnemyDetachFX(super);
super->direction = (GetAnimationState(super) << 3);
sub_080290E0(this, 3);
this->unk_80 = 1;
+3 -3
View File
@@ -127,7 +127,7 @@ void sub_08045CE0(BusinessScrubPrologueEntity* this) {
r6 = 1;
sub_0804604C(this);
if (super->frame & 1) {
entity = CreateProjectileWithParent(super, DEKU_SEED_PROJECTILE, 0);
entity = EnemyCreateProjectile(super, DEKU_SEED_PROJECTILE, 0);
if (entity != NULL) {
entity->parent = super;
entity->direction = super->direction;
@@ -190,7 +190,7 @@ void sub_08045E14(BusinessScrubPrologueEntity* this) {
super->action = 5;
super->subAction = 0;
sub_08046030(this, 0);
entity = Create0x68FX(super, FX_STARS);
entity = EnemyCreateFX(super, FX_STARS);
if (entity != NULL) {
entity->spritePriority.b0 = 3;
entity->z.HALF.HI -= 0xc;
@@ -329,7 +329,7 @@ void sub_08046078(BusinessScrubPrologueEntity* this) {
super->child->action = 0xff;
}
sub_0804AA1C(super);
EnemyDetachFX(super);
}
void (*const BusinessScrubPrologue_Functions[])(Entity*) = {
+1 -1
View File
@@ -43,7 +43,7 @@ void sub_0802B540(Entity* this) {
void sub_0802B56C(Entity* this) {
GetNextFrame(this);
if (this->contactFlags & 0x80) {
if (this->contactFlags & CONTACT_NOW) {
this->speed = 0x40;
}
+24 -24
View File
@@ -35,7 +35,7 @@ void sub_0801FAF8(ChuchuEntity* this);
void sub_0801FB14(ChuchuEntity* this);
void sub_0801FB34(ChuchuEntity* this);
void sub_0801FB68(ChuchuEntity* this);
u32 sub_0801FBD0(ChuchuEntity* this);
u32 CheckWaterTile(ChuchuEntity* this);
void Chuchu_JumpAtPlayer(ChuchuEntity* this);
extern void (*const Chuchu_Functions[])(ChuchuEntity*);
@@ -73,7 +73,7 @@ void Chuchu(ChuchuEntity* this) {
/* ... */
break;
case 2:
sub_080043A8(super);
CreateDrownFX(super);
return;
}
}
@@ -82,7 +82,7 @@ void Chuchu(ChuchuEntity* this) {
this->unk_81 = index;
Chuchu_Functions[GetNextFunction(super)](this);
if (this->unk_68->type == 0x1c) {
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
} else if (super->type == 2) {
sub_0801FB34(this);
}
@@ -118,14 +118,14 @@ void Chuchu_OnCollision(ChuchuEntity* this) {
if (health) {
if (super->contactFlags == 0x94) {
sub_0801FB68(this);
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
InitializeAnimation(super, 6);
} else if (this->unk_80 != health) {
sub_0801FB68(this);
InitializeAnimation(super, 6);
}
} else {
sub_0804AA1C(super);
EnemyDetachFX(super);
super->zVelocity = 0;
InitializeAnimation(super, 9);
}
@@ -135,7 +135,7 @@ void Chuchu_OnCollision(ChuchuEntity* this) {
void Chuchu_OnGrabbed(ChuchuEntity* this) {
if (!sub_0806F520(super) && super->confusedTime) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
InitializeAnimation(super, 6);
} else {
if (super->animIndex != 8) {
@@ -159,9 +159,9 @@ void Chuchu_OnDeath(ChuchuEntity* this) {
if (super->type == 0) {
GenericDeath(super);
} else if (super->type == 1) {
CreateDeathFx(super, 0xf2, 0);
EnemyCreateDeathFX((Enemy*)super, 0xf2, 0);
} else {
CreateDeathFx(super, 0xf1, 0);
EnemyCreateDeathFX((Enemy*)super, 0xf1, 0);
}
}
@@ -197,7 +197,7 @@ void sub_0801F0C8(ChuchuEntity* this) {
}
void sub_0801F12C(ChuchuEntity* this) {
if (sub_0801FBD0(this)) {
if (CheckWaterTile(this)) {
sub_0801F328(this);
} else {
if ((super->subtimer++ & 7) == 0) {
@@ -233,7 +233,7 @@ void sub_0801F1B0(ChuchuEntity* this) {
}
if (super->frame & ANIM_DONE) {
if (sub_0801FBD0(this)) {
if (CheckWaterTile(this)) {
sub_0801F328(this);
} else {
sub_0801F340(this);
@@ -262,7 +262,7 @@ void sub_0801F270(ChuchuEntity* this) {
ProcessMovement5(super);
GetNextFrame(super);
if (sub_0801FBD0(this))
if (CheckWaterTile(this))
return;
if (--super->timer != 0)
@@ -290,7 +290,7 @@ void sub_0801F2F8(ChuchuEntity* this) {
GetNextFrame(super);
if (super->frame & ANIM_DONE) {
sub_0801F340(this);
sub_0804AA1C(super);
EnemyDetachFX(super);
}
}
@@ -391,7 +391,7 @@ void sub_0801F4EC(ChuchuEntity* this) {
}
void sub_0801F508(ChuchuEntity* this) {
if (sub_0801FBD0(this)) {
if (CheckWaterTile(this)) {
this->unk_83 = 0;
sub_0801F730(this);
} else {
@@ -430,7 +430,7 @@ void sub_0801F584(ChuchuEntity* this) {
}
if (super->frame & ANIM_DONE) {
if (sub_0801FBD0(this)) {
if (CheckWaterTile(this)) {
this->unk_83 = 0;
sub_0801F730(this);
} else {
@@ -465,7 +465,7 @@ void sub_0801F688(ChuchuEntity* this) {
if (this->unk_83)
this->unk_83--;
if (sub_0801FBD0(this) || this->unk_83) {
if (CheckWaterTile(this) || this->unk_83) {
super->direction = sub_08049F84(super, 1);
ProcessMovement5(super);
GetNextFrame(super);
@@ -489,7 +489,7 @@ void sub_0801F6F8(ChuchuEntity* this) {
if (super->frame & ANIM_DONE) {
super->action = 4;
super->speed = 0x20;
sub_0804AA1C(super);
EnemyDetachFX(super);
InitializeAnimation(super, 2);
}
}
@@ -562,7 +562,7 @@ void sub_0801F884(ChuchuEntity* this) {
if (super->subtimer) {
super->subtimer--;
} else {
Entity* entity = Create0x68FX(super, FX_LIGHTNING_STRIKE);
Entity* entity = EnemyCreateFX(super, FX_LIGHTNING_STRIKE);
if (entity != NULL) {
entity->type2 = 64;
super->action = 4;
@@ -573,7 +573,7 @@ void sub_0801F884(ChuchuEntity* this) {
}
void sub_0801F8C0(ChuchuEntity* this) {
if (sub_0801FBD0(this)) {
if (CheckWaterTile(this)) {
sub_0801FAE0(this);
} else if (sub_08049FDC(super, 1) == 0) {
sub_0801F730(this);
@@ -606,7 +606,7 @@ void sub_0801F940(ChuchuEntity* this) {
}
if (super->frame & ANIM_DONE) {
if (sub_0801FBD0(this)) {
if (CheckWaterTile(this)) {
sub_0801FAE0(this);
} else {
super->action = 6;
@@ -636,7 +636,7 @@ void sub_0801F9E0(ChuchuEntity* this) {
}
void sub_0801FA30(ChuchuEntity* this) {
if (sub_0801FBD0(this)) {
if (CheckWaterTile(this)) {
super->direction = sub_08049F84(super, 1);
ProcessMovement5(super);
GetNextFrame(super);
@@ -654,7 +654,7 @@ void sub_0801FA78(ChuchuEntity* this) {
super->action = 1;
super->spriteSettings.draw = 0;
InitializeAnimation(super, 4);
sub_0804AA1C(super);
EnemyDetachFX(super);
}
}
@@ -664,7 +664,7 @@ void sub_0801FAAC(ChuchuEntity* this) {
if (super->frame & ANIM_DONE) {
sub_0801FB14(this);
super->speed = 0x20;
sub_0804AA1C(super);
EnemyDetachFX(super);
}
}
@@ -708,14 +708,14 @@ void sub_0801FB68(ChuchuEntity* this) {
case 2:
super->action = 10;
super->hitType = 92;
sub_0804AA1C(super);
EnemyDetachFX(super);
break;
}
super->zVelocity = 0;
}
bool32 sub_0801FBD0(ChuchuEntity* this) {
bool32 CheckWaterTile(ChuchuEntity* this) {
if (GetVvvAtEntity(super) == VVV_16) {
return TRUE;
} else {
+6 -6
View File
@@ -284,9 +284,9 @@ void ChuchuBoss_OnDeath(ChuchuBossEntity* this) {
break;
case 1:
if (this->unk_7d-- == 0) {
((GenericEntity*)super->child)->field_0x6c.HALF.HI |= 2;
((Enemy*)super->child)->enemyFlags |= EM_FLAG_BOSS_KILLED;
this->unk_68->unk_6d.unk1 = 1;
((GenericEntity*)super->parent)->field_0x6c.HALF.HI |= 2;
((Enemy*)super->parent)->enemyFlags |= EM_FLAG_BOSS_KILLED;
parent = super->child;
child = super->parent;
this->unk_68->base.health = 0;
@@ -979,13 +979,13 @@ void sub_08026BE8(ChuchuBossEntity* this) {
Entity* child;
child = super->child;
child->flags2 &= ~1;
child->collisionMask &= ~1;
if (this->unk_7c == 0) {
super->subAction = 7;
this->unk_84->unk_03 = 0;
this->unk_7d = 0x2d;
child->flags &= ~0x80;
child->flags2 |= 1;
child->collisionMask |= 1;
SoundReq(SFX_155);
} else {
this->unk_7c--;
@@ -1347,7 +1347,7 @@ void sub_080272D4(ChuchuBossEntity* this) {
super->hitbox->height = (u32)((0x10000 / this->unk_74.HALF_U.HI) * 5) >> 6;
if (*(char*)&this->unk_84 == 0)
break;
if ((super->contactFlags & 0x80) != 0) {
if (super->contactFlags & CONTACT_NOW) {
if (super->iframes != 0) {
((ChuchuBossEntity*)super->child)->unk_68->base.iframes = super->iframes;
super->child->parent->iframes = super->iframes;
@@ -1698,7 +1698,7 @@ bool32 sub_08027AA4(ChuchuBossEntity* this) {
s32 iVar4;
Helper* pHelper;
if ((super->contactFlags & 0x80) == 0) {
if ((super->contactFlags & CONTACT_NOW) == 0) {
return FALSE;
}
switch (super->contactFlags & 0x7f) {
+4 -4
View File
@@ -42,7 +42,7 @@ void (*const gUnk_080CF4F0[])(CloudPiranhaEntity*) = {
void CloudPiranha(CloudPiranhaEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)&gUnk_080CF4F0);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void CloudPiranha_OnTick(CloudPiranhaEntity* this) {
@@ -56,10 +56,10 @@ void CloudPiranha_OnTick(CloudPiranhaEntity* this) {
void CloudPiranha_OnCollision(CloudPiranhaEntity* this) {
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, gUnk_080CF4F0);
if ((super->contactFlags & 0x80) != 0) {
if (super->contactFlags & CONTACT_NOW) {
if (super->hitType == 0x5a) {
switch (super->contactFlags & 0x3f) {
case 0x14:
@@ -176,7 +176,7 @@ void CloudPiranha_Action3(CloudPiranhaEntity* this) {
void CloudPiranha_Action4(CloudPiranhaEntity* this) {
Entity* effect;
sub_080387F0(this);
if (sub_080044EC(super, 0x1800) == 1) {
if (BounceUpdate(super, Q_8_8(24.0)) == BOUNCE_INIT_NEXT) {
super->action = 1;
super->hitType = 0x72;
super->timer = 1;
+1 -1
View File
@@ -44,7 +44,7 @@ void Crow_OnTick(CrowEntity* this) {
}
void Crow_OnCollision(CrowEntity* this) {
if (super->contactFlags & 0x80) {
if (super->contactFlags & CONTACT_NOW) {
if ((super->contactFlags & 0x3f) == 0) {
COLLISION_OFF(super);
super->subtimer = 16;
+3 -3
View File
@@ -50,7 +50,7 @@ void CuccoAggr(Entity* this) {
gUnk_080012C8[index](this);
} else {
CuccoAggr_Functions[GetNextFunction(this)](this);
SetChildOffset(this, 0, 1, -0x10);
EnemySetFXOffset(this, 0, 1, -0x10);
sub_080391B4((CuccoAggrEntity*)this);
}
}
@@ -74,7 +74,7 @@ void CuccoAggr_OnCollision(CuccoAggrEntity* this) {
}
if (super->confusedTime) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, CuccoAggr_Functions);
@@ -176,7 +176,7 @@ void sub_08038F44(CuccoAggrEntity* this) {
super->direction = GetFacingDirection(&gPlayerEntity.base, super);
sub_080390F8(this);
ProcessMovement0(super);
sub_080044EC(super, 0x1800);
BounceUpdate(super, Q_8_8(24.0));
GetNextFrame(super);
sub_08039298(this);
if (--this->unk_78 == 0) {
+12 -11
View File
@@ -67,7 +67,7 @@ extern void (*const gUnk_080CAB58[])(DarkNutEntity*);
void DarkNut(DarkNutEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)DarkNut_Functions);
SetChildOffset(super, 0, 1, -22);
EnemySetFXOffset(super, 0, 1, -22);
}
void DarkNut_OnTick(DarkNutEntity* this) {
@@ -82,7 +82,7 @@ void DarkNut_OnCollision(DarkNutEntity* this) {
super->hitType = 81;
sub_08021218(this, 8, DirectionToAnimationState(super->knockbackDirection ^ 0x10));
sub_08021588(this);
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
break;
case 0x16:
super->action = 11;
@@ -90,7 +90,7 @@ void DarkNut_OnCollision(DarkNutEntity* this) {
super->hitType = 81;
sub_08021218(this, 8, DirectionToAnimationState(super->knockbackDirection ^ 0x10));
sub_08021588(this);
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
break;
case 0x4b:
if (super->action == 13 || super->action == 15 || super->action == 19 || super->action == 18)
@@ -128,7 +128,7 @@ void DarkNut_OnCollision(DarkNutEntity* this) {
if (super->health != this->unk_78) {
sub_08021588(this);
sub_08021390(this);
sub_0804AA1C(super);
EnemyDetachFX(super);
}
break;
}
@@ -240,7 +240,7 @@ void sub_08020F48(DarkNutEntity* this) {
super->action = 14;
sub_08021218(this, 13, uVar2 >> 3);
pEVar3 = CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 1);
pEVar3 = EnemyCreateProjectile(super, DARK_NUT_SWORD_SLASH, 1);
if (pEVar3) {
pEVar3->parent = super;
super->child = pEVar3;
@@ -272,7 +272,7 @@ void sub_08020FE4(DarkNutEntity* this) {
if (--super->timer == 0) {
super->action = 12;
sub_08021218(this, 9, super->animationState);
sub_0804AA1C(super);
EnemyDetachFX(super);
}
}
@@ -286,7 +286,7 @@ void sub_08021010(DarkNutEntity* this) {
void sub_08021038(DarkNutEntity* this) {
if (super->child == NULL && super->frame) {
Entity* pEVar2 = (Entity*)CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 0);
Entity* pEVar2 = (Entity*)EnemyCreateProjectile(super, DARK_NUT_SWORD_SLASH, 0);
if (pEVar2) {
pEVar2->parent = super;
super->child = pEVar2;
@@ -325,7 +325,7 @@ void sub_080210E4(DarkNutEntity* this) {
Entity* entity;
super->frame &= ~1;
entity = CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 2);
entity = EnemyCreateProjectile(super, DARK_NUT_SWORD_SLASH, 2);
if (entity != NULL) {
entity->parent = super;
super->child = entity;
@@ -335,7 +335,8 @@ void sub_080210E4(DarkNutEntity* this) {
}
sub_08021644(this);
if ((super->frame & 0x10) && (!ProcessMovement0(super) || (super->child && (super->child->contactFlags & 0x80)))) {
if ((super->frame & 0x10) &&
(!ProcessMovement0(super) || (super->child && (super->child->contactFlags & CONTACT_NOW)))) {
sub_080213D0(this, 0);
} else {
if (--this->unk_76 == 0)
@@ -594,7 +595,7 @@ void sub_0802159C(DarkNutEntity* this) {
super->frame = 0;
super->hitType = 0x51;
entity = CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 3);
entity = EnemyCreateProjectile(super, DARK_NUT_SWORD_SLASH, 3);
if (entity != NULL) {
entity->parent = super;
super->child = entity;
@@ -615,7 +616,7 @@ void sub_08021600(DarkNutEntity* this) {
super->frame = 0;
super->hitType = 0x51;
entity = CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 4);
entity = EnemyCreateProjectile(super, DARK_NUT_SWORD_SLASH, 4);
if (entity != NULL) {
entity->parent = super;
super->child = entity;
+1 -1
View File
@@ -51,7 +51,7 @@ void DoorMimic_OnCollision(DoorMimicEntity* this) {
void DoorMimic_OnDeath(DoorMimicEntity* this) {
SetMetaTile(this->unk_7c, this->unk_7e, super->collisionLayer);
CreateFx(super, FX_POT_SHATTER, 0);
SetRoomTrackerFlag(super);
EnemyDisableRespawn(super);
DeleteThisEntity();
}
+1 -1
View File
@@ -303,7 +303,7 @@ void sub_08044550(DustEntity* this) {
u8 uVar1;
const s8* ptr;
if ((gPlayerState.field_0x1c & 0xf) == 1) {
if ((gPlayerState.gustJarState & 0xf) == 1) {
if (super->speed < 0x100) {
super->speed += 0x10;
}
+2 -2
View File
@@ -90,7 +90,7 @@ void Enemy4D_OnKnockback(Enemy4DEntity* this) {
}
void Enemy4D_OnDeath(Enemy4DEntity* this) {
CreateDeathFx(super, 0xff, 0x57);
EnemyCreateDeathFX((Enemy*)super, 0xff, 0x57);
}
void Enemy4D_OnGrabbed(Enemy4DEntity* this) {
@@ -100,7 +100,7 @@ void Enemy4D_Init(Enemy4DEntity* this) {
Entity* projectile;
sub_0804A720(super);
projectile = CreateProjectileWithParent(super, BALL_AND_CHAIN, 0);
projectile = EnemyCreateProjectile(super, BALL_AND_CHAIN, 0);
if (projectile != NULL) {
projectile->parent = super;
super->child = projectile;
+6 -6
View File
@@ -65,7 +65,7 @@ void Enemy50(Enemy50Entity* this) {
DeleteThisEntity();
}
Enemy50_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void Enemy50_OnTick(Enemy50Entity* this) {
@@ -79,21 +79,21 @@ void Enemy50_OnCollision(Enemy50Entity* this) {
sub_08041134(this);
sub_0803F6EC(this);
}
if (super->hitType == 0x25 && super->contactFlags == 0x80) {
if (super->hitType == 0x25 && super->contactFlags == CONTACT_NOW) {
super->action = 8;
InitializeAnimation(super, 3);
} else {
if (super->contactFlags == 0x80) {
if (super->contactFlags == CONTACT_NOW) {
this->unk_7c = 0x78;
sub_08041128(this);
}
if (super->contactFlags == 0x9d) {
if (super->contactFlags == (CONTACT_NOW | 0x1d)) {
super->zVelocity = Q_16_16(1.5);
}
if (super->confusedTime != 0) {
super->animationState = super->knockbackDirection >> 4;
InitializeAnimation(super, super->animationState + 7);
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
if (super->health != this->unk_7a) {
if (super->type == 0) {
@@ -422,7 +422,7 @@ void sub_0804122C(Enemy50Entity* this) {
#ifndef EU
bool32 sub_08041300(Enemy50Entity* this) {
if ((super->hitType == 0x25) && (super->contactFlags == 0x80)) {
if ((super->hitType == 0x25) && (super->contactFlags == CONTACT_NOW)) {
return TRUE;
} else {
return super->action == 8 || super->action == 9;
+5 -5
View File
@@ -83,14 +83,14 @@ void Eyegore_OnTick(EyegoreEntity* this) {
void Eyegore_OnCollision(EyegoreEntity* this) {
u32 tmp;
if ((super->contactFlags == 0x95) || (super->contactFlags == 0x8e)) {
if ((super->contactFlags == (CONTACT_NOW | 0x15)) || (super->contactFlags == (CONTACT_NOW | 0xe))) {
Entity* entity = super->contactedEntity;
tmp = (((entity->direction + 4) & 0x18) ^ 0x10) >> 3;
if (tmp == super->animationState) {
if ((tmp & 1) != 0) {
if (0x10 < ((entity->y.HALF.HI + entity->z.HALF.HI) - (super->y.HALF.HI + super->z.HALF.HI)) + 0x14U) {
} else {
if (super->contactFlags == 0x8e) {
if (super->contactFlags == (CONTACT_NOW | 0xe)) {
super->health = 0;
} else {
super->health--;
@@ -106,7 +106,7 @@ void Eyegore_OnCollision(EyegoreEntity* this) {
EnqueueSFX(SFX_BUTTON_PRESS);
sub_08031344(this);
} else {
if (super->contactFlags == 0x8e) {
if (super->contactFlags == (CONTACT_NOW | 0xe)) {
super->health = 0;
} else {
super->health--;
@@ -441,8 +441,8 @@ void sub_08031024(EyegoreEntity* this) {
void sub_08031250(EyegoreEntity* this) {
u32 tmp2;
u32 tmp = (u32)super->animationState * 4;
sub_08008796(super, 9, super->x.HALF.HI + gUnk_080CE2C0[tmp], super->y.HALF.HI + gUnk_080CE2C0[tmp + 1]);
sub_08008796(super, 9, super->x.HALF.HI + gUnk_080CE2C0[tmp + 2], super->y.HALF.HI + gUnk_080CE2C0[tmp + 3]);
DoTileInteraction(super, 9, super->x.HALF.HI + gUnk_080CE2C0[tmp], super->y.HALF.HI + gUnk_080CE2C0[tmp + 1]);
DoTileInteraction(super, 9, super->x.HALF.HI + gUnk_080CE2C0[tmp + 2], super->y.HALF.HI + gUnk_080CE2C0[tmp + 3]);
if (this->unk_79 != 0) {
tmp2 = 0;
if ((super->x.HALF.HI - (u32)this->unk_74) + 2 < 5) {
+1 -1
View File
@@ -93,7 +93,7 @@ void sub_0802C334(FallingBoulderEntity* this) {
GetNextFrame(super);
this->unk_7e = COORD_TO_TILE(super);
if (sub_080044EC(super, this->unk_84) == 1) {
if (BounceUpdate(super, this->unk_84) == BOUNCE_INIT_NEXT) {
EnqueueSFX(0x14c);
COLLISION_ON(super);
this->unk_7a = 12;
+3 -3
View File
@@ -94,7 +94,7 @@ void FlyingPot_OnTick(FlyingPotEntity* this) {
void FlyingPot_OnCollision(FlyingPotEntity* this) {
sub_08037418(this);
if (super->contactFlags == 0x9D) {
if (super->contactFlags == (CONTACT_NOW | 0x1d)) {
super->action = FLYING_POT_ACTION_6;
COLLISION_OFF(super);
super->zVelocity = Q_16_16(2.625);
@@ -157,7 +157,7 @@ void FlyingPot_SubAction2(FlyingPotEntity* this) {
}
void FlyingPot_SubAction3(FlyingPotEntity* this) {
if (!(gPlayerState.field_0x1c & 0xF)) {
if (!(gPlayerState.gustJarState & 0xF)) {
sub_08037408(this);
}
}
@@ -208,7 +208,7 @@ void FlyingPot_Action2(FlyingPotEntity* this) {
super->spritePriority.b1 = 1;
super->spriteOffsetX = 0;
super->hitType = 0xA0;
super->flags2 = 0xF;
super->collisionMask = 0xF;
super->hitbox = &gUnk_080FD34C;
SetMetaTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer);
+3 -3
View File
@@ -46,7 +46,7 @@ void FlyingSkull_OnTick(FlyingSkullEntity* this) {
void FlyingSkull_OnCollision(FlyingSkullEntity* this) {
sub_0803A100(this);
if (super->contactFlags == 0x9d) {
if (super->contactFlags == (CONTACT_NOW | 0x1d)) {
super->action = 7;
COLLISION_OFF(super);
super->zVelocity = Q_16_16(2.625);
@@ -101,7 +101,7 @@ void sub_08039CE0(FlyingSkullEntity* this) {
}
void sub_08039D4C(FlyingSkullEntity* this) {
if ((gPlayerState.field_0x1c & 0xf) == 0) {
if ((gPlayerState.gustJarState & 0xf) == 0) {
sub_0803A0E0(this);
}
}
@@ -199,7 +199,7 @@ void sub_08039FAC(FlyingSkullEntity* this) {
super->spritePriority.b1 = 1;
super->spriteOffsetX = 0;
super->hitType = 0xa0;
super->flags2 = 0xf;
super->collisionMask = 0xf;
super->hitbox = (Hitbox*)&gUnk_080FD34C;
SetMetaTile(this->metaTileIndex, COORD_TO_TILE(super), super->collisionLayer);
}
+4 -4
View File
@@ -44,7 +44,7 @@ void sub_0803F528(GhiniEntity*);
void Ghini(GhiniEntity* this) {
Ghini_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void Ghini_OnTick(GhiniEntity* this) {
@@ -59,17 +59,17 @@ void Ghini_OnCollision(GhiniEntity* this) {
sub_0803F630(this);
sub_0803F6EC(this);
}
if ((super->hitType == 0x25) && (super->contactFlags == 0x80)) {
if ((super->hitType == 0x25) && (super->contactFlags == CONTACT_NOW)) {
super->action = 8;
InitializeAnimation(super, 3);
} else {
if (super->contactFlags == 0x9d) {
if (super->contactFlags == (CONTACT_NOW | 0x1d)) {
super->zVelocity = 0x18000;
}
if (super->confusedTime != 0) {
super->animationState = super->knockbackDirection >> 4;
InitializeAnimation(super, super->animationState + 7);
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
if (super->health != this->unk_7a) {
this->unk_7a = super->health;
+7 -7
View File
@@ -44,7 +44,7 @@ extern Entity* gUnk_020000B0;
void Gibdo(Entity* this) {
EnemyFunctionHandler(this, Gibdo_Functions);
SetChildOffset(this, 0, 1, -0x15);
EnemySetFXOffset(this, 0, 1, -0x15);
}
void Gibdo_OnTick(GibdoEntity* this) {
@@ -52,7 +52,7 @@ void Gibdo_OnTick(GibdoEntity* this) {
}
void Gibdo_OnCollision(GibdoEntity* this) {
if (super->contactFlags == 0x87) {
if (super->contactFlags == (CONTACT_NOW | 0x7)) {
if (super->action == 0x6) {
sub_08037ACC(this);
}
@@ -62,7 +62,7 @@ void Gibdo_OnCollision(GibdoEntity* this) {
Gibdo_CreateObjects(this);
} else {
if (super->action != 0x6) {
if (super->hitType == 0x27 && super->contactFlags == 0x80) {
if (super->hitType == 0x27 && super->contactFlags == CONTACT_NOW) {
sub_08037A14(this);
} else {
if ((u8)(super->action - 1) < 2) {
@@ -83,7 +83,7 @@ void Gibdo_OnCollision(GibdoEntity* this) {
}
}
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, Gibdo_Functions);
}
@@ -192,7 +192,7 @@ void sub_0803775C(GibdoEntity* this) {
if (--super->timer == 0) {
stalfos = CreateEnemy(STALFOS, 0);
if (stalfos != NULL) {
sub_0804A4E4(super, stalfos);
EnemyCopyParams(super, stalfos);
Gibdo_MoveObjectsToStalfos(this, stalfos);
}
DeleteEntity(super);
@@ -326,7 +326,7 @@ void sub_08037A14(GibdoEntity* this) {
super->timer = 24;
super->spritePriority.b0 &= super->timer - 32;
super->spritePriority.b0 |= 3;
super->flags2 &= 0xfe;
super->collisionMask &= 0xfe;
this->field_0x7c = 5;
CopyPosition(super, super->contactedEntity);
InitAnimationForceUpdate(super, super->animationState + 0xc);
@@ -341,7 +341,7 @@ void sub_08037A58(GibdoEntity* this) {
super->iframes = 0xec;
}
super->hitType = 0x26;
super->flags2 |= 1;
super->collisionMask |= 1;
super->iframes = 0xf4;
super->knockbackDirection = DirectionFromAnimationState(super->animationState) ^ 0x10;
super->knockbackDuration = 8;
+8 -8
View File
@@ -300,7 +300,7 @@ void sub_0802D33C(GleerokEntity* this) {
}
unk_84->entities[i]->health = 0;
((GenericEntity*)unk_84->entities[i])->field_0x6c.HALF.HI |= 1;
((Enemy*)(unk_84->entities[i]))->enemyFlags |= EM_FLAG_BOSS;
unk_84->ent2->health = 0;
unk_84->ent2->type2 = 0;
unk_84->ent2->spriteSettings.draw &= ~1;
@@ -383,7 +383,7 @@ void sub_0802D3B8(GleerokEntity* this) {
case 1:
if (super->type2 == 1) {
COLLISION_ON(super);
super->flags2 |= 0x80;
super->collisionMask |= 0x80;
}
super->spritePriority.b0 = gUnk_080CD7C4[super->type2].unk0.HALF.HI;
@@ -399,7 +399,7 @@ void sub_0802D3B8(GleerokEntity* this) {
this->unk_74 = gUnk_080CD884[0];
this->unk_75 = 0;
super->spritePriority.b0 = 6;
super->flags2 |= 0x80;
super->collisionMask |= 0x80;
CopyPosition(super->parent, super);
InitializeAnimation(super, 0x4f);
break;
@@ -659,7 +659,7 @@ void sub_0802D86C(GleerokEntity* this) {
}
}
if ((super->contactFlags & 0x80) && this->unk_74 == 0) {
if ((super->contactFlags & CONTACT_NOW) && this->unk_74 == 0) {
if ((super->contactFlags & 0x7f) == 0x1d) {
super->zVelocity = Q_16_16(3.0);
super->parent->subAction = 4;
@@ -815,7 +815,7 @@ void sub_0802DCE0(GleerokEntity* this) {
}
} else {
if (this->unk_84->ent2->subtimer == 0) {
super->child = CreateProjectileWithParent(super, GLEEROK_PROJECTILE, 0);
super->child = EnemyCreateProjectile(super, GLEEROK_PROJECTILE, 0);
if (super->child != NULL) {
super->child->direction = this->unk_84->filler[5].unk0.HALF.HI;
@@ -883,7 +883,7 @@ void sub_0802DDD8(GleerokEntity* this) {
}
if (this->unk_84->ent2->subtimer == 1) {
super->child = CreateProjectileWithParent(super, GLEEROK_PROJECTILE, r2);
super->child = EnemyCreateProjectile(super, GLEEROK_PROJECTILE, r2);
if (super->child != NULL) {
super->child->direction = this->unk_84->filler[5].unk0.HALF.HI;
super->child->type2 = this->unk_84->ent2->frame & 0xf;
@@ -1039,7 +1039,7 @@ void sub_0802E0B8(GleerokEntity* this) {
super->type2 = 4;
InitializeAnimation(super, 0x4e);
} else {
if (super->contactFlags & 0x80) {
if (super->contactFlags & CONTACT_NOW) {
if (super->iframes > 0) {
SoundReq(SFX_BOSS_HIT);
}
@@ -1160,7 +1160,7 @@ void sub_0802E300(GleerokEntity* this) {
heap->ent2->timer = 24;
} else {
if ((gRoomTransition.frameCount & 0xf) == 0) {
CreateProjectileWithParent(super, GLEEROK_PROJECTILE, 0x3);
EnemyCreateProjectile(super, GLEEROK_PROJECTILE, 0x3);
}
}
+1 -1
View File
@@ -250,7 +250,7 @@ void sub_080464C0(GyorgFemaleEntity* this) {
void sub_08046518(void) {
u16* ptr = gMapTop.metatileTypes;
u16* sl = &gMapTop.mapData[sub_08046518_offset];
u16* stack1 = &gMapTop.mapDataClone[sub_08046518_offset];
u16* stack1 = &gMapTop.mapDataOriginal[sub_08046518_offset];
u8* stack2 = &gMapTop.vvv[sub_08046518_offset];
u8* r6 = &gMapTop.collisionData[sub_08046518_offset];
u32 i;
+1 -1
View File
@@ -20,7 +20,7 @@ void HangingSeed_OnTick(Entity* this) {
}
void HangingSeed_OnCollision(Entity* this) {
if (this->contactFlags & 0x80) {
if (this->contactFlags & CONTACT_NOW) {
CreateFx(this, FX_BUSH, 0x80);
DeleteThisEntity();
}
+6 -6
View File
@@ -39,7 +39,7 @@ extern const s8 gUnk_080CD464[];
void Helmasaur(HelmasaurEntity* this) {
if (super->type == 0) {
EnemyFunctionHandler(super, (EntityActionArray)Helmasaur_Functions);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
} else {
gUnk_080CD3FC[super->action](this);
}
@@ -63,7 +63,7 @@ void Helmasaur_OnCollision(HelmasaurEntity* this) {
}
}
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, Helmasaur_Functions);
@@ -224,7 +224,7 @@ void sub_0802BEBC(HelmasaurEntity* this) {
super->direction ^= DirectionSouth;
ProcessMovement2(super);
super->direction ^= DirectionSouth;
if (!sub_080044EC(super, Q_16_16(0.125))) {
if (BounceUpdate(super, Q_16_16(0.125)) == BOUNCE_DONE_ALL) {
sub_0802C1C0(this);
}
}
@@ -261,7 +261,7 @@ void sub_0802BF3C(HelmasaurEntity* this) {
void sub_0802BF78(HelmasaurEntity* this) {
super->action = 1;
super->flags2 = 4;
super->collisionMask = 4;
super->gustJarFlags = 1;
super->direction = super->animationState << 3;
InitializeAnimation(super, super->animationState + 8);
@@ -373,8 +373,8 @@ void sub_0802C1C0(HelmasaurEntity* this) {
void sub_0802C1CC(HelmasaurEntity* this) {
const s8* ptr = &gUnk_080CD464[super->animationState << 2];
sub_08008796(super, 9, super->x.HALF.HI + ptr[0], super->y.HALF.HI + ptr[1]);
sub_08008796(super, 9, super->x.HALF.HI + ptr[2], super->y.HALF.HI + ptr[3]);
DoTileInteraction(super, 9, super->x.HALF.HI + ptr[0], super->y.HALF.HI + ptr[1]);
DoTileInteraction(super, 9, super->x.HALF.HI + ptr[2], super->y.HALF.HI + ptr[3]);
}
void sub_0802C218(HelmasaurEntity* this) {
+4 -4
View File
@@ -51,7 +51,7 @@ void sub_080327E0(KeatonEntity* this);
void Keaton(KeatonEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)Keaton_Functions);
SetChildOffset(super, 0, 1, -18);
EnemySetFXOffset(super, 0, 1, -18);
}
void Keaton_OnTick(KeatonEntity* this) {
@@ -75,7 +75,7 @@ void Keaton_OnCollision(KeatonEntity* this) {
}
}
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, Keaton_Functions);
}
@@ -143,7 +143,7 @@ void Keaton_Action3(KeatonEntity* this) {
}
void Keaton_Action4(KeatonEntity* this) {
if (super->child && (super->child->contactFlags & 0x80)) {
if (super->child && (super->child->contactFlags & CONTACT_NOW)) {
sub_0803275C(this);
return;
}
@@ -262,7 +262,7 @@ void sub_08032794(KeatonEntity* this) {
void sub_080327C8(KeatonEntity* this) {
Entity* child;
child = CreateProjectileWithParent(super, KEATON_DAGGER, 0);
child = EnemyCreateProjectile(super, KEATON_DAGGER, 0);
if (child != NULL) {
child->parent = super;
super->child = child;
+5 -5
View File
@@ -54,7 +54,7 @@ extern const OffsetCoords gUnk_080D0154[];
void Lakitu(LakituEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)Lakitu_Functions);
SetChildOffset(super, 0, 1, -16);
EnemySetFXOffset(super, 0, 1, -16);
}
void Lakitu_OnTick(LakituEntity* this) {
@@ -96,7 +96,7 @@ void Lakitu_OnCollision(LakituEntity* this) {
}
if (super->confusedTime) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, Lakitu_Functions);
@@ -128,7 +128,7 @@ void sub_0803C86C(LakituEntity* this) {
}
void Lakitu_Initialize(LakituEntity* this) {
Entity* cloud = CreateProjectileWithParent(super, 17, 0);
Entity* cloud = EnemyCreateProjectile(super, 17, 0);
if (cloud == NULL) {
return;
}
@@ -313,7 +313,7 @@ void Lakitu_SpawnLightning(LakituEntity* this) {
Entity* lightning;
const OffsetCoords* offset;
lightning = CreateProjectileWithParent(super, LAKITU_LIGHTNING, 0);
lightning = EnemyCreateProjectile(super, LAKITU_LIGHTNING, 0);
if (lightning == NULL) {
return;
@@ -342,7 +342,7 @@ void sub_0803CBAC(LakituEntity* this) {
super->spritePriority.b1 = 1;
super->flags2 &= 0x7b;
super->collisionMask &= 0x7b;
super->hitType = 0x42;
+4 -4
View File
@@ -38,7 +38,7 @@ enum {
void Leever(LeeverEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)Leever_Functions);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void Leever_OnTick(LeeverEntity* this) {
@@ -46,13 +46,13 @@ void Leever_OnTick(LeeverEntity* this) {
}
void Leever_OnCollision(LeeverEntity* this) {
if (super->contactFlags == 0x80) {
if (super->contactFlags == CONTACT_NOW) {
if (super->action == 3) {
this->unk_74 = 1;
}
} else {
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
}
EnemyFunctionHandlerAfterCollision(super, Leever_Functions);
@@ -62,7 +62,7 @@ void Leever_OnDeath(LeeverEntity* this) {
if (super->type == LeeverForm_Red) {
GenericDeath(super);
} else {
CreateDeathFx(super, 0xf1, 0);
EnemyCreateDeathFX((Enemy*)super, 0xf1, 0);
}
}
+7 -7
View File
@@ -31,7 +31,7 @@ extern void (*const gUnk_080CC714[])(LikeLikeEntity*);
void LikeLike(Entity* this) {
EnemyFunctionHandler(this, LikeLike_Functions);
SetChildOffset(this, 0, 1, -0x10);
EnemySetFXOffset(this, 0, 1, -0x10);
}
void LikeLike_OnTick(LikeLikeEntity* this) {
@@ -46,13 +46,13 @@ void LikeLike_OnCollision(LikeLikeEntity* this) {
} else {
if (super->action == 7) {
LikeLike_ReleasePlayer(this);
} else if (super->contactFlags & 0x80) {
u8 tmp = super->contactFlags & ~0x80;
} else if (super->contactFlags & CONTACT_NOW) {
u8 tmp = super->contactFlags & ~CONTACT_NOW;
if (tmp == 0) {
super->action = 7;
super->timer = 95;
super->subtimer = tmp;
super->flags2 &= 0xfc;
super->collisionMask &= 0xfc;
this->prevSpritePriority = gPlayerEntity.base.spritePriority.b1;
}
}
@@ -63,7 +63,7 @@ void LikeLike_OnCollision(LikeLikeEntity* this) {
}
if (super->confusedTime) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, LikeLike_Functions);
@@ -153,7 +153,7 @@ void sub_08027FB4(LikeLikeEntity* this) {
if (--super->timer == 0) {
super->action = 1;
super->timer = 1;
super->flags2 |= 1;
super->collisionMask |= 1;
}
GetNextFrame(super);
}
@@ -236,7 +236,7 @@ void LikeLike_ReleasePlayer(LikeLikeEntity* this) {
super->action = 4;
super->timer = 80;
super->subtimer = tmp;
super->flags2 |= 2;
super->collisionMask |= 2;
if (super->iframes == 0) {
super->iframes = -18;
}
+2 -2
View File
@@ -518,7 +518,7 @@ void sub_0802A098(MadderpillarEntity* this) {
void sub_0802A0F8(MadderpillarEntity* this) {
if (super->health != 0) {
if ((super->contactFlags & 0x80) && super->iframes != 0) {
if ((super->contactFlags & CONTACT_NOW) && super->iframes != 0) {
Entity* entity = super;
u32 i;
for (i = 0; i < 6; i++) {
@@ -549,7 +549,7 @@ void sub_0802A16C(MadderpillarEntity* this) {
}
void sub_0802A18C(MadderpillarEntity* this) {
if (super->contactFlags & 0x80) {
if (super->contactFlags & CONTACT_NOW) {
switch (super->contactFlags & 0x7f) {
case 0:
case 1:
+3 -2
View File
@@ -167,7 +167,8 @@ void MazaalBracelet_OnCollision(MazaalBraceletEntity* this) {
if (super->type < 2) {
if (super->action != 0x2b) {
if ((0 < super->iframes) && ((super->contactFlags == 0x95 || (super->contactFlags == 0x8e)))) {
if ((0 < super->iframes) &&
((super->contactFlags == (CONTACT_NOW | 0x15) || (super->contactFlags == (CONTACT_NOW | 0xe))))) {
super->action = 0x28;
COLLISION_OFF(super);
entity = (MazaalBraceletEntity*)super->parent;
@@ -1299,7 +1300,7 @@ u32 sub_0803B870(MazaalBraceletEntity* this) {
Entity* entity;
entity = super->child;
if ((entity->contactFlags & 0x80) != 0 && (gPlayerState.flags & PL_CAPTURED)) {
if ((entity->contactFlags & CONTACT_NOW) != 0 && (gPlayerState.flags & PL_CAPTURED)) {
super->action = 0x18;
super->timer = 68;
super->spriteSettings.draw = 0;
+2 -2
View File
@@ -36,7 +36,7 @@ static void (*const MiniSlime_Functions[])(MiniSlimeEntity*) = {
void MiniSlime(MiniSlimeEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)MiniSlime_Functions);
SetChildOffset(super, 0, 1, -8);
EnemySetFXOffset(super, 0, 1, -8);
}
void MiniSlime_OnTick(MiniSlimeEntity* this) {
@@ -51,7 +51,7 @@ void MiniSlime_OnTick(MiniSlimeEntity* this) {
void MiniSlime_OnCollision(MiniSlimeEntity* this) {
if (super->confusedTime)
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
EnemyFunctionHandlerAfterCollision(super, MiniSlime_Functions);
}
+3 -3
View File
@@ -102,7 +102,7 @@ void Moldworm_OnCollision(MoldwormEntity* this) {
super->iframes = -8;
this->unk_7f = 0;
this->unk_7b = 0;
if (super->contactFlags == 0x80 || super->contactFlags == 0x9e) {
if (super->contactFlags == CONTACT_NOW || super->contactFlags == (CONTACT_NOW | 0x1e)) {
super->type2 = 0;
this->unk_80 = 0x14;
} else {
@@ -442,7 +442,7 @@ void sub_08023894(MoldwormEntity* this) {
}
void sub_0802390C(MoldwormEntity* this) {
if (super->contactFlags & 0x80) {
if (super->contactFlags & CONTACT_NOW) {
Entity* ent = super->child;
do {
ent->iframes = super->iframes;
@@ -450,7 +450,7 @@ void sub_0802390C(MoldwormEntity* this) {
} else {
Entity* ent = super->child;
do {
if (ent->contactFlags & 0x80) {
if (ent->contactFlags & CONTACT_NOW) {
u8 bVar2 = 0xff - ent->health;
if (bVar2 != 0) {
u32 tmp;
+3 -3
View File
@@ -43,7 +43,7 @@ void sub_080332E8(MulldozerEntity*, s32);
void Mulldozer(MulldozerEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)Mulldozer_Functions);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void Mulldozer_OnInit(MulldozerEntity* this) {
@@ -52,10 +52,10 @@ void Mulldozer_OnInit(MulldozerEntity* this) {
void Mulldozer_OnCollision(MulldozerEntity* this) {
if (super->confusedTime != 0) {
Create0x68FX(super, 0x1c);
EnemyCreateFX(super, 0x1c);
}
EnemyFunctionHandlerAfterCollision(super, Mulldozer_Functions);
if ((super->contactFlags & 0x80) != 0) {
if ((super->contactFlags & CONTACT_NOW) != 0) {
switch (super->contactFlags & 0x3f) {
case 2:
case 3:
+4 -4
View File
@@ -24,7 +24,7 @@ extern const s8 gUnk_080CA17E[2];
// Main
void Octorok(Entity* this) {
EnemyFunctionHandler(this, Octorok_Functions);
SetChildOffset(this, 0, 1, -16);
EnemySetFXOffset(this, 0, 1, -16);
}
// Idle
@@ -35,7 +35,7 @@ void Octorok_OnTick(Entity* this) {
// Touch player
void Octorok_OnCollision(Entity* this) {
if (this->confusedTime != 0) {
Create0x68FX(this, FX_STARS);
EnemyCreateFX(this, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(this, Octorok_Functions);
}
@@ -45,7 +45,7 @@ void Octorok_OnDeath(Entity* this) {
if (this->type == 0) {
GenericDeath(this);
} else {
CreateDeathFx(this, 241, 0);
EnemyCreateDeathFX((Enemy*)this, 241, 0);
}
}
@@ -127,7 +127,7 @@ void Octorok_Move(Entity* this) {
void Octorok_ShootNut(Entity* this) {
GetNextFrame(this);
if (this->frame & 1) {
Entity* entity = CreateProjectileWithParent(this, ROCK_PROJECTILE, 0);
Entity* entity = EnemyCreateProjectile(this, ROCK_PROJECTILE, 0);
if (entity != NULL) {
const s8* off;
entity->direction = this->direction;
+6 -6
View File
@@ -343,7 +343,7 @@ void OctorokBoss_Init(OctorokBossEntity* this) {
(this->heap)->field_0x2 = 0;
(this->heap)->tailCount = 5;
super->spriteRendering.b0 = 3;
this->field_0x6c.HALF.HI |= 1;
((Enemy*)this)->enemyFlags |= EM_FLAG_BOSS;
this->unk_76 = 0xa0;
this->unk_74 = 0xa0;
this->angle.HWORD = 0;
@@ -557,7 +557,7 @@ void OctorokBoss_Action1(OctorokBossEntity* this) {
case LEG_FR:
case LEG_FL:
case LEG_BL:
if ((((OctorokBossEntity*)super->parent)->field_0x6c.HALF.HI & 2) != 0) {
if (((Enemy*)super->parent)->enemyFlags & EM_FLAG_BOSS_KILLED) {
DeleteThisEntity();
}
if (this->heap->mouthObject->base.health == 1) {
@@ -677,7 +677,7 @@ void OctorokBoss_Action1(OctorokBossEntity* this) {
this->heap->fallingStonesTimer--;
if ((gRoomTransition.frameCount & 3) == 0) {
// Falling stones
CreateProjectileWithParent(super, OCTOROK_BOSS_PROJECTILE, 3);
EnemyCreateProjectile(super, OCTOROK_BOSS_PROJECTILE, 3);
}
}
OctorokBoss_Action1_SubActions[super->subAction](this);
@@ -885,7 +885,7 @@ void OctorokBoss_Action1_Attack_Type2_3(OctorokBossEntity* this) {
}
void OctorokBoss_ExecuteAttackSpitRock(OctorokBossEntity* this) {
super->child = CreateProjectileWithParent(super, OCTOROK_BOSS_PROJECTILE, 0);
super->child = EnemyCreateProjectile(super, OCTOROK_BOSS_PROJECTILE, 0);
if (super->child != NULL) {
super->child->parent = super;
super->child->direction = ((u8) - this->angle.HALF.HI ^ 0x80);
@@ -1006,7 +1006,7 @@ void OctorokBoss_ExecuteAttackFreeze(OctorokBossEntity* this) {
} else {
this->timer--;
if ((gRoomTransition.frameCount & 3) == 0) {
super->child = CreateProjectileWithParent(super, OCTOROK_BOSS_PROJECTILE, 2);
super->child = EnemyCreateProjectile(super, OCTOROK_BOSS_PROJECTILE, 2);
if (super->child != NULL) {
super->child->parent = super;
super->child->direction = (u8) - this->angle.HALF.HI ^ 0x80;
@@ -1026,7 +1026,7 @@ void OctorokBoss_Burning(OctorokBossEntity* this) {
this->heap->fallingStonesTimer--;
if ((gRoomTransition.frameCount & 7) == 0) {
// Falling stones
CreateProjectileWithParent(super, OCTOROK_BOSS_PROJECTILE, 3);
EnemyCreateProjectile(super, OCTOROK_BOSS_PROJECTILE, 3);
}
}
SetAffineInfo(super, this->unk_76, this->unk_74, this->angle.HWORD);
+7 -7
View File
@@ -26,7 +26,7 @@ void OctorokGolden(Entity* this) {
gUnk_080012C8[index](this);
} else {
OctorokGolden_Functions[GetNextFunction(this)](this);
SetChildOffset(this, 0, 1, -0x10);
EnemySetFXOffset(this, 0, 1, -0x10);
}
}
@@ -36,7 +36,7 @@ void OctorokGolden_OnTick(Entity* this) {
void OctorokGolden_OnCollision(Entity* this) {
if (this->confusedTime != 0) {
Create0x68FX(this, FX_STARS);
EnemyCreateFX(this, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(this, OctorokGolden_Functions);
@@ -47,7 +47,7 @@ void OctorokGolden_OnDeath(Entity* this) {
SetGlobalFlag(this->type2);
}
CreateDeathFx(this, 0xff, ITEM_RUPEE100);
EnemyCreateDeathFX((Enemy*)this, 0xff, ITEM_RUPEE100);
}
void sub_08037CE4(Entity* this) {
@@ -83,7 +83,7 @@ static void sub_08037D54(Entity* this) {
this->frame ^= 2;
if (this->frame & 0x2) {
Entity* proj = CreateProjectileWithParent(this, ROCK_PROJECTILE, 0);
Entity* proj = EnemyCreateProjectile(this, ROCK_PROJECTILE, 0);
if (proj) {
const s8* ptr;
s32 dir;
@@ -112,16 +112,16 @@ static void sub_08037D54(Entity* this) {
void sub_08037E14(Entity* this) {
u32 dir;
u8* layer;
u8* collisionData;
const s8* ptr;
s32 x, y;
this->timer = 8;
dir = (GetFacingDirection(this, &gPlayerEntity.base) + 4) & 0x18;
layer = (u8*)GetLayerByIndex(this->collisionLayer)->collisionData;
collisionData = GetLayerByIndex(this->collisionLayer)->collisionData;
ptr = gUnk_080CF498 + (dir >> 2);
x = this->x.HALF.HI + *ptr;
y = this->y.HALF.HI + *(ptr + 1);
if (IsTileCollision(layer, x, y, 0)) {
if (IsTileCollision(collisionData, x, y, 0)) {
this->direction = Random() & 0x18;
} else {
this->direction = dir;
+10 -10
View File
@@ -47,7 +47,7 @@ enum {
void Peahat(PeahatEntity* this) {
if (super->type == PeahatForm_Torso) {
EnemyFunctionHandler(super, (EntityActionArray)Peahat_Functions);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
} else {
gPeahatPropellerFunctions[super->action](this);
}
@@ -61,7 +61,7 @@ void Peahat_OnTick(PeahatEntity* this) {
void Peahat_OnCollision(PeahatEntity* this) {
if (this->unk_82) {
if (super->contactFlags == 0x94) {
if (super->contactFlags == (CONTACT_NOW | 0x14)) {
Entity* entity = CreateEnemy(PEAHAT, PeahatForm_Propeller);
if (entity != NULL) {
CopyPosition(super, entity);
@@ -74,14 +74,14 @@ void Peahat_OnCollision(PeahatEntity* this) {
super->iframes = -30;
this->unk_81 = 0;
InitializeAnimation(super, super->animationState);
} else if (super->contactFlags == 0x9b) {
} else if (super->contactFlags == (CONTACT_NOW | 0x1b)) {
super->animationState = PeahatAnimation_BrokenPropeller;
super->action = 5;
super->speed = 0x80;
super->iframes = -30;
this->unk_81 = 0;
InitializeAnimation(super, super->animationState);
} else if (super->contactFlags == 0x80) {
} else if (super->contactFlags == CONTACT_NOW) {
if (super->animationState == PeahatAnimation_Flying) {
super->action = 1;
super->timer = 30;
@@ -94,7 +94,7 @@ void Peahat_OnCollision(PeahatEntity* this) {
}
if (super->confusedTime)
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
EnemyFunctionHandlerAfterCollision(super, Peahat_Functions);
}
@@ -240,7 +240,7 @@ void Peahat_ChargeEnd(PeahatEntity* this) {
void Peahat_Stunned(PeahatEntity* this) {
switch (super->animationState) {
default:
if (sub_080044EC(super, 0x1800) == 0) {
if (BounceUpdate(super, Q_8_8(24.0)) == BOUNCE_DONE_ALL) {
super->action = 6;
super->timer = 240;
super->subtimer = 10;
@@ -267,14 +267,14 @@ void Peahat_Stunned(PeahatEntity* this) {
void Peahat_RepairPropeller(PeahatEntity* this) {
if ((super->subtimer != 0) && (--super->subtimer == 0)) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
if (sub_0800442E(super) || (--super->timer == 0)) {
super->action = 9;
super->zVelocity = Q_16_16(1.5);
super->direction = Random() & 0x1f;
sub_0804AA1C(super);
EnemyDetachFX(super);
super->animationState = PeahatAnimation_RepairPropeller;
InitializeAnimation(super, super->animationState);
}
@@ -282,14 +282,14 @@ void Peahat_RepairPropeller(PeahatEntity* this) {
void Peahat_Recover(PeahatEntity* this) {
if ((super->subtimer != 0) && (--super->subtimer == 0)) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
if (sub_0800442E(super) || (--super->timer == 0)) {
super->action = 8;
super->timer = 240;
super->direction = Random() & 0x1f;
sub_0804AA1C(super);
EnemyDetachFX(super);
}
}
+6 -6
View File
@@ -65,7 +65,7 @@ void Pesto_OnTick(PestoEntity* this) {
void Pesto_OnCollision(PestoEntity* this) {
if (super->hitType != 0x6e) {
if (super->contactFlags == 0x80) {
if (super->contactFlags == CONTACT_NOW) {
this->unk_86 = 0x30;
if ((this->unk_83 & 0xf) == 3 && super->action == 6) {
@@ -185,7 +185,7 @@ void sub_080240B8(PestoEntity* this) {
Entity* entity;
this->unk_83 = 0;
entity = CreateProjectileWithParent(super, DIRT_BALL_PROJECTILE, this->unk_83);
entity = EnemyCreateProjectile(super, DIRT_BALL_PROJECTILE, this->unk_83);
if (entity != NULL) {
super->child = entity;
entity->parent = super;
@@ -406,7 +406,7 @@ void sub_080244E8(PestoEntity* this) {
super->direction = DirectionSouth;
super->speed = tmp;
this->unk_84 = 0;
super->flags2 &= 0xfc;
super->collisionMask &= 0xfc;
sub_080249DC(this);
this->unk_85 = gPlayerEntity.base.spritePriority.b1;
gPlayerEntity.base.flags &= ~ENT_COLLIDE;
@@ -428,7 +428,7 @@ void sub_080244E8(PestoEntity* this) {
super->z.HALF.HI -= 0xe;
this->unk_78 -= 0xe;
entity = CreateProjectileWithParent(super, DIRT_BALL_PROJECTILE, this->unk_83);
entity = EnemyCreateProjectile(super, DIRT_BALL_PROJECTILE, this->unk_83);
if (entity != NULL) {
entity->parent = super;
entity->z.HALF.HI += 0xe;
@@ -451,7 +451,7 @@ void sub_080244E8(PestoEntity* this) {
super->z.HALF.HI -= 0xe;
this->unk_78 -= 0xe;
entity = CreateProjectileWithParent(super, DIRT_BALL_PROJECTILE, this->unk_83);
entity = EnemyCreateProjectile(super, DIRT_BALL_PROJECTILE, this->unk_83);
if (entity != NULL) {
entity->parent = super;
entity->z.HALF.HI += 0xe;
@@ -877,7 +877,7 @@ void sub_08024F50(PestoEntity* this) {
gPlayerEntity.base.spritePriority.b1 = this->unk_85;
gPlayerEntity.base.z.HALF.HI = gPlayerEntity.base.spriteOffsetY;
gPlayerEntity.base.spriteOffsetY = 0;
super->flags2 |= 3;
super->collisionMask |= 3;
this->unk_83 = 0xc0;
this->unk_80 += 2;
this->unk_84 = 0;
+5 -5
View File
@@ -57,7 +57,7 @@ extern const s8 gUnk_080CC0C2[];
void Puffstool(PuffstoolEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)Puffstool_Functions);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void Puffstool_OnTick(PuffstoolEntity* this) {
@@ -72,7 +72,7 @@ void Puffstool_OnCollide(PuffstoolEntity* this) {
/* ... */
break;
case 0x1b:
sub_0804AA1C(super);
EnemyDetachFX(super);
tmp = gUnk_080CBFE8[(*(Entity**)&super->contactedEntity)->type];
if (tmp < this->unk_82) {
@@ -133,7 +133,7 @@ void sub_08025180(PuffstoolEntity* this) {
super->timer = Random();
super->animationState = (((*(Entity**)&super->contactedEntity)->direction ^ 0x10) >> 3);
InitializeAnimation(super, super->animationState + 4);
sub_0804AA1C(super);
EnemyDetachFX(super);
}
void sub_080251AC(PuffstoolEntity* this) {
@@ -292,7 +292,7 @@ void sub_080254B4(PuffstoolEntity* this) {
sub_080256B4(this);
} else {
super->action = 0xc;
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
InitializeAnimation(super, 0);
}
@@ -376,7 +376,7 @@ void sub_0802563C(PuffstoolEntity* this) {
super->hitType = 0x82;
this->unk_82 = 240;
sub_080256B4(this);
sub_0804AA1C(super);
EnemyDetachFX(super);
} else if (this->unk_84 < 120) {
u32 tmp3 = gUnk_080CBFF8[this->unk_84 >> 4];
if ((this->unk_84 & tmp3) == 0) {
+2 -2
View File
@@ -49,7 +49,7 @@ void RockChuchu_OnCollision(Entity* this) {
#ifndef EU
entity->iframes = -8;
#endif
sub_0804A4E4(this, entity);
EnemyCopyParams(this, entity);
this->action = 2;
COLLISION_OFF(this);
this->spriteSettings.draw = 0;
@@ -100,7 +100,7 @@ void sub_080223E4(Entity* this) {
entity = this->child;
if (entity != NULL) {
entity->contactFlags = 0x94;
entity->contactFlags = (CONTACT_NOW | 0x14);
entity->iframes = 0x10;
#ifndef EU
entity->knockbackDuration = 0xc;
+5 -5
View File
@@ -52,7 +52,7 @@ void Rollobite_OnCollision(RollobiteEntity* this) {
InitializeAnimation(super, super->animationState + 8);
}
if (super->contactFlags != 0x80) {
if (super->contactFlags != CONTACT_NOW) {
if (super->action == 4 || super->action == 5) {
super->action = 4;
super->timer = 180;
@@ -61,7 +61,7 @@ void Rollobite_OnCollision(RollobiteEntity* this) {
}
}
if (super->contactFlags == 0x93)
if (super->contactFlags == (CONTACT_NOW | 0x13))
Rollobite_OnTick(this);
}
@@ -188,16 +188,16 @@ void Rollobite_RolledUp(RollobiteEntity* this) {
if ((super->frame & ANIM_DONE) == 0)
GetNextFrame(super);
unk = sub_080044EC(super, 0x2800);
unk = BounceUpdate(super, Q_8_8(40.0));
if (unk == 0) {
if (unk == BOUNCE_DONE_ALL) {
if (--super->timer == 0) {
super->action = 5;
InitializeAnimation(super, super->animationState + 12);
}
RegisterCarryEntity(super);
} else {
if (unk == 1)
if (unk == BOUNCE_INIT_NEXT)
EnqueueSFX(SFX_PLACE_OBJ);
if (!(super->direction & DIR_NOT_MOVING_CHECK))
+2 -2
View File
@@ -43,7 +43,7 @@ u32 sub_0803163C(RopeEntity* this);
void Rope(RopeEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)Rope_Functions);
SetChildOffset(super, 0, 1, -16);
EnemySetFXOffset(super, 0, 1, -16);
}
void Rope_OnTick(RopeEntity* this) {
@@ -63,7 +63,7 @@ void Rope_OnCollision(RopeEntity* this) {
sub_08031600(this);
}
if (super->confusedTime) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, Rope_Functions);
}
+3 -3
View File
@@ -45,7 +45,7 @@ void RopeGolden(RopeGoldenEntity* this) {
gUnk_080012C8[x](super);
} else {
RopeGolden_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
}
@@ -61,7 +61,7 @@ void RopeGolden_OnTick(RopeGoldenEntity* this) {
void RopeGolden_OnCollision(RopeGoldenEntity* this) {
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, RopeGolden_Functions);
}
@@ -70,7 +70,7 @@ void RopeGolden_OnDeath(RopeGoldenEntity* this) {
if ((super->gustJarState & 2) == 0) {
SetGlobalFlag(super->type2);
}
CreateDeathFx(super, 0xff, ITEM_RUPEE100);
EnemyCreateDeathFX((Enemy*)super, 0xff, ITEM_RUPEE100);
}
void sub_08038258(RopeGoldenEntity* this) {
+6 -6
View File
@@ -40,7 +40,7 @@ void RupeeLike(RupeeLikeEntity* this) {
u32 uVar1;
if (super->type2 == 0) {
uVar1 = (u8)sub_080043E8(super);
uVar1 = (u8)GetTileHazardType(super);
if (uVar1 != 0) {
if (super->action == 4) {
sub_080296D8(this);
@@ -48,7 +48,7 @@ void RupeeLike(RupeeLikeEntity* this) {
sub_08001290(super, uVar1);
} else {
RupeeLike_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
} else {
sub_080293DC(this);
@@ -75,12 +75,12 @@ void RupeeLike_OnCollision(RupeeLikeEntity* this) {
super->timer = 60;
super->subtimer = 0;
this->unk_83 = 0x41;
super->flags2 &= 0xfc;
super->collisionMask &= 0xfc;
this->unk_80 = gPlayerEntity.base.spritePriority.b1;
EnqueueSFX(SFX_PLACE_OBJ);
} else {
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
}
}
@@ -88,7 +88,7 @@ void RupeeLike_OnCollision(RupeeLikeEntity* this) {
}
void RupeeLike_OnDeath(RupeeLikeEntity* this) {
CreateDeathFx(super, 0xff, gUnk_080CCC34[this->unk_84 * 3 + super->type]);
EnemyCreateDeathFX((Enemy*)super, 0xff, gUnk_080CCC34[this->unk_84 * 3 + super->type]);
}
void RupeeLike_OnGrabbed(RupeeLikeEntity* this) {
@@ -255,7 +255,7 @@ void sub_080296D8(RupeeLikeEntity* this) {
gPlayerEntity.base.speed = 0x140;
super->action = 5;
super->subtimer = 60;
super->flags2 |= 3;
super->collisionMask |= 3;
if ((s8)super->iframes == 0) {
super->iframes = 0xf4;
}
+3 -3
View File
@@ -30,7 +30,7 @@ void sub_08038B90(ScissorsBeetleEntity*);
void ScissorsBeetle(Entity* this) {
EnemyFunctionHandler(this, ScissorsBeetle_Functions);
SetChildOffset(this, 0, 1, -0x10);
EnemySetFXOffset(this, 0, 1, -0x10);
}
void ScissorsBeetle_OnTick(ScissorsBeetleEntity* this) {
@@ -40,11 +40,11 @@ void ScissorsBeetle_OnTick(ScissorsBeetleEntity* this) {
void ScissorsBeetle_OnCollision(ScissorsBeetleEntity* this) {
Entity* child;
if (super->confusedTime) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, ScissorsBeetle_Functions);
if ((super->contactFlags & 0x80) && super->action != 4) {
if ((super->contactFlags & CONTACT_NOW) && super->action != 4) {
u32 knockbackDir;
child = super->child;
child->iframes = super->iframes;
+3 -3
View File
@@ -40,7 +40,7 @@ static void (*const Slime_Functions[])(SlimeEntity*) = {
void Slime(SlimeEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)Slime_Functions);
SetChildOffset(super, 0, 1, -12);
EnemySetFXOffset(super, 0, 1, -12);
}
void Slime_OnTick(SlimeEntity* this) {
@@ -58,7 +58,7 @@ void Slime_OnCollision(SlimeEntity* this) {
}
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
}
@@ -149,7 +149,7 @@ void sub_08045178(SlimeEntity* this, Entity* child, int offsetX, int offsetY) {
if (child == NULL)
return;
sub_0804A4E4(super, child);
EnemyCopyParams(super, child);
if (GetCollisionDataRelativeTo(child, offsetX, offsetY))
return;
+4 -4
View File
@@ -23,7 +23,7 @@ void Sluggula(Entity* this) {
if (this->type == 1) {
EnemyFunctionHandler(this, Sluggula_Functions);
SetChildOffset(this, 0, 1, -0x10);
EnemySetFXOffset(this, 0, 1, -0x10);
} else if (this->type == 0) {
if (this->z.HALF.HI == 0) {
u32 idx = sub_080012DC(this);
@@ -34,7 +34,7 @@ void Sluggula(Entity* this) {
}
gUnk_080CBDD4[GetNextFunction(this)](this);
SetChildOffset(this, 0, 1, -0x10);
EnemySetFXOffset(this, 0, 1, -0x10);
} else {
sub_08023E10(this);
}
@@ -46,7 +46,7 @@ void Sluggula_OnTick(Entity* this) {
void Sluggula_OnCollision(Entity* this) {
if (this->confusedTime)
Create0x68FX(this, FX_STARS);
EnemyCreateFX(this, FX_STARS);
if (this->type == 1) {
EnemyFunctionHandlerAfterCollision(this, Sluggula_Functions);
@@ -130,7 +130,7 @@ void sub_08023CE0(Entity* this) {
if (this->frame & ANIM_DONE) {
Entity* entity = CreateEnemy(SLUGGULA, 1);
if (entity != NULL) {
sub_0804A4E4(this, entity);
EnemyCopyParams(this, entity);
DeleteThisEntity();
}
} else {
+1 -1
View File
@@ -22,7 +22,7 @@ void Spark_OnTick(Entity* this) {
void Spark_OnCollision(Entity* this) {
Entity* entity;
if (this->contactFlags & 0x80) {
if (this->contactFlags & CONTACT_NOW) {
if ((this->contactFlags & 0x7f) == 0x14) {
COLLISION_OFF(this);
this->iframes = 0;
+4 -4
View File
@@ -42,7 +42,7 @@ extern const Hitbox* const gUnk_080CC944[];
void SpearMoblin(SpearMoblinEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)SpearMoblin_Functions);
SetChildOffset(super, 0, 1, -0x20);
EnemySetFXOffset(super, 0, 1, -0x20);
if (super->child && super->child->next) {
CopyPosition(super, super->child);
}
@@ -54,10 +54,10 @@ void SpearMoblin_OnTick(SpearMoblinEntity* this) {
void SpearMoblin_OnCollision(SpearMoblinEntity* this) {
if (super->confusedTime != 0)
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
EnemyFunctionHandlerAfterCollision(super, SpearMoblin_Functions);
if (super->contactFlags & 0x80) {
if (super->contactFlags & CONTACT_NOW) {
if (super->action != 4) {
sub_08028754(this);
} else {
@@ -398,7 +398,7 @@ bool32 sub_080288A4(SpearMoblinEntity* this) {
void sub_080288C0(SpearMoblinEntity* this) {
Entity* entity = super->child;
if ((entity != NULL) && (entity->contactFlags & 0x80)) {
if ((entity != NULL) && (entity->contactFlags & CONTACT_NOW)) {
super->knockbackDirection = entity->knockbackDirection;
super->iframes = -entity->iframes;
super->knockbackSpeed = entity->knockbackSpeed;
+5 -5
View File
@@ -22,7 +22,7 @@ extern const s8 gUnk_080CD318[];
void SpikedBeetle(Entity* this) {
EnemyFunctionHandler(this, SpikedBeetle_Functions);
SetChildOffset(this, 0, 1, -0x10);
EnemySetFXOffset(this, 0, 1, -0x10);
}
void SpikedBeetle_OnTick(Entity* this) {
@@ -63,7 +63,7 @@ void SpikedBeetle_OnCollision(Entity* this) {
}
}
if (this->confusedTime) {
Create0x68FX(this, FX_STARS);
EnemyCreateFX(this, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(this, SpikedBeetle_Functions);
}
@@ -152,12 +152,12 @@ void sub_0802B880(Entity* this) {
void sub_0802B8B0(Entity* this) {
ProcessMovement2(this);
switch (sub_080044EC(this, 0x1800)) {
case 0:
switch (BounceUpdate(this, Q_8_8(24.0))) {
case BOUNCE_DONE_ALL:
this->action = 7;
this->timer = 150;
/* fallthrough */
case 1:
case BOUNCE_INIT_NEXT:
EnqueueSFX(SFX_12B);
break;
}
+3 -3
View File
@@ -37,7 +37,7 @@ extern u32 sub_0804A024(Entity*, u32, u32);
void SpinyBeetle(Entity* this) {
EnemyFunctionHandler(this, SpinyBeetle_Functions);
SetChildOffset(this, 0, 1, -0x10);
EnemySetFXOffset(this, 0, 1, -0x10);
}
void SpinyBeetle_OnTick(SpinyBeetleEntity* this) {
@@ -46,11 +46,11 @@ void SpinyBeetle_OnTick(SpinyBeetleEntity* this) {
void SpinyBeetle_OnCollision(SpinyBeetleEntity* this) {
if (super->confusedTime) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, SpinyBeetle_Functions);
if (super->contactFlags & 0x80) {
if (super->contactFlags & CONTACT_NOW) {
if (super->iframes > 0 && super->child) {
sub_08033E1C(this);
}
+5 -5
View File
@@ -27,7 +27,7 @@ extern Entity* gUnk_020000B0;
void SpinyChuchu(SpinyChuchuEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)SpinyChuchu_Functions);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void SpinyChuchu_OnTick(SpinyChuchuEntity* this) {
@@ -55,13 +55,13 @@ void SpinyChuchu_OnCollision(SpinyChuchuEntity* this) {
case 0x18:
case 0x19:
case 0x1a:
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
super->action = 5;
super->hitType = 0x5c;
InitializeAnimation(super, 1);
}
} else if (super->contactFlags == 0x94) {
Create0x68FX(super, FX_STARS);
} else if (super->contactFlags == (CONTACT_NOW | 0x14)) {
EnemyCreateFX(super, FX_STARS);
super->action = 5;
InitializeAnimation(super, 1);
}
@@ -216,7 +216,7 @@ void sub_0802281C(SpinyChuchuEntity* this) {
super->action = 2;
super->speed = 0x20;
InitializeAnimation(super, 0);
sub_0804AA1C(super);
EnemyDetachFX(super);
}
}
+10 -10
View File
@@ -49,7 +49,7 @@ u32 sub_08039B28(StalfosEntity*);
void Stalfos(StalfosEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)&Stalfos_Functions);
SetChildOffset(super, 0, 1, -0x12);
EnemySetFXOffset(super, 0, 1, -0x12);
}
void Stalfos_OnTick(StalfosEntity* this) {
@@ -93,7 +93,7 @@ void Stalfos_OnCollision(StalfosEntity* this) {
r1 = super->child;
if (r1 == NULL) {
if (super->action < 9) {
r1 = CreateProjectileWithParent(super, STALFOS_PROJECTILE, 1);
r1 = EnemyCreateProjectile(super, STALFOS_PROJECTILE, 1);
if (r1 != NULL) {
r1->frameIndex = super->animationState << 1;
r1->type2 = 2;
@@ -110,17 +110,17 @@ void Stalfos_OnCollision(StalfosEntity* this) {
sub_08039A48(this);
this->unk_78 += 0x5a;
}
super->flags2 &= 0xfb;
super->collisionMask &= 0xfb;
}
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, Stalfos_Functions);
}
void Stalfos_OnDeath(StalfosEntity* this) {
if (super->type == 0) {
CreateDeathFx(super, 0xf3, 0);
EnemyCreateDeathFX((Enemy*)super, 0xf3, 0);
} else {
GenericDeath(super);
}
@@ -144,7 +144,7 @@ void Stalfos_SubAction1(StalfosEntity* this) {
void Stalfos_SubAction2(StalfosEntity* this) {
Entity* projectile = super->child;
if (projectile == NULL) {
projectile = CreateProjectileWithParent(super, STALFOS_PROJECTILE, 1);
projectile = EnemyCreateProjectile(super, STALFOS_PROJECTILE, 1);
if (projectile != NULL) {
projectile->frameIndex = super->animationState << 1;
projectile->type2 = 1;
@@ -154,7 +154,7 @@ void Stalfos_SubAction2(StalfosEntity* this) {
}
super->child = NULL;
super->gustJarState &= 0xfb;
super->flags2 &= 0xfb;
super->collisionMask &= 0xfb;
sub_08039A48(this);
this->unk_78 += 0x5a;
}
@@ -280,7 +280,7 @@ void Stalfos_Action12(StalfosEntity* this) {
} else {
sub_08039A48(this);
}
super->flags2 |= 4;
super->collisionMask |= 4;
this->unk_78 += 0x3c;
}
}
@@ -397,7 +397,7 @@ void sub_08039A00(StalfosEntity* this, u32 param_2) {
}
void sub_08039A20(StalfosEntity* this) {
Entity* projectile = CreateProjectileWithParent(super, BONE_PROJECTILE, 0);
Entity* projectile = EnemyCreateProjectile(super, BONE_PROJECTILE, 0);
if (projectile != NULL) {
projectile->direction = super->direction;
this->unk_7c = 0x3c;
@@ -432,7 +432,7 @@ void sub_08039A70(StalfosEntity* this) {
void sub_08039AD4(StalfosEntity* this) {
u32 position = sub_08039B28(this);
if (position != 0xffff) {
Entity* projectile = CreateProjectileWithParent(super, STALFOS_PROJECTILE, super->type2);
Entity* projectile = EnemyCreateProjectile(super, STALFOS_PROJECTILE, super->type2);
if (projectile != NULL) {
projectile->parent = super;
super->action = 0xb;
+1 -1
View File
@@ -46,7 +46,7 @@ void Takkuri_OnTick(TakkuriEntity* this) {
}
void Takkuri_OnCollision(TakkuriEntity* this) {
if (super->contactFlags & 0x80) {
if (super->contactFlags & CONTACT_NOW) {
if ((super->contactFlags & 0x7f) == 0) {
u32 direction;
sub_0803C0AC(super);
+4 -4
View File
@@ -38,7 +38,7 @@ static void (*const Tektite_Functions[])(TektiteEntity*) = {
void Tektite(TektiteEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)Tektite_Functions);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void Tektite_OnTick(TektiteEntity* this) {
@@ -60,10 +60,10 @@ static const u8 gUnk_080CDEF8[] = {
void Tektite_OnCollision(TektiteEntity* this) {
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, Tektite_Functions);
if ((super->contactFlags & 0x80) != 0) {
if ((super->contactFlags & CONTACT_NOW) != 0) {
switch (super->contactFlags & 0x3f) {
case 0x14:
super->action = 1;
@@ -147,7 +147,7 @@ void sub_0802F300(TektiteEntity* this) {
temp = super->z.HALF.HI;
rand = Random() & 0xf;
if (sub_080044EC(super, this->unk_80) == 1) {
if (BounceUpdate(super, this->unk_80) == BOUNCE_INIT_NEXT) {
super->action = 3;
super->subAction = 0;
if (super->type != 0) {
+5 -5
View File
@@ -33,7 +33,7 @@ static void (*const TektiteGolden_Functions[])(TektiteGoldenEntity*) = {
void TektiteGolden(TektiteGoldenEntity* this) {
EnemyFunctionHandler(super, (EntityActionArray)TektiteGolden_Functions);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void TektiteGolden_OnTick(TektiteGoldenEntity* this) {
@@ -48,10 +48,10 @@ void TektiteGolden_OnTick(TektiteGoldenEntity* this) {
void TektiteGolden_OnCollision(TektiteGoldenEntity* this) {
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, TektiteGolden_Functions);
if (super->contactFlags == 0x94) {
if (super->contactFlags == (CONTACT_NOW | 0x14)) {
super->action = 1;
super->subAction = 0;
super->timer = 20;
@@ -78,7 +78,7 @@ void TektiteGolden_OnDeath(TektiteGoldenEntity* this) {
} else {
uVar1 = ITEM_RUPEE100;
}
CreateDeathFx(super, 0xff, uVar1);
EnemyCreateDeathFX((Enemy*)super, 0xff, uVar1);
}
void TektiteGolden_OnConfused(TektiteGoldenEntity* this) {
@@ -129,7 +129,7 @@ void sub_08038048(TektiteGoldenEntity* this) {
temp = super->z.HALF.HI;
rand = Random() & 0xf;
if (sub_080044EC(super, 0x3000) == 1) {
if (BounceUpdate(super, Q_8_8(48.0)) == BOUNCE_INIT_NEXT) {
super->action = 3;
super->subAction = 0;
super->timer = 20;
+1 -1
View File
@@ -122,7 +122,7 @@ void TorchTrap_Reset(TorchTrapEntity* this) {
}
void TorchTrap_CreateProjectile(TorchTrapEntity* this) {
Entity* proj = CreateProjectileWithParent(super, TORCH_TRAP_PROJECTILE, 0);
Entity* proj = EnemyCreateProjectile(super, TORCH_TRAP_PROJECTILE, 0);
if (proj) {
u16 speed = super->speed;
if (super->speed) {
+2 -3
View File
@@ -5,6 +5,7 @@
* @brief Tree Item enemy
*/
#include "enemy.h"
#include "functions.h"
#include "item.h"
#include "object.h"
@@ -15,8 +16,6 @@ typedef struct {
static bool32 ShouldSpawnTreeItem(TreeItemEntity*);
extern void SetRoomTrackerFlag(Entity*);
const u8 gTreeItemDropTables[][16] = {
{ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
{ 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
@@ -74,7 +73,7 @@ void TreeItem(TreeItemEntity* this) {
break;
}
SetRoomTrackerFlag(super);
EnemyDisableRespawn(super);
DeleteThisEntity();
}
+8 -8
View File
@@ -43,7 +43,7 @@ typedef struct VaatiArm_HeapStruct {
VaatiArm_HeapStruct1 s1[5];
} VaatiArm_HeapStruct;
extern void sub_0804AA1C(Entity*);
extern void EnemyDetachFX(Entity*);
static u32 sub_080437DC(VaatiArmEntity*);
static bool32 sub_08043C98(VaatiArmEntity*);
@@ -835,7 +835,7 @@ static void sub_08043130(VaatiArmEntity* this) {
if (super->spriteSettings.draw == 0) {
super->subAction = 9;
super->timer = 60;
sub_0804AA1C(super);
EnemyDetachFX(super);
}
}
}
@@ -913,7 +913,7 @@ void sub_080432A8(VaatiArmEntity* this) {
super->subAction = 1;
super->timer = 0x1e;
((VaatiArm_HeapStruct*)super->myHeap)->s1[0].unk04.HWORD = 0x4000;
sub_0804AA1C(&((VaatiArm_HeapStruct*)super->myHeap)->entities[4]->base);
EnemyDetachFX(&((VaatiArm_HeapStruct*)super->myHeap)->entities[4]->base);
}
}
@@ -1066,7 +1066,7 @@ static void sub_08043580(VaatiArmEntity* this) {
entity->collisionFlags = entity->collisionFlags | 0x10;
entity->hitType = 0x39;
entity->hitbox = (Hitbox*)&gUnk_080FD538;
sub_0804AA1C(super);
EnemyDetachFX(super);
}
}
@@ -1401,7 +1401,7 @@ static void sub_08043C40(VaatiArmEntity* this, VaatiArm_HeapStruct1* heapStruct)
static bool32 sub_08043C98(VaatiArmEntity* this) {
#if defined EU || defined JP
Entity* e1 = &((VaatiArm_HeapStruct*)super->myHeap)->entities[3]->base;
if ((e1->contactFlags == 0x9d)) {
if ((e1->contactFlags == (CONTACT_NOW | 0x1d))) {
sub_08043D08(this);
return TRUE;
} else {
@@ -1410,7 +1410,7 @@ static bool32 sub_08043C98(VaatiArmEntity* this) {
#else
Entity* e1 = &((VaatiArm_HeapStruct*)super->myHeap)->entities[2]->base;
Entity* e2 = &((VaatiArm_HeapStruct*)super->myHeap)->entities[3]->base;
if ((e1->contactFlags == 0x9d) || (e2->contactFlags == 0x9d)) {
if ((e1->contactFlags == (CONTACT_NOW | 0x1d)) || (e2->contactFlags == (CONTACT_NOW | 0x1d))) {
sub_08043D08(this);
gRoomTransition.field_0x38 |= 2;
return TRUE;
@@ -1423,7 +1423,7 @@ static bool32 sub_08043C98(VaatiArmEntity* this) {
static void sub_08043CD4(VaatiArmEntity* this) {
u32 i;
for (i = 0; i < 5; i++) {
if (((VaatiArm_HeapStruct*)super->myHeap)->entities[i]->base.contactFlags == 0x9d) {
if (((VaatiArm_HeapStruct*)super->myHeap)->entities[i]->base.contactFlags == (CONTACT_NOW | 0x1d)) {
this->unk_7c = 0x78;
this->unk_7d = i;
return;
@@ -1443,7 +1443,7 @@ static void sub_08043D08(VaatiArmEntity* this) {
entity->flags &= ~ENT_COLLIDE;
entity->spriteSettings.draw = 0;
InitializeAnimation(entity, 0x13);
sub_0804AA1C(entity);
EnemyDetachFX(entity);
fx = CreateFx(entity, FX_GIANT_EXPLOSION4, 0);
if (fx != NULL) {
fx->x.HALF.HI += gUnk_080D13E9[super->type2];
+3 -3
View File
@@ -58,7 +58,7 @@ void VaatiBall(VaatiBallEntity* this) {
super->health = -1;
}
if (super->contactFlags & 0x80) {
if (super->contactFlags & CONTACT_NOW) {
if ((super->contactFlags & 0x3f) == 0 && super->action == 6) {
ModHealth(-2);
}
@@ -213,7 +213,7 @@ void sub_08044868(VaatiBallEntity* this) {
if (vaati->unk_86 > 1) {
u8 draw = super->spriteSettings.draw;
if (draw == 1 && this->unk_84 == 0) {
vaati = (VaatiBallEntity*)CreateProjectileWithParent(super, V1_DARK_MAGIC_PROJECTILE, 0);
vaati = (VaatiBallEntity*)EnemyCreateProjectile(super, V1_DARK_MAGIC_PROJECTILE, 0);
if (vaati) {
vaati->base.type2 = 1;
vaati->base.parent = super;
@@ -303,7 +303,7 @@ void sub_080449F8(VaatiBallEntity* this) {
this->unk_74++;
draw = super->spriteSettings.draw;
if (draw) {
vaati = (VaatiBallEntity*)CreateProjectileWithParent(super, V1_EYE_LASER, 0);
vaati = (VaatiBallEntity*)EnemyCreateProjectile(super, V1_EYE_LASER, 0);
if (vaati) {
vaati->base.y.HALF.HI += 4;
vaati->base.parent = super;
+2 -2
View File
@@ -62,7 +62,7 @@ const u16 gUnk_080CDE98[] = { 0xc0, 0x100, 0x140, 0x180 };
void VaatiEyesMacro(VaatiEyesMacroEntity* this) {
VaatiEyesMacro_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void VaatiEyesMacro_OnTick(VaatiEyesMacroEntity* this) {
@@ -98,7 +98,7 @@ void VaatiEyesMacro_OnCollision(VaatiEyesMacroEntity* this) {
}
}
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, (EntityActionArray)VaatiEyesMacro_Functions);
}
+2 -2
View File
@@ -67,7 +67,7 @@ void VaatiProjectile_OnTick(VaatiProjectileEntity* this) {
void VaatiProjectile_OnCollision(VaatiProjectileEntity* this) {
Entity* entity;
if (super->contactFlags == 0x80) {
if (super->contactFlags == CONTACT_NOW) {
#ifndef EU
if (super->health != 0) {
#endif
@@ -119,7 +119,7 @@ void VaatiProjectileFunction0Action0(VaatiProjectileEntity* this) {
} else {
super->action = 9;
super->z.HALF.HI = -0x80;
super->flags2 = 1;
super->collisionMask = 1;
}
InitializeAnimation(super, 0);
}
+4 -4
View File
@@ -369,7 +369,7 @@ void VaatiRebornEnemyType0Action4(VaatiRebornEnemyEntity* this) {
super->subtimer = 0;
}
if ((super->subtimer < 0x10) &&
(entity = CreateProjectileWithParent(super, V1_FIRE_PROJECTILE, this->unk_84), entity != NULL)) {
(entity = EnemyCreateProjectile(super, V1_FIRE_PROJECTILE, this->unk_84), entity != NULL)) {
entity->subtimer = super->subtimer;
entity->parent = super;
entity->z.HALF.HI = super->z.HALF.HI;
@@ -456,7 +456,7 @@ void VaatiRebornEnemyType0Action6(VaatiRebornEnemyEntity* this) {
if (--super->timer == 0) {
this->unk_74++;
SoundReq(SFX_150);
target = CreateProjectileWithParent(super, V1_DARK_MAGIC_PROJECTILE, 0);
target = EnemyCreateProjectile(super, V1_DARK_MAGIC_PROJECTILE, 0);
if (target != NULL) {
PositionRelative(super, target, 0, Q_16_16(-16.0));
target->parent = super;
@@ -539,7 +539,7 @@ void VaatiRebornEnemyType1Action1(VaatiRebornEnemyEntity* this) {
super->hitType = 0x2f;
InitAnimationForceUpdate(super, this->unk_74);
} else {
if (((super->contactFlags & 0x80) != 0) && (0 < super->iframes)) {
if (((super->contactFlags & CONTACT_NOW) != 0) && (0 < super->iframes)) {
parent->iframes = super->iframes;
parent->contactFlags = super->contactFlags;
}
@@ -665,7 +665,7 @@ void VaatiRebornEnemyType1PreAction(VaatiRebornEnemyEntity* this) {
}
parent = super->parent;
this->unk_77 = 0;
if ((super->contactFlags & 0x80) != 0) {
if ((super->contactFlags & CONTACT_NOW) != 0) {
if (gUnk_080D04D0[((VaatiRebornEnemyEntity*)parent)->unk_86] > super->health) {
if (2 < ++((VaatiRebornEnemyEntity*)parent)->unk_86) {
COLLISION_OFF(super);
+8 -8
View File
@@ -288,7 +288,7 @@ void VaatiTransfiguredType0Action3(VaatiTransfiguredEntity* this) {
switch (this->unk_80) {
case 0:
uVar4 = sub_080044EC(super, 0x2800);
uVar4 = BounceUpdate(super, Q_8_8(40.0));
if (uVar4 != 1)
break;
this->unk_80 = 1;
@@ -436,7 +436,7 @@ void VaatiTransfiguredType0Action4(VaatiTransfiguredEntity* this) {
super->timer = gUnk_080D0ABF[((u32)super->animationState << 1 | 1)];
} else {
if ((super->timer & 7) == 0) {
CreateProjectileWithParent(super, V2_PROJECTILE, super->subtimer);
EnemyCreateProjectile(super, V2_PROJECTILE, super->subtimer);
}
if (((super->subtimer != 0) && (1 < super->animationState)) && (super->timer < 6)) {
super->timer = 128;
@@ -482,7 +482,7 @@ void VaatiTransfiguredType0Action5(VaatiTransfiguredEntity* this) {
} else {
if (super->subtimer) {
if ((super->timer & 7) == 0) {
CreateProjectileWithParent(super, V2_PROJECTILE, super->subtimer);
EnemyCreateProjectile(super, V2_PROJECTILE, super->subtimer);
}
if (super->timer < 6) {
super->timer = 64;
@@ -490,7 +490,7 @@ void VaatiTransfiguredType0Action5(VaatiTransfiguredEntity* this) {
}
} else {
if ((super->timer & 0xf) == 0) {
entity = CreateProjectileWithParent(super, V2_PROJECTILE, 2);
entity = EnemyCreateProjectile(super, V2_PROJECTILE, 2);
if (entity != NULL) {
entity->type2 = 0;
if (this->unk_81 != 0) {
@@ -534,7 +534,7 @@ void VaatiTransfiguredType0Action6(VaatiTransfiguredEntity* this) {
} else {
if (super->subtimer) {
if ((super->timer & 7) == 0) {
CreateProjectileWithParent(super, V2_PROJECTILE, super->subtimer);
EnemyCreateProjectile(super, V2_PROJECTILE, super->subtimer);
}
if (super->timer < 6) {
super->timer = 128;
@@ -542,7 +542,7 @@ void VaatiTransfiguredType0Action6(VaatiTransfiguredEntity* this) {
}
} else {
if ((super->timer & 0x1f) == 0) {
pEVar2 = CreateProjectileWithParent(super, V2_PROJECTILE, 2);
pEVar2 = EnemyCreateProjectile(super, V2_PROJECTILE, 2);
if (pEVar2 != NULL) {
pEVar2->type2 = 1;
pEVar2->y.HALF.HI += -0x20;
@@ -1097,11 +1097,11 @@ void sub_080409B0(VaatiTransfiguredEntity* this) {
Knockback1(super);
}
} else {
if (((super->contactFlags & 0x80) != 0) && (0 < super->iframes)) {
if (((super->contactFlags & CONTACT_NOW) != 0) && (0 < super->iframes)) {
InitScreenShake(12, 1);
SoundReq(SFX_BOSS_HIT);
}
if ((super->contactFlags == 0x8a) && (gPlayerState.chargeState.action == 5)) {
if ((super->contactFlags == (CONTACT_NOW | 0xa)) && (gPlayerState.chargeState.action == 5)) {
super->health = 0xc0;
}
}
+1 -1
View File
@@ -72,7 +72,7 @@ void VaatiTransfiguredEye_OnCollision(VaatiTransfiguredEyeEntity* this) {
if (super->type != 0) {
pEVar4 = super->parent->parent;
if ((super->contactFlags & 0x80) != 0) {
if ((super->contactFlags & CONTACT_NOW) != 0) {
bVar1 = super->contactFlags & 0x3f;
if ((bVar1 == 0xe) || (bVar1 == 0x15)) {
+1 -1
View File
@@ -101,7 +101,7 @@ const s8 gUnk_080D0EB0[] = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0
0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd };
void VaatiWrath(VaatiWrathEntity* this) {
if (((super->type == 0) && ((super->contactFlags & 0x80) != 0)) && (super->health == 0)) {
if (((super->type == 0) && ((super->contactFlags & CONTACT_NOW) != 0)) && (super->health == 0)) {
COLLISION_ON(super);
super->health = 0xff;
if (--this->unk_84 == 0) {
+2 -2
View File
@@ -30,7 +30,7 @@ extern const s8 gUnk_080CD0B0[];
void WallMaster(WallMasterEntity* this) {
WallMaster_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void WallMaster_OnTick(WallMasterEntity* this) {
@@ -55,7 +55,7 @@ void WallMaster_OnCollision(WallMasterEntity* this) {
super->knockbackDuration -= 4;
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, (EntityActionArray)WallMaster_Functions);
+2 -2
View File
@@ -34,7 +34,7 @@ extern const s8 gUnk_080CD740[];
void WallMaster2(WallMaster2Entity* this) {
WallMaster2_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void WallMaster2_OnTick(WallMaster2Entity* this) {
@@ -53,7 +53,7 @@ void WallMaster2_OnCollision(WallMaster2Entity* this) {
break;
}
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, (EntityActionArray)WallMaster2_Functions);
}
+1 -1
View File
@@ -57,7 +57,7 @@ void Wisp_OnCollision(WispEntity* this) {
Entity* entity;
bits = super->contactFlags;
if ((bits & 0x80) == 0) {
if ((bits & CONTACT_NOW) == 0) {
return;
}
+4 -4
View File
@@ -13,7 +13,7 @@ extern void (*const WizzrobeFire_Actions[])(WizzrobeEntity*);
void WizzrobeFire(WizzrobeEntity* this) {
WizzrobeFire_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void WizzrobeFire_OnTick(WizzrobeEntity* this) {
@@ -22,7 +22,7 @@ void WizzrobeFire_OnTick(WizzrobeEntity* this) {
void WizzrobeFire_OnCollision(WizzrobeEntity* this) {
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, WizzrobeFire_Functions);
if (super->health == 0) {
@@ -40,7 +40,7 @@ void WizzrobeFire_Init(WizzrobeEntity* this) {
super->timer = 40;
super->subtimer = 96;
sub_0802F888(this);
projectile = CreateProjectileWithParent(super, FIRE_PROJECTILE, 0);
projectile = EnemyCreateProjectile(super, FIRE_PROJECTILE, 0);
if (projectile != NULL) {
super->child = projectile;
projectile->parent = super;
@@ -96,7 +96,7 @@ void WizzrobeFire_Action2(WizzrobeEntity* this) {
break;
case 6:
if (EntityInRectRadius(super, &gPlayerEntity.base, 0xa0, 0xa0) && CheckOnScreen(super)) {
Entity* projectile = CreateProjectileWithParent(super, FIRE_PROJECTILE, 1);
Entity* projectile = EnemyCreateProjectile(super, FIRE_PROJECTILE, 1);
if (projectile != NULL) {
projectile->direction = super->direction & 0x18;
}
+5 -5
View File
@@ -14,7 +14,7 @@ extern void (*const WizzrobeIce_Actions[])(WizzrobeEntity*);
void WizzrobeIce(WizzrobeEntity* this) {
WizzrobeIce_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void WizzrobeIce_OnTick(WizzrobeEntity* this) {
@@ -23,10 +23,10 @@ void WizzrobeIce_OnTick(WizzrobeEntity* this) {
void WizzrobeIce_OnCollision(WizzrobeEntity* this) {
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, WizzrobeIce_Functions);
if (super->contactFlags == 0x87) {
if (super->contactFlags == (CONTACT_NOW | 0x7)) {
Entity* obj = CreateObject(FLAME, 3, 0);
if (obj != NULL) {
obj->spritePriority.b0 = 3;
@@ -49,7 +49,7 @@ void WizzrobeIce_Init(WizzrobeEntity* this) {
super->timer = 40;
super->subtimer = 96;
sub_0802F888(this);
projectile = CreateProjectileWithParent(super, ICE_PROJECTILE, 0);
projectile = EnemyCreateProjectile(super, ICE_PROJECTILE, 0);
if (projectile != NULL) {
super->child = projectile;
projectile->parent = super;
@@ -103,7 +103,7 @@ void WizzrobeIce_Action2(WizzrobeEntity* this) {
break;
case 0xa:
if (EntityInRectRadius(super, &gPlayerEntity.base, 0xa0, 0xa0) && CheckOnScreen(super)) {
Entity* projectile = CreateProjectileWithParent(super, ICE_PROJECTILE, 1);
Entity* projectile = EnemyCreateProjectile(super, ICE_PROJECTILE, 1);
if (projectile != NULL) {
projectile->direction = super->direction & 0x18;
}
+6 -6
View File
@@ -23,7 +23,7 @@ void sub_0802F8E4(WizzrobeEntity*);
void WizzrobeWind(WizzrobeEntity* this) {
WizzrobeWind_Functions[GetNextFunction(super)](this);
SetChildOffset(super, 0, 1, -0x10);
EnemySetFXOffset(super, 0, 1, -0x10);
}
void WizzrobeWind_OnTick(WizzrobeEntity* this) {
@@ -32,10 +32,10 @@ void WizzrobeWind_OnTick(WizzrobeEntity* this) {
void WizzrobeWind_OnCollision(WizzrobeEntity* this) {
if (super->confusedTime != 0) {
Create0x68FX(super, FX_STARS);
EnemyCreateFX(super, FX_STARS);
}
EnemyFunctionHandlerAfterCollision(super, WizzrobeWind_Functions);
if (super->contactFlags == 0x87) {
if (super->contactFlags == (CONTACT_NOW | 0x7)) {
Entity* obj = CreateObject(FLAME, 3, 0);
if (obj != NULL) {
obj->spritePriority.b0 = 3;
@@ -68,7 +68,7 @@ void WizzrobeWind_Init(WizzrobeEntity* this) {
super->subtimer = 96;
sub_0802F888(this);
}
projectile = CreateProjectileWithParent(super, WIND_PROJECTILE, 0);
projectile = EnemyCreateProjectile(super, WIND_PROJECTILE, 0);
if (projectile != NULL) {
super->parent = projectile;
projectile->parent = super;
@@ -121,7 +121,7 @@ void WizzrobeWind_Action2(WizzrobeEntity* this) {
break;
case 8:
if (EntityInRectRadius(super, &gPlayerEntity.base, 0xa0, 0xa0) && CheckOnScreen(super)) {
Entity* projectile = CreateProjectileWithParent(super, WIND_PROJECTILE, 1);
Entity* projectile = EnemyCreateProjectile(super, WIND_PROJECTILE, 1);
if (projectile != NULL) {
projectile->direction = super->direction & 0x18;
}
@@ -192,7 +192,7 @@ void WizzrobeWind_Action3(WizzrobeEntity* this) {
parent->spriteSettings.draw = 0;
InitializeAnimation(super, super->animationState >> 1);
} else if (super->timer == 8) {
parent = CreateProjectileWithParent(super, WIND_PROJECTILE, 1);
parent = EnemyCreateProjectile(super, WIND_PROJECTILE, 1);
if (parent != NULL) {
parent->direction = super->direction & 0x18;
}
+93 -51
View File
@@ -1,5 +1,5 @@
#include "enemyUtils.h"
#include "enemy.h"
#include "definitions.h"
#include "entity.h"
#include "functions.h"
@@ -8,7 +8,8 @@
#include "projectile.h"
#include "save.h"
extern void SetRoomTrackerFlag(Entity*);
extern void EnemyDisableRespawn(Entity*);
extern void ReplaceMonitoredEntity(Entity*, Entity*);
extern EnemyDefinition gEnemyDefinitions[];
@@ -33,6 +34,24 @@ const struct_080D3D94 gUnk_080D3D94[] = {
const u16 gUnk_080D3E74[] = { 2373, 1105, 2324, 21568, 4177, 16656, 1365, 21760, 8209, 0, 20480, 5, 0, 0 };
void EnemyCopyParams(Entity* src, Entity* dest) {
Enemy* em_src = (Enemy*)src;
Enemy* em_dest = (Enemy*)dest;
em_dest->enemyFlags = (em_src->enemyFlags & EM_FLAG_MONITORED) | EM_FLAG_HAS_HOME;
em_dest->idx = em_src->idx;
em_dest->homeX = em_src->homeX;
em_dest->homeY = em_src->homeY;
em_dest->rangeX = em_src->rangeX;
em_dest->rangeY = em_src->rangeY;
CopyPositionAndSpriteOffset(&em_src->base, &em_dest->base);
if (em_src->enemyFlags & EM_FLAG_MONITORED) {
ReplaceMonitoredEntity(&em_src->base, &em_dest->base);
}
}
const EnemyDefinition* GetEnemyDefinition(Entity* entity) {
const EnemyDefinition* definition = &gEnemyDefinitions[entity->id];
if (definition->gfx == 0xffff) {
@@ -41,7 +60,7 @@ const EnemyDefinition* GetEnemyDefinition(Entity* entity) {
return definition;
}
bool32 EnemyInit(GenericEntity* this) {
bool32 EnemyInit(Enemy* this) {
if ((super->flags & ENT_DID_INIT) == 0) {
const EnemyDefinition* definition = GetEnemyDefinition(super);
if (LoadEnemySprite(super, definition) == FALSE) {
@@ -60,7 +79,7 @@ bool32 EnemyInit(GenericEntity* this) {
if (super->speed == 0) {
super->speed = definition->speed;
}
super->flags2 = definition->flags2;
super->collisionMask = definition->collisionMask;
super->hitType = definition->damageType;
super->hitbox = (Hitbox*)definition->ptr.hitbox;
super->health = definition->health;
@@ -68,19 +87,19 @@ bool32 EnemyInit(GenericEntity* this) {
super->hurtType = 0x41;
}
UpdateSpriteForCollisionLayer(super);
if ((this->field_0x6c.HALF.HI & 0x20) != 0) {
if (this->enemyFlags & EM_FLAG_CAPTAIN) {
u32 uVar4 = gUnk_080D3E74[super->id >> 3] >> ((super->id & 7) << 1) & 3;
if (uVar4 != 0) {
Entity* object = CreateObject(MULLDOZER_SPAWN_POINT, uVar4 - 1, 0);
if (object != NULL) {
object->timer = super->flags;
object->subtimer = super->spriteSettings.draw;
object->spritePriority.b0 = 3;
object->parent = super;
CopyPosition(super, object);
super->flags &= ~ENT_COLLIDE;
Entity* spawn_pt = CreateObject(MULLDOZER_SPAWN_POINT, uVar4 - 1, 0);
if (spawn_pt != NULL) {
spawn_pt->timer = super->flags;
spawn_pt->subtimer = super->spriteSettings.draw;
spawn_pt->spritePriority.b0 = 3;
spawn_pt->parent = super;
CopyPosition(super, spawn_pt);
COLLISION_OFF(super);
super->spriteSettings.draw = 0;
this->field_0x6c.HALF.HI |= 0x10;
this->enemyFlags |= EM_FLAG_SUPPORT;
}
}
}
@@ -111,65 +130,66 @@ bool32 LoadEnemySprite(Entity* entity, const EnemyDefinition* definition) {
return TRUE;
}
void sub_0804A720(GenericEntity* this) {
void sub_0804A720(Entity* parent) {
int iVar2;
const struct_080D3D94* pbVar3;
GenericEntityData* ptr;
Enemy* this = (Enemy*)parent;
if ((this->field_0x6c.HALF.HI & 4) != 0) {
if (this->enemyFlags & EM_FLAG_HAS_HOME) {
return;
}
pbVar3 = &gUnk_080D3D94[super->id];
ptr = (GenericEntityData*)&this->field_0x68;
ptr = (GenericEntityData*)&this->child;
if (ptr->field_0x7c.BYTES.byte2 == 0) {
this->field_0x6e.HALF.LO = pbVar3->unk_0;
this->rangeX = pbVar3->unk_0;
} else {
this->field_0x6e.HALF.LO = ptr->field_0x7c.BYTES.byte2;
this->rangeX = ptr->field_0x7c.BYTES.byte2;
}
if (ptr->field_0x7c.BYTES.byte3 == 0) {
this->field_0x6e.HALF.HI = pbVar3->unk_1;
this->rangeY = pbVar3->unk_1;
} else {
this->field_0x6e.HALF.HI = ptr->field_0x7c.BYTES.byte3;
this->rangeY = ptr->field_0x7c.BYTES.byte3;
}
if (ptr->cutsceneBeh.HWORD != 0) {
this->field_0x70.HALF.LO = ptr->cutsceneBeh.HWORD + gRoomControls.origin_x;
this->homeX = ptr->cutsceneBeh.HWORD + gRoomControls.origin_x;
} else {
iVar2 = this->field_0x6e.HALF.LO * 4;
iVar2 = this->rangeX * 4;
if (super->x.HALF.HI >= iVar2) {
this->field_0x70.HALF.LO = super->x.HALF_U.HI - 4 * this->field_0x6e.HALF.LO;
this->homeX = super->x.HALF_U.HI - 4 * this->rangeX;
} else {
this->field_0x70.HALF.LO = 0;
this->homeX = 0;
}
}
if (ptr->field_0x86.HWORD != 0) {
this->field_0x70.HALF.HI = ptr->field_0x86.HWORD + gRoomControls.origin_y;
this->homeY = ptr->field_0x86.HWORD + gRoomControls.origin_y;
} else {
iVar2 = this->field_0x6e.HALF.HI * 4;
iVar2 = this->rangeY * 4;
if (super->y.HALF.HI >= iVar2) {
this->field_0x70.HALF.HI = super->y.HALF.HI - iVar2;
this->homeY = super->y.HALF.HI - iVar2;
} else {
this->field_0x70.HALF.HI = 0;
this->homeY = 0;
}
}
this->field_0x6c.HALF.HI |= 4;
this->enemyFlags |= EM_FLAG_HAS_HOME;
}
void CreateDeathFx(GenericEntity* parent, u32 parentId, u32 fixedItem);
void EnemyCreateDeathFX(Enemy* parent, u32 parentId, u32 fixedItem);
void GenericDeath(Entity* this) {
CreateDeathFx((GenericEntity*)this, this->id, 0);
EnemyCreateDeathFX((Enemy*)this, this->id, 0);
}
void CreateDeathFx(GenericEntity* parent, u32 parentId, u32 fixedItem) {
void EnemyCreateDeathFX(Enemy* parent, u32 parentId, u32 fixedItem) {
DeathFxObject* deathFx;
DeathFxObject* deathFx2;
u8 bVar3;
if ((parent->field_0x6c.HALF.HI & 1) != 0) {
if ((parent->field_0x6c.HALF.HI & 2) != 0) {
if (parent->enemyFlags & EM_FLAG_BOSS) {
if (parent->enemyFlags & EM_FLAG_BOSS_KILLED) {
return;
}
deathFx = (DeathFxObject*)CreateObject(DEATH_FX, parent->base.id, 0);
@@ -179,7 +199,7 @@ void CreateDeathFx(GenericEntity* parent, u32 parentId, u32 fixedItem) {
deathFx->unk6c = 1;
PositionRelative(&(parent->base), &(deathFx->base), 0, 1);
deathFx->base.parent = &(parent->base);
parent->field_0x6c.HALF.HI |= 2;
parent->enemyFlags |= EM_FLAG_BOSS_KILLED;
if ((parent->base.id == 0x37) && (gRoomTransition.field_0x39 != 0)) {
DeleteThisEntity();
}
@@ -190,7 +210,7 @@ void CreateDeathFx(GenericEntity* parent, u32 parentId, u32 fixedItem) {
} else {
int tmp = parent->base.gustJarState & 2;
if (tmp == 0) {
SetRoomTrackerFlag(&(parent->base));
EnemyDisableRespawn(&(parent->base));
gSave.enemies_killed++;
parent->base.gustJarState |= 2;
parent->base.timer = 255;
@@ -204,7 +224,7 @@ void CreateDeathFx(GenericEntity* parent, u32 parentId, u32 fixedItem) {
deathFx2->base.child = &(parent->base);
CopyPosition(&(parent->base), &(deathFx2->base));
}
if ((parent->field_0x6c.HALF.HI & 8) != 0) {
if (parent->enemyFlags & EM_FLAG_NO_DEATH_FX) {
deathFx2->unk6c |= 8;
DeleteEntity(&(parent->base));
return;
@@ -245,7 +265,7 @@ void CreateDeathFx(GenericEntity* parent, u32 parentId, u32 fixedItem) {
}
}
Entity* CreateProjectileWithParent(Entity* parent, u32 projectileId, u32 projectileType) {
Entity* EnemyCreateProjectile(Entity* parent, u32 projectileId, u32 projectileType) {
Entity* projectile;
projectile = CreateProjectile(projectileId);
@@ -256,11 +276,11 @@ Entity* CreateProjectileWithParent(Entity* parent, u32 projectileId, u32 project
return projectile;
}
void SetChildOffset(Entity* entity, s32 xOffset, s32 yOffset, s32 zOffset) {
void EnemySetFXOffset(Entity* entity, s32 xOffset, s32 yOffset, s32 zOffset) {
Entity* other;
GenericEntity* this = (GenericEntity*)entity;
Enemy* this = (Enemy*)entity;
other = *(Entity**)&this->field_0x68;
other = this->child;
if (other != NULL) {
other->spriteRendering.b3 = super->spriteRendering.b3;
other->spriteOrientation.flipY = super->spriteOrientation.flipY;
@@ -271,22 +291,44 @@ void SetChildOffset(Entity* entity, s32 xOffset, s32 yOffset, s32 zOffset) {
}
}
Entity* Create0x68FX(Entity* parent, u32 fxType) {
Entity* EnemyCreateFX(Entity* parent, u32 fxType) {
Entity* fx;
GenericEntity* this = (GenericEntity*)parent;
Enemy* this = (Enemy*)parent;
if ((*(Entity**)&this->field_0x68 == NULL) && (fx = CreateFx(super, fxType, 0), fx != NULL)) {
*(Entity**)&this->field_0x68 = fx;
if (this->child == NULL && (fx = CreateFx(super, fxType, 0), fx != NULL)) {
this->child = fx;
} else {
fx = NULL;
}
return fx;
}
void sub_0804AA1C(Entity* entity) {
GenericEntity* this = (GenericEntity*)entity;
if (*(Entity**)&this->field_0x68 != NULL) {
(*(Entity**)&this->field_0x68)->parent = NULL;
*(Entity**)&this->field_0x68 = NULL;
void EnemyDetachFX(Entity* entity) {
Enemy* this = (Enemy*)entity;
if (this->child != NULL) {
this->child->parent = NULL;
this->child = NULL;
}
}
/** Unsets bitfield 0x80 before calling GetNextFunction, so that the enemyFunction 1 is not called. */
void EnemyFunctionHandlerAfterCollision(Entity* entity, void (*const fntable[])()) {
u32 idx;
entity->contactFlags &= ~CONTACT_NOW;
idx = GetNextFunction(entity);
entity->contactFlags |= CONTACT_NOW;
fntable[idx](entity);
}
Entity* CreateEnemy(u32 subtype, u32 form) {
Entity* enemy;
enemy = GetEmptyEntity();
if (enemy != NULL) {
enemy->kind = ENEMY;
enemy->id = subtype;
enemy->type = form;
AppendEntityToList(enemy, 4);
}
return enemy;
}
+2 -2
View File
@@ -22,7 +22,7 @@ void DeleteAllEntities(void);
void sub_0805E98C(void);
extern void UnloadOBJPalette2(Entity*);
extern void sub_08017744(Entity*);
extern void sub_0804AA1C(Entity*);
extern void EnemyDetachFX(Entity*);
void ClearDeletedEntity(Entity*);
extern void ram_ClearAndUpdateEntities(void);
@@ -370,7 +370,7 @@ void DeleteEntity(Entity* ent) {
zFree(ent->myHeap);
ent->myHeap = NULL;
if (ent->kind == ENEMY) {
sub_0804AA1C(ent);
EnemyDetachFX(ent);
}
COLLISION_OFF(ent);
ent->spriteSettings.draw = 0;
+1 -1
View File
@@ -1145,7 +1145,7 @@ void sub_080610B8(void) {
default:
uVar6 = 0;
tmp4 = 0;
switch (gInput.unk4) {
switch (gInput.menuScrollKeys) {
case DPAD_UP:
tmp4 = -1;
break;
+5 -4
View File
@@ -10,6 +10,7 @@
#include "sound.h"
#include "structures.h"
#include "ui.h"
#include "collision.h"
extern u8 gUnk_03003DE0;
extern u8 gUnk_03000C30;
@@ -219,8 +220,8 @@ void PlayerUpdate(PlayerEntity* this) {
}
HandlePlayerLife(super);
DoPlayerAction(this);
if ((super->z.WORD == 0) && (super->action == 1 || super->action == 9))
sub_08008790(super, 8);
if ((super->z.WORD == 0) && (super->action == PLAYER_NORMAL || super->action == PLAYER_MINISH))
DoTileInteractionHere(super, 8);
sub_080171F0();
}
sub_08078FB0(super);
@@ -236,7 +237,7 @@ static void HandlePlayerLife(Entity* this) {
gHUD.rActionInteractTile = R_ACTION_NONE;
gHUD.rActionGrabbing = R_ACTION_NONE;
if ((gPlayerEntity.base.contactFlags & 0x80) && (gPlayerEntity.base.iframes > 0))
if ((gPlayerEntity.base.contactFlags & CONTACT_NOW) && (gPlayerEntity.base.iframes > 0))
SoundReq(SFX_86);
gPlayerState.flags &= ~(PL_FALLING | PL_CONVEYOR_PUSHED);
@@ -323,7 +324,7 @@ static void sub_080171F0(void) {
if (gPlayerEntity.unk_7a != 0)
gPlayerEntity.unk_7a--;
gPlayerEntity.base.contactFlags &= ~0x80;
gPlayerEntity.base.contactFlags &= ~CONTACT_NOW;
if (gPlayerEntity.base.action != PLAYER_DROWN)
COPY_FLAG_FROM_TO(gPlayerState.flags, 0x2, 0x10000);
+30 -30
View File
@@ -19,9 +19,9 @@ void sub_08076DF4(ItemBehavior* this, u32 index) {
this->playerAnimationState = gPlayerEntity.base.animationState;
this->priority |= 0x80;
this->priority++;
gPlayerState.gustJarSpeed = 1;
gPlayerEntity.unk_74 = NULL;
gPlayerState.field_0x1c = 1;
gPlayerState.gustJarCharge = JAR_CHARGE_SMALL;
gPlayerEntity.carriedEntity = NULL;
gPlayerState.gustJarState = PL_JAR_SUCK;
sub_08077BB8(this);
} else {
DeleteItemBehavior(this, index);
@@ -31,7 +31,7 @@ void sub_08076DF4(ItemBehavior* this, u32 index) {
void sub_08076E60(ItemBehavior* this, u32 index) {
Entity* playerItem;
if ((gPlayerState.field_0x1c & 0xf) == 0) {
if ((gPlayerState.gustJarState & 0xf) == 0) {
DeleteItemBehavior(this, index);
}
if ((this->playerFrame & 0x80) != 0) {
@@ -48,7 +48,7 @@ void sub_08076E60(ItemBehavior* this, u32 index) {
}
void sub_08076EC8(ItemBehavior* this, u32 index) {
if ((gPlayerState.field_0x1c & 0xf) == 0) {
if ((gPlayerState.gustJarState & 0xf) == PL_JAR_NONE) {
DeleteItemBehavior(this, index);
return;
}
@@ -56,11 +56,11 @@ void sub_08076EC8(ItemBehavior* this, u32 index) {
if (IsItemActive(this)) {
u32 animIndex;
if (this->timer > 0xef) {
gPlayerState.gustJarSpeed = 3;
gPlayerState.gustJarCharge = JAR_CHARGE_BIG;
} else if (++this->timer > 0x77) {
gPlayerState.gustJarSpeed = 2;
gPlayerState.gustJarCharge = JAR_CHARGE_MID;
} else {
gPlayerState.gustJarSpeed = 1;
gPlayerState.gustJarCharge = JAR_CHARGE_SMALL;
}
if (gPlayerEntity.base.subAction == 0x1b) {
@@ -88,16 +88,16 @@ void sub_08076EC8(ItemBehavior* this, u32 index) {
void sub_08076F64(ItemBehavior* this, u32 index) {
Entity* item;
PlayerEntity* player;
switch (gPlayerState.field_0x1c & 0xf) {
case 5:
switch (gPlayerState.gustJarState & 0xf) {
case PL_JAR_BLAST_UPDATE:
if (this->playerFrame & 0x80) {
if (this->subtimer) {
this->subtimer = 0;
this->timer = 0;
gPlayerState.gustJarSpeed = 1;
gPlayerState.gustJarCharge = JAR_CHARGE_SMALL;
player = &gPlayerEntity;
player->unk_74 = NULL;
gPlayerState.field_0x1c = 1;
player->carriedEntity = NULL;
gPlayerState.gustJarState = PL_JAR_SUCK;
gPlayerState.field_0xa &= ~(8 >> index);
this->stateID = 2;
SetItemAnim(this, ANIM_GUSTJAR_SUCK);
@@ -107,7 +107,7 @@ void sub_08076F64(ItemBehavior* this, u32 index) {
}
return;
} else {
gPlayerState.field_0x1c = 6;
gPlayerState.gustJarState = PL_JAR_BLAST_DONE;
SetItemAnim(this, ANIM_GUSTJAR_END);
return;
}
@@ -127,18 +127,18 @@ void sub_08076F64(ItemBehavior* this, u32 index) {
return;
}
return;
case 3:
gPlayerState.field_0x1c = 4;
case 4:
case PL_JAR_3:
gPlayerState.gustJarState = PL_JAR_BLAST_INIT;
case PL_JAR_BLAST_INIT:
if (IsItemActive(this)) {
this->subtimer = 1;
}
UpdateItemAnim(this);
if (this->playerFrame & 1) {
gPlayerState.field_0x1c = 5;
gPlayerEntity.unk_70 = NULL;
if (gPlayerState.gustJarSpeed) {
gPlayerState.gustJarState = PL_JAR_BLAST_UPDATE;
gPlayerEntity.pulledJarEntity = NULL;
if (gPlayerState.gustJarCharge) {
CreatePlayerItem(PLAYER_ITEM_GUST_BIG, 0, 0, 0);
}
}
@@ -150,27 +150,27 @@ void sub_08076F64(ItemBehavior* this, u32 index) {
gPlayerEntity.base.speed = 0x80;
UpdatePlayerMovement();
return;
case 6:
case PL_JAR_BLAST_DONE:
UpdateItemAnim(this);
if ((this->playerFrame & 0x80) == 0)
return;
break;
case 7:
case PL_JAR_ENT_ATTACHED:
SetItemAnim(this, ANIM_GUSTJAR_BLOW);
gPlayerState.field_0x1c = 3;
gPlayerState.gustJarSpeed = 0;
gPlayerState.gustJarState = PL_JAR_3;
gPlayerState.gustJarCharge = JAR_CHARGE_NONE;
return;
case 1:
case 2:
case PL_JAR_SUCK:
case PL_JAR_2:
default:
gPlayerState.field_0x1c = 3;
gPlayerState.gustJarState = PL_JAR_3;
SetItemAnim(this, ANIM_GUSTJAR_BLOW);
return;
case 0:
case PL_JAR_NONE:
break;
}
gPlayerState.field_0x1c = 0;
gPlayerEntity.unk_70 = NULL;
gPlayerState.gustJarState = PL_JAR_NONE;
gPlayerEntity.pulledJarEntity = NULL;
DeleteItemBehavior(this, index);
}
+2 -2
View File
@@ -7,7 +7,7 @@
#include "tiles.h"
s32 sub_080774A0(void);
extern s32 sub_0800875A(Entity*, u32, ItemBehavior*);
extern s32 DoItemTileInteraction(Entity*, u32, ItemBehavior*);
extern void UpdatePlayerMovement(void);
extern bool32 sub_0807B5B0(Entity*);
void sub_08077130(ItemBehavior*, u32);
@@ -71,7 +71,7 @@ void sub_080771C8(ItemBehavior* this, u32 index) {
CreateObjectWithParent(&gPlayerEntity.base, MOLE_MITTS_PARTICLE, this->playerFrame, 1);
}
if ((this->playerFrame & 0x10) != 0) {
if (sub_0800875A(&gPlayerEntity.base, 0xd, this) == 0) {
if (DoItemTileInteraction(&gPlayerEntity.base, 0xd, this) == 0) {
SetItemAnim(this, ANIM_MOLEMITTS_MISS);
this->stateID = 3;
SoundReq(SFX_ITEM_GLOVES_AIR);
+1 -1
View File
@@ -62,7 +62,7 @@ void sub_080768F8(ItemBehavior* this, u32 index) {
u32 bVar1;
u32 bVar2;
bVar1 = gPlayerState.field_0x1c | gPlayerState.attack_status | gPlayerState.heldObject | gPlayerState.jump_status;
bVar1 = gPlayerState.gustJarState | gPlayerState.attack_status | gPlayerState.heldObject | gPlayerState.jump_status;
bVar2 = (gPlayerState.flags & PL_IN_MINECART);
bVar1 |= bVar2;
if (bVar1 == 0) {
+1 -1
View File
@@ -35,7 +35,7 @@ void ItemRocsCape(ItemBehavior* this, u32 index) {
}
} else {
if (((u8)(gPlayerState.sword_state | gPlayerState.field_0xa | gPlayerState.attack_status |
gPlayerState.heldObject | gPlayerState.field_0x1c | gPlayerState.moleMittsState) == 0) &&
gPlayerState.heldObject | gPlayerState.gustJarState | gPlayerState.moleMittsState) == 0) &&
((((gPlayerState.floor_type != SURFACE_DOOR && gPlayerState.floor_type != SURFACE_DOOR_13 &&
gPlayerState.floor_type != SURFACE_PIT) ||
(gPlayerEntity.base.z.WORD != 0)) ||
+3 -3
View File
@@ -14,7 +14,7 @@ void sub_08076518(ItemBehavior*, u32);
void sub_080765E0(ItemBehavior*, u32);
void sub_0807660C(ItemBehavior*, u32);
extern s32 sub_0800875A(Entity*, u32, ItemBehavior*);
extern s32 DoItemTileInteraction(Entity*, u32, ItemBehavior*);
extern const u16 gUnk_0811BE38[];
extern const u16 gUnk_0811BE40[];
@@ -56,7 +56,7 @@ void sub_08076088(ItemBehavior* this, Entity* param_2, u32 param_3) {
PlayerCancelHoldItem(this, param_3);
} else {
PlayerEntity* playerEnt = &gPlayerEntity;
playerEnt->unk_74 = param_2;
playerEnt->carriedEntity = param_2;
playerEnt->base.subtimer = 0;
param_2->child = this->field_0x18;
param_2->carryFlags = playerEnt->base.carryFlags;
@@ -168,7 +168,7 @@ void sub_080762D8(ItemBehavior* this, u32 index) {
if (!gPlayerState.jump_status) {
if (gPlayerState.heldObject == 1 && sub_0800875A(&gPlayerEntity.base, 6, this) != 0) {
if (gPlayerState.heldObject == 1 && DoItemTileInteraction(&gPlayerEntity.base, 6, this) != 0) {
sub_08076088(this, NULL, index);
return;
} else if (gUnk_0811BE38[gPlayerEntity.base.animationState >> 1] & gPlayerState.playerInput.heldInput) {
+2 -2
View File
@@ -66,14 +66,14 @@ void EnemyInteractionManager_Action1(EnemyInteractionManager* this) {
for (i = 0; i < n; i++) {
tmp = this->d.enemies[i];
for (j = i + 1; j < super->timer; j++) {
sub_08004484(tmp, this->d.enemies[j]);
CalcCollisionStaticEntity(tmp, this->d.enemies[j]);
}
}
} else {
for (i = 0; i < n; i++) {
tmp = this->d.enemies[i];
for (j = i + 1; j < super->timer; j++) {
sub_08004484(this->d.enemies[j], tmp);
CalcCollisionStaticEntity(this->d.enemies[j], tmp);
}
}
}
+2 -1
View File
@@ -16,6 +16,7 @@
#include "message.h"
#include "room.h"
#include "sound.h"
#include "enemy.h"
enum FightManager_State { Init, WaitForFlag, WaitForDone };
@@ -112,7 +113,7 @@ void FightManager_LoadFight(FightManager* this) {
while (prop->kind != 0xFF) {
ent = LoadRoomEntity(prop++);
if ((ent != NULL) && (ent->kind == ENEMY)) {
((GenericEntity*)ent)->field_0x6c.HALF.HI |= 0x40;
((Enemy*)ent)->enemyFlags |= EM_FLAG_MONITORED;
FightManagerHelper_Monitor(monitor, ent, counter++);
}
if (counter >= 7) {
+1 -1
View File
@@ -340,7 +340,7 @@ void TempleOfDropletsManager_Type6_Action2(TempleOfDropletsManager* this) {
case PL_STATE_WALK:
if (sub_0805A73C(this)) {
super->action++;
sub_08004168(&gPlayerEntity.base);
SnapToTile(&gPlayerEntity.base);
gPlayerEntity.base.animationState = 4;
RequestPriorityDuration((Entity*)this, 600);
SetPlayerControl(0xFF);
+2 -2
View File
@@ -180,7 +180,7 @@ void FigurineMenu0_ViewFigurineAfterDrawing(void) {
s32 t;
infoY = gFigurineMenu.unk1f;
switch (gInput.unk4) {
switch (gInput.menuScrollKeys) {
case B_BUTTON:
case START_BUTTON:
FigurineMenu_ExitMenu();
@@ -219,7 +219,7 @@ void FigurineMenu1_ViewAllFigurines(void) {
infoY = gFigurineMenu.unk1f;
figurineIndex = gFigurineMenu.figure_idx;
switch (gInput.unk4) {
switch (gInput.menuScrollKeys) {
case B_BUTTON:
case START_BUTTON:
SetMenuType(3);
+2 -2
View File
@@ -194,7 +194,7 @@ void KinstoneMenu_Type1(void) {
return;
}
tmp3 = menu->unk28;
switch (gInput.unk4) {
switch (gInput.menuScrollKeys) {
case DPAD_LEFT:
case DPAD_UP:
tmp3--;
@@ -681,7 +681,7 @@ void KinstoneMenu_080A4528(void) {
entity->subtimer = entity->id;
entity->id = 0x56;
} else {
EnemyInit(entity);
EnemyInit((Enemy*)entity);
entity->subtimer = entity->id;
entity->id = 0x66;
}
+2 -2
View File
@@ -402,7 +402,7 @@ void PauseMenu_ItemMenu_Update(void) {
}
break;
default:
switch (gInput.unk4) {
switch (gInput.menuScrollKeys) {
case DPAD_UP:
menuSlot = entry->up;
break;
@@ -707,7 +707,7 @@ void sub_080A56A0(void) {
gMenu.field_0xc = gUnk_08128C00;
ptr = &gUnk_08128C14[gMenu.field_0x3];
uVar2 = 0xff;
switch (gInput.unk4) {
switch (gInput.menuScrollKeys) {
case DPAD_UP:
uVar2 = ptr->unk0;
break;

Some files were not shown because too many files have changed in this diff Show More