	IFND	custom
	END
	ENDC

level_GFX	= $24000
Para_field	= Rotate_Buffer+16384

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

para_b		= 72

flash_buffer	= Rotate_Buffer+16384

;		- $2f0d8

;
;			    Level Daten
;

bob00 	= $00000
msk00 	= $00120
bob01 	= $00180
msk01 	= $002a0
bob02 	= $00300
msk02 	= $00420
bob03 	= $00480
msk03 	= $005a0
bob04 	= $00600
msk04 	= $00630
bob05 	= $00640
msk05 	= $0067c
bob06 	= $00690
msk06 	= $006cc
bob07 	= $006e0
msk07 	= $00740
bob08 	= $00760
msk08 	= $007c0
bob09 	= $007e0
msk09 	= $00828
bob0a 	= $00840
msk0a 	= $0087c
bob0b 	= $00890
msk0b 	= $00a10
bob0c 	= $00a90
msk0c 	= $00cd0
bob0d 	= $00d90
msk0d 	= $00fd0
bob0e 	= $01090
msk0e 	= $012d0
bob0f 	= $01390
msk0f 	= $015d0
bob10 	= $01690
msk10 	= $018d0


bob11 	= $01888
msk11 	= $018d0
bob12 	= $018e2
msk12 	= $01912
bob13 	= $0191e
msk13 	= $01976
bob14 	= $0198c
msk14 	= $01b0c
bob15 	= $01b6c
msk15 	= $01cec
bob16 	= $01d4c
msk16 	= $01ecc
bob17 	= $01f2c
msk17 	= $0216c
bob18 	= $021fc
msk18 	= $0243c
bob19 	= $024cc
msk19 	= $0261c
bob1a 	= $02670
msk1a 	= $02850
bob1b 	= $028c8
msk1b 	= $02ab8
bob1c 	= $02b34
msk1c 	= $02c74
bob1d 	= $02cc4
msk1d 	= $02e24
bob1e 	= $02e7c
msk1e 	= $02ecc
bob1f 	= $02ee0
msk1f 	= $02f60
bob20 	= $02f80
msk20 	= $03140
bob21 	= $031b0
msk21 	= $03370
bob22 	= $033e0
msk22 	= $035e0
bob23 	= $03660
msk23 	= $03860
bob24 	= $038e0
msk24 	= $03ae0

Cbob00 	= $00000
Cmsk00 	= $000d8
Cbob01 	= $00120
Cmsk01 	= $00264
Cbob02 	= $002d0
Cmsk02 	= $00438
Cbob03 	= $004b0
Cmsk03 	= $00630
Cbob04 	= $006b0
Cmsk04 	= $00830
Cbob05 	= $008b0
Cmsk05 	= $00a30
Cbob06 	= $00ab0
Cmsk06 	= $00c24
Cbob07 	= $00ca0
Cmsk07 	= $00de4
Cbob08 	= $00e50
Cmsk08 	= $00f70
Cbob09 	= $00fd0
Cmsk09 	= $01090
Cbob0a 	= $010d0
Cmsk0a 	= $01124
Cbob0b 	= $01140
Cmsk0b 	= $0116a
Cbob0c 	= $01178
Cmsk0c 	= $011c0
Cbob0d 	= $011d8
Cmsk0d 	= $0122c
Cbob0e 	= $01248
Cmsk0e 	= $0129c
Cbob0f 	= $012b8
Cmsk0f 	= $0130c
Cbob10 	= $01328
Cmsk10 	= $01376
Cbob11 	= $01390
Cmsk11 	= $013de
Cbob12 	= $013f8
Cmsk12 	= $01446
Cbob13 	= $01460
Cmsk13 	= $014ae
Cbob14 	= $014c8
Cmsk14 	= $01510
Cbob15 	= $01528
Cmsk15 	= $01576
Cbob16 	= $01590
Cmsk16 	= $015d8
Cbob17 	= $015f0
Cmsk17 	= $0161a
Cbob18 	= $01628
Cmsk18 	= $01676
Cbob19 	= $01690
Cmsk19 	= $016e4
Cbob1a 	= $01700
Cmsk1a 	= $0174e
Cbob1b 	= $01768
Cmsk1b 	= $017c2
Cbob1c 	= $017e0
Cmsk1c 	= $0183a
Cbob1d 	= $01858
Cmsk1d 	= $018b8
Cbob1e 	= $018d8
Cmsk1e 	= $01938
Cbob1f 	= $01958
Cmsk1f 	= $019b8
Cbob20 	= $019d8
Cmsk20 	= $01af8
Cbob21 	= $01b58
Cmsk21 	= $01c3c
Cbob22 	= $01c88
Cmsk22 	= $01d30
Cbob23 	= $01d68
Cmsk23 	= $01dc8
Cbob24 	= $01de8
Cmsk24 	= $01e48
Cbob25 	= $01e68
Cmsk25 	= $01ec8
Cbob26 	= $01ee8
Cmsk26 	= $01f84
Cbob27 	= $01fb8
Cmsk27 	= $02078
Cbob28 	= $020b8
Cmsk28 	= $02118
Cbob29 	= $02138
Cmsk29 	= $02198
Cbob2a 	= $021b8
Cmsk2a 	= $02218
Cbob2b 	= $02238
Cmsk2b 	= $02292

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

		;AdressOffset,Anzahl Zeilen gesamt (Bob+maske),Breite pro Zeile
level_flipI:
		dc.w	bob0c,32*4,48/8
		dc.w	bob0d,32*4,48/8
		dc.w	bob0e,32*4,48/8
		dc.w	bob0f,32*4,48/8
		dc.w	bob10,32*4,48/8

		dc.w	-1

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


Cue_Table2:	dc.w	80,70
		dc.w	978,531
		dc.w	90,1081
		dc.w	792,1441

Bob_Structure:	dcb.b	BOB_MAXIMUM*BOB_ENTRY_LENGTH,BOB_FALSE

Bob_Structure_End = Bob_Structure+(BOB_MAXIMUM*BOB_ENTRY_LENGTH)

Bob_Info_Tab_Adrs	dc.l	0
		;--1
		dc.l	Explo_Info_1	;1 Big Xplo
		dc.l	Explo_Info_2	;2 Small Xplo
		dc.l	Box_Info_1	;3 Extrabox
		dc.l	Box_Info_2	;4 Extrabox Deckel
		dc.l	Bonus_Info_1	;5 PowerUp
		dc.l	Rocket_Info_1	;6 Lenkrakete
		dc.l	Shoot_Info_1	;7 Schuss
		dc.l	CuePoint_Info_1	;8 Cuepoint
		dc.l	Mine_Info_1	;9 MinenExplo
		dc.l	Diamond_Info_1	;10 Diamant
		dc.l	Beule_Info_1	;11 Beule
		dc.l	Ball_Info_1	;12 Ball
		dc.l	Slime_Info_1	;13 Slime
		dc.l	Roller_Info_1	;14 Roller
		dc.l	Dog_Info_1	;15 Dog

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

		dc.w	0		;Delay
		dc.w	1		;Delay Init
		dc.l	$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	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Standart_BobAnim	;Routine, die Bob verwaltet
		dc.l	Explo2_AnimTable	;Zeiger auf nchste Anim

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

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

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$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	3		;Tiefe in Planes
		dc.w	4		;Breite einer Zeile der Maske in Bytes
		dc.w	2*2		;A Modulo
		dc.w	2*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	3		;Blit-Breite in Wrtern
		dc.w	6		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Box_Deckel	;Routine, die Bob verwaltet
		dc.l	Deckel_AnimTable;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$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	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Move_Bonus_Jump	;Routine, die Bob verwaltet
		dc.l	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	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Shoot_Start	;Routine, die Bob verwaltet
		dc.l	Shoot_AnimTable	;Zeiger auf nchste Anim

		dc.w	0		;Delay
		dc.w	2		;Delay Init
		dc.l	$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	3		;Tiefe in Planes
		dc.w	2		;Breite einer Zeile der Maske in Bytes
		dc.w	1*2		;A Modulo
		dc.w	1*2*3		;B Modulo
		dc.w	planeb*3	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	2		;Blit-Breite in Wrtern
		dc.w	4		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Rocket		;Routine, die Bob verwaltet
		dc.l	Rocket_AnimTable;Zeiger auf nchste Anim

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Roller_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	12		;Hitpoints
		dc.l	Start_Roller	;Routine, die Bob verwaltet
		dc.l	Roller_AnimTable;Zeiger auf nchste Anim

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

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

		dc.w	0		;Delay
		dc.w	1		;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     Dog
