Skip to content

Instantly share code, notes, and snippets.

@donnaken15
Last active February 8, 2026 08:28
Show Gist options
  • Select an option

  • Save donnaken15/9728a3b3c63debcb6f9c92a8f9e36a77 to your computer and use it in GitHub Desktop.

Select an option

Save donnaken15/9728a3b3c63debcb6f9c92a8f9e36a77 to your computer and use it in GitHub Desktop.
Compile and organize Revenge of the Sunfish assets FOR THE WORLD TO SEE! VIDEO AND FILES SOON!!
---
missing_sprites: [ 2596, 5086, 5087 ]
# apparently level viewer throws a divide by zero error at some point
# when skimming through the sprites of each room
# sprites are extracted independent of this specific feature though
sprites:
1: # index won't matter here, just a signifier to easily point to in the raw list
nick: stars
2:
nick: more stars
3:
nick: sun and earth
4:
nick: tree oak
5:
nick: leaves
6:
nick: branch
13:
nick: citizen
7:
nick: charred citizen
frames: [ 7, 12, 14 ]
8:
nick: explosion
frames: [ 8, 9, 10, 11, 0 ]
15:
nick: sunfish on earth
16:
nick: sunfish ammo
17:
nick: dirt
18:
nick: grass
19:
nick: moon
20:
nick: sun flare
21:
nick: sunfish in galaxy
22:
nick: faraway moon
24:
nick: small tree
25:
nick: sunfish
26:
nick: sunfish
27:
nick: caveman
28:
nick: caveman splattered
29:
nick: sunfish
30:
nick: ground
31:
nick: ground
32:
nick: sunfish
sounds:
sd:
level: [ 2, 5 ]
nick: "We are the sunfish"
22:
level: 12
nick: Death
reallen: [ 0.213, 1.040 ]
weee:
level: 37
#nick: "Holy EFFING ESS!" # cant even bring myself to copy paste swears even for a wiki barely attributed to me
kytes:
level: 100
nick: "Kill astronaut - The Free Design - Kites Are Fun (0:35)"
realrate: 24000
hgh:
level: 100
nick: "Red grape dungeon"
hgghgh:
level: 61
nick: "Breakcore"
tfhtf:
level: 80
nick: Galaxy
7:
level: 22
nick: Death
12:
level: 117
nick: "Boss death"
11:
level: 121
nick: "Kill angry head"
23:
level: 121
nick: "Kill orb"
13:
level: 98
nick: "Kill blue head"
asdasd:
level: 35
nick: "Mime death"
babies:
level: 33
nick: "Protect the innocent"
screemm:
level: 17
lightning2:
level: 103
nick: "Lightning"
win:
level: 38
#nick: "DEATH" # check with mime video
pop:
level: [ 103, 104, 105, 106, 107, 108 ]
nick: "Respawn"
scream2:
level: [ 103, 104, 105, 106, 107, 108 ]
nick: "Friday the 13th C64 scream sound"
# https://www.youtube.com/watch?v=2TsadbLmYx8&lc=UgyNGaUGwgq2H_eqxs14AaABAg
# thank you kind stranger here's reddit gold
bgsplatered:
level: [ 108 ]
nick: "Dr. Bob death"
ccc:
level: 16
#nick: "WRONG ONE!"
sound 13:
level: 60
#nick: "Eggplant (2)"
sound 5:
level: 3
#nick: "IT'S TIME TO PAY!"
1 (4):
level: 97
nick: "Kill"
3:
level: 116
nick: "Strobe"
reallen: [ 0.049, 0.967 ]
8:
level: [ 11, 98 ]
nick: "Mines / Kill saucer"
reallen: [ 0.02, 1.040 ]
14:
level: 116
nick: "Fireworks"
reallen: [ 0.042, 0.814 ]
18:
level: 87
nick: "Falling"
reallen: [ 0.145, 0.334 ]
hggh:
level: 12
nick: "Horn"
fuse:
level: 101
nick: "Dynamite fuse"
batt:
level: 101
nick: "Bats"
thank you:
level: 45
nick: "Thank you I had a good time"
glass:
level: 46
nick: "Glass shatter"
cat2:
level: 14
nick: "IT'S A SEAL!!"
screem:
level: [ 19, 18 ]
nick: "Screech synth"
bang (2): # forgot where!!!
level: [ 103, 107 ]
nick: "Landmine"
robocop:
level: 32
#nick: "Mammy on enter (Robocop)"
ohhh (2):
level: 58
nick: "Ohhh fork!"
dsdd:
level: 20
nick: "Skull"
munt3:
level: 24
#nick: "CORRECT!"
wind:
level: 108
nick: "Boss ambience"
realrate: 4000
im having:
level: 44
nick: "I'm having an orgasm"
ohh:
level: 13
nick: "Noise"
ohh1:
level: 13
nick: "Ambience"
realrate: 22050
die pac:
level: 54
nick: "Death"
satanappears!:
level: [ 98, 99 ]
nick: "Death"
bops3:
level: 13
nick: "Death"
that feels:
level: 44
nick: "That feels so good"
press my enter:
level: 44
nick: "Press my enter key"
6 (2):
level: 97
nick: "Death"
rub space:
level: 44
nick: "Rub space bar"
facehug66:
level: [ 105, 106 ]
nick: "Face hugger kills you"
squishy:
level: [ 105, 106 ]
nick: "Face hugger lands"
bugg:
level: [ 105, 106 ]
nick: "Kill face hugger"
#???????????????????????????????????????
# level: [ 106 ] # ?????????
# nick: "Land"
me so:
level: 44
nick: "Me so horny"
kid:
level: 58
nick: "Kid death"
roll my:
level: 44
nick: "Roll my keys"
aliensounds:
level: 80
nick: "Orb"
gf:
level: 47
#nick: "What are we made of?"
sdsddsas:
level: 47
nick: "Select"
paper:
level: 58
nick: "Paper delivery"
cccc:
level: 12
nick: "Ambience"
asasd:
level: 117
nick: "Boss sound"
nbgh:
level: 59
nick: "Eggplant"
q9:
level: 80
nick: "Gas"
ach1: # echo
level: 80
nick: "Ach (echo)"
1: # no echo
level: 42
nick: "Ach"
dd (2):
level: 57
nick: "Snarl"
bang5:
level: [ 70 ] # some other, i just played this again and i already forgot
nick: "Explosion"
fgggggg:
level: 70
nick: "Death/Eye creature"
ponus:
level: 52
nick: "Teleport"
zoom:
level: 36
nick: "Ship fuel"
hisssa:
level: 28
nick: "Flies"
chewman:
level: 81
nick: "Grinded to bits"
pop7:
level: 54
nick: "Power pellet depleted"
vomit:
level: 31
nick: "Vomitting"
crystal:
level: 9
nick: "THE POWER"
z18:
level: 29
nick: "Heartbeat"
dd:
level: 5
nick: "Aching"
t1:
level: 9
nick: "Select"
dddddd:
level: 9
nick: "Right-click POWER"
aaaa:
level: 8
nick: "MAKE A DECISION!"
harp:
level: 80
#nick: "Harp"
headdd:
level: [ 105, 106 ]
nick: "Head esplode"
hhh:
level: 39
nick: "Digeridoo"
helllll:
level: [ 104, 105, 106, 107 ]
nick: "Impaled"
explosion4:
level: 102
nick: "UFO 'nade"
harder:
level: 44
nick: "Harder"
sound1:
level: 80
#nick: "Unknown"
ohhh:
level: 13
nick: "RED = BAD"
pop4:
level: 54
nick: "Ghost death"
yhh:
level: 28
nick: "Teleport"
laugh:
level: 86
#nick: "Pogladontasaurus"
ninja commando17:
level: [ 71, 72, 73, 75, 76, 77 ]
nick: "Death"
ninja commando2:
level: [ 71, 72, 73, 75, 76, 77 ]
nick: "Kill by shuriken"
zapde:
level: 108
nick: "Eye laser"
bang111:
level: 101
nick: "Dynamite"
yes:
level: 44
nick: "Yes"
droid2: # forgot already, might've heard 1 or 2 times
level: 80
nick: "Unknown"
asassddd:
level: 10
nick: "Death"
painful:
level: 50
nick: "MILK!!!"
scream:
level: [ 2, 25 ]
nick: "Citizen death / Chess pieces"
croc3:
level: 0
nick: "WELCOME!"
eat:
level: 40
#nick: "Chomp"
fre:
level: 35
nick: "Sacré bleu!"
frt:
level: 118
nick: "Boom"
evilhaa:
level: 80
nick: "Maniacal laughter"
ninja commando15:
level: [ 71, 72, 73, 74, 75, 76, 77 ]
nick: "Sword swing"
a:
level: 34
#nick: "CAT"
yum:
level: 40
#nick: "Yum"
damage:
level: 100
nick: "Transformation"
screeming:
level: [ 6, 15 ]
nick: "Falling"
sedd:
level: 41
nick: "Growl"
shwing:
level: 108
nick: "Forcefield"
button:
level: [ 81, 82 ]
nick: "Gem"
asassss:
level: 12
nick: "NO SHOOT"
xzx:
level: 30
nick: "MAKE BEAKFAST NOW!"
car:
level: 58
nick: "Revving"
nbn:
level: 9
nick: "BROKEN"
asas:
level: 1
nick: "Rave"
zap2:
level: 80
nick: "Faulty disc"
key (2):
level: 100
nick: "Yellow key"
1 (5):
level: 100
nick: "Kill"
zap:
level: 120
nick: "Middle finger"
111:
level: 4
nick: "Trigger"
bb:
level: 84
nick: "Collide"
bullet2:
level: [ 98, 99 ]
nick: "Enemy bullet"
ninja commando6:
level: [ 71, 72, 73, 74, 75, 76, 77 ]
nick: "Shuriken"
door:
level: [ 107, 100 ]
nick: "Trapdoor / Purple lair"
metal:
level: 107
nick: "Spike trap"
explosion (2):
level: [ 98, 99 ]
nick: "Kill"
lazerrdsrr:
level: [ 98, 99 ]
nick: "Bullet"
pwool:
level: 58
nick: "Hitting ground"
head:
level: [ 71, 72, 73, 75, 76, 77 ]
nick: "Decapitate"
insec2wav:
level: 81
nick: "Spring"
rocks:
level: [ 81, 82 ]
nick: "Rock fall"
bang8:
level: [ 81, 82 ]
nick: "Bomb hit"
hit4:
level: 82
nick: "Spike"
hii2t:
level: 82
nick: "Platform break"
french:
level: 31
nick: "Chomp"
dime2:
level: 96
nick: "Coin"
1 (3):
level: 54
nick: "Pellet"
pop3:
level: 100
nick: "Red grape death"
beep:
level: 10
nick: "Landmine detector"
dart:
level: 94
nick: "Fling"
aaa:
level: 100
nick: "Inverted cat killed"
punch:
level: [ 108, 105, 106 ]
#nick: "Punch"
blastoon:
level: 96
nick: "Hover"
#a (2): # has to be on wasteland
vv: # jittery things that turn to eggs
level: 100
nick: "Kill"
yuyu: # when colliding
level: 100
nick: "Touch"
as:
level: 54
nick: "Power pellet"
pop44:
level: 96
nick: "Alien shooter"
exty:
level: [ 2, 10 ]
nick: "Explosion"
4:
level: 69
nick: "Kill"
15:
level: 69
nick: "Death"
slik:
level: 58
nick: "Windshield"
he:
level: 27
nick: "Health refill"
key:
level: 44
nick: "Spacebar"
touch:
level: 44
nick: "Touch me"
scream3:
level: 15
nick: "Overlayed scream 2"
sww:
level: 35
nick: "Switch"
zapp:
level: 96
nick: "Fire"
windy:
level: 80
nick: "Gust (Faulty disc)"
bann:
level: 35
nick: "Disarm laser eye"
daemon:
level: 80
nick: "Groan"
bang:
level: 79
nick: "Kill all"
6:
level: 52
nick: "I WARNED YOU!"
ambient:
level: 52
#nick: "Ambience"
bops4:
level: 80
explosion:
level: 53
#nick: "Chew"
step3:
level: 101
step4:
level: 101
lazer:
level: 80
frogs:
level: 80
1 (2):
level: 49
nick: "Switch"
#bngd: probably exploding green thing in mouth
#ninja commando16:
# nick: "Unknown"
#bang111: # already forgot!!!
#bang (2): # already forgot!!!
healthup: # ??
level: 96
nick: "Crystal"
#kkk: # already forgot!!!
up: # air ship orb thing likely
level: 96
nick: "Health orb"
zz:
level: 58
nick: "Motor"
dffg:
level: 100
nick: "Kill purple cyclops"
splat:
level: [ 81, 82 ]
nick: "Death by rock"
baby7:
level: [ 81, 82 ]
nick: "Kersplat"
caveent:
level: 53
nick: "Ambience"
allosy:
level: 52
nick: "Grab"
hj:
level: 100
nick: "Yellow bouncing creature"
swal;low:
level: 100
nick: "Kill purple smiley"
smassh:
level: 100
nick: "Touch purple smiley"
cc:
level: 100
nick: "Gun death"
aas:
level: 100
nick: "Hitler head touch"
vvv:
level: 100
nick: "Kill caterpillar"
vfv:
level: 100
nick: "Kill pink head"
in:
level: 100
nick: "Kill squid crab"
wa:
level: 100
nick: "Mossy lair"
kkk:
level: 100
nick: "Hurt place-swapping leg"
op:
level: 100
nick: "Scatter seizure head explode"
pop5:
level: 100
nick: "Kill triangle cyclops"
levels:
0: # just so i can't lose track >:(
title: "WELCOME!"
sprites: [ 304, 305, 306 ]
next: 1
1:
title: "Intro"
canontitle: "ONE DAY IN A PEACEFUL GALAXY"
sprites: [ 1, 2, 3, 19, 20, 21, 22 ]
next: 2
track: 1
2:
title: "The attack"
sprites: [ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 ]
next: 3
3:
title: "IT'S TIME TO PAY!"
next: 4
4:
title: "A deep hole"
canontitle: "Pink obscene looking lever"
sprites: [ 42, 43, 44, 45, 46, 54, 70, 71 ]
next: 9 # O_o
track: 2
lives: null
5:
title: "Try again"
next: 34
6:
title: "Falling"
sprites: [ 40, 56, 57, 58, 59 ]
next: 7
7:
title: "KERSPLAT"
sprites: [ 61, 62, 63 ]
next: [ 8, 9 ]
8:
title: "MAKE A DECISION!"
sprites: [ 64, 65, 66, 67 ]
next: 8
9:
title: "Are you ready to take on the sunfish?"
next: [ 10, 25 ]
track: 4
10:
title: "Minefield"
next: [ 118, 68, 70 ]
track: 3
11:
title: "Press space in the air to fly"
next: 12
12:
title: "Flying power"
next: [ 83, 13 ]
track: 5
13:
title: "Time machine"
next: [ 21, 90 ]
track: 45
14:
title: "Selector the cutest"
next: [ 15, 18, 17, 16, 24 ]
15:
title: "WRONG ONE!"
next: 19
16:
title: "WRONG ONE! (2)"
next: 14
17:
next: 14
18:
next: 14
19:
next: 20
20:
next: 14
21:
title: "Over the next few minutes"
next: 14
track: 7
22:
title: "Flame throwere"
track: 10
23:
title: "Blasticate enter"
next: 22
track: 9
24:
title: "CORRECT!"
next: 23
25:
title: "Chess dimension"
next: 26
26:
title: "SATISFIED?"
next: 79
27:
title: "Collect the hearts"
next: [ 28, 97 ]
track: 10
28:
title: "Teleporting head"
next: 71
track: 8
29:
title: "Fuhrer"
next: 27
30:
title: "MAKE BEAKFEST NOW! (title)"
31:
title: "MAKE BEAKFEST NOW!"
track: 11
32:
title: "Mammy on enter"
33:
title: "Androids"
next: [ 5, 34 ]
track: 13
34:
title: "CAT"
35: # mime mission
title: "The speakeasy"
track: 12
36:
title: "Dr. Bob escapes"
track: 14
37:
title: "Dr. Bob's letter"
38:
title: "DEATH"
39:
title: "Dirt eating (title)"
40:
title: "Dirt eating"
41:
title: "Incidental screamer"
42:
title: "SWEET"
43:
#title: "Meet Glenda"
44:
title: "Glenda"
track: 15
45:
title: "Post-keytus"
46:
title: "Transition"
47:
title: "What are we made of?"
48:
title: "Nodraw heads"
track: 16
49:
title: "Eggspitch"
next: [ 54, 119 ]
track: 17
50:
title: "Milk"
next: 47
51:
title: "Glass"
next: 47
52:
title: "Mystical rock"
next: [ 57, 115 ]
53:
title: "Chew"
54:
title: "Pac-Man"
next: 53
track: 18
55:
title: "Lord squill"
next: 60
track: 48
56:
title: "Cry on enter" # Purple dungeon
next: 102
track: 20
57:
title: "Ram space"
58:
title: "Suburbia"
track: 19
59:
title: "Eggplant"
60:
title: "Eggplant (2)"
61:
title: "Vortex"
62:
title: "Trippy transition"
63:
title: "Trippy transition"
64:
title: "Trippy transition"
65:
title: "Trippy transition"
66:
title: "Trippy transition"
67:
title: "Trippy transition"
next: 96
68:
title: "Googly"
69:
title: "Space invaders"
next: [ 11, 12 ]
track: 21
70:
title: "Puking"
next: 13
track: 22
71:
title: "Ninja (level 1)"
72:
title: "Ninja (level 2)"
73:
title: "Ninja (level 3)"
74:
title: "Ninja (level 4)"
75:
title: "Ninja (level 5)"
76:
title: "Ninja (level 6)"
77:
title: "Ninja (level 7)"
next: 30
78: # unused ?!?!?!
title: "Ninja (level 8)"
next: null
79: # you can hit escape here and quit
title: "Zombie"
next: 11
80:
title: "Galaxy"
next: [ 93, 55 ] # RNG
81:
title: "Dungeon 1"
82:
title: "Dungeon 2"
83:
title: "The bird"
next: [ 81, 84 ]
track: 24
84:
title: "Snow golem"
85:
title: "Pogladontasaurus (title)"
86:
title: "Pogladontasaurus"
next: 13
track: 25
87:
title: "X munted points"
next: 29
track: 26
88:
title: "Mime's death"
next: [ 97, 89 ]
track: 27
89:
title: "Impossible bridge"
next: [ 95, 38 ]
track: 28
90:
title: "Ice cream"
track: 29
91:
title: "Winkywollyapocaloptagon"
next: 94
track: 30
92:
title: "Mercury"
next: 21
track: 34
93:
title: "Sad body morpher"
next: [ 21, 38 ]
track: 31
94:
title: "Dog head launchers"
next: [ 80, 116 ]
track: 32
95:
title: "Falling frog"
next: [ 38 ]
track: 33
96:
title: "Air ship"
next: [ 121, 111 ]
track: 35
97:
title: "Spider"
next: 38
98:
title: "Berzerk (level 1)"
track: 40
99:
title: "Berzerk (level 2)"
track: 40
100:
title: "Blue's wasteland"
track: 36
101:
title: "Mineshaft"
track: 41
102:
title: "Bunny alien"
103:
title: "Lab entrance"
track: 37
104:
title: "Dr. Bob's lab (level 1)"
track: 38
105:
title: "Dr. Bob's lab (level 2)"
track: 38
106:
title: "Dr. Bob's lab (level 3)"
track: 38
107:
title: "Dr. Bob's lab (level 4)"
track: 38
108:
title: "Cybersunfish boss"
109:
title: "CONGRATULATIONS!"
110:
title: "End"
next: 0
track: 39
111:
title: "UFO"
next: 120
112:
title: "Sea of fools"
next: 57
track: 42
113:
title: "ARF ARF!!"
next: 57
track: 46
114:
title: "Seizure"
next: 98
track: 49
115:
title: "Seal lord"
next: [ 113, 57 ]
track: 44
116:
title: "Pumpkin blunt"
next: 18
117:
title: "Eggspitch's fight"
next: [ 11, 12 ]
track: 42
118:
title: "Bridge"
next: [ 117, 11 ]
119:
title: "Eggspitch's mission"
next: 112
track: 43
120:
title: "Middle finger"
next: 98
121:
title: "Untitled"
next: 98
track: 47
...
import {
'readFileSync' as read, 'readdirSync' as readdir, 'rmSync' as rm, 'existsSync' as exists,
'copyFileSync' as copy, 'mkdirSync' as mkdir, 'rmdirSync' as rmdir
} from 'fs';
import {parse} from 'yaml';
import {$, sleep, sleepSync, spawn, spawnSync, which} from 'bun';
function rimraf(...ff) { // --no-preserve-root
ff.forEach(async f=>{
try {
if (exists(f))
rm(f, { recursive: true, force: true });
if (exists(f))
rmdir(f, { recursive: true, force: true });
} catch (e) {
console.log(e);
await $`rm -rf ${f}`.quiet();
// why
}
});
}
function safefn(fn) {
return (fn ?? "").replace(/[\?:"\/]/g,s=>({"?":"?",":":":",'"':""","/":"⧸"}[s]));
}
var cat = parse(read('Catalog.yml').toString().replaceAll(/\t+/gmi,a=>' '.repeat(a.length)), false, {merge: true});
rimraf("0Dogg/","0Dsrc/","0Dmiss/");
mkdir("0Dogg/", {recursive: true});
mkdir("0Dsrc/", {recursive: true});
mkdir("0Dmiss/", {recursive: true});
if (true)
for (var [name,sound] of Object.entries(cat.sounds)) {
var nick = safefn(sound.nick ?? "");
if (nick.length > 0)
nick = " - "+nick;
var src = "0D/" + name + ".wav";
var level = cat.levels[Array.isArray(sound.level) ? sound.level[0] : sound.level] ?? {title: "???"};
console.log(name,sound,level.title);
var fmt = "ROTSF SFX - Level "+(sound.level ?? "unknown")+" - "+safefn(level.title ?? "Unnamed")+" - "+name+nick;
await $`ffmpeg -hide_banner -i ${src} -c:a libvorbis -qscale:a 3 -map_metadata -1 -fflags +bitexact ${{raw: Array.isArray(sound.reallen)?("-ss "+(sound.reallen[0])+" -to "+(sound.reallen[1])):""}} ${{raw: !isNaN(sound.realrate)?("-ar "+sound.realrate):""}} ${"0Dogg/"+fmt+".ogg"} -y`.quiet();
copy(src,"0Dsrc/"+fmt+".wav");
}
var cs = Object.keys(cat.sounds), missing = readdir("0D").
filter(ss=>(/\.wav$/.test(ss))).map(s=>s.slice(0,-4)).filter(ss=>!(cs.includes(ss)));
console.error("missing sounds:");
for (var s of missing) {
var fmt = "ROTSF SFX - Unknown or uncaught - "+s;
console.error(s);
await $`ffmpeg -hide_banner -i ${"0D/"+s+".wav"} -c:a libvorbis -qscale:a 3 -map_metadata -1 -fflags +bitexact ${"0Dogg/"+fmt+".ogg"} -y`.quiet();
copy("0D/"+s+".wav","0Dmiss/"+s+".wav");
copy("0D/"+s+".wav","0Dsrc/"+fmt+".wav");
}
//console.error("missing sounds:",missing.join(", "));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment