Thanks for the instructions! I'll have a go at this shortly.
Yes, here are the word-wrap errors I found at the start of the game The Count. (I haven't played very far into the game at all.):
Thanks for the instructions! I'll have a go at this shortly.
Yes, here are the word-wrap errors I found at the start of the game The Count. (I haven't played very far into the game at all.):
Code: Select all
NEW
AUTO
MODE7
DIM S% 255
PRINT
PROCp(131,"Hello there, all you guys and gals. ")
PROCp(131,"This is Eddie, your shipboard computer, welcoming you aboard the starship Heart of Gold...")
PRINT'
PROCp(133,"Oh, shut up, Eddie! ")
PRINT'
PROCp(131,"How rude!")
PRINT'
PROCp(130,"Get us out of here, Eddie! Just do it"+CHR$129+"now!"+CHR$130)
PROCp(130,"We're under attack! They're launching missiles at us!")
PRINT'
PROCp(131,"I can't! All my circuits are irrevocably")
PROCp(131," committed to calculating how to make the"+CHR$133+"perfect"+CHR$131+"cup of tea!")
PRINT'
PROCp(134,"Terrific!")
PRINT'
PROCp(135,"This is it, isn't it? We're definitely going to die!")
PRINT'
END
REM MODE7 colour wordwrap procedure
REM $S% is the string that will be broken into substrings of up to 39 chars and thus wordwrapped.
REM (The fortieth char is the Teletext colour code at the start of each line.)
REM V% is the Teletext colour code to print at the start of every line (unless overridden in $S%).
REM M% is the number of columns of text in MODE7 (i.e. forty).
REM N% is the length of the string $S%.
REM A% points to the start position of the current substring within $S%.
REM Z% points to the end position of the current substring within $S%.
REM C% stores ASCII code 32 (space) or any Teletext colour code from 129 to 135, if found in $S% while searching for the next viable line-break point.
REM (When the final substring is printed, C% stores the string terminator &D.)
REM K% caches the value of C%.
DEFPROCp(V%,$S%):LOCAL M%,N%,A%,Z%,C%,K%:M%=40:N%=LEN$S%:A%=0:Z%=M%-POS
REPEAT:REM Find next printable substring by working backwards from end of next 39-char section, looking for a line-break point
IF Z%>N% Z%=N%:C%=&D ELSE REPEAT Z%=Z%-1:C%=S%?Z%:UNTIL C%=32 OR C%>128ANDC%<136 OR Z%<A%:IF Z%>=A% ELSE IF POS PRINT:Z%=M%:UNTIL0 ELSE STOP:error
IF POS ELSEIF A%=0 OR K%=32 VDUV% ELSE VDUK%:REM Print Teletext colour code if at start of line
S%?Z%=&D:PRINT$(S%+A%);:S%?Z%=C%:REM Print current substring
IF Z%<N% IF POS PRINT:REM Break line if not at end of $S% and cursor isn't at start of line
A%=Z%+1:Z%=A%+M%:K%=C%:REM Update substring pointers, and cache the line-break char
UNTIL A%>=N%
ENDPROC
It's true that the many, many numbers which make up the Actions (which are stored in the original .DAT file as plain text) need to be converted to Beeb integers or reals — but, surprisingly, the English-language text data doesn't necessarily need to be compressed: