Jess Adventure Core Development Thread

I’m very new to the forums, and have yet to publish any IF, but I am starting this thread at the suggestion and kind encouragement of @AmandaB and @Zed, so if this forum gets sick of seeing my shy username once I finally get over my stage fright, then you’ll have them to thank, lol.

The general idea is: I’m very systems-oriented, and am deeply fascinated by the idea of really pushing parser-based IF further into simulation territory. If it’s not too bold nor pretentious to say, I’d like to write IF that reaches the gameplay orbit of something like the original Deus Ex game from Ion Storm, or maybe MechWarrior 3 (I know how that sounds; I’m the one who type that in). Just stuff that’s probably really different from what’s usually out there, and that most people don’t think would work in IF. I take that as a challenge.

(Also, uh…I’m not very character-oriented. When I’m reading a story, I’m actually paying more attention to the setting that any of the characters. I’ve only read one book in my whole life where I connected with a character. So yeah, my IF is gonna be strange and mechanics-oriented, too.)

The player is presented with a goal, and a simulated environment. However they accomplish the goal is up to them; I might not realize some of the possibilities, and that’s okay, but the game should respond smoothly the whole way, at least.

I’ve tried gutting Inform 7 and TADS 3 adv3Lite, but it feels like an upward battle before I can get to the starting point, as both of these have a lot of features and systems built-in that don’t facilitate what I need to do.

So, what’s the Jess Adventure Core?
“Jess” is my other name, for those curious. It’s fine; don’t worry about it, lol. I just felt like “Joey” didn’t have the right ring to it in for an IF engine library.

The Adventure Core will be entirely its own thing. It will function as a UI, parser, simulator, etc. As an API, it won’t have an editor program. I will have to make my worlds by defining them in Java. Honestly, I’m thinking of learning Kotlin for that bit. I prefer normal Java for creating application logic, but that’s just a bit too verbose for defining data. The reason why I’m not making an editor, is because the creation of an editor will probably triple development time, and would basically be a Java IDE anyways, which is what I already have at Square One of this project. So: no editor! It’s just a stripped-down Java API.

It’s for this reason that I’m making it for my own uses first and foremost. If someone later down the line wants to use it, that’s awesome, but I feel like other systems better-suit the needs that most authors have, and we already have so many amazing authors. I’m not making the Adventure Core because I’m trying to match or outdo anything like Inform, TADS, Quest, Twine, etc. What I’m making isn’t intended to be better, it’s intended to be weird and niche, but more importantly: it’s intended to let me finally get my IF ideas in the hands of players. My game ideas have a lot of overlap, and do not behave with current technologies, so I’m making a new program to support them in.

Each game will ship with the Jess Adventure Core compiled into it (no project dev time dedicated to game files, because again that requires an editor). However, I do plan to have a user settings file created by the Core, and will be loadable and readable by all IF games I make, so you can set your preferences to get as close to your preferred runner/interpreter as possible, and any time you play any of my other stories, it should cooperate.

Goals
The simulations and systems run by my Adventure Core will likely be a lot less controlled and author-directed than other IF platforms. As the author, I will probably be outlining environment frameworks, and implementing how things generally react, but the specifics of what happens as a result I expect to be fairly out of my control in a lot of way, and will hopefully self-govern (if the framework was set up correctly).

The benefits of this is that I expect to run into fewer issues of “I forgot to put something here” or “I forgot to code this item action” or “oof this NPC does not know how to behave here”.

The downsides that part of me is masochistically-excited for are that instead of nothing happening at all sometimes, really unexpected and hilarious stuff will happen instead. The player might have a lot more agency, but the environment will, too. NOTE: This may vary as development goes on. The thing I’m trying to avoid is the player running into brick walls of “you can’t do that”, when it wasn’t implemented as an intended step of the solution.

Again, I’m not saying this will be better than the norm, because we already have a database full of amazing IF that uses convention to deliver amazing ideas and really reach our emotions. My aim is, again, to do something weird because I feel like it, and most of my game ideas work like this, and I really want to make some IF.

The other huge goal is I really need my UI and overall engine to be cooperative to screen readers. IF is a medium of game and storytelling that has quite a lot of players with varying kinds and degrees of visual impairment and disability. It is absolutely critical to me that I keep my engine accessible. When I was developing visual games with 3D graphics and stuff, I would use an app on my phone to make sure that everything is clear with different types of colorblindness and visual acuity. I intend to bring that same energy here.

