2024-02-26 04:23 CET

View Issue Details Jump to Notes ]
IDProjectCategoryView StatusLast Update
0002509Dragonflight[WHDLoad Installs Games] slavepublic2015-07-13 22:32
Assigned ToWeplProject InfoDragonflight (Thalion)
PrioritylowSeverityfeatureReproducibilityunable to reproduce
Summary0002509: Dragon flight (All Releases)
DescriptionWhen you go to Monyk Grocery shop, you must click on arrows to buy
the rations.

Steps To ReproduceRight from the start of the game, just enter in the grocery, then click with the mouse to make the price rising. The stepping is not working correctly, it just get mad, and finally is crashing the game. (

The bug can be reproduced faithfully on the english, german, and french release.
TagsNo tags attached.
ChipMem2 MB
FastMem0 MB
WorkbenchOS 3.5
KickROM40 - Kick 3.1
Attached Files
  • ? file icon DragonFlight.Slave (5,436 bytes) 2013-05-01 17:57
  • ? file icon Dragonflight_WHDLSlave.asm (12,980 bytes) 2013-05-01 17:57 -
    ;  :Program.	dragonflight_whdlslave.asm
    ;  :Contents.	Slave for "Dragonflight"
    ;  :Author.	Dark Angel, Wepl
    ;  :Version.	$Id: Dragonflight_WHDLSlave.asm 1.14 2013/05/01 18:54:23 wepl Exp wepl $
    ;  :History.	18.10.01 adpted for whd10+
    ;			 fixed for snoop
    ;			 disk access (protection?) in pirate town removed
    ;		22.01.02 support for v3 added
    ;		23.05.02 rework finished
    ;		21.06.02 town copylock hopefully final fixed
    ;		25.06.02 cash limit, disk requesters removed, backup disk removed
    ;		10.07.02 more diskrequests removed
    ;			 cash limit set to 30000
    ;		01.04.07 support for french version added
    ;		04.04.07 keyboard fixed
    ;		01.05.13 modified TT00 french included via wdlt (Denis)
    ;  :Requires.	-
    ;  :Copyright.	Public Domain
    ;  :Language.	68000 Assembler
    ;  :Translator.	Barfly V1.131
    ;  :To Do.
    	INCDIR	Includes:
    	INCLUDE	whdload.i
    	INCLUDE	whdmacros.i
    	OUTPUT	"wart:dr/dragonflight/DragonFlight.Slave"
    	BOPT	O+				;enable optimizing
    	BOPT	OG+				;enable optimizing
    	BOPT	ODd-				;disable mul optimizing
    	BOPT	ODe-				;disable mul optimizing
    	BOPT	w4-				;disable 64k warnings
    	;bplcon0 = 4200
    	;bplmod1/2 = 78
    _base		SLAVE_HEADER			;ws_Security + ws_ID
    		dc.w	13			;ws_Version
    		dc.w	WHDLF_NoError|WHDLF_EmulTrap	;ws_flags
    		dc.l	$80000			;ws_BaseMemSize
    		dc.l	0			;ws_ExecInstall
    		dc.w	_start-_base		;ws_GameLoader
    		dc.w	dir-_base		;ws_CurrentDir
    		dc.w	0			;ws_DontCache
    _keydebug	dc.b	0			;ws_keydebug
    _keyexit	dc.b	$5a			;ws_keyexit = NumL
    _expmem		dc.l	$1000			;ws_ExpMem
    		dc.w	_name-_base		;ws_name
    		dc.w	_copy-_base		;ws_copy
    		dc.w	_info-_base		;ws_info
    	DOSCMD	"WDate  >T:date"
    _name		dc.b	"Dragon Flight",0
    _copy		dc.b	"1990 Thalion",0
    _info		dc.b	"installed and fixed by Dark Angel & Wepl",10
    		dc.b	"Version 1.6 "
    		INCBIN	"T:date"
    		dc.b	0
    dir		dc.b	'DragonflightData',0
    boot		dc.b	'Boot',0
    _start	;	A0 = resident loader
    	lea	whdbase(pc),a1
    	move.l	a0,(a1)
    	move.l	a0,a6
    		move.l	_expmem,a7
    		add.l	#$1000,a7
    	bsr	_cacheon
    	lea	boot(pc),a0
    	lea	$3be4.w,a1
    	move.l	a1,a5				;a5 = boot
    	jsr	resload_LoadFileDecrunch(a6)
    	move.l	a5,a0
    	jsr	resload_CRC16(a6)
    		move.l	#$726c,d1
    		move.l	#$735a,d2
    		lea	($1482,a5),a2
    		lea	_pl1,a0
    		cmp.w	#$5b9e,d0		;german
    		beq	.patch
    		lea	_pl2,a0
    		cmp.w	#$f6e5,d0		;english
    		beq	.patch
    		move.l	#$3be4+$368c,d1
    		move.l	#$3be4+$377a,d2
    		lea	($1484,a5),a2
    		lea	_pl3,a0
    		cmp.w	#$e41a,d0		;german 2
    		beq	.patch
    		move.l	#$3be4+$3666,d1
    		move.l	#$3be4+$3754,d2
    		lea	($1460,a5),a2
    		lea	_pl4,a0
    		cmp.w	#$736c,d0		;french
    		beq	.patch
    		jmp	(resload_Abort,a6)
    .patch		lea	_dec1,a1
    		movem.l	d1-d2,(a1)
    		move.l	a5,a1
    		jsr	(resload_Patch,a6)
    		clr.l	-(a7)
    		pea	(a5)
    		move.l	a7,a0
    		jsr	(resload_Control,a6)
    		jsr	(a2)
    		bset	#6,(-$f9,a6)		; manual protection already done
    		jmp	$400
    _pl1234	PL_START
    	PL_P	$292,_retok		;276 requestdisk
    	PL_PS	$2f8,_keyboard
    _pl12	PL_START
    	PL_PS	$33c0,_f3
    	PL_PS	$3422,_f1
    	PL_PS	$34b8,_f1
    	PL_PS	$34e6,_f2
    	PL_PS	$3508,_f1
    	PL_PS	$3536,_f2
    	PL_P	$3680,_decrunch
    	PL_P	$561e,_savefile
    	PL_P	$57a8,_retok		;298 insert (value -> -$14a)
    	PL_P	$57fc,_retok		;29e backup
    	PL_P	$583c,_loadfile
    	PL_NEXT	_pl1234
    _pl1    PL_START
    	PL_W	$8570,30000		;cash limit
    	;PL_I	$9120
    	PL_NEXT	_pl12
    _pl2	PL_START
    	PL_W	$8592,30000		;cash limit
    	PL_NEXT	_pl12
    _pl3	PL_START
    	PL_PS	$33c4,_f3
    	PL_PS	$3426,_f1
    	PL_PS	$34bc,_f1
    	PL_PS	$34ea,_f2
    	PL_PS	$350c,_f1
    	PL_PS	$353a,_f2
    	PL_P	$3684,_decrunch
    	PL_P	$5626,_savefile
    	PL_P	$57b0,_retok		;298 insert (value -> -$14a)
    	PL_P	$5804,_retok		;29e backup
    	PL_P	$5844,_loadfile
    	PL_W	$8580,30000		;cash limit
    	PL_NEXT	_pl1234
    _pl4	PL_START
    	PL_PS	$339e,_f3
    	PL_PS	$3400,_f1
    	PL_PS	$3496,_f1
    	PL_PS	$34c4,_f2
    	PL_PS	$34e6,_f1
    	PL_PS	$3514,_f2
    	PL_P	$365e,_decrunch
    	PL_P	$55fc,_savefile
    	PL_P	$5786,_retok		;298 insert (value -> -$14a)
    	PL_P	$57da,_retok		;29e backup
    	PL_P	$581a,_loadfile
    	PL_W	$854e,30000		;cash limit
    	PL_NEXT	_pl1234
    _f1		cmp.l	#$80000,a4
    		bhi	.f11
    		move.w	(a1),(a4)+
    		and.w	d0,(a1)+
    		move.w	($26,a1),(a4)+
    		addq.l	#2,(a7)
    .f11		and.w	d0,(a1)+
    		and.w	d0,($26,a1)
    		and.w	d0,($4e,a1)
    		;addq.l	#8,a4
    		add.l	#$34d4-$34bc-6,(a7)
    _f2		cmp.l	#$80000,a4
    		bhi	.f21
    		move.w	(a1)+,(a4)+
    		move.w	($26,a1),(a4)+
    .f21		addq.l	#2,a1
    		;addq.l	#8,a4
    		add.l	#$3548-$353a-6,(a7)
    _f3		cmp.l	#$80000,a4
    		bhi	.f31
    		move.w	(a1),(a4)+
    		and.w	d2,(a1)+
    		move.w	($26,a1),(a4)+
    		addq.l	#2,(a7)
    .f31		and.w	d2,(a1)+
    		and.w	d2,($26,a1)
    		and.w	d2,($4e,a1)
    		;addq.l	#8,a4
    		add.l	#$34d4-$34bc-6,(a7)
    _retok		moveq	#0,d0
    	;calculate rawkeycode
    		not.b	d0
    		ror.b	#1,d0
    		cmp.b	(_keydebug,pc),d0
    		beq	.debug
    		cmp.b	(_keyexit,pc),d0
    		beq	.exit
    	;better would be to use the cia-timer to wait, but we arn't know if
    	;they are otherwise used, so using the rasterbeam
    	;required minimum waiting is 75 µs, one rasterline is 63.5 µs
    	;a loop of 3 results in min=127µs max=190.5µs
    		moveq	#3-1,d1
    .wait1		move.b	(vhposr+_custom),d2
    .wait2		cmp.b	(vhposr+_custom),d2
    		beq	.wait2
    		dbf	d1,.wait1
    		add.l	#$306-$2f8-6,(a7)
    .debug		addq.l	#4,a7				;return address
    		movem.l	(a7)+,d0-d2/a6
    		move.w	(a7),(6,a7)			;sr
    		move.l	(2,a7),(a7)			;pc
    		clr.w	(4,a7)				;ext.l sr
    		pea	TDREASON_DEBUG.w
    .quit		move.l	(whdbase,pc),-(a7)
    		addq.l	#resload_Abort,(a7)
    .exit		pea	TDREASON_OK.w
    		bra	.quit
    ;--- file loader
    ; IN:	d0.b	=$41	; disk 1 side a [+$80 = packed]
    ;	d0.b	=$42	; disk 2 side a
    ;	d0.b	=$43	; disk 2 side b
    ;	d0.b	=$44	; disk 1 side b
    ;	a0 = dest
    ;	a1 = name
    ; OUT:	d0 = length
    ;	a0 = dest
    	movem.l	d1-a6,-(sp)
    	lea	fl_name(pc),a2
    .trans	move.b	(a1)+,(a2)+
    	bne	.trans
    	lea	lastadr,a1
    	move.l	a0,(a1)
    	lea	fl_name(pc),a1
    	and.b	#$7f,d0
    	cmp	#'GO',(a1)
    	bne.b	.nogo
    	sub.b	#$42,d0				; disk2 side a go(shapes)
    	add.b	d0,1(a0)			; disk2 side b gp(shapes)
    	bra.b	.get
    .nogo	cmp.l	#'UDO0',(a1)
    	bne.b	.noudo0
    	cmp.b	#$43,d0				; file from disk2 side b was saved
    	beq.b	.get
    	move.l	#$00080008,d0
    	move.l	d0,(a0)+
    	move.l	d0,(a0)
    	moveq	#8,d0
    	bra.w	.nofix
    .noudo0	cmp.l	#'WMON',(a1)
    	bne.b	.get
    	cmp.b	#$42,d0				; doesn't exist on disk2 side a
    	bne.b	.get
    	moveq	#-33,d0
    	bra.w	.nofix
    .get	exg.l	a0,a1
    	move.l	whdbase(pc),a6
    	jsr	resload_LoadFileDecrunch(a6)
    .nofix	movem.l	(sp)+,d1-a6
    ;--- save files
    	movem.l	d1/a0-a1/a6,-(a7)
    	exg.l	a0,a1
    	addq.l	#1,a0
    	move.l	whdbase(pc),a6
    	jsr	resload_SaveFile(a6)
    	movem.l	(a7)+,_MOVEMREGS
    	moveq	#0,d0
    ; if last lw = 0 then decuncher2 else decruncher1
    ; decruncher2 returns unpacked length, decruncher1 not!!! therefore patch
    ; in: a0=src d0=srclen
    ; out: d0=dstlen
    _decrunch	move.l	a2,-(a7)
    		move.l	(-4,a0,d0.l),d1
    		beq	.d2
    		bpl	.d1
    		not.l	d1
    .d1		move.l	d1,-(a7)
    		move.l	_dec1,a2
    		jsr	(a2)
    		move.l	(a7)+,d0
    		bra	.dec
    .d2		move.l	_dec2,a2
    		jsr	(a2)
    .dec		move.l	(a7)+,a2
    	ifeq 1
    	;save all files decompressed
    		movem.l	d0-d1/a0-a3,-(a7)
    		lea	fl_name,a1
    .save1		tst.b	(a1)+
    		bne	.save1
    		subq.l	#1,a1
    		move.l	a1,a3
    		move.l	#".dec",(a1)+
    		clr.b	(a1)+
    		lea	fl_name,a1
    		exg.l	a0,a1
    		move.l	whdbase,a2
    		jsr	(resload_SaveFile,a2)
    		clr.b	(a3)
    		movem.l	(a7)+,_MOVEMREGS
    		movem.l	d0-d1/a0-a3,-(a7)
    		lea	(.base),a3
    	;workaround for file STE because has same length on v1 and v3 but different contents
    		cmp.l	#7580,d0
    		bne	.noste
    		cmp.b	#5,($24d,a0)
    		beq	.noste
    		addq.l	#1,d0			;v1
    .loop		move.l	(a3)+,d1
    		beq	.end
    		cmp.l	d0,d1			;length
    		bne	.next
    		move.w	(a3),d1
    		lea	fl_name,a2
    		lea	(.base,pc,d1.w),a1
    .cmp		move.b	(a2)+,d1
    		cmp.b	(a1)+,d1
    		bne	.next
    		tst.b	d1
    		bne	.cmp
    		move.w	(2,a3),d1
    		lea	(.base,pc,d1.w),a1
    		exg.l	a0,a1
    		move.l	whdbase,a3
    		cmp.w	#_delta-.base,d1
    		bge	.delta
    		jsr	(resload_Patch,a3)
    		bra	.end
    	;copy unpacked data to the end and apply delta
    .delta		move.l	(8,a0),d1
    		move.l	d1,(a7)				;new length
    		addq.l	#3,d1
    		and.w	#$fffc,d1
    		lea	(a1,d1.l),a2
    		move.l	a2,d1
    .delta_copy	move.l	(a1)+,(a2)+
    		subq.l	#4,d0
    		bcc	.delta_copy
    		move.l	a0,a2
    		move.l	d1,a0
    		move.l	(8,a7),a1
    		jsr	(resload_Delta,a3)
    		bra	.end
    .next		addq.l	#4,a3
    		bra	.loop
    .end		movem.l	(a7)+,_MOVEMREGS
    .base		dc.l	67694
    		dc.w	.n_i2-.base,_p_i2-.base
    		dc.l	7581				;faked
    		dc.w	.n_ste-.base,_p1_ste-.base
    		dc.l	7544
    		dc.w	.n_ste-.base,_p2_ste-.base
    		dc.l	7580
    		dc.w	.n_ste-.base,_p3_ste-.base
    		dc.l	7584
    		dc.w	.n_ste-.base,_p4_ste-.base
    		dc.l	18466
    		dc.w	.n_town-.base,_p124_town-.base
    		dc.l	18332
    		dc.w	.n_town-.base,_p124_town-.base
    		dc.l	18442
    		dc.w	.n_town-.base,_p3_town-.base
    		dc.l	18522
    		dc.w	.n_town-.base,_p124_town-.base
    		dc.l	24054
    		dc.w	.n_fight-.base,_p1_fight-.base
    		dc.l	24044
    		dc.w	.n_fight-.base,_p2_fight-.base
    		dc.l	24134
    		dc.w	.n_fight-.base,_p3_fight-.base
    		dc.l	24082
    		dc.w	.n_fight-.base,_p4_fight-.base
    		dc.l	15428
    		dc.w	.n_surf-.base,_p1_surf-.base
    		dc.l	15442
    		dc.w	.n_surf-.base,_p2_surf-.base
    		dc.l	15278
    		dc.w	.n_surf-.base,_p3_surf-.base
    		dc.l	15444
    		dc.w	.n_surf-.base,_p4_surf-.base
    		dc.l	8954
    		dc.w	.n_tt00-.base,_d4_tt00-.base
    		dc.l	0
    .n_i2		dc.b	"I2",0
    .n_ste		dc.b	"STE",0
    .n_town		dc.b	"TOWN",0
    .n_fight	dc.b	"FIGHT",0
    .n_surf		dc.b	"SURF",0
    .n_tt00		dc.b	"TT00",0
    	;file I2 (thalion logo)
    _p_i2		PL_START
    		PL_PS	$ccc4,.1		;snoop problem
    		PL_L	$7c8,4
    		PL_P	$836,.2
    .1		move.w	(4,a7),$dff096
    		move.l	(a7),(2,a7)
    		addq.l	#2,a7
    .2		move.l	#-2,(a1)
    		move.l	4,$dff080
    _p124_ste	PL_START
    		PL_B	$c44,$60		; disable disk backup
    		PL_PS	$bba,_p_ste_1
    		PL_P	$c9e,_retok		;getgamedisk
    		PL_P	$cb6,_retok		;getbackupdisk
    		PL_S	$d30,$d5e-$d30		; expmem check
    _p1_ste		PL_START
    		PL_STR	$19ea,<                             >
    		PL_NEXT	_p124_ste
    _p2_ste		PL_START
    		PL_STR	$19d0,<                    >
    		PL_NEXT	_p124_ste
    _p3_ste		PL_START
    		PL_B	$c62,$60		; disable disk backup
    		PL_PS	$bd8,_p_ste_1
    		PL_P	$cbc,_retok		;getgamedisk
    		PL_P	$cd4,_retok		;getbackupdisk
    		PL_S	$d4e,$d7c-$d4e		; expmem check
    		PL_STR	$19ea,<                             >
    _p4_ste		PL_START
    		PL_STR	$19ef,<                             >
    		PL_NEXT	_p124_ste
    	;disable caches for intro (gfx problems)
    _p_ste_1	move.l	#0,d0
    		move.l	#WCPUF_All,d1
    		move.l	whdbase,a0
    		jsr	(resload_SetCPU,a0)
    		jsr	$18000			;original
    		move.l	#WCPUF_All,d1
    		move.l	whdbase,a0
    		jmp	(resload_SetCPU,a0)
    ; list of smc:
    ; code	destination	new data
    ;  a80	be4		704c = moveq #$4c,d0  no change?
    ;  bd6			build copylock question
    ;  fc4	2958-2974	chksum2
    ;	1c5e		=chksum2 (old 1d6) two times
    ;	bd6-cd4		chksum3
    ; 10e4	1c38.l		smc + check
    ; 1ec4	1bc2-1fac	chksum (all words added = d7)
    ; 1f50	1ece.w		neg.w
    ;	1de2.w		neg.w
    _p124_town	PL_START
    		PL_R	$fc2			;chksum2/3
    		PL_L	$1762,$70004e75		; moveq #0,d0 rts	disk access
    		PL_S	$1d3a,$1d76-$1d3a	;check
    		PL_R	$1e44			;check_manual
    		PL_I	$1ec4			;encode
    _p3_town	PL_START
    		PL_R	$f9e			;chksum2/3
    		PL_L	$173c,$70004e75		; moveq #0,d0 rts	disk access
    		PL_S	$1d14,$1d50-$1d14	;check
    		PL_R	$1e1e			;check_manual
    	;fix 24 bit access fight sequence
    _p1_fight	PL_START
    		PL_PS	$3f76,_p_fight_1a
    		PL_PS	$406e,_p_fight_1b
    _p2_fight	PL_START
    		PL_PS	$3f6c,_p_fight_1a
    		PL_PS	$4064,_p_fight_1b
    _p3_fight	PL_START
    		PL_PS	$3f94,_p_fight_1a
    		PL_PS	$4090,_p_fight_1b
    _p4_fight	PL_START
    		PL_PS	$3f92,_p_fight_1a
    		PL_PS	$408a,_p_fight_1b
    _p_fight_1a	bsr	_p_fight_1
    		move.l	(a7),a5
    		add.w	(a5),a5
    		addq.l	#2,(a7)
    _p_fight_1b	bsr	_p_fight_1
    		subq.l	#4,a7
    		move.l	a0,-(a7)
    		move.l	(8,a7),a0
    		add.w	(a0),a0
    		move.l	a0,(4,a7)
    		move.l	(a7)+,a0
    		addq.l	#2,(4,a7)
    _p_fight_1	move.l	d0,-(a7)
    		move.l	(8,a3),d0
    		and.l	#$ffffff,d0
    		move.l	d0,a0
    		move.l	(a7)+,d0
    _p1_surf	PL_START
    		PL_S	$1f60,8			;disk access
    		PL_S	$2ca2,8			;disk access
    _p2_surf	PL_START
    		PL_S	$1f6e,8			;disk access
    		PL_S	$2cb0,8			;disk access
    _p3_surf	PL_START
    		PL_S	$1f2a,8			;disk access
    		PL_S	$2c08,8			;disk access
    _p4_surf	PL_START
    		PL_S	$1f70,8			;disk access
    		PL_S	$2cb2,8			;disk access
    _d4_tt00	INCBIN	dragonflight_4_tt00.wdlt
    _dec1		dl	0
    _dec2		dl	0
    whdbase		dc.l	0
    lastadr		dc.l	0
    version		dc.w	0
    fl_name		ds.b	9+5
    ? file icon Dragonflight_WHDLSlave.asm (12,980 bytes) 2013-05-01 17:57 +
  • ? file icon dragonflight_4_tt00.wdlt (3,595 bytes) 2013-05-01 17:57



note ~0003031

Denis (reporter)

I have tested again dragonflight with winuae 2.6.0 beta 15, and the problem with the price stepping is not appearing anymore.

However, could it be possible since this game has bugs, to make a trainer in order to have infinite money and energy ?

This will allow to test the game is every way :)

