634 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			634 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| ; my magnum opus... my greatest work. gaze upon it and despair
 | |
| ; this is such a tangled (not really) mess of lookup tables and case switches
 | |
| ; which is impressive given thta i don't hvae those in assembly.
 | |
| ; there's a matrix of speesd that determines how fast sprites move across 
 | |
| ; the globe to make it look like it's really rotating andd not just madde of 
 | |
| ; sliding segments. i'm very proud of this not because it's good code but
 | |
| ; because it works.
 | |
| 
 | |
| TheWorld:
 | |
|   db 10, "THE WORLD "
 | |
|   db 10, "          "
 | |
|   db 10, "          "
 | |
|   db 10, "success   "
 | |
|   db 10, "wholeness "
 | |
|   db 10, "travel    "
 | |
|   
 | |
|   db 10, "THE WORLD "
 | |
|   db 10, "(reversed)"
 | |
|   db 10, "          "
 | |
|   db 10, "empty     "
 | |
|   db 10, "missing   "
 | |
|   db 10, "burdened  "
 | |
|   
 | |
|   
 | |
|   dw .BackgroundCopyEnd - .BackgroundCopy
 | |
|   dw .BackgroundCopy
 | |
|   dw .KeyArtTilesEnd - .KeyArtTiles
 | |
|   dw .KeyArtTiles
 | |
|   dw .SpriteTilesEnd - .SpriteTiles
 | |
|   dw .SpriteTiles
 | |
|   dw .fInit
 | |
|   dw .fUpdate
 | |
|   dw .fDraw
 | |
|   dw .fPrintPrep
 | |
|   
 | |
| .fInit: 
 | |
|   ld hl, CVS
 | |
|   ld a, 0
 | |
|   ld [hl+], a ; CVS timer 
 | |
|   ld [hl+], a ; 
 | |
|   ld [hl+], a ; CVS + 2 frame index for rotating earth
 | |
| 
 | |
|   ld hl, MY_OAM
 | |
| .priorityLoop
 | |
|   inc hl
 | |
|   inc hl
 | |
|   inc hl
 | |
|   set OAMB_PRI, [hl]
 | |
|   inc hl 
 | |
|   ld a, l 
 | |
|   cp a, $9F
 | |
|   jp c, .priorityLoop
 | |
| 
 | |
|   ret
 | |
| .fUpdate: 
 | |
|   ld hl, CVS
 | |
|   call IncrementTimer
 | |
|   
 | |
|   ld a, [CVS+1] ; checking the high byte of the timer
 | |
|   cp a, $01 ; $10 = 1 second, $02 = 1/8 of a second
 | |
|   ret c
 | |
|   
 | |
|   ld a, 0 
 | |
|   ld [CVS], a 
 | |
|   ld [CVS+1], a 
 | |
|   
 | |
|   ld b, 80
 | |
|   ld a, [CVS+2]
 | |
|   dec a 
 | |
|   call ArrayClampLoopingB
 | |
|   ld [CVS+2], a 
 | |
| 
 | |
| 
 | |
|   call .rotate
 | |
|   
 | |
|   call .cleanNonVisibleTiles
 | |
|   
 | |
|   call .spawnNewTiles
 | |
|  
 | |
|   ret  
 | |
| 
 | |
| .spawnNewTiles:
 | |
|   ; spawn whatever new stripe of tiles is indicated in the map structure
 | |
|   ld a, [CVS+2]
 | |
|   ld b, a 
 | |
|   ld hl, .map
 | |
| .loopFindCurrentStripes
 | |
|   ld a, [CVS+2]
 | |
|   ld b, a 
 | |
|   ld a, [hl] ; hl points at a timing index
 | |
|   cp a, 255
 | |
|   jp z, .doneSpawningStripe ; if it's 255 then we've reached the end of the list
 | |
|   cp a, b
 | |
|   jp z, .foundOne ; if it's =[CVS+2] then we've found a stripe that should be spawned now
 | |
|   inc hl ; now hl points at LOW(stripe address)
 | |
|   inc hl ; now hl points at HIGH(stripe address)
 | |
|   inc hl ; now hl points at a timing index
 | |
|   jp .loopFindCurrentStripes ; look at the next one
 | |
| .foundOne
 | |
|   inc hl ; now hl points at LOW(stripe address)
 | |
|   ld c, [hl]
 | |
