A small text adventure I made with the new system I have created

I wanted to share a small text adventure that I have made using a new authoring system I have created. The game is playable via Itch, through the browser. Here is the link to “The Final Mask” This title was conceived of, story boarded, and written in 2 days. It was for a game jam. I made the tool I used to create this title. I hope to make it available to the general public soon. Over the last 16 month I have been in software development creating a text parser based text engine. I believe that it could recreate Zork. The tool is a visual designer and runs on the Windows system. I provided a screenshot. The system lets you design your world, world objects, and world rules in a simple no-nonsense UI. I’m not a web programmer so I make old clunky windows programs the way things used to be before the web cloud come about. The tool exports a package playable in the browser. It can also deploy titles to the Android mobile player. The same game plays on the mobile as on the web. You can also stay on the PC and play the titles in a DOS window as a console program. It is all handcrafted work. I’m a computer programmer by trade and profession and now semi-retired. I substitute teach now-a-days and work on my IF. Anyway, I wanted to share this progress with the community. I’m using my tool to enter a title to TALP2026. The title is 99% done and I’ve started building in the tutorial. I’m also using this tool for that. Enjoy. As usual but not asking for it, feed back about any of it is always appreciated. FWIW - Anyone using this tool can make a title for the itch platform which means you can sell it too.

Here is the game playing on Android mobile

7 Likes

How does your engine compare to Adventuron?

https://adventuron.itch.io/

Note: The application (classroom) site has a recently expired certificate. @adventuron

1 Like

How does one get started in Adventuron? I’ve never used it or any of the modern tool chains before. I kind of went through life and one day decided that I really wanted to make the text games I played when I was 15 in 1985. I don’t know how mine compares.

1 Like

https://adventuron.io/ (expired certificate)

You can watch a video on YouTube if you don’t want to trust the site until the certificate is updated.

Anyway, I know what it’s like to build stuff for the joy of the process (and wheel reinventing be damned). It just looked a lot like Adventuron and I thought you were inspired by it. Adventuron is worth a look regardless though.

I’m going to dig in and look at it. The thing I’m struggling with right now is more mundane than the joy of the system. I could, right now if I wanted, upload the system to Itch and anyone who downloaded it could use it. They would get the Visual Designing tool on Windows which play tests the title as it is being built. They would get the APK installation file to put the player on the mobile. Then anything they make with the studio exports to a singular file, I like to think of it as a cartridge, which imports with all of 0 effort on the mobile for use. I made it so that you can use Google Drive or other cloud drives that support Androids intent system to just send the cartridge file to the app and then it just shows up ready to be played. I wanted to make a way people could make and share their creations with other people. They also get the ability to export the game as a Zip archive that is playable in the browser on sites like Itch. It basically is still a client side game that just plays in the web browser. I could mark the system on Itch is costing money but there is nothing stopping anyone anywhere of then hosting my creation on any file share for anyone. I hate having this anxiety.

1 Like

What I’ll do is just follow the tutorial and use my toolchain to make its tutorial. After a cursory comparison, I don’t see anything that it does that mine doesn’t. It seems like mine does a lot more as it is object based first and language extensible second for niche needs. It can make a title that goes in and out of CYOA, deep parser driven, to paginated text like turning pages in a book.

2 Likes

Does your tool have a name? It’s difficult to start thinking/talking about it when it’s just “my tool”.

2 Likes

Congratulations on making your own system.

Here is some very early feedback:

The sample game takes ages to load on mobile over the air. During this time the screen is just blank.

I could not play on Android because the keyboard pops up over the entry area and you can’t see to type.

The font is hard going to read in the sample game.

The web version does not re-flow the text layout when the browser is resized (Windows Firefox).

windows web, i kept losing the keyboard focus. Clicking back in the window doesn’t always work. it appears you have to click exactly on the entry area.

Commands that should work but didn’t:

  • I
  • x me
  • l mask
  • l
  • inventory
  • take inventory

Also, use of “It”. eg > look mask followed by >get it.

The game prints the output above the text, so when the text is long, the fresh output is sometimes scrolled off the top. For example; Go north. look. then >look gatekeeper.

And for the output of all commands in this situation.

Can we have up arrow or some other key, re-edit the last input?

The parser seems to mostly ignore word order;

look cloth does the same as cloth look. and give cloth to gatekeeper does the same as give cloth gatekeeper

Might try some more later.

Best of luck.

Although it does lend itself to a great many deal of innuendos.

3 Likes

Oh, I missed this before but the Itch page refers to it as the “MAD Candy IF Engine”.

Not as many innuendos for that, though. :frowning:

Pity. I thought we had found Stiffy Makane’s new home.

Thank you so much for the feedback. I’m still processing all that you have said and I value it very much. Getting feedback is a gift. Ultimately you would want the mobile app for the mobile experience. It is the first class citizen on the block for mobile usage. I have made some minor adjustments to the browser version regarding the layout though I suspect it won’t fix all your concerns. Writing code for the browser is my weakest area. I hope to improve my ability in that area.

That is the working title for now. “MAD Candy Interactive Fiction Studio” and produces “MAD Candy Text Adventures”.

I loaded it up on mobile. If you issue the text command “command size 8” will reduce your font size to 8pts. You can go from 4-24. If you issue the command “help” there is a bit about the font size in there.

