	IFND	includeflag
levelflag = 1
	INCLUDE	Work:Sources/T3/T3_Main
	ENDC

Test	= 0

COPCOL2		= $188
COPCOL3		= $188

character	= $1711c
Sound		= $70200

level_GFX	= $21cd0
main2_GFX	= $1ad1c

Level1		= $1cfcc
Level2		= $26fc8
Level3		= $28bac

AD_Bob		= $20794

tpara_bob	= $22f90
wpara_bob	= $2bedc

fist_bob	= $247f0

flash_buffer	= Work_Buffer1
flash_GFX	= $2f7c4
Rotate2		= $49000
Dummy_Scroll	= $59800

Macros2		= $2bddc
character2	= $2aed4
Glider_flame	= $2e63c

Steel_GFX	= $2e7bc
Chain_GFX	= $2eb1c
Boss_GFX	= $2eb84
Boss_AD_GFX	= $2f2c4
Roll_GFX	= $2f5c4

RopeBob8	= $2e5dc

;
;			    Level Daten
;

bob00 	= $00000
msk00 	= $00060
bob01 	= $00080
msk01 	= $001f4
bob02 	= $00270
msk02 	= $003c0
bob03 	= $00430
msk03 	= $00574
bob04 	= $005e0
msk04 	= $00730
bob05 	= $007a0
msk05 	= $008e4
bob06 	= $00950
msk06 	= $00980
bob07 	= $00990
msk07 	= $00a44
bob08 	= $00a80
msk08 	= $00b40
bob09 	= $00b80
msk09 	= $00cd0
bob0a 	= $00d40
msk0a 	= $00d7c
bob0b 	= $00d90
msk0b 	= $00e74
bob0c 	= $00ec0
msk0c 	= $01040
bob0d 	= $010c0
msk0d 	= $01240

Nbob00 	= $00000
Nmsk00 	= $000d8
Nbob01 	= $00120
Nmsk01 	= $00264
Nbob02 	= $002d0
Nmsk02 	= $00438
Nbob03 	= $004b0
Nmsk03 	= $00630
Nbob04 	= $006b0
Nmsk04 	= $00830
Nbob05 	= $008b0
Nmsk05 	= $00a30
Nbob06 	= $00ab0
Nmsk06 	= $00c24
Nbob07 	= $00ca0
Nmsk07 	= $00de4
Nbob08 	= $00e50
Nmsk08 	= $00f70
Nbob09 	= $00fd0
Nmsk09 	= $01090
Nbob0a 	= $010d0
Nmsk0a 	= $01124
Nbob0b 	= $01140
Nmsk0b 	= $0116a
Nbob0c 	= $01178
Nmsk0c 	= $011c0
Nbob0d 	= $011d8
Nmsk0d 	= $0122c
Nbob0e 	= $01248
Nmsk0e 	= $0129c
Nbob0f 	= $012b8
Nmsk0f 	= $0130c
Nbob10 	= $01328
Nmsk10 	= $01376
Nbob11 	= $01390
Nmsk11 	= $013de
Nbob12 	= $013f8
Nmsk12 	= $01446
Nbob13 	= $01460
Nmsk13 	= $014ae
Nbob14 	= $014c8
Nmsk14 	= $01510
Nbob15 	= $01528
Nmsk15 	= $01576
Nbob16 	= $01590
Nmsk16 	= $015d8
Nbob17 	= $015f0
Nmsk17 	= $0161a
Nbob18 	= $01628
Nmsk18 	= $01676
Nbob19 	= $01690
Nmsk19 	= $016e4
Nbob1a 	= $01700
Nmsk1a 	= $0174e
Nbob1b 	= $01768
Nmsk1b 	= $017c2
Nbob1c 	= $017e0
Nmsk1c 	= $0183a
Nbob1d 	= $01858
Nmsk1d 	= $018b8
Nbob1e 	= $018d8
Nmsk1e 	= $01938
Nbob1f 	= $01958
Nmsk1f 	= $019b8
Nbob20 	= $019d8
Nmsk20 	= $01af8
Nbob21 	= $01b58
Nmsk21 	= $01c3c
Nbob22 	= $01c88
Nmsk22 	= $01d30
Nbob23 	= $01d68
Nmsk23 	= $01dc8
Nbob24 	= $01de8
Nmsk24 	= $01e48
Nbob25 	= $01e68
Nmsk25 	= $01ec2
Nbob26 	= $01ee0
Nmsk26 	= $01f40
Nbob27 	= $01f60
Nmsk27 	= $01ffc
Nbob28 	= $02030
Nmsk28 	= $020f0
Nbob29 	= $02130
Nmsk29 	= $02190
Nbob2a 	= $021b0
Nmsk2a 	= $02210
Nbob2b 	= $02230
Nmsk2b 	= $02290

Abob00 	= $00000
Abob01 	= $006c0
Abob02 	= $00f1e

Blit_Rope8:
	tst.b	T_rope
	beq	.out
	tst.b	T_targeting
	bmi.s	.out
	tst.b	R_blink
	beq.s	.dont_blink
	subq.b	#1,R_blvz
	bpl.s	.dont_blink
	move.b	#0,R_blvz
	tst.b	Scr_Screen_num(a6)
	bne.s	.dont_blink
	move.b	#2,R_blvz
	eor.b	#$80,R_blink
.dont_blink:

	move.l	Scr_Supply_Field(a6),d0
	move.l	d0,bltdpth(a5)
	move.l	d0,bltcpth(a5)
	lea	dmaconr(a5),a4
	move.l	Rest_Pointer,a3
	lea	rope_coords(pc),a2

	tst.b	T_targeting
	bne	.skip0

	tst.w	Scr_Screen_num(a6)
	beq.s	.skip0
	addq.l	#4,a2
.skip0:
	moveq	#7,d7
.rope_loop:
	move.w	(a2)+,d0
	move.w	(a2)+,d1
	bmi.s	.end
	bsr.s	BlitRopeBall8
	addq.l	#4,a2
.dont_show:
	dbf	d7,.rope_loop
.end:
	move.l	a3,Rest_Pointer
	clr.w	(a3)
.out:
	tst.b	R_blink
	bpl.s	.no_off
	tst.w	Scr_Screen_num(a6)
	beq.s	.no_off
	eor.b	#$80,R_blink
.no_off:
	rts

BlitRopeBall8:
	move.l	#RopeBob8,d2
	tst.b	R_blink
	bpl.s	.no_blink
	move.l	#RopeBob8+48,d2
.no_blink:
	move.l	d2,bltbpth(a5)
	move.l	#RopeBob8+48,bltapth(a5)

	move.w	Scr_X_Level_Pos(a6),d2
	and.w	#15,d2
	add.w	d2,d0
	move.w	d0,d2
	lsr.w	#3,d0
	and.l	#$fffe,d0

	move.w	Scr_Plane_Height(a6),d3
	sub.w	Scr_Y_Play_Anf(a6),d3
	cmp.w	d3,d1
	bge.s	.under_wrap

	subq.w	#8,d3
	cmp.w	d3,d1
	bgt	.in_wrap

	;Komplett drber.

	add.l	Scr_Blt_Adr1(a6),d0
	bra.s	.goon
.under_wrap:

	;Komplett drunter.

	add.l	Scr_Blt_Adr2(a6),d0
	sub.w	d3,d1
.goon:
	mulu	Scr_Plane_Width(a6),d1
	add.l	d1,d0

	move.l	d0,4(a3)

	and.w	#15,d2
	cmp.w	#7,d2
	blt	.blit_small

	move.l	#$ffff0000,bltafwm(a5)
	move.w	Scr_Single_Plane(a6),d3
	subq.w	#4,d3
	move.l	#$fffefffe,d4
	move.w	#64*8*3+2,d5
	bra.s	.blit_it
.blit_small:
	move.l	#-1,bltafwm(a5)
	move.w	Scr_Single_Plane(a6),d3
	subq.w	#2,d3
	moveq	#0,d4
	move.w	#64*8*3+1,d5
.blit_it:
	ror.w	#4,d2
	move.w	d2,bltcon1(a5)
	or.w	#$0fca,d2
	move.w	d2,bltcon0(a5)

	add.w	Scr_Supply_Field+2(a6),d0

	move.w	d0,bltdpth+2(a5)
	move.w	d0,bltcpth+2(a5)
	move.w	d3,bltdmod(a5)
	move.w	d3,bltcmod(a5)
	move.w	d3,2(a3)
	move.l	d4,bltbmod(a5)
	move.w	d5,bltsize(a5)
.bwait0:
	btst	#14,(a4)
	bne	.bwait0
	move.w	d5,(a3)

	addq.l	#8,a3

	rts
.in_wrap:
	move.w	d3,d5
	sub.w	d1,d5
	addq.w	#8,d5

	move.l	d0,-(sp)
	add.l	Scr_Blt_Adr1(a6),d0	;Adresse fr obere Hlfte
	mulu	Scr_Plane_Width(a6),d1
	add.l	d1,d0

	move.l	d0,4(a3)
	move.w	d5,d6
	add.w	d6,d6
	add.w	d6,d5		;*3
	asl.w	#6,d5

	and.w	#15,d2
	cmp.w	#7,d2
	blt	.blit_small2

	move.l	#$ffff0000,bltafwm(a5)
	move.w	Scr_Single_Plane(a6),d3
	subq.w	#4,d3
	move.l	#$fffefffe,d4
	or.w	#2,d5
	bra.s	.blit_it2
.blit_small2:
	move.l	#-1,bltafwm(a5)
	move.w	Scr_Single_Plane(a6),d3
	subq.w	#2,d3
	moveq	#0,d4
	or.w	#1,d5
.blit_it2:
	ror.w	#4,d2
	move.w	d2,bltcon1(a5)
	or.w	#$0fca,d2
	move.w	d2,bltcon0(a5)

	add.w	Scr_Supply_Field+2(a6),d0

	move.w	d0,bltdpth+2(a5)
	move.w	d0,bltcpth+2(a5)
	move.w	d3,bltdmod(a5)
	move.w	d3,bltcmod(a5)
	move.w	d3,2(a3)
	move.l	d4,bltbmod(a5)
	move.w	d5,bltsize(a5)
.bwait1:
	btst	#14,(a4)
	bne	.bwait1
	move.w	d5,(a3)

	addq.l	#8,a3
	move.w	d3,2(a3)

	move.l	(sp)+,d0
	add.l	Scr_Blt_Adr2(a6),d0
	move.l	d0,4(a3)
	add.w	Scr_Supply_Field+2(a6),d0

	move.w	d0,bltdpth+2(a5)
	move.w	d0,bltcpth+2(a5)
	move.w	d5,d6
	and.w	#$003f,d6
	and.w	#$ffc0,d5
	or.w	#64*8*3,d6
	sub.w	d5,d6
	move.w	d6,bltsize(a5)
.bwait2:
	btst	#14,(a4)
	bne	.bwait2
	move.w	d6,(a3)

	addq.l	#8,a3
	rts

		;AdressOffset,Anzahl Zeilen gesamt (Bob+maske),Breite pro Zeile
level_flipI:	dc.w	bob02,28*4,32/8
		dc.w	bob03,27*4,32/8
		dc.w	bob04,28*4,32/8
		dc.w	bob05,27*4,32/8
		dc.w	bob07,15*4,32/8
		dc.w	bob08,16*4,32/8
		dc.w	bob09,28*4,32/8
		dc.w	bob0a,10*4,16/8

		dc.w	-1

flash_flipI:	dc.w	Fbob00,64*3,48/8
		dc.w	Fbob01,64*3,32/8

		dc.w	-1

main_flipI2:	dc.w	Nbob18,13*4,16/8
		dc.w	Nbob19,14*4,16/8
		dc.w	Nbob1a,13*4,16/8
		dc.w	Nbob1b,15*4,16/8
		dc.w	Nbob1c,15*4,16/8
		dc.w	-1

Cue_Table0:	dc.w	100,161

Cue_Table1:	dc.w	124,577		;0
		dc.w	690,641		;1
		dc.w	1360,385	;2 Flyer 1
		dc.w	2470,241	;3 Robot
		dc.w	3031,465	;4
		dc.w	3876,545	;5
		dc.w	4649,225	;6
		dc.w	426,657		;7 Fist


Cue_Table2:	dc.w	159,433		;2157,577	;159,433
		dc.w	978,531
		dc.w	1355,177	;2 Flyer 2
		dc.w	792,1441

Bob_Structure:	dcb.b	BOB_MAXIMUM*BOB_ENTRY_LENGTH,BOB_FALSE

Bob_Structure_End = Bob_Structure+(BOB_MAXIMUM*BOB_ENTRY_LENGTH)

Bob_Info_Tab_Adrs	dc.l	Diamond_Info_0
		;--1
		dc.l	Explo_Info_1	;1 Big Xplo
		dc.l	Explo_Info_2	;2 Small Xplo
		dc.l	Box_Info_1	;3 Extrabox
		dc.l	Box_Info_2	;4 Extrabox Deckel
		dc.l	Bonus_Info_1	;5 PowerUp
		dc.l	Rocket_Info_1	;6 Lenkrakete
		dc.l	Shoot_Info_1	;7 Schuss
		dc.l	CuePoint_Info_1	;8 Cuepoint
		dc.l	Mine_Info_1	;9 MinenExplo
		dc.l	Diamond_Info_1	;10 Diamant

		dc.l	Ball_Info_1	;11 Ball
		dc.l	Walker_Info_1	;12 Walker
		dc.l	Birne_Info_1	;13 Birne
		dc.l	Birne_Info_2	;14 Birnenkette
		dc.l	Fist_Info_1	;15 Faust
		dc.l	Robot_Info_1	;16 Schrott Roboter
		dc.l	Flyer_Info_1	;17 Licht-Flyer
		dc.l	Flyer_Info_2	;18 Licht-Flyer Shot
		dc.l	Kran_Info_1	;19 Kranboss
		dc.l	Panzer_Info_1	;20 Panzer
		dc.l	Trash_Info_2	;21 Panzer
		dc.l	Walker_Info_2	;22 Walker Sky
		dc.l	Fire_Info_1	;23 Flamme von SkyWalker
		dc.l	Flame_Info_1	;24 Glider-Flamme
		dc.l	Steel_Info_1	;25 Stahltrger
		dc.l	Steel_Info_2	;26 Stahltrger Help
		dc.l	Trash_Info_1	;27 Kran-Trash
		dc.l	Chain_Info_1	;28 Kran-Chain
		dc.l	Flyer_Info_3	;29 Licht-Flyer Light
		dc.l	Flyer_Info_4	;30 Licht-Flyer Light Slave

Explo_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	128		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Standart_BobAnim	;Routine, die Bob verwaltet
		dc.l	Explo_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	1		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Explo_Info_2:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Standart_BobAnim	;Routine, die Bob verwaltet
		dc.l	Explo2_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	0		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Box_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Extrabox	;Routine, die Bob verwaltet
		dc.l	Box_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Box_Info_2:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Box_Deckel	;Routine, die Bob verwaltet
		dc.l	Deckel_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Bonus_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Start_Bonus	;Routine, die Bob verwaltet
		dc.l	Bonus1_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Shoot_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Shoot_Start	;Routine, die Bob verwaltet
		dc.l	Shoot_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Rocket_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	16		;Bob_I_Out_X_Val
		dc.w	16		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Rocket		;Routine, die Bob verwaltet
		dc.l	Rocket_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Rocket_Info_2:	;Nur Dummy-Info, fr geflippte Rocket.
		dc.w	NORM+FLIP	;Bob_Mode
		dc.w	16		;Bob_I_Out_X_Val
		dc.w	16		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	-1*2		;A Modulo
		dc.w	-1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Rocket		;Routine, die Bob verwaltet
		dc.l	Rocket_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

CuePoint_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	CuePointStart	;Routine, die Bob verwaltet
		dc.l	Rocket_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Mine_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	MineExplo	;Routine, die Bob verwaltet
		dc.l	MineExplo_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	1		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Diamond_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Diamond_Start	;Routine, die Bob verwaltet
		dc.l	Diamond_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	1		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Diamond_Info_2:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffffffff	;Bob_I_AFWM
		dc.w	1		;Blit-Breite in Wrtern
		dc.w	2		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Diamond		;Routine, die Bob verwaltet
		dc.l	Diamond_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	1		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.


Ball_Info_1:	dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	4		;Hitpoints
		dc.l	Start_Ball	;Routine, die Bob verwaltet
		dc.l	Ball_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Walker_Info_1:	dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	4		;Hitpoints
		dc.l	Walker_StartL	;Routine, die Bob verwaltet
		dc.l	Walker_AnimTableL	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Walker_Info_2:	dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	4		;Hitpoints
		dc.l	Walker_Sky_Start;Routine, die Bob verwaltet
		dc.l	Walker_Sky_AnimTableR	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Fire_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	0		;Hitpoints
		dc.l	Fire		;Routine, die Bob verwaltet
		dc.l	Fire_AnimTableR	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	0		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Birne_Info_1:	dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	4		;Hitpoints
		dc.l	Start_Birne	;Routine, die Bob verwaltet
		dc.l	Birne_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Birne_Info_2:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Move_Bonus_Jump	;Routine, die Bob verwaltet
		dc.l	Birne_AnimTable2;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Fist_Info_1:
		dc.w	FAST+BLOCK	;Bob_Mode
		dc.w	128		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	144		;Breite in Pixels
		dc.w	80		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	16		;Breite einer Zeile der Maske in Bytes
		dc.w	8*2		;A Modulo
		dc.w	8*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	9		;Blit-Breite in Wrtern
		dc.w	18		;Blit-Breite in Bytes
		dc.w	20		;Hitpoints
		dc.l	Start_Fist	;Routine, die Bob verwaltet
		dc.l	Fist_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Robot_Info_1:
		dc.w	FAST+BLOCK	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	96		;Breite in Pixels
		dc.w	106		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	10		;Breite einer Zeile der Maske in Bytes
		dc.w	5*2		;A Modulo
		dc.w	5*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	6		;Blit-Breite in Wrtern
		dc.w	12		;Blit-Breite in Bytes
		dc.w	20		;Hitpoints
		dc.l	Start_Robot	;Routine, die Bob verwaltet
		dc.l	Robot_AnimTableL;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Flyer_Info_1:
		dc.w	FAST+BLOCK	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	96		;Breite in Pixels
		dc.w	48		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	12		;Breite einer Zeile der Maske in Bytes
		dc.w	6*2		;A Modulo
		dc.w	6*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	7		;Blit-Breite in Wrtern
		dc.w	14		;Blit-Breite in Bytes
		dc.w	20		;Hitpoints
		dc.l	Start_Fly	;Routine, die Bob verwaltet
		dc.l	Flyer_AnimTable	;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Flyer_Info_2:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-2		;Hitpoints
		dc.l	Fly_Shot	;Routine, die Bob verwaltet
		dc.l	Fly_Shot_AnimTable	;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Flyer_Info_3:
		dc.w	BLOCK+FAST	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	48		;Breite in Pixels
		dc.w	64		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	6		;Breite einer Zeile der Maske in Bytes
		dc.w	3*2		;A Modulo
		dc.w	3*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	4		;Blit-Breite in Wrtern
		dc.w	8		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Start_Flyer_Light;Routine, die Bob verwaltet
		dc.l	Flyer_AnimTable2;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Flyer_Info_4:
		dc.w	COLOUR		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	48		;Breite in Pixels
		dc.w	10		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	6*3		;Breite einer Zeile der Maske in Bytes
		dc.w	3*2*3		;A Modulo
		dc.w	3*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Flyer_Light_Slave;Routine, die Bob verwaltet
		dc.l	Flyer_AnimTable3;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Kran_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	100		;Hitpoints
		dc.l	Start_Kran	;Routine, die Bob verwaltet
		dc.l	Kran_AnimTable	;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Panzer_Info_1:
		dc.w	BLOCK+FAST	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	112		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	14		;Breite einer Zeile der Maske in Bytes
		dc.w	7*2		;A Modulo
		dc.w	7*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	8		;Blit-Breite in Wrtern
		dc.w	16		;Blit-Breite in Bytes
		dc.w	-2		;Hitpoints
		dc.l	Start_Panzer	;Routine, die Bob verwaltet
		dc.l	Panzer_AnimTable1	;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Flame_Info_1:
		dc.w	FAST+BLOCK	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffffffff	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Start_Flame	;Routine, die Bob verwaltet
		dc.l	Flame_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Steel_Info_1:
		dc.w	BLOCK+FAST	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	144		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	18		;Breite einer Zeile der Maske in Bytes
		dc.w	9*2		;A Modulo
		dc.w	9*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffffffff	;Bob_I_AFWM
		dc.w	9		;Blit-Breite in Wrtern
		dc.w	18		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Start_Steel	;Routine, die Bob verwaltet
		dc.l	Steel_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Steel_Info_2:
		dc.w	BLOCK+FAST	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$00000000	;Bob_I_AFWM
		dc.w	1		;Blit-Breite in Wrtern
		dc.w	2		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Start_Steel2	;Routine, die Bob verwaltet
		dc.l	Steel2_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Trash_Info_1:
		dc.w	BLOCK+FAST	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	64		;Breite in Pixels
		dc.w	24		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	6		;Breite einer Zeile der Maske in Bytes
		dc.w	3*2		;A Modulo
		dc.w	3*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	4		;Blit-Breite in Wrtern
		dc.w	8		;Blit-Breite in Bytes
		dc.w	-2		;Hitpoints
		dc.l	handle_dummy	;Routine, die Bob verwaltet
		dc.l	Steel2_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Trash_Info_2:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	48		;Breite in Pixels
		dc.w	24		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	6		;Breite einer Zeile der Maske in Bytes
		dc.w	3*2		;A Modulo
		dc.w	3*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	4		;Blit-Breite in Wrtern
		dc.w	8		;Blit-Breite in Bytes
		dc.w	-2		;Hitpoints
		dc.l	handle_dummy	;Routine, die Bob verwaltet
		dc.l	Steel2_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$fffeffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Chain_Info_1:
		dc.w	BLOCK+FAST	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	128		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Start_Bossrope	;Routine, die Bob verwaltet
		dc.l	Kran_AnimTable+44	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	6		;Delay Init
		dc.l	$ffffffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Steel
*---------------------------------------------------------------------------
Start_Steel:
	move.l	#Steel,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	IFNE	Test
	move.w	#30000,Bob_Special_4(a4)
	ENDC

Steel:
	tst.b	Bob_Special_3(a4)
	bne.s	.count
	movem.w	Bob_X_Position(a4),d0-d1	;Check if player is standing
	subq.w	#2,d1
	sub.w	#64,d0
	move.w	d0,d2
	add.w	#146,d2
	bsr	check_foot_frame
	beq.s	.no_stand
	tst.w	Bob_Special_4(a4)
	bmi	.last
	st	Bob_Special_3(a4)
.count:
	subq.w	#1,Bob_Special_4(a4)
	bne.s	.no_stand

	movem.w	Bob_X_Position(a4),d0-d1
	sub.w	#64,d0
	moveq	#9-1,d7
.loop:
	movem.w	d0-d1/d7,-(sp)
	moveq	#6,d2
	bsr	Blit_Char
	movem.w	(sp)+,d0-d1/d7
	add.w	#16,d0
	dbf	d7,.loop

	bsr	Calc_Map_Adress

	moveq	#9-1,d7
.clear1:
	move.b	#6,-(a0)
	dbf	d7,.clear1

	move.b	#0,Bob_BlitStatus(a4)

	move.l	#Steel_2,Bob_Routine(a4)
	move.w	#2,Bob_Special_1(a4)
	move.w	Bob_Y_Position(a4),Bob_Special_2(a4)
	bra	Steel_Stand
.no_stand:
	bra	Test_Bob_Out
.last:
	st	T_freeze
	st	T_runout
	clr.w	T_joyforce

	subq.w	#1,Bob_Special_7(a4)
	bpl.s	.no_stand			;Wartezeit noch nicht runter!

	move.l	Act_Bob_Structure,a0
	moveq	#BOB_MAXIMUM-1,d7
	moveq	#0,d6
.cloop:
	cmp.l	a0,a4
	beq.s	.cnext
	cmp.l	#Steel,Bob_Routine(a0)
	bne.s	.cnext
	st	d6
	st	Bob_Special_3(a0)
	move.w	#1,Bob_Special_4(a0)		;Runterfallen lassen!
.cnext:
	lea	BOB_ENTRY_LENGTH(a0),a0
	dbf	d7,.cloop
	tst.w	d6
	beq.s	.goon
	move.w	#50,Bob_Special_7(a4)
	move.w	#1232-16,Scr_Y_Fix(a6)

	rts
.goon:
	waitblt
	move.w	#$0100,bltcon0(a5)
	move.w	#0,bltdmod(a5)

	move.l	Scr_Blt_Adr1(a6),a0
	lea	-planeb*16*3(a0),a0
	move.l	a0,d4
	add.l	#GameBpl0,d4
	move.l	d4,bltdpth(a5)
	move.w	#64*3*16+(planeb/2),bltsize(a5)
	move.l	a0,d4
	add.l	#GameBpl1,d4
	waitblt
	move.l	d4,bltdpth(a5)
	move.w	#64*3*16+(planeb/2),bltsize(a5)
	move.l	a0,d4
	add.l	#GameBpl2,d4
	waitblt
	move.l	d4,bltdpth(a5)
	move.w	#64*3*16+(planeb/2),bltsize(a5)
	waitblt

	move.l	#Last_Steel,Bob_Routine(a4)

	lea	Level3+73*levelb0,a0
	moveq	#6,d0
	moveq	#6,d6
.clear3:
	moveq	#19,d7
.clear2:
	move.b	d0,(a0)+
	dbf	d7,.clear2
	sub.l	#20+levelb0,a0
	dbf	d6,.clear3

	move.l	Act_Bob_Structure(pc),a0
	moveq	#BOB_MAXIMUM-1,d7
.kloop:
	cmp.l	a0,a4
	beq.s	.next
	cmp.l	#Walker_Sky,Bob_Routine(a0)
	beq.s	.explode
	cmp.l	#Flame,Bob_Routine(a0)
	bne.s	.kill
	move.w	Scr_Y_Level_Pos(a6),d0
	cmp.w	Bob_Y_Position(a0),d0
	blt.s	.next
.kill:
	st	Bob_Used(a0)
.explode:
	clr.w	Bob_Power(a0)			;Walker mssen Explodieren!
.next:
	lea	BOB_ENTRY_LENGTH(a0),a0
	dbf	d7,.kloop

	sf	T_wheel

	move.w	#50,Bob_Special_1(a4)

	move.w	T_posX,d0
	add.w	Scr_X_Level_Pos(a6),d0
	cmp.w	#104,d0
	beq.s	.ok
	cmp.w	#105,d0
	beq.s	.ok
	blt.s	.right
	move.b	#1<<LEFT,T_joyforce
	rts
.right:
	move.b	#1<<RIGHT,T_joyforce
.ok:

Last_Steel:
	cmp.w	#1000,Scr_Y_Level_Pos(a6)
	bne.s	.no
	move.b	#-1,Cue_Point+1
.no:
	subq.w	#1,Bob_Special_1(a4)
	bne.s	.no_fix
	move.w	#1000,Scr_Y_Fix(a6)		;Scrollt nach oben!
.no_fix:
	move.w	T_posX,d0
	add.w	Scr_X_Level_Pos(a6),d0
	cmp.w	#104,d0
	beq.s	.stop
	cmp.w	#105,d0
	bne.s	.out
.stop:
	clr.w	T_joyforce

.out:
	rts

Calc_Map_Adress:
	lsr.w	#4,d1
	subq.w	#2,d1
	mulu	Scr_Level_Width(a6),d1
	lsr.w	#4,d0
	subq.w	#1,d0
	add.w	d0,d1
	add.l	Scr_Level(a6),d1
	move.l	d1,a0
	rts

Blit_Char:
	move.w	Scr_X_Level_Pos(a6),d3
	sub.w	d3,d0
	bmi	.out
	cmp.w	#320,d0
	bgt.s	.out
	sub.w	Scr_Y_Level_Pos(a6),d1
	bmi.s	.out

	and.w	#15,d3
	add.w	d3,d0

	move.w	Scr_Plane_Height(a6),d3
	sub.w	Scr_Y_Play_Anf(a6),d3
	cmp.w	d3,d1
	bge.s	.under_wrap

	;ber der Wrap-Zeile.

	move.l	Scr_Blt_Adr1(a6),d4
	bra.s	.goon
.under_wrap:
	move.l	Scr_Blt_Adr2(a6),d4
	sub.w	d3,d1
