Skip to content

Instantly share code, notes, and snippets.

View bbbradsmith's full-sized avatar
🦎

Brad Smith bbbradsmith

🦎
View GitHub Profile
@bbbradsmith
bbbradsmith / Sakanakao Twitch History.md
Last active July 1, 2024 00:28
Sakanakao's twitch stream history
@bbbradsmith
bbbradsmith / simcity_decompress.py
Last active June 22, 2024 04:29
SimCity SNES decompressor
# This is a decompressor for data in the Sim City (Japan) ROM for Super Famicom
#
# This extracts the complete character set from the game, used for the popup dialogs,
# and also all of the text used in these dialogs.
# The five SNES versions in various languages can also be dumped by this script, see below.
#
# The decompressor is for a Nintendo compression format that was apparently used in several games,
# and has been known by some as LC_LZ5. It might be useful for other games besides SimCity.
import PIL.Image
@bbbradsmith
bbbradsmith / approximate_spacing.py
Last active October 16, 2023 20:59
Approximating smooth motion in discrete steps
# Problem:
# Making an NES game, want smooth motion but don't want to store sub-pixel precision.
# Solution:
# Approximate smooth motion in discrete steps.
#
# Investigate a few methods, and compare them by smoothness.
# Use standard deviation as a measure of smoothness.
# (Lower deviation total is better.)
#
# Result:
@bbbradsmith
bbbradsmith / abyss_boat_pak_dump.py
Created September 29, 2023 03:57
Unpacks PAK files from the game Abyss Boat by Leaf
# dumps PAK files from the game Abyss Boat by Leaf
import os
import struct
def printable(d):
s = ""
for c in d: s += chr(c) if (c >= 0x20 and c <= 126) else '.'
return s
@bbbradsmith
bbbradsmith / autothumbs.py
Last active April 4, 2024 20:26
Generates movie thumbnail images automatically
#!/usr/bin/env python3
#
# Automatic Movie Thumbnail Generator
#
# Scans a folder, and generates a thumbnail image for every movie found.
# Uses a grid layout that attempts to maximize utilized space while
# fitting under a given maximum image size, and having at least as many
# frames as requested.
#
@bbbradsmith
bbbradsmith / bat.yml
Last active March 25, 2024 14:38
Github Actions example workflow for building a batch file
# Action name and trigger conditions.
# workflow_dispatch means: this can be manually re-triggered, and not just by push/pr.
name: Batch File Continuous Integration
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
@bbbradsmith
bbbradsmith / milva_dump.py
Last active July 19, 2023 04:20
Milva DOS image dumper (Desafio, Kick Boxing Street) and re-compressor
# Dumps image data from Milva DOS game,
# as well as Desafio and Kick Boxing Street
# from Ediciones Manali.
#
# https://archive.org/details/msdos_Milva_1993
# https://www.old-games.ru/game/4884.html (Desafio)
# https://www.old-games.ru/game/4532.html (Kick Boxing)
#
# If you successfully use this for their other games,
# send me the dump list and I can add it.
@bbbradsmith
bbbradsmith / subfix.py
Last active June 10, 2023 18:46
Plex subtitle file fixer and cleanup
#!/usr/bin/env python3
#
# This scrips attempts to find suitable subtitles in video collections,
# and will copy the best candidate into the same folder as the video,
# with the same filename as the video with the subtitle's extension.
#
# If a video already has a subtitle file in this place, it will not overwrite it.
#
# I can also delete directories and files as automatic cleanup.
@bbbradsmith
bbbradsmith / capchess_dumpega.py
Last active February 3, 2023 22:56
Capstone Chess DOS image dumper
import PIL.Image
import os
def decode_file(filename):
print(filename)
f = open(filename,"rb").read()
print("Header: %02X %02X" % (f[0],f[1]))
pal = f[2:2+(16*3)]
offset = 2 + (16*3)
count = 0
@bbbradsmith
bbbradsmith / affine_texture_mapping_tri_vs_quad.py
Created December 30, 2022 04:45
Texture mapping diagrams for Wikipedia
# generates SVG diagram:
# https://commons.wikimedia.org/wiki/File:Affine_texture_mapping_tri_vs_quad.svg
import math
GRID = 8
FTW = 100 # top board width
FBW = 200 # bottom board width
FH = 156
COLBG = "#B4B3D2"