[stella] Psst! Hey, buddy, wanna buy a scroller?

Subject: [stella] Psst! Hey, buddy, wanna buy a scroller?
From: Christopher Tumber <christophertumber@xxxxxxxxxx>
Date: Thu, 02 Jan 2003 17:17:19 -0500
A little rough, but only lightly used...


This is a playfield scroller, similar to the one in Vanguard so it's a little jerky. I had originally intended it to become a smooth scroll, but that's not really practical with this implementation and I've since come up with a better, smooth scroll. My previous post about uselessness elicited some pretty good ideas so rather than just relegating this to the trash heap...


It's tile based. Each tile is half a screen in width. Look for "TileList:" this is the list of tiles to be shown. Tiles are numbered from 0 to 20 and are illustrated in the attached ScrollTiles.txt (Use a fixed font).

Tiles are grouped according to where their left edge starts (low, middle, high) and where their right edge ends (low, middle, high) so that tiles can be strung together to create a smooth terrain.

The scroll is inverted for the top of the screen, and a combined image is used in the center of the screen. The effect is similar to a Gradius or Salamander/Lifeforce type game. (The middle image can easily be removed, my intention was to only have it present at certain times...)

There's also a little ship you can move around..

Code is uncommented but should be reasonably straightforeward and I generally use relevant variable names. It's not really optimised or tidied so there may be some extraneous code and whatnot. (The scroller does eat a pretty good chunk of RAM too)



Chris... 
	processor 6502
	include vcs.h

    SEG.U   variables
      org $80

CurrentTilePosition .byte
FirstTilePointer1   .word
FirstTilePointer2   .word
FirstTilePointer3   .word
SecondTilePointer1  .word
SecondTilePointer2  .word
SecondTilePointer3  .word

scrollposition .byte
pausecounter  .byte
temp .byte

playerY .byte

Column1Line1 .byte
Column1Line2 .byte
Column1Line3 .byte
Column1Line4 .byte
Column1Line5 .byte
Column1Line6 .byte
Column1Line7 .byte
Column1Line8 .byte
Column2Line1 .byte
Column2Line2 .byte
Column2Line3 .byte
Column2Line4 .byte
Column2Line5 .byte
Column2Line6 .byte
Column2Line7 .byte
Column2Line8 .byte
Column3Line1 .byte
Column3Line2 .byte
Column3Line3 .byte
Column3Line4 .byte
Column3Line5 .byte
Column3Line6 .byte
Column3Line7 .byte
Column3Line8 .byte
Column4Line1 .byte
Column4Line2 .byte
Column4Line3 .byte
Column4Line4 .byte
Column4Line5 .byte
Column4Line6 .byte
Column4Line7 .byte
Column4Line8 .byte
Column5Line1 .byte
Column5Line2 .byte
Column5Line3 .byte
Column5Line4 .byte
Column5Line5 .byte
Column5Line6 .byte
Column5Line7 .byte
Column5Line8 .byte
Column6Line1 .byte
Column6Line2 .byte
Column6Line3 .byte
Column6Line4 .byte
Column6Line5 .byte
Column6Line6 .byte
Column6Line7 .byte
Column6Line8 .byte



    SEG     Bank0

	org $F000


Start

;	SEI  ; Disable interrupts, if there are any.
;	CLD  ; Clear BCD math bit.

	LDX  #$FF
	TXS  ; Set stack to beginning.

;	LDA #0
;B1    STA 0,X
;	DEX
;	BNE B1

      lda #0
      sta CurrentTilePosition
      lda #130
      sta playerY
      lda #20
      sta scrollposition
      lda #40
      sta pausecounter

      lda #0
      sta CTRLPF
      STA COLUBK
      lda #$1c
      STA COLUPF  

;Setup Tile Table In Ram
      ldx #7
nextsetuptiles:
      lda #0 ;Tile1C1,x
      sta Column1Line1,x
      lda #0 ;Tile1C2,x
      sta Column2Line1,x
      lda #0 ;Tile1C3,x
      sta Column3Line1,x

      lda #0 ;Tile2C1,x
      sta Column4Line1,x
      lda #0 ;Tile2C2,x
      sta Column5Line1,x
      lda #0 ;Tile2C3,x
      sta Column6Line1,x

      dex
      bpl nextsetuptiles      