|   inc hl ; now hl points at HIGH(strpie address)
 | |
|   ld b, [hl]
 | |
|   push hl ; save our location from the map list...
 | |
|   ld h, b 
 | |
|   ld l, c
 | |
|   
 | |
|   ; hl holdds the addrerss of a map stripe in memory, linearly packed
 | |
|   call .BuildMapStripe
 | |
|   pop hl ; rerstore the map list memory location
 | |
|   inc hl ; now hl points at a timing index
 | |
|   jp .loopFindCurrentStripes ; look at the next one
 | |
| .doneSpawningStripe
 | |
|   ret
 | |
|   
 | |
| .BuildMapStripe:
 | |
|   ; go through MY_OAM aand fiind six unused sprites, and draw our candidate
 | |
|   ; sprites in those slots.
 | |
|   ; each time we need to check if our counter (b) is six 
 | |
|   ; and also if we're outsidde the dedicated OAM space (not as important maybe)
 | |
| 
 | |
|   ; hl points to a list of six tile ids
 | |
|   ld b, 0
 | |
|   ld d, h
 | |
|   ld e, l 
 | |
|   ld hl, MY_OAM
 | |
|   
 | |
| .spriteLoop
 | |
|   ld a, [hl]
 | |
|   cp a, 0 
 | |
|   jp nz, .skipToNextSlot ; if the y value of the slot we're in is not zero, 
 | |
|   ; we have to skip this OAM slot
 | |
|   ld a, 6 ; STRPES ARE SIX TILIES TALLL
 | |
|   cp a, b 
 | |
|   ret z ; if we'rer trying to draw sprite 6 in our stripe, we're done
 | |
|   
 | |
|   ld a, [de] 
 | |
|   cp a, 0
 | |
|   jp z, .doneDrawingSprite ; if the tile we're trying to draw is id 0, we're done
 | |
|   ; else, fill this slot with the correct sprite.
 | |
|   ; six way branch based on what position in the stripe we're at
 | |
|   ld a, b
 | |
| : cp a, 0
 | |
|   jp nz, :+
 | |
|   
 | |
|   ld [hl], (2+1+5)*8 ; y
 | |
|   inc hl 
 | |
|   ld [hl], (1+1+1)*8 + 2; x
 | |
|   inc hl 
 | |
|   ld a, [de]
 | |
|   ld [hl], a
 | |
|   ld a, 255
 | |
| : cp a, 1
 | |
|   jp nz, :+
 | |
|   
 | |
|   ld [hl], (2+1+6)*8 ; y
 | |
|   inc hl 
 | |
|   ld [hl], (1+1+0)*8+4; x
 | |
|   inc hl 
 | |
|   ld a, [de]
 | |
|   ld [hl], a
 | |
|   
 | |
|   ld a, 255
 | |
| : cp a, 2
 | |
|   jp nz, :+
 | |
|   
 | |
|   ld [hl], (2+1+7)*8 ; y
 | |
|   inc hl 
 | |
|   ld [hl], (1+1+0)*8+1; x
 | |
|   inc hl 
 | |
|   ld a, [de]
 | |
|   ld [hl], a
 | |
|   
 | |
|   ld a, 255
 | |
| : cp a, 3
 | |
|   jp nz, :+
 | |
|   
 | |
|   ld [hl], (2+1+8)*8 ; y
 | |
|   inc hl 
 | |
|   ld [hl], (1+1+0)*8+1; x
 | |
|   inc hl 
 | |
|   ld a, [de]
 | |
|   ld [hl], a
 | |
|   
 | |
|   ld a, 255
 | |
| : cp a, 4
 | |
|   jp nz, :+
 | |
|   
 | |
|   ld [hl], (2+1+9)*8 ; y
 | |
|   inc hl 
 | |
|   ld [hl], (1+1+0)*8+4; x
 | |
|   inc hl 
 | |
|   ld a, [de]
 | |
|   ld [hl], a
 | |
|   
 | |
|   ld a, 255
 | |
| : cp a, 5
 | |
|   jp nz, :+
 | |
|   
 | |
|   ld [hl], (2+1+10)*8 ; y
 | |
|   inc hl 
 | |
|   ld [hl], (1+1+1)*8 + 2; x
 | |
|   inc hl 
 | |
|   ld a, [de]
 | |
|   ld [hl], a
 | |
|   
 | |
|   ld a, 255
 | |
| : 
 | |
