	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

;
;			    Level Daten
;
world_data	= $11200
Sound		= $70200

Macros		= world_data+$1555E
B_parallax	= world_data+$14E42
Level1		= world_data+$8000
Level2		= world_data+$EBB0
character	= world_data+$0
para_char	= world_data+$11600
para_map	= world_data+$11CC0

level_GFX	= world_data+$A3D0
AD_Bob		= world_data+$A0D0
Aqua		= world_data+$112C0

Back_field	= world_data+$12706
Back_chars	= world_data+$11CE6
Back_bob	= world_data+$127EA

Boss_bob	= world_data+$13FA2
Boss_ad_bob	= world_data+$14362

Water_GFX	= world_data+$E6B0

Krake_Smart	= world_data+$16646
Area2		= world_data+$1575E
Schuss_char	= world_data+$166BE

Dummy_Playfield	= world_data

Water_Buffer	= Rotate_Buffer
Rotate_Buffer2	= Water_Buffer+14080
Para_Buffer	= Rotate_Buffer2+20480
Boss_Ground_Buffer	= Rotate_Buffer+5000

bob00 	= $00000
msk00 	= $001c0
bob01 	= $00230
msk01 	= $003e0
bob02 	= $0044c
msk02 	= $0060c
bob03 	= $0067c
msk03 	= $0082c
bob04 	= $00898
msk04 	= $00988
bob05 	= $009c4
msk05 	= $00ac4
bob06 	= $00b04
msk06 	= $00d04
bob07 	= $00d84
msk07 	= $00f84
bob08 	= $01004
msk08 	= $011c4
bob09 	= $01234
msk09 	= $013f4
bob0a 	= $01464
msk0a 	= $01614
bob0b 	= $01680
msk0b 	= $016e8
bob0c 	= $01702
msk0c 	= $01762
bob0d 	= $0177a
msk0d 	= $017ea
bob0e 	= $01806
msk0e 	= $0181e
bob0f 	= $01824
msk0f 	= $01844
bob10 	= $0184c
msk10 	= $0187c
bob11 	= $01888
msk11 	= $018d0
bob12 	= $018e2
msk12 	= $01912
bob13 	= $0191e
msk13 	= $01976
bob14 	= $0198c
msk14 	= $01b0c
bob15 	= $01b6c
msk15 	= $01cec
bob16 	= $01d4c
msk16 	= $01ecc
bob17 	= $01f2c
msk17 	= $0216c
bob18 	= $021fc
msk18 	= $0243c
bob19 	= $024cc
msk19 	= $0261c
bob1a 	= $02670
msk1a 	= $02850
bob1b 	= $028c8
msk1b 	= $02ab8
bob1c 	= $02b34
msk1c 	= $02c74
bob1d 	= $02cc4
msk1d 	= $02e24
bob1e 	= $02e7c
msk1e 	= $02ecc
bob1f 	= $02ee0
msk1f 	= $02f60
bob20 	= $02f80
msk20 	= $03140
bob21 	= $031b0
msk21 	= $03370
bob22 	= $033e0
msk22 	= $035e0
bob23 	= $03660
msk23 	= $03860
bob24 	= $038e0
msk24 	= $03ae0
bob25 	= $03b60
msk25 	= $03e60
bob26 	= $03f20
msk26 	= $03f58
bob27 	= $03f66
msk27 	= $03fb6
bob28 	= $03fca
msk28 	= $0403a
bob29 	= $04056
msk29 	= $040d6
bob2a 	= $040f6
msk2a 	= $04176
bob2b 	= $04196
msk2b 	= $04206
bob2c 	= $04222
msk2c 	= $04252
bob2d 	= $0425e
msk2d 	= $04296
bob2e 	= $042a4
msk2e 	= $042d4

Abob00 	= $00000
Abob01 	= $00180

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

		dc.w	bob04,15*5,32/8	;Walker platt
		dc.w	bob05,16*5,32/8	;  "      "

		dc.w	bob08,28*5,32/8	;Kanone
		dc.w	bob14,16*5,48/8	;ZitterAal
		dc.w	bob15,16*5,48/8	;  "    "

		dc.w	bob17,24*5,48/8	;TintenFisch
		dc.w	bob18,24*5,48/8	;   "   "
		dc.w	bob19,14*5,48/8	;   "   "

		dc.w	bob1a,30*5,32/8	;Qualle
		dc.w	bob1b,31*5,32/8	;  ""

		dc.w	bob1c,20*5,32/8	;Muschel
		dc.w	bob1d,22*5,32/8	;  ""

		dc.w	bob20,28*5,32/8	;SchwimmWalker
		dc.w	bob21,28*5,32/8	;    "    "

		dc.w	bob1e,10*5,16/8	;MSchuss
		dc.w	bob1f,16*5,16/8	;   "

		dc.w	-1

Cue_Table1:	dc.w	100,145
		dc.w	1920,97
		dc.w	4230,129
		dc.w	4810,113
		dc.w	6150,81
		dc.w	8750,97


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

Special_SupplyX:
	lea	$dff000,a5
	waitblt
	move.l	Scr_Blt_Mask(a6),bltafwm(a5)
	move	Scr_Blt_A_Modulo(a6),bltamod(a5)
	move	Scr_Blt_D_Modulo(a6),bltdmod(a5)
	move	Scr_Blt_Con_0(a6),bltcon0(a5)
	clr.w	bltcon1(a5)

	move.l	a6,a4
	add.w	#Scr_Register_X,a4
	movem.l	(a4)+,d3/d5-d6/a1-a3

.loop:
	moveq	#0,d0
	move.b	(a1),d0
	add.w	d0,d0
	lea	Macros,a0
	moveq	#0,d1
	move.b	(a0,d0.w),d1

	bsr	Do_Calc_Char

	waitblt
	move.l	a0,bltapth(a5)
	move.l	a2,bltdpth(a5)
	move	Scr_Blt_Blit_Size(a6),bltsize(a5)
	waitblt
	move.l	a0,bltapth(a5)
	move.l	a3,bltdpth(a5)
	move	Scr_Blt_Blit_Size(a6),bltsize(a5)
	waitblt
	move.l	a0,bltapth(a5)
	move.l	d3,bltdpth(a5)
	move	Scr_Blt_Blit_Size(a6),bltsize(a5)

.Add_Pointers:
	moveq	#0,d0
	move	Scr_Level_Width(a6),d0
	add.l	d0,a1
	add	#16,d5
	cmp	Scr_Plane_Height(a6),d5
	blo.s	.ok
	sub	Scr_Plane_Height(a6),d5
	sub.l	Scr_X_Supply_Sub(a6),a2
	sub.l	Scr_X_Supply_Sub(a6),a3
	sub.l	Scr_X_Supply_Sub(a6),d3
.ok	add.l	Scr_X_Supply_Add(a6),a2
	add.l	Scr_X_Supply_Add(a6),a3
	add.l	Scr_X_Supply_Add(a6),d3

	subq	#1,d6
	beq.s	.Finish
	subq	#1,d4
	bne	.loop

	movem.l	d3/d5-d6/a1-a3,-(a4)
	rts

.Finish:
	subq	#1,d4
	move.l	#RoutRts,Scr_Rout_X(a6)
	rts

Special_Calc_Char:
	lea	Macros,a0
	subq.l	#1,a1
	bsr	Do_Calc_Char
	addq.l	#1,a1
	rts

Special_Set_Char:
	movem.l	d0/d1/a1,-(sp)
	lea	-1(a0),a1
	move.w	d2,d0
	and.w	#255,d0
	add.w	d0,d0
	lea	Macros,a0
	moveq	#0,d1
	move.b	(a0,d0.w),d1
	move.w	#-1,bltalwm(a5)
	bsr	Do_Calc_Char
	move.l	a0,d2
	movem.l	(sp)+,d0/d1/a1
	bra	Set_Char_In

Do_Calc_Char:
	tst.b	1(a0,d0.w)
	bpl	.normal

	btst	#6,1(a0,d0.w)
	bne	.blit_full_back

	mulu	Scr_Blt_Len(a6),d1	;Modul-adresse berechnen
	move.l	Scr_Character(a6),a0
	lea	(a0,d1.w),a0

	;Berechnen der Blit-Maske!

	move.l	#Work_Buffer4,d0

	waitblt

	moveq	#6,d2

	move.w	d2,bltamod(a5)
	move.w	d2,bltbmod(a5)
	move.w	d2,bltcmod(a5)
	move.w	#0,bltdmod(a5)

	move.l	a0,bltapth(a5)
	addq.l	#2,a0
	move.l	a0,bltbpth(a5)
	addq.l	#2,a0
	move.l	a0,bltcpth(a5)

	move.l	d0,bltdpth(a5)

	move.w	#$0f02,bltcon0(a5)
	clr.w	bltcon1(a5)

	move.w	#64*16+1,bltsize(a5)

	waitblt

	clr.w	bltamod(a5)

	addq.l	#2,a0
	move.l	a0,bltbpth(a5)
	move.l	d0,bltapth(a5)
	move.l	d0,bltdpth(a5)

	move.w	#$0dcf,bltcon0(a5)

	move.w	#64*16+1,bltsize(a5)

	waitblt

	;Maske ist berechnet!

	subq.l	#6,a0
	move.l	a0,-(sp)

	move.l	a1,d0
	sub.l	Scr_Level(a6),d0
	divu	#600,d0
	move.l	d0,d2
	swap	d2
	asl.w	#6,d0
	and.w	#63,d2
	add.w	d2,d0
	lea	Aqua,a0
	moveq	#0,d1
	move.b	(a0,d0.w),d1		;Dieses Modul WIRD geblittet.

	mulu	Scr_Blt_Len(a6),d1	;Modul-adresse berechnen
	add.l	Scr_Character(a6),d1

	move.l	#Work_Buffer4,d0
	move.l	#Work_Buffer4+32,d2

	move.l	(sp)+,a0

	clr.w	bltamod(a5)
	move.w	#6,bltdmod(a5)
	move.w	#$0fca,bltcon0(a5)

	move.l	d7,-(sp)

	moveq	#3,d7
.mask_loop:
	move.l	d0,bltapth(a5)
	move.l	a0,bltbpth(a5)
	move.l	d1,bltcpth(a5)
	move.l	d2,bltdpth(a5)

	move.w	#64*16+1,bltsize(a5)

	waitblt

	addq.l	#2,a0
	addq.l	#2,d1
	addq.l	#2,d2

	dbf	d7,.mask_loop

	move.l	(sp)+,d7

	move.l	#Work_Buffer4+32,a0

	move	Scr_Blt_A_Modulo(a6),bltamod(a5)
	move	Scr_Blt_D_Modulo(a6),bltdmod(a5)
	move	Scr_Blt_Con_0(a6),bltcon0(a5)

	bra.s	.blit

.blit_full_back:
	;Aus a1 X und Y Anteil herausrechnen.
	move.l	a1,d0
	sub.l	Scr_Level(a6),d0
	divu	#600,d0
	move.l	d0,d2
	swap	d2
	asl.w	#6,d0
	and.w	#63,d2
	add.w	d2,d0
	lea	Aqua,a0
	moveq	#0,d1
	move.b	(a0,d0.w),d1		;Dieses Modul WIRD geblittet.
.normal:
	mulu	Scr_Blt_Len(a6),d1	;Modul-adresse berechnen
	move.l	Scr_Character(a6),a0
	lea	(a0,d1.w),a0
.blit:
	rts

Check_Player:
	move.w	T_posY,d0
;	addi.w	#16,d0
	cmp.w	Water_Ypos,d0
	ble.s	.under
	tst.b	.flag
	bne.s	.no_init
	tst.b	T_wheel
	bne.s	.no_init
		move.w	T_posX,d0
		addq.w	#8,d0
		bsr	init_platsch
;		move.l	#water_player,player.w
		st	.flag
		clr.l	T_speedY
		clr.w	R_radius1		;Reused as Blubber-Delay !
		sf	T_rope
		sf	T_swing
;		clr.w	pl_count.w		;Phase & Delay
	bra.s	.no_init
.under:
	tst.b	.flag
	beq.s	.no_init
	clr.l	T_speedY
	st	T_force_jump
		move.w	T_posX,d0
		addq.w	#8,d0
		bsr	init_platsch
	sf	.flag
;		clr.w	pl_count.w
.no_init:
	tst.b	.flag
	bne	Water_Player
	bra	Handle_Player

.flag:	dc.b	0
	dc.b	0

Water_Player:
	tst.b	T_freeze
	beq.s	.no_freeze
	move.w	T_joyforce,JoyFlags
.no_freeze:

;	st	pl_standing.w			;Clear standing-flag
	move.w	Scr_Scrolled_X(a6),d0	;Player mitscrollen X
	sub.w	d0,T_posX
	sub.w	d0,R_xpos

	move.w	Scr_Scrolled_Y(a6),d0	;mitscrollen Y
	sub.w	d0,T_posY
	sub.w	d0,R_ypos

	tst.b	T_dieing
	bne	Handle_death

	move.w	T_posX,T_oldX
	move.w	T_posY,T_oldY

	tst.b	T_runout
	bne.s	.no_check1

		cmpi.w	#220,T_posY	;Below lower border ?
		bge	fast_die

.no_check1:

	tst.b	T_energy
	beq	Start_dieing

	btst	#SMART,JoyFlags
	beq.s	.no_smart
	tst.b	T_bombs
	beq.s	.no_smart
	subq.b	#1,T_bombs
	st	smart_bomb
	PLAY_FX	#9
	bclr	#SMART,JoyFlags
.no_smart:

	tst.w	BackFlag
	bne.s	.no_blubb

	subq.w	#1,R_radius1			;Blubber-Delay
	bpl.s	.no_blubb
		move.w	#80,R_radius1
		bsr	rnd
		andi.w	#63,d0
		add.w	d0,R_radius1
		move.w	T_posX,d1
		move.w	T_posY,d2
		addq.w	#7,d1
		tst.w	T_face
		beq.s	.blubbok
		addi.w	#12,d1
.blubbok:
		addq.w	#8,d2
		bsr	start_bobble
		clr.l	speed(a4)
.no_blubb:

	move.l	#T_swim_tab,T_antab
	move.w	#4,T_ansize
	moveq	#4,d0
	move.b	JoyFlags,d1
	and.b	#1<<JUMP+1<<DOWN+1<<RIGHT+1<<LEFT+1<<UP,d1
	beq.s	.ok
	moveq	#2,d0
.ok:
	move.w	d0,T_anspeed

	move.w	T_posY,d0
	subi.w	#10,d0
	cmp.w	Water_Ypos,d0
	ble.s	.not_up
	btst	#UP,JoyFlags		;Up ?
	beq.s	.not_up
	cmpi.l	#$ffff0000,T_speedY
	ble.s	.not_up
	move.l	#$ffff0000,T_speedY
.not_up:
	btst	#DOWN,JoyFlags			;Down ?
	beq.s	.not_down
	cmpi.l	#$00020000,T_speedY
	bge.s	.not_down
		addi.l	#$00002000,T_speedY
		cmp.l	#$00020000,T_speedY
		ble.s	.not_down
		move.l	#$00020000,T_speedY
.not_down:

	cmpi.w	#223-48,T_posY
	bge	.no_feet_check
	bsr	Test_feet			;Ground detected ?
	beq	.no_feet_check
	tst.b	W_koll_flag
	bgt	.no_feet_check2
	st	W_koll_flag		;Wir stehen!

	tst.w	T_speedY		;Yes, down ?
	bmi	.moveing_up
	clr.l	T_speedY		;Yes, clear speed
	bsr	T_floor_align
	clr.w	T_posY+2
	btst	#DOWN,JoyFlags		;Ducking ?
	beq.s	.no_ducking
	move.w	#22,T_anim
	clr.w	T_ansize

	move.w	T_forceX,d6
	bsr	T_move_no_dir
	btst	#LEFT,JoyFlags
	bne	.dleft
	btst	#RIGHT,JoyFlags
	bne	.dright
	bra	.duck_end
.moveing_up:
	move.b	#1,W_koll_flag		;Wir sind in einer Wand!
	bra.s	.no_feet_check2
.dleft:
	clr.w	T_face
	bra	.duck_end

.dright:
	move.w	#-1,T_face
	bra	.duck_end

.no_ducking:
	move.b	JoyFlags,d0
	andi.b	#1<<LEFT+1<<RIGHT,d0			;Any left & right ?
	bne.s	.floor_done1		;No...
	move.w	#23,T_anim		;No, set stand-phase
	bra.s	.no_feet_check2
.no_feet_check:
	sf	W_koll_flag
.no_feet_check2:
	cmp.l	#$20000,T_speedY
	bge.s	.floor_done1
	add.l	#$0a00,T_speedY
	cmp.l	#$20000,T_speedY
	ble.s	.floor_done1
	move.l	#$20000,T_speedY
.floor_done1:
.floor_done:

	bsr	T_move_x
.duck_end:

	move.w	T_posY,d0			;Under water ?
	sub.w	#16,d0
	addq.w	#5,d0
	cmp.w	Water_Ypos,d0
	bgt.s	.not_surface
	addq.w	#5,d0
	cmp.w	Water_Ypos,d0		;Stop player from floating up into the sky
	bgt.s	.lab0
	tst.w	T_speedY
	bpl.s	.lab0
	clr.l	T_speedY
.lab0:

	btst	#JUMP,JoyFlags		;Final jump-out pressed ?
	beq.s	.not_jumpout
	tst.b	T_rejump
	bne.s	.no_up
	move.l	#-2<<16,T_speedY	;Yes, speed-up player
.not_jumpout:
	sf	T_rejump
	bra.s	.no_up
.not_surface:
	btst	#JUMP,JoyFlags		;Yes, check for fast-accelleration
	beq.s	.no_jump
		tst.b	T_rejump
		bne.s	.no_up
		tst.w	T_speedY
		bmi.s	.lab1
		clr.l	T_speedY
.lab1:
		cmpi.l	#-2<<16,T_speedY
		ble.s	.lab2
		subi.l	#$20000,T_speedY
.lab2:
		st	T_rejump
	bra.s	.no_up
.no_jump:
		sf	T_rejump
.no_up:


;	tst.b	pl_runout.w
;	bne.s	.no_headcheck

	cmpi.w	#-16,T_posY
	ble.s	.stop

	move.w	T_posX(pc),d0
	move.w	T_posY(pc),d1
;	add.w	#8,d1
	bsr	check_kollision
	beq.s	.no_headcheck
.stop:
	tst.w	T_speedY
	bpl.s	.no_headcheck
	clr.l	T_speedY
.no_headcheck:

	move.l	T_speedY,d0
	add.l	d0,T_posY

water_end:
	tst.b	T_hit
	bne.s	.no_button
	bsr	T_handle_button		;Kmmert sich um den kmmerlichen einen Button!
.no_button:
	jmp	T_handle_end

W_koll_flag:	dc.b	0
		dc.b	0

start_bobble:
	add.w	Scr_X_Level_Pos(a6),d1
	add.w	Scr_Y_Level_Pos(a6),d2
	moveq	#15,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.b	#BOB_NOCOL,Bob_Used(a4)

	moveq	#2,d6
	swap	d6
	bsr	rnd
	andi.w	#3,d0
	swap	d0
	add.l	d6,d0
	move.l	d0,speed(a4)

	rts

		rsset Bob_Special_1
anim_delay	rs.b	1
move_delay	rs.b	1
swing_index	rs.w	1
speed		rs.l	1

Bobble:
	subq.b	#1,move_delay(a4)
	bpl.s	.no_move
		addq.b	#2,move_delay(a4)
		move.w	swing_index(a4),d0
		move.b	xswing(pc,d0.w),d0
		ext.w	d0
		add.w	d0,Bob_X_Position(a4)
		addq.w	#1,swing_index(a4)
		andi.w	#7,swing_index(a4)

		tst.w	speed(a4)
		bne.s	.no_move
		subq.w	#1,Bob_Y_Position(a4)
.no_move:
	move.w	speed(a4),d0
	beq.s	.no_move2
	cmpi.w	#1,d0
	ble.s	.move
		subi.l	#$00002000,speed(a4)
.move:
	sub.w	d0,Bob_Y_Position(a4)
.no_move2:

	subq.b	#1,anim_delay(a4)
	bpl.s	.no_anim
	addq.b	#5,anim_delay(a4)
	bsr	Get_Next_Bob_Frame
.no_anim:
	move.w	Bob_Y_Position(a4),d0
	sub.w	Scr_Y_Level_Pos(a6),d0
	subq.w	#8,d0
	cmp.w	Water_Ypos,d0
	blt.s	.free_bobble
	bra	Test_Bob_Out
.free_bobble:
	bra	Out_Bob_Damage

xswing:
	dc.b	-2,-1,0,1,2,1,0,-1

Bobble_AnimTable:
		dc.l	level_GFX+bob2c,level_GFX+msk2c
		dc.w	0,0,6,2,2,28,28

		dc.l	level_GFX+bob2d,level_GFX+msk2d
		dc.w	0,0,7,2,2,28,28

		dc.l	level_GFX+bob2e,level_GFX+msk2e
		dc.w	0,0,6,2,2,28,28

		dc.w	ENTRY_END
		dc.l	Bobble_AnimTable

T_swim_tab:	dc.b	37,38,39,38

