Skip to content

Instantly share code, notes, and snippets.

#!/usr/bin/env python3
"""agb2mid.py — Convert GBA m4a .s assembly sound files to MIDI format.
I used this to convert the remaining pokeemerald .s files to .mid.
I had to make further modification to this for pokefirered and pokeruby, but those changes
are not reflected in this code.
Usage:
python3 tools/agb2mid/agb2mid.py sound/songs/se_m_swagger.s
python3 tools/agb2mid/agb2mid.py sound/songs/
#!/usr/bin/env python3
"""
Adds a custom 'agbl' (AGB Loop end) chunk to looped .wav files.
This chunk specifies the exact loop-end point to handle the off-by-one error
in the original game, where the loop-end should be one sample earlier than
the total number of samples in the file.
"""
import struct
@huderlem
huderlem / aif_to_wav.py
Last active December 27, 2025 00:50
Convert pokemon .bin files to .wav files
#!/usr/bin/env python3
"""
Converts .aif or .bin (GBA format) files to .wav files.
Can also read .aif files directly and convert them to .wav.
"""
import struct
import sys
import os
@huderlem
huderlem / map_constants_update.py
Last active September 3, 2022 19:43
Update new map constants
# This script will apply the same changes to your project as this PR: https://github.com/pret/pokeemerald/pull/1755/files
# You can run this before or after merging with upstream pret, so that your project's custom code and data are updated appropriately.
# To run this script:
# - Place this file in the root of your project. For example, pokeemearld/map_constants_update.py
# - Run "python map_constants_update.py"
import re
import glob
# 1. In map.json files, convert "dest_warp_id" to string value instead of integer. 127 becomes "WARP_ID_DYNAMIC". 126 becomes "WARP_ID_SECRET_BASE."
@huderlem
huderlem / regionmapgen.py
Created July 28, 2020 22:34
Region map generator
# This is a hacky thrown-together script that procedurally
# generates Gen-3 Pokemon region map images. I intend to build
# an online tool to facilitate this, but this is the first
# proof of concept.
#
# Requires the opensimplix, Pillow, and scikit-learn:
# pip install opensimplex
# pip install Pillow
# pip install -U scikit-learn
@huderlem
huderlem / dump-carrot-crazy-level-image.go
Created February 20, 2020 15:20
Generates a full image of a level in Looney Tunes: Carrot Crazy
package main
import (
"encoding/binary"
"image"
"image/color"
"image/draw"
"image/png"
"io/ioutil"
"os"
const (
copyByte = iota
copyBackReference
copyPairs
)
type command struct {
action int
length int
distance int
package main
import (
"bytes"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
script BugContestOfficer_EnterContest
{
if (var(VAR_BUG_CONTEST_PRIZE) != ITEM_NONE) {
bufferitemname(0, VAR_BUG_CONTEST_PRIZE)
msgbox(BugContestOfficer_Text_GivePrizeItem)
giveitem_std(VAR_BUG_CONTEST_PRIZE)
if (var(VAR_RESULT)) {
setvar(VAR_BUG_CONTEST_PRIZE, ITEM_NONE)
} else {
msgbox(BugContestOfficer_Text_NoRoomInBag)
# pokemap2json.py
# This script will process a pokeemerald project and generate the wild encounters JSON data for it.
# It creates:
# src/data/wild_encounters.json
#
# In order to convert your project's existing data from src/data/wild_encounters.h:
# 1. Merge pret/master.
# 2. Run wildencounters2json.py on your project.
# Example: "python wildencounters2json.py path/to/my/project"
# 3. Commit the src/data/wild_encounters.json file it creates.