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

;
;                           JumpTable
;

	bra.w	Init_World
	bra.w	Init_Datas
	bra.w	Next_Level
	bra.w	Fade_Colors
	bra.w	StartFlash
	bra.w	Copy_Colors
	dc.l	Bob_Info_Tab_Adrs
	dc.l	B_coltab

Sound	= $70200

world4_data	= $11500

Level1	= world4_data+$80D8
Level2	= world4_data+$5880
Level3	= world4_data+$13844

character	= world4_data+$0
Macros2		= world4_data+$11384
Macros		= world4_data+$181FE
character2	= world4_data+$11444

level_GFX	= world4_data+$DD74
main2_GFX	= world4_data+$A264
AD_GFX		= world4_data+$FE24

para_bg		= world4_data+$C514
para_bg2	= world4_data+$13E5C

Zug_GFX		= world4_data+$1481C
Zug_Boss_GFX	= world4_data+$16896

Boss2_GFX	= world4_data+$17CBE
Boss_Quell	= world4_data+$183FE

Area1		= world4_data+$14E6C

RopeBob8	= world4_data+$DD14
Para_Quell	= world4_data+$19D36

Para_field	= Rotate_Buffer
Boss_GFX	= $69b80
B_parallax	= $5fe60
flash_buffer	= Rotate_Buffer+16384
Rotate2		= $49000
LevelBuffer	= $59000
Flash_Buffer	= $68c00
Tail_Buffer	= Rotate_Buffer+27648

para_b		= 72

;
;			    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 	= $00f9a
bob0e 	= $01048
msk0e 	= $01288
bob0f 	= $01348
msk0f 	= $01588
bob10 	= $01648
msk10 	= $01852
bob11 	= $01900
msk11 	= $01978
bob12 	= $019a0
msk12 	= $01a18
bob13 	= $01a40
msk13 	= $01a94
bob14 	= $01ab0
msk14 	= $01b04
bob15 	= $01b20
msk15 	= $01b9e
bob16 	= $01bc8
msk16 	= $01c4c
bob17 	= $01c78
msk17 	= $01cfc
bob18 	= $01d28
msk18 	= $01d88
bob19 	= $01da8
msk19 	= $01e08
bob1a 	= $01e28
msk1a 	= $01e76
bob1b 	= $01e90
msk1b 	= $01ede
bob1c 	= $01ef8
msk1c 	= $01f0a
bob1d 	= $01f10
msk1d 	= $01f28
bob1e 	= $01f30
msk1e 	= $01f54
bob1f 	= $01f60
msk1f 	= $01f96
bob20 	= $01fa8
msk20 	= $01fcc
bob21 	= $01fd8
msk21 	= $0201a
bob22 	= $02030
msk22 	= $02090


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 	= $01ec2
Cbob26 	= $01ee0
Cmsk26 	= $01f40
Cbob27 	= $01f60
Cmsk27 	= $01ffc
Cbob28 	= $02030
Cmsk28 	= $020f0
Cbob29 	= $02130
Cmsk29 	= $02190
Cbob2a 	= $021b0
Cmsk2a 	= $02210
Cbob2b 	= $02230
Cmsk2b 	= $02290

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

Hide_Player:
	move.l	Macro_Pointer(pc),a1
	move.w	T_posX,d0
	move.w	T_posY,d1
	add.w	Scr_X_Level_Pos(a6),d0
	add.w	Scr_Y_Level_Pos(a6),d1
	add.w	#20,d0
	sub.w	#4+32,d1
	bge.s	.ok
	moveq	#0,d1
.ok:
	lsr.w	#4,d0
	move.l	Scr_Level(a6),a0

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

	move.w	Scr_Level_Width(a6),d2
	mulu	d2,d1
	add.l	d1,a0
	moveq	#0,d0
	move.b	-1(a0),d0
	bsr.s	.check
	bne.s	.hide
	move.b	(a0),d0
	bsr.s	.check
	bne.s	.hide
	move.b	-1(a0,d2.w),d0
	bsr.s	.check
	bne.s	.hide
	move.b	(a0,d2.w),d0
	bsr.s	.check
	bne.s	.hide
	add.l	d2,d2
	move.b	-1(a0,d2.w),d0
	bsr.s	.check
	bne.s	.hide
	move.b	(a0,d2.w),d0
	bsr.s	.check
	bne.s	.hide

.no_hide:
	move.w	#4+4*8,Priority
	bra.s	.go_on

.hide:
	move.w	#0+4*8,Priority
.go_on:
	bra	Handle_Player

.check:
	and.w	#$ff,d0
	add.w	d0,d0
	btst.b	#7,1(a1,d0.w)
	rts

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

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

	tst.b	T_targeting
	bne	.skip0

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

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

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

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

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

	;Komplett drber.

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

	;Komplett drunter.

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

	move.l	d0,4(a3)

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

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

	add.w	Scr_Supply_Field+2(a6),d0

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

	addq.l	#8,a3

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

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

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

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

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

	add.w	Scr_Supply_Field+2(a6),d0

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

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

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

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

	addq.l	#8,a3
	rts

;	lea	$50000,a0	;Source start
;	lea	$60000,a1	;Dest   start
;	lea	$50000+8000,a2	;Source end
;	bsr	repack

repack:
	moveq	#127,d7
.in:
	cmp.l	a0,a2
	ble.s	.out
	moveq	#0,d0
	move.b	(a1)+,d0
	bmi	.nofollow
	move.b	(a1)+,d1
.loop:
	move.b	d1,(a0)+
	dbf	d0,.loop
	bra.s	.in
.nofollow:
	and.b	d7,d0
.loop2:
	move.b	(a1)+,(a0)+
	dbf	d0,.loop2
	bra.s	.in
.out:
	rts

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


		dc.w	-1

main2_flipI:	dc.w	Cbob18,13*4,16/8
		dc.w	Cbob19,14*4,16/8
		dc.w	Cbob1a,13*4,16/8
		dc.w	Cbob1b,15*4,16/8
		dc.w	Cbob1c,15*4,16/8
		dc.w	-1

Cue_Table1:	dc.w	2047,2065	;0
		dc.w	1150,2081	;1
		dc.w	1133,1617	;2
		dc.w	0085,2081	;3
		dc.w	0809,1105	;4
		dc.w	0463,1649	;5
		dc.w	0112,0913	;6
		dc.w	0191,1473	;7		
		dc.w	0809,1661	;8
		dc.w	0094,0625	;9
		dc.w	0155,0243	;10
		dc.w	1995,1918	;11

Cue_Table2:	dc.w	0080,0081	;0
		dc.w	0092,0337	;1
		dc.w	1264,0289	;2
		dc.w	1338,0982	;3
		dc.w	0703,1025	;4
		dc.w	1654,0996	;5
		dc.w	1455,0577	;6
		dc.w	1440,1505	;7
		dc.w	1696,1809	;8
		dc.w	0068,2081	;9

Cue_Table3:	dc.w	80,129		;0
		dc.w	2357,129	;1
		dc.w	3858,129	;2
		dc.w	5540,129	;3


Bob_Info_Tab_Adrs	dc.l	Diamond_Info_0
		;--1
		dc.l	Explo_Info_1	;1 Big Xplo
		dc.l	Explo_Info_2	;2 Small Xplo
		dc.l	Box_Info_1	;3 Extrabox
		dc.l	Box_Info_2	;4 Extrabox Deckel
		dc.l	Bonus_Info_1	;5 PowerUp
		dc.l	Rocket_Info_1	;6 Lenkrakete
		dc.l	Shoot_Info_1	;7 Schuss
		dc.l	CuePoint_Info_1	;8 Cuepoint
		dc.l	Mine_Info_1	;9 MinenExplo
		dc.l	Diamond_Info_1	;10 Diamant
		dc.l	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
		dc.l	Pfeil_Info_1	;16 Exit-Pfeil
		dc.l	Egg_Info_1	;17 Egg
		dc.l	Drop_Info_1	;18 Tropfen
		dc.l	Flyer_Info_1	;19 Big Flyer
		dc.l	Flame_Info_1	;20 Flame-thrower
		dc.l	Flame_Info_2	;21 Flame-thrower
		dc.l	Wall_Info_1	;22 Wall
		dc.l	Boss_Info_1	;23 Boss4
		dc.l	Boss2_Info_1	;24 Boss5
		dc.l	Boss2_Info_2	;25 Boss5 Schwanz
		dc.l	Boss2_Info_3	;26 Boss5 Hand

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Rocket_Info_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	$fffffffd	;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	$fffffffd	;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	$fffffffd	;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_Start2	;Routine, die Bob verwaltet
		dc.l	Diamond_AnimTable	;Zeiger auf nchste Anim

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

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	$fffffffd	;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	$fffffffd	;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	$fffffffd	;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	$fffffffd	;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	$fffffffd	;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	$fffffffd	;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	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

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

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

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

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

Egg_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	13		;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	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

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

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

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

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

Flame_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	-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	$fffffffd	;Zeiger auf Tabelle mit Zeigern, die angeben welche Planes im Playfield mit welchen Planes des Bobs oder der Maske beschrieben werden sollen.

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

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

Wall_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	-2		;Hitpoints
		dc.l	Start_Swall	;Routine, die Bob verwaltet
		dc.l	Wall_AnimTable	;Zeiger auf nchste Anim

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

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

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

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

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

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

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

Boss2_Info_3:
		dc.w	BLOCK+FAST	;Bob_Mode
		dc.w	64		;Bob_I_Out_X_Val
		dc.w	64		;Bob_I_Out_Y_Val
		dc.w	48		;Breite in Pixels
		dc.w	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	-2		;Hitpoints
		dc.l	Start_Boss4	;Routine, die Bob verwaltet
		dc.l	Boss5_AnimTable2;Zeiger auf nchste Anim

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

Diamond_Start2:
	cmp.w	#2,act_level
	beq.s	.init
	bsr	check_background
	beq.s	.init
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
.init:
	move.l	#Diamond_Start,Bob_Routine(a4)
	rts

Start_Bonus2:
	cmp.w	#2,act_level
	beq.s	.init
	bsr	check_background
	beq.s	.init
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	bsr	Start_Bonus
	move.l	#Move_Bonus2,Bob_Routine(a4)
	rts
.init:
	bra	Start_Bonus

Move_Bonus2:
	bsr	Bonus_Check_Collect
	bra	Test_Bob_Out2

check_background:
	movem.w	Bob_X_Position(a4),d0-d1
	lsr.w	#4,d0
	move.l	Scr_Level(a6),a0

	sub.w	#32,d1

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

	mulu	Scr_Level_Width(a6),d1
	add.l	d1,a0
	moveq	#0,d0
	move.b	-1(a0),d0
	cmp.b	#59,d0
	beq.s	.ok
	add.w	d0,d0
	move.l	Macro_Pointer(pc),a0
	move.b	1(a0,d0.w),d0
	and.b	#%110000,d0		;Es ist eine Schrge!
	bne.s	.ok
	moveq	#1,d0
	rts
.ok:
	moveq	#0,d0
	rts

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Boss5
*---------------------------------------------------------------------------

BOSSX	equ 1822
BOSSY	equ 1936

	rsset	Bob_Special_1	;Main
Eptr	rs.l	1
Etail	rs.w	1
Etfac	rs.w	1
Etdelay	rs.w	1
Etangle	rs.b	1
Eshot	rs.b	1

	rsset	Eptr		;Hand
Edelay	rs.w	1

		rsset	Eptr	;Dorn
Edorn_time	rs.w	1

;---------------------------------
Play_Expl:
	subq.b	#1,expl_verz
	bpl.s	.out
	bsr	rnd
	and.b	#3,d0
	move.b	d0,expl_verz
	bsr	rnd
	and.b	#$20,d0
	beq.s	.fx1
	PLAY_FX	#$1a
	rts
.fx1:
	PLAY_FX	#$1b
.out:
	rts

expl_verz:	dc.w	0

Check_Boss5:					;Is boss in range ?
	bsr	Pulse_Colors
	move.l	Act_Scr_Structure,a6
	cmpi.w	#BOSSX-$60,Scr_X_Level_Pos(a6)
	bls.s	.out
		cmpi.w	#BOSSY-$10,Scr_Y_Level_Pos(a6)
		bls.s	.out
			move.w	#BOSSX,Scr_X_Fix(a6)
			move.w	#BOSSY,Scr_Y_Fix(a6)
			bsr	init_boss
.out:
	rts

init_boss:
	tst.b	no_time				;Allready init ?
	bne	.no_init
;		st	boss_flag.w		;No, do it...
		st	no_time
		clr.w	boss_power

		lea	Area_Enter_Vector(pc),a1
		moveq	#24,d0
		bsr	Search_Bob_Entry	;Main object
		move.l	#handle_boss5,Bob_Routine(a4)
;		move.l	#boss_spr,O_INFO(a5)
;		clr.w	O_PHA(a5)
;		st	O_SHOW(a5)
;		move.l	#boss_col,O_COL(a5)
;		st	O_COLEN(a5)
		bsr	calc_bosspos
		clr.w	Etail(a4)
		clr.w	Etangle(a4)
		clr.w	Etfac(a4)
		move.w	#194,player_vpos+2
		move.w	#40,Etdelay(a4)
		move.w	#100,Bob_Power(a4)

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

		move.l	a4,-(sp)

		lea	Area_Enter_Vector(pc),a1
		moveq	#25,d0
		bsr	Search_Bob_Entry	;Tail-FX-Object
		move.l	(sp),a0
		move.l	#handle_dorn,Bob_Routine(a4)
		move.l	Bob_X_Position(a0),Bob_X_Position(a4)
		move.l	#Boss5_AnimTable3,Bob_Next_Anim(a4)
		bsr	Get_Next_Bob_Frame
;		move.l	#slave_spr,O_INFO(a0)
;		move.w	#2,O_PHA(a0)
;		st	O_SHOW(a0)
;		move.l	#slave_col,O_COL(a0)
;		st	O_COLEN(a0)
		move.w	#10,Edorn_time(a4)

		lea	Area_Enter_Vector(pc),a1
		moveq	#26,d0
		bsr	Search_Bob_Entry	;Hand-FX-Object
		move.l	(sp)+,a0
		move.l	#handle_hand,Bob_Routine(a4)
		move.l	Bob_X_Position(a0),Bob_X_Position(a4)
		move.l	#Boss5_AnimTable2,Bob_Next_Anim(a4)
		bsr	Get_Next_Bob_Frame
;		move.l	#slave_spr,O_INFO(a0)
;		clr.w	O_PHA(a0)
;		st	O_SHOW(a0)
;		move.l	#slave_col,O_COL(a0)
;		st	O_COLEN(a0)
		clr.w	Edelay(a4)


			clr.w	coltab+10
			clr.w	B_coltab+10
			clr.w	Main_Clist+18

	lea	Tail_Buffer,a0
	lea	.Tail_field(pc),a1
	move.w	#0,bltamod(a5)
	move.w	#38-2,bltdmod(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#$ffff,bltalwm(a5)

	moveq	#2-1,d7
.yloop:
	moveq	#19-1,d6
.xloop:
	moveq	#0,d0
	move.b	(a1)+,d0
	mulu	#96,d0
	add.l	#character,d0
	move.l	d0,bltapth(a5)
	move.l	a0,bltdpth(a5)
	move.w	#64*3*16+1,bltsize(a5)
	waitblt
	addq.l	#2,a0
	dbf	d6,.xloop
	add.l	#16*3*38-38,a0
	dbf	d7,.yloop


.no_init:
	rts

.Tail_field:
	dc.b	126,127,142,126,127,142,126,127,142,143,144,143,144,143,144,143,144,143,144
	dc.b	134,135,150,134,135,150,134,135,150,151,152,151,152,151,152,151,152,151,152

.pow_tab:	dc.w	80,80,70
		dc.w	150,200,100
		dc.w	220,350,130

handle_boss5:
	bsr	calc_bosspos			;Calc right position...
	cmpi.w	#BOSSX,Scr_X_Level_Pos(a6)
	bne	.no_init
		cmpi.w	#BOSSY,Scr_Y_Level_Pos(a6)	;Reached final position ?
		bne	.no_init
			move.l	#handle_boss1,Bob_Routine(a4)	;Yes, normal handler
			st	T_stand
			move.w	#100,Bob_Power(a4)

	move.l	Macro_Pointer(pc),a1		;Kollisionen lschen!
	lea	Macro_tab(pc),a0
.loop:
	moveq	#0,d0
	move.b	(a0)+,d0
	beq.s	.end
	add.w	d0,d0
	and.w	#$fff0,(a1,d0.w)
	bra.s	.loop
.end:

	SONGPLAY #4

	move.l	#blit_tail,SFX_Handler
.no_init:
	bra	exit_boss1

Macro_tab:	dc.b	126,127,142,143,144,134,135,150,151,152,0
	even

