	IFND	custom
	END
	ENDC

level_GFX	= $24000

para_bg		= $2b100
para_bob	= $2c960
fist_bob	= $15400

flash_buffer	= Rotate_Buffer+16384

;		- $2f0d8

;
;			    Level Daten
;

bob00 	= $00000
msk00 	= $00080
bob01 	= $000a0
msk01 	= $00290
bob02 	= $0030c
msk02 	= $004cc
bob03 	= $0053c
msk03 	= $006ec
bob04 	= $00758
msk04 	= $00918
bob05 	= $00988
msk05 	= $00b38
bob06 	= $00ba4
msk06 	= $00be4
bob07 	= $00bf4
msk07 	= $00ce4
bob08 	= $00d20
msk08 	= $00e20

bob09 	= $01234
msk09 	= $013f4
bob0a 	= $01464
msk0a 	= $01614
bob0b 	= $01680
msk0b 	= $016e8
bob0c 	= $01702
msk0c 	= $01762
bob0d 	= $0177a
msk0d 	= $017ea
bob0e 	= $01806
msk0e 	= $0181e
bob0f 	= $01824
msk0f 	= $01844
bob10 	= $0184c
msk10 	= $0187c
bob11 	= $01888
msk11 	= $018d0
bob12 	= $018e2
msk12 	= $01912
bob13 	= $0191e
msk13 	= $01976
bob14 	= $0198c
msk14 	= $01b0c
bob15 	= $01b6c
msk15 	= $01cec
bob16 	= $01d4c
msk16 	= $01ecc
bob17 	= $01f2c
msk17 	= $0216c
bob18 	= $021fc
msk18 	= $0243c
bob19 	= $024cc
msk19 	= $0261c
bob1a 	= $02670
msk1a 	= $02850
bob1b 	= $028c8
msk1b 	= $02ab8
bob1c 	= $02b34
msk1c 	= $02c74
bob1d 	= $02cc4
msk1d 	= $02e24
bob1e 	= $02e7c
msk1e 	= $02ecc
bob1f 	= $02ee0
msk1f 	= $02f60
bob20 	= $02f80
msk20 	= $03140
bob21 	= $031b0
msk21 	= $03370
bob22 	= $033e0
msk22 	= $035e0
bob23 	= $03660
msk23 	= $03860
bob24 	= $038e0
msk24 	= $03ae0

Abob00 	= $00000
Abob01 	= $00a80
Abob02 	= $015a8

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

		dc.w	-1

Cue_Table1:	dc.w	100,145
		dc.w	690,641
		dc.w	1360,385
		dc.w	2470,241
		dc.w	3031,465
		dc.w	3876,545
		dc.w	4649,225


Cue_Table2:	dc.w	80,70
		dc.w	978,531
		dc.w	90,1081
		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	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 Slave
		dc.l	Flyer_Info_3	;19 Licht-Flyer Shot
		dc.l	Kran_Info_1	;20 Kranboss
		dc.l	Panzer_Info_1	;21 Panzer
		dc.l	Panzer_Info_2	;22 Panzer

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	4		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*4		;B Modulo
		dc.w	planeb*4	;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	$fffeffff	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	4		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*4		;B Modulo
		dc.w	planeb*4	;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	$ffffffff	;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	4		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*4		;B Modulo
		dc.w	planeb*4	;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	$ffffffff	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	Bonus1_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;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.

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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	$ffffffff	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	-1*2		;A Modulo
		dc.w	-1*2*4		;B Modulo
		dc.w	planeb*4	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	$ffffffff	;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	4		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*4		;B Modulo
		dc.w	planeb*4	;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_Start	;Routine, die Bob verwaltet
		dc.l	Walker_AnimTableL	;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.

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	4		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*4		;B Modulo
		dc.w	planeb*4	;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	$ffffffff	;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	$ffffffff	;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	64		;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	$ffffffff	;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	$ffffffff	;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	112		;Breite in Pixels
		dc.w	48		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	14		;Breite einer Zeile der Maske in Bytes
		dc.w	7*2		;A Modulo
		dc.w	7*2*4		;B Modulo
		dc.w	planeb*4	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffffffff	;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	$ffffffff	;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	COLOUR		;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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2		;B Modulo
		dc.w	planeb*4	;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	20		;Hitpoints
		dc.l	Fly_Slave	;Routine, die Bob verwaltet
		dc.l	Fly_Slave_AnimTable	;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;Delay Init
		dc.l	$0101ff01	;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	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	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	$ffffffff	;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	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*4		;B Modulo
		dc.w	planeb*4	;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	Start_Kran	;Routine, die Bob verwaltet
		dc.l	Fly_Shot_AnimTable	;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;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.

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	4		;Tiefe in Planes
		dc.w	14		;Breite einer Zeile der Maske in Bytes
		dc.w	7*2		;A Modulo
		dc.w	7*2*4		;B Modulo
		dc.w	planeb*4	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffffffff	;Bob_I_AFWM
		dc.w	7		;Blit-Breite in Wrtern
		dc.w	14		;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	$ffffffff	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

Panzer_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	160		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	20		;Breite einer Zeile der Maske in Bytes
		dc.w	10*2		;A Modulo
		dc.w	10*2*4		;B Modulo
		dc.w	planeb*4	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffffffff	;Bob_I_AFWM
		dc.w	10		;Blit-Breite in Wrtern
		dc.w	20		;Blit-Breite in Bytes
		dc.w	-2		;Hitpoints
		dc.l	Panzer_Slave	;Routine, die Bob verwaltet
		dc.l	Panzer_AnimTable2	;Zeiger auf nchste Anim

		dc.w	2		;Delay
		dc.w	2		;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     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

Start_Panzer:
	move.w	#300,Scr_Y_Fix(a6)
	move.l	#Init_Panzer,Bob_Routine(a4)
	bra	Set_me_to_first
Init_Panzer:
	movem.w	Bob_X_Position(a4),d1-d2
	add.w	#51,d2
	sub.w	#46,d1
	moveq	#22,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	a4,Bob_Special_1(a0)
	move.l	#Panzer,Bob_Routine(a4)

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

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

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

Panzer:
;	bsr	handle_repos1

	movem.w	Bob_X_Position(a4),d0-d1	;Check if player is standing
	addi.w	#14-48,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-32,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)
;		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)
	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)
.no_deststart:
;		move.l	Pslave(a5),a4
;		move.l	Pslave(a4),a4
;		move.l	Pslave(a4),a4		;Calc position of rot-collision...
;		movem.w	pl_xpos.w,d0-d1
;		sub.w	O_XPOS(a5),d0
;		sub.w	O_YPOS(a5),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 ?
;		.if (less than) {
;			jsr	sqrt.w		;No, set check-object
;			move.w	d0,d4
;			move.b	Pangle(a5),d0
;			jsr	sin.w
;			move.w	d0,d2
;			move.b	Pangle(a5),d0
;			jsr	cos.w
;			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	O_XPOS(a5),d0
;			add.w	O_YPOS(a5),d1
;			movem.w	d0-d1,O_XPOS(a4)
;			st	O_COLEN(a4)
;		} .else {
;			sf	O_COLEN(a4)
;		}
;	}

	subq.w	#1,Pcount(a4)			;x-movement
	bpl.s	.no1
		move.w	#320,Pcount(a4)
		not.b	Pdir(a4)
.no1:
		moveq	#-1,d0
	tst.b	Pdir(a4)
	bne.s	.set1
		moveq	#1,d0
.set1:
	add.w	d0,Bob_X_Position(a4)
	tst.b	T_stand
	beq.s	.no_stand1
	move.w	d0,T_forceX
.no_stand1:
		moveq	#1,d0
	not.b	Pflag(a4)			;y-vibration
	bne.s	.set2
		moveq	#-1,d0
.set2:
	add.w	d0,Bob_Y_Position(a4)
	tst.b	T_stand
	beq.s	.no_stand2
	move.w	d0,T_forceY
.no_stand2:

	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.s	.start_xplos
;		move.l	a5,a0			;Set all objects to free
;		moveq	#10,d0
;		.do {
;			move.l	Pslave(a0),a0
;			st	O_USR2(a0)
;		} .loop d0
;		sf	lev3_maxpos
;		sf	boss_flag.w
;		jsr	set_backdrop.w
		move.l	#$1400,d0
		bsr	add_score
