summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsceptillion <33798691+sceptillion@users.noreply.github.com>2017-11-18 23:35:08 -0800
committersceptillion <33798691+sceptillion@users.noreply.github.com>2017-11-18 23:35:08 -0800
commit9baa39f7082acfb1eb8b75603e440773504ad206 (patch)
tree915969d2d568693645c1f7a421b7c2334d6900c3
parent4a365e9230962daf875a0444d51d76639c07c827 (diff)
decompile fldeff_recordmixing
-rwxr-xr-xasm/fldeff_recordmixing.s94
-rwxr-xr-xdata/fldeff_recordmixing.s45
-rw-r--r--ld_script.txt4
-rw-r--r--src/field/fldeff_recordmixing.c82
4 files changed, 84 insertions, 141 deletions
diff --git a/asm/fldeff_recordmixing.s b/asm/fldeff_recordmixing.s
deleted file mode 100755
index 8c79cdef8..000000000
--- a/asm/fldeff_recordmixing.s
+++ /dev/null
@@ -1,94 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start CreateRecordMixingSprite
-CreateRecordMixingSprite: @ 80C71D8
- push {r4,r5,lr}
- ldr r0, _080C722C @ =gUnknown_083D2878
- bl LoadSpritePalette
- ldr r0, _080C7230 @ =gSpriteTemplate_83D2894
- movs r1, 0
- movs r2, 0
- movs r3, 0x52
- bl CreateSprite
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x40
- beq _080C7238
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- ldr r1, _080C7234 @ =gSprites
- adds r4, r0, r1
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r0, 0x10
- movs r1, 0xD
- bl sub_8060388
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- ldrh r0, [r4, 0x20]
- adds r0, 0x10
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x22]
- adds r0, 0x2
- strh r0, [r4, 0x22]
- adds r0, r5, 0
- b _080C723A
- .align 2, 0
-_080C722C: .4byte gUnknown_083D2878
-_080C7230: .4byte gSpriteTemplate_83D2894
-_080C7234: .4byte gSprites
-_080C7238:
- movs r0, 0x40
-_080C723A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end CreateRecordMixingSprite
-
- thumb_func_start DestroyRecordMixingSprite
-DestroyRecordMixingSprite: @ 80C7240
- push {r4-r7,lr}
- ldr r4, _080C7274 @ =gSprites
- adds r7, r4, 0
- movs r6, 0
- movs r5, 0x3F
-_080C724A:
- adds r0, r7, 0
- adds r0, 0x14
- adds r0, r6, r0
- ldr r1, [r0]
- ldr r0, _080C7278 @ =gSpriteTemplate_83D2894
- cmp r1, r0
- bne _080C7264
- adds r0, r4, 0
- bl FreeSpritePalette
- adds r0, r4, 0
- bl DestroySprite
-_080C7264:
- adds r4, 0x44
- adds r6, 0x44
- subs r5, 0x1
- cmp r5, 0
- bge _080C724A
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C7274: .4byte gSprites
-_080C7278: .4byte gSpriteTemplate_83D2894
- thumb_func_end DestroyRecordMixingSprite
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/fldeff_recordmixing.s b/data/fldeff_recordmixing.s
deleted file mode 100755
index ee9d6b8d6..000000000
--- a/data/fldeff_recordmixing.s
+++ /dev/null
@@ -1,45 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gSpriteImage_83D26C0:: @ 83D26C0
- .incbin "graphics/unknown_sprites/83D2860/0.4bpp"
-
- .align 2
-gSpriteImage_83D2740:: @ 83D2740
- .incbin "graphics/unknown_sprites/83D2860/1.4bpp"
-
- .align 2
-gSpriteImage_83D27C0:: @ 83D27C0
- .incbin "graphics/unknown_sprites/83D2860/2.4bpp"
-
- .align 2
-Palette_3D2840:: @ 83D2840
- .incbin "graphics/unknown/unknown_3D2840.gbapal"
-
- .align 2
-gSpriteImageTable_83D2860:: @ 83D2860
- obj_frame_tiles gSpriteImage_83D26C0, 0x80
- obj_frame_tiles gSpriteImage_83D2740, 0x80
- obj_frame_tiles gSpriteImage_83D27C0, 0x80
-
- .align 2
-gUnknown_083D2878:: @ 83D2878
- obj_pal Palette_3D2840, 4096
-
- .align 2
-gSpriteAnim_83D2880:: @ 83D2880
- obj_image_anim_frame 0, 30
- obj_image_anim_frame 1, 30
- obj_image_anim_frame 2, 30
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D2890:: @ 83D2890
- .4byte gSpriteAnim_83D2880
-
- .align 2
-gSpriteTemplate_83D2894:: @ 83D2894
- spr_template 0xFFFF, 4096, gFieldOamData_32x8, gSpriteAnimTable_83D2890, gSpriteImageTable_83D2860, gDummySpriteAffineAnimTable, SpriteCallbackDummy
diff --git a/ld_script.txt b/ld_script.txt
index e5c6508ee..100afadf9 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -164,7 +164,7 @@ SECTIONS {
asm/fldeff_decoration.o(.text);
asm/fldeff_poison.o(.text);
asm/fldeff_berrytree.o(.text);
- asm/fldeff_recordmixing.o(.text);
+ src/field/fldeff_recordmixing.o(.text);
src/field/field_special_scene.o(.text);
src/field/rotating_gate.o(.text);
src/field/safari_zone.o(.text);
@@ -410,7 +410,7 @@ SECTIONS {
data/pc_screen_effect.o(.rodata);
data/fldeff_secretpower.o(.rodata);
data/fldeff_decoration.o(.rodata);
- data/fldeff_recordmixing.o(.rodata);
+ src/field/fldeff_recordmixing.o(.rodata);
src/field/field_special_scene.o(.rodata);
src/field/rotating_gate.o(.rodata);
src/field/item_use.o(.rodata);
diff --git a/src/field/fldeff_recordmixing.c b/src/field/fldeff_recordmixing.c
new file mode 100644
index 000000000..e7a1f20c4
--- /dev/null
+++ b/src/field/fldeff_recordmixing.c
@@ -0,0 +1,82 @@
+#include "global.h"
+#include "field_map_obj.h"
+#include "sprite.h"
+
+extern const struct OamData gFieldOamData_32x8;
+
+static const u8 sSpriteImage_83D26C0[] = INCBIN_U8("graphics/unknown_sprites/83D2860/0.4bpp");
+static const u8 sSpriteImage_83D2740[] = INCBIN_U8("graphics/unknown_sprites/83D2860/1.4bpp");
+static const u8 sSpriteImage_83D27C0[] = INCBIN_U8("graphics/unknown_sprites/83D2860/2.4bpp");
+static const u16 sPalette_3D2840[] = INCBIN_U16("graphics/unknown/unknown_3D2840.gbapal");
+
+
+static const struct SpriteFrameImage sSpriteImageTable_83FD950[] =
+{
+ { sSpriteImage_83D26C0, sizeof(sSpriteImage_83D26C0) },
+ { sSpriteImage_83D2740, sizeof(sSpriteImage_83D26C0) },
+ { sSpriteImage_83D27C0, sizeof(sSpriteImage_83D26C0) },
+};
+
+static const struct SpritePalette sUnknown_083D2878 = { sPalette_3D2840, 0x1000 };
+
+static const union AnimCmd sSpriteAnim_83D2880[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_FRAME(1, 30),
+ ANIMCMD_FRAME(2, 30),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const sSpriteAnimTable_83D2890[] =
+{
+ sSpriteAnim_83D2880,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_83D2894 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1000,
+ .oam = &gFieldOamData_32x8,
+ .anims = sSpriteAnimTable_83D2890,
+ .images = sSpriteImageTable_83FD950,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+u8 CreateRecordMixingSprite(void)
+{
+ u8 spriteId;
+
+ LoadSpritePalette(&sUnknown_083D2878);
+
+ spriteId = CreateSprite(&sSpriteTemplate_83D2894, 0, 0, 82);
+
+ if (spriteId == MAX_SPRITES)
+ {
+ return MAX_SPRITES;
+ }
+ else
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+ sub_8060388(16, 13, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->pos1.x += 16;
+ sprite->pos1.y += 2;
+ }
+
+ return spriteId;
+}
+
+void DestroyRecordMixingSprite(void)
+{
+ int i;
+
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].template == &sSpriteTemplate_83D2894)
+ {
+ FreeSpritePalette(&gSprites[i]);
+ DestroySprite(&gSprites[i]);
+ }
+ }
+}