
;    /¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\
;   /       /¯¯¯¯¯¯\ /¯¯¯¯¯¯\ /¯¯¯¯¯\  /¯¯¯¯¯¯\ (¯) /¯¯¯¯¯¯\ ®     \
;  /        | /¯¯\_| | /¯¯\_| | /¯¯\ \ | |¯¯| | /¯\ | /¯¯\_|        \
; /         | |      |  ]     | |  | | |  ¯¯  / | | | |              \
; |         | \__/¯| | \__/¯| | \__/ / | |¯\ \  | | | \__/¯|         |
; |         \______/ \______/ \_____/  |_|  \_| \_/ \______/         |
; |__________________________________________________________________|
; |                                                                  |
; | Programm: Christopher Dissauer             Graphics: Miguel Marn |
; |__________________________________________________________________|
; |                                                                  |
; | Letzter Stand: 13.02.1994                                        |                                                                    |
; |                                                                  |
; |  23.01.1994 .. A1200 - Anpassung des Sourcecodes                 |
; |                (lauffähig mit mind. 1MB Chip , 1MB Fast)         |
; |  24.01.1994 .. Bug-Fix: COPJMP2 bei 64k-Override fehlerhaft      |
; |  08.02.1994 .. Energieleiste, sämtl. Zähler in der Statusleiste  |
; |                TOD, AGA-Bug beseitigt			     |
; |  09.02.1994 .. Objekte bei Einfaden gesetzt, Inventory, Auflösung|
; |		   der Münzen u. Edelsteine			     |
; |  12.02.1994 .. Bug-Fix: Münzen nehmen bei Einfaden;	Wurmtod,     |
; |		   Tropfen, spuckende Pflanze, Energie- u.Lebenssymb.|
; |  13.02.1994 .. Scrolling: AGA-Anpassung (BUTTERWEICH!!)	     |
; \__________________________________________________________________/


_todisk		equ	0

_levelno	equ	1

TRUE		equ	1
FALSE		equ	0

_bgnd		equ	TRUE
_talk		equ	FALSE

_levofs		equ	$24000
_ldatofs	equ	_levofs-512

_stacksize	equ	256
_progstart	equ	$e0

_scrheight	equ	240
_scrwidth	equ	46
_scrdepth	equ	4
_viewwidth	equ	36
_viewheight	equ	208
_levheight	equ	128
_levwidth	equ	1024
_sysstack	equ	$80000-10
_sysstack2	equ	_sysstack-_stacksize*4
_sysstack2strt	equ	_sysstack2-_stacksize*4
_plane1		equ	_sysstack2strt-(_scrheight*_scrwidth*_scrdepth*3)-(_levwidth*2)
_plane2		equ	_plane1+_scrwidth
_plane3		equ	_plane2+_scrwidth
_bgnddat	equ	_plane1-40960
_masks		equ	_bgnddat-41000
_coltabs	equ	_masks-4*2*_viewheight
_sprite		equ	_coltabs-928

_mskheight	equ	256
_nmeno		equ	16
_fgblkno	equ	128
_scrlxspeed	equ	2
_invsize	equ	10

_wavlen		equ	1552
_statsprlen	equ	512

_tabofs		equ	344064

_loaderofs	equ	$7f000

_language	equ	0
;----------------------------------------
		include	"game:includes/global.i"
;----------------------------------------
		include	"game:includes/startup.i"

		IFEQ	_todisk
chars		dc.b	'game:gfx/others/char8x12.bmp',0
stchars		dc.b	'game:gfx/others/stchar8x8.bmp',0
waves1		dc.b	'game:gfx/bobs&sprites/waves.spr',0
waves2		dc.b	'game:gfx/bobs&sprites/waves2.spr',0
bigfont		dc.b	'game:gfx/others/bigfont.bmp',0
spr1		dc.b	'game:gfx/bobs&sprites/man32x56.1.spr',0
spr2		dc.b	'game:gfx/bobs&sprites/man32x56.2.spr',0
spr3		dc.b	'game:gfx/bobs&sprites/man32x56.3.spr',0
spr4		dc.b	'game:gfx/bobs&sprites/man32x56.4.spr',0
spr5		dc.b	'game:gfx/bobs&sprites/man32x56.5.spr',0
spr6		dc.b	'game:gfx/bobs&sprites/man32x56.6.spr',0
spr7		dc.b	'game:gfx/bobs&sprites/man32x56.7.spr',0
spr8		dc.b	'game:gfx/bobs&sprites/man32x56.8.spr',0
spr9		dc.b	'game:gfx/bobs&sprites/man32x56.9.spr',0
spr10		dc.b	'game:gfx/bobs&sprites/man32x56.10.spr',0
spr11		dc.b	'game:gfx/bobs&sprites/man32x56.11.spr',0
spr12		dc.b	'game:gfx/bobs&sprites/man32x56.12.spr',0
ldat		dc.b	'game:levels/levelcountry.dat',0
		cnop	0,2
		ENDC
