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

;
;			    Level Daten
;

level_GFX	= $227a4
Level1		= $1f11c
Level2		= $28d40
Level3		= $2c3f0
Sound		= $70200
AD_Bob		= $21e64
character	= $1711c

bob00 	= $00000
msk00 	= $00240
bob01 	= $002d0
msk01 	= $00490
bob02 	= $00500
msk02 	= $006b0
bob03 	= $0071c
msk03 	= $008dc
bob04 	= $0094c
msk04 	= $00afc
bob05 	= $00b68
msk05 	= $00d28
bob06 	= $00d98
msk06 	= $00e88
bob07 	= $00ec4
msk07 	= $00fc4
bob08 	= $01004
msk08 	= $01054
bob09 	= $01068
msk09 	= $014e8
bob0a 	= $01608
msk0a 	= $01a88
bob0b 	= $01ba8
msk0b 	= $01d88
bob0c 	= $01e00
msk0c 	= $01ff0
bob0d 	= $0206c
msk0d 	= $0218c
bob0e 	= $021d4
msk0e 	= $02394
bob0f 	= $02404
msk0f 	= $02534
bob10 	= $02580
msk10 	= $028f8
bob11 	= $029d6
msk11 	= $02d4e
bob12 	= $02e2c
msk12 	= $03144
bob13 	= $0320a
msk13 	= $033fa
bob14 	= $03476
msk14 	= $03676
bob15 	= $036f6
msk15 	= $038f6
bob16 	= $03976
msk16 	= $03b76


Abob00 	= $00000
Abob01 	= $00400
Abob02 	= $005c0
Abob03 	= $00780

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

		dc.w	bob05,28*5,32/8	;Flugwalker
		dc.w	bob06,15*5,32/8	;Walker platt
		dc.w	bob07,16*5,32/8	;  "      "
		dc.w	bob08,10*5,16/8	;Flamme von Flugwalker
		dc.w	bob09,48*5,48/8	;Bigrobo
		dc.w	bob0a,48*5,48/8	;  "

		dc.w	bob0b,30*5,32/8	;Pacman
		dc.w	bob0c,31*5,32/8	;  "

		dc.w	bob10,37*5,48/8	;Amarillo
		dc.w	bob11,37*5,48/8	;  "
		dc.w	bob12,33*5,48/8	;  "
		dc.w	-1

Cue_Table1:	dc.w	100,122
		dc.w	923,122
		dc.w	1954,122
		dc.w	2670,127
		dc.w	308,282
		dc.w	1671,314
		dc.w	1079,554
		dc.w	1929,554
		dc.w	2634,810
		dc.w	358,890
		dc.w	995,890


Cue_Table2:	dc.w	60,945
		dc.w	95*16+150,58*16+90
		dc.w	103*16+150,44*16+90
		dc.w	81*16+150,34*16+90
		dc.w	60*16+150,33*16+90
		dc.w	40*16+150,20*16+90
		dc.w	106*16+150,2*16+90
		dc.w	160*16+150,3*16+90
		dc.w	178*16+150,25*16+90
		dc.w	880,945

Cue_Table3:
		dc.w	120,1041

Bob_Structure:	dcb.b	BOB_MAXIMUM*BOB_ENTRY_LENGTH,BOB_FALSE

Bob_Structure_End = Bob_Structure+(BOB_MAXIMUM*BOB_ENTRY_LENGTH)

Bob_Info_Tab_Adrs	dc.l	Diamond_Info_0
		;--1
		dc.l	Explo_Info_1	;1 Big Xplo
		dc.l	Explo_Info_2	;2 Small Xplo
		dc.l	Box_Info_1	;3 Extrabox
		dc.l	Box_Info_2	;4 Extrabox Deckel
		dc.l	Bonus_Info_1	;5 Flying Bonus
		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	Platform_Info_1	;11 Horizontal-Platform
		dc.l	Platform_Info_2	;12 Vertikal-Platform
		dc.l	Boss_Info_1	;13 Boss
		dc.l	Walker_Info_1	;14 Boden-Walker
		dc.l	Walker_Info_2	;15 FlugWalker
		dc.l	Fire_Info_1	;16 Flamme des Flugwalkers.

		dc.l	Pacman_Info_1	;17 Pacman
		dc.l	Flame_Info_1	;18 Flame-starter
		dc.l	Flame_Info_1	;19 Flame
		dc.l	Flame_Info_3	;20 Smoke
		dc.l	Stamper_Info_1	;21 Stampfer
		dc.l	Mllschacht_Info_1;22 Mllschacht
		dc.l	Mllschacht_Info_1;23 Mllteil
		dc.l	Amarillo_Info_1	;24 Amarillo
		dc.l	GlasAlien_Info_1;25 GlasAlien
		dc.l	Alien_Info_1	;26 Alien
		dc.l	Robot_Info_1	;27 Robot
		dc.l	Brckel_Info_1	;28 Brckel-Platform
		dc.l	Snake_Info_1	;29 Snake
		dc.l	Snake_Info_2	;30 Snake Krper
		dc.l	Elevator_Info_1	;31 Fahrstuhl
		dc.l	Spider_Info_1	;32 Spider

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_StartL	;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.

Platform_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	48		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	6		;Breite einer Zeile der Maske in Bytes
		dc.w	3*2		;A Modulo
		dc.w	3*2*4		;B Modulo
		dc.w	planeb*4	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000		;Bob_I_AFWM
		dc.w	4		;Blit-Breite in Wrtern
		dc.w	8		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Platform_Start1		;Routine, die Bob verwaltet
		dc.l	Platform_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.

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

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

Platform_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	48		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	6		;Breite einer Zeile der Maske in Bytes
		dc.w	3*2		;A Modulo
		dc.w	3*2*4		;B Modulo
		dc.w	planeb*4	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffffffff	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Platform_Start2		;Routine, die Bob verwaltet
		dc.l	Platform_AnimTable	;Zeiger auf nchste Anim

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

Pacman_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	$ffffffff	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	5		;Hitpoints
		dc.l	Start_Pacman	;Routine, die Bob verwaltet
		dc.l	Pacman_AnimTableL;Zeiger auf nchste Anim

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

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

Walker_Info_2:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	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_Sky_Start	;Routine, die Bob verwaltet
		dc.l	Walker_Sky_AnimTableR	;Zeiger auf nchste Anim

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

Fire_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	16		;Hhe in Pixels
		dc.w	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	0		;Hitpoints
		dc.l	Fire		;Routine, die Bob verwaltet
		dc.l	Fire_AnimTableR	;Zeiger auf nchste Anim

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

Flame_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	128		;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	$ffffffff	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-2		;Hitpoints
		dc.l	Flame_Start	;Routine, die Bob verwaltet
		dc.l	Flame_AnimTable	;Zeiger auf nchste Anim

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

Flame_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	-2		;Hitpoints
		dc.l	Flame_Start	;Routine, die Bob verwaltet
		dc.l	Flame_AnimTable	;Zeiger auf nchste Anim

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

Flame_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	-1		;Hitpoints
		dc.l	Smoke		;Routine, die Bob verwaltet
		dc.l	Smoke_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;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	Start_Bonus	;Routine, die Bob verwaltet
		dc.l	Bonus1_AnimTable;Zeiger auf nchste Anim

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

Stamper_Info_1:
		dc.w	FAST+BLOCK	;Bob_Mode
		dc.w	128		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	64		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	8		;Breite einer Zeile der Maske in Bytes
		dc.w	4*2		;A Modulo
		dc.w	4*2*4		;B Modulo
		dc.w	planeb*4	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffffffff		;Bob_I_AFWM
		dc.w	4		;Blit-Breite in Wrtern
		dc.w	8		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Stamper		;Routine, die Bob verwaltet
		dc.l	Stamper_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.

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.

Mllschacht_Info_1:
		dc.w	NORM+FLIP	;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	MllschachtStart;Routine, die Bob verwaltet
		dc.l	Rocket_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.

Amarillo_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	48		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	6		;Breite einer Zeile der Maske in Bytes
		dc.w	3*2		;A Modulo
		dc.w	3*2*4		;B Modulo
		dc.w	planeb*4	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	4		;Blit-Breite in Wrtern
		dc.w	8		;Blit-Breite in Bytes
		dc.w	25		;Hitpoints
		dc.l	Amarillo_Start	;Routine, die Bob verwaltet
		dc.l	Amarillo_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.

Amarillo_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	Amarillo_Start	;Routine, die Bob verwaltet
		dc.l	Amarillo_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.

GlasAlien_Info_1:
		dc.w	FAST+BLOCK+NOT_REFRESH		;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	$ffffffff		;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	10		;Hitpoints
		dc.l	GlasAlien	;Routine, die Bob verwaltet
		dc.l	Glas_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.

Alien_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	$ffffffff		;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	1		;Hitpoints
		dc.l	Alien		;Routine, die Bob verwaltet
		dc.l	Alien_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.


Robot_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	48		;Breite in Pixels
		dc.w	48		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	6		;Breite einer Zeile der Maske in Bytes
		dc.w	3*2		;A Modulo
		dc.w	3*2*4		;B Modulo
		dc.w	planeb*4	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	4		;Blit-Breite in Wrtern
		dc.w	8		;Blit-Breite in Bytes
		dc.w	20		;Hitpoints
		dc.l	Robot_Start	;Routine, die Bob verwaltet
		dc.l	Robot_AnimTableR;Zeiger auf nchste Anim

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

Brckel_Info_1:
		dc.w	FAST+BLOCK+NOT_REFRESH;Bob_Mode
		dc.w	128		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	16		;Breite in Pixels
		dc.w	8		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	2		;A Modulo
		dc.w	2		;B Modulo
		dc.w	planeb		;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	20		;Hitpoints
		dc.l	Brckel_Start	;Routine, die Bob verwaltet
		dc.l	Brckel_AnimTable;Zeiger auf nchste Anim

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

Snake_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	20		;Hitpoints
		dc.l	Snake_Start	;Routine, die Bob verwaltet
		dc.l	Snake_AnimTable	;Zeiger auf nchste Anim

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

Snake_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	20		;Hitpoints
		dc.l	Test_Bob_Out	;Routine, die Bob verwaltet
		dc.l	Snake_AnimTable	;Zeiger auf nchste Anim

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

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.

Elevator_Info_1:
		dc.w	NORM		;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	32		;Breite in Pixels
		dc.w	32		;Hhe in Pixels
		dc.w	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Elevator_Start	;Routine, die Bob verwaltet
		dc.l	Spider_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.

Spider_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	Init_Spider	;Routine, die Bob verwaltet
		dc.l	Spider_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.

Boss_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	15		;Hitpoints
		dc.l	Init_Boss	;Routine, die Bob verwaltet
		dc.l	Meat_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	4		;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     Boss 1
*---------------------------------------------------------------------------
BOSSX	=	80+960
BOSSY	=	96+16+32

Init_Boss:
	move.w	#48,Scr_Y_Fix(a6)
	move.w	#968,Scr_X_Fix(a6)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	#Boss1,Bob_Routine(a4)
	move.w	#128,meat_radius
	move.w	#9*60,eye_count
	clr.w	meat_count
	lea	Zoom_Controler(pc),a1
	bsr	AddHandler
	move.l	#.rout_table1,Zoom_info_pointer
	SONGPLAY #4
	move.l	#Snake_Player_Dead,Dead_Vector
	rts

.rout_table1:
	dc.l	.zoom_routine_1
	dc.l	.zoom_routine_2
	dc.l	.zoom_routine_3
	dc.l	.flip_routine1
	dc.l	.flip_routine2
	dc.l	Kill_Controler

.zoom_routine_1:
	lea	Zoom_Handler(pc),a1
	bsr	AddHandler

	lea	boss_GFX+Bbob00,a0
	lea	Work_Buffer1+45*2,a1
	lea	Rot_Info1,a2
	lea	boss_GFX+Bmsk00,a3
	moveq	#32,d0
	moveq	#4,d1
	jsr	Convert_to_Rotate

;	lea	Work_Buffer1+45*38,a0
;	move.w	#45*5-1,d0
;.Rclear:
;	clr.b	(a0)+
;	dbf	d0,.Rclear


	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	st	Rot_I_Single_Call(a2)		;Zoomen auf zwei Frames verteilen!
	move.l	#Rotate_Buffer,Dest_Obj
	move.l	#Zoom_Rot_1,Zoom_Routine
	move.l	#spider_zoom_pos,Zoom_pointer

	rts

.zoom_routine_2:
	lea	Zoom_Handler(pc),a1
	bsr	AddHandler

	lea	boss_GFX+Bbob02,a0
	lea	Work_Buffer1+45*2,a1
	lea	Rot_Info1,a2
	lea	boss_GFX+Bmsk02,a3
	moveq	#32,d0
	moveq	#4,d1
	jsr	Convert_to_Rotate

;	lea	Work_Buffer1+45*38,a0
;	move.w	#45*5-1,d0
;.Rclear:
;	clr.b	(a0)+
;	dbf	d0,.Rclear


	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	st	Rot_I_Single_Call(a2)		;Zoomen auf zwei Frames verteilen!
	move.l	#Rotate_Buffer+10240,Dest_Obj
	move.l	#Zoom_Rot_1,Zoom_Routine
	move.l	#spider_zoom_pos,Zoom_pointer

	rts

.zoom_routine_3:
	lea	Zoom_Handler(pc),a1
	bsr	AddHandler

	lea	boss_GFX+Bbob04,a0
	lea	Work_Buffer1+45*2,a1
	lea	Rot_Info1,a2
	lea	boss_GFX+Bmsk04,a3
	moveq	#32,d0
	moveq	#4,d1
	jsr	Convert_to_Rotate

;	lea	Work_Buffer1+45*38,a0
;	move.w	#45*5-1,d0
;.Rclear:
;	clr.b	(a0)+
;	dbf	d0,.Rclear


	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	st	Rot_I_Single_Call(a2)		;Zoomen auf zwei Frames verteilen!
	move.l	#Rotate_Buffer+20480,Dest_Obj
	move.l	#Zoom_Rot_1,Zoom_Routine
	move.l	#spider_zoom_pos,Zoom_pointer

	rts

.flip_routine1:
	move.l	#Rotate_Buffer+32640,Dest_Obj
	move.w	#$0000,boss_flipI
	lea	.flip_routine2(pc),a1
	bsr	AddHandler
	lea	boss_GFX,a0
	lea	Rotate_Buffer+30720,a1
	lea	boss_flipI2(pc),a3
	bra	Flip_Bobs

.flip_routine2:
	cmp.w	#640*16,boss_flipI
	bne.s	.doit
	move.l	#Return,-4(a0)
	clr.w	Zoom_finished
	rts
.doit:
	lea	boss_flipI(pc),a3
	lea	Rotate_Buffer+20480,a0
	move.l	Dest_Obj,a1
	bsr	Flip_Bobs
	add.l	#640,Dest_Obj
	add.w	#640,boss_flipI
	rts

boss_flipI:
		dc.w	0,32*5,32/8
		dc.w	-1

boss_flipI2:
		dc.w	Bbob04,32*5,32/8
		dc.w	Bbob05,32*5,32/8
		dc.w	Bbob06,32*5,32/8
		dc.w	-1
Boss1:
	bsr	handle_repos1
	cmpi.w	#85,eye_count			;New meat-ball allowed ?
	blo.s	.no_start

	subq.w	#1,meat_count		;New meat-period ?
	bpl.s	.no_start
		move.w	#12,meat_count		;Reset delay
	move.l	a4,-(sp)
		bsr	rnd
		andi.l	#511,d0
		move.w	meat_radius,d1
		subq.w	#2,meat_radius
		divu	d1,d0
		swap	d0
		lsr.w	#1,d1
		sub.w	d1,d0
		addi.w	#144+960,d0
		move.w	d0,d1
		moveq	#16,d2
		moveq	#13,d0
		lea	Area_Enter_Vector(pc),a1
		bsr	Search_Bob_Entry
		move.l	#handle_fmeat,Bob_Routine(a4)	;Set parameter...
		clr.w	Bob_Special_6(a4)
		move.b	#BOB_NOCOL,Bob_Used(a4)
		cmpi.w	#5*60,eye_count		;High-offset ?
		bhs.s	.dont_set
		move.w	#20,Bob_Special_1(a4)	;Yes...
.dont_set:
	move.l	(sp)+,a4
.no_start:
	subq.w	#1,eye_count				;First animation over ?
	bpl.s	.no_end
	move.l	#handle_boss1d,Bob_Routine(a4)	;Init next phase...
	move.w	#25,meat_radius
	move.w	#700,meat_count
;	move.b	#1,last_dir
;	sf	swap_flag
	sf	dest_flag
	sf	meat_flag
	sf	eye_flag
	clr.w	eye_count
	sf	zoom_mode
	clr.w	dest_count

		lea	boss_coltab,a0		;Set collision-tab
		move.w	#224,d1
		moveq	#9,d0
.loop0:
		move.w	d1,(a0)+
		dbf	d0,.loop0
		move.w	#168,d1
		moveq	#19,d0
.loop1:
		move.w	d1,(a0)+
		dbf	d0,.loop1
		move.w	#224,d1
		moveq	#9,d0
.loop2:
		move.w	d1,(a0)+
		dbf	d0,.loop2

.no_end:
	rts

handle_collision:
	tst.b	T_hit
	bne.s	.out
	cmpi.w	#74,T_posX
	blt.s	.out
	cmpi.w	#214,T_posX
	bgt.s	.out
	tst.w	T_posY
	bmi.s	.out
	move.w	T_posX,d0
	move.w	T_posY,d1
	addi.w	#16,d0
	move.w	d0,d2
	addi.w	#32,d1
	lsr.w	#3,d0
	add.w	d0,d0
	lea	boss_coltab,a0
	move.w	(a0,d0.w),d0
	cmp.w	d0,d1
	bls.s	.out
	cmpi.w	#160,d2
	slt	T_hitdir
	bsr	make_plhit	;Handle player-collison
.out:
	rts

handle_boss1d:
	bsr	handle_repos1
	bsr	handle_collision
	cmpi.w	#2,dest_count
	ble.s	.no_win
		st	no_time
		move.l	#handle_boss1e1,Bob_Routine(a4)
		move.l	#$9600,d0
		bsr	add_score
		st	dest_flag
		clr.l	Bob_Special_1(a4)
		move.w	#40,Bob_Special_3(a4)
		move.w	#500,Bob_Special_4(a4)
		clr.w	Bob_Special_6(a4)
		jmp	Init_Diamondcount
.no_win:
	addq.b	#1,zoom_mode
	cmpi.b	#3,zoom_mode
	bne.s	.no_clear
	sf	zoom_mode
.no_clear:
	subq.w	#1,meat_count
	bpl.s	.nonew1
	move.w	#700,meat_count
	cmpi.w	#42,meat_radius
	bhs.s	.nonew1
	addq.w	#5,meat_radius
.nonew1:
	tst.b	meat_flag
	bne.s	.no_meat
		bsr	rnd
		andi.w	#127,d0
		move.w	d0,d2
		bsr	sin
		exg	d0,d2
		bsr	cos
		move.w	meat_radius,d1
		muls	#60,d0
		muls	d1,d2
		asr.l	#8,d0
		asr.l	#8,d2
		addi.w	#70,d0
		moveq	#64,d1
		sub.w	d2,d1
		cmpi.w	#160-32,d0
		bhs.s	.no_meat
		cmpi.w	#96-32,d1
		bhs.s	.no_meat
		addi.w	#BOSSX,d0
		addi.w	#BOSSY,d1
		move.w	d1,d2
		move.w	d0,d1
		move.l	a4,-(sp)
		moveq	#13,d0
		lea	Area_Enter_Vector(pc),a1
		movem.w	d1-d2,-(sp)
		bsr	Search_Bob_Entry
		move.l	(sp)+,Bob_Special_3(a4)
		move.l	#handle_meat,Bob_Routine(a4)
		sf	Bob_Special_5(a4)
		move.b	#18,Bob_Special_5+1(a4)
		clr.w	Bob_Special_6(a4)
		st	meat_flag
		move.b	#BOB_NOCOL,Bob_Used(a4)
		move.l	(sp)+,a4