DrawLogo

	LDX  #0
	LDA  #2

	STA  VSYNC ;Begin vertical sync.
	STA  WSYNC ; First line of VSYNC
	STA  WSYNC ; Second line of VSYNC.

	LDA  #41
	STA  TIM64T
	LDA #0
	STA CXCLR
	STA  WSYNC ; Third line of VSYNC.
	STA  VSYNC ; (0)

      sta HMCLR

      LDA #$80
      BIT SWCHA
      BEQ Right
      LSR
      BIT SWCHA
      BEQ Left
      LSR
      BIT SWCHA
      BEQ Down
      LSR
      BIT SWCHA
      BEQ Up
      jmp donemove

Right:
      lda #128+64+32+16
      sta HMBL
      jmp donemove
Left:
      lda #16
      sta HMBL
      jmp donemove
Up:
      inc playerY
      jmp donemove
Down:
      dec playerY
      jmp donemove
donemove:



      dec pausecounter
      beq donexttile
      jmp noscroll
donexttile:

;Scroll left one playfiel bit      

      ldx #7
nextscroll:
      lda #0
      sta pausecounter

      lda Column6Line1,x
      lsr
      sta Column6Line1,x    
      lda Column5Line1,x
      rol
      sta Column5Line1,x
      lda Column4Line1,x
      bcc noadd1
      lsr
      ora #128
      jmp doneadd1
noadd1:
      lsr
doneadd1:
      sta Column4Line1,x

      and #8
      beq noadd4
      inc pausecounter
noadd4:

      lda pausecounter
      beq noadd3
      lda Column3Line1,x
      lsr
      ora #128
      jmp doneadd3
noadd3:
      lda Column3Line1,x
      lsr
doneadd3:
      sta Column3Line1,x    

      lda Column2Line1,x
      rol
      sta Column2Line1,x
      lda Column1Line1,x
      bcc noadd2
      lsr
      ora #128
      sta Column1Line1,x
      jmp doneadd2
noadd2:
      lsr
      sta Column1Line1,x
doneadd2:

      dex
      bpl nextscroll


      dec scrollposition
      bpl notresetscrollposition
      lda #19
      sta scrollposition
      inc CurrentTilePosition
      lda CurrentTilePosition
      cmp #60
      bne nonexttile
      lda #0
      sta CurrentTilePosition
nonexttile:
notresetscrollposition:


;      ldy CurrentTilePosition
;      lda TileList,y
;      asl
;      tay
;      lda TilePointers1,y
;      sta FirstTilePointer1
;      lda TilePointers1+1,y
;      sta FirstTilePointer1+1
;      lda TilePointers2,y
;      sta FirstTilePointer2
;      lda TilePointers2+1,y
;      sta FirstTilePointer2+1
;      lda TilePointers3,y
;      sta FirstTilePointer3
;      lda TilePointers3+1,y
;      sta FirstTilePointer3+1

      ldy CurrentTilePosition
      lda TileList,y
      asl
      tay
      lda TilePointers1,y
      sta SecondTilePointer1
      lda TilePointers1+1,y
      sta SecondTilePointer1+1
      lda TilePointers2,y
      sta SecondTilePointer2
      lda TilePointers2+1,y
      sta SecondTilePointer2+1
      lda TilePointers3,y
      sta SecondTilePointer3
      lda TilePointers3+1,y
      sta SecondTilePointer3+1



;Get bits for right edge of playfield

      lda scrollposition
      cmp #16
      bmi not16to19

      lda #128
      sta pausecounter
      lda scrollposition
      sec
      sbc #16
      beq notrot1
      tay
nextrot1:
      lsr pausecounter
      dey
      bne nextrot1
notrot1:

      ldy #7
nextbit1:
      lda pausecounter
      and (SecondTilePointer1),y
      beq nobit1
      lda Column6Line1,y
      ora #128
      sta Column6Line1,y
nobit1:
      dey
      bpl nextbit1
      jmp donenewbit
not16to19:

      cmp #8
      bmi not8to15

      lda #1
      sta pausecounter
      lda scrollposition
      sec
      sbc #8
      beq notrot2
      tay
