Skip to content

Instantly share code, notes, and snippets.

View bbbradsmith's full-sized avatar
🦎

Brad Smith bbbradsmith

🦎
View GitHub Profile
@bbbradsmith
bbbradsmith / serrator.py
Last active August 1, 2024 01:48
Serrator - Adventure game progressive drawing simulator
#!/usr/bin/env python3
# serrator
#
# Explanation: https://www.patreon.com/posts/serrator-game-109214047
#
# Inspired by the way the background images in Sierra games drew in progressively.
# Usually too fast to really see, but on a very slow computer, or artificially slowed,
# the draw-in process was quite fascinating to watch:
# https://twitter.com/PixelArtSierra
@bbbradsmith
bbbradsmith / Sakanakao Twitch History.md
Last active July 10, 2024 20:39
Sakanakao's twitch stream history
@bbbradsmith
bbbradsmith / simcity_decompress.py
Last active July 23, 2024 05:14
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