*---------------------------------------------------------------------------
DSTAND	equ	0
DRUN	equ	4
DJUMP	equ	8
DTURN	equ	12
DFALL	equ	16

	rsset	Bob_Special_1			;Dog
Dpara	rs.b	1
Dmode	rs.b	1
Duser0	rs.w	1
Duser1	rs.w	1
Dspr	rs.l	1
Ddinit	rs.b	1
Dspeed	rs.b	1
Dshots	rs.b	1

Start_Dog:					;Welt 4
	move.b	Bob_Special_4(a4),Dpara(a4)			;Set all parameters
;	move.b	Bob_Special_4+1(a4),Dspeed(a4)
	move.b	#2,Dspeed(a4)
	move.w	#5,Bob_Status(a4)
	move.b	#DSTAND,Dmode(a4)
	st	Ddinit(a4)
	move.w	#14,Bob_Power(a4)
	sf	Dshots(a4)
	move.l	#Dog,Bob_Routine(a4)

Dog:
	move.l	#$200,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	move.l	Dspr(a4),a0
	btst	#3,Dpara(a4)
	beq	.no_shots

;	.if.l (not zero) {
;		subq.b	#1,shots(a5)		;Delay down ?
;		.if.l (minus) {			;Yes, start shot...
;			move.b	#80,shots(a5)
;			PLAY_FX	#17
;			jsr	add_object.w		;Add slime-object
;			move.l	a0,a4
;			move.l	#handle_ball1,O_HANDLE(a4)
;			cmpi.w	#4,level_num.w
;			.if (equal) {
;				lea	ball_spr1(pc),a0
;			} .else {
;				lea	ball_spr(pc),a0
;			}
;			move.l	a0,O_INFO(a4)
;			clr.w	O_PHA(a4)
;			st	O_SHOW(a4)
;			move.l	#ball_col,O_COL(a4)
;			st	O_COLEN(a4)
;			move.b	#4,O_POW(a4)
;			sf	wait(a4)
;			st	nocheck(a4)
;			jsr	rnd.w
;			andi.w	#3,d0
;			subq.w	#6,d0
;			move.w	O_XPOS(a5),d2		;Which side ?
;			addi.w	#24,d2
;			move.w	pl_xpos.w,d1
;			addi.w	#16,d1
;			cmp.w	d2,d1
;			.if (greater) {
;				neg.w	d0
;			}
;			move.w	d0,bxdir(a4)
;			clr.w	bxdir+2(a4)
;			clr.l	xlow(a4)
;			move.l	O_XPOS(a5),O_XPOS(a4)
;			btst	#1,para(a5)
;			.if (not zero) {
;				addi.w	#40,O_XPOS(a4)
;			} .else {
;				addq.w	#8,O_XPOS(a4)
;			}
;			addq.w	#8,O_YPOS(a4)
;			jsr	rnd.w
;			andi.w	#3,d0
;			subq.w	#2,d0
;			neg.w	d0
;			move.w	d0,bydir(a4)
;			clr.w	bydir+2(a4)
;		}
.no_shots:

	moveq	#0,d0				;Jump to movement-handler
	move.b	Dmode(a4),d0
	jmp	.mode_tab(pc,d0.w)
.mode_tab:
	bra.w	.dog_wait
	bra.w	.dog_run
	bra.w	.dog_jump
	bra.w	.dog_turn
.dog_fall:					;The dog is falling down
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#20,d0
	addi.w	#32,d1
	bsr	check_slope_kollision
	beq.s	.no_koll
		move.b	#DSTAND,Dmode(a4)
		st	Ddinit(a4)
		bra	.exit_dog
.no_koll:
	addq.w	#4,Bob_Y_Position(a4)
	bra	.exit_dog

.dog_wait:					;The dog awaits its enemy
	bsr	.check_ground
	tst.b	Ddinit(a4)
	beq.s	.no_init1
		move.w	#45,Duser0(a4)
		clr.w	Duser1(a4)
		sf	Ddinit(a4)
		move.w	#5,Bob_Status(a4)
.no_init1:
	tst.w	Duser1(a4)
	bne.s	.do_turn
	move.w	Bob_X_Position(a4),d0
	addq.w	#8,d0
	sub.w	Scr_X_Level_Pos(a6),d0
	cmp.w	T_posX,d0			;Always look at Turrican
	ble.s	.left
		btst	#1,Dpara(a4)
		beq.s	.ok
		bra.s	.set
.left:
	btst	#1,Dpara(a4)
	bne.s	.ok
.set:
	move.w	#4,Duser1(a4)
	move.w	#4,Bob_Status(a4)
.ok:
	tst.w	Duser1(a4)			;Start running ?
	bne.s	.do_turn
		subq.w	#1,Duser0(a4)
		bpl	.exit_dog
		move.b	#DRUN,Dmode(a4)
		st	Ddinit(a4)
		bra	.exit_dog
.do_turn:
	subq.w	#1,Duser1(a4)			;Handle turn-phases
	bne	.exit_dog
	bchg	#1,Dpara(a4)
	move.w	#5,Bob_Status(a4)
	bra	.exit_dog

.dog_run:					;The dog is running...
	bsr	.check_ground

	tst.b	Ddinit(a4)
	beq.s	.no_init2
		sf	Ddinit(a4)
		clr.w	Bob_Status(a4)
		clr.w	Duser0(a4)
.no_init2:
	subq.w	#1,Duser0(a4)			;Do animation
	bpl.s	.no_anim1
		addq.w	#8,Duser0(a4)
		addq.w	#1,Bob_Status(a4)
		andi.w	#3,Bob_Status(a4)
.no_anim1:
	moveq	#0,d0
	move.b	Dspeed(a4),d0
	btst	#1,Dpara(a4)			;Move dog
	bne.s	.to_right
		neg.w	d0
		moveq	#0,d7
	bra.s	.to_left
.to_right:
		moveq	#40,d7
.to_left:
	add.w	d0,Bob_X_Position(a4)

	btst	#2,Dpara(a4)			;Jump allowed ?
	beq.s	.nojmp
		move.w	T_posX,d0		;Jump on player ?
		add.w	Scr_X_Level_Pos(a6),d0
		sub.w	Bob_X_Position(a4),d0
		btst	#1,Dpara(a4)
		bne.s	.lab1
			cmpi.w	#-50,d0
			bgt.s	.nojmp
			cmpi.w	#-70,d0
			bgt.s	.dojmp
		bra.s	.nojmp
.lab1:
			cmpi.w	#70,d0
			bgt.s	.nojmp
			cmpi.w	#50,d0
			blt.s	.nojmp
.dojmp:
			move.b	#DJUMP,Dmode(a4)
			st	Ddinit(a4)
			move.w	#5,Bob_Status(a4)
			bra	.exit_dog
.nojmp:

	tst.b	d5				;Walking on slopes ?
	bmi	.ground				;-> No ground-check

	movem.w	Bob_X_Position(a4),d0-d1		;Ground ?
	addi.w	#32,d1
	add.w	d7,d0
	bsr	check_slope_kollision
	beq.s	.no_ground			;Yes, a wall ?
.ground:	movem.w	Bob_X_Position(a4),d0-d1
		add.w	d7,d0
		addi.w	#16,d1
		bsr	check_slope_kollision
		ble	.exit_dog
		bra.s	.turn			;Yes, turn around...
.no_ground:
	btst	#0,Dpara(a4)			;Jump over the gap or turn around ?
	bne.s	.jumpgap
.turn:		move.b	#DTURN,Dmode(a4)		;Turn
		st	Ddinit(a4)
		bra	.exit_dog
.jumpgap:
	move.b	#DJUMP,Dmode(a4)			;Jump
	st	Ddinit(a4)
	bra	.exit_dog
.dog_jump:
	tst.b	Ddinit(a4)			;Handle jumping...
	beq.s	.no_init3
		sf	Ddinit(a4)
		move.w	#4,Duser0(a4)
		clr.w	Duser1(a4)
		clr.w	Bob_Status(a4)
.no_init3:
	move.b	Duser1+1(a4),d0
	sub.b	d0,Duser1(a4)
	move.w	Bob_Y_Position(a4),d0
	move.w	Duser0(a4),d1
	subx.w	d1,d0
	move.w	d0,Bob_Y_Position(a4)
	cmpi.w	#-6,Duser0(a4)			;Fast enough (down) ?
	ble.s	.no_speedup
		subi.b	#$40,Duser1+1(a4)	;No, speed up...
		moveq	#0,d0
		subx.w	d0,d1
		move.w	d1,Duser0(a4)

.no_speedup:
	tst.w	Duser0(a4)			;Going up ?
	bmi.s	.no_headcheck
		movem.w	Bob_X_Position(a4),d0-d1	;Check for ceiling...
		addq.w	#8,d0
		addq.w	#8,d1
		movem.w	d0-d1,-(sp)
		bsr	check_obj_kollision
		movem.w	(sp)+,d0-d1
		bne.s	.ceiling
		addi.w	#32,d0
		bsr	check_obj_kollision
		beq.s	.no_headcheck
.ceiling:
			clr.w	Duser0(a4)	;Stop movement...
			sf	Duser1+1(a4)

.no_headcheck:
	movem.w	Bob_X_Position(a4),d0-d1
	addq.w	#8,d1
	btst	#1,Dpara(a4)			;Which x-dir ?
	bne.s	.lab2
		moveq	#-2,d7
	bra.s	.lab3
.lab2:
		moveq	#2,d7
		addi.w	#44,d0
.lab3:
	movem.w	d0-d1,-(sp)			;Is there any wall out there ?
	bsr	check_slope_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.ground2
	addq.w	#8,d1
	bsr	check_slope_kollision
	bne.s	.ground2
		add.w	d7,Bob_X_Position(a4)		;No, do movement
.ground2:

	tst.w	Duser0(a4)			;Down ?
	bpl	.exit_dog

	movem.w	Bob_X_Position(a4),d0-d1		;Yes, look for ground...
	addi.w	#12,d0
	addi.w	#32,d1
	bsr	check_slope_kollision
	bne.s	.stop
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#28,d0
	addi.w	#32,d1
	bsr	check_slope_kollision
	beq	.exit_dog
.stop:
	move.b	#DSTAND,Dmode(a4)			;Ground detected -> Stand
	st	Ddinit(a4)
	bra	.exit_dog
.dog_turn:
	tst.b	Ddinit(a4)			;Let dog turn slowly...
	beq.s	.no_init4
		sf	Ddinit(a4)
		move.w	#20,Duser0(a4)
		move.w	#4,Bob_Status(a4)
.no_init4:
	subq.w	#1,Duser0(a4)
	bpl.s	.exit_dog
		bchg	#1,Dpara(a4)
		move.b	#DRUN,Dmode(a4)
		st	Ddinit(a4)
.exit_dog:					;Still on screen ?
	move.w	Bob_Status(a4),d0
	btst	#1,Dpara(a4)
	beq.s	.dir_ok
	addq.w	#6,d0
.dir_ok:
	asl.w	#3,d0
	lea	.dog_tab(pc),a0

	move.l	(a0,d0.w),Bob_Graphics(a4)
	move.l	4(a0,d0.w),Bob_Mask(a4)

	bra	Test_Bob_Out

Dog_Flip	= level_Buffer-bob0d

.dog_tab:
	dc.l	level_GFX+bob0d,level_GFX+msk0d
	dc.l	level_GFX+bob0e,level_GFX+msk0e
	dc.l	level_GFX+bob0f,level_GFX+msk0f
	dc.l	level_GFX+bob0e,level_GFX+msk0e
	dc.l	level_GFX+bob10,level_GFX+msk10
	dc.l	level_GFX+bob0c,level_GFX+msk0c

	dc.l	Dog_Flip+bob0d,Dog_Flip+msk0d
	dc.l	Dog_Flip+bob0e,Dog_Flip+msk0e
	dc.l	Dog_Flip+bob0f,Dog_Flip+msk0f
	dc.l	Dog_Flip+bob0e,Dog_Flip+msk0e
	dc.l	Dog_Flip+bob10,Dog_Flip+msk10
	dc.l	Dog_Flip+bob0c,Dog_Flip+msk0c


.check_ground:					;Check if fall is neccessary
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#12,d0
	addi.w	#32,d1
	movem.w	d0-d1,-(sp)
	bsr	check_slope_kollision
	move.b	d0,d5
	movem.w	(sp)+,d0-d1
	addi.w	#16,d0
	bsr	check_slope_kollision
	bne	.ground3				;Any ground ?
	tst.b	d5
	beq.s	.fall
.ground3:
	sf	d5
	and.b	#%00110000,d1
	beq.s	.no_slope
	st	d5
.no_slope:
		movem.w	Bob_X_Position(a4),d0-d1
		addi.w	#20,d0
		addi.w	#32,d1
		bsr	calc_position
		subi.w	#32,d1
		move.w	d1,Bob_Y_Position(a4)
	rts
.fall:
	move.b	#DFALL,Dmode(a4)
	st	Ddinit(a4)
	addq.l	#4,sp
	bra	.exit_dog

Dog_AnimTable:
		dc.l	level_GFX+bob0c,level_GFX+msk0c
		dc.w	0,0,32,4,4,24,24

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Roller
*---------------------------------------------------------------------------
	rsset	Bob_Special_1
Rangle	rs.b	1
Rtdir	rs.b	1
Rdir	rs.w	1
Rxmin	rs.w	1
Rxmax	rs.w	1
Rshots	rs.w	1
Rflags	rs.b	1

Start_Roller:
	move.b	Bob_Special_4+1(a4),Rflags(a4)			;Get range-flags etc.
	sf	Rangle(a4)
	move.b	#3,Rtdir(a4)			;Roll to the left
	move.w	#-2,Rdir(a4)
;	movem.w	2(a0),d0-d1
	moveq	#100,d0
	moveq	#-100,d1
	cmp.w	d0,d1
	bge.s	.ok
		exg	d0,d1
.ok:
	add.w	Bob_X_Position(a4),d0
	add.w	Bob_X_Position(a4),d1
	movem.w	d0-d1,Rxmin(a4)
	clr.w	Rshots(a4)
	move.l	#Roller,Bob_Routine(a4)

Roller:
	move.l	#$110,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	btst	#1,Rflags(a4)
	beq.s	.no_boundary_check
		movem.w	Rxmin(a4),d2-d3		;Check movement bounderies
		cmp.w	Bob_X_Position(a4),d2
		bgt.s	.turn
		cmp.w	Bob_X_Position(a4),d3
		blt.s	.turn

.no_boundary_check:

	movem.w	Bob_X_Position(a4),d0-d1		;Wall detected ?
	addi.w	#10,d1
	tst.b	Rdir(a4)
	bmi.s	.to_left
		addi.w	#24,d0
.to_left:
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.turn
	addq.w	#8,d1
	bsr	check_obj_kollision
	bne.s	.turn

	movem.w	Bob_X_Position(a4),d0-d1		;Ground ?
	addi.w	#12,d0
	tst.b	Rdir(a4)
	bmi.s	.to_left2
	addq.w	#8,d0
.to_left2:
	addi.w	#32,d1
	movem.w	d0-d1,-(sp)
	bsr	check_slope_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.ground
	addq.w	#4,d1
	bsr	check_slope_kollision
	bne.s	.ground
.turn:		neg.w	Rdir(a4)
		neg.b	Rtdir(a4)
	bra.s	.move
.ground:	movem.w	Bob_X_Position(a4),d0-d1	;Calc ground-pos.
		addi.w	#32,d1
		addi.w	#16,d0
		bsr	calc_position
		subi.w	#32,d1
		move.w	d1,Bob_Y_Position(a4)
.move:
	move.w	Rdir(a4),d0			;Move alien
	add.w	d0,Bob_X_Position(a4)
	move.b	Rtdir(a4),d0
	add.b	d0,Rangle(a4)

;	btst	#0,flags(a5)
;	.if (not zero) {
;		subq.w	#1,shots(a5)		;Delay down ?
;		.if (minus) {			;Yes, start shot...
;			move.w	#80,shots(a5)
;			PLAY_FX	#16
;			movem.w	pl_xpos.w,d6-d7	;Angle to player
;			addi.w	#16,d6
;			addi.w	#24,d7
;			jsr	calc_angle.w
;			moveq	#127,d7
;			sub.b	d1,d7
;			move.b	d7,d0
;			jsr	sin.w
;			move.w	d0,d3
;			move.b	d7,d0
;			jsr	cos.w
;			move.w	d0,d2
;			asr.w	#2,d2
;			asr.w	#2,d3
;			movem.w	O_XPOS(a5),d0-d1
;			addq.w	#8,d0
;			addq.w	#8,d1
;			tst.w	O_USR1(a5)		;Walking right ?
;			.if (plus) {
;				addi.w	#16,d0
;			}
;			jsr	add_bullet.w
;		}
;	}

	moveq	#0,d0
	move.b	Rangle(a4),d0
	and.w	#$fff8,d0
	asl.w	#6,d0
	add.l	#Rotate_Buffer,d0
	move.l	d0,Bob_Graphics(a4)
	add.l	#384,d0
	move.l	d0,Bob_Mask(a4)

	bra	Test_Bob_Out

Roller_AnimTable:
		dc.l	level_GFX+bob0b,level_GFX+msk0b
		dc.w	0,0,32,4,4,24,24


*---------------------------------------------------------------------------
*	Routine and AnimTable of     Slime
*---------------------------------------------------------------------------

	rsset	Bob_Special_1
Sspeed	rs.l	1
Sylow	rs.w	1
Sdelay	rs.b	1

Start_Slime:
	bsr	rnd
	andi.b	#7,d0
	move.b	d0,Sdelay(a4)
	clr.l	Sspeed(a4)
	clr.w	Sylow(a4)
	move.l	#Slime,Bob_Routine(a4)

Slime:
	moveq	#$30,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	subq.b	#1,Sdelay(a4)
	bpl.s	.no_anim
		addq.b	#8,Sdelay(a4)
		bsr	Get_Next_Bob_Frame
.no_anim:
	move.w	Bob_Y_Position(a4),d0
	sub.w	Scr_Y_Level_Pos(a6),d0
	addq.w	#8,d0
	cmp.w	T_posY,d0
	bge.s	.out
		move.w	T_posX,d0
		add.w	Scr_X_Level_Pos(a6),d0
		sub.w	Bob_X_Position(a4),d0
		bpl.s	.no_neg
			neg.w	d0
.no_neg:
		cmpi.w	#16,d0
		bge.s	.out
			move.l	#Slime_AnimTable2,Bob_Next_Anim(a4)
			move.l	#.slime_fall,Bob_Routine(a4)
			bsr	Get_Next_Bob_Frame
.out:
	bra	Test_Bob_Out

.slime_fall:
	moveq	#0,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	move.l	Sspeed(a4),d0
	add.w	d0,Sylow(a4)
	swap	d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)

	cmpi.w	#6,Sspeed(a4)
	bge.s	.no_speedup
		addi.l	#$00004800,Sspeed(a4)
.no_speedup:
	bsr	check_ballex
	bra	Test_Bob_Out

Slime_AnimTable:
		dc.l	level_GFX+bob04,level_GFX+msk04
		dc.w	0,0,8,2,2,12,11
		dc.l	level_GFX+bob05,level_GFX+msk05
		dc.w	0,-1,10,2,2,12,11
		dc.w	ENTRY_END
		dc.l	Slime_AnimTable

Slime_AnimTable2:
		dc.l	level_GFX+bob06,level_GFX+msk06
		dc.w	0,-1,10,2,2,12,11

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Beule
*---------------------------------------------------------------------------
	rsset	Bob_Special_1
Bdelay		rs.w	1
Bhandler	rs.l	1
Bwackel		rs.b	1
Bshot		rs.b	1
BPHA		rs.w	1

Start_Beule:
	move.w	#60,Bdelay(a4)
	move.l	#beule0,Bhandler(a4)
	move.w	#18,Bob_Power(a4)
	clr.w	BPHA(a4)
	move.l	#Beule,Bob_Routine(a4)

Beule:
	move.l	#$300,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	move.l	Bhandler(a4),a0
	jsr	(a0)

	bra	Test_Bob_Out

beule0:						;Waiting
	subq.w	#1,Bdelay(a4)
	bpl.s	.out
		move.l	#beule1,Bhandler(a4)
		clr.w	Bdelay(a4)
