through MultiplyPaletteRGBComponents

This commit is contained in:
PikalaxALT
2020-02-27 14:08:26 -05:00
parent c93915120f
commit 0d88e2d1de
8 changed files with 220 additions and 498 deletions
-413
View File
@@ -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}
+3 -3
View File
@@ -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
-79
View File
@@ -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
+1 -1
View File
@@ -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[];
+2
View File
@@ -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
+1
View File
@@ -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);
+2 -1
View File
@@ -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),
+211 -1
View File
@@ -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;
}