diff --git a/assets/level8.gif b/assets/level8.gif index 6042a39..390aef7 100644 Binary files a/assets/level8.gif and b/assets/level8.gif differ diff --git a/main.c b/main.c index 25bb900..a0623bb 100755 --- a/main.c +++ b/main.c @@ -335,7 +335,8 @@ struct uint8_t cards; /**< Lowest 3 bits say which access cards have been taken., the next 3 bits say which cards - should be blinking in the HUD. */ + should be blinking in the HUD, the last + 2 bits are a blink reset counter. */ uint8_t justTeleported; } SFG_player; @@ -1198,7 +1199,7 @@ void SFG_initPlayer() SFG_player.cards = #if SFG_UNLOCK_DOOR - 255; + 0x07; #else 0; #endif @@ -2398,10 +2399,16 @@ void SFG_updateLevel() /* Check door on whether a player is standing nearby. For performance reasons we only check a few doors and move to others in the next frame. */ - -// if (SFG_currentLevel.checkedDoorIndex == 0) -// SFG_player.cards &= 0x07; // stop HUD card blinking each cycle + + if (SFG_currentLevel.checkedDoorIndex == 0) + { + uint8_t count = SFG_player.cards >> 6; + SFG_player.cards = (count <= 1) ? + (SFG_player.cards & 0x07) : + ((SFG_player.cards & 0x7f) | ((count - 1) << 6)); + } + for (uint16_t i = 0; i < RCL_min(SFG_ELEMENT_DISTANCES_CHECKED_PER_FRAME, SFG_currentLevel.doorRecordCount); @@ -2416,12 +2423,6 @@ void SFG_updateLevel() uint8_t lock = SFG_DOOR_LOCK(door->state); - if (lock != 0) - { - lock = 1 << (lock + 2); - SFG_player.cards &= ~lock; // stop HUD blinking - } - if ( // player near door? (door->coords[0] >= (SFG_player.squarePosition[0] - 1)) && (door->coords[0] <= (SFG_player.squarePosition[0] + 1)) && @@ -2434,10 +2435,10 @@ void SFG_updateLevel() } else { - if ((lock >> 3) & SFG_player.cards) // player has the card? + if (SFG_player.cards & lock) // player has the card? newUpDownState = SFG_DOOR_UP_DOWN_MASK; else - SFG_player.cards |= lock; // make card blink on HUD + SFG_player.cards = (SFG_player.cards & 0x07) | (lock << 3) | (2 << 6); } }