ùúùú  Ý  <@  ²âÿùË'ÿùË'ÿùË'ÿùË'ÿùË'ÿùË';       T           T   T   T   T   T   T   T   T   T   T   T   T   T

		************************************
		****		for PRESTIGE		****
		************************************

RELOCABLE	=		1
FONTSMOD:	EQU		92
FONTSHEIGHT:	EQU		10
MAXCHARS:	EQU		[368/8]-1
SPACELINES:	EQU		2
MAXLINES:	EQU		288/[FONTSHEIGHT+SPACELINES]
DISAPPEARTIME:	EQU		52
ROTATEPOINTS:	EQU		9
STAGETIMEMAX:	EQU		50*9
TEXTTIMEMAX:	EQU		50*5

ON:		EQU		-1
OFF:		EQU		0

FINISH:		EQU		ON



	IFEQ	RELOCABLE
		SECTION	MainCode,CODE
	ELSE
		SECTION	MainCode,CODE_C
	ENDC
		INCDIR	"DF0:"
		INCLUDE	"StartIntro.i"

		MOVEA.L	4.W,A0
		MOVE.L	280(A0),D0
		ADD.L	284(A0),D0
		ADD.W	294(A0),D0
		ROR.W	#3,D0
		DIVU	#10,D0
		SWAP	D0
		LEA		animListPtr(PC),A0
		MOVE.W	D0,(A0)

		BSR		TakeTextsAPTR
		BSR		ClipLine|.initTable
		BSR		ClipLine2|.initTable

	IFEQ	RELOCABLE
		LEA		MainCop|.bpl2,A0
	ELSE
		LEA		MainCop|.bpl2(PC),A0
	ENDC
		MOVE.L	MemoriesAPTR|.textbpl(A5),A1
		BSR		CopInsA1
		ADD.W	#46*288,A1
		BSR		CopInsA1
		ADD.W	#46*288,A1
		BSR		CopInsA1

	IFEQ	RELOCABLE
		LEA		MainCop|.bpl5,A0
		LEA		PrestigeLogo,A1
	ELSE
		LEA		MainCop|.bpl5(PC),A0
		LEA		PrestigeLogo(PC),A1
	ENDC
		BSR		CopInsA1

		LEA		ClipLine|.bitplane(PC),A2
		MOVE.L	MemoriesAPTR|.FillBpl(A5),(A2)
		LEA		SetPlaneINT(PC),A0
		MOVE.L	A0,InterrBSS|.1(A5)
		HALT
		BSR		createAnimation
		ST		MouseBSS|.started(A5)
		LEA		Screen|.Color0(A5),A0
		CLR.L	(A0)+
		CLR.L	(A0)+
		CLR.L	(A0)+
		CLR.L	(A0)+
		BSR		music_init
	IFEQ	RELOCABLE
		LEA		MainCop,A0
	ELSE
		LEA		MainCop(PC),A0
	ENDC
		MOVE.L	A0,$80(A6)

		LEA		Writer|.forbidden(PC),A0
		ST		(A0)
		LEA		Writer(PC),A0
		MOVE.L	A0,InterrBSS|.2(A5)
		BSR		ClearText
		MOVE.L	GearsBSS|.colorsTable(A5),A3
		BSR		FadeGearsDown
		BSR		FadeLogoDown

.mainloop:	BSR		CheckAnimation
		BSR		CheckWriter
		TST.W	MouseBSS|.lmbpressed(A5)
		BEQ.B	.mainloop
		TST.W	GearsBSS|.drawnCorrectly(A5)
		BEQ.B	.noFadeColors
		BSR		FadeLogoUp
		BSR		FadeGearsUp
		BSR		FadeLogoUp2
.noFadeColors:	MOVE.W	#DISAPPEARTIME,Screen|.counter(A5)
.waitInvisible:	TST.W	Screen|.counter(A5)
		BGT.B	.waitInvisible
		HALT
		CLR.L	InterrBSS|.1(A5)
		CLR.L	InterrBSS|.2(A5)
	IFNE	FINISH
		BSR		LastSentence
	ENDC
		BSR		music_end
		HALT
		RTS

		DC.B	'INTRO CREATED BY DURA/FUNZINe'
		EVEN

LastSentence:
	IFEQ	RELOCABLE
		LEA		RotateCop,A2
		LEA		PrestigeLogo,A1
	ELSE
		LEA		RotateCop(PC),A2
		LEA		PrestigeLogo(PC),A1
	ENDC
		LEA		[RotateCop|.bpl2-RotateCop](A2),A0
		BSR		CopInsA1
		LEA		[RotateCop|.colors-RotateCop](A2),A0
		MOVE.W	Screen|.color0(A5),2(A0)
		MOVE.W	Screen|.color4(A5),10(A0)
		HALT
		MOVE.L	MemoriesAPTR|.Scr1(A5),LastSentenceBSS|.bpl1(A5)
		MOVE.L	MemoriesAPTR|.Scr2(A5),LastSentenceBSS|.bpl2(A5)
		MOVE.L	LastSentenceBSS|.bpl1(A5),A0
		BSR		.clearBpl
		MOVE.L	LastSentenceBSS|.bpl2(A5),A0
		BSR		.clearBpl
		BSR		WaitBlit
		MOVE.W	#1024,LastSentenceBSS|.angle(A5)
		LEA		pr_musicfadedirection(PC),A0
		MOVE.W	#-1,(A0)
		LEA		.swapScreens(PC),A0
		MOVE.L	A0,InterrBSS|.1(A5)
		MOVE.L	A2,$80(A6)
		MOVE.W	#$8400,$96(A6)
.waitMusic:	MOVE.L	LastSentenceBSS|.bpl1(A5),A0
		BSR		.clearBpl
		MOVE.W	LastSentenceBSS|.angle(A5),D4
		AND.W	#4094,D4	;sin
		MOVE.W	D4,D5
		ADD.W	#1024,D5	;cos
		AND.W	#4094,D5
		MOVE.L	MemoriesAPTR|.sinus0(A5),A0
		MOVE.W	0(A0,D4.W),D2		;D2-sinus
		MOVE.W	0(A0,D5.W),D3		;D3-cosinus
		LEA		RotVec_Table1(PC),A0
		MOVEQ	#ROTATEPOINTS-1,D7
		MOVE.W	pr_musicfadect(PC),D4	;D4-phase*(6/4)
		MULU	#5,D4					;
		LSR.W	#2,D4					;
		LEA		RotVec_Buf(PC),A1
.calcloop1:	MOVEM.W	(A0)+,D0/D1	
		SUB.W	#50,D0
		SUB.W	D4,D0


;around Z	X'=X*COS + Y*SIN
;		Y'=Y*COS - X*SIN

		MOVE.W	D0,D5			;D5=X
		MOVE.W	D1,D6			;D6=Y
		MULS	D2,D5			;D5=X*SIN(az)
		MULS	D2,D6			;D6=Y*SIN(az)
		MULS	D3,D0			;D0=X*COS(az)
		MULS	D3,D1			;D2=Y*COS(az)
		ADD.L	D6,D0			;D0=X*COS(az)+Y*SIN(az)
		SUB.L	D5,D1			;D1=Z*COS(az)-X*SIN(az)
		ADD.L	D0,D0
		ADD.L	D1,D1
		SWAP	D0
		SWAP	D1

		MOVEM.W	D0-D1,(A1)
		ADDQ.W	#4,A1
		DBF		D7,.calcloop1

		MOVEQ	#ROTATEPOINTS-1,D7
		LEA		RotVec_Buf2(PC),A1
.calcloop2:	MOVEM.W	(A0)+,D0/D1
		ADD.W	D4,D0
		SUB.W	#50,D0