|   inc hl ; now it's pointing at the attributes
 | |
|   ;set OAMB_PRI, [hl]
 | |
|   inc hl ; now it's pointing at the next OAM slot
 | |
| .doneDrawingSprite
 | |
|   inc de ; move to the next sprite in the strip
 | |
|   inc b ; increment our sprite-in-strip counter
 | |
|   jp .checkIfOutOfOAM
 | |
|   
 | |
| .skipToNextSlot
 | |
|   inc hl
 | |
|   inc hl
 | |
|   inc hl 
 | |
|   inc hl
 | |
|   jp .checkIfOutOfOAM
 | |
|   
 | |
| .checkIfOutOfOAM
 | |
|   ld a, l 
 | |
|   cp a, $9F
 | |
|   jp c, .spriteLoop
 | |
|   
 | |
|   ret ; if we're out of oam we're done!
 | |
| 
 | |
| 
 | |
| .rotate:
 | |
|   ; move all currently visible sprites according to the rotation behavior.
 | |
|   ld hl, MY_OAM
 | |
| .loop
 | |
|   ld a, [hl] ; y value
 | |
|   cp a, 0
 | |
|   jp nz, :+
 | |
|   inc hl ; x
 | |
|   inc hl ; tile id 
 | |
|   inc hl ; attrs
 | |
|   inc hl ; next oam value
 | |
|   
 | |
|   ld a, l 
 | |
|   cp a, $9F
 | |
|   ret nc
 | |
|   jp .loop
 | |
| :
 | |
|   ld b, [hl] ; y value
 | |
|   inc hl 
 | |
|   ld c, [hl] ; x value
 | |
|   
 | |
|   push hl
 | |
|   ld hl, .speedMatrix
 | |
|   call .GetOffsetForMatrix
 | |
|   pop hl
 | |
|   ld b, a ; b now holds the speed matrrix value
 | |
|   
 | |
|   ld a, [CVS+2]
 | |
|   and a, $01
 | |
|   ld d, a ; every-other-frame bit
 | |
|   ld a, [CVS+2]
 | |
|   and a, $03
 | |
|   inc a 
 | |
|   sra a
 | |
|   sra a
 | |
|   ld e, a ; every-fourth-frame bit
 | |
|   
 | |
|   ld a, [hl] ; x value to modify
 | |
|   bit 0, b 
 | |
|   jp z, :+
 | |
|   add a, 1
 | |
| : bit 1, b
 | |
|   jp z, :+
 | |
|   add a, d
 | |
| : bit 2, b 
 | |
|   jp z, :+
 | |
|   add a, e
 | |
| :
 | |
|   ld [hl], a 
 | |
|  
 | |
| .done
 | |
|   inc hl ; now ponting at tile id
 | |
|   inc hl ; now pointing at attrs
 | |
|   inc hl
 | |
|   ld a, l 
 | |
|   cp a, $A0
 | |
|   jp nz, .loop
 | |
|   
 | |
|   ret
 | |
|   
 | |
| .cleanNonVisibleTiles:
 | |
|   ld hl, MY_OAM
 | |
|   ; go through MY_OAM and, for any which aren't still visible, set their
 | |
|   ; y value to zero.
 | |
|   ; this could probably be rewritten as a simpler lookup table if we rewrote it 
 | |
|   ; using jp hl and pointer math rather than explicitly listing all the possibilities
 | |
| .cleanUpLoop
 | |
|   ld a, [hl] ; a is the y value and hl points to y
 | |
| : cp a, (2+1+5)*8
 | |
|   jp nz, :+ ; if the y value doesn't match our target, try the next check 
 | |
|   inc hl
 | |
|   ld a, [hl-] ; a is the x value and hl points to x
 | |
|   cp a, (1+1+5)*8+6
 | |
|   jp c, .nextTile ; if x value is not less than the threshold, 
 | |
|   ; skip this tile and look at the next tile
 | |
|   
 | |
|   ; else, the x value is <= the threshhold, so we put it in baby jail
 | |
|   ld [hl], 0 ; set y to zero
 | |
|   jp .nextTile
 | |
| : cp a, (2+1+6)*8
 | |
|   jp nz, :+
 | |
|   inc hl
 | |
|   ld a, [hl-] ; a is the x value and hl points to x
 | |
|   cp a, (1+1+6)*8+4
 | |
|   jp c, .nextTile ; if x value is not less than the threshold, 
 | |
|   ; skip this tile and look at the next tile
 | |
|   
 | |
|   ; else, the x value is <= the threshhold, so we put it in baby jail
 | |
|   ld [hl], 0 ; set y to zero
 | |
|   jp .nextTile
 | |
| : cp a, (2+1+7)*8
 | |
|   jp nz, :+
 | |
|   inc hl
 | |
|   ld a, [hl-] ; a is the x value and hl points to x
 | |
|   cp a, (1+1+7)*8+4
 | |
|   jp c, .nextTile ; if x value is not less than the threshold, 
 | |
|   ; skip this tile and look at the next tile
 | |
|   
 | |
|   ; else, the x value is <= the threshhold, so we put it in baby jail
 | |
|   ld [hl], 0 ; set y to zero
 | |
|   jp .nextTile
 | |
| : cp a, (2+1+8)*8
 | |
|   jp nz, :+
 | |
|   inc hl
 | |
|   ld a, [hl-] ; a is the x value and hl points to x
 | |
|   cp a, (1+1+7)*8+4
 | |
|   jp c, .nextTile ; if x value is not less than the threshold, 
 | |
|   ; skip this tile and look at the next tile
 | |
|   
 | |
|   ; else, the x value is <= the threshhold, so we put it in baby jail
 | |
|   ld [hl], 0 ; set y to zero
 | |
|   jp .nextTile
 | |
| : cp a, (2+1+9)*8
 | |
|   jp nz, :+
 | |
|   inc hl
 | |
|   ld a, [hl-] ; a is the x value and hl points to x
 | |
|   cp a, (1+1+6)*8+4
 | |
|   jp c, .nextTile ; if x value is not less than the threshold, 
 | |
|   ; skip this tile and look at the next tile
 | |
|   
 | |
|   ; else, the x value is <= the threshhold, so we put it in baby jail
 | |
|   ld [hl], 0 ; set y to zero
 | |
|   jp .nextTile
 | |
| : cp a, (2+1+10)*8
 | |
|   jp nz, :+
 | |
|   inc hl
 | |
|   ld a, [hl-] ; a is the x value and hl points to y
 | |
|   cp a, (1+1+5)*8+6
 | |
|   jp c, .nextTile ; if x value is not less than the threshold, 
 | |
|   ; skip this tile and look at the next tile
 | |
|   
 | |
|   ; else, the x value is <= the threshhold, so we put it in baby jail
 | |
|   ld [hl], 0 ; set y to zero
 | |
|   jp .nextTile
 | |
| : 
 | |
| .nextTile
 | |
|   inc hl 
 | |
|   inc hl 
 | |
|   inc hl 
 | |
|   inc hl 
 | |
|   ld a, $A0 
 | |
|   cp a, l 
 | |
|   jp nz, .cleanUpLoop
 | |
|   ret
 | |
|   
 | |
| 
 | |
| 
 | |
| .GetOffsetForMatrix:
 | |
|   ; b has y, c has x, hl has a 6x6 matrix of bytes.
 | |
|   ; when this is done hl will point to the individual byte we want
 | |
|   ; subtract (2+1+5)*8 from b, then divide by 8
 | |
|   ; subtract (1+1+1)*8 from c, then divide by 8.
 | |
|   ld a, b
 | |
|   sub a, (2+1+5)*8
 | |
|   sra a 
 | |
|   sra a 
 | |
|   sra a 
 | |
|   cp a, 5
 | |
|   jp c, :+
 | |
|   ld a, 5  
 | |
| : ld b, a 
 | |
|   
 | |
|   ld a, c 
 | |
|   sub a, (1+1+0)*8
 | |
|   sra a 
 | |
|   sra a 
 | |
|   sra a 
 | |
|   cp a, 6
 | |
|   jp c, :+
 | |
|   ld a, 6  
 | |
| : ld c, a
 | |
|   
 | |
|   ld d, 0 
 | |
|   ld a, 0
 | |
|   add a, b
 | |
|   add a, b
 | |
|   add a, b
 | |
|   add a, b
 | |
|   add a, b
 | |
|   add a, b ; a = 6*b
 | |
|   add a, b
 | |
|   ld e, a 
 | |
|   
 | |
|   add hl, de 
 | |
|   
 | |
|   ld d, 0
 | |
|   ld e, c 
 | |
|   
 | |
|   add hl, de
 | |