.out:
	rts

beule1:						;Opening
	subq.w	#1,Bdelay(a4)
	bpl.s	.out
		addq.w	#8,Bdelay(a4)
		bsr	Get_Next_Bob_Frame
		addq.w	#1,BPHA(a4)
		cmpi.w	#2,BPHA(a4)
		bne.s	.out
			move.l	#beule2,Bhandler(a4)
			move.w	#100,Bdelay(a4)
			clr.w	Bwackel(a4)
.out:
	rts

beule2:						;Shooting
	subq.b	#1,Bshot(a4)
	bpl	.no_shot

		addq.b	#6,Bshot(a4)

		move.l	a4,-(sp)

		movem.w	Bob_X_Position(a4),d1-d2
		add.w	#16,d1
		addq.w	#8,d2
		moveq	#12,d0
		lea	Area_Enter_Vector(pc),a1
		bsr	Search_Bob_Entry
		sf	Lwait(a4)
		move.b	#15,Lnocheck(a4)
		bsr	rnd
		andi.w	#7,d0
		subq.w	#3,d0
		bpl.s	.add
		subq.w	#1,d0
		bra.s	.sub
.add:
		addq.w	#1,d0
.sub:
		move.w	d0,Lbxdir(a4)
		clr.w	Lbxdir+2(a4)
		clr.l	Lxlow(a4)
		bsr	rnd
		andi.w	#3,d0
		addq.w	#3,d0
		neg.w	d0
		move.w	d0,Lbydir(a4)
		clr.w	Lbydir+2(a4)
		move.l	(sp)+,a4

.no_shot:
	subq.b	#1,Bwackel(a4)
	bpl.s	.no_wackel
		addq.b	#3,Bwackel(a4)
		bsr	Get_Next_Bob_Frame
.no_wackel:
	subq.w	#1,Bdelay(a4)
	bpl.s	.out
		move.l	#beule3,Bhandler(a4)
		clr.w	Bdelay(a4)
		move.w	#2,BPHA(a4)
		move.l	#Beule_AnimTable2,Bob_Next_Anim(a4)
.out:
	rts

beule3:						;Closeing
	subq.w	#1,Bdelay(a4)
	bpl.s	.out
		addq.w	#8,Bdelay(a4)
		bsr	Get_Next_Bob_Frame
		subq.w	#1,BPHA(a4)
		bne.s	.out
			move.l	#beule0,Bhandler(a4)
			move.w	#140,Bdelay(a4)
.out:
	rts


Beule_AnimTable:
		dc.l	level_GFX+bob00,level_GFX+msk00
		dc.w	0,0,16,2,2,12,11
		dc.l	level_GFX+bob01,level_GFX+msk01
		dc.w	0,0,16,2,2,12,11
.lab0:
		dc.l	level_GFX+bob02,level_GFX+msk02
		dc.w	0,0,16,2,2,12,11
		dc.l	level_GFX+bob03,level_GFX+msk03
		dc.w	0,0,16,2,2,12,11
		dc.w	ENTRY_END
		dc.l	.lab0
Beule_AnimTable2:
		dc.l	level_GFX+bob01,level_GFX+msk01
		dc.w	0,0,16,2,2,12,11
		dc.w	ENTRY_END
		dc.l	Beule_AnimTable

	rsset	Bob_Special_1
Lbxdir		rs.l	1
Lbydir		rs.l	1
Lxlow		rs.w	1
Lylow		rs.w	1
Lwait		rs.b	1
Lnocheck	rs.b	1

Ball:
	moveq	#0,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	move.l	Lbxdir(a4),d0
	add.w	d0,Lxlow(a4)
	swap	d0
	move.w	Bob_X_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_X_Position(a4)
	move.l	Lbydir(a4),d0
	add.w	d0,Lylow(a4)
	swap	d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)

	cmpi.w	#6,Lbydir(a4)
	bge.s	.no_speedup
		addi.l	#$00004800,Lbydir(a4)

.no_speedup:
	not.b	Lwait(a4)
	bne.s	.ok
	bsr	Get_Next_Bob_Frame
.ok:
	bsr	.check_ballex
	bra	Test_Bob_Out

.check_ballex:
	tst.b	Lnocheck(a4)
	bmi.s	check_ballex
	subq.b	#1,Lnocheck(a4)
	rts

check_ballex:
	movem.w	Bob_X_Position(a4),d0-d1
	addq.w	#4,d0
	addq.w	#8,d1
	bsr	check_obj_kollision
	beq.s	.out
;			movem.w	O_XPOS(a5),d0-d1
;			addq.w	#8,d0
;			addq.w	#8,d1
;			jsr	calc_position.w

;			subq.w	#8,d1
;			move.w	d1,Bob_Y_Position(a4)
			move.l	#.handle_ballex,Bob_Routine(a4)
			move.l	#Ball_AnimTable2,Bob_Next_Anim(a4)
			sf	Lwait(a4)
			lea	Ball_Info_2(pc),a0
			sub.l	a4,a0
			move.w	a0,Bob_to_Info_Offs(a4)
			subq.w	#8,Bob_X_Position(a4)
.out:
	rts

.handle_ballex:
	subq.b	#1,Lwait(a4)
	bpl.s	.out
		addq.b	#3,Lwait(a4)
		bra	Get_Next_Bob_Frame

Ball_AnimTable:
		dc.l	level_GFX+bob04,level_GFX+msk04
		dc.w	0,0,8,2,2,12,11
		dc.l	level_GFX+bob05,level_GFX+msk05
		dc.w	0,-1,10,2,2,12,11
		dc.l	level_GFX+bob06,level_GFX+msk06
		dc.w	0,-1,10,2,2,12,11
		dc.w	ENTRY_END
		dc.l	Ball_AnimTable

Ball_AnimTable2:
		dc.l	level_GFX+bob07,level_GFX+msk07
		dc.w	0,0,8,2,2,12,11
		dc.l	level_GFX+bob08,level_GFX+msk08
		dc.w	0,0,8,2,2,12,11
		dc.l	level_GFX+bob09,level_GFX+msk09
		dc.w	0,2,6,2,2,12,11
		dc.l	level_GFX+bob0a,level_GFX+msk0a
		dc.w	0,3,5,2,2,12,11

		dc.w	END_OUT_DAMAGE


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

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

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

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

	cmp.w	d4,d0
	bgt	.no_collect

	move.l	Bob_Act_Anim(a4),a0

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

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

	addq.w	#1,Diamond_Count

	bra	Out_Bob_Damage

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

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

Diamond_Count:	dc.w	0

Diamond_AnimTable:
		dc.l	main_GFX+Cbob29,main_GFX+Cmsk29
		dc.w	0,0,16,2,2,12,11
		dc.l	main_GFX+Cbob2a,main_GFX+Cmsk2a
		dc.w	0,0,16,2,2,12,11
		dc.l	main_GFX+Cbob2b,main_GFX+Cmsk2b
		dc.w	0,0,16,2,2,12,11
		dc.l	main_GFX+Cbob2a,main_GFX+Cmsk2a
		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+Cbob26,main_GFX+Cmsk26
		dc.w	0,16,16,2,2,12,11
		dc.l	main_GFX+Cbob27,main_GFX+Cmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main_GFX+Cbob28,main_GFX+Cmsk28
		dc.w	0,0,32,2,2,12,11
		dc.l	main_GFX+Cbob27,main_GFX+Cmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main_GFX+Cbob28,main_GFX+Cmsk28
		dc.w	0,0,32,2,2,12,11
		dc.l	main_GFX+Cbob27,main_GFX+Cmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main_GFX+Cbob28,main_GFX+Cmsk28
		dc.w	0,0,32,2,2,12,11
		dc.w	END_OUT_DAMAGE


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

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

Wait_Handler:
	subq.w	#1,Wait_Verz
	bpl.s	.out
	move.l	#Return,-4(a0)
	clr.w	Zoom_finished
.out:
	rts

Wait_Verz:	dc.w	0
Zoom_finished:	dc.w	0

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

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

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

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

Rotate_3:
	move.l	#Rotate_4,Rotate_Routine
	move.l	Dest_Obj,a0
	lea	4*32*4(a0),a3

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

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

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

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

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


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

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

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

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

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Rocket
*---------------------------------------------------------------------------

RSPEED	= 8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	movem.w	Bob_X_Position(a4),d0-d1	;Check wall-collision
	bsr	check_obj_kollision
	bne	.end_rocket			;Rocket hit ground
	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.out
	subq.b	#1,T_rocket_anz
.out:
	rts



Rocket_AnimTable:
		dc.l	main_Buffer+Cbob18-Cbob18,main_Buffer+Cmsk18-Cbob18
		dc.w	0,0,13,2,2,12,11
		dc.l	main_Buffer+Cbob19-Cbob18,main_Buffer+Cmsk19-Cbob18
		dc.w	0,0,14,2,2,12,11
		dc.l	main_Buffer+Cbob1a-Cbob18,main_Buffer+Cmsk1a-Cbob18
		dc.w	0,0,13,2,2,12,11
		dc.l	main_Buffer+Cbob1b-Cbob18,main_Buffer+Cmsk1b-Cbob18
		dc.w	0,0,15,2,2,12,11

		dc.l	main_GFX+Cbob1c,main_GFX+Cmsk1c
		dc.w	0,0,15,2,2,12,11
		dc.l	main_GFX+Cbob1b,main_GFX+Cmsk1b
		dc.w	0,0,15,2,2,12,11
		dc.l	main_GFX+Cbob1a,main_GFX+Cmsk1a
		dc.w	0,0,13,2,2,12,11
		dc.l	main_GFX+Cbob19,main_GFX+Cmsk19
		dc.w	0,0,14,2,2,12,11

		dc.l	main_GFX+Cbob18,main_GFX+Cmsk18
		dc.w	0,0,13,2,2,12,11

		dc.l	main_GFX+Cbob18+12*4*2,main_GFX+Cmsk18+12*2
		dc.w	0,0,13,2,2,12,11
		dc.l	main_GFX+Cbob19+13*4*2,main_GFX+Cmsk19+13*2
		dc.w	0,0,14,2,2,12,11
		dc.l	main_GFX+Cbob1a+12*4*2,main_GFX+Cmsk1a+12*2
		dc.w	0,0,13,2,2,12,11
		dc.l	main_GFX+Cbob1b+14*4*2,main_GFX+Cmsk1b+14*2
		dc.w	0,0,15,2,2,12,11
		dc.l	main_GFX+Cbob1c+14*4*2,main_GFX+Cmsk1c+14*2
		dc.w	0,0,15,2,2,12,11
		dc.l	main_Buffer+Cbob1b-Cbob18+14*4*2,main_Buffer+Cmsk1b-Cbob18+14*2
		dc.w	0,0,15,2,2,12,11
		dc.l	main_Buffer+Cbob1a-Cbob18+12*4*2,main_Buffer+Cmsk1a-Cbob18+12*2
		dc.w	0,0,13,2,2,12,11

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

	bsr	sqrt				;Pythagoras...

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


*---------------------------------------------------------------------------
*	Routine and AnimTable of      Shoot
*---------------------------------------------------------------------------
Start_Shoot:
	move.l	a4,-(sp)
	movem.l	d2-d3,-(sp)
	move.w	d1,d2
	move.w	d0,d1
	lea	Area_Enter_Vector(pc),a1
	moveq	#7,d0
	bsr	Search_Bob_Entry
	movem.l	(sp)+,d2-d3
	tst.w	d7
	bmi.s	.no
	move.w	d2,Bob_Special_1(a4)
	move.w	d3,Bob_Special_2(a4)
.no:
	move.l	(sp)+,a4
	rts

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

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

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

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

	bsr	make_plhit
	bra	Out_Bob_Damage

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

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

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

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

	bra	Standart_BobAnim

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

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

	move.l	(sp)+,a4
	bra	Out_Bob_Damage	

Shoot_AnimTable:
		dc.l	main_GFX+Cbob17,main_GFX+Cmsk17
		dc.w	0,0,7,1,1,5,5
		dc.w	ENTRY_END
		dc.l	Shoot_AnimTable

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

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

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

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


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

	addq.w	#8,d0

	bsr	check_obj_kollision
	bne.s	.no_move

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

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

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

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

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

.start:
	move.l	a4,-(sp)
	moveq	#2,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	(sp)+,a4
	bra	Out_Bob_Damage
.wait:
Bonus_Check_Collect:
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1

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

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

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

	cmp.w	d4,d0
	bgt	.no_collect

	move.l	Bob_Act_Anim(a4),a0

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

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

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

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

.no_collect:
	bra	Test_Bob_Out

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

Bonus1_AnimTable:
		dc.l	main_GFX+Cbob16,main_GFX+Cmsk16
		dc.w	0,0,12,BONUS_POWER,2,12,8
Bonus2_AnimTable:
		dc.l	main_GFX+Cbob1f,main_GFX+Cmsk1f
		dc.w	0,0,16,BONUS_WEAPON3,2,12,19
Bonus3_AnimTable:
		dc.l	main_GFX+Cbob1e,main_GFX+Cmsk1e
		dc.w	0,0,16,BONUS_WEAPON2,2,12,19
Bonus4_AnimTable:
		dc.l	main_GFX+Cbob1d,main_GFX+Cmsk1d
		dc.w	0,0,16,BONUS_WEAPON1,2,12,19
Bonus5_AnimTable:
		dc.l	main_GFX+Cbob18,main_GFX+Cmsk18
		dc.w	0,0,13,BONUS_ROCKET,2,12,11
Bonus6_AnimTable:
		dc.l	main_GFX+Cbob23,main_GFX+Cmsk23
		dc.w	0,0,16,BONUS_SHIELD,2,12,12
Bonus7_AnimTable:
		dc.l	main_GFX+Cbob24,main_GFX+Cmsk24
		dc.w	0,0,16,BONUS_ONEUP,2,12,12

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

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

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

	move.w	#2,Bob_Special_3(a0)

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

	;Inhalt der Box starten.

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

	bra	Test_Bob_Out

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

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

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

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

	move.l	(sp)+,a4
	rts

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

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

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

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

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

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

	bsr	check_obj_kollision
	beq	Test_Bob_Out
	moveq	#0,d0
	bra	Standart_Destruction

Box_AnimTable:
		dc.l	main_GFX+Cbob20,main_GFX+Cmsk20
		dc.w	0,0,24,2,2,28,20
		dc.l	main_GFX+Cbob22,main_GFX+Cmsk22
		dc.w	0,10,14,2,2,28,20
		dc.w	ENTRY_END
		dc.l	Box_AnimTable

Deckel_AnimTable:
		dc.l	main_GFX+Cbob21,main_GFX+Cmsk21
		dc.w	0,0,19,2,2,28,20

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

Explo_AnimTable:
		dc.l	main_GFX+Cbob00,main_GFX+Cmsk00
		dc.w	0,13,18,0,0,0,0
		dc.l	main_GFX+Cbob01,main_GFX+Cmsk01
		dc.w	0,5,27,0,0,0,0
		dc.l	main_GFX+Cbob02,main_GFX+Cmsk02
		dc.w	0,2,30,0,0,0,0
		dc.l	main_GFX+Cbob03,main_GFX+Cmsk03
		dc.w	0,0,32,0,0,0,0
		dc.l	main_GFX+Cbob04,main_GFX+Cmsk04
		dc.w	0,0,32,0,0,0,0
		dc.l	main_GFX+Cbob05,main_GFX+Cmsk05
		dc.w	0,0,32,0,0,0,0
		dc.l	main_GFX+Cbob06,main_GFX+Cmsk06
		dc.w	0,0,31,0,0,0,0
		dc.l	main_GFX+Cbob07,main_GFX+Cmsk07
		dc.w	0,0,27,0,0,0,0
		dc.l	main_GFX+Cbob08,main_GFX+Cmsk08
		dc.w	0,0,24,0,0,0,0
		dc.l	main_GFX+Cbob09,main_GFX+Cmsk09
		dc.w	0,0,16,0,0,0,0
		dc.w	END_OUT_DAMAGE