.no_meat:
	subq.w	#1,eye_count
	bpl	.no_eye
	tst.b	eye_flag
	bne	.no_eye
	bsr	rnd
	move.w	d0,-(sp)
	bsr	rnd
	move.w	(sp)+,d1
	andi.l	#$ffff,d1
	andi.w	#31,d0
	divu	#40,d1
	swap	d1
	addi.w	#BOSSX,d0
	addi.w	#BOSSY+20,d1
	move.w	#160,d2
	sub.w	T_posX,d2
	addi.w	#16,d2
	tst.b	last_dir		;Init yet ?
	bgt.s	.no_check
	tst.w	d2
	bpl.s	.checkl
	tst.b	last_dir
	bne.s	.no_check
	st	last_dir
	move.w	#130,eye_count
	rts
.checkl:
	tst.b	last_dir
	beq.s	.no_check
	sf	last_dir
	move.w	#130,eye_count
	rts
.no_check:
	tst.w	d2
	smi	last_dir
	not.b	swap_flag
	beq.s	.set2
	tst.w	d2
	bpl.s	.set
	addi.w	#64,d0
	bra.s	.set
.set2:
	tst.w	d2
	bmi.s	.set
	addi.w	#64,d0
.set:
	add.w	#16,d1
	move.w	d1,d2
	move.w	d0,d1
	moveq	#13,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Last_Entry
	tst.w	d7
	bmi.s	.start_end

	clr.l	Bob_Special_5(a4)
	st	eye_flag
	tst.b	swap_flag
	beq.s	.start_eye

	move.l	#handle_mouth,Bob_Routine(a4)
	lea	Meat3_AnimTableR(pc),a0
	move.b	last_dir,Bob_Special_7(a4)
	bne.s	.set_gfx
	lea	Meat3_AnimTableL(pc),a0
.set_gfx:
	move.l	a0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	lea	.pow_tab(pc),a0
	bsr	Make_Power
	move.w	d0,Bob_Power(a4)
	move.w	#100,eye_count
	bra.s	.start_end
.start_eye:
	move.l	#handle_eye,Bob_Routine(a4)
	move.l	#Meat2_AnimTable,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	lea	.pow_tab(pc),a0
	bsr	Make_Power
	move.w	d0,d1
	lsr.w	#1,d1
	add.w	d1,d0
	move.w	d0,Bob_Power(a4)
	move.w	#210,eye_count
.start_end:
	move.l	(sp)+,a4
.no_eye:
	cmpi.w	#90,T_posY
	bgt.s	.no_upstart
	addq.w	#1,plat_count
	rts
.no_upstart:
	clr.w	plat_count
	rts

.pow_tab:	dc.w	6,6,6
		dc.w	10,12,12
		dc.w	12,19,16

handle_boss1e1:
	bsr	handle_repos1
	bsr	handle_explo
	cmpi.w	#300,Bob_Special_4(a4)
	bge.s	.no_count
		jsr	Count_Diamonds
.no_count:
	subq.w	#1,Bob_Special_4(a4)
	bpl.s	.out
;		move.l	#lev1_vblb,user_vbl.w
		move.l	#handle_boss1e,Bob_Routine(a4)
		clr.l	Bob_Special_1(a4)
;		move.b	#-1,last_dir.w
;		sf	swap_flag.w
;		move.l	#big_boss3,fx_handler2.w
.out:
	rts

handle_explo:
	subq.w	#1,Bob_Special_1(a4)
	bpl.s	.out
		move.w	Bob_Special_3(a4),Bob_Special_1(a4)
		subq.w	#8,Bob_Special_3(a4)
		cmpi.w	#1,Bob_Special_3(a4)
		bge.s	.ok
		move.w	#1,Bob_Special_3(a4)
.ok:
		jsr	rnd
		move.w	d0,d2
		jsr	rnd
		move.w	d0,d1
		andi.w	#127,d1
		andi.w	#63,d2
		add.w	Bob_Special_2(a4),d2
		addi.w	#BOSSX,d1
		addi.w	#BOSSY+16,d2
		move.l	a4,-(sp)
		moveq	#1,d0
		lea	Area_Enter_Vector(pc),a1
		bsr	Search_Bob_Entry
		move.b	#BOB_NOCOL,Bob_Used(a4)
		move.l	(sp)+,a4
.out:
	subq.w	#1,Bob_Special_6(a4)
	bpl.s	.no_sound
	move.w	Bob_Special_3(a4),Bob_Special_6(a4)
	jsr	rnd
	and.w	#3,d0
	add.w	d0,Bob_Special_6(a4)
		PLAY_FX	#$1b
.no_sound:
	rts

handle_boss1e:
	bsr	handle_repos1
	jsr	Count_Diamonds
	cmpi.w	#74<<1,Bob_Special_2(a4)
	bhs.s	.lab1
;		lea	mosaic_tab,a0
;		move.w	O_USR1(a5),d0
;		move.w	#-1,0(a0,d0.w)
;		lsr.w	#1,d0
;		move.w	d0,mosaic_tab+(80<<1)-2
		addq.w	#2,Bob_Special_2(a4)
		bsr	handle_explo
	bra.s	.lab0
.lab1:
		move.l	#handle_boss1g,Bob_Routine(a4)
		move.w	#70,Bob_Special_1(a4)
;		move.l	#big_boss2,fx_handler2.w
;		ALLOFF
;		moveq	#0,d0				;Play silence
;		LOAD_SOUND
;		moveq	#5,d0
;		PLAY_SONG
.lab0:
	addq.b	#1,zoom_mode
	cmpi.b	#3,zoom_mode
	bne.s	.out
		sf	zoom_mode
.out:
	rts

handle_boss1g:
	bsr	handle_repos1
	tst.w	Bob_Special_1(a4)			;Time down ?
	bmi.s	.lab1
		jsr	Count_Diamonds
		subq.w	#1,Bob_Special_1(a4)
		rts
.lab1:
		jsr	Count_Diamonds		;Yes, diamonds counted ?
		tst.w	d0
		bne.s	.out
		move.b	#-1,Cue_Point+1
		bra	Out_Bob_Damage
.out:
	rts

handle_meat:
	tst.b	dest_flag
	bne	Out_Bob_Damage
	tst.b	Bob_Special_5(a4)
	bne	.meat2
	subq.b	#1,Bob_Special_5+1(a4)
	bpl.s	.ok
;	st	Bob_Special_5(a4)
	move.b	#20,Bob_Special_5+1(a4)
.ok:
		cmpi.w	#$001f,Bob_Special_1(a4)
		blt.s	.meat1
		move.l	#Rotate_Buffer+15*640,d5
		move.l	#Rotate_Buffer+15*640+512,d6
		bsr	draw_bob
		sf	meat_flag
		movem.w	Bob_X_Position(a4),d0-d1
		sub.w	Scr_X_Level_Pos(a6),d0
		sub.w	Scr_Y_Level_Pos(a6),d1
		addq.w	#4,d0
		lsr.w	#3,d0
		add.w	d0,d0
		lea	boss_coltab,a1
		adda.w	d0,a1
		moveq	#3,d0
.search_col:
		cmp.w	(a1),d1
		bge.s	.no
		move.w	d1,(a1)
.no:
		addq.l	#2,a1
		dbf	d0,.search_col
	move.l	#.handle_out,Bob_Routine(a4)
	move.b	#2,Bob_Special_1(a4)
	rts
.handle_out:
	subq.b	#1,Bob_Special_1(a4)
	beq	Out_Bob_Damage
	rts

.meat1:
		addi.l	#$00008000,Bob_Special_1(a4)
.meat2:
		subq.b	#1,Bob_Special_5+1(a4)
		bpl.s	.meat0
		sf	Bob_Special_5(a4)
		move.b	#18,Bob_Special_5+1(a4)
.meat0:
	subq.b	#1,Bob_Special_6+1(a4)
	bpl.s	.meat3
	addq.b	#6,Bob_Special_6+1(a4)
	not.b	Bob_Special_6(a4)
.meat3:
	move.w	Bob_Special_1(a4),d0
	lsr.w	#1,d0
	mulu	#640,d0
	add.l	#Rotate_Buffer,d0
	move.l	d0,Bob_Graphics(a4)
	add.l	#512,d0
	move.l	d0,Bob_Mask(a4)

	moveq	#0,d2
	rts

handle_mouth:
	moveq	#0,d0
	tst.b	dest_flag
	bne	Standart_Destruction
	moveq	#0,d0
	move.b	Bob_Special_5(a4),d0
	jmp	.mouth_tab(pc,d0.w)
.mouth_tab:
	bra.w	.zoom_in1
	bra.w	.move_mouth
	bra.w	.wait_mouth
	bra.w	.move_mouth
	bra.w	.wait_mouth
	bra.w	.move_mouth
	bra.w	.wait_mouth
	bra.w	.move_mouth
	bra.w	.zoom_out1
.zoom_in1:
	addi.l	#$00008000,Bob_Special_1(a4)
	cmpi.l	#$001f0000,Bob_Special_1(a4)
	blt.s	.mouth_zoom
	addq.b	#4,Bob_Special_5(a4)
	sf	Bob_Special_5+1(a4)
	sf	eye_flag
	move.b	#4,Bob_Special_6(a4)
	sf	Bob_Special_6+1(a4)
	rts
.zoom_out1:
	subi.l	#$00008000,Bob_Special_1(a4)
	cmpi.l	#$00010000,Bob_Special_1(a4)
	bgt.s	.mouth_zoom
	sf	eye_flag
	bra	Out_Bob_Damage

.mouth_zoom:
	move.w	Bob_Special_1(a4),d0
	lsr.w	#1,d0
	mulu	#640,d0
	cmp.l	#Meat3_AnimTableR,Bob_Act_Anim(a4)
	blt.s	.to_left
	add.l	#Rotate_Buffer+32640,d0
	bra.s	.set
.to_left:
	add.l	#Rotate_Buffer+20480,d0
.set:
	move.l	d0,Bob_Graphics(a4)
	add.l	#512,d0
	move.l	d0,Bob_Mask(a4)
	rts

.move_mouth:
	tst.b	Bob_Special_5+1(a4)
	bne	.quit_mouth
	moveq	#0,d0
	move.b	Bob_Special_6+1(a4),d0
	jmp	.mm_tab(pc,d0.w)
.mm_tab:
	bra.s	.open_mouth
	bra.s	.shot_mouth
	bra.s	.close_mouth
.open_mouth:
	subq.b	#1,Bob_Special_6(a4)
	bpl.s	.out
	addq.b	#5,Bob_Special_6(a4)
	bsr	Get_Next_Bob_Frame
	addq.w	#1,Bob_Anim_Delay(a4)
	cmpi.w	#2,Bob_Anim_Delay(a4)
	bne.s	.out
	move.b	#45,Bob_Special_6(a4)
	addq.b	#2,Bob_Special_6+1(a4)
.out:
	rts
.close_mouth:
	subq.b	#1,Bob_Special_6(a4)
	bpl.s	.out
	addq.b	#5,Bob_Special_6(a4)
	subq.w	#1,Bob_Anim_Delay(a4)
	seq	Bob_Special_5+1(a4)
	bsr	Get_Next_Bob_Frame
	rts
.shot_mouth:
	cmpi.b	#2,Bob_Special_6(a4)
	bne.s	.no_shoot
	moveq	#64,d0
	cmpi.w	#50*8,plat_count
	ble.s	.no_air
	subi.w	#40,d0
	cmpi.w	#50,T_posY
	bge.s	.no_air
	moveq	#0,d0
.no_air:
	move.w	#192,d2
	tst.b	Bob_Special_7(a4)
	bne.s	.not_left
	sub.w	d0,d2
	bra.s	.not_right
.not_left:
	add.w	d0,d2
.not_right:
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#16,d0
	addi.w	#16,d1
	bsr	start_bullets
.no_shoot:
	subq.b	#1,Bob_Special_6(a4)
	bpl	.out
	sf	Bob_Special_6(a4)
	addq.b	#2,Bob_Special_6+1(a4)
	rts

.wait_mouth:
	addq.b	#4,Bob_Special_5(a4)
	sf	Bob_Special_5+1(a4)
	sf	eye_flag
	move.b	#4,Bob_Special_6(a4)
	sf	Bob_Special_6+1(a4)
;	st	O_COLEN(a4)
	clr.w	Bob_Anim_Delay(a4)
	rts

.quit_mouth:
;	tst.b	eye_flag
;	bne	.out
;	sf	O_COLEN(a5)
	addq.b	#4,Bob_Special_5(a4)
;	clr.w	O_PHA(a4)
;	st	eye_flag
	rts

start_bullets:
	move.w	d0,d4
	move.w	d1,d5
	subi.w	#15,d2
	move.w	d2,d7
	moveq	#5,d6
.loop:
		move.w	d7,d0
		bsr	sin
		move.w	d0,d2
		move.w	d7,d0
		bsr	cos
		move.w	d2,d3
		move.w	d0,d2
		asr.w	#2,d2
		asr.w	#2,d3
		move.w	d2,d0
		move.w	d3,d1
		asr.w	#1,d0
		asr.w	#1,d1
		add.w	d0,d2
		add.w	d1,d3
		movem.l	d4-d7,-(sp)
		move.w	d4,d0
		move.w	d5,d1
		bsr	Start_Shoot
		movem.l	(sp)+,d4-d7
		addq.w	#5,d7
	dbf	d6,.loop
	rts

handle_eye:
	moveq	#0,d0
	tst.b	dest_flag
	bne	Standart_Destruction
	bsr	Standart_Hit_Handler
	bne.s	.not_destroyed

	addq.w	#1,dest_count
	cmpi.b	#1,Bob_Special_5(a4)
	beq.s	.ok
	sf	eye_flag
.ok:
	moveq	#$50,d0			;Yes, 26 Points
	bra	Standart_Destruction
.not_destroyed:
	subq.b	#1,Bob_Special_6+1(a4)
	bpl.s	.no_anim
	addq.b	#8,Bob_Special_6+1(a4)
	not.b	Bob_Special_6(a4)
.no_anim:
	moveq	#0,d0
	move.b	Bob_Special_5(a4),d0
	jmp	.eye_tab(pc,d0.w)
.eye_tab:
	bra.w	.zoom_in
	bra.w	.move_eye
	bra.w	.zoom_out

.zoom_in:
	addi.l	#$00008000,Bob_Special_1(a4)
	cmpi.l	#$001f0000,Bob_Special_1(a4)
	blt.s	.eye_zoom
		addq.b	#4,Bob_Special_5(a4)
;		addq.w	#1,O_PHA(a5)
		move.w	#340,Bob_Special_7(a4)
		sf	eye_flag
;		st	O_COLEN(a5)
	bra.s	.eye_zoom
.zoom_out:
	subi.l	#$00008000,Bob_Special_1(a4)
	cmpi.l	#$00010000,Bob_Special_1(a4)
	bgt.s	.eye_zoom
	sf	eye_flag
	bra	Out_Bob_Damage
.eye_zoom:
	move.w	Bob_Special_1(a4),d0
	lsr.w	#1,d0
	mulu	#640,d0
	add.l	#Rotate_Buffer+10240,d0
	move.l	d0,Bob_Graphics(a4)
	add.l	#512,d0
	move.l	d0,Bob_Mask(a4)
	rts

.move_eye:
	tst.b	Bob_Special_6(a4)
	tst.w	Bob_Special_7(a4)
	bne.s	.out
	tst.b	eye_flag
	beq.s	.return
	addq.b	#4,Bob_Special_5(a4)
;	clr.w	O_PHA(a5)
	st	eye_flag
;	sf	O_COLEN(a5)
.return:
	bra	Standart_BobAnim
.out:
	subq.w	#1,Bob_Special_7(a4)
	bra	Standart_BobAnim

draw_bob:
	movem.w	Bob_X_Position(a4),d0-d1
	bsr	Calc_Adress

	add.l	Scr_Refresh_Field(a6),d4

	waitblt
	move.l	#$ffff0000,bltafwm(a5)
	move.w	#-2,bltamod(a5)
	move.w	#10,bltbmod(a5)
	move.w	#planeb*4-6,bltcmod(a5)
	move.w	#planeb*4-6,bltdmod(a5)

	move.w	Bob_X_Position(a4),d0
	and.w	#15,d0
	ror.w	#4,d0
	move.w	d0,bltcon1(a5)
	or.w	#$0fca,d0
	move.w	d0,bltcon0(a5)

	moveq	#3,d7
.bloop:
	move.l	d5,bltbpth(a5)
	move.l	d6,bltapth(a5)
	move.l	d4,bltcpth(a5)
	move.l	d4,bltdpth(a5)

	move.w	#64*30+3,bltsize(a5)
	add.l	#planeb,d4
	addq.l	#4,d5
	dbf	d7,.bloop
.out:
	rts


	;Fallender Fleischball

handle_fmeat:
	tst.b	Bob_Special_2(a4)			;Waiting for draw ?
	beq	.no_draw
	subq.w	#1,Bob_Anim_Delay(a4)
	bmi	Out_Bob_Damage
	cmp.w	#2,Bob_Anim_Delay(a4)
	bne	.out
.blit_back:
	move.l	#boss_GFX+Bbob00,d5
	move.l	#boss_GFX+Bmsk00,d6
	bra	draw_bob
.out:
	rts
.no_draw:
	tst.b	Bob_Special_2+1(a4)
	bne	.no_check_floor
	cmpi.w	#130,Bob_Y_Position(a4)			;Low enough for test ?
	ble.s	.dont_test
	bsr	rnd				;Get random-offset
	andi.w	#$000f,d0
	move.w	d0,d2
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#16,d0
	addi.w	#16,d1
	add.w	d2,d1
	add.w	Bob_Special_1(a4),d1		;Get high/low-offset
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision		;Test collision
	movem.w	(sp)+,d0-d1
	bne.s	.floor_found
	subq.w	#8,d1
	bsr	check_obj_kollision
	beq.s	.dont_test
	subq.w	#8,Bob_Y_Position(a4)
.floor_found:
	bsr	Get_Next_Bob_Frame
	st	Bob_Special_2+1(a4)		;Yes...
	move.w	#6,Bob_Special_3(a4)
	move.w	Bob_Y_Position(a4),Bob_Special_5(a4)
	bset	#BOB_URGENT,Bob_BlitStatus(a4)
	rts
.dont_test:
	move.w	Bob_Special_6(a4),d0
	lsr.w	#3,d0
	add.w	d0,Bob_Y_Position(a4)
	addq.w	#1,Bob_Special_6(a4)			;No, move down...
	bra	.end

.no_check_floor:
	move.w	Bob_Special_5(a4),d0			;"Titsch"-Down
	cmp.w	Bob_Y_Position(a4),d0
	bne.s	.not_equal
	move.w	Bob_Special_3(a4),Bob_Special_4(a4)
	subq.w	#4,Bob_Special_3(a4)
	bgt.s	.not_equal
	bsr	Get_Next_Bob_Frame
	st	Bob_Special_2(a4)
	move.w	#3,Bob_Anim_Delay(a4)
	bset	#BOB_URGENT,Bob_BlitStatus(a4)
.not_equal:
	move.w	Bob_Special_4(a4),d0
	sub.w	d0,Bob_Y_Position(a4)
	move.w	Bob_Special_5(a4),d0
	cmp.w	Bob_Y_Position(a4),d0
	bhs.s	.ok
	move.w	d0,Bob_Y_Position(a4)
.ok:
	subq.w	#1,Bob_Special_4(a4)
.end:
	bra	Test_Bob_Out


Meat_AnimTable:
		dc.l	boss_GFX+Bbob00,boss_GFX+Bmsk00
		dc.w	0,0,30,2,2,28,24
		dc.l	boss_GFX+Bbob01,boss_GFX+Bmsk01
		dc.w	0,0,31,2,2,28,24

		dc.w	ENTRY_END
		dc.l	Meat_AnimTable

		;Eye
Meat2_AnimTable:
		dc.l	boss_GFX+Bbob02,boss_GFX+Bmsk02
		dc.w	0,0,31,2,2,28,24
		dc.l	boss_GFX+Bbob03,boss_GFX+Bmsk03
		dc.w	0,0,31,2,2,28,24

		dc.w	ENTRY_END
		dc.l	Meat2_AnimTable

Meat3_AnimTableL:
		dc.l	boss_GFX+Bbob04,boss_GFX+Bmsk04
		dc.w	0,0,32,2,2,28,24
		dc.l	boss_GFX+Bbob05,boss_GFX+Bmsk05
		dc.w	0,0,32,2,2,28,24
		dc.l	boss_GFX+Bbob06,boss_GFX+Bmsk06
		dc.w	0,0,32,2,2,28,24
		dc.l	boss_GFX+Bbob05,boss_GFX+Bmsk05
		dc.w	0,0,32,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Meat3_AnimTableL

Meat3_AnimTableR:
		dc.l	Rotate_Buffer+30720,Rotate_Buffer+31232
		dc.w	0,0,32,2,2,28,24
		dc.l	Rotate_Buffer+31360,Rotate_Buffer+31872
		dc.w	0,0,32,2,2,28,24
		dc.l	Rotate_Buffer+32000,Rotate_Buffer+32512
		dc.w	0,0,32,2,2,28,24
		dc.l	Rotate_Buffer+31360,Rotate_Buffer+31872
		dc.w	0,0,32,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Meat3_AnimTableR

Bbob00 	= $00000
Bmsk00 	= $001e0
Bbob01 	= $00258
Bmsk01 	= $00448
Bbob02 	= $004c4
Bmsk02 	= $006b4
Bbob03 	= $00730
Bmsk03 	= $00920
Bbob04 	= $0099c
Bmsk04 	= $00b8c
Bbob05 	= $00c08
Bmsk05 	= $00e08
Bbob06 	= $00e88
Bmsk06 	= $01088


meat_count:	dc.w	0
meat_radius:	dc.w	0
eye_count:	dc.w	0
plat_count:	dc.w	0
dest_count:	dc.w	0
eye_flag:	dc.b	0
meat_flag:	dc.b	0
zoom_mode:	dc.b	0
last_dir:	dc.b	0
swap_flag:	dc.b	0
dest_flag:	dc.b	0

	even

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

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Elevator
*---------------------------------------------------------------------------
Elev_Zoom_Handler:
	move.l	Elev_Routine(pc),a1
	jmp	(a1)

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

Elev_Rot_1:
	move.l	#Elev_Rot_3,Elev_Routine
	move.l	Elev_Zoom_pointer,a0
	move.l	(a0),d0
	lea	Work_Buffer1,a0
	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	jsr	Do_Zoom
	rts

Elev_Rot_2:
	move.l	#Elev_Rot_3,Elev_Routine
;	lea	Work_Buffer1,a0
;	lea	Work_Buffer2,a1
;	lea	Rot_Info1,a2
;	jsr	Do_Copy
	rts

Elev_Rot_3:
	move.l	#Elev_Rot_4,Elev_Routine
	move.l	Dest_Obj,a0
	lea	3*32*4(a0),a3

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

	rts

Elev_Rot_4:
	move.l	#Elev_Rot_1,Elev_Routine
	move.l	Dest_Obj,a0
	lea	3*32*4+4*16(a0),a3
	lea	3*16*4(a0),a0

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

	add.l	#512,Dest_Obj
	addq.l	#4,Elev_Zoom_pointer
	move.l	Elev_Zoom_pointer,a0
	tst.l	(a0)
	bpl.s	.out
	move.l	#Elev_Kill,Elev_Routine
.out:
	rts

Elev_Routine:	dc.l	Elev_Rot_1
Elev_Zoom_pointer:	dc.l	0

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

Elevator:
	cmp.w	#1584,Scr_X_Level_Pos(a6)
	bne.s	.not_reached
	cmp.w	#768,Scr_Y_Level_Pos(a6)
	beq	.reached
.not_reached:
	tst.w	Scr_X_Fix(a6)
	bne	.out

	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	cmp.w	#50,d0
	blt	.out
	cmp.w	#300,d0
	bgt.s	.out

	move.l	#$00030000,d0
	jsr	TFMX+72				;AusFaden

	move.w	#1584,Scr_X_Fix(a6)
	move.w	#768,Scr_Y_Fix(a6)

	lea	Elev_Zoom_Handler(pc),a1
	bsr	AddHandler

	move.l	a4,-(sp)

	lea	para_GFX+Pbob1b,a0
	lea	Work_Buffer1+45*2,a1
	lea	Rot_Info1,a2
	lea	level_GFX+msk0e,a3
	moveq	#32,d0
	moveq	#3,d1
	jsr	Convert_to_Rotate

	lea	Work_Buffer1+45*38,a0
	move.w	#45*5-1,d0
.Rclear:
	clr.b	(a0)+
	dbf	d0,.Rclear

	move.l	(sp)+,a4

	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	st	Rot_I_Single_Call(a2)		;Zoomen auf zwei Frames verteilen!
	move.l	#Rotate_Buffer+2000,Dest_Obj
	move.l	#Elev_Rot_1,Elev_Routine
	move.l	#spider_zoom_pos,Elev_Zoom_pointer
.out:
	bra	Test_Bob_Out2

.reached:
	tst.b	Bob_Special_1(a4)
	bne	.start_aliens

	SONGPLAY #3
	bsr	Kill_Objects

	move.w	#50*20,Bob_Special_6(a4)

	move.w	#3*planeb*160/4-1,d0

	cmp.l	#$40000,Scr_Show_Field(a6)	;Welches Field ist vorne ?
	beq.s	.clear_5

	lea	$40000+32*planeb*3,a0
	bra.s	.clear
.clear_5:
	lea	$50000+32*planeb*3,a0
.clear:
	clr.l	(a0)+
	dbf	d0,.clear

	move.w	#-1,Bob_Not_Finished		;Screen ist gelscht, nichts mehr drauf blitten!

	lea	$67800,a0
	lea	elevator_field,a1
	lea	elevator_chars,a2
	moveq	#20,d5
	moveq	#2,d7
	bsr	Init_Parafield

	move.w	#32,Scr_Y_Play_Anf(a6)

	bsr	Set_ParaClist
	bsr	Wait_Line

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

	st	Bob_Special_1(a4)

	move.w	#3*planeb*160/4-1,d0

	cmp.w	#$0004,Scr_Show_Field(a6)	;Welches Field ist vorne ?
	beq.s	.clear_52

	lea	$40000+32*planeb*3,a0
	bra.s	.clear2
.clear_52:
	lea	$50000+32*planeb*3,a0
.clear2:
	clr.l	(a0)+
	dbf	d0,.clear2

	move.w	#$0100,RestFunction		;Restore=Clear

	move.l	#Set_ParaClist,Clist_Handler

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

	lea	Convert_Table1(pc),a0
	bsr	Convert_to_3planes

	lea	para_flipI(pc),a3
	lea	para_GFX,a0
	lea	Rotate_Buffer,a1
	jsr	Flip_Bobs

	lea	$60000,a0
	lea	para_field,a1
	lea	para_chars,a2
	moveq	#15,d7
	moveq	#32,d5
	bsr	Init_Parafield

	move.l	#$69000,bltdpth(a5)
	move.w	#0,bltdmod(a5)
	move.w	#40-4,bltamod(a5)
	move.l	#$60000+18,bltapth(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#64*208*3+2,bltsize(a5)
	waitblt

	move.l	#$69000,bltapth(a5)
	move.l	#$699c0,bltdpth(a5)
	move.w	#0,bltamod(a5)
	move.w	#64*208*3+2,bltsize(a5)
	waitblt

	move.l	#$60000+14,bltdpth(a5)
	move.w	#$0100,bltcon0(a5)
	move.w	#40-14,bltdmod(a5)
	move.w	#64*256*3+7,bltsize(a5)
	waitblt


	lea	Elevator_Fade(pc),a1
	bsr	AddHandler

	clr.w	Elevator_fadepos

	move.l	#Snake_Player_Dead,Dead_Vector

	bsr	handle_repos1

	bra	Test_Bob_Out2

.start_aliens:
	subq.w	#1,Bob_Special_6(a4)
	bmi.s	.end_elevator
	bsr	handle_repos1

	cmp.w	#30,Bob_Special_6(a4)
	ble.s	.no_spider

	subq.w	#1,spider_count			;New spider ?
	bpl.s	.no_spider
	move.w	#30,spider_count		;Yes, reset delay
	bsr	rnd
	and.w	#127,d0
	add.w	#80,d0
	move.w	d0,d1
	moveq	#60,d2
	add.w	Scr_X_Level_Pos(a6),d1
	add.w	Scr_Y_Level_Pos(a6),d2

	lea	Area_Enter_Vector(pc),a1
	moveq	#32,d0

	move.l	a4,-(sp)
	bsr	Search_Bob_Entry

	bsr	Init_Spider

	move.l	#Spider_Elev,Bob_Routine(a4)
	st	Bob_Special_7+1(a4)

	bsr	rnd			;Get movement-direction
	cmpi.b	#170,d0			;for spider
	blo.s	.not1
	moveq	#1,d0
	bra.s	.set
.not1:
	cmpi.b	#85,d0
	blo.s	.not2
	moveq	#0,d0
	bra.s	.set
.not2:
	moveq	#-1,d0
.set:
	move.b	d0,Bob_Special_7(a4)		;Save it
	move.l	(sp)+,a4
.no_spider:
	bra	Test_Bob_Out2

.end_elevator:
	st	Spider_off
	move.l	#.reinit,Bob_Routine(a4)
	move.w	#50,Bob_Special_6(a4)
	lea	Elevator_Fade_out(pc),a1
	bra	AddHandler
.reinit:
	subq.w	#1,Bob_Special_6(a4)
	bpl	.out
;	move.b	#-1,Cue_Point+1			;Des wars!

	move.l	#Skip_to_Level_2,SFX_Handler

	st	T_runout
	st	T_freeze
	move.w	#1<<(RIGHT+8),T_joyforce
	move.w	#16,Fade_Position
	bra	Out_Bob_Damage

Skip_to_Level_2:
	cmp.w	#304,T_posX
	blt	.out

	clr.w	T_joyforce

	tst.w	Fade_Position
	beq.s	.goon

	subq.w	#1,Fade_Position
	bsr	.fade_colors
	rts
	;Alles ausblenden.

.goon:
	bsr	Fade_to_Dest
	bsr	init_parallax
	st	Col_Flag
	jsr	SetClist
	bsr	set_weapon_colors
	jsr	set_copcolors

	move.w	#$09f0,RestFunction		;Restore=Clear

	move.l	#Level1_Clist,Clist_Handler

	move.w	#planeb*4,Scr_Plane_Width(a6)
	lea	Main_Clist,a0
	move.l	a0,cop1lch(a5)

	lea	Convert_Table2(pc),a0
	bsr	Convert_to_4planes

	sf	Col_Init_Flag

	jsr	Next_Level
	jsr	Do_Init_Level

	move.w	Scr_Y_Level_Pos(a6),d0
	lsr.w	#1,d0
	move.w	d0,para_ypos				;Parallax scrollen.

	clr.w	Fade_Position
	moveq	#1,d0
	jsr	Fade_Colors
.out:
	rts

.fade_colors:
	move.w	Fade_Position(pc),d7
	lea	B_parallax3+14,a0		;Source
	lea	Rotate_Buffer,a1		;Destination
	move.w	#15,d6
	bsr	Do_Fade_colors
	lea	PCol_lab2,a1
	lea	Rotate_Buffer,a0
	moveq	#6,d7
.loop:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.loop
	lea	PCol_lab3,a1
	moveq	#4,d7
.loop2:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.loop2
	lea	PCol_lab4,a1
	moveq	#2,d7
.loop3:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.loop3
	rts

	;Color-Fadein-Handler
Elevator_Fade:
	cmp.w	#16<<2,Elevator_fadepos
	beq.s	.clear_me

	move.w	Elevator_fadepos(pc),d7
	lsr.w	#2,d7
	lea	B_parallax3,a0		;Source
	lea	parallax3,a1		;Destination
	move.w	#7,d6
	bsr	Do_Fade_colors

	addq.w	#1,Elevator_fadepos

	rts

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

Elevator_Fade_out:
	tst.w	Elevator_fadepos
	beq.s	.clear_me

	subq.w	#1,Elevator_fadepos

	move.w	Elevator_fadepos(pc),d7
	lsr.w	#2,d7
	lea	B_parallax3,a0		;Source
	lea	parallax3,a1		;Destination
	move.w	#7,d6
	bsr	Do_Fade_colors

	rts

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

Elevator_fadepos:	dc.w	0
spider_count:		dc.w	0
Spider_off:		dc.w	0

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

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_GFX+Pbob16,para_GFX+Pbob15,para_GFX+Pbob14,para_GFX+Pbob13,para_GFX+Pbob12
	 dc.l	para_GFX+Pbob12+12*3*2,para_GFX+Pbob13+12*3*2,para_GFX+Pbob14+12*3*2,para_GFX+Pbob15+12*3*2,para_GFX+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_GFX+Pbob00,para_GFX+Pbob01,para_GFX+Pbob02,para_GFX+Pbob03,para_GFX+Pbob04
	 dc.l	para_GFX+Pbob05,para_GFX+Pbob06,para_GFX+Pbob07,para_GFX+Pbob08,para_GFX+Pbob09,0
	dc.l	Explo_Info_2
	 dc.l	para_GFX+Pbob0a,para_GFX+Pbob0b,para_GFX+Pbob0c,para_GFX+Pbob0d,para_GFX+Pbob0e
	 dc.l	para_GFX+Pbob0f,para_GFX+Pbob10,para_GFX+Pbob11,0
	dc.l	Mine_Info_1
	 dc.l	para_GFX+Pbob17,para_GFX+Pbob18,para_GFX+Pbob19,para_GFX+Pbob18,para_GFX+Pbob19,para_GFX+Pbob18,para_GFX+Pbob19,0
	dc.l	Rocket_Info_2,0
	dc.l	Spider_Info_1
	 dc.l	para_GFX+Pbob1b,para_GFX+Pbob1c,para_GFX+Pbob1a,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	Spider_Info_1
	 dc.l	level_GFX+bob0e,level_GFX+bob0f,level_GFX+bob0d,0
	dc.l	0

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


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