|   
 | |
|   ld a, [hl]
 | |
|   
 | |
|   ret
 | |
|   
 | |
| .speedMatrix 
 | |
|   ; bits are  
 | |
|   ; 1s: normal speed, 
 | |
|   ; 2s: 50% boost
 | |
|   ; 4s: 25% boost
 | |
|   db %0000_0111, %0000_0110, %0000_0110, %0000_0001, %0000_0110, %0000_0110, %0000_0111
 | |
|   db %0000_0001, %0000_0101, %0000_0101, %0000_0101, %0000_0101, %0000_0101, %0000_0001
 | |
|   db %0000_0101, %0000_0101, %0000_0011, %0000_0011, %0000_0011, %0000_0101, %0000_0101
 | |
|   db %0000_0101, %0000_0101, %0000_0011, %0000_0011, %0000_0011, %0000_0101, %0000_0101
 | |
|   db %0000_0001, %0000_0101, %0000_0101, %0000_0101, %0000_0101, %0000_0101, %0000_0001
 | |
|   db %0000_0111, %0000_0110, %0000_0110, %0000_0001, %0000_0110, %0000_0110, %0000_0111
 | |
| 
 | |
| 
 | |
| .map
 | |
|   db 0
 | |
|   dw .stripes
 | |
|   db 5
 | |
|   dw .stripes + 6
 | |
|   db 10
 | |
|   dw .stripes + 12
 | |
|   db 15
 | |
|   dw .stripes + 18
 | |
|   db 20
 | |
|   dw .stripes + 24
 | |
|   db 25
 | |
|   dw .stripes + 30
 | |
|   db 30
 | |
|   dw .stripes + 36
 | |
|   db 35
 | |
|   dw .stripes + 42
 | |
|   db 40
 | |
|   dw .stripes + 48
 | |
|   db 45
 | |
|   dw .stripes + 54
 | |
|   db 50
 | |
|   dw .stripes + 60
 | |
|   db 55
 | |
|   dw .stripes + 66
 | |
|   db 60
 | |
|   dw .stripes + 72
 | |
|   db 65
 | |
|   dw .stripes + 78
 | |
|   db 70
 | |
|   dw .stripes + 84
 | |
|   db 255
 | |
|   
 | |
| .stripes
 | |
| db $02, $05, $00, $00, $00, $00
 | |
| db $03, $06, $07, $00, $00, $33
 | |
| db $04, $0a, $08, $0c, $00, $2c
 | |
| db $09, $0b, $0d, $0e, $10, $00
 | |
| db $12, $00, $00, $0f, $11, $00
 | |
| db $00, $13, $17, $00, $00, $2d
 | |
| db $1c, $14, $18, $1a, $00, $2e
 | |
| db $1d, $15, $19, $1b, $00, $2f
 | |
| db $24, $16, $00, $00, $00, $00
 | |
| db $25, $1e, $1f, $00, $00, $00
 | |
| db $26, $20, $21, $00, $00, $32
 | |
| db $22, $23, $2b, $27, $29, $30
 | |
| db $34, $37, $00, $28, $2a, $31
 | |
| db $35, $38, $00, $00, $39, $00
 | |
| db $36, $00, $00, $00, $00, $00
 | |
| 
 | |
| .fDraw: ret
 | |
| .fPrintPrep: ret
 | |
| 
 | |
| .SpriteTiles:
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff
 | |
| 	db $00,$00,$03,$03,$0f,$0f,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$7f,$1f,$1f
 | |
| 	db $00,$00,$f0,$f0,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $00,$00,$3e,$3e,$ff,$ff,$f7,$ff,$d5,$ff,$ea,$ff,$d1,$ff,$ff,$ff
 | |
| 	db $03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $cf,$ff,$e7,$ff,$73,$7f,$19,$1f,$0f,$0f,$0e,$0f,$06,$07,$06,$05
 | |
| 	db $06,$05,$06,$05,$07,$04,$07,$04,$03,$03,$01,$01,$00,$00,$00,$00
 | |
| 	db $f2,$7e,$fe,$fe,$ee,$ee,$c6,$c6,$e0,$e0,$f0,$f0,$ff,$ff,$01,$01
 | |
| 	db $00,$00,$00,$00,$fc,$fc,$58,$f8,$b0,$f0,$60,$e0,$80,$80,$00,$00
 | |
| 	db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$fa,$fa,$fd,$3d,$fd,$1f,$fb,$1f
 | |
| 	db $80,$80,$e0,$e0,$e0,$e0,$e0,$e0,$c0,$c0,$80,$80,$00,$00,$00,$00
 | |
| 	db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$f8,$f8
 | |
| 	db $fe,$fe,$e3,$ff,$61,$ff,$60,$ff,$30,$ff,$b3,$ff,$bf,$ff,$bf,$ff
 | |
| 	db $00,$00,$80,$80,$c0,$c0,$40,$c0,$e0,$e0,$e0,$e0,$c0,$c0,$c0,$c0
 | |
| 	db $5f,$7f,$5f,$7f,$5f,$73,$bc,$e4,$f0,$c0,$e0,$c0,$c0,$80,$80,$80
 | |
| 	db $80,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $7f,$41,$7f,$41,$7f,$40,$3f,$00,$3f,$31,$1f,$13,$1e,$12,$00,$00
 | |
| 	db $01,$01,$03,$03,$0f,$0f,$0e,$0e,$00,$00,$03,$03,$0f,$0e,$1f,$10
 | |
| 	db $ff,$ff,$f2,$f2,$02,$02,$00,$00,$00,$00,$ff,$ff,$ff,$06,$ff,$00
 | |
| 	db $ff,$ff,$bb,$ba,$3b,$3a,$1f,$1f,$3c,$34,$7f,$61,$df,$d0,$ef,$68
 | |
| 	db $ff,$e0,$ff,$00,$ff,$00,$ff,$c0,$3f,$3e,$07,$07,$81,$81,$01,$01
 | |
| 	db $1f,$10,$1f,$10,$1f,$18,$0f,$0f,$03,$03,$00,$00,$00,$00,$00,$00
 | |
| 	db $ff,$00,$ff,$00,$ff,$30,$ff,$fc,$cf,$cd,$0f,$0f,$07,$07,$0f,$0f
 | |
| 	db $f2,$32,$f0,$00,$fa,$0a,$fe,$3e,$fe,$3e,$fe,$fe,$fe,$fe,$fc,$fc
 | |
| 	db $07,$07,$0f,$0f,$07,$07,$07,$07,$0f,$0f,$0f,$0d,$07,$04,$03,$02
 | |
| 	db $fc,$fc,$fc,$fc,$fc,$fc,$fc,$fc,$fd,$fd,$f9,$99,$f1,$11,$e0,$00
 | |
| 	db $00,$00,$01,$01,$01,$01,$03,$03,$46,$46,$c0,$c0,$87,$87,$1f,$1f
 | |
| 	db $00,$00,$80,$80,$df,$df,$fb,$ff,$73,$7f,$e7,$ff,$cf,$ff,$df,$ff
 | |
| 	db $ff,$02,$ff,$04,$f3,$0c,$f9,$0f,$fc,$3f,$fe,$ff,$ff,$ff,$f8,$f8
 | |
| 	db $f0,$f0,$e0,$e0,$c0,$c0,$00,$00,$20,$20,$60,$60,$00,$00,$00,$00
 | |
| 	db $ff,$63,$ff,$03,$ff,$07,$ff,$0f,$fb,$8f,$76,$fe,$fc,$fc,$f8,$f8
 | |
| 	db $78,$78,$38,$38,$38,$38,$20,$20,$20,$20,$30,$30,$18,$18,$08,$08
 | |
| 	db $0c,$0c,$ff,$7f,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $ff,$ff,$fc,$fc,$e0,$e0,$c0,$c0,$70,$70,$18,$18,$00,$00,$00,$00
 | |
| 	db $00,$00,$0f,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $3f,$00,$ff,$00,$ff,$f0,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $fc,$00,$ff,$00,$ff,$01,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$f1
 | |
| 	db $03,$03,$00,$00,$e0,$e0,$07,$07,$1f,$1f,$3f,$31,$7f,$60,$ff,$e0
 | |
| 	db $fe,$fe,$00,$00,$00,$00,$08,$08,$08,$08,$9c,$9c,$fe,$fe,$ff,$07
 | |
| 	db $ff,$e4,$7f,$7f,$38,$38,$10,$10,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $ff,$03,$ff,$c3,$fe,$fe,$3c,$3c,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$10,$10,$c0,$c0,$8f,$8f
 | |