handle_boss1:
	tst.w	boss_power
	bmi.s	.check_mouth
	moveq	#100,d0
	sub.w	Bob_Power(a4),d0			;Destroyed ?
	beq	.no_power
		move.w	#100,Bob_Power(a4)
		move.w	d0,-(sp)
;		pea	(a5)
;		jsr	add_object.w		;Display explosions
;		move.l	O_XPOS(a5),O_XPOS(a0)
;		move.l	a0,a5
;		addi.w	#230,O_XPOS(a5)
;		addi.w	#70,O_YPOS(a5)
;		jsr	rnd.w
;		andi.w	#15,d0
;		add.w	d0,O_XPOS(a5)
;		jsr	rnd.w
;		andi.w	#15,d0
;		add.w	d0,O_YPOS(a5)
;		jsr	make_expl.w
		bsr	rnd
		and.w	#3,d0
		cmp.w	#3,d0
		blt.s	.do_sound
		moveq	#0,d0
.do_sound:
		add.w	#$37,d0
		bsr	Do_FX
;		move.l	(sp)+,a5
		move.w	(sp)+,d0
		sub.w	d0,boss_power		;Power down ?
		bpl	.no_power
.check_mouth:
		tst.w	O_PHA
		bne	.no_power		;Open ?
		cmp.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
		bne	.no_power
			st	no_time
			bsr	Init_Diamondcount
			move.l	#handle_boss2,Bob_Routine(a4)
			move.b	#BOB_NOCOL,Bob_Used(a4)
			move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
			move.b	#140,Eshot(a4)
			clr.w	Etdelay(a4)
			clr.w	Bob_Hit(a4)
;			move.w	#2,O_PHA(a5)	;Setup destruction-phase
			move.w	#BOSSX+224,d0
			move.w	#BOSSY+16,d1
			bsr	Calc_Adress
			move.l	#$ffffffff,bltafwm(a5)
	move.l	d4,d5
	add.l	#GameBpl0,d5
	bsr.s	.do_one
	move.l	d4,d5
	add.l	#GameBpl1,d5
	bsr.s	.do_one
	move.l	d4,d5
	add.l	#GameBpl2,d5

.do_one:
			move.w	#$0100,bltcon0(a5)
			move.w	#planeb-4,bltdmod(a5)
			move.l	d5,bltdpth(a5)
			move.w	#64*3*32+2,bltsize(a5)
			waitblt

			addq.l	#4,d5
			move.w	#0,bltamod(a5)
			move.w	#planeb-4,bltdmod(a5)
			move.w	#$09f0,bltcon0(a5)
			move.l	d5,bltdpth(a5)
			move.l	#Boss2_GFX,bltapth(a5)
			move.w	#64*3*32+2,bltsize(a5)
			waitblt
			add.l	#32*3*planeb-2,d5
			move.l	d5,bltdpth(a5)
			move.l	#Boss2_GFX+$180,bltapth(a5)
			move.w	#planeb-10,bltdmod(a5)
			move.w	#64*3*32+5,bltsize(a5)
			waitblt

			subq.l	#2,d5
			move.l	d5,bltdpth(a5)
			move.w	#$0100,bltcon0(a5)
			move.w	#planeb-2,bltdmod(a5)
			move.w	#64*3*62+1,bltsize(a5)
			waitblt

			add.l	#32*3*planeb+2,d5
			move.l	d5,bltdpth(a5)
			move.w	#planeb-10,bltdmod(a5)
			move.w	#64*3*32+5,bltsize(a5)
			waitblt

			sub.l	#224*3*planeb,d5
			move.l	d5,bltdpth(a5)
			move.w	#planeb-6,bltdmod(a5)
			move.w	#64*3*8+3,bltsize(a5)
			waitblt

			rts

.no_power:
	tst.b	flash_count
	bne.s	.no_col0
	clr.w	Main_Clist+18
	clr.w	coltab+10
.no_col0:
	clr.w	B_coltab+10
	tst.w	boss_power
	bmi.s	.no_hit

	tst.w	Bob_Hit(a4)
	beq.s	.no_hit
	subq.w	#1,Bob_Hit(a4)
	move.w	#$fff,Main_Clist+18
	move.w	#$fff,coltab+10
	move.w	#$fff,B_coltab+10
.no_hit:
	tst.w	boss_power
	bpl.s	.ok
	tst.w	O_PHA
	bne.s	.close
.ok:
	subq.w	#1,Etdelay(a4)			;New mouth-phase ?
	bpl.s	.no_anim
.close:
	tst.b	smart_bomb			;Nichts machen, solange Smartbomb aktiv!
	bne.s	.no_anim
		move.w	#140,Etdelay(a4)	;Reset delay
		eori.w	#1,O_PHA		;New phase
		bsr	Get_Next_Bob_Frame
.no_anim:
	cmpi.w	#80,Etdelay(a4)			;Mouth delay down enough ?
	bne	exit_boss
		tst.w	O_PHA
		beq.s	.done			;Open ?
			moveq	#0,d0		;Start shot (one of 3 kinds)
			move.b	Eshot(a4),d0
			jsr	.shot_tab(pc,d0.w)
			bra.s	.done
.shot_tab:
			bra.w	start_bullets
			bra.w	start_roller
			bra.w	start_slime
.done:
			addq.b	#4,Eshot(a4)
			cmpi.b	#3<<2,Eshot(a4)
			bne	exit_boss
				sf	Eshot(a4)
exit_boss:
	cmpi.w	#26<<5,Etfac(a4)		;Increase tail-movement
	bge.s	exit_boss2
		addq.w	#2,Etfac(a4)
exit_boss2:
	bsr	build_tail			;Build up tabels
	bsr	Blit_Back
	tst.b	T_stand				;Player standing ?
	beq	exit_boss1

		move.w	T_posX,d0		;Calc new reset-pos.
		cmpi.w	#32,d0
		bge.s	.ok
			moveq	#32,d0
.ok:
		move.w	d0,reposX
		asr.w	#4,d0
		add.w	d0,d0
		lea	player_vpos,a0
		move.w	2(a0,d0.w),d0
		subi.w	#90,d0
		move.w	d0,reposY
		move.b	T_face,repos_face
exit_boss1:
	rts

