You can in general use the same algorithms and ideas from smoothscroll 8x8 tilemapping: just instead of incrementing the draw by 8, increment by 16, etc. Instead of a single pt-on(), you can use 4 pt-on()s or you can try the bitmap command if you want. I haven't tested this code btw, just wrote it on the spot but it should work (I might have reversed the Y buttons by accident..idr)
.Super simple unoptimized with a 16x16 map and 16x16 tiles
[MAPDATA]->GDB1
[TILES]->Pic1
Repeat getkey(15)
getKey(3)-getKey(2)+X->X
getKey(1)-getKey(4)+Y->Y
For(A,0,4
For(B,0,6
subroutine(B*16-(X^16),A*16-(Y^16),{Y/16+B*16+A+(X/16)+GDB1}*32+Pic1)
End
End
DispGraphClrDraw
End
Lbl subroutine
Pt-On(r1,r2,r3)
Pt-On(r1+8,r2,r3+8)
Pt-On(r1,r2+8->r2,r3+16)
Pt-On(r1+8,r2,r3+24)
Return
If you would rather use Horizontal and Vertical instead of redrawing every frame, you can still use the same engine as Horizontal/vertical 8x8 just with similar tweaks as the above example. The easiest way you call your 16x16 routine to redraw the whole set of edge tiles, but you can also try to optimize by only drawing the two 8x8 tiles of the 16x16 that would be necessary. I don't have a lot of experience with these types of tilemappers though
while they can be faster I personally find the redraw-every-frame approach cleaner and more flexible. To each his own.