shit
This commit is contained in:
parent
417cae168f
commit
a8bc01bedd
59 changed files with 2053 additions and 1054 deletions
|
|
@ -19,12 +19,13 @@ void spawnTreasure(u8 zone){
|
|||
treasures[i].vel.y = (random() % 2 == 0) ? FIX32(0.1) : FIX32(-0.1);
|
||||
|
||||
treasures[i].image = SPR_addSprite(&treasureSprite,
|
||||
getScreenX(treasures[i].pos.x, player.camera) - TREASURE_OFF, fix32ToInt(treasures[i].pos.y) - TREASURE_OFF,
|
||||
getScreenX(treasures[i].pos.x, player.camera) - TREASURE_OFF, F32_toInt(treasures[i].pos.y) - TREASURE_OFF,
|
||||
TILE_ATTR(PAL0, 0, 0, 0));
|
||||
if(!treasures[i].image){
|
||||
treasures[i].active = FALSE;
|
||||
return;
|
||||
}
|
||||
SPR_setDepth(treasures[i].image, 2);
|
||||
SPR_setVisibility(treasures[i].image, HIDDEN);
|
||||
treasures[i].type = random() % 4;
|
||||
SPR_setAnim(treasures[i].image, treasures[i].type);
|
||||
|
|
@ -34,8 +35,13 @@ static void updateTreasure(u8 i){
|
|||
switch(treasures[i].state){
|
||||
case TREASURE_WALKING:
|
||||
// Y bounce: bob 4px around ground level
|
||||
if(treasures[i].pos.y >= GAME_H_F - FIX32(20) || treasures[i].pos.y <= GAME_H_F - FIX32(28))
|
||||
treasures[i].vel.y *= -1;
|
||||
if(treasures[i].pos.y >= GAME_H_F - FIX32(16)){
|
||||
if(treasures[i].vel.y > 0) treasures[i].vel.y = -treasures[i].vel.y;
|
||||
treasures[i].pos.y = GAME_H_F - FIX32(16);
|
||||
} else if(treasures[i].pos.y <= GAME_H_F - FIX32(32)){
|
||||
if(treasures[i].vel.y < 0) treasures[i].vel.y = -treasures[i].vel.y;
|
||||
treasures[i].pos.y = GAME_H_F - FIX32(32);
|
||||
}
|
||||
|
||||
// X wrap
|
||||
if(treasures[i].pos.x >= GAME_WRAP)
|
||||
|
|
@ -43,8 +49,8 @@ static void updateTreasure(u8 i){
|
|||
if(treasures[i].pos.x < 0)
|
||||
treasures[i].pos.x += GAME_WRAP;
|
||||
|
||||
treasures[i].pos.x += treasures[i].vel.x;
|
||||
treasures[i].pos.y += treasures[i].vel.y;
|
||||
treasures[i].pos.x += treasures[i].vel.x - (player.vel.x >> 2);
|
||||
treasures[i].pos.y += treasures[i].vel.y - (playerScrollVelY >> 3);
|
||||
break;
|
||||
|
||||
case TREASURE_CARRIED:
|
||||
|
|
@ -109,8 +115,20 @@ static void updateTreasure(u8 i){
|
|||
if(treasures[i].state != TREASURE_CARRIED && treasures[i].state != TREASURE_COLLECTED){
|
||||
fix32 dy = treasures[i].pos.y - player.pos.y;
|
||||
if(dx >= FIX32(-32) && dx <= FIX32(32) && dy >= FIX32(-32) && dy <= FIX32(32)){
|
||||
score += (treasures[i].state == TREASURE_FALLING) ? 2000 : 1000;
|
||||
sfxPickup();
|
||||
score += (treasures[i].state == TREASURE_FALLING) ? 4096 : 1024;
|
||||
// check if this is the last treasure (all others inactive or collected)
|
||||
bool willBeLast = TRUE;
|
||||
for(s16 j = 0; j < TREASURE_COUNT; j++){
|
||||
if(j != i && treasures[j].active && treasures[j].state != TREASURE_COLLECTED){
|
||||
willBeLast = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(willBeLast){
|
||||
sfxCollectAllTreasures();
|
||||
} else {
|
||||
sfxCollectTreasure();
|
||||
}
|
||||
treasureCollectedType = treasures[i].type;
|
||||
treasureCollectedClock = 120;
|
||||
// only add to trail if this type isn't already collected
|
||||
|
|
@ -133,12 +151,12 @@ static void updateTreasure(u8 i){
|
|||
}
|
||||
|
||||
s16 sx = getScreenX(treasures[i].pos.x, player.camera);
|
||||
s16 sy = fix32ToInt(treasures[i].pos.y);
|
||||
s16 sy = F32_toInt(treasures[i].pos.y);
|
||||
bool visible = (treasures[i].state == TREASURE_COLLECTED) || (dx >= -CULL_LIMIT && dx <= CULL_LIMIT);
|
||||
if(visible && treasures[i].state == TREASURE_COLLECTED){
|
||||
if(player.respawnClock > 0)
|
||||
visible = FALSE;
|
||||
else if(player.recoveringClock > 0)
|
||||
else if(player.recoveringClock > 0 && player.recoverFlash)
|
||||
visible = (player.recoveringClock % 20 > 10);
|
||||
}
|
||||
SPR_setVisibility(treasures[i].image, visible ? VISIBLE : HIDDEN);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue