--- /dev/null
+Line:
+ push hl
+ push de
+ ld a,d
+ cp h
+ jr c,LineOrdered
+ ex de,hl
+LineOrdered:
+ ld b,d
+ ld c,e
+ push hl
+ push bc
+ call FindPixel
+ pop bc
+ pop de
+ConnectedLine:
+ push hl
+ ld h,c
+ ld c,a
+ ld a,d
+ sub b
+ ld b,a
+ ld a,e
+ jr nz,LineNotPoint
+ cp h
+ jr nz,LineNotPoint
+ pop hl
+ jr DoneLine
+LineNotPoint:
+ sub h
+ ld de,16
+ jr nc,LinePositiveY
+ neg
+ ld de,-16
+LinePositiveY:
+ cp b
+ jr nc,SteepLine
+ add a,a
+ ld (Line2sm+1),a
+ ld h,a
+ xor a
+ sub b
+ add a,a
+ ld (Line1sm+1),a
+ ld a,h
+ sub b
+ pop hl
+LineLoopGentle:
+ push af
+ ld a,(hl)
+ or c
+ ld (hl),a
+ rrc c
+ jr nc,$+3
+ inc hl
+ pop af
+ jp m,Line2sm
+Line1sm add a,0
+ add hl,de
+Line2sm add a,0
+ djnz LineLoopGentle
+DoneLine:
+ ld a,(hl)
+ or c
+ ld (hl),a
+ pop de
+ pop hl
+ ret
+
+SteepLine:
+ ld h,a
+ neg
+ add a,a
+ ld (Line3sm+1),a
+ ld a,b
+ add a,a
+ ld (Line4sm+1),a
+ sub h
+ ld b,h
+ pop hl
+LineLoopSteep:
+ push af
+ ld a,(hl)
+ or c
+ ld (hl),a
+ add hl,de
+ pop af
+ jp m,Line4sm
+Line3sm add a,0
+ rrc c
+ jr nc,$+3
+ inc hl
+Line4sm add a,0
+ djnz LineLoopSteep
+ jr DoneLine