Blit_Back:
	tst.w	boss_power
	bmi	.ok
	move.l	Bob_Graphics(a4),d0
	cmp.l	old_GFX,d0
	beq	.out
	move.l	d0,old_GFX
	move.w	#BOSSX+224,d0
	move.w	#BOSSY+48,d1
	bsr	Calc_Adress
	add.l	#GameBpl2,d4

	move.l	d4,bltdpth(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#planeb-12,bltdmod(a5)
	move.w	#0,bltamod(a5)
	move.l	Bob_Graphics(a4),bltapth(a5)

	move.w	#64*3*64+6,bltsize(a5)
	waitblt

	move.w	#BOSSX+224,d0
	move.w	#BOSSY+48+64,d1
	bsr	Calc_Adress
	add.l	#GameBpl2,d4

	move.l	d4,bltdpth(a5)
	move.l	Bob_Graphics(a4),d0
	add.l	#64*12*3,d0
	move.l	d0,bltapth(a5)

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


	move.w	#3,old_Verz
	move.b	#1<<BOB_URGENT,Bob_BlitStatus(a4)
.out:
	tst.w	old_Verz
	beq.s	.ok
	subq.w	#1,old_Verz
	bne.s	.ok
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
.ok:
	rts

old_Verz:	dc.w	0
old_GFX:	dc.l	0

O_PHA:	dc.w	0

handle_boss2:					;Boss is exploding
	cmpi.b	#120,Eshot(a4)
	bhs.s	.no_count
		bsr	Count_Diamonds
.no_count:
	tst.w	Etfac(a4)
	beq.s	.tailok
		subi.w	#1<<4,Etfac(a4)
		bpl.s	.tailok
			clr.w	Etfac(a4)
.tailok:
	subq.w	#1,Etdelay(a4)
	bpl	.no_explo
		addq.w	#3,Etdelay(a4)

		move.l	a4,-(sp)

		bsr	rnd
		andi.w	#63,d0
		addi.w	#BOSSX+224,d0
		move.w	d0,d1
		bsr	rnd
		andi.w	#127,d0
		addi.w	#BOSSY+16,d0
		move.w	d0,d2
		lea	Area_Enter_Vector(pc),a1
		moveq	#1,d0
		bsr	Search_Last_Entry
		move.l	(sp)+,a4
		btst	#0,Eshot(a4)
		bne.s	.no_sound
		bsr	Play_Expl
.no_sound:
		subq.b	#1,Eshot(a4)
		bne.s	.no_explo
			move.l	#handle_boss3,Bob_Routine(a4)
			move.l	#$11000,d0
			jsr	add_score

.no_explo:
	bra	exit_boss2

handle_boss3:					;Diamonds are counted...
	jsr	Count_Diamonds
	bne	exit_boss2
	tst.w	Cue_Point
	bmi	exit_boss2
			SONGPLAY #5
			move.b	#100,VBI_count
	move.w	#-1,Cue_Point
	bra	exit_boss2

start_bullets:
	cmpi.w	#16<<5,Etfac(a4)
	ble.s	.tail_is_low
	cmpi.w	#120,T_posX		;Start 8 bullets out of the mouth
	bgt.s	.tail_is_low
		moveq	#95,d6
	bra.s	.not_low
.tail_is_low:
		moveq	#80,d6
.not_low:
	moveq	#6,d7
.loop:
		move.w	d7,-(sp)
		move.w	d6,d0
		bsr	cos
		move.w	d0,d2
		move.w	d6,d0
		bsr	sin
		move.w	d0,d3
		move.w	#BOSSX+256-14,d0
		move.w	#BOSSY+82-16,d1
		asr.w	#1,d2
		asr.w	#1,d3
		bsr	Start_Shoot
		addq.w	#4,d6
		move.w	(sp)+,d7
	dbf	d7,.loop
	PLAY_FX	#$2f
	rts

	rsset	Bob_Special_1
Rrylow	rs.w	1
Rrxdir	rs.w	1
Rrydir	rs.l	1
Rangle	rs.b	1
Rrtimes	rs.b	1

start_roller:					;Start one roller-object
	move.l	a4,-(sp)
	PLAY_FX	#$2f
	lea	Area_Enter_Vector(pc),a1
	moveq	#14,d0
	move.w	#BOSSX+240-14,d1
	move.w	#BOSSY+76-16,d2
	bsr	Search_Last_Entry
	move.l	#handle_roll,Bob_Routine(a4)

	clr.w	Rrylow(a4)
	move.w	#-2,Rrxdir(a4)
	clr.l	Rrydir(a4)
	sf	Rangle(a4)
	sf	Rrtimes(a4)
	move.b	#30,Bob_Power(a4)
	moveq	#0,d0
	move.b	T_power.w,d0
	addq.b	#1,d0
	asl.b	#3,d0
	add.b	d0,Bob_Power(a4)
	move.l	(sp)+,a4
	rts

	rsset	Bob_Special_1
Sbshot	rs.b	1
Sbanz	rs.b	1

start_slime:					;Start slime-start-handler
	PLAY_FX	#$39
	move.l	a4,-(sp)
	lea	Area_Enter_Vector(pc),a1
	moveq	#13,d0

	move.w	#BOSSX+240-14,d1
	move.w	#BOSSY+76-16,d2

	bsr	Search_Bob_Entry
	move.l	#handle_slimes,Bob_Routine(a4)
	sf	Sbshot(a4)
	sf	Sbanz(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.l	(sp)+,a4
	rts

	rsset	Bob_Special_1
Sbxdir	rs.l	1
Sbydir	rs.l	1
Sxlow	rs.w	1
Sylow	rs.w	1
Swait	rs.b	1
Snocheck	rs.b	1

handle_slimes:
	tst.w	boss_power
	bmi	Out_Bob_Damage
	subq.b	#1,Sbshot(a4)			;One ball every 4 frames
	bpl	.no_start
		addq.b	#6,Sbshot(a4)
		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
		move.l	a4,-(sp)
		bsr	Search_Last_Entry		;Add slime-object
		move.l	#Ball,Bob_Routine(a4)
		move.w	#2,Bob_Power(a4)
		sf	Swait(a4)
		st	Snocheck(a4)
		bsr	rnd
		andi.w	#3,d0
		subq.w	#6,d0
		move.w	d0,Sbxdir(a4)
		clr.w	Sbxdir+2(a4)
		clr.l	Sxlow(a4)
		bsr	rnd
		andi.w	#3,d0
		subq.w	#2,d0
		neg.w	d0
		move.w	d0,Sbydir(a4)
		clr.w	Sbydir+2(a4)
		PLAY_FX	#$2c
		move.l	(sp)+,a4
		addq.b	#1,Sbanz(a4)
		cmpi.b	#20,Sbanz(a4)			;Free master after 20 slime-objects
		beq	Out_Bob_Damage
.no_start:
	rts

handle_roll:
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler
	beq.s	.die
	tst.w	boss_power
	bpl.s	.boss_not_dead
.die:
		moveq	#0,d0
;			PLAY_FX	#13
		bra	Standart_Destruction
.boss_not_dead:
	movem.w	Bob_X_Position(a4),d0-d1		;Handle falling and rolling on the tail
	sub.w	Scr_X_Level_Pos(a6),d0
	sub.w	Scr_Y_Level_Pos(a6),d1
	addi.w	#12,d0
	lsr.w	#4,d0
	add.w	d0,d0
	lea	player_vpos,a0
	move.w	2(a0,d0.w),d0
	subi.w	#32+16,d0
	subq.w	#6,d1				;In the tail area ?
	cmp.w	d0,d1
	bge.s	.air
		addi.w	#12,d1
		cmp.w	d0,d1
		ble	.air
		add.w	Scr_Y_Level_Pos(a6),d0
		move.w	d0,Bob_Y_Position(a4)		;Set YPOS
		clr.w	Rrylow(a4)
		bset	#0,Bob_Status(a4)
		bne.s	.do_x
	PLAY_FX	#$33
	bra.s	.do_x
.air:		move.l	Rrydir(a4),d0		;Plain air...
		add.w	d0,Rrylow(a4)
		swap	d0
		move.w	Bob_Y_Position(a4),d1
		addx.w	d0,d1
		move.w	d1,Bob_Y_Position(a4)
		cmpi.w	#4,Rrydir(a4)		;Speed up ?
		bge.s	.do_x
			addi.l	#$00002800,Rrydir(a4)	;Yes...
.do_x:
	move.w	Rrxdir(a4),d0			;Handle x-movement
	add.w	d0,Bob_X_Position(a4)
	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	cmpi.w	#288,d0
	bls.s	.no_turn
		neg.w	Rrxdir(a4)
		addq.b	#1,Rrtimes(a4)		;Turned around 2 times ?
		cmpi.b	#3,Rrtimes(a4)
		beq	.die
.no_turn:
	tst.w	Rrxdir(a4)			;Turn in the right direction
	bpl.s	.to_left
		moveq	#3,d0
	bra.s	.to_right
.to_left:
		moveq	#-3,d0
.to_right:
	add.b	d0,Rangle(a4)

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

	rts

handle_dorn:
	bsr	calc_bosspos			;Just calc popsition
	move.w	player_vpos+2,d0
	subi.w	#196,d0
	add.w	Scr_Y_Level_Pos(a6),d0
	move.w	d0,Bob_Y_Position(a4)
	tst.w	boss_power
	bpl.s	.ok
	move.b	#BOB_NOCOL,Bob_Used(a4)
.ok:
	tst.w	Edorn_time(a4)
	bmi.s	.on
		subq.w	#1,Edorn_time(a4)
		eor.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	rts
.on:
		sf	Bob_BlitStatus(a4)

	rts

handle_hand:
	tst.w	boss_power
	bpl.s	.no_destroy
		move.b	#BOB_NOCOL,Bob_Used(a4)
		cmpi.w	#BOSSX+48,Bob_X_Position(a4)		;Hand to be moved out ?
		bgt.s	.done			;No, it's done allready
		addq.w	#1,Edelay(a4)
		andi.w	#3,Edelay(a4)		;Handle every fourth frame
		bne.s	.done
		btst	#2,Edelay+1(a4)		;Odd or even ?
		beq.s	.no_out
			subq.w	#1,Bob_X_Position(a4)	;Out again
			bra.s	.done
.no_out:
		addq.w	#2,Bob_X_Position(a4)		;Pull back
		bra.s	.done
.no_destroy:
		bsr	calc_bosspos
		subq.w	#1,Edelay(a4)		;Animate hand (random-delay)
		bpl.s	.done
			bsr	rnd
			andi.w	#$3f,d0
			addi.w	#30,d0
			move.w	d0,Edelay(a4)
			bsr	Get_Next_Bob_Frame
.done:
	rts

build_tail:
	move.w	Etfac(a4),d7			;Calc amplitude
	lsr.w	#5,d7
	move.b	Etangle(a4),d0
	bsr	sin
	asr.w	#1,d0
	addi.w	#128,d0
	muls	d7,d0
	asr.w	#8,d0
	move.w	d0,Etail(a4)			;Diese Amplitude
	addq.b	#2,Etangle(a4)

	lea	player_vpos(pc),a1		;Calc "swinging" elements
	moveq	#-99,d7
	move.w	Etail(a4),d6
	moveq	#20-1,d5
.loop:
		move.b	d7,d0
		bsr	cos
		move.w	#256,d1
		sub.w	d0,d1
		muls	d6,d1
		asr.w	#8,d1
		move.w	#192,d0
		sub.w	d1,d0
		move.w	d0,(a1)+		;Position table
		addq.b	#5,d7
	dbf	d5,.loop

	move.w	T_posX,d0			;Handle player-standing
	asr.w	#4,d0
	add.w	d0,d0
	lea	player_vpos,a0
	move.w	2(a0,d0.w),d0
	subi.w	#48,d0
	move.w	T_posY,d1
	addq.w	#4,d1
	cmp.w	d0,d1
	blt.s	.out
		move.w	d0,T_posY
		st	T_stand
.out:
	rts

blit_tail:
	bsr	Pulse_Colors
	move.l	Act_Scr_Structure,a6
	move.w	#38-2,bltamod(a5)
	move.w	#planeb-2,bltdmod(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#$ffff,bltalwm(a5)

	lea	player_vpos(pc),a0
	lea	Adress_Table(pc),a1
	lea	Tail_Buffer,a3
	moveq	#0,d0
	move.w	Tail_Pos,d0
	add.w	d0,d0
	add.l	d0,a0
	add.l	d0,a3
	add.w	d0,d0
	add.l	d0,a1
	asl.w	#2,d0
	add.w	#BOSSX+16,d0
.loop:
	move.l	(a1),d4
	bsr.s	.rest_bob
	move.w	#BOSSY-16,d1
	add.w	(a0),d1
	move.w	d0,-(sp)
	bsr	Calc_Adress
	move.w	(sp)+,d0
	move.l	d4,(a1)
	bsr	.blit_bob
	add.l	#4*4,a1
	add.l	#2*4,a0
	add.w	#16*4,d0
	add.l	#4*2,a3
	cmp.w	#BOSSX+16+18*16,d0
	blt.s	.loop

	addq.w	#1,Tail_Pos
	and.w	#3,Tail_Pos

	rts

.blit_bob:
	move.l	d4,d5
	add.l	#GameBpl0,d5
	bsr.s	.doit1
	move.l	d4,d5
	add.l	#GameBpl1,d5
	bsr.s	.doit1
	move.l	d4,d5
	add.l	#GameBpl2,d5
.doit1:
	move.w	#$09f0,bltcon0(a5)
	move.l	a3,bltapth(a5)
	move.l	d5,bltdpth(a5)
	move.w	#64*3*32+1,bltsize(a5)
	waitblt
	rts

.rest_bob:
	move.l	d4,d5
	add.l	#GameBpl0,d5
	bsr.s	.doit2
	move.l	d4,d5
	add.l	#GameBpl1,d5
	bsr.s	.doit2
	move.l	d4,d5
	add.l	#GameBpl2,d5
.doit2:
	move.w	#$0100,bltcon0(a5)
	move.l	d5,bltdpth(a5)
	move.w	#64*3*32+1,bltsize(a5)
	waitblt
	rts
	

Tail_Pos:	dc.w	0

Adress_Table:
	dcb.l	19,0

calc_bosspos:
	move.w	#BOSSX-14,d0			;Calc position
	move.w	#BOSSY-16,d1
	movem.w	d0-d1,Bob_X_Position(a4)
	rts

player_vpos:
	dcb.w	20,192

Boss5_AnimTable1:
	dc.l	Boss_GFX,0
	dc.w	224,64,72,224+20,64+12,92,40
	dc.l	Boss_GFX+EAbob01,0
	dc.w	224,64,72,224+20,64+12,92,40
	dc.w	ENTRY_END
	dc.l	Boss5_AnimTable1

Boss5_AnimTable2:		;Hand
	dc.l	Boss_GFX+EAbob03,0
	dc.w	288,140,27,0,0,0,0
	dc.l	Boss_GFX+EAbob04,0
	dc.w	288,140,31,0,0,0,0
	dc.w	ENTRY_END
	dc.l	Boss5_AnimTable2

Boss5_AnimTable3:		;Dorn
	dc.l	Boss_GFX+EAbob02,0
	dc.w	-16,135,48,0,0,0,0

EAbob00 	= $00000
EAbob01 	= $00a20
EAbob02 	= $01440
EAbob03 	= $01680
EAbob04 	= $017c4

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Boss4
*---------------------------------------------------------------------------


	rsset	Bob_Special_1	;Main
Bptr		rs.l	1
Bsdelay		rs.w	1
Bindex		rs.w	1
Bopenoff	rs.w	1
Bopencnt	rs.w	1
Bswing		rs.b	1
Bflag		rs.b	1

Start_Boss4:
;	tst.b	boss_flag
;	.if.l (zero) {
;		st	boss_flag.w		;Boss present
		st	no_time

		moveq	#4,d0
		bsr	Start_Sound_Fade
		moveq	#$27,d0
		move.b	#41,xplo_time
		bsr	Start_Effekt

		move.l	#Repos_Player_Dead,Dead_Vector

		sf	ball_flag		;No ball flying
		sf	balls_started		;No ball started

		move.l	#handle_boss,Bob_Routine(a4)
;		clr.w	O_PHA(a5)
;		move.l	#$01400040,O_XPOS(a5)
;		st	O_SHOW(a5)
		move.l	Bob_X_Position(a4),boss_xpos
;		move.l	#big_col,O_COL(a5)
;		st	O_COLEN(a5)
		clr.l	Bsdelay(a4)		;Init parameter
		sf	Bswing(a4)
		sf	Bflag(a4)

		bsr	start_balls		;Start first 8 balls

		lea	Boss4_coltab(pc),a0		;Set colours
		lea	B_coltab+2(pc),a1
		lea	coltab+2(pc),a2
		lea	Para_Clist+2(pc),a3

		moveq	#6-1,d7
.setcols:
		move.w	(a0)+,d0
		move.w	d0,(a1)+
		move.w	d0,(a2)+
		move.w	d0,(a3)
		addq.l	#4,a3
		dbf	d7,.setcols


		lea	.pow_tab(pc),a0		;Init power-variable
		bsr	Make_Power
		move.w	d0,boss_power
		move.w	#100,Bob_Power(a4)

		move.w	#120,boss_time
		sf	boss_mode

		move.l	Bob_Graphics(a4),bob_graphics

		lea	Zug_Boss_GFX+1920,a0
		move.l	#Flash_Buffer,d3
		move.w	#64*42+4,d0
		bsr	Make_Flash

		lea	Zug_Boss_GFX+1920+$3f0,a0
		move.l	#Flash_Buffer+$3f0,d3
		move.w	#64*45+4,d0
		bsr	Make_Flash

		lea	Zug_Boss_GFX+1920+$828,a0
		move.l	#Flash_Buffer+$828,d3
		move.w	#64*48+4,d0
		bsr	Make_Flash

	rts

.pow_tab:	dc.w	40,40,40
		dc.w	70,80,80
		dc.w	100,120,120

boss_time:	dc.w	0
boss_xpos:	dc.w	0
boss_ypos:	dc.w	0
boss_mode:	dc.b	0
ball_flag:	dc.b	0
balls_started:	dc.b	0
balls_killed:	dc.b	0
boss_power:	dc.w	0
bob_graphics:	dc.l	0

handle_boss:

	bsr	handle_repos1			;Handle repos

	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	cmpi.w	#200,d0				;Move boss in, if neccessary
	ble.s	.not_move_in
		subq.w	#1,Bob_X_Position(a4)
.not_move_in:
		tst.b	boss_mode		;Moved in, waiting ?
		bne.s	.not_waiting
			subq.w	#1,boss_time	;Yes, time down ?
			bpl.s	.no
			st	boss_mode	;Yes, set flag
		bra.s	.no
.not_waiting:
		bpl.s	.not_move_out
				subq.w	#3,Bob_X_Position(a4)	;Yes...
				move.w	Bob_X_Position(a4),d0
				sub.w	Scr_X_Level_Pos(a6),d0
				cmpi.w	#120,d0		;Out ?
				bgt.s	.no
				neg.b	boss_mode	;Yes, move back
		bra.s	.no
.not_move_out:
				addq.w	#1,Bob_X_Position(a4)	;Slowly back again
				move.w	Bob_X_Position(a4),d0
				sub.w	Scr_X_Level_Pos(a6),d0
				cmpi.w	#200,d0			;Back ?
				blt.s	.no
					sf	boss_mode	;Switch back to waiting...
					move.w	#200,boss_time
.no:

	cmpi.b	#2,balls_started		;Not all circles started...
	bge.s	.start_shoots
		tst.b	Bflag(a4)
		beq.s	.start_balls
			moveq	#0,d7
			bsr	handle_open
			bra.s	.start_shoots
.start_balls:
			subq.w	#1,Bsdelay(a4)
			bpl.s	.start_shoots
				bsr	rnd
				andi.w	#63,d0
				addi.w	#32,d0
				move.w	d0,Bsdelay(a4)
				st	Bflag(a4)
				clr.l	Bopenoff(a4)
.start_shoots:
	cmpi.b	#1,balls_started		;Two circles started ?
	bhs.s	.two_circles
		cmpi.b	#8,balls_killed		;No, all balls killed ?
		bne	.all_done
			bsr	start_balls	;Yes, start new circle
			addq.b	#1,balls_started
	bra	.all_done
.two_circles:
		cmpi.b	#8,balls_killed		;2nd circle killed ?
		bne	.all_done
			move.b	#2,balls_started
			moveq	#100,d0
			sub.w	Bob_Power(a4),d0			;Destroyed ?
			beq	.not_killed
				move.w	#100,Bob_Power(a4)
				sub.w	d0,boss_power		;Killed ?
				bpl.s	.not_killed
				clr.w	Bob_Hit(a4)
.not_killed:
			tst.b	Bflag(a4)
			beq.s	.lab0
				moveq	#-1,d7
				bsr	handle_open
			bra.s	.all_done
.lab0:
				subq.w	#1,Bsdelay(a4)		;Shot ?
				bpl.s	.all_done
					move.w	#90,Bsdelay(a4)	;Reset delay
					st	Bflag(a4)
					clr.l	Bopenoff(a4)
.all_done:

	subq.b	#1,Bswing(a4)				;Next swing-offset ?
	bpl	end_boss
		addq.b	#4,Bswing(a4)			;Yes, handle swinging
		addq.w	#2,Bindex(a4)
		andi.w	#14,Bindex(a4)
		move.w	Bindex(a4),d0
		move.w	swing_tab(pc,d0.w),d0
		add.w	d0,Bob_Y_Position(a4)

end_boss:
	move.l	bob_graphics,d0
			tst.w	Bob_Hit(a4)			;Hit ?
			beq.s	.no_hit
			subq.w	#1,Bob_Hit(a4)
				add.l	#Flash_Buffer-(Zug_Boss_GFX+1920),d0

			cmp.w	#FLICKER-1,Bob_Hit(a4)
			bne.s	.no_hit
				move.l	d0,-(sp)
		bsr	rnd
		and.w	#3,d0
		cmp.w	#3,d0
		blt.s	.do_sound
		moveq	#0,d0
.do_sound:
		bsr	Do_FX
				move.l	(sp)+,d0

.no_hit:
	move.l	d0,Bob_Graphics(a4)
				tst.w	boss_power
				bpl.s	.not_killed
					st	no_time
					move.l	#handle_expl,Bob_Routine(a4)
					clr.w	Bsdelay(a4)
					move.w	#60,Bindex(a4)
					move.b	#BOB_NOCOL,Bob_Used(a4)
.not_killed:
	move.l	Bob_X_Position(a4),boss_xpos
	add.w	#32,boss_xpos
	rts

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

open_tab:
	dc.w	0,22,44,22,0,-1

handle_open:
	subq.w	#1,Bopencnt(a4)
	bpl.s	.out
		addq.w	#6,Bopencnt(a4)
		move.w	Bopenoff(a4),d1
		moveq	#0,d0
		move.w	open_tab(pc,d1.w),d0
		add.l	#Boss_AnimTable1,d0
		move.l	d0,Bob_Next_Anim(a4)
		bsr	Get_Next_Bob_Frame
		move.l	Bob_Graphics(a4),bob_graphics
		move.w	Bopenoff(a4),d1
		move.w	open_tab+2(pc,d1.w),d0
		spl	Bflag(a4)
		bmi.s	.out
			addq.w	#2,Bopenoff(a4)
			cmpi.w	#6,Bopenoff(a4)
			bne.s	.out
				tst.w	d7
				beq.s	.out
					bsr	start_shot
.out:
	rts

handle_expl:					;Handle exploding boss
	subq.w	#1,Bsdelay(a4)			;Next explosion ?
	bpl	.out
		addq.w	#3,Bsdelay(a4)		;Yes, reset delay
		move.l	a4,-(sp)
		moveq	#1,d0
		lea	Area_Enter_Vector(pc),a1
		bsr	Search_Last_Entry	;Add explosion
		move.l	a4,a0
		move.l	(sp)+,a4
		move.l	Bob_X_Position(a4),Bob_X_Position(a0)	;Set random coordinate
		subi.w	#16,Bob_X_Position(a0)
		subi.w	#48,Bob_Y_Position(a0)
		bsr	rnd
		andi.w	#63,d0
		add.w	d0,Bob_X_Position(a0)
		bsr	rnd
		andi.w	#63,d0
		add.w	d0,Bob_Y_Position(a0)
		btst	#0,Bindex+1(a4)
		bne.s	.no_sound
		bsr	Play_Expl
.no_sound:
		subq.w	#1,Bindex(a4)		;All explosions done ?
		bpl.s	.out
			move.l	#$9010,d0	;Add score etc. & add diamonds
			jsr	add_score
			move.w	#-1,Cue_Point
			SONGPLAY #5
			move.b	#100,VBI_count

			bra	Out_Bob_Damage
.out:
	rts

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

	rsset	Bob_Special_1
BSdelay	rs.w	1
Bsydir	rs.l	1
Bsylow	rs.w	1
Bsxdir	rs.w	1

start_shot:
				PLAY_FX	#$39
	move.l	a4,-(sp)
	lea	Area_Enter_Vector(pc),a1
	moveq	#2,d0
	bsr	Search_Last_Entry
	move.l	#Boss_AnimTable3,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	move.l	a4,a0
	move.l	(sp)+,a4
	move.l	Bob_X_Position(a4),Bob_X_Position(a0)		;Set position
	addi.w	#32,Bob_X_Position(a0)
	addq.w	#8,Bob_Y_Position(a0)
	move.l	#handle_Bshot,Bob_Routine(a0)
;	move.l	#shot_spr,O_INFO(a0)
;	clr.w	O_PHA(a0)
;	st	O_SHOW(a0)
;	move.l	#shot_col,O_COL(a0)
;	st	O_COLEN(a0)
	clr.w	BSdelay(a0)
	clr.w	Bsylow(a0)

	move.w	#-2,Bob_Power(a0)

	move.w	T_posX,d0			;Calc DX & DY
	add.w	Scr_X_Level_Pos(a6),d0
	sub.w	Bob_X_Position(a4),d0
	subi.w	#16,d0
	bpl.s	.to_right
		neg.w	d0
		moveq	#-2,d1
	bra.s	.set
.to_right:
	bne.s	.down
		moveq	#1,d0
	bra.s	.set
.down:
		moveq	#2,d1
.set:
	move.w	d1,Bsxdir(a0)
	move.w	T_posY,d1
	add.w	Scr_Y_Level_Pos(a6),d1
	addi.w	#24,d1
	sub.w	Bob_Y_Position(a4),d1
	ext.l	d1
	asl.l	#8,d1
	divs	d0,d1
	cmpi.w	#2<<8,d1
	ble.s	.lab1
		move.w	#1<<8,d1
.lab1:
	ext.l	d1
	asl.l	#8,d1
	add.l	d1,d1
	move.l	d1,Bsydir(a0)

	rts

handle_Bshot:
	move.w	Bsxdir(a4),d0			;X-Movement
	add.w	d0,Bob_X_Position(a4)

	move.l	Bsydir(a4),d0			;Y-Movement
	add.w	d0,Bsylow(a4)
	swap	d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)

	subq.w	#1,BSdelay(a4)			;Next anim ?
	bpl.s	.ok
		addq.w	#4,BSdelay(a4)		;Yes, reset delay
		bsr	Get_Next_Bob_Frame
.ok:
	bra	Test_Bob_Out

Boss_AnimTable1:
	dc.l	Zug_Boss_GFX+1920,0
	dc.w	0,-24,42,2,-22,32,48
	dc.l	Zug_Boss_GFX+1920+$3f0,0
	dc.w	0,-24,45,2,-22,32,48
	dc.l	Zug_Boss_GFX+1920+$828,0
	dc.w	0,-24,48,2,-22,32,48

Boss_AnimTable2:
	dc.l	Zug_Boss_GFX+ZBbob00,Zug_Boss_GFX+ZBmsk00
	dc.w	-16,-16,32,-14,-14,28,28
	dc.l	Zug_Boss_GFX+ZBbob01,Zug_Boss_GFX+ZBmsk01
	dc.w	-16,-16,32,-14,-14,28,28
	dc.l	Zug_Boss_GFX+ZBbob02,Zug_Boss_GFX+ZBmsk02
	dc.w	-16,-16,32,-14,-14,28,28
	dc.w	ENTRY_END
	dc.l	Boss_AnimTable2

Boss_AnimTable3:
	dc.l	Zug_Boss_GFX+ZBbob03,Zug_Boss_GFX+ZBmsk03
	dc.w	-8,-8,16,-6,-6,12,12
	dc.l	Zug_Boss_GFX+ZBbob04,Zug_Boss_GFX+ZBmsk04
	dc.w	-8,-8,16,-6,-6,12,12
	dc.l	Zug_Boss_GFX+ZBbob05,Zug_Boss_GFX+ZBmsk05
	dc.w	-8,-8,16,-6,-6,12,12
	dc.w	ENTRY_END
	dc.l	Boss_AnimTable3

ZBbob00	= $00000
ZBmsk00	= $00180
ZBbob01	= $00200
ZBmsk01	= $00380
ZBbob02	= $00400
ZBmsk02	= $00580
ZBbob03	= $00600
ZBmsk03	= $00660
ZBbob04	= $00680
ZBmsk04	= $006e0
ZBbob05	= $00700
ZBmsk05	= $00760

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

	rsset	Bob_Special_1
Bradius	rs.w	1
Bbxlow	rs.b	1
Bbylow	rs.b	1
Bbxdir	rs.w	1
Bbydir	rs.w	1
Bangle	rs.b	1
Bbdelay	rs.b	1
Bbflag	rs.b	1

start_balls:					;Start new ball-circle
	sf	balls_killed			;No balls killed
	moveq	#0,d6
	moveq	#7,d7				;Start 8 balls
.loop0:
		lea	Area_Enter_Vector(pc),a1
		moveq	#1,d0
		movem.l	d6/d7/a4,-(sp)
		bsr	Search_Last_Entry	;Add object (behind face)
		move.l	#Boss_AnimTable2,Bob_Next_Anim(a4)
		bsr	Get_Next_Bob_Frame
		move.l	a4,a0
		movem.l	(sp)+,d6/d7/a4
		move.l	#handle_ball,Bob_Routine(a0)
;		move.l	#ball_spr,O_INFO(a0)
;		move.w	#2,O_PHA(a0)
;		st	O_SHOW(a0)
;		move.l	#ball_col,O_COL(a0)
;		st	O_COLEN(a0)
		move.b	d6,Bangle(a0)		;Set angle & radius
		clr.w	Bradius(a0)
		sf	Bbdelay(a0)
		move.b	#45,Bbflag(a0)
		move.l	boss_xpos,Bob_X_Position(a0)	;Set 1st position
		move.w	#10,Bob_Power(a0)
		addi.w	#32,d6
	dbf	d7,.loop0
	rts

handle_ball:
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler

	cmpi.w	#45,Bradius(a4)			;Radius enlarged ?
	bhs.s	.large_enough
		addq.w	#2,Bradius(a4)		;No, do it...
.large_enough:
	subq.b	#2,Bangle(a4)			;Move around circle

	subq.b	#1,Bbdelay(a4)			;Handle animation of ball
	bpl.s	.no_anim
		addq.b	#8,Bbdelay(a4)
		bsr	Get_Next_Bob_Frame
.no_anim:
	move.b	Bangle(a4),d0			;Calc current position
	bsr	sin
	move.w	d0,d2
	move.b	Bangle(a4),d0
	bsr	cos
	muls	Bradius(a4),d0
	muls	Bradius(a4),d2
	asr.l	#8,d0
	asr.l	#8,d2
	add.w	boss_xpos,d0
	add.w	boss_ypos,d2
	movem.w	d0/d2,Bob_X_Position(a4)

	cmpi.b	#180,Bangle(a4)			;Exit-Angle reached ?
	bne	.not_exit
		tst.b	ball_flag		;Ball currently exiting ?
		bne	.not_exit
			tst.w	Bob_Power(a4)		;Destroyed ?
			bne	.not_exit
				move.l	#handle_ball1,Bob_Routine(a4)	;Yes, exit circle
				sf	Bbxlow(a4)
				sf	Bbylow(a4)
				move.w	#-2<<8,Bbxdir(a4)	;Calc DX & DY
				move.w	#16,Bob_Power(a4)
				move.w	T_posY,d0
				add.w	Scr_Y_Level_Pos(a6),d0
				addi.w	#24,d0
				sub.w	Bob_Y_Position(a4),d0
				ext.l	d0
				move.w	Bob_X_Position(a4),d1
				sub.w	Scr_X_Level_Pos(a6),d1
				sub.w	T_posX,d1
				subi.w	#16,d1
				bpl.s	.ok
					neg.w	d1
.ok:
				bne.s	.ok2
					moveq	#20,d1
.ok2:
				asl.l	#8,d0
				divu	d1,d0
				cmpi.w	#1<<8,d0
				bls.s	.ok3
					move.w	#1<<8,d0
.ok3:
				add.w	d0,d0
				move.w	d0,Bbydir(a4)
				st	ball_flag	;Set ball-exit-flag
				PLAY_FX	#$36
.not_exit:
	rts

handle_ball1:				;Ball is flying out

	tst.b	Bbflag(a4)
	bmi.s	.no_fly
		subq.b	#1,Bbflag(a4)
		btst	#0,Bbflag(a4)
		bne.s	.sub
			addq.w	#2,Bob_X_Position(a4)
			addq.w	#2,Bob_Y_Position(a4)
		bra.s	.no_fly
.sub:
			subq.w	#2,Bob_X_Position(a4)
			subq.w	#2,Bob_Y_Position(a4)
.no_fly:
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler
	beq	.destruct

	subq.b	#1,Bbdelay(a4)			;Handle animation of ball
	bpl.s	.no_anim
		addq.b	#8,Bbdelay(a4)

	bsr	Get_Next_Bob_Frame
.no_anim:
	movem.w	Bob_X_Position(a4),d0-d1	;Floor hit ?
	addi.w	#12,d1
	bsr	check_obj_kollision
	beq.s	.no_kolli
		sf	ball_flag
		addq.b	#1,balls_killed		;reset ball-exit-flag
		subi.w	#16,Bob_X_Position(a4)
		subi.w	#16,Bob_Y_Position(a4)
		bra	Standart_Destruction
.no_kolli:

	move.b	Bbxdir+1(a4),d0		;X-Movement
	add.b	d0,Bbxlow(a4)
	move.b	Bbxdir(a4),d0
	ext.w	d0
	move.w	Bob_X_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_X_Position(a4)

	move.b	Bbydir+1(a4),d0		;Y-Movement
	add.b	d0,Bbylow(a4)
	move.b	Bbydir(a4),d0
	ext.w	d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)

	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.out
.free_ball:
	sf	ball_flag		;Free object, count killed balls &
	addq.b	#1,balls_killed		;reset ball-exit-flag
.out:
	rts

.destruct:
	bsr	.free_ball
	moveq	#0,d0
	bra	Standart_Destruction

show_expl:
;	pea	(a5)
;	jsr	add_object.w
;	move.l	O_XPOS(a5),O_XPOS(a0)
;	tst.b	O_HIT(a5)
;	.if (minus) {
;		moveq	#-32,d0
;	} .else {
;		moveq	#0,d0
;	}
;	add.w	d0,O_XPOS(a0)
;	move.l	a0,a5
;	jsr	rnd.w
;	andi.w	#15,d0
;	subq.w	#7,d0
;	add.w	d0,O_YPOS(a5)
;	jsr	make_expl.w
;	move.l	(sp)+,a5
;	rts

Make_Flash:
	waitblt
	move.l	d3,bltdpth(a5)
	move.l	a0,bltapth(a5)
	moveq	#0,d1
	move.w	d0,d1
	and.w	#63,d1
	add.w	d1,d1
	move.w	d1,d2
	add.w	d2,d2			;Zwei Planes berspringen!
	move.w	d2,bltamod(a5)
	move.w	d2,bltbmod(a5)
	move.w	d2,bltcmod(a5)
	move.w	d2,bltdmod(a5)
	add.l	d1,a0
	move.l	a0,bltbpth(a5)
	add.l	d1,a0
	move.l	a0,bltcpth(a5)

	move.w	#$ffff,bltalwm(a5)
	move.w	#$0ffe,bltcon0(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	d0,bltsize(a5)		;Maske wird berechnet!
	waitblt
	move.w	#$09f0,bltcon0(a5)
	move.l	d3,bltapth(a5)
	add.l	d1,d3
	move.l	d3,bltdpth(a5)
	move.w	d0,bltsize(a5)
	waitblt
	move.l	d3,bltapth(a5)
	add.l	d1,d3
	move.l	d3,bltdpth(a5)
	move.w	d0,bltsize(a5)
	waitblt
	rts

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Wall
*---------------------------------------------------------------------------

	rsset	Bob_Special_1
Wxspeed	rs.l	1
Wlowx	rs.w	1
Wptr	rs.l	1
Wflag	rs.b	1

Start_Swall:
	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0

	cmpi.w	#304,d0				;Appearing ON screen ?
	bge.s	.no_check
		cmpi.w	#-32,d0
		bgt	Out_Bob
.no_check:

	move.l	a4,-(sp)

	move.l	Bob_X_Position(a4),d6			;Transform master into slave
;	move.w	#3,O_PHA(a5)
;	move.l	#swall_spr,O_INFO(a5)
;	st	O_SHOW(a5)

	lea	speed_tab(pc),a0
	move.l	(a0)+,Wxspeed(a4)
	move.w	(a0)+,d0
	add.w	d0,Bob_X_Position(a4)
	clr.w	Wlowx(a4)
	move.l	#handle_slave,Bob_Routine(a4)
	moveq	#2,d7				;Allocate new master and slaves
	move.l	#Wall_AnimTable,d5
.loop:
		moveq	#22,d0
		lea	Area_Enter_Vector(pc),a1
		movem.l	d5-d7/a0,-(sp)
		bsr	Search_Last_Entry
		movem.l	(sp)+,d5-d7/a0
;		move.w	d7,O_PHA(a0)
		move.l	#handle_slave,Bob_Routine(a4)
;		move.l	#swall_spr,O_INFO(a0)
;		st	O_SHOW(a0)
		move.l	(a0)+,Wxspeed(a4)
		clr.w	Wlowx(a4)
		move.l	d6,Bob_X_Position(a4)
		move.w	(a0)+,d0
		add.w	d0,Bob_X_Position(a4)
		move.l	d5,Bob_Next_Anim(a4)
		bsr	Get_Next_Bob_Frame
		add.l	#22,d5
	dbf	d7,.loop

;	move.l	O_LEVPTR(a5),O_LEVPTR(a0)
;	move.b	O_STAT(a5),O_STAT(a0)
	sf	Wflag(a4)			;Init new master (biggest object)
	move.l	#handle_swall,Bob_Routine(a4)
;	move.l	#swall_col,O_COL(a0)
;	move.b	#1,O_COLEN(a0)

	move.l	a4,a0
	move.l	(sp)+,a4

	move.l	Bob_Entry_Adress(a4),Bob_Entry_Adress(a0)
	move.l	d5,Bob_Next_Anim(a4)
	bra	Get_Next_Bob_Frame

handle_swall:
	move.b	#BOB_NOPLHURT,Bob_Used(a4)

	move.w	Wxspeed+2(a4),d0			;Move master
	sub.w	d0,Wlowx(a4)
	move.w	Wxspeed(a4),d0
	moveq	#0,d1
	subx.w	d0,d1
	add.w	d1,Bob_X_Position(a4)

	tst.b	Wflag(a4)			;Move player if standing on master
	beq.s	.not_standing
	add.w	d1,T_posX

.not_standing:
	sf	Wflag(a4)			;Check if player is standing on master

		movem.w	Bob_X_Position(a4),d0-d1
		addq.w	#4,d0
		move.w	d0,d2
		add.w	#32,d2
		bsr	check_foot_frame
		beq.s	.ok
			st	Wflag(a4)
			st	T_stand
			move.w	Bob_Y_Position(a4),d1
			bsr	alias_feet
.ok:
	bra	Test_Bob_Out

handle_slave:
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.w	Bob_X_Position(a4),d0			;Out of screen ?
	sub.w	Scr_X_Level_Pos(a6),d0
	cmp.w	#-64,d0
	blt	Out_Bob_Damage

	move.w	Wxspeed+2(a4),d0			;Move slave-object
	sub.w	d0,Wlowx(a4)
	move.w	Wxspeed(a4),d0
	move.w	Bob_X_Position(a4),d1
	subx.w	d0,d1
	move.w	d1,Bob_X_Position(a4)
	rts

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

speed_tab:
	dc.l	$00020000		;Small
	dc.w	4
	dc.l	$00027800		;Big
	dc.w	48
	dc.l	$00025000
	dc.w	36
	dc.l	$00022800
	dc.w    20

Wall_AnimTable:
		dc.l	Zug_GFX+Zbob00,Zug_GFX+Zmsk00
		dc.w	0,0,32,2,16,28,12

		dc.l	Zug_GFX+Zbob01,Zug_GFX+Zmsk01
		dc.w	0,1,29,2,16,28,12

		dc.l	Zug_GFX+Zbob02,Zug_GFX+Zmsk02
		dc.w	0,4,24,2,16,28,12

		dc.l	Zug_GFX+Zbob03,Zug_GFX+Zmsk03
		dc.w	0,8,16,2,16,28,12

Zbob00 	= $00000
Zmsk00 	= $00180
Zbob01 	= $00200
Zmsk01 	= $0035c
Zbob02 	= $003d0
Zmsk02 	= $004f0
Zbob03 	= $00550
Zmsk03 	= $00610

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Flame
*---------------------------------------------------------------------------
Flame_Start:
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.b	#20,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	#20,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	#21,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
	tst.w	d7
	bmi.s	.no_flicker			;Kein Eintrag mehr frei!

	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)

.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)		;Abbrechen!
.no_shrink:
	subq.b	#1,Bob_Special_2(a4)
	bne.s	.out
	move.b	#180,Bob_Special_2(a4)		;Wartezeit
	subq.b	#1,Bob_Special_2+1(a4)
	bne.s	.stop_sound
	move.b	#30,Bob_Special_2(a4)		;Brennzeit

	bset.b	#0,flame_sound
	bne.s	.out
	moveq	#$2a,d0
	move.b	d0,global_startsound
	bsr	Do_FX
	move.b	#$2b,global_stopsound
.out:
	bsr	Test_Bob_Out2
	tst.b	Bob_Used(a4)
	bpl.s	.end
.stop_sound:
	bclr.b	#0,flame_sound
	beq.s	.end
	PLAY_FX	#$2b
	sf	global_startsound
.end:
	rts

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	main2_GFX+Cbob04,main2_GFX+Cmsk04
		dc.w	0,0,32,2,2,28,28
		dc.l	main2_GFX+Cbob05,main2_GFX+Cmsk05
		dc.w	0,0,32,2,2,28,28
		dc.l	main2_GFX+Cbob06,main2_GFX+Cmsk06
		dc.w	0,0,31,2,2,28,29
		dc.l	main2_GFX+Cbob07,main2_GFX+Cmsk07
		dc.w	0,0,27,2,2,28,25
		dc.w	ENTRY_END
		dc.l	Flame_AnimTable

Smoke_AnimTable:
		dc.l	main2_GFX+Cbob12,main2_GFX+Cmsk12
		dc.w	0,1,13,0,0,0,0
		dc.l	main2_GFX+Cbob13,main2_GFX+Cmsk13
		dc.w	0,1,13,0,0,0,0
		dc.l	main2_GFX+Cbob14,main2_GFX+Cmsk14
		dc.w	0,1,12,0,0,0,0
		dc.l	main2_GFX+Cbob15,main2_GFX+Cmsk15
		dc.w	0,0,13,0,0,0,0
		dc.w	ENTRY_END
		dc.l	Smoke_AnimTable

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

	rsset	Bob_Special_1
Fbxdir	rs.l	1
Fbydir	rs.l	1
Fdelay	rs.w	1
Fxlow	rs.w	1
Fylow	rs.w	1

;flag	rs.b	1
;wing	rs.b	1

Start_Flyer:					;Init main-object
	tst.w	Flyer_active
	bne	Out_Bob
	addq.w	#1,Flyer_active

	moveq	#15,d0
;	add.b	pl_power.w,d0
;	add.b	pl_power.w,d0
	move.w	d0,Bob_Power(a4)

;	jsr	add_object.w			;Add 2nd half of body
;	move.l	#big_slave,O_HANDLE(a0)
;	move.l	O_INFO(a5),O_INFO(a0)
;	move.l	O_XPOS(a5),O_XPOS(a0)
;	move.w	#1,O_PHA(a0)
;	st	O_SHOW(a0)
;	sf	flag(a0)
;	move.l	a0,ptr(a5)

	clr.w	Fxlow(a4)			;Set variables in both objects
	clr.w	Fylow(a4)
	clr.l	Fbxdir(a4)
	clr.l	Fbydir(a4)
	move.w	#60,Fdelay(a4)			;1 sec to first shot

;	move.l	a0,a4				;Wings...
;	jsr	add_objectlast.w
;	move.l	a0,ptr(a4)
;	move.l	#handle_wing,O_HANDLE(a0)
;	move.l	O_INFO(a5),O_INFO(a0)
;	move.l	O_XPOS(a5),O_XPOS(a0)
;	move.w	#2,O_PHA(a0)
;	st	O_SHOW(a0)
;	sf	flag(a0)
;	sf	wing(a0)
;	move.l	a0,a4
;	jsr	add_objectlast.w
;	move.l	a0,ptr(a4)
;	move.l	#handle_wing,O_HANDLE(a0)
;	move.l	O_INFO(a5),O_INFO(a0)
;	move.l	O_XPOS(a5),O_XPOS(a0)
;	move.w	#4,O_PHA(a0)
;	st	O_SHOW(a0)
;	sf	flag(a0)
;	sf	wing(a0)
	move.l	#Flyer,Bob_Routine(a4)


	move.l	Act_Bob_Structure,a0
	move.l	a4,a1
	move.w	#BOB_ENTRY_LENGTH-1,d7
.copy:
	move.b	(a0),d0
	move.b	(a1),(a0)+
	move.b	d0,(a1)+
	dbf	d7,.copy

	move.l	Act_Bob_Structure,a0

	moveq	#0,d0
	move.w	Bob_to_Info_Offs(a4),d0		;Info-Adress des Alten Eintrags!
	add.l	a0,d0
	sub.l	a4,d0
	move.w	d0,Bob_to_Info_Offs(a4)

	moveq	#0,d0
	move.w	Bob_to_Info_Offs(a0),d0		;Info-Adress meines Eintrags!
	add.l	a4,d0
	sub.l	a0,d0
	move.w	d0,Bob_to_Info_Offs(a0)

	rts

Flyer:
	tst.w	Bob_Hit(a4)
	beq.s	.no_hit
	subq.w	#1,Bob_Hit(a4)
	bne.s	.no_hit

.no_hit:
	tst.w	Bob_Power(a4)			;Destroyed ?
	bne.s	.not_destroyed
		move.l	#$170,d0		;Yes, 100 Points
		jsr	add_score
;		PLAY_FX	#13
		add.w	#40,Bob_X_Position(a4)
		add.w	#30,Bob_Y_Position(a4)
		clr.w	Flyer_active
		bra	Standart_Destruction
.not_destroyed:

;	tst.b	O_HIT(a5)			;Hit ?
;	.if (not zero) {			;Yes,...
;		sf	O_HIT(a5)
;		move.b	#4,O_FLIC(a5)
;		move.l	ptr(a5),a0
;		move.b	#4,O_FLIC(a0)
;		PLAY_HIT #10
;	}

	move.l	Fbxdir(a4),d1			;Calc new xdir...
	move.w	Bob_X_Position(a4),d0
	addi.w	#32,d0
	sub.w	Scr_X_Level_Pos(a6),d0
	cmp.w	T_posX,d0			;Where is the player ?
	blt.s	.is_right
		cmpi.l	#-2<<16,d1
		ble.s	.no
		subi.l	#$00000800,d1
		bra.s	.no
.is_right:
		cmpi.l	#2<<16,d1
		bge.s	.no
		addi.l	#$00000800,d1
.no:
	move.l	d1,Fbxdir(a4)

	move.l	Fbydir(a4),d1			;Calc new ydir...
	move.w	Bob_Y_Position(a4),d0
	addi.w	#64,d0
	sub.w	Scr_Y_Level_Pos(a6),d0

	cmp.w	T_posY,d0			;Where is the player ?
	ble.s	.is_down
		cmpi.l	#-2<<16,d1
		ble.s	.no1
		subi.l	#$00001800,d1
		bra.s	.no1
.is_down:
		cmpi.l	#2<<16,d1
		bge.s	.no1
		addi.l	#$00001800,d1
.no1:
	move.l	d1,Fbydir(a4)

	movem.w	Bob_X_Position(a4),d0-d1	;Any walls that hinder side-movement ?
	sub.w	#8,d0
	tst.w	Fbxdir(a4)
	bmi.s	.to_left
		addi.w	#96+16,d0
.to_left:
	moveq	#4,d7

.check_lr:
		movem.w	d0-d1,-(sp)
		bsr	flyer_check_kollision
		movem.w	(sp)+,d0-d1
		bne.s	.wall_found
		add.w	#16,d1
	dbf	d7,.check_lr

	bra.s	.no_wall
.wall_found:
	clr.l	Fbxdir(a4)			;Yes, stop alien
.no_wall:
	movem.w	Bob_X_Position(a4),d0-d1	;Any floor etc. that hinders
	sub.w	#16,d1
	tst.w	Fbydir(a4)			;up- & down-movement ?
		bmi.s	.to_up
		addi.w	#76+16,d1
.to_up:
;	sub.w	#16,d0
	moveq	#6,d7
.check_ud:
		movem.w	d0-d1,-(sp)
		bsr	flyer_check_kollision
		movem.w	(sp)+,d0-d1
		bne.s	.floor_found
		add.w	#16,d0
	dbf	d7,.check_ud
	bra.s	.no_floor
.floor_found:
	clr.l	Fbydir(a4)			;Yes, stop alien
.no_floor:

	move.l	Fbxdir(a4),d0			;Add xdir, ydir to position
	add.w	d0,Fxlow(a4)
	swap	d0
	move.w	Bob_X_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_X_Position(a4)
	move.l	Fbydir(a4),d0
	add.w	d0,Fylow(a4)
	swap	d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)


	subq.w	#1,Fdelay(a4)			;New shot ?
	bpl	.no_shot

		move.w	#60,Fdelay(a4)		;Yes, reset delay...
		move.w	Bob_X_Position(a4),d0
		addi.w	#30,d0
		sub.w	Scr_X_Level_Pos(a6),d0
		cmp.w	T_posX,d0		;Player under alien ?
		bge.s	.no_shot

			movem.w	Bob_X_Position(a4),d1-d2
			add.w	#24,d1
			add.w	#50,d2
			moveq	#2,d0
			lea	Area_Enter_Vector(pc),a1
			move.l	a4,-(sp)

			bsr	Search_Bob_Entry	;Start shot...

			move.l	#handle_shot,Bob_Routine(a4)
			move.l	#FlyShot_AnimTable,Bob_Next_Anim(a4)
			bsr	Get_Next_Bob_Frame

			clr.w	Fsxlow(a4)
			clr.w	Fsylow(a4)
			move.b	#8,Bob_Power(a4)
			bsr	rnd			;Random direction
			andi.l	#$ff00,d0
			addi.l	#1<<16,d0
			move.w	Bob_X_Position(a4),d1
			subq.w	#8,d1
			sub.w	Scr_X_Level_Pos(a6),d1
			cmp.w	T_posX,d1
			blo.s	.to_right
				neg.l	d0
.to_right:
			move.l	d0,Fsxdir(a4)
			bsr	rnd
			andi.l	#$ff00,d0
			addi.l	#1<<16,d0
			move.l	d0,Fsydir(a4)
			move.l	(sp)+,a4
.no_shot:
	bsr	Get_Next_Bob_Frame
	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.out

.remove_me:
	clr.w	Flyer_active
.out:
	rts

Flyer_active:	dc.w	0

flyer_check_kollision:
	cmp.w	#32,d1
	bge.s	.ok
	moveq	#32,d1
.ok:
	move.b	d0,d3		;fr 8*8er Abfrage.
	move.b	d1,d4		;fr 8*8er Abfrage.

	lsr.w	#4,d0
	move.l	Scr_Level(a6),a0

	sub.w	#32,d1

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

	mulu	Scr_Level_Width(a6),d1
	add.l	d1,a0
	cmp.b	#59,-1(a0)

	rts

;		jsr	rnd.w			;Let slave explode
;		andi.w	#31,d0
;		add.w	d0,O_XPOS(a5)
;		jsr	rnd.w
;		andi.w	#31,d0
;		add.w	d0,O_YPOS(a5)
;		jmp	make_expl.w




	rsset	Bob_Special_1
Fsxlow	rs.w	1
Fsylow	rs.w	1
Fsxdir	rs.l	1
Fsydir	rs.l	1

handle_shot:
	moveq	#0,d0
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler
	beq	.explode

	move.l	Fsxdir(a4),d0			;Add direction...
	add.w	d0,Fsxlow(a4)
	swap	d0
	move.w	Bob_X_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_X_Position(a4)
	move.l	Fsydir(a4),d0
	add.w	d0,Fsylow(a4)
	swap	d0
	move.w	Bob_Y_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_Y_Position(a4)

	movem.w	Bob_X_Position(a4),d0-d1	;Any walls ?
	addq.w	#8,d0
	addq.w	#8,d1
	bsr	check_obj_kollision
	beq.s	.no_kolli
.explode:
		subq.w	#8,Bob_X_Position(a4)	;Yes, let object explode
		subq.w	#8,Bob_Y_Position(a4)
		bra	Standart_Destruction

.no_kolli:
	bra	Test_Bob_Out

FlyShot_AnimTable:
	dc.l	level_GFX+bob22,level_GFX+msk22
	dc.w	0,0,16,2,2,14,14

Flyer_AnimTable:
	dc.l	AD_GFX,0
	dc.w	0,0,76,16,18,62,62
	dc.l	AD_GFX+$ab0,0
	dc.w	0,0,76,16,18,62,62
	dc.w	ENTRY_END
	dc.l	Flyer_AnimTable

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Tropfen
*---------------------------------------------------------------------------

Start_Drop:
	cmp.b	#4,Drop_count
	beq	Out_Bob
	addq.b	#1,Drop_count
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
init_tropfen4:
	bsr	rnd
	andi.w	#$1f,d0
	move.w	d0,Bob_Special_1(a4)
	move.l	#Drop,Bob_Routine(a4)

Drop:
	tst.w	Bob_Y_Position(a4)		;Above screen ?
	bmi.s	.out_of_screen
	subq.w	#1,Bob_Special_1(a4)	;No...
	bpl.s	.out_of_screen

	move.w	#85,Bob_Special_1(a4)
	movem.w	Bob_X_Position(a4),d1-d2
	moveq	#18,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry
	move.l	a4,a0
	move.l	(sp)+,a4
	tst.w	d7
	bmi.s	.out_of_screen


	move.l	#handle_ftropfen,Bob_Routine(a0)
	move.b	#BOB_NOCOL,Bob_Used(a0)
	move.w	#15,Bob_Special_1(a0)
	sf	Bob_Special_2(a0)
	move.w	#5,Bob_Special_3(a0)
	move.w	#$80,tydir(a0)
	sf	tylow(a0)
	clr.w	Bob_Special_6(a0)
.out_of_screen:
	bsr	Test_Bob_Out2
	tst.b	Bob_Used(a4)
	bpl.s	.out
	subq.b	#1,Drop_count
.out:
	rts

Drop_count:	dc.w	0

	rsset	Bob_Special_4
tydir	rs.w	1
tylow	rs.b	1

handle_ftropfen:
	tst.b	Bob_Special_2(a4)
	beq.s	.no_kill
	subq.w	#1,Bob_Special_3(a4)
	bpl	.no
	bra	Out_Bob_Damage
.no_kill:
	cmpi.w	#4,Bob_Special_6(a4)
	bge.s	.fall
	subq.w	#1,Bob_Special_1(a4)
	bpl.s	.no
	move.w	Bob_Special_6(a4),d0
	add.w	d0,d0
	lea	.delay_tab(pc),a0
	move.w	(a0,d0.w),Bob_Special_1(a4)

	addq.w	#1,Bob_Special_6(a4)
	bsr	Get_Next_Bob_Frame
	bra.s	.no
.fall:
	movem.w	Bob_X_Position(a4),d0-d1

		addq.w	#8,d0
		addi.w	#16,d1
		bsr	check_obj_kollision
		bne.s	.stop_fall
			cmpi.w	#$0600,tydir(a4)
			bge.s	.no_speedup
				addi.w	#$0048,tydir(a4)
.no_speedup:
			move.b	tydir+1(a4),d0
			add.b	d0,tylow(a4)
			move.b	tydir(a4),d0
			ext.w	d0
			move.w	Bob_Y_Position(a4),d1
			addx.w	d0,d1
			move.w	d1,Bob_Y_Position(a4)
	bra.s	.no
.stop_fall:
	PLAY_FX	#$2e
			st	Bob_Special_2(a4)
			addq.w	#1,Bob_Special_6(a4)
			bsr	Get_Next_Bob_Frame
.no:
	bra	Test_Bob_Out

.delay_tab:
	dc.w	8,6,4,2

Drop_AnimTable:
		dc.l	level_GFX+bob1c,level_GFX+msk1c
		dc.w	0,0,3,2,2,28,24
		dc.l	level_GFX+bob1d,level_GFX+msk1d
		dc.w	0,0,4,2,2,28,24
		dc.l	level_GFX+bob1e,level_GFX+msk1e
		dc.w	0,0,6,2,2,28,24
		dc.l	level_GFX+bob1f,level_GFX+msk1f
		dc.w	0,0,9,2,2,28,24
		dc.l	level_GFX+bob20,level_GFX+msk20
		dc.w	0,8,6,2,2,28,24
		dc.l	level_GFX+bob21,level_GFX+msk21
		dc.w	0,5,11,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Drop_AnimTable	

*---------------------------------------------------------------------------
*	Routine and AnimTable of     AlienEgg
*---------------------------------------------------------------------------

		rsset	Bob_Special_1
Edelay2		rs.w	1
Ehatching	rs.b	1
Ehatched	rs.b	1
Ehiten		rs.b	1
Ejumps		rs.b	1
E_PHA		=	Bob_Status

		rsset	Bob_Special_1
Eaxdir		rs.w	1
Eaydir		rs.l	1
Eaylow		rs.w	1
Ejump		rs.b	1
Ewalk		rs.b	1

Start_Egg:
	move.b	#BOB_NOPLHURT,Bob_Used(a4)
	clr.w	E_PHA(a4)
	clr.l	Edelay2(a4)
	move.w	#10,Bob_Power(a4)
;	move.b	#1,O_COLEN(a5)
	sf	Ehiten(a4)
	move.b	#1,Ejumps(a4)
	move.l	#Egg,Bob_Routine(a4)

Egg:
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler
	movem.w	Bob_X_Position(a4),d0-d1	;Jumping on Egg ?
	move.w	d0,d2
	add.w	#16,d2
	bsr	check_foot_frame
	beq.s	.no

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

		st	T_force_jump		;Force jump of player
		move.w	#4,Bob_Hit(a4)
		subq.b	#1,Ejumps(a4)
		bpl.s	.no
		bra.s	.destruct
.no:

	tst.b	Ehiten(a4)				;Hit enabled ?
	bne.s	.enabled
		move.w	#10,Bob_Power(a4)
		bra.s	.disabled
.enabled:
		tst.w	Bob_Power(a4)			;Destroyed ?
		bne.s	.disabled

;			PLAY_FX	#13
.destruct:
			subq.w	#8,Bob_X_Position(a4)
			moveq	#$20,d0
			bra	Standart_Destruction

.disabled:
	move.w	T_posX,d0			;Calc distance to player
	move.w	T_posY,d1
	add.w	#16,d0
	add.w	#24,d1
	add.w	Scr_X_Level_Pos(a6),d0
	add.w	Scr_Y_Level_Pos(a6),d1
	movem.w	Bob_X_Position(a4),d2-d3
	addq.w	#8,d2
	addi.w	#12,d3
	sub.w	d2,d0
	bpl.s	.ok1
		neg.w	d0
