Skip to content

Generalizations on Metro_RP2350_Chips_Challenge for Fruit Jam #3094

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 40 additions & 40 deletions Fruit_Jam/Larsio_Paint_Music/sound_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,57 +141,57 @@ def __init__(self, audio_output="pwm", seconds_per_eighth=0.25):
try:
# Channel 1 samples
self.samples = {
59: audiocore.WaveFile("/samples/larso_B3.wav"), # B3
60: audiocore.WaveFile("/samples/larso_C4.wav"), # C4
62: audiocore.WaveFile("/samples/larso_D4.wav"), # D4
64: audiocore.WaveFile("/samples/larso_E4.wav"), # E4
65: audiocore.WaveFile("/samples/larso_F4.wav"), # F4
67: audiocore.WaveFile("/samples/larso_G4.wav"), # G4
69: audiocore.WaveFile("/samples/larso_A4.wav"), # A4
71: audiocore.WaveFile("/samples/larso_B4.wav"), # B4
72: audiocore.WaveFile("/samples/larso_C5.wav"), # C5
74: audiocore.WaveFile("/samples/larso_D5.wav"), # D5
76: audiocore.WaveFile("/samples/larso_E5.wav"), # E5
77: audiocore.WaveFile("/samples/larso_F5.wav"), # F5
79: audiocore.WaveFile("/samples/larso_G5.wav"), # G5
59: audiocore.WaveFile("samples/larso_B3.wav"), # B3
60: audiocore.WaveFile("samples/larso_C4.wav"), # C4
62: audiocore.WaveFile("samples/larso_D4.wav"), # D4
64: audiocore.WaveFile("samples/larso_E4.wav"), # E4
65: audiocore.WaveFile("samples/larso_F4.wav"), # F4
67: audiocore.WaveFile("samples/larso_G4.wav"), # G4
69: audiocore.WaveFile("samples/larso_A4.wav"), # A4
71: audiocore.WaveFile("samples/larso_B4.wav"), # B4
72: audiocore.WaveFile("samples/larso_C5.wav"), # C5
74: audiocore.WaveFile("samples/larso_D5.wav"), # D5
76: audiocore.WaveFile("samples/larso_E5.wav"), # E5
77: audiocore.WaveFile("samples/larso_F5.wav"), # F5
79: audiocore.WaveFile("samples/larso_G5.wav"), # G5
}
print("Loaded channel 1 WAV samples")

# Load samples for channel 2
self.heart_samples = {
59: audiocore.WaveFile("/samples/musicnote16_B3.wav"), # B3
60: audiocore.WaveFile("/samples/musicnote16_C4.wav"), # C4
62: audiocore.WaveFile("/samples/musicnote16_D4.wav"), # D4
64: audiocore.WaveFile("/samples/musicnote16_E4.wav"), # E4
65: audiocore.WaveFile("/samples/musicnote16_F4.wav"), # F4
67: audiocore.WaveFile("/samples/musicnote16_G4.wav"), # G4
69: audiocore.WaveFile("/samples/musicnote16_A4.wav"), # A4
71: audiocore.WaveFile("/samples/musicnote16_B4.wav"), # B4
72: audiocore.WaveFile("/samples/musicnote16_C5.wav"), # C5
74: audiocore.WaveFile("/samples/musicnote16_D5.wav"), # D5
76: audiocore.WaveFile("/samples/musicnote16_E5.wav"), # E5
77: audiocore.WaveFile("/samples/musicnote16_F5.wav"), # F5
79: audiocore.WaveFile("/samples/musicnote16_G5.wav"), # G5
59: audiocore.WaveFile("samples/musicnote16_B3.wav"), # B3
60: audiocore.WaveFile("samples/musicnote16_C4.wav"), # C4
62: audiocore.WaveFile("samples/musicnote16_D4.wav"), # D4
64: audiocore.WaveFile("samples/musicnote16_E4.wav"), # E4
65: audiocore.WaveFile("samples/musicnote16_F4.wav"), # F4
67: audiocore.WaveFile("samples/musicnote16_G4.wav"), # G4
69: audiocore.WaveFile("samples/musicnote16_A4.wav"), # A4
71: audiocore.WaveFile("samples/musicnote16_B4.wav"), # B4
72: audiocore.WaveFile("samples/musicnote16_C5.wav"), # C5
74: audiocore.WaveFile("samples/musicnote16_D5.wav"), # D5
76: audiocore.WaveFile("samples/musicnote16_E5.wav"), # E5
77: audiocore.WaveFile("samples/musicnote16_F5.wav"), # F5
79: audiocore.WaveFile("samples/musicnote16_G5.wav"), # G5
}
print("Loaded channel 2 WAV samples")

# Load samples for channel 3 (drum samples)
self.drum_samples = {}
try:
self.drum_samples = {
59: audiocore.WaveFile("/samples/kick_01.wav"),
60: audiocore.WaveFile("/samples/kick_01.wav"),
62: audiocore.WaveFile("/samples/kick_01.wav"),
64: audiocore.WaveFile("/samples/snare_01.wav"),
65: audiocore.WaveFile("/samples/snare_01.wav"),
67: audiocore.WaveFile("/samples/snare_01.wav"),
69: audiocore.WaveFile("/samples/chat_01.wav"),
71: audiocore.WaveFile("/samples/chat_01.wav"),
72: audiocore.WaveFile("/samples/chat_01.wav"),
74: audiocore.WaveFile("/samples/ohat_01.wav"),
76: audiocore.WaveFile("/samples/ohat_01.wav"),
77: audiocore.WaveFile("/samples/crash_01.wav"),
79: audiocore.WaveFile("/samples/crash_01.wav"),
59: audiocore.WaveFile("samples/kick_01.wav"),
60: audiocore.WaveFile("samples/kick_01.wav"),
62: audiocore.WaveFile("samples/kick_01.wav"),
64: audiocore.WaveFile("samples/snare_01.wav"),
65: audiocore.WaveFile("samples/snare_01.wav"),
67: audiocore.WaveFile("samples/snare_01.wav"),
69: audiocore.WaveFile("samples/chat_01.wav"),
71: audiocore.WaveFile("samples/chat_01.wav"),
72: audiocore.WaveFile("samples/chat_01.wav"),
74: audiocore.WaveFile("samples/ohat_01.wav"),
76: audiocore.WaveFile("samples/ohat_01.wav"),
77: audiocore.WaveFile("samples/crash_01.wav"),
79: audiocore.WaveFile("samples/crash_01.wav"),
}
print("Loaded channel 3 WAV samples (drums)")
except Exception as e:
Expand All @@ -204,7 +204,7 @@ def __init__(self, audio_output="pwm", seconds_per_eighth=0.25):
print(f"Error loading WAV samples: {e}")
# Fallback to basic samples if there's an error
self.samples = {
65: audiocore.WaveFile("/samples/musicnote01.wav"), # Default sample
65: audiocore.WaveFile("samples/musicnote01.wav"), # Default sample
}
self.heart_samples = self.samples # Use same samples as fallback
self.drum_samples = self.samples # Use same samples as fallback
Expand Down
28 changes: 14 additions & 14 deletions Fruit_Jam/Larsio_Paint_Music/sprite_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,40 +80,40 @@ def load_sprites(self):
try:
# Load the Lars note bitmap for channel 1 notes
self.mario_head, self.mario_palette = adafruit_imageload.load(
"/sprites/lars_note.bmp"
"sprites/lars_note.bmp"
)
# Make the background color transparent (not just the same color)
self.mario_palette.make_transparent(0)

# Load the Heart note bitmap for channel 2 notes
self.heart_note, self.heart_palette = adafruit_imageload.load(
"/sprites/heart_note.bmp"
"sprites/heart_note.bmp"
)
# Make the background color transparent
self.heart_palette.make_transparent(0)

# Load the Drum note bitmap for channel 3 notes
self.drum_note, self.drum_palette = adafruit_imageload.load(
"/sprites/drum_note.bmp"
"sprites/drum_note.bmp"
)
# Make the background color transparent
self.drum_palette.make_transparent(0)

# Load the new sprites for channels 4, 5, and 6
# Meatball for channel 4
self.meatball_note, self.meatball_palette = adafruit_imageload.load(
"/sprites/meatball.bmp"
"sprites/meatball.bmp"
)
self.meatball_palette.make_transparent(0)

# Star for channel 5
self.star_note, self.star_palette = adafruit_imageload.load(
"/sprites/star.bmp"
"sprites/star.bmp"
)
self.star_palette.make_transparent(0)

# Bot for channel 6
self.bot_note, self.bot_palette = adafruit_imageload.load("/sprites/bot.bmp")
self.bot_note, self.bot_palette = adafruit_imageload.load("sprites/bot.bmp")
self.bot_palette.make_transparent(0)

except Exception as e:
Expand Down Expand Up @@ -171,45 +171,45 @@ def load_button_sprites(self):
try:
# Load play button images
self.play_up, self.play_up_palette = adafruit_imageload.load(
"/sprites/play_up.bmp"
"sprites/play_up.bmp"
)
self.play_up_palette.make_transparent(0)

self.play_down, self.play_down_palette = adafruit_imageload.load(
"/sprites/play_down.bmp"
"sprites/play_down.bmp"
)
self.play_down_palette.make_transparent(0)

# Load stop button images
self.stop_up, self.stop_up_palette = adafruit_imageload.load(
"/sprites/stop_up.bmp"
"sprites/stop_up.bmp"
)
self.stop_up_palette.make_transparent(0)

self.stop_down, self.stop_down_palette = adafruit_imageload.load(
"/sprites/stop_down.bmp"
"sprites/stop_down.bmp"
)
self.stop_down_palette.make_transparent(0)

# Load loop button images
self.loop_up, self.loop_up_palette = adafruit_imageload.load(
"/sprites/loop_up.bmp"
"sprites/loop_up.bmp"
)
self.loop_up_palette.make_transparent(0)

self.loop_down, self.loop_down_palette = adafruit_imageload.load(
"/sprites/loop_down.bmp"
"sprites/loop_down.bmp"
)
self.loop_down_palette.make_transparent(0)

# Load clear button images
self.clear_up, self.clear_up_palette = adafruit_imageload.load(
"/sprites/clear_up.bmp"
"sprites/clear_up.bmp"
)
self.clear_up_palette.make_transparent(0)

self.clear_down, self.clear_down_palette = adafruit_imageload.load(
"/sprites/clear_down.bmp"
"sprites/clear_down.bmp"
)
self.clear_down_palette.make_transparent(0)

Expand Down
33 changes: 18 additions & 15 deletions Metro/Metro_RP2350_Chips_Challenge/code.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,20 @@
DATA_FILE = "CHIPS.DAT"

SOUND_EFFECTS = {
"BUTTON_PUSHED": "/sounds/pop2.wav",
"DOOR_OPENED": "/sounds/door.wav",
"ITEM_COLLECTED": "/sounds/blip2.wav",
"BOOTS_STOLEN": "/sounds/strike.wav",
"WATER_SPLASH": "/sounds/water2.wav",
"TELEPORT": "/sounds/teleport.wav",
"CANT_MOVE": "/sounds/oof3.wav",
"CHIP_LOSES": "/sounds/bummer.wav",
"LEVEL_COMPLETE": "/sounds/ditty1.wav",
"IC_COLLECTED": "/sounds/click3.wav",
"BOMB_EXPLOSION": "/sounds/hit3.wav",
"SOCKET_SOUND": "/sounds/chimes.wav",
"TIME_LOW_TICK": "/sounds/click1.wav",
"TIME_UP": "/sounds/bell.wav"
"BUTTON_PUSHED": "sounds/pop2.wav",
"DOOR_OPENED": "sounds/door.wav",
"ITEM_COLLECTED": "sounds/blip2.wav",
"BOOTS_STOLEN": "sounds/strike.wav",
"WATER_SPLASH": "sounds/water2.wav",
"TELEPORT": "sounds/teleport.wav",
"CANT_MOVE": "sounds/oof3.wav",
"CHIP_LOSES": "sounds/bummer.wav",
"LEVEL_COMPLETE": "sounds/ditty1.wav",
"IC_COLLECTED": "sounds/click3.wav",
"BOMB_EXPLOSION": "sounds/hit3.wav",
"SOCKET_SOUND": "sounds/chimes.wav",
"TIME_LOW_TICK": "sounds/click1.wav",
"TIME_UP": "sounds/bell.wav"
}

displayio.release_displays()
Expand All @@ -45,7 +45,10 @@
dac.headphone_output = True
dac.headphone_volume = -15 # dB

audio_bus = audiobusio.I2SOut(board.D9, board.D10, board.D11)
if hasattr(board, "I2S_BCLK"):
audio_bus = audiobusio.I2SOut(board.I2S_BCLK, board.I2S_WS, board.I2S_DIN)
else:
audio_bus = audiobusio.I2SOut(board.D9, board.D10, board.D11)
audio = Audio(audio_bus, SOUND_EFFECTS)

fb = picodvi.Framebuffer(320, 240, clk_dp=board.CKP, clk_dn=board.CKN,
Expand Down
4 changes: 2 additions & 2 deletions Metro/Metro_RP2350_Chips_Challenge/game.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
from microcontroller import nvm

# Colors must be colors in palette
LARGE_FONT = bitmap_font.load_font("/fonts/Arial-Bold-10.pcf")
SMALL_FONT = bitmap_font.load_font("/fonts/Arial-8.pcf")
LARGE_FONT = bitmap_font.load_font("fonts/Arial-Bold-10.pcf")
SMALL_FONT = bitmap_font.load_font("fonts/Arial-8.pcf")

colors = {
"key_color": 0xAAFF00, # Light Green
Expand Down
8 changes: 8 additions & 0 deletions Metro/Metro_RP2350_Chips_Challenge/savestate.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ def __init__(self):
self._sdcard = None

def _mount_sd_card(self):

# Check if the SD card is already mounted
try:
storage.getmount("/sd")
return True
except OSError:
pass

self._card_detect = DigitalInOut(board.SD_CARD_DETECT)
self._card_detect.switch_to_input(pull=Pull.UP)
if self._card_detect.value:
Expand Down