From f11bddf8548c2f47e2881f6211a24bc427a708b6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 14 Apr 2025 02:12:45 -0400 Subject: [PATCH] Fixes for Mirage Tower graphics (#2120) * Add documentation for CreateCeilingCrumbleSprites * Combine mirage tower graphics * Add comment about mirage tower / player palette --- graphics/misc/mirage_tower.png | Bin 904 -> 935 bytes graphics_file_rules.mk | 3 +++ src/mirage_tower.c | 37 +++++++++++++++++++-------------- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/graphics/misc/mirage_tower.png b/graphics/misc/mirage_tower.png index c851953d2172e58c46a094437167f4e60ab5f26e..36890686f1fc679a536f214a90de530a57fbe92e 100644 GIT binary patch delta 866 zcmV-o1D*Vc2d4*+7Yb+u0{{R3Me%Mfks&{SGD$>1R7i=P)jxNeFc1K67CT=ri@XH$ zyx8q)v0ta!L$fyhBJPkqT|~M;2M#v7LnJn3snKWX-3jq0hM~Rpj0ryu-AOVDf-YvF ziQ8ZhA_N5(1*Bqd9demSj64D8$qewC1N=buv@q|3OgoU{Fw2LKc$mWk#F8qdg6IQ( zAY0%Jx|_2kw2>>w)t?{ z!NU%cao9qh_s3`fle3Lkp1qY+xSe5=VKa24Aqvw!x1$SC;~}6ovv-`oZUN z2jxXWQE06c=<))=*+Gm@Sz80pk>Hho;0tBcc*y`n2$j!pU_DrZ%t3r{V6B6)g|gNc zDDbLLQ0nRuWGe?a=mko=o4;y&)Q<+Vj;ztT`NFE?iXngQ!wYuqK_)b|)-*c)ff>JC zRZLHGt_1BTX` z>!pK<0+}GpXnEXTaJ#`82eG&Y00I!>uyy-v1oSm%edekn-k+(ZVxv9?cRx=(f@p!Z zQwK&P;A>`H({`d2j|{K6v4IwUxUJ__+r@@pu_oB8Exx%CV$5G`sGP-`N+JL_Q-jtF zAqs#82QY%07d(Y{?yCZ-f3c>uqa#kcFLx4XJ$L{<;(F)`e;+#pKY%+TSc00txD669 zSc`qkY;FAHy6HvW28F!>YH*G#$n|eHxF2pX-YTFS8@n+wI_Gj@EEn5<01x;{2e5Nv zyf*O4Ko8zD;nuvGfXd!>;2!0`;tGyt;0mrhy#L1W)or-qoQ(pOo5jls*rxvsN=$%u zzmE}6K=pf|^9J;ZruE&!!^7cl_{=W=4?Gu#J;npi48ke9_s~rVL3qBIg5ci4+P#w& z4n%PdZW=fqACJf5cLu>t+kMaQ;gQ1uz9i{?%bxy-l~P4fWDHB*)hHOs?UI7dTeu2@ s-&62u0>%>%#uI|&e*Ahcb$v4a0&$eUtkL6cy8r+H07*qoM6N<$fh($ delta 835 zcmV-J1HAmF2Z#rd7Ybkm0{{R3siN#dks&{S6G=otR7i=X)xCDwFcbh_7Rc*$5lg@) z3$&*-oJ@tGT}xkt4%yR1PB*)Quf0KrNZy>Kww|H)$MO%5Ha)%PV2nS@x{|KNXe2RK zO}rTmLe0PcMh3AOT!&Og8Y7JWdNKyQCV(I4o;FMSpyLkoWf-SJi2SoAZ~`|Cgqkvc zrG)4Mpc4<=g6`&48d^xx0Yopgi2l0;Cv?){CE)aBY&@VAvcV)qrUf&ck_Qi~bU5vB zY+w!15T1PtNYj2FZHo}1s0XH-#9vVgEkOFCfk~KZ?B#(5_=Lm60m@2!z`3e2EGY~F zCdc*o&JFY$^2$P%S!)c~yn<(a!w@2W6wcKEbVNuPK2eJrFO>iRLP0Hlw%|Ot9)y*E za{_tdA+K!(8D1?71GUUW+9Io2q5c&fwF;ng0dzk0)p!SIF12-=vih1 z52ZD+7D)B|+y+WOmG*G0qXwc_^#b2|0k{x<1A7tzE1bJIK3 zPzC~HS{|tdsRmjy+Gav^4l3c7K%Ii(7hxrJ)&~IT{2Y8%0pArnN;crm8&GmTPd$Qa zfy$`^DlmdcP31%@9+bT5SYQQzzc|ji>5^c&AXqN&0zruFr%Os_x}cPnbd&+QatML* z11uE}Uhx#-c{@PLf4ZQRqhsu#zaD)UtOs|%N539x1mA%i5olvt*9@hUN5D`Jj9p#& z$(8913MVV*PQlR%PH+V||0Rcv2XJEwR|cqJL+K--bI6Vfg0(md@PMCx7}M=wEqy!> zfF8VTLh9;OAdmWo7Vo}te0c@TFTo)ht>Q~CJN^NTItP^g7#6Z8O$8pYO0F8% z@9*~e{WpPI`Y+lryuafv5ZK7y+J=6F#+WS25;||LqhJ`Rl8nyj+HYUuz^wFnr<4Ey N002ovPDHLkV1hC+c>@3d diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index a87344e93c..05dfe5a2d5 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -315,6 +315,9 @@ graphics/pokenav/region_map/map.8bpp: %.8bpp: %.png $(MISCGFXDIR)/japanese_hof.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 29 -Wnum_tiles +$(MISCGFXDIR)/mirage_tower.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 73 -Wnum_tiles + $(BATINTGFXDIR)/textbox.gbapal: $(BATINTGFXDIR)/textbox_0.gbapal \ $(BATINTGFXDIR)/textbox_1.gbapal @cat $^ >$@ diff --git a/src/mirage_tower.c b/src/mirage_tower.c index b1e2e5003b..10871b5853 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -56,12 +56,9 @@ struct FallAnim_Fossil #define TAG_CEILING_CRUMBLE 4000 -#define MIRAGE_TOWER_GFX_LENGTH (sizeof(sBlankTile_Gfx) + sizeof(sMirageTower_Gfx)) +#define MIRAGE_TOWER_GFX_LENGTH (sizeof(sMirageTower_Gfx)) #define FOSSIL_DISINTEGRATE_LENGTH 0x100 -static const struct SpriteSheet sCeilingCrumbleSpriteSheets[]; -static const s16 sCeilingCrumblePositions[][3]; - static void PlayerDescendMirageTower(u8); static void DoScreenShake(u8); static void IncrementCeilingCrumbleFinishedCount(void); @@ -75,8 +72,7 @@ static void Task_FossilFallAndSink(u8); static void SpriteCB_FallingFossil(struct Sprite *); static void UpdateDisintegrationEffect(u8 *, u16, u8, u8, u8); -static const u8 ALIGNED(2) sBlankTile_Gfx[32] = {0}; -static const u8 sMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp"); +static const ALIGNED(2) u8 sMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp"); static const u16 sMirageTowerTilemap[] = INCBIN_U16("graphics/misc/mirage_tower.bin"); static const u16 sFossil_Pal[] = INCBIN_U16("graphics/object_events/pics/misc/fossil.gbapal"); // Unused static const u8 sFossil_Gfx[] = INCBIN_U8("graphics/object_events/pics/misc/fossil.4bpp"); // Duplicate of gObjectEventPic_Fossil @@ -445,38 +441,47 @@ static void FinishCeilingCrumbleTask(u8 taskId) ScriptContext_Enable(); } +#define sIndex data[0] +#define sYOffset data[1] + static void CreateCeilingCrumbleSprites(void) { u8 i; u8 spriteId; - for (i = 0; i < 8; i++) + for (i = 0; i < ARRAY_COUNT(sCeilingCrumblePositions); i++) { spriteId = CreateSprite(&sSpriteTemplate_CeilingCrumbleLarge, sCeilingCrumblePositions[i][0] + 120, sCeilingCrumblePositions[i][1], 8); gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].oam.paletteNum = 0; - gSprites[spriteId].data[0] = i; + // These sprites use color index 11 from the player's sprite palette. This probably wasn't intentional. + // The palettes for Brendan and May have different shades of green at this index, so the color of these sprites changes + // depending on the player's gender (and neither shade of green particularly fits a crumbling yellow/brown ceiling). + gSprites[spriteId].oam.paletteNum = PALSLOT_PLAYER; + gSprites[spriteId].sIndex = i; } - for (i = 0; i < 8; i++) + for (i = 0; i < ARRAY_COUNT(sCeilingCrumblePositions); i++) { spriteId = CreateSprite(&sSpriteTemplate_CeilingCrumbleSmall, sCeilingCrumblePositions[i][0] + 115, sCeilingCrumblePositions[i][1] - 3, 8); gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].oam.paletteNum = 0; - gSprites[spriteId].data[0] = i; + gSprites[spriteId].oam.paletteNum = PALSLOT_PLAYER; + gSprites[spriteId].sIndex = i; } } static void SpriteCB_CeilingCrumble(struct Sprite *sprite) { - sprite->data[1] += 2; - sprite->y2 = sprite->data[1] / 2; - if(((sprite->y) + (sprite->y2)) > sCeilingCrumblePositions[sprite->data[0]][2]) + sprite->sYOffset += 2; + sprite->y2 = sprite->sYOffset / 2; + if ((sprite->y + sprite->y2) > sCeilingCrumblePositions[sprite->sIndex][2]) { DestroySprite(sprite); IncrementCeilingCrumbleFinishedCount(); } } +#undef sIndex +#undef sYOffset + static void SetInvisibleMirageTowerMetatiles(void) { u8 i; @@ -543,7 +548,7 @@ static void InitMirageTowerShake(u8 taskId) gTasks[taskId].tState++; break; case 2: - CpuSet(sBlankTile_Gfx, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH / 2); + CpuSet(sMirageTower_Gfx, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH / 2); LoadBgTiles(0, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH, 0); gTasks[taskId].tState++; break;