	IFND	custom
	END
	ENDC

;
;			    Level Daten
;

Level1		= $1f6c4
Level2		= $26274
Sound		= $70200
character	= $176c4
para_char	= $28cc4
para_map	= $29384

level_GFX	= $21a94
AD_Bob		= $21794
Aqua		= $28984

Water_Buffer	= Rotate_Buffer+20480
Water_GFX	= $25d74

Para_Buffer	= Water_Buffer+14080

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
		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	4230,129	;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	#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.l	#-1,bltafwm(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

	move.w	#6,bltamod(a5)
	move.w	#6,bltbmod(a5)
	move.w	#6,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)
	move.w	#$0000,bltcon1(a5)

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

	waitblt

	move.w	#0,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

	move.w	#0,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 herrausrechnen.
	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:
;	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

	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.w	T_speedY		;Yes, down ?
	bmi	.no_feet_check
	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

	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:

	move.w	T_forceX,d6
	bsr	T_move_no_dir
	btst	#LEFT,JoyFlags
	bne	.dleft
	btst	#RIGHT,JoyFlags
	bne	.dright
	bra	.duck_end

.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
.no_feet_check:
	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

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.l	#Bobble,Bob_Routine(a4)
	move.l	#Bobble_AnimTable,Bob_Next_Anim(a4)
	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)

	bra	Get_Next_Bob_Frame

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


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

	move.w	Scr_Y_Level_Pos(a6),d0
	add.w	#100,d0
	move.w	d0,Bob_Y_Position(a4)

	rts

MitScroll_AnimTable:
		dc.l	main_GFX+Mbob04,main_GFX+Mmsk04
		dc.w	0,0,32,0,0,0,0

Bob_Structure:	dcb.b	BOB_MAXIMUM*BOB_ENTRY_LENGTH,BOB_FALSE

Bob_Structure_End = Bob_Structure+(BOB_MAXIMUM*BOB_ENTRY_LENGTH)

Bob_Info_Tab_Adrs	dc.l	Diamond_Info_0
		;--1
		dc.l	Explo_Info_1	;1 Big Xplo
		dc.l	Explo_Info_2	;2 Small Xplo
		dc.l	Box_Info_1	;3 Extrabox
		dc.l	Box_Info_2	;4 Extrabox Deckel
		dc.l	Bonus_Info_1	;5 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	Test_Info_1	;26 testding
Test_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	MitScroll	;Routine, die Bob verwaltet
		dc.l	MitScroll_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_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_Bonus	;Routine, die Bob verwaltet
		dc.l	Bonus1_AnimTable;Zeiger auf nchste Anim

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

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

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

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	Bubble		;Routine, die Bob verwaltet
		dc.l	Bubble_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	-1		;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.

*---------------------------------------------------------------------------
*	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
.init:
	movem.l	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)+,d7/a3/a4
 
		move.l	a0,obj_ptr(a3)
		move.l	#wsnake_slave,Bob_Routine(a0)