Pbob00 	= $00000
Pbob01 	= $000d8
Pbob02 	= $0021c
Pbob03 	= $00384
Pbob04 	= $00504
Pbob05 	= $00684
Pbob06 	= $00804
Pbob07 	= $00978
Pbob08 	= $00abc
Pbob09 	= $00bdc
Pbob0a 	= $00c9c
Pbob0b 	= $00cf0
Pbob0c 	= $00d1a
Pbob0d 	= $00d62
Pbob0e 	= $00db6
Pbob0f 	= $00e0a
Pbob10 	= $00e5e
Pbob11 	= $00eac
Pbob12 	= $00efa
Pbob13 	= $00f48
Pbob14 	= $00f9c
Pbob15 	= $00fea
Pbob16 	= $01044
Pbob17 	= $0109e
Pbob18 	= $010fe
Pbob19 	= $0119a
Pbob1a 	= $0125a
Pbob1b 	= $01332
Pbob1c 	= $01482

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Spider
*---------------------------------------------------------------------------
Init_Spider:
	move.w	#30,Bob_Special_3(a4)
	sf	Bob_Special_4(a4)
	move.l	Bob_X_Position(a4),Bob_Special_5(a4)
	clr.w	Bob_Special_7(a4)
	clr.b	Bob_Special_2(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	#Spider,Bob_Routine(a4)
	rts

Spider:
	move.l	Bob_Special_5(a4),Bob_X_Position(a4)

	tst.b	Bob_Special_4(a4)			;In middle of screen ?
	bne.s	.no
	movem.w	Bob_X_Position(a4),d0-d1
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1

		cmpi.w	#50,d1
		blt	.out
		cmpi.w	#190,d0
		bgt	.out
		cmpi.w	#100,d0
		blt	.out
		st	Bob_Special_4(a4)
	sf	Bob_BlitStatus(a4)
.no:
	subq.w	#1,Bob_Special_6(a4)			;Move up a little bit
	bra.s	Spider_jump
.out:
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	bra	Test_Bob_Out2

Spider_Elev:
	move.l	Bob_Special_5(a4),Bob_X_Position(a4)
	subq.w	#1,Bob_Special_6(a4)			;Move up a little bit

Spider_jump:
	move.b	Bob_Special_7(a4),d0
	ext.w	d0
	add.w	d0,Bob_Special_5(a4)

	moveq	#0,d0
	move.b	Bob_Special_2(a4),d0
	lsr.w	#1,d0
	tst.b	Bob_Special_7+1(a4)
	beq.s	.no_3plane
	mulu	#512,d0
	add.l	#Rotate_Buffer+2000,d0
	move.l	d0,Bob_Graphics(a4)
	add.l	#384,d0
	move.l	d0,Bob_Mask(a4)
	bra.s	.is_3plane
.no_3plane:
	mulu	#640,d0
	add.l	#Rotate_Buffer+20480,d0
	move.l	d0,Bob_Graphics(a4)
	add.l	#512,d0
	move.l	d0,Bob_Mask(a4)
.is_3plane:
	addq.b	#1,Bob_Special_2(a4)		;Zoom object in

	subq.w	#1,Bob_Special_3(a4)			;2nd move-phase ?
	bpl.s	.not_ready

		move.l	#handle_spider1,Bob_Routine(a4)
		clr.b	Bob_Special_2(a4)
		clr.l	Bob_Special_1(a4)
		move.b	#BOB_TRUE,Bob_Used(a4)
		move.w	#180,Bob_Special_3(a4)
		clr.w	Bob_Anim_Delay(a4)
		bra	Test_Bob_Out
.not_ready:
	bra	Test_Bob_Out

handle_spider1:					;2nd movement-phase
	move.l	#$90,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	cmpi.b	#2,Bob_Anim_Delay(a4)
	beq.s	.no_anim
	moveq	#1,d0
	subq.b	#1,Bob_Anim_Delay+1(a4)
	bpl.s	.no_kipp
	addq.b	#3,Bob_Anim_Delay+1(a4)
	bsr	Get_Next_Bob_Frame
	addq.b	#1,Bob_Anim_Delay(a4)
	moveq	#1,d0
	bra.s	.no_kipp
.no_anim:
		subq.b	#1,Bob_Special_1+1(a4)
		bpl.s	.lab1
			addq.b	#7,Bob_Special_1+1(a4)
			addq.w	#1,Bob_Special_2(a4)
.lab1:
	move.w	Bob_Special_2(a4),d0

.no_kipp:
	move.w	d0,d7
	moveq	#0,d0
	cmp.w	#$0100,RestFunction		;Elevator-Stage ?
	bne.s	.move_down
	tst.b	Spider_off			;Spider-Kill ?
	bne	Standart_Destruction

	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#16,d0
	addi.w	#24,d1
	bsr	check_obj_kollision
	beq	.move_down

	moveq	#0,d0
	subq.w	#1,Bob_Special_3(a4)
	bmi	Standart_Destruction
	bra	Test_Bob_Out
.move_down:
	add.w	d7,Bob_Y_Position(a4)
	move.b	Bob_Special_7(a4),d0
	ext.w	d0
	add.w	d0,Bob_X_Position(a4)
	bra	Test_Bob_Out

Spider_AnimTable:
		dc.l	level_GFX+bob0e,level_GFX+msk0e
		dc.w	0,0,32,2,2,28,24
		dc.l	level_GFX+bob0f,level_GFX+msk0f
		dc.w	0,8,18,2,2,28,24
		dc.l	level_GFX+bob0d,level_GFX+msk0d
		dc.w	0,5,19,2,7,28,15

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

	PLAY_FX	#$1d

	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

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Snake
*---------------------------------------------------------------------------
Snake_Start:
	tst.b	Snake_Wait
	bne	.wait
	lea	.pow_tab(pc),a0
	bsr	Make_Power
	move.w	d0,Bob_Power(a4)

	bsr	Kill_Objects

	sf	T_rocket_anz

	move.w	#2584-32,Snake_X
	move.w	#648-20,Snake_Y
	move.w	#2584-32+340,Bob_X_Position(a4)
	move.w	#648-20+75,Bob_Y_Position(a4)

	move.l	#Snake0,Bob_Routine(a4)		;Set next handler etc.
	clr.w	Bob_Special_1(a4)
	move.l	#snake_tab,Bob_Special_2(a4)
	clr.w	Bob_Special_4(a4)
	move.w	#340<<6,Bob_Special_5(a4)
	move.w	#75<<6,Bob_Special_6(a4)
	lea	snake_pos+28,a5			;Add snake-objects
	lea	snake_pic,a3

	movem.w	Bob_X_Position(a4),d1-d2

	moveq	#5,d7
	moveq	#1,d6
.start_tail:
	moveq	#30,d0
	lea	Area_Enter_Vector(pc),a1

	movem.l	d1-d2/d6-d7/a3-a6,-(sp)
	bsr	Search_Bob_Entry
	move.l	a4,a0
	movem.l	(sp)+,d1-d2/d6-d7/a3-a6

	move.l	#handle_snake1,Bob_Routine(a0)
	move.l	a5,Bob_Special_1(a0)
	move.l	a3,Bob_Special_3(a0)
	move.w	d6,Bob_Special_5(a0)

	add.l	#640,Bob_Graphics(a0)
	add.l	#640,Bob_Mask(a0)

	lea	32(a5),a5
	addq.w	#8,a3
	addq.w	#1,d6

	dbf	d7,.start_tail

	move.l	#handle_snake2,Bob_Routine(a0)	;Letztes Teil=Schwanz!
	add.l	#640,Bob_Graphics(a0)
	add.l	#640,Bob_Mask(a0)

	movem.w	Bob_X_Position(a4),d0-d1
	lea	snake_pos,a0			;Init tables
	moveq	#55,d7
.set_postable:
	move.w	d0,(a0)+
	move.w	d1,(a0)+
	addq.w	#4,d0
	dbf	d7,.set_postable

	lea	snake_pic,a0
	moveq	#13,d7
.set_pixtable:
	clr.l	(a0)+
	dbf	d7,.set_pixtable

	move.w	Bob_Power(a4),Snake_Power

	lea	custom,a5
	bra	Test_Bob_Out

.wait:
	move.w	#2584,Scr_X_Fix(a6)
	move.w	#648,Scr_Y_Fix(a6)
	move.w	#2584-32,Bob_X_Position(a4)
	subq.b	#1,Snake_Wait
	move.l	#Snake_Player_Dead,Dead_Vector
	rts

.pow_tab:	dc.w	25,60,25
		dc.w	40,80,40
		dc.w	75,90,55

Snake_Player_Dead:
	jsr	Die_Player
	move.w	reposX,T_posX
	move.w	reposY,T_posY
	move.w	repos_face,T_face
	move.b	#50,T_flash
	rts

handle_snake1:
	move.l	Bob_Special_3(a4),a0
	moveq	#0,d0
	move.b	2(a0),d0
	and.b	#$f0,d0
	mulu	#40,d0
	add.l	#Rotate_Buffer+16*640,d0
	move.l	d0,Bob_Graphics(a4)
	add.l	#512,d0
	move.l	d0,Bob_Mask(a4)
	bra	handle_snake

handle_snake2:
	move.l	Bob_Special_3(a4),a0
	moveq	#0,d0
	move.b	2(a0),d0
	and.b	#$f0,d0
	mulu	#40,d0
	add.l	#Rotate_Buffer+32*640,d0
	move.l	d0,Bob_Graphics(a4)
	add.l	#512,d0
	move.l	d0,Bob_Mask(a4)

handle_snake:
	move.l	Bob_Special_1(a4),a0
	move.l	(a0),Bob_X_Position(a4)
	move.w	Bob_Special_5(a4),d0
	btst	d0,Snake_Hits
	beq.s	.Normal
	move.b	#COLOUR,Bob_Race+1(a4)
	bra.s	.Col
.Normal:
	move.b	#NORM,Bob_Race+1(a4)
.Col:
	moveq	#0,d0
	tst.w	Snake_Power
	beq	Standart_Destruction
	rts

do_snake:					;Standart-Code I
	bsr	handle_repos1

	subq.b	#1,Bob_Special_4(a4)
	bpl.s	.no_change
	move.l	Bob_Special_2(a4),a0
	move.w	(a0)+,Bob_Special_4(a4)
	bpl.s	.ok
	move.w	#340<<6,Bob_Special_5(a4)
	move.w	#75<<6,Bob_Special_6(a4)
	sf	Bob_Special_1+1(a4)
	lea	snake_tab(pc),a0
	move.w	(a0)+,Bob_Special_4(a4)
.ok:
	move.l	a0,Bob_Special_2(a4)
.no_change:
	move.b	Bob_Special_4+1(a4),d0
	add.b	d0,Bob_Special_1+1(a4)
	rts

nothing:					;Standart-Code II
	move.w	Bob_Power(a4),Snake_Power
	beq	.die

	move.b	Bob_Special_1+1(a4),d0
	bsr	sin
	move.w	d0,d2
	move.b	Bob_Special_1+1(a4),d0
	bsr	cos

	asr.w	#1,d0				;COS/2.25
	move.w	d0,d1
	asr.w	#2,d1
	add.w	d1,d0
	asr.w	#1,d2				;SIN/2.25
	move.w	d2,d1
	asr.w	#2,d1
	add.w	d1,d2

	sub.w	d0,Bob_Special_5(a4)
	add.w	d2,Bob_Special_6(a4)
	movem.w	Bob_Special_5(a4),d0-d1
	asr.w	#6,d0
	asr.w	#6,d1

	add.w	Snake_X,d0
	add.w	Snake_Y,d1

	movem.w	d0-d1,Bob_X_Position(a4)

	lea	snake_pos+54*4,a0
	moveq	#53,d7
.copy:
	move.l	-(a0),4(a0)
	dbf	d7,.copy
	movem.w	d0-d1,(a0)

	move.b	Snake_Hits,d0
	lsl.b	#1,d0
	move.b	d0,Snake_Hits

	tst.w	Bob_Hit(a4)
	beq.s	.no_newhit
	clr.w	Bob_Hit(a4)
	or.b	#1,Snake_Hits
	move.b	#COLOUR,Bob_Race+1(a4)
	rts
.no_newhit:
	move.b	#NORM,Bob_Race+1(a4)
	moveq	#0,d0
	move.b	Bob_Special_1+1(a4),d0

	and.b	#$f0,d0
	mulu	#40,d0
	add.l	#Rotate_Buffer,d0
	move.l	d0,Bob_Graphics(a4)
	add.l	#512,d0
	move.l	d0,Bob_Mask(a4)
	rts
.die:
;	bsr	start_recopy
	clr.w	Scr_X_Fix(a6)
	clr.w	Scr_Y_Fix(a6)
	move.l	#$765,d0
	bsr	Standart_Destruction
	movem.l	d0-d7/a0-a6,-(sp)
	bsr	EnterScreen
	movem.l	(sp)+,d0-d7/a0-a6
	move.w	#8,Cue_Point
	move.l	#Player_Dead,Dead_Vector

	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

	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	st	Rot_I_Single_Call(a2)		;Drehen auf zwei Frames verteilen!
	move.l	#Rotate_Buffer,Dest_Obj
	clr.w	Rotate_Angle
	move.l	#Rotate_1,Rotate_Routine
	move.w	#8,Rotate_Angle_Add
	move.l	#Work_Buffer1,Rotate_Buffer_Pointer

	SONGPLAY #0
	
	lea	Rotate_Handler(pc),a1
	jmp	AddHandler

Snake0:
	bsr	do_snake
	lea	snake_pic+10*4,a3
	moveq	#9,d0
.copy:
	move.l	-(a3),4(a3)
	dbf	d0,.copy

	addq.w	#1,(a3)
	cmpi.w	#10,(a3)
	blo.s	.ok
	clr.w	(a3)
.ok:
	moveq	#1,d0
	swap	d0
	move.l	d0,d1
	move.b	Bob_Special_1+1(a4),d2
	move.b	d2,2(a3)

	move.l	#Snake1,Bob_Routine(a4)
	bra	nothing

Snake1:					;Head
	bsr	do_snake
	move.l	#Snake2,Bob_Routine(a4)
	bra	nothing

Snake2:					;Tail
	bsr	do_snake
	move.l	#Snake3,Bob_Routine(a4)
	bra	nothing

Snake3:					;Head
	bsr	do_snake
	move.l	#Snake0,Bob_Routine(a4)
	bra	nothing

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

snake_tab:
	dc.b	35,0,80,4,6,0,8,4,6,0,25,-4,24,0,10,-5,18,3,50,0
	dc.b	32,-2,1,0,31,-2
	dc.b	46,0,10,-3,1,0,10,-3,1,0,10,-3,1,0,10,-3,4,0,9,-3,2,0,10,-3
	dc.b	1,0,10,-3,1,0,10,-3
	dc.b	2,0,10,-4,18,0,10,4,20,0,2,-3,32,0,3,3,80,0
	dc.b	-1
	even

Snake_X:	dc.w	0
Snake_Y:	dc.w	0
Snake_Hits:	dc.b	0
Snake_Wait:	dc.b	0
Snake_Power:	dc.w	0

Snake_AnimTable:
		dc.l	level_GFX+bob14,level_GFX+msk14
		dc.w	0,0,32,4,2,24,26
		dc.l	level_GFX+bob15,level_GFX+msk15
		dc.w	0,0,32,4,2,24,26
		dc.l	level_GFX+bob16,level_GFX+msk16
		dc.w	0,0,32,4,2,24,26

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
	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      Brckel
*---------------------------------------------------------------------------
Brckel_Start:
	move.l	#Brckel,Bob_Routine(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.b	#30,Bob_Special_1(a4)
	move.w	Bob_Y_Position(a4),Brckel_Pos
	lea	floor_off(pc),a0
	moveq	#17,d7
.clear:
	clr.l	(a0)+
	dbf	d7,.clear
Brckel:
	movem.w	Bob_X_Position(a4),d0-d1
	move.w	d0,d2
	add.w	#144,d2
	bsr	check_foot_frame
	beq	.no_feet
	st	T_stand
	move.w	Bob_Y_Position(a4),d1
	bsr	alias_feet
	tst.b	T_rope
	bne	.no_feet
	subq.b	#1,Bob_Special_1(a4)
	bpl	.out

	SONGPLAY #4

	st	T_freeze			;Player kann sich nicht mehr rhren!

	bsr	Start_Slaves
	sf	Bob_BlitStatus(a4)
	bclr	#B_NOT_REFRESH,Bob_Race(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	#Brckel_2,Bob_Routine(a4)
	move.b	#30,Bob_Special_1(a4)

	movem.w	Bob_X_Position(a4),d0-d1

	moveq	#0,d2
	moveq	#8,d3
.loop:
	movem.l	d0-d3,-(sp)
	bsr	Set_Char
	movem.l	(sp)+,d0-d3
	add.w	#16,d0
	dbf	d3,.loop

	lea	Zoom_Controler(pc),a1
	jsr	AddHandler
	move.l	#.rout_table1,Zoom_info_pointer

	move.l	a4,-(sp)

	lea	level_GFX+bob14,a0
	lea	Work_Buffer1,a1
	lea	Rot_Info1,a2
	lea	level_GFX+msk14,a3
	moveq	#32,d0
	moveq	#4,d1
	jsr	Convert_to_Rotate

	lea	level_GFX+bob15,a0
	lea	Work_Buffer3,a1
	lea	Rot_Info1,a2
	lea	level_GFX+msk15,a3
	moveq	#32,d0
	moveq	#4,d1
	jsr	Convert_to_Rotate

	lea	level_GFX+bob16,a0
	lea	Work_Buffer4,a1
	lea	Rot_Info1,a2
	lea	level_GFX+msk16,a3
	moveq	#32,d0
	moveq	#4,d1
	jsr	Convert_to_Rotate

	move.l	(sp)+,a4

	move.w	#2640,Scr_X_Fix(a6)
	move.b	#150,Snake_Wait

.out:
	bra	Test_Bob_Out

.no_feet:
	move.b	#30,Bob_Special_1(a4)
	bra	Test_Bob_Out

.rout_table1:
	dc.l	.wait_routine_1
	dc.l	.rotate_routine_1
	dc.l	.rotate_routine_2
	dc.l	.rotate_routine_3
	dc.l	Kill_Controler

.wait_routine_1:
	move.w	#90,Wait_Verz
	lea	Wait_Handler(pc),a1
	jmp	AddHandler

.rotate_routine_1:
	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	st	Rot_I_Single_Call(a2)		;Drehen auf zwei Frames verteilen!
	move.l	#Rotate_Buffer,Dest_Obj
	clr.w	Rotate_Angle
	move.l	#Rotate_1,Rotate_Routine
	move.w	#16,Rotate_Angle_Add
	move.l	#Work_Buffer1,Rotate_Buffer_Pointer

	lea	Rotate_Handler(pc),a1
	jmp	AddHandler

.rotate_routine_2:
	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	st	Rot_I_Single_Call(a2)		;Drehen auf zwei Frames verteilen!
	move.l	#Rotate_Buffer+640*16,Dest_Obj
	clr.w	Rotate_Angle
	move.l	#Rotate_1,Rotate_Routine
	move.w	#16,Rotate_Angle_Add
	move.l	#Work_Buffer3,Rotate_Buffer_Pointer

	lea	Rotate_Handler(pc),a1
	jmp	AddHandler

.rotate_routine_3:
	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	st	Rot_I_Single_Call(a2)		;Drehen auf zwei Frames verteilen!
	move.l	#Rotate_Buffer+640*32,Dest_Obj
	clr.w	Rotate_Angle
	move.l	#Rotate_1,Rotate_Routine
	move.w	#16,Rotate_Angle_Add
	move.l	#Work_Buffer4,Rotate_Buffer_Pointer

	lea	Rotate_Handler(pc),a1
	jmp	AddHandler

Brckel_2:
	move.w	Bob_X_Position(a4),d0
	move.w	Brckel_Pos,d1
	move.w	d0,d2
	add.w	#144,d2
	bsr	check_foot_frame
	beq.s	.no_feet
	st	T_stand
	move.w	Bob_Y_Position(a4),d1
	bsr	alias_feet
.no_feet:
	subq.b	#1,Bob_Special_2(a4)
	bpl.s	.no_rumpel
	addq.b	#2,Bob_Special_2(a4)
	bchg	#0,Bob_Special_1+1(a4)
	bne.s	.lab1
	lea	.rumpel1(pc),a0
	moveq	#1,d0
	bra.s	.lab2
.lab1:
	lea	.rumpel2(pc),a0
	moveq	#-1,d0
.lab2:
	move.w	d0,T_forceY
	lea	floor_off,a1
	moveq	#17,d0
.copy:
	move.w	(a0)+,d1
	add.w	d1,(a1)+
	addq.l	#2,a1
	dbf	d0,.copy

.no_rumpel:
	lea	floor_off(pc),a0
	move.w	(a0),d1
	asr.w	#4,d1
	add.w	Brckel_Pos(pc),d1
	move.w	d1,Bob_Y_Position(a4)
	subq.b	#1,Bob_Special_1(a4)
	bpl	Test_Bob_Out
	move.b	#70,Bob_Special_1(a4)
	move.l	#Brckel_3,Bob_Routine(a4)
	sf	T_freeze
	st	T_rejump

	bra	Test_Bob_Out

.rumpel1:
	dc.w	1<<4,-1<<4,-2<<4,-1<<4,-1<<4,-1<<4,2<<4,-1<<4,1<<4
	dc.w	2<<4,-3<<4,2<<4,-2<<4,-2<<4,-2<<4,2<<4,-3<<4,2<<4
.rumpel2:
	dc.w	-1<<4,1<<4,2<<4,1<<4,1<<4,1<<4,-2<<4,1<<4,-1<<4
	dc.w	-2<<4,3<<4,-2<<4,2<<4,2<<4,2<<4,-2<<4,3<<4,-2<<4

Brckel_3:
	lea	.floor_accel(pc),a0	;Yes, do acceleration
	lea	floor_off(pc),a1
	moveq	#17,d0
.speedup:
	move.w	2(a1),d1
	add.w	d1,(a1)+
	move.w	(a0)+,d1
	add.w	d1,(a1)+
	dbf	d0,.speedup
	lea	floor_off(pc),a0
	move.w	(a0),d1
	asr.w	#4,d1
	add.w	Brckel_Pos(pc),d1
	move.w	d1,Bob_Y_Position(a4)
	subq.b	#1,Bob_Special_1(a4)
	bne	Test_Bob_Out
	clr.w	Brckel_Pos
	bra	Out_Bob

.floor_accel:
	dc.w	1,2,3,4,5,4,3,2,1
	dc.w	2,3,4,5,6,5,4,3,2

Start_Slaves:
	;Alle Brckel-Slaves eintragen!

	movem.w	Bob_X_Position(a4),d1-d2

	moveq	#7,d7				;Noch 8 Stck in dieser Reihe.
	moveq	#4,d6
.loop1:
	add.w	#16,d1
	lea	Area_Enter_Vector(pc),a1

	moveq	#28,d0

	movem.l	d1-d2/d6/d7/a4,-(sp)
	bsr	Search_Bob_Entry
	move.l	#Brckel_Slave,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	a4,a0
	movem.l	(sp)+,d1-d2/d6/d7/a4
	move.w	d6,Bob_Special_1(a0)
	btst	#0,d7
	beq.s	.no1
	sub.l	#128,Bob_Graphics(a0)
.no1:
	addq.w	#4,d6
	dbf	d7,.loop1

	movem.w	Bob_X_Position(a4),d1-d2

	addq.w	#8,d2
	moveq	#8,d7				;Noch 9 Stck in dieser Reihe.
.loop2:
	lea	Area_Enter_Vector(pc),a1

	moveq	#28,d0

	movem.l	d1-d2/d6/d7/a4,-(sp)
	bsr	Search_Bob_Entry
	move.l	#Brckel_Slave2,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	add.l	#64,Bob_Graphics(a4)
	move.l	a4,a0
	movem.l	(sp)+,d1-d2/d6/d7/a4
	move.w	d6,Bob_Special_1(a0)
	btst	#0,d7
	beq.s	.no2
	sub.l	#128,Bob_Graphics(a0)
.no2:
	add.w	#16,d1
	addq.w	#4,d6
	dbf	d7,.loop2
	rts

Brckel_Slave:
	tst.w	Brckel_Pos
	beq	Out_Bob_Damage

	move.b	#BOB_NOCOL,Bob_Used(a4)
	bclr	#B_NOT_REFRESH,Bob_Race(a4)
	move.w	Bob_Special_1(a4),d0
	lea	floor_off(pc),a0
	move.w	(a0,d0.w),d1
	asr.w	#4,d1
	add.w	Brckel_Pos(pc),d1
	move.w	d1,Bob_Y_Position(a4)
	bra	Test_Bob_Out

Brckel_Slave2:
	tst.w	Brckel_Pos
	beq	Out_Bob_Damage

	bclr	#B_NOT_REFRESH,Bob_Race(a4)
	move.w	Bob_Special_1(a4),d0
	lea	floor_off(pc),a0
	move.w	(a0,d0.w),d1
	asr.w	#4,d1
	add.w	Brckel_Pos(pc),d1
	addq.w	#8,d1
	move.w	d1,Bob_Y_Position(a4)
	bra	Test_Bob_Out

Brckel_Pos:	dc.w	0

floor_off:
	ds.w	18*2

Brckel_AnimTable:
		dc.l	character+(55*128),0
		dc.w	0,0,8,0,4,144,12

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Robot
*---------------------------------------------------------------------------
Robot_Start:
	move.l	#Robot,Bob_Routine(a4)
	move.w	Bob_Special_4(a4),d0
	smi	Bob_Special_3(a4)
	move.b	Bob_Special_3(a4),Bob_Special_5(a4)
	bpl.s	.ok
	neg.w	d0
	move.l	#Robot_AnimTableL,Bob_Next_Anim(a4)
	move.l	d0,-(sp)
	bsr	Get_Next_Bob_Frame
	move.l	(sp)+,d0
.ok:
	move.w	d0,Bob_Special_2(a4)

	move.b	#63,Bob_Special_1+1(a4)		;Wait 64 frames
	move.b	#50,Bob_Special_3+1(a4)

	moveq	#0,d0
	move.b	T_power,d0
	asl.w	#4,d0
	add.w	d0,Bob_Power(a4)

Robot:
	move.l	#$100,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	moveq	#0,d0				;Handle current mode-routine
	move.b	Bob_Special_1(a4),d0
	jmp	.job_tab(pc,d0.w)
.job_tab:
	bra.w	.rstand
	bra.w	.rstart
	bra.w	.rfly
	bra.w	.rdown

.end_robot:
	move.w	T_posX(pc),d0			;Face the player...
	sub.w	Bob_X_Position(a4),d0
	add.w	Scr_X_Level_Pos(a6),d0
	tst.b	Bob_Special_3(a4)
	bne.s	.lab0
	tst.w	d0
	bmi.s	.turn
	bra.s	.dont_turn
.lab0:
	tst.w	d0
	bmi.s	.dont_turn
.turn:
	not.b	Bob_Special_3(a4)
	lea	Robot_AnimTableL(pc),a0
	bne.s	.left
	lea	Robot_AnimTableR(pc),a0
.left:
	move.l	a0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
.dont_turn:
	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0

	cmpi.w	#-32,d0					;On screen -> shoot !
	blt.s	.no_shot
	cmpi.w	#320-16,d0
	bgt.s	.no_shot
	subq.b	#1,Bob_Special_3+1(a4)			;Time for next shot ?
	bpl.s	.no_shot
	addi.b	#75,Bob_Special_3+1(a4)
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#17,d1
	tst.b	Bob_Special_3(a4)
	beq.s	.right1
	moveq	#-2,d2
	subq.w	#8,d0
	bra.s	.start
.right1:
	moveq	#2,d2
	addi.w	#48,d0
.start:
	asl.w	#6,d2			;Allocate bullet
	moveq	#0,d3			;Y-Speed
	bsr	Start_Shoot
.no_shot:
	tst.b	Bob_Special_1(a4)
	bne	Standart_BobAnim
	cmp.l	#Robot_AnimTableL,Bob_Act_Anim(a4)
	beq	Test_Bob_Out
	cmp.l	#Robot_AnimTableR,Bob_Act_Anim(a4)
	beq	Test_Bob_Out
	blt.s	.set_left
	move.l	#Robot_AnimTableR,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	bra	Test_Bob_Out
.set_left:
	move.l	#Robot_AnimTableL,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	bra	Test_Bob_Out

.rstand:
	subq.b	#1,Bob_Special_1+1(a4)
	bne	.end_robot
	move.b	#15,Bob_Special_1+1(a4)
	addq.b	#4,Bob_Special_1(a4)
	bra	.end_robot

.rstart:
	subq.w	#1,Bob_Y_Position(a4)			;Move robot up
	subq.b	#1,Bob_Special_1+1(a4)			;Time up ?
	bne	.end_robot
	addq.b	#4,Bob_Special_1(a4)		;Change to fly mode
	move.w	Bob_Special_2(a4),Bob_Special_4(a4)
	clr.w	Bob_Special_7(a4)
	bra	.end_robot

.swing_tab:
	dc.b	-1,-1,1,1,1,1,-1,-1

.rfly:
	movem.w	Bob_X_Position(a4),d0-d1	;Check if wall detected...
	tst.b	Bob_Special_5(a4)
	bne.s	.to_left
	add.w	#40,d0
.to_left:
	add.w	#12,d1
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.no_xmove
	addq.w	#8,d1
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.no_xmove
	addq.w	#8,d1
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.no_xmove
	tst.b	Bob_Special_5(a4)
	beq.s	.to_right
	subq.w	#1,Bob_X_Position(a4)
	bra.s	.no_xmove
.to_right:
	addq.w	#1,Bob_X_Position(a4)
.no_xmove:

	movem.w	Bob_X_Position(a4),d0/d2	;Follow player
	move.w	d2,d1
	sub.w	T_posY(pc),d2
	sub.w	Scr_Y_Level_Pos(a6),d2
	beq.s	.no
	bmi.s	.down
	cmpi.w	#8,d2				;More than 8 pixel diff. ?
	blo.s	.no
	subq.w	#1,d1
	move.w	d1,d2
	addi.w	#46,d1
	bra.s	.check
.down:
	cmpi.w	#-8,d2				;More than 8 pixel diff. ?
	blt.s	.no
	addq.w	#1,d1
	move.w	d1,d2
.check:
	move.w	d2,d7				;Wall ?
	addq.w	#8,d0
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.no
	addi.w	#12,d0
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.no
	addi.w	#12,d0
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.no
	move.w	d7,Bob_Y_Position(a4)
.no:

	subq.b	#1,Bob_Special_7(a4)		;Swing-delay over
	bpl.s	.no_swing
	addq.b	#3,Bob_Special_7(a4)		;Let robot swing a little
	move.b	Bob_Special_7+1(a4),d0
	and.w	#7,d0
	lea	.swing_tab(pc),a0
	move.b	0(a0,d0.w),d0
	ext.w	d0
	add.w	d0,Bob_Y_Position(a4)
	addq.b	#1,Bob_Special_7+1(a4)
.no_swing:
	subq.w	#1,Bob_Special_4(a4)		;Over ?
	bpl	.end_robot
	not.b	Bob_Special_5(a4)		;Next phase etc.
	addq.b	#4,Bob_Special_1(a4)
	bra	.end_robot

.rdown:						;Lower robot down
	addq.w	#1,Bob_Y_Position(a4)

	movem.w	Bob_X_Position(a4),d0-d1	;Ground reached
	addi.w	#46,d1
	addi.w	#24,d0
	bsr	check_obj_kollision
	beq	.end_robot
	sf	Bob_Special_1(a4)		;Next mode...
	st	Bob_Special_1+1(a4)
	bra	.end_robot

Robot_AnimTableL:
		dc.l	level_GFX+bob09,level_GFX+msk09
		dc.w	0,0,48,2,2,28,44
		dc.l	level_GFX+bob0a,level_GFX+msk0a
		dc.w	0,0,48,2,2,28,44
		dc.w	ENTRY_END
		dc.l	Robot_AnimTableL

Robot_AnimTableR:
		dc.l	level_Buffer+bob09-bob01,level_Buffer+msk09-bob01
		dc.w	0,0,48,2,2,28,44
		dc.l	level_Buffer+bob0a-bob01,level_Buffer+msk0a-bob01
		dc.w	0,0,48,2,2,28,44
		dc.w	ENTRY_END
		dc.l	Robot_AnimTableR

*---------------------------------------------------------------------------
*	Routine and AnimTable of      GlasAlien
*---------------------------------------------------------------------------
GlasAlien:
	bsr	Set_Refresh
	move.b	#BOB_NOPLCOL,Bob_Used(a4)
	tst.w	Bob_Hit(a4)
	beq.s	.no_hit
	move.l	#Glas_AnimTableHit,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	move.w	#2,Bob_Anim_Delay(a4)
	clr.w	Bob_Hit(a4)
.no_hit:
	tst.w	Bob_Power(a4)
	bne	Standart_BobAnim

	movem.w	Bob_X_Position(a4),d0-d1
	sub.w	#40,d1				;Zeigt auf das erste Modul des Kanisters.
	lsr.w	#4,d0
	move.l	Scr_Level(a6),a0

	adda.w	d0,a0
	lsr.w	#4,d1

	mulu	Scr_Level_Width(a6),d1
	add.l	d1,a0

	move.w	Scr_Level_Width(a6),d0
	move.b	#20,-1(a0)
	move.b	#21,(a0)
	move.b	#28,-1(a0,d0.w)
	move.b	#29,(a0,d0.w)
	add.w	d0,d0
	move.b	#36,-1(a0,d0.w)
	move.b	#37,(a0,d0.w)

	;Kopieren der Grafik in den Restore-Screen

	movem.w	Bob_X_Position(a4),d0-d1
	subq.w	#8,d1

	movem.l	d0-d1,-(sp)
	moveq	#20,d2
	bsr	Set_Char
	movem.l	(sp)+,d0-d1

	add.w	#16,d1

	movem.l	d0-d1,-(sp)
	moveq	#28,d2
	bsr	Set_Char
	movem.l	(sp)+,d0-d1

	add.w	#16,d1

	movem.l	d0-d1,-(sp)
	moveq	#36,d2
	bsr	Set_Char
	movem.l	(sp)+,d0-d1

	sub.w	#32,d1
	add.w	#16,d0

	movem.l	d0-d1,-(sp)
	moveq	#21,d2
	bsr	Set_Char
	movem.l	(sp)+,d0-d1

	add.w	#16,d1

	movem.l	d0-d1,-(sp)
	moveq	#29,d2
	bsr	Set_Char
	movem.l	(sp)+,d0-d1

	add.w	#16,d1

	movem.l	d0-d1,-(sp)
	moveq	#37,d2
	bsr	Set_Char
	movem.l	(sp)+,d0-d1

	move.l	a4,-(sp)
	bsr	Start_Explo
	move.l	(sp)+,a4
	sub.w	#16,Bob_Y_Position(a4)

	move.l	a4,-(sp)
	bsr	Start_Explo
	move.l	(sp)+,a4

	movem.w	Bob_X_Position(a4),d1-d2
	add.w	#16,d2
	moveq	#26,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry		;Starten des Aliens.
	move.l	(sp)+,a4

	add.w	#32,Bob_Y_Position(a4)

	moveq	#0,d0
	bra	Standart_Destruction

Alien:
	movem.w	Bob_X_Position(a4),d0-d1
	add.w	#20,d1
	add.w	#16,d0
	bsr	check_obj_kollision
	bne.s	.no_move
	addq.w	#2,Bob_Y_Position(a4)
.no_move:
	moveq	#$20,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	bra	Standart_BobAnim

Alien_AnimTable:
		dc.l	level_GFX+bob0e,level_GFX+msk0e
		dc.w	0,0,28,2,2,28,24
		dc.l	level_GFX+bob0f,level_GFX+msk0f
		dc.w	0,5,19,2,7,28,15
.label:
		dc.l	level_GFX+bob0d,level_GFX+msk0d
		dc.w	0,8,18,2,10,28,14
		dc.w	ENTRY_END
		dc.l	.label

Glas_AnimTable:
		dc.l	AD_Bob+Abob01,0
		dc.w	0,1,28,2,2,28,33
		dc.l	AD_Bob+Abob02,0
		dc.w	0,1,28,2,2,28,33
		dc.w	ENTRY_END
		dc.l	Glas_AnimTable
Glas_AnimTableHit:
		dc.l	AD_Bob+Abob03,0
		dc.w	0,1,28,2,2,28,33
		dc.w	ENTRY_END
		dc.l	Glas_AnimTable


Set_Refresh:
	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	bmi.s	.set_on
	move.w	Bob_to_Info_Offs(a4),d7
	add.w	Bob_I_Width(a4,d7.w),d0
	cmp.w	#304,d0
	bge.s	.set_on
	move.w	Bob_Y_Position(a4),d0
	sub.w	Scr_Y_Level_Pos(a6),d0
	bmi.s	.set_on
	add.w	Bob_Height(a4),d0
	cmp.w	#208,d0
	blt.s	.set_off
.set_on:
	bclr	#B_NOT_REFRESH,Bob_Race(a4)
	rts
.set_off:
	bset	#B_NOT_REFRESH,Bob_Race(a4)
	rts

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Amarillo
*---------------------------------------------------------------------------

Amarillo_Start:
	move.b	#-1,Bob_Special_1(a4)
	move.l	#Amarillo,Bob_Routine(a4)
	move.w	#50,Bob_Special_4(a4)
	move.w	#-1,Bob_Special_2(a4)
Amarillo:
	bsr	Standart_Hit_Handler
	beq	.destruct
	tst.w	Bob_Special_4(a4)
	bpl.s	.lab1
	move.w	T_posX,d0
	sub.w	Bob_X_Position(a4),d0
	add.w	Scr_X_Level_Pos(a6),d0
	bpl.s	.noneg
	neg.w	d0
.noneg:
	cmp.w	#100,d0
	bhs	.lab0
	tst.w	Zoom_finished
	bne.s	.lab0
	move.l	#Amarillo_Roll,Bob_Routine(a4)

	clr.w	Bob_Hit(a4)
	move.b	#NORM,Bob_Race+1(a4)

	lea	Amarillo_RollTableL(pc),a0
	moveq	#-4,d0
	tst.w	Bob_Special_2(a4)
	bmi.s	.set
	lea	Amarillo_RollTableR(pc),a0
	moveq	#4,d0
.set:
	move.l	a0,Bob_Next_Anim(a4)
	move.b	d0,Bob_Special_6(a4)
	bsr	Get_Next_Bob_Frame

	clr.w	Bob_Special_3(a4)
	move.w	#6,Bob_Special_4(a4)
	move.w	Bob_Special_2(a4),Bob_Special_5(a4)
	move.b	Bob_Power+1(a4),Bob_Special_6+1(a4)
	sf	Bob_Special_1+1(a4)
	bra	Test_Bob_Out
.lab1:
	subq.w	#1,Bob_Special_4(a4)
.lab0:
	move.w	Bob_Special_2(a4),d0
	add.w	d0,Bob_X_Position(a4)

	movem.w	Bob_X_Position(a4),d0-d1
	add.w	#24,d1
	addq.w	#8,d0
	tst.w	Bob_Special_2(a4)
	bmi.s	.to_left
	add.w	#32,d0
.to_left:
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.change_dir
	addi.w	#24,d1
	bsr	check_obj_kollision
	beq.s	.change_dir

	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	tst.w	Bob_Special_2(a4)
	bpl.s	.to_right
	cmp.w	#-50,d0
	ble.s	.change_dir
	bra.s	.no_change
.to_right:
	cmpi.w	#316,d0
	blt.s	.no_change
.change_dir:
	lea	Amarillo_AnimTableL(pc),a0
	neg.w	Bob_Special_2(a4)
	bmi.s	.set_anim
	lea	Amarillo_AnimTableR(pc),a0
.set_anim:
	move.l	a0,Bob_Next_Anim(a4)
	clr.b	Bob_Special_1+1(a4)
.no_change:

	subq.b	#1,Bob_Special_1+1(a4)
	bpl.s	.out
	addq.b	#6,Bob_Special_1+1(a4)
	bsr	Get_Next_Bob_Frame
.out:
	bra	Test_Bob_Out

.destruct:
	move.l	#$160,d0
	addq.w	#8,Bob_X_Position(a4)
	addq.w	#8,Bob_Y_Position(a4)
	bra	Standart_Destruction

Amarillo_Roll:		;Beim Starten ist die Zusammenzieh-Phase gesetzt!
	tst.b	Bob_Special_1+1(a4)
	bne	roll_out

	move.l	Bob_Act_Anim(a4),a0
	cmp.w	#7+8,14(a0)
	beq	do_roll

	subq.w	#1,Bob_Special_4(a4)
	bpl	Test_Bob_Out
	bsr	Get_Next_Bob_Frame
	move.w	#300,Bob_Special_4(a4)

	lea	Amarillo_Info_2(pc),a0
	sub.l	a4,a0
	move.w	a0,Bob_to_Info_Offs(a4)

do_roll:
	move.w	Bob_Special_2(a4),d0
	add.w	d0,d0
	add.w	d0,Bob_X_Position(a4)

	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#24,d1
	add.w	#12,d0
	tst.w	Bob_Special_2(a4)
	bmi.s	.to_left
	add.w	#12,d0
.to_left:
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.change_dir
	addi.w	#24,d1
	bsr	check_obj_kollision
	beq.s	.change_dir
	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	tst.w	Bob_Special_2(a4)
	bpl.s	.to_right
	cmp.w	#-48,d0
	ble.s	.change_dir
	bra.s	.no_change
.to_right:
	cmp.w	#316,d0
	blt.s	.no_change
.change_dir:
	neg.w	Bob_Special_2(a4)
	neg.b	Bob_Special_6(a4)
.no_change:
	moveq	#1,d0
	swap	d0
	move.l	d0,d1

	move.w	Bob_Special_3(a4),d2		;Winkel!
	lsr.w	#3,d2
	and.w	#31,d2
	mulu	#640,d2
	add.l	#Rotate_Buffer,d2
	move.l	d2,Bob_Graphics(a4)
	add.l	#512,d2
	move.l	d2,Bob_Mask(a4)

	move.b	Bob_Special_6(a4),d0
	sub.b	d0,Bob_Special_3+1(a4)

	tst.w	Bob_Special_4(a4)
	bmi.s	roll_end
	subq.w	#1,Bob_Special_4(a4)
	bpl	Test_Bob_Out
roll_end:
	move.b	Bob_Special_3+1(a4),d0
	bpl.s	.noneg
	neg.b	d0
.noneg:
	cmpi.b	#4,d0
	bhi	Test_Bob_Out
	st	Bob_Special_1+1(a4)
	move.w	#6,Bob_Special_4(a4)
	bra	Test_Bob_Out

roll_out:
	subq.w	#1,Bob_Special_4(a4)
	bpl	Test_Bob_Out
	move.l	#Amarillo,Bob_Routine(a4)
	lea	Amarillo_AnimTableL(pc),a0
	move.w	Bob_Special_5(a4),Bob_Special_2(a4)
	bmi.s	.set
	lea	Amarillo_AnimTableR(pc),a0
.set:
	move.l	a0,Bob_Next_Anim(a4)
	sf	Bob_Special_1+1(a4)
	move.b	Bob_Special_6+1(a4),Bob_Power+1(a4)
	clr.b	Bob_Power(a4)
	clr.w	Bob_Hit(a4)
	move.w	#180,Bob_Special_4(a4)

	lea	Amarillo_Info_1(pc),a0
	sub.l	a4,a0
	move.w	a0,Bob_to_Info_Offs(a4)

	bsr	Get_Next_Bob_Frame
	bra	Test_Bob_Out

Amarillo_AnimTableL:
		dc.l	level_GFX+bob10,level_GFX+msk10
		dc.w	0,0,37,2,2,28,33
		dc.l	level_GFX+bob11,level_GFX+msk11
		dc.w	1,0,37,2,2,28,33
		dc.w	ENTRY_END
		dc.l	Amarillo_AnimTableL

Amarillo_AnimTableR:
		dc.l	level_Buffer+bob0d-bob01,level_Buffer+bob0d-bob01+37*6*4
		dc.w	0,0,37,2,2,28,33
		dc.l	level_Buffer+bob0d-bob01+bob11-bob10,level_Buffer+bob0d-bob01+msk11-msk10+37*6*4
		dc.w	-1,0,37,2,2,28,33
		dc.w	ENTRY_END
		dc.l	Amarillo_AnimTableR

Amarillo_RollTableL:
		dc.l	level_GFX+bob12,level_GFX+msk12
		dc.w	0,4,33,2,2,28,33
		dc.l	Rotate_Buffer,Rotate_Buffer+32*4*4
		dc.w	0,4,32,8+7,6+7+2,20,20

Amarillo_RollTableR:
		dc.l	level_Buffer+bob0d-bob01+bob12-bob10,level_Buffer+bob0d-bob01+msk12-msk10+37*6*4
		dc.w	0,4,33,2,2,28,33
		dc.l	Rotate_Buffer,Rotate_Buffer+32*4*4
		dc.w	0,4,32,8+7,6+7,20,20

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Mllschacht
*---------------------------------------------------------------------------
MllschachtStart:
	move.l	#Mllschacht,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
Mllschacht:
	move.w	Bob_Y_Position(a4),d0
	sub.w	Scr_Y_Level_Pos(a6),d0
	cmp.w	T_posY(pc),d0
	bgt	.out
	tst.b	Bob_Special_2(a4)
	beq.s	.not_active

	subq.b	#1,Bob_Special_2+1(a4)
	bpl.s	.not_active

	addq.b	#4,Bob_Special_2+1(a4)

	bsr	rnd
	movem.w	Bob_X_Position(a4),d1-d2
	and.w	#63,d0
	sub.w	#32,d0
	add.w	d0,d1				;X-Pos
	sub.w	#48,d2
	moveq	#23,d0				;Mll
	lea	Area_Enter_Vector(pc),a1

	move.w	d1,d3
	sub.w	Scr_X_Level_Pos(a6),d3
	cmp.w	#304,d3
	bgt.s	.not_active
	cmp.w	#-32,d3
	ble.s	.not_active

	move.w	d2,d3
	sub.w	Scr_Y_Level_Pos(a6),d3
	cmp.w	#208,d3
	bgt.s	.not_active

	move.l	a4,-(sp)
	bsr	Search_Bob_Entry
	bsr	rnd
	andi.w	#1,d0
	addq.w	#6,d0
	move.w	d0,Bob_Special_1(a4)
	bsr	rnd
	and.w	#3,d0
	mulu	#22,d0
	add.l	#Mll_AnimTable,d0
	move.l	d0,Bob_Next_Anim(a4)
	move.l	#Mll,Bob_Routine(a4)
	bsr	Get_Next_Bob_Frame
	move.l	(sp)+,a4

.not_active:
	subq.w	#1,Bob_Special_1(a4)
	bpl.s	.out
	not.b	Bob_Special_2(a4)
	bne.s	.lab2
	move.w	#300,Bob_Special_1(a4)
	sf	Bob_Special_2+1(a4)
	bra.s	.out
.lab2:
	move.w	#150,Bob_Special_1(a4)
.out:
	bra	Test_Bob_Out2

Mll:
	move.w	Bob_Special_1(a4),d0
	add.w	d0,Bob_Y_Position(a4)
	tst.w	Bob_Hit(a4)
	beq	Test_Bob_Out
	moveq	#0,d0
	bra	Standart_Destruction

Mll_AnimTable:
		dc.l	level_GFX+bob02+26*4*4,level_GFX+msk02+26*4
		dc.w	0,0,27,2,2,28,23
		dc.l	level_GFX+bob0d+17*4*4,level_GFX+msk0d+17*4
		dc.w	0,0,18,2,2,28,14
		dc.l	level_Buffer+bob02-bob01+26*4*4,level_Buffer+msk02-bob01+26*4
		dc.w	0,1,27,2,2,28,24
		dc.l	level_GFX+bob0d+17*4*4,level_GFX+msk0d+17*4
		dc.w	0,0,18,2,2,28,14

*---------------------------------------------------------------------------
*	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	#16,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	#1,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.b	T_face			;Which direction ?
	beq.s	.to_left
	moveq	#RSPEED<<1,d0	;Right
	move.b	#128,d1
	move.w	#320,d2
	bra.s	.set
.to_left:
	moveq	#-RSPEED<<1,d0	;Left
	moveq	#0,d1
	moveq	#0,d2
.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)
	move.w	d2,Bob_Special_6(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

;		tst.b	game_level.w		;Easy ?
;		.if (zero) {
;			subq.b	#1,O_POW(a0)
;		}

	subq.w	#1,Bob_Power(a0)
	bpl.s	.powerok
	clr.w	Bob_Power(a0)
.powerok:
	move.w	#4,Bob_Hit(a0)

	bra.s	.no_hit
.end_rocket:					;make explosion (free rocket)
	subq.b	#1,T_rocket_anz
	subq.w	#8,Bob_X_Position(a4)
	subq.w	#8,Bob_Y_Position(a4)
	bsr	Out_Bob_Damage
	move.l	a4,-(sp)
	bsr	Start_Explo
	move.w	#0,Bob_Anim_Delay_Init(a4)	;Die Explo soll schnell sein!
	move.l	(sp)+,a4
	rts
.no_hit:

;	movem.w	scroll1+xdir.w,d0-d1		;Handle scrolling (fix-format)
;	asl.w	#3,d0
;	asl.w	#3,d1
;	sub.w	d0,O_USR3(a5)
;	sub.w	d1,O_USR4(a5)

	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)

	tst.w	Bob_Special_5(a4)
	bmi	.free_rkt

	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,O_PHA(a5)			;Take as phase

	movem.w	Bob_Special_6(a4),d6-d7