.goon:
	mulu	Scr_Plane_Width(a6),d1
	add.l	d1,d4

	lsr.w	#3,d0
	and.w	#$fffe,d0
	add.w	d0,d4
	add.l	Scr_Refresh_Field(a6),d4

	move.l	d4,bltdpth(a5)
	move.w	Scr_Blt_D_Modulo(a6),bltdmod(a5)
	move.w	#$0100,bltcon0(a5)
	move.w	#64*16*3+1,bltsize(a5)
	waitblt
.out:
	rts

Steel_2:
	subq.w	#1,Bob_Special_1(a4)
	bne	Steel_Stand
	move.l	#Steel_3,Bob_Routine(a4)
	move.w	#30,Bob_Special_1(a4)
	move.w	Bob_Y_Position(a4),Bob_Special_2(a4)
Steel_3:
	eor.w	#1,Bob_Y_Position(a4)
	subq.w	#1,Bob_Special_1(a4)
	bne	Steel_Stand
	move.l	#Steel_4,Bob_Routine(a4)
	move.w	#12,Bob_Special_1(a4)

	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Special_2(a4),d1
	sub.w	#80,d1
	movem.w	d0-d1,-(sp)
	moveq	#28,d2
	bsr	Set_Char
	movem.w	(sp)+,d0-d1
	add.w	#16,d1

	moveq	#4-1,d7
.loop:
	movem.w	d0-d1/d7,-(sp)
	moveq	#6,d2
	bsr	Blit_Char
	movem.w	(sp)+,d0-d1/d7
	add.w	#16,d1
	dbf	d7,.loop

	bsr	Calc_Map_Adress

	moveq	#4-1,d7
.clear1:
	lea	-levelb0(a0),a0
	move.b	#6,(a0)
	dbf	d7,.clear1
	lea	-levelb0(a0),a0
	move.b	#28,(a0)

	movem.w	Bob_X_Position(a4),d1-d2
	moveq	#26,d0
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry
	move.w	#2,Bob_Special_1(a4)

	move.l	(sp)+,a4

	;Ketten-Fetzen starten.

	lea	Chain_List(pc),a1
	moveq	#0,d7
.next:
	movem.w	Bob_X_Position(a4),d1-d2
	tst.w	(a1)
	beq	Steel_Stand
	add.w	(a1)+,d2
	moveq	#6,d0
	movem.l	a4/a1/d7,-(sp)
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.l	#Chain,Bob_Routine(a4)
	move.l	#Chain_AnimTable,Bob_Next_Anim(a4)
	move.l	a4,a0
	movem.l	(sp)+,a4/a1/d7
	move.w	(a1)+,Bob_Special_1(a0)
	move.w	(a1)+,Bob_Special_2(a0)
	move.w	(a1)+,Bob_Special_3(a0)
	move.w	d7,Bob_Special_4(a0)
	eor.w	#1,d7
	bra.s	.next
.end:

Chain_List:
	dc.w	-80,-4*3,1,25
	dc.w	-60,-4*4,-1,35
	dc.w	-20,-4*4,2,20
	dc.w	-40,-4*3,-2,30
	dc.w	0

Steel_4:
	move.w	Bob_Special_1(a4),d0
	lsr.w	#2,d0
	add.w	d0,Bob_Y_Position(a4)
	addq.w	#1,Bob_Special_1(a4)
	bra	Test_Bob_Out

Steel_Stand:
	move.w	Bob_X_Position(a4),d0		;Check if player is standing
	move.w	Bob_Special_2(a4),d1
	subq.w	#2,d1
	sub.w	#64,d0
	move.w	d0,d2
	add.w	#146,d2
	bsr	check_foot_frame
	beq.s	.no_stand
	move.w	Bob_Special_2(a4),d1
	bsr	alias_feet
	st	T_stand
.no_stand:
	bra	Test_Bob_Out

Steel_AnimTable:
	dc.l	Steel_GFX,0
	dc.w	-64,0,16,0,0,0,0

Start_Steel2:
	move.l	#Steel2,Bob_Routine(a4)
	bra	Set_me_to_first
Steel2:
	subq.w	#1,Bob_Special_1(a4)
	bpl.s	.out
	bra	Out_Bob_Damage
.out:
	rts

Steel2_AnimTable:
	dc.l	0,0
	dc.w	0,-72,72,0,0,0,0

Chain:
	bsr	Get_Next_Bob_Frame		;Richtige Anim einstellen!
	move.l	#Chain2,Bob_Routine(a4)
Chain2:
	clr.b	Bob_BlitStatus(a4)
	eor.w	#1,Bob_Special_4(a4)
	beq.s	.ok
	move.b	#2,Bob_BlitStatus(a4)
.ok:
	move.w	Bob_Special_1(a4),d0
	asr.w	#2,d0
	add.w	d0,Bob_Y_Position(a4)
	addq.w	#1,Bob_Special_1(a4)
	move.w	Bob_Special_2(a4),d0
	add.w	d0,Bob_X_Position(a4)
	subq.w	#1,Bob_Special_3(a4)
	beq	Out_Bob_Damage
	bra	Test_Bob_Out

Chain_AnimTable:
	dc.l	Chain_GFX,Chain_GFX+78
	dc.w	0,0,13,0,0,0,0

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Flame
*---------------------------------------------------------------------------
Start_Flame:
	and.w	#$fff0,Bob_X_Position(a4)
	move.l	#Flame,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
Flame:
	eor.b	#2,Bob_BlitStatus(a4)
	bra	Test_Bob_Out

Flame_AnimTable:
	dc.l	Glider_flame,0
	dc.w	0,0,32,0,0,0,0

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Panzer
*---------------------------------------------------------------------------
	rsset	Bob_Special_1
Pslave	rs.l	1
Pangle	rs.b	1
Pmode	rs.b	1
Puser0	rs.w	1
Puser1	rs.w	1
Pcount	rs.w	1
Pdir	rs.b	1
Pflag	rs.b	1

panzerb	= 80

Start_Panzer:
	move.w	#304,Scr_Y_Fix(a6)
	move.l	#Repos_Player_Dead,Dead_Vector
	move.l	#Init_Panzer,Bob_Routine(a4)
	bsr	Kill_Objects
;	subq.w	#1,Bob_Y_Position(a4)
;	add.w	#32,Bob_X_Position(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)		;Bitte nicht darstellen!
	sf	screen_count
	rts

Init_Panzer:
	cmp.w	#312+48,Scr_X_Level_Pos(a6)
	blt	.out

	clr.l	Scr_X_Speed(a6)					;Kein X-Scrolling mehr!

	cmp.w	#304,Scr_Y_Level_Pos(a6)
	bne	.out


	st	Boss_flag
	move.l	#.Init2,Bob_Routine(a4)

.Init2:
	clr.l	Scr_X_Speed(a6)					;Kein X-Scrolling mehr!

	cmp.l	#GameBpl0,Scr_Show_Field(a6)
	beq	.out

	;Umschalten des Scrollings


	move.w	#panzerb*3,Scr_Plane_Width(a6)
	move.w	#panzerb,Scr_Single_Plane(a6)
	move.w	#160,Scr_Y_Visible(a6)
	move.w	Scr_Y_Play_Anf(a6),Dummy_Anf
	clr.w	Scr_Y_Play_Anf(a6)
	move.w	#16,Scr_X_Level_Pos(a6)

	move.l	#Level2+23,Scr_Level(a6)

	move.w	#320,Bob_X_Position(a4)

	lea	Bob_Info_Tab_Adrs+4(pc),a0
	moveq	#10-1,d7
.setloop:
	move.l	(a0)+,a1
	move.w	#panzerb*3,Bob_I_D_Modulo(a1)
	move.w	#panzerb,Bob_I_S_Modulo(a1)
	dbf	d7,.setloop

	lea	Rocket_Info_2(pc),a1
	move.w	#panzerb*3,Bob_I_D_Modulo(a1)
	move.w	#panzerb,Bob_I_S_Modulo(a1)

	lea	Smart_Info(pc),a1
	move.w	#panzerb*3,Bob_I_D_Modulo(a1)
	move.w	#panzerb,Bob_I_S_Modulo(a1)

	move.l	#Panzer_Clist,Clist_Handler
	move.l	#Panzer_Player,Player_Vector

	move.l	#GameBpl2,bltdpth(a5)
	move.w	#0,bltdmod(a5)
	move.w	#$0100,bltcon0(a5)
	move.w	#64*3*162+(panzerb/2),bltsize(a5)
	waitblt

	;Dummy aufbauen fr das Scrolling am unteren Bildschirm-rand.

	lea	Level2+21+27*levelb2,a0
	move.l	Macro_Pointer,a1
	move.l	#Dummy_Scroll,a2		;Destination

	move.w	#0,bltamod(a5)
	move.w	#panzerb-2,bltdmod(a5)
	move.w	#$09f0,bltcon0(a5)
	move.l	#-1,bltafwm(a5)
	moveq	#3-1,d6
.yloop:
	moveq	#30-1,d7
.xloop:
	moveq	#0,d0
	move.b	(a0)+,d0
	add.w	d0,d0
	moveq	#0,d1
	move.b	(a1,d0.w),d1
	mulu	#96,d1
	add.l	Scr_Character(a6),d1
	move.l	d1,bltapth(a5)
	move.l	a2,bltdpth(a5)
	move.w	#64*16*3+1,bltsize(a5)
	waitblt
	addq.l	#2,a2
	dbf	d7,.xloop
	add.l	#levelb2-30,a0
	add.l	#80*3*16-60,a2
	dbf	d6,.yloop

	move.l	#GameBpl0,bltdpth(a5)
	move.w	#0,bltdmod(a5)
	move.w	#$0100,bltcon0(a5)
	move.w	#64*3*162+(panzerb/2),bltsize(a5)
	waitblt
	addq.b	#1,screen_count

	;Copperlist verndern

	bsr	Wait_tof

	move.w	#panzerb*3-40,Modlab+2
	move.w	#Panzerlab&$ffff,CTWraplab4+2

	move.w	TSplitlab6+2,Panzerlab+2

	lea	Coplab2(pc),a0
	move.w	TSplitlab6+6,161*8+6(a0)	;Farbe wieder reinschreiben
	move.w	#COPCOL3,161*8+4(a0)
	move.w	160*8+6(a0),Panzerlab+6
	move.w	#$008a,160*8+4(a0)

	bsr	Panzer_Clist

	move.l	#GameBpl1,bltdpth(a5)
	move.w	#0,bltdmod(a5)
	move.w	#$0100,bltcon0(a5)
	move.w	#64*3*162+(panzerb/2),bltsize(a5)
	waitblt

.next:
	;Panzer auf den Screen bringen!
	move.l	#GameBpl0+46+80*3*panzerb,d0		;Ziel-Adresse
	bsr	.blit_panzer
	move.l	#GameBpl1+46+80*3*panzerb,d0		;Ziel-Adresse
	bsr	.blit_panzer
	move.l	#GameBpl2+46+80*3*panzerb,d0		;Ziel-Adresse
	bsr	.blit_panzer

	move.l	a4,-(sp)

	bsr	Panzer_Enter_Bob			;Main-Kollision-Slave
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a0)
	move.w	#4,Bob_Special_7(a0)
	move.l	a0,Pslave(a4)
	move.l	a0,a4

	bsr	Panzer_Enter_Bob			;????
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a0)
	move.b	#BOB_NOCOL,Bob_Used(a0)
	clr.w	Bob_Special_7(a0)
	move.l	a0,Pslave(a4)
	move.l	a0,a4

	bsr	Panzer_Enter_Bob			;Arm-Kollision
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a0)
	move.w	#0,Bob_Special_7(a0)
	move.l	a0,Pslave(a4)

	moveq	#5,d7
	lea	phase_tab(pc),a1
.loop1:
	move.l	a0,a4
	move.l	a1,-(sp)
	bsr	Panzer_Enter_Bob
	move.l	(sp)+,a1
	move.b	#BOB_NOCOL,Bob_Used(a0)
	move.w	(a1)+,Bob_Special_7(a0)
	move.l	a0,Pslave(a4)
	dbf	d7,.loop1

	moveq	#2,d7
.loop2:
	move.l	a0,a4
	bsr	Panzer_Enter_Bob
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a0)
	move.w	d7,d0
	addq.w	#5,d0
	move.w	d0,Bob_Special_7(a0)

	move.l	a0,Pslave(a4)
	dbf	d7,.loop2

	move.l	(sp)+,a4
	move.l	#Panzer,Bob_Routine(a4)			;Set Main Parameters

	move.b	#50,Pangle(a4)
	move.w	#120,Puser0(a4)
	sf	Pmode(a4)

	clr.w	Pcount(a4)
	sf	Pdir(a4)
	sf	Pflag(a4)

	lea	Ppow_tab(pc),a0			;Calc power
	bsr	Make_Power
	move.w	d0,big_power
	rts

.out:
	rts

.blit_panzer:
	move.l	d0,bltdpth(a5)
	move.l	#AD_Bob+Abob01,bltapth(a5)
	move.w	#0,bltamod(a5)
	move.l	#-1,bltafwm(a5)
	move.w	#panzerb-14,bltdmod(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#64*3*51+7,bltsize(a5)
	waitblt
	move.w	#-2,bltamod(a5)
	move.w	#$0000,bltalwm(a5)
	move.w	#$49f0,bltcon0(a5)
	add.l	#51*3*panzerb-6,d0
	move.l	d0,bltdpth(a5)
	move.l	#AD_Bob+Abob02,bltapth(a5)
	move.w	#panzerb-20,bltdmod(a5)
	move.w	#64*3*29+10,bltsize(a5)
	waitblt

	rts

phase_tab:	dc.w	1,1,1,1,2,3

Panzer_Enter_Bob:
	moveq	#0,d1
	moveq	#0,d2
	moveq	#1,d0
	lea	Area_Enter_Vector(pc),a1
	movem.l	d1-d2/d7/a4,-(sp)
	bsr	Search_Bob_Entry
	move.l	a4,a0
	move.l	#Panzer_Slave_Start,Bob_Routine(a0)
	move.w	#-2,Bob_Power(a0)
	movem.l	(sp)+,d1-d2/d7/a4
	rts


Panzer_Clist:
	move.l	Act_Scr_Structure,a6
	move.l	Scr_Supply_Field(a6),d0
	move.l	Scr_Show_Field(a6),Scr_Supply_Field(a6)
	move.l	d0,Scr_Show_Field(a6)
	not.w	Scr_Screen_num(a6)

	lea	Coplab4(pc),a0
	move.w	Scr_X_Level_Pos(a6),d0
	and.w	#15,d0
	moveq	#15,d1
	sub.w	d0,d1
	move.w	d1,d0
	move.w	d1,2(a0)
	move.w	d1,Shift_Value

	lea	Coplab1(pc),a0
	moveq	#0,d1

	move	Scr_Y_Play_Anf(a6),d0
	mulu	Scr_Plane_Width(a6),d0
	move	Scr_X_Level_Pos(a6),d1
	lsr	#3,d1
	add.l	d1,d0
	add.l	Scr_Show_Field(a6),d0

	swap	d0
	move	d0,2(a0)
	swap	d0
	move	d0,6(a0)
	add.l	#panzerb,d0
	swap	d0
	move	d0,10(a0)
	swap	d0
	move	d0,14(a0)
	add.l	#panzerb,d0
	swap	d0
	move	d0,18(a0)
	swap	d0
	move	d0,22(a0)

	tst.b	Col_Init_Flag
	beq.s	.no_init1
	bsr	init_parallax
.no_init1:
	move.w	parallax+160*2,Panzerlab+6

	move.l	#Dummy_Scroll,d0
	move	Dummy_X_Level_Pos,d1
	sub.w	#8,d1
	lsr	#3,d1
	add.l	d1,d0
	move.w	d0,Panzerlab+10
	add.w	#panzerb,d0
	move.w	d0,Panzerlab+14
	add.w	#panzerb,d0
	move.w	d0,Panzerlab+18

;	move.w	Scr_Plane_Height(a6),d0
;	sub.w	Scr_Y_Play_Anf(a6),d0
;	add.w	#$30,d0
;	cmp.w	#$ff,d0
;	bhs.s	.no_copjump
;	sub.w	#$30,d0
;
;	move.l	WrapPointer(pc),a2
;.search:
;	cmp.w	4(a2),d0
;	beq.s	.set_equal
;	blt.s	.use
;	addq.l	#6,a2
;	bra.s	.search
;.use:
;	move.l	(a2),a2			;An dieser Position wird auf den Coplab3 verzweigt.
;	move.l	a2,GosubPos
;
;	move.w	2(a2),d1
;	move.w	#Coplab3&$ffff,2(a2)	;Bitte zum Coplab3 verzweigen.
;	move.w	d1,Coplab3+18
;	move.w	6(a2),Coplab3+14
;
;	asl.w	#3,d0
;
;	move.w	d0,Clist_oldcolpos
;	move.w	#$008a,4(a0,d0.w)	;Jump auslsen.
;	move.w	6(a0,d0.w),d1		;Diese Farbe wurde geschrieben.
;
;	lea	8(a0,d0.w),a0		;Zu dieser Adresse returned der Copper.
;	move.l	a0,d0
;
;.no_copjump:
;
;	move.w	d0,Coplab3+22		;LO-Word
;	move.w	d1,Coplab3+14		;Farbwert
;
;	lea	Coplab3(pc),a0		;Bplpt fr Wrap
;	bra.s	.dont_update
;
;.set_equal:
;	move.l	(a2),a2			;An dieser Position wird auf den Coplab3 verzweigt.
;	move.l	a2,GosubPos
;
;	move.w	2(a2),d1
;	move.w	d1,Coplab3+18
;	move.w	#Coplab5&$ffff,2(a2)	;Bitte zum Coplab5 verzweigen.
;	move.w	d1,Coplab5+18
;
;	asl.w	#3,d0
;	move.w	6(a0,d0.w),Coplab5+14	;Diese Farbe wurde geschrieben.
;
;	lea	Coplab5(pc),a0		;Bplpt fr Wrap
;.dont_update:
;	moveq	#0,d0
;	move.w	Scr_X_Level_Pos(a6),d0
;	lsr.w	#3,d0
;	add.l	Scr_Show_Field(a6),d0
;
;	move.w	d0,2(a0)
;	add.l	#planeb,d0
;	move.w	d0,6(a0)
;	add.l	#planeb,d0
;	move.w	d0,10(a0)
;
	lea	Sprlab(pc),a0
	bsr	Set_Sprites

	tst.b	Col_Flag
	beq.s	.no_col
	lea	$dff1b0,a1
	lea	Col_Buffer(pc),a0
	tst.b	Col_Init_Flag
	beq.s	.no_init2
	lea	Col_Buffer2(pc),a0
.no_init2:
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	sf	Col_Flag
.no_col:
	move.l	ParaPointer,a0
	jsr	(a0)

	move.w	Dummy_X_Level_Pos,d0
	sub.w	#8,d0
	and.w	#15,d0
	moveq	#15,d1
	sub.w	d0,d1
	move.w	d1,Panzerlab+22
	move.w	d1,TWraplab8-2
	rts


Panzer_Scroll:
	move.w	Dummy_X_Level_Pos,d1
	move.w	Scr_X_Speed(a6),d0
	add.w	d0,Dummy_X_Level_Pos
	cmp.w	#16,Dummy_X_Level_Pos
	bgt.s	.no_left
	move.w	#16,Dummy_X_Level_Pos
.no_left:
	cmp.w	#167,Dummy_X_Level_Pos
	blt.s	.no_right
	move.w	#167,Dummy_X_Level_Pos
.no_right:
	sub.w	Dummy_X_Level_Pos,d1
	neg.w	d1
	move.w	d1,Panzer_scrolled

	;Errechnen der echten Scr_X_Level_Pos

	move.w	Dummy_X_Level_Pos,d0
	move.w	#320,d1
	sub.w	Dummy_X_Position,d1
	add.w	d1,d0
	move.w	d0,Scr_X_Level_Pos(a6)

	move.l	Act_Bob_Structure,a0
	move.w	Dummy_move,d0
	moveq	#BOB_MAXIMUM-1,d7
.loop:
	sub.w	d0,Bob_X_Position(a0)
.next:
	lea	BOB_ENTRY_LENGTH(a0),a0
	dbf	d7,.loop
	clr.w	Dummy_move
	rts

Panzer_Player:
	move.w	Panzer_scrolled,Scr_Scrolled_X(a6)
	bra	Handle_Player

Panzer_scrolled:	dc.w	0
Dummy_X_Level_Pos:	dc.w	16
Dummy_X_Position:	dc.w	320
Dummy_move:		dc.w	0
Dummy_Anf:		dc.w	0
Dummy_Graphics:		dc.l	0
screen_count:	dc.b	0
Panzer_dieing:	dc.b	0


Panzer:
	bsr	handle_repos1

	movem.w	Bob_X_Position(a4),d0-d1	;Check if player is standing
	addi.w	#14,d0				;on the object
	addi.w	#57,d1
	move.w	d0,d2
	add.w	#126,d2
	bsr	check_foot_frame
	beq.s	.check2nd
	move.w	Bob_Y_Position(a4),d1
	add.w	#57,d1
	bsr	alias_feet
	st	T_stand
	bra.s	.no_feet
.check2nd:
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#54,d0
	addq.w	#4,d1
	move.w	d0,d2
	add.w	#80,d2
	bsr	check_foot_frame
	beq.s	.no_feet
	move.w	Bob_Y_Position(a4),d1
	addq.w	#4,d1
	bsr	alias_feet
	st	T_stand
.no_feet:
	tst.w	Bob_Hit(a4)
	beq.s	.no_hit
	subq.w	#1,Bob_Hit(a4)


	move.w	#$fff,$dff184