;		move.l	O_COL(a5),O_COL(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
	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_SHOW(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	#48,d0
		cmp.w	Water_Ypos,d0		;Only sub power if in water
		ble.s	.no_electric
;			moveq	#10,d0
;			jsr	sub_power.w
.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	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:
	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_Buffer,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

	even

Zoom_Controler:
	tst.w	Zoom_finished
	bne.s	.out
	st	Zoom_finished
	move.l	Zoom_info_pointer,a1
	move.l	(a1),a1
	addq.l	#4,Zoom_info_pointer
	jmp	(a1)
.out:
	rts

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

Zoom_info_pointer:	dc.l	0

Zoom_Handler:
	move.l	Zoom_Routine(pc),a1
	jmp	(a1)

Zoom_Kill:
	move.l	#Return,-4(a0)
	clr.w	Zoom_finished
	rts

Zoom_Rot_1:
	move.l	#Zoom_Rot_2,Zoom_Routine
	move.l	Zoom_pointer,a0
	move.l	(a0),d0
	lea	Work_Buffer1-6,a0
	lea	Work_Buffer2,a1
	lea	Rot_Info1,a2
	jsr	Do_Zoom
	rts

Zoom_Rot_2:
	move.l	#Zoom_Rot_3,Zoom_Routine
	move.l	Dest_Obj,a0
	lea	4*32*4(a0),a3

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

	rts

Zoom_Rot_3:
	move.l	#Zoom_Rot_1,Zoom_Routine
	move.l	Dest_Obj,a0
	lea	4*32*4+4*16(a0),a3
	lea	4*16*4(a0),a0

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

	add.l	#640,Dest_Obj
	addq.l	#4,Zoom_pointer
	move.l	Zoom_pointer,a0
	tst.l	(a0)
	bpl.s	.out
	move.l	#Zoom_Kill,Zoom_Routine
.out:
	rts

Zoom_Routine:	dc.l	Zoom_Rot_1
Zoom_pointer:	dc.l	0
Zoom_finished:	dc.w	0

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

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


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

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

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

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

	cmp.w	d4,d0
	bgt	.no_collect

	move.l	Bob_Act_Anim(a4),a0

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

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

	addq.w	#1,Diamond_Count

	bra	Out_Bob_Damage

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

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

Diamond_Count:	dc.w	0

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

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

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


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

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

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

Wait_Verz:	dc.w	0

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

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

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

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

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

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

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

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

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

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


*---------------------------------------------------------------------------
*	Routine and AnimTable of      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
*---------------------------------------------------------------------------

RSPEED	= 8

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

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

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

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

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

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

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

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

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

	cmp.w	#8,Bob_Anim_Delay(a4)
	ble.s	.set_noflip
	lea	Rocket_Info_2(pc),a0
	sub.l	a4,a0
	bra.s	.setit
.set_noflip:
	lea	Rocket_Info_1(pc),a0
	sub.l	a4,a0
.setit:
	move.w	a0,Bob_to_Info_Offs(a4)

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

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

.no_object:
	bsr	.calc_angle			;Calc new angle

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

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

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

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

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

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

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

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

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

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

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

	bsr	make_plhit
	bra	Out_Bob_Damage

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

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

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

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

	bra	Standart_BobAnim

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

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

	move.l	(sp)+,a4
	bra	Out_Bob_Damage	

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

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

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

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

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

Box_AnimTable:
		dc.l	main_GFX+Mbob20,main_GFX+Mmsk20
		dc.w	0,0,24,2,2,28,20
		dc.l	main_GFX+Mbob22,main_GFX+Mmsk22
		dc.w	0,10,14,2,2,28,20
		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

act_level:	dc.w	Level

Init_Datas:
	sf	Swim_Objects
	rts

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

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

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

	jsr	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+8,Area_Vector
	move.w	#150,Scr_BA_Anz_Area_X(a6)
	move.w	#14/4,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!

	clr.w	Drop_count

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

	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

	;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)
	move.w	#0,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 #1

	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,a1
	moveq	#7-1,d7
.copy2:
	move.w	(a0)+,(a1)+
	dbf	d7,.copy2

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

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

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


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

		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

	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
	bge.s	.no_start
	move.w	#-1,Cue_Point	;Vorbei!
	move.l	#Return,-4(a0)
.no_start:
	rts

.verz:	dc.w	0

Desaster:
	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
		move.w	#-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)
	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)

	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

	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	WCoplab2(pc),a0
	move.w	Clist_oldcolpos,d1
	move.w	#COPCOL,4(a0,d1.w)	;Farbding wieder reinschreiben.

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

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

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

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

