hlabrand Posted August 16, 2020 Share Posted August 16, 2020 Hi TI-99/4Aers! I am currently writing a text adventure, "Tristam Island", for retro (and some handheld) systems. I am aiming for about two dozen of different ports: Commodore 64, PET, VIC-20, Apple II, Amstrad CPC, TRS-80 CoCo, Atari 8-bit, Atari ST, Amiga, Spectrum, etc. (but also Dreamcast, Game Boy Color, Game Boy Advance, and Nintendo DS !). Today, I have exciting news to share with you: I will be releasing this text adventure for the TI-99/4A! As far as I know (correct me if I'm wrong), this will be the first text adventure that uses Infocom's tools to be released in 30odd years! If you recall, Barry Boone was the first to figure out how to reuse Infocom's interpreter with different game data; this was used to release post-1984 Infocom games like Ballyhoo or Leather Goddesses of Phobos, after Infocom stopped making official versions. Boone's interpreter also provided fixes, and compatibility with 80-column displays, and the Geneve. The tricky part was managing to massage the game file into the format chosen by Infocom (two D/F 255 files). With help from Boone himself, and from Shift838 (who helped me getting started with the TI-99/4A and hacked the disk image to load the correct things), I wrote a Python script that takes a ".z3" Z-Machine file, and outputs the two files needed by the TI-99/4A interpreter, in the correct format. I am happy to release this script for all to use, on my Github account. The simplest way to use it is to take an Infocom file (zork1.dsk for instance) and name your game ZRK1.z3; the Python script will give you 2 files that you can copy (using TI99dir) inside zork1.dsk, overwriting the Infocom game files. All that remains is hacking the other files to get it to display something else than "Zork" in the title menu; if you bug Shift838 enough, I am told he might consider building a user-friendly tool which does that hacking for you I hope you're as excited by this as I am! If you want more regular updates on the game, you should follow me on Twitter (@hlabrande); if you want to get notified of the release, you should follow me on itch.io! And of course, a big thank you to Barry Boone and Shift838 14 Quote Link to comment Share on other sites More sharing options...
+FarmerPotato Posted August 16, 2020 Share Posted August 16, 2020 Oh this is awesome! A new Z-machine adventure ported! I think you are right that you are first to port new content! I look forward to putting it on real hardware! 1 Quote Link to comment Share on other sites More sharing options...
+InsaneMultitasker Posted August 16, 2020 Share Posted August 16, 2020 So very cool! Great job!!!! Your work not only gives us a new game to play but opens up some exciting possibilities!! 3 Quote Link to comment Share on other sites More sharing options...
hlabrand Posted August 16, 2020 Author Share Posted August 16, 2020 @FarmerPotato Thanks! I'm exploring the possibility of a physical release, big box and disk and feelies and all ? @InsaneMultitasker Thank you ? Also the hard work of Barry Boone and @Shift838 ! But yeah, I figured that my Python script should be given back to the community; it's only fair! If anyone is interested about going this route to make games, you should look at Inform 6. The latest version of the compiler (here or here) fixed the ability to compile for the Z-Machine v3 (the only one supported by the TI-99/4A); there's lots of documentation, and the library PunyInform is a compact alternative to the standard library, allowing you to pack even more in a game. The only thing I'm worried about is the fact that some of the Infocom games required a Supercart. Can anyone recall when an Infocom game needs a supercart or not? (I think it has to do with the Z-machine's virtual memory, not the game file size, but I can't find that information again. 48K max? I don't remember.) 2 1 Quote Link to comment Share on other sites More sharing options...
+InsaneMultitasker Posted August 16, 2020 Share Posted August 16, 2020 On a related note, the F18A-compatible 80 column interpreter is in this thread. I don't think I added the F18A interpreter option to the LOAD program at the time. When you are closer to a release, if you want to also test this version and need to adjust anything, let me know. IIRC, the interpreter I modified is slightly older than Barry's final release. I had to work within F18A 'constraints' i.e., 16K vram versus 128k+ vram. Quote Link to comment Share on other sites More sharing options...
ti99iuc Posted August 17, 2020 Share Posted August 17, 2020 @hlabrand Congrats!, it will be a really neat addition to the TI's Adventure library! thanks for your effort in this! Quote Link to comment Share on other sites More sharing options...
+Torrax Posted August 17, 2020 Share Posted August 17, 2020 Nice to see a new Infocom Z3 game released that supports multiple classic systems. Many thanks to your efforts there!! I'm also glad to see that Inform 6 is finally fixed for proper Z3 creation. Quote Link to comment Share on other sites More sharing options...
jrhodes Posted August 17, 2020 Share Posted August 17, 2020 Wasn't there pong and tetris versions done inside the infocom engine? Quote Link to comment Share on other sites More sharing options...
hlabrand Posted August 18, 2020 Author Share Posted August 18, 2020 (edited) 11 hours ago, jrhodes said: Wasn't there pong and tetris versions done inside the infocom engine? Tetris, yeah, under the name "Freefall". (And also "ZTrek", the very old Star Trek game.) But it uses "Z-Machine version 5" (interpreters post 1986), whose specification that has support for real-time delays (used in Border Zone, for instance); the "Z-Machine version 3" (the only one compatible with the TI-99/4A) sadly doesn't support this. (It doesn't support much: no bold or underlining, no color, no "wait for a key" if I remember correctly... It's a text-spitting machine, that's all :D) Edited August 18, 2020 by hlabrand Quote Link to comment Share on other sites More sharing options...
Elia Spallanzani fdt Posted August 20, 2020 Share Posted August 20, 2020 Hibernated 2 on ti-99 https://mobile.twitter.com/8bit_era/status/1295735800764731393 1 Quote Link to comment Share on other sites More sharing options...
hlabrand Posted August 20, 2020 Author Share Posted August 20, 2020 (edited) Yep! Stefan is also working on his own z3 game, so I forwarded the tools to him (like he does when he has some!). And he found a way to make the building process automatic, which is very nice (no need to start TIdir99 every time to replace the files on the disk with the newest version when I want to test stuff!). His game is a sequel to Hibernated 1, that he wrote using the DAAD system; both are science-fiction games. Edited August 20, 2020 by hlabrand Quote Link to comment Share on other sites More sharing options...
Shift838 Posted August 24, 2020 Share Posted August 24, 2020 (edited) If was great to work with @hlabrande, even though he did all of his py scripting and I just provided insight and explanations. It did get me thinking to design a python based GUI that is cross-platform compatible like I did for my OoeyGUI v3 for use with MAME. And @hlabrande gave me permission to integrate his script within it. With IDE orders almost completely filled I have been able to carve out some time to work on it and I'm about 75% done already. This GUI will take @hlabrande python script and use it to convert the game data file to the respective required files formats for use on the TI and Geneve systems. It will then output new binaries and XB LOAD program for use on the TI and Geneve for 40 column, 9938 and F18A Infocom interpreters and deposit them all in a nice project directory. I'm working on the output of the new files now, then I'll know for sure if it works like I think it should or I will have to rethink it. It will end up being a compiled python program again so that all the included libraries are already included in a self contained package and should work on Windows, Linux and Mac. Edited August 24, 2020 by Shift838 5 Quote Link to comment Share on other sites More sharing options...
Shift838 Posted August 26, 2020 Share Posted August 26, 2020 So I have the program working to output the interpreters for the correct video displays. I still need to incorporate @hlabrande but I will change it to a moduled function for python. Once I get that done then I will have to add some logic to make sure fields are not blank, etc. I have added a few more fields to the form and all inputs will be converted to uppercase for filenames, etc. since the new interpreters allow for real lower case on the TI, that will not be converted. 3 Quote Link to comment Share on other sites More sharing options...
+InsaneMultitasker Posted August 27, 2020 Share Posted August 27, 2020 Does this XB routine match the Python script? I found it on one of my disk images. I never sorted out why C$ was accumulating a byte from each record... 100 OPEN #1:"DSK3.DUMP",INPUT,FIXED 128 110 OPEN #2:"DSK1.GAME1",OUTPUT,FIXED 255,RELATIVE90 120 OPEN #3:"DSK1.GAME2",OUTPUT,FIXED 255 125 FOR I=1 TO 24 :: LINPUT #1:A$ :: LINPUT #1:B$ :: NEXT I 130 FOR I=1 TO 88 :: LINPUT #1:A$ :: LINPUT #1:B$ :: PRINT #2:A$&SEG$(B$,1,127) :: C$=C$&SEG$(B$,128,1) :: NEXT I 140 PRINT "GAME1 generated!" 150 FOR I=1 TO 415 :: LINPUT #1:A$ :: LINPUT #1:B$ :: PRINT #3:A$&SEG$(B$,1,127) :: C$=C$&SEG$(B$,128,1) :: IF LEN(C$)=255 THEN CALL NUKE(C$) 160 PRINT "."; :: NEXT I 170 CLOSE #3 :: PRINT #2:C$ :: CLOSE #2 :: CLOSE #1 180 END 190 SUB NUKE(C$) 200 PRINT #2:C$ :: C$="" 210 SUBEND Quote Link to comment Share on other sites More sharing options...
+Torrax Posted August 28, 2020 Share Posted August 28, 2020 The accumulated byte is the 256th byte of all records in the original Z3 DAT file. All these bytes are appended at the end of the GAME1 file, which is loaded into memory and are indexed for GAME1 & GAME2 to make 256 byte records -- 128 bytes + 127 bytes + indexed byte. Hence the usage of the Super Cart requirements for certain games that needed the extra memory for indexing and interpreter usage. --INFOCOM 32K----- GAME1 (Orig Z3-DAT $0000-57FF) 0000-57FF 128+127+empty-byte (either $EF or $00) 5800-end missing 256th end-bytes GAME2 (Orig Z3-DAT $5800-end) 0000-end 128+127+empty-byte (either $EF or $00) --INFOCOM 32K + 8K SuperCart----- GAME1 (Orig Z3-DAT $0000-5FFF) 0000-5FFF 128+127+empty-byte (either $EF or $00) 6000-end missing 256th end-bytes GAME2 (Orig Z3-DAT $6000-end) 0000-end 128+127+empty-byte (either $EF or $00) Also the end of GAME2 is padded out to 512 bytes or the $VERIFY command fails (Barry Boones Interpreter must be assuming a PC Floppy 512 byte sector size). 1 Quote Link to comment Share on other sites More sharing options...
+Torrax Posted August 28, 2020 Share Posted August 28, 2020 (edited) Classic 99 makes this a lot easier. It's best to use a separate directory and turn overdrive on. Just take an original Z3 DAT file and rename it to Z3. And use the first program below. The padding logic is missing as I used a windows hex editor (HxD Hex Editor) for this. Two files are created named ZDAT1 and ZDAT2 which can be renamed to GAME1 and GAME2. The second program is used if the files fail to load in the regular or 80 column interpreters. It will create two files for use with the SuperCart interpreter. The third one will recreate the Z3 file from two ZDAT1 and ZDAT2 files. I used this as several Master's conversions were different from the official releases. There are various Z3 files on the net that will not work with Barry Boone's TI Infocom Interpreters. INFOCOM Z3-2-TI CONVERTOR 100 ! INFOCOM Z3-2-TI CONVERTOR 110 I=0 :: A$,B$,C$="" 120 OPEN #1:"DSK1.Z3",INPUT ,FIXED 128 130 OPEN #2:"DSK1.ZDAT1",OUTPUT,FIXED 255 140 OPEN #3:"DSK1.ZDAT2",OUTPUT,FIXED 255 145 PRINT :"Creating ... GAME1" 150 FOR I=1 TO 88 160 LINPUT #1:A$ :: LINPUT #1:B$ 170 C$=A$&SEG$(B$,1,127):: E$=E$&SEG$(B$,128,1) 180 PRINT #2:C$ 190 NEXT I 195 PRINT "Creating ... GAME2" 200 A$,B$="" 210 LINPUT #1:A$ :: C$=A$ :: IF EOF(1)THEN 230 220 LINPUT #1:B$ 230 IF LEN(B$)<128 THEN C$=C$&B$ ELSE C$=C$&SEG$(B$,1,127) 240 IF LEN(E$)<=254 THEN E$=E$&SEG$(B$,128,1)ELSE PRINT #2:E$ :: E$=SEG$(B$,128,1) 250 PRINT #3:C$ 260 IF EOF(1)THEN 280 270 GOTO 200 280 PRINT #2:E$ 285 PRINT "Finished!!!" 290 CLOSE #3 :: CLOSE #2 :: CLOSE #1 999 END INFOCOM Z3-2-TI SC CONVERTOR 100 ! INFOCOM Z3-2-TI SC CONVERTOR 110 I=0 :: A$,B$,C$="" 120 OPEN #1:"DSK1.Z3",INPUT ,FIXED 128 130 OPEN #2:"DSK1.ZDAT1",OUTPUT,FIXED 255 140 OPEN #3:"DSK1.ZDAT2",OUTPUT,FIXED 255 145 PRINT :"Creating ... GAME1" 150 FOR I=1 TO 96 160 LINPUT #1:A$ :: LINPUT #1:B$ 170 C$=A$&SEG$(B$,1,127):: E$=E$&SEG$(B$,128,1) 180 PRINT #2:C$ 190 NEXT I 195 PRINT "Creating ... GAME2" 200 A$,B$="" 210 LINPUT #1:A$ :: C$=A$ :: IF EOF(1)THEN 230 220 LINPUT #1:B$ 230 IF LEN(B$)<128 THEN C$=C$&B$ ELSE C$=C$&SEG$(B$,1,127) 240 IF LEN(E$)<=254 THEN E$=E$&SEG$(B$,128,1)ELSE PRINT #2:E$ :: E$=SEG$(B$,128,1) 250 PRINT #3:C$ 260 IF EOF(1)THEN 280 270 GOTO 200 280 PRINT #2:E$ 285 PRINT "Finished!!!" 290 CLOSE #3 :: CLOSE #2 :: CLOSE #1 999 END INFOCOM TI-2-Z3 CONVERTOR 100 ! INFOCOM TI-2-Z3 CONVERTOR 105 ! IDX=88 Normal 106 ! IDX=96 Super Cart 110 I,A,C,F=0 :: A$,B$,C$="" :: IDX=96 120 OPEN #3:"DSK1.Z3",OUTPUT,FIXED 128 130 OPEN #1:"DSK1.ZDAT1",RELATIVE,INPUT ,FIXED 255 140 OPEN #2:"DSK1.ZDAT2",RELATIVE,INPUT ,FIXED 255 145 PRINT :"Creating ... Z3 DAT" 150 C=96 :: LINPUT #1,REC C:C1$ :: LINPUT #1,REC(C+1):C2$ :: C$=C1$ 160 FOR I=0 TO (C-1) 170 LINPUT #1,REC I:B$ 180 A$=SEG$(B$,1,128):: PRINT #3:A$ 190 A=A+1 :: A$=SEG$(B$,129,255)&SEG$(C$,A,1):: PRINT #3:A$ 200 NEXT I 210 I=-1 220 I=I+1 :: LINPUT #2,REC I:B$ :: IF EOF(2)THEN F=1 230 A$=SEG$(B$,1,128):: PRINT #3:A$ 240 A=A+1 :: A$=SEG$(B$,129,255)&SEG$(C$,A,1):: PRINT #3:A$ :: IF A=255 THEN C$=C2$ :: A=0 250 IF F=0 THEN 220 285 PRINT "Finished!!!" 290 CLOSE #3 :: CLOSE #2 :: CLOSE #1 999 END Tyler Edited August 28, 2020 by Torrax fixes 1 2 Quote Link to comment Share on other sites More sharing options...
Shift838 Posted August 28, 2020 Share Posted August 28, 2020 (edited) Now I have a complete working application. Still need to test more to make sure there are no errors. But I have converted successfully 3 different z3 infocom game files for use on the TI for 40 column, 9938 nd F18A. If the z3 file is too small a message box will pop up letting you know too. See attached screenshots and I have attached the disk image as well. GUSS.dsk Edited August 28, 2020 by Shift838 9 Quote Link to comment Share on other sites More sharing options...
+Torrax Posted August 29, 2020 Share Posted August 29, 2020 Chris, Here's the latest XB loader and a conversion of a Z3 game called Adventure (based on the original 1977 version). The menu format is slightly different -- displays the Title Bar; Game Name; and Interpreter versions. Looks a lot cleaner with the removal of the game name in the menu options and being displayed just once. Also the EA5 loader is updated to the latest and removal of the large fonts (dead source disk). ADVENTURE.zip 1 Quote Link to comment Share on other sites More sharing options...
Shift838 Posted August 29, 2020 Share Posted August 29, 2020 13 hours ago, Torrax said: Chris, Here's the latest XB loader and a conversion of a Z3 game called Adventure (based on the original 1977 version). The menu format is slightly different -- displays the Title Bar; Game Name; and Interpreter versions. Looks a lot cleaner with the removal of the game name in the menu options and being displayed just once. Also the EA5 loader is updated to the latest and removal of the large fonts (dead source disk). ADVENTURE.zip 70.26 kB · 5 downloads Nicely done! And thank you for posting that code to convert a z3 for SuperCart version. That helped a lot, now I have standard and SuperCart size working on my GUI. I still have not been able to get the smaller games to convert correctly though. Quote Link to comment Share on other sites More sharing options...
+Torrax Posted August 29, 2020 Share Posted August 29, 2020 Posted an update in the Development section titled "XB Infocom Conversion Tool". Quote Link to comment Share on other sites More sharing options...
hlabrand Posted September 25, 2020 Author Share Posted September 25, 2020 Hi all! Today I released the free demo for my game "Tristam Island"! You can find it here. It's about ~90 minutes of gameplay (the final game will be 3-4 times larger). If you like it, you can preorder the full game here ! I'm also currently in talks with a publisher for a physical release; we're hoping to have a box that looks similar to the Infocom style :) The demo uses the TI-99/4A interpreter, so it should work in a variety of settings (40-col, 80-col, Geneve, etc). But please let me know if you're having any trouble! And a big thank you to the TI-99/4A community for their warm welcome and their work on the tools! :) 4 Quote Link to comment Share on other sites More sharing options...
+InsaneMultitasker Posted September 26, 2020 Share Posted September 26, 2020 11 hours ago, hlabrand said: Hi all! Today I released the free demo for my game "Tristam Island"! You can find it here. It's about ~90 minutes of gameplay (the final game will be 3-4 times larger). If you like it, you can preorder the full game here ! I'm also currently in talks with a publisher for a physical release; we're hoping to have a box that looks similar to the Infocom style The demo uses the TI-99/4A interpreter, so it should work in a variety of settings (40-col, 80-col, Geneve, etc). But please let me know if you're having any trouble! And a big thank you to the TI-99/4A community for their warm welcome and their work on the tools! Very cool. I downloaded the disk image so that I can try it out soon. I noticed that the F18A 80 column interpreter is not present on the disk image. Most of the TI users who leverage 80 columns on 'real iron' will have the F18A video upgrade and unfortunately, the version on the disk will not work with that hardware update. One other note/question: in your documentation, what is the specific reason for requiring Extended BASIC 2.5? I did not see anything in the LOAD program that would preclude using the standard XB cartridge. Quote Link to comment Share on other sites More sharing options...
hlabrand Posted September 26, 2020 Author Share Posted September 26, 2020 Uh... you know, I think it's just habit actually. I did it like that the first time and it worked, and I've never tried to do it differently lol. Would it be LOAD and then the interpreter file name? And I should write the name of each file in the manual just to be clear? As for the F18A 80 col interpreter, I have a note somewhere in my dev folder that says "closer to release, ask InsaneMultitasker on AtariAge about the F18A 80 col interpreter". So I guess I forgot to do that... Oops. Thanks for reminding me! I hope you enjoy the demo Quote Link to comment Share on other sites More sharing options...
+InsaneMultitasker Posted September 26, 2020 Share Posted September 26, 2020 5 minutes ago, hlabrand said: Uh... you know, I think it's just habit actually. I did it like that the first time and it worked, and I've never tried to do it differently lol. Would it be LOAD and then the interpreter file name? And I should write the name of each file in the manual just to be clear? As for the F18A 80 col interpreter, I have a note somewhere in my dev folder that says "closer to release, ask InsaneMultitasker on AtariAge about the F18A 80 col interpreter". So I guess I forgot to do that... Oops. Thanks for reminding me! I hope you enjoy the demo Got it! My guess is standard XB works just fine. I'll add the F18A version to your disk image and test with standard XB; when done, I'll PM it to you for testing and you can place on your site. I've been otherwise occupied the past 2 weeks and things are finally winding down, so I will return to work on the updated interpreter this week provided I am not too distracted by the demo 3 Quote Link to comment Share on other sites More sharing options...
+InsaneMultitasker Posted September 27, 2020 Share Posted September 27, 2020 PM'd you an updated disk image. The LOAD program works fine with standard Extended BASIC. FYI, the loader did not work for me under Geneve emulation. Has anyone else successfully used this specific LOAD program with a Geneve? Edit: @Torrax uploaded an updated loader in post #18. I missed that earlier. I'll grab it and test with a Geneve tomorrow. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.