;around Z	X'=X*COS + Y*SIN
;		Y'=Y*COS - X*SIN

		MOVE.W	D0,D5			;D5=X
		MOVE.W	D1,D6			;D6=Y
		MULS	D2,D5			;D5=X*SIN(az)
		MULS	D2,D6			;D6=Y*SIN(az)
		MULS	D3,D0			;D0=X*COS(az)
		MULS	D3,D1			;D2=Y*COS(az)
		ADD.L	D6,D0			;D0=X*COS(az)+Y*SIN(az)
		SUB.L	D5,D1			;D1=Z*COS(az)-X*SIN(az)
		ADD.L	D0,D0
		ADD.L	D1,D1
		SWAP	D0
		SWAP	D1

		MOVEM.W	D0-D1,(A1)
		ADDQ.W	#4,A1
		DBF		D7,.calcloop2

		LEA		ClipLine2|.bitplane(PC),A0
		MOVE.L	LastSentenceBSS|.bpl1(A5),(A0)

		MOVEQ	#ROTATEPOINTS-2,D7
		LEA		RotVec_Buf(PC),A2
		LEA		RotVec_Buf2(PC),A3
.drawLoop:	MOVEM.W	(A2),D0-D3
		ADDQ.W	#4,A2
		ADD.W	#188,D0
		ADD.W	#148,D1
		ADD.W	#188,D2
		ADD.W	#148,D3
		BSR		ClipLine2|.goAhead
		MOVEM.W	(A3),D0-D3
		ADDQ.W	#4,A3
		ADD.W	#188,D0
		ADD.W	#148,D1
		ADD.W	#188,D2
		ADD.W	#148,D3
		BSR		ClipLine2|.goAhead
		DBF		D7,.drawLoop
		BSR		ClipLine2|.fill
		ADD.W	#40,LastSentenceBSS|.angle(A5)
		BSR		WaitBlit
		ST		LastSentenceBSS|.end(A5)
;	move.w	#$F00,$180(A6)
.waitVBlank:	TST.W	LastSentenceBSS|.end(A5)
		BNE.B	.waitVBlank
		LEA		pr_musicfadedirection(PC),A0
		TST.W	(A0)
		BNE.W	.waitMusic
		CLR.L	InterrBSS|.1(A5)
		MOVE.W	#$0400,$96(A6)
		HALT	20
		RTS

.swapScreens:	TST.W	LastSentenceBSS|.end(A5)
		BEQ.B	.NoChange
		CLR.W	LastSentenceBSS|.end(A5)
		MOVE.L	LastSentenceBSS|.bpl1(A5),D0
		MOVE.L	LastSentenceBSS|.bpl2(A5),LastSentenceBSS|.bpl1(A5)
		MOVE.L	D0,LastSentenceBSS|.bpl2(A5)
.NoChange:	MOVE.L	LastSentenceBSS|.bpl2(A5),A1
	IFEQ	RELOCABLE
		LEA		RotateCop|.bpl1,A0
	ELSE
		LEA		RotateCop|.bpl1(PC),A0
	ENDC
		PUSH	A1
		BSR		CopInsA1
		POP		A1
		ADDA.W	#48*16+2,A1
		BRA		CopInsA1

;A0-bplAddress
.clearBpl:	BSR		WaitBlit
		MOVE.L	#$01000000,$40(A6)
		MOVE.L	A0,$54(A6)
		MOVE.W	#0,$66(A6)
		MOVE.W	#[[[288+16]*64]+24],$58(A6)
		RTS

RotVec_Table1:	DC.W	-400,-400, 0,-400, 0,-100, 150,-50, 150,50
		DC.W	0,100, 0,400, -400,400, -400,-400

		DC.W	400,-400, 0,-400, 0,-100, 150,-50, 150,50
		DC.W	0,100, 0,400, 400,400, 400,-400


RotVec_Buf:	BLK.L	ROTATEPOINTS*2,0
RotVec_Buf2:	BLK.L	ROTATEPOINTS*2,0



FadeLogoUp:	LEA		Screen|.color4(A5),A1
		LEA		ColorsBuffer(PC),A0
		MOVE.W	#$FFF,D1
		REPT	4
		MOVE.W	(A1)+,D0
		BSR		Fadding
		ENDR
		MOVEQ	#15,D7
		LEA		ColorsBuffer(PC),A0
.loop1:		LEA		Screen|.color4(A5),A1
		HALT	3
		MOVE.W	(A0)+,(A1)+
		MOVE.W	[15*2](A0),(A1)+
		MOVE.W	[31*2](A0),(A1)+
		MOVE.W	[47*2](A0),(A1)+
		DBF		D7,.loop1
		RTS

FadeLogoUp2:	MOVE.W	#$FFF,D0
		MOVE.W	Screen|.color0(A5),D1
		ADD.W	#$111,D1
		LEA		ColorsBuffer(PC),A0
		BSR		Fadding
		MOVEQ	#15,D7
		LEA		ColorsBuffer(PC),A0
.loop1:		LEA		Screen|.color4(A5),A1
		HALT
		MOVE.W	(A0),(A1)+
		MOVE.W	(A0),(A1)+
		MOVE.W	(A0),(A1)+
		MOVE.W	(A0)+,(A1)+
		DBF		D7,.loop1
		RTS

FadeGearsUp:	LEA		Screen|.color1(A5),A1
		LEA		ColorsBuffer(PC),A0
		MOVE.W	#$FFF,D1
		REPT	3
		MOVE.W	(A1)+,D0
		BSR		Fadding
		ENDR
		MOVEQ	#15,D7
		LEA		ColorsBuffer(PC),A0
.loop1:		LEA		Screen|.color1(A5),A1
		HALT
		MOVE.W	(A0)+,(A1)+
		MOVE.W	[15*2](A0),(A1)+
		MOVE.W	[31*2](A0),(A1)+
		DBF		D7,.loop1
		LEA		Screen|.color1(A5),A1
		LEA		ColorsBuffer(PC),A0
		MOVE.W	Screen|.color0(A5),D1
		REPT	3
		MOVE.W	(A1)+,D0
		BSR		Fadding
		ENDR
		MOVEQ	#15,D7
		LEA		ColorsBuffer(PC),A0
.loop2:		LEA		Screen|.color1(A5),A1
		HALT
		MOVE.W	(A0)+,(A1)+
		MOVE.W	[15*2](A0),(A1)+
		MOVE.W	[31*2](A0),(A1)+
		DBF		D7,.loop2
		RTS

;A3-palette
FadeGearsDown:	BSR		FadeLogoUp
		LEA		Screen|.color1(A5),A1
		LEA		ColorsBuffer(PC),A0
		MOVE.W	#$FFF,D1
		REPT	3
		MOVE.W	(A1)+,D0
		BSR		Fadding
		ENDR
		MOVEQ	#15,D7
		LEA		ColorsBuffer(PC),A0
.loop1:		LEA		Screen|.color1(A5),A1
		HALT
		MOVE.W	(A0)+,(A1)+
		MOVE.W	[15*2](A0),(A1)+
		MOVE.W	[31*2](A0),(A1)+
		DBF		D7,.loop1

		MOVEA.L	A3,A2
		LEA		ColorsBuffer(PC),A0
		MOVE.W	Screen|.color0(A5),D0
		MOVE.W	(A2)+,D1
		BSR		Fadding
		MOVEQ	#15,D7
		LEA		ColorsBuffer(PC),A0
.loop2:		LEA		Screen|.color0(A5),A1
		HALT
		MOVE.W	(A0)+,(A1)+
		DBF		D7,.loop2

		LEA		2(A3),A2
		LEA		ColorsBuffer(PC),A0
		REPT	3
		MOVE.W	Screen|.color1(A5),D0
		MOVE.W	(A2)+,D1
		BSR		Fadding
		ENDR
		MOVEQ	#15,D7
		LEA		ColorsBuffer(PC),A0
