Download it here https://github.com/vpelss/StarTrek-Classic
Try it here https://www.emogic.com/games/StarTrek_Classic/
This is a line for line conversion from one of the many 70’s BASIC version of Star Trek into JavaScript.
I love finding projects I am passionate about. A friend was showing off all his Star Trek games which reminded me of one of the very first computer Star Trek games. I remember playing it on the PET computer. It was written in BASIC.
https//:en.wikipedia.org/wiki/Star_Trek_(1971_video_game)
I was surprised to discover almost no (good) ports of the code to JavaScript. JavaScript would allow it to run on any pc.
I heard a voice in my head say, ‘Thou shalt do this’.
This is a faithful conversion of a StarTrek BASIC program from the early 70’s into JavaScript. (Disclaimer: I made the universe closed, so you can’t fly out of the 8×8 quadrants. Sue me.) Yes, it could have been rewritten from scratch, but I wanted to be as faithful to the original as possible
Challenges:
BASIC pauses at INPUT command. It awaits user input then continues. JavaScript cannot pause. The DOM can only update when the code has completed. Input can only come from a text box event, which starts the JS running code again.
To simulate / mimic the BASIC INPUT command, we end our code in JS just before the BASIC input code while also setting a ‘nextLine’ variable. var ‘nextLine’ indicates where the code should resume after a user input event nextLine = 1270; return; (or equivalent) accomplishes this A user input event will store the user input in a variable ‘globalComandStorage’. Then we call the function switch_board() which looks at nextLine and then calls function Line’nextLine'() Code runs again until we require user input
The BASIC GOTO command is a menace. It makes it easy to write poorly structured code. In some cases, I just restructured the code, in others, I did not. GOTO can be simulated with something similar to GOTO6543(); return; Eventually we will come to an INPUT command. As stated before, to simulate INPUT, we return from and stop all JS code. If there is a big call stack, because of our many GOTOXXXX calls, all the return; commands placed after our GOTOXXXX calls will clean the call stack
I soon needed to create multidimensional arrays. Basic uses a simple G= DIM[7,9,3] format creating an array called G, with dimensions of 7x9x3. JavaScript, oddly enough, does not have an easy, built in, way to create an array like BASIC. So I had to code a JavaScript version of DIM using a recursive function.