Finish fldeff_cut

This commit is contained in:
PikalaxALT
2020-02-26 09:11:24 -05:00
parent 41644b283a
commit 51e2b99b9d
6 changed files with 179 additions and 355 deletions
-296
View File
@@ -1,296 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_8097A48
sub_8097A48: @ 8097A48
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
movs r7, 0
movs r0, 0x79
bl PlaySE
ldr r4, _08097B38 @ =gPlayerFacingPosition
adds r1, r4, 0x2
adds r0, r4, 0
bl PlayerGetDestCoords
mov r8, r4
ldr r0, _08097B3C @ =0x0000ffff
mov r9, r0
_08097A68:
mov r1, r9
adds r0, r1, r7
mov r2, r8
ldrh r2, [r2, 0x2]
adds r0, r2
movs r6, 0
lsls r0, 16
asrs r5, r0, 16
_08097A78:
mov r1, r9
adds r0, r1, r6
mov r2, r8
ldrh r2, [r2]
adds r0, r2
lsls r0, 16
asrs r4, r0, 16
adds r0, r4, 0
adds r1, r5, 0
bl MapGridGetZCoordAt
lsls r0, 24
lsrs r0, 24
mov r2, r8
movs r1, 0x4
ldrsb r1, [r2, r1]
cmp r0, r1
bne _08097ABC
adds r0, r4, 0
adds r1, r5, 0
bl MetatileAtCoordsIsGrassTile
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _08097ABC
adds r0, r4, 0
adds r1, r5, 0
bl sub_8097B50
adds r0, r4, 0
adds r1, r5, 0
bl sub_805F378
_08097ABC:
adds r0, r6, 0x1
lsls r0, 24
lsrs r6, r0, 24
cmp r6, 0x2
bls _08097A78
adds r0, r7, 0x1
lsls r0, 24
lsrs r7, r0, 24
cmp r7, 0x2
bls _08097A68
bl DrawWholeMapView
ldr r4, _08097B40 @ =sCutGrassSpriteArrayPtr
movs r0, 0x8
bl Alloc
str r0, [r4]
movs r7, 0
ldr r5, _08097B44 @ =gSprites
_08097AE2:
ldr r0, _08097B48 @ =gPlayerAvatar
ldrb r1, [r0, 0x4]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r5
ldrh r1, [r0, 0x2]
lsls r1, 23
lsrs r1, 7
movs r2, 0x80
lsls r2, 12
adds r1, r2
asrs r1, 16
ldrb r2, [r0]
adds r2, 0x14
ldr r0, _08097B4C @ =gUnknown_83D414C
movs r3, 0
bl CreateSprite
ldr r1, [r4]
adds r1, r7
strb r0, [r1]
ldr r0, [r4]
adds r0, r7
ldrb r1, [r0]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r5
lsls r1, r7, 5
strh r1, [r0, 0x32]
adds r0, r7, 0x1
lsls r0, 24
lsrs r7, r0, 24
cmp r7, 0x7
bls _08097AE2
movs r0, 0
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08097B38: .4byte gPlayerFacingPosition
_08097B3C: .4byte 0x0000ffff
_08097B40: .4byte sCutGrassSpriteArrayPtr
_08097B44: .4byte gSprites
_08097B48: .4byte gPlayerAvatar
_08097B4C: .4byte gUnknown_83D414C
thumb_func_end sub_8097A48
thumb_func_start sub_8097B50
sub_8097B50: @ 8097B50
push {r4-r7,lr}
lsls r0, 16
lsls r1, 16
movs r4, 0
lsrs r6, r0, 16
asrs r0, 16
lsrs r7, r1, 16
asrs r1, 16
bl MapGridGetMetatileIdAt
lsls r0, 16
lsrs r2, r0, 16
ldr r1, _08097B84 @ =gUnknown_83D4100
ldr r5, _08097B88 @ =0x0000ffff
mov r12, r1
_08097B6E:
lsls r3, r4, 2
adds r0, r3, r1
ldrh r0, [r0]
cmp r0, r5
beq _08097BA0
cmp r0, r2
beq _08097B8C
adds r0, r4, 0x1
lsls r0, 16
lsrs r4, r0, 16
b _08097B6E
.align 2, 0
_08097B84: .4byte gUnknown_83D4100
_08097B88: .4byte 0x0000ffff
_08097B8C:
lsls r0, r6, 16
asrs r0, 16
lsls r1, r7, 16
asrs r1, 16
mov r2, r12
adds r2, 0x2
adds r2, r3, r2
ldrh r2, [r2]
bl MapGridSetMetatileIdAt
_08097BA0:
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8097B50
thumb_func_start objc_8097BA8
objc_8097BA8: @ 8097BA8
movs r2, 0
movs r1, 0x8
strh r1, [r0, 0x2E]
strh r2, [r0, 0x30]
strh r2, [r0, 0x34]
ldr r1, _08097BB8 @ =objc_8097BBC
str r1, [r0, 0x1C]
bx lr
.align 2, 0
_08097BB8: .4byte objc_8097BBC
thumb_func_end objc_8097BA8
thumb_func_start objc_8097BBC
objc_8097BBC: @ 8097BBC
push {r4,lr}
adds r4, r0, 0
movs r1, 0x32
ldrsh r0, [r4, r1]
movs r2, 0x2E
ldrsh r1, [r4, r2]
bl Sin
strh r0, [r4, 0x24]
movs r1, 0x32
ldrsh r0, [r4, r1]
movs r2, 0x2E
ldrsh r1, [r4, r2]
bl Cos
strh r0, [r4, 0x26]
ldrh r0, [r4, 0x32]
adds r0, 0x8
movs r1, 0xFF
ands r0, r1
strh r0, [r4, 0x32]
ldrh r1, [r4, 0x2E]
adds r1, 0x1
ldrh r2, [r4, 0x34]
lsls r0, r2, 16
asrs r0, 18
adds r1, r0
strh r1, [r4, 0x2E]
adds r2, 0x1
strh r2, [r4, 0x34]
ldrh r1, [r4, 0x30]
movs r2, 0x30
ldrsh r0, [r4, r2]
cmp r0, 0x1C
beq _08097C08
adds r0, r1, 0x1
strh r0, [r4, 0x30]
b _08097C0C
_08097C08:
ldr r0, _08097C14 @ =sub_8097C18
str r0, [r4, 0x1C]
_08097C0C:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08097C14: .4byte sub_8097C18
thumb_func_end objc_8097BBC
thumb_func_start sub_8097C18
sub_8097C18: @ 8097C18
push {r4-r6,lr}
movs r4, 0x1
_08097C1C:
ldr r6, _08097C64 @ =sCutGrassSpriteArrayPtr
ldr r0, [r6]
adds r0, r4
ldrb r1, [r0]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
ldr r5, _08097C68 @ =gSprites
adds r0, r5
bl DestroySprite
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x7
bls _08097C1C
ldr r0, [r6]
ldrb r1, [r0]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r5
movs r1, 0x3A
bl FieldEffectStop
ldr r0, [r6]
bl Free
bl sub_80696C0
bl ScriptContext2_Disable
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08097C64: .4byte sCutGrassSpriteArrayPtr
_08097C68: .4byte gSprites
thumb_func_end sub_8097C18
thumb_func_start sub_8097C6C
sub_8097C6C: @ 8097C6C
push {lr}
movs r0, 0x79
bl PlaySE
movs r0, 0x2
bl FieldEffectActiveListRemove
bl EnableBothScriptContexts
pop {r0}
bx r0
thumb_func_end sub_8097C6C
.align 2, 0 @ Don't pad with nop.
-40
View File
@@ -1,40 +0,0 @@
#include "constants/maps.h"
#include "constants/species.h"
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_83D4100:: @ 83D4100
.2byte 0x000d, 0x0001
.2byte 0x000a, 0x0013
.2byte 0x000b, 0x000e
.2byte 0x000c, 0x000f
.2byte 0x0352, 0x033e
.2byte 0x0300, 0x0310
.2byte 0x0301, 0x0311
.2byte 0x0302, 0x0312
.2byte 0x0284, 0x0281
.2byte 0xffff, 0xffff
.align 2
gOamData_83D4128::
.4byte 0x00000000, 0x00001401
gAnimCmd_83D4130::
obj_image_anim_frame 0, 30
obj_image_anim_jump 0
gSpriteAnimTable_83D4138::
.4byte gAnimCmd_83D4130
gUnknown_83D413C::
obj_frame_tiles gUnknown_8398648, 0x20
gUnknown_83D4144::
obj_pal gUnknown_8398688, 4096
gUnknown_83D414C:: @ 83D414C
spr_template 0xFFFF, 4096, gOamData_83D4128, gSpriteAnimTable_83D4138, gUnknown_83D413C, gDummySpriteAffineAnimTable, objc_8097BA8
+4
View File
@@ -117,6 +117,8 @@ bool32 RfuUnionObjectIsInvisible(u8 objectEventId);
void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo);
bool32 RfuUnionObjectIsWarping(u8 objectEventId);
void sub_805F378(s16 x, s16 y);
// Exported data declarations
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
@@ -124,5 +126,7 @@ extern const struct SpritePalette gUnknown_83A5348;
extern const struct SpriteTemplate * const gFieldEffectObjectTemplatePointers[];
extern const struct OamData gObjectEventBaseOam_32x32;
extern const struct UCoords16 gUnknown_83A64C8[];
extern const u16 gUnknown_8398648[];
extern const u16 gUnknown_8398688[];
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
+1 -2
View File
@@ -132,7 +132,6 @@ SECTIONS {
src/pokemon_icon.o(.text);
src/script_movement.o(.text);
src/fldeff_cut.o(.text);
asm/fldeff_cut.o(.text);
src/mail_data.o(.text);
src/map_name_popup.o(.text);
src/item_menu_icons.o(.text);
@@ -450,7 +449,7 @@ SECTIONS {
src/trainer_card.o(.rodata);
data/pokemon_storage_system.o(.rodata);
src/pokemon_icon.o(.rodata);
data/fldeff_cut.o(.rodata);
src/fldeff_cut.o(.rodata);
src/map_name_popup.o(.rodata);
src/item_menu_icons.o(.rodata);
src/battle_anim_mon_movement.o(.rodata);
+173 -10
View File
@@ -1,7 +1,10 @@
#include "global.h"
#include "gflib.h"
#include "event_object_lock.h"
#include "event_object_movement.h"
#include "event_scripts.h"
#include "fieldmap.h"
#include "field_camera.h"
#include "field_specials.h"
#include "fldeff.h"
#include "field_effect.h"
@@ -10,17 +13,79 @@
#include "overworld.h"
#include "party_menu.h"
#include "script.h"
#include "trig.h"
#include "constants/event_objects.h"
#include "constants/songs.h"
EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL;
EWRAM_DATA bool8 sScheduleOpenDottedHole = FALSE;
static EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL;
static EWRAM_DATA bool8 sScheduleOpenDottedHole = FALSE;
void FieldCallback_CutGrass(void);
void FieldCallback_CutTree(void);
void sub_8097A20(void);
void sub_8097C6C(void);
static void FieldCallback_CutGrass(void);
static void FieldCallback_CutTree(void);
static void sub_8097A20(void);
static void sub_8097B50(s16 x, s16 y);
static void objc_8097BA8(struct Sprite * sprite);
static void objc_8097BBC(struct Sprite * sprite);
static void sub_8097C18(struct Sprite * sprite);
static void sub_8097C6C(void);
u8 MetatileAtCoordsIsGrassTile(s16 x, s16 y)
static const u16 sCutGrassMetatileMapping[][2] = {
{0x000d, 0x0001},
{0x000a, 0x0013},
{0x000b, 0x000e},
{0x000c, 0x000f},
{0x0352, 0x033e},
{0x0300, 0x0310},
{0x0301, 0x0311},
{0x0302, 0x0312},
{0x0284, 0x0281},
{0xffff, 0xffff}
};
static const struct OamData gOamData_83D4128 = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
.size = SPRITE_SIZE(8x8),
.tileNum = 0x001,
.priority = 1,
.paletteNum = 0x1,
.affineParam = 0
};
static const union AnimCmd gAnimCmd_83D4130[] = {
ANIMCMD_FRAME(0, 30),
ANIMCMD_JUMP(0)
};
static const union AnimCmd *const gSpriteAnimTable_83D4138[] = {
gAnimCmd_83D4130
};
static const struct SpriteFrameImage gUnknown_83D413C[] = {
{gUnknown_8398648, 0x20}
};
const struct SpritePalette gUnknown_83D4144[] = {
gUnknown_8398688, 4096
};
static const struct SpriteTemplate sSpriteTemplate_CutGrass = {
.tileTag = 0xFFFF,
.paletteTag = 4096,
.oam = &gOamData_83D4128,
.anims = gSpriteAnimTable_83D4138,
.images = gUnknown_83D413C,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = objc_8097BA8
};
static u8 MetatileAtCoordsIsGrassTile(s16 x, s16 y)
{
return TestMetatileAttributeBit(MapGridGetMetatileAttributeAt(x, y, 1), 1);
}
@@ -72,7 +137,7 @@ bool8 SetUpFieldMove_Cut(void)
}
}
void FieldCallback_CutGrass(void)
static void FieldCallback_CutGrass(void)
{
FieldEffectStart(FLDEFF_USE_CUT_ON_GRASS);
gFieldEffectArguments[0] = GetCursorSelectionMonId();
@@ -86,7 +151,7 @@ bool8 sub_80979A0(void)
return FALSE;
}
void FieldCallback_CutTree(void)
static void FieldCallback_CutTree(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
ScriptContext1_SetupScript(EventScript_FldEffCut);
@@ -100,7 +165,7 @@ bool8 sub_80979F0(void)
return FALSE;
}
void sub_8097A20(void)
static void sub_8097A20(void)
{
FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_GRASS);
if (sScheduleOpenDottedHole == TRUE)
@@ -108,3 +173,101 @@ void sub_8097A20(void)
else
FieldEffectStart(FLDEFF_CUT_GRASS);
}
bool8 sub_8097A48(void)
{
u8 i, j;
s16 x, y;
register s32 neg1 asm("r9");
struct MapPosition *pos;
i = 0;
PlaySE(SE_W015);
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)
{
sub_8097B50(x, y);
sub_805F378(x, y);
}
}
}
}
DrawWholeMapView();
sCutGrassSpriteArrayPtr = Alloc(8);
for (i = 0; i < 8; i++)
{
sCutGrassSpriteArrayPtr[i] = CreateSprite(&sSpriteTemplate_CutGrass, gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0);
gSprites[sCutGrassSpriteArrayPtr[i]].data[2] = i * 32;
}
return FALSE;
}
static void sub_8097B50(s16 x, s16 y)
{
u16 i = 0;
u16 metatileId = MapGridGetMetatileIdAt(x, y);
while (1)
{
if (sCutGrassMetatileMapping[i][0] == 0xFFFF)
return;
if (sCutGrassMetatileMapping[i][0] == metatileId)
{
MapGridSetMetatileIdAt(x, y, sCutGrassMetatileMapping[i][1]);
break;
}
i++;
}
}
static void objc_8097BA8(struct Sprite * sprite)
{
sprite->data[0] = 8;
sprite->data[1] = 0;
sprite->data[3] = 0;
sprite->callback = objc_8097BBC;
}
static void objc_8097BBC(struct Sprite * sprite)
{
sprite->pos2.x = Sin(sprite->data[2], sprite->data[0]);
sprite->pos2.y = Cos(sprite->data[2], sprite->data[0]);
sprite->data[2] += 8;
sprite->data[2] &= 0xFF;
sprite->data[0]++;
sprite->data[0] += sprite->data[3] >> 2;
sprite->data[3]++;
if (sprite->data[1] != 28)
sprite->data[1]++;
else
sprite->callback = sub_8097C18;
}
static void sub_8097C18(struct Sprite * sprite)
{
u8 i;
for (i = 1; i < 8; i++)
{
DestroySprite(&gSprites[sCutGrassSpriteArrayPtr[i]]);
}
FieldEffectStop(&gSprites[sCutGrassSpriteArrayPtr[0]], FLDEFF_CUT_GRASS);
Free(sCutGrassSpriteArrayPtr);
sub_80696C0();
ScriptContext2_Disable();
}
static void sub_8097C6C(void)
{
PlaySE(SE_W015);
FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE);
EnableBothScriptContexts();
}
+1 -7
View File
@@ -218,14 +218,8 @@ gUnknown_203982C: @ 203982C
.align 2
.include "src/script_movement.o"
.align 2
sCutGrassSpriteArrayPtr: @ 2039870
.space 0x4
sScheduleOpenDottedHole: @ 2039874
.space 0x4
.include "src/fldeff_cut.o"
.align 2
.include "src/item_menu_icons.o"