After playing around with tiles for a bit, I settled on a solution similar to Myask's suggestion. (minus the sprites.) I just removed the blue, and transitioned using a "weighted" gradient. (bands of colour, of varying thickness to give an effect of depth.) I'll add the water shine back later.
Also, I decided the full-black title background was boring, so I threw a background onto it, and changed up the text palette.

EDIT: Oops! The Nametable version of the town background, has no chimney on that house.
I *actually* started to code this one! ...and learned some new things I'll be adding to Cat Quest. >.>
(Better map tile collision, and a number of other optimizations.)

I am now programming two games! ...Ugh.
This was, of course after some (rather-amusing) problems:

(I elbow-bumped ONE line of code, can you guess what it was?

)
I started working on a scrolling engine, so I wrote some Ruby script, to prototype sprite offset calculation. Maybe somebody here will find it useful? I'll be porting it to 6502, and releasing source, later.
Code: Select all
;----------------------------------------
;SET SPRITE OFFSETS
;----------------------------------------
Player_X, = Player_Set_X
Player_X, * 16
Player_X, + 8
Player_Y, = Player_Set_Y
Player_Y, * 16
Player_Y, + 8
;----------------------------------------
;----------------------------------------
;SET MAP BORDERS
;----------------------------------------
Map_Width_X, = Map_X(Tiles)
Map_Width_X, * 16
Map_Height_Y, = Map_Y(Tiles)
Map_Height_Y, * 16
Map_Scroll_Right, = Map_Width_X
Map_Scroll_Right, - 128
Map_Scroll_Bottom, = Map_Height_Y
Map_Scroll_Bottom, - 120
;----------------------------------------
Map_Offset_X, = Map_Width_X
Map_Offset_X, / 2
Map_Offset_Y, = Map_Width_Y
Map_Offset_Y, / 2
;----------------------------------------
Map_North_Edge, = 8
Map_West_Edge, = 8
Map_South_Edge, = Map_Height_Y
Map_South_Edge, - 8
Map_East_Edge, = Map_Width_Y
Map_East_Edge, - 8
;----------------------------------------
;----------------------------------------
;CACULATE MAP SCROLL OFFSET
;----------------------------------------
Player_X > Map_R_Border
Player_Offset_X, = Player_X
Player_Offset_X, - Map_Width_X
Player_Offset_X, + 256
Map_Offset_X, = Map_Width_X
Map_Offset_X, / -2
Map_Offset_X, +256
Else
Player_X < 128
Player_Offset_X, = Player_X
Map_Offset_X, = Map_Width_X
Map_Offset_X, / 2
Else
Player_Offset_X
Map_Offset_X, = Map_Width_X
Map_Offset_X, / 2
Map_Offset_X, - Player_X
Map_Offset_X, + 128
;----------------------------------------
Player_Y < Map_B_Border
Player_Offset_Y, = Player_Y
Player_Offset_Y, - Map_Height_Y
Player_Offset_Y, + 240
Map_Offset_Y, = Map_Height_Y
Map_Offset_Y, / -2
Map_Offset_Y, +240
Else
Player_Y < 120
Player_Offset_Y, = Player_Y
Map_Offset_Y, = Map_Height_Y
Map_Offset_Y, / 2
Else
Player_Offset_Y
Map_Offset_Y, = Map_Height_Y
Map_Offset_Y, / 2
Map_Offset_Y, - Player_Y
Map_Offset_Y, + 120
;----------------------------------------
;----------------------------------------
;CALCULATE SPRITE OFFSET
;----------------------------------------
Player_X > Map_R_Border
Enemy_Offset_X, = Enemy_X
Enemy_Offset_X, - Map_Width_X
Enemy_Offset_X, + 256
Else
Player_X < 128
Enemy_Offset_X, = Enemy_X
Else
Enemy_Offset_X, = Enemy_X
Enemy_Offset_X, - Player_X
Enemy_Offset_X, + 128
;----------------------------------------
Player_Y > Map_B_Border
Enemy_Offset_Y, = Enemy_Y
Enemy_Offset_Y, - Map_Height_Y
Enemy_Offset_Y, + 240
Else
Player_Y < 120
Enemy_Offset_Y, = Enemy_Y
Else
Enemy_Offset_Y, = Enemy_Y
Enemy_Offset_Y, - Player_Y
Enemy_Offset_Y, + 120
;----------------------------------------