decompile ground effect flags functions

This commit is contained in:
YamaArashi 2016-12-19 19:13:16 -08:00
parent 04cc260f44
commit d6c8fad0ba
11 changed files with 318 additions and 467 deletions

View File

@ -6,418 +6,6 @@
.text
thumb_func_start GetGroundEffectFlags_TallGrassOnSpawn
GetGroundEffectFlags_TallGrassOnSpawn: @ 8063764
push {r4,lr}
adds r4, r1, 0
ldrb r0, [r0, 0x1E]
bl MetatileBehavior_IsTallGrass
lsls r0, 24
cmp r0, 0
beq _0806377C
ldr r0, [r4]
movs r1, 0x1
orrs r0, r1
str r0, [r4]
_0806377C:
pop {r4}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_TallGrassOnSpawn
thumb_func_start GetGroundEffectFlags_TallGrassOnBeginStep
GetGroundEffectFlags_TallGrassOnBeginStep: @ 8063784
push {r4,lr}
adds r4, r1, 0
ldrb r0, [r0, 0x1E]
bl MetatileBehavior_IsTallGrass
lsls r0, 24
cmp r0, 0
beq _0806379C
ldr r0, [r4]
movs r1, 0x2
orrs r0, r1
str r0, [r4]
_0806379C:
pop {r4}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_TallGrassOnBeginStep
thumb_func_start GetGroundEffectFlags_LongGrassOnSpawn
GetGroundEffectFlags_LongGrassOnSpawn: @ 80637A4
push {r4,lr}
adds r4, r1, 0
ldrb r0, [r0, 0x1E]
bl MetatileBehavior_IsLongGrass
lsls r0, 24
cmp r0, 0
beq _080637BC
ldr r0, [r4]
movs r1, 0x4
orrs r0, r1
str r0, [r4]
_080637BC:
pop {r4}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_LongGrassOnSpawn
thumb_func_start GetGroundEffectFlags_LongGrassOnBeginStep
GetGroundEffectFlags_LongGrassOnBeginStep: @ 80637C4
push {r4,lr}
adds r4, r1, 0
ldrb r0, [r0, 0x1E]
bl MetatileBehavior_IsLongGrass
lsls r0, 24
cmp r0, 0
beq _080637DC
ldr r0, [r4]
movs r1, 0x8
orrs r0, r1
str r0, [r4]
_080637DC:
pop {r4}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_LongGrassOnBeginStep
thumb_func_start GetGroundEffectFlags_Tracks
GetGroundEffectFlags_Tracks: @ 80637E4
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x1F]
bl MetatileBehavior_IsDeepSand
lsls r0, 24
cmp r0, 0
beq _080637FE
ldr r0, [r5]
movs r1, 0x80
lsls r1, 1
b _0806381A
_080637FE:
ldrb r0, [r4, 0x1F]
bl MetatileBehavior_IsSandOrDeepSand
lsls r0, 24
cmp r0, 0
bne _08063816
ldrb r0, [r4, 0x1F]
bl MetatileBehavior_IsUnusedFootprintMetatile
lsls r0, 24
cmp r0, 0
beq _0806381E
_08063816:
ldr r0, [r5]
movs r1, 0x80
_0806381A:
orrs r0, r1
str r0, [r5]
_0806381E:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_Tracks
thumb_func_start GetGroundEffectFlags_SandHeap
GetGroundEffectFlags_SandHeap: @ 8063824
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x1E]
bl MetatileBehavior_IsDeepSand
lsls r0, 24
cmp r0, 0
beq _08063862
ldrb r0, [r4, 0x1F]
bl MetatileBehavior_IsDeepSand
lsls r0, 24
cmp r0, 0
beq _08063862
ldrb r1, [r4, 0x2]
lsls r0, r1, 27
cmp r0, 0
blt _0806386C
movs r0, 0x11
negs r0, r0
ands r0, r1
movs r1, 0x10
orrs r0, r1
strb r0, [r4, 0x2]
ldr r0, [r5]
movs r1, 0x80
lsls r1, 4
orrs r0, r1
str r0, [r5]
b _0806386C
_08063862:
ldrb r1, [r4, 0x2]
movs r0, 0x11
negs r0, r0
ands r0, r1
strb r0, [r4, 0x2]
_0806386C:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_SandHeap
thumb_func_start GetGroundEffectFlags_ShallowFlowingWater
GetGroundEffectFlags_ShallowFlowingWater: @ 8063874
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x1E]
bl MetatileBehavior_IsShallowFlowingWater
lsls r0, 24
cmp r0, 0
beq _08063892
ldrb r0, [r4, 0x1F]
bl MetatileBehavior_IsShallowFlowingWater
lsls r0, 24
cmp r0, 0
bne _080638AA
_08063892:
ldrb r0, [r4, 0x1E]
bl MetatileBehavior_IsPacifidlogLog
lsls r0, 24
cmp r0, 0
beq _080638C8
ldrb r0, [r4, 0x1F]
bl MetatileBehavior_IsPacifidlogLog
lsls r0, 24
cmp r0, 0
beq _080638C8
_080638AA:
ldrb r1, [r4, 0x2]
lsls r0, r1, 28
cmp r0, 0
blt _080638D2
movs r0, 0x9
negs r0, r0
ands r0, r1
movs r1, 0x8
orrs r0, r1
strb r0, [r4, 0x2]
ldr r0, [r5]
movs r1, 0x40
orrs r0, r1
str r0, [r5]
b _080638D2
_080638C8:
ldrb r1, [r4, 0x2]
movs r0, 0x9
negs r0, r0
ands r0, r1
strb r0, [r4, 0x2]
_080638D2:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_ShallowFlowingWater
thumb_func_start GetGroundEffectFlags_Puddle
GetGroundEffectFlags_Puddle: @ 80638D8
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x1E]
bl MetatileBehavior_IsPuddle
lsls r0, 24
cmp r0, 0
beq _08063900
ldrb r0, [r4, 0x1F]
bl MetatileBehavior_IsPuddle
lsls r0, 24
cmp r0, 0
beq _08063900
ldr r0, [r5]
movs r1, 0x80
lsls r1, 3
orrs r0, r1
str r0, [r5]
_08063900:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_Puddle
thumb_func_start GetGroundEffectFlags_Ripple
GetGroundEffectFlags_Ripple: @ 8063908
push {r4,lr}
adds r4, r1, 0
ldrb r0, [r0, 0x1E]
bl MetatileBehavior_HasRipples
lsls r0, 24
cmp r0, 0
beq _08063922
ldr r0, [r4]
movs r1, 0x80
lsls r1, 2
orrs r0, r1
str r0, [r4]
_08063922:
pop {r4}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_Ripple
thumb_func_start GetGroundEffectFlags_ShortGrass
GetGroundEffectFlags_ShortGrass: @ 8063928
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x1E]
bl MetatileBehavior_IsShortGrass
lsls r0, 24
cmp r0, 0
beq _08063966
ldrb r0, [r4, 0x1F]
bl MetatileBehavior_IsShortGrass
lsls r0, 24
cmp r0, 0
beq _08063966
ldrb r1, [r4, 0x2]
lsls r0, r1, 29
cmp r0, 0
blt _08063970
movs r0, 0x5
negs r0, r0
ands r0, r1
movs r1, 0x4
orrs r0, r1
strb r0, [r4, 0x2]
ldr r0, [r5]
movs r1, 0x80
lsls r1, 10
orrs r0, r1
str r0, [r5]
b _08063970
_08063966:
ldrb r1, [r4, 0x2]
movs r0, 0x5
negs r0, r0
ands r0, r1
strb r0, [r4, 0x2]
_08063970:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_ShortGrass
thumb_func_start GetGroundEffectFlags_HotSprings
GetGroundEffectFlags_HotSprings: @ 8063978
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x1E]
bl MetatileBehavior_IsHotSprings
lsls r0, 24
cmp r0, 0
beq _080639B6
ldrb r0, [r4, 0x1F]
bl MetatileBehavior_IsHotSprings
lsls r0, 24
cmp r0, 0
beq _080639B6
ldrb r1, [r4, 0x2]
lsls r0, r1, 26
cmp r0, 0
blt _080639C0
movs r0, 0x21
negs r0, r0
ands r0, r1
movs r1, 0x20
orrs r0, r1
strb r0, [r4, 0x2]
ldr r0, [r5]
movs r1, 0x80
lsls r1, 11
orrs r0, r1
str r0, [r5]
b _080639C0
_080639B6:
ldrb r1, [r4, 0x2]
movs r0, 0x21
negs r0, r0
ands r0, r1
strb r0, [r4, 0x2]
_080639C0:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_HotSprings
thumb_func_start GetGroundEffectFlags_Seaweed
GetGroundEffectFlags_Seaweed: @ 80639C8
push {r4,lr}
adds r4, r1, 0
ldrb r0, [r0, 0x1E]
bl MetatileBehavior_IsSeaweed
lsls r0, 24
cmp r0, 0
beq _080639E2
ldr r0, [r4]
movs r1, 0x80
lsls r1, 12
orrs r0, r1
str r0, [r4]
_080639E2:
pop {r4}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_Seaweed
thumb_func_start GetGroundEffectFlags_JumpLanding
GetGroundEffectFlags_JumpLanding: @ 80639E8
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r7, r0, 0
adds r6, r1, 0
ldr r0, [r7]
ldr r1, _08063A24 @ =0x02000020
ands r0, r1
cmp r0, 0x20
bne _08063A3A @ Is player landing after jumping?
movs r5, 0
ldr r0, _08063A28 @ =gJumpLanding_MetatileFunctionPointers
mov r8, r0
_08063A02:
lsls r4, r5, 2
mov r0, r8
adds r1, r4, r0
ldrb r0, [r7, 0x1E] @ Load metatile behavior
ldr r1, [r1]
bl _call_via_r1
lsls r0, 24
cmp r0, 0
beq _08063A30
ldr r0, _08063A2C @ =gJumpLanding_Bitmasks
adds r0, r4, r0
ldr r1, [r6]
ldr r0, [r0]
orrs r1, r0
str r1, [r6]
b _08063A3A
.align 2, 0
_08063A24: .4byte 0x02000020
_08063A28: .4byte gJumpLanding_MetatileFunctionPointers
_08063A2C: .4byte gJumpLanding_Bitmasks
_08063A30:
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x5
bls _08063A02
_08063A3A:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end GetGroundEffectFlags_JumpLanding
thumb_func_start FieldObjectCheckForReflectiveSurface
FieldObjectCheckForReflectiveSurface: @ 8063A44
push {r4-r7,lr}

