summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-02-27 14:08:26 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2020-02-27 14:08:26 -0500
commit0d88e2d1de7135d7cc3d724398fa8d9022831511 (patch)
treeab11672b5b44d1bbca11bed286fa431c2c466974
parentc93915120f23a9545ff0743f506af3d58a1fabff (diff)
through MultiplyPaletteRGBComponents
-rw-r--r--asm/field_effect.s413
-rw-r--r--asm/field_weather.s6
-rw-r--r--data/field_effect.s79
-rw-r--r--include/data.h2
-rw-r--r--include/field_weather.h2
-rw-r--r--ld_script.txt1
-rw-r--r--src/data/pokemon_graphics/palette_table.h3
-rw-r--r--src/field_effect.c212
8 files changed, 220 insertions, 498 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s
index 957d70a93..a484b28ac 100644
--- a/asm/field_effect.s
+++ b/asm/field_effect.s
@@ -5,419 +5,6 @@
.text
- thumb_func_start CreateTrainerSprite
-CreateTrainerSprite: @ 8083858
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x18
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- mov r9, r3
- ldr r7, [sp, 0x34]
- lsls r4, 24
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsrs r4, 21
- ldr r3, _080838E0 @ =gTrainerFrontPicPaletteTable
- mov r8, r3
- add r8, r4
- mov r0, r8
- adds r1, r7, 0
- bl LoadCompressedSpritePaletteOverrideBuffer
- ldr r0, _080838E4 @ =gTrainerFrontPicTable
- adds r4, r0
- adds r0, r4, 0
- adds r1, r7, 0
- bl LoadCompressedSpriteSheetOverrideBuffer
- mov r1, sp
- ldrh r0, [r4, 0x6]
- movs r2, 0
- strh r0, [r1]
- mov r3, r8
- ldrh r0, [r3, 0x4]
- strh r0, [r1, 0x2]
- ldr r0, _080838E8 @ =gNewGameBirchOamAttributes
- str r0, [sp, 0x4]
- ldr r0, _080838EC @ =gDummySpriteAnimTable
- str r0, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r0, _080838F0 @ =gDummySpriteAffineAnimTable
- str r0, [sp, 0x10]
- ldr r0, _080838F4 @ =SpriteCallbackDummy
- str r0, [sp, 0x14]
- lsls r5, 16
- asrs r5, 16
- lsls r6, 16
- asrs r6, 16
- mov r0, sp
- adds r1, r5, 0
- adds r2, r6, 0
- mov r3, r9
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x18
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080838E0: .4byte gTrainerFrontPicPaletteTable
-_080838E4: .4byte gTrainerFrontPicTable
-_080838E8: .4byte gNewGameBirchOamAttributes
-_080838EC: .4byte gDummySpriteAnimTable
-_080838F0: .4byte gDummySpriteAffineAnimTable
-_080838F4: .4byte SpriteCallbackDummy
- thumb_func_end CreateTrainerSprite
-
- thumb_func_start LoadTrainerGfx_TrainerCard
-LoadTrainerGfx_TrainerCard: @ 80838F8
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r1, r2, 0
- lsls r4, 24
- lsls r5, 16
- lsrs r5, 16
- ldr r0, _08083928 @ =gTrainerFrontPicTable
- lsrs r4, 21
- adds r0, r4, r0
- ldr r0, [r0]
- bl LZDecompressVram
- ldr r0, _0808392C @ =gTrainerFrontPicPaletteTable
- adds r4, r0
- ldr r0, [r4]
- adds r1, r5, 0
- movs r2, 0x20
- bl LoadCompressedPalette
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08083928: .4byte gTrainerFrontPicTable
-_0808392C: .4byte gTrainerFrontPicPaletteTable
- thumb_func_end LoadTrainerGfx_TrainerCard
-
- thumb_func_start AddNewGameBirchObject
-AddNewGameBirchObject: @ 8083930
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _08083968 @ =gNewGameBirchObjectPaletteInfo
- bl LoadSpritePalette
- ldr r0, _0808396C @ =gNewGameBirchObjectTemplate
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08083968: .4byte gNewGameBirchObjectPaletteInfo
-_0808396C: .4byte gNewGameBirchObjectTemplate
- thumb_func_end AddNewGameBirchObject
-
- thumb_func_start CreateMonSprite_PicBox
-CreateMonSprite_PicBox: @ 8083970
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 16
- lsrs r0, 16
- movs r3, 0x80
- lsls r3, 8
- lsls r1, 16
- asrs r1, 16
- str r1, [sp]
- lsls r2, 16
- asrs r2, 16
- str r2, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- ldr r1, _080839C0 @ =gMonPaletteTable
- lsls r4, r0, 3
- adds r4, r1
- ldrh r1, [r4, 0x4]
- str r1, [sp, 0xC]
- movs r1, 0
- adds r2, r3, 0
- movs r3, 0x1
- bl CreateMonPicSprite_HandleDeoxys
- lsls r0, 16
- lsrs r5, r0, 16
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl sub_807B084
- ldr r0, _080839C4 @ =0x0000ffff
- cmp r5, r0
- beq _080839C8
- lsls r0, r5, 24
- lsrs r0, 24
- b _080839CA
- .align 2, 0
-_080839C0: .4byte gMonPaletteTable
-_080839C4: .4byte 0x0000ffff
-_080839C8:
- movs r0, 0x40
-_080839CA:
- add sp, 0x10
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end CreateMonSprite_PicBox
-
- thumb_func_start CreateMonSprite_FieldMove
-CreateMonSprite_FieldMove: @ 80839D4
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x10
- adds r6, r0, 0
- mov r9, r1
- mov r10, r2
- adds r4, r3, 0
- ldr r5, [sp, 0x2C]
- lsls r6, 16
- lsrs r6, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- mov r8, r0
- lsls r4, 16
- asrs r4, 16
- str r4, [sp]
- lsls r5, 16
- asrs r5, 16
- str r5, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- mov r1, r8
- ldrh r0, [r1, 0x4]
- str r0, [sp, 0xC]
- adds r0, r6, 0
- mov r1, r9
- mov r2, r10
- movs r3, 0x1
- bl CreateMonPicSprite_HandleDeoxys
- lsls r0, 16
- lsrs r4, r0, 16
- mov r1, r8
- ldrh r0, [r1, 0x4]
- bl IndexOfSpritePaletteTag
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl sub_807B084
- ldr r0, _08083A44 @ =0x0000ffff
- cmp r4, r0
- beq _08083A48
- lsls r0, r4, 24
- lsrs r0, 24
- b _08083A4A
- .align 2, 0
-_08083A44: .4byte 0x0000ffff
-_08083A48:
- movs r0, 0x40
-_08083A4A:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end CreateMonSprite_FieldMove
-
- thumb_func_start FreeResourcesAndDestroySprite
-FreeResourcesAndDestroySprite: @ 8083A5C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- bl ResetPreservedPalettesInWeather
- ldrb r0, [r4, 0x1]
- lsls r0, 30
- cmp r0, 0
- beq _08083A7A
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
-_08083A7A:
- adds r0, r5, 0
- bl FreeAndDestroyMonPicSprite
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end FreeResourcesAndDestroySprite
-
- thumb_func_start MultiplyInvertedPaletteRGBComponents
-MultiplyInvertedPaletteRGBComponents: @ 8083A88
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 16
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- ldr r4, _08083B0C @ =gPlttBufferUnfaded
- lsrs r0, 15
- adds r4, r0, r4
- ldrh r4, [r4]
- movs r5, 0x1F
- mov r9, r5
- mov r8, r4
- mov r6, r8
- ands r6, r5
- mov r8, r6
- movs r6, 0xF8
- lsls r6, 2
- ands r6, r4
- lsrs r6, 5
- movs r5, 0xF8
- lsls r5, 7
- ands r4, r5
- lsrs r4, 10
- mov r7, r9
- mov r5, r8
- subs r7, r5
- mov r12, r7
- mov r7, r12
- muls r7, r1
- adds r1, r7, 0
- asrs r1, 4
- add r8, r1
- mov r5, r9
- subs r1, r5, r6
- muls r1, r2
- asrs r1, 4
- adds r6, r1
- subs r5, r4
- mov r9, r5
- mov r1, r9
- muls r1, r3
- asrs r1, 4
- adds r4, r1
- mov r7, r8
- lsls r7, 16
- lsls r6, 21
- orrs r6, r7
- lsls r4, 26
- orrs r4, r6
- lsrs r4, 16
- ldr r1, _08083B10 @ =gPlttBufferFaded
- adds r0, r1
- strh r4, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08083B0C: .4byte gPlttBufferUnfaded
-_08083B10: .4byte gPlttBufferFaded
- thumb_func_end MultiplyInvertedPaletteRGBComponents
-
- thumb_func_start MultiplyPaletteRGBComponents
-MultiplyPaletteRGBComponents: @ 8083B14
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 16
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- ldr r4, _08083B84 @ =gPlttBufferUnfaded
- lsrs r0, 15
- adds r4, r0, r4
- ldrh r4, [r4]
- movs r5, 0x1F
- mov r8, r5
- mov r6, r8
- ands r6, r4
- mov r8, r6
- movs r5, 0xF8
- lsls r5, 2
- ands r5, r4
- lsrs r5, 5
- movs r6, 0xF8
- lsls r6, 7
- ands r4, r6
- lsrs r4, 10
- mov r6, r8
- muls r6, r1
- adds r1, r6, 0
- asrs r1, 4
- mov r6, r8
- subs r6, r1
- adds r1, r5, 0
- muls r1, r2
- asrs r1, 4
- subs r5, r1
- adds r1, r4, 0
- muls r1, r3
- asrs r1, 4
- subs r4, r1
- lsls r6, 16
- lsls r5, 21
- orrs r5, r6
- lsls r4, 26
- orrs r4, r5
- lsrs r4, 16
- ldr r1, _08083B88 @ =gPlttBufferFaded
- adds r0, r1
- strh r4, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08083B84: .4byte gPlttBufferUnfaded
-_08083B88: .4byte gPlttBufferFaded
- thumb_func_end MultiplyPaletteRGBComponents
-
thumb_func_start FldEff_PokecenterHeal
FldEff_PokecenterHeal: @ 8083B8C
push {r4,lr}
diff --git a/asm/field_weather.s b/asm/field_weather.s
index 4462fec77..2c7ef2128 100644
--- a/asm/field_weather.s
+++ b/asm/field_weather.s
@@ -2698,8 +2698,8 @@ _0807B07C: .4byte gUnknown_2037F34
_0807B080: .4byte 0x000006c6
thumb_func_end sub_807B070
- thumb_func_start sub_807B084
-sub_807B084: @ 807B084
+ thumb_func_start PreservePaletteInWeather
+PreservePaletteInWeather: @ 807B084
push {r4,r5,lr}
adds r4, r0, 0
lsls r4, 24
@@ -2721,7 +2721,7 @@ sub_807B084: @ 807B084
_0807B0A8: .4byte gUnknown_83C2CC0
_0807B0AC: .4byte gUnknown_2038684
_0807B0B0: .4byte gUnknown_20386A4
- thumb_func_end sub_807B084
+ thumb_func_end PreservePaletteInWeather
thumb_func_start ResetPreservedPalettesInWeather
ResetPreservedPalettesInWeather: @ 807B0B4
diff --git a/data/field_effect.s b/data/field_effect.s
index 607ae6142..d79644860 100644
--- a/data/field_effect.s
+++ b/data/field_effect.s
@@ -6,85 +6,6 @@
.section .rodata
.align 2
-gUnknown_83CA770:: @ 3CA770 4bpp
- .incbin "graphics/field_effects/unk_83CA770.4bpp"
-
-gUnknown_83CAF70:: @ 83CAF70 gbapal
- .incbin "graphics/field_effects/unk_83CAF70.gbapal"
-
-gUnknown_83CAF90:: @ 83CAF90 4bpp
- .incbin "graphics/field_effects/unk_83CAF90.4bpp"
-
-gUnknown_83CAFB0:: @ 83CAFB0 gbapal
- .incbin "graphics/field_effects/unk_83CAFB0.gbapal"
-
-gUnknown_83CAFD0:: @ 83CAFD0 4bpp
- .incbin "graphics/field_effects/unk_83CAFD0.4bpp"
-
-gUnknown_83CB3D0:: @ 83CB3D0 gbapal
- .incbin "graphics/field_effects/unk_83CB3D0.gbapal"
-
-gUnknown_83CB3F0:: @ 83CB3F0 4bpp
- .incbin "graphics/field_effects/unk_83CB3F0.4bpp"
-
-gUnknown_83CB5F0:: @ 83CB5F0 4bpp
- .incbin "graphics/field_effects/unk_83CB5F0.4bpp"
-
-gUnknown_83CB7F0:: @ 83CB7F0 gbapal gUnknown_83CB5F0
- .incbin "graphics/field_effects/unk_83CB7F0.gbapal"
-
-gUnknown_83CB810:: @ 83CB810 4bpp
- .incbin "graphics/field_effects/unk_83CB810.bin"
-
-gUnknown_83CBA90:: @ 83CBA90 4bpp
- .incbin "graphics/field_effects/unk_83CBA90.4bpp"
-
-gUnknown_83CBB10:: @ 83CBB10 gbapal gUnknown_83CBA90
- .incbin "graphics/field_effects/unk_83CBB10.gbapal"
-
-gUnknown_83CBB30:: @ 83CBB30 4bpp
- .incbin "graphics/field_effects/unk_83CBB30.bin"
-
-gUnknown_83CBDB0::
- .incbin "graphics/field_effects/unk_83CBDB0.4bpp"
-
- .align 2
-sFldEffScrcmdTable:: @ 83CBE30 dataptr
- .4byte FieldEffectCmd_loadtiles
- .4byte FieldEffectCmd_loadfadedpal
- .4byte FieldEffectCmd_loadpal
- .4byte FieldEffectCmd_callnative
- .4byte FieldEffectCmd_end
- .4byte FieldEffectCmd_loadgfx_callnative
- .4byte FieldEffectCmd_loadtiles_callnative
- .4byte FieldEffectCmd_loadfadedpal_callnative
-
-gNewGameBirchOamAttributes:: @ 83CBE50 oamdata
- .4byte 0xc0000000, 0x00000000
-
-gOamData_83CBE58:: @ 83CBE58 oamdata
- .4byte 0x00000000, 0x00000000
-
-gOamData_83CBE60:: @ 83CBE60 oamdata
- .4byte 0x40000000, 0x00000000
-
-gUnknown_83CBE68:: @ 83CBE68 sprite_frames
- obj_frame_tiles gUnknown_83CA770, 0x0800
-
-gNewGameBirchObjectPaletteInfo:: @ 83CBE70 sprite_palette
- obj_pal gUnknown_83CAF70, 4102
-
-gUnknown_83CBE78:: @ 83CBE78
- obj_image_anim_frame 0x0000, 1
- obj_image_anim_end
-
- .align 2
-gUnknown_83CBE80:: @ 83CBE80 dataptr
- .4byte gUnknown_83CBE78
-
-gNewGameBirchObjectTemplate:: @ 83CBE84 spr_template
- spr_template 65535, 4102, gNewGameBirchOamAttributes, gUnknown_83CBE80, gUnknown_83CBE68, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
gUnknown_83CBE9C:: @ 83CBE9C sprite_palette
obj_pal gUnknown_83CAFB0, 4103
diff --git a/include/data.h b/include/data.h
index f308b044c..90c8e0ace 100644
--- a/include/data.h
+++ b/include/data.h
@@ -28,7 +28,7 @@ extern const struct MonCoords gMonFrontPicCoords[];
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
extern const struct MonCoords gMonBackPicCoords[];
extern const struct CompressedSpriteSheet gMonBackPicTable[];
-extern const struct CompressedSpritePalette gMonPaletteTable[];
+extern struct CompressedSpritePalette gMonPaletteTable[];
extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
extern const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[];
extern const struct MonCoords gTrainerFrontPicCoords[];
diff --git a/include/field_weather.h b/include/field_weather.h
index 3cb17f9e2..7488c8c5a 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -19,5 +19,7 @@ void sub_807B070(void);
u8 GetCurrentWeather(void);
void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32);
void sub_807AA8C(u8 palIdx);
+void ResetPreservedPalettesInWeather(void);
+void PreservePaletteInWeather(u8 palIdx);
#endif // GUARD_WEATHER_H
diff --git a/ld_script.txt b/ld_script.txt
index 4e4953097..bf1c0a26a 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -445,6 +445,7 @@ SECTIONS {
data/cable_club.o(.rodata);
src/trainer_see.o(.rodata);
src/wild_encounter.o(.rodata);
+ src/field_effect.o(.rodata);
data/field_effect.o(.rodata);
src/option_menu.o(.rodata);
src/trainer_card.o(.rodata);
diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h
index 35edcc76c..bb4f64a07 100644
--- a/src/data/pokemon_graphics/palette_table.h
+++ b/src/data/pokemon_graphics/palette_table.h
@@ -1,4 +1,5 @@
-const struct CompressedSpritePalette gMonPaletteTable[] =
+// A dirty hack because field_effect.c requires this not be const
+__attribute__((section(".rodata"))) struct CompressedSpritePalette gMonPaletteTable[] =
{
SPECIES_PAL(NONE, gMonPalette_CircledQuestionMark),
SPECIES_PAL(BULBASAUR, gMonPalette_Bulbasaur),
diff --git a/src/field_effect.c b/src/field_effect.c
index c9c388966..35a56389a 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -1,16 +1,27 @@
#include "global.h"
#include "gflib.h"
+#include "data.h"
+#include "decompress.h"
#include "field_effect.h"
#include "field_effect_scripts.h"
#include "field_weather.h"
#include "overworld.h"
#include "quest_log.h"
+#include "trainer_pokemon_sprites.h"
#define FIELD_EFFECT_COUNT 32
static u8 sFieldEffectActiveList[FIELD_EFFECT_COUNT];
void FieldEffectActiveListAdd(u8 fldeff);
+bool8 FieldEffectCmd_loadtiles(const u8 **script, u32 *result);
+bool8 FieldEffectCmd_loadfadedpal(const u8 **script, u32 *result);
+bool8 FieldEffectCmd_loadpal(const u8 **script, u32 *result);
+bool8 FieldEffectCmd_callnative(const u8 **script, u32 *result);
+bool8 FieldEffectCmd_end(const u8 **script, u32 *result);
+bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result);
+bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result);
+bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result);
void FieldEffectScript_LoadTiles(const u8 **script);
void FieldEffectScript_LoadFadedPal(const u8 **script);
void FieldEffectScript_LoadPal(const u8 **script);
@@ -18,7 +29,106 @@ void FieldEffectScript_CallNative(const u8 **script, u32 *result);
void FieldEffectFreeTilesIfUnused(u16 tilesTag);
void FieldEffectFreePaletteIfUnused(u8 paletteNum);
-extern bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result);
+const u16 sNewGameOakObjectSpriteTiles[] = INCBIN_U16("graphics/field_effects/unk_83CA770.4bpp");
+const u16 sNewGameOakObjectPals[] = INCBIN_U16("graphics/field_effects/unk_83CAF70.gbapal");
+const u16 gUnknown_83CAF90[] = INCBIN_U16("graphics/field_effects/unk_83CAF90.4bpp");
+const u16 gUnknown_83CAFB0[] = INCBIN_U16("graphics/field_effects/unk_83CAFB0.gbapal");
+const u16 gUnknown_83CAFD0[] = INCBIN_U16("graphics/field_effects/unk_83CAFD0.4bpp");
+const u16 gUnknown_83CB3D0[] = INCBIN_U16("graphics/field_effects/unk_83CB3D0.gbapal");
+const u16 gUnknown_83CB3F0[] = INCBIN_U16("graphics/field_effects/unk_83CB3F0.4bpp");
+const u16 gUnknown_83CB5F0[] = INCBIN_U16("graphics/field_effects/unk_83CB5F0.4bpp");
+const u16 gUnknown_83CB7F0[] = INCBIN_U16("graphics/field_effects/unk_83CB7F0.gbapal");
+const u16 gUnknown_83CB810[] = INCBIN_U16("graphics/field_effects/unk_83CB810.bin");
+const u16 gUnknown_83CBA90[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp");
+const u16 gUnknown_83CBB10[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal");
+const u16 gUnknown_83CBB30[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin");
+const u16 gUnknown_83CBDB0[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp");
+
+bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = {
+ FieldEffectCmd_loadtiles,
+ FieldEffectCmd_loadfadedpal,
+ FieldEffectCmd_loadpal,
+ FieldEffectCmd_callnative,
+ FieldEffectCmd_end,
+ FieldEffectCmd_loadgfx_callnative,
+ FieldEffectCmd_loadtiles_callnative,
+ FieldEffectCmd_loadfadedpal_callnative
+};
+
+const struct OamData gNewGameOakOamAttributes = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0x0,
+ .affineParam = 0
+};
+
+const struct OamData gOamData_83CBE58 = {
+ .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 = 0x000,
+ .priority = 0,
+ .paletteNum = 0x0,
+ .affineParam = 0
+};
+
+const struct OamData gOamData_83CBE60 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0x0,
+ .affineParam = 0
+};
+
+const struct SpriteFrameImage gNewGameOakObjectSpriteFrames[] = {
+ {sNewGameOakObjectSpriteTiles, 0x800}
+};
+
+const struct SpritePalette gNewGameOakObjectPaletteInfo = {
+ sNewGameOakObjectPals, 4102
+};
+
+const union AnimCmd gNewGameOakAnim[] = {
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gNewGameOakAnimTable[] = {
+ gNewGameOakAnim
+};
+
+const struct SpriteTemplate gNewGameOakObjectTemplate = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 4102,
+ .oam = &gNewGameOakOamAttributes,
+ .anims = gNewGameOakAnimTable,
+ .images = gNewGameOakObjectSpriteFrames,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
u32 FieldEffectStart(u8 fldeff)
{
@@ -241,3 +351,103 @@ bool8 FieldEffectActiveListContains(u8 fldeff)
}
return FALSE;
}
+
+u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer)
+{
+ struct SpriteTemplate spriteTemplate;
+ LoadCompressedSpritePaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[trainerSpriteID], buffer);
+ LoadCompressedSpriteSheetOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer);
+ spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag;
+ spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag;
+ spriteTemplate.oam = &gNewGameOakOamAttributes;
+ spriteTemplate.anims = gDummySpriteAnimTable;
+ spriteTemplate.images = NULL;
+ spriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ spriteTemplate.callback = SpriteCallbackDummy;
+ return CreateSprite(&spriteTemplate, x, y, subpriority);
+}
+
+void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest)
+{
+ LZDecompressVram(gTrainerFrontPicTable[gender].data, dest);
+ LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20);
+}
+
+u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority)
+{
+ LoadSpritePalette(&gNewGameOakObjectPaletteInfo);
+ return CreateSprite(&gNewGameOakObjectTemplate, x, y, subpriority);
+}
+
+u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
+{
+ u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, 0, 0x8000, TRUE, x, y, 0, gMonPaletteTable[species].tag);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10);
+ if (spriteId == 0xFFFF)
+ return MAX_SPRITES;
+ else
+ return spriteId;
+}
+
+u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority)
+{
+ const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g);
+ u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, d, g, 1, x, y, 0, spritePalette->tag);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
+ if (spriteId == 0xFFFF)
+ return MAX_SPRITES;
+ else
+ return spriteId;
+}
+
+void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId)
+{
+ ResetPreservedPalettesInWeather();
+ if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF)
+ {
+ FreeOamMatrix(sprite->oam.matrixNum);
+ }
+ FreeAndDestroyMonPicSprite(spriteId);
+}
+
+// r, g, b are between 0 and 16
+void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ int curRed;
+ int curGreen;
+ int curBlue;
+ u16 outPal;
+
+ outPal = gPlttBufferUnfaded[i];
+ curRed = outPal & 0x1f;
+ curGreen = (outPal & (0x1f << 5)) >> 5;
+ curBlue = (outPal & (0x1f << 10)) >> 10;
+ curRed += (((0x1f - curRed) * r) >> 4);
+ curGreen += (((0x1f - curGreen) * g) >> 4);
+ curBlue += (((0x1f - curBlue) * b) >> 4);
+ outPal = curRed;
+ outPal |= curGreen << 5;
+ outPal |= curBlue << 10;
+ gPlttBufferFaded[i] = outPal;
+}
+
+// r, g, b are between 0 and 16
+void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ int curRed;
+ int curGreen;
+ int curBlue;
+ u16 outPal;
+
+ outPal = gPlttBufferUnfaded[i];
+ curRed = outPal & 0x1f;
+ curGreen = (outPal & (0x1f << 5)) >> 5;
+ curBlue = (outPal & (0x1f << 10)) >> 10;
+ curRed -= ((curRed * r) >> 4);
+ curGreen -= ((curGreen * g) >> 4);
+ curBlue -= ((curBlue * b) >> 4);
+ outPal = curRed;
+ outPal |= curGreen << 5;
+ outPal |= curBlue << 10;
+ gPlttBufferFaded[i] = outPal;
+}