.ok1:
	sub.w	d3,d1
	bpl.s	.ok2
		neg.w	d1
.ok2:
	cmpi.w	#70,d0				;Player in range ?
	bge.s	.not_in_range
		tst.b	Ehatching(a4)
		bne.s	.no_check
		cmpi.w	#48,d1
		slt	Ehatching(a4)		;Set hatching-flag
		bge.s	.no_check
		PLAY_FX	#$2f

.no_check:
		cmpi.w	#50,d0
		bge.s	.not_in_range
			st	Ehiten(a4)	;Player near -> enable hit
.not_in_range
	tst.b	Ehatching(a4)			;Hatching active ?
	beq	.no_hatching
		cmpi.w	#2,E_PHA(a4)		;Allready open ?
		bne	.not_open
			tst.b	Ehatched(a4)	;Alien allready exited ?
			bne.s	.no_hatching
			st	Ehiten(a4)
			st	Ehatched(a4)	;No, set flag
		move.l	a4,-(sp)
			movem.w	Bob_X_Position(a4),d1-d2
			moveq	#17,d0
			lea	Area_Enter_Vector(pc),a1
			bsr	Search_Bob_Entry
			tst.w	d7
			bmi.s	.no_object

			PLAY_FX	#$30

			move.l	#Alien,Bob_Routine(a4)
			move.w	#2,E_PHA(a4)
			move.b	#BOB_NOPLCOL,Bob_Used(a4)

			move.w	#10,Bob_Power(a4)
			st	Ejump(a4)
			clr.w	Eaylow(a4)
			move.l	#5<<16,Eaydir(a4)
			sf	Ewalk(a4)
			bsr	calc_xdir	;Calc direction to player
			move.w	d7,Eaxdir(a4)
			bsr	set_spr		;Set correct image
.no_object:
		move.l	(sp)+,a4
	bra.s	.no_hatching
.not_open:
			subq.w	#1,Edelay2(a4)	;Not yet open -> Inc phase
			bpl.s	.no_hatching
				move.w	#11,Edelay2(a4)
				addq.w	#1,E_PHA(a4)
				bsr	Get_Next_Bob_Frame
.no_hatching:

	bra	Test_Bob_Out

Egg_AnimTable:
	dc.l	level_GFX+bob15,level_GFX+msk15
	dc.w	0,0,21,2,2,12,18
	dc.l	level_GFX+bob16,level_GFX+msk16
	dc.w	0,-1,22,2,2,12,18
	dc.l	level_GFX+bob17,level_GFX+msk17
	dc.w	0,-1,22,2,2,12,18

Alien:
	move.l	#$100,d0
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction
;		subq.w	#8,O_XPOS(a5)
;		subq.w	#8,O_YPOS(a5)


	movem.w	Bob_X_Position(a4),d0-d1	;Any walls ?
	tst.w	Eaxdir
	bmi.s	.no_add
		addq.w	#8,d0
.no_add:
	addq.w	#4,d1
	bsr	check_obj_kollision
	beq.s	.no_wall
		neg.w	Eaxdir(a4)		;Yes, just turn around
.no_wall:
	tst.b	Ejump(a4)			;Jumping ?
	beq	.not_jumping
		move.l	Eaydir(a4),d0		;Do Y-movement
		sub.w	d0,Eaylow(a4)
		swap	d0
		move.w	Bob_Y_Position(a4),d1
		subx.w	d0,d1
		move.w	d1,Bob_Y_Position(a4)

		cmpi.w	#-5,Eaydir(a4)		;Slow down in y-speed
		ble.s	.ok
			subi.l	#$00004800,Eaydir(a4)
.ok:
		move.b	T_wheel,d0		;Any problems in sugging ?
		or.b	T_shield,d0
		or.b	T_state,d0
		or.b	T_flash,d0
		bne	.no_col			;No, so test if collision with face
			move.w	T_posX,d4
			move.w	T_posY,d5
			add.w	Scr_X_Level_Pos(a6),d4
			add.w	Scr_Y_Level_Pos(a6),d5
			tst.b	T_face
			bne.s	.right
				addq.w	#6,d4
			bra.s	.left
.right:
				addi.w	#16,d4
.left:
			addi.w	#13,d5

			cmp.w	#22,T_anim
			bne.s	.not_kneeing
				addi.w	#10,d5
.not_kneeing:
			move.w	d4,d6
			move.w	d5,d7
			addi.w	#10,d6
			addi.w	#10,d7

			movem.w	Bob_X_Position(a4),d0-d1
			addq.w	#6,d0
			addq.w	#6,d1
			move.w	d0,d2
			move.w	d1,d3
			addq.w	#8,d2
			addq.w	#8,d3

			cmp.w	d6,d0
			bgt.s	.no_col
			cmp.w	d4,d2
			blt.s	.no_col
			cmp.w	d7,d1
			bgt.s	.no_col
			cmp.w	d5,d3
			blt.s	.no_col

			move.l	#grabber_player,Bob_Routine(a4)	;Face is hit by alien
			move.b	T_face+1,Eold_face(a4)
			sf	Ehugger_times(a4)
;			sf	O_SHOW(a5)
;			sf	O_COLEN(a5)
			sf	Epower_flag(a4)
;			addq.b	#1,hugger_cnt
			rts
.no_col:

		movem.w	Bob_X_Position(a4),d0-d1		;Check backgnd-collision
		addq.w	#6,d0
		tst.w	Eaydir(a4)
		bpl	.lab0
			addi.w	#16,d1
.lab0:
		bsr	check_obj_kollision
		beq	.do_xdir
		tst.w	Eaydir(a4)		;Turn around, if wall detected
		bmi.s	.lab1
			neg.l	Eaydir(a4)
			bra	.do_xdir
.lab1:
		sf	Ejump(a4)		;Stop jump, if ground is reached

	bra	.do_xdir
.not_jumping:
						;Walking around...
		bsr	set_spr			;Set images
		move.w	Bob_X_Position(a4),d1
		sub.w	Scr_X_Level_Pos(a6),d1
		tst.w	Eaxdir(a4)		;Check if player is in right
		bpl.s	.lab2
			move.w	d1,d0
			sub.w	T_posX,d0
			subq.w	#8,d0
			bmi.s	.no_jmp
		bra.s	.lab3
.lab2:
			move.w	T_posX,d0
			sub.w	d1,d0
			addq.w	#8,d0
			bmi.s	.no_jmp
.lab3:
		cmpi.w	#31,d0
		bge.s	.no_jmp
			cmpi.w	#15,d0
			bgt.s	.start_jump	;Yes, he is: Start jump
.no_jmp:
		andi.w	#1,E_PHA(a4)		;Walk animation
		tst.w	Eaxdir(a4)
		beq.s	.no_anim
			subq.b	#1,Ewalk(a4)
			bpl.s	.no_anim
				move.b	#6,Ewalk(a4)	;11
				eori.w	#1,E_PHA(a4)
.no_anim:
		movem.w	Bob_X_Position(a4),d0-d1	;Ground still ok. ?
		addq.w	#4,d0
		addi.w	#16,d1
		movem.w	d0-d1,-(sp)
		bsr	check_slope_kollision
		movem.w	(sp)+,d0-d1
		bne.s	.ground
		addq.w	#8,d0
		jsr	check_slope_kollision
		bne.s	.ground
.start_jump:		st	Ejump(a4)	;No, jump over the gap...
			move.w	#2,E_PHA(a4)
			move.l	#5<<16,Eaydir(a4)
			clr.w	Eaylow(a4)
			PLAY_FX	#$30
			bra.s	.do_xdir

.ground:		movem.w	Bob_X_Position(a4),d0-d1	;Yes, calc right position on ground
			addq.w	#8,d0
			addi.w	#16,d1
			bsr	calc_position
			subi.w	#16,d1
			move.w	d1,Bob_Y_Position(a4)
.do_xdir:

	move.w	Eaxdir(a4),d0		;Do x-movement
	add.w	d0,Bob_X_Position(a4)

.end_alien:				;Still on screen ?
	move.w	E_PHA(a4),d0
	mulu	#22,d0
	tst.w	Eaxdir(a4)
	bmi.s	.aleft
	add.l	#Alien_AnimTable_R,d0
	bra.s	.aright
.aleft:
	add.l	#Alien_AnimTable_L,d0
.aright:
	move.l	d0,Bob_Next_Anim(a4)

	bsr	Get_Next_Bob_Frame

	bra	Test_Bob_Out

calc_xdir:				;Calc x-direction of alien
	move.w	T_posX,d0
	add.w	Scr_X_Level_Pos(a6),d0
	addq.w	#8,d0
	cmp.w	Bob_X_Position(a4),d0
	ble.s	.not_greater
		moveq	#1,d7
	bra.s	.greater
.not_greater:
		moveq	#-1,d7
.greater:
	sub.w	Bob_X_Position(a4),d0
	bpl.s	.ok
		neg.w	d0
.ok:
	rts

set_spr:				;Select right info-structure
;	tst.w	Eaxdir(a4)
;	.if (minus) {
;		lea	alien_spr0(pc),a0
;	} .else {
;		lea	alien_spr1(pc),a0
;	}
;	move.l	a0,O_INFO(a5)
;	st	O_SHOW(a5)
	rts

Alien_Flip	= level_Buffer-bob0c+bob11-bob18

Alien_AnimTable_R:
	dc.l	Alien_Flip+bob1a,Alien_Flip+msk1a
	dc.w	0,3,13,2,5,12,10
	dc.l	Alien_Flip+bob1b,Alien_Flip+msk1b
	dc.w	0,3,13,2,5,12,10
	dc.l	Alien_Flip+bob19,Alien_Flip+msk19
	dc.w	0,0,16,2,2,12,12
Alien2_AnimTable_R:
	dc.l	Alien_Flip+bob18,Alien_Flip+msk18
	dc.w	0,0,16,2,2,12,12

Alien_AnimTable_L:
	dc.l	level_GFX+bob1a,level_GFX+msk1a
	dc.w	0,3,13,2,5,12,10
	dc.l	level_GFX+bob1b,level_GFX+msk1b
	dc.w	0,3,13,2,5,12,10
	dc.l	level_GFX+bob19,level_GFX+msk19
	dc.w	0,0,16,2,2,12,12
Alien2_AnimTable_L:
	dc.l	level_GFX+bob18,level_GFX+msk18
	dc.w	0,0,16,2,2,12,12

Alien3_AnimTable:
	dc.l	level_GFX+bob1a+12*2*3,level_GFX+msk1a+12*2
	dc.w	0,0,13,2,5,12,10

		rsset	Bob_Special_1
Ehugger_times	rs.b	1
Eold_face	rs.b	1
Epower_flag	rs.b	1
sug_sound:	dc.b	0
flame_sound:	dc.b	0

grabber_player:					;New player-handler
	bset	#0,sug_sound
	bne.s	.no_sug
	moveq	#$28,d0
	move.b	d0,global_startsound
	bsr	Do_FX
	move.b	#$29,global_stopsound
.no_sug:
	move.b	#NORM,Bob_Race+1(a4)		;Nicht aufblitzen!
	tst.b	smart_bomb			;Super-Weapon active ?
	bne.s	.fall_off			;Yes, fall off

	tst.b	T_shield			;Shield on ?
	bne.s	.fall_off			;Yes, fall off

	move.b	T_swing,d0			;Any rope ?
	or.b	T_rope,d0
	beq.s	.no_check
		tst.b	T_energy		;Power down ?
		bne.s	.no_check
			sf	T_rope		;Cut rope...
			sf	T_swing
;			clr.w	pl_count.w

.no_check:
	bsr	calc_alien
	movem.w	d0-d1,Bob_X_Position(a4)


	subq.b	#1,Epower_flag(a4)		;Time to power down ?
	bpl.s	.no_sub
		addq.b	#3,Epower_flag(a4)
		moveq	#1,d0
		jsr	sub_energy			;Yes...
.no_sub:
	move.w	T_face,d0			;Handle hugger-fall-off
	cmp.b	Eold_face(a4),d0
	beq.s	.end

		move.b	d0,Eold_face(a4)
		addq.b	#1,Ehugger_times(a4)
		cmpi.b	#4,Ehugger_times(a4)
		blt.s	.end
.fall_off:
	bclr	#0,sug_sound
	beq.s	.no_sug2
	PLAY_FX	#$29
	sf	global_startsound
.no_sug2:

			tst.w	T_face
;			.if (zero) {
;				lea	alien_spr0(pc),a1
;			} .else {
;				lea	alien_spr1(pc),a1
;			}
;			move.l	a1,O_INFO(a5)
;			st	O_SHOW(a5)
;			sf	O_USR0(a5)
			bsr	calc_alien
			addq.w	#8,d0
			addq.w	#8,d1
			movem.w	d0-d1,Bob_X_Position(a4)
			move.l	#handle_fall,Bob_Routine(a4)
			move.w	#5,Bob_Power(a4)

			lea	Egg_Info_2(pc),a0
			sub.l	a4,a0
			move.w	a0,Bob_to_Info_Offs(a4)
			or.w	#FLIP,Bob_Race(a4)

			move.l	#Alien3_AnimTable,Bob_Next_Anim(a4)
			bsr	Get_Next_Bob_Frame

			clr.w	Bob_Special_1(a4)

;			st	O_COLEN(a5)
;			sf	O_PHITEN(a5)
;			subq.b	#1,hugger_cnt
			rts
.end:
	lea	Alien2_AnimTable_R(pc),a0
	tst.w	T_face
	beq.s	.ok
	lea	Alien2_AnimTable_L(pc),a0
.ok:
	move.l	a0,Bob_Next_Anim(a4)
	bra	Get_Next_Bob_Frame


	IFEQ	custom

handle_player5:
	tst.b	hugger_cnt
	.if (zero) {
		jmp	handle_player.w
	}
	move.l	spr_ptr.w,a0			;Reserve space for space-hugger
	move.w	spr_num.w,d3
	move.b	d3,-5(a0)
	pea	(a0)
	clr.l	(a0)+
	clr.l	(a0)+
	addq.b	#1,d3
	move.l	a0,spr_ptr.w
	move.w	d3,spr_num.w

	move.b	wheel_stat.w,-(sp)		;Handle player (no wheel!)
	sf	wheel_stat.w
	jsr	handle_player.w
	move.b	(sp)+,wheel_stat.w

	move.l	(sp)+,a0
	move.l	#$05002000|(aliens511/32),d2
	tst.b	pl_face.w
	.if (not zero) {
		ori.w	#$0800,d2
	}
	bsr	calc_alien
	addi.w	#128+8,d0
	addi.w	#128+8,d1
	move.w	d1,(a0)+
	or.l	d2,(a0)+
	move.w	d0,(a0)
	rts
	ENDC

calc_alien:
	move.w	T_posX,d0			;Show face-hugger
	move.w	T_posY,d1
	addq.w	#1,d1
	cmp.w	#22,T_anim
	beq.s	.kneeing
	cmp.w	#25,T_anim
	bge.s	.kneeing
		sub.w	#9,d1
.kneeing:
	add.w	#9,d0

;	cmpi.w	#27,pl_phase.w
;	.if (equal) {
;		subq.w	#5,d1
;	}
	add.w	Scr_X_Level_Pos(a6),d0
	add.w	Scr_Y_Level_Pos(a6),d1

	rts

handle_fall:
	moveq	#0,d0
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	tst.b	Bob_Special_1(a4)
	bne	Test_Bob_Out
	movem.w	Bob_X_Position(a4),d0-d1
	addq.w	#8,d0
	addi.w	#12,d1
	bsr	check_slope_kollision
	beq.s	.fall
		movem.w	Bob_X_Position(a4),d0-d1
		addq.w	#8,d0
		addi.w	#12,d1
		bsr	calc_position
		subi.w	#12,d1
		move.w	d1,Bob_Y_Position(a4)
		st	Bob_Special_1(a4)
		bra	Test_Bob_Out
.fall:
	addq.w	#4,Bob_Y_Position(a4)
	bra	Test_Bob_Out


*---------------------------------------------------------------------------
*	Routine and AnimTable of     Pfeil
*---------------------------------------------------------------------------
P_REINIT	= 7

Start_Pfeil:
	btst	#P_REINIT,Bob_Special_4+1(a4)
	beq.s	.first_init
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	#Pfeil,Bob_Routine(a4)
	clr.w	Bob_Special_1(a4)
	move.w	Bob_Special_4(a4),d0
	and.w	#3,d0
	btst	#1,d0
	beq.s	.init_ok
	lea	Explo_Info_1(pc),a0
	sub.l	a4,a0
	move.w	a0,Bob_to_Info_Offs(a4)
.init_ok:
	mulu	#22,d0
	add.l	#Pfeil_AnimTable,d0
	move.l	d0,Bob_Next_Anim(a4)
	bra	Get_Next_Bob_Frame