init_platsch:
	move.w	d0,d1
	add.w	Scr_X_Level_Pos(a6),d1
	move.w	Water_GFX_Ypos,d2
	add.w	Scr_Y_Level_Pos(a6),d2
	moveq	#15,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.l	#Plitsch,Bob_Routine(a4)
	move.l	#Plitsch_AnimTable,Bob_Next_Anim(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
;	PLAY_FX	#31

	bra	Get_Next_Bob_Frame

Plitsch:
	move.l	d2,-(sp)
	move.w	Water_GFX_Ypos,d2
	subq.w	#8,d2
	add.w	Scr_Y_Level_Pos(a6),d2
	move.w	d2,Bob_Y_Position(a4)

	move.l	(sp)+,d2

	subq.b	#1,Bob_Special_1(a4)
	bpl	Test_Bob_Out
	addq.b	#3,Bob_Special_1(a4)
	bsr	Get_Next_Bob_Frame

	bra	Test_Bob_Out

Plitsch_AnimTable:
		dc.l	level_GFX+bob26,level_GFX+msk26
		dc.w	0,9,7,2,2,28,28

		dc.l	level_GFX+bob27,level_GFX+msk27
		dc.w	0,6,10,2,2,28,28

		dc.l	level_GFX+bob28,level_GFX+msk28
		dc.w	0,2,14,2,2,28,28

		dc.l	level_GFX+bob29,level_GFX+msk29
		dc.w	0,0,16,2,2,28,28

		dc.l	level_GFX+bob2a,level_GFX+msk2a
		dc.w	0,0,16,2,2,28,28

		dc.l	level_GFX+bob2b,level_GFX+msk2b
		dc.w	0,2,14,2,2,28,28

		dc.l	level_GFX+bob26,level_GFX+msk26
		dc.w	0,9,7,2,2,28,28

		dc.w	END_OUT_DAMAGE


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	Steg_Info_1	;11 Rotierender Steg
		dc.l	Walker_Info_1	;12 Ground Walker
		dc.l	Canon_Info_1	;13 Kanone
		dc.l	Krabbe_Info_1	;14 Krabbe
		dc.l	Bubble_Info_1	;15 Bubble
		dc.l	Drop_Info_1	;16 Tropfen

		dc.l	Water_Info_1	;17 Water
		dc.l	Floss_Info_1	;18 Flo
		dc.l	EFisch_Info_1	;19 E-Fisch
		dc.l	Qualle_Info_1	;20 Qualle
		dc.l	Tinte_Info_1	;21 Tintenfisch
		dc.l	Muschel_Info_1	;22 Mupfel
		dc.l	MSchuss_Info_1	;23 Mupfelschuss
		dc.l	CuePoint_Info_2	;24 CuePointField
		dc.l	WSnake_Info_1	;25 Wasserschlange
		dc.l	Boss_Info_1	;26 Boss

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Floss_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	64		;Breite in Pixels
		dc.w	24		;Hhe in Pixels
		dc.w	4		;Tiefe in Planes
		dc.w	8		;Breite einer Zeile der Maske in Bytes
		dc.w	4*2		;A Modulo
		dc.w	4*2*4		;B Modulo
		dc.w	planeb*4	;D Modulo
		dc.w	planeb		;Save Modulo
		dc.l	$ffff0000	;Bob_I_AFWM
		dc.w	5		;Blit-Breite in Wrtern
		dc.w	10		;Blit-Breite in Bytes
		dc.w	-1		;Hitpoints
		dc.l	Start_Floss	;Routine, die Bob verwaltet
		dc.l	Floss_AnimTable	;Zeiger auf nchste Anim

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Start_Bonus2:
	tst.w	Bob_Special_4(a4)
	bpl	Start_Bonus
	and.w	#$7fff,Bob_Special_4(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	bra	Start_Bonus

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Boss Welt II
*---------------------------------------------------------------------------
Start_Boss:
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	st	no_time
	move.w	#1310,Scr_X_Fix(a6)
	move.w	#1424,Scr_Y_Fix(a6)
	cmp.w	#1310,Scr_X_Level_Pos(a6)
	bne	.out

	SONGPLAY #4

	move.l	#Repos_Player_Dead,Dead_Vector

	move.l	#Boss,Bob_Routine(a4)
	move.b	#BOB_TRUE,Bob_Used(a4)
	clr.w	Bob_Special_1(a4)		;Mode 0

	move.l	#Set_Boss_Clist,Clist_Handler
	lea	BCol_lab3(pc),a1
	lea	coltab+2,a0
	moveq	#14,d7
.copy_them:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.copy_them

	st	Krake_flag			;Frs aufblenden!

	waitblt

	move.l	#Boss_Ground_Buffer,bltdpth(a5)
	clr.w	bltdmod(a5)
	clr.w	bltamod(a5)
	move.l	#-1,bltalwm(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	Scr_Y_Play_Anf(a6),d0
	add.w	#12*16,d0
	cmp.w	#208+48,d0
	blt.s	.ok
	sub.w	#208+48,d0
.ok:
	mulu	#planeb*4,d0

	add.l	Scr_Refresh_Field(a6),d0
	moveq	#0,d1
	move.w	Scr_X_Level_Pos(a6),d1
	lsr.w	#3,d1
	and.w	#$fffe,d1
	add.l	d1,d0

	move.l	d0,bltapth(a5)
	move.w	#64*16*4+22,bltsize(a5)

	waitblt

	move.l	#Dummy_Playfield,bltdpth(a5)
	clr.w	bltdmod(a5)
	move.w	#$0100,bltcon0(a5)
	move.w	#512*64+0,bltsize(a5)				;Krakenfield lschen!

	waitblt

	move.w	#340,Krake_posX
	move.w	#50,Krake_posY

	bsr	wait_tof
	move.l	#Boss_Clist,cop1lch(a5)
	bsr	Set_Boss_Clist
	bsr	wait_tof

	;Background aufbauen

	move.w	#planeb-2,bltdmod(a5)
	clr.w	bltamod(a5)
	move.w	#$09f0,bltcon0(a5)

	lea	Back_field,a0
	move.l	#$40002,d2
	move.l	#$50002,d3
	move.l	#$60002,d4

	moveq	#0,d1
	move.w	Scr_X_Level_Pos(a6),d1
	lsr.w	#3,d1
	and.w	#$fffe,d1
	add.l	d1,d2
	add.l	d1,d3
	add.l	d1,d4

	moveq	#11,d7
.yloop:
	moveq	#18,d6
.xloop:
	move.l	d4,bltdpth(a5)
	moveq	#0,d0
	move.b	(a0)+,d0
	mulu	#32*3,d0
	add.l	#Back_chars,d0
	move.l	d0,bltapth(a5)

	move.w	#$09f0,bltcon0(a5)
	tst.b	-1(a0)
	bne.s	.bok
	move.w	#$0100,bltcon0(a5)
.bok:
	move.w	#64*16*3+1,bltsize(a5)

	waitblt

	move.l	d3,bltdpth(a5)
	move.l	d0,bltapth(a5)
	move.w	#64*16*3+1,bltsize(a5)

	waitblt

	move.l	d2,bltdpth(a5)
	move.l	d0,bltapth(a5)
	move.w	#64*16*3+1,bltsize(a5)

	waitblt

	addq.l	#2,d2
	addq.l	#2,d3
	addq.l	#2,d4

	dbf	d6,.xloop

	add.l	#planeb-(19*2)+(planeb*(3*15+2)),d2
	add.l	#planeb-(19*2)+(planeb*(3*15+2)),d3
	add.l	#planeb-(19*2)+(planeb*(3*15+2)),d4
	dbf	d7,.yloop


	move.l	#Dummy_Playfield+80*3*60+50,bltdpth(a5)
	move.l	#Boss_ad_bob,bltapth(a5)
	clr.w	bltamod(a5)
	move.w	#80-10,bltdmod(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#64*3*80+5,bltsize(a5)			;Krakenkrper blitten!

	waitblt

	moveq	#0,d3

	lea	arm1(pc),a0
	bsr	blit_arm2

	lea	arm2(pc),a0
	bsr	blit_arm2

	lea	arm3(pc),a0
	bsr	blit_arm2

	lea	arm4(pc),a0
	bsr	blit_arm2

	clr.w	Scr_Y_Play_Anf(a6)

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

	lea	Convert_Table1(pc),a0
	bsr	Convert_to_3planes
	move.l	#Krake_Smart,Smart_Structure+Bob_Graphics
	move.l	#Krake_Smart+90,Smart_Structure+Bob_Mask

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

	move.l	#Blit_Boss,SFX_Handler

	clr.w	Fade_Position

	lea	Boss_Blend1(pc),a1
	jsr	AddHandler

	bsr	Boss_Kill

	move.l	a4,-(sp)

	moveq	#6-1,d7
.insert_loop:
	move.l	a4,a3

	movem.l	d7/a3,-(sp)

	moveq	#0,d1
	moveq	#0,d2
	moveq	#26,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	movem.l	(sp)+,d7/a3
	move.l	a4,Bob_Special_6(a3)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.l	#Boss_Slave,Bob_Routine(a4)
	move.w	#50,Bob_Power(a4)
	move.w	d7,Bob_Special_1(a4)
	dbf	d7,.insert_loop
	move.l	(sp)+,a4
.out:
	rts

	;Alle anderen Objekte lschen!
Boss_Kill:
	move.l	Act_Bob_Structure,a0
	moveq	#BOB_MAXIMUM-1,d7
.kloop:
	cmp.l	a0,a4
	beq.s	.next
	move.b	#BOB_FALSE,Bob_Used(a0)
.next:
	lea	BOB_ENTRY_LENGTH(a0),a0
	dbf	d7,.kloop
	rts

Boss_coltab:
	dc.w	$0796,$08a8,$0353,$0980,$0961,$0121,$01AD
	dc.w	$07AA,$0482,$0566,$0288,$0222,$06CA,$0FFF
	dc.w	$0fff,$0fff,$0fff,$0fff,$0fff,$0fff,$0fff
	dc.w	$0000,$0080,$06bf,$0386,$0061,$00c1,$0fff

Boss_Blend1:

	cmp.w	#17,Fade_Position
	beq.s	.kill
	move.w	Fade_Position(pc),d7
	lea	Boss_coltab(pc),a0	;Source
	lea	C_buffer,a1		;Destination
	move.w	#6,d6
	bsr	Do_Fade_colors
	tst.w	half_pixel
	bne.s	.no_add
	addq.w	#1,Fade_Position
.no_add:
	lea	C_buffer,a0
	lea	BCol_lab2(pc),a1
	moveq	#6,d7
.loop:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.loop
	rts

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

Boss:
	bsr	handle_repos1

	bsr	Boss_Set_Pos

	bsr	Standart_Hit_Handler
	beq	Boss_Destruct

	lea	Boss_coltab+14(pc),a0
	tst.w	Bob_Hit(a4)
	beq.s	.set
	lea	Boss_coltab+28(pc),a0
	bra.s	.use			;Weiss aufblitzen!
.set: 
	tst.b	flash_count
	bne.s	.no_colors
.use:
	lea	BCol_lab2+8*4(pc),a1
	moveq	#6,d7
.loop:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.loop
.no_colors:
	move.w	Bob_Special_1(a4),d0
	jmp	jumptab(pc,d0.w)

jumptab:
	bra.w	B_Move_in
	bra.w	B_Wait
	bra.w	B_Go_up
	bra.w	B_Swim
	bra.w	B_Move_out
	bra.w	B_Attack

B_Move_in:
	subq.w	#1,Krake_posX
	cmp.w	#140,Krake_posX
	beq.s	.next

	bsr	Boss_Wiggle

	bra	do_zitter
.next:
	addq.w	#4,Bob_Special_1(a4)
	move.w	#40,Bob_Special_3(a4)
	rts

B_Wait:
	subq.w	#1,Bob_Special_3(a4)
	bne.s	.ok
.next:
	addq.w	#4,Bob_Special_1(a4)
.ok:
	tst.w	quarter_pixel
	bne.s	.out
	addq.w	#1,Krake_posY
	cmp.w	#59,Krake_posY
	beq.s	.next
.out:
	bsr	Check_Attack

	rts

B_Go_up:
	bsr	do_zitter
	tst.w	half_pixel
	bne.s	.out
	subq.w	#1,Krake_posY
	cmp.w	#50,Krake_posY
	bne.s	.out

	move.w	#240,Bob_Special_3(a4)
	addq.w	#4,Bob_Special_1(a4)
	clr.w	Bob_Special_2(a4)
.out:
	bra	Check_Attack

B_Swim:
	subq.w	#1,Bob_Special_3(a4)
	beq.s	.next

	bsr	Check_Attack

	bsr	Boss_Wiggle
	bra	do_zitter
.next:
	jsr	rnd
	and.w	#127,d0
	cmp.w	#63,d0
	blt.s	.go_away

	move.w	#4,Bob_Special_1(a4)
	move.w	#40,Bob_Special_3(a4)
	rts

.go_away:
	move.w	#16,Bob_Special_1(a4)
	move.w	#1,Bob_Special_3(a4)
	rts

Check_Attack:
	move.w	Krake_posY,d0
	cmp.w	T_posY,d0
	bgt.s	.no
	add.w	#80,d0
	cmp.w	T_posY,d0
	blt.s	.no
	move.w	#20,Bob_Special_1(a4)
	move.w	#7<<3,Bob_Special_3(a4)	;Speed
.no:
	rts

B_Move_out:
	move.w	Bob_Special_3(a4),d0
	add.w	d0,Krake_posX
	cmp.w	#200,Krake_posX
	bge.s	.next

	tst.w	Bob_Hit(a4)
	beq.s	.ok
	move.w	#3,Bob_Special_3(a4)
.ok:
	bsr	Boss_Wiggle

	bra	do_zitter
.next:
	move.w	#200,Krake_posX
	clr.l	Bob_Special_1(a4)
	move.w	#50,Krake_posY

	rts

B_Attack:
	move.w	#50,Krake_posY
	move.w	Bob_Special_3(a4),d0
	lsr.w	#3,d0
	sub.w	d0,Krake_posX
	subq.w	#1,Bob_Special_3(a4)
	bne.s	.out
.next:
	move.w	#16,Bob_Special_1(a4)
	move.w	#1,Bob_Special_3(a4)
.out:
	bsr	Boss_Wiggle
	bra	do_zitter

Boss_Wiggle:
	subq.b	#1,Bob_Special_2(a4)
	bpl.s	.an_ok
	addq.b	#2,Bob_Special_2(a4)
	addq.b	#2,Bob_Special_2+1(a4)
	and.b	#31,Bob_Special_2+1(a4)
	moveq	#0,d0
	move.b	Bob_Special_2+1(a4),d0
	lea	.wiggle_tab(pc),a0
	move.w	(a0,d0.w),d1
	add.w	d1,Krake_posY
.an_ok:
	rts

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

Boss_Destruct:
	lea	Boss_coltab+14(pc),a0
	lea	BCol_lab2+8*4(pc),a1
	moveq	#6,d7
.loop:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.loop

	move.l	#Boss_Die1,Bob_Routine(a4)
	move.l	#Fade3,Fade_Vector
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.w	#200,Explo_Anz
	move.w	#127,Explo_Xsize
	move.w	#127,Explo_Ysize
	lea	Start_Explos(pc),a1
	bra	AddHandler

Boss_Set_Pos:
	move.w	Krake_posX,d0
	add.w	Scr_X_Level_Pos(a6),d0
	add.w	#100,d0
	move.w	d0,Bob_X_Position(a4)

	move.w	Krake_posY,d1
	add.w	Scr_Y_Level_Pos(a6),d1
	move.w	d1,Bob_Y_Position(a4)

	move.l	a4,a0
	lea	Offset_tab(pc),a1
	moveq	#6-1,d7
.loop:
	move.l	Bob_Special_6(a0),a0

	add.w	(a1)+,d0
	add.w	(a1)+,d1
	move.w	d0,Bob_X_Position(a0)
	move.w	d1,Bob_Y_Position(a0)

	dbf	d7,.loop
	rts

Offset_tab:
	dc.w	16,0, -50-16,-40, -36,128, 110,-32, 20,-40, -28-44,0

Boss_Slave:
	tst.b	Boss_Dead
	beq.s	.ok
	move.b	#BOB_NOCOL,Bob_Used(a4)
.ok:
	move.w	Bob_Special_1(a4),d0
	mulu	#22,d0
	add.l	#Boss_KollTable,d0
	move.l	d0,Bob_Act_Anim(a4)		;Fr Kollision!

	move.w	Bob_Special_1(a4),d0
	beq.s	.out

	cmp.b	Next_Arm(pc),d0
	bne.s	.out

	move.l	Bob_Act_Anim(a4),a0

	bsr	Standart_Hit_Handler
	beq.s	.kill_arm

	tst.w	Bob_Hit(a4)
	beq.s	.out
	move.w	8(a0),d0
	subq.w	#1,d0
	bset	d0,Boss_ArmFlash

.out:
	rts

.kill_arm:
	addq.b	#1,Next_Pos
	moveq	#0,d0
	move.b	Next_Pos(pc),d0
	lea	Next_Tab(pc),a1
	move.b	(a1,d0.w),Next_Arm

	move.l	#.out,Bob_Routine(a4)
	move.w	8(a0),d0
	subq.w	#1,d0
	bset	d0,Boss_ArmWeg
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.w	#50,Explo_Anz
	move.w	#63,Explo_Xsize
	move.w	#63,Explo_Ysize
	move.w	Bob_X_Position(a4),Explo_Xpos
	move.w	Bob_Y_Position(a4),Explo_Ypos
	lea	Start_Explos(pc),a1
	bra	AddHandler

Boss_ArmFlash:	dc.b	0
Boss_ArmWeg:	dc.b	0
Boss_Dead:	dc.w	0

Next_Pos:	dc.b	0
Next_Arm:	dc.b	3

Next_Tab:	dc.b	3,2,1,4,0,0

Boss_AnimTable:
		dc.l	level_GFX+bob22,level_GFX+msk22		;Auge
		dc.w	0,0,32,2,2,16,16

Boss_KollTable:
		dc.l	level_GFX+bob22,level_GFX+msk22		;Krper
		dc.w	5,0,32,0,0,80,55

		dc.l	level_GFX+bob22,level_GFX+msk22		;Arm 1
		dc.w	3,0,32,2,2,80,30
		dc.l	level_GFX+bob22,level_GFX+msk22		;Arm 2
		dc.w	2,0,32,2,2,80,30
		dc.l	level_GFX+bob22,level_GFX+msk22		;Arm 4
		dc.w	4,0,32,2,2,80,30
		dc.l	level_GFX+bob22,level_GFX+msk22		;Arm 3
		dc.w	1,0,32,2,2,28,64

		dc.l	level_GFX+bob22,level_GFX+msk22		;Auge-Schutz
		dc.w	5,0,32,2,-4,0,0				;16,24

Start_Explos:
	subq.w	#1,Explo_Anz
	beq.s	.kill
	bsr	rnd
	move.w	d0,d1
	move.w	Explo_Xsize,d0
	and.w	d0,d1
	add.w	Explo_Xpos,d1
	bsr	rnd
	move.w	d0,d2
	move.w	Explo_Ysize,d0
	and.w	d0,d2
	add.w	Explo_Ypos,d2
	moveq	#1,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.b	#BOB_NOCOL,Bob_Used(a4)
	rts
.kill:
	move.l	#Return,-4(a0)
	rts

Explo_Anz:	dc.w	0
Explo_Xsize:	dc.w	0
Explo_Ysize:	dc.w	0
Explo_Xpos:	dc.w	0
Explo_Ypos:	dc.w	0

Boss_Die1:
	st	Boss_Dead
	move.w	Krake_posX,d0
	add.w	Scr_X_Level_Pos(a6),d0
	move.w	d0,Explo_Xpos
	move.w	Krake_posY,d0
	sub.w	#50,d0
	add.w	Scr_Y_Level_Pos(a6),d0
	move.w	d0,Explo_Ypos
	addq.w	#1,Krake_posX
	cmp.w	#310,Krake_posX
	beq.s	.next_step
	tst.w	quarter_pixel
	bne.s	.out
	cmp.w	#-50,Krake_posY
	ble.s	.out
	subq.w	#1,Krake_posY
.out:
	rts

.next_step:
	move.l	#Return,SFX_Handler
	move.l	#Boss_Die2,Bob_Routine(a4)
	sf	Plane_flag
	st	BackFlag

	move.w	#60,Krake_posY
	bra	Boss_Kill

Boss_Die2:
	move.l	#Boss_Die3,Bob_Routine(a4)
	move.w	#50,Bob_Special_1(a4)
	st	T_freeze
	clr.w	T_joyforce

	rts

BossRestore:
	lea	Rest_List1,a0
	clr.l	(a0)
	clr.l	Rest_List2-Rest_List1(a0)

	waitblt

	move.l	#Dummy_Playfield+101*80*3+20,bltdpth(a5)

	move.w	#$0100,bltcon0(a5)
	move.w	#80-6,bltdmod(a5)
	move.w	#64*16*3+3,bltsize(a5)

	waitblt

	rts

Boss_Die3:
	subq.w	#1,Bob_Special_1(a4)
	bne.s	.out

	move.l	#Dummy_Playfield+80,Scr_Show_Field(a6)
	move.l	#Dummy_Playfield+80,Scr_Supply_Field(a6)
	move.l	#Dummy_Playfield+80,Scr_Refresh_Field(a6)
	move.w	#80*3,Scr_Plane_Width(a6)
	move.w	#80,Scr_Single_Plane(a6)

	move.w	#$0100,RestFunction
	move.l	#BossRestore,SFX_Handler

	move.l	#Boss_Die,Bob_Routine(a4)
	move.l	#Bbob1a+Back_bob,Diamond_Pointer
	jsr	Init_Diamondcount

	SONGPLAY #5

	move.w	#80*3,Bob_I_D_Modulo+Diamond_Info_0

	lea	Boss_coltab+42(pc),a0