;		sf	O_HIT(a5)
;		PLAY_HIT #10
;		pea	(a5)
;		jsr	add_objectlast.w
;		move.l	O_XPOS(a5),O_XPOS(a0)
;		addi.w	#40,O_XPOS(a0)
;		addi.w	#13,O_YPOS(a0)
;		move.l	a0,a5
;		jsr	make_expl.w
;		move.l	(sp)+,a5
.no_hit:
	move.w	Bob_Power(a4),d0
	move.w	#20,Bob_Power(a4)
	sub.w	#20,d0
	add.w	d0,big_power
	bpl.s	.no_deststart

	cmpi.b	#24,Pmode(a4)			;Panzer zerstrt, Explos starten!
	beq	.do_explode
	move.b	#24,Pmode(a4)
	move.w	#8*60,Puser0(a4)
	clr.w	Puser1(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	st	Panzer_dieing
.no_deststart:
		move.l	Pslave(a4),a3
		move.l	Pslave(a3),a3
		move.l	Pslave(a3),a3		;Calc position of rot-collision...

		move.w	T_posX,d0
		move.w	T_posY,d1

		add.w	Dummy_X_Level_Pos,d0
		add.w	Scr_Y_Level_Pos(a6),d1

		sub.w	Dummy_X_Position,d0
		sub.w	Bob_Y_Position(a4),d1

		subi.w	#82,d0
		subi.w	#42,d1
		muls	d0,d0
		muls	d1,d1
		add.l	d1,d0
		cmpi.l	#140*140,d0		;Radius to big ?
		bge.s	.no_colli
			bsr	sqrt		;No, set check-object
			move.w	d0,d4
			move.b	Pangle(a4),d0
			bsr	sin
			move.w	d0,d2
			move.b	Pangle(a4),d0
			bsr	cos
			muls	d4,d0
			muls	d4,d2
			asr.l	#8,d0
			asr.l	#8,d2
			addi.w	#82,d0
			moveq	#42,d1
			sub.w	d2,d1
			add.w	Bob_X_Position(a4),d0
			add.w	Bob_Y_Position(a4),d1
			movem.w	d0-d1,Bob_X_Position(a3)
			move.b	#BOB_TRUE,Bob_Used(a3)
	bra.s	.colli
.no_colli:
			move.b	#BOB_NOCOL,Bob_Used(a3)
.colli:

	subq.w	#1,Pcount(a4)			;x-movement
	bpl.s	.no1
		move.w	#319,Pcount(a4)
		not.b	Pdir(a4)
.no1:
		moveq	#-1,d0
	tst.b	Pdir(a4)
	bne.s	.set1
		moveq	#1,d0
.set1:
	move.w	d0,Dummy_move
	add.w	d0,Dummy_X_Position
	add.w	d0,Bob_X_Position(a4)
	tst.b	T_stand
	beq.s	.no_stand1
	move.w	d0,T_forceX
.no_stand1:

	moveq	#0,d0				;Jump to mode-handler
	move.b	Pmode(a4),d0
	jmp	.mode_tab(pc,d0.w)
.mode_tab:
	bra.w	.wait1		;0
	bra.w	.shooting	;4
	bra.w	.wait1a		;8
	bra.w	.move_down	;12
	bra.w	.move_up	;16
	bra.w	.wait2		;20
.do_explode:			;24
	subq.w	#1,Puser0(a4)
	bpl	.start_xplos

		move.l	a4,a0			;Set all objects to free

		sf	Boss_flag
;		jsr	set_backdrop.w
		move.l	#$1400,d0
		jsr	add_score
		bsr	StartFlash

		move.l	#Panzer_Restore,SFX_Handler

		bra	Out_Bob_Damage

.start_xplos:
	subq.w	#1,Puser1(a4)			;Delay over ?
	bpl	.exit_panzer
	addq.w	#6,Puser1(a4)
	movem.w	Bob_X_Position(a4),d1-d2
	bsr	rnd
	andi.w	#127,d0
	add.w	d0,d1
	bsr	rnd
	andi.w	#63,d0
	add.w	d0,d2
	moveq	#1,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	(sp)+,a4
;	PLAY_EXPL

	bra	.exit_panzer
.wait2:						;Wait & Reset
	subq.w	#1,Puser0(a4)
	bpl	.exit_panzer
	move.b	#4,Pmode(a4)
	move.w	#3*30,Puser0(a4)			;Init 1.5 seconds shooting
	clr.w	Puser1(a4)
	bra	.exit_panzer
.wait1:						;1st wait
	subq.w	#1,Puser0(a4)
	bpl	.exit_panzer
	addq.b	#4,Pmode(a4)
	move.w	#3*30,Puser0(a4)			;1.5 sec
	clr.w	Puser1(a4)
;	PLAY_FX	#36
	bra	.exit_panzer
.wait1a:					;middle-wait
	subq.w	#1,Puser0(a4)
	bpl	.exit_panzer
	cmp.w	#70,Bob_X_Position(a4)
	bgt.s	.go_next_mode
	tst.b	Pdir(a4)
	beq.s	.go_next_mode
	addq.w	#1,Puser0(a4)			;Wre unfair!
	bra	.exit_panzer
.go_next_mode:
	addq.b	#4,Pmode(a4)
	move.w	#3*30,Puser0(a4)			;1.5 sec
	clr.w	Puser1(a4)
	bra	.exit_panzer
.shooting:					;Shooting-phase
	subq.b	#1,Puser1(a4)			;A new explosion after
	bpl.s	.no_shot
	addq.b	#8,Puser1(a4)
	bsr	.start_shot
.no_shot:
	subq.w	#1,Puser0(a4)
	bpl	.exit_panzer
	addq.b	#4,Pmode(a4)
	move.w	#3*30,Puser0(a4)			;Wait 1.5 seconds
	bra	.exit_panzer
.move_down:					;Move down
	cmpi.b	#2<<5,Puser1(a4)		;Maximum speed reached ?
	bge.s	.not_max
		addq.b	#1,Puser1(a4)		;No, speed up...
.not_max:
	move.b	Puser1(a4),d0
	asr.b	#5,d0
	add.b	d0,Pangle(a4)
	cmpi.b	#130,Pangle(a4)			;Maximum degree reached ?
	blo	.exit_panzer
	move.b	#130,Pangle(a4)
	clr.w	Puser1(a4)			;Yes next mode
	addq.b	#4,Pmode(a4)
	bra	.exit_panzer

.move_up:
	subq.b	#1,Puser1(a4)			;Raise arm up
	bpl.s	.verz
		addq.b	#2,Puser1(a4)
		subq.b	#1,Pangle(a4)
.verz:
	cmpi.b	#50,Pangle(a4)
	bhi	.exit_panzer
	addq.b	#4,Pmode(a4)			;Change to wait-mode
	move.w	#3*30,Puser0(a4)			;Wait 1.5 sec

.exit_panzer:
	moveq	#0,d2
	move.b	Pangle(a4),d2			;Turn arm-part
	sub.b	#50,d2
	and.w	#$fffc,d2
	asl.w	#7,d2
	add.l	#$49800,d2
	move.l	d2,Dummy_Graphics

	moveq	#0,d0
	move.w	Scr_X_Level_Pos(a6),d0
	lsr.w	#4,d0
	neg.l	d0
	add.l	#Level2+24,d0
	move.l	d0,Scr_Level(a6)		;Let Turrican stand on ground

	move.l	Pslave(a4),a3			;Set positions
	move.l	Bob_X_Position(a4),Bob_X_Position(a3)
	move.l	Pslave(a3),a3
	move.l	Bob_X_Position(a4),Bob_X_Position(a3)
;	tst.w	big_power
;	.if (plus) {
;		move.b	Pdir(a5),d0
;		neg.b	d0
;		move.b	d0,O_USR2+1(a4)
;	} .else {
;		st	O_USR2+1(a4)
;	}

	movem.w	Bob_X_Position(a4),d5-d6		;Calc arm-offsets
	addi.w	#82,d5
	addi.w	#42,d6
	movem.w	d5-d6,-(sp)
	asl.w	#5,d5
	asl.w	#5,d6
	move.b	Pangle(a4),d0
	bsr	sin
	move.w	d0,d3
	move.b	Pangle(a4),d0
	bsr	cos
	move.w	d0,d4
	asr.w	#3,d3
	asr.w	#3,d4
	muls	#22,d3
	muls	#22,d4
	move.w	d3,d0
	move.w	d4,d1
	asr.w	#1,d0
	asr.w	#1,d1
	add.w	d1,d5
	sub.w	d0,d6
	move.l	Pslave(a3),a3			;Arm-kollision berspringen
	moveq	#4,d7
.set_armpos:
		move.l	Pslave(a3),a3
		move.w	d5,d0
		move.w	d6,d1
		asr.w	#5,d0
		asr.w	#5,d1
		movem.w	d0-d1,Bob_X_Position(a3)
		add.w	d4,d5
		sub.w	d3,d6
	dbf	d7,.set_armpos
	move.l	Pslave(a3),a3			;Set positions
	move.l	(sp)+,Bob_X_Position(a3)	;Bagger-schaufel
	moveq	#2,d7
.set_colpos:
		move.l	Pslave(a3),a3
		move.l	Bob_X_Position(a4),Bob_X_Position(a3)
	dbf	d7,.set_colpos

;	move.l	Pslave(a5),a4
;
;	subq.b	#1,O_USR3(a4)
;	.if (minus) {
;		addq.b	#8,O_USR3(a4)
;		addq.b	#1,O_USR3+1(a4)
;		andi.b	#3,O_USR3+1(a4)
;	}

	;Fenster blinken lassen.

;	moveq	#4,d0
;	cmpi.w	#20,big_power
;	.if (greater) {
;		move.b	O_USR3+1(a4),d0
;	}
;	add.w	d0,d0
;	add.w	d0,d0
;	move.l	window_tab(pc,d0.w),a0
;	pea	32(a0)
;	move.w	#panzer0+32*10,a1
;	moveq	#32,d0
;	moveq	#2,d1
;	jsr	add_dma.w
;	move.l	(sp)+,a0
;	move.w	#panzer0+32*14,a1
;	moveq	#32,d0
;	moveq	#2,d1
;	jmp	add_dma.w

	tst.b	Panzer_dieing
	bne.s	.no_stand2
		moveq	#1,d0
	not.b	Pflag(a4)			;y-vibration
	bne.s	.set2
		moveq	#-1,d0
.set2:
	add.w	d0,Scr_Y_Play_Anf(a6)
	add.w	d0,Bob_Y_Position(a4)
	tst.b	T_stand
	beq.s	.no_stand2
	move.w	d0,T_forceY
.no_stand2:

	bsr	Panzer_Scroll
	clr.l	Scr_X_Speed(a6)					;Kein X-Scrolling mehr!

	rts

.start_shot:
	movem.w	Bob_X_Position(a4),d1-d2
	add.w	#30,d1
	subi.w	#16,d2
	moveq	#1,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry
	move.l	a4,a0
	move.l	(sp)+,a4
	move.l	#.handle_shot,Bob_Routine(a0)
	move.w	#-2,Bob_Power(a0)
	clr.w	Bob_Special_1(a0)
	move.w	#-1,Bob_Special_2(a0)
	clr.w	Bob_Special_3(a0)
	rts

.handle_shot:
	eor.b	#2,Bob_BlitStatus(a4)
	subq.w	#1,Bob_Special_1(a4)
	bpl.s	.no_anim
		addq.w	#6,Bob_Special_1(a4)
		addq.w	#1,Bob_Special_3(a4)
		bsr	Get_Next_Bob_Frame
		cmp.w	#10,Bob_Special_3(a4)
		beq	Out_Bob_Damage
.no_anim:
	subq.w	#5,Bob_X_Position(a4)
	addq.w	#1,Bob_Special_2(a4)
	move.w	Bob_Special_2(a4),d0
	asr.w	#3,d0
	add.w	d0,Bob_Y_Position(a4)
	rts

Panzer_Restore:
	move.l	Act_Scr_Structure,a6
	bsr	Panzer_Scroll

	cmp.w	#$fff,coltab
	bne	.out
	;Alles wieder herstellen!

	bsr	Wait_tof

	move.w	#TSplitlab6&$ffff,CTWraplab4+2

	lea	Coplab2(pc),a0
	move.w	Panzerlab+6,160*8+6(a0)		;Farbe wieder reinschreiben
	move.w	#COPCOL3,160*8+4(a0)
	move.w	#$008a,161*8+4(a0)

	clr.w	Scr_Y_Fix(a6)

	move.l	#Player_Dead,Dead_Vector

	move.w	Dummy_X_Level_Pos,d0
	add.w	#312+32,d0
	move.w	d0,Scr_X_Level_Pos(a6)

	move.w	#planeb*3-40,Modlab+2

	move.w	#planeb*3,Scr_Plane_Width(a6)
	move.w	#planeb,Scr_Single_Plane(a6)
	move.w	#208,Scr_Y_Visible(a6)
	move.w	Dummy_Anf,Scr_Y_Play_Anf(a6)

	move.l	#Level2,Scr_Level(a6)

	lea	Bob_Info_Tab_Adrs+4(pc),a0
	moveq	#10-1,d7
.setloop:
	move.l	(a0)+,a1
	move.w	#planeb*3,Bob_I_D_Modulo(a1)
	move.w	#planeb,Bob_I_S_Modulo(a1)
	dbf	d7,.setloop

	lea	Rocket_Info_2(pc),a1
	move.w	#planeb*3,Bob_I_D_Modulo(a1)
	move.w	#planeb,Bob_I_S_Modulo(a1)

	lea	Smart_Info(pc),a1
	move.w	#planeb*3,Bob_I_D_Modulo(a1)
	move.w	#planeb,Bob_I_S_Modulo(a1)

	move.l	#Level1_Clist,Clist_Handler
	move.l	#Handle_Player,Player_Vector

	move.l	a4,-(sp)
	jsr	Create_Pages

		clr.w	Rotate_Angle
		move.w	#8,Rotate_Angle_Add
		move.l	#Rotate2,Dest_Obj
		move.l	#Work_Buffer1,Rotate_Buffer_Pointer
		lea	Roll_GFX,a0
		lea	Work_Buffer1,a1
		lea	Rot_Info1,a2
		lea	Roll_GFX+32*4*3,a3

		moveq	#32,d0
		moveq	#3,d1
		jsr	Convert_to_Rotate
		move.w	#32,Rot_I_BUF_Width(a2)

		move.w	#17,Wait_Verz

		lea	Rotate_Handler,a1
		jsr	AddHandler

	move.l	(sp)+,a4

	move.l	#Return,SFX_Handler
.out:
	rts

Panzer_Slave_Start:
	move.w	Bob_Special_7(a4),d0
	mulu	#22,d0
	add.l	#Arm_AnimTable,d0
	move.l	d0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	move.l	#Panzer_Slave,Bob_Routine(a4)

Panzer_Slave:
	tst.b	Boss_flag
	beq	Out_Bob_Damage			;Austragen

	tst.b	Panzer_dieing
	beq.s	.ok
	move.b	#BOB_NOCOL,Bob_Used(a4)		;Keine Kollision mehr!
.ok:
	cmp.w	#1,Bob_Special_7(a4)
	bne.s	.out
	move.l	Dummy_Graphics,d0
	move.l	d0,Bob_Graphics(a4)
	add.l	#384,d0
	move.l	d0,Bob_Mask(a4)
.out:
	rts

Ppow_tab:	dc.w	50,55,20
		dc.w	170,250,150
		dc.w	200,400,200

Arm_AnimTable:
	dc.l	bob01+level_GFX,msk01+level_GFX		;0 Arm-Kollision
	dc.w	-8,-8,32,-8,-8,24,16
	dc.l	bob0c+level_GFX,msk0c+level_GFX		;1 Arm-Stab
	dc.w	-16,-16,32,0,0,0,0
	dc.l	bob0d+level_GFX,msk0d+level_GFX		;2 Greifer
	dc.w	-24,-16,32,0,0,0,0
	dc.l	bob0b+level_GFX,msk0b+level_GFX		;3 Arm-End
	dc.w	-16,-12,19,0,0,0,0

	dc.l	bob02+level_GFX,msk02+level_GFX		;4 Main-Kollision-Slave
	dc.w	71,9,32,71,9,57,19
	dc.l	bob02+level_GFX,msk02+level_GFX		;5 Main-Kollision-Slave
	dc.w	71,9,32,71,28,42,17
	dc.l	bob02+level_GFX,msk02+level_GFX		;6 Main-Kollision-Slave
	dc.w	71,9,32,71,45,78,37
	dc.l	bob02+level_GFX,msk02+level_GFX		;7 Main-Kollision-Slave
	dc.w	71,9,32,24,66,47,16


Panzer_AnimTable1:
	dc.l	AD_Bob+Abob01,0
	dc.w	0,0,51,58,18,13,10+5

Panzer_AnimTable2:
	dc.l	AD_Bob+Abob02,0
	dc.w	0,0,29,16,10,110,14

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Kran
*---------------------------------------------------------------------------

;		rsset	window		;VRAM-buffer for zooming
;muell0		rs.b	512

		rsset	Bob_Special_1	;Main-Object-Parameters
Kslave		rs.l	1
Kmode_ptr	rs.l	1
Ktake_it	rs.b	1
Kinit1		rs.b	1
Koffset		rs.w	1
Kuser0		rs.w	1

		rsset	Bob_Special_1	;Additional parameters
Kdelay		rs.w	1		;stored in grabber-slave

		rsset	Bob_Special_1	;Trash-Roller-Parameters
Kangle		rs.b	1
Klow_ypos	rs.b	1
Kspeed		rs.w	1

Kbob00 	= $00000
Kmsk00 	= $000c0
Kbob01 	= $00100
Kmsk01 	= $001c0
Kbob02 	= $00200
Kmsk02 	= $003b0
Kbob03 	= $00440
Kmsk03 	= $00680

;-------------------------------------------------
Start_Kran:
	move.w	Scr_X_Level_Pos(a6),Bob_Status(a4)

init_kran:
	move.l	a4,boss_ptr			;Save pointer to main-object
;	clr.w	O_PHA(a5)
;	st	O_SHOW(a5)

;	st	boss_flag.w			;Set boss-flag
	st	no_time
	sf	big_final			;Big is not scrolled in

;	movem.w	O_XPOS(a5),d4-d5		;Start "band"-objects
;	addi.w	#161,d5
;	subq.w	#1,d4
;	moveq	#8,d7
;	.do {
;		jsr	add_object.w
;		move.l	#handle_band,O_HANDLE(a0)
;		move.l	#band_spr,O_INFO(a0)
;		movem.w	d4-d5,O_XPOS(a0)
;		clr.w	O_PHA(a0)
;		st	O_SHOW(a0)
;		clr.w	bdelay(a0)
;		addi.w	#32,d4
;	} .loop d7
;

	lea	trash_tab,a2			;Allocate trash-objects
	lea	pos_tab(pc),a3

	movem.w	Bob_X_Position(a4),d5-d6
	moveq	#2,d7
.loop:
	movem.l	d5-d7/a2/a4,-(sp)

	move.l	a3,-(sp)
		moveq	#27,d0
		cmp.w	#1,d7
		bne.s	.use
		moveq	#21,d0
.use:
		bsr	Search_Bob_Entry		;Get objects
	move.l	(sp)+,a3
		moveq	#0,d0
		move.w	(a3)+,d0
		add.l	#Trash_AnimTable,d0
		move.l	d0,Bob_Next_Anim(a4)
		bsr	Get_Next_Bob_Frame
		move.l	a4,a0
	movem.l	(sp)+,d5-d7/a2/a4
		move.b	#BOB_NOCOL,Bob_Used(a0)

		movem.w	(a3)+,d0-d1
		add.w	d5,d0
		add.w	d6,d1
		movem.w	d0-d1,Bob_X_Position(a0)
;		clr.l	O_USR0(a0)
;		clr.l	O_USR2(a0)
		move.w	(a3)+,Bob_Special_5(a0)
		move.l	a0,(a2)+
	dbf	d7,.loop

	move.l	a4,-(sp)
	moveq	#1,d0
	moveq	#0,d1
	moveq	#0,d2
	bsr	Search_Bob_Entry		;Add grabber-object
	move.l	#Kran_AnimTable+22,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	move.l	a4,a0
	move.l	(sp)+,a4

	move.l	a0,Kslave(a4)			;Save pointer to object
	move.l	#handle_grabber,Bob_Routine(a0)	;Save pointer-variables

;	move.w	#2,O_PHA(a0)
;	sf	O_POW(a0)

	move.l	a4,-(sp)
	moveq	#28,d0
	moveq	#0,d1
	moveq	#0,d2
	bsr	Search_Bob_Entry		;Add Chain-object
	move.l	(sp)+,a4

	lea	pow_tab(pc),a0			;Calc power
	jsr	Make_Power
	move.w	d0,big_power

	st	Ktake_it(a4)			;Set mode-variables
	st	Kinit1(a4)
	move.l	#modes_tab,Kmode_ptr(a4)
	clr.w	Koffset(a4)

	bsr	set_slavepos			;Set slave-positions

	move.l	Kslave(a4),a0			;Clear trash-delay
	move.w	#60,Kdelay(a0)			;1st trash after 1 second

;	lea	rkranboss9,a0			;Copy turn-data into WRAM
;	lea	turn_buffer0,a1
;	jsr	convert_turn.w

;	lea	rkranboss0,a0			;Copy data into VRAM
;	move.w	#kranboss0,a1
;	move.w	#rkranboss9-rkranboss0,d0
;	moveq	#2,d1
;	jmp	add_dma.w

	move.l	#handle_kran,Bob_Routine(a4)
	move.l	#Repos_Player_Dead,Dead_Vector

handle_kran:					;Wait-Handler---------------
	move.w	Bob_Status(a4),Scr_Left_Fix(a6)
	cmp.w	#2100,Scr_X_Level_Pos(a6)
	blt.s	.out

	tst.w	Scr_X_Fix(a6)
	bne.s	.no_start
	SONGPLAY #4
.no_start:
	move.w	#2296,Scr_X_Fix(a6)
	move.w	#424,Scr_Y_Fix(a6)
	st	no_time


	bsr	handle_repos1			;Handle repos
	bsr	set_slavepos			;Set slave-position

	cmp.w	#2296,Scr_X_Level_Pos(a6)
	bne.s	.out
	cmp.w	#424,Scr_Y_Level_Pos(a6)
	bne.s	.out

		move.l	#handle_kran1,Bob_Routine(a4)
		move.b	#1,big_final

.out:
	rts

handle_kran1:					;Main-Action-Handler
	bsr	handle_repos1			;Handle repos

	tst.w	big_power				;Boss powered down ?
	bpl.s	.not_down
		cmpi.l	#expl_mode,Kmode_ptr(a4)	;Allready started explosion ?
		beq.s	.no_init

		SONGPLAY #5
		st	Kinit1(a4)			;No, do so...
		move.l	#expl_mode,Kmode_ptr(a4)
		jsr	Init_Diamondcount

	bra.s	.no_init
.not_down:
		move.l	Kslave(a4),a0			;Time down ?
		subq.w	#1,Kdelay(a0)
		bpl.s	.no_init
			move.w	#240,Kdelay(a0)
			bsr	start_muell		;Start trash-roller
.no_init:

;	tst.b	pl_standing.w			;If player is standing -> move
;	.if (not zero) {			;to the left...
;		tst.w	big_power
;		.if (plus) {
;			move.w	#-1,pl_forcex.w
;		}
;	}

	moveq	#0,d0				;Jump to the actual mode-
	move.l	Kmode_ptr(a4),a0		;handler
	move.b	(a0),d0
	jmp	.mode_tab(pc,d0.w)
.mode_tab:
	bra.w	move_one
	bra.w	move_two
	bra.w	move_three
	bra.w	take_item
	bra.w	drop_item
	bra.w	wait
	bra.w	move_up
	bra.w	mleft_50
	bra.w	mright_50
	bra.w	mleft_10
	bra.w	mright_10
do_expl:					;Handle explosion of boss
	tst.b	Kinit1(a4)
	beq.s	.no_einit
		sf	Kinit1(a4)
		sf	Kuser0(a4)		;Start imediately
		move.b	#44,Kuser0+1(a4)	;Just do 45 explosions
		tst.b	Ktake_it(a4)		;Free item, if anything is
		bmi.s	.no_hook
			bsr	free_item
.no_hook:
		move.l	Kslave(a4),a0
		move.b	#BOB_NOCOL,Bob_Used(a0)
.no_einit:
	tst.b	Kuser0+1(a4)			;Handle end of explosions
	bpl.s	.do_explo
		jsr	Count_Diamonds
		bne	exit_kran
		move.b	#-1,Cue_Point+1
;		jsr	start_jingle.w
		bra	exit_kran
.do_explo:
	cmpi.b	#20,Kuser0(a4)
	bge.s	.no_count
		jsr	Count_Diamonds
.no_count:
	subq.b	#1,Kuser0(a4)			;Next explosion ?
	bpl.s	.no_explo

		addq.b	#8,Kuser0(a4)		;Next after 10 frames
		subq.b	#1,Kuser0+1(a4)		;All explosions done ?
		bpl.s	.next_explo
			move.l	#$10000,d0
			jsr	add_score
			move.l	Kslave(a4),a0
			st	big_final
			move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
.next_explo:
		move.l	Kslave(a4),a0
		movem.w	Bob_X_Position(a0),d1-d2
		bsr	rnd
		andi.w	#63,d0
		add.w	d0,d1
		bsr	rnd
		andi.w	#31,d0
		add.w	d0,d2
		subi.w	#32,d1
		subi.w	#32,d2
		move.l	a4,-(sp)
		moveq	#1,d0
		lea	Area_Enter_Vector,a1
		jsr	Search_Last_Entry

;		PLAY_EXPL
		move.l	(sp)+,a4
.no_explo:
	bra	exit_kran
move_one:
	moveq	#0+1,d0				;Move to object one
	bra.s	handle_move
move_two:
	moveq	#4+1,d0				;Move to object two
	bra.s	handle_move
move_three:
	moveq	#8+1,d0				;Move to object three
handle_move:
	tst.b	Kinit1(a4)			;Init ?
	bpl.s	.no_initm
		sf	Kinit1(a4)
		lea	trash_tab(pc),a0	;Get trashs xpos
		move.l	-1(a0,d0.w),a0
		neg.w	d0
		move.b	d0,Ktake_it(a4)
		move.w	Bob_X_Position(a0),d0
		addq.w	#8,d0
		andi.w	#$fffe,d0		;Align to even positions
		move.w	d0,Kuser0(a4)		;Remember the positions
.no_initm:
	move.w	Bob_X_Position(a4),d0
	andi.w	#$fffe,d0
	cmp.w	Kuser0(a4),d0			;Reached trashs position ?
	bne.s	.not_ready
;		PLAY_FX	#KRAN_FX
		bra	next_mode
.not_ready:
	blo.s	.to_right
		moveq	#-2,d0
	bra.s	.set
.to_right:
		moveq	#2,d0
.set:
	add.w	d0,Bob_X_Position(a4)
	bra	exit_kran
take_item:
	moveq	#0,d0				;Move down until object taken
	move.b	Ktake_it(a4),d0
	neg.b	d0
	lea	trash_tab(pc),a0
	move.l	-1(a0,d0.w),a0
	move.w	Bob_Y_Position(a0),d0
	sub.w	Bob_Y_Position(a4),d0
	subi.w	#42,d0
	cmp.w	Koffset(a4),d0			;Object is reached...
	bge.s	.not_reached
		neg.b	Ktake_it(a4)		;Take it...
		bra	next_mode
.not_reached:
	addq.w	#3,Koffset(a4)			;Move down...
	bra	exit_kran
move_up:
	subq.w	#3,Koffset(a4)			;Move grabber up
	bpl	exit_kran
		clr.w	Koffset(a4)
		bra	next_mode
	bra	exit_kran
drop_item:
	bsr	free_item
	bra	next_mode
wait:
	tst.b	Kinit1(a4)		;Wait 1/2 second
	bpl.s	.no_initw
		sf	Kinit1(a4)
		move.w	#25,Kuser0(a4)
.no_initw:
	subq.w	#1,Kuser0(a4)
	bmi	next_mode
	bra	exit_kran
mleft_50:
	moveq	#-2,d0			;Move left 50 times
	moveq	#50,d1
	bra.s	do_move
mright_50:
	moveq	#2,d0			;Move right 50 times
	moveq	#50,d1
	bra.s	do_move
mleft_10:
	moveq	#-2,d0			;Move left 10 times
	moveq	#10,d1
	bra.s	do_move
mright_10:
	moveq	#2,d0			;Move right 10 times
	moveq	#10,d1
do_move:
	tst.b	Kinit1(a4)
	bpl.s	.no_init
		sf	Kinit1(a4)
		move.w	d1,Kuser0(a4)
.no_init:
	subq.w	#1,Kuser0(a4)		;Move done ?
	bmi.s	next_mode		;Yes...
	add.w	d0,Bob_X_Position(a4)		;No, move on...
	bra.s	exit_kran
next_mode:
	move.l	Kmode_ptr(a4),a0	;Set next mode according to table
	addq.l	#1,a0
	tst.b	(a0)
	bpl.s	.not_end
		lea	modes_tab(pc),a0
.not_end:
	move.l	a0,Kmode_ptr(a4)
	st	Kinit1(a4)
exit_kran:
	bsr	set_slavepos		;Just set slave-positions

	rts

free_item:
	moveq	#0,d0			;Free trash-slave -> Fall down
	move.b	Ktake_it(a4),d0
	lea	trash_tab(pc),a0
	move.l	-1(a0,d0.w),a0
	move.b	#BOB_TRUE,Bob_Used(a0)	;set kollision
	st	Bob_Special_4(a0)
	clr.l	Bob_Special_1(a0)
	clr.w	Bob_Special_3(a0)
	neg.b	Ktake_it(a4)		;Clear "taken-flag"
	rts

Start_Bossrope:
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	#Bossrope,Bob_Routine(a4)

Bossrope:
	tst.b	big_final
	bmi	Out_Bob_Damage
	move.l	boss_ptr,a0
	movem.w	Bob_X_Position(a0),d0-d1
	add.w	#17,d1
	addq.w	#8,d0
	movem.w	d0-d1,Bob_X_Position(a4)

	move.w	Koffset(a0),d0
	addq.w	#7,d0
	move.w	d0,Bob_Height(a4)

	moveq	#0,d0
	move.w	Koffset(a0),d0
	and.w	#15,d0
	neg.w	d0
	add.w	#15,d0
	move.w	d0,d1
	add.w	d1,d1
	add.w	d1,d0
	add.w	d0,d0
	add.l	#Boss_AD_GFX,d0
	move.l	d0,Bob_Graphics(a4)

	rts

set_slavepos:					;Set slave's position
	move.l	Kslave(a4),a0			;Get posinter to slave
	movem.w	Bob_X_Position(a4),d0-d1	;Get base-object's position
	addi.w	#24,d1				;Add position-offsets
	add.w	Koffset(a4),d1
	movem.w	d0-d1,Bob_X_Position(a0)	;Write position
	moveq	#0,d2
	move.b	Ktake_it(a4),d2			;Any object taken ?
	bmi.s	.nothing
		lea	trash_tab(pc),a1	;Get address of object
		move.l	-1(a1,d2.w),a1
		subq.w	#8,d0			;Align to right offset
		addi.w	#16,d1
		movem.w	d0-d1,Bob_X_Position(a1);Write position
.nothing:
	rts

handle_grabber:
	tst.b	big_final
	bpl.s	.ok
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
.ok:
	bsr	Standart_Hit_Handler
	moveq	#100,d0
	sub.w	Bob_Power(a4),d0
	move.w	#100,Bob_Power(a4)
	tst.b	big_final
	beq.s	.not_final
	sub.w	d0,big_power
.not_final:

;	tst.b	O_HIT(a5)
;	.if (not zero) {
;		sf	O_HIT(a5)
;		PLAY_HIT #10
;		pea	(a5)
;		jsr	add_objectlast.w
;		move.l	O_XPOS(a5),O_XPOS(a0)
;		subq.w	#8,O_YPOS(a5)
;		move.l	a0,a5
;		jsr	make_expl.w
;		move.l	(sp)+,a5
;	}
	rts

handle_dummy:					;Handle dummy-trash-object
	cmp.b	#BOB_NOCOL,Bob_Used(a4)
	bne.s	.collide

		movem.w	Bob_X_Position(a4),d0-d1;No, so check for standing
		addq.w	#8,d0			;player
		move.w	d0,d2
		add.w	#32,d2
		bsr	check_foot_frame
		beq.s	.collide
			move.w	Bob_Y_Position(a4),d1
			bsr	alias_feet
			move.w	d1,T_posY
			st	T_stand
.collide:
		tst.b	Bob_Special_4(a4)		;Attached to grabber ?
		beq.s	.out
			addi.l	#$00004000,Bob_Special_1(a4)	;No, so let fall down
			move.w	Bob_Special_2(a4),d0
			add.w	d0,Bob_Special_3(a4)
			move.w	Bob_Special_1(a4),d0
			move.w	Bob_Y_Position(a4),d1
			addx.w	d0,d1
			move.w	d1,Bob_Y_Position(a4)
.out
	movem.w	Bob_X_Position(a4),d0-d1		;Check if hit floor
	add.w	Bob_Special_5(a4),d1
	bsr	check_obj_kollision
	beq.s	.no_ground
		move.b	#BOB_NOCOL,Bob_Used(a4)	;Collision off

		move.w	Bob_Y_Position(a4),d0		;Align to floor
		add.w	Bob_Special_5(a4),d0
		and.w	#$fff8,d0
		sub.w	Bob_Special_5(a4),d0
		move.w	d0,Bob_Y_Position(a4)
		clr.l	Bob_Special_1(a4)		;Clear speed etc.
		clr.l	Bob_Special_3(a4)
	rts

.no_ground:
	rts

start_muell:					;Allocate trash-roller
	move.l	a4,-(sp)
	move.w	Scr_X_Level_Pos(a6),d1
	move.w	Scr_Y_Level_Pos(a6),d2
	add.w	#300,d1
	add.w	#175-98,d2
	moveq	#1,d0
	bsr	Search_Last_Entry		;Immer ganz vorne!

	move.l	#handle_muell,Bob_Routine(a4)	;Init standart-variables
	move.l	#Muell_AnimTable,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	sf	Klow_ypos(a4)			;Set varibales
	clr.w	Kspeed(a4)
	move.w	#12,Bob_Power(a4)
	move.l	(sp)+,a4
	rts

handle_muell:
	bsr	Standart_Hit_Handler
	beq	.kill_now

	move.b	Kspeed+1(a4),d0		;Move object up/down
	add.b	d0,Klow_ypos(a4)
	move.b	Kspeed(a4),d0
	ext.w	d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)

	movem.w	Bob_X_Position(a4),d0-d1	;Test if ground is hit
	addi.w	#32,d1
	bsr	check_obj_kollision
	bne.s	.set_down
		addi.w	#$0040,Kspeed(a4)
	bra.s	.no_set_down
.set_down:
		subi.w	#$0100,Kspeed(a4)	;Yes, energy is lost &
		bpl.s	.no_clear
			clr.w	Kspeed(a4)	;Kein titschen mehr!
.no_clear:
		neg.w	Kspeed(a4)
;		PLAY_FX	#51