.loop3:		LEA		Screen|.color1(A5),A1
		HALT
		MOVE.W	(A0)+,(A1)+
		MOVE.W	[15*2](A0),(A1)+
		MOVE.W	[31*2](A0),(A1)+
		DBF		D7,.loop3
		RTS

;A3-palette
FadeLogoDown:	LEA		Screen|.color4(A5),A1
		LEA		8(A3),A2
		LEA		ColorsBuffer(PC),A0
		REPT	4
		MOVE.W	(A1)+,D0
		MOVE.W	(A2)+,D1
		BSR		Fadding
		ENDR
		MOVEQ	#15,D7
		LEA		ColorsBuffer(PC),A0
.loop1:		LEA		Screen|.color4(A5),A1
		HALT	3
		MOVE.W	(A0)+,(A1)+
		MOVE.W	[15*2](A0),(A1)+
		MOVE.W	[31*2](A0),(A1)+
		MOVE.W	[47*2](A0),(A1)+
		DBF		D7,.loop1
		RTS

ColorsBuffer:	BLK.W	8*16,0


SetPlaneINT:	LEA		.setplanecnt(PC),A2
		MOVE.W	(A2),D0
		ADDQ.W	#4,D0
		AND.W	#7*4,D0
		MOVE.W	D0,(A2)
		MOVE.L	MemoriesAPTR|.SCR1(A5,D0.W),A1
	IFEQ	RELOCABLE
		LEA		MainCop|.bpl1,A0
	ELSE
		LEA		MainCop|.bpl1(PC),A0
	ENDC
		BSR		CopInsA1
		ADD.W	#46*288,A1
		BSR		CopInsA1

		RTS
.setplanecnt:	DC.W	0

CheckWriter:	CMP.L	#TEXTTIMEMAX,MouseBSS|.textTimer(A5)
		BLE.B	.ret
		PUSH
		BSR		ClearText
		POP
		CLR.L	MouseBSS|.textTimer(A5)
.ret:		RTS

ClearText:	TST.W	MouseBSS|.lmbpressed(A5)
		BNE.W	.ret
		LEA		Writer|.forbidden(PC),A0
		ST		(A0)
		MOVE.W	#DISAPPEARTIME,Screen|.counter(A5)
		HALT
.waitInvisible:	TST.W	Screen|.counter(A5)
		BGT.B	.waitInvisible
		MOVE.L	MemoriesAPTR|.textbpl(A5),A0
		BSR		WaitBlit
		MOVE.L	#$01000000,$40(A6)
		MOVE.L	A0,$54(A6)
		MOVEQ	#0,D1
		MOVE.W	D1,$66(A6)
		MOVE.W	#[[288*3*64]+[46/2]],$58(A6)
		LEA		Writer|.nextpageadr(PC),A0
		CLR.W	[Writer|.ypos-Writer|.nextpageadr](A0)
		TST.L	(A0)
		BNE.B	.anytextpointed

		MOVE.L	TextsAPTR(A5),A1
		MOVE.L	A1,(A0)
.anytextpointed:	MOVE.L	(A0),A1		;A1 - text
		LEA		[Writer|.linesstarts](PC),A0
		MOVEQ	#0,D2			;linescnt
.loop1:		MOVEQ	#MAXCHARS+2,D1	;charscnt
.loop2:		MOVE.B	(A1)+,D0
		CMP.B	#27,D0
		BEQ.B	.nextpage
		TST.B	D0
		BMI.B	.loop2
		SUBQ.W	#1,D1
		CMP.B	#10,D0
		BNE.B	.loop2
		ADDQ.W	#1,D1
		ASR.W	#1,D1
		MOVE.W	D1,(A0)+
		ADDQ.W	#1,D2
		CMP.W	#MAXLINES,D2
		BLT.B	.loop1
.nextpage:	LEA		Writer|.nextpageadr(PC),A0
		MOVE.L	(A0),[Writer|.address-Writer|.nextpageadr](A0)
.loop3:		CMP.B	#27,D0
		BEQ.B	.loop3end
		MOVE.B	(A1)+,D0
		BRA.B	.loop3
.loop3end:	MOVE.B	(A1),D0
		CMP.B	#27,D0
		BNE.B	.justnextpage
		MOVE.L	TextsAPTR(A5),A1
.justnextpage:	MOVE.L	A1,(A0)
		MOVE.W	#MAXLINES,D0
		SUB.W	D2,D0
		MOVE.W	D0,[Writer|.yadd-Writer|.nextpageadr](A0)
		CLR.L	[Writer|.clearadr-Writer|.nextpageadr](A0)
		MOVE.W	#1,[Writer|.color-Writer|.nextpageadr](A0)
		BSR		WaitBlit
		MOVE.W	#-1,Screen|.counter(A5)
		LEA		Writer|.forbidden(PC),A0
		CLR.W	(A0)
.ret:		RTS

Writer:		PUSH
		LEA		.clearadr(PC),A0		;clear old cursor
		MOVE.L	(A0),A3
		TST.L	(A0)
		BEQ.B	.nothingToClear
		CLR.L	(A0)
		CLR.B	(A3)
		CLR.B	46(A3)
		AND.B	#$80,[46*288+46](A3)
		AND.B	#$80,[46*288+46+46](A3)
.nothingToClear:
	IFEQ	RELOCABLE
		LEA		MainCop|.textColors+2,A1
	ELSE
		LEA		MainCop|.textColors+2(PC),A1
	ENDC
		LEA		[MainCop|.colors-MainCop|.textColors](A1),A2
		TST.W	Screen|.counter(A5)
		BMI.B	.visible
		BEQ.B	.invisible
		MOVE.W	Screen|.counter(A5),D0
		SUBQ.W	#1,Screen|.counter(A5)
		LEA		.DisappearProgram(PC),A0
		MOVE.W	D0,D1
		LSR.W	#3,D1
		ADD.W	D1,A0
		NOT.B	D0
		BTST	D0,(A0)
		BEQ.B	.invisible
.visible:	LEA		.textColorsTable(PC),A0
		REPT	7
		MOVE.W	(A0)+,(A1)+
		ADDQ.W	#2,A1
		ENDR
		MOVE.W	#$0040,(A1)
		BRA.B	.visiblityOK
.textColorsTable:	DC.W	$FFF,$111,$AAA,$F44,$DCB,$A00,$A98
.DisappearProgram:	DC.L	%00101010110110111011101111011110
		DC.L	%11110111110111110111111111111111

.invisible:	MOVE.W	Screen|.color0(A5),D0
		REPT	7
		MOVE.W	D0,(A1)
		ADDQ.W	#4,A1
		ENDR
		CLR.W	(A1)
.visiblityOK:	LEA		Screen|.color0(A5),A0
		REPT	8
		MOVE.W	(A0)+,(A2)+
		ADDQ.W	#2,A2
		ENDR

		LEA		.forbidden(PC),A0
		TST.W	(A0)
		BNE.W	.ret
		LEA		.flash(PC),A3
		NOT.W	(A3)
		BEQ.W	.ret
.doletter:	LEA		.address(PC),A0
		TST.W	[.ypos-.address](A0)
		BMI.W	.ret
		MOVE.L	(A0),A1
		MOVEQ	#0,D0
		MOVE.B	(A1)+,D0
		MOVE.L	A1,(A0)
		TST.B	D0
		BPL.B	.noNewColor
		AND.B	#3,D0
		BNE.B	.nocolor0
		ADDQ.B	#1,D0