| 	db $00,$00,$00,$00,$03,$03,$0e,$0e,$fc,$fc,$f8,$f8,$fe,$fe,$00,$00
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$03,$03,$ff,$ff,$ff,$ff,$00,$00
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$e0,$e0,$ff,$ff,$ff,$ff,$00,$00
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f3,$f3,$ff,$ff,$00,$00
 | |
| 	db $00,$00,$00,$00,$00,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$00,$00
 | |
| 	db $00,$00,$00,$00,$00,$00,$f0,$f0,$f8,$f8,$d8,$d8,$c0,$c0,$00,$00
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$ff,$ff,$00,$00
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$07,$07,$07,$07,$00,$00
 | |
| 	db $00,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $00,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$e0,$e0
 | |
| 	db $00,$00,$e0,$e0,$fc,$fc,$fc,$fc,$f8,$f8,$e0,$e0,$00,$00,$00,$00
 | |
| 	db $f8,$f8,$00,$00,$00,$00,$00,$00,$20,$20,$20,$20,$60,$60,$c0,$c0
 | |
| 	db $60,$60,$60,$60,$60,$60,$c0,$c0,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $00,$00,$00,$00,$06,$06,$02,$02,$06,$06,$0c,$0c,$18,$18,$00,$00
 | |
| .SpriteTilesEnd:
 | |
| ; original export script by gabriel reis, modified by shoofle
 | |
|  
 | |
| .KeyArtTiles:
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00
 | |
| 	db $ff,$03,$ff,$03,$ff,$03,$ff,$0b,$ff,$07,$ff,$17,$ff,$0f,$ff,$17
 | |
| 	db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $ff,$00,$ff,$40,$ff,$80,$ff,$a0,$ff,$d5,$ff,$f8,$ff,$ff,$ff,$ff
 | |
| 	db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$0a,$ff,$05
 | |
| 	db $ff,$00,$ff,$05,$ff,$0f,$ff,$07,$ff,$0f,$ff,$17,$ff,$27,$ff,$5f
 | |
| 	db $ff,$af,$ff,$7f,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $ff,$80,$ff,$a0,$ff,$c8,$ff,$f2,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $ff,$00,$ff,$00,$ff,$00,$ff,$80,$ff,$20,$ff,$c8,$ff,$f0,$ff,$f8
 | |
| 	db $ff,$0a,$ff,$07,$ff,$0b,$ff,$03,$ff,$0b,$ff,$17,$ff,$6f,$ff,$3f
 | |
| 	db $ff,$3f,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$fe,$fe
 | |
| 	db $ff,$ff,$fe,$fe,$fd,$fd,$ea,$ea,$d4,$d4,$a8,$a8,$50,$50,$a0,$a0
 | |
| 	db $e0,$e0,$a0,$a0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $07,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $ff,$ff,$7f,$7f,$1f,$1f,$07,$07,$03,$03,$40,$00,$a8,$00,$76,$00
 | |
| 	db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$7f,$3f,$3f
 | |
| 	db $fe,$fe,$fd,$fd,$fa,$fa,$f5,$f5,$ea,$ea,$d5,$d5,$ea,$ea,$d5,$d5
 | |
| 	db $a0,$a0,$00,$00,$80,$80,$00,$00,$80,$80,$00,$00,$00,$00,$00,$00
 | |
| 	db $1f,$1f,$9f,$1f,$8f,$0f,$47,$07,$87,$07,$43,$03,$83,$03,$41,$01
 | |
| 	db $dc,$dc,$aa,$aa,$d4,$d4,$aa,$aa,$d4,$d4,$aa,$aa,$54,$54,$aa,$aa
 | |
| 	db $81,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $dc,$dc,$aa,$aa,$54,$54,$aa,$aa,$d4,$d4,$aa,$aa,$d4,$d4,$aa,$aa
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01
 | |
| 	db $ee,$ee,$d5,$d5,$ea,$ea,$f5,$f5,$ea,$ea,$f5,$f5,$fa,$fa,$fd,$fd
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$00,$00,$80,$80,$40,$40
 | |
| 	db $01,$01,$03,$03,$03,$03,$07,$07,$07,$07,$0f,$0f,$1f,$1f,$1f,$1f
 | |
| 	db $ff,$ff,$fe,$fe,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $40,$40,$a0,$a0,$50,$50,$e8,$e8,$f4,$f4,$fa,$fa,$ff,$ff,$ff,$ff
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$ff
 | |
