1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-25 09:45:02 +00:00

[ntsc-1.0/1.1] Match actor changes introduced in NTSC 1.1 (#2251)

* [ntsc-1.0/1.1] Match actor changes introduced in NTSC 1.1

* SPHERE_DAMAGE -> FLARE_DANCER_BODY_DMG

* Fix Actor_SetPlayerKnockbackLargeNoDamage merge
This commit is contained in:
cadmic 2024-10-01 11:46:17 -07:00 committed by GitHub
parent ed77e143b6
commit 37e72d7d95
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 189 additions and 31 deletions

View file

@ -7,11 +7,16 @@
#include "z_bg_dy_yoseizo.h"
#include "assets/objects/object_dy_obj/object_dy_obj.h"
#include "terminal.h"
#include "versions.h"
#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h"
#include "assets/scenes/indoors/yousei_izumi_yoko/yousei_izumi_yoko_scene.h"
#include "assets/scenes/indoors/daiyousei_izumi/daiyousei_izumi_scene.h"
#if OOT_VERSION < NTSC_1_1
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
#else
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_25)
#endif
typedef enum BgDyYoseizoRewardType {
/* 0 */ FAIRY_UPGRADE_MAGIC,
@ -85,13 +90,30 @@ void BgDyYoseizo_Init(Actor* thisx, PlayState* play2) {
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ 大妖精の泉 ☆☆☆☆☆ %d\n" VT_RST, play->spawn);
SkelAnime_InitFlex(play, &this->skelAnime, &gGreatFairySkel, &gGreatFairySittingTransitionAnim,
this->jointTable, this->morphTable, 28);
#if OOT_VERSION < NTSC_1_1
if (!gSaveContext.save.info.playerData.isMagicAcquired && (this->fountainType != FAIRY_UPGRADE_MAGIC)) {
Actor_Kill(&this->actor);
return;
}
#endif
} else {
// "Stone/Jewel Fairy Fountain"
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ 石妖精の泉 ☆☆☆☆☆ %d\n" VT_RST, play->spawn);
SkelAnime_InitFlex(play, &this->skelAnime, &gGreatFairySkel, &gGreatFairyLayingDownTransitionAnim,
this->jointTable, this->morphTable, 28);
#if OOT_VERSION < NTSC_1_1
if (!gSaveContext.save.info.playerData.isMagicAcquired) {
Actor_Kill(&this->actor);
return;
}
#endif
}
#if OOT_VERSION < NTSC_1_1
this->actionFunc = BgDyYoseizo_ChooseType;
#else
this->actionFunc = BgDyYoseizo_CheckMagicAcquired;
#endif
}
void BgDyYoseizo_Destroy(Actor* thisx, PlayState* play) {
@ -177,6 +199,7 @@ void BgDyYoseizo_Bob(BgDyYoseizo* this, PlayState* play) {
}
}
#if OOT_VERSION >= NTSC_1_1
void BgDyYoseizo_CheckMagicAcquired(BgDyYoseizo* this, PlayState* play) {
if (Flags_GetSwitch(play, 0x38)) {
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
@ -195,10 +218,22 @@ void BgDyYoseizo_CheckMagicAcquired(BgDyYoseizo* this, PlayState* play) {
this->actionFunc = BgDyYoseizo_ChooseType;
}
}
#endif
void BgDyYoseizo_ChooseType(BgDyYoseizo* this, PlayState* play) {
s32 givingReward;
#if OOT_VERSION < NTSC_1_1
if (!Flags_GetSwitch(play, 0x38)) {
return;
}
if (play->msgCtx.ocarinaMode != OCARINA_MODE_04) {
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
return;
}
#endif
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
// "Mode"
PRINTF(VT_FGCOL(YELLOW) "☆☆☆☆☆ もうど ☆☆☆☆☆ %d\n" VT_RST, play->msgCtx.ocarinaMode);
@ -315,12 +350,16 @@ void BgDyYoseizo_SetupSpinGrow_NoReward(BgDyYoseizo* this, PlayState* play) {
}
Actor_PlaySfx(&this->actor, NA_SE_VO_FR_LAUGH_0);
#if OOT_VERSION >= NTSC_1_1
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
#endif
this->actionFunc = BgDyYoseizo_SpinGrow_NoReward;
}
void BgDyYoseizo_SpinGrow_NoReward(BgDyYoseizo* this, PlayState* play) {
#if OOT_VERSION >= NTSC_1_1
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
#endif
Math_ApproachF(&this->actor.world.pos.y, this->grownHeight, this->heightFraction, 100.0f);
Math_ApproachF(&this->scale, 0.035f, this->scaleFraction, 0.005f);
Math_ApproachF(&this->heightFraction, 0.8f, 0.1f, 0.02f);
@ -346,7 +385,9 @@ void BgDyYoseizo_SpinGrow_NoReward(BgDyYoseizo* this, PlayState* play) {
void BgDyYoseizo_CompleteSpinGrow_NoReward(BgDyYoseizo* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
#if OOT_VERSION >= NTSC_1_1
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
#endif
if ((this->frameCount * 1273.0f) <= this->bobTimer) {
this->bobTimer = 0.0f;
@ -360,7 +401,9 @@ void BgDyYoseizo_CompleteSpinGrow_NoReward(BgDyYoseizo* this, PlayState* play) {
}
void BgDyYoseizo_SetupGreetPlayer_NoReward(BgDyYoseizo* this, PlayState* play) {
#if OOT_VERSION >= NTSC_1_1
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
#endif
if (play->sceneId == SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC) {
this->frameCount = Animation_GetLastFrame(&gGreatFairySittingAnim);
@ -380,7 +423,9 @@ void BgDyYoseizo_SetupGreetPlayer_NoReward(BgDyYoseizo* this, PlayState* play) {
}
void BgDyYoseizo_GreetPlayer_NoReward(BgDyYoseizo* this, PlayState* play) {
#if OOT_VERSION >= NTSC_1_1
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
#endif
this->bobTimer = this->skelAnime.curFrame * 1273.0f;
if ((this->frameCount * 1273.0f) <= this->bobTimer) {

View file

@ -7,6 +7,7 @@
#include "z_door_shutter.h"
#include "overlays/actors/ovl_Boss_Goma/z_boss_goma.h"
#include "quake.h"
#include "versions.h"
#include "assets/objects/object_gnd/object_gnd.h"
#include "assets/objects/object_goma/object_goma.h"
@ -225,14 +226,22 @@ typedef struct DoorShutterGfxInfo {
} DoorShutterGfxInfo;
static DoorShutterGfxInfo sGfxInfo[] = {
{ gDTDungeonDoor1DL, gDoorMetalBarsDL, 130, 12, 20, 15 }, // DOORSHUTTER_GFX_DEKU_TREE_1
{ gDTDungeonDoor2DL, gDoorMetalBarsDL, 130, 12, 20, 15 }, // DOORSHUTTER_GFX_DEKU_TREE_2
{ gDodongoDoorDL, gDodongoBarsDL, 240, 14, 70, 15 }, // DOORSHUTTER_GFX_DODONGOS_CAVERN
{ gJabuDoorSection1DL, gJabuWebDoorDL, 0, 110, 50, 15 }, // DOORSHUTTER_GFX_JABU_JABU
{ gPhantomGanonBarsDL, NULL, 130, 12, 50, 15 }, // DOORSHUTTER_GFX_PHANTOM_GANON_BARS
{ gGohmaDoorDL, NULL, 130, 12, 50, 15 }, // DOORSHUTTER_GFX_GOHMA_BLOCK
{ gSpiritDoorDL, gJyaDoorMetalBarsDL, 240, 14, 50, 15 }, // DOORSHUTTER_GFX_SPIRIT_TEMPLE
{ gBossDoorDL, NULL, 130, 12, 50, 15 }, // DOORSHUTTER_GFX_BOSS_DOOR
{ gDTDungeonDoor1DL, gDoorMetalBarsDL, 130, 12, 20, 15 }, // DOORSHUTTER_GFX_DEKU_TREE_1
{ gDTDungeonDoor2DL, gDoorMetalBarsDL, 130, 12, 20, 15 }, // DOORSHUTTER_GFX_DEKU_TREE_2
{ gDodongoDoorDL, gDodongoBarsDL, 240, 14, 70, 15 }, // DOORSHUTTER_GFX_DODONGOS_CAVERN
#if OOT_VERSION < NTSC_1_1
{ gJabuDoorSection1DL, gJabuWebDoorDL, 0, 110, 70, 15 }, // DOORSHUTTER_GFX_JABU_JABU
{ gPhantomGanonBarsDL, NULL, 130, 12, 70, 15 }, // DOORSHUTTER_GFX_PHANTOM_GANON_BARS
{ gGohmaDoorDL, NULL, 130, 12, 70, 15 }, // DOORSHUTTER_GFX_GOHMA_BLOCK
{ gSpiritDoorDL, gJyaDoorMetalBarsDL, 240, 14, 50, 15 }, // DOORSHUTTER_GFX_SPIRIT_TEMPLE
{ gBossDoorDL, NULL, 130, 12, 70, 15 }, // DOORSHUTTER_GFX_BOSS_DOOR
#else
{ gJabuDoorSection1DL, gJabuWebDoorDL, 0, 110, 50, 15 }, // DOORSHUTTER_GFX_JABU_JABU
{ gPhantomGanonBarsDL, NULL, 130, 12, 50, 15 }, // DOORSHUTTER_GFX_PHANTOM_GANON_BARS
{ gGohmaDoorDL, NULL, 130, 12, 50, 15 }, // DOORSHUTTER_GFX_GOHMA_BLOCK
{ gSpiritDoorDL, gJyaDoorMetalBarsDL, 240, 14, 50, 15 }, // DOORSHUTTER_GFX_SPIRIT_TEMPLE
{ gBossDoorDL, NULL, 130, 12, 50, 15 }, // DOORSHUTTER_GFX_BOSS_DOOR
#endif
{ gDungeonDoorDL, gDoorMetalBarsDL, 130, 12, 20, 15 }, // DOORSHUTTER_GFX_GENERIC
{ gFireTempleDoorFrontDL, gDoorMetalBarsDL, 130, 12, 20, 15 }, // DOORSHUTTER_GFX_FIRE_TEMPLE_1
{ gFireTempleDoorBackDL, gDoorMetalBarsDL, 130, 12, 20, 15 }, // DOORSHUTTER_GFX_FIRE_TEMPLE_2

View file

@ -5,6 +5,7 @@
*/
#include "z_en_attack_niw.h"
#include "versions.h"
#include "assets/objects/object_niw/object_niw.h"
#include "overlays/actors/ovl_En_Niw/z_en_niw.h"
@ -359,7 +360,13 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
if (this->actor.xyzDistToPlayerSq < SQ(tmpf1)) {
cucco = (EnNiw*)this->actor.parent;
if ((this->actor.parent->update != NULL) && (this->actor.parent != NULL) && (cucco != NULL) &&
(cucco->timer9 == 0) && (player->invincibilityTimer == 0)) {
(cucco->timer9 == 0) &&
#if OOT_VERSION < NTSC_1_1
!(player->stateFlags1 & PLAYER_STATE1_26)
#else
(player->invincibilityTimer == 0)
#endif
) {
Actor_SetPlayerKnockbackLarge(play, &this->actor, 2.0f, this->actor.world.rot.y, 0.0f, 0x10);
cucco->timer9 = 0x46;
}

View file

@ -5,6 +5,7 @@
*/
#include "z_en_bili.h"
#include "versions.h"
#include "assets/objects/object_bl/object_bl.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_14)
@ -536,7 +537,12 @@ void EnBili_Frozen(EnBili* this, PlayState* play) {
this->actor.gravity = -1.0f;
}
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
#if OOT_VERSION < NTSC_1_1
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) || (this->actor.floorHeight == BGCHECK_Y_MIN))
#else
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN))
#endif
{
this->actor.colorFilterTimer = 0;
EnBili_SetupDie(this);
} else {

View file

@ -243,13 +243,20 @@ void EnDha_Wait(EnDha* this, PlayState* play) {
this->handAngle.y -= this->actor.shape.rot.y + this->limbAngleY;
this->handAngle.x -= this->actor.shape.rot.x + this->limbAngleX[0] + this->limbAngleX[1];
} else {
#if OOT_VERSION < NTSC_1_1
// Empty
#elif OOT_VERSION < PAL_1_0
if ((player->stateFlags2 & PLAYER_STATE2_7) && (&this->actor == player->actor.parent)) {
player->stateFlags2 &= ~PLAYER_STATE2_7;
player->actor.parent = NULL;
#if OOT_VERSION >= PAL_1_0
player->av2.actionVar2 = 200;
#endif
}
#else
if ((player->stateFlags2 & PLAYER_STATE2_7) && (&this->actor == player->actor.parent)) {
player->stateFlags2 &= ~PLAYER_STATE2_7;
player->actor.parent = NULL;
player->av2.actionVar2 = 200;
}
#endif
if (this->actor.home.rot.z != 0) {
Actor_PlaySfx(&this->actor, NA_SE_EN_DEADHAND_HAND_AT);

View file

@ -339,8 +339,12 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
rot->z += this->actor.world.rot.y;
if ((play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) {
// Draw the side of the door that is visible to the camera
#if OOT_VERSION < NTSC_1_1
s16 rotDiff = this->actor.shape.rot.y + rot->z - Math_Vec3f_Yaw(&play->view.eye, &this->actor.world.pos);
#else
s16 rotDiff = this->actor.shape.rot.y + this->skelAnime.jointTable[3].z + rot->z -
Math_Vec3f_Yaw(&play->view.eye, &this->actor.world.pos);
#endif
*dList = (ABS(rotDiff) < 0x4000) ? doorDLists[0] : doorDLists[1];
} else {

View file

@ -5,6 +5,7 @@
*/
#include "z_en_fd.h"
#include "versions.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_fw/object_fw.h"
@ -39,11 +40,17 @@ ActorProfile En_Fd_Profile = {
/**/ EnFd_Draw,
};
#if OOT_VERSION < NTSC_1_1
#define FLARE_DANCER_BODY_DMG 0x00
#else
#define FLARE_DANCER_BODY_DMG 0x04
#endif
static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040088, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON | ACELEM_HOOKABLE,
@ -54,7 +61,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -65,7 +72,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -76,7 +83,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -87,7 +94,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -98,7 +105,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -109,7 +116,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -120,7 +127,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -131,7 +138,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -142,7 +149,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -153,7 +160,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
@ -164,7 +171,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[12] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x01, 0x04 },
{ 0xFFCFFFFF, 0x01, FLARE_DANCER_BODY_DMG },
{ 0x00040008, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,

View file

@ -5,6 +5,7 @@
*/
#include "z_en_firefly.h"
#include "versions.h"
#include "assets/objects/object_firefly/object_firefly.h"
#include "overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h"
@ -553,7 +554,12 @@ void EnFirefly_Stunned(EnFirefly* this, PlayState* play) {
}
void EnFirefly_FrozenFall(EnFirefly* this, PlayState* play) {
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
#if OOT_VERSION < NTSC_1_1
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) || (this->actor.floorHeight == BGCHECK_Y_MIN))
#else
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN))
#endif
{
this->actor.colorFilterTimer = 0;
EnFirefly_SetupDie(this);
} else {

View file

@ -5,6 +5,7 @@
*/
#include "z_en_hy.h"
#include "versions.h"
#include "assets/objects/object_aob/object_aob.h"
#include "assets/objects/object_ahg/object_ahg.h"
#include "assets/objects/object_bob/object_bob.h"
@ -505,7 +506,11 @@ u16 EnHy_GetTextId(PlayState* play, Actor* thisx) {
} else if (play->sceneId == SCENE_KAKARIKO_VILLAGE) {
return CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) ? 0x507C : 0x507B;
} else {
#if OOT_VERSION < NTSC_1_1
return GET_EVENTCHKINF(EVENTCHKINF_80) ? 0x7046 : (GET_INFTABLE(INFTABLE_CB) ? 0x7019 : 0x7018);
#else
return GET_EVENTCHKINF(EVENTCHKINF_80) ? 0x7046 : (GET_INFTABLE(INFTABLE_CD) ? 0x7019 : 0x7018);
#endif
}
case ENHY_TYPE_CNE_11:
return GET_INFTABLE(INFTABLE_MALON_SPAWNED_AT_HYRULE_CASTLE) ? (GET_INFTABLE(INFTABLE_CC) ? 0x7014 : 0x70A4)
@ -633,7 +638,11 @@ s16 EnHy_UpdateTalkState(PlayState* play, Actor* thisx) {
SET_INFTABLE(INFTABLE_CA);
break;
case 0x7018:
#if OOT_VERSION < NTSC_1_1
SET_INFTABLE(INFTABLE_CB);
#else
SET_INFTABLE(INFTABLE_CD);
#endif
break;
case 0x70A4:
SET_INFTABLE(INFTABLE_CC);

View file

@ -10,6 +10,7 @@
#include "assets/objects/object_km1/object_km1.h"
#include "assets/objects/object_kw1/object_kw1.h"
#include "terminal.h"
#include "versions.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
@ -585,7 +586,11 @@ s16 EnKo_UpdateTalkState(PlayState* play, Actor* thisx) {
Message_ContinueTextbox(play, this->actor.textId);
break;
case 0x10B7:
#if OOT_VERSION < NTSC_1_1
SET_INFTABLE(INFTABLE_B6);
#else
SET_INFTABLE(INFTABLE_BC);
#endif
FALLTHROUGH;
case 0x10B8:
this->actor.textId = (play->msgCtx.choiceIndex == 0) ? 0x10BA : 0x10B9;
@ -976,7 +981,11 @@ void func_80A9877C(EnKo* this, PlayState* play) {
this->actor.textId = INV_CONTENT(ITEM_TRADE_ADULT) > ITEM_ODD_POTION ? 0x10B9 : 0x10DF;
if (func_8002F368(play) == EXCH_ITEM_ODD_POTION) {
#if OOT_VERSION < NTSC_1_1
this->actor.textId = GET_INFTABLE(INFTABLE_B6) ? 0x10B8 : 0x10B7;
#else
this->actor.textId = GET_INFTABLE(INFTABLE_BC) ? 0x10B8 : 0x10B7;
#endif
this->unk_210 = 0;
}
player->actor.textId = this->actor.textId;

View file

@ -1325,19 +1325,30 @@ void EnMb_SetupSpearDead(EnMb* this) {
}
void EnMb_SpearDead(EnMb* this, PlayState* play) {
#if OOT_VERSION >= NTSC_1_1
Player* player = GET_PLAYER(play);
#endif
Math_SmoothStepToF(&this->actor.speed, 0.0f, 1.0f, 0.5f, 0.0f);
#if OOT_VERSION < NTSC_1_1
// Empty
#elif OOT_VERSION < PAL_1_0
if ((player->stateFlags2 & PLAYER_STATE2_7) && player->actor.parent == &this->actor) {
player->stateFlags2 &= ~PLAYER_STATE2_7;
player->actor.parent = NULL;
#if OOT_VERSION >= PAL_1_0
player->av2.actionVar2 = 200;
#endif
Actor_SetPlayerKnockbackLargeNoDamage(play, &this->actor, 4.0f, this->actor.world.rot.y, 4.0f);
this->attack = ENMB_ATTACK_NONE;
}
#else
if ((player->stateFlags2 & PLAYER_STATE2_7) && player->actor.parent == &this->actor) {
player->stateFlags2 &= ~PLAYER_STATE2_7;
player->actor.parent = NULL;
player->av2.actionVar2 = 200;
Actor_SetPlayerKnockbackLargeNoDamage(play, &this->actor, 4.0f, this->actor.world.rot.y, 4.0f);
this->attack = ENMB_ATTACK_NONE;
}
#endif
if (SkelAnime_Update(&this->skelAnime)) {
if (this->timer1 > 0) {

View file

@ -8,6 +8,7 @@
#include "assets/objects/object_niw/object_niw.h"
#include "overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.h"
#include "terminal.h"
#include "versions.h"
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_23)
@ -1055,7 +1056,12 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
dist = 20.0f;
if (this->unk_2A8 != 0 && thisx->xyzDistToPlayerSq < SQ(dist) && player->invincibilityTimer == 0) {
#if OOT_VERSION < NTSC_1_1
if (this->unk_2A8 != 0 && thisx->xyzDistToPlayerSq < SQ(dist) && !(player->stateFlags1 & PLAYER_STATE1_26))
#else
if (this->unk_2A8 != 0 && thisx->xyzDistToPlayerSq < SQ(dist) && player->invincibilityTimer == 0)
#endif
{
Actor_SetPlayerKnockbackLarge(play, &this->actor, 2.0f, thisx->world.rot.y, 0.0f, 0x10);
}

View file

@ -3,6 +3,7 @@
#include "assets/objects/object_os_anime/object_os_anime.h"
#include "overlays/actors/ovl_En_Niw/z_en_niw.h"
#include "terminal.h"
#include "versions.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
@ -259,6 +260,7 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ this->message_end_code ☆☆ %d\n" VT_RST, this->unk_262);
PRINTF("\n\n");
if (MaskReaction_GetTextId(play, MASK_REACTION_SET_CUCCO_LADY) == 0) {
#if OOT_VERSION >= NTSC_1_1
if (this->actor.textId == 0x503C) {
Sfx_PlaySfxCentered(NA_SE_SY_ERROR);
this->unk_26C = 2;
@ -266,6 +268,7 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
this->actionFunc = func_80ABA654;
return;
}
#endif
this->unk_26E = phi_s1 + 1;
if (phi_s1 == 7) {
Sfx_PlaySfxCentered(NA_SE_SY_TRE_BOX_APPEAR);
@ -286,6 +289,13 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
if (this->unk_26A != this->cuccosInPen) {
if (this->cuccosInPen < this->unk_26A) {
Sfx_PlaySfxCentered(NA_SE_SY_ERROR);
#if OOT_VERSION < NTSC_1_1
if (phi_s1 == 9) {
this->unk_26C = 2;
this->unk_262 = TEXT_STATE_EVENT;
this->actionFunc = func_80ABA654;
}
#endif
} else if (phi_s1 + 1 < 9) {
Sfx_PlaySfxCentered(NA_SE_SY_TRE_BOX_APPEAR);
}

View file

@ -8,6 +8,7 @@
#include "assets/scenes/misc/hakaana_ouke/hakaana_ouke_scene.h"
#include "assets/scenes/overworld/spot02/spot02_scene.h"
#include "terminal.h"
#include "versions.h"
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_25)
@ -152,10 +153,14 @@ void func_80ABF0CC(EnOkarinaTag* this, PlayState* play) {
if (play->sceneId == SCENE_WATER_TEMPLE) {
play->msgCtx.msgMode = MSGMODE_PAUSED;
}
#if OOT_VERSION < NTSC_1_1
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
#else
if ((play->sceneId != SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC) &&
(play->sceneId != SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS)) {
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
}
#endif
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
this->actionFunc = func_80ABEF2C;
return;

View file

@ -7,6 +7,7 @@
#include "z_en_rr.h"
#include "assets/objects/object_rr/object_rr.h"
#include "terminal.h"
#include "versions.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_10)
@ -480,11 +481,16 @@ void EnRr_CollisionCheck(EnRr* this, PlayState* play) {
if (this->actor.colChkInfo.health == 0) {
this->dropType = RR_DROP_RANDOM_RUPEE;
}
#if OOT_VERSION < NTSC_1_1
this->effectTimer = 20;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_XLU, 80);
#else
if (this->actor.colorFilterTimer == 0) {
this->effectTimer = 20;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_XLU,
80);
}
#endif
EnRr_SetupStunned(this);
return;
case RR_DMG_LIGHT_MAGIC: // Unused light magic

View file

@ -6,6 +6,7 @@
#include "z_en_takara_man.h"
#include "terminal.h"
#include "versions.h"
#include "assets/objects/object_ts/object_ts.h"
#define FLAGS \
@ -161,7 +162,11 @@ void func_80B17A6C(EnTakaraMan* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actionFunc = func_80B17AC4;
} else {
#if OOT_VERSION < NTSC_1_1
Actor_OfferGetItem(&this->actor, play, GI_SMALL_KEY, 2000.0f, 1000.0f);
#else
Actor_OfferGetItem(&this->actor, play, GI_DOOR_KEY, 2000.0f, 1000.0f);
#endif
}
}

View file

@ -5,6 +5,7 @@
*/
#include "z_en_tp.h"
#include "versions.h"
#include "assets/objects/object_tp/object_tp.h"
#define FLAGS 0
@ -319,7 +320,12 @@ void EnTp_Die(EnTp* this, PlayState* play) {
255, 1, 9, 1);
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x50);
} else {
for (i = 0; i < 1; i++) {
#if OOT_VERSION < NTSC_1_1
for (i = 0; i < 2; i++)
#else
for (i = 0; i < 1; i++)
#endif
{
now =
(EnTp*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TP, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, TAILPASARAN_FRAGMENT);