fldeff_cut through SetUpFieldMove_Cut
This commit is contained in:
+15
-15
@@ -35,18 +35,18 @@ EWRAM_DATA struct ConnectionFlags gMapConnectionFlags = {};
|
||||
|
||||
const struct ConnectionFlags sDummyConnectionFlags = {};
|
||||
|
||||
const u32 gUnknown_8352EF0[] = {
|
||||
0x1ff,
|
||||
0x3e00,
|
||||
0x3c000,
|
||||
0xfc0000,
|
||||
0x7000000,
|
||||
const u32 sMetatileAttrMasks[] = {
|
||||
0x000001ff,
|
||||
0x00003e00,
|
||||
0x0003c000,
|
||||
0x00fc0000,
|
||||
0x07000000,
|
||||
0x18000000,
|
||||
0x60000000,
|
||||
0x80000000
|
||||
};
|
||||
|
||||
const u8 gUnknown_8352F10[] = {
|
||||
const u8 sMetatileAttrShifts[] = {
|
||||
0,
|
||||
9,
|
||||
14,
|
||||
@@ -443,28 +443,28 @@ u32 MapGridGetMetatileIdAt(s32 x, s32 y)
|
||||
return block & 0x3FF;
|
||||
}
|
||||
|
||||
u32 sub_8058F1C(u32 original, u8 bit)
|
||||
u32 GetMetatileAttributeFromRawMetatileBehavior(u32 original, u8 bit)
|
||||
{
|
||||
if (bit >= 8)
|
||||
return original;
|
||||
|
||||
return (original & gUnknown_8352EF0[bit]) >> gUnknown_8352F10[bit];
|
||||
return (original & sMetatileAttrMasks[bit]) >> sMetatileAttrShifts[bit];
|
||||
}
|
||||
|
||||
u32 sub_8058F48(s16 x, s16 y, u8 z)
|
||||
u32 MapGridGetMetatileAttributeAt(s16 x, s16 y, u8 attr)
|
||||
{
|
||||
u16 metatileId = MapGridGetMetatileIdAt(x, y);
|
||||
return GetBehaviorByMetatileIdAndMapLayout(gMapHeader.mapLayout, metatileId, z);
|
||||
return GetBehaviorByMetatileIdAndMapLayout(gMapHeader.mapLayout, metatileId, attr);
|
||||
}
|
||||
|
||||
u32 MapGridGetMetatileBehaviorAt(s32 x, s32 y)
|
||||
{
|
||||
return sub_8058F48(x, y, 0);
|
||||
return MapGridGetMetatileAttributeAt(x, y, 0);
|
||||
}
|
||||
|
||||
u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y)
|
||||
{
|
||||
return sub_8058F48(x, y, 6);
|
||||
return MapGridGetMetatileAttributeAt(x, y, 6);
|
||||
}
|
||||
|
||||
void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatile)
|
||||
@@ -512,12 +512,12 @@ u32 GetBehaviorByMetatileIdAndMapLayout(struct MapLayout *mapLayout, u16 metatil
|
||||
if (metatile < NUM_METATILES_IN_PRIMARY)
|
||||
{
|
||||
attributes = mapLayout->primaryTileset->metatileAttributes;
|
||||
return sub_8058F1C(attributes[metatile], attr);
|
||||
return GetMetatileAttributeFromRawMetatileBehavior(attributes[metatile], attr);
|
||||
}
|
||||
else if (metatile < 0x400)
|
||||
{
|
||||
attributes = mapLayout->secondaryTileset->metatileAttributes;
|
||||
return sub_8058F1C(attributes[metatile - NUM_METATILES_IN_PRIMARY], attr);
|
||||
return GetMetatileAttributeFromRawMetatileBehavior(attributes[metatile - NUM_METATILES_IN_PRIMARY], attr);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "fieldmap.h"
|
||||
#include "field_specials.h"
|
||||
#include "fldeff.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "metatile_behavior.h"
|
||||
#include "party_menu.h"
|
||||
#include "constants/event_objects.h"
|
||||
|
||||
EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL;
|
||||
EWRAM_DATA bool8 sScheduleOpenDottedHole = FALSE;
|
||||
|
||||
void FieldCallback_CutTree(void);
|
||||
void FieldCallback_CutGrass(void);
|
||||
|
||||
u8 MetatileAtCoordsIsGrassTile(s16 x, s16 y)
|
||||
{
|
||||
return TestMetatileAttributeBit(MapGridGetMetatileAttributeAt(x, y, 1), 1);
|
||||
}
|
||||
|
||||
bool8 SetUpFieldMove_Cut(void)
|
||||
{
|
||||
s16 x, y;
|
||||
u8 i, j;
|
||||
sScheduleOpenDottedHole = FALSE;
|
||||
if (CutMoveRuinValleyCheck() == TRUE)
|
||||
{
|
||||
sScheduleOpenDottedHole = TRUE;
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = FieldCallback_CutGrass;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_CUT_TREE) == TRUE)
|
||||
{
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = FieldCallback_CutTree;
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
register s32 neg1 asm("r8");
|
||||
struct MapPosition *pos;
|
||||
PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
|
||||
|
||||
for (i = 0, pos = &gPlayerFacingPosition, neg1 = 0xFFFF; i < 3; i++)
|
||||
{
|
||||
|
||||
y = i + neg1 + pos->y;
|
||||
for (j = 0; j < 3; j++)
|
||||
{
|
||||
x = j + neg1 + pos->x;
|
||||
if (MapGridGetZCoordAt(x, y) == pos->height)
|
||||
{
|
||||
if (MetatileAtCoordsIsGrassTile(x, y) == TRUE)
|
||||
{
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = FieldCallback_CutGrass;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
+7
-34
@@ -16,39 +16,12 @@ static const bool8 sTileSurfable[METATILE_COUNT] = {
|
||||
[MB_SOUTHWARD_CURRENT] = TRUE
|
||||
};
|
||||
|
||||
static const u8 sTileBitAttributes[] = {
|
||||
0x00,
|
||||
0x01,
|
||||
0x02,
|
||||
0x04,
|
||||
0x08,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00
|
||||
static const u8 sTileBitAttributes[32] = {
|
||||
[0] = 0x00,
|
||||
[1] = 0x01,
|
||||
[2] = 0x02,
|
||||
[3] = 0x04,
|
||||
[4] = 0x08,
|
||||
};
|
||||
|
||||
bool8 MetatileBehavior_UnusedReturnTrue(u8 metatileBehavior)
|
||||
@@ -769,7 +742,7 @@ bool8 MetatileBehavior_UnusedReturnFalse_11(u8 metatileBehavior) { return FALSE;
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_12(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_13(u8 metatileBehavior) { return FALSE; }
|
||||
|
||||
bool8 sub_805A2BC(u8 arg1, u8 arg2)
|
||||
bool8 TestMetatileAttributeBit(u8 arg1, u8 arg2)
|
||||
{
|
||||
if(sTileBitAttributes[arg1] & arg2)
|
||||
return TRUE;
|
||||
|
||||
+11
-11
@@ -367,11 +367,11 @@ bool8 StandardWildEncounter(u32 currMetatileBehavior, u16 previousMetatileBehavi
|
||||
headerId = GetCurrentMapWildMonHeaderId();
|
||||
if (headerId != 0xFFFF)
|
||||
{
|
||||
if (sub_8058F1C(currMetatileBehavior, 4) == TRUE)
|
||||
if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 4) == TRUE)
|
||||
{
|
||||
if (gWildMonHeaders[headerId].landMonsInfo == NULL)
|
||||
return FALSE;
|
||||
else if (previousMetatileBehavior != sub_8058F1C(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll())
|
||||
else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll())
|
||||
return FALSE;
|
||||
if (DoWildEncounterRateTest(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE)
|
||||
{
|
||||
@@ -405,12 +405,12 @@ bool8 StandardWildEncounter(u32 currMetatileBehavior, u16 previousMetatileBehavi
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (sub_8058F1C(currMetatileBehavior, 4) == 2
|
||||
|| (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(sub_8058F1C(currMetatileBehavior, 0)) == TRUE))
|
||||
else if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 4) == 2
|
||||
|| (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0)) == TRUE))
|
||||
{
|
||||
if (gWildMonHeaders[headerId].waterMonsInfo == NULL)
|
||||
return FALSE;
|
||||
else if (previousMetatileBehavior != sub_8058F1C(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll())
|
||||
else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll())
|
||||
return FALSE;
|
||||
else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE)
|
||||
{
|
||||
@@ -474,7 +474,7 @@ bool8 SweetScentWildEncounter(void)
|
||||
headerId = GetCurrentMapWildMonHeaderId();
|
||||
if (headerId != 0xFFFF)
|
||||
{
|
||||
if (sub_8058F48(x, y, 4) == 1)
|
||||
if (MapGridGetMetatileAttributeAt(x, y, 4) == 1)
|
||||
{
|
||||
if (TryStartRoamerEncounter() == TRUE)
|
||||
{
|
||||
@@ -490,7 +490,7 @@ bool8 SweetScentWildEncounter(void)
|
||||
BattleSetup_StartWildBattle();
|
||||
return TRUE;
|
||||
}
|
||||
else if (sub_8058F48(x, y, 4) == 2)
|
||||
else if (MapGridGetMetatileAttributeAt(x, y, 4) == 2)
|
||||
{
|
||||
if (TryStartRoamerEncounter() == TRUE)
|
||||
{
|
||||
@@ -711,7 +711,7 @@ void ResetEncounterRateModifiers(void)
|
||||
|
||||
static bool8 HandleWildEncounterCooldown(u32 currMetatileBehavior)
|
||||
{
|
||||
u8 unk = sub_8058F1C(currMetatileBehavior, 4);
|
||||
u8 unk = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 4);
|
||||
u32 minSteps;
|
||||
u32 encRate;
|
||||
if (unk == 0)
|
||||
@@ -763,19 +763,19 @@ bool8 TryStandardWildEncounter(u32 currMetatileBehavior)
|
||||
{
|
||||
if (!HandleWildEncounterCooldown(currMetatileBehavior))
|
||||
{
|
||||
sWildEncounterData.prevMetatileBehavior = sub_8058F1C(currMetatileBehavior, 0);
|
||||
sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0);
|
||||
return FALSE;
|
||||
}
|
||||
else if (StandardWildEncounter(currMetatileBehavior, sWildEncounterData.prevMetatileBehavior) == TRUE)
|
||||
{
|
||||
sWildEncounterData.encounterRateBuff = 0;
|
||||
sWildEncounterData.stepsSinceLastEncounter = 0;
|
||||
sWildEncounterData.prevMetatileBehavior = sub_8058F1C(currMetatileBehavior, 0);
|
||||
sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
sWildEncounterData.prevMetatileBehavior = sub_8058F1C(currMetatileBehavior, 0);
|
||||
sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user