.set:
	lea	BCol_lab2+8*4(pc),a1
	moveq	#6,d7
.loop:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.loop

	move.w	#150,Bob_Special_1(a4)
.out:
	rts

Boss_Die:
		jsr	Count_Diamonds
	tst.w	Diamond_Count
	bne.s	.out
	subq.w	#1,Bob_Special_1(a4)
	beq	.over
.out:
	rts

.over:

	move.w	#-1,Cue_Point

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

	move.l	#main_GFX+Mbob25,Smart_Structure+Bob_Graphics
	move.l	#main_GFX+Mmsk25,Smart_Structure+Bob_Mask

	bra	Out_Bob_Damage

Blit_Boss:

	moveq	#1,d3
	addq.b	#1,arm_pos
	and.b	#3,arm_pos
	beq	.do_arm1
	cmp.b	#1,arm_pos
	beq	.do_arm2

	cmp.b	#2,arm_pos
	beq	.do_arm3

	bsr	rest_arm4
	moveq	#3,d0
	bsr.s	.set_flags
	lea	arm4(pc),a0
	bra	blit_arm

.do_arm1:
	bsr	rest_arm1
	moveq	#2,d0
	bsr.s	.set_flags
	lea	arm1(pc),a0
	bra	blit_arm

.do_arm2:
	bsr	rest_arm2
	moveq	#1,d0
	bsr.s	.set_flags
	lea	arm2(pc),a0
	bra	blit_arm

.do_arm3:
	bsr	rest_arm3
	moveq	#0,d0
	bsr.s	.set_flags
	lea	arm3(pc),a0
	bra	blit_arm

.set_flags:
	btst	d0,Boss_ArmWeg
	beq.s	.no_weg1
	st	ArmShort
.no_weg1:
	bclr	d0,Boss_ArmFlash
	beq.s	.no_hit1
	st	Armflash
.no_hit1:
	rts

rest_arm1:
	move.w	#$0100,bltcon0(a5)
	move.l	#Dummy_Playfield+80*3*62+60,bltdpth(a5)
	move.w	#80-12,bltdmod(a5)
	move.w	#64*46*3+6,bltsize(a5)
	waitblt
	move.l	#Dummy_Playfield+80*3*108+68,bltdpth(a5)
	move.w	#80-4,bltdmod(a5)
	move.w	#64*12*3+2,bltsize(a5)
	waitblt
do_return:
	rts

rest_arm2:
	move.w	#$0100,bltcon0(a5)
	move.l	#Dummy_Playfield+80*3*123+60,bltdpth(a5)
	move.w	#80-10,bltdmod(a5)
	move.w	#64*57*3+5,bltsize(a5)
	waitblt

	move.l	#Dummy_Playfield+80*3*142+58,bltdpth(a5)
	move.w	#80-2,bltdmod(a5)
	move.w	#64*7*3+1,bltsize(a5)
	waitblt

	rts

rest_arm3:
	move.w	#$0100,bltcon0(a5)
	move.l	#Dummy_Playfield+80*3*14+46,bltdpth(a5)
	move.w	#80-6,bltdmod(a5)
	move.w	#64*76*3+3,bltsize(a5)
	waitblt
	move.l	#Dummy_Playfield+80*3*90+48,bltdpth(a5)
	move.w	#80-2,bltdmod(a5)
	move.w	#64*23*3+1,bltsize(a5)
	waitblt

	move.w	#$09f0,bltcon0(a5)
	move.l	#Dummy_Playfield+80*3*(60+48)+50,bltdpth(a5)
	move.w	#80-2,bltdmod(a5)
	move.w	#10-2,bltamod(a5)
	move.l	#-1,bltafwm(a5)
	move.l	#Boss_ad_bob+10*48*3,bltapth(a5)
	move.w	#64*8*3+1,bltsize(a5)
	waitblt

	rts

rest_arm4:
	move.w	#$0100,bltcon0(a5)
	move.l	#Dummy_Playfield+80*3*135+42,bltdpth(a5)
	move.w	#80-12,bltdmod(a5)
	move.w	#64*44*3+6,bltsize(a5)
	waitblt

	move.l	#Dummy_Playfield+80*3*152+54,bltdpth(a5)
	move.w	#80-2,bltdmod(a5)
	move.w	#64*7*3+1,bltsize(a5)
	waitblt

	move.w	#$09f0,bltcon0(a5)
	move.l	#Dummy_Playfield+80*3*(60+75)+50,bltdpth(a5)
	move.w	#80-4,bltdmod(a5)
	move.w	#10-4,bltamod(a5)
	move.w	#-1,bltalwm(a5)
	move.l	#Boss_ad_bob+10*75*3,bltapth(a5)
	move.w	#64*5*3+2,bltsize(a5)
	waitblt

	rts

arm_pos:	dc.b	0
zitter_mode:	dc.b	0
Armflash:	dc.b	0
ArmShort:	dc.b	0

Krake_posX:	dc.w	40
Krake_posY:	dc.w	0

blit_arm2:
	moveq	#0,d3
blit_arm:
	move.l	#$ffff0000,bltafwm(a5)
	move.w	#50*8,d0
	moveq	#60,d1
	add.w	(a0)+,d0
	add.w	(a0)+,d1

	lea	zitter_table(pc),a6

	move.b	d3,zitter_mode
	bne.s	.no_first_part

	lea	no_zitter_table(pc),a6

	moveq	#0,d2
	bsr	.blit_one

.no_first_part:
	bsr	.calc_next

	moveq	#0,d2
	bsr	.blit_one

	addq.l	#1,a6


	moveq	#4-1,d7
.loop:
	move.w	d7,-(sp)
	bsr	.calc_next
	moveq	#20,d2
	bsr	.blit_one
	move.w	(sp)+,d7

	addq.l	#1,a6

	tst.b	ArmShort
	bne.s	.out

	dbf	d7,.loop

	bsr	.calc_next
	moveq	#40,d2
	bsr	.blit_one

	addq.l	#1,a6

	bsr	.calc_next
	moveq	#40,d2
	bsr	.blit_one
.out:
	move.l	Act_Scr_Structure,a6
	sf	Armflash
	sf	ArmShort
	rts

.calc_next:
	move.l	a0,a2
	move.w	d0,d6
	move.w	d1,d7
	move.b	(a2),d0
	add.b	(a6),d0
	bsr	sin
	asr.w	#4,d0
	add.w	d0,d6
	move.b	(a2)+,d0
	add.b	(a6),d0
	bsr	cos
	asr.w	#4,d0
	add.w	d0,d7
	move.w	d6,d0
	move.w	d7,d1
	move.l	a2,a0
	rts

.blit_one:
	movem.w	d0/d1,-(sp)
	lea	anim_table(pc),a2
	lea	(a2,d2.w),a2

	sub.w	16(a2),d0
	sub.w	18(a2),d1

	move.w	d0,d3
	and.w	#15,d3
	ror.w	#4,d3
	move.w	d3,bltcon1(a5)
	tst.b	Armflash
	beq.s	.do1
	or.w	#$0ffa,d3
	bra.s	.do2
.do1:
	or.w	#$0fca,d3
.do2:
	move.w	d3,bltcon0(a5)
	lsr.w	#3,d0
	and.w	#$fffe,d0
	mulu	#80*3,d1
	add.w	d0,d1
	add.l	#Dummy_Playfield,d1

	move.l	4(a2),d3
	move.l	(a2),d4

	move.w	8(a2),bltbmod(a5)
	move.w	#-2,bltamod(a5)
	move.w	10(a2),bltcmod(a5)
	move.w	10(a2),bltdmod(a5)

	moveq	#3-1,d7
.aloop:
	move.l	d1,bltdpth(a5)
	move.l	d1,bltcpth(a5)

	move.l	d3,bltapth(a5)
	move.l	d4,bltbpth(a5)

	move.w	12(a2),bltsize(a5)
	waitblt
	add.w	14(a2),d4
	add.l	#80,d1

	dbf	d7,.aloop

	movem.w	(sp)+,d0-d1
	rts

do_zitter:
	lea	zitter_table(pc),a0
	lea	zitter_control(pc),a1
	moveq	#7,d7
.loop:
	move.b	(a1)+,d0
	add.b	d0,(a0)+
	tst.b	d0
	beq.s	.next
	bpl.s	.check_up
	cmp.b	#-7,-1(a0)
	bne.s	.next
	neg.b	-1(a1)
	bra.s	.next
.check_up:
	cmp.b	#7,-1(a0)
	bne.s	.next
	neg.b	-1(a1)
.next:
	dbf	d7,.loop
	rts

zitter_table:	dc.b	0,5,3,2,6,4,1,5
zitter_control:	dc.b	0,1,1,-1,1,-1,1,1

no_zitter_table:	dc.b	0,0,0,0,0,0,0,0

anim_table:
	dc.l	Boss_bob+Kbob00
	dc.l	Boss_bob+Kmsk00
	dc.w	4*3-6
	dc.w	80*3-6
	dc.w	64*29+3
	dc.w	4
	dc.w	16,14

	dc.l	Boss_bob+Kbob01
	dc.l	Boss_bob+Kmsk01
	dc.w	4*3-6
	dc.w	80*3-6
	dc.w	64*23+3
	dc.w	4
	dc.w	12,11

	dc.l	Boss_bob+Kbob02
	dc.l	Boss_bob+Kmsk02
	dc.w	2*3-4
	dc.w	80*3-4
	dc.w	64*16+2
	dc.w	2
	dc.w	8,8

arm1:	dc.w	70,40
	dc.b	80,64,92,72,50,40,30
	dc.b	0

arm2:	dc.w	60,60
	dc.b	40,40,50,30,80,50,20
	dc.b	0

arm3:	dc.w	37,45
	dc.b	190,180,140,160,135,120,110
	dc.b	0

arm4:	dc.w	40,65
	dc.b	240,220,230,200,180,170,200
	dc.b	0


BackFlag:	dc.w	0
BackPointer:	dc.l	0

Set_Boss_Clist:
	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)

	tst.w	BackFlag
	bne.s	.no_set
	move.l	Scr_Show_Field(a6),BackPointer
.no_set:
	move.l	BackPointer,d0
	moveq	#0,d1
	move.w	Scr_X_Level_Pos(a6),d1
	lsr.w	#3,d1
	and.w	#$fffe,d1
	add.l	d1,d0
	lea	BCoplab1(pc),a0
	moveq	#3-1,d7
.loop:
	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	add.w	#planeb,d0
	addq.l	#8,a0
	dbf	d7,.loop

	move.l	#Dummy_Playfield,d0
	moveq	#0,d1
	move.w	#340,d1
	sub.w	Krake_posX,d1
	move.w	d1,d2
	lsr.w	#3,d1
	and.w	#$fffe,d1
	add.l	d1,d0

	moveq	#60,d1
	sub.w	Krake_posY,d1
	mulu	#80*3,d1
	add.l	d1,d0

	moveq	#3-1,d7
.loop2:
	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	add.w	#80,d0
	addq.l	#8,a0
	dbf	d7,.loop2

	neg.w	d2
	add.w	#15,d2
	lsl.w	#4,d2
	and.w	#$00f0,d2
	move.w	d2,BCoplab4+2

	lea	BSprlab(pc),a0
	bsr	Set_Sprites

	rts

Kbob00 	= $00000
Kmsk00 	= $0015c
Kbob01 	= $001d0
Kmsk01 	= $002e4
Kbob02 	= $00340
Kmsk02 	= $003a0

KAbob00	= $00000
KAbob01	= $00960


Convert_to_3planes:
	move.l	(a0)+,d0
	beq.s	.out
	move.l	d0,a1
	move.w	#3,Bob_I_Depth(a1)
	move.w	Bob_I_B_Modulo(a1),d0
	asr.w	#2,d0
	sub.w	d0,Bob_I_B_Modulo(a1)
	sub.w	#planeb,Bob_I_D_Modulo(a1)
	move.l	Bob_I_Next_Anim(a1),a1
.set_anims:
	move.l	(a0)+,d0
	beq.s	Convert_to_3planes
	move.l	d0,(a1)
	lea	22(a1),a1
	bra.s	.set_anims
.out:
	rts

Convert_Table1:
	dc.l	Rocket_Info_1
	 dc.l	Rotate_Buffer,Rotate_Buffer+13*3*2,Rotate_Buffer+27*3*2,Rotate_Buffer+40*3*2
	 dc.l	Back_bob+Bbob16,Back_bob+Bbob15,Back_bob+Bbob14,Back_bob+Bbob13,Back_bob+Bbob12
	 dc.l	Back_bob+Bbob12+12*3*2,Back_bob+Bbob13+12*3*2,Back_bob+Bbob14+12*3*2,Back_bob+Bbob15+12*3*2,Back_bob+Bbob16+12*3*2
	 dc.l	Rotate_Buffer+40*3*2+14*3*2,Rotate_Buffer+27*3*2+12*3*2,0
	dc.l	Explo_Info_1
	 dc.l	Back_bob+Bbob00,Back_bob+Bbob01,Back_bob+Bbob02,Back_bob+Bbob03,Back_bob+Bbob04
	 dc.l	Back_bob+Bbob05,Back_bob+Bbob06,Back_bob+Bbob07,Back_bob+Bbob08,Back_bob+Bbob09,0
	dc.l	Explo_Info_2
	 dc.l	Back_bob+Bbob0a,Back_bob+Bbob0b,Back_bob+Bbob0c,Back_bob+Bbob0d,Back_bob+Bbob0e
	 dc.l	Back_bob+Bbob0f,Back_bob+Bbob10,Back_bob+Bbob11,0
	dc.l	Rocket_Info_2,0
	dc.l	Bubble_Info_1
	 dc.l	Back_bob+Bbob17,Back_bob+Bbob18,Back_bob+Bbob19,0
	dc.l	Smart_Info,0
	dc.l	0

para_flipI:	dc.w	Bbob12,13*3,16/8
		dc.w	Bbob13,14*3,16/8
		dc.w	Bbob14,13*3,16/8
		dc.w	Bbob15,15*3,16/8
		dc.w	Bbob16,15*3,16/8
		dc.w	-1

Bbob00 	= $00000
Bmsk00 	= $000d8
Bbob01 	= $00120
Bmsk01 	= $00264
Bbob02 	= $002d0
Bmsk02 	= $00438
Bbob03 	= $004b0
Bmsk03 	= $00630
Bbob04 	= $006b0
Bmsk04 	= $00830
Bbob05 	= $008b0
Bmsk05 	= $00a30
Bbob06 	= $00ab0
Bmsk06 	= $00c24
Bbob07 	= $00ca0
Bmsk07 	= $00de4
Bbob08 	= $00e50
Bmsk08 	= $00f70
Bbob09 	= $00fd0
Bmsk09 	= $01090
Bbob0a 	= $010d0
Bmsk0a 	= $01124
Bbob0b 	= $01140
Bmsk0b 	= $0116a
Bbob0c 	= $01178
Bmsk0c 	= $011c0
Bbob0d 	= $011d8
Bmsk0d 	= $0122c
Bbob0e 	= $01248
Bmsk0e 	= $0129c
Bbob0f 	= $012b8
Bmsk0f 	= $0130c
Bbob10 	= $01328
Bmsk10 	= $01376
Bbob11 	= $01390
Bmsk11 	= $013de
Bbob12 	= $013f8
Bmsk12 	= $01446
Bbob13 	= $01460
Bmsk13 	= $014b4
Bbob14 	= $014d0
Bmsk14 	= $0151e
Bbob15 	= $01538
Bmsk15 	= $01592
Bbob16 	= $015b0
Bmsk16 	= $0160a
Bbob17 	= $01628
Bmsk17 	= $0164c
Bbob18 	= $01658
Bmsk18 	= $01682
Bbob19 	= $01690
Bmsk19 	= $016b4
Bbob1a 	= $016c0
Bmsk1a 	= $01720
Bbob1b 	= $01740
Bmsk1b 	= $0179a


*---------------------------------------------------------------------------
*	Routine and AnimTable of      WSnake
*---------------------------------------------------------------------------
		rsset	Bob_Special_1
obj_ptr		rs.l	1
mx		rs.w	1
part_flag	rs.b	1
angle		rs.b	1
angle_add	rs.b	1
mirror		rs.b	1
start_flag	rs.w	1
O_PHA		rs.w	1

Start_WSnake:
	move.b	#2,angle_add(a4)
	btst	#0,Bob_Special_4+1(a4)
	sne	mirror(a4)
	move.w	Bob_X_Position(a4),mx(a4)
	sf	start_flag(a4)

	move.l	a4,a3
	moveq	#7,d7
	moveq	#0,d6
.init:
	movem.l	d6/d7/a3/a4,-(sp)
	moveq	#25,d0
	move.w	Bob_X_Position(a4),d1
	move.w	Bob_Y_Position(a4),d2
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.l	a4,a0
	movem.l	(sp)+,d6/d7/a3/a4
 
		move.l	a0,obj_ptr(a3)
		move.l	#wsnake_slave,Bob_Routine(a0)
		move.l	#level_GFX+bob23,Bob_Graphics(a0)
		move.l	#level_GFX+msk23,Bob_Mask(a0)
		sf	Bob_Special_7+1(a0)
		move.l	a0,a3
		move.b	#BOB_NOCOL,Bob_Used(a0)

	addq.w	#1,d6
	and.w	#3,d6
	bne.s	.no_koll
		move.b	#BOB_TRUE,Bob_Used(a0)
.no_koll:
	dbf	d7,.init

		move.l	#level_GFX+bob24,Bob_Graphics(a0)
		move.l	#level_GFX+msk24,Bob_Mask(a0)

	clr.w	O_PHA(a4)
	sf	part_flag(a4)
	sf	angle(a4)
	move.l	#.WSnake_Wait,Bob_Routine(a4)

