So… this game seems extremely, uh, bare bones. But it’s my Nick Montfort, and so I’m expecting a lot more! One thing that we can’t help noticing is that after finishing the game, we end up in a Commodore 64 BASIC environment. Typing RUN will restart the game. Typing LIST shows us the code, which I’ll show below. You could also change the code here, though I’m not sure to what purpose. There may be more you can do here, but my BASIC is rather rusty.
Here’s the code. I couldn’t get the - sign to work, so I had to grab part of it line by line:
This code is extremely obfuscated! It’s terrible! No one in their right mind would programme like this! So possibly Nick did this in order to hide something? But I personally don’t really see anything suspicious. (I do believe all responses are entirely random, as many people have suspected.)
So, code wizards around here… does anyone have anything enlightening to say about this?
I don’t know one way or the other, but when I was playing it, the first letter for each line of output frequently came out as “S” and then “A” and then “Y”. And then other lines. And it got that way because it would output something like, “Attacked, a ship lost!”. Which seemed to me to be a way to sort of force the letter A to start a line. I don’t know. Is it trying to say something with the first letter of various lines? I haven’t looked at the source code, but I think the player is supposed to take it on faith that “Y/n” are the only things you can enter. But it lets you type anything there.
(That is a long way to go “I don’t know either,” but I truly do not.)
It makes me wonder though: If either of these two games didn’t have big name creators attached to them, how would they have faired? They’re both viewed as art, but if it was by some no-name person, would they have been ridiculed as a waste of time instead?
so, i should say here, this is one of the odder aspects of the comp. one would expect that attention aligns itself mostly in descending order, with the “great” games getting lots of attention, the “meh” games getting some attention, and the 12-line joke pieces which clearly intend to waste more of your time than they took to author get none. in practice, though, the very bottom of the stack tends to be another major source of attention, both in the sense that it’s always a different sort of game, and in the sense that we tend to find campy humor in discussing pieces which completely fail.
at the end of it, if he gets last, we can even argue that nick’s doing something nice here, which has a history almost as long as the comp. he gets to do his BASIC irony, and nobody sincere has to lose.
Yes and no. It’s not an attached disk image but just a program file sitting in a regular Unix-y filesystem being used by the emulator. You could try to browse that filesystem, although actually doing anything with it would take some lengthy and brutal OPEN15,8,15," work:
Belatedly, I just want to say – the code is not obfuscated.
The lack of spaces is a little annoying. Otherwise, anyone who has programmed BASIC will mostly be able to follow it. You could spread the content over more lines, and use slightly less mean methods to carry out some of the incidental printing, but I assume he was trying to create the smallest program possible that would do what it does.
Re: the printing methods, for instance ‘You win jewels/cattle/bread’ – line 6 picks a random number between 0-2 representing the prize, multiplies the number by 7, adds 1 to work out the position of the first character to print in the string ‘jewels.cattle.bread.’, then prints 6 more characters from the chosen position to produce the name of the prize. The MID$ technique was often used for this kind of thing. It’s never the easiest to read, and you have to calculate the numbers involved to write the statement, and it doesn’t work if all the texts you want to choose from are different lengths, but it works here.
The program starts by creating a string data array. It fills that array with phrases, adjectives and locations. These are the ‘data (yada yada)’ lines at the end of the program.
When BASIC has to look for a line to jump to it, it searches from the start of the program listing. Hence the habit of putting lines with data in them at the end of the program. This speeds up execution because the computer won’t have to loop over non-executable data during play.
The turn loop goes from lines 2-6. Eventually the test at the end of line 6 fails, so the game doesn’t loop back to line 2 (GOTO 2) and instead carries on to the ‘you win’ message of line 10. The data statements en route are just skipped as if they’re not there until the program reaches another executable line.