;		bsr	start_flash
;		move.l	a5,a0
		clr.w	Scr_Y_Fix(a6)
		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
	addq.b	#4,Pmode(a4)
	move.w	#6,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
	subq.b	#1,Puser1(a4)
	bpl.s	.no_start
	bsr	.start_norms
	move.b	#25,Puser1(a4)
	subq.w	#1,Puser0(a4)
	bpl.s	.exit_panzer
	clr.w	Puser1(a4)
	move.b	#130,Pangle(a4)
	addq.b	#4,Pmode(a4)
.no_start:
	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:
;	move.b	Pangle(a4),d2			;Turn arm-part
;	pea	(a4)
;	lea	turn_buffer0,a0
;	move.w	#panzer4,a1
;	lea	work_buffer0,a2
;	jsr	turn.w
;	move.l	(sp)+,a4

;	move.l	Pslave(a5),a4			;Set positions
;	move.l	O_XPOS(a5),O_XPOS(a4)
;	move.l	Pslave(a4),a4
;	move.l	O_XPOS(a5),O_XPOS(a4)
;	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	O_XPOS(a5),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(a5),d0
;	jsr	sin.w
;	move.w	d0,d3
;	move.b	Pangle(a5),d0
;	jsr	cos.w
;	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(a4),a4
;	moveq	#4,d7
;	.do {
;		move.l	Pslave(a4),a4
;		move.w	d5,d0
;		move.w	d6,d1
;		asr.w	#5,d0
;		asr.w	#5,d1
;		movem.w	d0-d1,O_XPOS(a4)
;		add.w	d4,d5
;		sub.w	d3,d6
;	} .loop d7
;	move.l	Pslave(a4),a4			;Set positions
;	move.l	(sp)+,O_XPOS(a4)
;	moveq	#2,d7
;	.do {
;		move.l	Pslave(a4),a4
;		move.l	O_XPOS(a5),O_XPOS(a4)
;	} .loop d7

;	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)
;	}

;	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
	rts

.start_norms:
	move.w	#130,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	#1,d2
		asr.w	#1,d3
		movem.w	Bob_X_Position(a4),d0-d1
		addi.w	#48,d0
		addi.w	#32,d1
		bsr	Start_Shoot
		addi.w	#8,d6
	move.w	(sp)+,d7
	dbf	d7,.start_loop
	rts

.start_shot:
	movem.w	Bob_X_Position(a4),d1-d2
;	addi.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)
	clr.w	Bob_Special_1(a0)
	move.w	#-1,Bob_Special_2(a0)
	clr.w	Bob_Special_3(a0)
	rts

.handle_shot:
	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_Slave:
	move.l	Bob_Special_1(a4),a0
	movem.w	Bob_X_Position(a0),d1-d2
	add.w	#51,d2
	sub.w	#46,d1
	movem.w	d1-d2,Bob_X_Position(a4)
	move.b	Bob_Used(a0),d0
	bmi	Out_Bob_Damage
	move.b	d0,Bob_Used(a4)
	rts

Panzer_AnimTable1:
	dc.l	AD_Bob+Abob01,0
	dc.w	0,0,51,16,10,16,16

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

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Kran
*---------------------------------------------------------------------------
Start_Kran:
	move.w	#2296,Scr_X_Fix(a6)
	move.w	#424,Scr_Y_Fix(a6)
	rts


*---------------------------------------------------------------------------
*	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.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)

;	sf	no_scroll.w
;	st	boss_flag.w

	move.w	#80,fly_delay
	sf	boss_shots

;	lea	pow_tab(pc),a0			;Calc power
;	jsr	make_power
	move.w	#100,d0
	move.w	d0,Bob_Power(a4)

	move.l	#.Init_Fly,Bob_Routine(a4)


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

	bra	Set_me_to_first

.Init_Fly:
	move.l	a4,-(sp)

	moveq	#18,d0
	movem.w	Bob_X_Position(a4),d1-d2
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.l	a4,a0
	move.l	(sp)+,a4

	move.l	a4,Bob_Special_1(a0)
	move.l	#Fly,Bob_Routine(a4)

Fly:
;	jsr	handle_repos1

	tst.w	Bob_Power(a4)			;Destroyed ?
	bne.s	.no_destruction
;		PLAY_FX	#13
		bsr	add_score
;		st	flag(a4)		;Free slave
;		sf	boss_flag.w
;		jsr	set_backdrop.w
	clr.l	Scr_X_Fix(a6)
	addi.w	#48+8,Bob_X_Position(a4)
	move.l	#$1500,d0			;Yes, 512 Points
	bra	Standart_Destruction

.no_destruction:
	tst.w	Bob_Hit(a4)			;Hit ?
	beq.s	.no_hit
	subq.w	#1,Bob_Hit(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
.wait:
	tst.w	Scr_X_Fix(a6)
	bne.s	.no_set
	move.w	Scr_X_Level_Pos(a6),Scr_X_Fix(a6)
	add.w	#32,Scr_X_Fix(a6)
	move.w	Bob_Y_Position(a4),d0
	sub.w	#20,d0
	move.w	d0,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


;	or.w	d1,d0				;Reached destination ?
;	.if (zero) {
	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
;		st	O_SHOW(a5)
	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)
;	clr.w	light_offset
;	move.l	O_XPOS(a5),light_xpos
;	addi.w	#48,light_xpos
;	addi.w	#38,light_ypos
	move.w	#1,Lldir(a4)
;	move.l	ptr(a5),a0
;	move.l	O_XPOS(a5),O_XPOS(a0)
;	st	O_SHOW(a0)
;	}
.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
;	st	light_flag
;	st	O_COLEN(a5)
	move.w	#60*2,Ldelay(a4)		;Wait 2 s
	bra	.end_fly
.wait_fly:
;	move.w	light_offset,d1			;Handle search-movement of light
;	add.w	ldir(a5),d1
;	cmpi.w	#-39,d1
;	.if (less than) {
;		moveq	#-39,d1
;		neg.w	ldir(a5)
;	} .else {
;		cmpi.w	#39,d1
;		.if (greater) {
;			moveq	#39,d1
;			neg.w	ldir(a5)
;		}
;	}
;	move.w	d1,light_offset

	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:
	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	#19,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_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.w			;Boss still present ?
;	beq.s	.no_boss			;No, kill shot
;
	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
;free_shot:

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

Fly_Slave:
	move.l	Bob_Special_1(a4),a0
	tst.b	Bob_Used(a0)
	bmi	Out_Bob_Damage
	move.w	Bob_X_Position(a0),d0
	and.w	#15,d0
	beq.s	.hide
	cmp.b	#8,Lmode(a0)
	blt.s	.hide
	move.l	Bob_X_Position(a0),Bob_X_Position(a4)
	sub.w	#16,Bob_X_Position(a4)
	move.b	#1<<BOB_URGENT,Bob_BlitStatus(a4)
	rts
.hide:
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	rts

Fly_Shot_AnimTable:
	dc.l	main_GFX+Mbob25,main_GFX+Mmsk25
	dc.w	0,0,15,2,2,12,12

Fly_Slave_AnimTable:
	dc.l	Flier_gfx,Flier_msk
	dc.w	0,0,48,0,0,0,0

boss_shots:	dc.w	0

Flier_gfx:
	dcb.w	48,0
Flier_msk:
	dcb.w	48,-1

*---------------------------------------------------------------------------
*	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	= 2293
Robot_Y	= 80

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)

	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
;	clr.l	lev3_forcex
;	st	lev3_scroll

;	lea	pow_tab(pc),a0			;Calc power
;	jsr	make_power
	move.w	#100,d0
	move.w	d0,big_power
;	sf	O_POW(a5)

	clr.w	Rphase(a4)

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

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

Robot:
;	bsr	handle_repos1

	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
;		jsr	set_backdrop.w
	lea	Switch_Handler(pc),a1
	bsr	AddHandler

	move.w	#30,switch_verz

	bra	Out_Bob_Damage
.not_free:
	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
