diff --git a/wicked_quest.py b/wicked_quest.py index c15b710..3a81123 100755 --- a/wicked_quest.py +++ b/wicked_quest.py @@ -28,6 +28,7 @@ class WickedQuest: self.runLock = False # Toggle behavior of the run keys self.saveManager = SaveManager() self.survivalGenerator = None + self.lastBroomLandingTime = 0 # Timestamp to prevent ducking after broom landing self.survivalWave = 1 self.survivalScore = 0 @@ -161,10 +162,17 @@ class WickedQuest: currentTime = pygame.time.get_ticks() # Update running and ducking states - if (keys[pygame.K_s] or keys[pygame.K_DOWN]) and not player.isDucking: - player.duck() - elif (not keys[pygame.K_s] and not keys[pygame.K_DOWN]) and player.isDucking: - player.stand() + # Don't handle ducking if jumping (down key is used for instant landing with broom) + # Also prevent ducking for 250ms after broom landing to avoid conflict + broomLandingGracePeriod = 250 # milliseconds + recentBroomLanding = (hasattr(self, 'lastBroomLandingTime') and + currentTime - self.lastBroomLandingTime < broomLandingGracePeriod) + + if not player.isJumping and not recentBroomLanding: + if (keys[pygame.K_s] or keys[pygame.K_DOWN]) and not player.isDucking: + player.duck() + elif (not keys[pygame.K_s] and not keys[pygame.K_DOWN]) and player.isDucking: + player.stand() if self.runLock: player.isRunning = not (keys[pygame.K_SPACE] or keys[pygame.K_LSHIFT] or keys[pygame.K_RSHIFT]) @@ -241,7 +249,18 @@ class WickedQuest: player.jumpStartTime = currentTime play_sound(self.sounds['jump']) - # Check if jump should end + # Handle instant landing with broom (press down while jumping) + if (player.isJumping and (keys[pygame.K_s] or keys[pygame.K_DOWN]) and + player.currentWeapon and player.currentWeapon.name == "witch_broom"): + player.isJumping = False + play_sound(self.sounds[player.footstepSound]) # Landing sound + # Reset step distance tracking after landing + player.distanceSinceLastStep = 0 + player.lastStepTime = currentTime + # Set timestamp to prevent immediate ducking after broom landing + self.lastBroomLandingTime = currentTime + + # Check if jump should end naturally if player.isJumping and currentTime - player.jumpStartTime >= player.get_current_jump_duration(): player.isJumping = False play_sound(self.sounds[player.footstepSound]) # Landing sound