.no_set_down:

	tst.w	big_power		;Boss power down ?
	bmi.s	.kill_now

	subq.w	#2,Bob_X_Position(a4)		;Move to the left

	moveq	#0,d2
	move.b	Kangle(a4),d2		;Turn object into VRAM-buffer
	and.w	#$fff8,d2
	asl.w	#6,d2
	add.l	#Rotate2,d2
	move.l	d2,Bob_Graphics(a4)
	add.l	#3*32*4,d2
	move.l	d2,Bob_Mask(a4)

	addq.b	#4,Kangle(a4)

	bra	Test_Bob_Out

.kill_now:
		subi.w	#16,Bob_X_Position(a4)	;Just let explode (no points)
		subi.w	#16,Bob_Y_Position(a4)
;		PLAY_FX	#11
		moveq	#0,d0
		bra	Standart_Destruction

Muell_AnimTable:
	dc.l	Rotate2,Rotate2+3*32*4
	dc.w	0,0,32,2,2,28,12


	rsset	Bob_Special_1
Kbdelay	rs.w	1

handle_band:
;	subq.w	#1,Kbdelay(a5)
;	.if (minus) {
;		addq.w	#3,Kbdelay(a5)
;		subq.w	#1,O_PHA(a5)
;		.if (minus) {
;			move.w	#2,O_PHA(a5)
;		}
;	}

	rts

boss_ptr:	dc.l	0
trash_tab:	dc.l	0,0,0

big_final:	dc.b	0
		dc.b	0

Kran_AnimTable:
	dc.l	Boss_GFX+Kbob01,Boss_GFX+Kmsk01
	dc.w	0,0,16,2,2,28,12
	dc.l	Boss_GFX+Kbob00,Boss_GFX+Kmsk00
	dc.w	0,0,16,2,2,28,12
	dc.l	Boss_GFX+Kbob00,0
	dc.w	0,0,128,2,2,12,12

Trash_AnimTable:
	dc.l	Boss_GFX+Kbob03,Boss_GFX+Kmsk03
	dc.w	0,0,32,2,2,44,28
	dc.l	Boss_GFX+Kbob02,Boss_GFX+Kmsk02
	dc.w	0,0,24,2,2,44,22

;-----------------------------------------------------

pos_tab:				;Offsets to the trash-positions
	dc.w	0,1,129,32
	dc.w	22,60,129+8,24
	dc.w	0,170,129,32

pow_tab:	dc.w	30,30,40
		dc.w	100,100,80
		dc.w	180,180,110

KMOVE1		equ 0
KMOVE2		equ 4
KMOVE3		equ 8
KTAKE		equ 12
KDROP		equ 16
KWAIT1		equ 20
KMOVEUP		equ 24
KLEFT_50	equ 28
KRIGHT_50	equ 32
KLEFT_10	equ 36
KRIGHT_10	equ 40
KEXPL		equ 44
KEND		equ -1

modes_tab:
	dc.b	KMOVE2,KTAKE,KMOVEUP,KWAIT1,KDROP,KMOVE1,KTAKE,KWAIT1,KMOVEUP
	dc.b	KRIGHT_10,KRIGHT_10,KDROP,KMOVE3,KTAKE,KMOVEUP,KDROP,KMOVE1
	dc.b	KTAKE,KMOVEUP,KLEFT_10,KLEFT_10,KDROP
	dc.b	KEND
expl_mode:
	dc.b	KEXPL

	even
*---------------------------------------------------------------------------
*	Routine and AnimTable of     Flyer
*---------------------------------------------------------------------------

	rsset	Bob_Special_1
Lptr	rs.l	1
Lldir	rs.w	1
Lxlow	rs.w	1
Lylow2	rs.w	1
Ldelay	rs.w	1
Lmode	rs.b	1
Lswing	rs.b	1

fxdir	dc.l	1
fydir	dc.l	1
levx	dc.w	1
levy	dc.w	1
flag	dc.b	1
index	dc.b	1

fly_delay:	dc.w	0

Start_Fly:
	move.w	Bob_Special_4(a4),fly_yfix
	move.l	a0,a3

	sf	flag
	movem.w	(a4),d0-d1
	asl.w	#4,d0
	asl.w	#4,d1
	movem.w	d0-d1,levx
	sf	index				;Setup parameter

	sf	Lswing(a4)

	clr.l	Lxlow(a4)
	sf	Lmode(a4)

	st	Boss_flag

	move.w	#80,fly_delay
	sf	boss_shots

	lea	.pow_tab(pc),a0			;Calc power
	bsr	Make_Power
	move.w	d0,Bob_Power(a4)

	move.l	#Fly,Bob_Routine(a4)

	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)

	move.l	#AD_Bob+Abob00,d0
	move.l	#flash_buffer,d1
	move.w	#64*48+6,d2
	bsr	Generate_Mask

	bra	Set_me_to_first

.pow_tab:	dc.w	40,60,40
		dc.w	60,90,60
		dc.w	90,120,90

Fly:
	bsr	handle_repos1

	tst.w	Bob_Power(a4)			;Destroyed ?
	bne.s	.no_destruction
;		PLAY_FX	#13
		sf	Boss_flag
	move.w	#2,Cue_Point
	clr.l	Scr_X_Fix(a6)			;Level loslassen

	movem.w	Bob_X_Position(a4),d1-d2	;Zweite Explosion starten
	addq.w	#8,d1
	moveq	#1,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry
	move.l	(sp)+,a4

	moveq	#1,d0
	cmp.w	#2,act_level
	beq.s	.sound_ok
	moveq	#2,d0
.sound_ok:
	jsr	TFMX+44

	bsr	StartFlash

	addi.w	#48+8,Bob_X_Position(a4)
	move.l	#$1500,d0			;Yes, 1500 Points
	move.l	#Player_Dead,Dead_Vector
	bra	Standart_Destruction

.no_destruction:
	move.l	#AD_Bob+Abob00,Bob_Graphics(a4)
	tst.w	Bob_Hit(a4)			;Hit ?
	beq.s	.no_hit
	subq.w	#1,Bob_Hit(a4)
	beq.s	.no_hit
	move.l	#flash_buffer,Bob_Graphics(a4)
;		PLAY_HIT #10
	
.no_hit:
	cmpi.b	#4,Lmode(a4)		;Not in init-mode ?
	bls.s	.no_init
	subq.w	#1,fly_delay	;Yes, delay down ?
	bpl.s	.no_init
	move.w	#3*60,fly_delay	;Yes, reset and set bullets
	bsr	.start_norms
.no_init:
	moveq	#0,d0			;Handle current mode
	move.b	Lmode(a4),d0
	jmp	.mode_tab(pc,d0.w)
.mode_tab:
	bra.w	.fly_init
	bra.w	.fly_in
	bra.w	.wait_fly
	bra.w	.seek_fly
.fly_init:				;Reached fixed position ?
	tst.w	Scr_X_Fix(a6)
	bne.s	.wait
	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	cmpi.w	#100,d0			;Not yet...
	bgt	.no_start
	move.l	#Repos_Player_Dead,Dead_Vector
.wait:
	tst.w	Scr_X_Fix(a6)
	bne.s	.no_set
	SONGPLAY #4
	move.w	Scr_X_Level_Pos(a6),Scr_X_Fix(a6)
	add.w	#32,Scr_X_Fix(a6)
	move.w	fly_yfix,Scr_Y_Fix(a6)
.no_set:
	move.w	Scr_X_Level_Pos(a6),d0
	cmp.w	Scr_X_Fix(a6),d0
	bne.s	.no_start

	move.w	Scr_Y_Level_Pos(a6),d0
	cmp.w	Scr_Y_Fix(a6),d0
	bne.s	.no_start


	sf	Bob_BlitStatus(a4)
		addq.b	#4,Lmode(a4)		;Yes, next mode
		move.l	#3<<16,fydir
		clr.l	fxdir			;Init parameters for fly-in
	move.w	Scr_X_Level_Pos(a6),d0
	add.w	#160-48,d0
	and.w	#$fff0,d0
	move.w	d0,Bob_X_Position(a4)
	move.w	Scr_Y_Level_Pos(a6),d0
	sub.w	#80,d0
	move.w	d0,Bob_Y_Position(a4)
	move.b	#BOB_TRUE,Bob_Used(a4)		;Jetzt kann er tten!

.no_start:
	rts

.fly_in:
	move.l	fydir,d0			;Move flyer in
	sub.w	d0,Lylow2(a4)
	swap	d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)

	subi.l	#$00000900,fydir		;Slow down
	bpl	.end_fly			;Stopped ?
	addq.b	#4,Lmode(a4)			;Yes, next mode

	move.w	Scr_Y_Level_Pos(a6),d0
	add.w	#51,d0
	move.w	d0,Bob_Y_Position(a4)		;Frs Licht fixen!

	moveq	#29,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry		;Licht-Alien eingetragen!
	move.l	a4,a0
	move.l	(sp)+,a4
	move.l	a4,Bob_Special_1(a0)

;	st	O_COLEN(a5)
	move.w	#60*2,Ldelay(a4)		;Wait 2 s
	bra	.end_fly

.wait_fly:

	bsr	.slow_down			;Let flyer slow down
	bsr	.handle_swing			;Let it swing

	subq.w	#1,Ldelay(a4)			;Waiting over ?
	bpl	.end_fly
	addq.b	#4,Lmode(a4)			;Yes, next mode
	move.w	#3*60,Ldelay(a4)		;3 s duration
	bra	.end_fly
.seek_fly:
	move.l	fxdir,d2			;Handle speed up to meet player
	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	addi.w	#32,d0
;	add.w	light_offset,d0
	sub.w	T_posX,d0			;Speed up which direction
	bge.s	.lab1
	addi.l	#$00002400,d2
	bra.s	.lab0
.lab1:
	subi.l	#$00002400,d2
.lab0:
	cmpi.l	#-3<<16,d2			;Check for maximum speed
	bge.s	.lab2
		move.l	#-3<<16,d2
	bra.s	.lab3
.lab2:
		cmpi.l	#3<<16,d2
		ble.s	.lab3
			move.l	#3<<16,d2
.lab3:
	move.l	d2,fxdir			;Save new direction

	tst.w	d0				;Difference smaller than 10 pixels ?
	bpl.s	.lab4
		neg.w	d0
.lab4:
	cmpi.w	#10,d0
	bhs.s	.lab5
		cmpi.w	#-2,fxdir		;Speed low enough ?
		blt.s	.lab5
			cmpi.w	#2,fxdir
			bgt.s	.lab5
				move.b	#8,Lmode(a4)	;Set waiting mode
				move.w	#60*2,Ldelay(a4)
				bra	.end_fly
.lab5:
	tst.w	fxdir				;Let the light move towards
;	.if (plus) {				;movement-direction
;		cmpi.w	#39,light_offset
;		bge.s	.no
;		addq.w	#1,light_offset
;	} .else {
;		cmpi.w	#-39,light_offset
;		.if (greater) {
;			subq.w	#1,light_offset
;		}
;	}
.no:
	bsr	.handle_swing			;Handle swinging

	subq.w	#1,Ldelay(a4)			;Time over ?
	bpl	.end_fly
	move.b	#8,Lmode(a4)			;Change to waiting, too.
	move.w	#60*2,Ldelay(a4)


.end_fly:
	subq.b	#1,light_wait
	bpl.s	.no_light
	move.b	#16,light_wait
	st	light_next
.no_light:

	move.l	fxdir,d2			;Move flyer...
	add.w	d2,Lxlow(a4)
	swap	d2
	move.w	Bob_X_Position(a4),d0
	addx.w	d2,d0
	move.w	d0,Bob_X_Position(a4)

	cmpi.b	#8,Lmode(a4)			;Init-mode ?
	blo	.out

	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	#32,d0
	cmp.w	T_posX,d0
	bgt.s	.out
	add.w	#120,d0
	cmp.w	T_posX,d0
	blt.s	.out
			tst.b	boss_shots	;Yes, shots out ?
			bne.s	.out
;				PLAY_FX	#56
				move.b	#3,boss_shots	;No, start new shots
				move.l	Bob_X_Position(a4),-(sp);Calc angle to player
				addi.w	#48,Bob_X_Position(a4)
				addi.w	#32,Bob_Y_Position(a4)
				move.w	T_posX,d6
				move.w	T_posY,d7
				addi.w	#16,d6
				addi.w	#24,d7
				add.w	Scr_X_Level_Pos(a6),d6
				add.w	Scr_Y_Level_Pos(a6),d7
				bsr	calc_ene_angle
				moveq	#127-16,d7
				sub.b	d1,d7
				moveq	#2,d6		;Start 3 big shots
.start_shots:
					move.b	d7,d0
					bsr	sin
					move.w	d0,d5
					move.b	d7,d0
					bsr	cos
					move.w	d0,d4
					movem.w	Bob_X_Position(a4),d2-d3
					bsr	.init_shot
					addi.w	#16,d7
				dbf	d6,.start_shots
				move.l	(sp)+,Bob_X_Position(a4)
.out:
	rts

.start_norms:				;Start small bullets
	moveq	#39,d6
	moveq	#3,d7			;Allocate 4 pieces
.start_loop:
	move.w	d7,-(sp)
		move.b	d6,d0
		bsr	sin
		move.w	d0,d3
		move.b	d6,d0
		bsr	cos
		move.w	d0,d2
		asr.w	#2,d2
		asr.w	#2,d3
		movem.w	Bob_X_Position(a4),d0-d1
		addi.w	#48,d0
		addi.w	#32,d1
		bsr	Start_Shoot
		addi.w	#16,d6
	move.w	(sp)+,d7
	dbf	d7,.start_loop
	rts

.handle_swing:
	subq.b	#1,Lswing(a4)				;Next swing-offset ?
	bpl	.out
		addq.b	#4,Lswing(a4)			;Yes, handle swinging
		addq.b	#2,index
		andi.b	#14,index
		moveq	#0,d0
		move.b	index,d0
		move.w	.swing_tab(pc,d0.w),d0
		add.w	d0,Bob_Y_Position(a4)
	rts

.swing_tab:
	dc.w	-1,-1,1,1,1,1,-1,-1

.slow_down:
	tst.w	fxdir				;Handle slow-down of flyer, if waiting...
	bmi.s	.to_left
		subi.l	#$00004000,fxdir
		bpl	.out
		clr.l	fxdir
	rts
.to_left:
		addi.l	#$00004000,fxdir
		bmi	.out
		clr.l	fxdir
	rts


;-----------------------------------------------

		rsset	Bob_Special_1
sxdir		rs.w	1
sydir		rs.w	1
sxlow		rs.b	1
sylow		rs.b	1
sdelay		rs.w	1

.init_shot:					;Init shot object
	movem.l	a4/d7,-(sp)
	movem.w	d4-d5,-(sp)
	move.w	d2,d1
	move.w	d3,d2
	lea	Area_Enter_Vector(pc),a1
	moveq	#18,d0
	bsr	Search_Bob_Entry
	move.l	#Fly_Shot,Bob_Routine(a4)
	movem.w	(sp)+,d4-d5
	movem.w	d4-d5,sxdir(a4)
	clr.w	sdelay(a4)			;Setup parameter
	clr.w	sxlow(a4)
	movem.l	(sp)+,a4/d7
	rts

fly_yfix:	dc.w	0

Fly_Shot:
	move.b	sxdir+1(a4),d0			;Move shot
	add.b	d0,sxlow(a4)
	move.b	sxdir(a4),d0
	ext.w	d0
	move.w	Bob_X_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_X_Position(a4)
	move.b	sydir+1(a4),d0
	add.b	d0,sylow(a4)
	move.b	sydir(a4),d0
	ext.w	d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)

	tst.b	Boss_flag
	beq.s	.no_boss

	movem.w	Bob_X_Position(a4),d0-d1
	bsr	check_obj_kollision
	beq.s	.no_coll
.no_boss:
		subq.b	#1,boss_shots			;Dec. flag
		subi.w	#12,Bob_X_Position(a4)
		subi.w	#12,Bob_Y_Position(a4)
	bra	Out_Bob
.no_coll:


	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl	.out
	subq.b	#1,boss_shots
.out:
	rts

Start_Flyer_Light:
	move.l	a4,-(sp)
	moveq	#30,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.l	a4,a0
	move.l	(sp)+,a4
	move.l	a0,Bob_Special_3(a4)
	move.l	#Flyer_Light,Bob_Routine(a4)

Flyer_Light:
	move.l	Bob_Special_3(a4),a1
	eor.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	tst.b	Boss_flag
	beq	Out_Bob_Damage			;Tot!
	move.l	Bob_Special_1(a4),a0
	movem.w	Bob_X_Position(a0),d0-d1
	add.w	#32,d0
	add.w	#38,d1
	movem.w	d0-d1,Bob_X_Position(a4)
	move.b	Bob_BlitStatus(a4),Bob_BlitStatus(a1)
	movem.w	d0-d1,Bob_X_Position(a1)


	tst.b	light_next
	beq.s	.out
	bsr	Get_Next_Bob_Frame
.out:
	move.l	Bob_Special_1(a4),a0
	move.w	Bob_Y_Position(a0),d0
	sub.w	Scr_Y_Level_Pos(a6),d0
	sub.w	#50,d0
	neg.w	d0
	add.w	#54,d0
	move.w	d0,Bob_Height(a4)
	rts

Flyer_Light_Slave:
	tst.b	Boss_flag
	beq	Out_Bob_Damage			;Tot!
	tst.b	light_next
	beq.s	.out
	sf	light_next
	bsr	Get_Next_Bob_Frame
.out:
	rts

light_next:	dc.b	0
light_wait:	dc.b	15

Flyer_AnimTable:
	dc.l	AD_Bob+Abob00,0
	dc.w	0,0,48,6,2,84,44

Fly_Shot_AnimTable:
	dc.l	main2_GFX+Nbob25,main2_GFX+Nmsk25
	dc.w	0,0,15,2,2,12,12

Flyer_AnimTable2:
	dc.l	flash_GFX+10*3*6,0		;Links
	dc.w	-18,10,51,0,0,0,0

	dc.l	level_Buffer+3000+1920+10*3*6,0	;Mitte
	dc.w	-10,10,51,0,0,0,0

	dc.l	level_Buffer+3000+10*3*6,0	;Rechts
	dc.w	-2,10,51,0,0,0,0

	dc.l	level_Buffer+3000+1920+10*3*6,0	;Mitte
	dc.w	-10,10,51,0,0,0,0

	dc.w	ENTRY_END
	dc.l	Flyer_AnimTable2

Flyer_AnimTable3:
	dc.l	flash_GFX,flash_GFX					;Links
	dc.w	9,0,10,0,0,0,0

	dc.l	level_Buffer+3000+2+1920,level_Buffer+3000+2+1920	;Mitte
	dc.w	6,0,10,0,0,0,0

	dc.l	level_Buffer+3000+4,level_Buffer+3000+4			;Rechts
	dc.w	3,0,10,0,0,0,0

	dc.l	level_Buffer+3000+2+1920,level_Buffer+3000+2+1920	;Mitte
	dc.w	6,0,10,0,0,0,0

	dc.w	ENTRY_END
	dc.l	Flyer_AnimTable3

boss_shots:	dc.w	0

Fbob00 	= $00000
Fbob01 	= $00480

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Robot
*---------------------------------------------------------------------------
Bbob00 	= $00000
Bbob01 	= $00f00
Bbob02 	= $01b6c

		rsset	Bob_Special_1
Rcopy_flag	rs.b	1
Rmode		rs.b	1
Ruser0		rs.w	1
Ruser1		rs.w	1
Rylow		rs.b	1
Rdir		rs.b	1
Rroot		rs.l	1
Rphase		rs.b	1
Rdelay		rs.b	1

Robot_X	= 2295
Robot_Y	= 80+25

Start_Robot:
	sf	Rcopy_flag(a4)
	sf	Rylow(a4)
	sf	Rdir(a4)

	move.w	#Robot_X,Scr_X_Fix(a6)
	move.w	#Robot_Y,Scr_Y_Fix(a6)

	moveq	#106,d0
	move.w	Bob_Y_Position(a4),d1
	sub.w	Scr_Y_Level_Pos(a6),d1
	sub.w	#86,d1
	blt.s	.no_small
	sub.w	d1,d0
.no_small:
	move.w	d0,Bob_Height(a4)

	move.l	a4,a5				;Add slave-objects
	moveq	#0,d6
	moveq	#2,d7
.init1:
	moveq	#16,d0
	movem.w	Bob_X_Position(a4),d1-d2
	lea	Area_Enter_Vector(pc),a1
	movem.l	a4/d6-d7,-(sp)
	bsr	Search_Bob_Entry
	move.l	a4,a0
	movem.l	(sp)+,a4/d6-d7
	move.l	#handle_slave,Bob_Routine(a0)
;	move.l	#slave_col,O_COL(a0)
;	st	O_COLEN(a0)
	move.w	d6,Bob_Special_7(a0)
	move.l	a0,Rroot(a5)
	sf	Bob_Special_1(a0)
	move.w	#-1,Ruser0(a0)		;Rumble off
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a0)
	move.w	#NORM,Bob_Race(a0)
	move.l	a0,a5
	addq.w	#2,d6
	dbf	d7,.init1

	lea	custom,a5

	move.b	#12,Rmode(a4)			;Set start-mode
;	st	boss_flag.w

	lea	.pow_tab(pc),a0			;Calc power
	jsr	Make_Power
	move.w	d0,big_power
	move.w	#20,Bob_Power(a4)

	clr.w	Rphase(a4)

	move.b	#BOB_NOCOL,Bob_Used(a4)

	move.l	#Repos_Player_Dead,Dead_Vector
	move.l	#Robot,Bob_Routine(a4)
	bra	Set_me_to_first

.pow_tab:	dc.w	10,15,10
		dc.w	40,60,32
		dc.w	80,100,70

Robot:
	bsr	handle_repos1

	cmp.b	#16,Rmode(a4)
	beq.s	.no_rumble2

	move.l	Rroot(a4),a0
	lea	Ruser0(a0),a0
	bsr	do_rumble
.no_rumble2:

	moveq	#0,d0				;Start mode-routine
	move.b	Rmode(a4),d0
	jmp	.mode_tab(pc,d0.w)
.mode_tab:
	bra.w	.wait
	bra.w	.jump_up
	bra.w	.fall_down
	bra.w	.move_screen
.destroy_robo:					;Robot is exploding
	subq.w	#1,Ruser0(a4)
	bpl.s	.not_free
;		sf	boss_flag.w		;It's over
	move.w	#3,Cue_Point

	lea	Coplab2(pc),a0
	move.w	#COPCOL3,167*8+4(a0)
	move.w	#$008a,192*8+4(a0)		;Bitte hier springen!
	move.w	#192,Robot_change1

	clr.l	Scr_X_Fix(a6)
	bsr	SetColors2
	move.l	#Player_Dead,Dead_Vector

	st	Robot_destructed

	bsr	StartFlash

	SONGPLAY #1

	bra	Out_Bob_Damage
.not_free:
	clr.w	Scr_Y_Force(a6)
	subq.w	#1,Ruser1(a4)			;New explosion ?
	bpl	.exit_robo
	addq.w	#6,Ruser1(a4)		;Reset delay

	movem.w	Bob_X_Position(a4),d1-d2
	bsr	rnd
	andi.w	#63,d0
	add.w	d0,d1
	bsr	rnd
	andi.w	#63,d0
	add.w	d0,d2
	moveq	#1,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	(sp)+,a4

	bra	.exit_robo
.wait:						;Just waiting
	subq.w	#1,Ruser0(a4)			;Over ?
	bpl	.exit_robo
	addq.b	#4,Rmode(a4)			;Yes, next mode
	move.w	Ruser1(a4),Ruser0(a4)		;Init jump-speed
	bra	.exit_robo
.jump_up:
	moveq	#-2,d0				;Calc x-movement
	tst.b	Rdir(a4)
	beq.s	.to_right
	neg.w	d0
.to_right:
	add.w	d0,Bob_X_Position(a4)
	move.b	Ruser0+1(a4),d0			;Calc y-movement
	sub.b	d0,Rylow(a4)
	moveq	#0,d0
	move.b	Ruser0(a4),d0
	move.w	Bob_Y_Position(a4),d1
	subx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)
	subi.w	#34,Ruser0(a4)			;Slow down
	bpl	.exit_robo			;Still upwards ?
	clr.w	Ruser0(a4)			;No, next mode...
	addq.b	#4,Rmode(a4)
	bra	.exit_robo
.fall_down:
	moveq	#-1,d0				;Calc x-movement
	tst.b	Rdir(a4)
	beq.s	.to_left
	neg.w	d0
.to_left:
	add.w	d0,Bob_X_Position(a4)
	move.b	Ruser0+1(a4),d0			;Calc y-movement
	add.b	d0,Rylow(a4)
	moveq	#0,d0
	move.b	Ruser0(a4),d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)
	addi.w	#74,Ruser0(a4)
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#82,d1
	moveq	#2,d7				;Check if touch-down...
.check:
	addi.w	#20,d0
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.found_ground
	dbf	d7,.check
	bra	.exit_robo
.found_ground:					;Ground reached, wait again
	sf	Rylow(a4)			;Set exactly on the ground
	move.w	Bob_Y_Position(a4),d0
	addq.w	#2,d0
	and.w	#$fff8,d0
	subq.w	#2,d0
	move.w	d0,Bob_Y_Position(a4)

	move.l	Rroot(a4),a0
	tst.w	Ruser0(a0)
	bpl.s	.no_rumble

		move.w	#13<<1,Ruser0(a0)		;Start rumbleing
		move.w	#-3,Scr_Y_Force(a6)

.no_rumble:
	move.l	Rroot(a4),a0
	tst.b	Rmode(a0)			;First touch-down ?
	bne.s	.not_1
		st	Rmode(a0)		;Yes, do not slow down
		bra.s	.not_slower
	bra.s	.not_2
.not_1:
	bpl.s	.not_2
	neg.b	Rmode(a0)			;Yes, slow down twice
	subi.w	#256+50,Ruser1(a4)
.not_2:
	subi.w	#256+50,Ruser1(a4)		;Final jump ?
	bgt.s	.not_slower
	move.w	#$490,Ruser1(a4)		;Yes, wait-mode
	not.b	Rdir(a4)
	sf	Rmode(a4)
	move.w	#100,Ruser0(a4)			;Wait 2 seconds
	sf	Rmode(a0)
	bra.s	.exit_robo
.not_slower:
	move.w	Ruser1(a4),Ruser0(a4)		;No, jump again with
	move.b	#4,Rmode(a4)			;lower velocity
	bra	.exit_robo

.move_screen:					;Init-mode, screen moves into
	cmp.w	#Robot_X,Scr_X_Level_Pos(a6)
	bne.s	.exit_robo

	move.b	#BOB_TRUE,Bob_Used(a4)

	lea	Robot_flipI(pc),a3
	lea	fist_bob,a0
	lea	flash_buffer,a1
	jsr	Flip_Bobs

	move.l	#fist_bob+Bbob01,d0
	move.l	#$4a000,d1
	move.w	#64*106+5,d2
	bsr	Generate_Mask

	move.l	#flash_buffer,d0
	move.l	#$5a000,d1
	move.w	#64*106+5,d2
	bsr	Generate_Mask

		move.w	#120,Ruser0(a4)		;action
		move.w	#$490,Ruser1(a4)
		sf	Rmode(a4)


.exit_robo:
	tst.b	Rdir(a4)				;Wich direction to display ?
	beq.s	.set_left
	move.w	#12,dir_Pointer
	cmp.l	#Robot_AnimTableR,Bob_Next_Anim(a4)
	bge.s	.ok
	move.l	#Robot_AnimTableR,Bob_Next_Anim(a4)
	bra.s	.set
.set_left:
	move.w	#0,dir_Pointer
	cmp.l	#Robot_AnimTableR,Bob_Next_Anim(a4)
	blt.s	.ok
	move.l	#Robot_AnimTableL,Bob_Next_Anim(a4)
.set:
	bsr	Get_Next_Bob_Frame
.ok:
	subq.w	#1,Bob_Anim_Delay(a4)
	bpl.s	.no_anim
	move.w	Bob_Anim_Delay_Init(a4),Bob_Anim_Delay(a4)
	bsr	Get_Next_Bob_Frame
.no_anim:
	moveq	#106,d0
	move.w	Bob_Y_Position(a4),d1
;	sub.w	Scr_Y_Level_Pos(a6),d1
	sub.w	#86-25+105,d1
	blt.s	.no_small
	sub.w	d1,d0