Hello. I tried command size 8 on my android mobile (thanks) and it did make the text smaller, and actually a lot more readable. A smaller size, i think, should be the default for mobile, otherwise you only manage around 3 words per line.

However, the pop-up virtual keyboard still obscures the text entry area, so it remains almost unusable.

Honestly, you are in a world of hurt here. I had the same thing. Eventually, i gave in and wrote my own, in-game, keyboard. I know it’s not the system entry standard, but it does work on all screens. For ages, I just couldn’t face the idea of having to implement a keyboard when the built in one is already just fine. In hindsight, I’m glad i did as those problems are now thankfully behind me.

best of luck.

1 Like

I’ve only glanced at the game so I’m not sure if this advice is of any use, especially in the context of an itch iframe, but with regards to dealing with soft keyboards on mobile, there is a basic strategy for dealing with that, by shoving your active content up above the top of the keyboard. It works on iOS and Android and even in embedded webviews, like the browser inside the LinkedIn app. Opening the soft keyboard fires a resize event, so you can set an event listener that fixes the height of your content and then scrolls it. Here’s a snippet that I’ve used.

window.visualViewport.addEventListener("resize", function () {
	// resize content according to visibility of keyboard
	let newHeight = window.visualViewport.height;
	let diff = window.visualViewport.width > 1024 ? 120 : 90; // responsive
	const element = document.getElementById("MyContent");
	element.style.height = newHeight - diff + px;
	element.style.maxHeight = newHeight - diff + px;
	element.scrollTop = element.scrollHeight - element.clientHeight;
});

I noticed that this game, and someone else’s game I looked at recently, were too big for my window inside their itch iframe, and I don’t know if itch provides any special options for controlling that, but a useful thing these days is to use dynamic viewport values when setting width/height/maxwidth/maxheight of top level containers.

element {
	max-width: 100dvw;
	max-height: 100dvh;
}

height:100dvh varies from height:100vh or height:100% in that it accounts for UI elements, which addresses an old frustration with stuff like the mobile Safari address bar that slides in and out of view.

More on dynamic viewports.

3 Likes

I do appreciate this remark and will do my best. I’ll make my APK for the mobile available on Itch. Then it does all those wonderful things that are challenging when trying to control the browser. It also appends all the game files adding them to the built in games that I’ve made. This was always how I imagined and designed the system for the mobile. It was the intended delivery. The browser only came about when I learned of TALP2026. I was able to reuse all my same code so the engine, experience, and functionality are the same. It is the front end HTML that is challenging. I’d really like to hire an HTML front end specialist to design the front end terminal that takes all the ready to render information and have them make me something better than my attempt. All the text from the backend comes in payloads containing the font family, foreground, and background color. The point size is system wide. The confluence of mobile browser and itch was always my least common denominator because it is truly the hardest least friendly pairing. That is why I made the Android application. In theory I also have the IOS application but since I don’t have any Apple hardware to use for testing, it is about impossible for me to offer that component though in theory it is just a build target for my development studio.

1 Like

I made an adjustment to the game to use the device coordinates as you suggested. I think that this will help out. I added a window event handler for resize and ran the scrollTop logic also. Itch seems to be swallowing on resize or I need to do some more to make it better handled. I think though that on the mobile, one needs to press the control on the itch page to go full screen. I do not know if this option is only shown on the “desktop” version of the website. I know in my chrome browser I can choose to render a page as the desktop version.

Yeah, that’s logical. I believe that iframed content doesn’t get window resize events unless they’re explicitly forwarded by the framing page using a postMessage() call. I haven’t used itch and don’t know anything about their environment. Given how iframing seems to be their whole deal, I really want to believe that they have methods to handle that, but I have no idea.

1 Like

Itch does send events on window resize, even though it uses iframe. Nevertheless, there is no code to redirect it.

I extracted the logic Itch uses to make my own ifames for demos. The idea is to try working around the no audio autoplay. Here’s my script.

The innerHTML bit was the part I copied, and it definitely has some magic spells in it. Initially, i didn’t have all these properties and it didn’t work. Specifically, the iframe was double-buffering the content, slowing it down.

I haven;t been through to figure exactly which property is responsible for this. Possibly allowtransparency.

Also, perhaps the resize event is received because the iframe here is injected into the host page?

Oh, the autoplay workaround doesnt work on Safari, and Itch doesn’t work either.

const isMobileUserAgent = () => {
    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
};

document.addEventListener('click', function (event) {
    var eid = event.target.getAttribute('play-element');
    if (!eid) return;

    var iframe = document.createElement('div');
    
    iframe.innerHTML = '<iframe style="position:fixed; top:0px; bottom:0px; right:0px; width:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:999999; height:100%;" allow="autoplay; fullscreen *; geolocation; microphone; camera; midi; monetization; xr-spatial-tracking; gamepad; gyroscope; accelerometer; xr; cross-origin-isolated; web-share" frameborder="0" allowfullscreen="true" allowtransparency="true" scrolling="no" webkitallowfullscreen="true" mozallowfullscreen="true" msallowfullscreen="true" src="https://spam.com/index.html"></iframe>';

    var game = iframe.childNodes[0];
    event.target.parentNode.replaceChild(game, event.target);
    game.focus();
    if (isMobileUserAgent()) game.requestFullscreen();
    
}, false);