file_id.diz
rem ------------------------------------------------------------------------------
rem --- 6/4/2025 Demo Graphics IDE
rem ------------------------------------------------------------------------------
rem --- Edit Display List graphics and sprite animation
rem --- bw switch/shiftlock - starts editor and loads 1st sprite frame
rem --- button: edit sprite pixels and background graphics.
rem --- button + right/left: step thru sprite frames (frame marker at bottom)
rem --- down + button: clones prior sprite as template (animation ctrl)
rem --- up + button: change sprites row colors (hex code indicator on left)
rem --- up/down/left/right: position cursor to edit sprite pixels,
rem --- and explore amd edit display list graphics.
rem ---------------------------------------------------------------
rem --- Inertia Zone Demo with interactive user mode (joystick)
rem --- Pick up tile mapped friends to experience each zones different inertia.
rem --- Demo switches between 30 and 60 Hz (25 and 50 Hz on PAL),
rem --- when the music slows down the animation becomes crystal clear via MBR.
rem --- Then liquid plasma is displayed aided by MBR,
rem --- then the music speeds up again and animation has a pleasant blur without MBR.
rem ---------------------------------------------------------------
rem ----------------------------------------------------------------
rem ---20231221 Inertia Zones ---
rem ----------------------------------------------------------------
rem --- Inertia: Game idea travel thru inertia pickup zones each with different physics
rem --- pickup your tilemapped friends in each quickly moving pickup zone
rem --- "inertia zones" add horizontal or vertical directional currents based on scrolling direction (up/down/left/right)
rem --- todo for the sequel: Diagonal zone with cross inertia.
rem --- 4AB - switch every level MBR & MB with DLIs
rem -------------------------------------------------------------------------------------------------
rem -------------------------------------------------------------------------------------------------
rem ---- SuperCharger BASIC program for Atari 2600 and Commodore 64
rem ---- Download SuperCharger BASIC https://RelationalFramework.com/
rem -------------------------------------------------------------------------------------------------
rem -----------------------------------------
rem ---init section, runs once: -------------
rem -----------------------------------------
grabinit
score=1:g=0:scrollvirtualworldtoggle=1
l=0
rem comment next line for SuperCharger:
rem a=0:gosub loadvirtualworld:rem loads virtualworld into RAM, required for Flashback BASIC (CBS RAM)
COLUBK=15
rem lost player colors under flashback BASIC
rem data xplayer0colors $c2,$c2,$D2,$d2,$b2,$b2,$a2,$a2,$A1
data xrowcolors $42,$42,$42,$42,$c4,$c4,$c4,$b6,$b6,$42
for e=0 to 9:rowcolors(e)=xrowcolors(e):next e
rem for e=0 to 7:player0colors(e)=xplayer0colors(e):next e
rem SUPERCHARGERID=0:rem this is the Operating System so it is now always 0... rem=3 can be anywhere usually in the init, set to zero for testing (supercharger security)
loadplayer1(0)
COLUP1=$98:rem FE
rem NA below - this is already init to 15 below line 0 setup
rem MUSICINDEX=0:rem 20200904 SuperCharger var may be reset on reload and actively loaded! init for button load transition delay...
rem -------------------------------------------------------------------------------------------------------------------------------
e=29:f=5:player0x=30:player0y=30:rem player0colors(0)=$c1
rem CXCLR=0
rem DisplayList3Shadow(119)=48:DisplayList3Shadow(118)=48
rem DisplayList3Shadow(154)=48
rem ------------------------------------------------
rem end init section (implicit return)--------------
rem ------------------------------------------------
rem -- variable map:------------------------------
rem freed l, using MUSICINDEX for toggle switching display modes instead of each level
rem t = timer 0/1 used to seed display lists
rem g = 1 after setup (setup var), 2 if button is pressed
rem r = musical algorythm variable
rem !Sound bug using r in kitchensink event setting color ram backbuffers
rem score = level 2,3,4 create different instrument sets for the SID [C64 only]
rem Interesting feature, enhanced sound algorithm...
rem h,u,w - BITIndex for different DLI zones
rem x,y,v,s,z -
rem e,f - tilemapped sprites virtual world coordinates
rem i,j - joy direction
rem ----------------------------------------------
rem ------------------------------------------------
rem ---gameloop subroutine, runs every frame: ---
rem ------------------------------------------------
if SWCHB|%11110111=247 then goto charactereditor
hookgameloop1
if t<>0 then goto tisnot0
if f=17 then vwpixel(e,f,bindplayer1)
rem gosub getpetscii2
scrollvirtualworldtoggle=35:gosub DLI:goto tisnot1: rem run this DLI every other frame
tisnot0
rem if t=1 then
gosub getpetscii3
BYTErowoffset=v*12:h=BITIndex:BITIndex=u::scrollvirtualworldtoggle=30:gosub DLI:BITIndex=h:BYTErowoffset=120
tisnot1
scrollvirtualworldtoggle=0
1 if g=0 then BYTErowoffset=120:COLUPF=$64:COLUP0=$b4:MUSICINDEX=0:gosub grabinit:g=1
rem ---setup complete---
if g=2 and joy0fire=0 then g=1
rem --- caught tile mapped item
if CXPPMM & 128<>128 then COLUBK=0:goto skiphit: rem bit7 detects player0 and player1 sprite collision
CXCLR=0
COLUBK=2
rem scrollvirtualworldtoggle=1:rem dynamic color RAM 20250421
rem alread on for 30 Hz/25 Hz mode with Display list calls!
gosub increasescore:gosub colorcycle
player0x=0:rem MUSICINDEX=10
if f=18 then goto set18
if e=22 then f=18:e=20:COLUP1=$54:goto skiphit
if f=5 then f=17:e=22:COLUP1=$86:goto skiphit
set18
e=29+w:f=5:COLUP1=$32
skiphit
return
rem ---- 20250422 Sound enhancement C64 only levels 2,3,4 have different Instrument set ADSR
rem ---- changes 32 instrument orchestra ----
rebuildsid456a rem 20241002 rebuild instrument defintions - sounds better
for bx=0 to 32
rem SID4(bx)=SID4(bx)+2:rem SID4(bx)=SID4(bx)&%11110111:mask squelch off
rem rem rem test squelch, interesting not 100% effective SID4(bx)=SID4(bx)^%00001000
rem SID5(bx)=SID5(bx)+2
rem SID6(bx)=SID6(bx)+2
rem next bx
rem rem DisplayList3Shadow(154)=DisplayList3Shadow(154)+1
return
rebuildsid456b rem 20241002 rebuild instrument defintions - reverse direction
rem for bx=0 to 32
rem SID4(bx)=SID4(bx)-2:rem SID4(bx)=SID4(bx)&%11110111
rem SID5(bx)=SID5(bx)-2
rem SID6(bx)=SID6(bx)-2
rem next bx
rem rem DisplayList3Shadow(154)=DisplayList3Shadow(154)-1
return
buttonpressed rem --------------
rem if joy0up=1 then gosub rebuildsid456a:return
rem if joy0down=1 then gosub rebuildsid456b:return
rem releasing button inc's var1 - 11...
rem if joy0left=1 then goto editpetscii
if joy0right=1 then gosub rebuildmusic:return
rem -----------------------------
rem test gosub increasescore:rem use algorithm
return
editpetscii
rem top pescii buffer
rem if player0y>50 then petscii3(3)=petscii3(3)+1:return
rem bottom
rem if player0y<20 then petscii(2)=petscii(2)+1:petscii(4)=petscii(4)+1:petscii(0)=petscii(0)+1:return
rem middle buffer, 2 elements
rem petscii2(3)=petscii2(3)+1: petscii2(2)=petscii2(2)+1
rem return
increasescore
score=score+1
rem C64 ADSR instrument set variations based on score:
rem if score=2 then gosub rebuildsid456a:gosub rebuildsid456a:rem gosub changerefresh
rem if score=4 then gosub rebuildsid456a:gosub rebuildsid456a
rem if score=3 then gosub rebuildsid456a
rem if score=5 then gosub rebuildsid456a
rem reverse instrument algorithms and repeat
if score=11 then score=0:return
rem if score>4 then gosub rebuildsid456b:rem reverse ADSR algorithm
return
colorcycle
rem if MUSICINDEX>40 or t=0 then return:rem roll dice
if MUSICINDEX<210 or by=0 then return:rem roll dice
for r=0 to 9
rowcolors(r)=rowcolors(r)+1:rem 17
next r
return
changerefresh
rem freeing l...
rem l=1-l:rem refreshrate scripting command for scrollvirtualworld
if MUSICINDEX>160 then scrollvirtualworldtoggle=1 else scrollvirtualworldtoggle=0
return
hookgameloop2
t=1-t
rem 2x slow playback:
rem 20210208 SUSTAINFORFRAMES=SUSTAINFORFRAMES+t:goto variableplaybackspeed
rem if player0y>100 and 1=1 then SUSTAINFORFRAMES=SUSTAINFORFRAMES+t:goto variableplaybackspeed
rem 20201013 4x slow playback:
rem 20250502 if t=0 then r=1-r:SUSTAINFORFRAMES=SUSTAINFORFRAMES+r else SUSTAINFORFRAMES=SUSTAINFORFRAMES+t
variableplaybackspeed
if BITIndex>71 then BITIndex=255:rem overflows to 0 as intended, avoids off by 1
rem --- change color of words!
rem if h>36 then goto changewordcolor
rem for j=0 to 3:rem rowcolors(j)=$58:rem next:rem rowcolors(9)=$58
rem goto donechangewordcolor
changewordcolor
donechangewordcolor
if x=255 then x=71
if t<>0 then goto tnot0 else z=1-z:x=x-z:BITIndex=BITIndex+1:h=BITIndex:BITIndex=x
if f=18 then vwpixel(e,f,bindplayer1)
rem scrollvirtualworldtoggle=8:gosub DLI:scrollvirtualworldtoggle=l:BITIndex=h:return: rem else COLUPF=100
rem use MUSICINDEX to determine graphics mode
rem gosub getpetscii
scrollvirtualworldtoggle=8:gosub DLI:gosub changerefresh:BITIndex=h:return: rem else COLUPF=100
tnot0
rem animate character sprite
if s>56 then s=0
rem byterowoffset is 120 for 1st DL
w=w+1
if w<>3 then goto wnot3
loadplayer0(s)
rem g=s+40:loadplayer1(g)
rem loadplayer1upsidedown(s)
s=s+8:h=BITIndex:BITIndex=u:w=0:v=v+1:BYTErowoffset=v*12
if f=5 then vwpixel(e,f,bindplayer1)
rem 20250421 f=17 load is free ....
rem deprecated using kitchensink if f=17 then gosub colorcyclecolorRAMtop
rem scrollvirtualworldtoggle=3:gosub DLI:scrollvirtualworldtoggle=l:BITIndex=h:return
rem gosub getpetscii3
scrollvirtualworldtoggle=3:gosub DLI:gosub changerefresh:BITIndex=h:return
wnot3
if v>10 then v=0:u=u+20:rem SUSTAINFORFRAMES=4
if u>60 then u=19
rem rem 20231221 player0y=player0y+1:player0x=player0x+1
rem BITIndex=h:rem preserved
BYTErowoffset=120
rem debug this j=2:i=2:rem park mode
if joy0down=1 then j=0
if joy0up=1 then j=1
if joy0left=1 then i=0:REFP0=255
if joy0right=1 then i=1:REFP0=0
rem if joy0down=1 then player0y=player0y-2
rem if joy0left=1 then player0x=player0x-3
rem reverse direction when hitting a wall
if i=0 and player0x<5 then i=1:REFP0=0
if j=0 and player0y<12 then j=1
if i=1 and player0x>162 then i=0:REFP0=255
if j=1 and player0y>94 then j=0
rem add inertia for zone (experimental):
rem -----------------------------------------
rem debug:
rem if player0y>50 then COLUBK=1 else COLUBK=0:rem vwpixel(3,3,flip)
if player0y>50 then player0y=player0y+1:goto abovefifty
rem 50 or below, check for horizontal inertia
rem this handles both lower zones (horizontal inertia in different directions)
if player0y>22 then player0x=player0x-2 else player0x=player0x+2
rem ------------------------------- Inertia zone currents end
abovefifty rem top zone
if i=0 then player0x=player0x-3
if i=1 then player0x=player0x+3
if j=0 then player0y=player0y-2
if j=1 then player0y=player0y+2
rem -- Navigate Directory in SuperCharger File System:
rem -------------------------------------------------------------------------------------------------
rem ------------ LOAD one of 3 6K SuperCharger games depending upon which zone the button is pressed!
rem -------------------------------------------------------------------------------------------------
if joy0fire=1 and g=1 then g=2:gosub buttonpressed:rem debug/SID 4,5,6 algorithm testing feature
rem not in use:
rem if joy0fire=0 or MUSICINDEX<40 then goto skipLoad:rem basing delay on what has been initialized here :)
rem ---superchargerindex of program to be loaded by SuperCharger ISAM file system
rem if player0y<=26 then SUPERCHARGERINDEX=3:goto loadmenu:rem --- modular program1
rem if player0y<=56 then SUPERCHARGERINDEX=2:goto loadmenu:rem --- modular program2
rem SUPERCHARGERINDEX=1:rem default ----
rem --------------------------
loadmenu rem load
rem load can also be overloaded with an argument, examples:
rem i=5:load i
rem load 5
rem load $a
skipLoad
rem ---------------------------------------------------------------------
return
charactereditor
t=1-t
if g<>0 then return:rem charactereditor initializes g to 0 after setup (reverse of demo/game)
rem top blank
return
rem --------------------------------------------------------------------------------------
getcharl rem based on l, character frame to screen ---------------------------------------
rem --------------------------------------------------------------------------------------
rem clear area:
for bx=0 to 15:for by=0 to 9:vwpixel(bx,by,on):vwpixel(bx,by,flip):next by,bx
m=l+7
loadplayer0(l)
n=1
rem map bitmap character at lms l to bitmap virtualworld (big char to edit)
for bx=l to m:virtualworld(n)=sprites(bx):n=n+12:next bx
rem map sprite colors (fix one off) to large sprite bitmap on virtualworld
n=6
for bx=0 to 6
rowcolors(bx)=player0colors(n)
n=n-1
next bx
rowcolors(9)=player0colors(7)
scrollvirtualworldtoggle=1
return
flipcharpix
rem vwpixel(x,y,flip)
rem mirror change on sprite:
if x>15 or y>7 then return:rem allow edits to virtualworld beyond character staging
j=l+y
k=y*12
k=k+1
sprites(j)=virtualworld(k)
loadplayer0(l)
return
hexcolordisplay rem --- display color list values using hexidecimal alphanumerics
rem if alt frame move hex alphanumeric over 8 px
if y=0 then n=rowcolors(9) else m=y-1:n=rowcolors(m)
vwpixel(t,y,bindplayer1)
if t=1 then goto otherhexdigit
rem first nybble of byte:
rem this takes 19 bytes less in asm: lda n: lsr: lsr: lsr: lsr: sta n
n=n&%11110000:n=n/16
goto donehexdigits
otherhexdigit
rem second nybble of byte:
n=n&%00001111
player1x=player1x+1
donehexdigits
n=n*8:n=n+64:rem 0 character sprite is at 64 in the sprite library
loadplayer1(n)
rem ?? if y=0 then COLUP1=rowcolors(9) else n=y-1:COLUP1=rowcolors(n)
COLUP1=$56
return
cloneframe rem ----- clone bitmap of prior sprite frame as template for animation
if s=0 and joy0fire=1 and joy0down=1 then s=1 else return
i=l-8
for j=i to l
k=j+8
sprites(k)=sprites(j)
next j
gosub getcharl:rem load cloned bitmap
return
scrollleft
rem ---- scroll panoramic for editing bitmap virtualworld:
if x-BITIndex=0 and x>0 then BITIndex=BITIndex-1:scrollvirtualworldtoggle=1
rem page up/down in panoramic bitmap image:
if y=10 and BYTErowoffset=0 then BYTErowoffset=120:scrollvirtualworldtoggle=1
if y=9 and BYTErowoffset=120 then BYTErowoffset=0:scrollvirtualworldtoggle=1
rem return
rem -------------------------------------------------------------
rem end game loop (implicit return)-----------------
rem -------------------------------------------------------------
rem -------------------------------------------------------------
rem ---gameloop2 subroutine, runs every frame: --
rem ------------------------------------------------
if SWCHB|%11110111=247 then goto charactereditor2
goto hookgameloop2
rebuildmusic
rem create new musical score:"
for r=0 to 255
if r=44 or r=74 or r=159 or r=229 then goto skipnote
d=MusicData(r)&%00011111
MusicData(r)=d+3:rem 3
skipnote
next r
rem DisplayList3Shadow(119)=DisplayList3Shadow(119)+1
r=0:rem restore r variable to 0 state, used for music bug (extended sound dilation) and sound dilation
rem if DisplayList3Shadow(119)=58 then DisplayList3Shadow(119)=48:DisplayList3Shadow(118)=DisplayList3Shadow(118)+1
return
rebuildmusic2
rem create new musical score:"
rem for r=0 to 255
rem if r=44 or r=74 or r=159 or r=229 then goto skipnote2
rem d=MusicData(r)&%00001111
rem MusicData(r)=d+5:rem 3
skipnote2
rem next r
rem DisplayList3Shadow(119)=DisplayList3Shadow(119)+1
rem r=0:rem restore r variable to 0 state, used for MUSIC DURATION AND MUSIC EXTENDED DURATION BUG
rem if DisplayList3Shadow(119)=58 then DisplayList3Shadow(119)=48:DisplayList3Shadow(118)=DisplayList3Shadow(118)+1
rem MUSICINDEX=0
return
charactereditor2
rem --- char editor variable map:
rem --- l - character frame
rem --- g setupvar (reversed for kickout init returning from editor)
rem --- r,s button released, stick released while button pressed
rem --- x,y tile coordinates for player sprite cursor (editor on editor)
rem setup [when g!0]
if g>0 then g=0:BITIndex=0:BYTErowoffset=0 else goto donecharsetup
rem C64 petscii:
rem BackgroundTileCharacters(0)=111
rem BackgroundTileCharacters(1)=111
rem BackgroundTileCharacters(2)=32
rem BackgroundTileCharacters(3)=32
l=0:r=0:gosub getcharl:rem get first character frame
x=8:y=0:rem cursor upper left
t=0
donecharsetup
if r=1 and joy0left=0 and joy0fire=0 and joy0right=0 and joy0up=0 and joy0down=0 then r=0:s=0:goto skipctrls
if r=0 and joy0right=1 then x=x+1:r=1
if r=0 and joy0left=1 then x=x-1:r=1
if r=0 and joy0up=1 then y=y-1:r=1
if r=0 and joy0down=1 then y=y+1:r=1
rem ---edit panoramic virtualworld scroll to right when edge is reached:
if x-BITIndex=19 and x<91 then BITIndex=BITIndex+1:scrollvirtualworldtoggle=1
gosub scrollleft
if r=0 and joy0fire=1 then r=1:vwpixel(x,y,flip):gosub flipcharpix
rem holding button and pressing right? advance to next frame
rem edit advance next frame
if s=0 and joy0fire=1 and joy0right=1 then s=1:j=l/8:vwpixel(j,9,flip):l=l+8:gosub getcharl:return
rem edit advance prior frame
if s=0 and joy0fire=1 and joy0left=1 then s=1:j=l/8:vwpixel(j,9,flip):l=l-8:gosub getcharl:return
if s=0 and joy0fire=1 and joy0up=1 then s=1:gosub adjustcolor:return
gosub cloneframe:rem sprite character may be templated from prior sprite
skipctrls
vwpixel(x,y,bindplayer0):set sprite as cursor to edit large sprite image
j=l/8
vwpixel(j,9,on):rem marker character frame position
gosub hexcolordisplay
SUSTAINFORFRAMES=SUSTAINFORFRAMES+t
return
adjustcolor
n=7-y
rem increase or decrease:
player0colors(n)=player0colors(n)+17
gosub getcharl
return
rem C64 declare multiple petscii tilemap buffers
getpetscii
getpetscii1
rem if score<4 then goto getpetscii4
rem BackgroundTileCharacters(0)=petscii(0)
rem BackgroundTileCharacters(1)=petscii(1)
rem BackgroundTileCharacters(2)=petscii(2)
rem BackgroundTileCharacters(3)=petscii(3)
rem return
getpetscii2
rem if score<6 then goto getpetscii4
rem BackgroundTileCharacters(0)=petscii2(0)
rem BackgroundTileCharacters(1)=petscii2(1)
rem BackgroundTileCharacters(2)=petscii2(2)
rem BackgroundTileCharacters(3)=petscii2(3)
rem return
getpetscii3
rem if score<2 then goto getpetscii4
rem BackgroundTileCharacters(0)=petscii3(0)
rem BackgroundTileCharacters(1)=petscii3(1)
rem BackgroundTileCharacters(2)=petscii3(2)
rem BackgroundTileCharacters(3)=petscii3(3)
rem return
getpetscii4
rem BackgroundTileCharacters(0)=32
rem BackgroundTileCharacters(1)=32
rem BackgroundTileCharacters(2)=32
rem BackgroundTileCharacters(3)=32
return
petscii texture map C64:
rem data petscii 209,230,208,208
rem pattern
rem data petscii2 121,121,121,121
rem parallel lines
rem data petscii3 205,206,206,205
rem diagonal fence pattern
rem -------------------------------------------------------------
rem end gameloop2 (implicit return)-----------------
rem ------------------------------------------------
rem -------------------------------------------------------------
rem ---KITCHENSINK subroutine, runs when scrollvirtualworldtoggle=1
rem -------------------------------------------------------------
rem kitchensink
by=1-by
SUSTAINFORFRAMES=SUSTAINFORFRAMES+by
if SWCHB|%11110111=247 then goto charactereditorKS
gosub hookgameloop1
gosub hookgameloop2
rem gosub increasescore
gosub colorcycle
rem - jump over playfield Camera LMS tp preserve display list zones:
rem thislabel goto thislabel+5:rem SuperCharger BASIC can jump 5 bytes fwd on Atari
rem missing in C64 SuperCharger BASIC so... esacping to Assembly as:
"fw6 bvc fw6+5"
charactereditorKS rem --------------character frames editor
rem character frames editor does not jump over renderer to preserve DLI zones
rem --------------------------------------------------------------------
rem end kitchensink events----------------------------------------------
rem --------------------------------------------------------------------
virtualworld
....................................................................xxx.....................
......................XXXXXXXXXXXXX.................................x.......................
.....................XX............X................................xxx.....x...............
.....................XX..XXXXXXXXX.XX.................................x.x.x.x...............
.....................xX..xxx...XXx.xx..XXXXx..X............XX.XXX..X.xx..X..xxx.............
.....................xX.XXxX...XXX.xx..XX..X.X.X...........X.XX.X.X.X....X..................
.....................xX.XXXXXXXXXXXxx..XXXXx.xxX..X...x....X.XX.X.XXX....X..x.X.............
.....................xX................Xx....x.x..Xx.xxx..xX....X.X.X.......xxx.............
......................XXXXXXXXXXxXxx...XX....x.x..x...X.X.XX....X.X.X.......................
..........................XXXXXXXXxx...Xx....x.x..x...x.xXXX....X.X.X....xx.xxX.............
..........................................................X..............x.x..x.............
........................................................XXX..............x....x.............
............................................................................................
............................................................................................
............................................................................................
.XXXxX.xXXX.XXX.X.X.x.xx.xXXX..XX..XXX.XXX.XXX...XXX.X...X..X.X..X..X.X...XXXxX.xXXX.XXX.X.X
.XxxxX..xX..X...XX..x.xx.xXxx...X..X.X.X.X.XX....XXX.X..XXX..X..XXX.XXX...Xxxxx..xX..X...XX.
.XXx...xXXX.XXX.X.X.xxXx.xX.....XX.XXX.X.X.XXX...X...XX.X.X..X..X.x.X.X...XXX...xXXX.XXX.X.X
x.x.x.x.x.x.x.x.x.xX.X.X.X.X.X.X.X.X.X.XxX.X.X.XxX.X.XxX.X.XxX.X.X.X...XxX.X.X.X.X.X.X.X.X.X
.x.x.x.x.x.x.x.x.x..X.X.X.X.X.X.X.X.X.XxXxX.X.XxXxX.XxXxX.XxXxX.X.X.X.X.X.X.X.X.X.X.X.X.X.X.
player0colors $c3,$c1,$D1,$d1,$b1,$b1,$a1,$a1
rowcolors $42,$42,$42,$42,$c4,$c4,$c4,$b6,$b6,$42
sprites
0
........
.XX.....
X.....X.
X.....XX
.XXXXX..
.XX..X..
X.....X.
........
8
........
.X......
X.X...X.
X.....XX
.XXXXX..
.XX..X..
.X...X..
........
16
........
.XX.....
X.....X.
X.....XX
.XXXXX..
.X...X..
..X.X...
........
24
........
.X...X..
X....XXX
X..XXX..
.XXXXXX.
.X...X.X
..X.X...
........
32
........
XX....X.
X.....XX
XX.XXX..
.XXXXXXX
.X...X..
XX....X.
........
40
........
XX...X..
X....XX.
X..XXX..
.XXXXXXX
.XX..X..
..X...X.
..X.....
48
........
.....X..
XX...XX.
X...XX..
X.XXXXXX
XXXXXX..
..XX..X.
..XX....
56
........
....XX..
....X...
..XXXX.x
..xXX.X.
x..XXX..
.xX...x.
.....x..
64
xxxxxxxx
xx....XX
Xx....XX
XX....xx
xxxx..xx
Xxxx..XX
Xxxx..xx
xxxxxxxx
56x
..xxx...
.xxxx...
..xxx...
..xxx...
..xxx...
.xxxxx..
.xxxxx..
.xxxxx..
64
........
xxxxxxxx
......xx
......xx
xxxxxxxx
xxxx....
xxxx....
xxxxxxxx
72
xxxxxxx.
......x.
......x.
......x.
xxxxxxxx
......xx
......xx
xxxxxxxx
80
xx......
xx......
xx......
xx...xx.
xxxxxxx.
.....xx.
.....xx.
.....xx.
88
........
xxxxxxxx
xx......
xx......
xxxxxxxx
....xxxx
....xxxx
xxxxxxxx
96
........
xxxxxxxx
xx....xx
xx......
xxxxxxxx
xx....xx
xxxx..xx
xxxxxxxx
104
xxxxxxxx
xxxxxxxx
xx...xxx
....xxx.
...xxx..
...xxx..
...xxx..
...xxx..
112
.xxxxxx.
.x....X.
.x....X.
XXxxxxxx
xx....xx
Xxxx..XX
Xxxx..xx
xxxxxxxx
120
xxxxxxxx
x.....xx
x....xxx
xxxxxxxx
......xx
......xx
......xx
......xx
xxxxxxx.
xx....X.
xx....X.
XXxxxxxx
xx....xx
Xx....XX
Xx....xx
xx....xx
xx......
xx......
xx......
XXxxxxx.
xx....xx
Xx....XX
Xx....xx
xxxxxxx.
........
........
........
.Xxxxxx.
xx......
Xx......
Xx......
.xxxxxx.
......xx
......xx
......xx
.Xxxxxxx
xx....xx
Xx....XX
Xx....xx
.xxxxxxx
xxxxxxx.
xx......
xx......
XXxxxxx.
xx......
Xx......
Xxxxxxx.
xxxxxxx.
xxxxxxx.
xx......
xx......
XXxxxxx.
xx......
Xx......
Xx......
Xx......
xxxxxxx.
xx....x.
xx......
XX......
xx..xxx.
Xx...xx.
Xxxxxxx.
xxxxxxx.
chiptunes
6,27,6,13,8
6,27,6,13,8
6,24,6,20,8
6,24,6,20,8
6,22,6,22,8
7,22,4,16,8
6,22,6,22,8
6,22,6,22 ,8
6,24,6,20,8
6,24,6,20,8
6,13,6,27,12
7,22,4,16,16
12,26,12,26,16
12,26,12,26,8
12,23,12,11,8
12,23,12,2,8
12,17,12,17,8
0,0,0,0,16
0,0,0,0,16
AIR
HEAD
4,31,12,23,8
4,31,12,23,8
4,20,12,1,32
4,23,12,23,8
4,24,12,24,8
4,27,12,27,8
4,24,12,24,8
4,27,12,18,8
4,27,12,18,4
4,27,12,18,4
4,27,12,18,8
4,27,12,18,8
4,27,12,18,8
0,0,0,0,16
6,27,6,13,8
6,27,6,13,8
6,24,6,20,8
6,24,6,20,8
6,22,6,22,8
0,0,0,0,16
6,22,6,22,8
6,22,6,22,8
6,24,6,20,8
6,24,6,20,8
6,13,6,27,12
MOON
PTRL
4,31,4,5,8
0,0,0,0,8
4,17,4,8,8
4,17,4,8,8
4,19,7,30,8
4,19,7,30,8
4,23,4,14,8
4,23,4,14,8
4,19,4,4,8
4,31,4,5,8
0,0,0,0,8
4,17,4,8,8
4,17,4,8,16
4,19,7,30,8
4,23,4,14,16
4,19,4,4,24
RPT
0,0,0,0,32
0,0,0,0,0