View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 02509 | Dragonflight | slave | public | 2011-11-01 14:43 | 2015-07-13 22:32 |
| Reporter | Denis | Assigned To | Wepl | ||
| Priority | low | Severity | feature | Reproducibility | unable to reproduce |
| Status | assigned | Resolution | open | ||
| Project Info | Dragonflight (Thalion) http://www.whdload.de/games/Dragonflight.html | ||||
| Summary | 02509: Dragon flight (All Releases) | ||||
| Description | When you go to Monyk Grocery shop, you must click on arrows to buy the rations. | ||||
| Steps To Reproduce | Right 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. | ||||
| Tags | No tags attached. | ||||
| Attached Files | Dragonflight_WHDLSlave.asm (12,980 bytes)
;*--------------------------------------------------------------------------- ; :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 IFD BARFLY 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 SUPER ENDC ;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 ;============================================================================ IFD BARFLY DOSCMD "WDate >T:date" ENDC _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 " IFD BARFLY INCBIN "T:date" ENDC dc.b 0 dir dc.b 'DragonflightData',0 boot dc.b 'Boot',0 EVEN ;============================================================================ _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 pea TDREASON_WRONGVER 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) pea WHDLTAG_DBGADR_SET 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 PL_END _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) rts .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) rts _f2 cmp.l #$80000,a4 bhi .f21 move.w (a1)+,(a4)+ move.w ($26,a1),(a4)+ rts .f21 addq.l #2,a1 ;addq.l #8,a4 add.l #$3548-$353a-6,(a7) rts _f3 cmp.l #$80000,a4 bhi .f31 move.w (a1),(a4)+ and.w d2,(a1)+ move.w ($26,a1),(a4)+ addq.l #2,(a7) rts .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) rts _retok moveq #0,d0 rts _keyboard ;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) rts .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) rts .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 _loadfile 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 rts ;--- save files _savefile 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 rts ;-------------------------------- ; 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 endc 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 .noste .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 rts .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 EVEN ;file I2 (thalion logo) _p_i2 PL_START PL_PS $ccc4,.1 ;snoop problem PL_L $7c8,4 PL_P $836,.2 PL_END .1 move.w (4,a7),$dff096 move.l (a7),(2,a7) addq.l #2,a7 rts .2 move.l #-2,(a1) move.l 4,$dff080 rts _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 PL_END _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,< > PL_END _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 _cacheon move.l #WCPUF_Base_WT|WCPUF_Exp_CB|WCPUF_Slave_CB|WCPUF_IC|WCPUF_BC|WCPUF_SS|WCPUF_SB|WCPUF_NWA,d0 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 PL_END _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 PL_END ;fix 24 bit access fight sequence _p1_fight PL_START PL_PS $3f76,_p_fight_1a PL_PS $406e,_p_fight_1b PL_END _p2_fight PL_START PL_PS $3f6c,_p_fight_1a PL_PS $4064,_p_fight_1b PL_END _p3_fight PL_START PL_PS $3f94,_p_fight_1a PL_PS $4090,_p_fight_1b PL_END _p4_fight PL_START PL_PS $3f92,_p_fight_1a PL_PS $408a,_p_fight_1b PL_END _p_fight_1a bsr _p_fight_1 move.l (a7),a5 add.w (a5),a5 addq.l #2,(a7) rts _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) rts _p_fight_1 move.l d0,-(a7) move.l (8,a3),d0 and.l #$ffffff,d0 move.l d0,a0 move.l (a7)+,d0 rts _p1_surf PL_START PL_S $1f60,8 ;disk access PL_S $2ca2,8 ;disk access PL_END _p2_surf PL_START PL_S $1f6e,8 ;disk access PL_S $2cb0,8 ;disk access PL_END _p3_surf PL_START PL_S $1f2a,8 ;disk access PL_S $2c08,8 ;disk access PL_END _p4_surf PL_START PL_S $1f70,8 ;disk access PL_S $2cb2,8 ;disk access PL_END ;-------------------------------- _delta _d4_tt00 INCBIN dragonflight_4_tt00.wdlt EVEN ;-------------------------------- _dec1 dl 0 _dec2 dl 0 whdbase dc.l 0 lastadr dc.l 0 version dc.w 0 fl_name ds.b 9+5 | ||||
| Machine | A1200 | ||||
| CPU | 68030 | ||||
| CPUSpeed | 50 | ||||
| ChipSet | AGA | ||||
| GFXCard | None | ||||
| ChipMem | 2 MB | ||||
| FastMem | 0 MB | ||||
| Workbench | OS 3.5 | ||||
| KickROM | 40 - Kick 3.1 | ||||
| KickSoft | None | ||||
| WHDLoad | 17.0 | ||||
| imported | |||||
|
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 :) |
|
|
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. |
|
|
I overread your modified file sent. Origin? Attached a updated slave which includes that changed file and will patch the game at runtime. |
|
| Can you please give feedback? | |
| Thanks Bert, i'll test and come back to you asap ! | |
| 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 |