.nocolor0:	MOVE.W	D0,[.color-.address](A0)
		BRA.B	.doletter
.noNewColor:	CMP.B	#27,D0
		BNE.B	.notEOF
		MOVE.W	#-1,[.ypos-.address](A0)
		BRA.W	.ret
.notEOF:	CMP.B	#10,D0
		BNE.B	.notEOL
		ADDQ.W	#2,[.ypos-.address](A0)
		MOVE.B	#" ",D0
		MOVE.W	[.ypos-.address](A0),D1
		CMP.W	#MAXLINES*2,D1
		BLT.W	.ret
		MOVE.W	#-1,[.ypos-.address](A0)
		BRA.W	.ret
.notEOL:	;D0-ASCII CODE
		MOVE.W	.yadd(PC),D1	;yadd
		MOVE.W	.ypos(PC),D2	;ypos
		LEA		.linesstarts(PC),A0
		ADDA.W	D2,A0
		MOVE.W	(A0),D3			;xpos
		ADDQ.W	#1,(A0)
		TST.W	D3
		BMI.W	.ret
		CMP.B	#MAXCHARS,D3
		BGE.W	.ret
		MULU	#[46*[FONTSHEIGHT+SPACELINES]/2],D2
		MULU	#[46*[[FONTSHEIGHT+SPACELINES]&-2]/2],D1
		ADD.W	D2,D1
		ADD.W	D3,D1			;D1-offset
		CMP.B	#32,D0
		BLT.W	.ret
		CMP.B	#'z',D0
		BGT.W	.ret
		MOVE.L	MemoriesAPTR|.textbpl(A5),A1
		ADDA.W	D1,A1
		LEA		[46*288+46](A1),A2
		LEA		[46*288-46](A2),A3
		MOVE.W	.color(PC),D6
		BTST	#0,D6
		SNE		D5
		BTST	#1,D6
		SNE		D6
		MOVE.L	FontsAPTR(A5),A0
		ADDA.W	D0,A0		;font address
		MOVEQ	#FONTSHEIGHT-1,D2
		MOVE.W	#46,D3
		MOVE.W	#FONTSMOD,D4
.loop1:		MOVE.B	(A0),D0
		MOVE.B	D0,D7
		AND.B	D5,D7
		ADDA.W	D4,A0
		MOVE.B	D7,(A1)
		ADDA.W	D3,A1
		MOVE.B	D0,D7
		AND.B	D6,D7
		MOVE.B	D7,(A3)
		ADDA.W	D3,A3
		ROR.B	#1,D0
		MOVE.B	D0,D1
		AND.B	#$7F,D0
		AND.B	#$80,D1
		AND.B	#$80,(A2)
		OR.B	D0,(A2)
		MOVE.B	D1,1(A2)
		ADDA.W	D3,A2
		DBF		D2,.loop1

		LEA		.clearadr(PC),A0		;clear old cursor
		TST.W	[.flash-.clearadr](A0)
		BEQ.B	.ret
		LEA		[[-46*2]+1](A1),A1		;draw new cursor
		MOVE.L	A1,(A0)
		LEA		[[-46*2]+1](A2),A2
		MOVE.B	#$FE,(A1)
		MOVE.B	#$FE,46(A1)
		MOVE.B	#$7F,(A2)
		MOVE.B	#$7F,46(A2)
.ret:		POP
		RTS
.address:	DC.L	0
.nextpageadr:	DC.L	0
.ypos:		DC.W	0
.yadd:		DC.W	0
.linesstarts:	BLK.W	28,0
.clearadr:	DC.L	0
.flash:		DC.W	0
.forbidden:	DC.W	0
.color:		DC.W	0

		INCLUDE	'Fadding.i'

		RSRESET
g_num:		RS.W	1					;*
g_bigR:		RS.W	1					;*
g_bigAngle:	RS.W	1
g_bigAngleNow:	RS.W	1
g_bigAdd1:	RS.W	1
g_bigAdd2:	RS.W	1
g_smallR:	RS.W	1					;*
g_smallAngle:	RS.W	1
g_smallAngleNow:	RS.W	1
g_smallAdd1:	RS.W	1
g_smallAdd2:	RS.W	1
g_width:	RS.W	1	;divided by 2	;*
g_aroundX:	RS.W	1
g_aroundY:	RS.W	1
g_aroundZ:	RS.W	1
g_X0:		RS.W	1					;*
g_Y0:		RS.W	1
g_Z0:		RS.W	1
g_color1:	RS.W	1					;*
g_color2:	RS.W	1
g_color3:	RS.W	1
g_direction	RS.W	1
g_SIZEOF:	RS.W	0

gearsdata:
gear1data:	INCLUDE	"gears1_4.S"
gear2data:	INCLUDE	"gears2_1.S"
gear3data:	INCLUDE	"gears3_1.S"
gear4data:	INCLUDE	"gears4_7.S"
gear5data:	INCLUDE	"gears5_1.S"
gear6data:	INCLUDE	"gears6_4.S"
gear7data:	INCLUDE	"gears7_2.S"
gear8data:	INCLUDE	"gears8_1.S"
gear9data:	INCLUDE	"gears9_4.S"
gear10data:	INCLUDE	"gears10_4.S"

animListPtr:	DC.W	0
animList: 	DC.W	4,gear9data-gearsdata	;<-How much gears
		INCLUDE	"palette1.I"
		DC.W	1,gear2data-gearsdata
		INCLUDE	"palette14.I"
		DC.W	4,gear1data-gearsdata
		INCLUDE	"palette2.I"
		DC.W	1,gear3data-gearsdata
		INCLUDE	"palette5.I"
		DC.W	7,gear4data-gearsdata
		INCLUDE	"palette6.I"
		DC.W	1,gear5data-gearsdata
		INCLUDE	"palette3.I"
		DC.W	2,gear7data-gearsdata
		INCLUDE	"palette8.I"
		DC.W	1,gear8data-gearsdata
		INCLUDE	"palette4.I"
		DC.W	4,gear10data-gearsdata
		INCLUDE	"palette13.I"
		DC.W	4,gear6data-gearsdata
		INCLUDE	"palette7.I"
animListEnd:
ANIMELEMENTLEN:	EQU		20
ANIMLISTMAX:	EQU		[animListEnd-animList]/ANIMELEMENTLEN

CheckAnimation:	CMP.L	#STAGETIMEMAX,MouseBSS|.stageTimer(A5)
		BLE.B	.ret
		PUSH
		BSR		createAnimation
		POP
		CLR.L	MouseBSS|.stageTimer(A5)
.ret:		RTS

createAnimation:	PUSH
		TST.W	MouseBSS|.started(A5)
		BEQ.B	.noFaddings
		BSR		FadeLogoUp
		BSR		FadeGearsUp
		BSR		FadeLogoUp2
.noFaddings:	MOVEQ	#7,D0
.loop1:		TST.W	MouseBSS|.lmbpressed(A5)
		BNE.W	.ret
		MOVE.W	D0,D1
		ADD.W	D1,D1
		ADD.W	D1,D1
		MOVE.L	MemoriesAPTR|.SCR1(A5,D1.W),A0
		BSR		WaitBlit
		MOVE.L	#$01000000,$40(A6)
		MOVE.L	A0,$54(A6)
		MOVEQ	#0,D1
		MOVE.W	D1,$66(A6)
		MOVE.W	#[[288*2*64]+[46/2]],$58(A6)
		DBF		D0,.loop1
		LEA		animListPtr(PC),A0
		MOVE.W	(A0),D0
		MOVE.W	D0,D1
		ADDQ.W	#1,D1
		CMP.W	#ANIMLISTMAX,D1
		BLT.B	.loop
		CLR.W	D1