.no_small:
	move.w	d0,Bob_Height(a4)

	tst.w	Bob_Hit(a4)			;Hit ?
	beq.s	.no_hit
	subq.w	#1,Bob_Hit(a4)
	move.l	#$4a000,d0
	tst.b	Rdir(a4)
	beq.s	.hit_left
	move.l	#$5a000,d0
.hit_left:
	move.l	d0,Bob_Graphics(a4)
.no_hit:
		moveq	#20,d0
		sub.w	Bob_Power(a4),d0
		beq.s	.no_hit2
		sub.w	d0,big_power
		move.w	#20,Bob_Power(a4)
;		PLAY_HIT #10
.no_hit2:
	tst.w	big_power			;Power down ?
	bmi.s	.no_power
		move.l	a4,a0			;No, so init collision-slaves
		moveq	#0,d0
		moveq	#2,d1
.init_slaves:
		move.l	Rroot(a0),a0
		move.l	Bob_X_Position(a4),Bob_X_Position(a0)
		addq.w	#2,d0
	dbf	d1,.init_slaves

		rts
.no_power:
	cmpi.b	#16,Rmode(a4)		;Yes, mode allready set up ?
	beq.s	.out
	move.l	#$1100,d0	;No, so add score and init
	jsr	add_score
	move.b	#16,Rmode(a4)
	move.w	#5*60,Ruser0(a4)	;5 seconds explosions
	clr.w	Ruser1(a4)
	move.l	Rroot(a4),a0	;Free slaves
	st	Bob_Special_1(a0)
	move.l	Rroot(a0),a0
	st	Bob_Special_1(a0)
	move.l	Rroot(a0),a0
	st	Bob_Special_1(a0)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	clr.l	Rroot(a4)	;Clear slave-chain-pointer
.out:
	rts

handle_slave:
	tst.b	Bob_Special_1(a4)			;Collision slave just waits
	beq.s	.out
	bra	Out_Bob
.out:
	move.w	Bob_Special_7(a4),d0
	add.w	d0,d0
	add.w	dir_Pointer,d0
	lea	.Coll_Tab(pc),a0
	move.l	(a0,d0.w),Bob_Act_Anim(a4)

	rts

.Coll_Tab:
	dc.l	Robot_AnimTableKL1
	dc.l	Robot_AnimTableKL2
	dc.l	Robot_AnimTableKL3

	dc.l	Robot_AnimTableKR1
	dc.l	Robot_AnimTableKR2
	dc.l	Robot_AnimTableKR3

dir_Pointer:	dc.w	0


Robot_flipI:	dc.w	Bbob01,106*3,80/8
		dc.w	Bbob02,106*3,80/8
		dc.w	-1

Robot_AnimTableL:
		dc.l	fist_bob+Bbob01,0
		dc.w	0,0,106,28,12,20,16
		dc.l	fist_bob+Bbob02,0
		dc.w	0,0,106,28,12,20,16
		dc.w	ENTRY_END
		dc.l	Robot_AnimTableL

Robot_AnimTableR:
		dc.l	flash_buffer,0
		dc.w	0,0,106,32,12,20,16
		dc.l	flash_buffer+Bbob02-Bbob01,0
		dc.w	0,0,106,32,12,20,16
		dc.w	ENTRY_END
		dc.l	Robot_AnimTableR

Robot_AnimTableKR1:
		dc.l	0,0
		dc.w	0,0,1,19,28,50,53
Robot_AnimTableKR2:
		dc.l	0,0
		dc.w	0,0,1,8,7,20,60
Robot_AnimTableKR3:
		dc.l	0,0
		dc.w	0,0,1,18,81,20,18

Robot_AnimTableKL1:
		dc.l	0,0
		dc.w	0,0,1,11,28,50,53
Robot_AnimTableKL2:
		dc.l	0,0
		dc.w	0,0,1,52,7,20,60
Robot_AnimTableKL3:
		dc.l	0,0
		dc.w	0,0,1,42,81,20,18

Robot_destructed:	dc.b	0
			dc.b	0

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Fist
*---------------------------------------------------------------------------
Start_Fist:
	move.l	#Repos_Player_Dead,Dead_Vector
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	bsr	Set_me_to_first
	move.w	#$130,Scr_X_Fix(a6)
	move.w	#496,Scr_Y_Fix(a6)
	cmp.w	#$130,Scr_X_Level_Pos(a6)
	beq	.ok
	rts
.ok:
	move.b	#BOB_TRUE,Bob_Used(a4)
	add.w	#48,Bob_X_Position(a4)
	sf	Bob_BlitStatus(a4)

	move.l	#Fist,Bob_Routine(a4)
	clr.w	Fmode(a4)
	move.l	#mode_tab,Fptr(a4)
	st	Ffinit(a4)
	sf	Fylow(a4)
	move.w	#-1,Frumble(a4)

	SONGPLAY #4

	lea	.pow_tab(pc),a0			;Calc power
	bsr	Make_Power
	move.w	#100,big_power

	move.l	#fist_bob,d0
	move.l	#flash_buffer,d1
	move.w	#64*80+8,d2
	bsr	Generate_Mask

	lea	Fist_coltab(pc),a0
	bra	SetColors1

.pow_tab:	dc.w	50,100,50
		dc.w	100,200,90
		dc.w	150,300,130

SetColors1:
	lea	Col_lab2+2(pc),a1
	lea	B_coltab+2(pc),a2
	move.w	COPCOL3-$182(a0),d0
	moveq	#6-1,d7
.set:
	move.w	(a0),(a1)
	addq.l	#4,a1
	move.w	(a0)+,(a2)+
	dbf	d7,.set
	move.w	#$0182,CTWraplab6+4
	lea	parallax,a0
	move.w	#$c0-1,d7
.copy:
	move.w	d0,(a0)+
	dbf	d7,.copy

	bsr	Wait_tof
	bsr	init_parallax
	rts

SetColors2:
	lea	Level2_coltab(pc),a0
	lea	Col_lab2+2(pc),a1
	lea	B_coltab+2(pc),a2
	moveq	#6-1,d7
.set:
	move.w	(a0),(a1)
	addq.l	#4,a1
	move.w	(a0)+,(a2)+
	dbf	d7,.set
	lea	parallax,a1
	lea	B_parallax(pc),a0
	move.w	#$c0-1,d7
.copy:
	move.w	(a0)+,(a1)+
	dbf	d7,.copy
	move.w	#$0088,CTWraplab6+4
	bsr	Wait_tof
	bsr	init_parallax
	rts

SetColors3:
	lea	Col_lab2+2(pc),a1
	lea	B_coltab+2(pc),a2
	move.w	COPCOL3-$182(a0),d0
	moveq	#6-1,d7
.set:
	move.w	(a0),(a1)
	addq.l	#4,a1
	move.w	(a0)+,(a2)+
	dbf	d7,.set
	move.w	#$0182,CTWraplab6+4
	lea	parallax,a0
	move.w	#$c0-25-1,d7
.copy:
	move.w	d0,(a0)+
	dbf	d7,.copy

	bsr	Wait_tof
	bsr	init_parallax
	rts

FDOWN		equ 4
FUP		equ 8
RIGHT150	equ 12
LEFT150		equ 16
WAIT1		equ 20
RIGHT75		equ 24
LEFT75		equ 28
RIGHT40		equ 32
LEFT40		equ 36
SEEK		equ 40
UP2		equ 44
EXPL		equ 48
END		equ -1

	rsset	Bob_Special_1
Fmode	rs.w	1
Fptr	rs.l	1
Fuser0	rs.w	1
Fuser1	rs.w	1
Ffinit	rs.b	1
Fylow	rs.b	1
Frumble	rs.w	1

Fist:
	bsr	handle_repos1

	lea	Frumble(a4),a0
	bsr	do_rumble

;	movem.w	O_XPOS(a5),d0-d1
;	addq.w	#8,d0
;	addq.w	#4,d1
;	moveq	#112,d2
;	jsr	check_stand.w
;	.if (not zero) {
;		st	pl_stand.w
;		clr.l	pl_forcex.w
;	}


	move.l	#fist_bob,Bob_Graphics(a4)
	tst.w	Bob_Hit(a4)
	beq.s	.no_hit
	subq.w	#1,Bob_Hit(a4)
	move.l	#flash_buffer,Bob_Graphics(a4)
;		PLAY_HIT #10
.no_hit:

	move.w	Bob_Power(a4),d0
	sub.w	#20,d0
	move.w	#20,Bob_Power(a4)
	tst.b	T_wheel				;Sub only half power if player
	beq.s	.no_wheel
	asr.w	#1,d0
.no_wheel:
	add.w	d0,big_power
	bpl.s	.no_dieing
	cmpi.w	#EXPL,Fmode(a4)
	beq.s	.no_dieing

	move.w	#EXPL,Fmode(a4)
	move.w	#7*60,Fuser0(a4)
	clr.w	Fuser1(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
.no_dieing:
	move.w	Fmode(a4),d0
	jmp	.modes(pc,d0.w)
.modes:	bra.w	.move_in
	bra.w	.move_down
	bra.w	.move_up
	bra.w	.move_right150
	bra.w	.move_left150
	bra.w	.wait1sec
	bra.w	.move_right75
	bra.w	.move_left75
	bra.w	.move_right40
	bra.w	.move_left40
	bra.w	.move_seek
	bra.w	.move_up2
.do_expl:
	subq.w	#1,Fuser0(a4)
	bpl.s	.no_free
;		sf	boss_flag.w
;		sf	no_scroll.w
		move.w	#7,Cue_Point
		move.l	#$1347,d0
		jsr	add_score

	clr.l	Scr_X_Fix(a6)

	move.l	#Player_Dead,Dead_Vector
	lea	Level2_coltab(pc),a0
	bsr	SetColors2

	bsr	StartFlash

	clr.w	Scr_Y_Force(a6)

	SONGPLAY #1

	bra	Out_Bob_Damage
.no_free:
	subq.w	#1,Fuser1(a4)
	bpl.s	.no_expl
	addq.w	#4,Fuser1(a4)
	movem.w	Bob_X_Position(a4),d1-d2
	bsr	rnd
	andi.w	#127,d0
	add.w	d0,d1
	bsr	rnd
	andi.w	#63,d0
	add.w	d0,d2
	moveq	#1,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	(sp)+,a4
;		PLAY_EXPL
.no_expl:
	rts

.move_seek:					;Seek towards player
	tst.b	Ffinit(a4)
	beq.s	.no_init1
		sf	Ffinit(a4)		;Init parameters
		move.w	Bob_X_Position(a4),d0
		addi.w	#64-16,d0
		sub.w	Scr_X_Level_Pos(a6),d0

		cmp.w	T_posX,d0
		ble.s	.to_right
		moveq	#-3,d0
		bra.s	.set
.to_right:
		moveq	#3,d0
.set:
		move.w	d0,Fuser0(a4)
.no_init1:
	move.w	Fuser0(a4),d0
	add.w	d0,Bob_X_Position(a4)

	move.w	Bob_X_Position(a4),d0		;First phase: Fly towards player
	sub.w	Scr_X_Level_Pos(a6),d0
	addi.w	#64-16,d0
	tst.w	Fuser0(a4)
	bpl.s	.to_right2
	cmp.w	T_posX,d0
	blt	.next_step
	rts
.to_right2:
	cmp.w	T_posX,d0
	bgt	.next_step
	rts

.move_in:
	cmpi.w	#50+$130,Bob_X_Position(a4)
	bls	.next_step
	subq.w	#2,Bob_X_Position(a4)
	tst.b	T_stand
	beq.s	.out
	subq.w	#2,T_forceX
.out:
	rts
.move_down:
	tst.b	Ffinit(a4)
	beq.s	.no_init2
		sf	Ffinit(a4)
		clr.w	Fuser0(a4)
.no_init2:
	moveq	#0,d0
	move.b	Fuser0+1(a4),d0
	add.b	d0,Fylow(a4)
	move.b	Fuser0(a4),d0
	move.w	Bob_Y_Position(a4),d1
;	move.w	sr,d2
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)
;	tst.b	pl_stand.w
;	.if (not zero) {
;		move.w	d2,sr
;		move.w	pl_forcey.w,d1
;		addx.w	d0,d1
;		move.w	d1,pl_forcey.w
;	}
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#120,d0
	addi.w	#80,d1
	bsr	check_obj_kollision
	beq.s	.no_ground
.ground:
	move.w	Bob_Y_Position(a4),d1
	add.w	#120,d1
	and.w	#$fff8,d1
	sub.w	#120,d1
	move.w	d1,Bob_Y_Position(a4)

		move.w	#13<<1,Frumble(a4)
		move.w	#-3,Scr_Y_Force(a6)
;		PLAY_FX	#49
		bra	.next_step
.no_ground:

	cmpi.w	#8<<8,Fuser0(a4)
	bhs	.out
		addi.w	#80,Fuser0(a4)		;48
	rts
.move_up2:
	move.w	Bob_Y_Position(a4),d0
	sub.w	Scr_Y_Level_Pos(a6),d0
	cmp.w	#90,d0
	bls	.next_step
	bra.s	.do_up
.move_up:
	move.w	Bob_Y_Position(a4),d0
	sub.w	Scr_Y_Level_Pos(a6),d0
	cmpi.w	#40,d0
	bls	.next_step
.do_up:
	subq.w	#4,Bob_Y_Position(a4)
	tst.b	T_stand
;	.if (not zero) {
;		subq.w	#4,pl_forcey.w
;	}
	rts
.move_right40:
	tst.b	Ffinit(a4)
	beq.s	.do_right
	sf	Ffinit(a4)
	move.w	#13,Fuser0(a4)
	bra.s	.do_right
.move_right75:
	tst.b	Ffinit(a4)
	beq.s	.do_right
	sf	Ffinit(a4)
	move.w	#25,Fuser0(a4)
	bra.s	.do_right
.move_right150:
	tst.b	Ffinit(a4)
	beq.s	.do_right
	sf	Ffinit(a4)
	move.w	#50,Fuser0(a4)
.do_right:
	subq.w	#1,Fuser0(a4)
	bmi	.next_step
	cmpi.w	#320-120+$130,Bob_X_Position(a4)
	bgt	.next_step
	addq.w	#3,Bob_X_Position(a4)
;	tst.b	pl_stand.w
;	.if (not zero) {
;		addq.w	#3,pl_forcex.w
;	}
	rts
.move_left40:
	tst.b	Ffinit(a4)
	beq.s	.do_left
		sf	Ffinit(a4)
		move.w	#13,Fuser0(a4)
	bra.s	.do_left
.move_left75:
	tst.b	Ffinit(a4)
	beq.s	.do_left
		sf	Ffinit(a4)
		move.w	#25,Fuser0(a4)
	bra.s	.do_left
.move_left150:
	tst.b	Ffinit(a4)
	beq.s	.do_left
	sf	Ffinit(a4)
	move.w	#50,Fuser0(a4)
.do_left:
	subq.w	#1,Fuser0(a4)
	bmi	.next_step
	cmpi.w	#-16+$130,Bob_X_Position(a4)
	blt	.next_step
	subq.w	#3,Bob_X_Position(a5)
	tst.b	T_stand
;	.if (not zero) {
;		subq.w	#3,pl_forcex.w
;	}
	rts
.wait1sec:
	tst.b	Ffinit(a4)
	beq.s	.wait
	sf	Ffinit(a4)
	move.w	#45,Fuser0(a4)
.wait:
	subq.w	#1,Fuser0(a4)
	bmi	.next_step
	rts
.next_step:
	move.l	Fptr(a4),a0
	move.w	(a0)+,d0
	bpl.s	.ok
	lea	mode_tab(pc),a0
	move.w	(a0)+,d0
.ok:
	move.l	a0,Fptr(a4)
	move.w	d0,Fmode(a4)
	st	Ffinit(a4)
	rts

do_rumble:				;Rumble-Variable-Pointer in a0
	move.w	(a0),d0
	bmi.s	.end
		lea	.rumble_tab(pc),a1
		move.w	0(a1,d0.w),Scr_Y_Force(a6)
		subq.w	#2,(a0)
		rts
.end:
		clr.w	Scr_Y_Force(a6)
.out:
	rts

.rumble_tab:
	dc.w	0,0,1,0,-1,-2,-1,0,1,2,1,0,-1,-2

mode_tab:
	dc.w	FDOWN,UP2,FDOWN,FUP,SEEK,WAIT1,FDOWN,FUP
	dc.w	RIGHT150,SEEK,WAIT1,FDOWN,UP2,FDOWN,FUP
	dc.w	LEFT75,RIGHT40,FDOWN,FUP,SEEK,WAIT1,FDOWN,FUP
	dc.w	LEFT150,SEEK,RIGHT40,LEFT40,WAIT1,FDOWN,UP2
	dc.w	FDOWN,FUP,RIGHT150
	dc.w	END

Fist_AnimTable:
		dc.l	fist_bob,0
		dc.w	0,0,80,2,2,110,75

big_power:	dc.w	0

Repos_Player_Dead:
	jsr	Die_Player
	move.w	reposX,T_posX
	move.w	reposY,T_posY
	move.w	repos_face,T_face
	move.b	#50,T_flash
	jmp	GameLoop

Set_me_to_first:
	cmp.l	Act_Bob_Structure,a4
	beq.s	.out
	sub.l	a2,a2
	move.w	Bob_to_Info_Offs(a4),a2
	add.l	a4,a2
	move.l	Act_Bob_Structure,a0
	move.l	a4,a1
	move.w	#BOB_ENTRY_LENGTH-1,d7
.copyit:
	move.b	(a1),d0
	move.b	(a0),(a1)+
	move.b	d0,(a0)+
	dbf	d7,.copyit
	move.l	Act_Bob_Structure,a0
	sub.l	a0,a2
	move.w	a2,Bob_to_Info_Offs(a0)
	move.w	Bob_to_Info_Offs(a4),a1
	add.l	a0,a1
	sub.l	a4,a1
	move.w	a1,Bob_to_Info_Offs(a4)
.out:
	rts

	;Aus 3Plane Bob eine 3Planige Maske errechnen, zum Aufblinken!
Generate_Mask:
	move.l	#-1,bltafwm(a5)
	move.l	d0,bltapth(a5)
	move.l	d1,bltdpth(a5)
	moveq	#0,d3
	move.w	d2,d3
	and.w	#63,d3
	add.w	d3,d3
	add.l	d3,d0
	move.l	d0,bltbpth(a5)
	add.l	d3,d0
	move.l	d0,bltcpth(a5)
	move.w	d3,d4
	add.w	d4,d4
	move.w	d4,bltdmod(a5)
	move.w	d4,bltamod(a5)
	move.w	d4,bltbmod(a5)
	move.w	d4,bltcmod(a5)
	move.w	#$0ffe,bltcon0(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	d2,bltsize(a5)
	waitblt
	move.l	d1,bltapth(a5)
	add.l	d3,d1
	move.l	d1,bltdpth(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	d2,bltsize(a5)
	waitblt
	move.l	d1,bltapth(a5)
	add.l	d3,d1
	move.l	d1,bltdpth(a5)
	move.w	d2,bltsize(a5)
	waitblt

	rts

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Birne
*---------------------------------------------------------------------------
	rsset	Bob_Special_1
Broot	rs.l	1
Banz	rs.w	1
Bangle	rs.w	1
Bspeed	rs.w	1
Badder	rs.w	1

MAX	equ 2<<8
ADD	equ 1<<4

Start_Birne:
	move.w	#(180>>4)-1,Banz(a4)
	subi.w	#180,Bob_Y_Position(a4)		;Set new position

	clr.w	Bangle(a4)		;Init swing-variables
	move.w	#-MAX,d0
	btst	#0,Bob_Special_4+1(a4)			;Start swing-direction
	beq.s	.to_left
	neg.w	d0
.to_left:
	move.w	d0,Bspeed(a4)
	move.w	#ADD,Badder(a4)

	move.l	a4,-(sp)

	move.w	Banz(a4),d7
.init:
	movem.l	a4/d7,-(sp)
	moveq	#14,d0
	tst.w	d7
	bne.s	.ok
	moveq	#13,d0
.ok:
	moveq	#0,d1
	moveq	#0,d2
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.l	a4,a0
	movem.l	(sp)+,a4/d7
		move.l	#handle_chain,Bob_Routine(a0)
		move.b	#BOB_NOCOL,Bob_Used(a0)

		sf	Bangle(a0)
		sf	Banz(a0)
		moveq	#0,d0
		btst	#0,d7
		beq.s	.set
		moveq	#-1,d0
.set:
		move.b	d0,Bob_Special_7(a0)
		move.l	a0,Broot(a4)
		move.l	a0,a4
	dbf	d7,.init

	move.l	#handle_chain2,Bob_Routine(a0)

	move.b	#BOB_TRUE,Bob_Used(a0)

	move.l	(sp)+,a4

	move.l	#Birne,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)

Birne:
	move.w	Bspeed(a4),d1

	move.w	Badder(a4),d0			;Do swinging
	add.w	d0,Bspeed(a4)

;	tst.w	d1				;Play sound, if direction changes
;	.if (minus) {
;		tst.w	Bspeed(a4)
;		bmi.s	.no_fx
;		PLAY_FX	#57
;	} .else {
;		tst.w	Bspeed(a4)
;		bpl.s	.no_fx
;		PLAY_FX	#57
;	}
.no_fx:

	cmpi.w	#MAX,Bspeed(a4)			;Handle swinging
	ble.s	.no1
	move.w	#-ADD,Badder(a4)
.no1:
	cmpi.w	#-MAX,Bspeed(a4)
	bge.s	.no2
	move.w	#ADD,Badder(a4)
.no2:
	move.w	Bangle(a4),d1
	move.w	Bspeed(a4),d0
	add.w	d0,Bangle(a4)

	moveq	#0,d4				;Handle bending etc.
	movem.w	Bob_X_Position(a4),d5-d6
	move.w	Banz(a4),d7
	move.l	Broot(a4),a5

.set_positions:
		move.b	Bangle(a5),d0
		subi.b	#64,d0
		bsr	sin
		muls	d4,d0
		asr.l	#8,d0
		move.w	d6,d1
		sub.w	d0,d1
		move.w	d1,Bob_Y_Position(a5)
		move.b	Bangle(a5),d0
		subi.b	#64,d0
		bsr	cos
		muls	d4,d0
		asr.l	#8,d0
		add.w	d5,d0
		move.w	d0,Bob_X_Position(a5)
			add.w	#16,d4
		cmpi.w	#1,d7
		bne.s	.lno1
			addi.w	#12,d4
.lno1:
		tst.w	d7
		beq.s	.lno2
			move.l	Broot(a5),a0
			move.b	Bangle(a0),Bangle(a5)
			move.l	a0,a5
.lno2:

	dbf	d7,.set_positions

	move.b	Bangle(a4),Bangle(a5)
	lea	custom,a5
	movem.w	Bob_X_Position(a4),d0-d1		;Out of screen ?
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1
	addi.w	#100,d0
	addi.w	#256,d1
	cmpi.w	#320+200,d0
	bhs.s	.free_obj1
	cmpi.w	#224+232,d1
	bhs.s	.free_obj1
	rts
.free_obj1:
	move.l	a4,a0				;Set free-flag in all slaves
	move.w	Banz(a4),d0
.free_loop:
	move.l	Broot(a0),a0
	st	Banz(a0)
	dbf	d0,.free_loop
	bra	Out_Bob

handle_chain:
	tst.b	Banz(a4)			;Just wait to be freed and Flicker!
	beq.s	.out
	bra	Out_Bob_Damage
.out:
	not.b	Bob_Special_7(a4)
	beq.s	.clear
	sf	Bob_BlitStatus(a4)
	rts
.clear:
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	rts

handle_chain2:
	tst.b	Banz(a4)			;Just wait to be freed and Flicker!
	beq.s	.out
	bra	Out_Bob_Damage
.out:
	rts

Birne_AnimTable:
		dc.l	level_GFX+bob01,level_GFX+msk01
		dc.w	-12,-12,31,2,2,28,28
Birne_AnimTable2:
		dc.l	level_GFX+bob06,level_GFX+msk06
		dc.w	4,4,8,2,2,12,11

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Ball
*---------------------------------------------------------------------------
	rsset	Bob_Special_1
Ldir	rs.w	1
Lspeed	rs.l	1
Lylow	rs.w	1

Start_Ball:
	cmp.w	#5,Ball_Anz
	bge	Out_Bob
	addq.w	#1,Ball_Anz
	moveq	#-1,d0
	btst	#0,Bob_Special_4+1(a4)
	beq.s	.ok
	neg.w	d0
.ok:
	move.w	d0,Ldir(a4)
	clr.l	Lspeed(a4)
	clr.w	Lylow(a4)
	moveq	#2,d0
	tst.b	T_weapon
	beq.s	.set
	moveq	#4,d0
.set:
	move.w	d0,Bob_Power(a4)
	move.l	#Ball,Bob_Routine(a4)

Ball:
	bsr	Standart_Hit_Handler
	beq	.destruct

	cmpi.w	#8,Lspeed(a4)
	bge.s	.no_speedup
		addi.l	#$00004000,Lspeed(a4)
.no_speedup:
	movem.w	Bob_X_Position(a4),d0-d1
	addq.w	#8,d1
	tst.w	Ldir(a4)
	bpl.s	.right
	subq.w	#8,d0
	bra.s	.left
.right:
	addi.w	#16,d0
.left:
	bsr	check_obj_kollision
	beq.s	.no_xhit
;		PLAY_FX	#51
	neg.w	Ldir(a4)
.no_xhit:
	movem.w	Bob_X_Position(a4),d0-d1
	addq.w	#8,d0
	tst.w	Lspeed(a4)
	bmi.s	.up
	addi.w	#16,d1
	bra.s	.down
.up:
	subq.w	#8,d1
.down:
	bsr	check_obj_kollision
	beq.s	.no_yhit
	neg.l	Lspeed(a4)
.no_yhit:

	move.w	Ldir(a4),d0
	add.w	d0,Bob_X_Position(a4)
	move.w	Lspeed+2(a4),d0
	add.w	d0,Lylow(a4)
	move.w	Lspeed(a4),d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)

	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.ok
	subq.w	#1,Ball_Anz
.ok:
	rts

.destruct:
	subq.w	#1,Ball_Anz
	moveq	#$60,d0
	bra	Standart_Destruction

Ball_Anz:	dc.w	0

Ball_AnimTable:
		dc.l	level_GFX+bob00,level_GFX+msk00
		dc.w	0,0,16,2,2,12,11

Zoom_Controler:
	tst.w	Zoom_finished
	bne.s	.out
	st	Zoom_finished
	move.l	Zoom_info_pointer,a1
	move.l	(a1),a1
	addq.l	#4,Zoom_info_pointer
	jmp	(a1)
.out:
	rts

Kill_Controler:
	move.l	#Return,-4(a0)
	rts

Zoom_info_pointer:	dc.l	0

Zoom_Handler:
	move.l	Zoom_Routine(pc),a1
	jmp	(a1)

Zoom_Kill:
	move.l	#Return,-4(a0)
	clr.w	Zoom_finished
	rts

Zoom_Rot_1:
	move.l	#Zoom_Rot_2,Zoom_Routine
	move.l	Zoom_pointer,a0
	move.l	(a0),d0
	lea	Work_Buffer1-6,a0
	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	jsr	Do_Zoom
	rts

Zoom_Rot_2:
	move.l	#Zoom_Rot_3,Zoom_Routine
	move.l	Dest_Obj,a0
	lea	4*32*4(a0),a3

	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	moveq	#16,d7
	jsr	Convert_to_Bitplane2

	rts

Zoom_Rot_3:
	move.l	#Zoom_Rot_1,Zoom_Routine
	move.l	Dest_Obj,a0
	lea	4*32*4+4*16(a0),a3
	lea	4*16*4(a0),a0

	lea	Work_Buffer2+16*32,a1
	lea	Rot_Info1,a2
	moveq	#16,d7
	jsr	Convert_to_Bitplane2

	add.l	#640,Dest_Obj
	addq.l	#4,Zoom_pointer
	move.l	Zoom_pointer,a0
	tst.l	(a0)
	bpl.s	.out
	move.l	#Zoom_Kill,Zoom_Routine
.out:
	rts

Zoom_Routine:	dc.l	Zoom_Rot_1
Zoom_pointer:	dc.l	0
Zoom_finished:	dc.w	0

spider_zoom_pos:
	dc.l	$80000,$70000,$60000,$50000,$48000,$40000,$38000,$30000,$28000
	dc.l	$20000,$1c000,$18000,$15000,$13000,$12000,$10000,-1


