diff options
author | scnorton <scnorton@biociphers.org> | 2017-06-06 17:58:40 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-06-06 17:58:40 -0400 |
commit | 416ef99e4217e1f309b7560974fb5dabfa1329a8 (patch) | |
tree | 45bc305f62badd589603bda51395cab374732ca0 | |
parent | dc79b94bb32c758253aba698115b60cb5a683266 (diff) |
Pick up decompiling field_effect.s
-rw-r--r-- | asm/field_effect.s | 335 | ||||
-rw-r--r-- | include/field_effect.h | 10 | ||||
-rw-r--r-- | include/field_weather.h | 2 | ||||
-rw-r--r-- | include/gba/types.h | 2 | ||||
-rw-r--r-- | src/field_effect.c | 98 | ||||
-rw-r--r-- | src/palette.c | 8 |
6 files changed, 114 insertions, 341 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index 2dfa491dc..246e66d04 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -6,341 +6,6 @@ .text - thumb_func_start CreateTrainerSprite_BirchSpeech -CreateTrainerSprite_BirchSpeech: @ 80859BC - 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, _08085A44 @ =gTrainerFrontPicPaletteTable - mov r8, r3 - add r8, r4 - mov r0, r8 - adds r1, r7, 0 - bl LoadCompressedObjectPaletteOverrideBuffer - ldr r0, _08085A48 @ =gTrainerFrontPicTable - adds r4, r0 - adds r0, r4, 0 - adds r1, r7, 0 - bl LoadCompressedObjectPicOverrideBuffer - 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, _08085A4C @ =gOamData_839F0F4 - str r0, [sp, 0x4] - ldr r0, _08085A50 @ =gDummySpriteAnimTable - str r0, [sp, 0x8] - str r2, [sp, 0xC] - ldr r0, _08085A54 @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x10] - ldr r0, _08085A58 @ =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 -_08085A44: .4byte gTrainerFrontPicPaletteTable -_08085A48: .4byte gTrainerFrontPicTable -_08085A4C: .4byte gOamData_839F0F4 -_08085A50: .4byte gDummySpriteAnimTable -_08085A54: .4byte gDummySpriteAffineAnimTable -_08085A58: .4byte SpriteCallbackDummy - thumb_func_end CreateTrainerSprite_BirchSpeech - - thumb_func_start LoadTrainerGfx_TrainerCard -LoadTrainerGfx_TrainerCard: @ 8085A5C - 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, _08085A8C @ =gTrainerFrontPicTable - lsrs r4, 21 - adds r0, r4, r0 - ldr r0, [r0] - bl LZDecompressVram - ldr r0, _08085A90 @ =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 -_08085A8C: .4byte gTrainerFrontPicTable -_08085A90: .4byte gTrainerFrontPicPaletteTable - thumb_func_end LoadTrainerGfx_TrainerCard - - thumb_func_start CreateBirchSprite -CreateBirchSprite: @ 8085A94 - 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, _08085ACC @ =gUnknown_0839F114 - bl LoadSpritePalette - ldr r0, _08085AD0 @ =gSpriteTemplate_839F128 - 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 -_08085ACC: .4byte gUnknown_0839F114 -_08085AD0: .4byte gSpriteTemplate_839F128 - thumb_func_end CreateBirchSprite - - thumb_func_start CreateMonSprite_PicBox -CreateMonSprite_PicBox: @ 8085AD4 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x8 - adds r4, r0, 0 - adds r6, r1, 0 - mov r8, r2 - mov r10, r3 - lsls r4, 16 - lsrs r4, 16 - lsls r6, 16 - lsrs r6, 16 - mov r0, r8 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - mov r0, r10 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r0, r4, 3 - mov r9, r0 - ldr r0, _08085B74 @ =gMonFrontPicTable - add r0, r9 - ldr r1, _08085B78 @ =gMonFrontPicCoords - lsls r2, r4, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - ldr r3, _08085B7C @ =gUnknown_081FAF4C - ldr r3, [r3, 0xC] - str r3, [sp] - str r4, [sp, 0x4] - bl DecompressPicFromTable_2 - ldr r5, _08085B80 @ =gMonPaletteTable - add r9, r5 - mov r0, r9 - bl LoadCompressedObjectPalette - adds r0, r4, 0 - movs r1, 0x3 - bl GetMonSpriteTemplate_803C56C - ldr r4, _08085B84 @ =gUnknown_02024E8C - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x2] - ldrh r0, [r5, 0x4] - bl IndexOfSpritePaletteTag - adds r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - bl sub_807DE38 - lsls r6, 16 - asrs r6, 16 - mov r0, r8 - lsls r0, 16 - asrs r0, 16 - mov r8, r0 - adds r0, r4, 0 - adds r1, r6, 0 - mov r2, r8 - mov r3, r10 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08085B74: .4byte gMonFrontPicTable -_08085B78: .4byte gMonFrontPicCoords -_08085B7C: .4byte gUnknown_081FAF4C -_08085B80: .4byte gMonPaletteTable -_08085B84: .4byte gUnknown_02024E8C - thumb_func_end CreateMonSprite_PicBox - - thumb_func_start CreateMonSprite_FieldMove -CreateMonSprite_FieldMove: @ 8085B88 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0xC - adds r5, r0, 0 - mov r10, r1 - adds r4, r2, 0 - adds r6, r3, 0 - ldr r0, [sp, 0x28] - mov r8, r0 - ldr r0, [sp, 0x2C] - mov r9, r0 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - mov r0, r8 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - mov r0, r9 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r0, r5, 3 - ldr r1, _08085C34 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _08085C38 @ =gMonFrontPicCoords - lsls r2, r5, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - ldr r3, _08085C3C @ =gUnknown_081FAF4C - ldr r3, [r3, 0xC] - str r3, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - bl HandleLoadSpecialPokePic - adds r0, r5, 0 - mov r1, r10 - adds r2, r4, 0 - bl sub_80409C8 - adds r4, r0, 0 - bl LoadCompressedObjectPalette - adds r0, r5, 0 - movs r1, 0x3 - bl GetMonSpriteTemplate_803C56C - ldr r5, _08085C40 @ =gUnknown_02024E8C - ldrh r0, [r4, 0x4] - strh r0, [r5, 0x2] - ldrh r0, [r4, 0x4] - bl IndexOfSpritePaletteTag - adds r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - bl sub_807DE38 - lsls r6, 16 - asrs r6, 16 - mov r0, r8 - lsls r0, 16 - asrs r0, 16 - mov r8, r0 - adds r0, r5, 0 - adds r1, r6, 0 - mov r2, r8 - mov r3, r9 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08085C34: .4byte gMonFrontPicTable -_08085C38: .4byte gMonFrontPicCoords -_08085C3C: .4byte gUnknown_081FAF4C -_08085C40: .4byte gUnknown_02024E8C - thumb_func_end CreateMonSprite_FieldMove - - thumb_func_start FreeResourcesAndDestroySprite -FreeResourcesAndDestroySprite: @ 8085C44 - push {r4,lr} - adds r4, r0, 0 - bl sub_807DE68 - ldrb r0, [r4, 0x5] - lsrs r0, 4 - bl GetSpritePaletteTagByPaletteNum - lsls r0, 16 - lsrs r0, 16 - bl FreeSpritePaletteByTag - ldrb r0, [r4, 0x1] - lsls r0, 30 - cmp r0, 0 - beq _08085C6E - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix -_08085C6E: - adds r0, r4, 0 - bl DestroySprite - pop {r4} - pop {r0} - bx r0 - thumb_func_end FreeResourcesAndDestroySprite - thumb_func_start MultiplyInvertedPaletteRGBComponents MultiplyInvertedPaletteRGBComponents: @ 8085C7C push {r4-r7,lr} diff --git a/include/field_effect.h b/include/field_effect.h index a46c048cb..d4ec0c8b4 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -3,6 +3,15 @@ #include "sprite.h" +extern const struct SpritePalette gTrainerFrontPicPaletteTable[2]; +extern const struct SpritePalette gUnknown_0839F114; +extern const struct SpriteSheet gTrainerFrontPicTable[2]; +extern const struct SpriteTemplate gSpriteTemplate_839F128; +extern const struct OamData gOamData_839F0F4; +extern struct SpriteTemplate gUnknown_02024E8C; + +extern const struct SpritePalette *sub_80409C8(u16, u32, u32); + u32 FieldEffectStart(u8 id); bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val); bool8 FieldEffectCmd_loadfadedpal(u8 **script, u32 *val); @@ -25,5 +34,6 @@ void FieldEffectActiveListClear(void); void FieldEffectActiveListAdd(u8 id); void FieldEffectActiveListRemove(u8 id); bool8 FieldEffectActiveListContains(u8 id); +void sub_807DE38(u8 index); #endif // GUARD_FIELD_EFFECT_H diff --git a/include/field_weather.h b/include/field_weather.h index af07c970d..df216aea7 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -31,6 +31,8 @@ void sub_807D874(u8); // ... void sub_807DB64(u8, u8); // ... +void sub_807DE68(void); +// ... void PlayRainSoundEffect(void); // ... void SetSav1Weather(u32); diff --git a/include/gba/types.h b/include/gba/types.h index fd8a20a4c..96e057ab7 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -34,7 +34,7 @@ struct PlttData u16 g:5; // green u16 b:5; // blue u16 unused_15:1; -}; +} /*__attribute__((packed))*/; struct OamData { diff --git a/src/field_effect.c b/src/field_effect.c index bbc1144c1..e13809d27 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1,8 +1,11 @@ #include "global.h" -#include "field_effect.h" +#include "data2.h" #include "field_weather.h" +#include "decompress.h" #include "sprite.h" +#include "palette.h" #include "text.h" +#include "field_effect.h" typedef bool8 (*FldEffCmd)(u8 **, u32 *); @@ -207,3 +210,96 @@ bool8 FieldEffectActiveListContains(u8 id) return TRUE; return FALSE; } + +u8 CreateTrainerSprite_BirchSpeech(u8 gender, s16 x, s16 y, u8 subpriority, u8 *buffer) +{ + struct SpriteTemplate spriteTemplate; + LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[gender], buffer); + LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[gender], buffer); + spriteTemplate.tileTag = gTrainerFrontPicTable[gender].tag; + spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[gender].tag; + spriteTemplate.oam = &gOamData_839F0F4; + 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 CreateBirchSprite(s16 x, s16 y, u8 subpriority) +{ + LoadSpritePalette(&gUnknown_0839F114); + return CreateSprite(&gSpriteTemplate_839F128, x, y, subpriority); +} + +u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) +{ + DecompressPicFromTable_2(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gUnknown_081FAF4C[3], gUnknown_081FAF4C[3], species); + LoadCompressedObjectPalette(&gMonPaletteTable[species]); + GetMonSpriteTemplate_803C56C(species, 3); + gUnknown_02024E8C.paletteTag = gMonPaletteTable[0].tag; + sub_807DE38(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10); + return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); +} + +u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) +{ + const struct SpritePalette *spritePalette; + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g); + spritePalette = sub_80409C8(species, d, g); + LoadCompressedObjectPalette(spritePalette); + GetMonSpriteTemplate_803C56C(species, 3); + gUnknown_02024E8C.paletteTag = spritePalette->tag; + sub_807DE38(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); + return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); +} + +void FreeResourcesAndDestroySprite(struct Sprite *sprite) +{ + sub_807DE68(); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + if (sprite->oam.affineMode != 0) + { + FreeOamMatrix(sprite->oam.matrixNum); + } + DestroySprite(sprite); +} + +#undef NONMATCHING +#ifdef NONMATCHING +void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) +{ + int curRed; + int curGreen; + int curBlue; + + curRed = gPlttBufferUnfaded[i] & 0x1f; + curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5; + curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10; + curRed += (((0x1f - curRed) * r) >> 4); + curGreen += (((0x1f - curGreen) * g) >> 4); + curBlue += (((0x1f - curBlue) * b) >> 4); + gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue); +} + +void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) +{ + int curRed; + int curGreen; + int curBlue; + + curRed = gPlttBufferUnfaded[i] & 0x1f; + curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5; + curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10; + curRed -= ((curRed * r) >> 4); + curGreen -= ((curGreen * g) >> 4); + curBlue -= ((curBlue * b) >> 4); + gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue); +} +#endif diff --git a/src/palette.c b/src/palette.c index 165eb2eae..a610049bc 100644 --- a/src/palette.c +++ b/src/palette.c @@ -615,7 +615,7 @@ static u8 UpdateFastPaletteFade(void) if (b < b0) b = b0; - gPlttBufferFaded[i] = r | (g << 5) | (b << 10); + gPlttBufferFaded[i] = RGB(r, g, b); } break; case FAST_FADE_OUT_TO_WHTIE: @@ -633,7 +633,7 @@ static u8 UpdateFastPaletteFade(void) if (b > 31) b = 31; - gPlttBufferFaded[i] = r | (g << 5) | (b << 10); + gPlttBufferFaded[i] = RGB(r, g, b); } break; case FAST_FADE_IN_FROM_BLACK: @@ -659,7 +659,7 @@ static u8 UpdateFastPaletteFade(void) if (b > b0) b = b0; - gPlttBufferFaded[i] = r | (g << 5) | (b << 10); + gPlttBufferFaded[i] = RGB(r, g, b); } break; case FAST_FADE_OUT_TO_BLACK: @@ -677,7 +677,7 @@ static u8 UpdateFastPaletteFade(void) if (b < 0) b = 0; - gPlttBufferFaded[i] = r | (g << 5) | (b << 10); + gPlttBufferFaded[i] = RGB(r, g, b); } } |