nextrot2:
      asl pausecounter
      dey
      bne nextrot2
notrot2:

      ldy #7
nextbit2:
      lda pausecounter
      and (SecondTilePointer2),y
      beq nobit2
      lda Column6Line1,y
      ora #128
      sta Column6Line1,y
nobit2:
      dey
      bpl nextbit2
      jmp donenewbit
not8to15:

      lda #128
      sta pausecounter
      lda scrollposition
      beq notrot3
      tay
nextrot3:
      lsr pausecounter
      dey
      bne nextrot3
notrot3:

      ldy #7
nextbit3:
      lda pausecounter
      and (SecondTilePointer3),y
      beq nobit3
      lda Column6Line1,y
      ora #128
      sta Column6Line1,y
nobit3:
      dey
      bpl nextbit3




donenewbit:

      lda #20
      sta pausecounter



noscroll:



      lda #1+2+4+16+32
      sta NUSIZ0
      sta NUSIZ1
      lda #$0e
      sta COLUP0
      lda #$1c
      sta COLUP1
      lda #0
      sta ENAM0
      sta ENAM1
      sta GRP0
      sta GRP1
      sta PF0
      sta PF1
      sta PF2



DrawScreen
	LDA INTIM
	BNE DrawScreen ; Whew!
	STA WSYNC
	STA VBLANK  ;End the VBLANK period with a zero.


;      sta WSYNC
;      sta WSYNC
;      sta WSYNC
;      sta HMCLR
;      sta WSYNC
;      lda #16
;      sta HMM0
;      sta HMM1



;      sta WSYNC
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      sta.w RESP0
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      sta RESM0
;      sta RESP1
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      nop
;      sta RESM1

      sta WSYNC
      lda #0
      sta ENABL
      nop
      nop
      nop
      nop
      nop
      nop
      nop
;      sta RESBL
      sta RESP0
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      sta.w RESP1
      lda #0
      sta GRP0
      sta GRP1
      lda #6
      sta NUSIZ0
      sta NUSIZ1

      sta WSYNC
      sta HMOVE

      sta WSYNC
      sta WSYNC

      ldy playerY ; y = scanline


      jsr scroller1
      jsr scroller1
      jsr scroller2
      jsr scroller2
      jsr scroller3
      jsr scroller3
      jsr scroller4
      jsr scroller4
      jsr scroller5
      jsr scroller5
      jsr scroller6
      jsr scroller6
      jsr scroller7
      jsr scroller7
      jsr scroller8
      jsr scroller8


      sta WSYNC
      lda #0
      sta PF0
      sta PF1
      sta PF2
      nop
      nop
      nop
      nop
      nop
      nop
      lda BallData,y
      sta ENABL
      asl
      asl
      sta CTRLPF
      iny


      jsr biggap

      jsr scroller8
      jsr scroller8
      jsr scroller7
      jsr scroller7
      jsr scroller6
      jsr scroller6
      jsr scroller5
      jsr scroller5
      jsr scroller4
      jsr scroller4
;      jsr scroller3
;      jsr scroller3

;      jsr scroller3
;      jsr scroller3
      jsr scroller4
      jsr scroller4
      jsr scroller5
      jsr scroller5
      jsr scroller6
      jsr scroller6
      jsr scroller7
      jsr scroller7
      jsr scroller8
      jsr scroller8


      sta WSYNC
      lda #0
      sta PF0
      sta PF1
      sta PF2
      lda BallData,y
      sta ENABL
      asl
      asl
      sta CTRLPF
      iny


      jsr biggap


      jsr scroller8
      jsr scroller8
      jsr scroller7
      jsr scroller7
      jsr scroller6
      jsr scroller6
      jsr scroller5
      jsr scroller5
      jsr scroller4
      jsr scroller4
      jsr scroller3
      jsr scroller3
      jsr scroller2
      jsr scroller2
      jsr scroller1
      jsr scroller1


      sta WSYNC
      lda #0
      sta PF0
      sta PF1
      sta PF2
      sta GRP0
      sta GRP1



;      ldy #50
;nextblankline:
;      sta WSYNC
;      dey
;      bne nextblankline     






	STA VBLANK ; Make TIA output invisible,
      lda #35
      sta TIM64T