;	bsr	T_floor_align
	subq.w	#2,d0
	move.w	d0,Bob_Y_Position(a4)

	move.l	Rroot(a4),a0
	tst.w	Ruser0(a0)
;	.if (minus) {
;		move.w	#13<<1,user0(a0)		;Start rumbleing
;		move.w	#-3,lev3_forcey
;	}

	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	#5<<8,Ruser1(a4)		;Yes, wait-mode
	not.b	Rdir(a4)
	sf	Rmode(a4)
	move.w	#120,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

	lea	Para_Cols2,a0
	bsr	Switch_to_para

	lea	Robot_flipI(pc),a3
	lea	fist_bob,a0
	lea	Rotate_Buffer+8192,a1
	jsr	Flip_Bobs

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

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

		move.w	#120,Ruser0(a4)		;action
		move.w	#5<<8,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:

	tst.w	Bob_Hit(a4)			;Hit ?
	beq.s	.no_hit
	subq.w	#1,Bob_Hit(a4)
	move.l	#flash_buffer+$1000,d0
	tst.b	Rdir(a4)
	beq.s	.hit_left
	add.w	#$c6c,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
	bsr	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	Rotate_Buffer+8192,0
		dc.w	0,0,106,32,12,20,16
		dc.l	Rotate_Buffer+8192+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


*---------------------------------------------------------------------------
*	Routine and AnimTable of     Fist
*---------------------------------------------------------------------------
Start_Fist:
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(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:
	lea	Para_Cols1,a0
	bsr	Switch_to_para

	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)

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

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

	rts

Switch_to_para:
	lea	Para_Clist,a1
	move.w	#6,d7
.set_cols:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.set_cols

	move.w	#16,Fade_Position
	bsr	Fade_Para

	move.l	#flash_buffer,bltdpth(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#$0000,bltdmod(a5)
	move.w	#$0000,bltamod(a5)
	move.l	#-1,bltafwm(a5)

	move.w	Scr_Y_Play_Anf(a6),d0
	add.w	#192,d0
	cmp.w	#208+48,d0
	blt.s	.ok
	sub.w	#208+48,d0
.ok:
	mulu	#planeb*4,d0
	add.l	#GameBpl2,d0
	moveq	#0,d1
	move.w	Scr_X_Level_Pos(a6),d1
	lsr.w	#3,d1
	add.l	d1,d0

	move.l	d0,bltapth(a5)

	move.w	#64*16*4+22,bltsize(a5)
	waitblt				;Alles kopiert!

	move.l	#$60000,d0
	move.l	#para_bg,d1
	move.w	#planeb-10,bltdmod(a5)
	moveq	#3,d7
.loop:
	move.l	d0,bltdpth(a5)
	move.l	d1,bltapth(a5)

	move.w	#64*3*208+5,bltsize(a5)

	waitblt

	add.l	#10,d0
	dbf	d7,.loop

	add.w	#32,Bob_X_Position(a4)
	sf	Bob_BlitStatus(a4)

	lea	GameBpl0,a0
	lea	GameBpl1,a1
	move.w	#6863,d7
	moveq	#0,d0
.clear:
	move.l	d0,(a0)+
	move.l	d0,(a1)+
	dbf	d7,.clear

	move.w	#$0100,RestFunction

	move.l	#SetParaClist,Clist_Handler


	move.w	#planeb*3,Scr_Plane_Width(a6)
	move.w	#0,Scr_Y_Play_Anf(a6)

	bsr	Wait_Line
	bsr	SetParaClist

	bsr	Fade_Para2

	lea	Convert_Table1(pc),a0
	bsr	Convert_to_3planes

	lea	para_flipI(pc),a3
	lea	para_bob,a0
	lea	Rotate_Buffer,a1
	jsr	Flip_Bobs
	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

init_fist:
;	st	boss_flag.w


;	sf	O_POW(a5)

	rts

Fist:
;	jsr	handle_repos1

;	lea	rumble(a5),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+$1000,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
;		jsr	set_backdrop.w
		move.l	#$1347,d0
		bsr	add_score

	lea	Switch_Handler(pc),a1
	bsr	AddHandler

	move.w	#30,switch_verz

	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:
;	movem.w	Bob_X_Position(a4),d0-d1
;	addi.w	#20,d0
;	addi.w	#80,d1
;	bsr	check_obj_kollision
;	bne.s	.ground
	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	#13<<1,rumble(a5)
;		move.w	#-3,lev3_forcey
;		PLAY_FX	#49
		bra	.next_step
.no_ground:
	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
;	}
	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
;	.if (plus) {
;		lea	rumble_tab(pc),a1
;		move.w	0(a1,d0.w),lev3_forcey
;		subq.w	#2,(a0)
;	} .else {
;		clr.w	lev3_forcey
;	}
	rts


.rumble_tab:
	dc.w	1,0,-1,-2,-1,0,1,2,3,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,118,75

big_power:	dc.w	0

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

Switch_Handler:
	subq.w	#1,switch_verz
	bpl	.out

	move.l	a0,-(sp)

	bsr	Fade_Para3

	move.l	Act_Scr_Structure,a6

	waitblt

	;Initialize BlitterRegister
	move.l	Scr_Blt_Mask(a6),bltafwm(a5)
	move.w	Scr_Blt_A_Modulo(a6),bltamod(a5)
	move.w	Scr_Blt_D_Modulo(a6),bltdmod(a5)
	move.w	Scr_Blt_Con_0(a6),bltcon0(a5)
	clr.w	bltcon1(a5)

	move.w	#planeb*4,Scr_Plane_Width(a6)

	move.l	a4,-(sp)
	move.l	Scr_Level_Pointer(a6),a3
	move.l	Scr_Refresh_Field(a6),a4
	bsr	Create_single_Page

	move.l	Scr_Level_Pointer(a6),a3
	move.l	Scr_Supply_Field(a6),a4
	bsr	Create_single_Page

	bsr	Wait_Line
	bsr	Level1_Clist
	move.l	#Main_Clist,cop1lch(a5)

	move.l	Scr_Level_Pointer(a6),a3
	move.l	Scr_Supply_Field(a6),a4
	bsr	Create_single_Page

	move.l	(sp)+,a4

	bsr	Wait_Line

	move.l	#Level1_Clist,Clist_Handler

	move.w	#$09f0,RestFunction

	lea	Convert_Table2(pc),a0
	bsr	Convert_to_4planes

	clr.l	Scr_X_Fix(a6)

	bsr	Fade_Para4

	move.l	(sp)+,a0
	move.l	#Return,-4(a0)
.out:
	rts

switch_verz:	dc.w	0

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	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

Convert_to_3planes:
	move.l	(a0)+,d0
	beq.s	.out
	move.l	d0,a1
	move.w	#3,Bob_I_Depth(a1)
	move.w	Bob_I_B_Modulo(a1),d0
	asr.w	#2,d0
	sub.w	d0,Bob_I_B_Modulo(a1)
	sub.w	#planeb,Bob_I_D_Modulo(a1)
	move.l	Bob_I_Next_Anim(a1),a1
.set_anims:
	move.l	(a0)+,d0
	beq.s	Convert_to_3planes
	move.l	d0,(a1)
	add.l	#22,a1
	bra.s	.set_anims
.out:
	move.l	#para_bob+Pbob1a,Smart_Structure+Bob_Graphics
	move.l	#para_bob+Pmsk1a,Smart_Structure+Bob_Mask
	rts

Convert_to_4planes:
	move.l	(a0)+,d0
	beq.s	.out
	move.l	d0,a1
	move.w	#4,Bob_I_Depth(a1)
	move.w	Bob_I_B_Modulo(a1),d0
	ext.l	d0
	divs	#3,d0
	asl.w	#2,d0
	move.w	d0,Bob_I_B_Modulo(a1)
	add.w	#planeb,Bob_I_D_Modulo(a1)
	move.l	Bob_I_Next_Anim(a1),a1
.set_anims:
	move.l	(a0)+,d0
	beq.s	Convert_to_4planes
	move.l	d0,(a1)
	add.l	#22,a1
	bra.s	.set_anims
.out:
	move.l	#main_GFX+Mbob25,Smart_Structure+Bob_Graphics
	move.l	#main_GFX+Mmsk25,Smart_Structure+Bob_Mask
	rts



para_flipI:	dc.w	Pbob12,13*3,16/8
		dc.w	Pbob13,14*3,16/8
		dc.w	Pbob14,13*3,16/8
		dc.w	Pbob15,15*3,16/8
		dc.w	Pbob16,15*3,16/8
		dc.w	-1

Convert_Table1:
	dc.l	Rocket_Info_1
	 dc.l	Rotate_Buffer,Rotate_Buffer+13*3*2,Rotate_Buffer+27*3*2,Rotate_Buffer+40*3*2
	 dc.l	para_bob+Pbob16,para_bob+Pbob15,para_bob+Pbob14,para_bob+Pbob13,para_bob+Pbob12
	 dc.l	para_bob+Pbob12+12*3*2,para_bob+Pbob13+12*3*2,para_bob+Pbob14+12*3*2,para_bob+Pbob15+12*3*2,para_bob+Pbob16+12*3*2
	 dc.l	Rotate_Buffer+40*3*2+14*3*2,Rotate_Buffer+27*3*2+12*3*2,0
	dc.l	Explo_Info_1
	 dc.l	para_bob+Pbob00,para_bob+Pbob01,para_bob+Pbob02,para_bob+Pbob03,para_bob+Pbob04
	 dc.l	para_bob+Pbob05,para_bob+Pbob06,para_bob+Pbob07,para_bob+Pbob08,para_bob+Pbob09,0
	dc.l	Explo_Info_2
	 dc.l	para_bob+Pbob0a,para_bob+Pbob0b,para_bob+Pbob0c,para_bob+Pbob0d,para_bob+Pbob0e
	 dc.l	para_bob+Pbob0f,para_bob+Pbob10,para_bob+Pbob11,0
	dc.l	Mine_Info_1
	 dc.l	para_bob+Pbob17,para_bob+Pbob18,para_bob+Pbob19,para_bob+Pbob18,para_bob+Pbob19,para_bob+Pbob18,para_bob+Pbob19,0
	dc.l	Rocket_Info_2,0
	dc.l	Smart_Info,0
	dc.l	0

Convert_Table2:
	dc.l	Rocket_Info_1
	 dc.l	main_Buffer+Mbob18-Mbob18,main_Buffer+Mbob19-Mbob18,main_Buffer+Mbob1a-Mbob18,main_Buffer+Mbob1b-Mbob18
	 dc.l	main_GFX+Mbob1c,main_GFX+Mbob1b,main_GFX+Mbob1a,main_GFX+Mbob19,main_GFX+Mbob18
	 dc.l	main_GFX+Mbob18+12*4*2,main_GFX+Mbob19+13*4*2,main_GFX+Mbob1a+12*4*2,main_GFX+Mbob1b+14*4*2,main_GFX+Mbob1c+14*4*2
	 dc.l	main_Buffer+Mbob1b-Mbob18+14*4*2,main_Buffer+Mbob1a-Mbob18+12*4*2,0
	dc.l	Explo_Info_1
	 dc.l	main_GFX+Mbob00,main_GFX+Mbob01,main_GFX+Mbob02,main_GFX+Mbob03,main_GFX+Mbob04
	 dc.l	main_GFX+Mbob05,main_GFX+Mbob06,main_GFX+Mbob07,main_GFX+Mbob08,main_GFX+Mbob09,0
	dc.l	Explo_Info_2
	 dc.l	main_GFX+Mbob0a,main_GFX+Mbob0b,main_GFX+Mbob0c,main_GFX+Mbob0d,main_GFX+Mbob0e
	 dc.l	main_GFX+Mbob0f,main_GFX+Mbob10,main_GFX+Mbob11,0
	dc.l	Mine_Info_1
	 dc.l	main_GFX+Mbob26,main_GFX+Mbob27,main_GFX+Mbob28,main_GFX+Mbob27,main_GFX+Mbob28,main_GFX+Mbob27,main_GFX+Mbob28,0
	dc.l	Rocket_Info_2,0
	dc.l	Smart_Info,0
	dc.l	0

Pbob00 	= $00000
Pmsk00 	= $000d8
Pbob01 	= $00120
Pmsk01 	= $00264
Pbob02 	= $002d0
Pmsk02 	= $00438
Pbob03 	= $004b0
Pmsk03 	= $00630
Pbob04 	= $006b0
Pmsk04 	= $00830
Pbob05 	= $008b0
Pmsk05 	= $00a30
Pbob06 	= $00ab0
Pmsk06 	= $00c24
Pbob07 	= $00ca0
Pmsk07 	= $00de4
Pbob08 	= $00e50
Pmsk08 	= $00f70
Pbob09 	= $00fd0
Pmsk09 	= $01090
Pbob0a 	= $010d0
Pmsk0a 	= $01124
Pbob0b 	= $01140
Pmsk0b 	= $0116a
Pbob0c 	= $01178
Pmsk0c 	= $011c0
Pbob0d 	= $011d8
Pmsk0d 	= $0122c
Pbob0e 	= $01248
Pmsk0e 	= $0129c
Pbob0f 	= $012b8
Pmsk0f 	= $0130c
Pbob10 	= $01328
Pmsk10 	= $01376
Pbob11 	= $01390
Pmsk11 	= $013de
Pbob12 	= $013f8
Pmsk12 	= $01446
Pbob13 	= $01460
Pmsk13 	= $014b4
Pbob14 	= $014d0
Pmsk14 	= $0151e
Pbob15 	= $01538
Pmsk15 	= $01592
Pbob16 	= $015b0
Pmsk16 	= $0160a
Pbob17 	= $01628
Pmsk17 	= $01688
Pbob18 	= $016a8
Pmsk18 	= $01744
Pbob19 	= $01778
Pmsk19 	= $01838
Pbob1a 	= $01878
Pmsk1a 	= $018d2

*---------------------------------------------------------------------------
*	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)
		move.l	a0,Broot(a4)
		move.l	a0,a4
	dbf	d7,.init

	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	speed(a5)
;		bmi.s	.no_fx
;		PLAY_FX	#57
;	} .else {
;		tst.w	speed(a5)
;		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 !
	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:
	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:
	moveq	#$60,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	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)

	bra	Test_Bob_Out

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)
	bsr	rnd
	and.w	#511,d0
	move.w	d0,Bob_Special_2(a4)	;Nchster Wait-Wert!
	bra	Test_Bob_Out

Diamond_Count:	dc.w	0

Diamond_AnimTable:
		dc.l	main_GFX+Mbob29,main_GFX+Mmsk29
		dc.w	0,0,16,2,2,12,11
		dc.l	main_GFX+Mbob2a,main_GFX+Mmsk2a
		dc.w	0,0,16,2,2,12,11
		dc.l	main_GFX+Mbob2b,main_GFX+Mmsk2b
		dc.w	0,0,16,2,2,12,11
		dc.l	main_GFX+Mbob2a,main_GFX+Mmsk2a
		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	main_GFX+Mbob26,main_GFX+Mmsk26
		dc.w	0,16,16,2,2,12,11
		dc.l	main_GFX+Mbob27,main_GFX+Mmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main_GFX+Mbob28,main_GFX+Mmsk28
		dc.w	0,0,32,2,2,12,11
		dc.l	main_GFX+Mbob27,main_GFX+Mmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main_GFX+Mbob28,main_GFX+Mmsk28
		dc.w	0,0,32,2,2,12,11
		dc.l	main_GFX+Mbob27,main_GFX+Mmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main_GFX+Mbob28,main_GFX+Mmsk28
		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	#Return,-4(a0)
	clr.w	Zoom_finished
.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
	move.w	#$f00,$dff180
	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	4*32*4(a0),a3

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

Rotate_4:
	move.l	#Rotate_1,Rotate_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
	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	Rotate_1
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
*---------------------------------------------------------------------------

RSPEED	= 8

start_rocket:
	cmp.b	#2,T_rocket_anz
	beq.s	.out				;Schon genug Raketen!

	moveq	#6,d0
	bsr	.get_origin		;Get start-position

	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	tst.w	d7
	bmi.s	.out
	tst.b	T_face			;Which direction ?
	beq.s	.to_left
	moveq	#RSPEED<<1,d0	;Right
	move.b	#128,d1
	bra.s	.set
.to_left:
	moveq	#-RSPEED<<1,d0	;Left
	moveq	#0,d1
.set:
	clr.w	Bob_Anim_Delay(a4)
	move.w	d0,Bob_Special_1(a4)
	clr.w	Bob_Special_2(a4)
	move.b	d1,Bob_Special_3(a4)
	movem.w	Bob_X_Position(a4),d0-d1
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1
	asl.w	#3,d0
	asl.w	#3,d1
	movem.w	d0-d1,Bob_Special_4(a4)	;Store in fix-format
	sf	Bob_Special_3+1(a4)		;Clear counter
	move.b	#BOB_NOCOL,Bob_Used(a4)
	addq.b	#1,T_rocket_anz
.out:
	rts

.get_origin:
	move.w	T_posX,d1
	move.w	T_posY,d2
	add.w	Scr_X_Level_Pos(a6),d1
	add.w	Scr_Y_Level_Pos(a6),d2
	tst.w	T_face
	beq.s	.ok
	add.w	#16,d1
.ok:
	cmp.w	#22,T_anim
	bne.s	.no_knee
	add.w	#16,d2
.no_knee:
	rts

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)
	bsr	rnd
	move.w	d0,d6
	bsr	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
	bsr	sin
	move.w	d0,d2
	move.b	Bob_Special_3(a4),d0
	bsr	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)

	movem.w	Bob_X_Position(a4),d0-d1	;Check wall-collision
	bsr	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+Mbob18-Mbob18,main_Buffer+Mmsk18-Mbob18
		dc.w	0,0,13,2,2,12,11
		dc.l	main_Buffer+Mbob19-Mbob18,main_Buffer+Mmsk19-Mbob18
		dc.w	0,0,14,2,2,12,11
		dc.l	main_Buffer+Mbob1a-Mbob18,main_Buffer+Mmsk1a-Mbob18
		dc.w	0,0,13,2,2,12,11
		dc.l	main_Buffer+Mbob1b-Mbob18,main_Buffer+Mmsk1b-Mbob18
		dc.w	0,0,15,2,2,12,11

		dc.l	main_GFX+Mbob1c,main_GFX+Mmsk1c
		dc.w	0,0,15,2,2,12,11
		dc.l	main_GFX+Mbob1b,main_GFX+Mmsk1b
		dc.w	0,0,15,2,2,12,11
		dc.l	main_GFX+Mbob1a,main_GFX+Mmsk1a
		dc.w	0,0,13,2,2,12,11
		dc.l	main_GFX+Mbob19,main_GFX+Mmsk19
		dc.w	0,0,14,2,2,12,11

		dc.l	main_GFX+Mbob18,main_GFX+Mmsk18
		dc.w	0,0,13,2,2,12,11

		dc.l	main_GFX+Mbob18+12*4*2,main_GFX+Mmsk18+12*2
		dc.w	0,0,13,2,2,12,11
		dc.l	main_GFX+Mbob19+13*4*2,main_GFX+Mmsk19+13*2
		dc.w	0,0,14,2,2,12,11
		dc.l	main_GFX+Mbob1a+12*4*2,main_GFX+Mmsk1a+12*2
		dc.w	0,0,13,2,2,12,11
		dc.l	main_GFX+Mbob1b+14*4*2,main_GFX+Mmsk1b+14*2
		dc.w	0,0,15,2,2,12,11
		dc.l	main_GFX+Mbob1c+14*4*2,main_GFX+Mmsk1c+14*2
		dc.w	0,0,15,2,2,12,11
		dc.l	main_Buffer+Mbob1b-Mbob18+14*4*2,main_Buffer+Mmsk1b-Mbob18+14*2
		dc.w	0,0,15,2,2,12,11
		dc.l	main_Buffer+Mbob1a-Mbob18+12*4*2,main_Buffer+Mmsk1a-Mbob18+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

	bsr	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(pc),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
*---------------------------------------------------------------------------
Start_Shoot:
	move.l	a4,-(sp)
	movem.l	d2-d3,-(sp)
	move.w	d1,d2
	move.w	d0,d1
	lea	Area_Enter_Vector(pc),a1
	moveq	#7,d0
	bsr	Search_Bob_Entry
	movem.l	(sp)+,d2-d3
	tst.w	d7
	bmi.s	.no
	move.w	d2,Bob_Special_1(a4)
	move.w	d3,Bob_Special_2(a4)
.no:
	move.l	(sp)+,a4
	rts

Shoot_Start:
	move.l	#Shoot,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
Shoot:
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1
	addq.w	#3,d0
	addq.w	#3,d1

	move.w	T_posX,d2
	add.w	Scr_X_Level_Pos(a6),d2
	add.w	#10,d2
	cmp.w	d0,d2
	bgt.s	.no_hit
	add.w	#18,d2
	cmp.w	d0,d2
	blt.s	.no_hit

	move.w	T_posY,d3
	add.w	Scr_Y_Level_Pos(a6),d3
	addq.w	#4,d3
	cmp.w	d1,d3
	bgt.s	.no_hit
	add.w	#24,d3
	cmp.w	d1,d3
	blt.s	.no_hit

	sub.w	#9,d2
	sub.w	d0,d2
	bmi.s	.ok
	moveq	#0,d2
.ok:
	move.b	d2,T_hitdir

	bsr	make_plhit
	bra	Out_Bob_Damage

.no_hit:
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.destruct	

	move.w	Bob_Special_1(a4),d0
	add.w	d0,Bob_Special_3(a4)
	move.w	Bob_Special_3(a4),d0
	asr.w	#6,d0
	add.w	d0,Bob_X_Position(a4)
	move.w	Bob_Special_3(a4),d0
	and.w	#$ffc0,d0
	sub.w	d0,Bob_Special_3(a4)

	move.w	Bob_Special_2(a4),d0
	add.w	d0,Bob_Special_4(a4)
	move.w	Bob_Special_4(a4),d0
	asr.w	#6,d0
	add.w	d0,Bob_Y_Position(a4)

	move.w	Bob_Special_4(a4),d0
	and.w	#$ffc0,d0
	sub.w	d0,Bob_Special_4(a4)

	bra	Standart_BobAnim

.destruct:
	move.l	a4,-(sp)

	move.w	d1,d2
	move.w	d0,d1
	subq.w	#8,d1
	subq.w	#8,d2
	moveq	#2,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.b	#BOB_NOCOL,Bob_Used(a4)

	move.l	(sp)+,a4
	bra	Out_Bob_Damage	

Shoot_AnimTable:
		dc.l	main_GFX+Mbob17,main_GFX+Mmsk17
		dc.w	0,0,7,1,1,5,5
		dc.w	ENTRY_END
		dc.l	Shoot_AnimTable

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Bonus1-4
*---------------------------------------------------------------------------
Move_Bonus_Jump:
	movem.w	Bob_X_Position(a4),d6-d7
	move.w	d6,d0
	move.w	d7,d1

	tst.w	Bob_Special_1(a4)
	bpl.s	.add
	subq.w	#8,d0
	bra.s	.sub
.add:
	addq.w	#8,d0
.sub:
	bsr	check_obj_kollision		;Way blocked ?
	bne.s	.no_xmove
	add.w	Bob_Special_1(a4),d6		;X - Movement
	cmpi.w	#304,d6
	bhi.s	.no_xmove
	sub.w	Bob_Special_1(a4),d6
.no_xmove:
	move.w	Bob_Special_2(a4),d2		;Get jump-index
	cmpi.w	#24*2,d2			;Maximum reached ?
	blt.s	.not_ready
.ready:
	move.l	#Move_Bonus,Bob_Routine(a4)	;Just let extra flow up
	bra.s	.exit_jmp
.not_ready:

	lea	.ExtBounce(pc),a0		;Jump-table
	move.w	d6,d0
	move.w	d7,d1
	move.w	0(a0,d2.w),d5
	bpl.s	.add2
	sub.w	#8,d1
	bra.s	.sub2
.add2:
	addq.w	#8,d1
.sub2:
	bsr	check_obj_kollision		;Way blocked ?
	bne.s	.ready
	add.w	d5,d7				;Y - Movement
.no_ymove:
	addq.w	#2,Bob_Special_2(a4)		;Increase index
.exit_jmp:
	movem.w	d6-d7,Bob_X_Position(a4)
	bra	Bonus_Check_Collect

.ExtBounce:
	dc.w	-6,-6,-5,-5,-4,-4,-3,-3,-2,-2,-1,-1,0,0
	dc.w	1,1,1,1,2,2,3,3,4,4,5


Move_Bonus:
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1

	addq.w	#8,d0

	bsr	check_obj_kollision
	bne.s	.no_move

	move.w	eights_pixel(pc),d0
	sub.w	d0,Bob_Y_Position(a4)
.no_move:

	subq.w	#1,Bob_Special_4(a4)
	bpl	.wait

	btst	#1,Bob_Special_4+1(a4)
	beq.s	.clear
	bset	#NO_BOBBLIT,Bob_BlitStatus(a4)
	bra.s	.set
.clear:
	bclr	#NO_BOBBLIT,Bob_BlitStatus(a4)
.set:
	cmp.w	#-50,Bob_Special_4(a4)
	bgt.s	.wait

	move.w	Bob_X_Position(a4),d1
	move.w	Bob_Y_Position(a4),d2

	move.w	Bob_to_Info_Offs(a4),d3
	cmp.w	#2,Bob_I_Mask_Width(a4,d3.w)
	beq.s	.start
	addq.w	#4,d1
	addq.w	#2,d2

.start:
	move.l	a4,-(sp)
	moveq	#2,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	(sp)+,a4
	bra	Out_Bob_Damage
.wait:
Bonus_Check_Collect:
	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

	move.w	14(a0),d0
	cmp.w	#BONUS_POWER,d0
	beq.s	.power
	cmp.w	#BONUS_WEAPON1,d0
	beq.s	.weapon1
	cmp.w	#BONUS_WEAPON2,d0
	beq.s	.weapon2
	cmp.w	#BONUS_WEAPON3,d0
	beq.s	.weapon3
	cmp.w	#BONUS_SHIELD,d0
	beq.s	.shield
	cmp.w	#BONUS_ROCKET,d0
	beq.s	.rocket
	bra	Out_Bob_Damage
.rocket:
	st	T_rocket
	bra	Out_Bob_Damage
.shield:
	st	T_shield
	bra	Out_Bob_Damage
.weapon1:
	moveq	#0,d0
.do_weapon:
	cmp.b	T_weapon_new,d0
	beq.s	.powup
	move.b	d0,T_weapon_new
	bra	Out_Bob_Damage
.powup:
	cmp.b	#2,T_power_new
	beq	Out_Bob_Damage
	addq.b	#1,T_power_new
	bra	Out_Bob_Damage
.weapon2:
	moveq	#1,d0
	bra.s	.do_weapon
.weapon3:
	moveq	#2,d0
	bra.s	.do_weapon

.power:
	move.b	#64,T_energy
	bra	Out_Bob_Damage

.no_collect:
	bra	Test_Bob_Out

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	main_GFX+Mbob16,main_GFX+Mmsk16
		dc.w	0,0,12,BONUS_POWER,2,12,8
Bonus2_AnimTable:
		dc.l	main_GFX+Mbob1f,main_GFX+Mmsk1f
		dc.w	0,0,16,BONUS_WEAPON3,2,12,19
Bonus3_AnimTable:
		dc.l	main_GFX+Mbob1e,main_GFX+Mmsk1e
		dc.w	0,0,16,BONUS_WEAPON2,2,12,19
Bonus4_AnimTable:
		dc.l	main_GFX+Mbob1d,main_GFX+Mmsk1d
		dc.w	0,0,16,BONUS_WEAPON1,2,12,19
Bonus5_AnimTable:
		dc.l	main_GFX+Mbob18,main_GFX+Mmsk18
		dc.w	0,0,13,BONUS_ROCKET,2,12,11
Bonus6_AnimTable:
		dc.l	main_GFX+Mbob23,main_GFX+Mmsk23
		dc.w	0,0,16,BONUS_SHIELD,2,12,12
Bonus7_AnimTable:
		dc.l	main_GFX+Mbob24,main_GFX+Mmsk24
		dc.w	0,0,16,BONUS_ONEUP,2,12,12

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Extrabox
*---------------------------------------------------------------------------
Extrabox:
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1

	move.w	d0,d2
	add.w	#32,d2
	bsr	check_foot_frame
	beq.s	.no_feet
	st	T_stand
	move.w	Bob_Y_Position(a4),d1
	bsr	alias_feet
.no_feet:
	tst.w	Bob_Hit(a4)
	beq	Test_Bob_Out
	bsr	Get_Next_Bob_Frame
	move.l	#Area_Enter_Vector,Bob_Entry_Adress(a4)
	move.l	#Test_Bob_Out,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)

	move.l	a4,-(sp)
	moveq	#4,d0
	move.w	Bob_X_Position(a4),d1
	move.w	Bob_Y_Position(a4),d2
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.l	#-$00060000,Bob_Special_1(a4)
	move.l	a4,a0
	move.l	(sp)+,a4

	move.w	#2,Bob_Special_3(a0)

	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	T_posX,d0
	bpl.s	.ok
	move.w	#-2,Bob_Special_3(a0)
.ok:

	;Inhalt der Box starten.

	move.w	Bob_X_Position(a4),d5
	move.w	Bob_Y_Position(a4),d6
	addi.w	#12,d5
	subi.w	#24,d6
	lea	extra_xtab(pc),a2
	jsr	rnd
	and.w	#$0060,d0
	lea	(a2,d0.w),a2
	moveq	#6,d4
.loop:
	btst	d4,Bob_Special_4+1(a4)
	beq.s	.no_start
	move.w	d4,d0
	move.w	d5,d1
	move.w	d6,d2
	bsr	.init_extra
.no_start:
	dbf	d4,.loop

	bra	Test_Bob_Out

.init_extra:
	move.l	a4,-(sp)

	lea	Area_Enter_Vector(pc),a1
	movem.l	a2/d0,-(sp)
	moveq	#5,d0
	bsr	Search_Bob_Entry
	movem.l	(sp)+,a2/d0
	mulu	#22,d0
	add.l	#Bonus1_AnimTable,d0
	move.l	d0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.w	#450,Bob_Special_4(a4)

	move.w	(a2)+,Bob_Special_1(a4)		;X - Dir

	move.w	(a2)+,Bob_Special_2(a4)

	move.l	(sp)+,a4
	rts

extra_xtab:	dc.w	0,0,2,8,-1,2,1,10,-2,0,0,8,2,2
		dc.l	0

		dc.w	-1,2,-2,0,0,8,2,8,0,0,2,2,1,10
		dc.l	0

		dc.w	2,8,1,10,2,2,0,8,-1,2,0,0,-2,0
		dc.l	0

		dc.w	0,8,-1,2,2,2,1,10,2,8,-2,0,0,0
		dc.l	0

Box_Deckel:
	move.w	Bob_Special_3(a4),d0
	add.w	d0,Bob_X_Position(a4)
	move.w	Bob_Special_1(a4),d0
	add.w	d0,Bob_Y_Position(a4)
	add.l	#$00008000,Bob_Special_1(a4)

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

	bsr	check_obj_kollision
	beq	Test_Bob_Out
	moveq	#0,d0
	bra	Standart_Destruction

Box_AnimTable:
		dc.l	main_GFX+Mbob20,main_GFX+Mmsk20
		dc.w	0,0,24,2,2,28,20
		dc.l	main_GFX+Mbob22,main_GFX+Mmsk22
		dc.w	0,10,14,2,2,28,20
		dc.w	ENTRY_END
		dc.l	Box_AnimTable

Deckel_AnimTable:
		dc.l	main_GFX+Mbob21,main_GFX+Mmsk21
		dc.w	0,0,19,2,2,28,20

*---------------------------------------------------------------------------
*	Routine and AnimTable of      BigExplo
*---------------------------------------------------------------------------

