Make the game more level creator friendly by separating levels into adventures. Menu for choosing which adventure you want.

This commit is contained in:
Storm Dragon
2025-02-08 23:22:38 -05:00
parent f751d99553
commit 0f0d719578
5 changed files with 154 additions and 440 deletions

View File

@@ -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)