.loop:		MOVE.W	D1,(A0)
		MULU	#ANIMELEMENTLEN,D0
		LEA		[animList-animListPtr](A0,D0.W),A1
		MOVE.W	(A1)+,D7
		SUBQ.W	#1,D7
		MOVE.W	(A1)+,D0
		LEA		gearsdata(PC),A0
		ADDA.W	D0,A0
		MOVE.L	A1,GearsBSS|.colorsTable(A5)
		REPT	4
		MOVE.W	(A1)+,D0
		ADD.W	#$111,D0
		MOVE.W	D0,6(A1)
		ENDR
.loop2:		TST.W	MouseBSS|.lmbpressed(A5)
		BNE.B	.ret
		BSR		animgear
		LEA		g_SIZEOF(A0),A0
		DBF		D7,.loop2
.ret:		BSR		WaitBlit

		TST.W	MouseBSS|.lmbpressed(A5)
		SEQ		GearsBSS|.drawnCorrectly(A5)
		BNE.B	.ret2
		TST.W	MouseBSS|.started(A5)
		BEQ.B	.ret2
		MOVE.L	GearsBSS|.colorsTable(A5),A3
		BSR		FadeGearsDown
		BSR		FadeLogoDown
.ret2:		POP
		RTS


;A0-geardata
animgear:	PUSH
		MOVEQ	#7,D0
.loop1:		TST.W	MouseBSS|.lmbpressed(A5)
		BNE.B	.ret
		MOVE.W	D0,D1
		ADD.W	D1,D1
		ADD.W	D1,D1
		MOVE.L	MemoriesAPTR|.SCR1(A5,D1.W),A1
		LEA		ClipLine|.bitplane1(PC),A2
		MOVE.L	A1,(A2)
		ADD.W	#46*288,A1
		MOVE.L	A1,ClipLine|.bitplane2-ClipLine|.bitplane1(A2)
		BSR		gear
		BSR		CheckWriter
		DBF		D0,.loop1
.ret:		POP
		RTS



PERSPECTIVE:	EQU		1000
;A0-geardata, D0-phasenum(0-3)
gear:		PUSH
		MOVE.W	g_direction(A0),D1
		EOR.W	D1,D0
		AND.W	#7,D0
		MOVE.W	#4096,D1
		MULU	D0,D1
		LSR.W	#3,D1
		MOVE.W	(A0),D7
		DIVU	D7,D1
		MOVE.W	#4096-2,D2
		MOVE.W	g_bigAngle(A0),D0
		ADD.W	D1,D0
		AND.W	D2,D0
		MOVE.W	D0,g_bigAngleNow(A0)
		MOVE.W	g_smallAngle(A0),D0
		ADD.W	D1,D0
		AND.W	D2,D0
		MOVE.W	D0,g_smallAngleNow(A0)
		MOVE.L	#4096,D3
		DIVU	D7,D3
		MOVE.W	D3,D0
		SUB.W	g_bigAdd1(A0),D0
		MOVE.W	D0,g_bigAdd2(A0)
		SUB.W	g_smallAdd1(A0),D3
		MOVE.W	D3,g_smallAdd2(A0)
		LEA		GearsBSS|.bigtable(A5),A1
		LEA		GearsBSS|.smalltable(A5),A2
		MOVE.L	MemoriesAPTR|.Sinus0(A5),A3
.loop1:	;big circle
		MOVE.W	g_bigAngleNow(A0),D2
		MOVE.W	0(A3,D2.W),D0			;D0=sin(alpha)
		ADD.W	#1024,D2
		AND.W	#4096-2,D2
		MOVE.W	0(A3,D2.W),D1			;D1=cos(alpha)
		MULS	g_bigR(A0),D0
		ADD.L	D0,D0
		SWAP	D0						;D0=bigR*sin(alpha)
		MULS	g_bigR(A0),D1
		ADD.L	D1,D1
		SWAP	D1						;D1=bigR*cos(alpha)
		MOVE.W	g_width(A0),D2			;D2=width
		NEG.W	D2
		BSR		.calcpoint
		MOVE.W	D3,(A1)+
		MOVE.W	D4,(A1)+
		MOVE.W	D5,(A1)+
		NEG.W	D2						;D2=-width
		BSR		.calcpoint
		MOVE.W	D3,(A1)+
		MOVE.W	D4,(A1)+
		MOVE.W	D5,(A1)+
	;small circle
		MOVE.W	g_smallAngleNow(A0),D2
		MOVE.L	MemoriesAPTR|.Sinus0(A5),A3
		MOVE.W	0(A3,D2.W),D0			;D0=sin(alpha2)
		ADD.W	#1024,D2
		AND.W	#4096-2,D2
		MOVE.W	0(A3,D2.W),D1			;D1=cos(alpha2)
		MULS	g_smallR(A0),D0
		ADD.L	D0,D0
		SWAP	D0						;D0=smallR*sin(alpha)
		MULS	g_smallR(A0),D1
		ADD.L	D1,D1
		SWAP	D1						;D1=smallR*cos(alpha)
		MOVE.W	g_width(A0),D2			;D2=width
		NEG.W	D2
		BSR		.calcpoint
		MOVE.W	D3,(A2)+
		MOVE.W	D4,(A2)+
		MOVE.W	D5,(A2)+
		NEG.W	D2						;D2=-width
		BSR		.calcpoint
		MOVE.W	D3,(A2)+
		MOVE.W	D4,(A2)+
		MOVE.W	D5,(A2)+

		MOVE.W	#4096-2,D1
		MOVE.W	g_bigAngleNow(A0),D0
		ADD.W	g_bigAdd1(A0),D0
		AND.W	D1,D0
		MOVE.W	D0,g_bigAngleNow(A0)
		MOVE.W	g_smallAngleNow(A0),D0
		ADD.W	g_smallAdd1(A0),D0
		AND.W	D1,D0
		MOVE.W	D0,g_smallAngleNow(A0)
	
	;big circle
		MOVE.W	g_bigAngleNow(A0),D2
		MOVE.W	0(A3,D2.W),D0			;D0=sin(alpha)
		ADD.W	#1024,D2
		AND.W	#4096-2,D2
		MOVE.W	0(A3,D2.W),D1			;D1=cos(alpha)
		MULS	g_bigR(A0),D0
		ADD.L	D0,D0
		SWAP	D0						;D0=bigR*sin(alpha)
		MULS	g_bigR(A0),D1
		ADD.L	D1,D1
		SWAP	D1						;D1=bigR*cos(alpha)
		MOVE.W	g_width(A0),D2			;D2=width
		NEG.W	D2
		BSR		.calcpoint
		MOVE.W	D3,(A1)+
		MOVE.W	D4,(A1)+
		MOVE.W	D5,(A1)+
		NEG.W	D2						;D2=-width
		BSR		.calcpoint
		MOVE.W	D3,(A1)+
		MOVE.W	D4,(A1)+
		MOVE.W	D5,(A1)+
	;small circle
		MOVE.W	g_smallAngleNow(A0),D2
		MOVE.L	MemoriesAPTR|.Sinus0(A5),A3
		MOVE.W	0(A3,D2.W),D0			;D0=sin(alpha2)
		ADD.W	#1024,D2
		AND.W	#4096-2,D2
		MOVE.W	0(A3,D2.W),D1			;D1=cos(alpha2)
		MULS	g_smallR(A0),D0
		ADD.L	D0,D0
		SWAP	D0						;D0=smallR*sin(alpha)
		MULS	g_smallR(A0),D1
		ADD.L	D1,D1
		SWAP	D1						;D1=smallR*cos(alpha)
		MOVE.W	g_width(A0),D2			;D2=width
		NEG.W	D2
		BSR		.calcpoint
		MOVE.W	D3,(A2)+
		MOVE.W	D4,(A2)+
		MOVE.W	D5,(A2)+
		NEG.W	D2						;D2=-width
		BSR		.calcpoint
		MOVE.W	D3,(A2)+
		MOVE.W	D4,(A2)+
		MOVE.W	D5,(A2)+

		MOVE.W	#4096-2,D1
		MOVE.W	g_bigAngleNow(A0),D0
		ADD.W	g_bigAdd2(A0),D0
		AND.W	D1,D0
		MOVE.W	D0,g_bigAngleNow(A0)
		MOVE.W	g_smallAngleNow(A0),D0
		ADD.W	g_smallAdd2(A0),D0
		AND.W	D1,D0
		MOVE.W	D0,g_smallAngleNow(A0)
		DBF		D7,.loop1
	;everything calculated

		TST.W	MouseBSS|.lmbpressed(A5)
		BNE.W	.rts

		CLR.W	GearsBSS|.drawProgCnt(A5)
		MOVE.L	MemoriesAPTR|.drawProg(A5),A2

		MOVE.W	(A0),D7
		SUBQ.W	#1,D7
		LEA		GearsBSS|.smalltable+12(A5),A3