View File

@ -3,28 +3,6 @@
.section .rodata
@ Functions used to determine which category of tile the player is landing
@ on after jumping over a ledge.
.align 2
gJumpLanding_MetatileFunctionPointers:: @ 8376010
.4byte MetatileBehavior_IsTallGrass
.4byte MetatileBehavior_IsLongGrass
.4byte MetatileBehavior_IsPuddle
.4byte MetatileBehavior_IsSurfableWaterOrUnderwater
.4byte MetatileBehavior_IsShallowFlowingWater
.4byte sub_8056D9C
@ This table contains bitmasks used for determining the animation that happens when the player lands on
@ the ground after jumping over a ledge. Each entry corresponds to the gJumpLanding_MetatileFunctionPointers table.
.align 2
gJumpLanding_Bitmasks:: @ 8376028
.4byte 0x00001000 @ Landing in tall grass
.4byte 0x00002000 @ Landing in long grass
.4byte 0x00004000 @ Landing on puddle
.4byte 0x00008000 @ Landing on surfable water or underwater
.4byte 0x00004000 @ Landing on shallow flowing water
.4byte 0x00010000 @ Landing on any other type of ground
.align 2
gUnknown_08376040:: @ 8376040
.4byte MetatileBehavior_IsJumpSouth

View File