*---------------------------------------------------------------------------
*	Routine and AnimTable of     Diamond
*---------------------------------------------------------------------------
Diamond_Start:
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	#Diamond,Bob_Routine(a4)
	move.w	Bob_X_Position(a4),d0
	and.w	#15,d0
	bne	Diamond
	lea	Diamond_Info_2(pc),a0
	sub.l	a4,a0
	move.w	a0,Bob_to_Info_Offs(a4)
Diamond:
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1

	move.w	T_posX,d2
	move.w	T_posY,d3
	add.w	#10,d2
	addq.w	#4,d3

	move.w	d2,d4
	move.w	d3,d5

	add.w	#18,d4
	add.w	#24,d5

	cmp.w	d4,d0
	bgt	.no_collect

	move.l	Bob_Act_Anim(a4),a0

	add.w	18(a0),d0
	cmp.w	d2,d0
	blt.s	.no_collect

	cmp.w	d5,d1
	bgt.s	.no_collect
	add.w	20(a0),d1
	cmp.w	d3,d1
	blt.s	.no_collect

	addq.w	#1,Diamond_Count

	bra	Out_Bob_Damage

.no_collect:
	tst.b	Bob_Special_1(a4)
	beq.s	.flashing
	subq.w	#1,Bob_Special_2(a4)
	bpl	Test_Bob_Out
	sf	Bob_Special_1(a4)

.flashing:
	subq.b	#1,Bob_Special_3(a4)
	bpl	Test_Bob_Out
	move.b	#2,Bob_Special_3(a4)
	addq.b	#1,Bob_Special_1+1(a4)
	bsr	Get_Next_Bob_Frame
	cmp.b	#4,Bob_Special_1+1(a4)
	bne	Test_Bob_Out
	move.w	#$0100,Bob_Special_1(a4)
	jsr	rnd
	and.w	#511,d0
	move.w	d0,Bob_Special_2(a4)	;Nchster Wait-Wert!
	bra	Test_Bob_Out

Diamond_AnimTable:
		dc.l	main2_GFX+Nbob29,main2_GFX+Nmsk29
		dc.w	0,0,16,2,2,12,11
		dc.l	main2_GFX+Nbob2a,main2_GFX+Nmsk2a
		dc.w	0,0,16,2,2,12,11
		dc.l	main2_GFX+Nbob2b,main2_GFX+Nmsk2b
		dc.w	0,0,16,2,2,12,11
		dc.l	main2_GFX+Nbob2a,main2_GFX+Nmsk2a
		dc.w	0,0,16,2,2,12,11
		dc.w	ENTRY_END
		dc.l	Diamond_AnimTable

*---------------------------------------------------------------------------
*	Routine and AnimTable of     MineExplo
*---------------------------------------------------------------------------
MineExplo:
	movem.w	Bob_X_Position(a4),d0-d1
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1
	move.w	d0,d2
	move.w	d1,d3
	add.w	#16,d2
	add.w	#32,d3
	bsr	check_rec
	beq.s	.no_hit
	cmp.w	#-1,Bob_Power(a0)
	beq.s	.powerok
	subq.w	#6,Bob_Power(a0)
	bpl.s	.powerok
	clr.w	Bob_Power(a0)
.powerok:
	move.w	#4,Bob_Hit(a0)
.no_hit:
	bra	Standart_BobAnim

MineExplo_AnimTable:
		dc.l	main2_GFX+Nbob26,main2_GFX+Nmsk26
		dc.w	0,16,16,2,2,12,11
		dc.l	main2_GFX+Nbob27,main2_GFX+Nmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main2_GFX+Nbob28,main2_GFX+Nmsk28
		dc.w	0,0,32,2,2,12,11
		dc.l	main2_GFX+Nbob27,main2_GFX+Nmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main2_GFX+Nbob28,main2_GFX+Nmsk28
		dc.w	0,0,32,2,2,12,11
		dc.l	main2_GFX+Nbob27,main2_GFX+Nmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main2_GFX+Nbob28,main2_GFX+Nmsk28
		dc.w	0,0,32,2,2,12,11
		dc.w	END_OUT_DAMAGE


handle_repos1:
	tst.b	T_state
	bne.s	.out
	tst.b	T_hit
	bne.s	.out
	move.w	T_posX,reposX
	move.w	T_posY,reposY
	move.b	T_face,repos_face
.out:
	rts

reposX:	dc.w	0
reposY:	dc.w	0
repos_face:	dc.w	0

Wait_Handler:
	subq.w	#1,Wait_Verz
	bpl.s	.out
	move.l	#Rotate_1,Rotate_Routine
.out:
	rts

Wait_Verz:	dc.w	0

Rotate_Handler:
	move.l	Rotate_Routine(pc),a1
	jmp	(a1)

Rotate_Kill:
	move.l	#Return,-4(a0)
	clr.w	Zoom_finished
	rts

Rotate_1:
	move.l	#Rotate_2,Rotate_Routine
	move.l	Rotate_Buffer_Pointer,a0
	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	move.w	Rotate_Angle,d0
	jmp	Do_Rotate

Rotate_2:
	move.l	#Rotate_3,Rotate_Routine
	move.l	Rotate_Buffer_Pointer,a0
	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	jmp	Do_Copy

Rotate_3:
	move.l	#Rotate_4,Rotate_Routine
	move.l	Dest_Obj,a0
	lea	3*32*4(a0),a3		;Zeiger auf Maske

	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	moveq	#16,d7
	jmp	Convert_to_Bitplane3

Rotate_4:
	move.l	#Rotate_1,Rotate_Routine
	move.l	Dest_Obj,a0
	lea	3*32*4+16*4(a0),a3		;Zeiger auf Maske
	lea	3*16*4(a0),a0

	lea	Work_Buffer2+16*32,a1
	lea	Rot_Info1,a2
	moveq	#16,d7
	jsr	Convert_to_Bitplane3

	add.l	#512,Dest_Obj
	move.w	Rotate_Angle_Add,d0
	add.b	d0,Rotate_Angle+1
	bne.s	.out
	move.l	#Rotate_Kill,Rotate_Routine
.out:
	rts

Rotate_Angle:		dc.w	0
Rotate_Angle_Add:	dc.w	0
Rotate_Routine:		dc.l	Wait_Handler
Rotate_Buffer_Pointer:	dc.l	0


*---------------------------------------------------------------------------
*	Routine and AnimTable of      CuePoint
*---------------------------------------------------------------------------

CuePointStart:
	move.l	#CuePoint,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)

CuePoint:
	movem.w	Bob_X_Position(a4),d0-d1
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1
	move.w	d0,d2
	move.w	d1,d3
	add.w	#100,d2
	moveq	#0,d4
	move.b	Bob_Special_4+1(a4),d4
	lsl.b	#4,d4
	sub.w	d4,d1			;Die Obere Grenze berechnen.

	move.w	T_posX(pc),d4
	add.w	#10,d4
	cmp.w	d2,d4
	bgt.s	.no_kolli
	add.w	#18,d4
	cmp.w	d0,d4
	blt.s	.no_kolli
	move.w	T_posY(pc),d4
	addq.w	#4,d4
	cmp.w	d3,d4
	bgt.s	.no_kolli
	add.w	#24,d4
	cmp.w	d1,d4
	blt.s	.no_kolli
	move.b	Bob_Special_4(a4),Cue_Point+1
.no_kolli:
	bra	Test_Bob_Out2

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Rocket
*---------------------------------------------------------------------------
Rocket:
	movem.w	Bob_X_Position(a4),d0-d1
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1
	move.w	d0,d2
	move.w	d1,d3
	add.w	#16,d2
	add.w	#16,d3
	bsr	check_rec
	beq.s	.no_hit
	cmp.w	#-1,Bob_Power(a0)
	beq.s	.powerok
	move.w	SW_power,d0
	sub.w	d0,Bob_Power(a0)
	bpl.s	.powerok
	clr.w	Bob_Power(a0)
.powerok:
	move.w	#4,Bob_Hit(a0)

.end_rocket:					;make explosion (free rocket)
	subq.b	#1,T_rocket_anz
	sub.w	#16,Bob_X_Position(a4)
	sub.w	#16,Bob_Y_Position(a4)
	bsr	Out_Bob_Damage
	bsr	Start_Explo
	move.w	#0,Bob_Anim_Delay_Init(a4)
	rts
.no_hit:

	movem.w	Bob_Special_1(a4),d0-d1		;Get direction
	add.w	d0,Bob_Special_4(a4)		;Add to position
	add.w	d1,Bob_Special_5(a4)

	movem.w	Bob_Special_4(a4),d0-d1		;Convert position to normal format
	asr.w	#3,d0
	asr.w	#3,d1
	add.w	Scr_X_Level_Pos(a6),d0
	add.w	Scr_Y_Level_Pos(a6),d1
	movem.w	d0-d1,Bob_X_Position(a4)	;Store into object's position

	moveq	#0,d0
	move.b	Bob_Special_3(a4),d0			;Get angle
	addq.w	#8,d0				;Round result to 16-border
	lsr.w	#4,d0
	subq.w	#8,d0
	andi.w	#15,d0				;Mask lower 4 bits
	move.w	d0,Bob_Anim_Delay(a4)		;Take as phase
	add.w	d0,d0
	move.w	d0,d6
	add.w	d0,d0
	add.w	d0,d6
	asl.w	#2,d0
	add.w	d0,d6
	lea	Rocket_AnimTable(pc),a0
	lea	(a0,d6.w),a0
	move.l	a0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame

	cmp.w	#8,Bob_Anim_Delay(a4)
	ble.s	.set_noflip
	lea	Rocket_Info_2(pc),a0
	sub.l	a4,a0
	or.w	#FLIP,Bob_Race(a4)
	bra.s	.setit
.set_noflip:
	lea	Rocket_Info_1(pc),a0
	sub.l	a4,a0
	and.w	#$ffff-FLIP,Bob_Race(a4)
.setit:
	move.w	a0,Bob_to_Info_Offs(a4)

	subq.b	#1,Bob_Special_3+1(a4)		;Time out ?
	bpl.s	.no_timeout
	move.b	#55,Bob_Special_3+1(a4)
	jsr	rnd
	move.w	d0,d6
	jsr	rnd
	andi.w	#$03ff,d0
	andi.w	#$00ff,d6
	subi.w	#96,d0
	subi.w	#16,d6
	movem.w	d0/d6,Bob_Special_6(a4)		;Set next random-position
.no_timeout:
	movem.w	Bob_Special_6(a4),d6-d7

	moveq	#-1,d4				;Set first dummy delta...
	move.l	Act_Bob_Structure,a0
.loop:
	movem.w	Bob_X_Position(a4),d2-d3
	tst.b	Bob_Used(a0)
	bmi.s	.next
;		move.b	O_COLEN(a0),d0		;Collision on player ?
;		and.b	O_PHITEN(a0),d0
	cmp.w	#-1,Bob_Power(a0)
	beq.s	.next
	move.w	Bob_X_Position(a0),d0		;Calc |DX|+|DY| as target 'distance'
	sub.w	d2,d0
	bpl.s	.noneg
	neg.w	d0
.noneg:
	move.w	Bob_Y_Position(a0),d1
	sub.w	d3,d1
	bpl.s	.noneg2
	neg.w	d1
.noneg2:
	add.w	d1,d0
	cmp.w	d4,d0				;Lower than last choice ?
	bhs.s	.next
	move.w	Bob_X_Position(a0),d6		;Yes, remember position
	move.w	Bob_Y_Position(a0),d7
	move.w	d0,d4				;Remember 'distance'
.next:
	lea	BOB_ENTRY_LENGTH(a0),a0
	cmp.l	#Bob_Structure_End,a0
	bne	.loop

.no_object:
;	moveq	#0,d6
;	moveq	#0,d7
	bsr	calc_ene_angle			;Calc new angle

	moveq	#0,d0				;Get angle
	move.b	Bob_Special_3(a4),d0
	cmp.b	d0,d1				;Turning neccessary ?
	beq	.no_change

	move.b	d0,d2				;Which side is the shorter
	sub.b	d1,d2				;way ?
	sub.b	d0,d1
	cmp.b	d1,d2
	bls.s	.lower
	cmpi.b	#RSPEED,d1			;Difference big enough ?
	bls.s	.lab1
	addi.b	#RSPEED,Bob_Special_3(a4)	;Yes...
	bra.s	.ok
.lab1:
	add.b	d1,Bob_Special_3(a4)		;No, only add right diff.
	bra.s	.ok
.lower:
	cmpi.b	#RSPEED,d2			;Difference big enough ?
	bls.s	.lab2
	subi.b	#RSPEED,Bob_Special_3(a4)	;Yes...
	bra.s	.ok
.lab2:
	sub.b	d2,Bob_Special_3(a4)		;No...
.ok:

	move.b	Bob_Special_3(a4),d0		;Calc x,y - deltas
	jsr	sin
	move.w	d0,d2
	move.b	Bob_Special_3(a4),d0
	jsr	cos
	neg.w	d0
	asr.w	#4,d0
	asr.w	#4,d2
	movem.w	d0/d2,Bob_Special_1(a4)		;Store deltas

.no_change:
	movem.w	Bob_Special_1(a4),d0-d1		;Get deltas
	add.w	d0,Bob_Special_4(a4)		;Add to position
	add.w	d1,Bob_Special_5(a4)

;	tst.b	Scr_BigCPU(a6)
;	bne.s	.blitok
;	sf	Bob_BlitStatus(a4)
;	not.b	Bob_Status(a4)
;	beq.s	.blitok
;	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
;.blitok:
	movem.w	Bob_X_Position(a4),d0-d1	;Check wall-collision
	jsr	check_obj_kollision
	bne	.end_rocket			;Rocket hit ground
	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.out
	subq.b	#1,T_rocket_anz
.out:
	rts

Rocket_AnimTable:
		dc.l	main_Buffer+Nbob18-Nbob18,main_Buffer+Nmsk18-Nbob18
		dc.w	0,0,13,2,2,12,11
		dc.l	main_Buffer+Nbob19-Nbob18,main_Buffer+Nmsk19-Nbob18
		dc.w	0,0,14,2,2,12,11
		dc.l	main_Buffer+Nbob1a-Nbob18,main_Buffer+Nmsk1a-Nbob18
		dc.w	0,0,13,2,2,12,11
		dc.l	main_Buffer+Nbob1b-Nbob18,main_Buffer+Nmsk1b-Nbob18
		dc.w	0,0,15,2,2,12,11

		dc.l	main2_GFX+Nbob1c,main2_GFX+Nmsk1c
		dc.w	0,0,15,2,2,12,11
		dc.l	main2_GFX+Nbob1b,main2_GFX+Nmsk1b
		dc.w	0,0,15,2,2,12,11
		dc.l	main2_GFX+Nbob1a,main2_GFX+Nmsk1a
		dc.w	0,0,13,2,2,12,11
		dc.l	main2_GFX+Nbob19,main2_GFX+Nmsk19
		dc.w	0,0,14,2,2,12,11

		dc.l	main2_GFX+Nbob18,main2_GFX+Nmsk18
		dc.w	0,0,13,2,2,12,11

		dc.l	main2_GFX+Nbob18+12*3*2,main2_GFX+Nmsk18+12*2
		dc.w	0,0,13,2,2,12,11
		dc.l	main2_GFX+Nbob19+13*3*2,main2_GFX+Nmsk19+13*2
		dc.w	0,0,14,2,2,12,11
		dc.l	main2_GFX+Nbob1a+12*3*2,main2_GFX+Nmsk1a+12*2
		dc.w	0,0,13,2,2,12,11
		dc.l	main2_GFX+Nbob1b+14*3*2,main2_GFX+Nmsk1b+14*2
		dc.w	0,0,15,2,2,12,11
		dc.l	main2_GFX+Nbob1c+14*3*2,main2_GFX+Nmsk1c+14*2
		dc.w	0,0,15,2,2,12,11
		dc.l	main_Buffer+Nbob1b-Nbob18+14*3*2,main_Buffer+Nmsk1b-Nbob18+14*2
		dc.w	0,0,15,2,2,12,11
		dc.l	main_Buffer+Nbob1a-Nbob18+12*3*2,main_Buffer+Nmsk1a-Nbob18+12*2
		dc.w	0,0,13,2,2,12,11

calc_ene_angle:
	move.l	a6,-(sp)
	movem.w	Bob_X_Position(a4),d4-d5	;Rocket coordinates
	moveq	#0,d1				;Calc |DY|
	move.w	d7,d1
	sub.w	d5,d1
	bpl.s	.cok
	neg.w	d1
.cok:
	sub.l	a6,a6
	move.l	d1,a6				;Remember |DY| in a6
	move.w	d6,d0				;Calc DX
	sub.w	d4,d0
	muls	d0,d0				;DX*DX
	mulu	d1,d1				;|DY|*|DY|
	add.l	d1,d0				;DX^2+DY^2

	jsr	sqrt				;Pythagoras...

	move.l	a6,d1				;Get and adjust |DY|
	asl.l	#7,d1
	tst.w	d0
	bne.s	.div
	moveq	#1,d0
.div:
	divu	d0,d1				;SIN(X)   (|DY|/R)
	moveq	#0,d0				;Calculate ASIN
	lea	asin_tab,a0
	move.b	(a0,d1.w),d0			;Angle	(ASIN(SIN(X)))
	cmp.w	d6,d4				;Adjust angle to full 256 "degrees"
	ble.s	.not_bigger
	cmp.w	d7,d5
	ble.s	.no1
	move.w	#256,d1
	sub.w	d0,d1
	bra.s	.set_angle
.no1:
	move.w	d0,d1
	bra	.set_angle
.not_bigger:
	cmp.w	d7,d5
	ble.s	.no2
	move.w	d0,d1
	addi.w	#128,d1
	bra.s	.set_angle
.no2:
	move.w	#128,d1
	sub.w	d0,d1
.set_angle:					;Save angle with float-part
	move.l	(sp)+,a6
	and.l	#255,d1				;Mask only lower 8 bits
	rts


*---------------------------------------------------------------------------
*	Routine and AnimTable of      Shoot
*---------------------------------------------------------------------------

Shoot_AnimTable:
		dc.l	main2_GFX+Nbob17,main2_GFX+Nmsk17
		dc.w	0,0,7,1,1,5,5

BONUS_POWER	= 1
BONUS_WEAPON1	= 2
BONUS_WEAPON2	= 3
BONUS_WEAPON3	= 4
BONUS_SHIELD	= 5
BONUS_ROCKET	= 6
BONUS_ONEUP	= 7

Bonus1_AnimTable:
		dc.l	main2_GFX+Nbob16,main2_GFX+Nmsk16
		dc.w	0,0,12,BONUS_POWER,2,12,8
Bonus2_AnimTable:
		dc.l	main2_GFX+Nbob1f,main2_GFX+Nmsk1f
		dc.w	0,0,16,BONUS_WEAPON3,2,12,19
Bonus3_AnimTable:
		dc.l	main2_GFX+Nbob1d,main2_GFX+Nmsk1d
		dc.w	0,0,16,BONUS_WEAPON2,2,12,19
Bonus4_AnimTable:
		dc.l	main2_GFX+Nbob1e,main2_GFX+Nmsk1e
		dc.w	0,0,16,BONUS_WEAPON1,2,12,19
Bonus5_AnimTable:
		dc.l	main2_GFX+Nbob18,main2_GFX+Nmsk18
		dc.w	0,0,13,BONUS_ROCKET,2,12,11
Bonus6_AnimTable:
		dc.l	main2_GFX+Nbob23,main2_GFX+Nmsk23
		dc.w	0,0,16,BONUS_SHIELD,2,12,12
Bonus7_AnimTable:
		dc.l	main2_GFX+Nbob24,main2_GFX+Nmsk24
		dc.w	0,0,16,BONUS_ONEUP,2,12,12

*---------------------------------------------------------------------------
*	AnimTable of      Extrabox
*---------------------------------------------------------------------------

Box_AnimTable:
		dc.l	main2_GFX+Nbob20,main2_GFX+Nmsk20
		dc.w	0,0,24,2,2,28,20
		dc.l	main2_GFX+Nbob22,main2_GFX+Nmsk22
		dc.w	0,10,14,2,2,28,20
		dc.w	ENTRY_END
		dc.l	Box_AnimTable

Deckel_AnimTable:
		dc.l	main2_GFX+Nbob21,main2_GFX+Nmsk21
		dc.w	0,0,19,2,2,28,20

*---------------------------------------------------------------------------
*	Routine and AnimTable of      BigExplo
*---------------------------------------------------------------------------
Explo_AnimTable:
		dc.l	main2_GFX+Nbob00,main2_GFX+Nmsk00
		dc.w	0,13,18,2,2,28,28
		dc.l	main2_GFX+Nbob01,main2_GFX+Nmsk01
		dc.w	0,5,27,2,2,28,28
		dc.l	main2_GFX+Nbob02,main2_GFX+Nmsk02
		dc.w	0,2,30,2,2,28,28
		dc.l	main2_GFX+Nbob03,main2_GFX+Nmsk03
		dc.w	0,0,32,2,2,28,28
		dc.l	main2_GFX+Nbob04,main2_GFX+Nmsk04
		dc.w	0,0,32,2,2,28,28
		dc.l	main2_GFX+Nbob05,main2_GFX+Nmsk05
		dc.w	0,0,32,2,2,28,28
		dc.l	main2_GFX+Nbob06,main2_GFX+Nmsk06
		dc.w	0,0,31,2,2,28,28
		dc.l	main2_GFX+Nbob07,main2_GFX+Nmsk07
		dc.w	0,0,27,2,2,28,28
		dc.l	main2_GFX+Nbob08,main2_GFX+Nmsk08
		dc.w	0,0,24,2,2,28,28
		dc.l	main2_GFX+Nbob09,main2_GFX+Nmsk09
		dc.w	0,0,16,2,2,28,28
		dc.w	END_OUT_DAMAGE

Explo2_AnimTable:
		dc.l	main2_GFX+Nbob0a,main2_GFX+Nmsk0a
		dc.w	0,0,14,0,0,0,0
		dc.l	main2_GFX+Nbob0b,main2_GFX+Nmsk0b
		dc.w	0,2,7,0,0,0,0
		dc.l	main2_GFX+Nbob0c,main2_GFX+Nmsk0c
		dc.w	0,1,12,0,0,0,0
		dc.l	main2_GFX+Nbob0d,main2_GFX+Nmsk0d
		dc.w	0,0,14,0,0,0,0
		dc.l	main2_GFX+Nbob0e,main2_GFX+Nmsk0e
		dc.w	0,0,14,0,0,0,0
		dc.l	main2_GFX+Nbob0f,main2_GFX+Nmsk0f
		dc.w	0,1,14,0,0,0,0
		dc.l	main2_GFX+Nbob10,main2_GFX+Nmsk10
		dc.w	0,2,13,0,0,0,0
		dc.l	main2_GFX+Nbob11,main2_GFX+Nmsk11
		dc.w	0,2,13,0,0,0,0
		dc.w	END_OUT_DAMAGE

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Walker_Sky
*---------------------------------------------------------------------------
Walker_Sky_Start:
	move.l	#Walker_Sky,Bob_Routine(a4)
	tst.w	Bob_Special_4(a4)
	bpl.s	.ok2
	move.l	#Walker_Sky_AnimTableL,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
.ok2:
	move.l	a4,-(sp)
	moveq	#23,d0
	moveq	#100,d1
	moveq	#100,d2
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Last_Entry
	move.l	a4,a0
	move.l	(sp)+,a4
	tst.w	d7
	bmi	Out_Bob
	move.b	#BOB_NOCOL,Bob_Used(a0)		;Kein Kollision-Check.
	move.l	a0,Bob_Special_5(a4)		;Gegenseitig Eintragen!
	tst.w	Bob_Special_4(a4)
	bpl.s	.ok
	move.l	#Fire_AnimTableL,Bob_Next_Anim(a0)
.ok:

Walker_Sky:
	bsr	Standart_Hit_Handler
	beq	.kill_me

	movem.w	Bob_X_Position(a4),d0-d1
	move.w	d0,d2
	add.w	#32,d2
	addq.w	#1,d1
	jsr	check_foot_frame
	beq.s	.no_one_stands_on_me

	st	T_force_jump
	clr.b	T_state
.kill_me:
	move.l	Bob_Special_5(a4),a1
	move.b	#BOB_FALSE,Bob_Used(a1)		;Fire killen!

	IFNE	CountBobs
	move.b	T_time,d0
	move.b	#0,ccr
	moveq	#1,d1
	sbcd	d1,d0
	move.b	d0,T_time
	ENDC

	moveq	#$50,d0
	bra	Standart_Destruction

.no_one_stands_on_me:
	subq.b	#1,Bob_Special_1(a4)
	bpl.s	.an_ok
	addq.b	#2,Bob_Special_1(a4)
	addq.b	#2,Bob_Special_1+1(a4)
	and.b	#31,Bob_Special_1+1(a4)
	moveq	#0,d0
	move.b	Bob_Special_1+1(a4),d0
	lea	.wiggle_tab(pc),a0
	move.w	(a0,d0.w),d1
	add.w	d1,Bob_Y_Position(a4)
.an_ok:
	move.w	Bob_Special_4(a4),d0
	add.w	d0,Bob_X_Position(a4)
	tst.w	d0
	bmi.s	.to_left

	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1
	add.w	#16,d1

	add.w	#32,d0

	jsr	check_obj_kollision
	beq	.no_change

	move.l	#Walker_Sky_AnimTableL,Bob_Next_Anim(a4)
	move.l	Bob_Special_5(a4),a1
	move.l	#Fire_AnimTableL,Bob_Next_Anim(a1)

	bsr	Get_Next_Bob_Frame
	neg.w	Bob_Special_4(a4)
	bra	.no_change
.to_left:
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1
	add.w	#16,d1

	jsr	check_obj_kollision
	beq	.no_change

	move.w	Bob_Special_5(a4),a1
	move.l	#Fire_AnimTableR,Bob_Next_Anim(a1)
	move.l	#Walker_Sky_AnimTableR,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	neg.w	Bob_Special_4(a4)
	bra	.no_change

.no_change:
	move.l	Bob_Special_5(a4),a1

	movem.w	Bob_X_Position(a4),d0-d1
	tst.w	Bob_Special_4(a4)
	bmi.s	.left
	sub.w	#5,d0
	add.w	#14,d1
	bra.s	.set
.left:
	add.w	#14,d1
	add.w	#21,d0
.set:
	movem.w	d0-d1,Bob_X_Position(a1)

	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl	.out
	move.l	Bob_Special_5(a4),a1
	st	Bob_Used(a1)

	IFNE	CountBobs
	move.b	T_time,d0
	move.b	#0,ccr
	moveq	#1,d1
	sbcd	d1,d0
	move.b	d0,T_time
	ENDC

.out:
	rts

.wiggle_tab:
swing_tab:	dc.w	0,-1,0,-1,0,1,0,1,0,1,0,1,0,-1,0,-1

Walker_Flip	= level_Buffer-bob02
Walker_MFlip	= Walker_Flip+bob06-bob07

Walker_Sky_AnimTableL:
	dc.l	level_GFX+bob09,level_GFX+msk09
	dc.w	0,0,28,2,2,28,24

Walker_Sky_AnimTableR:
	dc.l	Walker_MFlip+bob09,Walker_MFlip+msk09
	dc.w	0,0,28,2,2,28,24

Fire:
	eor.b	#2,Bob_BlitStatus(a4)
	bra	Get_Next_Bob_Frame

Fire_AnimTableR:
	dc.l	Walker_MFlip+bob0a,Walker_MFlip+msk0a
	dc.w	0,0,10,2,2,28,24
	dc.w	ENTRY_END
	dc.l	Fire_AnimTableR

Fire_AnimTableL:
	dc.l	level_GFX+bob0a,level_GFX+msk0a
	dc.w	0,0,10,2,2,28,24
	dc.w	ENTRY_END
	dc.l	Fire_AnimTableL

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Walker
*---------------------------------------------------------------------------
Walker_StartL:
	btst	#3,Bob_Special_4+1(a4)
	bne	Test_Bob_Out

	cmp.w	#5,Walker_Anz
	beq	Out_Bob				;Nicht starten!
	addq.w	#1,Walker_Anz
	move.w	Bob_Special_4(a4),Bob_Special_5(a4)
	moveq	#-1,d2
	btst	#0,Bob_Special_4+1(a4)
	bne.s	.ok
	move.l	#Walker_AnimTableR,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	moveq	#1,d2
.ok:
	move.w	d2,Bob_Special_4(a4)
	move.l	#Walker_Ground,Bob_Routine(a4)