What Are Some Things I’m Excited For
I’m particularly excited about “action groups”, which can be hidden from the player, enabled, or disabled. Unless an action group is shown and enabled, the player cannot use those actions. The player will also be alerted to these groups being revealed, enabled, and disabled, and this will usually occur when the player drastically changes their situation. There’s going to be a lot of possible actions, and I don’t want the player to be overloaded. A good example would be a combat actions. You would not use these actions outside of combat, so if you’re not in combat, the group would be disabled, and the player would get a notification like “Combat actions are now disabled”. Similar to actions used when piloting a large ship.

This is also going to be important, because I’m adding a window that can be pulled up to reveal a list of enabled actions for player reference, so you won’t have to guess the verbs for the whole game.

Again, I feel like these systems are out-of-place in most IF, but I want to give players the tools necessary to maximize their agency, as a lot of my games will probably not be very puzzle-oriented, where every action fits neatly together. You’ll be able to goof around quite a bit (if this works out), and it will be important to inform the player on what that entails.

Something else I’m poking around with is parkour, or the idea that by climbing on some objects, other objects are revealed to be within reach, and you can chain these discoveries together to find hidden paths to other areas.

Additionally, I would to implement a combat system and room territory system, where hostile “guard” NPCs can claim parts of a room, and block your access to those parts unless you somehow get rid of the guards.

I would like to implement a better system for handling large expanses of terrain. In particular, give the player a verb like “survey”, that lets them scope out other visible regions, and their relations to the current region they are in.

A specialized turn system will be in place as well, where some actions allow the world to take a turn after execution, while others do not, and some make the world take multiple turns before control returns to you. For example, actions which allow you to visually inspect things will not take a turn, as the player should be able to freely refresh the story prompt for vital information before deciding their next action.

Vehicles will have a lot more detail, as I plan to simulate the cockpit, allowing the player to inspect and use the controls found inside. The components of the vehicle could also be simulated as well, allowing some to suffer damage and affect performance, and the player needs to gain access to the component and swap it out for repair.

I am currently supporting autocomplete, which will be off by default, but can be turned on and have the option to visually show suggestions. More on that is described in my manic struggles here. Basically, as you type, the autocompleter figures out what action or noun you’re talking about. In the case of a noun, it narrows down which one, based on the adjectives you’ve used already, and only suggests adjectives that you’ve both not used yet, and which also apply to the nouns you could be talking about. I’m actually really proud about how this one turned out, and it’s fully-functional.

Each game will also come with a built-in notepad, which will save its contents when you save your game, allowing you to keep your notes and reminders bundled with your save.

I plan to have a skeletal map that shows the layout of the rooms you’ve discovered. Room shapes will probably not be implemented (this could change…been going back and forth on that a lot).

NPC conversations will be very much choice-based with dialog trees. This seems kind antithetical to “do whatever you want”, but I feel like the player has more agency when they can at least see what they can contribute, and not boil all conversations down to “talk about…” or “ask about…”.

I will also have a built-in UI feature that takes over the input field for anything that offers a choice. You won’t need to enter in a number and press “Enter”; you’ll be presented with a series of buttons instead. I have this mostly working already.

These are most of the stand-out things that the player would notice. I’m also going to be handling actions differently under the hood than other systems seem to. For example, an object only has certain properties if it is qualified to handle an action where they would be important. If an object would refuse an action, then it’s probably because it quite literally is not the kind of object you could do that to, and this is defined at the start, rather than at the end. So instead of creating stuff like “thing”, “decoration”, “container”, “platform”, etc, you would assigned qualifications to an object like “can be taken”, “can be pushed”, “can store things”, “can support things”, etc, and then the necessary data will also be attached to help evaluate actions for those qualifications.

On a Personal Note
I have really intense ADHD. Like, I have enough ADHD that patches of my vision don’t always update with time, as though the space where an object is located will cease to exist for a second until my brain can be bothered to focus on it and recognize that it’s there. To say my brain is constantly low on focus is an understatement like you wouldn’t believe.

So: While I have been needing something like this Adventure Core for a long time, it is very possible that I could get overwhelmed, have a whole depressive crisis over it where I burn my dreams, alter my game ideas, and return to using TADS 3 again (btw TADS 3 is so good omg; just wanna see how this goes, though).

(Also, I am DYING to see how the Linux version of Inform 7 goes, and I’m also dying for a dark mode on it, as bright text backgrounds make my brain want to explode)

It could happen. Nothing in this thread is a promise. Honestly, it’s why I don’t really discuss my projects on the Internet. However, two amazing people were interested in seeing where I’m going with this, so this is clearly doing somebody out there some good, lol. I do a lot more work when there’s less expectation!

Who knows? One day this might suddenly become a TADS 3 library. I dunno. Or I might decide to do simpler stuff (hahahaha if you knew me irl, you’d know how unlikely it is that I do anything simply).