Explo2_AnimTable:
		dc.l	main_GFX+Cbob0a,main_GFX+Cmsk0a
		dc.w	0,0,14,0,0,0,0
		dc.l	main_GFX+Cbob0b,main_GFX+Cmsk0b
		dc.w	0,2,7,0,0,0,0
		dc.l	main_GFX+Cbob0c,main_GFX+Cmsk0c
		dc.w	0,1,12,0,0,0,0
		dc.l	main_GFX+Cbob0d,main_GFX+Cmsk0d
		dc.w	0,0,14,0,0,0,0
		dc.l	main_GFX+Cbob0e,main_GFX+Cmsk0e
		dc.w	0,0,14,0,0,0,0
		dc.l	main_GFX+Cbob0f,main_GFX+Cmsk0f
		dc.w	0,1,14,0,0,0,0
		dc.l	main_GFX+Cbob10,main_GFX+Cmsk10
		dc.w	0,2,13,0,0,0,0
		dc.l	main_GFX+Cbob11,main_GFX+Cmsk11
		dc.w	0,2,13,0,0,0,0
		dc.w	END_OUT_DAMAGE

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

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

Walker_Ground:
	moveq	#$50,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction
	move.w	Bob_X_Position(a4),d0
	move.w	Bob_Y_Position(a4),d1

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

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

	st	T_force_jump
	clr.b	T_state

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

	lea	Walker_MAnimTableR(pc),a0
	move.w	Bob_Special_5(a4),d0
	add.w	d0,d0
	add.w	d0,d0
	move.w	d0,Bob_Special_5(a4)
	bpl.s	.set
	lea	Walker_MAnimTableL(pc),a0
.set:
	move.l	a0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	bra	Test_Bob_Out

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

	tst.w	d0
	bmi.s	.left

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

	add.w	#32,d0

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

	jsr	check_obj_kollision
	bne	Standart_BobAnim

	;Should Walker fall ?

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

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

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

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

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

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

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

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

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

	add.w	#32,d0

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

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

	jsr	check_obj_kollision
	bne	.destruct

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

	addq.w	#4,Bob_Y_Position(a4)

	bra	Standart_BobAnim

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

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

	addq.w	#3,Bob_Y_Position(a4)

	tst.w	d0
	bmi.s	.left

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

	add.w	#32,d0

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

	jsr	check_obj_kollision
	beq	Standart_BobAnim

	bra.s	.normal

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

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

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

	bra.s	.normal

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

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

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

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

Walker_Flip	= level_Buffer-bob02

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

Walker_MFlip	= Walker_Flip+bob06-bob07

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


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

act_level:	dc.w	Level

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

	jsr	init_parallax
	jsr	set_copcolors

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

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

	lea	main_flipI(pc),a3
	lea	main_GFX,a0
	lea	main_Buffer,a1
	jsr	Flip_Bobs

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

	lea	level_GFX+bob0b,a0
	lea	Work_Buffer1,a1
	lea	Rot_Info1,a2
	lea	level_GFX+msk0b,a3
	moveq	#32,d0
	moveq	#3,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	3*32*4(a0),a3

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

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

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

	move.l	#Para_field,d0
	move.w	#para_b-16,bltdmod(a5)
	move.w	#0,bltamod(a5)
	move.l	#-1,bltafwm(a5)
	move.w	#$09f0,bltcon0(a5)

	moveq	#1,d7
.blitloop:
	move.l	d0,bltdpth(a5)
	move.l	#para_bg,bltapth(a5)

	move.w	#64*128*3+8,bltsize(a5)

	waitblt
	add.l	#32,d0
	dbf	d7,.blitloop

	lea	Para_field,a0
	lea	flip_table,a2
	lea	32(a0),a1
	moveq	#0,d0

	move.w	#128*3,d7
.yloop:
	moveq	#15,d6
.line:
	move.b	(a0)+,d0
	move.b	(a2,d0.w),d0
	move.b	d0,-(a1)
	dbf	d6,.line
	lea	para_b-16(a0),a0
	lea	para_b+16(a1),a1
	dbf	d7,.yloop

	move.l	#Para_field+16,bltapth(a5)
	move.w	#para_b-16,bltamod(a5)
	move.l	#Para_field+48,bltdpth(a5)
	move.w	#64*128*3+8,bltsize(a5)
	waitblt

	move.w	#para_b-8,bltamod(a5)
	move.w	#para_b-8,bltdmod(a5)
	move.l	#Para_field,bltapth(a5)
	move.l	#Para_field+64,bltdpth(a5)
	move.w	#64*128*3+4,bltsize(a5)
	waitblt

	rts

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

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


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

SetClist:
	lea	Coplab4(pc),a0
	move.w	Scr_X_Level_Pos(a6),d0
	and.w	#15,d0
	moveq	#15,d1
	sub.w	d0,d1
	move.w	d1,d0
	move.w	Scr_X_Level_Pos(a6),d0
	lsr.w	#1,d0
	and.w	#15,d0
	neg.w	d0
	add.w	#15,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)

	lea	Coplab2(pc),a0
	move.w	Clist_oldcolpos1,d1
	bmi.s	.no1
	move.w	#COPCOL,4(a0,d1.w)	;Farbding wieder reinschreiben.
.no1:
	move.w	Clist_oldcolpos2,d1
	bmi.s	.no2
	move.w	#COPCOL,4(a0,d1.w)	;Farbding wieder reinschreiben.
.no2:
	move.w	Clist_oldcolpos3,d1
	bmi.s	.no3
	move.w	#COPCOL,4(a0,d1.w)	;Farbding wieder reinschreiben.
.no3:
	tst.b	Col_Init_Flag
	beq.s	.no_init1
	bsr	init_parallax
.no_init1:

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

	move.w	d0,Clist_oldcolpos1
	move.w	6(a0,d0.w),d1		;Diese Farbe wurde geschrieben.

.no_copjump:
	lea	Coplab3(pc),a0
;	move.w	d0,22(a0)		;LO-Word
;	swap	d0
;	move.w	d0,18(a0)		;HI-Word
	move.w	d1,14(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)

	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:

	lea	Coplab5(pc),a0
	moveq	#0,d6
	move.w	Scr_X_Level_Pos(a6),d6
	lsr.w	#1,d6
	and.w	#255,d6
	lsr.w	#3,d6
	and.w	#$fffe,d6
	add.l	#Para_field,d6

	moveq	#0,d0
	move.w	Old_Y_Level_Pos,d0
	sub.w	Scr_Y_Level_Pos(a6),d0
	move.w	Scr_Y_Level_Pos(a6),Old_Y_Level_Pos
	sub.w	d0,Para_Ypos2
	bpl.s	.plus
	add.w	#128*2,Para_Ypos2
	eor.w	#1,Para_Flag
	bra.s	.neg
.plus:
	cmp.w	#128*2,Para_Ypos2
	blt.s	.neg
	sub.w	#128*2,Para_Ypos2
	eor.w	#1,Para_Flag
.neg:
	move.w	Para_Ypos2,d0
	lsr.w	#1,d0
	move.w	d0,Para_Ypos
;
;	move.w	Scr_Y_Level_Pos(a6),d0
;	lsr.w	#1,d0
;	addq.w	#1,Para_Ypos
;	cmp.w	#128,Para_Ypos
;	blt.s	.no_over
;	sub.w	#128,Para_Ypos
;	eor.w	#1,Para_Flag
.no_over:
	move.w	Para_Ypos,d0		;0-127
	move.w	d0,d7

	tst.w	Para_Flag
	beq.s	.positiv

	neg.w	d0
	add.w	#126,d0

	move.w	#-para_b*3-40,14(a0)
	move.w	#para_b*3-40,Copgosub1+2
	move.w	#-para_b*3-40,Copgosub2+2
	bra.s	.set
