mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-09-10 12:26:02 -05:00
Merge pull request #247 from Retnuhytnuob/fakematchCleanup-RenderHighScoreSprites
Some checks failed
CI / build (push) Has been cancelled
Some checks failed
CI / build (push) Has been cancelled
Cleanup RenderHighScoreSprites fakematch
This commit is contained in:
@@ -183,7 +183,6 @@ void Ereader_AnimateLinkCable(void)
|
||||
void Ereader_Communicating(void)
|
||||
{
|
||||
s32 index;
|
||||
u16 temp;
|
||||
|
||||
UpdateEReaderSpritesViaOam();
|
||||
if (JOY_NEW(B_BUTTON)) {
|
||||
@@ -225,8 +224,7 @@ void Ereader_Communicating(void)
|
||||
}
|
||||
if (gEReaderStatusAnimSpriteGroup == SG_EREADER_TRANSMITTING) {
|
||||
gEReaderGeneralTimer++;
|
||||
temp = gEReaderGeneralTimer; // TODO: FAKEMATCH
|
||||
if ((gEReaderGeneralTimer & 7) == 0) {
|
||||
if (gEReaderGeneralTimer % 8 == 0) {
|
||||
gEReaderHeaderAnimSpriteGroup = SG_21 - gEReaderHeaderAnimSpriteGroup;
|
||||
}
|
||||
if (((gLinkStatusResult & 0x7f0000) != 0) &&
|
||||
|
||||
@@ -21,7 +21,7 @@ extern s16 gCompletionBannerY;
|
||||
extern s8 gCompletionBannerPhase;
|
||||
extern s8 gCompletionBannerSpriteGroup;
|
||||
extern s8 gHighScoreShowPopupFlag;
|
||||
extern u8 gHighScorePopupType;
|
||||
extern s8 gHighScorePopupType;
|
||||
extern u16 gLinkExchangeCommand;
|
||||
extern u16 gLinkPacketCounter;
|
||||
extern s8 gLinkExchangeSendPhase;
|
||||
@@ -235,7 +235,6 @@ void InitHighScoreData(void)
|
||||
|
||||
void HighScore_ShowCompletionBanner(void)
|
||||
{
|
||||
u16 temp;
|
||||
switch(gCompletionBannerPhase)
|
||||
{
|
||||
case 0:
|
||||
@@ -248,9 +247,7 @@ void HighScore_ShowCompletionBanner(void)
|
||||
case 1:
|
||||
gCompletionBannerY--;
|
||||
|
||||
// TODO: FAKEMATCH - Seth
|
||||
temp = gHighScoreScreenState.flashDuration;
|
||||
if((gHighScoreScreenState.flashDuration & 3) == 0)
|
||||
if(gHighScoreScreenState.flashDuration % 4 == 0)
|
||||
{
|
||||
gCompletionBannerSpriteGroup++;
|
||||
if(gCompletionBannerSpriteGroup > SG_HIGH_SCORE_COMPLETION_BANNER_LOOP_END)
|
||||
@@ -973,154 +970,132 @@ void UpdateNameEntryCursor(void)
|
||||
spriteGroup->active = FALSE;
|
||||
}
|
||||
|
||||
// The target keeps two redundant pointer copies alive in the entry block --
|
||||
// spriteGroup1_ in r4 and spriteGroup2_ in r5 -- which agbcc otherwise deletes
|
||||
// in cse1, again in loop and again in combine. Two constructs keep them:
|
||||
// the r4 pin on spriteGroup1_, and the empty asm("") barriers below (they emit
|
||||
// no instructions and the "r" constraint accepts any register; they only stop
|
||||
// the alias pointers being coalesced with the pointers they duplicate, and stop
|
||||
// the OAM pointers being re-folded into base+displacement addressing).
|
||||
// spriteGroup2_ cannot also be pinned -- the target reuses r5 as a scratch
|
||||
// register once the alias dies, and a pin would reserve it for the whole
|
||||
// function. Three barriers is the floor; their exact placement is required for
|
||||
// a byte-identical match, so do not move or remove them.
|
||||
void RenderHighScoreSprites(void)
|
||||
{
|
||||
int i;
|
||||
struct SpriteGroup *spriteGroup1;
|
||||
register struct SpriteGroup *spriteGroup1_ asm("r4");
|
||||
struct SpriteGroup *spriteGroup2;
|
||||
struct SpriteGroup *spriteGroup2_;
|
||||
struct SpriteGroup *spriteGroup3;
|
||||
struct SpriteGroup *spriteGroup4;
|
||||
s32 i;
|
||||
struct SpriteGroup *(highScorePageArrowSG[2]);
|
||||
struct SpriteGroup *popupSG;
|
||||
struct SpriteGroup *pressStartSG;
|
||||
struct OamDataSimple *oamData;
|
||||
const struct SpriteSet *spriteSet;
|
||||
const struct SpriteSet * const *spriteSets = gHighScoreScreenSpriteSets;
|
||||
spriteGroup1 = &gMain.spriteGroups[SG_HIGH_SCORE_PAGE_RIGHT_ARROW];
|
||||
spriteGroup1_ = spriteGroup1;
|
||||
spriteGroup2 = &gMain.spriteGroups[SG_HIGH_SCORE_PAGE_LEFT_ARROW];
|
||||
spriteGroup2_ = spriteGroup2;
|
||||
asm("" : "=r"(spriteGroup2_) : "0"(spriteGroup2_));
|
||||
spriteGroup3 = &gMain.spriteGroups[(s8)gHighScorePopupType + SG_HIGH_SCORE_POPUP_LIST_BASE];
|
||||
spriteGroup4 = &gMain.spriteGroups[gHighScoreScreenState.pressStartBlinkToggle + SG_HIGH_SCORE_PRESS_START_0];
|
||||
|
||||
highScorePageArrowSG[0] = &gMain.spriteGroups[SG_HIGH_SCORE_PAGE_RIGHT_ARROW];
|
||||
highScorePageArrowSG[1] = &gMain.spriteGroups[SG_HIGH_SCORE_PAGE_LEFT_ARROW];
|
||||
|
||||
popupSG = &gMain.spriteGroups[gHighScorePopupType + SG_HIGH_SCORE_POPUP_LIST_BASE];
|
||||
pressStartSG = &gMain.spriteGroups[gHighScoreScreenState.pressStartBlinkToggle + SG_HIGH_SCORE_PRESS_START_0];
|
||||
|
||||
if (gScrollXOffset == 0)
|
||||
{
|
||||
spriteGroup1->active = TRUE;
|
||||
spriteGroup2_->active = FALSE;
|
||||
spriteGroup3->active = gHighScoreShowPopupFlag;
|
||||
spriteGroup4->active = gHighScoreScreenState.displayModeVisible;
|
||||
asm("" : : "r"(spriteGroup1_), "r"(spriteGroup2_));
|
||||
highScorePageArrowSG[0]->active = TRUE;
|
||||
highScorePageArrowSG[1]->active = FALSE;
|
||||
popupSG->active = gHighScoreShowPopupFlag;
|
||||
pressStartSG->active = gHighScoreScreenState.displayModeVisible;
|
||||
|
||||
LoadSpriteSets(spriteSets, 9, spriteGroup1);
|
||||
LoadSpriteSets(gHighScoreScreenSpriteSets, 9, gMain.spriteGroups);
|
||||
|
||||
highScorePageArrowSG[0]->baseX = 220;
|
||||
highScorePageArrowSG[0]->baseY = 144;
|
||||
oamData = &highScorePageArrowSG[0]->oam[0];
|
||||
gOamBuffer[oamData->oamId].tileNum = gHighScoreScreenState.flashElapsedFrames * 2 + 2;
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + highScorePageArrowSG[0]->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + highScorePageArrowSG[0]->baseY;
|
||||
|
||||
if (pressStartSG->active == TRUE)
|
||||
{
|
||||
spriteGroup1->baseX = 220;
|
||||
spriteGroup1->baseY = 144;
|
||||
oamData = &spriteGroup1_->oam[0];
|
||||
gOamBuffer[oamData->oamId].tileNum = gHighScoreScreenState.flashElapsedFrames * 2 + 2;
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + spriteGroup1->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + spriteGroup1->baseY;
|
||||
|
||||
}
|
||||
|
||||
if (spriteGroup4->active == TRUE)
|
||||
{
|
||||
spriteGroup4->baseX = 84;
|
||||
spriteGroup4->baseY = 150;
|
||||
pressStartSG->baseX = 84;
|
||||
pressStartSG->baseY = 150;
|
||||
spriteSet = gHighScoreScreenSpriteSets[gHighScoreScreenState.pressStartBlinkToggle + SG_HIGH_SCORE_PRESS_START_0];
|
||||
for (i = 0; i < spriteSet->count; i++)
|
||||
{
|
||||
oamData = &spriteGroup4->oam[i];
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + spriteGroup4->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + spriteGroup4->baseY;
|
||||
oamData = &pressStartSG->oam[i];
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + pressStartSG->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + pressStartSG->baseY;
|
||||
}
|
||||
}
|
||||
if (spriteGroup3->active == TRUE)
|
||||
if (popupSG->active == TRUE)
|
||||
{
|
||||
switch ((s8)gHighScorePopupType)
|
||||
switch(gHighScorePopupType)
|
||||
{
|
||||
case HIGH_SCORE_POPUP_TRANSMISSION_CONNECT_PROMPT:
|
||||
case HIGH_SCORE_POPUP_DELETE_CONFIRMATION_PROMPT:
|
||||
spriteGroup3->baseX = 120;
|
||||
spriteGroup3->baseY = 100;
|
||||
popupSG->baseX = 120;
|
||||
popupSG->baseY = 100;
|
||||
break;
|
||||
default:
|
||||
spriteGroup3->baseX = 120;
|
||||
spriteGroup3->baseY = 80;
|
||||
break;
|
||||
popupSG->baseX = 120;
|
||||
popupSG->baseY = 80;
|
||||
}
|
||||
spriteSet = gHighScoreScreenSpriteSets[(s8)gHighScorePopupType + SG_HIGH_SCORE_POPUP_LIST_BASE];
|
||||
|
||||
spriteSet = gHighScoreScreenSpriteSets[SG_HIGH_SCORE_POPUP_LIST_BASE + gHighScorePopupType];
|
||||
for (i = 0; i < spriteSet->count; i++)
|
||||
{
|
||||
oamData = &spriteGroup3->oam[i];
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + spriteGroup3->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + spriteGroup3->baseY;
|
||||
oamData = &popupSG->oam[i];
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + popupSG->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + popupSG->baseY;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gScrollXOffset == 240)
|
||||
{
|
||||
spriteGroup1->active = FALSE;
|
||||
spriteGroup2->active = TRUE;
|
||||
spriteGroup3->active = gHighScoreShowPopupFlag;
|
||||
spriteGroup4->active = gHighScoreScreenState.displayModeVisible;
|
||||
LoadSpriteSets(spriteSets, 9, spriteGroup1);
|
||||
highScorePageArrowSG[0]->active = FALSE;
|
||||
highScorePageArrowSG[1]->active = TRUE;
|
||||
popupSG->active = gHighScoreShowPopupFlag;
|
||||
pressStartSG->active = gHighScoreScreenState.displayModeVisible;
|
||||
LoadSpriteSets(gHighScoreScreenSpriteSets, 9, gMain.spriteGroups);
|
||||
|
||||
highScorePageArrowSG[1]->baseX = 4;
|
||||
highScorePageArrowSG[1]->baseY = 144;
|
||||
oamData = &highScorePageArrowSG[1]->oam[0];
|
||||
|
||||
gOamBuffer[oamData->oamId].tileNum = gHighScoreScreenState.flashElapsedFrames * 2 + 2;
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + highScorePageArrowSG[1]->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + highScorePageArrowSG[1]->baseY;
|
||||
|
||||
if (pressStartSG->active == TRUE)
|
||||
{
|
||||
spriteGroup2->baseX = 4;
|
||||
spriteGroup2->baseY = 144;
|
||||
oamData = &spriteGroup2_->oam[0];
|
||||
asm("" : "=r"(spriteGroup2_) : "0"(spriteGroup2_));
|
||||
|
||||
gOamBuffer[oamData->oamId].tileNum = gHighScoreScreenState.flashElapsedFrames * 2 + 2;
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + spriteGroup2->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + spriteGroup2->baseY;
|
||||
|
||||
}
|
||||
|
||||
if (spriteGroup4->active == TRUE)
|
||||
{
|
||||
spriteGroup4->baseX = 84;
|
||||
spriteGroup4->baseY = 150;
|
||||
pressStartSG->baseX = 84;
|
||||
pressStartSG->baseY = 150;
|
||||
spriteSet = gHighScoreScreenSpriteSets[gHighScoreScreenState.pressStartBlinkToggle + SG_HIGH_SCORE_PRESS_START_0];
|
||||
for (i = 0; i < spriteSet->count; i++)
|
||||
{
|
||||
oamData = &spriteGroup4->oam[i];
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + spriteGroup4->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + spriteGroup4->baseY;
|
||||
oamData = &pressStartSG->oam[i];
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + pressStartSG->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + pressStartSG->baseY;
|
||||
}
|
||||
}
|
||||
if (spriteGroup3->active == TRUE)
|
||||
if (popupSG->active == TRUE)
|
||||
{
|
||||
switch ((s8)gHighScorePopupType)
|
||||
switch (gHighScorePopupType)
|
||||
{
|
||||
case HIGH_SCORE_POPUP_TRANSMISSION_CONNECT_PROMPT:
|
||||
case HIGH_SCORE_POPUP_DELETE_CONFIRMATION_PROMPT:
|
||||
spriteGroup3->baseX = 120;
|
||||
spriteGroup3->baseY = 100;
|
||||
popupSG->baseX = 120;
|
||||
popupSG->baseY = 100;
|
||||
break;
|
||||
default:
|
||||
spriteGroup3->baseX = 120;
|
||||
spriteGroup3->baseY = 80;
|
||||
popupSG->baseX = 120;
|
||||
popupSG->baseY = 80;
|
||||
break;
|
||||
}
|
||||
spriteSet = gHighScoreScreenSpriteSets[(s8)gHighScorePopupType + SG_HIGH_SCORE_POPUP_LIST_BASE];
|
||||
spriteSet = gHighScoreScreenSpriteSets[gHighScorePopupType + SG_HIGH_SCORE_POPUP_LIST_BASE];
|
||||
for (i = 0; i < spriteSet->count; i++)
|
||||
{
|
||||
oamData = &spriteGroup3->oam[i];
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + spriteGroup3->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + spriteGroup3->baseY;
|
||||
oamData = &popupSG->oam[i];
|
||||
gOamBuffer[oamData->oamId].x = oamData->xOffset + popupSG->baseX;
|
||||
gOamBuffer[oamData->oamId].y = oamData->yOffset + popupSG->baseY;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
spriteGroup1->active = FALSE;
|
||||
spriteGroup2->active = FALSE;
|
||||
LoadSpriteSets(spriteSets, 9, spriteGroup1);
|
||||
highScorePageArrowSG[0]->active = FALSE;
|
||||
highScorePageArrowSG[1]->active = FALSE;
|
||||
LoadSpriteSets(gHighScoreScreenSpriteSets, 9, gMain.spriteGroups);
|
||||
}
|
||||
|
||||
spriteGroup3->active = FALSE;
|
||||
spriteGroup4->active = FALSE;
|
||||
popupSG->active = 0;
|
||||
pressStartSG->active = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -595,7 +595,6 @@ void IntroScene1Torchic_RenderAllSprites(void)
|
||||
struct SpriteGroup *mainSg2;
|
||||
struct SpriteGroup *otherSg;
|
||||
int i;
|
||||
const u16 *p; // TODO Fakematch
|
||||
|
||||
gMain.blendControl = 0xF10;
|
||||
gMain.blendAlpha = gIntroBlendSrc | (gIntroBlendDst << 8);
|
||||
@@ -615,13 +614,13 @@ void IntroScene1Torchic_RenderAllSprites(void)
|
||||
|
||||
if (puVar1->active == TRUE)
|
||||
{
|
||||
const struct SpriteSet *introScene1;
|
||||
puVar1->baseX = gIntroSpriteEntities[1].posX;
|
||||
puVar1->baseY = gIntroSpriteEntities[1].posY;
|
||||
p = &gIntroScene1Torchic_SpriteSets[gIntroSpriteEntities[1].animFrame]->count;
|
||||
|
||||
for (i = 0;
|
||||
i < *p;
|
||||
i++)
|
||||
introScene1 = gIntroScene1Torchic_SpriteSets[gIntroSpriteEntities[1].animFrame];
|
||||
|
||||
for (i = 0; i < introScene1->count; i++)
|
||||
{
|
||||
puVar5 = &puVar1->oam[i];
|
||||
gOamBuffer[puVar5->oamId].objMode = ST_OAM_OBJ_BLEND;
|
||||
|
||||
42
src/m4a.c
42
src/m4a.c
@@ -669,28 +669,18 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
|
||||
{
|
||||
s32 i;
|
||||
struct MusicPlayerTrack *track;
|
||||
u16 fadeOI = mplayInfo->fadeOI;
|
||||
register u32 temp asm("r3");
|
||||
register u16 mask asm("r2");
|
||||
u16 fadeOV;
|
||||
|
||||
if (fadeOI == 0)
|
||||
if (mplayInfo->fadeOI == 0)
|
||||
return;
|
||||
if (--mplayInfo->fadeOC != 0)
|
||||
return;
|
||||
|
||||
mplayInfo->fadeOC--;
|
||||
|
||||
temp = 0xFFFF;
|
||||
mask = temp;
|
||||
|
||||
if (mplayInfo->fadeOC != 0)
|
||||
return;
|
||||
|
||||
mplayInfo->fadeOC = fadeOI;
|
||||
mplayInfo->fadeOC = mplayInfo->fadeOI;
|
||||
|
||||
if (mplayInfo->fadeOV & FADE_IN)
|
||||
{
|
||||
mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT);
|
||||
|
||||
if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT))
|
||||
if ((u16)(mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT)) >= (64 << FADE_VOL_SHIFT))
|
||||
{
|
||||
mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
|
||||
mplayInfo->fadeOI = 0;
|
||||
@@ -698,16 +688,13 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
|
||||
}
|
||||
else
|
||||
{
|
||||
mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT);
|
||||
|
||||
if ((s16)(mplayInfo->fadeOV & mask) <= 0)
|
||||
if ((s16)(mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT)) <= 0)
|
||||
{
|
||||
i = mplayInfo->trackCount;
|
||||
track = mplayInfo->tracks;
|
||||
|
||||
while (i > 0)
|
||||
{
|
||||
register u32 fadeOV asm("r7");
|
||||
u32 val;
|
||||
|
||||
TrackStop(mplayInfo, track);
|
||||
@@ -740,7 +727,9 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
|
||||
{
|
||||
if (track->flags & MPT_FLG_EXIST)
|
||||
{
|
||||
track->volX = (mplayInfo->fadeOV >> FADE_VOL_SHIFT);
|
||||
fadeOV = mplayInfo->fadeOV;
|
||||
|
||||
track->volX = (fadeOV >> FADE_VOL_SHIFT);
|
||||
track->flags |= MPT_FLG_VOLCHG;
|
||||
}
|
||||
|
||||
@@ -894,16 +883,13 @@ void CgbModVol(struct CgbChannel *chan)
|
||||
if ((soundInfo->mode & 1) || !CgbPan(chan))
|
||||
{
|
||||
chan->pan = 0xFF;
|
||||
chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
|
||||
chan->eg = (u32)(chan->leftVolume + chan->rightVolume);
|
||||
chan->eg /= 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Force chan->rightVolume and chan->leftVolume to be read from memory again,
|
||||
// even though there is no reason to do so.
|
||||
// The command line option "-fno-gcse" achieves the same result as this.
|
||||
asm("" : : : "memory");
|
||||
|
||||
chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
|
||||
chan->eg = (u32)(chan->leftVolume + chan->rightVolume);
|
||||
chan->eg /= 16;
|
||||
if (chan->eg > 15)
|
||||
chan->eg = 15;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user