Explo_AnimTable:
		dc.l	main_GFX+Mbob00,main_GFX+Mmsk00
		dc.w	0,13,18,0,0,0,0
		dc.l	main_GFX+Mbob01,main_GFX+Mmsk01
		dc.w	0,5,27,0,0,0,0
		dc.l	main_GFX+Mbob02,main_GFX+Mmsk02
		dc.w	0,2,30,0,0,0,0
		dc.l	main_GFX+Mbob03,main_GFX+Mmsk03
		dc.w	0,0,32,0,0,0,0
		dc.l	main_GFX+Mbob04,main_GFX+Mmsk04
		dc.w	0,0,32,0,0,0,0
		dc.l	main_GFX+Mbob05,main_GFX+Mmsk05
		dc.w	0,0,32,0,0,0,0
		dc.l	main_GFX+Mbob06,main_GFX+Mmsk06
		dc.w	0,0,31,0,0,0,0
		dc.l	main_GFX+Mbob07,main_GFX+Mmsk07
		dc.w	0,0,27,0,0,0,0
		dc.l	main_GFX+Mbob08,main_GFX+Mmsk08
		dc.w	0,0,24,0,0,0,0
		dc.l	main_GFX+Mbob09,main_GFX+Mmsk09
		dc.w	0,0,16,0,0,0,0
		dc.w	END_OUT_DAMAGE

Explo2_AnimTable:
		dc.l	main_GFX+Mbob0a,main_GFX+Mmsk0a
		dc.w	0,0,14,0,0,0,0
		dc.l	main_GFX+Mbob0b,main_GFX+Mmsk0b
		dc.w	0,2,7,0,0,0,0
		dc.l	main_GFX+Mbob0c,main_GFX+Mmsk0c
		dc.w	0,1,12,0,0,0,0
		dc.l	main_GFX+Mbob0d,main_GFX+Mmsk0d
		dc.w	0,0,14,0,0,0,0
		dc.l	main_GFX+Mbob0e,main_GFX+Mmsk0e
		dc.w	0,0,14,0,0,0,0
		dc.l	main_GFX+Mbob0f,main_GFX+Mmsk0f
		dc.w	0,1,14,0,0,0,0
		dc.l	main_GFX+Mbob10,main_GFX+Mmsk10
		dc.w	0,2,13,0,0,0,0
		dc.l	main_GFX+Mbob11,main_GFX+Mmsk11
		dc.w	0,2,13,0,0,0,0
		dc.w	END_OUT_DAMAGE

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Walker
*---------------------------------------------------------------------------

Walker_Start:
	moveq	#-1,d0
	btst	#0,Bob_Special_4+1(a4)
	beq.s	.ok
	move.l	#Walker_AnimTableR,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	moveq	#1,d0
.ok:
	move.w	d0,Bob_Special_5(a4)
	move.l	#Walker_Ground,Bob_Routine(a4)
	bra	Walker_Ground

Walker_Ground:
	moveq	#$50,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction
	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_5(a4),d0
	add.w	d0,d0
	add.w	d0,d0
	move.w	d0,Bob_Special_5(a4)
	bpl.s	.set
	lea	Walker_MAnimTableL(pc),a0
.set:
	move.l	a0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	bra	Test_Bob_Out

.no_one_stands_on_me:
	move.w	Bob_Special_5(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

	movem.w	d0-d1,-(sp)
	jsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne	.change_r
	add.w	#12,d1
	subq.w	#8,d0

	jsr	check_obj_kollision
	bne	Standart_BobAnim

	;Should Walker fall ?

	btst	#1,Bob_Special_4+1(a4)
	bne.s	.change_r

	move.l	#Walker_Fall,Bob_Routine(a4)
	bra	Test_Bob_Out

.change_r:
	neg.w	Bob_Special_5(a4)
	move.l	#Walker_AnimTableL,Bob_Next_Anim(a4)
	bra	Get_Next_Bob_Frame

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

	movem.w	d0-d1,-(sp)
	jsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne	.change_l
	add.w	#12,d1
	addq.w	#8,d0
	jsr	check_obj_kollision
	bne	Standart_BobAnim

	btst	#1,Bob_Special_4+1(a4)
	bne.s	.change_l

	move.l	#Walker_Fall,Bob_Routine(a4)
	bra	Test_Bob_Out

.change_l:
	neg.w	Bob_Special_5(a4)
	move.l	#Walker_AnimTableR,Bob_Next_Anim(a4)
	bra	Get_Next_Bob_Frame

Walker_maniac:
	move.w	Bob_Special_5(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)
	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	Standart_BobAnim

	addq.w	#4,Bob_Y_Position(a4)

	bra	Standart_BobAnim

Walker_Fall:
	moveq	#$50,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	move.w	Bob_Special_5(a4),d0
	add.w	d0,Bob_X_Position(a4)

	addq.w	#3,Bob_Y_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

	movem.w	d0-d1,-(sp)
	jsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne	.change_r
	add.w	#12,d1
	subq.w	#8,d0

	jsr	check_obj_kollision
	beq	Standart_BobAnim

	bra.s	.normal

.change_r:
	neg.w	Bob_Special_5(a4)
	move.l	#Walker_AnimTableL,Bob_Next_Anim(a4)
	bra	Get_Next_Bob_Frame

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

	movem.w	d0-d1,-(sp)
	jsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne	.change_l
	add.w	#12,d1
	addq.w	#8,d0
	jsr	check_obj_kollision
	beq	Standart_BobAnim

	bra.s	.normal

.change_l:
	neg.w	Bob_Special_5(a4)
	move.l	#Walker_AnimTableR,Bob_Next_Anim(a4)
	bra	Get_Next_Bob_Frame

.normal:
	move.l	#Walker_Ground,Bob_Routine(a4)
	bra	Test_Bob_Out

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_Flip	= level_Buffer-bob02

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_MFlip	= Walker_Flip+bob06-bob07

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_1
	cmp.w	#2,d0
	beq	Init_Level_2

act_level:	dc.w	Level

Init_World:
	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_flipI(pc),a3
	lea	main_GFX,a0
	lea	main_Buffer,a1
	jsr	Flip_Bobs

	;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	level_GFX+bob13,a0
	lea	Work_Buffer1,a1
	lea	Rot_Info1,a2
	lea	level_GFX+msk13,a3
	moveq	#32,d0
	moveq	#4,d1
	jsr	Convert_to_Rotate

	move.l	#Rotate_Buffer,Dest_Obj
	clr.w	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	4*32*4(a0),a3

	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	jsr	Convert_to_Bitplane

	add.l	#640,Dest_Obj
	addq.b	#8,Angle_Obj+1
	bne	.rotate_it

	rts

Init_Level_1:
	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	#Level3-1-levelb1,Scr_Level_Pointer(a6)
	move.l	#Level3,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+8,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
	rts

Level1_SFX:
	move.w	Scr_X_Level_Pos(a6),d0
	add.w	T_posX,d0
	cmp.w	#5490,d0
	bge.s	.won
	cmp.w	#5380,d0
	blt.s	.out
	st	T_freeze
	st	T_runout
	move.b	#1<<RIGHT,T_joyforce
.out:
	rts
.won:
	move.w	#-1,CuePoint
	rts

Init_Level_2:
	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+8,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
	rts


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)

	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)
	add.l	#planeb,d0
	swap	d0
	move	d0,26(a0)
	swap	d0
	move	d0,30(a0)

	lea	Coplab2(pc),a0
	move.w	Clist_oldcolpos,d1
	move.w	#COPCOL,4(a0,d1.w)	;Farbding 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
	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:

	lea	Coplab3(pc),a0
	move.w	d0,26(a0)		;LO-Word
	swap	d0
	move.w	d0,22(a0)		;HI-Word
	move.w	d1,18(a0)		;Farbwert
