dcb "INIT"
	RTL
dcb "MAIN"
	PHB
	PHK
	PLB
	JSR Gen1
	JSR Gen2
	PLB
	RTL


;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; "Customizable BG scrolling rate" generator
; Coded by Jimmy52905
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SETUP
; Read the Readme for more info.
; It's set to H-Scroll: "Variable", V-Scroll: "Slow" by default!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	HorizLayer2_SpeedSlow = $07		;Change this to a higher value to make Layer 2 scroll slower horizontally. Set to a value from $01 to $07.
	HorizLayer2_SpeedFast = $01		;Change this to a higher value to make Layer 2 scroll faster horizontally. Set to a value from $01 to $07.

	VertLayer2_SpeedSlow = $06		;Change this to a higher value to make Layer 2 scroll slower vertically. Set to a value from $01 to $07.
	VertLayer2_SpeedFast = $01		;Change this to a higher value to make Layer 2 scroll faster vertically. Set to a value from $01 to $07.

	BG_INITPostionHi = $00			;\
	BG_INITPostionLo = $8A			;/ Set this to the BG initial position you want. Setting it in LM won't work!

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; MAIN CODE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Gen1:
MAIN1:
	STZ $1413			;Set horizontal BG scrolling rate to "none" so that this code will work properly.
	STZ $1414			;Set vertical BG scrolling rate to "none" so that this code will work properly.

	REP #$20

	LDA $1462
	LDX #HorizLayer2_SpeedFast
Loop1:
	ASL A
	STA $1466
	DEX
	CPX #$00
	BNE Loop1

	LDX #HorizLayer2_SpeedSlow
Loop2:
	LSR A
	STA $1466
	DEX
	CPX #$00
	BNE Loop2

	LDA $1464
	LDX #VertLayer2_SpeedFast
Loop3:
	ASL A
	STA $1468
	DEX
	CPX #$00
	BNE Loop3

	LDX #VertLayer2_SpeedSlow
Loop4:
	LSR A
	STA $1468
	DEX
	CPX #$00
	BNE Loop4

	LDX #BG_INITPostionLo
INITLoopLo:
	INC $1468
	DEX
	CPX #$00
	BNE INITLoopLo

	LDX #BG_INITPostionHi
INITLoopHi:
	INC $1469
	DEX
	CPX #$00
	BNE INITLoopHi

	SEP #$20
	RTS










;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; "Vertical Auto Scroll" generator
; By Jimmy52905
; Fixed by yoshicookiezeus
; Uses first extra bit: YES
; If extra bit is set, the generator makes the screen scroll downwards instead of upwards
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

STOP		dcb $10		; screen number the sprite should stop at when scrolling downwards

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Main sprite code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Gen2:
Main2:
	LDA $9D		;\ If sprites are locked...
	BNE Return	;/ Go to "Return".

	LDA $13		;\
	LSR A		; |
	BCC Return	;/ Only run code every other frame.

	STZ $1412	; Disable Vertical Scroll so that the code can run properly.

	LDA $18B9	;\ If the first extra bit is set...
	AND #$40	; |
	BNE Down	;/ Go to "Down".

	STZ $55		; Make sure that new tiles are uploaded from the top of the screen

	LDA $1464	;\
	ORA $1465	; |If the screen position is at the top of the level...
	BEQ Return	;/ Go to "Return".

	REP #$20	; 16-bit (accumulator).
	DEC $1464	; Make the screen scroll upwards automatically.
	SEP #$20	; 8-bit (accumulator).

Return:
	RTS		;Return from Subroutine.

Down:
	LDA #$02	;\ Make sure that new tiles are uploaded from the bottom of the screen
	STA $55		;/

	LDA $1465	;\ If the screen position is at screen 10 (last screen of a vertical layer 2 level)...
	CMP STOP	; |
	BEQ Return	;/ Go to "Return".

	REP #$20	; 16-bit (accumulator).
	INC $1464	; Make the screen scroll downwards automatically.
	SEP #$20	; 8-bit (accumulator).

	RTS		;Return from Subroutine.
	