OverscanWait:
      lda     INTIM
      bne     OverscanWait

      JMP  DrawLogo      ;Continue forever.


biggap:
      ldx #69
next3b:
      sta WSYNC
      lda BallData,y
      sta ENABL
      asl
      asl
      sta CTRLPF
      iny
      dex
      bne next3b
      rts

scroller1:
      sta WSYNC
      lda Column1Line1 ;3
      sta PF0          ;3
      lda Column2Line1 ;3
      sta PF1          ;3

      lda BallData,y   ;4
      sta ENABL        ;3
      asl              ;2
      asl              ;2
      sta CTRLPF       ;3

      lda Column3Line1 ;3
      sta PF2          ;3

      lda Column4Line1 ;3
      sta PF0          ;3
      lda Column5Line1 ;3
      sta PF1          ;3
      lda Column6Line1 ;3
      sta PF2          ;3
      iny              ;2
      rts              ;6+6

scroller2:
      sta WSYNC
      lda Column1Line2
      sta PF0
      lda Column2Line2
      sta PF1

      lda BallData,y   ;4
      sta ENABL        ;3
      asl              ;2
      asl              ;2
      sta CTRLPF       ;3

      lda Column3Line2
      sta PF2

      lda Column4Line2
      sta PF0
      lda Column5Line2
      sta PF1
      lda Column6Line2
      sta PF2
      iny
      rts

scroller3:
      sta WSYNC
      lda Column1Line3
      sta PF0
      lda Column2Line3
      sta PF1

      lda BallData,y   ;4
      sta ENABL        ;3
      asl              ;2
      asl              ;2
      sta CTRLPF       ;3

      lda Column3Line3
      sta PF2

      lda Column4Line3
      sta PF0
      lda Column5Line3
      sta PF1
      lda Column6Line3
      sta PF2
      iny
      rts

scroller4:
      sta WSYNC
      lda Column1Line4
      sta PF0
      lda Column2Line4
      sta PF1

      lda BallData,y   ;4
      sta ENABL        ;3
      asl              ;2
      asl              ;2
      sta CTRLPF       ;3

      lda Column3Line4
      sta PF2

      lda Column4Line4
      sta PF0
      lda Column5Line4
      sta PF1
      lda Column6Line4
      sta PF2
      iny
      rts

scroller5:
      sta WSYNC
      lda Column1Line5
      sta PF0
      lda Column2Line5
      sta PF1

      lda BallData,y   ;4
      sta ENABL        ;3
      asl              ;2
      asl              ;2
      sta CTRLPF       ;3

      lda Column3Line5
      sta PF2

      lda Column4Line5
      sta PF0
      lda Column5Line5
      sta PF1
      lda Column6Line5
      sta PF2
      iny
      rts

scroller6:
      sta WSYNC
      lda Column1Line6
      sta PF0
      lda Column2Line6
      sta PF1

      lda BallData,y   ;4
      sta ENABL        ;3
      asl              ;2
      asl              ;2
      sta CTRLPF       ;3

      lda Column3Line6
      sta PF2

      lda Column4Line6
      sta PF0
      lda Column5Line6
      sta PF1
      lda Column6Line6
      sta PF2
      iny
      rts

scroller7:
      sta WSYNC
      lda Column1Line7
      sta PF0
      lda Column2Line7
      sta PF1

      lda BallData,y   ;4
      sta ENABL        ;3
      asl              ;2
      asl              ;2
      sta CTRLPF       ;3

      lda Column3Line7
      sta PF2

      lda Column4Line7
      sta PF0
      lda Column5Line7
      sta PF1
      lda Column6Line7
      sta PF2
      iny
      rts

scroller8:
      sta WSYNC
      lda Column1Line8
      sta PF0
      lda Column2Line8
      sta PF1

      lda BallData,y   ;4
      sta ENABL        ;3
      asl              ;2
      asl              ;2
      sta CTRLPF       ;3

      lda Column3Line8
      sta PF2

      lda Column4Line8
      sta PF0
      lda Column5Line8
      sta PF1
      lda Column6Line8
      sta PF2
      iny
      rts