.first_init:
	move.l	Bob_Entry_Adress(a4),a0
	or.w	#1<<P_REINIT,6(a0)
	bra	Out_Bob
Pfeil:
	subq.w	#1,Bob_Special_1(a4)
	bpl	Test_Bob_Out
	move.w	#25,Bob_Special_1(a4)
	eor.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	bra	Test_Bob_Out

Pfeil_AnimTable:
	dc.l	level_GFX+bob11,level_GFX+msk11
	dc.w	0,0,20,0,0,0,0

	dc.l	level_GFX+bob12,level_GFX+msk12
	dc.w	0,0,20,0,0,0,0

	dc.l	level_GFX+bob13,level_GFX+msk13
	dc.w	0,0,7,0,0,0,0

	dc.l	level_GFX+bob14,level_GFX+msk14
	dc.w	0,0,7,0,0,0,0


*---------------------------------------------------------------------------
*	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.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
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

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

		subq.b	#1,Dshots(a4)		;Delay down ?
		bpl	.no_shots		;Yes, start shot...
			move.b	#80,Dshots(a4)

			PLAY_FX	#$2c

			moveq	#12,d0
			lea	Area_Enter_Vector(pc),a1
			move.l	a4,-(sp)
			bsr	Search_Bob_Entry		;Add slime-object
			move.l	(sp)+,a0

			move.w	#4,Bob_Power(a4)
			sf	Lwait(a4)
			st	Lnocheck(a4)
			jsr	rnd
			andi.w	#3,d0
			subq.w	#6,d0

			move.w	Bob_X_Position(a0),d2		;Which side ?
			addi.w	#24,d2
			sub.w	Scr_X_Level_Pos(a6),d2
			move.w	T_posX,d1
			addi.w	#16,d1
			cmp.w	d2,d1
			ble.s	.slab0
				neg.w	d0
.slab0:
			move.w	d0,Lbxdir(a4)
			clr.w	Lbxdir+2(a4)
			clr.l	Lxlow(a4)
			move.l	Bob_X_Position(a0),Bob_X_Position(a4)
			btst	#1,Dpara(a0)
			beq.s	.slab1
				addi.w	#40,Bob_X_Position(a4)
				bra.s	.slab2
.slab1:
				addq.w	#8,Bob_X_Position(a4)
.slab2:
			addq.w	#8,Bob_Y_Position(a4)
			jsr	rnd
			andi.w	#3,d0
			subq.w	#2,d0
			neg.w	d0
			move.w	d0,Lbydir(a4)
			clr.w	Lbydir+2(a4)

		move.l	a0,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	;0
	bra.w	.dog_run	;4
	bra.w	.dog_jump	;8
	bra.w	.dog_turn	;12
.dog_fall:			;16		;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:
			PLAY_FX	#$31
			move.b	#DJUMP,Dmode(a4)
			st	Ddinit(a4)
			move.w	#5,Bob_Status(a4)
			bra	.exit_dog
.nojmp:

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

	movem.w	Bob_X_Position(a4),d0-d1		;Ground ?
	addi.w	#34,d1
	add.w	#20,d0
	jsr	check_slope_kollision
	beq.s	.no_ground
	bra.s	.ground

.no_slopes:
	movem.w	Bob_X_Position(a4),d0-d1		;Ground ?
	addi.w	#32,d1
	add.w	d7,d0
	jsr	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
		jsr	check_obj_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:
			PLAY_FX	#$31
	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)
		jsr	check_obj_kollision
		movem.w	(sp)+,d0-d1
		bne.s	.ceiling
		addi.w	#32,d0
		jsr	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 ?
	jsr	check_slope_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.ground2
	addq.w	#8,d1
	jsr	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
	jsr	check_slope_kollision
	bne.s	.stop
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#28,d0
	addi.w	#32,d1
	jsr	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:
	add.w	d0,d0

	lea	.dog_tab(pc),a0
	move.b	.dog_tab2-.dog_tab(a0,d0.w),Bob_Height+1(a4)
	move.b	.dog_tab2-.dog_tab+1(a0,d0.w),Bob_Y_Offset+1(a4)
	asl.w	#2,d0

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

.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

.dog_tab2:
	dc.b	29,0,32,0,32,0,32,0,29,3,32,0
	dc.b	29,0,32,0,32,0,32,0,29,3,32,0

.check_ground:					;Check if fall is neccessary
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#12,d0
	addi.w	#32,d1
	moveq	#0,d5
	movem.w	d0-d1,-(sp)
	jsr	check_slope_kollision
	beq.s	.no_slope
	moveq	#1,d5				;Mindestens Boden!
	and.b	#%00110000,d1
	beq.s	.no_slope
	st	d5				;Schrge!
.no_slope:
	movem.w	(sp)+,d0-d1
	addi.w	#16,d0
	jsr	check_slope_kollision
	bne	.ground3			;Any ground ?
	tst.b	d5
	beq.s	.fall				;Beides 0.
.ground3:	and.w	#%00110000,d1		;Get the negative one into d5
		beq.s	.no_slope3
		st	d5			;Mindestens eine Schrge!
.no_slope3:
		movem.w	Bob_X_Position(a4),d0-d1
		addi.w	#20,d0
		addi.w	#32,d1
		jsr	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
	rts

;.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
;	sne	d0
;	move.b	d0,d5
;	movem.w	(sp)+,d0-d1
;	bne	.ground3
;	addi.w	#16,d0
;	bsr	check_slope_kollision
;	bne	.ground3				;Any ground ?
;	tst.b	d5
;	beq.s	.fall
;	bra.s	.no_slope
;.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
Rangle2	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	Rangle2(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
	addq.w	#1,Hit_Sound
	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)
	jsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.turn
	addq.w	#8,d1
	jsr	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)
	jsr	check_slope_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.ground
	addq.w	#4,d1
	jsr	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
		jsr	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,Rangle2(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	Rangle2(a4),d0
	and.w	#$fff8,d0
	asl.w	#6,d0
	add.l	#Rotate2,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
Sylow2	rs.w	1
Sdelay	rs.b	1

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

Slime:
	moveq	#$30,d0
	addq.w	#1,Hit_Sound
	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
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	move.l	Sspeed(a4),d0
	add.w	d0,Sylow2(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
Bcflag		rs.b	1

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

Beule:
	move.l	#$300,d0
	addq.w	#1,Hit_Sound
	bsr	Standart_Hit_Handler
	beq	.destruct

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

	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.out
.set_flag:
	tst.b	Bcflag(a4)
	beq.s	.out
	sf	Beule_flag
.out:
	rts
.destruct:
	bsr	.set_flag
	bra	Standart_Destruction

beule0:						;Waiting
	subq.w	#1,Bdelay(a4)
	bpl.s	.out
		clr.w	Bdelay(a4)
		tst.b	Beule_flag		;Schon eine andere Beule offen!
		bne.s	.out
		move.l	#beule1,Bhandler(a4)
		st	Beule_flag
		st	Bcflag(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)

		PLAY_FX	#$2c

		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)
		jsr	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)
		jsr	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)
			sf	Beule_flag
			sf	Bcflag(a4)
.out:
	rts

Beule_flag:	dc.w	0

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
	addq.w	#1,Hit_Sound
	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
	jsr	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)
			PLAY_FX	#$2d
.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

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

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

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

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

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

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

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

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

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Rocket
*---------------------------------------------------------------------------
Rocket_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	main2_GFX+Cbob1c,main2_GFX+Cmsk1c
		dc.w	0,0,15,2,2,12,11
		dc.l	main2_GFX+Cbob1b,main2_GFX+Cmsk1b
		dc.w	0,0,15,2,2,12,11
		dc.l	main2_GFX+Cbob1a,main2_GFX+Cmsk1a
		dc.w	0,0,13,2,2,12,11
		dc.l	main2_GFX+Cbob19,main2_GFX+Cmsk19
		dc.w	0,0,14,2,2,12,11

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

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

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

Shoot_AnimTable:
		dc.l	main2_GFX+Cbob17,main2_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
*---------------------------------------------------------------------------

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

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Extrabox
*---------------------------------------------------------------------------

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

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

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

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

Explo2_AnimTable:
		dc.l	main2_GFX+Cbob0a,main2_GFX+Cmsk0a
		dc.w	0,0,14,0,0,0,0
		dc.l	main2_GFX+Cbob0b,main2_GFX+Cmsk0b
		dc.w	0,2,7,0,0,0,0
		dc.l	main2_GFX+Cbob0c,main2_GFX+Cmsk0c
		dc.w	0,1,12,0,0,0,0
		dc.l	main2_GFX+Cbob0d,main2_GFX+Cmsk0d
		dc.w	0,0,14,0,0,0,0
		dc.l	main2_GFX+Cbob0e,main2_GFX+Cmsk0e
		dc.w	0,0,14,0,0,0,0
		dc.l	main2_GFX+Cbob0f,main2_GFX+Cmsk0f
		dc.w	0,1,14,0,0,0,0
		dc.l	main2_GFX+Cbob10,main2_GFX+Cmsk10
		dc.w	0,2,13,0,0,0,0
		dc.l	main2_GFX+Cbob11,main2_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
	addq.w	#1,Hit_Sound
	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
	addq.w	#1,Hit_Sound
	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
	cmp.w	#3,d0
	beq	Init_Level_3
	st	Cue_Point
	rts

act_level:	dc.w	Level


Init_Datas:
	clr.w	Drop_count
	clr.w	Flyer_active
	sf	Beule_flag
	bclr	#0,sug_sound
	beq.s	.no_sug2
	PLAY_FX	#$29
.no_sug2:
	bclr.b	#0,flame_sound
	beq.s	.end
	PLAY_FX	#$2b
.end:
	rts

Copy_Colors:
;	lea	S_coltab(pc),a0
;	lea	B_coltab+32(pc),a1
;	moveq	#16-1,d7
;.loop:
;	move.w	(a0)+,(a1)+
;	dbf	d7,.loop
	rts

Init_World:
	IFNE	Real
	lea	Boss_Quell,a0
	lea	Boss_GFX,a1
	move.w	#1614-1,d7
.loop:
	move.l	(a0)+,(a1)+
	dbf	d7,.loop

	lea	Para_Quell,a0
	lea	B_parallax,a1
	move.w	#208-1,d7
.loop2:
	move.w	(a0)+,(a1)+
	dbf	d7,.loop2

	ENDC

	lea	Rocket_AnimTable_Pointer(pc),a0
	move.l	#Rocket_AnimTable,(a0)
	move.l	#Rocket_Info_1,4(a0)
	move.l	#Rocket_Info_2,8(a0)

	move.l	#Col_lab2,Color_Pointer
	move.w	#497,DATA_ALL_DIAMONDS.w
	move.w	#13,DATA_ALL_LIFES.w

	move.l	#Jump_Speed2,Jump_Start_Speed
	move.l	#Jump_Verz2,Jump_Verz_Lab

	sf	Plane_flag

	move.l	Act_Scr_Structure,a6
	move.l	#character,Scr_Character(a6)

	move.l	#main2_GFX+Cbob29,Diamond_Pointer

	move.l	#Blit_Rope8,Rope_Vector

	lea	Sound,a0
	move.l	(a0)+,d1
	add.l	a0,d1
	move.l	a0,d0
	jsr	TFMX+52

	lea	Main_Clist(pc),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	main2_flipI(pc),a3
	lea	main2_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	#Rotate2,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.s	.rotate_it

	move.l	Act_Scr_Structure(pc),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)

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

	lea	Smart_Structure(pc),a1
	move.l	#main2_GFX+Cbob25,Bob_Graphics(a1)
	move.l	#main2_GFX+Cmsk25,Bob_Mask(a1)


Create_BigPara:
	move.l	#Para_field,d0
	move.w	#para_b-16,bltdmod(a5)
	clr.w	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:
	SONGPLAY #0

	move.w	#$999,T_time
	move.w	#$999,T_time_def

	move.l	#Hide_Player,Player_Vector
	move.l	Act_Scr_Structure(pc),a6
	move.l	#Level1_Clist,Clist_Handler
	move.w	#levelb1,Scr_Level_Width(a6)
	move.l	#LevelBuffer-1-levelb1,Scr_Level_Pointer(a6)
	move.l	#LevelBuffer,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,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	#Check_End1,SFX_Handler
	move.l	#Macros,Macro_Pointer

	bsr	Wait_tof
	bsr	Level1_Clist

	lea	LevelBuffer,a0		;Source start
	lea	Level1,a1		;Dest   start
	lea	LevelBuffer+17424,a2	;Source end
	bra	repack

Init_Level_3:
	SONGPLAY #2

	move.w	#$999,T_time
	move.w	#$999,T_time_def

	lea	E_coltab(pc),a0
	lea	B_coltab+2(pc),a1
	moveq	#14-1,d7
.copy:
	move.w	(a0)+,(a1)+
	dbf	d7,.copy

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

	move.w	#16,Scr_X_Supply_Plates(a6)

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

	move.l	#Check_Boss5,SFX_Handler
	move.w	#Main_Clist&$ffff,Copjumpin+10

	lea	LevelBuffer,a0		;Source start
	lea	Level2,a1		;Dest   start
	lea	LevelBuffer+17424,a2	;Source end
	bsr	repack
	bra	Create_BigPara

Init_Level_2:
	SONGPLAY #1

	move.w	#$299,T_time
	move.w	#$299,T_time_def

	lea	D_coltab(pc),a0
	lea	B_coltab+2(pc),a1
	moveq	#14-1,d7
.copy:
	move.w	(a0)+,(a1)+
	dbf	d7,.copy

	move.l	#PCol_lab2,Color_Pointer
	move.l	#Handle_Player,Player_Vector
	move.l	Act_Scr_Structure,a6
	move.l	#Level3_Clist,Clist_Handler
	move.w	#levelb3,Scr_Level_Width(a6)
	move.l	#LevelBuffer-1-levelb3,Scr_Level_Pointer(a6)
	move.l	#LevelBuffer,Scr_Level(a6)
	move.w	#levelb3*16-320+32-2,Scr_X_Max(a6)
	move.w	#32,Scr_Y_Max(a6)
	move.l	#Area3,Area_Vector
	move.w	#126,Scr_BA_Anz_Area_X(a6)

	move.w	#14/2,Scr_AnzSupplyPlates(a6)
	move.w	#14,Scr_X_Supply_Plates(a6)

	move.l	#character2,Scr_Character(a6)
	move.l	#Macros2,Macro_Pointer
	move.l	#Cue_Table3,Act_Cue_Table
	move.l	#AutoScroll,SFX_Handler

	move.l	#para_bg2,d0
	move.l	#Para_field,d1
	move.w	#0,bltamod(a5)
	move.w	#44-4,bltdmod(a5)
	move.l	#$ffffffff,bltafwm(a5)
	move.w	#$09f0,bltcon0(a5)

	moveq	#11-1,d7
.loop:
	move.l	d0,bltapth(a5)
	move.l	d1,bltdpth(a5)
	move.w	#64*3*208+2,bltsize(a5)
	waitblt
	addq.l	#4,d1
	dbf	d7,.loop

	move.w	#Para_Clist&$ffff,Copjumpin+10

	lea	LevelBuffer,a0		;Source start
	lea	Level3,a1		;Dest   start
	lea	LevelBuffer+8000,a2	;Source end
	bra	repack


Check_End1:
	bsr	Pulse_Colors
	move.l	Act_Scr_Structure,a6

	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	#100,d0
	bgt.s	.out
	cmp.w	#113,d1
	bgt.s	.out

	cmp.w	#-32,d0
	bgt.s	.run
	move.w	#-1,Cue_Point		;Level-end!
	clr.w	T_joyforce
	rts
.run:
	bset	#0,sound_flag
	bne.s	.do_run
			SONGPLAY #5
			move.b	#100,VBI_count
.do_run:
	st	T_runout
	st	T_freeze
	move.w	#1<<(LEFT+8),T_joyforce
.out:
	rts

sound_flag:	dc.w	0

Pulse_Colors:
	tst.b	flash_count
	bne	.out
	tst.b	Col_Init_Flag
	bne	.out

	lea	Pulse_table1(pc),a0
	moveq	#12,d5
	moveq	#15,d0
	tst.b	Pulse_mode
	beq.s	.ok
	lea	Pulse_table2(pc),a0
	moveq	#24,d5
	moveq	#7,d0
.ok:
	move.b	d0,Pulse_verz_def
	move.b	d5,Pulse_end
	lea	Colors_default,a1
	lea	coltab+9*2,a2		;Hierhin die Farben schreiben.
	lea	B_coltab+9*2,a3		;Hierhin die Farben schreiben.

	moveq	#0,d6
	move.b	Pulse_pos,d6
	moveq	#6-1,d7