| 	db $00,$00,$00,$00,$00,$00,$03,$03,$07,$07,$1f,$1f,$7f,$7f,$ff,$ff
 | |
| 	db $3f,$3f,$7f,$7f,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
 | |
| 	db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$0f
 | |
| 	db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$fe,$ff,$f9,$ff,$f4,$ff,$f2
 | |
| 	db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$e7,$ff,$90,$ff,$00,$ff,$00,$ff,$00
 | |
| 	db $ff,$57,$ff,$0b,$ff,$03,$ff,$0a,$ff,$05,$ff,$00,$ff,$00,$ff,$00
 | |
| 	db $ff,$ff,$ff,$ff,$ff,$cf,$ff,$2f,$ff,$53,$ff,$05,$ff,$02,$ff,$00
 | |
| 	db $ff,$ff,$fc,$fc,$fe,$fe,$fe,$fe,$ff,$fe,$ff,$ff,$ff,$bf,$ff,$0f
 | |
| 	db $ff,$ff,$3f,$3f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7e,$7f,$79,$7f,$74
 | |
| 	db $ff,$e8,$ff,$e0,$ff,$e8,$ff,$f0,$ff,$a8,$ff,$54,$ff,$00,$ff,$00
 | |
| 	db $ff,$0f,$ff,$07,$ff,$07,$ff,$06,$fe,$06,$fe,$06,$fc,$04,$ff,$07
 | |
| 	db $7f,$70,$7f,$70,$7f,$60,$7f,$60,$7f,$60,$7f,$60,$3f,$20,$ff,$e0
 | |
| 	db $1f,$1f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $ff,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $fd,$fd,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $dd,$dd,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $55,$55,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $11,$11,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| 	db $ff,$ff,$00,$00,$fa,$72,$72,$72,$77,$72,$27,$27,$af,$27,$9f,$8f
 | |
| 	db $ff,$ff,$00,$00,$fb,$72,$73,$72,$77,$72,$27,$26,$af,$26,$9f,$8e
 | |
| 	db $cf,$8f,$af,$07,$27,$27,$77,$72,$72,$72,$fa,$72,$00,$00,$ff,$ff
 | |
| 	db $cf,$8e,$af,$06,$27,$26,$77,$72,$73,$72,$fb,$72,$00,$00,$ff,$ff
 | |
| 	db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$40,$40,$ff,$ff
 | |
| 	db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$80,$ff,$00,$ff,$40
 | |
| 	db $a9,$00,$3e,$00,$5f,$00,$3f,$00,$5f,$00,$2f,$00,$15,$00,$0b,$00
 | |
| 	db $04,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 | |
| .KeyArtTilesEnd:
 | |
| 
 | |
| .BackgroundCopy: ; tiles start at 26
 | |
| 	db $1b, $1b, $1c, $1d, $1d, $1e, $50, $1b
 | |
| 	db $1f, $20, $21, $1d, $1d, $1d, $22, $23
 | |
| 	db $24, $25, $1d, $1d, $1d, $1d, $1d, $1d
 | |
| 	db $1d, $1d, $1d, $1d, $1d, $1d, $1d, $1d
 | |
| 	db $1d, $1d, $1d, $1d, $1d, $1d, $1d, $1d
 | |
| 	db $1d, $26, $27, $28, $29, $2a, $2b, $1d
 | |
| 	db $1d, $2c, $2d, $1a, $1a, $51, $2e, $1d
 | |
| 	db $1d, $2f, $1a, $1a, $1a, $52, $30, $1d
 | |
| 	db $1d, $31, $1a, $1a, $1a, $1a, $32, $1d
 | |
| 	db $1d, $33, $34, $1a, $1a, $1a, $35, $1d
 | |
| 	db $1d, $36, $37, $4f, $38, $39, $3a, $1d
 | |
| 	db $1d, $1d, $1d, $1d, $1d, $1d, $1d, $1d
 | |
| 	db $1d, $1d, $1d, $1d, $1d, $1d, $1d, $1d
 | |
| 	db $3b, $1d, $1d, $1d, $1d, $1d, $3c, $3d
 | |
| 	db $3e, $3f, $40, $4b, $4c, $41, $42, $1b
 | |
| 	db $1b, $1b, $43, $4d, $4e, $44, $1b, $1b
 | |
| 
 | |
| 
 | |
| .BackgroundCopyEnd:
 |