
;********************************************
;* Rick Dangerous A1200 Trainer done by TBC *
;********************************************

	opt	p+

START:	
	SUB.L	A1,A1
	MOVE.L	4.W,A6
	JSR	-294(A6)		; FindTask
	MOVE.L	D0,A4
	MOVEQ	#0,D0
	TST.L	$AC(A4)			; pr_CLI
	BNE.S	FromCLI
	LEA	$5C(A4),A0		; pr_MsgPort
	JSR	-384(A6)		; WaitPort
	LEA	$5C(A4),A0
	JSR	-372(A6)		; GetMsg

FromCLI:
	LEA	Wb_msg(PC),A0
	MOVE.L	D0,(A0)			; Wb_msg sichern
	BSR.S	Main

Wb_exit:
	MOVE.L	Wb_msg(PC),D7
	TST.L	D7
	BEQ.S	Exit
	MOVE.L	4.W,A6
	JSR	-132(A6)		; Forbid
	MOVE.L	D7,A1
	JSR	-378(A6)		; ReplyMsg

Exit:
	MOVEQ	#0,D0
	RTS

Wb_msg:
	dc.l	0

Main:
	movem.l	d1-d7/a0-a6,-(a7)
	move.l	4.W,A6
	moveq	#0,D0
	move.l	#$FFFFFFFF,D1
	jsr	-648(A6)
	lea	dosname(pc),a1
	jsr	-408(A6)
	tst.l	d0
	beq	bye
	move.l	d0,a6
	lea	con(pc),a0
	move.l	a0,d1
	move.l	#1004,d2
	jsr	-30(a6)
	tst.l	d0
	beq 	closelib
	lea	handle(pc),a0
	move.l	d0,(a0)
again:
	lea	check(pc),a0
	move.l	#0,(a0)
	lea	info(pc),a0
	move.l	#ammo-info,d3
	bsr	write
	lea	ammo(pc),a0
	move.l	#bombs-ammo,d3
	bsr	write
	bsr	read
	bne.s	loosenobombs
	lea	check(pc),a0
	move.b	#$FF,(a0)
loosenobombs:
	lea	bombs(pc),a0
	move.l	#lives-bombs,d3
	bsr	write
	bsr	read
	bne.s	loosenolives
	lea	check+1(pc),a0
	move.b	#$FF,(a0)
loosenolives:
	lea	lives(pc),a0
	move.l	#level-lives,d3
	bsr	write
	bsr	read
	bne.s	changelevel	
	lea	check+2(pc),a0
	move.b	#$FF,(a0)	
changelevel:
	lea	level(pc),a0
	move.l	#ok-level,d3
	bsr	write
	move.l	handle(pc),d1
	lea	buffer(pc),a0
	move.l	a0,d2
	move.l	#255,d3
	jsr	-42(a6)
	move.b	buffer(pc),d0
	sub.b	#49,d0
	bmi.s	ende
	cmp.b	#4,d0
	bgt.s	ende
	lea	check+3(pc),a0
	move.b	d0,(a0)	
ende:	lea	ok(pc),a0
	move.l	#help-ok,d3
	bsr	write
	bsr	read
	bne	again
	lea	help(pc),a0
	move.l	#infoend-help,d3
	bsr.s	write
mloop:	btst	#6,$BFE001
	bne.s	mloop
	move.l	handle(pc),d1
	jsr	-36(a6)
	move.l	a6,a1
	move.l	4.w,a6
	jsr	-414(a6)	
	jsr	-132(a6)
	move.w	#$7fff,$DFF09A
	move.w	#$7fff,$DFF096
	move.w	#$0000,$DFF1FC
	lea	packed(PC),A0
	move.l	A0,A1
	add.l	#packedend-packed,A1
	lea	$130000,A2
copy:	move.b	(A0)+,(A2)+
	cmp.l	A0,A1
	bne.s	copy
	movem.l	(a7)+,d1-d7/a0-a6
	lea	$125000,a7
	lea	$120000,a0
clr:	clr.l	(a0)+
	cmp.l	a0,a7
	bne.s	clr	
	jmp	$130000
closelib:
	movem.l	(a7)+,d1-d7/a0-a6
	move.l	a6,a1
	move.l	4.w,a6
	jsr	-414(a6)	
bye:	moveq	#0,d0
	rts

write:
	move.l	a0,d2
	move.l	handle(pc),d1
	jmp	-48(a6)
read:
	move.l	handle(pc),d1
	lea	buffer(pc),a0
	move.l	a0,d2
	move.l	#255,d3
	jsr	-42(a6)
	move.b	buffer(pc),d0
	bclr	#5,d0
	cmp.b	#89,d0
	rts
	
dosname:
	dc.b	'dos.library',0
	cnop	0,2
		
handle:	dc.l	0

buffer:	ds.b	256

con:	dc.b	'con:0/0/640/200/Rick Dangerous A1200 Trainer done by TBC',0
info:	dc.b	12,'Rick Dangerous',10
	dc.b	'---------------',10
	dc.b	'Original cracked and trained by WEETIBIX.',10
	dc.b	'Trained and fixed for A1200 by TBC.',10
ammo:	dc.b	10,'Infinite Ammo ? ( [Y]es / [N]o )',10,'> '
bombs:	dc.b	'Infinite Bombs ? ( [Y]es / [N]o )',10,'> '
lives:	dc.b	'Infinite Lives ? ( [Y]es / [N]o )',10,'> '
level:	dc.b	'Which level do you want to start ? ( 1 - 5 )',10,'> '
ok:	dc.b	10,'Is everything correct ? ( [Y]es / [N]o )',10,'> '
help:	dc.b	10,'Use <HELP> in game to switch collision off / on.',10
	dc.b	10,'Press left mouse button to start game ...',10
infoend:
	cnop	0,2
	
packed:
	moveq	#0,d0
	move.l	#0,a0
	move.w	#$00F0,$DFF180
	bsr	decrunch
	move.w	#$0000,$DFF180
	movem.l	d0-d7/a0-a6,-(a7)
	lea	check(pc),a1
	tst.b	(a1)+
	beq.s	next1
	lea	$45B94,a0
	bsr.s	fill
next1:	tst.b	(a1)+
	beq.s	next2
	lea	$45C68,a0
	bsr.s	fill
next2:	tst.b	(a1)+
	beq.s	game
	lea	$45E3C,a0
	bsr.s	fill
game:	move.b	(a1),$430f9
	movem.l	(a7)+,d0-d7/a0-a6
	lea	$80000,a7
	jmp	$152E0
fill:	move.l	#$4E714E71,(a0)+
	move.l	#$4E714E71,(a0)+
	rts
check:	dc.l	0
decrunch:
	incbin	'df1:datas'
packedend:	