note ~0003086

Wepl (manager)

I don't see why this game/install should have bugs because the german version has been played until the end and all protection related problems are fixed. Also fixes are applied to all supported game version.
Sorry, but because of this I don't see demand to add a trainer.
If anybody else wants to do - feel free. The source is included within the install package.

note ~0003087

Wepl (manager)

I overread your modified file sent. Origin?
Attached a updated slave which includes that changed file and will patch the game at runtime.

note ~0004593

Wepl (manager)

Can you please give feedback?

note ~0004594

Denis (reporter)

Thanks Bert, i'll test and come back to you asap !

-Issue History
Date Modified Username Field Change
2011-11-01 14:43 Denis New Issue
2012-02-01 08:48 StingRay Assigned To => Wepl
2012-02-01 08:48 StingRay Status new => assigned
2013-04-09 14:39 Denis Note Added: 0003031
2013-04-15 20:52 Wepl Project Dragonflight => WinterOlympiad
2013-04-15 20:53 Wepl Project WinterOlympiad => Dragonflight
2013-05-01 16:15 Wepl Note Added: 0003086
2013-05-01 16:16 Wepl Priority high => low
2013-05-01 16:16 Wepl Severity block => feature
2013-05-01 16:16 Wepl Reproducibility always => unable to reproduce
2013-05-01 16:16 Wepl Status assigned => new
2013-05-01 16:17 Wepl Assigned To Wepl =>
2013-05-01 17:57 Wepl File Added: DragonFlight.Slave
2013-05-01 17:57 Wepl File Added: Dragonflight_WHDLSlave.asm
2013-05-01 17:57 Wepl File Added: dragonflight_4_tt00.wdlt
2013-05-01 17:59 Wepl Note Added: 0003087
2015-07-13 22:29 Wepl Note Added: 0004593
2015-07-13 22:29 Wepl Assigned To => Wepl
2015-07-13 22:29 Wepl Status new => feedback
2015-07-13 22:32 Denis Note Added: 0004594
2015-07-13 22:32 Denis Status feedback => assigned
+Issue History