.WSnake_Wait:
	move.w	Bob_X_Position(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	cmp.w	#320,d0
	blt	.do
	rts
.do:
	move.l	#WSnake,Bob_Routine(a4)
WSnake:
	move.w	Bob_Y_Position(a4),-(sp)	;Remember old y-position

	tst.b	start_flag(a4)
	bne.s	.no_start
;		cmpi.w	#160-16,mx(a4)
;		blt	check_exit
;		cmpi.w	#160+16,mx(a4)
;		bgt	check_exit
.no_start:
	st	start_flag(a4)

;	lea	turn_work0,a2
;	move.w	#vsteg0,a1
;	tst.b	mirror(a4)
;	.if (zero) {
;		lea	wsnake_spr1a(pc),a0
;	} .else {
;		lea	wsnake_spr1b(pc),a0
;	}
;	move.l	a0,O_INFO(a5)
;
;	move.b	angle(a5),d2
;	subi.b	#64,d2
;	not.b	part_flag(a5)			;Which element in this frame ?
;	.if (zero) {
;		lea	turn_buffer1,a0
;		addq.b	#8,d2
;	} .else {
;		lea	512(a1),a1
;		lea	512(a2),a2
;		lea	turn_buffer2,a0
;		subi.b	#10*8,d2
;	}
;	pea	(a5)				;Do rotation
;	jsr	turn.w
;	move.l	(sp)+,a5

	move.b	angle(a4),d6
	bsr	.calc_pos
	movem.w	d0-d1,Bob_X_Position(a4)
;	st	O_SHOW(a4)
;	st	O_COLEN(a4)

	move.l	a4,a5
	move.b	angle(a4),d6
	subq.b	#8,d6
	moveq	#7,d7

.set_positions:
		move.l	obj_ptr(a5),a5
		bsr	.calc_pos
		movem.w	d0-d1,Bob_X_Position(a5)
;		st	O_COLEN(a5)
		subq.b	#8,d6
	dbf	d7,.set_positions

	lea	custom,a5

	move.b	angle_add(a4),d0
	add.b	d0,angle(a4)
	eori.b	#3,angle_add(a4)

	cmpi.b	#192,angle(a4)
	blo.s	.check_exit

	addq.l	#2,sp
	bra.s	.free_snake

.check_exit:
	move.w	(sp)+,d7		;Get old y-position
	move.w	mx(a4),d0
	sub.w	Scr_X_Level_Pos(a6),d0
	addi.w	#128,d0
	cmpi.w	#320+256,d0
	bhi.s	.free_snake
;		move.w	surface_old,d0
;		cmp.w	d0,d7
;		.if (greater) {
;			cmp.w	O_YPOS(a5),d0
;			bgt.s	.do_platsch
;			rts
;		}
;		cmp.w	O_YPOS(a5),d0
;		.if (less than) {
;	.do_platsch:
;			move.w	O_XPOS(a5),d0
;			subi.w	#16,d0
;			bsr	init_platsch
;			move.w	O_XPOS(a5),d0
;			bsr	init_platsch
;		}
	rts

.free_snake:
	bsr	.free_objects
	bra	Out_Bob_Damage

.calc_pos:
	move.b	d6,d0
	bsr	sin
	move.w	d0,d2
	move.b	d6,d0
	bsr	cos
	muls	#100,d0
	muls	#150,d2
	asr.l	#8,d0
	asr.l	#8,d2
	tst.b	mirror(a4)
	beq.s	.no
		neg.w	d0
.no:
	add.w	mx(a4),d0
	move.w	#244,d1
	sub.w	d2,d1
	rts

.free_objects:
	move.l	a4,a0
	moveq	#7,d0
.floop:
	move.l	obj_ptr(a0),a0
	st	Bob_Special_7+1(a0)
	dbf	d0,.floop
	rts

wsnake_slave:
	tst.b	Bob_Special_7+1(a4)
	beq.s	.out
	bra	Out_Bob_Damage
.out:
	rts

WSnake_AnimTable:
		dc.l	level_GFX+bob22,level_GFX+msk22
		dc.w	0,0,32,2,2,28,28

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Mupfel
*---------------------------------------------------------------------------
		rsset	Bob_Special_1
Mdelay		rs.w	1
Moffset		rs.w	1
Mmode		rs.w	1
M_PHA		rs.w	1
M_oldPHA	rs.w	1

Start_Muschel:
	moveq	#0,d0
	btst	#0,Bob_Special_4+1(a4)			;Set phase according to direction
	beq.s	.ok
	moveq	#2,d0
.ok:
	move.w	d0,M_PHA(a4)
	move.w	d0,Moffset(a4)
	sf	Mmode(a4)		;Initialize varibales
	bsr	rnd
	andi.w	#15,d0
	move.w	d0,Mdelay(a4)
	move.w	#4,Bob_Power(a4)
	move.l	#Muschel,Bob_Routine(a4)

Muschel:
	bsr	Standart_Hit_Handler
	beq.s	.destruct

	subq.w	#1,Mdelay(a4)		;Delay over ?
	bpl.s	.no_change
	move.w	Moffset(a4),M_PHA(a4)
	not.b	Mmode(a4)	;Change mode...
	beq.s	.set_waiting
	addq.w	#1,M_PHA(a4)	;Open & Shot...
	move.w	#40,Mdelay(a4)
	bsr	start_shot
	bra.s	.no_change
.set_waiting:
	move.w	#200,Mdelay(a4)	;Waiting...
.no_change:
	move.w	M_PHA(a4),d0
	mulu	#22,d0
	add.l	#Muschel_AnimTable,d0
	move.l	d0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame

	moveq	#0,d0
	move.w	M_PHA,d1
	cmp.w	M_oldPHA,d1
	beq.s	.do
	moveq	#1,d0
.do:
	moveq	#22,d6
	bsr	Use_Background

	bra	Test_Bob_Out

.destruct:
	moveq	#1,d0
	moveq	#22,d6
	bsr	Use_Background

	move.l	#$100,d0
	bra	Standart_Destruction

Muschel_AnimTable:
		dc.l	level_GFX+bob1c,level_GFX+msk1c
		dc.w	0,0,20,2,2,28,16
		dc.l	level_GFX+bob1d,level_GFX+msk1d
		dc.w	0,-1,22,2,2,28,16

		dc.l	Tinte_Flip+bob1c-bob17,Tinte_Flip+msk1c-bob17
		dc.w	-8,0,20,2,2,28,16
		dc.l	Tinte_Flip+bob1d-bob17,Tinte_Flip+msk1d-bob17
		dc.w	-8,-1,22,2,2,28,16

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

		rsset	Bob_Special_1
Sspeed		rs.l	1
Slow_xpos	rs.w	1
Ssdelay		rs.w	1
Sdir		rs.b	1
Sturns		rs.b	1
S_PHA		rs.w	1

start_shot:
;	PLAY_FX	#17
	movem.w	Bob_X_Position(a4),d1-d2
	addq.w	#4,d2
	bsr	Check_shoot
	beq.s	.out
	moveq	#23,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	Moffset(a4)			;Set dir-flag & image-info
	sne	Sdir(a0)
	beq.s	.xok
	addi.w	#16,Bob_X_Position(a0)		;Adjust x-offset
.xok:
	move.w	#2,S_PHA(a0)			;Set everything else...
	move.l	#$00020000,Sspeed(a0)
	clr.w	Slow_xpos(a0)
	clr.w	Ssdelay(a0)
	move.b	#2,Sturns(a0)
	move.w	#4,Bob_Power(a0)
.out:
	rts

MSchuss:
	moveq	#0,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	cmpi.l	#$00010000,Sspeed(a4)		;Speed down ?
	ble.s	.lower
		subi.l	#$00000400,Sspeed(a4)	;Slow down
		cmpi.l	#$00010000,Sspeed(a4)
		bgt.s	.normal
		clr.w	S_PHA(a4)		;Init slow-phase
		clr.w	Sspeed+2(a4)
	bra.s	.normal
.lower:
		subq.w	#1,Ssdelay(a4)		;Delay slow-animation
		bpl.s	.normal
			addq.w	#7,Ssdelay(a4)
			eori.w	#1,S_PHA(a4)
.normal:

	movem.w	Bob_X_Position(a4),d0-d1
	addq.w	#8,d0
	tst.b	Sdir(a4)
	beq.s	.no
	addq.w	#8,d0
.no:
	addq.w	#4,d1
	bsr	check_obj_kollision
	beq.s	.no_hit
		not.b	Sdir(a4)
		subq.b	#1,Sturns(a4)
		bne.s	.no_hit
		subq.w	#8,Bob_X_Position(a4)
		subq.w	#8,Bob_Y_Position(a4)
		bra	Standart_Destruction
.no_hit:
	move.w	Bob_X_Position(a4),d1			;Handle movement
	movem.w	Sspeed(a4),d0/d2
	tst.b	Sdir(a4)
	bne.s	.to_right
		sub.w	d2,Slow_xpos(a4)
		subx.w	d0,d1
		moveq	#0,d2
	bra.s	.to_left
.to_right:
		add.w	d2,Slow_xpos(a4)
		addx.w	d0,d1
		moveq	#3,d2
.to_left:
	move.w	d1,Bob_X_Position(a4)
	add.w	S_PHA(a4),d2
	mulu	#22,d2
	add.l	#MSchuss_AnimTable,d2
	move.l	d2,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame

	bra	Test_Bob_Out


MSchuss_AnimTable:
		dc.l	level_GFX+bob1f,level_GFX+msk1f
		dc.w	0,-3,16,2,2,14,12
		dc.l	Muschel_Flip+bob1f-bob1e,Muschel_Flip+msk1f-bob1e
		dc.w	0,-3,16,2,2,14,12
		dc.l	level_GFX+bob1e,level_GFX+msk1e
		dc.w	0,0,10,2,2,14,8

		dc.l	level_GFX+bob1f,level_GFX+msk1f
		dc.w	0,-3,16,2,2,14,12
		dc.l	Muschel_Flip+bob1f-bob1e,Muschel_Flip+msk1f-bob1e
		dc.w	0,-3,16,2,2,14,12
		dc.l	Muschel_Flip+bob1e-bob1e,Muschel_Flip+msk1e-bob1e
		dc.w	0,0,10,2,2,14,8

Swim_Objects:	dc.w	0

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Tintenfisch
*---------------------------------------------------------------------------
		rsset	Bob_Special_1
Tspeed		rs.l	1
Tdelay		rs.w	1
Tlow_xpos	rs.w	1
Tspeedup	rs.w	1
T_PHA		rs.w	1

Start_Tinte:
	cmp.b	#5,Swim_Objects
	bge	Out_Bob
	addq.b	#1,Swim_Objects


	moveq	#1,d0
	btst	#0,Bob_Special_4+1(a4)				;Select start-direction
	beq.s	.set
	moveq	#-1,d0
.set:
	swap	d0
	move.l	d0,Tspeed(a4)
	clr.w	Tdelay(a4)
	sf	Tspeedup(a4)
	clr.w	Tlow_xpos(a4)
	move.w	#3,Bob_Power(a4)
	move.l	#Tinte,Bob_Routine(a4)
Tinte:
	move.l	#$150,d0
	bsr	Standart_Hit_Handler
	beq	.destruct

	tst.w	Tspeed(a4)			;Which direction ?
	bpl.s	.right
		cmpi.w	#-1,Tspeed(a4)		;Speed low ?
		beq.s	.no_slowdown
		addi.l	#$00000400,Tspeed(a4)	;No, so slow down
		bra	.normal
.right:
	cmpi.w	#1,Tspeed(a4)			;Speed low ?
	beq.s	.no_slowdown
	subi.l	#$00000400,Tspeed(a4)		;No, so slow down
	bra.s	.normal
.no_slowdown:
	clr.w	Tspeed+2(a4)			;Normal sped, clear low-word
	move.w	T_posX,d0			;Check if player on
	add.w	Scr_X_Level_Pos(a6),d0
	addi.w	#16,d0				;dangerous side...
	tst.w	Tspeed(a4)
	bpl.s	.lab1
	cmp.w	Bob_X_Position(a4),d0
	bgt.s	.normal1
	bra.s	.lab0
.lab1:
	cmp.w	Bob_X_Position(a4),d0
	blt.s	.normal1
.lab0:
	move.w	T_posY,d0			;Is player in the right hight ?
	addi.w	#32,d0
	add.w	Scr_Y_Level_Pos(a6),d0
	move.w	Bob_Y_Position(a4),d1
	cmp.w	d1,d0
	blt.s	.normal1
	addi.w	#24,d1
	cmp.w	d1,d0
	bgt.s	.normal1
	st	Tspeedup(a4)			;Ok, speed up
	move.w	Tspeed(a4),d0
	move.w	d0,d1				;3 times speed
	add.w	d0,d0
	add.w	d1,d0
	move.w	d0,Tspeed(a4)
	bpl.s	.lab4
	move.w	#2,T_PHA(a4)
	bra.s	.lab5
.lab4:
	move.w	#6,T_PHA(a4)
.lab5:
	move.w	#45,Tdelay(a4)			;Set long delay
	bra.s	.normal
.normal1:
	sf	Tspeedup(a4)			;No, speed up
.normal:
	move.l	Tspeed(a4),d0			;Move body...
	add.w	d0,Tlow_xpos(a4)
	swap	d0
	move.w	Bob_X_Position(a4),d1
	addx.w	d0,d1
	move.w	d1,Bob_X_Position(a4)

	movem.w	Bob_X_Position(a4),d0-d1
	addq.w	#4,d1
	tst.w	Tspeed(a4)
	bmi.s	.lab2
	addi.w	#48,d0
	bra.s	.lab3
.lab2:
	subq.w	#8,d0
.lab3:
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.turn_tinte
	addq.w	#8,d1
	bsr	check_obj_kollision
	beq.s	.no_turn	
.turn_tinte:
	neg.l	Tspeed(a4)
	clr.w	Tdelay(a4)
.no_turn:
	subq.w	#1,Tdelay(a4)			;Animation-delay over ?
	bpl.s	.no_anim
	addq.w	#8,Tdelay(a4)		;Yes, reset it
	tst.b	Tspeedup(a4)
	bne.s	.norm

		andi.w	#1,T_PHA(a4)
		eori.w	#1,T_PHA(a4)
	bra.s	.set_anim
.norm:
		clr.w	T_PHA(a4)	;Reset to normal anim
.set_anim:
		tst.w	Tspeed(a4)		;Add offset if swimming right
		bmi.s	.no_anim
		addq.w	#4,T_PHA(a4)
.no_anim:
	move.w	T_PHA(a4),d0
	mulu	#22,d0
	add.l	#Tinte_AnimTable,d0
	move.l	d0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.ok
	subq.b	#1,Swim_Objects
.ok:
	rts
.destruct:
	subq.b	#1,Swim_Objects
	bra	Standart_Destruction

Tinte_Flip	= level_Buffer+bob06+1520

Tinte_AnimTable:
		dc.l	level_GFX+bob17,level_GFX+msk17
		dc.w	0,0,24,2,2,40,20
		dc.l	level_GFX+bob18,level_GFX+msk18
		dc.w	0,0,24,2,2,40,20
		dc.l	level_GFX+bob19,level_GFX+msk19
		dc.w	0,5,14,2,2,40,12
		dc.l	level_GFX+bob19,level_GFX+msk19
		dc.w	0,5,14,2,2,40,12

		dc.l	Tinte_Flip+bob17-bob17,Tinte_Flip+msk17-bob17
		dc.w	0,0,24,2,2,40,20
		dc.l	Tinte_Flip+bob18-bob17,Tinte_Flip+msk18-bob17
		dc.w	0,0,24,2,2,40,20
		dc.l	Tinte_Flip+bob19-bob17,Tinte_Flip+msk19-bob17
		dc.w	0,5,14,2,2,40,12


*---------------------------------------------------------------------------
*	Routine and AnimTable of      Qualle
*---------------------------------------------------------------------------
		rsset	Bob_Special_1
mode		rs.b	1
delay		rs.b	1
flag		rs.b	1

Start_Qualle:
	cmp.b	#5,Swim_Objects
	bge	Out_Bob
	addq.b	#1,Swim_Objects

	move.b	Bob_Special_4+1(a4),mode(a4)
	move.w	#4,Bob_Power(a4)
	sf	flag(a4)
	move.l	#Qualle,Bob_Routine(a4)
	bsr	Qualle_set_anim

Qualle:
	move.l	#$120,d0
	bsr	Standart_Hit_Handler
	beq	.destruct

	move.b	mode(a4),d0		;Move qualle
	andi.w	#3,d0
	add.w	d0,d0
	add.w	d0,d0
	lea	.move_tab(pc),a0
	movem.w	(a0,d0.w),d6-d7
	not.b	flag(a4)
	bne.s	.no
		add.w	d6,Bob_X_Position(a4)
		add.w	d7,Bob_Y_Position(a4)
.no:
	movem.w	Bob_X_Position(a4),d0-d1		;Check for collision
	tst.w	d6
	bmi.s	.left
	addi.w	#32,d0
	bra.s	.right
.left:
	subq.w	#8,d0
.right:
	addi.w	#12,d1
	bsr	check_obj_kollision
	beq.s	.no_change
	bchg	#0,mode(a4)			;Change XDir
	bsr	Qualle_set_anim
.no_change:
	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#12,d0
	tst.w	d7
	bmi.s	.up
	addi.w	#32,d1
	bra.s	.down
.up:
	subq.w	#8,d1
.down:
	bsr	check_obj_kollision
	beq.s	.no_change2
	bchg	#1,mode(a4)			;Change YDir
	bsr	Qualle_set_anim
.no_change2:
	bsr	Standart_BobAnim
	tst.b	Bob_Used(a4)
	bpl.s	.ok
	subq.b	#1,Swim_Objects
.ok:
	rts

.destruct:
	subq.b	#1,Swim_Objects
	bra	Standart_Destruction


.move_tab:
	dc.w	-1,-1,1,-1,-1,1,1,1

Qualle_set_anim:
	move.b	mode(a4),d0
	and.w	#3,d0
	asl.w	#2,d0
	lea	.offstab(pc),a0
	move.l	(a0,d0.w),Bob_Next_Anim(a4)
	btst	#1,mode(a4)
	beq.s	.up
	lea	Qualle_Info_2(pc),a0
	move.w	#NORM+FLIP,d0
	bra.s	.set
.up:
	lea	Qualle_Info_1(pc),a0
	move.w	#NORM,d0
.set:
	move.w	d0,Bob_Race(a4)
	sub.l	a4,a0
	move.w	a0,Bob_to_Info_Offs(a4)

	bra	Get_Next_Bob_Frame


.offstab:
	dc.l	Qualle_AnimTable1
	dc.l	Qualle_AnimTable2
	dc.l	Qualle_AnimTable3
	dc.l	Qualle_AnimTable4

Qualle_Flip	= level_Buffer+bob06+1520+bob1a-bob17

Qualle_AnimTable1:
		dc.l	level_GFX+bob1a,level_GFX+msk1a
		dc.w	0,0,30,2,2,28,26
		dc.l	level_GFX+bob1b,level_GFX+msk1b
		dc.w	0,0,31,2,2,28,26
		dc.w	ENTRY_END
		dc.l	Qualle_AnimTable1
Qualle_AnimTable2:
		dc.l	Qualle_Flip+bob1a-bob1a,Qualle_Flip+msk1a-bob1a
		dc.w	0,0,30,2,2,28,26
		dc.l	Qualle_Flip+bob1b-bob1a,Qualle_Flip+msk1b-bob1a
		dc.w	0,0,31,2,2,28,26
		dc.w	ENTRY_END
		dc.l	Qualle_AnimTable2
Qualle_AnimTable3:
		dc.l	level_GFX+bob1a+29*4*4,level_GFX+msk1a+29*4
		dc.w	0,0,30,2,2,28,26
		dc.l	level_GFX+bob1b+30*4*4,level_GFX+msk1b+30*4
		dc.w	0,0,31,2,2,28,26
		dc.w	ENTRY_END
		dc.l	Qualle_AnimTable3
Qualle_AnimTable4:
		dc.l	Qualle_Flip+bob1a-bob1a+29*4*4,Qualle_Flip+msk1a-bob1a+29*4
		dc.w	0,0,30,2,2,28,26
		dc.l	Qualle_Flip+bob1b-bob1a+30*4*4,Qualle_Flip+msk1b-bob1a+30*4
		dc.w	0,0,31,2,2,28,26
		dc.w	ENTRY_END
		dc.l	Qualle_AnimTable4

*---------------------------------------------------------------------------
*	Routine and AnimTable of      EFish
*---------------------------------------------------------------------------
		rsset	Bob_Special_1
Edir		rs.w	1
Edelay		rs.w	1
Eduration	rs.w	1
Eflic		rs.b	1
Efdelay		rs.b	1
Eanphase	rs.w	1

Start_EFisch:
;	jsr	add_object.w
;	move.l	a0,objptr(a5)
;	move.l	#elec_spr,O_INFO(a0)
;	clr.w	O_PHA(a0)
;	move.l	#handle_elec,O_HANDLE(a0)
;	clr.l	O_USR0(a0)

	moveq	#1,d0
	tst.w	Bob_X_Position(a4)
	bmi.s	.set
	moveq	#-1,d0
.set:
	move.w	d0,Edir(a4)
	move.w	#130,Eduration(a4)
;	sf	Eflic(a5)
	move.w	#60,Bob_Power(a4)
	clr.w	Edelay(a4)
	move.l	#EFisch,Bob_Routine(a4)
	clr.w	Eanphase(a4)
	rts

EFisch:
	moveq	#0,d0
	bsr	Standart_Hit_Handler
	bne	.not_dead
	sf	no_dark
	bra	Standart_Destruction
.not_dead:
	move.w	Edir(a4),d0			;Move fish...
	add.w	d0,Bob_X_Position(a4)


	subq.w	#1,Eduration(a4)			;Time to turn ?
	bpl.s	.no_electric
		move.w	#130,Eduration(a4)
		neg.w	Edir(a4)			;Change direction
		move.w	Bob_X_Position(a4),d0
		sub.w	Scr_X_Level_Pos(a6),d0
		cmpi.w	#-32,d0			;Only flicer if on screen
		blt.s	.no_electric
		cmpi.w	#320,d0
		bgt.s	.no_electric
		sf	Efdelay(a4)
		move.b	#40,Eflic(a4)
		move.w	T_posY,d0
		addi.w	#16,d0
		cmp.w	Water_Ypos,d0		;Only sub power if in water
		ble.s	.no_electric
		move.b	T_flash,d0
		or.b	T_shield,d0
		bne.s	.no_electric
			moveq	#10,d0
			jsr	sub_energy
.no_electric:
	tst.b	Eflic(a4)			;Fliccer ?
	beq.s	.no_flickering
		subq.b	#1,Efdelay(a4)		;Delay over ?
		bpl.s	.lab0
			bsr	rnd		;Set new random-delay
			andi.b	#1,d0
			move.b	d0,Efdelay(a4)
			not.b	no_dark
.lab0:
		subq.b	#1,Eflic(a4)		;Do fliccering
		bne.s	.no_flickering
		sf	no_dark
.no_flickering:
	subq.w	#1,Edelay(a4)			;Animate fish
	bpl.s	.no_anim
	addq.w	#6,Edelay(a4)
	eor.w	#1,Eanphase(a4)
.no_anim:

	tst.w	Edir(a4)				;Set phase-offset
	bmi.s	.set_left
	or.w	#2,Eanphase(a4)
	bra.s	.set_right
.set_left:
	and.w	#1,Eanphase(a4)
.set_right:
	cmpi.w	#30,Eduration(a4)		;electrical disturbance
	slt	d1
	blt.s	.no
	tst.b	Eflic(a4)
	sne	d1
.no:
	move.w	Eanphase(a4),d0
	tst.b	d1
	beq.s	.ok
	tst.w	half_pixel
	bne.s	.ok
	move.w	#4,d0
.ok:
	mulu	#22,d0
	add.l	#EFisch_AnimTable,d0
	move.l	d0,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.out
	sf	no_dark				;Wurde gelscht!
.out:
	rts

no_dark:	dc.w	0

EFisch_AnimTable:
		dc.l	level_GFX+bob14,level_GFX+msk14
		dc.w	0,0,16,2,2,40,12
		dc.l	level_GFX+bob15,level_GFX+msk15
		dc.w	0,0,16,2,2,40,12
		dc.l	level_Buffer+bob06+560,level_Buffer+bob06+560+384
		dc.w	-2,0,16,6,2,28,24
		dc.l	level_Buffer+bob06+1040,level_Buffer+bob06+1040+384
		dc.w	-2,0,16,6,2,28,24

		dc.l	level_GFX+bob16,level_GFX+msk16
		dc.w	0,0,16,2,2,40,12

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Flo
*---------------------------------------------------------------------------
		rsset	Bob_Special_1
laststand	rs.b	1
swing		rs.b	1
swingindex	rs.b	1
titsch		rs.b	1
titschspeed	rs.w	1
duration	rs.w	1
count		rs.w	1
dir		rs.b	1
sinktime	rs.b	1
set_ypos	rs.b	1

Start_Floss:
	move.w	Bob_X_Position(a4),d0
	and.w	#$fff0,d0
	move.w	d0,Bob_X_Position(a4)
	move.l	#Floss,Bob_Routine(a4)
	sf	swing(a4)
	sf	titsch(a4)
	sf	laststand(a4)
	move.w	Water_GFX_Ypos,d0
	add.w	Scr_Y_Level_Pos(a6),d0
	move.w	d0,Bob_Y_Position(a4)
	subi.w	#16,Bob_Y_Position(a4)
	move.b	Bob_Special_4(a4),d7
	move.b	Bob_Special_4+1(a4),d6
	btst	#1,d7					;Any movement ?
	beq.s	.no_move
	moveq	#1,d0
	btst	#0,d7					;First direction ?
	beq.s	.set
	moveq	#-1,d0
.set:
	move.b	d0,dir(a4)
	moveq	#0,d0
	move.b	d6,d0
	add.w	d0,d0
	move.w	d0,duration(a4)
	bra.s	.move
.no_move:
	moveq	#-1,d0
.move:
	move.w	d0,count(a4)
	moveq	#120,d0
	btst	#2,d7					;Any time-out ?
	beq.s	.set2
	moveq	#-1,d0
.set2:
	move.b	d0,sinktime(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)

Floss:
	sf	set_ypos(a4)
	tst.b	laststand(a4)		;No landing if titsching...
	bne.s	.lab0
	tst.b	titsch(a4)
	bne	.end_it
.lab0:
	movem.w	Bob_X_Position(a4),d0-d1	;Handle standing of player
	addq.w	#8,d0
	addq.w	#4,d1
	move.w	d0,d2
	add.w	#48,d2
	bsr	check_foot_frame
	beq.s	.no_stand
	cmpi.b	#-128,sinktime(a4)	;Sinking ?
	bne.s	.lab1
			move.w	Water_GFX_Ypos,d0	;Below surface ?
			addi.w	#16,d0
			cmp.w	Bob_Y_Position(a4),d0	;-> No Standing
			blt.s	.no_stand
.lab1:
;		move.b	pl_standing.w,d0
;		or.b	pl_jump.w,d0
			st	T_stand
			st	set_ypos(a4)

		move.w	Bob_Y_Position(a4),d1
		addq.w	#4,d1
		bsr	alias_feet


			tst.b	laststand(a4)
			bne.s	.lab2


				st	swing(a4)
				sf	swingindex(a4)
.lab2:
			st	laststand(a4)
			clr.w	T_forceY
			bra.s	.end_it
.no_stand:
	cmpi.b	#-128,sinktime(a4)
	beq.s	.lab3
		tst.b	laststand(a4)
		beq.s	.lab4
			st	titsch(a4)
			move.w	#4<<4,titschspeed(a4)
.lab4:
		tst.b	sinktime(a4)
		bmi.s	.lab3
			move.b	#120,sinktime(a4)
.lab3:
	sf	laststand(a4)
.end_it:

	tst.w	count(a4)			;Any movement ?
	bmi.s	.no_move
	cmp.b	#-128,sinktime(a4)
	beq.s	.move
		tst.b	laststand(a4)		;Player on platform ?
		beq.s	.no_move
.move:
			subq.w	#1,count(a4)	;Left- and Right-Movement
			bpl.s	.no_new
				move.w	duration(a4),count(a4)
				neg.b	dir(a4)
.no_new:
			move.b	dir(a4),d0
			ext.w	d0
			add.w	d0,Bob_X_Position(a4)
			tst.b	laststand(a4)
			beq.s	.no_move
		move.w	d0,T_forceX
.no_move:
	moveq	#0,d7

	tst.b	swing(a4)
	beq.s	.no_swing
		moveq	#0,d0
		move.b	swingindex(a4),d0
		lea	.swing_tab(pc),a0
		move.b	(a0,d0.w),d0
		ext.w	d0
		add.w	d0,d7
		addq.b	#1,swingindex(a4)
		cmpi.b	#14,swingindex(a4)
		bne.s	.no_swing
		sf	swing(a4)
.no_swing:
	tst.b	titsch(a4)
	beq.s	.no_titsch
		move.w	titschspeed(a4),d0
		asr.w	#4,d0
		sub.w	d0,d7
		subq.w	#8,titschspeed(a4)
		cmpi.w	#-4<<4,titschspeed(a4)
		bge.s	.no_titsch
			sf	titsch(a4)
			move.w	Water_GFX_Ypos,d0
			add.w	Scr_Y_Level_Pos(a6),d0
			sub.w	#20,d0
			move.w	d0,Bob_Y_Position(a4)
			st	swing(a4)
			sf	swingindex(a4)
.no_titsch:
	move.b	swing(a4),d0
	or.b	titsch(a4),d0
	bne.s	.no_sink

	cmp.b	#-128,sinktime(a4)
	beq.s	.is_sinking

	move.w	Water_GFX_Ypos,d0
	add.w	Scr_Y_Level_Pos(a6),d0
	sub.w	#16,d0
	cmp.w	Bob_Y_Position(a4),d0
	beq.s	.is_sinking
	blt.s	.sub
	addq.w	#1,Bob_Y_Position(a4)
	bra.s	.is_sinking
.sub:
	subq.w	#1,Bob_Y_Position(a4)
.is_sinking:
	tst.b	sinktime(a4)
	bmi.s	.no_sink
	subq.b	#1,sinktime(a4)
	bpl.s	.no_sink
	move.b	#-128,sinktime(a4)
.no_sink:
	cmpi.b	#-128,sinktime(a4)
	bne.s	.not_sinking
	addq.w	#2,d7
.not_sinking:

	moveq	#0,d1
;	move.w	platform_force,d1
	add.w	d7,d1
	add.w	d1,Bob_Y_Position(a4)
	tst.b	set_ypos(a4)
	beq	Test_Bob_Out

		move.w	Bob_Y_Position(a4),d1
		addq.w	#4,d1
		bsr	alias_feet

	bra	Test_Bob_Out

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

Floss_AnimTable:
		dc.l	level_GFX+bob25,level_GFX+msk25
		dc.w	0,0,24,2,2,60,20

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Water
*---------------------------------------------------------------------------
Water_Status:	dc.w	0

Start_Water:
	moveq	#4,d0
	bsr	Check_Entries
	beq.s	.ok
	bra	Out_Bob					;Ist nicht mglich, das Einzutragen!
.ok:

	move.w	#-80,Bob_Y_Position(a4)
	move.w	Bob_X_Position(a4),d0
	addq.w	#8,d0
	and.w	#$fff0,d0
	move.w	d0,Bob_X_Position(a4)
	moveq	#0,d4
	moveq	#3,d3

	move.l	a4,a6
	move.w	Bob_Special_4(a4),Bob_Special_7(a4)

.init:
	movem.l	a4/a6,-(sp)
	movem.w	Bob_X_Position(a4),d1-d2
	moveq	#17,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Last_Entry
	move.l	a4,a0
	movem.l	(sp)+,a4/a6

	move.l	#handle_wf,Bob_Routine(a0)
	eori.w	#1,d4
	beq.s	.no
	add.l	#22,Bob_Next_Anim(a0)
.no:
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a0)
	move.b	#BOB_NOCOL,Bob_Used(a0)
	move.l	a0,Bob_Special_1(a6)
	clr.w	Bob_Special_4(a0)
	move.l	a0,a6
	dbf	d3,.init

	move.w	#40,Bob_Special_5(a4)
	clr.w	Bob_Special_4(a4)
	move.l	#Water,Bob_Routine(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)			;Wir sind draussen, keine Kollision!
	move.w	Water_Status,Bob_Status(a4)
	eor.w	#1,Water_Status