;----------------------------------------
;------------------------------------------------


		section	"b",code_c

		prg_m

;------------------------------------------------
;------------------------------------------------
;------------------------------------------------
blkcopper	dc.l	$01800000
		dc.l	$01000000
		dc.l	$fffffffe

		include	"game:includes/copper_lev1.i"
;------------------------------------------------
sun		incbin	"game:gfx/bobs&sprites/sonne.spr"
bgnd		incbin	"game:gfx/others/backgnd.bmp"

bobs		incbin	"game:gfx/bobs&sprites/mskbobs.bmp"
nrmbobs		incbin	"game:gfx/bobs&sprites/nrmbobs.bmp"
status		incbin	"game:gfx/others/status.bmp"
statusspr	incbin	"game:gfx/bobs&sprites/status.spr"
objectspr	incbin	"game:gfx/bobs&sprites/objects.spr"
objectsprend
objectsgrey	incbin	"game:gfx/bobs&sprites/objects-grey.spr"

lgraph		incbin	"game:gfx/gfx/gfxcountry.bmp"
		ds.b	512-((*-lgraph)&511)

samples		incbin	"game:modules/smp.ingame"
song		incbin	"game:modules/sng.ingame"
		ds.w	16


;------------------------------------------------
;------------------------------------------------
start		bra	dostart

playrout	include	"source:sound/propackplay2.s"

dostart		lea	$dff000,a6
		bsr	geta5
		move.l	$6c.w,oldirq-d(a5)
		lea	newirq(pc),a0
		move.l	a0,$6c.w
		move.l	(_nmem).w,d0
		add.l	#blkcopper,d0
		move.l	d0,$80(a6)
		move.w	#0,$88(a6)
		move.w	#$87e0,$96(a6)
		bsr	geta5
		clr.w	fadeflag-d(a5)
		bsr	init
;		bsr	drawstart
		move.l	(_nmem).w,d0
		add.l	#copper,d0
		move.l	d0,$80(a6)
		move.w	#0,$88(a6)
		move.w	#$c010,$9a(a6)

loop		tst.w	monitorflag-d(a5)
		bne.s	.mon
		tst.w	fadeflag-d(a5)
		beq.s	.c1		
		bsr	dofade
		bra.s	loop
.c1		tst.w	quitflag-d(a5)
		bne	dquit
		tst.w	resetflag-d(a5)
		bne	dreset
		tst.w	turnflag-d(a5)
		bne.s	.turn
		tst.w	textflag-d(a5)
		bne.s	.text
		tst.w	statusflag-d(a5)
		beq.s	.mr
		cmp.w	#4,statusflag-d(a5)
		bmi.s	.status2
		bra.s	.status
.mr		bsr	mainrout
		bra.s	loop
.status2	addq.w	#1,statusflag-d(a5)
		bsr	mainrout
		bra.s	loop
.status		bsr	statrout
		bra.s	loop
.text		bsr	textprint
		bra.s	loop
.turn		bsr	turnback
		bra.s	loop
.mon		bsr	monrout
		bra.s	loop


dquit		dquit_m
		
qu		move.w	#$7fff,$9a(a6)
		move.w	#$7fff,$96(a6)
		move.l	oldirq-d(a5),$6c.w
		bsr	playrout+12
		rts

;------------------------------------------------
;------------------------------------------------
newirq		movem.l	d0-a6,-(a7)
		lea	$dff000,a6
		bsr	geta5
		move.w	#1,irqflag-d(a5)

		bsr	playrout+8

endirq		lea	$dff000,a6
		move.w	#$0010,$9c(a6)
		movem.l	(a7)+,d0-a6
		rte
;------------------------------------------------
;------------------------------------------------
init		bsr	geta5
		bsr	initaga
		bsr	initskycols
		bsr	inittabs
		bsr	initcopper
		bsr	initmusic
		bsr	initbgnd
		bsr	initcoppos
		bsr	initstatus
		bsr	initpositions2

		bsr	saveposition

		bsr	initmasks
		
		bsr	initfganim
		bsr	initbobpos
		
		bsr	initlang

		bsr	drawstart

		bsr	setsun
		move.w	#224,energy-d(a5)
		bsr	showenergy
		move.l	#3,lives-d(a5)
		bsr	updcounters
		move.w	#15,intensity-d(a5)
		move.w	#2,fadeflag-d(a5)
		clr.w	ouchflag-d(a5)

		bsr	setmananim
		moveq	#80,d2
		bsr	writemsg

		rts
;------------------------------------------------
saveposition	saveposition_m
;------------------------------------------------
initaga		initaga_m
;------------------------------------------------
initlang	initlang_m
;------------------------------------------------
initskycols	initskycols_m
;------------------------------------------------
initmasks	initmasks_m
;------------------------------------------------
initfganim	rts

;		lea	d(pc),a5
		move.l	fg-d(a5),a0
		moveq	#_fgblkno-1,d7
