Make the game more level creator friendly by separating levels into adventures. Menu for choosing which adventure you want.
This commit is contained in:
@@ -5,6 +5,7 @@ from libstormgames import *
|
||||
from src.level import Level
|
||||
from src.object import Object
|
||||
from src.player import Player
|
||||
from src.game_selection import select_game, get_level_path
|
||||
|
||||
|
||||
class WickedQuest:
|
||||
@@ -15,24 +16,29 @@ class WickedQuest:
|
||||
self.gameStartTime = None
|
||||
self.lastThrowTime = 0
|
||||
self.throwDelay = 250
|
||||
self.player = None # Will be initialized when first level loads
|
||||
self.player = None
|
||||
self.currentGame = None
|
||||
|
||||
def load_level(self, levelNumber):
|
||||
"""Load a level from its JSON file."""
|
||||
levelFile = f"levels/{levelNumber}.json"
|
||||
levelFile = get_level_path(self.currentGame, levelNumber)
|
||||
pygame.event.pump()
|
||||
try:
|
||||
with open(levelFile, 'r') as f:
|
||||
levelData = json.load(f)
|
||||
|
||||
# Create player if this is the first level
|
||||
if self.player is None:
|
||||
self.player = Player(levelData["player_start"]["x"], levelData["player_start"]["y"], self.sounds)
|
||||
self.player = Player(levelData["player_start"]["x"],
|
||||
levelData["player_start"]["y"],
|
||||
self.sounds)
|
||||
else:
|
||||
# Just update player position for new level
|
||||
self.player.xPos = levelData["player_start"]["x"]
|
||||
self.player.yPos = levelData["player_start"]["y"]
|
||||
|
||||
# Pass existing player to new level
|
||||
pygame.event.pump()
|
||||
self.currentLevel = Level(levelData, self.sounds, self.player)
|
||||
|
||||
# Announce level details
|
||||
@@ -49,6 +55,7 @@ class WickedQuest:
|
||||
keys = pygame.key.get_pressed()
|
||||
player = self.currentLevel.player
|
||||
currentTime = pygame.time.get_ticks()
|
||||
pygame.event.pump()
|
||||
|
||||
# Update running and ducking states
|
||||
if keys[pygame.K_s] and not player.isDucking:
|
||||
@@ -162,18 +169,19 @@ class WickedQuest:
|
||||
|
||||
while True:
|
||||
currentTime = pygame.time.get_ticks()
|
||||
pygame.event.pump()
|
||||
|
||||
# Game volume controls
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.KEYDOWN:
|
||||
# Check for Alt modifier
|
||||
mods = pygame.key.get_mods()
|
||||
alt_pressed = mods & pygame.KMOD_ALT
|
||||
altPressed = mods & pygame.KMOD_ALT
|
||||
|
||||
if event.key == pygame.K_ESCAPE:
|
||||
return
|
||||
# Volume controls (require Alt)
|
||||
elif alt_pressed:
|
||||
elif altPressed:
|
||||
if event.key == pygame.K_PAGEUP:
|
||||
adjust_master_volume(0.1)
|
||||
elif event.key == pygame.K_PAGEDOWN:
|
||||
@@ -233,15 +241,18 @@ class WickedQuest:
|
||||
def run(self):
|
||||
"""Main game loop with menu system."""
|
||||
while True:
|
||||
choice = game_menu(self.sounds, "play", "instructions", "learn_sounds", "credits", "donate", "exit")
|
||||
choice = game_menu(self.sounds, "play", "instructions", "learn_sounds",
|
||||
"credits", "donate", "exit")
|
||||
|
||||
if choice == "exit":
|
||||
exit_game()
|
||||
elif choice == "play":
|
||||
self.player = None # Reset player for new game
|
||||
self.gameStartTime = pygame.time.get_ticks() # Set game start time here
|
||||
if self.load_level(1):
|
||||
self.game_loop()
|
||||
self.currentGame = select_game(self.sounds)
|
||||
if self.currentGame:
|
||||
self.player = None # Reset player for new game
|
||||
self.gameStartTime = pygame.time.get_ticks()
|
||||
if self.load_level(1):
|
||||
self.game_loop()
|
||||
elif choice == "learn_sounds":
|
||||
choice = learn_sounds(self.sounds)
|
||||
|
||||
|
Reference in New Issue
Block a user