.dont_update:
	lea	Coplab3(pc),a0		;Bplpt fr Wrap
	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)
	add.l	#planeb,d0
	move.w	d0,14(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:
	rts


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_oldcolpos2:	dc.w	0

SetParaClist:
	move.l	#Para_Clist,cop1lch(a5)
	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	PCoplab4(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)

	lea	PCoplab1(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)

	lea	Coplab2(pc),a0
	move.w	Clist_oldcolpos,d1
	move.w	#COPCOL,4(a0,d1.w)	;Farbding 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
	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:

	lea	Coplab3(pc),a0
	move.w	d0,26(a0)		;LO-Word
	swap	d0
	move.w	d0,22(a0)		;HI-Word
	move.w	d1,18(a0)		;Farbwert
.dont_update:
	lea	Coplab3(pc),a0		;Bplpt fr Wrap
	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)
	add.l	#planeb,d0
	move.w	d0,14(a0)

	lea	PSprlab(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:
	rts


	;d0 nicht benutzen
init_parallax:

	move.l	#-1,bltafwm(a5)
	move.w	#$09f0,bltcon0(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)
.bwait0:
	btst	#14,dmaconr(a5)
	bne	.bwait0
	rts

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

Fade_Para3:

.fade_loop:
	subq.w	#1,Fade_Position
	bsr	Wait_tof

	bsr	Fade_para_dpf


	tst.w	Fade_Position
	bne	.fade_loop
	rts

Fade_para_dpf:
	move.w	Fade_Position(pc),d7
	lea	B_paracoltab,a0		;Source
	lea	paracoltab,a1		;Destination
	move.w	#13,d6
	bsr	Do_Fade_colors

	lea	paracoltab(pc),a0
	lea	PCols1(pc),a1
	moveq	#6,d7
.loop1:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.loop1

	move.w	(a0)+,PCols2+2

	lea	PCols3(pc),a1
	moveq	#5,d7
.loop2:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.loop2
	rts

Fade_Para2:

.fade_loop:
	addq.w	#1,Fade_Position
	bsr	Wait_tof

	bsr	Fade_para_dpf

	cmp.w	#16,Fade_Position
	bne	.fade_loop
	rts

Fade_Para4:
	st	Col_Init_Flag

.fade_out:
	addq.w	#1,Fade_Position
	bsr	Wait_tof

	bsr	Fade_para_cop

	cmp.w	#16,Fade_Position
	bne	.fade_out
	sf	Col_Init_Flag
	rts

Fade_Para:
	st	Col_Init_Flag

.fade_out:
	subq.w	#1,Fade_Position
	bsr	Wait_tof

	bsr	Fade_para_cop

	tst.w	Fade_Position
	bne	.fade_out
	sf	Col_Init_Flag
	rts

Fade_para_cop:
	move.w	Fade_Position(pc),d7
	lea	B_parallax,a0		;Source
	lea	parallax,a1		;Destination
	move.w	#207,d6
	bsr	Do_Fade_colors

	bra	SetClist

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

	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
	sf	Col_Init_Flag
	rts


.fade_out:
	bsr	Wait_tof

	st	Col_Flag
	jsr	(a4)
	bsr	set_weapon_colors
	jsr	set_copcolors

	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	#13,d6
	bsr	Do_Fade_colors
	rts


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

;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
levelb1	=	340
levelh1	=	44
levelb2	=	170
levelh2	=	42

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

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

	Even
coltab:
	dcb.w	32,0

B_coltab:
	dc.w	$0000,$0AAA,$0333,$0666,$0ECA,$0630,$06BF,$02A0
	dc.w	$0061,$0E80,$0E96,$0FD0,$0C20,$0960,$025C,$0FFF

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

C_coltab:
	dc.w	$06A6,$0232,$0464,$0430,$04B9,$0690
	dc.w	$0060,$0760,$0894,$09D0,$0720,$0467,$0460,$09F9

C_buffer:	ds.w	15

	Even
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,$18c1
	dc.w	$0092,$0038
	dc.w	$0094,$00d0
	dc.w	$0108,planeb*4-40
	dc.w	$010a,planeb*4-40
	dc.w	$0100,$4000
	dc.w	$0104,4+4*8
Coplab4:
	dc.w	$0102,$0000

Coplab1:
	dc.w	$00e0,$0004
	dc.w	$00e2,0
	dc.w	$00e4,$0004
	dc.w	$00e6,0+planeb
	dc.w	$00e8,$0004
	dc.w	$00ea,0+planeb*2
	dc.w	$00ec,$0004
	dc.w	$00ee,0+planeb*3

	dc.w	$0084,Coplab3/$10000
	dc.w	$0086,Coplab3&$ffff

Coplab2:
line	SET	$30

	REPT	$d0
	dc.b	line,$07
	dc.w	$fffe,COPCOL,0

line	SET	line+1

	ENDR

Copjumpin:
	dc.w	$fedf,$fffe
	dc.w	$0100,$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	$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	$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	$ffff,$fffe

Coplab3:
	dc.w	$00e2,0
	dc.w	$00e6,0
	dc.w	$00ea,0+planeb*2
	dc.w	$00ee,0+planeb*3
	dc.w	COPCOL,$0000

	dc.w	$0084,$0000
	dc.w	$0086,$0000
	dc.w	$008a,$0001

Para_Cols1:
	dc.w	$bbb,$e96,$222,$666,$adf,$fd0,$fff
Para_Cols2:
	dc.w	$bbb,$f60,$222,$666,$d00,$ec0,$fff

Para_Clist:
PCol_lab2:
	dc.w	$0182,$0bbb
	dc.w	$0184,$0e96
	dc.w	$0186,$0222
	dc.w	$0188,$0666
	dc.w	$018a,$0adf
	dc.w	$018c,$0fd0
	dc.w	$018e,$0fff
	dc.w	$0190,$0000
PCols1:
	dc.w	$0192,$0aac
	dc.w	$0194,$088a
	dc.w	$0196,$0666
	dc.w	$0198,$066a
	dc.w	$019a,$0468
	dc.w	$019c,$0446
	dc.w	$019e,$0224

PSprlab:
	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,$18c1
	dc.w	$0092,$0038
	dc.w	$0094,$00d0
	dc.w	$0108,planeb*3-40
	dc.w	$010a,planeb*3-40
	dc.w	$0100,$6400
	dc.w	$0104,4+4*8
PCoplab4:
	dc.w	$0102,$0000

PCoplab1:
	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,$0006
	dc.w	$00e6,$0000
	dc.w	$00ec,$0006
	dc.w	$00ee,$0000+planeb
	dc.w	$00f4,$0006
	dc.w	$00f6,$0000+planeb*2

	dc.w	$8107,$fffe

PCols2:	dc.w	$0194,$0444

	dc.w	$d107,$fffe

PCols3:	dc.w	$0192,$0876
	dc.w	$0194,$0420
	dc.w	$0196,$0544
	dc.w	$0198,$0a60
	dc.w	$019a,$0840
	dc.w	$019c,$0620

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

	dc.w	$00e0,flash_buffer/$10000
	dc.w	$00e2,flash_buffer&$ffff
	dc.w	$00e4,flash_buffer/$10000
	dc.w	$00e6,flash_buffer&$ffff+planeb
	dc.w	$00e8,flash_buffer/$10000
	dc.w	$00ea,flash_buffer&$ffff+planeb*2
	dc.w	$00ec,flash_buffer/$10000
	dc.w	$00ee,flash_buffer&$ffff+planeb*3

	dc.w	$0108,planeb*4-40
	dc.w	$010a,planeb*4-40

	dc.w	$0182,$0aaa
	dc.w	$0184,$0333
	dc.w	$0186,$0666
	dc.w	$0188,$0000
	dc.w	$018a,$0630
	dc.w	$018c,$06bf
	dc.w	$018e,$02a0
	dc.w	$0190,$0061
	dc.w	$0192,$0e80
	dc.w	$0194,$0e96
	dc.w	$0196,$0fd0
	dc.w	$0198,$0c20
	dc.w	$019a,$0960
	dc.w	$019c,$025c
	dc.w	$019e,$0fff

	dc.w	$0084,Copjumpin/$10000
	dc.w	$0086,Copjumpin&$ffff
	dc.w	$008a,$0001

B_parallax:	incbin	work:sources/t3/bitplanes/w3_copper2.col
B_parallax3:	dc.w	$0a75,$0532,$0044,$0411,$0200,$0010,$0743
D_parallax:	incbin	work:sources/t3/bitplanes/w2_copper2.col

paracoltab:	ds.w	14

B_paracoltab:	dc.w	$0aac,$088a,$0666,$066a,$0468,$0446,$0224,$0444
		dc.w	$0876,$0420,$0544,$0a60,$0840,$0620

Area1:		include	W3_level1_area
Area2:		include	W3_level2_area