Water:
	tst.b	Bob_Special_4+1(a4)		;Waiting ?
	bne.s	.move
	subq.w	#1,Bob_Special_5(a4)	;Decrement counter
	bpl.s	.no_change		;-> Wait...
;		PLAY_FX	#45
	not.b	Bob_Special_4+1(a4)	;Change mode
	move.w	#-80,Bob_Y_Position(a4)	;Set start-yposition
;	tst.b	Bob_Special_7(a4)	;One-Shot ?
;	bne.s	.no_change
	sf	Bob_BlitStatus(a4)
	bra.s	.no_change
.move:
	sf	Bob_BlitStatus(a4)
	tst.b	Bob_Special_7(a4)
	bne.s	.no_colli
	move.b	#BOB_TRUE,Bob_Used(a4)
.no_colli:
	eor.w	#1,Bob_Status(a4)
	beq.s	.ok
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
.ok:
	addq.w	#4,Bob_Y_Position(a4)	;Move down
	cmpi.w	#224+10,Bob_Y_Position(a4);Reached lower border ?
	ble.s	.no_change
			tst.b	Bob_Special_7(a4)	;Flag fr OneShoot!
			bne	.free_waterf2
			not.b	Bob_Special_4+1(a4)	;Yes, so change mode
			move.w	#60,Bob_Special_5(a4)	;Set wait-delay
			move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
			move.b	#BOB_NOCOL,Bob_Used(a4)
.no_change:

	lea	.offset_tab(pc),a6		;Position-Offset-Table (POT)
	move.l	a4,a0
	movem.w	Bob_X_Position(a4),d6-d7		;Load master-position
	moveq	#3,d5

.set_positions:
		addi.w	#16,d6			;Adjust x-position
		move.l	Bob_Special_1(a0),a0		;Get pointer
		movem.w	d6-d7,Bob_X_Position(a0)	;Set position
		move.w	(a6)+,d0		;and add y-offset
		add.w	d0,Bob_Y_Position(a0)
		move.b	Bob_BlitStatus(a4),Bob_BlitStatus(a0)	;Set visibility
	dbf	d5,.set_positions

	move.l	Act_Scr_Structure,a6

	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)				;Wir mssen uns austragen!
	bmi.s	.free_waterf
	bra	Standart_BobAnim
.free_waterf2:
	bsr	Out_Bob_Damage
.free_waterf:
	move.l	Bob_Special_1(a4),a0			;Set free-flags
	st	Bob_Special_4+1(a0)
	move.l	Bob_Special_1(a0),a0
	st	Bob_Special_4+1(a0)
	move.l	Bob_Special_1(a0),a0
	st	Bob_Special_4+1(a0)
	move.l	Bob_Special_1(a0),a0
	st	Bob_Special_4+1(a0)
	rts						;Wir sind schon weg!

.offset_tab:
	dc.w	8,16,8,0

handle_wf:
	tst.b	Bob_Special_4+1(a4)
	bne	Out_Bob_Damage

	subq.w	#1,Bob_Anim_Delay(a4)
	bpl.s	.no
	move.w	Bob_Anim_Delay_Init(a4),Bob_Anim_Delay(a4)
	bsr	Get_Next_Bob_Frame
.no:
	rts					;Wir drfen uns NICHT selbst austragen!

Water_AnimTable:
		dc.l	AD_Bob+Abob00,0
		dc.w	0,0,48,2,2,76,44
		dc.l	AD_Bob+Abob01,0
		dc.w	0,0,48,2,2,76,44
		dc.w	ENTRY_END
		dc.l	Water_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	#16,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

;		cmpi.w	#1,level_num.w			;Level 2 ?
;		.if (equal) {
;			move.w	surface_pos,d2		;Surface active ?
;			.if (plus) {
;				subi.w	#20,d2
;				cmp.w	d2,d1		;Yes, hit surface ?
;				bgt.s	.stop_fall	;-> Yes
;			}
;		}

		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	#21
			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+bob0e,level_GFX+msk0e
		dc.w	0,0,3,2,2,28,24
		dc.l	level_GFX+bob0f,level_GFX+msk0f
		dc.w	0,0,4,2,2,28,24
		dc.l	level_GFX+bob10,level_GFX+msk10
		dc.w	0,0,6,2,2,28,24
		dc.l	level_GFX+bob11,level_GFX+msk11
		dc.w	0,0,9,2,2,28,24
		dc.l	level_GFX+bob12,level_GFX+msk12
		dc.w	0,8,6,2,2,28,24
		dc.l	level_GFX+bob13,level_GFX+msk13
		dc.w	0,5,11,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Drop_AnimTable	

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Krabbe
*---------------------------------------------------------------------------

Krabbe_Start:
;	clr.w	O_PHA(a5)
;	st	O_SHOW(a5)
;	clr.w	O_USR0(a5)
	moveq	#1,d0
	btst	#0,Bob_Special_4+1(a4)
	beq.s	.ok
	moveq	#-1,d0
.ok:
	move.w	d0,Bob_Special_2(a4)
	btst	#1,Bob_Special_4+1(a4)
	sne	Bob_Special_3+1(a4)			;Oben /Unten
	bne.s	.up

	addq.w	#4,Bob_Y_Position(a4)
	bra.s	.down
.up:
	addq.w	#4,Bob_Y_Position(a4)
	move.l	#Krabbe_AnimTableO,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	lea	Krabbe_Info_2(pc),a0
	sub.l	a4,a0
	move.w	a0,Bob_to_Info_Offs(a4)
	move.w	#NORM+FLIP,Bob_Race(a4)			;Flip!

.down:
	move.w	#7,Bob_Power(a4)
	sf	Bob_Special_3(a4)
	move.w	#20,Bob_Special_4(a4)
	move.l	#Krabbe,Bob_Routine(a4)

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

	tst.b	Bob_Special_3(a4)		;Bubble-Mode ?
	bne.s	.bubbling
	subq.w	#1,Bob_Special_4(a4)		;Delay over ?
	bpl.s	.no_bubble
	st	Bob_Special_3(a4)		;Yes...
	move.w	#$0001,Bob_Special_4(a4)	;Delay & Bubble-Count
	bra.s	.no_bubble
.bubbling:
	subq.b	#1,Bob_Special_4(a4)		;New bubble ?
	bpl.s	.no_bubble
	move.b	#30,Bob_Special_4(a4)		;Reset delay

	movem.w	Bob_X_Position(a4),d1-d2
	add.w	#12,d1
	addq.w	#5,d2
	bsr	Check_shoot
	beq.s	.no
	moveq	#15,d0
	lea	Area_Enter_Vector(pc),a1
	move.l	a4,-(sp)
	bsr	Search_Bob_Entry
	move.l	#Bubble,Bob_Routine(a4)
	move.l	#Bubble_AnimTable,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame

	move.l	a4,a0
	move.l	(sp)+,a4
	tst.w	d7
	bmi.s	.no
	bsr	Start_Bubble
.no:
	subq.b	#1,Bob_Special_4+1(a4)		;All bubbles out ?
	bpl.s	.no_bubble
	sf	Bob_Special_3(a4)		;Back to wait-mode...
	move.w	#400,Bob_Special_4(a4)
.no_bubble:

	movem.w	Bob_X_Position(a4),d0-d1
	addi.w	#16,d1
	tst.w	Bob_Special_2(a4)
	bpl.s	.down
	subq.w	#4,d0
	bra.s	.up
.down:
	add.w	#28,d0
.up:
	movem.w	d0-d1,-(sp)
	bsr	check_obj_kollision
	movem.w	(sp)+,d0-d1
	bne.s	.change_dir
	tst.b	Bob_Special_3+1(a4)
	bne.s	.lab1
	addi.w	#16,d1
	bra.s	.lab0
.lab1:
	subi.w	#24,d1
.lab0:
	bsr	check_obj_kollision
	bne.s	.no_change
.change_dir:
	neg.w	Bob_Special_2(a4)
.no_change:
	move.w	Bob_Special_2(a4),d0
	add.w	d0,Bob_X_Position(a4)
	bra	Standart_BobAnim

Krabbe_AnimTableU:
		dc.l	level_GFX+bob09,level_GFX+msk09
		dc.w	0,0,28,2,2,28,24
		dc.l	level_GFX+bob0a,level_GFX+msk0a
		dc.w	0,0,27,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Krabbe_AnimTableU

Krabbe_AnimTableO:
		dc.l	level_GFX+bob09+27*4*4,level_GFX+msk09+27*4
		dc.w	0,0,28,2,2,28,24
		dc.l	level_GFX+bob0a+26*4*4,level_GFX+msk0a+26*4
		dc.w	0,0,27,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Krabbe_AnimTableO

Start_Bubble:
	move.l	#Bubble,Bob_Routine(a0)
	move.l	#Bubble_AnimTable,Bob_Next_Anim(a0)
	moveq	#2,d1
	moveq	#-1,d2
	move.w	T_posX,d0
	add.w	Scr_X_Level_Pos(a6),d0
	sub.w	Bob_X_Position(a0),d0
	bpl.s	.right
	neg.w	d1
.right:
	tst.b	Bob_Special_3+1(a4)
	beq.s	.down
	neg.w	d2
.down:
	movem.w	d1-d2,Bob_Special_2(a0)
	move.w	#12,Bob_Power(a0)
	rts

Bubble:
	moveq	#0,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction

	subq.b	#1,Bob_Special_1(a4)			;Movement slow-down
	bpl.s	.no_move
		addq.b	#3,Bob_Special_1(a4)
		movem.w	Bob_Special_2(a4),d0-d1
		add.w	d0,Bob_X_Position(a4)
		add.w	d1,Bob_Y_Position(a4)
.no_move:

	movem.w	Bob_X_Position(a4),d0-d1		;Wall hit ?
	addq.w	#4,d0
	addq.w	#4,d1
	bsr	check_obj_kollision
	beq.s	.no_wall
;		PLAY_FX	#21

	movem.w	Bob_X_Position(a4),d1-d2
	move.l	a4,-(sp)
	moveq	#2,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.l	(sp)+,a4
	bra	Out_Bob_Damage

.no_wall:
	bra	Standart_BobAnim


Bubble_AnimTable:
		dc.l	level_GFX+bob0b,level_GFX+msk0b
		dc.w	0,1,13,2,2,14,9
		dc.l	level_GFX+bob0c,level_GFX+msk0c
		dc.w	0,2,12,2,2,14,8
		dc.l	level_GFX+bob0d,level_GFX+msk0d
		dc.w	0,0,14,2,2,14,10
		dc.w	ENTRY_END
		dc.l	Bubble_AnimTable

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Canon
*---------------------------------------------------------------------------

Canon_Start:
	move.l	#Canon,Bob_Routine(a4)
	move.w	#60,Bob_Special_1(a4)
	tst.w	Bob_Special_4(a4)
	beq.s	Canon
	bsr	Get_Next_Bob_Frame
Canon:
	moveq	#$60,d0		;Yes, 60 Points
	bsr	Standart_Hit_Handler
	beq	.destruct

	tst.b	Bob_Special_2(a4)
	bne.s	.blink

	subq.w	#1,Bob_Special_1(a4)
	bpl.s	.no_shoot
	move.w	#$0103,Bob_Special_2(a4)
.blink:
	tst.w	quarter_pixel
	bne.s	.no_shoot

	eor.w	#COLOUR+NORM,Bob_Race(a4)

	subq.b	#1,Bob_Special_2+1(a4)
	bpl.s	.no_shoot
	clr.w	Bob_Special_2(a4)
	move.w	#NORM,Bob_Race(a4)
		move.w	#140,Bob_Special_1(a4)
;		PLAY_FX	#16
		movem.w	Bob_X_Position(a4),d0-d1
		moveq	#-1<<6,d2
		moveq	#1<<6,d3
		addi.w	#24,d1
		tst.w	Bob_Special_4(a4)
		beq.s	.to_left
		neg.w	d2
		addi.w	#24,d0
.to_left:
		bsr	Start_Shoot
.no_shoot:
	moveq	#28,d6
	moveq	#0,d0
	move.w	Bob_Race,d1
	cmp.w	Bob_Special_5(a4),d1
	beq.s	.no_change
	move.w	d1,Bob_Special_5(a4)
	moveq	#1,d0
.no_change:
	bsr	Use_Background
	bra	Test_Bob_Out

.destruct:
	moveq	#1,d0
	moveq	#28,d6
	bsr	Use_Background
	bra	Standart_Destruction

Canon_AnimTableL:
		dc.l	level_GFX+bob08,level_GFX+msk08
		dc.w	2,0,28,6,2,28,24
		dc.l	level_Buffer+bob06,level_Buffer+bob06+28*4*4
		dc.w	-2,0,28,6,2,28,24

*---------------------------------------------------------------------------
*	Routine and AnimTable of     Steg
*---------------------------------------------------------------------------
Steg_Start:
	moveq	#5,d0
	bsr	Check_Entries
	bne	Out_Bob
	move.b	#BOB_NOCOL,Bob_Used(a4)
	sub.w	#10,Bob_Y_Position(a4)
	sub.w	#16,Bob_X_Position(a4)
;	clr.w	O_PHA(a5)
;	st	O_SHOW(a5)
;	clr.w	O_USR0(a5)			;Stop- & Angle-Buffer
	clr.w	Bob_Special_6(a4)			;Angle * 256
	sf	Bob_Special_7(a4)			;Rotation-flag
	move.b	#80,Bob_Special_7+1(a4)

	moveq	#3,d2				;Allocate slave-objects