.positiv:
	move.w	#para_b*3-40,14(a0)
	move.w	#-para_b*3-40,Copgosub1+2
	move.w	#para_b*3-40,Copgosub2+2
.set:
	mulu	#para_b*3,d0
	add.l	d6,d0
	move.w	d0,2(a0)
	add.w	#para_b,d0
	move.w	d0,6(a0)
	add.w	#para_b,d0
	move.w	d0,10(a0)

	move.w	d7,d0
	neg.w	d0
	add.w	#127,d0

	tst.w	Para_Flag
	beq.s	.ok
	subq.w	#1,d0
	bpl.s	.ok
	sub.w	#126,Para_Ypos
	eor.w	#1,Para_Flag
	bra	.no_over
.ok:
	move.w	d0,d1
	asl.w	#3,d1

	move.w	d1,Clist_oldcolpos2

	move.w	#-1,Clist_oldcolpos3
	add.w	#127,d0
	cmp.w	#$ff-$30,d0
	bge.s	.no_jump2
	asl.w	#3,d0
	move.w	d0,Clist_oldcolpos3
.no_jump2:
	
	move.w	Clist_oldcolpos1,d0
	lea	Coplab3(pc),a0
	move.w	Clist_oldcolpos2,d1
	lea	Copgosub1(pc),a1
	move.w	Clist_oldcolpos3,d2
	lea	Copgosub2(pc),a2

.again:
	moveq	#0,d7
	cmp.w	d1,d0
	bls.s	.sort_ok1
	move.w	d0,d6
	move.w	d1,d0
	move.w	d6,d1
	move.l	a0,d6
	move.l	a1,a0
	move.l	d6,a1
	moveq	#1,d7
.sort_ok1:
	cmp.w	d2,d1
	bls.s	.sort_ok2
	move.w	d1,d6
	move.w	d2,d1
	move.w	d6,d2
	move.l	a1,d6
	move.l	a2,a1
	move.l	d6,a2
	moveq	#1,d7
.sort_ok2:
	tst.w	d7
	bne.s	.again

	move.l	a4,-(sp)
	lea	Coplab2(pc),a4
	tst.w	d0
	bmi.s	.no_set1
	move.w	a0,Coplab6+2			;Hierhin verzweigen.
	move.w	6(a4,d0.w),14(a0)
	move.w	#$008a,4(a4,d0.w)		;Jump auslsen!
	lea	8(a4,d0.w),a3
	move.w	a3,18(a0)			;Rcksprung.
.no_set1:
	tst.w	d1
	bmi.s	.no_set2
	cmp.w	d0,d1
	bne.s	.set2
	;d0 und d0 sind gleich.
	move.w	a1,18(a0)
	bra.s	.goon2
.set2:
	move.w	a1,22(a0)			;Weitersprung.
	move.w	6(a4,d1.w),14(a1)
	move.w	#$008a,4(a4,d1.w)
.goon2:
	lea	8(a4,d1.w),a3
	move.w	a3,18(a1)			;Rcksprung.
.no_set2:
	tst.w	d2
	bmi.s	.no_set3
	cmp.w	d1,d2
	bne.s	.set3
	;d0 und d0 sind gleich.
	move.w	a2,18(a1)
	bra.s	.goon3
.set3:
	move.w	a2,22(a1)			;Weitersprung.
	move.w	6(a4,d2.w),14(a2)
	move.w	#$008a,4(a4,d2.w)
.goon3:
	lea	8(a4,d2.w),a3
	move.w	a3,18(a2)			;Rcksprung.
.no_set3:

	move.w	Para_Ypos,d0
	asl.w	#1,d0
	and.w	#$1,Para_Ypos2
	or.w	d0,Para_Ypos2

	move.l	(sp)+,a4
	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

Para_Ypos:	dc.w	0
Para_Ypos2:	dc.w	0
Para_Flag:	dc.w	0
Old_Y_Level_Pos:dc.w	0

Clist_oldcolpos1:	dc.w	0
Clist_oldcolpos2:	dc.w	0
Clist_oldcolpos3:	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
	move.l	#Coplab2+6,bltdpth(a5)
	move.l	d3,bltapth(a5)
	move.w	#64*$d0+1,bltsize(a5)
.bwait0:
	btst	#14,dmaconr(a5)
	bne	.bwait0
	rts

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

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

	st	Col_Flag
	jsr	(a4)
	bsr	set_weapon_colors
	jsr	set_copcolors

	addq.w	#1,Fade_Position
	bsr	Fade_to_Dest

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


.fade_out:
	bsr	Wait_tof

	st	Col_Flag
	jsr	(a4)
	bsr	set_weapon_colors
	jsr	set_copcolors

	subq.w	#1,Fade_Position
	bsr	Fade_to_Dest

	tst.w	Fade_Position
	bne	.fade_out
	sf	Col_Init_Flag
	rts

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


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


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

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

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

;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
levelb1	=	132
levelh1	=	132
levelb2	=	132
levelh2	=	132

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

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

	Even
coltab:
	dcb.w	32,0

B_coltab:
	dc.w	$0080,$0CBB,$0369,$0987,$0654,$0584,$0322,$0FFF
	dc.w	$0000,$04A7,$0020,$0031,$0152,$0263,$0385,$0ADD

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

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

C_buffer:	ds.w	15

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

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

	dc.w	$008e,$3091
	dc.w	$0090,$18c1
	dc.w	$0092,$0038
	dc.w	$0094,$00d0
	dc.w	$0108,planeb*3-40
	dc.w	$0100,$6400
	dc.w	$0104,4+4*8
Coplab4:
	dc.w	$0102,$0000

Coplab1:
	dc.w	$00e0,$0004
	dc.w	$00e2,0
	dc.w	$00e8,$0004
	dc.w	$00ea,0+planeb
	dc.w	$00f0,$0004
	dc.w	$00f2,0+planeb*2
Coplab5:
	dc.w	$00e6,(Para_field+para_b*0+127*para_b*3)&$ffff
	dc.w	$00ee,(Para_field+para_b*1+127*para_b*3)&$ffff
	dc.w	$00f6,(Para_field+para_b*2+127*para_b*3)&$ffff
	dc.w	$010a,-para_b*3-40
	dc.w	$00e4,Para_field/$10000
	dc.w	$00ec,Para_field/$10000
	dc.w	$00f4,Para_field/$10000

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

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	$0082,Main_Clist&$ffff

	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	$00ea,0
	dc.w	$00f2,0+planeb*2
	dc.w	COPCOL,$0000

	dc.w	$0082,$0000
	dc.w	$0086,$0000
;	dc.w	$0180,$0040
	dc.w	$0088,$0001

Copgosub1:
	dc.w	$010a,-para_b*3-40
	dc.w	$0180,0
	dc.w	$0180,0
	dc.w	COPCOL,$0000
	dc.w	$0082,$0000
	dc.w	$0086,$0000
;	dc.w	$0180,$0004
	dc.w	$0088,$0001

Copgosub2:
	dc.w	$010a,-para_b*3-40
	dc.w	$0180,0
	dc.w	$0180,0
	dc.w	COPCOL,$0000
	dc.w	$0082,$0000
	dc.w	$0086,$0000
;	dc.w	$0180,$0400
	dc.w	$0088,$0001

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

paracoltab:	ds.w	14

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

Area1:		include	W4_level2_area
Area2:		include	W4_level1_area