.l1		tst.w	fgenable(a0)
		beq.s	.c1
		clr.w	fgenable(a0)
		move.l	fgstartblk(a0),a1
		move.w	fgstartdata(a0),d0
		or.w	d0,(a1)
.c1		addq.l	#4,a0
		dbra	d7,.l1
		clr.w	fgnextfree-d(a5)
		rts
;------------------------------------------------
initbobpos	initbobpos_m
;------------------------------------------------
initstatus	initstatus_m
;------------------------------------------------
setscrnpos	setscrnpos_m
;------------------------------------------------
initpositions	bsr	geta5
		move.l	(_nmem).w,d5
		move.l	#_plane1,d0
		add.l	d5,d0
		move.l	d0,orig-d(a5)
		move.l	#_plane2,d0
		add.l	d5,d0
		move.l	d0,show-d(a5)
		move.l	#_plane3,d0
		add.l	d5,d0
		move.l	d0,draw-d(a5)

		moveq	#0,d0
		move.l	#128,absmanxpos-d(a5)
		move.l	d0,absmanypos-d(a5)
		move.w	#128,manxpos-d(a5)
		move.w	d0,manypos-d(a5)

		move.l	d0,absxpos-d(a5)
		move.w	d0,absypos-d(a5)
		
		move.l	d0,xpos-d(a5)
		
		move.l	#100,xpos-d(a5)
		move.l	#100,actxpos-d(a5)
		move.l	d0,absxpos-d(a5)
		move.l	#100*8,xsoftabs-d(a5)
		move.l	#100*8+128,absmanxpos-d(a5)

		clr.l	manxspeed-d(a5)
		
		move.w	d0,xsoft-d(a5)
		move.w	d0,xscrflag-d(a5)
		move.l	d0,xsetpos1-d(a5)
		move.l	d0,xsetlpos1-d(a5)
		move.l	d0,xsetpos2-d(a5)
		move.l	d0,xsetlpos2-d(a5)
		move.w	d0,xsetspos-d(a5)
		move.w	d0,xhalfflag-d(a5)
		move.l	d0,actyhard-d(a5)
		move.l	d0,actypos-d(a5)
		
		move.l	d0,ysoftadd-d(a5)
		move.w	d0,ysoftpos-d(a5)
		move.l	d0,ypos-d(a5)
		move.l	d0,yhard-d(a5)
		move.l	d0,yshard-d(a5)
		move.w	d0,ysoft-d(a5)
		move.l	d0,ysoftabs-d(a5)
;		move.l	d0,xsoftabs-d(a5)
		move.w	d0,yscrflag-d(a5)
		move.l	d0,ysetlpos-d(a5)
		move.l	d0,ysethard-d(a5)
;		move.l	d0,actxpos-d(a5)
		move.l	d0,ysetbd-d(a5)
		move.w	d0,ysetsoft-d(a5)
		move.w	d0,fallflag-d(a5)
		clr.w	fallspeed-d(a5)
		clr.w	fallpos-d(a5)
		move.w	d0,jumpflag-d(a5)
		move.w	d0,jumpflag2-d(a5)
		clr.w	basketflag-d(a5)
		clr.w	ropeflag-d(a5)
		clr.w	ropedownflag-d(a5)
		clr.w	bfallflag-d(a5)
		clr.w	bstandflag-d(a5)
		clr.w	boatflag-d(a5)
		clr.w	boatrideflag-d(a5)
		clr.w	deathflag-d(a5)
		clr.w	swsinkflag-d(a5)
		clr.w	swsinkflag2-d(a5)
		clr.w	swsinkcount-d(a5)
		move.w	#-100,ouchflag-d(a5)

		move.w	#224,energy-d(a5)
		move.w	#$10,priority-d(a5)
		rts

initpositions2	bsr	initpositions
		lea	saveto-d(a5),a0
		tst.w	newposflag-d(a5)
		beq.s	.c1
		move.l	_xmem,a0
		add.l	#_ldatofs-128,a0
		clr.w	newposflag-d(a5)
.c1		lea	savestart-d(a5),a1
		move.w	#(saveend-savestart)/2-1,d7
.l1		move.w	(a0)+,(a1)+
		dbra	d7,.l1

		move.w	manxpos-d(a5),d0
		lsl.w	#2,d0
		move.w	d0,agamanxpos-d(a5)
		move.l	absmanxpos-d(a5),d0
		lsl.l	#2,d0
		move.l	d0,agaabsmanxpos-d(a5)
		move.l	xsoftabs-d(a5),d0
		lsl.l	#2,d0
		move.l	d0,agaxsoftabs-d(a5)
		rts

initpositions3	bra	initpositions2

		bsr	initpositions
		lea	saveto-d(a5),a0
		tst.w	newposflag-d(a5)
		beq.s	.c1
		move.l	_xmem,a0
		add.l	#_ldatofs-128,a0
		clr.w	newposflag-d(a5)
.c1		lea	savestart-d(a5),a1
		move.w	#(saveend-savestart)/2-1,d7
.l1		move.w	(