TileList: .byte 0,1,3,9,12,18,14,2,4,10,7,5,19,16,11,13,15,6,17,8
          .byte 5,20,15,0,1,2,1,2,1,2,3,10,10,10,9,10,9,10,9,13
          .byte 18,19,18,19,19,18,18,15,6,15,6,15,0,4,8,4,8,1,1,1


TilePointers1: .word Tile1C1,Tile2C1,Tile3C1,Tile4C1,Tile5C1,Tile6C1,Tile7C1,Tile8C1,Tile9C1,Tile10C1,Tile11C1,Tile12C1,Tile13C1,Tile14C1,Tile15C1,Tile16C1,Tile17C1,Tile18C1,Tile19C1,Tile20C1,Tile21C1
TilePointers2: .word Tile1C2,Tile2C2,Tile3C2,Tile4C2,Tile5C2,Tile6C2,Tile7C2,Tile8C2,Tile9C2,Tile10C2,Tile11C2,Tile12C2,Tile13C2,Tile14C2,Tile15C2,Tile16C2,Tile17C2,Tile18C3,Tile19C2,Tile20C2,Tile21C2
TilePointers3: .word Tile1C3,Tile2C3,Tile3C3,Tile4C3,Tile5C3,Tile6C3,Tile7C3,Tile8C3,Tile9C3,Tile10C3,Tile11C3,Tile12C3,Tile13C3,Tile14C3,Tile15C3,Tile16C3,Tile17C3,Tile18C2,Tile19C3,Tile20C3,Tile21C3


	org $FD00

BallData: .byte 2,6,10,10,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
          .byte 0,0,0,0,0
      

;XX
;XXXX
;XXXX
;XXXXXXXX

;          .byte 2,6,10,6,2,6,10,14,10,6,2,6,10,6,2,0,0,0,0,0,0,0,0,0

	org $FE00

;Starts at bottom:
;Ends at bottom:

Tile1C1: .byte 240,0,0,0,0,0,0,0
Tile1C2: .byte 255,0,0,0,0,0,0,0
Tile1C3: .byte 255,0,0,0,0,0,0,0

Tile2C1: .byte 240,224,192,128,0,0,0,0
Tile2C2: .byte 255,255,255,255,255,127,63,31
Tile2C3: .byte 255,127,63,31,15,7,3,1

Tile3C1: .byte 240,224,192,128,0,0,0,0
Tile3C2: .byte 255,255,255,255,0,0,0,0
Tile3C3: .byte 255,127,63,31,0,0,0,0

;Ends at middle:

Tile4C1: .byte 240,224,192,128,0,0,0,0
Tile4C2: .byte 255,255,255,255,0,0,0,0
Tile4C3: .byte 255,255,255,255,0,0,0,0

Tile5C1: .byte 240,224,192,128,0,0,0,0
Tile5C2: .byte 255,255,255,255,255,127,63,31
Tile5C3: .byte 255,255,255,255,127,63,31,15

;Ends at top:

Tile6C1: .byte 240,224,192,128,0,0,0,0
Tile6C2: .byte 255,255,255,255,255,127,63,31
Tile6C3: .byte 255,255,255,255,255,255,255,255

Tile7C1: .byte 240,224,192,128,0,0,0,0
Tile7C2: .byte 255,255,255,255,3,1,0,0
Tile7C3: .byte 255,255,255,255,255,255,255,254

;Starts at middle:
;Ends at bottom:

Tile8C1: .byte 240,240,240,240,0,0,0,0
Tile8C2: .byte 255,255,255,255,0,0,0,0
Tile8C3: .byte 255,127,63,31,0,0,0,0

Tile9C1: .byte 240,240,240,240,128+64+32,128+64,128,0
Tile9C2: .byte 255,255,255,255,255,255,255,255
Tile9C3: .byte 255,127,63,31,15,7,3,1

;Ends at middle:

Tile10C1: .byte 240,240,240,240,0,0,0,0
Tile10C2: .byte 255,128+64+32,128+64,128,0,0,0,0
Tile10C3: .byte 255,254,252,248,0,0,0,0