Walker_Ground:
	bsr	Standart_Hit_Handler
	beq	.destruct
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1

	move.w	d0,d2
	add.w	#32,d2
	addq.w	#1,d1
	jsr	check_foot_frame
	beq.s	.no_one_stands_on_me

	tst.b	T_state
	bpl.s	.no_one_stands_on_me			;Spieler springt nicht drauf!

	st	T_force_jump
	clr.b	T_state

	move.l	#Walker_maniac,Bob_Routine(a4)
	move.l	#Area_Enter_Vector,Bob_Entry_Adress(a4)	;Walker ist tot!
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	#$00010001,Bob_Anim_Delay(a4)

	lea	Walker_MAnimTableR(pc),a0
	move.w	Bob_Special_4(a4),d0
	add.w	d0,d0
	add.w	d0,d0
	move.w	d0,Bob_Special_4(a4)
	bpl.s	.set
	lea	Walker_MAnimTableL(pc),a0
.set:
	move.l	a0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	PLAY_FX	#$18
	bsr	Test_Bob_Out
	bra	.count

.no_one_stands_on_me:
	move.w	Bob_Special_4(a4),d2
	add.w	d2,Bob_X_Position(a4)

	tst.b	Bob_Special_1+1(a4)
	bne	.falling

	movem.w	Bob_X_Position(a4),d0-d1
	tst.w	d2
	bmi.s	.left

	add.w	#20,d0
	bra.s	.right
.left:
	addq.w	#8,d0
.right:
	movem.w	d0-d1,-(sp)
	add.w	#28,d1
	jsr	check_obj_kollision
	bne	.is_ground
	btst	#1,Bob_Special_5+1(a4)
	bne.s	.jump

	;Walker dreht um!

	neg.w	Bob_Special_4(a4)
	bsr	.set_anim
	movem.w	(sp)+,d0-d1
	bra.s	.no_wall
.jump:
	movem.w	(sp),d0-d1
	add.w	#28,d1
	moveq	#10,d2
	tst.w	Bob_Special_4(a4)
	bmi.s	.testit
	moveq	#-10,d2
.testit:
	add.w	d2,d0
	jsr	check_obj_kollision
	seq	Bob_Special_1+1(a4)		;Fall Flag!
.is_ground:
	movem.w	(sp)+,d0-d1
	add.w	#16,d1
	jsr	check_obj_kollision
	beq	.no_wall
	neg.w	Bob_Special_4(a4)
	bsr	.set_anim
.no_wall:
	bsr	Standart_BobAnim
	bra.s	.count

.falling:
	addq.w	#4,Bob_Y_Position(a4)
	movem.w	Bob_X_Position(a4),d0-d1
	tst.w	Bob_Special_4(a4)
	bmi.s	.fleft
	add.w	#20,d0
	bra.s	.fright
.fleft:
	addq.w	#8,d0
.fright:
	add.w	#28,d1
	jsr	check_obj_kollision
	seq	Bob_Special_1+1(a4)
	beq	Test_Bob_Out
	move.w	Bob_Y_Position(a4),d0
	add.w	#28,d0
	and.w	#$fff8,d0
	sub.w	#28,d0
	move.w	d0,Bob_Y_Position(a4)
	bsr	Test_Bob_Out
	bra.s	.count

.set_anim:
	bmi.s	.anim_left
	move.l	#Walker_AnimTableR,Bob_Next_Anim(a4)
	bra.s	.anim_all
.anim_left:
	move.l	#Walker_AnimTableL,Bob_Next_Anim(a4)
.anim_all:
	bra	Get_Next_Bob_Frame

.count:
	tst.b	Bob_Used(a4)
	bpl.s	.ok
	subq.w	#1,Walker_Anz
.ok:
	rts

.destruct:
	subq.w	#1,Walker_Anz
	moveq	#$50,d0
	bra	Standart_Destruction


Walker_maniac:
	move.w	Bob_Special_4(a4),d0
	add.w	d0,Bob_X_Position(a4)
	tst.w	d0
	bmi.s	.left
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1
	add.w	#16,d1

	add.w	#32,d0

	jsr	check_obj_kollision
	beq	.check_fall
.destruct:
	add.w	#8,Bob_Y_Position(a4)
	subq.w	#1,Walker_Anz
	moveq	#0,d0
	bra	Standart_Destruction

.left:
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1
	add.w	#16,d1

	jsr	check_obj_kollision
	bne	.destruct

.check_fall:
	movem.w	Bob_X_Position(a4),d0-d1
	add.w	#28,d1
	add.w	#16,d0
	jsr	check_obj_kollision
	bne.s	.out

	addq.w	#4,Bob_Y_Position(a4)
.out:
	bsr	Standart_BobAnim
	tst.b	Bob_Used(a4)
	bpl.s	.ok
	subq.w	#1,Walker_Anz
.ok:
	rts

Walker_Anz:	dc.w	0

Walker_AnimTableL:
		dc.l	level_GFX+bob02,level_GFX+msk02
		dc.w	0,0,28,2,2,28,24
		dc.l	level_GFX+bob03,level_GFX+msk03
		dc.w	0,1,27,2,2,28,24
		dc.l	level_GFX+bob04,level_GFX+msk04
		dc.w	0,0,28,2,2,28,24
		dc.l	level_GFX+bob05,level_GFX+msk05
		dc.w	0,1,27,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_AnimTableL

Walker_MAnimTableL:
		dc.l	level_GFX+bob07,level_GFX+msk07
		dc.w	0,13,15,2,2,28,24
		dc.l	level_GFX+bob08,level_GFX+msk08
		dc.w	0,12,16,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_MAnimTableL

Walker_AnimTableR:
		dc.l	Walker_Flip+bob02,Walker_Flip+msk02
		dc.w	0,0,28,2,2,28,24
		dc.l	Walker_Flip+bob03,Walker_Flip+msk03
		dc.w	0,1,27,2,2,28,24
		dc.l	Walker_Flip+bob04,Walker_Flip+msk04
		dc.w	0,0,28,2,2,28,24
		dc.l	Walker_Flip+bob05,Walker_Flip+msk05
		dc.w	0,1,27,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_AnimTableR


Walker_MAnimTableR:
		dc.l	Walker_MFlip+bob07,Walker_MFlip+msk07
		dc.w	0,13,15,2,2,28,24
		dc.l	Walker_MFlip+bob08,Walker_MFlip+msk08
		dc.w	0,12,16,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_MAnimTableR


;--------------------------------------------------------------------------
Next_Level:
	clr.w	Cue_Point
	addq.w	#1,act_level
	move.w	act_level,d0
	cmp.w	#1,d0
	beq	Init_Level_0
	cmp.w	#2,d0
	beq	Init_Level_1
	cmp.w	#3,d0
	beq	Init_Level_2
	st	Cue_Point
	rts

act_level:	dc.w	Level

Init_Datas:
	clr.w	Walker_Anz
	clr.w	Ball_Anz
	cmp.w	#1,act_level
	beq	Init_Steel

	lea	D_buffer,a1
	lea	Level2_coltab,a0
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0),(a1)
	rts

Init_World:
	move.w	#$700,T_time
	move.l	#Jump_Speed1,Jump_Start_Speed
	move.l	#Jump_Verz1,Jump_Verz_Lab

	sf	Plane_flag
	move.l	#main2_GFX+Nbob29,Diamond_Pointer

	move.l	#Blit_Rope8,Rope_Vector
	bsr	Init_Clist			;Splits eintragen

	move.l	Act_Scr_Structure,a6
	move.l	#character,Scr_Character(a6)
	lea	Sound,a0
	move.l	(a0)+,d1
	add.l	a0,d1
	move.l	a0,d0
	jsr	TFMX+52

	move.w	#96,Scr_Blt_Len(a6)
	move.w	#64*16*3+1,Scr_Blt_Blit_Size(a6)
	move.l	#(208+48)*planeb*3,Scr_X_Supply_Sub(a6)
	move.l	#16*planeb*3,Scr_X_Supply_Add(a6)
	move.w	#planeb*3,Scr_Plane_Width(a6)

	lea	Smart_Info,a1
	move.w	#3,Bob_I_Depth(a1)
	move.w	#1*2*3,Bob_I_B_Modulo(a1)
	move.w	#planeb*3,Bob_I_D_Modulo(a1)

	lea	Smart_Structure,a1
	move.l	#main2_GFX+Nbob25,Bob_Graphics(a1)
	move.l	#main2_GFX+Nmsk25,Bob_Mask(a1)

	lea	Main_Clist,a0
	move.l	a0,cop1lch(a5)

	jsr	init_parallax
	jsr	set_copcolors

	moveq	#14,d7
	lea	Score+3648+2,a0
	lea	Col_lab1,a1
.setcol2:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.setcol2

	lea	level_flipI(pc),a3
	lea	level_GFX,a0
	lea	level_Buffer,a1
	jsr	Flip_Bobs

	lea	main_flipI2(pc),a3
	lea	main2_GFX,a0
	lea	main_Buffer,a1
	jsr	Flip_Bobs

	move.l	#wpara_bob,d0
	move.l	#Rotate_Buffer,d1

	waitblt
	move.l	#-1,bltafwm(a5)
	move.w	#0,bltamod(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#56-16,bltdmod(a5)
	moveq	#3-1,d7
.loop:
	move.l	d1,bltdpth(a5)
	move.l	d0,bltapth(a5)

	move.w	#64*208*3+8,bltsize(a5)
	waitblt
	add.l	#16,d1
	dbf	d7,.loop

	move.w	#8,bltamod(a5)
	move.w	#56-8,bltdmod(a5)
	move.l	d1,bltdpth(a5)
	move.l	d0,bltapth(a5)
	move.w	#64*208*3+4,bltsize(a5)
	waitblt

	rts

Init_Level_0:
	SONGPLAY #0
	move.l	#Macros2,Macro_Pointer

	move.l	#Col_lab2,Color_Pointer
	move.l	#Handle_Player,Player_Vector
	move.l	Act_Scr_Structure,a6
	move.l	#character2,Scr_Character(a6)
	move.l	#Level1_Clist,Clist_Handler
	move.w	#levelb0,Scr_Level_Width(a6)
	move.l	#Level3-1-levelb0,Scr_Level_Pointer(a6)
	move.l	#Level3,Scr_Level(a6)
	move.w	#levelb0*16-320+16,Scr_X_Max(a6)
	move.w	#levelh0*16-208,Scr_Y_Max(a6)
	move.l	#Area3,Area_Vector
	move.w	#26,Scr_BA_Anz_Area_X(a6)
	move.w	#(16+22)/2+1,Scr_AnzSupplyPlates(a6)
	move.l	#Cue_Table0,Act_Cue_Table
	move.l	#Level0_FX,SFX_Handler

	rts

Level0_FX:
	clr.w	Scr_Down_Fix(a6)
	move.w	Scr_X_Level_Pos(a6),d0
	move.w	Scr_Y_Level_Pos(a6),d1
	cmp.w	#80,d1
	bgt.s	.not1
	cmp.w	#480,d0
	bge.s	.not1
	move.w	#80,Scr_Down_Fix(a6)
	rts
.not1:
	cmp.w	#360,d1
	bgt.s	.not2
	cmp.w	#240,d0
	ble.s	.not2
	move.w	#360,Scr_Down_Fix(a6)
	rts
.not2:
	cmp.w	#595,d1
	bgt.s	.not3
	cmp.w	#760,d0
	bge.s	.not3
	move.w	#595,Scr_Down_Fix(a6)
.not3:
	rts

Init_Level_1:
	SONGPLAY #1

	lea	flash_flipI(pc),a3
	lea	flash_GFX,a0
	lea	level_Buffer+3000,a1
	jsr	Flip_Bobs


	lea	flash_GFX+Fbob01,a0			;Linke Hlfte!
	lea	level_Buffer+3000+Fbob01,a1		;Rechte Hlfte!
	lea	level_Buffer+3000+1920,a2		;Ziel!

	move.w	#(64*3)-1,d7
.merge:
	move.w	(a0)+,(a2)+
	move.w	(a0)+,d0
	or.w	(a1)+,d0
	move.w	d0,(a2)+
	move.w	(a1)+,(a2)+
	dbf	d7,.merge

	lea	Coplab2(pc),a0
	move.w	#$d0-1,d7
.loop2:	move.w	#COPCOL3,4(a0)
	addq.l	#8,a0
	dbf	d7,.loop2

	lea	Level2_coltab(pc),a0
	lea	B_coltab+2(pc),a1
	moveq	#15-1,d7
.loop:	move.w	(a0)+,(a1)+
	dbf	d7,.loop

	lea	C_coltab(pc),a1
	moveq	#12-1,d7
.loop3:	move.w	(a0)+,(a1)+
	dbf	d7,.loop3

	move.w	#TSplitlab1&$ffff,Wraplab1+2	;Neue Copperlist (fr Gewitter)

	move.w	#COPCOL3,Coplab3+12
	move.w	#COPCOL3,Coplab5+12
	move.w	#COPCOL3,Clist_oldcopinst

	move.l	#WrapTable2,WrapPointer
	move.l	#ScrollTable2,ScrollPointer
	move.l	#SplitTable2,SplitPointer
	move.l	#Do_Parallax2,ParaPointer
	move.l	#Dest_Table2,DestPointer

	move.l	#Macros,Macro_Pointer
	move.l	#character,Scr_Character(a6)

	move.l	#Col_lab2,Color_Pointer
	move.l	#Handle_Player,Player_Vector
	move.l	Act_Scr_Structure,a6
	move.l	#Level1_Clist,Clist_Handler
	move.w	#levelb1,Scr_Level_Width(a6)
	move.l	#Level1-1-levelb1,Scr_Level_Pointer(a6)
	move.l	#Level1,Scr_Level(a6)
	move.w	#levelb1*16-320+16,Scr_X_Max(a6)
	move.w	#levelh1*16-208,Scr_Y_Max(a6)
	move.l	#Area1,Area_Vector
	move.w	#85,Scr_BA_Anz_Area_X(a6)
	move.w	#(16+22)/2+1,Scr_AnzSupplyPlates(a6)
	move.l	#Cue_Table1,Act_Cue_Table
	move.l	#Level1_SFX,SFX_Handler

	move.l	#tpara_bob,d0
	move.l	#Rotate_Buffer,d1
	waitblt
	move.l	#-1,bltafwm(a5)
	move.w	#0,bltamod(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#56-10,bltdmod(a5)
	moveq	#5-1,d7
.ploop:
	move.l	d1,bltdpth(a5)
	move.l	d0,bltapth(a5)

	move.w	#64*208*3+5,bltsize(a5)
	waitblt
	add.l	#10,d1
	dbf	d7,.ploop

	rts

Level1_SFX:
	move.w	Scr_X_Level_Pos(a6),d0
	move.w	d0,d1
	add.w	T_posX,d0
	tst.b	Robot_destructed
	bne.s	.no_robot
	cmp.w	#2240,d0
	blt.s	.no_robot
	move.w	#Robot_X,Scr_X_Fix(a6)

	cmp.w	#2150,d1
	blt.s	.no_robot

	move.w	#Robot_Y,Scr_Y_Fix(a6)

	cmp.w	#2238,d1
	bne.s	.no_robot

	;Initialisierung fr Roboter

	lea	Coplab2(pc),a0
	move.w	#COPCOL3,192*8+4(a0)
	move.w	#$008a,167*8+4(a0)		;Bitte hier springen!

	move.w	#167,Robot_change1

	move.l	#Repos_Player_Dead,Dead_Vector
	bsr	handle_repos1

	SONGPLAY #4

	lea	Robot_coltab,a0
	bra	SetColors3

.no_robot:
	cmp.w	#5490,d0
	bge.s	.won
	cmp.w	#5380,d0
	blt.s	.out
	tst.b	T_runout
	bne.s	.out
	SONGPLAY #5
	st	T_freeze
	st	T_runout
	move.b	#1<<RIGHT,T_joyforce
.out:
	rts
.won:
	move.b	#-1,Cue_Point+1
	rts

Init_Level_2:
	move.l	#Macros,Macro_Pointer

	move.l	#Col_lab2,Color_Pointer
	move.l	#Handle_Player,Player_Vector
	move.l	Act_Scr_Structure,a6
	move.l	#Level1_Clist,Clist_Handler
	move.w	#levelb2,Scr_Level_Width(a6)
	move.l	#Level2-1-levelb2,Scr_Level_Pointer(a6)
	move.l	#Level2,Scr_Level(a6)
	move.w	#levelb2*16-320+32-2,Scr_X_Max(a6)
	move.w	#levelh2*16-208,Scr_Y_Max(a6)
	move.l	#Area2,Area_Vector
	move.w	#43,Scr_BA_Anz_Area_X(a6)
	move.w	#(16+22)/2+1,Scr_AnzSupplyPlates(a6)
	move.l	#Cue_Table2,Act_Cue_Table
	move.l	#Return,SFX_Handler

	;a0 = Pointer auf Quell-Daten (Normales interleaved Bob)
	;a1 = Pointer auf Chunky-Mode-Buffer
	;a2 = Pointer auf Leere Rotate-Info Struktur, die mit Daten gefllt wird.
	;a3 = Pointer auf Quell-Maske (Einfache Masken-Plane)
	;d0 = Seitenlnge des Objekts (In Pixeln).
	;d1 = Planetiefe des Objekts

;	lea	Roll_GFX,a0
;	lea	Work_Buffer1,a1
;	lea	Rot_Info1,a2
;	lea	Roll_GFX+32*4*3,a3

	lea	level_GFX+bob0c,a0
	lea	Work_Buffer1,a1
	lea	Rot_Info1,a2
	lea	level_GFX+msk0c,a3
	moveq	#32,d0
	moveq	#3,d1
	jsr	Convert_to_Rotate

	move.l	#$49800,Dest_Obj
	move.w	#50,Angle_Obj

.rotate_it:
	lea	Work_Buffer1,a0
	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	move.w	Angle_Obj,d0
	jsr	Do_Rotate

	move.l	Dest_Obj,a0
	lea	3*32*4(a0),a3

	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	move.w	Rot_I_OBJ_Width(a2),d7
	jsr	Convert_to_Bitplane3

	add.l	#4*32*4,Dest_Obj
	addq.b	#4,Angle_Obj+1
	cmp.b	#130,Angle_Obj+1
	bls	.rotate_it

	SONGPLAY #2

	rts

Init_Steel:
	lea	Area3(pc),a0
	sf	1248(a0)
	sf	1248+8(a0)
	sf	1248+16(a0)

	lea	Steel_list(pc),a1
.loop:
	moveq	#0,d0
	moveq	#0,d1
	move.b	(a1)+,d0
	bmi.s	.out
	move.b	(a1)+,d1
	addq.w	#4,d0
	subq.w	#5,d1

	mulu	#levelb0,d1
	add.w	d0,d1
	add.l	#Level3,d1
	move.l	d1,a0
	move.b	#68,(a0)
	lea	levelb0(a0),a0
	moveq	#4-1,d7
.loop1:
	move.b	#32,(a0)
	lea	levelb0(a0),a0
	dbf	d7,.loop1
	lea	-4(a0),a0
	move.b	#7,(a0)+
	moveq	#7-1,d7
.loop2:
	move.b	#66,(a0)+
	dbf	d7,.loop2
	move.b	#33,(a0)
	bra	.loop
.out:
	rts

Steel_list:
	dc.b	14, 8, 29,11, 43,12, 57,13
	dc.b	52,22, 37,24, 27,29, 13,29
	dc.b	 3,34, 14,39, 24,43, 35,40
	dc.b	46,43, 56,40, 66,43, 78,49
	dc.b	66,53, 54,57, 44,62, 33,68
	dc.b	23,73, 13,78,  2,84,  2,10

	dc.b	-1

	even

Level1_Clist:
	move.l	Act_Scr_Structure,a6
	move.l	Scr_Supply_Field(a6),d0
	move.l	Scr_Show_Field(a6),Scr_Supply_Field(a6)
	move.l	d0,Scr_Show_Field(a6)
	not.w	Scr_Screen_num(a6)

SetClist:
	lea	Coplab4(pc),a0
	move.w	Scr_X_Level_Pos(a6),d0
	and.w	#15,d0
	moveq	#15,d1
	sub.w	d0,d1
	move.w	d1,d0
;	lsl.w	#4,d0
;	or.w	d0,d1
	move.w	d1,2(a0)
	move.w	d1,Shift_Value

	lea	Coplab1(pc),a0
	moveq	#0,d1
	move	Scr_Y_Play_Anf(a6),d0
	mulu	Scr_Plane_Width(a6),d0
	move	Scr_X_Level_Pos(a6),d1
	lsr	#3,d1
	add.l	d1,d0
	add.l	Scr_Show_Field(a6),d0

	swap	d0
	move	d0,2(a0)
	swap	d0
	move	d0,6(a0)
	add.l	#planeb,d0
	swap	d0
	move	d0,10(a0)
	swap	d0
	move	d0,14(a0)
	add.l	#planeb,d0
	swap	d0
	move	d0,18(a0)
	swap	d0
	move	d0,22(a0)

	move.l	GosubPos(pc),a0
	move.w	Coplab3+18,2(a0)

	lea	Coplab2(pc),a0
	move.w	Clist_oldcolpos,d1
	move.w	Clist_oldcopinst,4(a0,d1.w)	;alten Befehl wieder reinschreiben.

	tst.b	Col_Init_Flag
	beq.s	.no_init1
	bsr	init_parallax
.no_init1:

	move.w	Scr_Plane_Height(a6),d0
	sub.w	Scr_Y_Play_Anf(a6),d0
	add.w	#$30,d0
	cmp.w	#$ff,d0
	bhs.s	.no_copjump
	sub.w	#$30,d0

	move.l	WrapPointer(pc),a2
.search:
	cmp.w	4(a2),d0
	beq.s	.set_equal
	blt.s	.use
	addq.l	#6,a2
	bra.s	.search
.use:
	move.l	(a2),a2			;An dieser Position wird auf den Coplab3 verzweigt.
	move.l	a2,GosubPos

	move.w	2(a2),d1
	move.w	#Coplab3&$ffff,2(a2)	;Bitte zum Coplab3 verzweigen.
	move.w	d1,Coplab3+18
	move.w	6(a2),Coplab3+14

	asl.w	#3,d0

	move.w	d0,Clist_oldcolpos
	move.w	#$008a,4(a0,d0.w)	;Jump auslsen.
	move.w	6(a0,d0.w),d1		;Diese Farbe wurde geschrieben.

	lea	8(a0,d0.w),a0		;Zu dieser Adresse returned der Copper.
	move.l	a0,d0

.no_copjump:

	move.w	d0,Coplab3+22		;LO-Word
	move.w	d1,Coplab3+14		;Farbwert

	lea	Coplab3(pc),a0		;Bplpt fr Wrap
	bra.s	.dont_update

.set_equal:
	move.l	(a2),a2			;An dieser Position wird auf den Coplab3 verzweigt.
	move.l	a2,GosubPos

	move.w	2(a2),d1
	move.w	d1,Coplab3+18
	move.w	#Coplab5&$ffff,2(a2)	;Bitte zum Coplab5 verzweigen.
	move.w	d1,Coplab5+18

	asl.w	#3,d0
	move.w	6(a0,d0.w),Coplab5+14	;Diese Farbe wurde geschrieben.

	lea	Coplab5(pc),a0		;Bplpt fr Wrap
.dont_update:
	moveq	#0,d0
	move.w	Scr_X_Level_Pos(a6),d0
	lsr.w	#3,d0
	add.l	Scr_Show_Field(a6),d0

	move.w	d0,2(a0)
	add.l	#planeb,d0
	move.w	d0,6(a0)
	add.l	#planeb,d0
	move.w	d0,10(a0)

	lea	Sprlab(pc),a0
	bsr	Set_Sprites

	tst.b	Col_Flag
	beq.s	.no_col
	lea	$dff1b0,a1
	lea	Col_Buffer(pc),a0
	tst.b	Col_Init_Flag
	beq.s	.no_init2
	lea	Col_Buffer2(pc),a0
.no_init2:
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	sf	Col_Flag
.no_col:
	move.l	ParaPointer,a0
	jmp	(a0)


WrapPointer:	dc.l	WrapTable1
SplitPointer:	dc.l	SplitTable1
ScrollPointer:	dc.l	ScrollTable1
ParaPointer:	dc.l	Do_Parallax

Set_Sprites:
	lea	sprite_adr,a1
	lea	sprite_pos,a2
	moveq	#7,d7
.set_spr:
	move.l	(a1)+,d0
	move.l	d0,a3
	move.l	(a2)+,(a3)		;Position setzen.
	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	lea	8(a0),a0
	dbf	d7,.set_spr
	rts

Col_Buffer:	dc.l	0,0,0
Col_Buffer2:	dc.l	0,0,0
Col_Flag:	dc.b	0
Col_Init_Flag:	dc.b	0


Clist_oldcolpos:	dc.w	0
Clist_oldcopinst:	dc.w	COPCOL2
GosubPos:		dc.l	Wraplab1
Shift_Value:		dc.w	0

Init_Clist:
	lea	Coplab2(pc),a0
	move.l	SplitPointer(pc),a1
.loop:
	move.w	(a1)+,d0		;Position
	bmi.s	.out
	move.l	(a1)+,a2		;Splitlab
	asl.w	#3,d0
	move.w	#$008a,4(a0,d0.w)	;GOSUB auslsen.
	move.w	6(a0,d0.w),d1
	lea	8(a0,d0.w),a3
	move.w	a3,2(a2)
	move.w	d1,6(a2)
	bra.s	.loop
.out:
	rts

Do_Parallax:
	addq.w	#2,Scroll_pos
	move.w	Scroll_pos,d7
	move.l	ScrollPointer(pc),a0
	moveq	#0,d3
.loop:
	move.w	(a0)+,d0
	beq.s	.out
	move.w	(a0)+,d3
	move.l	(a0)+,a1
	mulu	d7,d0
	swap	d0
	rol.l	#1,d0
	and.w	#127,d0
	move.w	d0,d1
	lsr.w	#3,d0
	and.l	#$fffe,d0
	add.l	#Rotate_Buffer,d0
	add.l	d3,d0
	move.w	d0,10(a1)
	add.w	#56,d0
	move.w	d0,14(a1)
	add.w	#56,d0
	move.w	d0,18(a1)

	and.w	#15,d1
	moveq	#15,d0
	sub.w	d1,d0
	lsl.w	#4,d0
	or.w	Shift_Value,d0
	move.w	d0,22(a1)

	bra.s	.loop
.out:
	rts

Do_Parallax2:
	move.l	Act_Scr_Structure,a6
	move.w	Scr_Scrolled_X(a6),d0
;	add.w	d0,Scroll_pos
	add.w	d0,Scroll_pos2
	bpl.s	.ok1
	add.w	#16000,Scroll_pos2
.ok1:
	cmp.w	#16000,Scroll_pos2
	blt.s	.ok2
	sub.w	#16000,Scroll_pos2
.ok2:
	addq.w	#1,Scroll_pos
	move.w	Scroll_pos,d7
	move.l	ScrollPointer(pc),a0
	moveq	#0,d3
.loop:
	move.w	(a0)+,d0
	beq.s	.out
	tst.b	d0
	beq.s	.ok
	clr.b	d0
	move.w	Scroll_pos2,d7
.ok
	move.w	(a0)+,d3
	move.l	(a0)+,a1
	mulu	d7,d0
	swap	d0
	rol.l	#1,d0
	and.l	#$ffff,d0
	divu	#80,d0
	swap	d0
	move.w	d0,d1
	lsr.w	#3,d0
	and.l	#$fffe,d0
	add.l	#Rotate_Buffer,d0
	add.l	d3,d0
	move.w	d0,10(a1)
	add.w	#56,d0
	move.w	d0,14(a1)
	add.w	#56,d0
	move.w	d0,18(a1)

	and.w	#15,d1
	moveq	#15,d0
	sub.w	d1,d0
	lsl.w	#4,d0
	or.w	Shift_Value,d0
	move.w	d0,22(a1)

	bra.s	.loop
.out:
	rts