;	move.b	O_SHOW(a5),d0			;Right mask-value ?
;	cmp.b	rocket_mask.w,d0
;	.if (equal) {

	tst.w	quarter_pixel
	bne	.spare_time

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

		movem.w	Bob_X_Position(a4),d2-d3
		moveq	#-1,d4				;Set first dummy delta...
		move.l	Act_Bob_Structure,a0
.loop:
		tst.b	Bob_Used(a0)
		bmi.s	.next
		beq.s	.next
;		cmp.l	a4,a0
;		beq.s	.next

;		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
				move.w	Bob_Y_Position(a0),d1
				sub.w	d3,d1
				muls	d1,d1
				muls	d0,d0
				add.l	d1,d0
				cmp.l	d4,d0		;Lower than last choise ?
				bhs.s	.next
					move.w	Bob_X_Position(a0),d6	;Yes, remember position
					move.w	Bob_Y_Position(a0),d7
					move.l	d0,d4		;Remember 'distance'
.next:
		lea	BOB_ENTRY_LENGTH(a0),a0
		cmp.l	#Bob_Structure_End,a0
		bne.s	.loop
.found:
	sub.w	Scr_X_Level_Pos(a6),d6
	sub.w	Scr_Y_Level_Pos(a6),d7
	movem.w	d6-d7,Bob_Special_6(a4)

	
.spare_time:

	bsr	Calc_angle			;Calc new angle

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

		move.b	d0,d2			;Which side is the shorter

		sub.b	d1,d2			;way ?
		sub.b	d0,d1
		cmp.b	d1,d2
		bls.s	.not_left

			cmpi.b	#RSPEED,d1	;Difference big enough ?
			bls.s	.add
				addi.b	#RSPEED,Bob_Special_3(a4)	;Yes...
				bra.s	.ok
.add:
			add.b	d1,Bob_Special_3(a4)	;No, only add right diff.
		bra.s	.ok
.not_left:
			cmpi.b	#RSPEED,d2	;Difference big enough ?
			bls.s	.sub
				subi.b	#RSPEED,Bob_Special_3(a4)	;Yes...
				bra.s	.ok
.sub:
			sub.b	d2,Bob_Special_3(a4)	;No...
.ok:
		move.b	Bob_Special_3(a4),d0		;Calc x,y - deltas
		jsr	sin
		move.w	d0,d2
		move.b	Bob_Special_3(a4),d0
		jsr	cos
		neg.w	d0
		asr.w	#4,d0
		asr.w	#4,d2
		movem.w	d0/d2,Bob_Special_1(a4)	;Store deltas

.no_new_dir:
	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 for screen-borders
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1
	addi.w	#64,d0
	addi.w	#64,d1
	cmpi.w	#320+128,d0
	bhs.s	.free_rkt
	cmpi.w	#208+128,d1
	blo.s	.no_free
.free_rkt:
	subq.b	#1,T_rocket_anz
	bra	Out_Bob_Damage
.no_free:
	movem.w	Bob_X_Position(a4),d0-d1	;Check wall-collision
	bsr	check_obj_kollision
	bne	.end_rocket			;Rocket hit ground

	rts

R_help:	dc.l	0

Calc_angle:					;d6,d7 target-coordinates
	move.l	a6,-(sp)
	movem.w	Bob_X_Position(a4),d4-d5	;Rocket coordinates
	sub.w	Scr_X_Level_Pos(a6),d4
	sub.w	Scr_Y_Level_Pos(a6),d5

	moveq	#0,d1				;Calc |DY|
	move.w	d7,d1
	sub.w	d5,d1
	bpl.s	.ok1
		neg.w	d1
.ok1:
	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.w	d1,d0				;DX^2+DY^2
	jsr	sqrt				;Pythagoras...
	move.l	a6,d1				;Get and adjust |DY|
	asl.w	#7,d1
	tst.w	d0
	bne.s	.ok2
		moveq	#1,d0
.ok2:
	divu	d0,d1				;SIN(X)   (|DY|/R)
	moveq	#0,d0				;Calculate ASIN
	lea	asin_tab,a0
	move.b	0(a0,d1.w),d0			;Angle	(ASIN(SIN(X)))
	cmp.w	d6,d4				;Adjust angle to full 256 "degrees"

	ble.s	.lab0
		cmp.w	d7,d5
		ble.s	.lab1
			move.w	#256,d1
			sub.w	d0,d1
			bra.s	.set_angle
.lab1:
		move.w	d0,d1
	bra.s	.set_angle
.lab0:
		cmp.w	d7,d5
		ble.s	.lab2
			move.w	d0,d1
			addi.w	#128,d1
			bra.s	.set_angle
.lab2:
		move.w	#128,d1
		sub.w	d0,d1
.set_angle:					;Save angle with float-part
	andi.w	#255,d1				;Mask only lower 8 bits
	move.l	(sp)+,a6
	rts


	IFEQ	custom

Rocket:

	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
	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
	bra.s	.setit
.set_noflip:
	lea	Rocket_Info_1(pc),a0
	sub.l	a4,a0
.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:
	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:
	bsr	.calc_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

.calc_angle:
	move.l	a6,-(sp)
	movem.w	Bob_X_Position(a4),d4-d5	;Rocket coordinates
	tst.w	d5
	bpl.s	.cok2
	moveq	#0,d5
.cok2:
	moveq	#0,d1				;Calc |DY|
	move.w	d7,d1
	sub.w	d5,d1
	bpl.s	.cok
	neg.w	d1
.cok:
	move.w	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.w	d1,d0				;DX^2+DY^2
	bsr	sqrt				;Pythagoras...
	move.l	a6,d1				;Get and adjust |DY|
	asl.w	#7,d1
	tst.w	d0
	beq.s	.nodiv
	divu	d0,d1				;SIN(X)   (|DY|/R)
.nodiv:
	moveq	#0,d0				;Calculate ASIN
	lea	asin_tab(pc),a0
	move.b	0(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
	andi.w	#255,d1				;Mask only lower 8 bits
	rts

	ENDC

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

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Stamper
*---------------------------------------------------------------------------
Stamper:
;	bsr	Set_Refresh
	move.w	Bob_Y_Position(a4),d0
	sub.w	Scr_Y_Level_Pos(a6),d0
	bmi.s	.no_set
	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	cmp.w	#50,d0
	blt.s	.no_set
	cmp.w	#280,d0
	bgt.s	.no_set
	move.w	Bob_Special_4(a4),Scr_Down_Fix(a6)
.no_set:
	subq.b	#1,Bob_Special_2(a4)
	bpl.s	.no_ymove
	move.w	Bob_Special_1(a4),d0
	add.w	d0,d0
	lea	.swing_tab(pc),a0
	move.w	(a0,d0.w),Bob_Special_2(a4)
	addq.w	#1,Bob_Special_1(a4)
	cmpi.w	#32,Bob_Special_1(a4)
	bne.s	.no_ymove
	clr.w	Bob_Special_1(a4)
.no_ymove:
	move.b	Bob_Special_2+1(a4),d6
	ext.w	d6
	movem.w	Bob_X_Position(a4),d0-d1
	add.w	d6,Bob_Y_Position(a4)

	move.w	d0,d2
	add.w	#64,d2
	jsr	check_foot_frame
	beq.s	.no_feet
	st	T_stand
;	tst.b	Bob_Special_7(a4)
;	bne.s	.force
	move.w	Bob_Y_Position(a4),d1
	jsr	alias_feet
	st	Bob_Special_7(a4)
.force:
;	move.w	d6,T_forceY
	bra	.restore
.no_feet:
	sf	Bob_Special_7(a4)
.restore:
;	move.w	Bob_X_Position(a4),d0
;	sub.w	Scr_X_Level_Pos(a6),d0
;
;	move.w	Scr_X_Level_Pos(a6),d2
;	and.w	#15,d2
;	add.w	d2,d0
;
;	move.w	d0,d4
;	ext.l	d0
;	asr.w	#3,d0
;	bclr	#0,d0
;
;	move.w	Bob_Y_Position(a4),d1
;	sub.w	Scr_Y_Level_Pos(a6),d1
;
;	tst.w	d6
;	bgt.s	.down
;	add.w	#31,d1
;	bra.s	.up
;.down:
;	subq.w	#1,d1
;.up:
;	bmi	Test_Bob_Out
;	cmp.w	#208,d1
;	bgt	Test_Bob_Out
;
;	move.w	Scr_Plane_Height(a6),d3
;	sub.w	Scr_Y_Play_Anf(a6),d3
;	cmp.w	d3,d1
;	bge.s	.under_wrap
;
;	;Komplett drber.
;
;	add.l	Scr_Blt_Adr1(a6),d0
;	bra.s	.goon
;.under_wrap:
;
;	;Komplett drunter.
;
;	add.l	Scr_Blt_Adr2(a6),d0
;	sub.w	d3,d1
;.goon:
;	mulu	Scr_Plane_Width(a6),d1
;	add.l	d1,d0
;
;	move.l	d0,a0
;	move.l	a0,-(sp)
;	add.l	Scr_Refresh_Field(a6),a0
;	bsr	.one_screen
;	move.l	(sp),a0
;	add.l	Scr_Supply_Field(a6),a0
;	bsr	.one_screen
;	move.l	(sp)+,a0
;
;	add.l	Scr_Supply_Field(a6),a0

;	moveq	#3,d5
.add:
;	tst.w	d4
;	bpl.s	.ok
;	add.w	#16,d4
;	addq.l	#2,a0
;	dbf	d5,.add
;	bra	Test_Bob_Out
.ok:
;	tst.w	Scr_Screen_num(a6)
;	bne	.use_list1
;	lea	Rest_List2,a1
;	bra.s	.use_list2
.use_list1:
;	lea	Rest_List1,a1
.use_list2:
;	tst.w	(a1)
;	beq.s	.insert
;	lea	8(a1),a1
;	bra.s	.use_list2
.insert:
;	addq.w	#1,d5
;	move.w	d5,d0
;	or.w	#64*4*2,d0
;	move.w	d0,(a1)+

;	move.w	Scr_Single_Plane(a6),d0
;	sub.w	d5,d0
;	sub.w	d5,d0
;	move.w	d0,(a1)+
;	move.l	a0,(a1)+

;	clr.l	(a1)

	bra	Test_Bob_Out

;.one_screen:
;	move.w	Scr_Single_Plane(a6),d0
;
;	lea	(a0,d0.w),a1
;	lea	(a1,d0.w),a2
;	lea	(a2,d0.w),a3
;
;	move.w	d4,d7
;
;	tst.w	d6
;	bra.s	.down2
;	moveq	#3,d5
;.loop2:
;	tst.w	d7
;	bmi.s	.not2
;	cmp.w	#304,d7
;	bgt.s	.not2
;	clr.w	(a0)
;	clr.w	(a1)
;	clr.w	(a2)
;	clr.w	(a3)
;.not2:
;	addq.l	#2,a0
;	addq.l	#2,a1
;	addq.l	#2,a2
;	addq.l	#2,a3
;	add.w	#16,d7
;	dbf	d5,.loop2
;	rts
;
;.down2:
;	moveq	#3,d5
;.loop:
;	tst.w	d7
;	bmi.s	.not1
;	cmp.w	#304,d7
;	bgt.s	.not1
;	clr.w	(a0)
;	clr.w	(a1)
;	move.w	#-1,(a2)
;	clr.w	(a3)
;.not1:
;	addq.l	#2,a0
;	addq.l	#2,a1
;	addq.l	#2,a2
;	addq.l	#2,a3
;	add.w	#16,d7
;	dbf	d5,.loop
;	rts

.swing_tab:
	dc.b	24,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0
	dc.b	0,0,0,-1,0,0,0,-1,0,0,0,-1,24,-1,35,-1
	dc.b	0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,0
	dc.b	0,0,0,1,0,0,0,1,0,0,0,1,35,1

Stamper_AnimTable:
		dc.l	AD_Bob,0
		dc.w	0,0,32,0,0,64,24

*---------------------------------------------------------------------------
*	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
	PLAY_FX	#$13
	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)
	jsr	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	Test_Bob_Out

.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

*---------------------------------------------------------------------------
*	AnimTable of                  Bonus1-4
*---------------------------------------------------------------------------

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

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

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

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

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Flame
*---------------------------------------------------------------------------
Flame_Start:
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.b	#50,Bob_Special_2(a4)
	move.w	#15*4,Bob_Special_3(a4)
	move.l	#Flame_Starter,Bob_Routine(a4)
	move.w	Bob_X_Position(a4),d0
	addq.w	#8,d0
	and.w	#$fff0,d0
	move.w	d0,Bob_X_Position(a4)

Flame_Starter:
	subq.w	#1,Bob_Special_1(a4)
	bpl.s	.no_start
	move.l	a4,-(sp)
	moveq	#18,d0
	move.w	Bob_X_Position(a4),d1
	move.w	Bob_Y_Position(a4),d2
	tst.b	Bob_Special_2+1(a4)
	ble.s	.ok
	moveq	#20,d0				;Rauch!
	addq.w	#8,d1
	add.w	#10,d2
.ok:
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.l	(sp)+,a0

	eor.b	#1,Bob_Special_4(a0)
	move.b	Bob_Special_4(a0),d1
	move.b	d1,Bob_Special_4(a4)

	move.w	Bob_Special_3(a0),d0
	lsr.w	#2,d0
	move.w	d0,Bob_Special_1(a4)
	tst.b	Bob_Special_2+1(a0)
	bgt.s	.smoke
	move.l	#Flame,Bob_Routine(a4)

	and.b	#%110,d1
	beq.s	.smoke
	lea	Flame_Info_2(pc),a1
	sub.l	a4,a1
	move.w	a1,Bob_to_Info_Offs(a4)
.smoke:
	tst.b	Bob_Special_4+1(a0)
	beq.s	.no_flicker
	st	Bob_Special_4+1(a4)
.no_flicker:

	move.l	a0,a4

	moveq	#4,d0
	tst.b	Bob_Special_2+1(a4)
	ble.s	.ok2
	moveq	#6,d0
.ok2:
	move.w	d0,Bob_Special_1(a4)
.no_start:
	tst.b	Bob_Special_2+1(a4)
	bpl.s	.no_shrink
	subq.w	#1,Bob_Special_3(a4)
	bne	.no_shrink
	move.w	#15*4,Bob_Special_3(a4)
	move.b	#1,Bob_Special_2+1(a4)
.no_shrink:
	subq.b	#1,Bob_Special_2(a4)
	bne.s	.out
	move.b	#200,Bob_Special_2(a4)
	subq.b	#1,Bob_Special_2+1(a4)
.out:
	bra	Test_Bob_Out2

Flame:
	tst.b	Bob_Special_4+1(a4)
	beq.s	.no_flicker
	eor.b	#1,Bob_Special_4(a4)
	beq.s	.noset
	bset	#NO_BOBBLIT,Bob_BlitStatus(a4)
	bra.s	.no_flicker
.noset:
	bclr	#NO_BOBBLIT,Bob_BlitStatus(a4)
.no_flicker:
	btst	#1,Bob_Special_4(a4)
	beq.s	.no_left
	subq.w	#7,Bob_X_Position(a4)
	bra.s	.no_x
.no_left:
	btst	#2,Bob_Special_4(a4)
	beq.s	.no_x
	addq.w	#7,Bob_X_Position(a4)
.no_x:
	subq.w	#7,Bob_Y_Position(a4)
	subq.w	#1,Bob_Special_1(a4)
	bpl	Standart_BobAnim
	bra	Out_Bob_Damage

Smoke:
	move.b	#BOB_NOCOL,Bob_Used(a4)
	btst	#1,Bob_Special_4(a4)
	beq.s	.no_left
	subq.w	#2,Bob_X_Position(a4)
	bra.s	.no_x
.no_left:
	btst	#2,Bob_Special_4(a4)
	beq.s	.no_x
	addq.w	#2,Bob_X_Position(a4)
.no_x:
	subq.w	#2,Bob_Y_Position(a4)
	subq.w	#1,Bob_Special_1(a4)
	bpl	Standart_BobAnim
	bra	Out_Bob_Damage

Flame_AnimTable:
		dc.l	main_GFX+Mbob04,main_GFX+Mmsk04
		dc.w	0,0,32,2,2,28,28
		dc.l	main_GFX+Mbob05,main_GFX+Mmsk05
		dc.w	0,0,32,2,2,28,28
		dc.l	main_GFX+Mbob06,main_GFX+Mmsk06
		dc.w	0,0,31,2,2,28,29
		dc.l	main_GFX+Mbob07,main_GFX+Mmsk07
		dc.w	0,0,27,2,2,28,25
		dc.w	ENTRY_END
		dc.l	Flame_AnimTable

Smoke_AnimTable:
		dc.l	main_GFX+Mbob12,main_GFX+Mmsk12
		dc.w	0,1,13,0,0,0,0
		dc.l	main_GFX+Mbob13,main_GFX+Mmsk13
		dc.w	0,1,13,0,0,0,0
		dc.l	main_GFX+Mbob14,main_GFX+Mmsk14
		dc.w	0,1,12,0,0,0,0
		dc.l	main_GFX+Mbob15,main_GFX+Mmsk15
		dc.w	0,0,13,0,0,0,0
		dc.w	ENTRY_END
		dc.l	Smoke_AnimTable

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

Start_Pacman:
	move.w	Bob_X_Position(a4),d0
	addq.w	#8,d0
	and.w	#$fff0,d0
	move.w	d0,Bob_X_Position(a4)

	move.l	#Pacman_Prg,Bob_Routine(a4)
	move.w	#0,Bob_Special_1(a4)
	tst.w	Bob_Special_4(a4)
	bpl.s	.left
	move.l	#Pacman_AnimTableR,Bob_Next_Anim(a4)
	bra.s	Pacman_Prg
.left:
	move.l	#Pacman_AnimTableL,Bob_Next_Anim(a4)

Pacman_Prg:
	moveq	#$60,d0
	bsr	Standart_Hit_Handler
	beq	.destruct
	moveq	#0,d0
	subq.w	#1,Bob_Anim_Delay(a4)
	bpl	.out

	tst.w	Bob_Special_1(a4)
	beq.s	.open
	bpl.s	.start_bullet

	jsr	rnd
	and.w	#255,d0
	add.w	#100,d0
	move.w	d0,Bob_Anim_Delay(a4)
	bsr	Get_Next_Bob_Frame
	clr.w	Bob_Special_1(a4)
	moveq	#1,d0
.out:
	moveq	#31,d6
	bsr	Use_Background
	bra	Test_Bob_Out
.open:
	addq.w	#1,Bob_Special_1(a4)
	move.w	#25,Bob_Anim_Delay(a4)
	bsr	Get_Next_Bob_Frame
	moveq	#1,d0
	moveq	#31,d6
	bsr	Use_Background
	bra	Test_Bob_Out
.destruct:
	moveq	#1,d0			;Please restore me!
	moveq	#31,d6
	bsr	Use_Background
	moveq	#0,d0
	bra	Standart_Destruction
.start_bullet:
	movem.w	Bob_X_Position(a4),d0-d1	;Calc bullet-origin
	addi.w	#20,d1
	addq.w	#8,d0
	tst.w	Bob_Special_4(a4)
	bmi.s	.left
	add.w	#16,d0
.left:
	movem.w	d0-d1,-(sp)
	move.w	d1,d2
	move.w	d0,d1
	bsr	Check_shoot
	movem.w	(sp)+,d0-d1
	beq	.no_shot

	move.w	T_posX,d2
	add.w	Scr_X_Level_Pos(a6),d2
	add.w	#16,d2
	sub.w	d0,d2
	bmi.s	.check_left
	tst.w	Bob_Special_4(a4)
	bmi.s	.no_shot
	bra.s	.ok
.check_left:
	tst.w	Bob_Special_4(a4)
	bpl.s	.no_shot
.ok:
	move.w	T_posX(pc),d4
	move.w	T_posY(pc),d5
	add.w	Scr_X_Level_Pos(a6),d4
	add.w	Scr_Y_Level_Pos(a6),d5

	cmp.w	d4,d0
	ble.s	.ncheck1
	moveq	#2,d2
	bra.s	.check2
.ncheck1:
	moveq	#0,d2
.check2:
	cmp.w	d1,d5
	blt.s	.ncheck2
	addq.w	#4,d2
.ncheck2:
	sub.w	d0,d4
	bpl.s	.ncheck3
	neg.w	d4
.ncheck3:
	sub.w	d1,d5
	bpl.s	.ncheck4
	neg.w	d5
.ncheck4:
	cmp.w	d4,d5
	ble.s	.ncheck5
	addq.w	#1,d2
.ncheck5:
	add.w	d2,d2
	add.w	d2,d2
	movem.w	.dir_tab(pc,d2.w),d2-d3
	asl.w	#5,d2
	asl.w	#5,d3
	bsr	Start_Shoot
.no_shot:
	move.w	#-1,Bob_Special_1(a4)
	move.w	#25,Bob_Anim_Delay(a4)
	moveq	#0,d0
	bra	.out

.dir_tab:	dc.w	2,-1,1,-2
		dc.w	-2,-1,-1,-2
		dc.w	2,1,1,2
		dc.w	-2,1,-1,2


Pacman_AnimTableL:
		dc.l	level_Buffer+bob0c-bob01,level_Buffer+msk0c-bob01
		dc.w	0,0,31,2,2,28,27
		dc.l	level_Buffer+bob0b-bob01,level_Buffer+msk0b-bob01
		dc.w	0,0,30,2,2,28,26
		dc.w	ENTRY_END
		dc.l	Pacman_AnimTableL

Pacman_AnimTableR:
		dc.l	level_GFX+bob0c,level_GFX+msk0c
 		dc.w	0,0,31,2,2,28,27
		dc.l	level_GFX+bob0b,level_GFX+msk0b
		dc.w	0,0,30,2,2,28,26
		dc.w	ENTRY_END
		dc.l	Pacman_AnimTableR

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Platform
*---------------------------------------------------------------------------
Platform_Start1:
	moveq	#2,d1
	move.w	Bob_Special_4(a4),d0
	bpl.s	.ok
	moveq	#-2,d1
	neg.w	d0
.ok:
	move.w	d1,Bob_Special_1(a4)		;Start nach rechts
	move.w	d0,Bob_Special_4(a4)		;x Pixel weit bewegen.
	move.l	#Platform_PrgX,Bob_Routine(a4)
	move.b	#1,Bob_RopeEnable(a4)
	bra.s	Platform_PrgX

Platform_Start2:
	moveq	#2,d1
	move.w	Bob_Special_4(a4),d0
	bpl.s	.ok
	moveq	#-2,d1
	neg.w	d0
.ok:
	move.w	d1,Bob_Special_1(a4)		;Start nach rechts
	move.w	d0,Bob_Special_4(a4)		;y Pixel weit bewegen.
	move.l	#Platform_PrgY,Bob_Routine(a4)
	move.b	#1,Bob_RopeEnable(a4)
	move.w	Bob_X_Position(a4),d0
	and.w	#15,d0
	cmp.w	#9,d0
	bge	Platform_PrgY
	lea	Platform_Info_3(pc),a0
	sub.l	a4,a0
	move.w	a0,Bob_to_Info_Offs(a4)
	bra	Platform_PrgY

Platform_PrgX:
	tst.b	T_rope
	bne.s	.dont_clear
	sf	Bob_Rope(a4)
.dont_clear:
	moveq	#1,d6


	tst.b	Bob_Special_3+1(a4)
	beq.s	.no_move
	tst.w	Bob_Special_2(a4)
	beq.s	.no_move
	move.w	Bob_Special_1(a4),d0
	add.w	d0,Bob_X_Position(a4)
	PLAY_FX	#$28
	subq.w	#1,Bob_Special_2(a4)
	bne	.no_move
	neg.w	Bob_Special_1(a4)			;Bewegungsrichtung umkehren.
	clr.b	Bob_Special_3+1(a4)
	PLAY_FX	#$29
.no_move:
	tst.b	Bob_Rope(a4)
	beq	.no_rope
	tst.b	T_startswing
	beq.s	.no_rope_start
	clr.b	T_startswing
	tst.b	Bob_Special_3+1(a4)
	bne.s	.no_rope_start
	move.w	Bob_Special_4(a4),Bob_Special_2(a4)	;Lnge des Movements.
	st	Bob_Special_3+1(a4)
	bra.s	.no_rope
.no_rope_start:
	tst.b	Bob_Special_3+1(a4)
	beq.s	.no_rope
	move.w	Bob_Special_1(a4),d0
	add.w	d0,R_xpos
	tst.b	T_swing
	bne.s	.no_rope
	tst.b	T_stand
	bne.s	.no_rope
	tst.b	T_state
	bne	.no_rope
	move.w	T_posX,d0
	move.w	T_posY,d1
	add.w	#14,d0
	addq.w	#3,d1
	movem.w	R_xpos,d2-d3
	move.w	R_radius1,d6
	move.w	R_radius,d7
	movem.w	d6/d7,-(sp)
	jsr	check_rope2
	movem.w	(sp)+,d6/d7
	beq.s	.no_kill
	sf	T_rope
	sf	T_swing
.no_kill:
	move.w	d6,R_radius1
	move.w	d7,R_radius
.no_rope:

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

	move.w	d0,d2
	add.w	#40,d2
	jsr	check_foot_frame
	beq.s	.no_feet
	st	T_stand
	move.w	Bob_Y_Position(a4),d1
	jsr	alias_feet

	;Turrican steht auf dieser Platform!

	tst.b	Bob_Special_3+1(a4)
	beq.s	.isnt_moving
	move.w	Bob_Special_1(a4),T_forceX
.isnt_moving:

	tst.b	Bob_Special_3(a4)
	bgt	.do_wip

	tst.b	Bob_Special_3(a4)
	bne.s	.not_starting
	move.b	#1,Bob_Special_3(a4)			;Flag fr Start.
	bra.s	.not_starting
.start:
	tst.b	Bob_Special_3+1(a4)
	bne.s	.not_starting
	move.w	Bob_Special_4(a4),Bob_Special_2(a4)	;Lnge des Movements.
	st	Bob_Special_3+1(a4)
.not_starting:
	bra	.quit_platform
.no_feet:
	moveq	#0,d6
	tst.b	Bob_Special_3(a4)
	bgt	.do_wip
	clr.b	Bob_Special_3(a4)
	bra	.quit_platform

.do_wip:
	lea	wip_table(pc),a0
	moveq	#0,d0
	move.b	Bob_Special_3(a4),d0
	add.w	d0,d0
	move.w	(a0,d0.w),d0
	add.w	d0,Bob_Y_Position(a4)
	tst.w	d6
	beq.s	.no_force

	move.w	Bob_Y_Position(a4),d1
	jsr	alias_feet


;	move.w	d0,T_forceY
.no_force:
	addq.b	#1,Bob_Special_3(a4)
	cmp.b	#6,Bob_Special_3(a4)
	bne.s	.not_starting
	st	Bob_Special_3(a4)
	bra.s	.start
	bra.s	.not_starting

.quit_platform:
	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.out
	PLAY_FX	#$29			;Stop Platform Sound!
.out:
	rts

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

Platform_PrgY:
	tst.b	T_rope
	bne.s	.dont_clear
	sf	Bob_Rope(a4)
.dont_clear:
	moveq	#1,d6

	tst.b	Bob_Special_3+1(a4)
	beq.s	.no_move
	tst.w	Bob_Special_2(a4)
	beq.s	.no_move
	move.w	Bob_Special_1(a4),d0
	add.w	d0,Bob_Y_Position(a4)
	PLAY_FX	#$28
	subq.w	#1,Bob_Special_2(a4)
	bne	.no_move
	neg.w	Bob_Special_1(a4)			;Bewegungsrichtung umkehren.
	clr.b	Bob_Special_3+1(a4)
	PLAY_FX	#$29
.no_move:
	tst.b	Bob_Rope(a4)
	beq	.no_rope
	tst.b	T_startswing
	beq.s	.no_rope_start
	clr.b	T_startswing
	tst.b	Bob_Special_3+1(a4)
	bne.s	.no_rope_start
	move.w	Bob_Special_4(a4),Bob_Special_2(a4)	;Lnge des Movements.
	st	Bob_Special_3+1(a4)
	bra.s	.no_rope
.no_rope_start:
	tst.b	Bob_Special_3+1(a4)
	beq.s	.no_rope
	move.w	Bob_Special_1(a4),d0
	add.w	d0,R_ypos

	move.w	T_posX,d0
	move.w	T_posY,d1
	tst.b	T_swing
	beq.s	.no_add
	tst.w	Bob_Special_1(a4)
	bpl.s	.down
	movem.w	d0-d1,-(sp)
	move.w	T_posX(pc),d0
	move.w	T_posY(pc),d1

	addq.w	#3,d1
	move.l	Act_Scr_Structure,a6
	jsr	check_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.kill_rope
	bra.s	.add
.down:
	movem.w	d0-d1,-(sp)
	jsr	Test_feet
	movem.w	(sp)+,d0-d1
	bne.s	.no_add
.add:
	add.w	Bob_Special_1(a4),d1
.no_add:
	add.w	#14,d0
	addq.w	#3,d1
	movem.w	R_xpos,d2-d3
	jsr	check_rope2
	beq.s	.no_kill
.kill_rope:
	sf	T_rope
	sf	T_swing
	bra.s	.no_rope
.no_kill:
	jsr	calc_player
	move.w	d3,T_posX
	move.w	d4,T_posY

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

	move.w	d0,d2
	add.w	#40,d2
	jsr	check_foot_frame
	beq.s	.no_feet
	st	T_stand
	move.w	Bob_Y_Position(a4),d1
	jsr	alias_feet

	;Turrican steht auf dieser Platform!

	movem.l	d0-d1/a0,-(sp)

	movem.w	Bob_X_Position(a4),d0-d1
	jsr	check_player_die

	movem.l	(sp)+,d0-d1/a0

	tst.b	Bob_Special_3+1(a4)
	beq.s	.isnt_moving
	move.w	Bob_Special_1(a4),T_forceY
.isnt_moving:

	tst.b	Bob_Special_3(a4)
	bgt	.do_wip

	tst.b	Bob_Special_3(a4)
	bne.s	.not_starting
	tst.w	Bob_Special_1(a4)
	bpl.s	.start
	move.b	#1,Bob_Special_3(a4)			;Flag fr Start.
	bra.s	.not_starting
.start:
	st	Bob_Special_3(a4)
	tst.b	Bob_Special_3+1(a4)
	bne.s	.not_starting
	move.w	Bob_Special_4(a4),Bob_Special_2(a4)	;Lnge des Movements.
	st	Bob_Special_3+1(a4)
.not_starting:
	bra	.quit_platform
.no_feet:
	moveq	#0,d6
	tst.b	Bob_Special_3(a4)
	bgt	.do_wip
	clr.b	Bob_Special_3(a4)
	bra	.quit_platform

.do_wip:
	lea	wip_table(pc),a0
	moveq	#0,d0
	move.b	Bob_Special_3(a4),d0
	add.w	d0,d0
	move.w	(a0,d0.w),d0
	add.w	d0,Bob_Y_Position(a4)
	tst.w	d6
	beq.s	.no_force
	add.w	d0,T_forceY
.no_force:
	addq.b	#1,Bob_Special_3(a4)
	cmp.b	#6,Bob_Special_3(a4)
	bne.s	.not_starting
	bra.s	.start

.quit_platform:
	move.w	Bob_Y_Position(a4),d1
	sub.w	Scr_Y_Level_Pos(a6),d1
	cmp.w	#-32,d1
	blt.s	.turn1
	cmp.w	#224,d1
	blt.s	.no_turn
	tst.w	Bob_Special_1(a4)
	bmi.s	.no_turn
	bra.s	.turn
.turn1:
	tst.w	Bob_Special_1(a4)
	bpl.s	.no_turn
.turn:
	tst.w	Bob_Special_2(a4)
	beq.s	.no_turn
	move.w	Bob_Special_4(a4),d1
	sub.w	Bob_Special_2(a4),d1
	move.w	d1,Bob_Special_2(a4)
	neg.w	Bob_Special_1(a4)
.no_turn:
	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.out
	PLAY_FX	#$29			;Stop Platform Sound!
.out:
	rts

Platform_AnimTable:
		dc.l	level_GFX+bob00,level_GFX+msk00
		dc.w	0,0,24,0,0,40,24

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

Walker_Sky:
	bsr	Standart_Hit_Handler
	beq	.kill_me

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

	st	T_force_jump
	clr.b	T_state
.kill_me:
	lea	0.w,a1
	move.w	Bob_Special_3(a4),a1
	move.b	#BOB_FALSE,Bob_Used(a1)

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

	moveq	#$50,d0
	bra	Standart_Destruction

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

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

	add.w	#32,d0

	jsr	check_obj_kollision
	beq	.no_change

	move.l	#Walker_Sky_AnimTableL,Bob_Next_Anim(a4)
	lea	0.w,a1
	move.w	Bob_Special_3(a4),a1
	move.l	#Fire_AnimTableL,Bob_Next_Anim(a1)

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

	jsr	check_obj_kollision
	beq	.no_change

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

.no_change:
	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl	.out
	lea	0.w,a0
	move.w	Bob_Special_3(a4),a0
	st	Bob_Used(a0)

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

.out:
	rts

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

Walker_Sky_AnimTableR:
	dc.l	level_GFX+bob05,level_GFX+msk05
	dc.w	0,0,28,2,2,28,24
	dc.w	ENTRY_END
	dc.l	Walker_Sky_AnimTableR

Walker_Sky_AnimTableL:
	dc.l	level_Buffer+bob05-bob01,level_Buffer+msk05-bob01
	dc.w	0,0,28,2,2,28,24
	dc.w	ENTRY_END
	dc.l	Walker_Sky_AnimTableL

Fire:
	lea	0.w,a0
	move.w	Bob_Special_3(a4),a0
	movem.w	Bob_X_Position(a0),d0-d1
	tst.w	Bob_Special_4(a0)
	bmi.s	.left
	sub.w	#5,d0
	add.w	#14,d1
	bra.s	.set
.left:
	add.w	#14,d1
	add.w	#21,d0
.set:
	movem.w	d0-d1,Bob_X_Position(a4)
	eor.b	#2,Bob_BlitStatus(a4)
	bra	Standart_BobAnim

Fire_AnimTableR:
	dc.l	level_GFX+bob08,level_GFX+msk08
	dc.w	0,0,10,2,2,28,24
	dc.w	ENTRY_END
	dc.l	Fire_AnimTableR

Fire_AnimTableL:
	dc.l	level_Buffer+bob08-bob01,level_Buffer+msk08-bob01
	dc.w	0,0,10,2,2,28,24
	dc.w	ENTRY_END
	dc.l	Fire_AnimTableL


*---------------------------------------------------------------------------
*	Routine and AnimTable of      Walker_Ground
*---------------------------------------------------------------------------

Walker_StartL:
	move.w	Bob_Special_4(a4),Bob_Special_5(a4)
	moveq	#-1,d2
	btst	#0,Bob_Special_4+1(a4)
	bne.s	.ok
	move.l	#Walker_AnimTableR,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	moveq	#1,d2
.ok:
	move.w	d2,Bob_Special_4(a4)
	move.l	#Walker_Ground,Bob_Routine(a4)

Walker_Ground:
	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_4(a4),d0
	add.w	d0,d0
	add.w	d0,d0
	move.w	d0,Bob_Special_4(a4)
	bpl.s	.set
	lea	Walker_MAnimTableL(pc),a0
.set:
	move.l	a0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	PLAY_FX	#$18
	bra	Test_Bob_Out

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

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

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

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

	;Walker dreht um!

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

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

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


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

	add.w	#32,d0

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

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

	jsr	check_obj_kollision
	bne	.destruct

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

	addq.w	#4,Bob_Y_Position(a4)

	bra	Standart_BobAnim


Walker_AnimTableR:
		dc.l	level_GFX+bob01,level_GFX+msk01
		dc.w	0,0,28,2,2,28,24
		dc.l	level_GFX+bob02,level_GFX+msk02
		dc.w	0,1,27,2,2,28,24
		dc.l	level_GFX+bob03,level_GFX+msk03
		dc.w	0,0,28,2,2,28,24
		dc.l	level_GFX+bob04,level_GFX+msk04
		dc.w	0,1,27,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_AnimTableR

Walker_MAnimTableR:
		dc.l	level_GFX+bob06,level_GFX+msk06
		dc.w	0,13,15,2,2,28,24
		dc.l	level_GFX+bob07,level_GFX+msk07
		dc.w	0,12,16,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_MAnimTableR

Walker_AnimTableL:
		dc.l	level_Buffer+bob01-bob01,level_Buffer+msk01-bob01
		dc.w	0,0,28,2,2,28,24
		dc.l	level_Buffer+bob02-bob01,level_Buffer+msk02-bob01
		dc.w	0,1,27,2,2,28,24
		dc.l	level_Buffer+bob03-bob01,level_Buffer+msk03-bob01
		dc.w	0,0,28,2,2,28,24
		dc.l	level_Buffer+bob04-bob01,level_Buffer+msk04-bob01
		dc.w	0,1,27,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_AnimTableL
Walker_MAnimTableL:
		dc.l	level_Buffer+bob06-bob01,level_Buffer+msk06-bob01
		dc.w	0,13,15,2,2,28,24
		dc.l	level_Buffer+bob07-bob01,level_Buffer+msk07-bob01
		dc.w	0,12,16,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_MAnimTableL


;--------------------------------------------------------------------------
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
	cmp.w	#3,d0
	beq	Init_Level_3
	st	Cue_Point
	rts

act_level:	dc.w	Level

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

	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

	move.l	#main_GFX+Mbob29,Diamond_Pointer
	st	Plane_flag

	move.w	#$150,T_time

Rotate_Amarillo:
	;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

Init_Datas:
	rts

Init_Level_1:
	SONGPLAY #0

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

Init_Level_2:
	SONGPLAY #1
	move.l	#Col_lab2,Color_Pointer
	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+16,Scr_X_Max(a6)
	move.w	#levelh2*16-208+16,Scr_Y_Max(a6)
	move.w	#(16+22)/2+1,Scr_AnzSupplyPlates(a6)
	move.l	#Area2+8,Area_Vector
	move.w	#50,Scr_BA_Anz_Area_X(a6)
	move.l	#Cue_Table2,Act_Cue_Table
	move.l	#SFX_Lev2,SFX_Handler

	lea	level_GFX+bob0e,a0
	lea	Work_Buffer1,a1
	lea	Rot_Info1,a2
	lea	level_GFX+msk0e,a3
	moveq	#32,d0
	moveq	#4,d1
	jsr	Convert_to_Rotate

	lea	Work_Buffer1+45*38,a0
	move.w	#45*5-1,d0
.Rclear:
	clr.b	(a0)+
	dbf	d0,.Rclear

	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	sf	Rot_I_Single_Call(a2)		;Zoomen auf zwei Frames verteilen!
	move.l	#spider_zoom_pos,Elev_Zoom_pointer
	move.l	#Rotate_Buffer+20480,Dest_Obj

.rotate_it:
	move.l	Elev_Zoom_pointer,a0
	move.l	(a0),d0
	lea	Work_Buffer1,a0
	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	jsr	Do_Zoom

	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.l	#4,Elev_Zoom_pointer
	move.l	Elev_Zoom_pointer,a0
	tst.l	(a0)
	bpl.s	.rotate_it
	bra	Rotate_Amarillo


Init_Level_3:
	SONGPLAY #2
	move.l	#Col_lab2,Color_Pointer
	move.l	Act_Scr_Structure,a6
	move.l	#Level1_Clist,Clist_Handler
	move.w	#levelb3,Scr_Level_Width(a6)
	move.l	#Level3-1-levelb3,Scr_Level_Pointer(a6)
	move.l	#Level3,Scr_Level(a6)
	move.w	#levelb3*16-320+16,Scr_X_Max(a6)
	move.w	#levelh3*16-208,Scr_Y_Max(a6)
	move.l	#Area3+8,Area_Vector
	move.w	#20,Scr_BA_Anz_Area_X(a6)
	move.l	#Cue_Table3,Act_Cue_Table
	move.l	#Return,SFX_Handler

	lea	boss_GFX+Bbob02,a0
	lea	Work_Buffer1,a1
	lea	Rot_Info1,a2
	lea	boss_GFX+Bmsk02,a3
	moveq	#32,d0
	moveq	#4,d1
	jsr	Convert_to_Rotate

;	lea	Work_Buffer1+45*38,a0
;	move.w	#45*5-1,d0
;.Rclear:
;	clr.b	(a0)+
;	dbf	d0,.Rclear

	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	sf	Rot_I_Single_Call(a2)		;Zoomen auf zwei Frames verteilen!
	move.l	#spider_zoom_pos,Elev_Zoom_pointer
	move.l	#Rotate_Buffer+20480,Dest_Obj

.rotate_it:
;	move.l	Elev_Zoom_pointer,a0
;	move.l	(a0),d0
;	lea	Work_Buffer1,a0
;	lea	Work_Buffer2,a1
;	lea	Rot_Info1,a2
;	jsr	Do_Zoom
;
;	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.l	#4,Elev_Zoom_pointer
;	move.l	Elev_Zoom_pointer,a0
;	tst.l	(a0)
;	bpl.s	.rotate_it
	rts

SFX_Lev2:
	move.w	Scr_X_Level_Pos(a6),d0
	add.w	T_posX,d0
	move.w	Scr_Y_Level_Pos(a6),d1
	add.w	T_posY,d1
	cmp.w	#320,d1
	bgt.s	.no_fix
	cmp.w	#920,d0
	blt.s	.no_fix
	cmp.w	#2630,d0
	bgt.s	.no_fix
	move.w	#80,Scr_Down_Fix(a6)
.no_fix:
	cmp.w	#3110,d0
	blt.s	.no_clear
	cmp.w	#720,d1
	blt.s	.no_clear
	cmp.w	#3200,d0
	bge.s	.clear

	st	T_freeze
	st	T_runout
	move.w	#1<<(RIGHT+8),T_joyforce

.no_clear:
	rts

.clear:
	move.b	#-1,Cue_Point+1
	rts

Init_Parafield:
	move.l	#$ffffffff,bltafwm(a5)
	move.w	#40-2,bltdmod(a5)
	move.w	#0,bltamod(a5)
	sub.w	#20,d5
.yloop:
	moveq	#20-1,d6
.xloop:
	moveq	#0,d0
	move.b	(a1)+,d0
	bmi.s	.space
	asl.w	#5,d0
	move.w	d0,d1
	add.w	d0,d0
	add.w	d1,d0
	add.l	a2,d0
	move.l	d0,bltapth(a5)
	move.l	a0,bltdpth(a5)
	move.w	#$09f0,bltcon0(a5)
.back:
	move.w	#64*16*3+1,bltsize(a5)
	waitblt
	addq.l	#2,a0
	dbf	d6,.xloop
	add.l	d5,a1
	add.l	#40*3*16-40,a0
	dbf	d7,.yloop

	rts
.space:
	move.l	a0,bltdpth(a5)
	move.w	#$0100,bltcon0(a5)
	bra.s	.back

Set_ParaClist:
	lea	Para_Clist,a0
	move.l	a0,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	PSprlab(pc),a0
	bsr	Set_Sprites

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


	move.w	Para_Ypos,d0
	mulu	#40*3,d0
	add.l	#$60000,d0

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

	;Alten Copper-gosub entfernen.

	move.l	Para_Gosub,d0
	beq.s	.no_old_gosub
	move.l	d0,a0
	move.w	#$0180,4(a0)
	clr.l	Para_Gosub
.no_old_gosub:
	move.w	#256,d0
	sub.w	Para_Ypos,d0
	add.w	#$30,d0
	cmp.w	#$ff,d0
	bge.s	.no_new_gosub

	;Wo muss der Gosub eingefgt werden ?

	cmp.w	#$d0,d0
	ble.s	.use1
	cmp.w	#$e0,d0
	ble.s	.use2
	lea	Pjump3(pc),a0
	bra.s	.use
.use1:
	lea	Pjump1(pc),a0
	bra.s	.use
.use2:
	lea	Pjump2(pc),a0
.use:
	subq.b	#1,d0
	move.b	d0,(a0)
	move.w	#$008a,4(a0)
	move.l	a0,Para_Gosub
	add.l	#8,a0
	move.l	a0,d0
	move.w	d0,PReset+6

.no_new_gosub:
	addq.w	#3,Para_Ypos
	and.w	#255,Para_Ypos

	lea	parallax3,a0
	lea	PCol_lab2+7*4,a1
	moveq	#6,d7
.setcols:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.setcols

	;Berechnen der Blit-Zieladresse

	move.w	Para_Ypos,d0
	mulu	#40*3,d0
	add.l	#$60000+2,d0		;Bltadr1
	move.l	#$60000+2,d1		;Bltadr2

	;Beide Blitsizes ausrechnen.

	move.w	#208,d2			;Bltsize1
	move.w	#0,d3			;Bltsize2

	move.w	#256,d5
	sub.w	Para_Ypos,d5
	sub.w	#208,d5
	bpl.s	.blt_ok1
	add.w	d5,d2
	neg.w	d5
	move.w	d5,d3
.blt_ok1:
	move.w	d2,d4
	add.w	d2,d2
	add.w	d4,d2
	asl.w	#6,d2
	addq.w	#1,d2
	tst.w	d3
	beq.s	.no_blit2
	move.w	d3,d4
	add.w	d3,d3
	add.w	d4,d3
	asl.w	#6,d3
	addq.w	#1,d3
.no_blit2:
	move.l	Para_Pointer,d4

	move.l	d4,bltapth(a5)
	move.l	d0,bltdpth(a5)

	move.w	#2,bltamod(a5)
	move.w	#40-2,bltdmod(a5)
	move.l	#$ffffffff,bltafwm(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	d2,bltsize(a5)
	waitblt
	tst.w	d3
	beq.s	.blt_ok2

	move.l	d1,bltdpth(a5)
	move.w	d3,bltsize(a5)
	waitblt

.blt_ok2:
	add.l	#36,d0
	add.l	#36,d1
	addq.l	#2,d4
	move.l	d0,bltdpth(a5)
	move.l	d4,bltapth(a5)
	move.w	d2,bltsize(a5)
	waitblt
	tst.w	d3
	beq.s	.blt_ok3

	move.l	d1,bltdpth(a5)
	move.w	d3,bltsize(a5)
	waitblt

.blt_ok3:

	add.l	#4*4*3,Para_Pointer
	cmp.l	#$699c0,Para_Pointer
	blt.s	.blt_ok4
	sub.l	#$9c0,Para_Pointer
.blt_ok4:

	rts

Para_Ypos:	dc.w	0
Para_Gosub:	dc.l	0
Para_Pointer:	dc.l	$69000

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:

	bsr	blit_parallax

	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

	;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
;	moveq	#0,d2
;	move.w	para_ypos,d2
;	and.w	#255,d2
;	add.l	d2,d3
;	add.l	d2,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

blit_parallax:

	move.w	para_ypos,d0
	cmp.w	para_old,d0
;	beq	.no_blit2

	move.w	#$09f0,bltcon0(a5)
	move.w	#6,bltdmod(a5)
	move.w	#0,bltamod(a5)
	move.l	#-1,bltafwm(a5)

	bsr	.rest_blit

	move.l	#parallax2,d3
	move.l	#Coplab2+6,d4
	move.w	#109,d5			;Blithhe
	moveq	#0,d2
	move.w	para_ypos,d2
	sub.w	#100,d2
	and.l	#255,d2
	neg.w	d2			;Zwischen 0 und 255.
	add.w	#255,d2

	cmp.w	#98,d2
	ble.s	.blitcalc

	moveq	#0,d6
	move.w	d2,d6
	lsl.l	#3,d6			;8 Bytes pro Zeile fr einen Farbbalken.
	add.l	d6,d4

	move.w	#208,d0
	sub.w	d2,d0
	ble	.no_blit1
	move.w	d0,d5
	bra.s	.blit

.blitcalc:
	move.l	d2,d6
	asl.l	#3,d6			;8 Bytes pro Zeile fr einen Farbbalken.
	add.l	d6,d4
.blit:
	move.l	d3,bltapth(a5)
	move.l	d4,bltdpth(a5)
	asl.w	#6,d5
	addq.w	#1,d5
	move.w	d5,bltsize(a5)

	waitblt

	move.l	d4,rest1_adr
	move.w	d5,rest1_size

.no_blit1:
	cmp.w	#146,d2
	ble.s	.no_blit2

	move.l	#Coplab2+6,d4
	move.l	#parallax2,d3
	move.w	d2,d5
	sub.w	#147,d5
	ble.s	.no_blit2
	neg.w	d2
	add.w	#256,d2
	add.l	d2,d2
	add.l	d2,d3
	move.l	d3,bltapth(a5)
	move.l	d4,bltdpth(a5)
	asl.w	#6,d5
	addq.w	#1,d5
	move.w	d5,bltsize(a5)

	waitblt

	move.l	d4,rest2_adr
	move.w	d5,rest2_size

.no_blit2:
	rts


.rest_blit:
	move.l	rest1_adr,d4
	beq.s	.no_rest1

	move.l	d4,bltdpth(a5)
	sub.l	#Coplab2+6,d4
	lsr.w	#2,d4
	add.l	#parallax,d4
	move.l	d4,bltapth(a5)
	move.w	rest1_size(pc),bltsize(a5)

	waitblt

.no_rest1:
	clr.l	rest1_adr

	move.l	rest2_adr,d4
	beq.s	.no_rest2

	move.l	d4,bltdpth(a5)
	sub.l	#Coplab2+6,d4
	lsr.w	#2,d4
	add.l	#parallax,d4
	move.l	d4,bltapth(a5)
	move.w	rest2_size(pc),bltsize(a5)

	waitblt

.no_rest2:
	clr.l	rest2_adr

	rts

rest1_adr:	dc.l	0
rest1_size:	dc.w	0
rest2_adr:	dc.l	0
rest2_size:	dc.w	0

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


Fade_Colors:
	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	SetClist
	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	SetClist
	bsr	set_weapon_colors
	jsr	set_copcolors
	sf	Col_Init_Flag
	rts


.fade_out:
	bsr	.wait_tof

	st	Col_Flag
	jsr	SetClist
	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_parallax2,a0		;Source
	lea	parallax2,a1		;Destination
	move.w	#108,d6
	bsr	Do_Fade_colors
	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
	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	=	184
levelh1	=	63
levelb2	=	200
levelh2	=	71
levelb3	=	80
levelh3	=	71

;--------------------------------------------------------------------------
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,$0000,$0630,$06BF,$0386
	dc.w	$0061,$0B75,$0EA7,$0FE0,$0C00,$0C09,$0705,$0FFF

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



	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_Clist:
PCol_lab2:
	dc.w	$0182,$0bbb
	dc.w	$0184,$0fff
	dc.w	$0186,$0222
	dc.w	$0188,$0666
	dc.w	$018a,$03d8
	dc.w	$018c,$0fe0
	dc.w	$018e,$0e96

	dc.w	$0192,$0000	;$0a75
	dc.w	$0194,$0000	;$0532
	dc.w	$0196,$0000	;$0044
	dc.w	$0198,$0000	;$0411
	dc.w	$019a,$0000	;$0200
	dc.w	$019c,$0000	;$0010
	dc.w	$019e,$0000	;$0743

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,40*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
PCoplab2:
	dc.w	$00e4,$0006
	dc.w	$00e6,0+40*0
	dc.w	$00ec,$0006
	dc.w	$00ee,0+40*1
	dc.w	$00f4,$0006
	dc.w	$00f6,0+40*2

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

Pjump1:
	dc.w	$00d7,$fffe
	dc.w	$0180,$0000

	dc.w	$d001,$fffe

	dc.w	$00e0,$0006
	dc.w	$00e2,$7800
	dc.w	$00e8,$0006
	dc.w	$00ea,$7800+40
	dc.w	$00f0,$0006
	dc.w	$00f2,$7800+40*2

PCol_lab3:
	dc.w	$0182,$aaa
	dc.w	$0186,$000
	dc.w	$0188,$ea7
	dc.w	$018a,$b75
	dc.w	$018e,$666
	dc.w	$0108,40*3-40

Pjump2:
	dc.w	$00d7,$fffe
	dc.w	$0180,$0000

	dc.w	$e001,$fffe
PCol_lab4:
	dc.w	$0184,$333
	dc.w	$0188,$705
	dc.w	$018c,$c09

Pjump3:
	dc.w	$00d7,$fffe
	dc.w	$0180,$0000

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

PReset:
	dc.w	$0084,Copjumpin/$10000
	dc.w	$0086,Copjumpin&$ffff
	dc.w	$00e6,0+40*0
	dc.w	$00ee,0+40*1
	dc.w	$00f6,0+40*2

	dc.w	$008a,$0001


B_parallax:	incbin	work:sources/t3/bitplanes/copper1.col
B_parallax2:	incbin	work:sources/t3/bitplanes/copper2.col
B_parallax3:	dc.w	$0a75,$0532,$0044,$0411,$0200,$0010,$0743
		dc.w	$0bbb,$0fff,$0222,$0666,$03d8,$0fe0,$0e96
		dc.w	$0aaa,$0000,$0ea7,$0b75,$0666,$0333,$0705,$0c09

para_field:	incbin	work:modmaps/t3_para1.mod
boss_coltab	= Work_Buffer4		;40.w

snake_pos	rs.l	56
snake_pic	rs.l	14

elevator_field:
		dc.b	-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,-1
		dc.b	-1,-1,5,4,4,4,4,4,5,4,4,5,4,4,4,4,4,5,-1,-1
		dc.b	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1

Area1:		include	level1_area
Area2:		include	level2_area
Area3:		include	level3_area
