'Release' not producing playable file

Every time I click the release button in Inform in one specific project, it gives me the “All went well.” and so on, but when I look to the folder to get the file, the file is a blank file with only half the name and nothing inside. The game name has a colon in it, which I suspect may be the problem as Windows doesn’t accept file names with colons in them, but then maybe this should be alerted and possibly fixed. (To confirm, this is why the game is not loading, so that could be an update feature?)

Is there a way to make the game name different to the name that is what the file is called when it is released?

If I’m not mistaken, using command line tools you can release a file with any name you want. I don’t have time to write out the correct commands here, and besides, what I know only works on Mac OS AFAIK. Maybe there’s someone with Windows expertise in Inform out there?

FYI my script for building a (non-release) version of BOSH is

ni -noprogress -internal /Applications/Inform_old.app/Contents/Resources/Internal/ -external /Users/rileypb/Library/Inform  -project "BOSH1_v9A.inform/" 
&& inform6 -E2wSDG "BOSH1_v9A.inform/Build/auto.inf" "BOSH1_v9A.inform/Build/output.ulx" 
&& cBlorb "BOSH1_v9A.inform/Release.blurb" "BOSH1_v9A.inform/Build/output.gblorb" 

I think that the only difference for release is to add the -release switch to the ni command.

1 Like

After clicking Release and it completing, from the Results tab click on “Console” (near the top right) that will show the actual output of the command line tools. Have a look especially at what’s at the bottom, as that will be the output of inblorb, which is the tool that handles the final release process.

Also, what version of Inform7 are you using? I couldn’t reproduce your problem, but that was with the very latest code here.

Yeah, I see the same bug on Windows (Inform 10.1.2):

"Test: A Thing" by Andrew Plotkin

The Kitchen is a room.

Weirdly, on Mac the file comes out named “Test- A Thing.gblorb”. That implies that there’s some colon-substitution code in there, but it doesn’t happen on Windows.

(Inform 10.1.2.20220830 on Win11.)

EDIT: Whoops, I had Mac Inform set to “I7 9.3”, so that wasn’t an apples-to-apples comparison. When both are set to “current”, the Mac version generates a file called “Test: A Thing.gblorb”. Which is valid in the Mac filesystem, but the Finder displays it as “Test/ A Thing.gblorb” for very ancient reasons!

3 Likes

It looks like the I7 compiler will output the released game file using whatever name is assigned to the story title I7 global.

It may be possible to change the Story directive so that the I6 compiler will use a different name in the game’s banner and other output using this string, but the I7 compiler will continue to compile to a different file name.

Under 10.1, Story is a constant, but the I7 compiler won’t allow use of Undef and does not seem to want to cooperate with a redefinition of Story using Include ... replacing "Story".

Under 6M62, Story is a global, so the Undef directive can’t be used on it. It is possible to replace the Identification section of the Output.i6t template in which it appears to accomplish an alternate definition, but since that section also includes the Serial directive you would need to attend to that string manually with every release.

Interestingly (and FYI @DavidK), I ran into what looks like an I6 compiler bug under 6M62 while trying to figure out a way that wouldn’t require manual management of the release date string:

"Alternate Title"

Place is a room.

Include (-

Global Story = BC_00;

-) after "Identification" in "Output.i6t".  

Include (-

Constant TX_ALT_TITLE = "Your Title Here";
Array BC_00 --> PACKED_TEXT_STORAGE TX_ALT_TITLE;

-) after "Empty" in "RelationKind.i6t".

I6 compiler output (using 6.42 manually with invocation options -wxE2kSDG $huge auto.inf output.ulx; the error type is the same under 6.33N):

Inform 6.42 for Linux (10th February 2024)
<progress hatches clipped>

File "<constructing output>"; Line 0	# *** Compiler error:  Backpatch symbol number out of range
Illegal BP symbol number: 585268
*** MV 11 ZA 18 Off 002c ***
In:  1 source code files             66929 syntactic lines
 56973 textual lines               2087832 characters (ISO 8859-1 Latin1)
Allocated:
 12505 symbols                    11271166 bytes of memory
Out:   Glulx story file 1.250416 (595K long):
	21 classes                          43 objects
   231 global vars                   84384 variable/array space
	96 verbs                           328 dictionary entries
   179 grammar lines (version 2)       251 grammar tokens (unlimited)
   101 actions                          37 attributes (maximum 56)
	37 common props (maximum 253)       23 individual props (unlimited)
112256 characters used in text       87508 bytes compressed (rate 0.779)
	 0 abbreviations (maximum 64)     2941 routines (unlimited)
 70455 instructions of code          39767 sequence points
107776 bytes writable memory used   501504 bytes read-only memory used
609280 bytes used in machine    1073132544 bytes free in machine
Compiled with 1716 suppressed warnings
***********************************************************************
* 'Compiler errors' should never occur if Inform is working properly. *
* This is version 6.42 of Inform, dated   10th February 2024: so      *
* if that was more than a year ago, there may be a more recent        *
* version available, from which the problem may have been removed.    *
* If not, please report this fault as an issue at                     *
* https://github.com/DavidKinder/Inform6/ and if at all possible,     *
* please include your source code, as faults such as these are rare   *
* and often difficult to reproduce.  Sorry.                           *
***********************************************************************

Brief testing suggests that it can be triggered by any repeat declaration of a particular global variable. [EDIT: Nope, not that easy.]

Note that the gblorb file is generated by the cBlorb tool, not the I7 or I6 compiler.

There’s a bug report I7-2329 which is marked “fixed” in 2023. So this will be fixed in the next release, whenever that is.

3 Likes

As for the I6 compiler “Backpatch” error, I can reproduce it but I’m having trouble reducing it to a minimal test case. I’ll keep looking.

If it’s helpful, I was able to trigger what looks like the same type of error when compiling for Glulx using 6.42 with a source of only:

Global Story = BC_0;

Global Story = BC_00;

Array BC_00 --> 3;

Compiling for Z-Machine using 6.42 instead produces:

File "auto.inf"; Line 3	# Error:  "Story" is a name already in use and may not be used as a new global variable name (Global variable "Story" was defined at line 1)

Thanks, that is helpful.

The internal error only occurs when the globals are both defined with a forward-declared constant.

EDIT: But it fails to catch the double-declared global, regardless. (In Glulx only, as you said.)

OK, @SomeOne2, this workaround looks like it will function under 10.1:

"Alternate Title"

Place is a room.

I6 story title is a text that varies. The I6 story title variable translates into I6 as "Story".

After starting the virtual machine:
	now I6 story title is "Your Title Here". 

Test me with "verbose".

The story is compiled to Alternate Title.gblorb (using the I7 global value) while the story reports its name as “Your Title Here” (the I6 global value). I think translates into Inter may be preferable in the future, but into I6 seems to work under 10.1.2. (Or you could just compile manually, as rileypb suggests.)

(Sorry for mixing in the stuff about the I6 issue on this same thread.)

2 Likes

Another workaround would be to write a “rule for printing the banner text” that prints your preferred title instead of the one from the story file. The drawback of both of these solutions is that the title stored in the blorb metadata will be wrong.

1 Like
Global Story = BC_0;
Global Story = BC_00;
Array BC_00 --> 3;
Array BC_0 --> 3;

I’ve added an I6 update. This now produces a more sensible error in both Z and G:

line 2: Error: “Story” is a name already in use and may not be used as a global variable with a different value (Global variable “Story” was defined at line 1)

Any of the following will be okay:

Global Story;
Global Story = BC_00;
Global Story = BC_00;
Global Story;
Global Story = BC_00;
Global Story = BC_00;
3 Likes