.start:
	movem.l	d2/a4,-(sp)
	movem.w	Bob_X_Position(a4),d1-d2
	moveq	#11,d0
	lea	Area_Enter_Vector(pc),a1
	bsr	Search_Bob_Entry
	move.l	a4,a0
	movem.l	(sp)+,d2/a4
		move.b	#BOB_NOCOL,Bob_Used(a0)
		sf	Bob_Special_3(a0)
		move.l	#handle_spart,Bob_Routine(a0)
;		clr.w	O_PHA(a0)
;		st	O_SHOW(a0)
		move.l	Bob_X_Position(a4),Bob_X_Position(a0)
		pea	(a0)
	dbf	d2,.start
	movem.l	(sp)+,a0-a3
	move.l	a0,Bob_Special_3(a4)
	move.l	a1,Bob_Special_1(a0)
	move.l	a2,Bob_Special_1(a1)
	move.l	a3,Bob_Special_1(a2)
;	move.l	a5,Bob_Special_1(a3)

;	move.w	#1,O_PHA(a4)
;	move.b	zoom_flags,d0
;	andi.b	#$05,d0
;	sne	O_USR4(a5)
;	.if (zero) {
;		ori.b	#$05,zoom_flags
;	} .else {
;		ori.b	#$0a,zoom_flags
;	}
	lea	custom,a5
	move.l	#handle_steg,Bob_Routine(a4)
	rts

handle_steg:
	move.w	Bob_Y_Position(a4),d7

	tst.b	Bob_Special_7(a4)			;Fall / Wait ?
	bne	.rotating

		clr.w	Bob_Special_6(a4)
		movem.w	Bob_X_Position(a4),d0-d1
		add.w	#10,d1
		subi.w	#40,d0
		move.w	d0,d2
		add.w	#112,d2
		bsr	check_foot_frame		;Stand possible ?
		beq	.no_feet
;			tst.b	pl_standing		;Standing on ground ?
;			bne.s	.no_feet
				st	T_stand		;Set flags etc.
				move.w	T_posX,d6
;				add.w	#16,d6
				add.w	Scr_X_Level_Pos(a6),d6
				moveq	#2,d0
				cmp.w	Bob_X_Position(a4),d6
				ble.s	.set
				moveq	#-2,d0
.set:
				move.b	d0,Bob_Special_6(a4)
				sf	Bob_Special_6+1(a4)		;Calc offset
				sub.w	Bob_X_Position(a4),d6
				jsr	sin
				muls	d6,d0
				asr.l	#8,d0
				subi.w	#48+7,d7
				sub.w	d0,d7
				sub.w	Scr_Y_Level_Pos(a6),d7
;				move.w	d7,T_posY
	move.w	Bob_Y_Position(a4),d1
	add.w	#10,d1
	bsr	alias_feet

				subq.b	#1,Bob_Special_7+1(a4)		;Time over ?
				bpl	.no_clip
				st	Bob_Special_7(a4)		;Set turn-flag
				tst.w	Bob_Special_6(a4)
				bpl.s	.no
				move.b	#1,Bob_Special_7(a4)
.no:
				move.l	Bob_Special_3(a4),a0		;Reset speed
;				clr.w	Bob_Special_4(a0)
.no_feet:
		move.b	#60,Bob_Special_7+1(a4)
	bra	.no_clip
.rotating:
		tst.b	Bob_Special_1(a4)			;Turn / Stop ?
		bne.s	.stopping
			move.l	Bob_Special_3(a4),a0
			addq.w	#8,Bob_Special_4(a0)		;Turn -> Accellerate
			cmpi.w	#3<<8,Bob_Special_4(a0)
			ble.s	.no2
			move.w	#3<<8,Bob_Special_4(a0)
.no2:
			move.w	Bob_Special_4(a0),d0		;Move "steg"
			tst.b	Bob_Special_7(a4)
			bpl.s	.left
			add.w	d0,Bob_Special_6(a4)
			bra.s	.right
.left:
			sub.w	d0,Bob_Special_6(a4)
.right:
			move.b	Bob_Special_6(a4),d0		;One turn over ?
			cmpi.b	#-2,d0
			ble.s	.no_clip
			cmpi.b	#2,d0
			bge.s	.no_clip
			move.b	#1,Bob_Special_1(a4)		;Yes, start stop-phase
	bra.s	.no_clip
.stopping:
			moveq	#0,d0
			move.b	Bob_Special_1(a4),d0
			lea	.stop_swing(pc),a0	;Set angle...
			move.b	-1(a0,d0.w),d1
			tst.b	Bob_Special_7(a4)		;Adjust to direction
			bmi.s	.no3
			neg.b	d1
.no3:
			move.b	d1,Bob_Special_6(a4)
			addq.b	#1,d0			;Animation over ?
			move.b	d0,Bob_Special_1(a4)	;Save new angle
			cmpi.b	#31,d0
			bls.s	.no_clip
				sf	Bob_Special_1(a4)	;Reset logic to wait
				sf	Bob_Special_7(a4)
				clr.w	Bob_Special_6(a4)
.no_clip:

	move.b	Bob_Special_6(a4),d0
	addq.w	#4,d0
	and.w	#$00f8,d0
	mulu	#80,d0
	add.l	#Rotate_Buffer2,d0
	move.l	d0,d1
	add.l	#512,d1
	moveq	#32,d2
	moveq	#0,d3
	move.b	Bob_Special_6(a4),d4
	addq.w	#4,d4
	and.w	#$00f8,d4
	bne.s	.not_null
	moveq	#16,d2
	moveq	#8,d3
	add.l	#8*4*4,d0
	add.l	#8*4,d1
.not_null:
	move.l	d0,Bob_Graphics(a4)
	move.l	d1,Bob_Mask(a4)
	move.w	d2,Bob_Height(a4)
	move.w	d3,Bob_Y_Offset(a4)

	move.l	Bob_Special_3(a4),a0

	moveq	#4,d7
.set_gfx:
	move.l	d0,Bob_Graphics(a0)
	move.l	d1,Bob_Mask(a0)
	move.w	d2,Bob_Height(a0)
	move.w	d3,Bob_Y_Offset(a0)
	move.l	Bob_Special_1(a0),a0
	dbf	d7,.set_gfx

	move.b	Bob_Special_6(a4),d0			;Calc position-offset
	jsr	sin
	move.w	d0,d2
	move.b	Bob_Special_6(a4),d0
	jsr	cos
	muls	#22,d0
	muls	#22,d2
	asr.l	#8,d0
	asr.l	#8,d2
	move.l	Bob_Special_3(a4),a0			;Set positions of slave-objects
	movem.w	Bob_X_Position(a4),d6-d7
	move.w	d6,d4
	move.w	d7,d5
	moveq	#1,d1
.set_positions:
		add.w	d0,d6			;Right-side-objects
		sub.w	d2,d7
		movem.w	d6-d7,Bob_X_Position(a0)
		move.l	Bob_Special_1(a0),a0
		sub.w	d0,d4			;Left-side-objects
		add.w	d2,d5
		movem.w	d4-d5,Bob_X_Position(a0)
		move.l	Bob_Special_1(a0),a0
	dbf	d1,.set_positions
	bsr	Test_Bob_Out
	tst.b	Bob_Used(a4)
	bpl.s	.out
	bsr	reset_steg
.out:
	rts

.stop_swing:
	dc.b	1,2,3,4,3,2,1,0,-1,-2,-3,-4
	dc.b	-3,-2,-1,0,1,2,3,2,1,0,-1,-2
	dc.b	-1,0,1,2,1,0
	even

reset_steg:
	move.l	Bob_Special_3(a4),a0			;Free/Reset all objects
	st	Bob_Special_3(a0)
	move.l	Bob_Special_1(a0),a0
	st	Bob_Special_3(a0)
	move.l	Bob_Special_1(a0),a0
	st	Bob_Special_3(a0)
	move.l	Bob_Special_1(a0),a0
	st	Bob_Special_3(a0)
;	move.l	Bob_Special_1(a0),a0
;	st	Bob_Special_3(a0)
	rts

handle_spart:					;Handle slave-objects
	tst.b	Bob_Special_3(a4)
	beq.s	.out
	bra	Out_Bob_Damage
.out:
	rts



Steg_AnimTable:
		dc.l	level_GFX+bob06,level_GFX+msk06
		dc.w	0,0,32,2,2,28,24

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

Diamond_AnimTable:
		dc.l	main_GFX+Mbob29,main_GFX+Mmsk29
		dc.w	0,0,16,2,2,12,11
		dc.l	main_GFX+Mbob2a,main_GFX+Mmsk2a
		dc.w	0,0,16,2,2,12,11
		dc.l	main_GFX+Mbob2b,main_GFX+Mmsk2b
		dc.w	0,0,16,2,2,12,11
		dc.l	main_GFX+Mbob2a,main_GFX+Mmsk2a
		dc.w	0,0,16,2,2,12,11
		dc.w	ENTRY_END
		dc.l	Diamond_AnimTable

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

MineExplo_AnimTable:
		dc.l	main_GFX+Mbob26,main_GFX+Mmsk26
		dc.w	0,16,16,2,2,12,11
		dc.l	main_GFX+Mbob27,main_GFX+Mmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main_GFX+Mbob28,main_GFX+Mmsk28
		dc.w	0,0,32,2,2,12,11
		dc.l	main_GFX+Mbob27,main_GFX+Mmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main_GFX+Mbob28,main_GFX+Mmsk28
		dc.w	0,0,32,2,2,12,11
		dc.l	main_GFX+Mbob27,main_GFX+Mmsk27
		dc.w	0,6,26,2,2,12,11
		dc.l	main_GFX+Mbob28,main_GFX+Mmsk28
		dc.w	0,0,32,2,2,12,11
		dc.w	END_OUT_DAMAGE


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

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      CuePointField
*---------------------------------------------------------------------------
CuePointStart2:
	move.l	#CuePoint2,Bob_Routine(a4)
	move.b	#BOB_NOCOL,Bob_Used(a4)
	move.b	#1<<NO_BOBBLIT,Bob_BlitStatus(a4)
CuePoint2:
	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
	sub.w	#64,d0
	add.w	#64,d2
	sub.w	#64,d1
	add.w	#64,d3

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

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

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

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

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

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

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

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

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

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

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

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

.no_object:
	bsr	calc_ene_angle			;Calc new angle

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

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

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

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

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

calc_ene_angle:
	move.l	a6,-(sp)
	movem.w	Bob_X_Position(a4),d4-d5	;Rocket coordinates
	moveq	#0,d1				;Calc |DY|
	move.w	d7,d1
	sub.w	d5,d1
	bpl.s	.cok
	neg.w	d1
.cok:
	move.w	d1,a6				;Remember |DY| in a6
	move.w	d6,d0				;Calc DX
	sub.w	d4,d0
	muls	d0,d0				;DX*DX
	mulu	d1,d1				;|DY|*|DY|
	add.w	d1,d0				;DX^2+DY^2
	jsr	sqrt				;Pythagoras...
	move.l	a6,d1				;Get and adjust |DY|
	asl.w	#7,d1
	tst.w	d0
	beq.s	.nodiv
	divu	d0,d1				;SIN(X)   (|DY|/R)
.nodiv:
	moveq	#0,d0				;Calculate ASIN
	lea	asin_tab,a0
	move.b	0(a0,d1.w),d0			;Angle	(ASIN(SIN(X)))
	cmp.w	d6,d4				;Adjust angle to full 256 "degrees"
	ble.s	.not_bigger
	cmp.w	d7,d5
	ble.s	.no1
	move.w	#256,d1
	sub.w	d0,d1
	bra.s	.set_angle
.no1:
	move.w	d0,d1
	bra	.set_angle
.not_bigger:
	cmp.w	d7,d5
	ble.s	.no2
	move.w	d0,d1
	addi.w	#128,d1
	bra.s	.set_angle
.no2:
	move.w	#128,d1
	sub.w	d0,d1
.set_angle:					;Save angle with float-part
	move.l	(sp)+,a6
	andi.w	#255,d1				;Mask only lower 8 bits
	rts

Rocket_AnimTable:
		dc.l	main_Buffer+Mbob18-Mbob18,main_Buffer+Mmsk18-Mbob18
		dc.w	0,0,13,2,2,12,11
		dc.l	main_Buffer+Mbob19-Mbob18,main_Buffer+Mmsk19-Mbob18
		dc.w	0,0,14,2,2,12,11
		dc.l	main_Buffer+Mbob1a-Mbob18,main_Buffer+Mmsk1a-Mbob18
		dc.w	0,0,13,2,2,12,11
		dc.l	main_Buffer+Mbob1b-Mbob18,main_Buffer+Mmsk1b-Mbob18
		dc.w	0,0,15,2,2,12,11

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

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

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

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

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

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

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

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

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

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

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

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

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

*---------------------------------------------------------------------------
*	Routine and AnimTable of      Walker
*---------------------------------------------------------------------------
Walker_Start:
	move.w	Bob_Special_4(a4),Bob_Special_5(a4)
	btst	#4,Bob_Special_4+1(a4)
	bne.s	.start_swimming

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

.start_swimming:
	move.l	#Walker_Swim_AnimTableL,Bob_Next_Anim(a4)
	move.l	#Walker_Swim,Bob_Routine(a4)
	moveq	#-1,d0
	btst	#0,Bob_Special_4+1(a4)
	beq.s	.ok2
	move.l	#Walker_Swim_AnimTableR,Bob_Next_Anim(a4)
	moveq	#1,d0
.ok2:
	move.w	d0,Bob_Special_5(a4)
	bsr	Get_Next_Bob_Frame

Walker_Swim:
	moveq	#$50,d0
	bsr	Standart_Hit_Handler
	beq	Standart_Destruction
	move.w	Bob_Special_5(a4),d0
	add.w	d0,Bob_X_Position(a4)
	tst.w	d0
	bmi.s	.to_left

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

	add.w	#32,d0

	jsr	check_obj_kollision
	beq	.no_change

	move.l	#Walker_Swim_AnimTableL,Bob_Next_Anim(a4)

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

	jsr	check_obj_kollision
	beq	.no_change

	move.l	#Walker_Swim_AnimTableR,Bob_Next_Anim(a4)
	bsr	Get_Next_Bob_Frame
	neg.w	Bob_Special_5(a4)

.no_change:
	bra	Standart_BobAnim



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

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

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

	st	T_force_jump
	clr.b	T_state

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

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

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

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

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

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

	;Walker dreht um!

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

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

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


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

	add.w	#32,d0

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

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

	jsr	check_obj_kollision
	bne	.destruct

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

	addq.w	#4,Bob_Y_Position(a4)

	bra	Standart_BobAnim



Walker_Flip	= Tinte_Flip+bob1e-bob17
Muschel_Flip	= Walker_Flip+msk21-bob20+28*4

Walker_Swim_AnimTableR:
		dc.l	level_GFX+bob20,level_GFX+msk20
		dc.w	0,0,28,2,2,28,24
		dc.l	level_GFX+bob21,level_GFX+msk21
		dc.w	0,0,28,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_Swim_AnimTableR

Walker_Swim_AnimTableL:
		dc.l	Walker_Flip+bob20-bob20,Walker_Flip+msk20-bob20
		dc.w	0,0,28,2,2,28,24
		dc.l	Walker_Flip+bob21-bob20,Walker_Flip+msk21-bob20
		dc.w	0,0,28,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_Swim_AnimTableL

Walker_AnimTableR:
		dc.l	level_GFX+bob00,level_GFX+msk00
		dc.w	0,0,28,2,2,28,24
		dc.l	level_GFX+bob01,level_GFX+msk01
		dc.w	0,1,27,2,2,28,24
		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.w	ENTRY_END
		dc.l	Walker_AnimTableR

Walker_MAnimTableR:
		dc.l	level_GFX+bob04,level_GFX+msk04
		dc.w	0,13,15,2,2,28,24
		dc.l	level_GFX+bob05,level_GFX+msk05
		dc.w	0,12,16,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_MAnimTableR

Walker_AnimTableL:
		dc.l	level_Buffer+bob00,level_Buffer+msk00
		dc.w	0,0,28,2,2,28,24
		dc.l	level_Buffer+bob01,level_Buffer+msk01
		dc.w	0,1,27,2,2,28,24
		dc.l	level_Buffer+bob02,level_Buffer+msk02
		dc.w	0,0,28,2,2,28,24
		dc.l	level_Buffer+bob03,level_Buffer+msk03
		dc.w	0,1,27,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_AnimTableL
Walker_MAnimTableL:
		dc.l	level_Buffer+bob04,level_Buffer+msk04
		dc.w	0,13,15,2,2,28,24
		dc.l	level_Buffer+bob05,level_Buffer+msk05
		dc.w	0,12,16,2,2,28,24
		dc.w	ENTRY_END
		dc.l	Walker_MAnimTableL


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

act_level:	dc.w	Level

Init_Datas:
	sf	Swim_Objects
	clr.w	Drop_count
	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:
	move.l	#Col_lab2,Color_Pointer
	lea	Main_Clist,a0
	move.l	a0,cop1lch(a5)

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

	move.l	#Macros,Macro_Pointer

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

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

	jsr	set_copcolors

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

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

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

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

;	lea	level_GFX+bob13,a0
;	lea	Work_Buffer1,a1
;	lea	Rot_Info1,a2
;	lea	level_GFX+msk13,a3
;	moveq	#32,d0
;	moveq	#4,d1
;	jsr	Convert_to_Rotate
;
;	move.l	#Rotate_Buffer,Dest_Obj
;	clr.w	Angle_Obj
;
;.rotate_it:
;	lea	Work_Buffer1,a0
;	lea	Work_Buffer2,a1
;	lea	Rot_Info1,a2
;	move.w	#32,Rot_I_BUF_Width(a2)
;	move.w	Angle_Obj,d0
;	jsr	Do_Rotate
;
;	move.l	Dest_Obj,a0
;	lea	4*32*4(a0),a3
;
;	lea	Work_Buffer2,a1
;	lea	Rot_Info1,a2
;	jsr	Convert_to_Bitplane
;
;	add.l	#640,Dest_Obj
;	addq.b	#8,Angle_Obj+1
;	bne	.rotate_it

	rts

Init_Level_1:
	SONGPLAY #0

	move.l	#Fade1,Fade_Vector

	move.w	#255,Water_Ypos
	move.l	#Col_lab2,Color_Pointer
	move.l	#Check_Player,Player_Vector
	move.l	Act_Scr_Structure,a6
	move.l	#Level1_Clist,Clist_Handler
	move.w	#levelb1,Scr_Level_Width(a6)
	move.l	#Level1-1,Scr_Level_Pointer(a6)
	move.l	#Level1+levelb1,Scr_Level(a6)
	move.w	#levelb1*16-320+16,Scr_X_Max(a6)
	move.w	#levelh1*16-208,Scr_Y_Max(a6)
	move.l	#Area1,Area_Vector
	move.w	#150,Scr_BA_Anz_Area_X(a6)
	move.w	#14/2,Scr_AnzSupplyPlates(a6)
	move.w	#14,Scr_X_Supply_Plates(a6)

	move.l	#Cue_Table1,Act_Cue_Table
	move.l	#Let_Flow_In,SFX_Handler

	move.l	#Special_SupplyX,Scr_Supply_Rout(a6)
	move.l	#Special_Calc_Char,Char_Vector
	move.l	#Special_Set_Char,Backblit_Vector	;Fr UseBackground!

	lea	Para_Buffer-8*76*3,a0
	move.w	#76-2,bltdmod(a5)
	move.w	#0,bltamod(a5)
	move.w	#$09f0,bltcon0(a5)

	move.l	#-1,bltafwm(a5)
	lea	para_map,a1
	moveq	#2-1,d7
.loopy:
	moveq	#19-1,d6
.loopx:
	moveq	#0,d0
	move.b	(a1)+,d0
	mulu	#96,d0
	add.l	#para_char,d0
	move.l	d0,bltapth(a5)
	move.l	a0,bltdpth(a5)
	move.w	#64*16*3+1,bltsize(a5)
	waitblt
	addq.l	#2,a0
	dbf	d6,.loopx
	add.l	#76*3*16-(19*2),a0
	dbf	d7,.loopy

	move.w	#38,bltdmod(a5)
	move.w	#38,bltamod(a5)
	move.l	#Para_Buffer,bltapth(a5)
	move.l	#Para_Buffer+38,bltdpth(a5)
	move.w	#64*3*24+19,bltsize(a5)

	waitblt

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

	lea	Rot_Info1,a2
	move.w	#32,Rot_I_BUF_Width(a2)
	sf	Rot_I_Single_Call(a2)		;Zoomen auf zwei Frames verteilen!
	move.l	#Rotate_Buffer2,Dest_Obj
	clr.l	help
.rotate_it:
	move.l	help,d0
	lea	Work_Buffer1,a0
	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	jsr	Do_Rotate

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

	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	jsr	Convert_to_Bitplane

	add.l	#640,Dest_Obj
 
	addq.b	#8,help+3
	bne.s	.rotate_it


	;Herstellen der Wasseroberflchen-grafik

	lea	Water_Buffer,a0		;Hierhin kommt die Grafik.
	lea	Water_GFX,a1		;Hier sind die Bobs.
	bsr.s	.do_one
	lea	Water_Buffer+2816*1,a0		;Hierhin kommt die Grafik.
	lea	256(a1),a1
	bsr.s	.do_one
	lea	Water_Buffer+2816*2,a0		;Hierhin kommt die Grafik.
	lea	256(a1),a1
	bsr.s	.do_one
	lea	Water_Buffer+2816*3,a0		;Hierhin kommt die Grafik.
	lea	256(a1),a1
	bsr.s	.do_one
	lea	Water_Buffer+2816*4,a0		;Hierhin kommt die Grafik.
	lea	256(a1),a1

