Opened 10 years ago

Closed 10 years ago

#4586 closed defect (fixed)

crash when starting Tinsel engine on Solaris/SPARC

Reported by: SF/wooshell Owned by:
Priority: normal Component: Engine: Tinsel
Keywords: Cc:
Game: Discworld

Description

With the rc1 source tarball, both DW and DW2 (english, but probably all) fail to start up on Solaris SPARC.
A few seconds after starting one of the DW's, I end up with this error:
Assertion failed: READ_LE_UINT32(pText + index) == CHUNK_STRING || READ_LE_UINT32(pText + index) == CHUNK_MBSTRING, file engines/tinsel/strres.cpp, line 169
I haven't found any special situation that causes this. If I keep on escaping the intro in DW1, it takes me as far as Rincewind walking to the wardrobe, if I don't skip the intro, I get the crash latest at the flying A'tuin scene.. so it seems rather to happen at a certain timespan after startup - but counting seconds hasn't gotten me anywhere yet either.

As several people have confirmed the engine working on 64bit LE platforms, I guess it's an endianness issue again.
I'll do a few more tests and try to get some debug info to add here, as well as retest with the current svn sources.
If anyone could assist me in tracing the issue, I'd be glad :o)

Ticket imported from: #2852211. Ticket imported from: bugs/4586.

Change History (6)

comment:1 Changed 10 years ago by SF/wooshell

adding a few printfs before the failed assertion... starting dw1eng
pText 28677280, index 0, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 2536, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 5932, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 9520, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 12936, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 15476, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 17708, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 20312, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 22904, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 25688, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 28508, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 30960, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 33808, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 36164, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 38444, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 40476, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 43328, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 45720, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 48168, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 50380, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 52776, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 55388, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 57884, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 60096, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 63108, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 66028, READ_LE_UINT32(pText + index) 859045889
pText 28677280, index 68200, READ_LE_UINT32(pText + index) 2036689012

comment:2 Changed 10 years ago by dreammaster

Interesting.. I had a look at the appropriate code, and it seems to be properly endian wrapped. I tried putting in some printf's myself, and it seems likely you're using the .GRA version. For me, the indexes went up as like below:

index = 63108, offset = 66028
index = 66028, offset = 68968
index = 68968, offset = 71584
index = 71584, offset = 74912

My indexes for the DW1 GRA version remain identical up to 66028, but then the next offset value for the entry at 66028 goes to 68968, whereas yours seems to be 68200, which is an invalid index (and hence the error). It seems likely, therefore, that your english.txt file is corrupted.

Could you try recopying the file from your source disks, and/or try using the same data on another system to confirm that it's your data and not the code.

comment:3 Changed 10 years ago by SF/wooshell

This issue occurs with both DW 1 and 2 in the same way. The same game files play just fine with the Windows rc1 build (except of a few bugs which are well known for the .GRA version, like the confused guards I submitted). FTP'ing the text files over to the Sun again changes nothing.

comment:4 Changed 10 years ago by dreammaster

It might be that your ftp program is mistakenly thinking the language .txt file is a text file, and trying to CR -> CR/LF conversion on it. If you're directly ftp'ing the files, then try zipping up the file before you ftp it, and ftp the zip file instead.

comment:5 Changed 10 years ago by SF/wooshell

Thanks for that hint. Seems like ftpexplorer has a rather weird interpretation of "[x] no automatic ascii conversion". scp'ing the txt files over fixed the issue.

comment:6 Changed 10 years ago by SF/wooshell

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.