.no_copjump:

	lea	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.w	d0,2(a0)
	add.l	#planeb,d0
	move.w	d0,6(a0)
	add.l	#planeb,d0
	move.w	d0,10(a0)
	add.l	#planeb,d0
	move.w	d0,14(a0)

	lea	WSprlab(pc),a0
	bsr	Set_Sprites

	tst.b	Col_Flag
	beq.s	.no_col
	lea	$dff1b0,a1
	lea	Col_Buffer(pc),a0
	tst.b	Col_Init_Flag
	beq.s	.no_init2
	lea	Col_Buffer2(pc),a0
.no_init2:
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	sf	Col_Flag
.no_col:

	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

	asl.w	#3,d1
	move.w	6(a1,d1.w),d2		;Farbe
	addq.w	#8,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/4,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	$dff1b0,a1
	lea	Col_Buffer(pc),a0
	tst.b	Col_Init_Flag
	beq.s	.no_init2
	lea	Col_Buffer2(pc),a0
.no_init2:
	move.l	(a0),(a1)+
	move.l	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+30(pc),a0
.set0:
	moveq	#4-1,d7

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


.no_col:
	lea	C_buffer(pc),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
	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

Water_Adress:	dc.w	Water_Buffer&$ffff-2816

	even

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)
	lea	8(a0),a0
	dbf	d7,.set_spr
	rts

Col_Buffer:	dc.l	0,0,0
Col_Buffer2:	dc.l	0,0,0
Col_Flag:	dc.b	0
Col_Init_Flag:	dc.b	0


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

	;d0 nicht benutzen
init_parallax2:
	move.l	#-1,bltafwm(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	#6,bltdmod(a5)
	move.w	#0,bltamod(a5)
	move.l	#parallax,d3
	move.l	#WCoplab2+6,bltdpth(a5)
	move.l	d3,bltapth(a5)
	move.w	#64*$d0+1,bltsize(a5)
	waitblt
	rts

init_parallax:

	move.l	#-1,bltafwm(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	#6,bltdmod(a5)
	move.w	#0,bltamod(a5)
	move.l	#parallax,d3
	move.l	#Coplab2+6,bltdpth(a5)
	move.l	d3,bltapth(a5)
	move.w	#64*$b0+1,bltsize(a5)

	waitblt

	rts

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:
	move.l	#-1,bltafwm(a5)
	move.l	d0,bltapth(a5)
	move.l	#WCoplab2+6,bltdpth(a5)
	move.w	#6,bltdmod(a5)
	move.w	#0,bltamod(a5)
	move.w	#$09f0,bltcon0(a5)
	move.w	#$0000,bltcon1(a5)
	move.w	#64*$d0+1,bltsize(a5)

	waitblt

	rts

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

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

Fade_Vector:	dc.l	Fade1

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	$dff180+32,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(pc),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
	move.w	#31,d6
	bsr	Do_Fade_colors
	lea	Col_Buffer,a0		;Source
	lea	Col_Buffer2,a1		;Destination
	move.w	#5,d6
	bsr	Do_Fade_colors
	lea	C_coltab,a0		;Source
	lea	C_buffer,a1		;Destination
	move.w	#24,d6
	bsr	Do_Fade_colors

	lea	P_coltab,a0		;Source
	lea	P_buffer,a1		;Destination
	move.w	#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
	move.w	#31,d6
	bsr	Do_Fade_colors

	lea	Col_Buffer,a0		;Source
	lea	Col_Buffer2,a1		;Destination
	move.w	#5,d6
	bsr	Do_Fade_colors

	lea	C_coltab,a0		;Source
	lea	C_buffer,a1		;Destination
	move.w	#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

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

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

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

planeb	=	40+4

	Even
coltab:
	dcb.w	32,0

B_coltab:
	dc.w	$0000,$0AAA,$0333,$0666,$0F0F,$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

C_buffer:	ds.w	26

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

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

WCoplab2:
line	SET	$30

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

line	SET	line+1

	ENDR

	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	$0180,$0000

	dc.w	$008a,$0001


B_parallax:	incbin	work:sources/t3/bitplanes/w2_copper3.col

Area1:		include	W2_level1_area
Area2:		include	W2_level2_area