.do_one:
	waitblt

	moveq	#10,d7

	move.w	#44-4,bltdmod(a5)
	clr.w	bltamod(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	#$09f0,bltcon0(a5)
.loop:
	move.l	a0,bltdpth(a5)
	move.l	a1,bltapth(a5)
	move.w	#64*16*4+2,bltsize(a5)
	waitblt
	addq.l	#4,a0
	dbf	d7,.loop

	rts

Init_Level_2:
	SONGPLAY #2

	move.l	#Fade2,Fade_Vector

	lea	B_coltab+2,a1
	lea	C_coltab,a0

	move.l	(a0)+,(a1)+
	move.w	(a0)+,(a1)+
	addq.l	#2,a1
	moveq	#11-1,d7
.copy:
	move.w	(a0)+,(a1)+
	dbf	d7,.copy
	move.w	(a0)+,B_coltab+32+8
	move.w	(a0)+,B_coltab+32+6
	move.w	(a0)+,B_coltab+32+14

	lea	B_coltab+32+16(pc),a1
	moveq	#7-1,d7
.copy2:
	move.w	(a0)+,(a1)+
	dbf	d7,.copy2


	lea	parallax,a0
	move.w	#208-1,d7
.copy3:
	clr.w	(a0)+
	dbf	d7,.copy3

	move.l	#WCol_lab2,Color_Pointer
	move.l	#Water_Player,Player_Vector
	move.l	Act_Scr_Structure,a6
	move.l	#Level2_Clist,Clist_Handler
	move.w	#levelb2,Scr_Level_Width(a6)
	move.l	#Level2-1-levelb2,Scr_Level_Pointer(a6)
	move.l	#Level2,Scr_Level(a6)
	move.w	#levelb2*16-320+32-2,Scr_X_Max(a6)
	move.w	#levelh2*16-208,Scr_Y_Max(a6)
	move.l	#Area2,Area_Vector
	move.w	#25,Scr_BA_Anz_Area_X(a6)
	move.w	#16,Scr_X_Supply_Plates(a6)
	move.w	#(16+22)/2+1,Scr_AnzSupplyPlates(a6)
	move.l	#Cue_Table2,Act_Cue_Table
	move.l	#Return,SFX_Handler
	move.w	#-1,Water_Ypos
	move.l	#SupplyX,Scr_Supply_Rout(a6)
	move.l	#Calc_Char,Char_Vector
	move.l	#Set_Char,Backblit_Vector		;Fr UseBackground!

	bsr	wait_tof
	move.l	#Clist2,cop1lch(a5)

	move.w	#-1,Clist_oldcolpos

	rts

Do_Schuss:
	SONGPLAY #7

	move.l	#T_swim_tab,T_antab
	move.w	#4,T_ansize
	move.w	#2,T_anspeed

	lea	Schuss_tab(pc),a0
	lea	GameBpl1+2,a1		;Hier wirds aufgebaut.
	waitblt
	move.w	#$09f0,bltcon0(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	#0,bltamod(a5)
	move.l	#-1,bltafwm(a5)
	move.w	#planeb-2,bltdmod(a5)

	moveq	#3-1,d6
.yloop:
	moveq	#19-1,d7
.xloop:
	moveq	#0,d0
	move.b	(a0)+,d0
	asl.w	#7,d0
	add.l	#Schuss_char,d0
	move.l	d0,bltapth(a5)
	move.l	a1,bltdpth(a5)
	move.w	#64*4*16+1,bltsize(a5)

	waitblt
	addq.l	#2,a1
	dbf	d7,.xloop

	add.l	#planeb*4*16-(19*2),a1
	addq.l	#20-19,a0
	dbf	d6,.yloop

	move.l	#GameBpl1,bltapth(a5)
	move.l	#GameBpl1+planeb*4*48,bltdpth(a5)
	move.w	#0,bltamod(a5)
	move.w	#0,bltdmod(a5)
	move.w	#64*4*48+22,bltsize(a5)
	waitblt

	bsr	.blit_parallax

	move.w	#132,T_posX
	move.w	#85,T_posY
	sf	T_shield		;Spielfigur auf jeden Fall darstellen!
	sf	T_flash

	bsr	wait_tof
	move.l	#GoUpClist,cop1lch(a5)

.loop:
	bsr	wait_tof
	jsr	Anim_Player
	lea	GSprlab(pc),a0
	bsr	Set_Sprites

	tst.w	schuss_mode
	beq.s	.fade_in

	tst.w	Fade_Position
	beq	.over
	subq.w	#1,Fade_Position
	bsr	Fade_to_Dest1
	bra.s	.no_fade

.fade_in:
	cmp.w	#16,Fade_Position
	beq.s	.no_fade

	addq.w	#1,Fade_Position
	bsr	Fade_to_Dest1
.no_fade:

	lea	coltab+2(pc),a0
	lea	GoUpClist(pc),a1
	moveq	#15-1,d7
.set_colors:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.set_colors

	lea	$dff1a0,a1
	moveq	#16-1,d7
.set_colors2:
	move.w	(a0)+,(a1)+
	dbf	d7,.set_colors2

	bsr	.blit_parallax

	jsr	do_pause

	subq.w	#1,schuss_verz
	bne	.loop
	st	schuss_mode
	bra	.loop

.over:
	st	Cue_Point		;Ende der Welt!
	rts

.blit_parallax:
	lea	Para_table(pc),a0
	lea	GameBpl0+2,a1
	lea	GameBpl1+2,a2
	move.w	#planeb-2,bltamod(a5)
	move.w	#planeb-2,bltdmod(a5)

	moveq	#19-1,d7
.blit_loop:
	move.w	(a0),d0		;Position des Teilstcks.
	lsr.w	#6,d0
	mulu	#planeb*4,d0
	add.l	a2,d0
	move.l	d0,bltapth(a5)
	move.l	a1,bltdpth(a5)

	move.w	#64*4*48+1,bltsize(a5)
	waitblt

	move.w	2(a0),d0
	sub.w	d0,(a0)
	bpl.s	.ok
	add.w	#48*64,(a0)
.ok:
	addq.l	#4,a0
	addq.l	#2,a1
	addq.l	#2,a2
	dbf	d7,.blit_loop

	tst.w	speed_verz
	beq.s	.no_speedup
	subq.w	#1,speed_verz


	lea	Para_table(pc),a0
	lea	Speed_table(pc),a1
	moveq	#19-1,d7
.speedup:
	move.w	(a1)+,d0
	add.w	d0,2(a0)
	addq.l	#4,a0
	dbf	d7,.speedup
.no_speedup:
	rts

speed_verz:	dc.w	100

schuss_verz:	dc.w	350
schuss_mode:	dc.w	0

Speed_table:
	dc.w	9,8,7,6,5,4,3,3,3,0,3,3,3,4,5,6,7,8,9

Para_table:
	dcb.w	19*2,0

Schuss_tab:
	incbin	work:modmaps/t3_schuss.mod

Let_Flow_In:
	cmp.w	#4600,Scr_X_Level_Pos(a6)
	blt.s	.out
	st	T_freeze
	clr.w	T_joyforce
	move.w	#4660,Scr_X_Fix(a6)
	lea	Desaster(pc),a1
	jsr	AddHandler
	st	no_time
	move.l	#Check_End,SFX_Handler
	clr.b	surface_mode
	move.w	#230,Water_Ypos
	SONGPLAY #3
.out:
	rts

Check_End:
	move.w	#4660,Scr_Left_Fix(a6)
	cmp.w	#9280,Scr_X_Level_Pos(a6)
	blt.s	.out
	lea	Raise_Water(pc),a1
	jsr	AddHandler

	st	T_freeze
	clr.w	T_joyforce
	st	T_runout

		moveq	#31,d7
.start_bobbles:
		jsr	rnd
		andi.w	#31,d0
		addi.w	#220,d0
		move.w	d0,d2
		jsr	rnd		;Y
		andi.w	#7,d0
		move.w	d7,d1
		mulu	#10,d1
		add.w	d1,d0
		move.w	d0,d1		;X
	move.w	d7,-(sp)
		bsr	start_bobble
	move.w	(sp)+,d7
	dbf	d7,.start_bobbles

	st	no_time

	move.l	#Return,SFX_Handler
.out:
	rts

Raise_Water:
	subq.b	#1,.verz
	bpl.s	.no_start
	addq.b	#1,.verz
	subq.w	#1,Water_Ypos	;Let water-surface raise
	cmpi.w	#32,Water_Ypos
	bgt.s	.no_start
	move.w	#-1,Cue_Point	;Vorbei!
	move.l	#Return,-4(a0)
.no_start:
	rts

.verz:	dc.w	0

Desaster:
	tst.b	T_wheel
	beq.s	.no_wheel
	sf	T_wheel				;Aufstehen!
.no_wheel:

	subq.w	#1,verz
	bpl.s	.no
		move.w	#45,verz
		jsr	rnd
		move.w	d0,d1
		andi.w	#255,d1
		add.w	Scr_X_Level_Pos(a6),d1
		moveq	#-80,d2
		moveq	#17,d0
		lea	Area_Enter_Vector(pc),a1
		bsr	Search_Bob_Entry
		tst.w	d7
		bmi.s	.out
		st	Bob_Special_4(a4)		;Oneshot!
		move.b	#BOB_NOCOL,Bob_Used(a4)
	rts
.no:
	tst.b	surface_mode
	beq.s	.out

	move.l	#Return,-4(a0)
	sf	no_time
	clr.w	Scr_X_Fix(a6)
	sf	T_freeze

	SONGPLAY #1
.out:
	rts

verz:	dc.w	0

Level2_Clist:
	move.l	#Clist2,cop1lch(a5)
	move.l	Act_Scr_Structure,a6
	move.l	Scr_Supply_Field(a6),d0
	move.l	Scr_Show_Field(a6),Scr_Supply_Field(a6)
	move.l	d0,Scr_Show_Field(a6)
	not.w	Scr_Screen_num(a6)

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

	lea	WCoplab1(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	;Adresse der obersten Bildschirm-zeile

	move.l	#planeb,d2

	swap	d0
	move	d0,2(a0)
	swap	d0
	move	d0,6(a0)
	add.l	d2,d0
	swap	d0
	move	d0,10(a0)
	swap	d0
	move	d0,14(a0)
	add.l	d2,d0
	swap	d0
	move	d0,18(a0)
	swap	d0
	move	d0,22(a0)
	add.l	d2,d0
	swap	d0
	move	d0,26(a0)
	swap	d0
	move	d0,30(a0)

	lea	WCoplab2(pc),a0		;Alte Wrap-position
	move.w	Clist_oldcolpos,d1
	bmi.s	.no
	move.w	#COPCOL,4(a0,d1.w)	;Farbding wieder reinschreiben.
.no:
	bsr	blit_parallax

	move.w	#-1,Clist_oldcolpos

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

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

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

.no_copjump:
	lea	WCoplab3(pc),a0
	move.w	d0,26(a0)		;LO-Word
	swap	d0
	move.w	d0,22(a0)		;HI-Word
	move.w	d1,18(a0)		;Farbwert
.dont_update:
	lea	WCoplab3(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.l	#planeb,d2

	move.w	d0,2(a0)
	add.l	d2,d0
	move.w	d0,6(a0)
	add.l	d2,d0
	move.w	d0,10(a0)
	add.l	d2,d0
	move.w	d0,14(a0)

	lea	WSprlab(pc),a0
	bsr	Set_Sprites

	tst.b	Col_Flag
	beq.s	.no_col
	lea	$1b0(a5),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:

	bsr	Water_Effects

	rts


	;Mosaik-Strungen im Farb-Parallax!
Water_Effects:
	lea	WCoplab2(pc),a1
	lea	Effect_List(pc),a0
.loop:
	move.w	(a0),d0			;Y-Position
	bmi.s	.end
	move.w	2(a0),d1

	sub.w	d1,(a0)
	bpl.s	.ok
	add.w	#208,(a0)
.ok:
	move.w	d0,d1

	move.w	d1,d2
	asl.w	#3,d1
	add.w	d2,d2
	add.w	d2,d2
	add.w	d2,d1

	move.w	6(a1,d1.w),d2		;Farbe
	add.w	#12,d1
	addq.w	#1,d0
	cmp.w	#207,d0
	bgt.s	.next
	move.w	d2,6(a1,d1.w)
	cmp.w	#COPCOL,4(a1,d1.w)
	beq.s	.next
	;Hier ist die WRAP-Zeile!
	move.w	d2,WCoplab3+18
.next:
	addq.l	#4,a0
	bra.s	.loop
.end:
	rts

Effect_List:
	dc.w	206,1
	dc.w	105,2
	dc.w	130,1
	dc.w	-1

Level1_Clist:
	move.l	Act_Scr_Structure,a6
;	tst.b	T_rope
;	bne.s	.set
;	move.w	Dol_Speed_X,d0
;	bpl.s	.ok2
;	neg.w	d0
;.ok2:
;	cmp.w	#4,d0
;	blt.s	.reset
;.set:
;	move.w	#14/2,Scr_AnzSupplyPlates(a6)
;	bra.s	.ok
;.reset:
;	move.w	#14/2,Scr_AnzSupplyPlates(a6)
.ok:
	move.l	Scr_Supply_Field(a6),d0
	move.l	Scr_Show_Field(a6),Scr_Supply_Field(a6)
	move.l	d0,Scr_Show_Field(a6)
	not.w	Scr_Screen_num(a6)

SetClist:
	moveq	#0,d0
	move.w	Scr_X_Level_Pos(a6),d0
	move.l	d0,d1
	lsr.w	#1,d1
	add.w	d1,d0
	divu	#304,d0
	swap	d0
	moveq	#0,d2
	move.w	d0,d2

	and.w	#15,d0
	moveq	#15,d1
	sub.w	d0,d1
	move.w	d1,d0
	lsl.w	#4,d0
	or.w	d0,d1
	move.w	d1,Para_lab1+2

	lea	Para_lab1+8,a0

	lsr.w	#3,d2
	and.w	#$fffe,d2

	add.l	#Para_Buffer,d2
	move.w	d2,2(a0)
	add.w	#76,d2
	move.w	d2,10(a0)
	add.w	#76,d2
	move.w	d2,18(a0)

	move.w	Scr_X_Level_Pos(a6),d2
	move.w	d2,d0
;	lsr.w	#1,d0
;	add.w	d0,d2
	move.w	d2,d0

	and.w	#15,d0
	moveq	#15,d1
	sub.w	d0,d1
	move.w	d1,d0
	lsl.w	#4,d0
	or.w	d0,d1
	move.w	d1,Coplab3_jumpadr+14

	move.w	Water_Adress,d0
	and.w	#16,d2
	beq.s	.ok
	addq.w	#2,d0
.ok:
	lea	Coplab3(pc),a0
	moveq	#3,d7
.loop:
	move.w	d0,2(a0)
	add.w	#44,d0
	addq.l	#4,a0
	dbf	d7,.loop

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

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

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

	lea	Coplab2(pc),a0
	move.w	Clist_oldcolpos,d1
	move.w	#COPCOL,4(a0,d1.w)	;Farbding wieder reinschreiben.

	move.w	Clist_oldcolpos2,d1
	move.w	#COPCOL,4(a0,d1.w)	;Farbding wieder reinschreiben.

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

;	move.w	Scr_Plane_Height(a6),d0
;	sub.w	Scr_Y_Play_Anf(a6),d0

	lea	Coplab2(pc),a0
	move.w	Water_GFX_Ypos,d0			;Oberflche

	add.w	#$30,d0
	cmp.w	#$ff,d0
	bhs.s	.no_waterline
	sub.w	#$50,d0
	asl.w	#3,d0

	tst.w	half_pixel
	beq.s	.no_waterline

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

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

	lea	Coplab3_jumpadr(pc),a0
	move.w	d0,6(a0)		;LO-Word
	swap	d0
	move.w	d0,2(a0)		;HI-Word
	move.w	d1,10(a0)		;Farbwert

.no_waterline:
	lea	Coplab2(pc),a0
	move.w	Water_GFX_Ypos,d0			;Oberflche

	add.w	#$30+$10,d0
	cmp.w	#$ff,d0
	bhs.s	.no_colline
	sub.w	#$50,d0
	asl.w	#3,d0

	tst.b	no_dark
	bne.s	.no
	move.w	#Cop_Under_Water/$10000,Dark_Adress+2
	move.w	#Cop_Under_Water&$ffff,Dark_Adress+6
	bra.s	.yes	
.no:
	move.w	#Cop_Under_Water2/$10000,Dark_Adress+2
	move.w	#Cop_Under_Water2&$ffff,Dark_Adress+6
.yes:
	move.w	d0,Clist_oldcolpos2
	move.w	#$0088,4(a0,d0.w)	;Jump auslsen.
	move.w	6(a0,d0.w),d1		;Diese Farbe wurde geschrieben.

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

	lea	Coplab3_jumpadr2(pc),a0
	tst.b	no_dark
	beq.s	.ok1
	lea	Coplab3_jumpadr3(pc),a0
.ok1:
	move.w	d0,6(a0)		;LO-Word
	swap	d0
	move.w	d0,2(a0)		;HI-Word

.no_colline:

.dont_update:

	move.w	Water_GFX_Ypos,d0			;Oberflche
	add.w	#$10,d0
	lea	Cop_Under_Water(pc),a0
	tst.b	no_dark
	beq.s	.ok2
	lea	Cop_Under_Water2(pc),a0
.ok2:
	moveq	#0,d1
	add.w	Scr_Y_Play_Anf(a6),d0
	mulu	Scr_Plane_Width(a6),d0
	move	Scr_X_Level_Pos(a6),d1
	lsr	#3,d1
	add.l	d1,d0
	add.l	Scr_Show_Field(a6),d0

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

	move.w	Scr_X_Level_Pos(a6),d0
	and.w	#15,d0
	moveq	#15,d1
	sub.w	d0,d1
	move.w	d1,d0
	lsl.w	#4,d0
	or.w	d0,d1
	move.w	d1,34(a0)

	lea	Sprlab(pc),a0
	bsr	Set_Sprites

	tst.b	Col_Flag
	beq.s	.no_col
	lea	$1b0(a5),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	4(a0),(a1)+
	sf	Col_Flag
	move.l	a0,a2
	lea	Col_lab4+4+8,a1
	moveq	#3,d7
.colloop1:
	move.w	(a2)+,2(a1)
	lea	4(a1),a1
	dbf	d7,.colloop1

	lea	Coplab3_Colors+17*4(pc),a1

	move.w	(a0),d0
	cmp.w	B_coltab+48,d0			;Normal, kein Shield!
	bne.s	.set0
	lea	C_buffer+34,a0
.set0:
	moveq	#4-1,d7

.sloop2:
	move.w	(a0)+,2(a1)
	lea	4(a1),a1
	dbf	d7,.sloop2

.no_col:
	lea	C_buffer,a0
	lea	Coplab3_Colors+2(pc),a1

	moveq	#2,d7
.loop1:
	move.w	(a0)+,(a1)
	addq.l	#4,a1
	dbf	d7,.loop1

	moveq	#10,d7
.loop2:
	move.w	(a0)+,(a1)
	addq.l	#4,a1
	dbf	d7,.loop2

	cmp.w	#255,Water_Ypos
	beq	.no_water

	tst.b	surface_mode
	bne.s	.no_start
	subq.b	#1,help
	bpl.s	.no_start
	addq.b	#3,help
	subq.w	#1,Water_Ypos	;Let water-surface raise
	cmpi.w	#116,Water_Ypos
	bge.s	.no_start
	addq.b	#1,surface_mode
.no_start:

	moveq	#0,d1				;Let water-surface swing
	move.b	surface_swing,d1
	subq.b	#1,surface_swingdelay
	bpl.s	.no_swing
		addq.b	#6,surface_swingdelay
		addq.b	#1,surface_swing
		andi.b	#15,surface_swing
.no_swing:

	move.w	Water_Ypos,d0
	add.b	Water_schwabb(pc,d1.w),d0
	cmp.w	#32,d0
	bge.s	.swing_ok
	moveq	#32,d0
.swing_ok:
	move.w	d0,Water_GFX_Ypos

	subq.b	#1,surface_delay		;Animate water-surface
	bpl.s	.no_anim
	move.b	#6,surface_delay
	lea	Coplab3(pc),a0
	addq.b	#1,surface_phase
	cmpi.b	#5,surface_phase
	bne.s	.no_null
	sf	surface_phase
	move.w	#Water_Buffer&$ffff-2816,Water_Adress
.no_null:
	add.w	#2816,Water_Adress
.no_anim:
	rts

.no_water:
	move.w	#255,Water_GFX_Ypos
	rts

surface_phase:	dc.b	0
surface_delay:	dc.b	0
surface_mode:	dc.b	1

surface_swingdelay:	dc.b	0
surface_swing:		dc.b	0
Water_schwabb:	dc.b	1,2,3,4,3,2,1,0
		dc.b	-1,-2,-3,-4,-3,-2,-1,0

	even

Water_Adress:	dc.w	Water_Buffer&$ffff-2816

Water_Ypos:	dc.w	255
Water_GFX_Ypos:	dc.w	$90

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)
	addq.l	#8,a0
	dbf	d7,.set_spr
	rts

Col_Buffer2:	dc.l	0,0,0


Clist_oldcolpos:	dc.w	0
Clist_oldcolpos2:	dc.w	0

blit_parallax:
	moveq	#0,d0
	move.w	Scr_Y_Level_Pos(a6),d0
	and.w	#$fffe,d0
	add.l	#B_parallax,d0

	tst.b	Col_Init_Flag
	beq.s	.ok
	move.l	#parallax,d0

.ok:
	waitblt
	move.l	#-1,bltafwm(a5)
	move.l	d0,bltapth(a5)
	move.l	#WCoplab2+6,bltdpth(a5)
	move.w	#10,bltdmod(a5)
	clr.w	bltamod(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	#64*$d0+1,bltsize(a5)

	waitblt

	move.w	Scr_X_Level_Pos(a6),d0
	and.w	#15,d0
	moveq	#15,d1
	sub.w	d0,d1
	move.w	d1,d2
	tst.w	d1
	beq.s	.add
	subq.w	#1,d2
	bra.s	.sub
.add:
	addq.w	#1,d2
.sub:
	move.w	d1,d0
	lsl.w	#4,d0
	or.w	d0,d1

	move.w	d2,d0
	lsl.w	#4,d0
	or.w	d0,d2

	move.w	d1,bltadat(a5)
	move.l	#WCoplab2+10,bltdpth(a5)	;Reinblitten des Shifters
	move.w	#$01f0,bltcon0(a5)
	move.w	#64*$d0+1,bltsize(a5)

	waitblt

						;Strungen einbauen.
	lea	WCoplab2+10(pc),a1
	lea	Effect_List2(pc),a2
	move.w	#208,d4
.loop:
	move.w	(a2),d0			;Y-Position
	bmi.s	.end
	move.w	2(a2),d1

	sub.w	d1,(a2)
	bpl.s	.ok2
	add.w	d4,(a2)
.ok2:
	move.w	d0,d1
	move.w	d0,d3

	asl.w	#3,d0			;*8
	add.w	d3,d3			;*2
	add.w	d3,d3			;*2
	add.w	d3,d0			;*8+*4 = *12

	move.w	d2,(a1,d0.w)		;Neuer Shifter
	addq.w	#2,d1
	cmp.w	d4,d1
	bge.s	.next
	move.w	d2,24(a1,d0.w)		;Neuer Shifter
.next:
	addq.l	#4,a2
	bra.s	.loop
.end:
	rts

Effect_List2:
	dc.w	206,1
	dc.w	105,2
	dc.w	130,1
	dc.w	10,2
	dc.w	-1

Fade_Colors:
	move.l	Fade_Vector,a0
	jmp	(a0)

Fade_Vector:	dc.l	Fade1

Fade3:
	move.l	Act_Scr_Structure,a6
	st	Col_Init_Flag
.fade_out:
	bsr	wait_tof

	st	Col_Flag
;	jsr	SetClist
;	bsr	set_weapon_colors
;	jsr	set_copcolors2

	subq.w	#1,Fade_Position

	move.w	Fade_Position(pc),d7
	lea	B_coltab,a0		;Source
	lea	coltab,a1		;Destination
	move.w	#31,d6
	bsr	Do_Fade_colors

	lea	coltab+32,a0
	lea	$dff1a0,a1
	moveq	#15,d6
.loop:
	move.w	(a0)+,(a1)+
	dbf	d6,.loop

	lea	coltab+2,a0
	lea	BCol_lab3(pc),a1
	moveq	#14,d6
	bsr.s	.set_copcols

	lea	Boss_coltab(pc),a0	;Source
	lea	C_buffer,a1		;Destination
	move.w	#6,d6
	bsr	Do_Fade_colors

	lea	C_buffer,a0
	lea	BCol_lab2(pc),a1
	moveq	#6,d6
	bsr	.set_copcols

	lea	Boss_coltab+42(pc),a0	;Source
	lea	C_buffer,a1		;Destination
	move.w	#6,d6
	bsr	Do_Fade_colors

	lea	C_buffer,a0
	lea	BCol_lab2+8*4(pc),a1
	moveq	#6,d6
	bsr	.set_copcols

	tst.w	Fade_Position
	bne	.fade_out
	sf	Col_Init_Flag
	rts

.set_copcols:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d6,.set_copcols
	rts

Fade1:
	move.l	Act_Scr_Structure,a6
	st	Col_Init_Flag
	tst.w	d0
	bmi.s	.fade_out
.fade_in:
	bsr	wait_tof

	st	Col_Flag
	jsr	SetClist
	bsr	set_weapon_colors
	jsr	set_copcolors2

	addq.w	#1,Fade_Position
	bsr	Fade_to_Dest1

	cmp.w	#16,Fade_Position
	bne	.fade_in
	st	Col_Flag
	jsr	SetClist
	bsr	set_weapon_colors
	jsr	set_copcolors2
	sf	Col_Init_Flag
	rts


.fade_out:
	bsr	wait_tof

	st	Col_Flag
	jsr	SetClist
	bsr	set_weapon_colors
	jsr	set_copcolors2

	subq.w	#1,Fade_Position
	bsr	Fade_to_Dest1

	tst.w	Fade_Position
	bne	.fade_out
	sf	Col_Init_Flag
	rts

set_copcolors2:
	lea	coltab+32,a0
	lea	$180+32(a5),a1
	moveq	#15,d7
.copcols:
	move.w	(a0)+,(a1)+		;Sprite-colors!
	dbf	d7,.copcols

	lea	coltab+40,a0
	lea	Col_lab4+4,a1
	move.w	(a0),-2(a1)
	move.w	-2(a0),2(a1)
	move.w	-2(a0),6(a1)
	addq.l	#8,a1

	lea	8(a0),a0
	moveq	#7-1,d7
.loop1:
	move.w	(a0)+,2(a1)
	lea	4(a1),a1
	dbf	d7,.loop1

	moveq	#6,d7
	lea	coltab+2,a0
	lea	Col_lab3,a1
.setcol1:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.setcol1

	moveq	#7,d7
	lea	Col_lab2+7*4,a1
.setcol2:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.setcol2

	moveq	#6,d7
	lea	P_buffer,a0
	lea	Col_lab2,a1
.setcol3:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.setcol3

	lea	C_buffer+28,a0
	lea	Coplab3_Colors+14*4(pc),a1
	moveq	#10-1,d7

.loop2:
	move.w	(a0)+,2(a1)
	lea	4(a1),a1
	dbf	d7,.loop2

	rts


Fade2:

	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	SetClist2
	bsr	set_weapon_colors
	jsr	set_copcolors

	addq.w	#1,Fade_Position
	bsr	Fade_to_Dest2

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


.fade_out:
	bsr	wait_tof

	st	Col_Flag
	jsr	SetClist2
	bsr	set_weapon_colors
	jsr	set_copcolors

	subq.w	#1,Fade_Position
	bsr	Fade_to_Dest2

	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_Dest1:
	move.w	Fade_Position(pc),d7
	lea	B_coltab,a0		;Source
	lea	coltab,a1		;Destination
	moveq	#31,d6
	bsr	Do_Fade_colors
	lea	Col_Buffer,a0		;Source
	lea	Col_Buffer2,a1		;Destination
	moveq	#5,d6
	bsr	Do_Fade_colors
	lea	C_coltab,a0		;Source
	lea	C_buffer,a1		;Destination
	moveq	#24,d6
	bsr	Do_Fade_colors

	lea	P_coltab,a0		;Source
	lea	P_buffer,a1		;Destination
	moveq	#6,d6
	bsr	Do_Fade_colors
	rts

Fade_to_Dest2:
	move.w	Fade_Position(pc),d7

	moveq	#0,d0
	move.w	Scr_Y_Level_Pos(a6),d0
	and.w	#$fffe,d0
	add.l	#B_parallax,d0
	move.l	d0,a0			;Source

	lea	parallax,a1		;Destination
	move.w	#207,d6
	bsr	Do_Fade_colors

	lea	B_coltab,a0		;Source
	lea	coltab,a1		;Destination
	moveq	#31,d6
	bsr	Do_Fade_colors

	lea	Col_Buffer,a0		;Source
	lea	Col_Buffer2,a1		;Destination
	moveq	#5,d6
	bsr	Do_Fade_colors

	lea	C_coltab,a0		;Source
	lea	C_buffer,a1		;Destination
	moveq	#24,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:
	sf	KillFlash
	cmp.w	#2,act_level
	bne.s	.start_it

	moveq	#0,d0
	move.w	Scr_Y_Level_Pos(a6),d0
	and.w	#$fffe,d0
	add.l	#B_parallax,d0
	move.l	d0,a0			;Source
	move.l	d0,para_pointer

	move.w	#208-1,d7
	lea	parallax,a1
.copy:
	move.w	(a0)+,(a1)+
	dbf	d7,.copy

	tst.b	Krake_flag
	beq.s	.start_it
	lea	Boss_coltab+14(pc),a0
	lea	C_buffer+14,a1
	moveq	#7-1,d7
.copy2:
	move.w	(a0)+,(a1)+
	dbf	d7,.copy2

.start_it:
	lea	Flash_Handler(pc),a1
	jmp	AddHandler

Flash_Handler:
	tst.b	KillFlash
	bne	.kill

	tst.b	flash_mode
	bne	.fade_down

	addq.b	#2,flash_count
	cmp.b	#18,flash_count
	bne.s	.do_flash
	st	flash_mode
	bra	.fade_down
.do_flash:
	cmp.w	#2,act_level
	beq.s	.flash2

	lea	coltab,a0
	moveq	#32-1,d7
	bsr	.color_up

	lea	Col_Buffer2,a0
	moveq	#5,d7
	bsr	.color_up

	lea	C_buffer,a0
	moveq	#24,d7
	bsr	.color_up

	lea	P_buffer,a0
	moveq	#6,d7
	bsr	.color_up

	bra	.set_colors

.flash2:
	tst.b	Krake_flag
	bne.s	.flash3

	lea	coltab,a0
	moveq	#32-1,d7
	bsr	.color_up

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

	bra	.set_colors2

.flash3:
	lea	coltab,a0
	moveq	#32-1,d7
	bsr	.color_up

;	lea	Boss_coltab(pc),a1	;Source
	lea	C_buffer,a0
	moveq	#7-1,d7
	bsr	.color_up

	lea	C_buffer+14,a0
	moveq	#7-1,d7
	bsr	.color_up

	bra	.set_colors3

.fade_down:
	subq.b	#1,flash_count
	bmi	.kill
	cmp.w	#2,act_level
	beq.s	.down2

	lea	coltab,a0
	lea	B_coltab(pc),a1
	moveq	#32-1,d7
	bsr	.color_down

	lea	Col_Buffer2,a0
	lea	Col_Buffer(pc),a1
	moveq	#5,d7
	bsr	.color_down

	lea	C_buffer,a0
	lea	C_coltab(pc),a1
	moveq	#24,d7
	bsr	.color_down

	lea	P_buffer,a0
	lea	P_coltab(pc),a1
	moveq	#6,d7
	bsr	.color_down

	bra	.set_colors

.down2:
	tst.b	Krake_flag
	bne.s	.down3
	
	lea	coltab,a0
	lea	B_coltab(pc),a1
	moveq	#32-1,d7
	bsr	.color_down

	lea	parallax,a0
	move.l	para_pointer(pc),a1
	move.w	#208-1,d7
	bsr	.color_down
	bra	.set_colors2

.down3:	
	lea	coltab,a0
	lea	B_coltab(pc),a1
	moveq	#32-1,d7
	bsr	.color_down

	lea	Boss_coltab(pc),a1	;Source
	lea	C_buffer,a0
	moveq	#7-1,d7
	bsr	.color_down

	lea	Boss_coltab+14(pc),a1	;Source
	lea	C_buffer+14,a0
	moveq	#7-1,d7
	bsr	.color_down

	bra	.set_colors3

.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:
	move.w	coltab,BackColor1+2
	jmp	set_copcolors2
.set_colors2:
	move.w	coltab,BackColor2+2
	st	Col_Init_Flag
	jmp	set_copcolors

.set_colors3:
	move.w	coltab,BackColor3+2
	lea	coltab+2,a0
	lea	BCol_lab3(pc),a1
	moveq	#15-1,d7
.copy1:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.copy1

	lea	Boss_coltab(pc),a0	;Source
	lea	C_buffer,a0		;Destination
	lea	BCol_lab2(pc),a1
	moveq	#7-1,d7
.copy2:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.copy2

	lea	BCol_lab2+8*4(pc),a1
	moveq	#7-1,d7
.copy3:
	move.w	(a0)+,2(a1)
	addq.l	#4,a1
	dbf	d7,.copy3


	jmp	set_copcolors		;Setzt die Sprite-farben!

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

para_pointer:	dc.l	0

Krake_flag:	dc.b	0
		dc.b	0

;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
levelb1	=	600
levelh1	=	15
levelb2	=	100
levelh2	=	102
levelb3	=	80
levelh3	=	71

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

	Even
C_buffer	ds.w	26
P_buffer	ds.w	7

B_coltab:
	dc.w	$0000,$0AAA,$0333,$0666,$0000,$0630,$06BF,$0A90
	dc.w	$0061,$0C60,$0E96,$0FD0,$0C20,$066C,$0660,$0FFF

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

C_coltab:
	dc.w	$0685,$0120,$0353,$0330,$037C,$0460
	dc.w	$0041,$0640,$0961,$0980,$0710,$0346,$0340,$08A8

	dc.w	$0232,$0ccc,$0ccc,$068d,$0136,$0920
	dc.w	$0510,$0861,$0464,$0444


P_coltab:	dc.w	$0CCC,$0630,$0960,$066A,$0A90,$0000,$0EA4

	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

Col_lab4:
	dc.w	$01a8,$0000
	dc.w	$01a6,$0000
	dc.w	$01ae,$0000

	dc.w	$01b0,$0000
	dc.w	$01b2,$0000
	dc.w	$01b4,$0000
	dc.w	$01b6,$0000
	dc.w	$01b8,$0000
	dc.w	$01ba,$0000
	dc.w	$01bc,$0000


	dc.w	$008e,$3091
	dc.w	$0090,$18c1
	dc.w	$0092,$0038
	dc.w	$0094,$00d0
	dc.w	$0108,76*3-40
	dc.w	$010a,76*3-40
	dc.w	$0100,$3000
	dc.w	$0104,0+0*8
Para_lab1:
	dc.w	$0102,$0000

	dc.w	$00e0,Para_Buffer/$10000
	dc.w	$00e2,(Para_Buffer+0*76)&$ffff
	dc.w	$00e4,Para_Buffer/$10000
	dc.w	$00e6,(Para_Buffer+1*76)&$ffff
	dc.w	$00e8,Para_Buffer/$10000
	dc.w	$00ea,(Para_Buffer+2*76)&$ffff

	dc.w	$3001,$fffe
BackColor1:
	dc.w	$0180,$0000
	dc.w	$47e1,$fffe
Coplab4:
	dc.w	$0102,$0000
	dc.w	$0100,$4000
	dc.w	$0104,4+4*8
Coplab1:
	dc.w	$00e0,$0004
	dc.w	$00e2,0
	dc.w	$00e4,$0004
	dc.w	$00e6,0+planeb
	dc.w	$00e8,$0004
	dc.w	$00ea,0+planeb*2
	dc.w	$00ec,$0004
	dc.w	$00ee,0+planeb*3

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

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

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

Dark_Adress:
	dc.w	$0080,Cop_Under_Water/$10000
	dc.w	$0082,Cop_Under_Water&$ffff

Coplab2:
line	SET	$50

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

line	SET	line+1

	ENDR

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

Copjumpin:
	dc.w	$fedf,$fffe
	dc.w	$0100,$0000
	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,Water_Buffer&$ffff
	dc.w	$00e6,(Water_Buffer+44*1)&$ffff
	dc.w	$00ea,(Water_Buffer+44*2)&$ffff
	dc.w	$00ee,(Water_Buffer+44*3)&$ffff
	dc.w	$00e0,Water_Buffer/$10000
	dc.w	$00e4,(Water_Buffer+44*1)/$10000
	dc.w	$00e8,(Water_Buffer+44*2)/$10000
	dc.w	$00ec,(Water_Buffer+44*3)/$10000


Coplab3_jumpadr:
	dc.w	$0084,$0000
	dc.w	$0086,$0000

	dc.w	COPCOL,$0000

	dc.w	$0102,$00ff


	dc.w	$008a	;,$0001			;RETURN

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

	dc.w	$0102,$0000

Coplab3_Colors:
	dc.w	$0182,$0000
	dc.w	$0184,$0000
	dc.w	$0186,$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	$01a8,$0000
	dc.w	$01a6,$0000
	dc.w	$01ae,$0000

	dc.w	$01b0,$0000
	dc.w	$01b2,$0000
	dc.w	$01b4,$0000
	dc.w	$01b6,$0000
	dc.w	$01b8,$0000
	dc.w	$01ba,$0000
	dc.w	$01bc,$0000

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

Coplab3_jumpadr2:
	dc.w	$0084,$0000
	dc.w	$0086,$0000

	dc.w	$008a	;,$0001		;RETURN

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

	dc.w	$0102,$0000
	dc.w	$0108,planeb*4-40
	dc.w	$010a,planeb*4-40
Coplab3_jumpadr3:
	dc.w	$0084,$0000
	dc.w	$0086,$0000

	dc.w	$008a	;,$0001		;RETURN

Clist2:
WCol_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

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

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

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

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

	dc.w	$3001,$fffe
BackColor2:
	dc.w	$0180,$0000

WCoplab2:
line	SET	$30

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

line	SET	line+1

	ENDR

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

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

	dc.w	$008a	;,$0001

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

	dc.w	$0084,$0000
	dc.w	$0086,$0000

	dc.w	$008a	;,$0001

	;$07AA,$0482,$0566,$0288,$0222,$06CA,$0FFF
	;$0796,$08a8,$0353,$0980,$0961,$0121,$0961
Boss_Clist:

BCol_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,$07AA
	dc.w	$0194,$0482
	dc.w	$0196,$0566
	dc.w	$0198,$0288
	dc.w	$019a,$0222
	dc.w	$019c,$06CA
	dc.w	$019e,$0FFF

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

BCoplab4:
	dc.w	$0102,$0000

BCoplab1:
	dc.w	$00e0,$0004
	dc.w	$00e2,0
	dc.w	$00e8,$0004
	dc.w	$00ea,0+planeb*1
	dc.w	$00f0,$0004
	dc.w	$00f2,0+planeb*2

	dc.w	$00e4,Dummy_Playfield/$10000
	dc.w	$00e6,(Dummy_Playfield+80*0)&$ffff
	dc.w	$00ec,Dummy_Playfield/$10000
	dc.w	$00ee,(Dummy_Playfield+80*1)&$ffff
	dc.w	$00f4,Dummy_Playfield/$10000
	dc.w	$00f6,(Dummy_Playfield+80*2)&$ffff

	dc.w	$0108,planeb*3-40
BCoplab5:
	dc.w	$010a,80*3-40

	dc.w	$3001,$fffe
BackColor3:
	dc.w	$0180,$0000

	dc.w	$f007,$fffe

	dc.w	$0100,$4000
	dc.w	$0102,$0000

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

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

BCol_lab3:
	dc.w	$0182,$0BBB
	dc.w	$0184,$0FFF
	dc.w	$0186,$0666
	dc.w	$0188,$0FD0
	dc.w	$018a,$0F96
	dc.w	$018c,$0222
	dc.w	$018e,$0F96

	dc.w	$0190,$0000
	dc.w	$0192,$07AA
	dc.w	$0194,$0482
	dc.w	$0196,$0566
	dc.w	$0198,$0288
	dc.w	$019a,$0222
	dc.w	$019c,$06CA
	dc.w	$019e,$0FFF

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

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

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

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

	dc.w	$00e0,$0004
	dc.w	$00e4,$0004
	dc.w	$00e8,$0004
	dc.w	$00ec,$0004

	dc.w	$3001,$fffe
GCoplab1:
	dc.w	$00e2,0
	dc.w	$00e6,0+planeb
	dc.w	$00ea,0+planeb*2
	dc.w	$00ee,0+planeb*3

	dc.w	$6001,$fffe
GCoplab2:
	dc.w	$00e2,0
	dc.w	$00e6,0+planeb
	dc.w	$00ea,0+planeb*2
	dc.w	$00ee,0+planeb*3

	dc.w	$9001,$fffe
GCoplab3:
	dc.w	$00e2,0
	dc.w	$00e6,0+planeb
	dc.w	$00ea,0+planeb*2
	dc.w	$00ee,0+planeb*3

	dc.w	$c001,$fffe
GCoplab4:
	dc.w	$00e2,0
	dc.w	$00e6,0+planeb
	dc.w	$00ea,0+planeb*2
	dc.w	$00ee,0+planeb*3

	dc.w	$f001,$fffe
GCoplab5:
	dc.w	$00e2,0
	dc.w	$00e6,0+planeb
	dc.w	$00ea,0+planeb*2
	dc.w	$00ee,0+planeb*3

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

	dc.w	$008a,$0001		;Und Tsch.....

Area1:		include	W2_level1_area