.loop:
	moveq	#0,d0
	move.b	(a0,d6.w),d0
	bpl.s	.no_flicker
	move.w	d0,d1
	and.w	#$7f,d0

	tst.w	half_pixel
	beq.s	.no_flicker
	addq.w	#1,d0
.no_flicker:
	add.w	d0,d0
	move.w	(a1,d0.w),(a2)+
	move.w	(a1,d0.w),(a3)+
.next:
	lea	(a0,d5.w),a0
	dbf	d7,.loop

	subq.b	#1,Pulse_verz
	bpl.s	.no_next
	move.b	Pulse_verz_def,Pulse_verz
	addq.b	#1,Pulse_pos
	move.b	Pulse_end,d0
	cmp.b	Pulse_pos,d0
	bgt.s	.no_next
	sf	Pulse_pos
	cmp.w	#3,act_level
	bne.s	.no_next
	not.b	Pulse_mode		;Anderen Farbverlauf!
.no_next:
	moveq	#14,d7
	lea	coltab+2,a0
	move.l	Color_Pointer,a1
.setcol1:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.setcol1
.out:
	rts

Pulse_verz:	dc.b	0
Pulse_pos:	dc.b	0
Pulse_mode:	dc.b	0
Pulse_end:	dc.b	12
Pulse_verz_def:	dc.b	15
		dc.b	0

Pulse_table1:
	dc.b	$00,$80,$01,$81,$02,$82,$03,$82,$02,$81,$01,$80
	dc.b	$04,$84,$84,$05,$85,$85,$06,$85,$85,$05,$84,$84
	dc.b	$07,$87,$87,$08,$88,$88,$09,$88,$88,$08,$87,$87
	dc.b	$0a,$8a,$0b,$8b,$0c,$8c,$0d,$8c,$0c,$8b,$0b,$8a
	dc.b	$0e,$8e,$0f,$8f,$10,$90,$11,$90,$10,$8f,$0f,$8e
	dc.b	$12,$92,$13,$93,$14,$94,$15,$94,$14,$93,$13,$92
Pulse_table2:
	dc.b	$16,$96,$17,$97,$18,$98,$19,$99,$1a,$9a,$1b,$9b,$1c,$9b,$1b,$9a,$1a,$99,$19,$98,$18,$97,$17,$96
	dc.b	$1d,$9d,$9d,$9d,$9d,$9d,$1e,$9e,$9e,$9e,$9e,$9e,$1f,$9e,$9e,$9e,$9e,$9e,$1e,$9d,$9d,$9d,$9d,$9d
	dc.b	$20,$a0,$a0,$a0,$21,$a1,$a1,$a1,$22,$a2,$a2,$a2,$23,$a2,$a2,$a2,$22,$a1,$a1,$a1,$21,$a0,$a0,$a0
	dc.b	$24,$a4,$a4,$25,$a5,$a5,$26,$a6,$a6,$27,$a7,$a7,$28,$a7,$a7,$27,$a6,$a6,$26,$a5,$a5,$25,$a4,$a4
	dc.b	$29,$a9,$a9,$2a,$aa,$aa,$2b,$ab,$ab,$2c,$ac,$ac,$2d,$ac,$ac,$2c,$ab,$ab,$2b,$aa,$aa,$2a,$a9,$a9
	dc.b	$2e,$ae,$2f,$af,$30,$b0,$31,$b1,$32,$b2,$b2,$b2,$33,$b2,$b2,$b2,$32,$b1,$31,$b0,$30,$af,$2f,$ae

Colors_default:
	dc.w	$4a7,$4a8,$4a9,$4aa	;0-3
	dc.w	$020,$021,$022		;4-6
	dc.w	$031,$032,$033		;7-9
	dc.w	$152,$153,$154,$155	;a-d
	dc.w	$263,$264,$265,$266	;e-11
	dc.w	$385,$386,$387,$388	;12-15

	dc.w	$4a7,$5a7,$6a7,$7a7,$8a7,$9a7,$aa7	;16-1c
	dc.w	$020,$120,$220				;1d-1f
	dc.w	$031,$131,$231,$331			;20-23
	dc.w	$152,$252,$352,$452,$552		;24-28
	dc.w	$263,$363,$463,$563,$663		;29-2d
	dc.w	$385,$485,$585,$685,$785,$885		;2e-33

AutoScroll:
	move.l	Act_Scr_Structure,a6
	move.w	#7680,Scr_X_Fix(a6)
	cmp.w	#7680,Scr_X_Level_Pos(a6)
	bne.s	.out
	tst.b	no_time
	bne.s	.out
	lea	Area_Enter_Vector(pc),a1
	moveq	#23,d0
	move.w	Scr_X_Level_Pos(a6),d1
	move.w	Scr_Y_Level_Pos(a6),d2
	add.w	#$140,d1
	add.w	#$040,d2
	bsr	Search_Bob_Entry
.out:
	subq.b	#1,Flash_Verz
	bpl.s	.no_Flash
	tst.b	Flash_Flag
	beq.s	.new_flash
	btst	#1,Flash_Flag
	beq.s	.use1
	lea	PSplit5+18(pc),a0
	bra.s	.use0
.use1:
	lea	PSplit5+22(pc),a0
.use0:
	btst	#0,Flash_Flag
	beq.s	.switch_off
	move.w	#$0fff,(a0)
	clr.b	Flash_Verz
	bra.s	.goon
.switch_off:
	clr.w	(a0)
	jsr	rnd
	and.w	#3,d0
	move.b	d0,Flash_Verz
.goon:
	subq.b	#1,Flash_Flag
	rts
.new_flash:
	clr.w	PSplit5+18
	clr.w	PSplit5+22
	jsr	rnd
	and.w	#63,d0
	move.b	d0,Flash_Verz
	move.b	#15,Flash_Flag
.no_Flash:
	rts

Flash_Verz:	dc.b	1
Flash_Flag:	dc.b	0

Level3_Clist:
	bsr	swap_screens

	move.l	#Para_Clist,cop1lch(a5)

SetClist3:
	move.w	Scr_X_Level_Pos(a6),d0
	and.w	#15,d0
	moveq	#15,d1
	sub.w	d0,d1
	move.w	d1,main_shifter

	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	Scroll_Table(pc),a0
.loop:
	tst.w	(a0)
	bmi.s	.end
	move.w	2(a0),d0
	add.w	d0,(a0)
	and.w	#$1ff,(a0)
	move.w	(a0),d0
	lsr.w	#4,d0
	move.l	8(a0),d1
	btst	#4,d0
	beq.s	.ok
	addq.l	#2,d1
.ok:
	move.l	4(a0),a1

	move.w	d1,2(a1)
	add.w	#44,d1
	move.w	d1,6(a1)
	add.w	#44,d1
	move.w	d1,10(a1)

	and.w	#15,d0
	neg.w	d0
	add.w	#15,d0
	tst.w	12(a0)
	bmi.s	.use

	lsl.w	#4,d0
	or.w	main_shifter,d0
.use:
	move.w	d0,14(a1)

	lea	12(a0),a0

	bra.s	.loop

.end:
	rts

main_shifter:	dc.w	0


Scroll_Table:
	dc.w	0		;Scroll-Zustand
	dc.w	16*5		;Scroll-Speed
	dc.l	PSplit1		;Adress
	dc.l	Para_field	;GFX-Adress

	dc.w	0		;Scroll-Zustand
	dc.w	16*4		;Scroll-Speed
	dc.l	PSplit2		;Adress
	dc.l	Para_field+34*132	;GFX-Adress

	dc.w	0		;Scroll-Zustand
	dc.w	16*3		;Scroll-Speed
	dc.l	PSplit3		;Adress
	dc.l	Para_field+64*132	;GFX-Adress

	dc.w	0		;Scroll-Zustand
	dc.w	16*2		;Scroll-Speed
	dc.l	PSplit4		;Adress
	dc.l	Para_field+85*132	;GFX-Adress

	dc.w	0		;Scroll-Zustand
	dc.w	8		;Scroll-Speed
	dc.l	PSplit5		;Adress
	dc.l	Para_field+99*132	;GFX-Adress

	dc.w	0		;Scroll-Zustand
	dc.w	16*2		;Scroll-Speed
	dc.l	PSplit6		;Adress
	dc.l	Para_field+109*132	;GFX-Adress

	dc.w	0		;Scroll-Zustand
	dc.w	16*3		;Scroll-Speed
	dc.l	PSplit7		;Adress
	dc.l	Para_field+123*132	;GFX-Adress

	dc.w	0		;Scroll-Zustand
	dc.w	16*4		;Scroll-Speed
	dc.l	PSplit8		;Adress
	dc.l	Para_field+144*132	;GFX-Adress

	dc.w	0		;Scroll-Zustand
	dc.w	16*5		;Scroll-Speed
	dc.l	PSplit9		;Adress
	dc.l	Para_field+174*132	;GFX-Adress

	dc.w	0		;Scroll-Zustand
	dc.w	16*6		;Scroll-Speed
	dc.l	PSplit10	;Adress
	dc.l	Para_field+192*132	;GFX-Adress

	dc.w	-1


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

Level1_Clist:
	bsr	swap_screens

	move.l	#Main_Clist,cop1lch(a5)

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

	move.l	#planeb,d1

	swap	d0
	move	d0,2(a0)
	swap	d0
	move	d0,6(a0)
	add.l	d1,d0
	swap	d0
	move	d0,10(a0)
	swap	d0
	move	d0,14(a0)
	add.l	d1,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	para_ypos,d0
	divu	#127,d0
	and.w	#1,d0
	move.w	d0,Para_Flag
	swap	d0
	move.w	d0,Para_Ypos
.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:
	moveq	#para_b,d1
	mulu	#para_b*3,d0
	add.l	d6,d0
	move.w	d0,2(a0)
	swap	d0
	move.w	d0,18(a0)
	swap	d0
	add.l	d1,d0
	move.w	d0,6(a0)
	swap	d0
	move.w	d0,18+4(a0)
	swap	d0

	add.l	d1,d0
	move.w	d0,10(a0)
	swap	d0
	move.w	d0,18+8(a0)

	move.w	Priority,Prilab+2

	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.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_Buffer2:	dc.l	0,0,0

Para_Ypos:	dc.w	0
Para_Flag:	dc.w	0
Priority:	dc.w	4+4*8

Clist_oldcolpos1:	dc.w	-1
Clist_oldcolpos2:	dc.w	-1
Clist_oldcolpos3:	dc.w	-1

	;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

set_copcolors2:
	lea	C_buffer(pc),a0
	move.w	(a0)+,PSplit8+18
	move.w	(a0)+,PSplit8+22

	move.w	(a0)+,PSplit6+18
	move.w	(a0)+,PSplit6+22

	move.w	(a0)+,PSplit3+18
	move.w	(a0)+,PSplit3+22

	clr.w	PSplit5+18
	clr.w	PSplit5+22

	move.w	C_buffer+12,PCol0+2
	lea	C_buffer+14(pc),a0
	lea	PCol0+6(pc),a1
	moveq	#4-1,d7
.loop:
	move.w	(a0)+,(a1)
	addq.l	#4,a1
	dbf	d7,.loop

	rts

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

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

	addq.w	#1,Fade_Position
	bsr	Fade_to_Dest

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


.fade_out:
	bsr	Wait_tof

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

	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	#11-1,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


StartFlash:
	lea	Flash_Handler(pc),a1
	jmp	AddHandler

Flash_Handler:
	tst.b	flash_mode
	bne.s	.fade_down

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

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

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

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

	bra	.set_colors

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

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

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

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

	bra	.set_colors

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

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

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

.set_colors:
	cmp.w	#2,act_level
	bne.s	.no_col0
	bsr	set_copcolors2
	move.w	coltab,PSplit5+18
	move.w	coltab,PSplit5+22
.no_col0:
	bsr	init_parallax

	move.w	coltab,Back_Color1+2
	move.w	coltab,Back_Color2+2

	jmp	set_copcolors

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

;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
levelb1	=	132
levelh1	=	132
levelb2	=	132
levelh2	=	134
levelb3	=	500
levelh3	=	13

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

	Even
B_coltab:
	dc.w	$0000,$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

D_coltab:
	dc.w	$0CCB,$0789,$0A97,$0455,$0861,$0432,$FFFF
	dc.w	$0000,$0C99,$0822,$0944,$0B66,$0500,$0ECC,$0FFF

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

C_coltab:
	dc.w	$0ECC,$0FFF,$0944,$0B66,$0611,$0400
	dc.w	$0CCB,$0A97,$0455,$0861,$0432

Boss4_coltab:
	dc.w	$0CBB,$0789,$0A87,$0851,$0555,$0000


C_buffer:	ds.w	11

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

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

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

	dc.w	$0082,$0000
	dc.w	$0086,$0000
	dc.w	$0088,$0001

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

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

Para_Clist:
PCol_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

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	$0100,$6400
	dc.w	$0104,4+4*8

PCoplab1:
	dc.w	$00e0,$0004
	dc.w	$00e2,0
	dc.w	$00e8,$0004
	dc.w	$00ea,0+planeb
	dc.w	$00f0,$0004
	dc.w	$00f2,0+planeb*2
	dc.w	$010a,44*3-40
	dc.w	$00e4,Para_field/$10000
	dc.w	$00ec,Para_field/$10000
	dc.w	$00f4,Para_field/$10000

PSplit1:
	dc.w	$00e6,(Para_field)&$ffff
	dc.w	$00ee,(Para_field+44)&$ffff
	dc.w	$00f6,(Para_field+88)&$ffff
	dc.w	$0102,$0000

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

	dc.w	$5207,$fffe
PSplit2:
	dc.w	$00e6,(Para_field)&$ffff
	dc.w	$00ee,(Para_field+44)&$ffff
	dc.w	$00f6,(Para_field+88)&$ffff
	dc.w	$0102,$0000

	dc.w	$7007,$fffe
PSplit3:
	dc.w	$00e6,(Para_field)&$ffff
	dc.w	$00ee,(Para_field+44)&$ffff
	dc.w	$00f6,(Para_field+88)&$ffff
	dc.w	$0102,$0000

	dc.w	$019c,$0000
	dc.w	$019e,$0000

	dc.w	$8507,$fffe
PSplit4:
	dc.w	$00e6,(Para_field)&$ffff
	dc.w	$00ee,(Para_field+44)&$ffff
	dc.w	$00f6,(Para_field+88)&$ffff
	dc.w	$0102,$0000

	dc.w	$9307,$fffe
PSplit5:
	dc.w	$00e6,(Para_field)&$ffff
	dc.w	$00ee,(Para_field+44)&$ffff
	dc.w	$00f6,(Para_field+88)&$ffff
	dc.w	$0102,$0000

	dc.w	$0196,$0000
	dc.w	$0198,$0000

	dc.w	$9d07,$fffe
PSplit6:
	dc.w	$00e6,(Para_field)&$ffff
	dc.w	$00ee,(Para_field+44)&$ffff
	dc.w	$00f6,(Para_field+88)&$ffff
	dc.w	$0102,$0000

	dc.w	$0196,$0000
	dc.w	$0198,$0000

	dc.w	$ab07,$fffe
PSplit7:
	dc.w	$00e6,(Para_field)&$ffff
	dc.w	$00ee,(Para_field+44)&$ffff
	dc.w	$00f6,(Para_field+88)&$ffff
	dc.w	$0102,$0000

	dc.w	$b007,$fffe
PCol0:
	dc.w	$0182,$0000
	dc.w	$0186,$0000
	dc.w	$0188,$0000
	dc.w	$018a,$0000
	dc.w	$018c,$0000

	dc.w	$c007,$fffe
PSplit8:
	dc.w	$00e6,(Para_field)&$ffff
	dc.w	$00ee,(Para_field+44)&$ffff
	dc.w	$00f6,(Para_field+88)&$ffff
	dc.w	$0102,$0000

	dc.w	$019c,$0000
	dc.w	$019e,$0000

	dc.w	$de07,$fffe
PSplit9:
	dc.w	$00e6,(Para_field)&$ffff
	dc.w	$00ee,(Para_field+44)&$ffff
	dc.w	$00f6,(Para_field+88)&$ffff
	dc.w	$0102,$0000

	dc.w	$efdf,$fffe
	dc.w	$0108,44*3-40
PSplit10:
	dc.w	$00e2,(Para_field)&$ffff
	dc.w	$00ea,(Para_field+44)&$ffff
	dc.w	$00f2,(Para_field+88)&$ffff
	dc.w	$0102,$0000

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

	dc.w	$0086,Copjumpin&$ffff
	dc.w	$0084,Copjumpin/$10000
	dc.w	$008a,$0001			;Zur Score-Zeile springen!

;Area1:		include	W4_level2_area
Area2:		include	W4_level1_area
Area3:		include	W4_levelzg_area