Until I run screaming into the night and vanish from the face of the Earth, my GitHub for the project is found here.

7 Likes

In fact, the more I think about this in its entirety, the more my panic sets it and I start regretting my life decisions! :smiley:

This thread might be short-lived; who knows! But I’m determined to write IF, one way or another! Jess Adventure Core or not!

EDIT: Nevermind; the panic was from hypoglycemia setting in. Had some noodles and some orange juice, and I’m feeling better. Everything’s fiiiiiiine! The project continues!

2 Likes

Any links so we can see your work? No pressure if that’s not something you feel comfortable doing.

1 Like


Both of these are kinda old screenshots. The 2D game is further along than the 3D one, and there’s another game that’s basically done which is basically space orbital chess, but I don’t have any screenshots of it on my phone (I usually browse this forum on my phone), because I’m bad about remembering to take pictures of anything lol.

EDIT: I’ve been attempting visual games for as long as I’ve been attempting IF. For both kinds, ADHD is a real struggle, but making IF games is a complexity problem, while for visual games it’s the problem of taking too long to make visual art assets. I can make sounds and music rather quickly, but I will spend a week on a 3D model or a 2D image.

EDIT 2: None of my visual games aim to look realistic, and I’m usually going for a smooth sort of visual surrealism, because realistic graphics are overrated.

The two games that are closest to being done are:
Invasion Burn 90% done
A strategy chess-inspired game where you manage fuel costs to intercept enemy ships. Has a mild time-travel mechanic, as you are able to simulate the game state over a dozen turns into the future, and schedule future moves for multiple ships at a time. However, you cannot perfectly predict the enemy all the time, and you are able to select one ship every so often to completely change up the rules on your enemy.

Break Bricks Fly Free 70% done
2D Breakout clone where you play as a drone demolishing a haunted castle that built a portal to Hell. The more you demolish, the more trapped souls are released and help you finish the level.

1 Like

After studying and planning more of what I want the Adventure Core to provide, and also what can be done in adv3Lite, I am going to try writing another story in adv3Lite. I feel like this library should be capable of replicating most of what I want from the Adventure Core, and I might just be missing some details.

Trust me, this is part of my process. I hit a brick wall, so I try an alternative or attempt to make one for myself while I mull over the previous problem. I try to multitask solutions and plans to effectively make them compete in a race against each other.

I’ll let you know, lol. This method tends to have a very high success rate. Trust me; I’m an engineer lol.

EDIT: Again, either way, I will make stories, and will get what I need to work. Also, I now have a really cool autocomplete parser to put on my portfolio, should I get a TADS 3 extension successfully made.

1 Like

These look great! I have OCD, so I struggle with a farting brain while creating, too. It makes it hard to do anything if I’m not sure I can do it exactly the way I want.

I’m looking forward to seeing what you come up with.

1 Like

I’m going to chuck in some random ideas for you to kick;

It sounds like, based on your simulation requirement, your AC should be predominantly a rules based system. And indeed, perhaps model your whole IF system as such.

ie;

Build a rules engine and your AC and game is then just a giant stack of rules. Leave optimisation to later once it works.

All your game entities are either class based or properties based. You’ve already said you prefer properties based. But classes could also be useful. Maybe have both. Rules works better on object classes, but world state needs properties;

ie:

  • being a member of class is static
  • properties are dynamic

Consider separating the UI from the AC. Make a back-end and a front-end with an interface between them. You can then make a GUI front-end, a web front-end, and a plain text front-end (useful for testing). The back-end remains the same in each case.

Factorise rule patterns into templates that are building blocks for puzzles, character dialog and so forth. These go into a non-java game library.

So;

  • Keep your java as minimalist as possible
  • write as much of the system as AC rule patterns as possible.

You only need to port a small java rules engine if you need to move implementation. Everything else stays good.

1 Like

I am a fellow member of Team ADHD with aspirations to write a game engine eventually and one of the reasons I’ve spent so much time delving into I7 is to learn how an existing successful platform approaches things and what its strengths and weaknesses are: I get it.

1 Like

Okay, I’m not continuing the engine. I’m getting quite a bit of progress in adv3Lite, and the more I’m working on the story, the more I wonder how I ever thought I was gonna get this working in Java, lol.

I will say: adv3Lite seems to have what I need, usually. The problem is trying to find the features and properties you’re looking to use…

Allow me to refer you to a couple of resources I maintain, adv3Lite periplus and TADS 3 cookbook.

The first reorganizes the adv3Lite documentation by subject matter to make locating classes and docs easier. The second is a recipe site that, I confess, has lapsed and is in need of new topics.

Good luck authoring with TADS & adv3Lite!

5 Likes

Absolutely amazing! Thank you!