SplitTable1:
	dc.w	5
	dc.l	ColSplit1
	dc.w	10
	dc.l	ColSplit2
	dc.w	15
	dc.l	ColSplit3

	dc.w	16
	dc.l	Splitlab1
	dc.w	20
	dc.l	ColSplit4
	dc.w	25
	dc.l	ColSplit5
	dc.w	30
	dc.l	ColSplit6
	dc.w	35
	dc.l	ColSplit7
	dc.w	40
	dc.l	ColSplit8
	dc.w	45
	dc.l	ColSplit9
	dc.w	50
	dc.l	ColSplit10
	dc.w	55
	dc.l	ColSplit11
	dc.w	60
	dc.l	ColSplit12

	dc.w	64
	dc.l	Splitlab2

	dc.w	65
	dc.l	ColSplit13
	dc.w	70
	dc.l	ColSplit14
	dc.w	75
	dc.l	ColSplit15

	dc.w	80
	dc.l	Splitlab3

	dc.w	85
	dc.l	ColSplit16
	dc.w	90
	dc.l	ColSplit17

	dc.w	99
	dc.l	Splitlab4
	dc.w	163
	dc.l	Splitlab5
	dc.w	187
	dc.l	Splitlab6
	dc.w	194
	dc.l	Splitlab7
	dc.w	-1

WrapTable1:
	dc.l	Wraplab1
	dc.w	5
	dc.l	CWraplab1
	dc.w	10
	dc.l	CWraplab2
	dc.w	15
	dc.l	CWraplab3
	dc.w	16
	dc.l	Wraplab2

	dc.w	20
	dc.l	CWraplab4
	dc.w	25
	dc.l	CWraplab5
	dc.w	30
	dc.l	CWraplab6
	dc.w	35
	dc.l	CWraplab7
	dc.w	40
	dc.l	CWraplab8
	dc.w	45
	dc.l	CWraplab9
	dc.w	50
	dc.l	CWraplab10
	dc.w	55
	dc.l	CWraplab11
	dc.w	60

	dc.l	CWraplab12
	dc.w	64

	dc.l	Wraplab3
	dc.w	65
	dc.l	CWraplab13
	dc.w	70
	dc.l	CWraplab14
	dc.w	75

	dc.l	CWraplab15
	dc.w	80
	dc.l	Wraplab4

	dc.w	85
	dc.l	CWraplab16
	dc.w	90
	dc.l	CWraplab17

	dc.w	99
	dc.l	Wraplab5
	dc.w	163
	dc.l	Wraplab6
	dc.w	187
	dc.l	Wraplab7
	dc.w	194
	dc.l	Wraplab8
	dc.w	500

ScrollTable1:
	dc.w	$6000,0
	dc.l	Splitlab0

	dc.w	$4000,56*3*16
	dc.l	Splitlab1

	dc.w	$5000,56*3*64
	dc.l	Splitlab2

	dc.w	$6800,56*3*80
	dc.l	Splitlab3

	dc.w	$8000,56*3*99
	dc.l	Splitlab4

	dc.w	$c000,56*3*194
	dc.l	Splitlab7

	dc.w	0

SplitTable2:
	dc.w	20
	dc.l	TSplitlab1
	dc.w	39
	dc.l	TSplitlab2
	dc.w	54
	dc.l	TSplitlab3
	dc.w	67
	dc.l	TSplitlab4
	dc.w	82
	dc.l	TSplitlab5

	dc.w	94
	dc.l	TColSplit1

	dc.w	115
	dc.l	TColSplit2

	dc.w	121
	dc.l	TColSplit3

	dc.w	132
	dc.l	TColSplit4

	dc.w	161
	dc.l	TSplitlab6

	dc.w	166
	dc.l	TColSplit5

Robot_change1:
	dc.w	192
	dc.l	TColSplit6

	dc.w	194
	dc.l	TSplitlab7

	dc.w	-1

WrapTable2:
	dc.l	Wraplab1
	dc.w	20
	dc.l	TWraplab2
	dc.w	39
	dc.l	TWraplab3
	dc.w	54
	dc.l	TWraplab4
	dc.w	67
	dc.l	TWraplab5
	dc.w	82
	dc.l	TWraplab6

	dc.w	94
	dc.l	CTWraplab1
	dc.w	115
	dc.l	CTWraplab2
	dc.w	121
	dc.l	CTWraplab3
	dc.w	132
	dc.l	CTWraplab4
	dc.w	161
	dc.l	TWraplab7
	dc.w	166
	dc.l	CTWraplab5
	dc.w	192
	dc.l	CTWraplab6
	dc.w	194
	dc.l	TWraplab8

	dc.w	500

ScrollTable2:
	dc.w	$c000,0
	dc.l	Splitlab0

	dc.w	$8000,56*3*20
	dc.l	TSplitlab1

	dc.w	$6000,56*3*39
	dc.l	TSplitlab2

	dc.w	$4000,56*3*54
	dc.l	TSplitlab3

	dc.w	$2000,56*3*67
	dc.l	TSplitlab4

	dc.w	$4001,56*3*82
	dc.l	TSplitlab5

	dc.w	$6000,56*3*161
	dc.l	TSplitlab6

	dc.w	$7000,56*3*194
	dc.l	TSplitlab7

	dc.w	0

Scroll_pos:	dc.w	0
Scroll_pos2:	dc.w	0

	;d0 nicht benutzen
init_parallax:
	move.w	#$09f0,bltcon0(a5)
	move.l	#-1,bltafwm(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	#6,bltdmod(a5)
	move.w	#0,bltamod(a5)
	move.l	#parallax,d3
	move.l	#Coplab2+6,bltdpth(a5)
	move.l	d3,bltapth(a5)
	move.w	#64*$d0+1,bltsize(a5)

	waitblt

	bra	Init_Clist

para_ypos:	dc.l	0
para_old:	dc.w	0

Fade_Colors:
	lea	SetClist(pc),a4
	move.l	Act_Scr_Structure,a6
	st	Col_Init_Flag
	tst.w	d0
	bmi.s	.fade_out
.fade_in:
	bsr	Wait_tof

	st	Col_Flag
	jsr	(a4)
	bsr	set_weapon_colors
	jsr	set_copcolors
	bsr	set_paracolors

	addq.w	#1,Fade_Position
	bsr	Fade_to_Dest

	cmp.w	#16,Fade_Position
	bne	.fade_in
	st	Col_Flag
	jsr	(a4)
	bsr	set_weapon_colors
	jsr	set_copcolors
	bsr	set_paracolors

	sf	Col_Init_Flag
	rts


.fade_out:
	bsr	Wait_tof

	st	Col_Flag
	jsr	(a4)
	bsr	set_weapon_colors
	jsr	set_copcolors
	bsr	set_paracolors

	subq.w	#1,Fade_Position
	bsr	Fade_to_Dest

	tst.w	Fade_Position
	bne	.fade_out
	sf	Col_Init_Flag
	rts

Wait_tof:
	move.l	$dff004,d0
	and.l	#$1ff00,d0
	cmp.l	#$12000,d0
	bne.s	Wait_tof
	rts


Fade_to_Dest:
	move.w	Fade_Position(pc),d7
	lea	B_parallax,a0		;Source
	lea	parallax,a1		;Destination
	move.w	#207,d6
	bsr	Do_Fade_colors
	lea	B_coltab,a0		;Source
	lea	coltab,a1		;Destination
	move.w	#31,d6
	bsr	Do_Fade_colors
	lea	Col_Buffer,a0		;Source
	lea	Col_Buffer2,a1		;Destination
	move.w	#5,d6
	bsr	Do_Fade_colors
	lea	C_coltab,a0		;Source
	lea	C_buffer,a1		;Destination
	move.w	#18+7-1,d6
	bsr	Do_Fade_colors
	rts

set_paracolors:
	lea	C_buffer(pc),a0
	move.l	DestPointer(pc),a1
	moveq	#0,d0
.loop:
	move.w	(a1)+,d0
	beq.s	.out
	move.l	d0,a2
	move.w	(a0)+,(a2)
	bra.s	.loop
.out
	rts

DestPointer:	dc.l	Dest_Table1

Dest_Table1:
	dc.w	ColSplit1+14
	dc.w	ColSplit2+14
	dc.w	ColSplit3+14
	dc.w	ColSplit4+14
	dc.w	ColSplit5+14
	dc.w	ColSplit6+14
	dc.w	ColSplit7+14
	dc.w	ColSplit8+14
	dc.w	ColSplit9+14
	dc.w	ColSplit10+14
	dc.w	ColSplit11+14
	dc.w	ColSplit12+14
	dc.w	ColSplit13+14
	dc.w	ColSplit14+14
	dc.w	ColSplit15+14
	dc.w	Splitlab3+30
	dc.w	ColSplit16+14
	dc.w	ColSplit17+14
	dc.w	Splitlab4+30
	dc.w	Splitlab4+34
	dc.w	Splitlab4+38
	dc.w	Splitlab4+42

	dc.w	Splitlab5+14
	dc.w	Splitlab6+14
	dc.w	Splitlab6+18
	dc.w	0

Dest_Table2:
	dc.w	TColSplit1+14
	dc.w	TColSplit1+18
	dc.w	TColSplit2+14
	dc.w	TColSplit2+18
	dc.w	TColSplit3+14
	dc.w	TColSplit3+18
	dc.w	TColSplit4+14
	dc.w	TColSplit4+18
	dc.w	TSplitlab6+30
	dc.w	TSplitlab6+34
	dc.w	TSplitlab6+38
	dc.w	TColSplit5+14
	dc.w	0

Do_Fade_colors:
	move.b	(a0)+,d1
	and.w	#15,d1
	mulu	d7,d1
	lsr.w	#4,d1
	move.b	d1,(a1)+
	moveq	#0,d0
	move.b	(a0)+,d0
	move.b	d0,d1
	and.w	#15,d1
	mulu	d7,d1
	lsr.w	#4,d1
	lsr.b	#4,d0
	mulu	d7,d0
	and.b	#$f0,d0
	or.b	d0,d1
	move.b	d1,(a1)+
	dbf	d6,Do_Fade_colors
	rts

set_weapon_colors:
	lea	$dff1a2,a1
	move.w	Col_Buffer2+8,d0
	move.w	d0,8(a1)
	move.w	d0,(a1)+
	move.w	Col_Buffer2+10,d0
	move.w	d0,8(a1)
	move.w	d0,(a1)
	rts

Fade_Position:	dc.w	0
Color_Pointer:	dc.l	Col_lab2

StartFlash:
	lea	Flash_Handler(pc),a1
	jmp	AddHandler

Flash_Handler:
	tst.b	flash_mode
	bne.s	.fade_down

	addq.b	#2,flash_count
	cmp.b	#18,flash_count
	bne.s	.do_flash
	st	flash_mode
	bra.s	.fade_down
.do_flash:
	lea	coltab,a0
	moveq	#31,d7
	bsr	.color_up

	lea	C_buffer,a0
	moveq	#25-1,d7
	bsr	.color_up

	lea	parallax,a0
	move.w	#208-1,d7
	bsr	.color_up

	lea	D_buffer,a0
	moveq	#6-1,d7
	bsr	.color_up

	bra	.set_colors

.fade_down:
	subq.b	#1,flash_count
	bmi	.kill
	lea	coltab,a0
	lea	B_coltab(pc),a1
	moveq	#31,d7
	bsr	.color_down

	lea	C_buffer,a0
	lea	C_coltab(pc),a1
	moveq	#25-1,d7
	bsr	.color_down

	lea	D_buffer,a0
	lea	Level2_coltab(pc),a1
	moveq	#6-1,d7
	bsr	.color_down

	lea	parallax,a0
	lea	B_parallax(pc),a1
	move.w	#208-1,d7
	bsr	.color_down

	bra	.set_colors

.color_up:
	move.w	(a0),d0
	move.w	d0,d1
	and.w	#15,d1
	addq.b	#2,d1
	cmp.b	#15,d1
	ble.s	.ok1
	move.b	#15,d1
.ok1:
	and.w	#$0f0,d0
	add.w	#$020,d0
	cmp.w	#$0f0,d0
	ble.s	.ok2
	move.w	#$0f0,d0
.ok2:
	or.w	d0,d1
	move.w	(a0),d0
	and.w	#$f00,d0
	add.w	#$200,d0
	cmp.w	#$f00,d0
	ble.s	.ok3
	move.w	#$f00,d0
.ok3:
	or.w	d0,d1
	move.w	d1,(a0)+
	dbf	d7,.color_up
	rts

.color_down:
	move.w	(a0),d0
	move.w	(a1),d2
	and.w	#$00f,d2
	move.w	d0,d1
	and.w	#$00f,d1
	cmp.w	d2,d1
	beq.s	.ok4
	subq.w	#1,d1
.ok4:
	move.w	(a1),d2
	and.w	#$0f0,d2
	and.w	#$0f0,d0
	cmp.w	d2,d0
	beq.s	.ok5
	sub.w	#$010,d0
.ok5:
	or.w	d0,d1

	move.w	(a0),d0
	move.w	(a1),d2
	and.w	#$f00,d2
	and.w	#$f00,d0
	cmp.w	d2,d0
	beq.s	.ok6
	sub.w	#$100,d0
.ok6:
	or.w	d0,d1
	move.w	d1,(a0)+
	addq.l	#2,a1
	dbf	d7,.color_down
	rts

.set_colors:
	bsr	set_paracolors
	bsr	init_parallax

	lea	D_buffer,a0
	lea	CTWraplab6+6(pc),a1
	moveq	#6-1,d7
.set_cops:
	move.w	(a0)+,(a1)
	addq.l	#4,a1
	dbf	d7,.set_cops

	move.w	coltab,Back_Color1+2

	jmp	set_copcolors

.kill:
	move.l	#Return,-4(a0)
	sf	flash_mode
	sf	flash_count
	rts

;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
levelb1	=	340
levelh1	=	44
levelb2	=	170
levelh2	=	42
levelb0	= 	100
levelh0	= 	90

;--------------------------------------------------------------------------
Bob_Plates_Pointer

planeb	=	40+4
planeh	=	208+4*16+20

	Even
coltab:
	dcb.w	32,0

B_coltab:
	dc.w	$0000,$0FD0,$0AAA,$0E96,$0666,$0ADF,$0222,$0FFF
	dc.w	$0061,$08AA,$0244,$0466,$0688,$0ACC,$0FFF,$0466

	dc.w	$000,$8c1,$080,$fff,$442,$8c1,$080,$fff
	dc.w	$8ae,$26a,$e00,$820,$ea2,$aaa,$666,$000

C_coltab:
	dc.w	PCol0,PCol1,PCol2,PCol3,PCol4,PCol5,PCol6,PCol7
	dc.w	PCol8,PCol9,PCol10,PCol11,PCol12,PCol13,PCol14,PCol15
	dc.w	PCol16,PCol17
	dc.w	$0237,$0348,$064B,$0226,$0024,$0666,$0244

Level2_coltab:
	dc.w	$0BBB,$0444,$0777,$0666,$0999,$0222,$0DDD
	dc.w	$0000,$0AAC,$088A,$066A,$0468,$0446,$0224,$0420

	dc.w	$0444,$0666,$0AAC,$066A,$088A,$0420,$0AAC,$0620
	dc.w	$0A60,$0840,$0A86,$0420

Fist_coltab:
	dc.w	$0FD0,$0AAA,$0E96,$0666,$0ADF,$0000
Robot_coltab:
	dc.w	$0EC0,$0BBB,$0F60,$0666,$0D00,$0222

C_buffer:	ds.w	18+7

D_buffer:	ds.w	6

	Even

PCol0	= $467
PCol1	= $567
PCol2	= $667
PCol3	= $658
PCol4	= $558
PCol5	= $658
PCol6	= $738
PCol7	= $737
PCol8	= $806
PCol9	= $906
PCol10	= $846
PCol11	= $756
PCol12	= $757
PCol13	= $657
PCol14	= $656
PCol15	= $456
PCol16	= $556
PCol17	= $466

Main_Clist:
Col_lab2:
	dc.w	$0182,$0000
	dc.w	$0184,$0000
	dc.w	$0186,$0000
	dc.w	$0188,$0000
	dc.w	$018a,$0000
	dc.w	$018c,$0000
	dc.w	$018e,$0000
	dc.w	$0190,$0000
	dc.w	$0192,$0000
	dc.w	$0194,$0000
	dc.w	$0196,$0000
	dc.w	$0198,$0000
	dc.w	$019a,$0000
	dc.w	$019c,$0000
	dc.w	$019e,$0000

Sprlab:
	dc.w	$0120,$0000
	dc.w	$0122,$0000
	dc.w	$0124,$0000
	dc.w	$0126,$0000
	dc.w	$0128,$0000
	dc.w	$012a,$0000
	dc.w	$012c,$0000
	dc.w	$012e,$0000
	dc.w	$0130,$0000
	dc.w	$0132,$0000
	dc.w	$0134,$0000
	dc.w	$0136,$0000
	dc.w	$0138,$0000
	dc.w	$013a,$0000
	dc.w	$013c,$0000
	dc.w	$013e,$0000

	dc.w	$008e,$3091
	dc.w	$0090,$18c0
	dc.w	$0092,$0038
	dc.w	$0094,$00d0
Modlab:
	dc.w	$0108,planeb*3-40
	dc.w	$010a,56*3-40
	dc.w	$0100,$6400
	dc.w	$0104,4+4*8

Coplab1:
	dc.w	$00e0,$0004
	dc.w	$00e2,0
	dc.w	$00e8,$0004
	dc.w	$00ea,0+planeb
	dc.w	$00f0,$0004
	dc.w	$00f2,0+planeb*2
	dc.w	$00e4,Rotate_Buffer/$10000
Splitlab0:
	dc.w	$00ec,Rotate_Buffer/$10000
	dc.w	$00f4,Rotate_Buffer/$10000
	dc.w	$00e6,Rotate_Buffer&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*2)&$ffff
Coplab4:
	dc.w	$0102,$0000

	dc.w	$0084,$0000
Wraplab1:
	dc.w	$0086,ColSplit1&$ffff

	dc.w	$3007,$fffe
Back_Color1:
	dc.w	$0180,$0000

Coplab2:
line	SET	$30

	REPT	$d0
	dc.b	line-1,$df
	dc.w	$fffe,COPCOL2,0

line	SET	line+1

	ENDR

Copjumpin:
	dc.w	$fedf,$fffe
	dc.w	$0100,$0000
	dc.w	$0180,$0000

	dc.w	$0140,$0000
	dc.w	$0148,$0000
	dc.w	$0150,$0000
	dc.w	$0158,$0000
	dc.w	$0160,$0000
	dc.w	$0168,$0000
	dc.w	$0170,$0000
	dc.w	$0178,$0000

	dc.w	$ffdf,$fffe

	dc.w	$0092,$0040
	dc.w	$00e0,Score/$10000
	dc.w	$00e2,Score&$ffff
	dc.w	$00e4,(Score+912)/$10000
	dc.w	$00e6,(Score+912)&$ffff
	dc.w	$00e8,(Score+912*2)/$10000
	dc.w	$00ea,(Score+912*2)&$ffff
	dc.w	$00ec,(Score+912*3)/$10000
	dc.w	$00ee,(Score+912*3)&$ffff
	dc.w	$0102,$0000
	dc.w	$0108,$0000
	dc.w	$010a,$0000

	dc.w	$0192,$008

	dc.w	$0007,$fffe
	dc.w	$0100,$4000

Col_lab1:
	dc.w	$0182,$0000
	dc.w	$0184,$0000
	dc.w	$0186,$0000
	dc.w	$0188,$0000
	dc.w	$018a,$0000
	dc.w	$018c,$0000
	dc.w	$018e,$0000
	dc.w	$0190,$0000
	dc.w	$0192,$0000
	dc.w	$0194,$0000
	dc.w	$0196,$0000
	dc.w	$0198,$0000
	dc.w	$019a,$0000
	dc.w	$019c,$0000
	dc.w	$019e,$0000

	dc.w	$0101,$fffe,$0192,$0006

	dc.w	$0a01,$fffe,$0182,$e00
	dc.w	$0184,$e82,$0186,$ec0
	dc.w	$0188,$0c1,$018a,$080

	dc.w	$0b01,$fffe,$0190,$e82
	dc.w	$0d01,$fffe,$0190,$ec0

	dc.w	$0182,$a00,$0184,$a50
	dc.w	$0186,$a80,$0188,$080
	dc.w	$018a,$060
	dc.w	$0f01,$fffe,$0190,$fff
	dc.w	$1001,$fffe,$0190,$ec0
	dc.w	$0182,$888
	dc.w	$1101,$fffe,$0182,$aaa
	dc.w	$1201,$fffe,$0190,$e82
	dc.w	$0182,$ccc
	dc.w	$1301,$fffe,$0182,$aaa
	dc.w	$1401,$fffe,$0190,$e00
	dc.w	$0182,$888
	dc.w	$1701,$fffe,$0192,$0004

	dc.w	$0180,$0000

	dc.w	$0080,Main_Clist/$10000
	dc.w	$0082,Main_Clist&$ffff

	dc.w	$ffff,$fffe

ColSplit1:	;5
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab1:
	dc.w	$0086,ColSplit2&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit2:	;10
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab2:
	dc.w	$0086,ColSplit3&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit3:	;15
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab3:
	dc.w	$0086,Splitlab1&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN


Splitlab1:	;16
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000

	dc.w	$00e6,(Rotate_Buffer+56*3*16)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*16+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*16+56*2)&$ffff
	dc.w	$0102,$0000

Wraplab2:
	dc.w	$0086,ColSplit4&$ffff

	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit4:	;20
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab4:
	dc.w	$0086,ColSplit5&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit5:	;25
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab5:
	dc.w	$0086,ColSplit6&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit6:	;30
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab6:
	dc.w	$0086,ColSplit7&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit7:	;35
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab7:
	dc.w	$0086,ColSplit8&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit8:	;40
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab8:
	dc.w	$0086,ColSplit9&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit9:	;45
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab9:
	dc.w	$0086,ColSplit10&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit10:	;50
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab10:
	dc.w	$0086,ColSplit11&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit11:	;55
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab11:
	dc.w	$0086,ColSplit12&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit12:	;60
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab12:
	dc.w	$0086,Splitlab2&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

Splitlab2:	;64
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000

	dc.w	$00e6,(Rotate_Buffer+56*3*64)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*64+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*64+56*2)&$ffff
	dc.w	$0102,$0000
Wraplab3:
	dc.w	$0086,ColSplit13&$ffff

	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit13:	;65
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab13:
	dc.w	$0086,ColSplit14&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit14:	;70
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab14:
	dc.w	$0086,ColSplit15&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit15:	;75
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab15:
	dc.w	$0086,Splitlab3&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

Splitlab3:	;80
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*80)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*80+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*80+56*2)&$ffff
	dc.w	$0102,$0000
Wraplab4:
	dc.w	$0086,ColSplit16&$ffff
	dc.w	$0196,$000

	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit16:	;85
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab16:
	dc.w	$0086,ColSplit17&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

ColSplit17:	;90
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
CWraplab17:
	dc.w	$0086,Splitlab4&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

Splitlab4:
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*99)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*99+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*99+56*2)&$ffff
	dc.w	$0102,$0000
Wraplab5:
	dc.w	$0086,Splitlab5&$ffff

	dc.w	$0194,$0000
	dc.w	$0196,$0000
	dc.w	$019a,$0000
	dc.w	$019c,$0000

	dc.w	$0088,$0000	;Copjump1 -> RETURN

Splitlab5:
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
Wraplab6:
	dc.w	$0086,Splitlab6&$ffff
	dc.w	$0198,$0000

	dc.w	$0088,$0000	;Copjump1 -> RETURN

Splitlab6:
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
Wraplab7:
	dc.w	$0086,Splitlab7&$ffff

	dc.w	$0192,$0000
	dc.w	$019a,$0000

	dc.w	$0088,$0000	;Copjump1 -> RETURN

Splitlab7:
	dc.w	$0082,$0000
	dc.w	COPCOL2,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*194)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*194+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*194+56*2)&$ffff
	dc.w	$0102,$0000
Wraplab8:
	dc.w	$0086,Coplab3&$ffff

	dc.w	$0088,$0000	;Copjump1 -> RETURN

Coplab3:
	dc.w	$00e2,0
	dc.w	$00ea,0
	dc.w	$00f2,0+planeb*2
	dc.w	COPCOL2,$0000

	dc.w	$0086,ColSplit1&$ffff
	dc.w	$0082,$0000

	dc.w	$0088,$0000	;RETURN

Coplab5:
	dc.w	$00e2,0
	dc.w	$00ea,0
	dc.w	$00f2,0+planeb*2
	dc.w	COPCOL2,$0000

	dc.w	$0086,Splitlab1&$ffff

	dc.w	$008a,$0000	;Weiter!

; COPPERSPLITS DER THUNDERCLIST 
TSplitlab1:	;20
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*194)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*194+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*194+56*2)&$ffff
	dc.w	$0102,$0000
TWraplab2:
	dc.w	$0086,TSplitlab2&$ffff

	dc.w	$0088,$0000	;Copjump1 -> RETURN

TSplitlab2:	;39
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*194)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*194+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*194+56*2)&$ffff
	dc.w	$0102,$0000
TWraplab3:
	dc.w	$0086,TSplitlab3&$ffff

	dc.w	$0088,$0000	;Copjump1 -> RETURN

TSplitlab3:	;54
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*194)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*194+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*194+56*2)&$ffff
	dc.w	$0102,$0000
TWraplab4:
	dc.w	$0086,TSplitlab4&$ffff

	dc.w	$0088,$0000	;Copjump1 -> RETURN

TSplitlab4:	;67
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*194)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*194+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*194+56*2)&$ffff
	dc.w	$0102,$0000
TWraplab5:
	dc.w	$0086,TSplitlab5&$ffff

	dc.w	$0088,$0000	;Copjump1 -> RETURN

TSplitlab5:	;82
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*82)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*82+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*82+56*2)&$ffff
	dc.w	$0102,$0000
TWraplab6:
	dc.w	$0086,TColSplit1&$ffff
	dc.w	$0088,$0000	;Copjump1 -> RETURN

TColSplit1:	;94
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
CTWraplab1:
	dc.w	$0086,TColSplit2&$ffff
	dc.w	$0192,$000
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

TColSplit2:	;115
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
CTWraplab2:
	dc.w	$0086,TColSplit3&$ffff
	dc.w	$0194,$000
	dc.w	$019E,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

TColSplit3:	;121
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
CTWraplab3:
	dc.w	$0086,TColSplit4&$ffff
	dc.w	$0194,$000
	dc.w	$019E,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

TColSplit4:	;132
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
CTWraplab4:
	dc.w	$0086,TSplitlab6&$ffff
	dc.w	$0194,$000
	dc.w	$0198,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

TSplitlab6:	;161
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*161)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*161+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*161+56*2)&$ffff
	dc.w	$0102,$0000
TWraplab7:
	dc.w	$0086,TColSplit5&$ffff

	dc.w	$0194,$000
	dc.w	$019A,$000
	dc.w	$019E,$000

	dc.w	$0088,$0000	;Copjump1 -> RETURN

TColSplit5:	;166
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
CTWraplab5:
	dc.w	$0086,TColSplit6&$ffff
	dc.w	$0196,$000
	dc.w	$0088,$0000	;Copjump1 -> RETURN

TColSplit6:	;192
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
CTWraplab6:
	dc.w	$0086,TSplitlab7&$ffff
	dc.w	$0088,$BBB
	dc.w	$0184,$444
	dc.w	$0186,$777
	dc.w	$0188,$666
	dc.w	$018a,$999
	dc.w	$018c,$222
	dc.w	$0088,$0000	;Copjump1 -> RETURN


TSplitlab7:	;194
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
	dc.w	$00e6,(Rotate_Buffer+56*3*194)&$ffff
	dc.w	$00ee,(Rotate_Buffer+56*3*194+56*1)&$ffff
	dc.w	$00f6,(Rotate_Buffer+56*3*194+56*2)&$ffff
	dc.w	$0102,$0000
TWraplab8:
	dc.w	$0086,Coplab3&$ffff
	dc.w	$0088,$0000	;Copjump1 -> RETURN

Panzerlab:	;161
	dc.w	$0082,$0000
	dc.w	COPCOL3,$0000
	dc.w	$00e2,Dummy_Scroll&$ffff
	dc.w	$00ea,(Dummy_Scroll+panzerb)&$ffff
	dc.w	$00f2,(Dummy_Scroll+panzerb*2)&$ffff
	dc.w	$0102,$0000

	dc.w	$0086,TColSplit5&$ffff

	dc.w	$00e0,Dummy_Scroll/$10000
	dc.w	$00e8,Dummy_Scroll/$10000
	dc.w	$00f0,Dummy_Scroll/$10000

	dc.w	$0088,$0000	;Copjump1 -> RETURN


B_parallax:	incbin	work:sources/t3/bitplanes/w3_copper1.col

Area1:		include	W3_level1_area
Area2:		include	W3_level2_area
Area3:		include W3_glider_area