@ -37,30 +37,6 @@ void CreatePokeballSprite(u8 r0, u8 r1, u8 r2, u8 r3, u8 s1, u8 s2, u8 s3, u16 s
// asm/berry_blender.o
void sub_80516C4(u8, u16);
// asm/metatile_behavior.o
bool8 MetatileBehavior_IsSandOrDeepSand(char);
bool8 is_tile_x69_2_warp_door(u8);
u8 MetatileBehavior_IsDoor(u8);
bool8 MetatileBehavior_IsLadder(u8);
u8 sub_8056F08(u8);
bool8 sub_8056F24(u8);
u8 MetatileBehavior_IsSurfableWaterOrUnderwater(u8);
bool8 MetatileBehavior_IsEastArrowWarp(u8);
bool8 MetatileBehavior_IsWestArrowWarp(u8);
bool8 MetatileBehavior_IsNorthArrowWarp(u8);
bool8 MetatileBehavior_IsSouthArrowWarp(u8);
bool8 MetatileBehavior_IsTallGrass(char);
bool8 MetatileBehavior_IsLongGrass(char);
u8 MetatileBehavior_IsBridge(u8);
u8 sub_8057450(u8);
u8 MetatileBehavior_IsLandWildEncounter(u8);
u8 MetatileBehavior_IsWaterWildEncounter(u8);
bool8 sub_80574C4(char);
bool8 sub_80574D8(char);
bool8 sub_8057568(char);
bool8 sub_805759C(u8);
bool8 MetatileBehavior_IsSurfableFishableWater(u8);
// src/field_door.o
void FieldSetDoorOpened(u32, u32);
void FieldSetDoorClosed(u32, u32);

136
include/metatile_behavior.h Normal file
View File

@ -0,0 +1,136 @@
#ifndef GUARD_METATILE_BEHAVIOR
#define GUARD_METATILE_BEHAVIOR
bool8 sub_8056D9C(u8);
bool8 sub_8056DA0(u8);
bool8 MetatileBehavior_IsJumpEast(u8);
bool8 MetatileBehavior_IsJumpWest(u8);
bool8 MetatileBehavior_IsJumpNorth(u8);
bool8 MetatileBehavior_IsJumpSouth(u8);
bool8 sub_8056E14(u8);
bool8 MetatileBehavior_IsSandOrDeepSand(u8);
bool8 MetatileBehavior_IsDeepSand(u8);
bool8 MetatileBehavior_IsReflective(u8);
bool8 MetatileBehavior_IsIce(u8);
bool8 is_tile_x69_2_warp_door(u8);
bool8 MetatileBehavior_IsDoor(u8);
bool8 MetatileBehavior_IsEscalator(u8);
bool8 unref_sub_8056EE0(u8);
bool8 MetatileBehavior_IsLadder(u8);
bool8 sub_8056F08(u8);
bool8 sub_8056F24(u8);
bool8 MetatileBehavior_IsSurfableWaterOrUnderwater(u8);
bool8 MetatileBehavior_IsEastArrowWarp(u8);
bool8 MetatileBehavior_IsWestArrowWarp(u8);
bool8 MetatileBehavior_IsNorthArrowWarp(u8);
bool8 MetatileBehavior_IsSouthArrowWarp(u8);
bool8 MetatileBehavior_IsArrowWarp(u8);
bool8 sub_8056FFC(u8);
bool8 MetatileBehavior_IsIce_2(u8);
bool8 MetatileBehavior_IsTrickHouseSlipperyFloor(u8);
bool8 MetatileBehavior_0x05(u8);
bool8 MetatileBehavior_IsWalkNorth(u8);
bool8 MetatileBehavior_IsWalkSouth(u8);
bool8 MetatileBehavior_IsWalkWest(u8);
bool8 MetatileBehavior_IsWalkEast(u8);
bool8 MetatileBehavior_IsNorthwardCurrent(u8);
bool8 MetatileBehavior_IsSouthwardCurrent(u8);
bool8 MetatileBehavior_IsWestwardCurrent(u8);
bool8 MetatileBehavior_IsEastwardCurrent(u8);
bool8 MetatileBehavior_IsSlideNorth(u8);
bool8 MetatileBehavior_IsSlideSouth(u8);
bool8 MetatileBehavior_IsSlideWest(u8);
bool8 MetatileBehavior_IsSlideEast(u8);
bool8 MetatileBehavior_IsCounter(u8);
bool8 MetatileBehavior_IsPlayerFacingTVScreen(u8, u8);
bool8 MetatileBehavior_IsPC(u8);
bool8 is_tile_x84(u8);
bool8 sub_80571C0(u8);
bool8 sub_80571EC(u8);
bool8 sub_805720C(u8);
bool8 is_tile_x98(u8);
bool8 sub_8057238(u8);
bool8 sub_805724C(u8);
bool8 unref_sub_8057260(u8);
bool8 sub_8057274(u8);
bool8 sub_8057288(u8);
bool8 sub_805729C(u8);
bool8 sub_80572B0(u8);
bool8 unref_sub_80572C4(u8);
bool8 sub_80572D8(u8);
bool8 sub_80572EC(u8);
bool8 sub_8057300(u8);
bool8 sub_8057314(u8);
bool8 sub_8057328(u8);
bool8 sub_805733C(u8);
bool8 sub_8057350(u8);
bool8 sub_8057364(u8);
bool8 sub_8057378(u8);
bool8 sub_805738C(u8);
bool8 MetatileBehavior_HasRipples(u8);
bool8 MetatileBehavior_IsPuddle(u8);
bool8 MetatileBehavior_IsTallGrass(u8);
bool8 MetatileBehavior_IsLongGrass(u8);
bool8 MetatileBehavior_IsBerryTreeSoil(u8);
bool8 MetatileBehavior_IsAsh(u8);
bool8 MetatileBehavior_IsUnusedFootprintMetatile(u8);
bool8 MetatileBehavior_IsBridge(u8);
u8 sub_8057450(u8);
bool8 MetatileBehavior_IsLandWildEncounter(u8);
bool8 MetatileBehavior_IsWaterWildEncounter(u8);
bool8 sub_80574C4(u8);
bool8 sub_80574D8(u8);
bool8 sub_80574EC(u8);
bool8 sub_805750C(u8);
bool8 MetatileBehavior_IsShallowFlowingWater(u8);
bool8 sub_8057540(u8);
bool8 sub_8057554(u8);
bool8 sub_8057568(u8);
bool8 unref_sub_8057584(u8);
bool8 sub_805759C(u8);
bool8 MetatileBehavior_IsEastBlocked(u8);
bool8 MetatileBehavior_IsWestBlocked(u8);
bool8 MetatileBehavior_IsNorthBlocked(u8);
bool8 MetatileBehavior_IsSouthBlocked(u8);
bool8 MetatileBehavior_IsShortGrass(u8);
bool8 MetatileBehavior_IsHotSprings(u8);
bool8 MetatileBehavior_IsWaterfall(u8);
bool8 MetatileBehavior_IsFortreeBridge(u8);
bool8 sub_80576A0(u8);
bool8 sub_80576B4(u8);
bool8 sub_80576C8(u8);
bool8 sub_80576DC(u8);
bool8 MetatileBehavior_IsPacifidlogLog(u8);
bool8 is_tile_x8C(u8);
bool8 is_tile_x85(u8);
bool8 is_tile_x8B(u8);
bool8 is_tile_x8A(u8);
bool8 is_tile_x87(u8);
bool8 MetatileBehavior_0xBB(u8);
bool8 MetatileBehavior_0xBC(u8);
bool8 sub_8057798(u8);
bool8 is_role_x68(u8);
bool8 MetatileBehavior_IsAquaHideoutWarp(u8);
bool8 MetatileBehavior_IsSurfableFishableWater(u8);
bool8 sub_8057804(u8);
bool8 sub_8057818(u8);
bool8 sub_805782C(u8);
bool8 MetatileBehavior_IsMuddySlope(u8);
bool8 MetatileBehavior_IsBumpySlope(u8);
bool8 MetatileBehavior_IsIsolatedVerticalRail(u8);
bool8 MetatileBehavior_IsIsolatedHorizontalRail(u8);
bool8 MetatileBehavior_IsVerticalRail(u8);
bool8 MetatileBehavior_IsHorizontalRail(u8);
bool8 MetatileBehavior_IsSeaweed(u8);
bool8 MetatileBehavior_IsRunningDisallowed(u8);
bool8 sub_80578F8(u8);
bool8 sub_805791C(u8);
bool8 sub_8057930(u8);
bool8 sub_8057944(u8);
bool8 sub_8057958(u8);
bool8 sub_805796C(u8);
bool8 sub_8057980(u8);
bool8 sub_8057994(u8);
bool8 sub_80579A8(u8);
#endif // GUARD_METATILE_BEHAVIOR

View File

@ -20,6 +20,7 @@
#include "field_message_box.h"
#include "trainer.h"
#include "starter_choose.h"
#include "metatile_behavior.h"
#define NUM_TRAINER_EYE_TRAINERS 56
#define TRAINER_REMATCH_STEPS 255

View File

@ -2,6 +2,7 @@
#include "asm.h"
#include "task.h"
#include "field_camera.h"
#include "metatile_behavior.h"
struct DoorGraphics
{

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "asm_fieldmap.h"
#include "metatile_behavior.h"
extern u32 gUnknown_08376008[];
@ -10,7 +11,7 @@ void GetGroundEffectFlags_TallGrassOnBeginStep(struct MapObject *, u32 *);
void GetGroundEffectFlags_LongGrassOnSpawn(struct MapObject *, u32 *);
void GetGroundEffectFlags_LongGrassOnBeginStep(struct MapObject *, u32 *);
void GetGroundEffectFlags_Tracks(struct MapObject *, u32 *);
void GetGroundEffectFlags_SandHeap(struct MapObject *, u32 *);
void GetGroundEffectFlags_SandPile(struct MapObject *, u32 *);
void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *, u32 *);
void GetGroundEffectFlags_Puddle(struct MapObject *, u32 *);
void GetGroundEffectFlags_Ripple(struct MapObject *, u32 *);
@ -26,7 +27,7 @@ void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags)
GetGroundEffectFlags_Reflection(mapObj, flags);
GetGroundEffectFlags_TallGrassOnSpawn(mapObj, flags);
GetGroundEffectFlags_LongGrassOnSpawn(mapObj, flags);
GetGroundEffectFlags_SandHeap(mapObj, flags);
GetGroundEffectFlags_SandPile(mapObj, flags);
GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags);
GetGroundEffectFlags_ShortGrass(mapObj, flags);
GetGroundEffectFlags_HotSprings(mapObj, flags);
@ -39,7 +40,7 @@ void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags)
GetGroundEffectFlags_TallGrassOnBeginStep(mapObj, flags);
GetGroundEffectFlags_LongGrassOnBeginStep(mapObj, flags);
GetGroundEffectFlags_Tracks(mapObj, flags);
GetGroundEffectFlags_SandHeap(mapObj, flags);
GetGroundEffectFlags_SandPile(mapObj, flags);
GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags);
GetGroundEffectFlags_Puddle(mapObj, flags);
GetGroundEffectFlags_ShortGrass(mapObj, flags);
@ -50,7 +51,7 @@ void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags)
{
FieldObjectUpdateMetatileBehaviors(mapObj);
GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags);
GetGroundEffectFlags_SandHeap(mapObj, flags);
GetGroundEffectFlags_SandPile(mapObj, flags);
GetGroundEffectFlags_Puddle(mapObj, flags);
GetGroundEffectFlags_Ripple(mapObj, flags);
GetGroundEffectFlags_ShortGrass(mapObj, flags);
@ -68,9 +69,7 @@ void FieldObjectUpdateMetatileBehaviors(struct MapObject *mapObj)
void GetGroundEffectFlags_Reflection(struct MapObject *mapObj, u32 *flags)
{
u32 reflectionFlags[2] = { 0x00000020, 0x00000010 };
u8 type;
type = FieldObjectCheckForReflectiveSurface(mapObj);
u8 type = FieldObjectCheckForReflectiveSurface(mapObj);
if (type)
{
@ -86,3 +85,172 @@ void GetGroundEffectFlags_Reflection(struct MapObject *mapObj, u32 *flags)
mapObj->mapobj_bit_17 = 0;
}
}
void GetGroundEffectFlags_TallGrassOnSpawn(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E))
*flags |= 0x1;
}
void GetGroundEffectFlags_TallGrassOnBeginStep(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E))
*flags |= 0x2;
}
void GetGroundEffectFlags_LongGrassOnSpawn(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E))
*flags |= 0x4;
}
void GetGroundEffectFlags_LongGrassOnBeginStep(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E))
*flags |= 0x8;
}
void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F))
{
*flags |= 0x100;
}
else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F)
|| MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F))
{
*flags |= 0x80;
}
}
void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E)
&& MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F))
{
if (!mapObj->mapobj_bit_20)
{
mapObj->mapobj_bit_20 = 0;
mapObj->mapobj_bit_20 = 1;
*flags |= 0x800;
}
}
else
{
mapObj->mapobj_bit_20 = 0;
}
}
void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *mapObj, u32 *flags)
{
if ((MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1E) && MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1F))
|| (MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1E) && MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1F)))
{
if (!mapObj->mapobj_bit_19)
{
mapObj->mapobj_bit_19 = 0;
mapObj->mapobj_bit_19 = 1;
*flags |= 0x40;
}
}
else
{
mapObj->mapobj_bit_19 = 0;
}
}
void GetGroundEffectFlags_Puddle(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E)
&& MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F))
{
*flags |= 0x400;
}
}
void GetGroundEffectFlags_Ripple(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_HasRipples(mapObj->mapobj_unk_1E))
*flags |= 0x200;
}
void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E)
&& MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F))
{
if (!mapObj->mapobj_bit_18)
{
mapObj->mapobj_bit_18 = 0;
mapObj->mapobj_bit_18 = 1;
*flags |= 0x20000;
}
}
else
{
mapObj->mapobj_bit_18 = 0;
}
}
void GetGroundEffectFlags_HotSprings(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E)
&& MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F))
{
if (!mapObj->mapobj_bit_21)
{
mapObj->mapobj_bit_21 = 0;
mapObj->mapobj_bit_21 = 1;
*flags |= 0x40000;
}
}
else
{
mapObj->mapobj_bit_21 = 0;
}
}
void GetGroundEffectFlags_Seaweed(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsSeaweed(mapObj->mapobj_unk_1E))
*flags |= 0x80000;
}
void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags)
{
typedef bool8 (*MetatileFunc)(u8);
static const MetatileFunc metatileFuncs[] =
{
MetatileBehavior_IsTallGrass,
MetatileBehavior_IsLongGrass,
MetatileBehavior_IsPuddle,
MetatileBehavior_IsSurfableWaterOrUnderwater,
MetatileBehavior_IsShallowFlowingWater,
sub_8056D9C,
};
static const u32 jumpLandingFlags[] =
{
0x00001000, // Landing in tall grass
0x00002000, // Landing in long grass
0x00004000, // Landing on puddle
0x00008000, // Landing on surfable water or underwater
0x00004000, // Landing on shallow flowing water
0x00010000, // Landing on any other type of ground
};
if (mapObj->mapobj_bit_5 && !mapObj->mapobj_bit_25)
{
u8 i;
for (i = 0; i < 6; i++)
{
if (metatileFuncs[i](mapObj->mapobj_unk_1E))
{
*flags |= jumpLandingFlags[i];
return;
}
}
}
}

View File

@ -14,6 +14,7 @@
#include "field_effect.h"
#include "wild_encounter.h"
#include "asm_fieldmap.h"
#include "metatile_behavior.h"
extern u8 gOtherText_OhABite[];
extern u8 gOtherText_PokeOnHook[];

View File

@ -5,9 +5,9 @@ extern u8 gUnknown_08308E2C[];
bool8 MetatileBehavior_IsWaterfall(u8);
s8 sub_8056D9C(void)
bool8 sub_8056D9C(u8 var)
{
return 1;
return TRUE;
}
bool8 sub_8056DA0(u8 var)

View File

@ -30,6 +30,7 @@
#include "var.h"
#include "weather.h"
#include "wild_encounter.h"
#include "metatile_behavior.h"
#ifdef SAPPHIRE
#define LEGENDARY_MUSIC BGM_OOAME // Heavy Rain

View File

@ -11,6 +11,7 @@
#include "var.h"
#include "rom4.h"
#include "vars.h"
#include "metatile_behavior.h"
struct WildPokemon
{