Tile11C1: .byte 240,240,240,240,0,0,0,0
Tile11C2: .byte 255,255,255,255,127,63,31,15
Tile11C3: .byte 255,255,255,255,7,3,1,0

Tile12C1: .byte 240,240,240,240,0,0,0,0
Tile12C2: .byte 255,255,255,255,0,0,0,0
Tile12C3: .byte 255,255,255,255,0,0,0,0

;Ends at top

Tile13C1: .byte 240,240,240,240,0,0,0,0
Tile13C2: .byte 255,255,255,255,0,0,0,0
Tile13C3: .byte 255,255,255,255,128+64+32+16,128+64+32,128+64,128

Tile14C1: .byte 240,16+32+64,16+32,16,0,0,0,0
Tile14C2: .byte 255,0,0,0,0,0,0,0
Tile14C3: .byte 255,254,252,248,240,224,192,128

;Starts at top:
;Ends at bottom:

Tile15C1: .byte 240,240,240,240,240,240,240,240
Tile15C2: .byte 255,255,255,255,255,255,255,255
Tile15C3: .byte 255,127,63,31,15,7,3,1

Tile16C1: .byte 240,240,240,240,240,240,240,240
Tile16C2: .byte 255,255,255,255,252,248,240,224
Tile16C3: .byte 255,127,63,31,0,0,0,0

;Ends at middle:

Tile17C1: .byte 240,240,240,240,240,240,240,240
Tile17C2: .byte 255,255,255,255,252,248,240,224
Tile17C3: .byte 255,255,255,255,0,0,0,0

Tile18C1: .byte 240,240,240,240,240,16+32+64,16+32,16
Tile18C2: .byte 255,32+64+128,64+128,128,0,0,0,0
Tile18C3: .byte 255,254,252,248,0,0,0,0

;Ends at top:

Tile19C1: .byte 240,240,240,240,240,16+32+64,16+32,16
Tile19C2: .byte 255,32+64+128,64+128,128,0,0,0,0
Tile19C3: .byte 255,254,252,248,240,224,192,128

Tile20C1: .byte 240,240,240,240,240,240,240,240 
Tile20C2: .byte 255,255,255,255,255,128+64+32,128+64,128
Tile20C3: .byte 255,255,255,255,255,254,252,248

Tile21C1: .byte 240,240,240,240,240,240,240,240
Tile21C2: .byte 255,255,255,255,255,255,255,255 
Tile21C3: .byte 255,255,255,255,255,255,255,255

	org $FFFC
	.word Start
	.word Start


Attachment: SCROLL-R.BIN
Description: Binary data

               |        _  |   ___    _
      /\   __  |  ___  / \ |  /     _/
____ /  \ /  \ | /    /    | /     /
 0     1   2   |  3     4  |   5     6
               |           |
----------------------------------------
      _   |                |
___  / \  | _  _ _/\_ ____ | ___/    /
   \    \ |  \/            |      \_/
 7    8   |   9   10   11  |  12   13
          |                |
----------------------------------------
__   _    | _         |      _  _ ____
  \   \_  |  \__ \    | \  /  \/
   \    \ |       \_/ |  \/
14    15  |  16   17  |  18   19   20
          |           |                  
----------------------------------------







Pieces:

Starts at bottom

Ends at bottom:

Tile1
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
XXXX XXXXXXXX XXXXXXXX

Tile2
0000 000XXXXX X0000000
0000 00XXXXXX XX000000
0000 0XXXXXXX XXX00000
0000 XXXXXXXX XXXX0000
000X XXXXXXXX XXXXX000
00XX XXXXXXXX XXXXXX00
0XXX XXXXXXXX XXXXXXX0
XXXX XXXXXXXX XXXXXXXX

Tile3
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
000X XXXXXXXX XXXXX000
00XX XXXXXXXX XXXXXX00
0XXX XXXXXXXX XXXXXXX0
XXXX XXXXXXXX XXXXXXXX

Ends at middle:

Tile4
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
000X XXXXXXXX XXXXXXXX
00XX XXXXXXXX XXXXXXXX
0XXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX

Tile5
0000 000XXXXX XXXX0000
0000 00XXXXXX XXXXX000
0000 0XXXXXXX XXXXXX00
0000 XXXXXXXX XXXXXXX0
000X XXXXXXXX XXXXXXXX
00XX XXXXXXXX XXXXXXXX
0XXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX

Ends at top:

Tile6
0000 000XXXXX XXXXXXXX
0000 00XXXXXX XXXXXXXX
0000 0XXXXXXX XXXXXXXX
0000 XXXXXXXX XXXXXXXX
000X XXXXXXXX XXXXXXXX
00XX XXXXXXXX XXXXXXXX
0XXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX


Tile7
0000 00000000 0XXXXXXX
0000 00000000 XXXXXXXX
0000 0000000X XXXXXXXX
0000 000000XX XXXXXXXX
000X XXXXXXXX XXXXXXXX
00XX XXXXXXXX XXXXXXXX
0XXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX



Starts at middle

Ends at bottom

Tile8
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
XXXX XXXXXXXX XXXXX000
XXXX XXXXXXXX XXXXXX00
XXXX XXXXXXXX XXXXXXX0
XXXX XXXXXXXX XXXXXXXX

Tile9
0000 XXXXXXXX X0000000
000X XXXXXXXX XX000000
00XX XXXXXXXX XXX00000
0XXX XXXXXXXX XXXX0000
XXXX XXXXXXXX XXXXX000
XXXX XXXXXXXX XXXXXX00
XXXX XXXXXXXX XXXXXXX0
XXXX XXXXXXXX XXXXXXXX

Ends at middle

Tile10
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
XXXX X0000000 000XXXXX
XXXX XX000000 00XXXXXX
XXXX XXX00000 0XXXXXXX
XXXX XXXXXXXX XXXXXXXX

Tile11
0000 0000XXXX 00000000
0000 000XXXXX X0000000
0000 00XXXXXX XX000000
0000 0XXXXXXX XXX00000
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX

Tile12
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
0000 00000000 00000000
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX

Ends at top

Tile13
0000 00000000 0000000X
0000 00000000 000000XX
0000 00000000 00000XXX
0000 00000000 0000XXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX

Tile14
0000 00000000 0000000X
0000 00000000 000000XX
0000 00000000 00000XXX
0000 00000000 0000XXXX
X000 00000000 000XXXXX
XX00 00000000 00XXXXXX
XXX0 00000000 0XXXXXXX
XXXX XXXXXXXX XXXXXXXX


Starts at top

Ends at bottom

Tile15
XXXX XXXXXXXX X0000000
XXXX XXXXXXXX XX000000
XXXX XXXXXXXX XXX00000
XXXX XXXXXXXX XXXX0000
XXXX XXXXXXXX XXXXX000
XXXX XXXXXXXX XXXXXX00
XXXX XXXXXXXX XXXXXXX0
XXXX XXXXXXXX XXXXXXXX

Tile16
XXXX XXX00000 00000000
XXXX XXXX0000 00000000
XXXX XXXXX000 00000000
XXXX XXXXXX00 00000000
XXXX XXXXXXXX XXXXX000
XXXX XXXXXXXX XXXXXX00
XXXX XXXXXXXX XXXXXXX0
XXXX XXXXXXXX XXXXXXXX

Ends at middle

Tile17
XXXX XXX00000 00000000
XXXX XXXX0000 00000000
XXXX XXXXX000 00000000
XXXX XXXXXX00 00000000
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX

Tile18
X000 00000000 00000000
XX00 00000000 00000000
XXX0 00000000 00000000
XXXX 00000000 00000000
XXXX X0000000 000XXXXX
XXXX XX000000 00XXXXXX
XXXX XXX00000 0XXXXXXX
XXXX XXXXXXXX XXXXXXXX

Ends at top

Tile19
X000 00000000 0000000X
XX00 00000000 000000XX
XXX0 00000000 00000XXX
XXXX 00000000 0000XXXX
XXXX X0000000 000XXXXX
XXXX XX000000 00XXXXXX
XXXX XXX00000 0XXXXXXX
XXXX XXXXXXXX XXXXXXXX

Tile20
XXXX X0000000 000XXXXX
XXXX XX000000 00XXXXXX
XXXX XXX00000 0XXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX

Tile21
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX
XXXX XXXXXXXX XXXXXXXX









Current Thread