.loop2:		MOVEM.W	3*6(A3),D0/D1
		MOVEM.W	2*6(A3),D2/D3
		MOVEM.W	   (A3),D4/D5
		BSR		CheckIfVisible
		BLT.B	.notVisi2

		MOVEM.W	(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		MOVE.W	0*6+4(A3),A1

		MOVEM.W	2*6(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		ADD.W	2*6+4(A3),A1

		MOVEM.W	3*6(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		ADD.W	3*6+4(A3),A1

		MOVEM.W	1*6(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		ADD.W	1*6+4(A3),A1
		MOVE.L	A1,D4
		LSR.L	#2,D4
		MOVE.W	D4,(A2)+
		MOVE.W	g_color2(A0),(A2)+
		ADDQ.W	#1,GearsBSS|.drawProgCnt(A5)
.notVisi2:	ADD.W	#4*6,A3
		DBF		D7,.loop2


		MOVE.W	(A0),D7
		SUBQ.W	#1,D7
		LEA		GearsBSS|.bigtable(A5),A3
.loop3:		MOVEM.W	3*6(A3),D0/D1
		MOVEM.W	2*6(A3),D2/D3
		MOVEM.W	   (A3),D4/D5
		BSR		CheckIfVisible
		BLT.B	.notVisi3

		MOVEM.W	(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		MOVE.W	0*6+4(A3),A1

		MOVEM.W	2*6(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		ADD.W	2*6+4(A3),A1

		MOVEM.W	3*6(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		ADD.W	3*6+4(A3),A1

		MOVEM.W	1*6(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		ADD.W	1*6+4(A3),A1
		MOVE.L	A1,D4
		LSR.L	#2,D4
		MOVE.W	D4,(A2)+
		MOVE.W	g_color2(A0),(A2)+
		ADDQ.W	#1,GearsBSS|.drawProgCnt(A5)
.notVisi3:	ADD.W	#4*6,A3
		DBF		D7,.loop3


		MOVE.W	(A0),D7
		ADD.W	D7,D7
		SUBQ.W	#1,D7
		LEA		GearsBSS|.bigtable(A5),A3
		LEA		GearsBSS|.smalltable(A5),A4
.loop4:		MOVEM.W	(A4),D0/D1
		MOVEM.W	(A3),D2-D3
		MOVEM.W	1*6(A3),D4/D5
		BTST	#0,D7
		BEQ.B	.swap4
		EXG		D0,D4
		EXG		D1,D5
.swap4:		BSR		CheckIfVisible
		BLT.B	.notVisi4

		MOVEM.W	(A4),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		MOVE.W	0*6+4(A4),A1

		MOVEM.W	(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		ADD.W	0*6+4(A3),A1

		MOVEM.W	1*6(A3),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		ADD.W	1*6+4(A3),A1

		MOVEM.W	1*6(A4),D0/D1
		MOVEM.W	D0/D1,(A2)
		ADDQ.W	#4,A2
		ADD.W	1*6+4(A4),A1
		MOVE.L	A1,D4
		LSR.L	#2,D4
		MOVE.W	D4,(A2)+
		MOVE.W	g_color3(A0),(A2)+
		ADDQ.W	#1,GearsBSS|.drawProgCnt(A5)
.notVisi4:	ADD.W	#2*6,A3
		ADD.W	#2*6,A4
		DBF		D7,.loop4

		TST.W	MouseBSS|.lmbpressed(A5)
		BNE.W	.rts

;sorting surfaces
		MOVE.W	GearsBSS|.drawProgCnt(A5),D7
		BEQ.W	.nothingToDraw
		SUBQ.W	#1,D7
		BEQ.B	.noSort
.sort1:		MOVE.W	GearsBSS|.drawProgCnt(A5),D6
		SUBQ.W	#2,D6
		MOVE.L	MemoriesAPTR|.drawProg(A5),A2
.sort2:		MOVE.W	16(A2),D0
		CMP.W	36(A2),D0
		BGT.B	.noSwap
		MOVEM.L	(A2),D0-D2
		MOVEM.L	20(A2),D3-D5
		MOVEM.L	D0-D2,20(A2)
		MOVEM.L	D3-D5,(A2)
		MOVEM.L	12(A2),D0-D1
		MOVEM.L	32(A2),D2-D3
		MOVEM.L	D0-D1,32(A2)
		MOVEM.L	D2-D3,12(A2)
.noSwap:	ADD.W	#20,A2
		DBF		D6,.sort2
		DBF		D7,.sort1
.noSort:
		TST.W	MouseBSS|.lmbpressed(A5)
		BNE.W	.rts

;draw surfaces (but not the main one)

		MOVE.W	GearsBSS|.drawProgCnt(A5),D7
		PUSH	A0
		SUBQ.W	#1,D7
		MOVE.L	MemoriesAPTR|.drawProg(A5),A3
.drawSurfaces:	MOVEM.W	(A3)+,D0/D1
		MOVEM.W	(A3),D2/D3
		BSR		ClipLine|.goAhead
		MOVEM.W	(A3)+,D0/D1
		MOVEM.W	(A3),D2/D3
		BSR		ClipLine|.goAhead
		MOVEM.W	(A3)+,D0/D1
		MOVEM.W	(A3),D2/D3
		BSR		ClipLine|.goAhead
		MOVEM.W	(A3)+,D0/D1
		MOVEM.W	-16(A3),D2/D3
		BSR		ClipLine|.goAhead
		ADDQ.W	#2,A3
		MOVE.W	(A3)+,D5
		BSR		ClipLine|.fill
		DBF		D7,.drawSurfaces
		POP		A0
.nothingToDraw:

;draw main surface
		PUSH	A0

		MOVE.W	(A0),D7
		SUBQ.W	#1,D7
		LEA		GearsBSS|.bigtable(A5),A3
		LEA		GearsBSS|.smalltable(A5),A4
		MOVEM.W	10*6(A3),D0/D1
		MOVEM.W	22*6(A3),D2/D3
		MOVEM.W	(A3),D4/D5
		BSR		CheckIfVisible
		BLT.B	.surface2
.loop5:		MOVEM.W	(A4),D0/D1
		MOVEM.W	(A3),D2/D3
		BSR		ClipLine|.goAhead
		MOVEM.W	(A3),D0/D1
		MOVEM.W	2*6(A3),D2/D3
		BSR		ClipLine|.goAhead
		MOVEM.W	2*6(A3),D0/D1
		MOVEM.W	2*6(A4),D2/D3
		BSR		ClipLine|.goAhead
		MOVEM.W	2*6(A4),D0/D1
		MOVEM.W	4*6(A4),D2/D3
		BSR		ClipLine|.goAhead
		ADD.W	#4*6,A3
		ADD.W	#4*6,A4
		DBF		D7,.loop5

		MOVE.L	(SP),A0
		MOVE.W	g_color1(A0),D5
		BSR		ClipLine|.fill
.surface2:	MOVE.L	(SP),A0
		MOVE.W	(A0),D7
		SUBQ.W	#1,D7
		LEA		GearsBSS|.bigtable+6(A5),A3
		LEA		GearsBSS|.smalltable+6(A5),A4
		MOVEM.W	(A3),D0/D1
		MOVEM.W	22*6(A3),D2/D3
		MOVEM.W	10*6(A3),D4/D5
		BSR		CheckIfVisible
		BLT.B	.allfaces
.loop6:		MOVEM.W	(A4),D0/D1
		MOVEM.W	(A3),D2/D3
		BSR		ClipLine|.goAhead
		MOVEM.W	(A3),D0/D1
		MOVEM.W	2*6(A3),D2/D3
		BSR		ClipLine|.goAhead
		MOVEM.W	2*6(A3),D0/D1
		MOVEM.W	2*6(A4),D2/D3
		BSR		ClipLine|.goAhead
		MOVEM.W	2*6(A4),D0/D1
		MOVEM.W	4*6(A4),D2/D3
		BSR		ClipLine|.goAhead
		ADD.W	#4*6,A3
		ADD.W	#4*6,A4
		DBF		D7,.loop6

		MOVE.L	(SP),A0
		MOVE.W	g_color1(A0),D5
		BSR		ClipLine|.fill

.allfaces:	POP		A0

.rts:		POP
		RTS


;x,y,z - D0,D1,D2
;sintable - A3
;>X,Y,Z - D3,D4,D5
.calcpoint:	PUSH	D0-D2/D6-D7/A1/A2

		MOVE.W	g_aroundX(A0),D5
		MOVE.W	0(A3,D5.W),D3	;D3=SIN(ax)
		ADD.W	#1024,D5
		AND.W	#4096-2,D5
		MOVE.W	0(A3,D5.W),D4	;D4=COS(ax)

;around X	Y'=Y*COS + Z*SIN
;		Z'=Z*COS - Y*SIN

		MOVE.W	D1,D5			;D5=Y
		MOVE.W	D2,D6			;D6=Z
		MULS	D3,D5			;D5=Y*SIN(ax)
		MULS	D3,D6			;D6=Z*SIN(ax)
		MULS	D4,D1			;D1=Y*COS(ax)
		MULS	D4,D2			;D2=Z*COS(ax)
		ADD.L	D6,D1			;D1=Y*COS(ax)+Z*SIN(ax)
		SUB.L	D5,D2			;D2=Z*COS(ax)-Y*SIN(ax)
		ADD.L	D1,D1
		ADD.L	D2,D2
		SWAP	D1
		SWAP	D2

		MOVE.W	g_aroundY(A0),D5
		MOVE.W	0(A3,D5.W),D3	;D3=SIN(ay)
		ADD.W	#1024,D5
		AND.W	#4096-2,D5
		MOVE.W	0(A3,D5.W),D4	;D4=COS(ay)

;around Y	X'=X*COS - Z*SIN
;		Z'=Z*COS + X*SIN

		MOVE.W	D0,D5			;D5=X
		MOVE.W	D2,D6			;D6=Z
		MULS	D3,D5			;D5=X*SIN(ay)
		MULS	D3,D6			;D6=Z*SIN(ay)
		MULS	D4,D0			;D0=X*COS(ay)
		MULS	D4,D2			;D2=Z*COS(ay)
		SUB.L	D6,D0			;D0=X*COS(ay)-Z*SIN(ay)
		ADD.L	D5,D2			;D2=Z*COS(ay)+X*SIN(ay)
		ADD.L	D0,D0
		ADD.L	D2,D2
		SWAP	D0
		SWAP	D2


		MOVE.W	g_aroundZ(A0),D5
		MOVE.W	0(A3,D5.W),D3	;D3=SIN(az)
		ADD.W	#1024,D5
		AND.W	#4096-2,D5
		MOVE.W	0(A3,D5.W),D4	;D4=COS(az)

;around Z	X'=X*COS + Y*SIN
;		Y'=Y*COS - X*SIN

		MOVE.W	D0,D5			;D5=X
		MOVE.W	D1,D6			;D6=Y
		MULS	D3,D5			;D5=X*SIN(az)
		MULS	D3,D6			;D6=Y*SIN(az)
		MULS	D4,D0			;D0=X*COS(az)
		MULS	D4,D1			;D2=Y*COS(az)
		ADD.L	D6,D0			;D0=X*COS(az)+Y*SIN(az)
		SUB.L	D5,D1			;D1=Z*COS(az)-X*SIN(az)
		ADD.L	D0,D0
		ADD.L	D1,D1
		SWAP	D0
		SWAP	D1


		ADD.W	g_X0(A0),D0		;D0=X+X0
		ADD.W	g_Y0(A0),D1		;D1=Y+Y0
		ADD.W	g_Z0(A0),D2		;D2=Z+Z0
		BNE.B	.notWarning_0		;Z<>0
		MOVEQ	#1,D2
.notWarning_0:	MULS	#PERSPECTIVE,D0
		DIVS	D2,D0
		MULS	#PERSPECTIVE,D1
		DIVS	D2,D1
		MOVE.W	D0,D3			;D3=X
		ADD.W	#368/2,D3
		MOVE.W	D1,D4			;D4=Y
		ADD.W	#288/2,D4
		MOVE.W	D2,D5
		POP		D0-D2/D6-D7/A1/A2
		RTS

;D0/D1,D2/D3,D4/D5 - x1,y1/x2,y2/x3,y3
;>D0   - bGE if visible bLT - if unvisible
CheckIfVisible:	SUB.W	D2,D4		;D4=X3-X2
		SUB.W	D3,D5		;D5=Y3-Y2
		SUB.W	D2,D0		;D0=X1-X2
		SUB.W	D3,D1		;D1=Y1-Y2
		MULS	D5,D0		;D0=(Y3-Y2)*(X1-X2)
		MULS	D4,D1		;D1=(X3-X2)*(Y1-Y2)
		SUB.L	D1,D0	;D0=(Y3-Y2)*(X1-X2)-(X3-X2)*(Y1-Y2)
		RTS

		INCDIR	"DF0:"
		INCLUDE	"ClipLine.I"
		INCLUDE	"ClipLine2.I"

MemoriesLens:	DC.L	+[4096]		;minus means ChipMemory
		DC.L	-[2*46*288+100]	;Scr1
		DC.L	-[2*46*288+100]
		DC.L	-[2*46*288+100]
		DC.L	-[2*46*288+100]
		DC.L	-[2*46*288+100]
		DC.L	-[2*46*288+100]
		DC.L	-[2*46*288+100]
		DC.L	-[2*46*288+100]

		DC.L	-[3*46*288+100]	;textBpl
		DC.L	-[1*46*288+100]
		DC.L	-[1*46*288+100]
		DC.L	-[1*46*288+100]
		DC.L	2*10*256*8
		DC.L	0


music_init:	PUSH
	IFEQ	RELOCABLE
		LEA		MusicData,A0
	ELSE
		LEA		PrestigeLogo(PC),A0
		LEA		MusicData-PrestigeLogo(A0),A0
	ENDC
		LEA		pr_module(PC),A1
		MOVE.L	A0,(A1)
		BSR		pr_init
		POP
		LEA		music_play(PC),A0
		MOVE.L	A0,InterrBSS|.3(A5)
		RTS
music_play:	PUSH
		MOVEQ	#0,D0
		BTST	#6,$BFE001.L
		SEQ		D0
		OR.W	D0,MouseBSS|.lmbpressed(A5)
		LEA		Writer|.ypos(PC),A0
		TST.W	(A0)
		BPL.B	.textDrawn
		ADDQ.L	#1,MouseBSS|.textTimer(A5)
.textDrawn:	TST.W	GearsBSS|.drawnCorrectly(A5)
		BEQ.B	.stageDrawn
		ADDQ.L	#1,MouseBSS|.stageTimer(A5)
.stageDrawn:	BSR		pr_music
		POP
		RTS
music_end:	PUSH
		CLR.L	InterrBSS|.3(A5)
		BSR		pr_end
		POP
		RTS

		INCLUDE	"prorunner.i"

TakeTextsAPTR:
	IFEQ	RELOCABLE
		LEA		Texts,A1
		LEA		Fonts-32,A0
	ELSE
		LEA		TakeTextsAPTR(PC),A1
		ADDA.L	#[Texts-TakeTextsAPTR],A1
		LEA		[[Fonts-32]-Texts](A1),A0
	ENDC
		MOVE.L	A1,TextsAPTR(A5)
		MOVE.L	A0,FontsAPTR(A5)
		RTS

;/* ********************************************************************
;****			There are global variables here				****
;******************************************************************** */

	IFEQ	RELOCABLE
		SECTION	IntroVariables,BSS
	ENDC

		RSRESET
Variables
MemoriesAPTR	RS.L	0
.Sinus0		RS.L	1
.Scr1		RS.L	1
.Scr2		RS.L	1
.Scr3		RS.L	1
.Scr4		RS.L	1
.Scr5		RS.L	1
.Scr6		RS.L	1
.Scr7		RS.L	1
.Scr8		RS.L	1
.TextBpl	RS.L	1
.Scr10		RS.L	1
.Scr11		RS.L	1
.FillBpl	RS.L	1
.DrawProg	RS.L	1



initintroBSS	RS.L	0
.Copper1	RS.L	1
.DMACON		RS.W	1
.INTENA		RS.L	1
.INTVECTORS	RS.L	[48-2]
.BLINDcop	RS.L	1
.OLDCASHE	RS.L	1
.VBR		RS.L	1

InterrBSS	RS.L	0
.1		RS.L	1
.2		RS.L	1
.3		RS.L	1
.B		RS.L	1
.VBLKtaken	RS.W	1
.Timer		RS.L	1

MouseBSS	RS.L	0
.lmbpressed	RS.W	1
.textTimer	RS.L	1
.stageTimer	RS.L	1
.started	RS.W	1


GearsBSS	RS.L	0
.bigtable	RS.W	2*1024
.smalltable	RS.W	2*1024
.drawProgCnt	RS.W	1
.drawnCorrectly	RS.W	1
.colorsTable	RS.L	1

Screen		RS.L	0
.color0		RS.W	1
.color1		RS.W	1
.color2		RS.W	1
.color3		RS.W	1
.color4		RS.W	1
.color5		RS.W	1
.color6		RS.W	1
.color7		RS.W	1
.counter	RS.W	1

LastSentenceBSS:	RS.L	0
.bpl1:		RS.L	1
.bpl2:		RS.L	1
.angle:		RS.W	1
.end:		RS.W	1

TextsAPTR:	RS.L	1
FontsAPTR:	RS.L	1

		RS.L	1
IntroVariablesLen	RS.L	1
		DS.B	IntroVariablesLen



;/* ********************************************************************
;****			There are chipram-data here					****
;******************************************************************** */

	IFEQ	RELOCABLE
		SECTION	Coppers,DATA_C
	ENDC

BlindCopper:	DC.W	$180,$0000
		DC.W	$100,$0000
		DC.W	$102,$0000
		DC.W	$104,$0000
		DC.L	-2

MainCop:	DC.W	$100,$6600
		DC.W	$102,$0000
		DC.W	$08E,$1C81-32
		DC.W	$090,$3CC1+16
		DC.W	$092,$0028
		DC.W	$094,$00D8
		DC.W	$108,$0000
		DC.W	$10A,$0000
		DC.W	$1B01,$FFFE
.bpl1:		DC.W	$0E0,$0000
		DC.W	$0E2,$0000
		DC.W	$0E8,$0000
		DC.W	$0EA,$0000
.bpl5:		DC.W	$0F0,$0000
		DC.W	$0F2,$0000
.bpl2:		DC.W	$0E4,$0000
		DC.W	$0E6,$0000
		DC.W	$0EC,$0000
		DC.W	$0EE,$0000
		DC.W	$0F4,$0000
		DC.W	$0F6,$0000

.colors:	DC.W	$180,$0565  ;background
		DC.W	$182,$0343  ;cover
		DC.W	$184,$0232  ;middle
		DC.W	$186,$0454  ;wheel

		DC.W	$188,$0898	;background+logo
		DC.W	$18A,$0676  ;cover+logo
		DC.W	$18C,$0565  ;middle+logo
		DC.W	$18E,$0787  ;wheel+logo


.textColors:	DC.W	$192,$0000
		DC.W	$194,$0000
		DC.W	$196,$0000
		DC.W	$198,$0000
		DC.W	$19A,$0000
		DC.W	$19C,$0000
		DC.W	$19E,$0000
		DC.W	$104,$0040


		DC.L	-2

RotateCop:	DC.W	$100,$3200
		DC.W	$102,$0000
		DC.W	$104,$0000
		DC.W	$08E,$1C81-32
		DC.W	$090,$3CC1+16
		DC.W	$092,$0028
		DC.W	$094,$00D8
		DC.W	$108,$0002
		DC.W	$10A,$0000
		DC.W	$1B01,$FFFE
.bpl1:		DC.W	$0E0,$0000
		DC.W	$0E2,$0000
		DC.W	$0E8,$0000
		DC.W	$0EA,$0000
.bpl2:		DC.W	$0E4,$0000
		DC.W	$0E6,$0000

.colors:	DC.W	$180,$0000
		DC.W	$182,$0000
		DC.W	$184,$0000
		DC.W	$186,$0000
		DC.W	$188,$0FFF
		DC.W	$18A,$0FFF
		DC.W	$18C,$0FFF
		DC.W	$18E,$0FFF

		DC.L	-2

;		INCDIR	"RAM:"

PrestigeLogo:	INCBIN	"prestigeLogo.raw"

MusicData:	INCBIN	"Tune"





;/* ********************************************************************
;****			There are fastram-data here					****
;******************************************************************** */


	IFEQ	RELOCABLE
		SECTION	PublicData,DATA
	ENDC
Fonts:		BLK.B	FONTSMOD*FONTSHEIGHT
>extern		"fonts.raw",Fonts,FONTSMOD*FONTSHEIGHT

Texts:		INCBIN	"Texts"

	DC.B	'¹THIS INTRO WAS CREATED BY FUNZIN³e¹',10
	DC.B	'_______________________________________',10
	DC.B	10
	DC.B	'CODE ....................... DURA',10
	DC.B	'ORGANIZATION ............. SADDAM',10
	DC.B	'FONTS .................... SADDAM',10
	DC.B	'MUSIC .................. VON RAYS',10
	DC.B	'MORAL SUPPORT ............ ANDZIA',10
	DC.B        'IDEA ................. HITMAN-PSG',10
	DC.B	'_______________________________________',10
	DC.B	10
	DC.B	'MCMXCV ²#¹POLAND²#¹',10

	DC.B	27,27

