Okay, with all sorts of resources at my disposal, it's time to start actually writing something. The Open2 Engine is going to use HTML, CSS and JavaScript to create Interactive Narratives (like Twine) - and maybe even someday actual games (I have plans...). Since this whole thing is going to be built on three major technologies, I was thinking it might be good to provide a crash-course in those technologies for you, gentle reader, in case you didn't know them very well. If that is the case, welcome to the club because I don't know them very well either :)
Okay, so what is HTML? Well, Hyper-Text Markup Language is what the web is built with. It's a plain text file, formatted a special way, that the web browser reads and translates into the page you see. HTML is about structure, about describing text. Then CSS gets added to control the presentation (how the text looks). Then JavaScript gets added to make the text act and react to events. It's kind of what's called the Model-View-Controller pattern. Of course, the lines get a little blurry, all three touch on the other's responsibilities, but it's a useful starting point. So, since I'm going to be covering just HTML, these examples are going to be ugly. That's okay. Tomorrow I'll add some CSS and make them pretty, then the day after I'll add some JavaScript to make them dynamic.
Starting up NetBeans (my editor of choice) and using it's plugin with Chrome, let's look at a basic, starting file...
Not much to look at. The first thing to point out is that HTML uses "tags," pairs of <element> </element> to define what a section of code is. The <html> tag is the whole document (which the <!DOCTYPE html> says is, well, html). The <head> tag holds some general information for the page, which isn't displayed in the browser. The <title> tag puts the name of the webpage at the top of the window, and the <meta> tags have some information about the page that other computers or the browser use.
The real magic is everything in the <body> tag, which is the main body of the document that gets shown to the user. A <div> is a division or a "block" of text. Related to it is a <span> which is "in-line" or it marks a section of text inside another container. Let me throw a bit of styling in here and show you...
While I'm going to end up using a whole lot of <div>s and <spans>s, there are lots of other other block-level tags.
Headings <h1> through <h6> denote a, well, heading, from largest <h1> to smallest <h6>...
Typically, you'll have some paragraphs <p> after your headings...
Plain text is boring, so let's add an image with the <img> tag...
The <img> tag bring us something else to note. So far we'd been using the tags themselves, called "elements," but an element can also have "attributes" that have a ' name="value" ' format. In this case, the <img> or image element has 2 attributes, "src" (or 'source') and "alt" (or 'alternate,' what to show if the image itself can't be shown).
Two attributes we're going to use a lot are "Class" and "ID". Adding one of these attributes (to any element) let's us pick them out specifically to add some kind of styling or events. A quick example, I'm going to make 2 classes, 'yellow' and 'bold', plus one ID of 'redbox'...
Wow, that didn't look like anything at all. Of course not, just defining the classes and IDs doesn't do anything, we have to tie something else to those "selectors." Let's add a little CSS to make them pop...
As you can see, you can add multiple classes to one element, and multiple elements can have the same class - but IDs must be unique, only 1 to the page.
Besides just printing out text, we can format it into lists. The <ul> tag creates an "unordered list" (of bullet points) while the <ol> tag creates an "ordered list" (which is numbered). For both, each specific line of the list is created with a <li> tag...
We can also make tables. This gets a little complicated- we start with a <table> tag. Under (or "nested in") that we put a <tr> for each table row and in each row we put either a <th> for the table header (which has it's own tag since often we'll mess around with the data in the table but leave the header alone) or a <td> for each table data (or "cell"). Here, take a look...
And we can make forms, which allow us to get input from the user (like when they're making a character). Again we'll start off with a <form> element to hold everything. The individual parts are mostly <input> elements that have a special attribute "type" that says what kind of input they are...
<input type="text"> gives us a textbox, something fairly small for the user to type in. <input type="radio"> gives a radio button, where only one of the group can be clicked on, while <input type="checkbox"> let's any number of boxes be checked. <textarea> gives us an ever bigger, multi-line place to type things.
Okay, so we've covered some basic ways we can layout the page. I've added some styling to point out things above, but tomorrow we'll go into more depth with CSS and controlling how things look.
This was meant to be a fast, whirlwind introduction, so of course there is a whole lot more to HTML than what I've shown here. A great place to learn more is at w3schools.com.
Monday, September 11, 2017
Sunday, September 10, 2017
SugarCube Language File for Notepad++
After I finished my post on programming tools it struck me, I had meant to share something: here is my Notepad++ language definition file for Twine's SugarCube story format. This file just let's Notepad++ do some syntax highlighting. I never used N++ a lot for SugarCube (since it's cumbersome to always copy-and-paste into the Twine editor), and so this file is not really complete. But, maybe someone out there somewhere would find it useful, so here's the link to my Google Drive...
[2022 Update] Google Drive changed its links a while back, and amazingly I've been getting requests from people looking for this file, so here is an updated link...
[2022 Update] Google Drive changed its links a while back, and amazingly I've been getting requests from people looking for this file, so here is an updated link...
https://drive.google.com/file/d/0B8LKp_9P4sH5aFU4Yi1PNk8zTjg/view?usp=sharing&resourcekey=0-2NOYLOX_TwOxRyU2BMJHRQ
Since people are still interested I might have to re-visit Twine and update this someday. No promises on when, the "Covid 20s" have not been good years for me.
Since people are still interested I might have to re-visit Twine and update this someday. No promises on when, the "Covid 20s" have not been good years for me.
The Open2 Engine - part 2 - Programming Tools
I'm back, and still rounding up tools for my new project, The Open2 Engine. Last post I was gathering role-playing resources by looking at games that were released under the Open Game License (OGL). Today, I'm going to go over some tools for the programming side.
The Open2 Engine is going to be a webpage, like Twine, that can show and hide text, as well as run Interactive Narrative games. So I need a tool that will help me with writing all that HTML, CSS and JavaScript. Now, it is actually possible to just use the pain old Notepad that comes with Windows...
But while that may be possible, it's also kind of crazy :) One nice feature (to me) of most programming tools is "syntax highlighting," where the program colors your code to help make the different components stand out, like Notepad2 does...
Still, I am going to be working with multiple files, so I really need something that can keep them all conveniently open (instead of a million icons on my taskbar). Notepad++ has a really nice tabbed interface...
But to get really complicated you need an IDE (Integrated Development Environment) which has a lot of bells and whistles. The first one I read about (in the ton of programming books I've gone through the last month) was called Aptana Studio. Now, I had a hell of a time actually getting it to install, but finally did...
While Aptana does have a lot of features, during the install troubles I also installed Eclipse, which is very similar in style (though, they all share a lot of features and even appearance)...
Another editor I read about was Atom...
And Microsoft even made their own editor (that sure looks a lot like Atom above) called Visual studio Code...
But the one I'm going to use is called NetBeans. My screenshot below is not the default look of NetBeans, I have added the Darcula LAF theme and I'm using the Hacker font...
So why NetBeans? Well, from what I've read programmers can get into holy wars over their choice of editor - but I'm a total n00b to this, so I have no idea what is good or not. Each programming book I read mentioned a different editor, but NetBeans was the easiest one for me to actually get working and setup the way I wanted. And, it has all kinds of great features. If you look at the screenshot above, of a webpage, at the bottom-left there is a tree of all the HTML elements along with the classes and Ids for each - which is a very handy reference. Below is a screenshot of a JavaScript file, and again the bottom-left has a tree with an object I created and all it's properties...
Now, all the IDEs I've listed here will do the same basic things, providing helpful tree-views, syntax highlighting, autocomplete, and a host of stuff to make programming much easier. But there is another way to make life easier, and that's by using a "javacsript library."
A library is just a list of code that is in some way "better" to work with than regular JavaScript. Now, this is a little tricky. JavaScript recently (like 1-2 years ago) went from ECMA 5 to ECMA 6 while at the same time HTML went from 4 to 5. So there have been a lot of changes in the tools I'm going to be using - and some of the hard-to-use code that many libraries were designed to fix ended up getting fixed in all the changes. Still, I've seen a few libraries that look like they might be very useful - and in fact I believe that Twine uses them as well.
jQuery is the first. What jQuery does is really simple, it makes it easier to write code to work with the DOM (Document Object Model) - the framework that a webpage is built from. jQuery doesn't do anything new, it just does it more efficiently. Case in point, let's say I need to work on a part of my page with the ID of "myID" - my straight JavaScript code would look like...
document.getElementById("myID")
but in jQuery it would be...
$('#myID')
which is a lot shorter to type. Since I'm going to be constantly getting parts of the page, in order to show and hide things like Twine does, I'm going to be typing a lot of the above code, so anything that makes it easier on me is a good thing. There is a ton of stuff jQuery can do in all, I'm just scratching the surface here but I'll be demonstrating more if it's features when I start writing code.
There's also a cool expansion for jQuery called jQuery UI which helps you make some neat User Interface (UI) elements for a webpage...
Using this library will give me some tools to make the page look really cool, and act more like an application than a bunch of text (which is part of my eventual development plan for the project - I think I'm going to spend the rest of my life working on this, because I have a whole heck of a lot of things I want it to be able to do :).
The last library I've been looking at is Underscore. This library mostly exists to make some functions, some programming commands, easier to use. I'm not sure about this one. From my reading it looks like a lot of what Underscore does is a part of the new version of JavaScript, but I think it still has some useful shortcuts. We'll see how much mileage I get out of this.
There are a million JavaScript libraries, but these three seem to be ones I'll find useful - though I could be wrong about that. The great part about being totally new is that I'm not hung up on anything. If these help great, if not I'll figure out something else.
One last thing I'm going to mention are some of the books that I've been finding really helpful for learning HTML/ CSS/ JavaScript. I'm going to link to the editions Ive been reading (there may be newer, but these were the ones I could find via public libraries and used book stores)...
Head First HTML 5 Programming - Eric Freeman, Elisabeth Robson (O'reilly)
Head First JavaScript Programming - Eric Freeman, Elisabeth Robson (O'reilly)
HTML 5, JavaScript, and jQuery Trainer - Dane Cameron (Wrox)
Secrets of the JavaScript Ninja - John Resig, Bear Bibeault, Josip Maras (Manning)
jQuery in Action - Bear Bibeault, Yehuda Katz, Aurelio De Rosa (Manning)
Foundation Game Design with HTML5 and JavaScript - Rex van der Spuy (friendsofED/ Apress)
I'm not getting anything if you order any of these, I just wanted to mention them as a part of sharing all the resources I've been able to find.
So now that I've got a lot of tools, it's time to start putting things together. Since this whole project is going to be built with HTML, CSS and JavaScript, over the next 3 posts I'm going to go on a whirlwind tour of all three - starting tomorrow with HTML.
The Open2 Engine is going to be a webpage, like Twine, that can show and hide text, as well as run Interactive Narrative games. So I need a tool that will help me with writing all that HTML, CSS and JavaScript. Now, it is actually possible to just use the pain old Notepad that comes with Windows...
But while that may be possible, it's also kind of crazy :) One nice feature (to me) of most programming tools is "syntax highlighting," where the program colors your code to help make the different components stand out, like Notepad2 does...
Still, I am going to be working with multiple files, so I really need something that can keep them all conveniently open (instead of a million icons on my taskbar). Notepad++ has a really nice tabbed interface...
But to get really complicated you need an IDE (Integrated Development Environment) which has a lot of bells and whistles. The first one I read about (in the ton of programming books I've gone through the last month) was called Aptana Studio. Now, I had a hell of a time actually getting it to install, but finally did...
While Aptana does have a lot of features, during the install troubles I also installed Eclipse, which is very similar in style (though, they all share a lot of features and even appearance)...
Another editor I read about was Atom...
And Microsoft even made their own editor (that sure looks a lot like Atom above) called Visual studio Code...
But the one I'm going to use is called NetBeans. My screenshot below is not the default look of NetBeans, I have added the Darcula LAF theme and I'm using the Hacker font...
So why NetBeans? Well, from what I've read programmers can get into holy wars over their choice of editor - but I'm a total n00b to this, so I have no idea what is good or not. Each programming book I read mentioned a different editor, but NetBeans was the easiest one for me to actually get working and setup the way I wanted. And, it has all kinds of great features. If you look at the screenshot above, of a webpage, at the bottom-left there is a tree of all the HTML elements along with the classes and Ids for each - which is a very handy reference. Below is a screenshot of a JavaScript file, and again the bottom-left has a tree with an object I created and all it's properties...
Now, all the IDEs I've listed here will do the same basic things, providing helpful tree-views, syntax highlighting, autocomplete, and a host of stuff to make programming much easier. But there is another way to make life easier, and that's by using a "javacsript library."
A library is just a list of code that is in some way "better" to work with than regular JavaScript. Now, this is a little tricky. JavaScript recently (like 1-2 years ago) went from ECMA 5 to ECMA 6 while at the same time HTML went from 4 to 5. So there have been a lot of changes in the tools I'm going to be using - and some of the hard-to-use code that many libraries were designed to fix ended up getting fixed in all the changes. Still, I've seen a few libraries that look like they might be very useful - and in fact I believe that Twine uses them as well.
jQuery is the first. What jQuery does is really simple, it makes it easier to write code to work with the DOM (Document Object Model) - the framework that a webpage is built from. jQuery doesn't do anything new, it just does it more efficiently. Case in point, let's say I need to work on a part of my page with the ID of "myID" - my straight JavaScript code would look like...
document.getElementById("myID")
but in jQuery it would be...
$('#myID')
which is a lot shorter to type. Since I'm going to be constantly getting parts of the page, in order to show and hide things like Twine does, I'm going to be typing a lot of the above code, so anything that makes it easier on me is a good thing. There is a ton of stuff jQuery can do in all, I'm just scratching the surface here but I'll be demonstrating more if it's features when I start writing code.
There's also a cool expansion for jQuery called jQuery UI which helps you make some neat User Interface (UI) elements for a webpage...
Using this library will give me some tools to make the page look really cool, and act more like an application than a bunch of text (which is part of my eventual development plan for the project - I think I'm going to spend the rest of my life working on this, because I have a whole heck of a lot of things I want it to be able to do :).
The last library I've been looking at is Underscore. This library mostly exists to make some functions, some programming commands, easier to use. I'm not sure about this one. From my reading it looks like a lot of what Underscore does is a part of the new version of JavaScript, but I think it still has some useful shortcuts. We'll see how much mileage I get out of this.
There are a million JavaScript libraries, but these three seem to be ones I'll find useful - though I could be wrong about that. The great part about being totally new is that I'm not hung up on anything. If these help great, if not I'll figure out something else.
One last thing I'm going to mention are some of the books that I've been finding really helpful for learning HTML/ CSS/ JavaScript. I'm going to link to the editions Ive been reading (there may be newer, but these were the ones I could find via public libraries and used book stores)...
Head First HTML 5 Programming - Eric Freeman, Elisabeth Robson (O'reilly)
Head First JavaScript Programming - Eric Freeman, Elisabeth Robson (O'reilly)
HTML 5, JavaScript, and jQuery Trainer - Dane Cameron (Wrox)
Secrets of the JavaScript Ninja - John Resig, Bear Bibeault, Josip Maras (Manning)
jQuery in Action - Bear Bibeault, Yehuda Katz, Aurelio De Rosa (Manning)
Foundation Game Design with HTML5 and JavaScript - Rex van der Spuy (friendsofED/ Apress)
I'm not getting anything if you order any of these, I just wanted to mention them as a part of sharing all the resources I've been able to find.
So now that I've got a lot of tools, it's time to start putting things together. Since this whole project is going to be built with HTML, CSS and JavaScript, over the next 3 posts I'm going to go on a whirlwind tour of all three - starting tomorrow with HTML.
Saturday, September 9, 2017
The Open2 Engine - part 1 - The Open Game License
Okay, so a quick re-cap for anyone new to the blog: I started this blog after finding a program called Twine that was designed to make Interactive Narratives (sometimes called Interactive Fiction, or "Choose Your Own Adventure). I wanted to convert an old 80s adventure-book series called "Lone Wolf" by Joe Dever to Twine. Which was fun, and frustrating, since my knowledge of programming was pretty limited. After getting a ways through that project I started wondering about what I was doing. The Lone Wolf books are not mine to use, and I didn't want to waste all the effort I'd been putting into that project. So I decided that I needed to make something that I could legally use. I thought about making my own system, decided against it, did it anyways (with my QND-Quest framework) (I would call it a "system" but it's not complete, so "framework" has the appropriately skeletal feeling :), then got that out of my system.
Okay, this is the first post in my new project: The Open2 Engine. I am going back to my original decision and I'm going to build it off of material that I can legally use. And since I started having some rel troubles with Twine, I'm going to write the whole thing myself in HTML, CSS and JavaScript. Over this week I'm going to post a series of articles that cover the groundwork for the project. I'm going to talk about the tools and resources I'm using, and even do a crash-course in the technologies I'm using. So this is going to lay the ground for regular postings about how the project grows.
Creating a role-playing game is a lot of work, on top of learning how to program it's a ****-ton of work. So I want to use an existing game that I can modify (since, lets face it, I'm going to end up tinkering :). How then does one find a game one can modify legally? Well, there are several options - okay, mostly two options: Creative Commons or Open Game License.
Creative Commons refers to a website that creates licenses for people who want to allow some type of non-traditional copyright for their works. This is a great community of artists who are willing to share their work (to varying degrees). There are quite a few independent RPGs that have been released under a Creative Commons license. The trick is, there are several different types of CC licenses, all allowing or requiring different things. So you have to read over them carefully. Another thing is, many designers who release an RPG under a CC license usually forbid commercial use. Now, it's a little early to worry about making money for something I haven't even created yet: but I've already put a lot of planning hours into this project that I'm going to put a ****-ton of writing and coding hours into, so I would like to have the option to try to make some money off my labors. So while I tip my hat to the CC projects out there (and I did release my own QND-Quest under a pretty open CC license), I don't think those kinds of games are going to work for what I want to do.
Which leaves option #2, the Open Game License. The OGL has quite a history, having been created for Dungeons and Dragons 3rd edition and then taking on a life of it's own. Pathfinder, a pretty popular RPG, was created with the OGL. This license allows commercial use, has a huge base of material, and is pretty easy to follow (you just copy the OGL itself and then add a few lines crediting all the projects you're using that are OGL content).
Now, all the games I know of that are covered by the OGL have been pen-and-paper RPGs, but I'm creating a "computer game" - so is the OGL still okay? That's a good question, so I did some digging and came up with this webpage that was written by Wizards of the Coast, the creators of the OGL:
Okay, legal issues seem to be good, and so I've got my basis for creating my own game. Well, the thing is, I actually have a whole lot of options for creating my own game. You see, the OGL has been around for a while and there have been a lot of games released under it:
The 3.5 SRD has the rules that formed the basis of the OGL when it was created.
The Modern Path was created for a modern or futuristic version of the 3.5's fantasy.
d20 Hero added super-heroes.
As I mentioned before, the RPG Pathfinder was built on the OGL, and has a metric-ton of books and supplements.
Swords & Wizardry is an "old-school" retroclone with the feel of the earlier D&D games, built from the OGL.
Dungeon World is another old-school-styled game.
Gumshoe was designed for mystery games, again it's OGL.
Traveller is the latest version of a sci-fi game I remember from my youth (never played it much, but it had a unique (at the time) character creation system).
Fate Core is a very different game from many other OGLs, it's has a more narrative focus (that the mechanic focus of the original OGL works).
13th Age is a newer RPG, which has some issues but also some neat concepts.
Starfinder is the latest RPg from Paizo, the creators of Pathfinder. It has a strange fantasy/sci-fi mix, from the little I've seen of it (haven't fully read the rules or played it).
The D6 System is the core of the original Star Wars and Ghostbusters games by West End Games back in the 80s, and adds a lot of mechanical depth to the OGL pool.
The 4C System is another update to an old game, the Marvel Superheroes also from the 80s. It isn't a part of the OGL, it's in the Public Domain so it can be added to the OGL mix.
And I'm pretty sure this list is incomplete :) I'll wager I could find a few more OGL works if I tried.
There is another possible source, the Creative Commons Attribution license (CC BY) only requires that you give credit to the original creator - which under the OGL you have to do, there is list of the works you're pulling from at the end of the license document. It seems like the two should live together just fine, though I'm leery of mixing licenses. I'll look into this some more down the road.
Okay, with all that material to choose from, where to start? Well, with the one I haven't mentioned yet, the 5e System Reference Document. This is the basis for the latest version of D&D, and one thing you'll notice when you read the document itself is that it's pretty sparse. There are not very many option for races and characters - which suits me just fine. The thing I like about 5e is that it's pretty simple mechanically. It's a good, lean skeleton to build off of (and to translate into computer code). I'm going to be creating my own races and classes and abilities (which I'd need to do anyways, the OGL only really covers mechanics).
Now, something I didn't do in my last project (since it wasn't mine really) was make things look pretty. Now that I'm creating something that's going to have my name on it, I want it to be good and to look good. So on top of rules I need some art I can use (since my skills as an artist border between laughable and horrific). To that end, there are some sites that have "open" artwork too...
Open Game Art has a lot of great resources, more for 2D computer games, but I'm sure I can find some useful stuff here.
Craftpix has some free stuff and some paid stuff.
Icon Finder is a list to some free icons (have to watch carefully which ones are okay for commercial use though) (and, if I ever get paid for this, I will happily pass on some money to the people I'm drawing resources from).
Icons8 has some really cool icons.
Honestly though, Game-icons.net is the greatest collection of, well, game icons.
Google Fonts has some greats fonts that are open to use (most just need credit, that's true of most everything I've listed here actually) (so my "Credits Page" for this project is going to be huge).
Free Sound and Ambient Mixer are both supposed to have some good sounds, from what I've read, though I haven't looked around either site much yet.
And lastly, for this list, Wikimedia Commons has a bunch of public domain art and other stuff.
Whew!!! So that's a lot of stuff that's all legal to use (well, with the proper attribution and such - I'm just laying out the resources right now). A pretty darn good pool to draw from, and it's easier for me to build on top of something else right now (though in the future, who knows?).
So, that was part 1 of this project, figuring out what material we have to use. With this start, we're going to have to start writing code to make it all snap, crackle and pop: so in the post tomorrow I'll take a look at the programming tools I'm going to use to bring all this to digital life, and again, there are a lot of great free options out there.
Until tomorrow !
Okay, this is the first post in my new project: The Open2 Engine. I am going back to my original decision and I'm going to build it off of material that I can legally use. And since I started having some rel troubles with Twine, I'm going to write the whole thing myself in HTML, CSS and JavaScript. Over this week I'm going to post a series of articles that cover the groundwork for the project. I'm going to talk about the tools and resources I'm using, and even do a crash-course in the technologies I'm using. So this is going to lay the ground for regular postings about how the project grows.
Creating a role-playing game is a lot of work, on top of learning how to program it's a ****-ton of work. So I want to use an existing game that I can modify (since, lets face it, I'm going to end up tinkering :). How then does one find a game one can modify legally? Well, there are several options - okay, mostly two options: Creative Commons or Open Game License.
Creative Commons refers to a website that creates licenses for people who want to allow some type of non-traditional copyright for their works. This is a great community of artists who are willing to share their work (to varying degrees). There are quite a few independent RPGs that have been released under a Creative Commons license. The trick is, there are several different types of CC licenses, all allowing or requiring different things. So you have to read over them carefully. Another thing is, many designers who release an RPG under a CC license usually forbid commercial use. Now, it's a little early to worry about making money for something I haven't even created yet: but I've already put a lot of planning hours into this project that I'm going to put a ****-ton of writing and coding hours into, so I would like to have the option to try to make some money off my labors. So while I tip my hat to the CC projects out there (and I did release my own QND-Quest under a pretty open CC license), I don't think those kinds of games are going to work for what I want to do.
Which leaves option #2, the Open Game License. The OGL has quite a history, having been created for Dungeons and Dragons 3rd edition and then taking on a life of it's own. Pathfinder, a pretty popular RPG, was created with the OGL. This license allows commercial use, has a huge base of material, and is pretty easy to follow (you just copy the OGL itself and then add a few lines crediting all the projects you're using that are OGL content).
Now, all the games I know of that are covered by the OGL have been pen-and-paper RPGs, but I'm creating a "computer game" - so is the OGL still okay? That's a good question, so I did some digging and came up with this webpage that was written by Wizards of the Coast, the creators of the OGL:
Okay, I get that, most programs are only readable by the computers that run them, so that would hide all the rules that the system is using. Well, that's great because JavaScript does not have that problem. JavaScript is an "interpreted" language, the browser reads and runs it on the fly from regular text files that are easy to read (once you know the syntax of course) - unlike other languages like C++ that are "compiled" into machine-code. Ditto with HTML and CSS, both are quite easily readable (in fact, later I'll introduce you to them and help you start learning how if you don't already know). There's another OGL FAQ page, and it seems to agree, and everything in it is something I can live with.There has been some confusion about how these licenses are applied to software. We will attempt to clarify the major sticking points. This FAQ assumes you have read and are reasonably familiar with the Open Game License, the d20 System Trademark License, and the d20 System Trademark Guide.Q: Can the licenses be used with software?A: Yes, both licenses can be used with software. However, several sections of the licenses require a bit more work to properly implement in software than they do in printed material and the d20 License has restrictions specific to software.Q: How can the OGL be used with software?A: Just like with other material, the OGL allows you to use any Open Content, provided you follow the terms of the OGL. Follow the requirements of the License, include the text of the license and the appropriate copyright information, and clearly identify Open Content.NOTE: The biggest problem we've found with software and the OGL is that programmers aren't paying attention to Section 8 of the OGL. Section 8 states: ñIf you distribute Open Game Content You must clearly indicate which portions of the work that you are distributing are Open Content.î This doesn't mean you can say all rules in my program are Open, the users need to be able to see all that Open Content. You can do this by putting Open Content in a format that is easy to understand. Popular solutions have been to place everything in text files that the program pulls info from, having everything in a viewable database within the software, using Java script on a webpage (viewing the source of the webpage will display the code and Java script is relatively easy for a user to interpret). The key is that the user has to see everything that is Open Content that the program uses and be able to understand it without too much effort. The whole point of the OGL is that once information is declared Open everyone has free access to it under the OGL. Compiling that information into a program denies the user that access and violates the spirit of the Open Gaming License.Q: So what kinds of programs can I make with the OGL?A: Anything. Character generators are popular, as are programs that help GMs keep track of their adventure. Random treasure generators are also fun.Q: So I could make a game?A: Sure. Remember though, you cannot use any Product Identity with the OGL or claim compatibility with anything. So you can't say your game is a d20 System game or uses D&D rules or call it Elminster's Undermountain Crawl.
Okay, legal issues seem to be good, and so I've got my basis for creating my own game. Well, the thing is, I actually have a whole lot of options for creating my own game. You see, the OGL has been around for a while and there have been a lot of games released under it:
The 3.5 SRD has the rules that formed the basis of the OGL when it was created.
The Modern Path was created for a modern or futuristic version of the 3.5's fantasy.
d20 Hero added super-heroes.
As I mentioned before, the RPG Pathfinder was built on the OGL, and has a metric-ton of books and supplements.
Swords & Wizardry is an "old-school" retroclone with the feel of the earlier D&D games, built from the OGL.
Dungeon World is another old-school-styled game.
Gumshoe was designed for mystery games, again it's OGL.
Traveller is the latest version of a sci-fi game I remember from my youth (never played it much, but it had a unique (at the time) character creation system).
Fate Core is a very different game from many other OGLs, it's has a more narrative focus (that the mechanic focus of the original OGL works).
13th Age is a newer RPG, which has some issues but also some neat concepts.
Starfinder is the latest RPg from Paizo, the creators of Pathfinder. It has a strange fantasy/sci-fi mix, from the little I've seen of it (haven't fully read the rules or played it).
The D6 System is the core of the original Star Wars and Ghostbusters games by West End Games back in the 80s, and adds a lot of mechanical depth to the OGL pool.
The 4C System is another update to an old game, the Marvel Superheroes also from the 80s. It isn't a part of the OGL, it's in the Public Domain so it can be added to the OGL mix.
And I'm pretty sure this list is incomplete :) I'll wager I could find a few more OGL works if I tried.
There is another possible source, the Creative Commons Attribution license (CC BY) only requires that you give credit to the original creator - which under the OGL you have to do, there is list of the works you're pulling from at the end of the license document. It seems like the two should live together just fine, though I'm leery of mixing licenses. I'll look into this some more down the road.
Okay, with all that material to choose from, where to start? Well, with the one I haven't mentioned yet, the 5e System Reference Document. This is the basis for the latest version of D&D, and one thing you'll notice when you read the document itself is that it's pretty sparse. There are not very many option for races and characters - which suits me just fine. The thing I like about 5e is that it's pretty simple mechanically. It's a good, lean skeleton to build off of (and to translate into computer code). I'm going to be creating my own races and classes and abilities (which I'd need to do anyways, the OGL only really covers mechanics).
Now, something I didn't do in my last project (since it wasn't mine really) was make things look pretty. Now that I'm creating something that's going to have my name on it, I want it to be good and to look good. So on top of rules I need some art I can use (since my skills as an artist border between laughable and horrific). To that end, there are some sites that have "open" artwork too...
Open Game Art has a lot of great resources, more for 2D computer games, but I'm sure I can find some useful stuff here.
Craftpix has some free stuff and some paid stuff.
Icon Finder is a list to some free icons (have to watch carefully which ones are okay for commercial use though) (and, if I ever get paid for this, I will happily pass on some money to the people I'm drawing resources from).
Icons8 has some really cool icons.
Honestly though, Game-icons.net is the greatest collection of, well, game icons.
Google Fonts has some greats fonts that are open to use (most just need credit, that's true of most everything I've listed here actually) (so my "Credits Page" for this project is going to be huge).
Free Sound and Ambient Mixer are both supposed to have some good sounds, from what I've read, though I haven't looked around either site much yet.
And lastly, for this list, Wikimedia Commons has a bunch of public domain art and other stuff.
Whew!!! So that's a lot of stuff that's all legal to use (well, with the proper attribution and such - I'm just laying out the resources right now). A pretty darn good pool to draw from, and it's easier for me to build on top of something else right now (though in the future, who knows?).
So, that was part 1 of this project, figuring out what material we have to use. With this start, we're going to have to start writing code to make it all snap, crackle and pop: so in the post tomorrow I'll take a look at the programming tools I'm going to use to bring all this to digital life, and again, there are a lot of great free options out there.
Until tomorrow !
Friday, September 8, 2017
QND-Quest, a game fragment for Twine/ SugarCube
QND-Quest, the Quick-aNd-Dirty Quest Framework
INTRODUCTION
I didn't want to do this.
I had decided that I wasn't going to try to develop my own rules system, that I was just going to go ahead and work on something else. I had decided that. My brain apparently had other ideas (heh heh) since that night I could not get to sleep because of everything running around noisily inside my cranium.
So this is going to be ugly, hence the name, and incomplete (so DIY-required), but here is a simple almost-system that you can use for creating your own adventures.
-d100mechanic.blogspot.com
OVERVIEW
The basic rules are going to be simple. We're going to have a few elements that define a character - these are going to map to the kinds of challenges that the character can face in the story. To determine success or failure we are going to add the value of the appropriate elements and use them as a simple 1-100 percentage. Sounds easy? Don't worry, I'm sure I'll complicate it plenty for you :)
GOALS - EVERY GAME NEEDS A SCORE
I believe in being up-front with the player, showing them what all they can strive for. So we need some variables we can display to show the player all the possible things they can do in the game. This is, of course, going to vary wildly with each story - so which of these you want to use, and what numbers to set them at, is something you'll have to decide:
Locations - where all can the player go, what new locations are there to find?
<<set $LocationsVisited = 0>>
<<set $LocationsMax = ??>>
Secrets - what all can the player learn, what mysteries to unravel or puzzels to solve?
<<set $SecretsFound = 0 >>
<<set $SecretsMax = ?? >>
Collections - how many objects are there to pick up, or maybe interact with; or maybe even create?
<<set $CollectionsComplete = 0>>
<<set $CollectionsMax = ??>>
Interactions - how many NPCs are there to talk to, to interact with; either to get something from or to change their minds or to learn about?
<<set $NPCSMet = 0>>
<<set $NPCSMax = ??>>
Enemies - how many foes are there to defeat, villains to vanquish?
<<set $EnemiesDefeated = 0>>
<<set $EnemiesMax = ??>>
You can either have these as a simple counter, increasing with each one the player does - or you can have them as a counter and a maximum, to show the player how many of how many they have accomplished (my personal recommendation - a player who reaches the end and sees they missed 2 secrets may feel like playing again to find them).
By going through this list you can write a good chunk of your story already in the form of all the things the player can strive to overcome and accomplish. And you can track anything this way; "songs/ ballads heard", "limericks read", "puns made," all could be variables and things your players can know exist to be found/ won/ done in the story.
TIME - THE UNIVERSAL RESOURCE
To have drama we need cost, and the greatest and most ubiquitous resource is Time. This we are going to present to the player as "Pace." Doing things slowly (ie, choosing the slowest option) will decrease Pace, while being quick will increase it. A high Pace is good, it means you are getting to your destination before your enemies, or discovering the secret before someone else, or getting in the first (and hopefully last) blow (or, like a surprise or ambush attack). Conversely being slow, having a low Pace, is bad since it means people are getting away from you, you're learning information too late, or you're on the defensive.
Pace gives us a great way to tempt the player into doing something stupid, or harder or more risky - for the fun of drama :) By that I mean we can provide an option that's fast (increases Pace) but has a higher difficulty and/or higher penalties for failure - and add an option that's slower (decreases Pace) but is easier and less risky. This makes that decision take the context of the greater story: do we do something safe now and hope the penalty to Pace doesn't bite us later; or go risky now to hopefully make things easier later? This is something that takes some work to convey to the player, but adds a great depth to the choices you present.
We'll set the Pace at 5, and assume a 0-10 scale, which we can test for to create different encounters in the story.
<<set $Pace = 5>>
In each encounter code (adjust the numbers as you see fit of course) you could put something like this:
<<if $Pace < = 3>>
do something to make the challenge/ encounter worse
<<eslse if $Pace > = 8>>
do something to make things better
<<else>>
put the base encounter here
<</if>>
RESOLVE - THE INTERSECTION OF THE WORLD AND THE CHARACTER
Let's make another resource we can try to tempt the player into doing stupid, I mean dramatic, things with. "Resolve" is going to be the first of the character stats - but it's also going to be a resource that gets changed globally.
In the story, we'll use Resolve as a carrot and or stick, increasing and decreasing it as the character feels bold, succeeds at actions or at taking risks. We'll reduce it for failures and mistakes and plain old bad luck. This has to be done carefully, and the player has to know before making a decision if Resolve could be effected (again, player knowledge good - you can only make good decisions if you have good knowledge (of course, we may want to simulate making bad decisions off little or incorrect knowledge; but that needs to be a deliberate plan and carefully telegraphed and executed).
For the player, Resolve is the first stat, and it gets added to EVERYTHING. Every roll for failure or success uses Resolve, so it is the constant bedrock of their performance (which is how we can make it tempting to gain or scary to lose).
We'll set it at 5, from 0 - 10 (a pattern I'm going to repeat a lot).
<<set $Resolve = 5>>
Theoretically we could test Resolve the same way we do Pace, in an encounter/ challenge and have it modify that challenge. Whatever works for you - I'll be honest that Resolve is the single idea I like the most but also the one I have the least idea how to use well.
DEFINING CHALLENGES
Every challenge is going to have a chance of success based on the character. There are 6 things that are going to combine to make that chance:
1) Base Difficulty - this is the starting point, we'll say 50 for something Easy, 35 for something Hard and 20 for something Incredible. Theoretically we could also use Pace as a part of the base difficulty, but that seems kind of weird, so I'd stick to using Pace to change the outcomes, not the difficulties.
2) Resolve - this is the first character element, and it will apply everywhere/when, adding to the Base Difficulty.
3) Attributes - each character will have 5 attributes, but only one will apply to a single challenge roll. The attributes are: Physical, Emotional, Mental, Spiritual, and Relational (I'll discuss all this stuff later in more detail).
4) Trait - each attribute has 3 traits, and only one will be added to the total. For example, the Physical attribute has the traits of Power, Speed and Toughness. So breaking down a door might be Physical + Power.
5) Skill - like attributes there are 5 skills and only one for each roll. The skills are Exploring, Investigating, Manipulating, Talking and Fighting. Exploring covers everything related to movement and travel and dealing with the environment - so our door-breaking example might use Physical +Power +Exploring.
6) Focus - each skill has multiple specializations (focus/foci) and again one will apply. The Exploring foci are: Movement, Stealth, and Bypass. Which means our full door-breaking challenge, against a simple wooden door, might be: Easy +Resolve +Physical +Power +Exploring +Bypass.
Now, every character element goes from 0 to 10, so combining the 5 character elements with the base difficulty gives anywhere from a 20 to 100 percent chance of success. I think 20 is fine at the low end, it means the player will always have some sort of chance, but your mileage may vary - so adjust the numbers (in general or for a specific challenge) as needed.
CHARACTERS (poor fools, they make us laugh, ha ha ha ha ha :)
So let's actually define a character, maybe even make one. We have 3 core parts that every character has:
Resolve - our main element, and it starts at 5 for everybody.
Attributes and Traits - attributes deal with the basic nature of the character herself. Here are the attributes and their traits in more detail...
1) Physical - everything to do with the body
Power: strength, raw force, He-Man and She-Ra stuff :)
Speed: quickness, agility, nimbleness, deftness
Toughness: endurance, resistance (of physical issues)
2) Emotional - everything to do with feelings
Passion: intensity, drive, related to Resolve but not quite the same (while Resolve is global, Passion is local; the character has something they feel passionate about, which you could explicitly define somewhere (like in an Array) or just imply from the character's background or setting).
Empathy: awareness of how others are feeling (and maybe how to manipulate or take advantage of that?)
Control: the ability to use one's emotions instead of being used by them, to resist outside emotional influence
3) Mental - the mind is mostly about truth
Reasoning: the ability to 'fill in' incomplete information, test intuitions, 'think outside the box.'
Memory: the ability to pull from past experiences (of things one's done and seen and heard).
Fortitude: your ability to resist and adapt to emotional shocks
4) Spiritual - emotions are brought about by the moment, but the spirit comes from decisions made in the past and a desired future outcome or actions.
Conviction: the measure of how "right" you think your world-view is (so this could be applied to some actions/ choices but not others, depending on how they matched up to the character's internal outlook)
Sensitivity: read people and places/ events. This lets you read someone's inner nature - combined with Insight it gives you a complete blueprint of another person socailly (what they want and how they're trying to get it).
Forgiveness: how well you can adapt to lapses of judgment and failures, both yours and others
5) Relational - everything involved in dealing with other people.
Charisma: impose your will on others, force of personality
Insight: see what people are trying to do (socially); this helps you read someone's actions (are they lying to you, trying to appeal to an emotion, hiding something...)
Aplomb: ability to deal with difficult people or awkward situations
Now, while the Attributes and Traits usually go together, they don't have to. You could create a scenario like: shooting a gun is Physical + Speed, but closing your eyes and hitting the same target (without moving) is Physical + Memory (for your "muscle memory").
Exactly how do you combine these for different actions? I have no idea. This is just a list I knocked out to have something that seemed comprehensive, I really don't know how to implement everything here; so change these as you need (and also drop or ignore any that you don't need for your story).
Skills and Foci - like attributes and traits there are 5 skills and each has 3 foci. While Attributes and Traits are innate abilities that are developed by experience, Skills are about what the character has trained in and been exposed to doing...
1) Exploring - everything involved in moving through the world, getting from one place to another despite any obstacles in the way.
Movement: everything about travel, from acrobatics to survival
Stealth: not being seen is usually involves working with or blending into your environment (white is stealthy in the arctic, not so in the jungle)
Bypass: how to get over, around and through obstacles in the environment; from lock-picking (an urban obstacle) to climbing
2) Investigating - everything dealing with gathering and applying information (in particular dealing with missing information)
Forensics: re-create the past by looking at the present
Prediction: determine the future by looking at the present
Discovery: fill in missing pieces of the present
3) Manipulating - everything dealing with objects or things (and people as things, like 'surgery' is dealing with the human body instead of the human person)
Technician: how to use and repair objects
Craftsman: how to make and design objects
Hacker: how to use objects in ways they were not meant to be used
4) Talking - everything involved in dealing with other people/ sentient creatures
Barter: give something for something, from diplomacy (you scratch my back I'll scratch yours) to bribery
Exploit: take advantage of something about the other person, from a lie (take adv of fear, for example) to promising something you're not going to give (or, taking advantage of something they want)
Oratory: try to make the other person feel something different or change a postion they have on something (alter their internal landscape)
5) Fighting
Unarmed: fighting with only your body. natural weapons
Melee: fighting at close range
Ranged: fighting at a distance
An Idea: These are all meant to be very broad, so they can be as simple as possible to describe while also being useful distinctions (hopefully). If you need more detail, add an Array of some specific elements. For example, Exploring could have it's score, and also an Environments = [urban, forest] array to specify where that score applies at (use 1/2 or even 0 for outside environments).
Now, the core 3 are Resolve, Attributes and Skills.
Resolve always starts at 5 (unless you want to mess with that for some reason...).
Each character starts with the following 5 scores, one set for Attributes and one set for Skills, and the player decides how to allocate them: 7, 5, 5, 3, 3
So, a player who wants to make a really strong fighter might do the following-
Attributes: Phys-7 Emot-5 Ment-5 Spir-3 Rltn-3
Skills: Explr-5 Invest-3 Manip-5 Talk-3 Fight-7
A more detective-like character might be:
Attributes: Phys-3 Emot-5 Ment-7 Spir-3 Rltn-5
Skills: Explr-5 Invest-7 Manip-3 Talk-5 Fight-3
An Idea: you can also use descriptive names instead of numbers if you want:
Weak (wk) 0-2
Competent (co) 3-4
Strong (st) 5-6
Exceptional (ex) 7-8
Legendary (lg) 9-10
The core 3 are "core" because everyone has the same ones and the same pool of starting scores. The 3 Secondary elements are more flexible.
Resources - every character has the same starting Resources...
Health: what shape your body is in
Assets: what shape your finances are in, in whatever terms you want (so could be "gold pieces" or "favors owed" or "cows owned" or even a combination of them all)
Stability: what shape your mind is in, sanity basically (though the Cuthulu games worked over that stat so much)
Integrity: what shape your soul is in, in terms of how much you've lived your ideals
Reputation: what shape you fame/ infamy is in, how other people see you
Every Resource starts at 20.
Advantages - are special abilities that use the Traits and Foci. Each player can make up their own advantages, buying points in a Trait or Focus and naming the resulting ability whatever seems appropriate. Or, if you want to do some extra work, you can make a list of your own the player can choose from. No trait or focus can go above 10, period. I'd also say that no starting trait/focus can go above 6, but I'm not sure about that. In fact, these numbers are all being made up as I type them - so you might want to play-test them yourself and see what you think (if you do, tell me).
I've been debating weather Advantages (or, you could call them Abilities or Powers, whatever fits) should be limited to Traits and Focus, or if they could increase Attributes and Skills as well. If you want them to increase anything, I'd say that Attributes and Skills cost twice as much (or x3), since they (in theory) apply to more situations.
Costs - Advantages are not free, the totals of all the points gained has to be off-set by points lost. And that cost is paid out of the character's Resources. No Resource can go below 1 - there needs to be something bad for low resources, which I haven't worked out yet. Maybe 5 would be a better minimum number, or 3?? Maybe starting at 20 is too high, 10 or 15 could be better?? Again, making up numbers as I go along.
So let's build our fighter from above:
Attributes:
Physical-7 Emotional-5 Mental-5 Spiritual-3 Relational-3
Skills:
Exploring-5 Investigating-3 Manipulation-5 Talking-3 Fighting-7
Advantages:
Trained (and Equipped) Soldier (+5 Melee, +5 Ranged)
Veteran of the Front Line (+5 Power, +5 Toughness)
Costs:
Has Done Questionable Things (-5 Integrity, -5 Reputation)
The Army Doesn't Pay Very Well (-5 Assets)
The Old Wound (-5 Health)
Resources:
Health-15 Assets-15 Stability-20 Integrity-15 Reputation-15
And the completed detective:
Attributes:
Physical-3 Emotional-5 Mental-7 Spiritual-3 Relational-5
Skills:
Exploring-5 Investigating-7 Manipulation-3 Talking-5 Fighting-3
Advantages:
Commune With Spirits (+3 Forensics, +3 Prediction)
Hex Magick (+5 Physical)[note: his magic works by decreasing it's target, which in this case mechanically means increasing his own stats, uses the optional rule above, at x2 cost]
Outlaw Scholar (+2 Stealth, +2 Bypass)
Costs:
Indoors Too Much, Reading By Bad Light (-5 Health)
Seen Things Man Was Not Meant To See (-5 Stability)
Shunned As A Sorcerer (-5 Reputation)
"Leased" His Soul (-5 Integrity)
Resources:
Health-15 Assets-20 Stability-15 Integrity-15 Reputation-15
And there we have a simple, yet hopefully not simplistic, way to create a character. Note, in this system 'equipment' isn't really a thing. Having gear just means a bonus to a Trait or Focus, we're not counting pounds or arrows. This is deliberate, my idea was to make something simple to use as a base. If you want to do equipment I'd just make an Array and have specific challenges/ situations check for an item. So, the locked door could check if you have the key (hey, great place for a +Pace, right?) - presenting the challenges (break, pick, etc) if you don't. Or at the end of every fight you could check if the character has a health potion (Equipment.contains("Health Potion") should work) and let them drink it to regain health.
THAT'S PRETTY MUCH IT, RIGHT?
Yeah. Now you just need a story. What do you want to tie to the Resources?(any members of a religious group or other order that would respond well/poorly to Integrity? Is the character dead or has to resurrect (for cost?) at 0 Health?) How do you want to modify challenges or even the story for Pace?(at Pace 1 does the spy your chasing get away?) Each challenge just needs to be defined by what elements go into it, and then add up those elements that the character has. You can then either keep the numbers secret, give a vague hint as to the odds, or just explicitly state them. It's not the odds so much, it's the consequences. Maybe that long-shot chance gives a nice bonus to Pace or Resolve? Maybe that easy-to-do option will mean losing out on a Secret? The true craftiness in writing Interactive Narratives is to make the stuff before and after the roll/ decision the really interesting and captivating part - the mechanics are meant to be simple so they don't really have a lot of impact by themselves.
So, let's throw out some more variables (to save you a touch of typing), and a widget for how to add the necessary numbers, and we'll be just about ready to start seriously working on a story!
I'm going to assume that only characters have stats, this system was not designed for head-to-head (or "opposed") rolls between two characters. A resisting NPC just means changing the Base Difficulty (so fighting the Guards might be Easy, the Lieutenant Hard and the Captain Incredible). Thus, I'm defining all the player's stats as straight variables/ arrays. If you really want to work out your own PCvNPC system, you could make an Object that holds all these together as properties. So, our character stats:
Let's put the Attributes in an Array...
<<set $Attributes = [0, 0, 0, 0, 0]>>
Then, instead of memorizing index numbers, let's make some constants (typing out the name is longer, but it might be easier to remember and read, whatever works for you)...
<<set $Physical = 0>>
<<set $Emotional = 1>>
<<set $Mental = 2>>
<<set $Spiritual = 3>>
<<set $Relational = 4>>
Using the variables for the indexes just let's you write something like:
$Attribute[$Emotional]
to access that variable, though you could also just use the variable itself. I don't know, I'm just going to throw this out there. (though, if you did want to have multiple characters as Objects this would let you do:)
$Player1.$Attribute[$Emotional]
We'll do the same for Skills...
<<set $Skills = [0, 0, 0, 0, 0]>>
<<set $Exploring = 0>>
<<set $Investigating = 1>>
<<set $Manipulating = 2>>
<<set $Talking = 3>>
<<set $Fighting = 4>>
And Traits...
<<set $Traits = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>>
<<set $Power = 0>>
<<set $Speed = 1>>
<<set $Toughness = 2>>
<<set $Passion = 3>>
<<set $Empathy = 4>>
<<set $Control = 5>>
<<set $Reasoning = 6>>
<<set $Memory = 7>>
<<set $Fortitude = 8>>
<<set $Conviction = 9>>
<<set $Sensitivity = 10>>
<<set $Forgiveness = 11>>
<<set $Charisma = 12>>
<<set $Insight = 13>>
<<set $Aplomb = 14>>
And Foci...
<<set $Focus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>>
<<set $Movement = 0>>
<<set $Stealth = 1>>
<<set $Bypass = 2>>
<<set $Forensics = 3>>
<<set $Prediction = 4>>
<<set $Discovery = 5>>
<<set $Technician = 6>>
<<set $Craftsman = 7>>
<<set $Hacker = 8>>
<<set $Barter = 9>>
<<set $Exploit = 10>>
<<set $Oratory= 11>>
<<set $Unarmed = 12>>
<<set $Melee = 13>>
<<set $Ranged = 14>>
And Resources...
<<set $Resources = [0, 0, 0, 0, 0]>>
<<set $Health = 0>>
<<set $Assets = 1>>
<<set $Stability = 2>>
<<set $Integrity= 3>>
<<set $Reputation = 4>>
Let's make some constants for the Base Difficulty too, that'll make it easy to play with the numbers and see what works...
<<set $Easy = 50>>
<<set $Hard = 35>>
<<set $Incredible = 20>>
Okay, this is not going to be a fully-working widget, just something you can work on (again, I'm throwing this out as I type it, I've got another project that's eating up my code/test time):
/********
** In the stylesheet put:
** .warning {
** color: white;
** background-color: red;
** }
********/
/********
** Using an object allows you to create the parameters for a challenge
** in one place and re-use them later; don't forget to delete the comments :)
********/
<<set ChallengeObject = {
Name: "the short name for the challenge/action",
Description: "a longer description of the challenge/action",
Base: ###, /* ie, $Easy or a custom number */
Attribute: $AttIndex, /* ie, $Physical or $Mental */
Trait: $TraitIndex, /* ie, $Power or $Memory */
Skill: $SkillIndex, /* ie, $Exploring or $Fighting */
Focus: $FocusIndex /* ie, $Stealth or $Melee */
}>>
/********
** <<ChallengeOption ChallengeObject>>
** This widget shows the option to the player
** $args[0] = ChallengeObject - pass the base object
********/
<<widget "ChallengeOption">> <</nobr>>
$args[0].Description
<br> You have <<ChallengeOdds $args[0] print>>
<br> <<linkreplace $args[0].Name>>
<<ChallengeOdds $args[0]>>
/* I added the Pace to the results below, modify that as you want */
<<if $Success == true && $Pace >= 8>>
/* write code for results */
<<elseif $Success == true>>
/* write code for results */
<<elseif $Success == false && $Pace <= 2>>
/* write code for results */
<<elseif $Success == false>>
/* write code for results */
<<else>>
<span class="warning">ERROR: unable to determine results</span>
<</linkreplace>>
<</nobr>> <</widget>>
/********
** <<ChallengeOdds ChallengeObject "print">>
** This widget actually calculates the odds and determins success
** $args[0] = ChallengeObject - pass the base object
** $args[1] = print - widget will print odds in-line but not roll
** for success [optional]
********/
<<widget "ChallengeOdds">> <<nobr>>
<<set _Odds = 0>>
<<set $Success>>
<<set _Odds += $args[0].Base>>
<<set _Odds += $Resolve>>
<<set _Odds += $Attributes[$args[0].Attribute]>>
<<set _Odds += $Traits[$args[0].Trait]>>
<<set _Odds += $Skills[$args[0].Skill]>>
<<set _Odds += $Focus[$args[0].Focus]>>
<<if _Odds < 1 || typeof _Odds !== 'number'>>
<span class="warning">ERROR: unable to determine odds</span>
<</if>>
<<if %args[1] == "print">>
_Odds% of success.
<<else>>
<<set _Roll = random(1, 100)>>
<<if _Roll <= _Odds>>
<<set $Success = true>>
<<else>>
<<set $Success = false>>
<</if>>
<</if>>
<</nobr>> <</widget>>
Let me know if, by some miracle, that works - or if it doesn't, should anybody out there really want to use this system, I'll try to develop it some more.
RANDOM THOUGHTS ON MAKING CHALLENGES
You can always force a Focus. Maybe combat in the castle courtyard begins at long range, so the first challenge is a Fighting+Ranged attack. A character who can make ranged attacks can sit there and trade shots, a melee-only character needs to roll to not get hit, then can close and do melee combat instead.
There's always more than one way to do something. The locked door seems like a possible:
Physical +Speed +Exploring +Bypass to pick the lock. Could also be a:
Physical +Power +Exploring +Bypass to break down the door. Or even a:
Physical +Power +Fighting +Unarmed to break down the door (you could even test for both and give the player the best if you were feeling generous). Having a few different options for each challenge will keep the player from feeling useless.
What's the risk, what's the reward? this is the critical part of a challenge, what's at stake and what can the player get out of it? For some real fun though, mix those up with each way to approach the challenge. For our example above, the locked door. Maybe picking it will increase Pace, while bashing it will reduce Resolve (hey, hitting a door does not sound like fun after all)? How else can you play with different approaches to an obstacle? I firmly believe the more creative you can get here the better your story will be.
OKAY, THERE YOU GO
Yeah, I know it isn't much. Like I said at the beginning, I didn't plan on doing this - it's all been a spur-of-the-moment creation. I realize that you'll have to do plenty of work of your own to turn this into a story, but I hope that something here will help; by offering some inspiration if nothing else.
LICENSING
I'm releasing this system under a Creative Commons Attribution 4.0 International license, so you can use and expand on the system as much as you want, for personal or commercial projects, as long as you include a line like: "Uses the QND-Quest Framework by d100mechanic.blogspot.com" in your project.
INTRODUCTION
I didn't want to do this.
I had decided that I wasn't going to try to develop my own rules system, that I was just going to go ahead and work on something else. I had decided that. My brain apparently had other ideas (heh heh) since that night I could not get to sleep because of everything running around noisily inside my cranium.
So this is going to be ugly, hence the name, and incomplete (so DIY-required), but here is a simple almost-system that you can use for creating your own adventures.
-d100mechanic.blogspot.com
OVERVIEW
The basic rules are going to be simple. We're going to have a few elements that define a character - these are going to map to the kinds of challenges that the character can face in the story. To determine success or failure we are going to add the value of the appropriate elements and use them as a simple 1-100 percentage. Sounds easy? Don't worry, I'm sure I'll complicate it plenty for you :)
GOALS - EVERY GAME NEEDS A SCORE
I believe in being up-front with the player, showing them what all they can strive for. So we need some variables we can display to show the player all the possible things they can do in the game. This is, of course, going to vary wildly with each story - so which of these you want to use, and what numbers to set them at, is something you'll have to decide:
Locations - where all can the player go, what new locations are there to find?
<<set $LocationsVisited = 0>>
<<set $LocationsMax = ??>>
Secrets - what all can the player learn, what mysteries to unravel or puzzels to solve?
<<set $SecretsFound = 0 >>
<<set $SecretsMax = ?? >>
Collections - how many objects are there to pick up, or maybe interact with; or maybe even create?
<<set $CollectionsComplete = 0>>
<<set $CollectionsMax = ??>>
Interactions - how many NPCs are there to talk to, to interact with; either to get something from or to change their minds or to learn about?
<<set $NPCSMet = 0>>
<<set $NPCSMax = ??>>
Enemies - how many foes are there to defeat, villains to vanquish?
<<set $EnemiesDefeated = 0>>
<<set $EnemiesMax = ??>>
You can either have these as a simple counter, increasing with each one the player does - or you can have them as a counter and a maximum, to show the player how many of how many they have accomplished (my personal recommendation - a player who reaches the end and sees they missed 2 secrets may feel like playing again to find them).
By going through this list you can write a good chunk of your story already in the form of all the things the player can strive to overcome and accomplish. And you can track anything this way; "songs/ ballads heard", "limericks read", "puns made," all could be variables and things your players can know exist to be found/ won/ done in the story.
TIME - THE UNIVERSAL RESOURCE
To have drama we need cost, and the greatest and most ubiquitous resource is Time. This we are going to present to the player as "Pace." Doing things slowly (ie, choosing the slowest option) will decrease Pace, while being quick will increase it. A high Pace is good, it means you are getting to your destination before your enemies, or discovering the secret before someone else, or getting in the first (and hopefully last) blow (or, like a surprise or ambush attack). Conversely being slow, having a low Pace, is bad since it means people are getting away from you, you're learning information too late, or you're on the defensive.
Pace gives us a great way to tempt the player into doing something stupid, or harder or more risky - for the fun of drama :) By that I mean we can provide an option that's fast (increases Pace) but has a higher difficulty and/or higher penalties for failure - and add an option that's slower (decreases Pace) but is easier and less risky. This makes that decision take the context of the greater story: do we do something safe now and hope the penalty to Pace doesn't bite us later; or go risky now to hopefully make things easier later? This is something that takes some work to convey to the player, but adds a great depth to the choices you present.
We'll set the Pace at 5, and assume a 0-10 scale, which we can test for to create different encounters in the story.
<<set $Pace = 5>>
In each encounter code (adjust the numbers as you see fit of course) you could put something like this:
<<if $Pace < = 3>>
do something to make the challenge/ encounter worse
<<eslse if $Pace > = 8>>
do something to make things better
<<else>>
put the base encounter here
<</if>>
RESOLVE - THE INTERSECTION OF THE WORLD AND THE CHARACTER
Let's make another resource we can try to tempt the player into doing stupid, I mean dramatic, things with. "Resolve" is going to be the first of the character stats - but it's also going to be a resource that gets changed globally.
In the story, we'll use Resolve as a carrot and or stick, increasing and decreasing it as the character feels bold, succeeds at actions or at taking risks. We'll reduce it for failures and mistakes and plain old bad luck. This has to be done carefully, and the player has to know before making a decision if Resolve could be effected (again, player knowledge good - you can only make good decisions if you have good knowledge (of course, we may want to simulate making bad decisions off little or incorrect knowledge; but that needs to be a deliberate plan and carefully telegraphed and executed).
For the player, Resolve is the first stat, and it gets added to EVERYTHING. Every roll for failure or success uses Resolve, so it is the constant bedrock of their performance (which is how we can make it tempting to gain or scary to lose).
We'll set it at 5, from 0 - 10 (a pattern I'm going to repeat a lot).
<<set $Resolve = 5>>
Theoretically we could test Resolve the same way we do Pace, in an encounter/ challenge and have it modify that challenge. Whatever works for you - I'll be honest that Resolve is the single idea I like the most but also the one I have the least idea how to use well.
DEFINING CHALLENGES
Every challenge is going to have a chance of success based on the character. There are 6 things that are going to combine to make that chance:
1) Base Difficulty - this is the starting point, we'll say 50 for something Easy, 35 for something Hard and 20 for something Incredible. Theoretically we could also use Pace as a part of the base difficulty, but that seems kind of weird, so I'd stick to using Pace to change the outcomes, not the difficulties.
2) Resolve - this is the first character element, and it will apply everywhere/when, adding to the Base Difficulty.
3) Attributes - each character will have 5 attributes, but only one will apply to a single challenge roll. The attributes are: Physical, Emotional, Mental, Spiritual, and Relational (I'll discuss all this stuff later in more detail).
4) Trait - each attribute has 3 traits, and only one will be added to the total. For example, the Physical attribute has the traits of Power, Speed and Toughness. So breaking down a door might be Physical + Power.
5) Skill - like attributes there are 5 skills and only one for each roll. The skills are Exploring, Investigating, Manipulating, Talking and Fighting. Exploring covers everything related to movement and travel and dealing with the environment - so our door-breaking example might use Physical +Power +Exploring.
6) Focus - each skill has multiple specializations (focus/foci) and again one will apply. The Exploring foci are: Movement, Stealth, and Bypass. Which means our full door-breaking challenge, against a simple wooden door, might be: Easy +Resolve +Physical +Power +Exploring +Bypass.
Now, every character element goes from 0 to 10, so combining the 5 character elements with the base difficulty gives anywhere from a 20 to 100 percent chance of success. I think 20 is fine at the low end, it means the player will always have some sort of chance, but your mileage may vary - so adjust the numbers (in general or for a specific challenge) as needed.
CHARACTERS (poor fools, they make us laugh, ha ha ha ha ha :)
So let's actually define a character, maybe even make one. We have 3 core parts that every character has:
Resolve - our main element, and it starts at 5 for everybody.
Attributes and Traits - attributes deal with the basic nature of the character herself. Here are the attributes and their traits in more detail...
1) Physical - everything to do with the body
Power: strength, raw force, He-Man and She-Ra stuff :)
Speed: quickness, agility, nimbleness, deftness
Toughness: endurance, resistance (of physical issues)
2) Emotional - everything to do with feelings
Passion: intensity, drive, related to Resolve but not quite the same (while Resolve is global, Passion is local; the character has something they feel passionate about, which you could explicitly define somewhere (like in an Array) or just imply from the character's background or setting).
Empathy: awareness of how others are feeling (and maybe how to manipulate or take advantage of that?)
Control: the ability to use one's emotions instead of being used by them, to resist outside emotional influence
3) Mental - the mind is mostly about truth
Reasoning: the ability to 'fill in' incomplete information, test intuitions, 'think outside the box.'
Memory: the ability to pull from past experiences (of things one's done and seen and heard).
Fortitude: your ability to resist and adapt to emotional shocks
4) Spiritual - emotions are brought about by the moment, but the spirit comes from decisions made in the past and a desired future outcome or actions.
Conviction: the measure of how "right" you think your world-view is (so this could be applied to some actions/ choices but not others, depending on how they matched up to the character's internal outlook)
Sensitivity: read people and places/ events. This lets you read someone's inner nature - combined with Insight it gives you a complete blueprint of another person socailly (what they want and how they're trying to get it).
Forgiveness: how well you can adapt to lapses of judgment and failures, both yours and others
5) Relational - everything involved in dealing with other people.
Charisma: impose your will on others, force of personality
Insight: see what people are trying to do (socially); this helps you read someone's actions (are they lying to you, trying to appeal to an emotion, hiding something...)
Aplomb: ability to deal with difficult people or awkward situations
Now, while the Attributes and Traits usually go together, they don't have to. You could create a scenario like: shooting a gun is Physical + Speed, but closing your eyes and hitting the same target (without moving) is Physical + Memory (for your "muscle memory").
Exactly how do you combine these for different actions? I have no idea. This is just a list I knocked out to have something that seemed comprehensive, I really don't know how to implement everything here; so change these as you need (and also drop or ignore any that you don't need for your story).
Skills and Foci - like attributes and traits there are 5 skills and each has 3 foci. While Attributes and Traits are innate abilities that are developed by experience, Skills are about what the character has trained in and been exposed to doing...
1) Exploring - everything involved in moving through the world, getting from one place to another despite any obstacles in the way.
Movement: everything about travel, from acrobatics to survival
Stealth: not being seen is usually involves working with or blending into your environment (white is stealthy in the arctic, not so in the jungle)
Bypass: how to get over, around and through obstacles in the environment; from lock-picking (an urban obstacle) to climbing
2) Investigating - everything dealing with gathering and applying information (in particular dealing with missing information)
Forensics: re-create the past by looking at the present
Prediction: determine the future by looking at the present
Discovery: fill in missing pieces of the present
3) Manipulating - everything dealing with objects or things (and people as things, like 'surgery' is dealing with the human body instead of the human person)
Technician: how to use and repair objects
Craftsman: how to make and design objects
Hacker: how to use objects in ways they were not meant to be used
4) Talking - everything involved in dealing with other people/ sentient creatures
Barter: give something for something, from diplomacy (you scratch my back I'll scratch yours) to bribery
Exploit: take advantage of something about the other person, from a lie (take adv of fear, for example) to promising something you're not going to give (or, taking advantage of something they want)
Oratory: try to make the other person feel something different or change a postion they have on something (alter their internal landscape)
5) Fighting
Unarmed: fighting with only your body. natural weapons
Melee: fighting at close range
Ranged: fighting at a distance
An Idea: These are all meant to be very broad, so they can be as simple as possible to describe while also being useful distinctions (hopefully). If you need more detail, add an Array of some specific elements. For example, Exploring could have it's score, and also an Environments = [urban, forest] array to specify where that score applies at (use 1/2 or even 0 for outside environments).
Now, the core 3 are Resolve, Attributes and Skills.
Resolve always starts at 5 (unless you want to mess with that for some reason...).
Each character starts with the following 5 scores, one set for Attributes and one set for Skills, and the player decides how to allocate them: 7, 5, 5, 3, 3
So, a player who wants to make a really strong fighter might do the following-
Attributes: Phys-7 Emot-5 Ment-5 Spir-3 Rltn-3
Skills: Explr-5 Invest-3 Manip-5 Talk-3 Fight-7
A more detective-like character might be:
Attributes: Phys-3 Emot-5 Ment-7 Spir-3 Rltn-5
Skills: Explr-5 Invest-7 Manip-3 Talk-5 Fight-3
An Idea: you can also use descriptive names instead of numbers if you want:
Weak (wk) 0-2
Competent (co) 3-4
Strong (st) 5-6
Exceptional (ex) 7-8
Legendary (lg) 9-10
The core 3 are "core" because everyone has the same ones and the same pool of starting scores. The 3 Secondary elements are more flexible.
Resources - every character has the same starting Resources...
Health: what shape your body is in
Assets: what shape your finances are in, in whatever terms you want (so could be "gold pieces" or "favors owed" or "cows owned" or even a combination of them all)
Stability: what shape your mind is in, sanity basically (though the Cuthulu games worked over that stat so much)
Integrity: what shape your soul is in, in terms of how much you've lived your ideals
Reputation: what shape you fame/ infamy is in, how other people see you
Every Resource starts at 20.
Advantages - are special abilities that use the Traits and Foci. Each player can make up their own advantages, buying points in a Trait or Focus and naming the resulting ability whatever seems appropriate. Or, if you want to do some extra work, you can make a list of your own the player can choose from. No trait or focus can go above 10, period. I'd also say that no starting trait/focus can go above 6, but I'm not sure about that. In fact, these numbers are all being made up as I type them - so you might want to play-test them yourself and see what you think (if you do, tell me).
I've been debating weather Advantages (or, you could call them Abilities or Powers, whatever fits) should be limited to Traits and Focus, or if they could increase Attributes and Skills as well. If you want them to increase anything, I'd say that Attributes and Skills cost twice as much (or x3), since they (in theory) apply to more situations.
Costs - Advantages are not free, the totals of all the points gained has to be off-set by points lost. And that cost is paid out of the character's Resources. No Resource can go below 1 - there needs to be something bad for low resources, which I haven't worked out yet. Maybe 5 would be a better minimum number, or 3?? Maybe starting at 20 is too high, 10 or 15 could be better?? Again, making up numbers as I go along.
So let's build our fighter from above:
Attributes:
Physical-7 Emotional-5 Mental-5 Spiritual-3 Relational-3
Skills:
Exploring-5 Investigating-3 Manipulation-5 Talking-3 Fighting-7
Advantages:
Trained (and Equipped) Soldier (+5 Melee, +5 Ranged)
Veteran of the Front Line (+5 Power, +5 Toughness)
Costs:
Has Done Questionable Things (-5 Integrity, -5 Reputation)
The Army Doesn't Pay Very Well (-5 Assets)
The Old Wound (-5 Health)
Resources:
Health-15 Assets-15 Stability-20 Integrity-15 Reputation-15
And the completed detective:
Attributes:
Physical-3 Emotional-5 Mental-7 Spiritual-3 Relational-5
Skills:
Exploring-5 Investigating-7 Manipulation-3 Talking-5 Fighting-3
Advantages:
Commune With Spirits (+3 Forensics, +3 Prediction)
Hex Magick (+5 Physical)[note: his magic works by decreasing it's target, which in this case mechanically means increasing his own stats, uses the optional rule above, at x2 cost]
Outlaw Scholar (+2 Stealth, +2 Bypass)
Costs:
Indoors Too Much, Reading By Bad Light (-5 Health)
Seen Things Man Was Not Meant To See (-5 Stability)
Shunned As A Sorcerer (-5 Reputation)
"Leased" His Soul (-5 Integrity)
Resources:
Health-15 Assets-20 Stability-15 Integrity-15 Reputation-15
And there we have a simple, yet hopefully not simplistic, way to create a character. Note, in this system 'equipment' isn't really a thing. Having gear just means a bonus to a Trait or Focus, we're not counting pounds or arrows. This is deliberate, my idea was to make something simple to use as a base. If you want to do equipment I'd just make an Array and have specific challenges/ situations check for an item. So, the locked door could check if you have the key (hey, great place for a +Pace, right?) - presenting the challenges (break, pick, etc) if you don't. Or at the end of every fight you could check if the character has a health potion (Equipment.contains("Health Potion") should work) and let them drink it to regain health.
THAT'S PRETTY MUCH IT, RIGHT?
Yeah. Now you just need a story. What do you want to tie to the Resources?(any members of a religious group or other order that would respond well/poorly to Integrity? Is the character dead or has to resurrect (for cost?) at 0 Health?) How do you want to modify challenges or even the story for Pace?(at Pace 1 does the spy your chasing get away?) Each challenge just needs to be defined by what elements go into it, and then add up those elements that the character has. You can then either keep the numbers secret, give a vague hint as to the odds, or just explicitly state them. It's not the odds so much, it's the consequences. Maybe that long-shot chance gives a nice bonus to Pace or Resolve? Maybe that easy-to-do option will mean losing out on a Secret? The true craftiness in writing Interactive Narratives is to make the stuff before and after the roll/ decision the really interesting and captivating part - the mechanics are meant to be simple so they don't really have a lot of impact by themselves.
So, let's throw out some more variables (to save you a touch of typing), and a widget for how to add the necessary numbers, and we'll be just about ready to start seriously working on a story!
I'm going to assume that only characters have stats, this system was not designed for head-to-head (or "opposed") rolls between two characters. A resisting NPC just means changing the Base Difficulty (so fighting the Guards might be Easy, the Lieutenant Hard and the Captain Incredible). Thus, I'm defining all the player's stats as straight variables/ arrays. If you really want to work out your own PCvNPC system, you could make an Object that holds all these together as properties. So, our character stats:
Let's put the Attributes in an Array...
<<set $Attributes = [0, 0, 0, 0, 0]>>
Then, instead of memorizing index numbers, let's make some constants (typing out the name is longer, but it might be easier to remember and read, whatever works for you)...
<<set $Physical = 0>>
<<set $Emotional = 1>>
<<set $Mental = 2>>
<<set $Spiritual = 3>>
<<set $Relational = 4>>
Using the variables for the indexes just let's you write something like:
$Attribute[$Emotional]
to access that variable, though you could also just use the variable itself. I don't know, I'm just going to throw this out there. (though, if you did want to have multiple characters as Objects this would let you do:)
$Player1.$Attribute[$Emotional]
We'll do the same for Skills...
<<set $Skills = [0, 0, 0, 0, 0]>>
<<set $Exploring = 0>>
<<set $Investigating = 1>>
<<set $Manipulating = 2>>
<<set $Talking = 3>>
<<set $Fighting = 4>>
And Traits...
<<set $Traits = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>>
<<set $Power = 0>>
<<set $Speed = 1>>
<<set $Toughness = 2>>
<<set $Passion = 3>>
<<set $Empathy = 4>>
<<set $Control = 5>>
<<set $Reasoning = 6>>
<<set $Memory = 7>>
<<set $Fortitude = 8>>
<<set $Conviction = 9>>
<<set $Sensitivity = 10>>
<<set $Forgiveness = 11>>
<<set $Charisma = 12>>
<<set $Insight = 13>>
<<set $Aplomb = 14>>
And Foci...
<<set $Focus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>>
<<set $Movement = 0>>
<<set $Stealth = 1>>
<<set $Bypass = 2>>
<<set $Forensics = 3>>
<<set $Prediction = 4>>
<<set $Discovery = 5>>
<<set $Technician = 6>>
<<set $Craftsman = 7>>
<<set $Hacker = 8>>
<<set $Barter = 9>>
<<set $Exploit = 10>>
<<set $Oratory= 11>>
<<set $Unarmed = 12>>
<<set $Melee = 13>>
<<set $Ranged = 14>>
And Resources...
<<set $Resources = [0, 0, 0, 0, 0]>>
<<set $Health = 0>>
<<set $Assets = 1>>
<<set $Stability = 2>>
<<set $Integrity= 3>>
<<set $Reputation = 4>>
Let's make some constants for the Base Difficulty too, that'll make it easy to play with the numbers and see what works...
<<set $Easy = 50>>
<<set $Hard = 35>>
<<set $Incredible = 20>>
Okay, this is not going to be a fully-working widget, just something you can work on (again, I'm throwing this out as I type it, I've got another project that's eating up my code/test time):
/********
** In the stylesheet put:
** .warning {
** color: white;
** background-color: red;
** }
********/
/********
** Using an object allows you to create the parameters for a challenge
** in one place and re-use them later; don't forget to delete the comments :)
********/
<<set ChallengeObject = {
Name: "the short name for the challenge/action",
Description: "a longer description of the challenge/action",
Base: ###, /* ie, $Easy or a custom number */
Attribute: $AttIndex, /* ie, $Physical or $Mental */
Trait: $TraitIndex, /* ie, $Power or $Memory */
Skill: $SkillIndex, /* ie, $Exploring or $Fighting */
Focus: $FocusIndex /* ie, $Stealth or $Melee */
}>>
/********
** <<ChallengeOption ChallengeObject>>
** This widget shows the option to the player
** $args[0] = ChallengeObject - pass the base object
********/
<<widget "ChallengeOption">> <</nobr>>
$args[0].Description
<br> You have <<ChallengeOdds $args[0] print>>
<br> <<linkreplace $args[0].Name>>
<<ChallengeOdds $args[0]>>
/* I added the Pace to the results below, modify that as you want */
<<if $Success == true && $Pace >= 8>>
/* write code for results */
<<elseif $Success == true>>
/* write code for results */
<<elseif $Success == false && $Pace <= 2>>
/* write code for results */
<<elseif $Success == false>>
/* write code for results */
<<else>>
<span class="warning">ERROR: unable to determine results</span>
<</linkreplace>>
<</nobr>> <</widget>>
/********
** <<ChallengeOdds ChallengeObject "print">>
** This widget actually calculates the odds and determins success
** $args[0] = ChallengeObject - pass the base object
** $args[1] = print - widget will print odds in-line but not roll
** for success [optional]
********/
<<widget "ChallengeOdds">> <<nobr>>
<<set _Odds = 0>>
<<set $Success>>
<<set _Odds += $args[0].Base>>
<<set _Odds += $Resolve>>
<<set _Odds += $Attributes[$args[0].Attribute]>>
<<set _Odds += $Traits[$args[0].Trait]>>
<<set _Odds += $Skills[$args[0].Skill]>>
<<set _Odds += $Focus[$args[0].Focus]>>
<<if _Odds < 1 || typeof _Odds !== 'number'>>
<span class="warning">ERROR: unable to determine odds</span>
<</if>>
<<if %args[1] == "print">>
_Odds% of success.
<<else>>
<<set _Roll = random(1, 100)>>
<<if _Roll <= _Odds>>
<<set $Success = true>>
<<else>>
<<set $Success = false>>
<</if>>
<</if>>
<</nobr>> <</widget>>
Let me know if, by some miracle, that works - or if it doesn't, should anybody out there really want to use this system, I'll try to develop it some more.
RANDOM THOUGHTS ON MAKING CHALLENGES
You can always force a Focus. Maybe combat in the castle courtyard begins at long range, so the first challenge is a Fighting+Ranged attack. A character who can make ranged attacks can sit there and trade shots, a melee-only character needs to roll to not get hit, then can close and do melee combat instead.
There's always more than one way to do something. The locked door seems like a possible:
Physical +Speed +Exploring +Bypass to pick the lock. Could also be a:
Physical +Power +Exploring +Bypass to break down the door. Or even a:
Physical +Power +Fighting +Unarmed to break down the door (you could even test for both and give the player the best if you were feeling generous). Having a few different options for each challenge will keep the player from feeling useless.
What's the risk, what's the reward? this is the critical part of a challenge, what's at stake and what can the player get out of it? For some real fun though, mix those up with each way to approach the challenge. For our example above, the locked door. Maybe picking it will increase Pace, while bashing it will reduce Resolve (hey, hitting a door does not sound like fun after all)? How else can you play with different approaches to an obstacle? I firmly believe the more creative you can get here the better your story will be.
OKAY, THERE YOU GO
Yeah, I know it isn't much. Like I said at the beginning, I didn't plan on doing this - it's all been a spur-of-the-moment creation. I realize that you'll have to do plenty of work of your own to turn this into a story, but I hope that something here will help; by offering some inspiration if nothing else.
LICENSING
I'm releasing this system under a Creative Commons Attribution 4.0 International license, so you can use and expand on the system as much as you want, for personal or commercial projects, as long as you include a line like: "Uses the QND-Quest Framework by d100mechanic.blogspot.com" in your project.
Thursday, September 7, 2017
Interactive Narrative - my new favorite term (thanks Wikipedia)
Stumbling across Twine opened up a whole new world for me, something called "Interactive Fiction" in a lot of places, but I think the writer of the Interactive Fiction Wikipedia article said it best in the header; we need to use the term "Interactive Narrative" to cover a broad range of story types.
Interactive Narrative is any story where the reader can influence the outcome or progression of that story. This can cover a wide variety of works, and really I think there are several "interfaces" for IN that are common and worth looking at. All of these can be made in a program like Twine (with varying degrees of difficulty) and in lots of other programs dedicated to one type of IN. Let me introduce you to a few types of IN...
Parser-based Interactive Narrative
The Dreamhold
The first type of Interactive Narrative was likely the book, something like the "Choose Your Own Adventure" books of the '80s (ish). In computer form, IN started as what I call 'Parser-based games.' The Parser is the engine that takes a list of words and updates the game based on what you type. I'm explaining that badly, so here's an example...
As you can see from the screenshots above, the whole interface is just text. Parser-based games can be tricky, they require a lot of commitment from the player. The player has to remember the list of command words, and there is not a map or any kind of convenience feature that many current gamers take for granted. You have to make your own map and keep track of your own details. The Dreamhold above is at least a webpage so you can scroll up to see what's happened before; most original Parser-based games moved on, dropping old text as you traveled the game world. Still, putting in the extra effort can make the game feel much more rewarding when you 'win.'
A few more screenshots, but the game is worth playing (even just for a little while) to get the feel of it if you've never played one of these before...
Hypertext Interactive Narrative
Hallowmoor
From the Parser we go to the hyper-link, that staple of the webpage (and what Twine is great at making). Hypertext INs are a little easier on the player, since the available choices are highlighted as links. This is also just like navigating a webpage, something most people are pretty comfortable with. Also, by adding the technologies of the web you can add color and images and animations to the story - a bit more visually appealing that the wall of text that most Parser-based games are.
Hypertext INs also tend to use more role-playing-like elements. In Hallowmoor you have an inventory page, that includes your special ability to change bodies and the body you are currently inhabiting...
I'm a big fan of games that have some kind of visible score or otherwise track your progress, it helps create that feeling of accomplishment, and pulls at the 'obsessive completionist' bone :)
An interesting Parser/ Hypertext Hybrid:
spondre
I both love and hate "spondre" - it kind of merges the strengths of the Parser and Hypertext by hiding the words you can click on, so you have to put in the extra effort to find everything, but not as much effort as a pure-parser game. It also makes great use of color to add an extra splash of something to the experience. At the same time, since the text is always added to the very bottom of the page, it makes the narrative kind of disjointed, and there are more words that don't do anything than words that do - so it does create that feel of "pixel-bitching" (a term from old point-and-click adventure games, where you had to click the entire screen to find the 1 pixel of a small or hidden item; and I'm dating myself by even using the term :). It's an interesting hybrid, I'm not sure if it's stronger or weaker than it's individual components - but I do give the writer props for making something pretty unique.
Visual Novel Interactive Narrative
My Cup of Coffee: The Trouble with Earl Grey
I think it's safe to say that in the general wold of all games, parsers are pretty old-school, hypertext is kind of niche, but Visual Novels are almost common. I've seen a ton of Japanese games in this style (I'm not sure if they even pioneered it), and I think of the IN types in this post the Visual Novel is the most common.
Basically, a Visual Novel has a main portion of the screen dedicated to a picture of the background and the characters involved (typically not the player character). The story tends to play out in conversation (though there can be all kinds of options and even mini-games).
Being very visual makes the format appealing (the old saw about pictures and thousands of words) and possibly more inviting for some people who are not big on reading a wall of text. But the reliance on conversation as the story interaction is a very tricky one: like with the parser, finding the right thing to say can be frustrating - add to that what the writer writes and interprets one way can be interpreted a different way by the reader. It's hard to describe in general, once you play one of this style of game you'll see it quickly: an NPC (Non-Player Character) will get mad at you for saying something that you didn't think was offensive when you read it, or something similar. Having that small uncertainty in how the game will respond to your conversation choices makes playing the game more difficult (you have to be able to accurately gauge the outcomes of your actions after all, if you can't then you might as well close your eyes and click on anything). And that difficulty is not a good kind to most people, for any game with lots of conversation you can find a comment/ forum/ thread of players venting about unexpected results.
RPG-Screen Interactive Narrative
Explore!
I'm making up this term (the others above are quite common) since it fills a unique role. RPGs are kind of a super-set of Interactive Narrative to me, notable because they typically have a person on both ends of the narrative (the GM creates the story the players interact with - though in some games the players both create the narrative and interact with it), and because they typically have stats or some kinds of numbers that need to be tracked (finally you could say they also tend to rely on some form of randomness in their resolution). Keeping track of the stats and numbers requires a specifically-construced interface....
Explore! is not a completed game, just a proof-of-concept, but it does show the "RPG-Screen" type of Interactive Narrative. The interface is pretty complicated for this style of game, but there are some conventions so a player can usually get used to it pretty quick. With the extra level of detail provided by all the RPG-like stats (attributes, skills, equipment, etc) on top of the visual interface (seeing other characters, locations and maps) there is a lot going on - and my hat's off to the writer of Explore! because I honestly didn't think Twine could handle something this complex!
Another Hybrid, Text and Graphics
Twine RPG dot HTML
Another hybrid, this time using text-as-art (ahh... I'm old enough to remember when ASCII art like this was common, and it can be surprisingly beautiful when done right). This one has a little of everything above, and it's not a very detailed (or long) game, and I'm not sure 'game' entirely applies to it; but it's another creative hybrid of mainstream styles.
So there's an overview of some common types of Interactive Narrative, and I'll try to remember to use that term from now on instead of "interactive fiction" since I think IN is a better descriptor for the genera overall. A good place to find more stories like this is itch.io, here's a link to games tagged with Interactive Fiction.
I've put this all together because of my upcoming project, The Open2 Engine. It's going to basically be me trying to make my own Twine, so I was wondering what all Twine could be used for. These stories are all examples of what Twine's capable of (though the Visual Novel and RPG styles would be a bit harder to pull off) and so these are things that I'd like to implement (someday, of course, one feature at a time :). Also, I like having a set of terminology for things, there's an old Chinese proverb that says "the root of all wisdom is learning to call things by their proper name" (at least, that's what I read somewhere). So this is for me to organize my thinking, and I believed it might be interesting for any readers who are as new to the Interactive Narrative structure as I am.
Know any good IN stories (or make your own)? Drop me a comment below, I'd love to check it out :)
Interactive Narrative is any story where the reader can influence the outcome or progression of that story. This can cover a wide variety of works, and really I think there are several "interfaces" for IN that are common and worth looking at. All of these can be made in a program like Twine (with varying degrees of difficulty) and in lots of other programs dedicated to one type of IN. Let me introduce you to a few types of IN...
Parser-based Interactive Narrative
The Dreamhold
The first type of Interactive Narrative was likely the book, something like the "Choose Your Own Adventure" books of the '80s (ish). In computer form, IN started as what I call 'Parser-based games.' The Parser is the engine that takes a list of words and updates the game based on what you type. I'm explaining that badly, so here's an example...
As you can see from the screenshots above, the whole interface is just text. Parser-based games can be tricky, they require a lot of commitment from the player. The player has to remember the list of command words, and there is not a map or any kind of convenience feature that many current gamers take for granted. You have to make your own map and keep track of your own details. The Dreamhold above is at least a webpage so you can scroll up to see what's happened before; most original Parser-based games moved on, dropping old text as you traveled the game world. Still, putting in the extra effort can make the game feel much more rewarding when you 'win.'
A few more screenshots, but the game is worth playing (even just for a little while) to get the feel of it if you've never played one of these before...
Hypertext Interactive Narrative
Hallowmoor
From the Parser we go to the hyper-link, that staple of the webpage (and what Twine is great at making). Hypertext INs are a little easier on the player, since the available choices are highlighted as links. This is also just like navigating a webpage, something most people are pretty comfortable with. Also, by adding the technologies of the web you can add color and images and animations to the story - a bit more visually appealing that the wall of text that most Parser-based games are.
Hypertext INs also tend to use more role-playing-like elements. In Hallowmoor you have an inventory page, that includes your special ability to change bodies and the body you are currently inhabiting...
I'm a big fan of games that have some kind of visible score or otherwise track your progress, it helps create that feeling of accomplishment, and pulls at the 'obsessive completionist' bone :)
An interesting Parser/ Hypertext Hybrid:
spondre
I both love and hate "spondre" - it kind of merges the strengths of the Parser and Hypertext by hiding the words you can click on, so you have to put in the extra effort to find everything, but not as much effort as a pure-parser game. It also makes great use of color to add an extra splash of something to the experience. At the same time, since the text is always added to the very bottom of the page, it makes the narrative kind of disjointed, and there are more words that don't do anything than words that do - so it does create that feel of "pixel-bitching" (a term from old point-and-click adventure games, where you had to click the entire screen to find the 1 pixel of a small or hidden item; and I'm dating myself by even using the term :). It's an interesting hybrid, I'm not sure if it's stronger or weaker than it's individual components - but I do give the writer props for making something pretty unique.
Visual Novel Interactive Narrative
My Cup of Coffee: The Trouble with Earl Grey
I think it's safe to say that in the general wold of all games, parsers are pretty old-school, hypertext is kind of niche, but Visual Novels are almost common. I've seen a ton of Japanese games in this style (I'm not sure if they even pioneered it), and I think of the IN types in this post the Visual Novel is the most common.
Basically, a Visual Novel has a main portion of the screen dedicated to a picture of the background and the characters involved (typically not the player character). The story tends to play out in conversation (though there can be all kinds of options and even mini-games).
Being very visual makes the format appealing (the old saw about pictures and thousands of words) and possibly more inviting for some people who are not big on reading a wall of text. But the reliance on conversation as the story interaction is a very tricky one: like with the parser, finding the right thing to say can be frustrating - add to that what the writer writes and interprets one way can be interpreted a different way by the reader. It's hard to describe in general, once you play one of this style of game you'll see it quickly: an NPC (Non-Player Character) will get mad at you for saying something that you didn't think was offensive when you read it, or something similar. Having that small uncertainty in how the game will respond to your conversation choices makes playing the game more difficult (you have to be able to accurately gauge the outcomes of your actions after all, if you can't then you might as well close your eyes and click on anything). And that difficulty is not a good kind to most people, for any game with lots of conversation you can find a comment/ forum/ thread of players venting about unexpected results.
RPG-Screen Interactive Narrative
Explore!
I'm making up this term (the others above are quite common) since it fills a unique role. RPGs are kind of a super-set of Interactive Narrative to me, notable because they typically have a person on both ends of the narrative (the GM creates the story the players interact with - though in some games the players both create the narrative and interact with it), and because they typically have stats or some kinds of numbers that need to be tracked (finally you could say they also tend to rely on some form of randomness in their resolution). Keeping track of the stats and numbers requires a specifically-construced interface....
Explore! is not a completed game, just a proof-of-concept, but it does show the "RPG-Screen" type of Interactive Narrative. The interface is pretty complicated for this style of game, but there are some conventions so a player can usually get used to it pretty quick. With the extra level of detail provided by all the RPG-like stats (attributes, skills, equipment, etc) on top of the visual interface (seeing other characters, locations and maps) there is a lot going on - and my hat's off to the writer of Explore! because I honestly didn't think Twine could handle something this complex!
Another Hybrid, Text and Graphics
Twine RPG dot HTML
Another hybrid, this time using text-as-art (ahh... I'm old enough to remember when ASCII art like this was common, and it can be surprisingly beautiful when done right). This one has a little of everything above, and it's not a very detailed (or long) game, and I'm not sure 'game' entirely applies to it; but it's another creative hybrid of mainstream styles.
So there's an overview of some common types of Interactive Narrative, and I'll try to remember to use that term from now on instead of "interactive fiction" since I think IN is a better descriptor for the genera overall. A good place to find more stories like this is itch.io, here's a link to games tagged with Interactive Fiction.
I've put this all together because of my upcoming project, The Open2 Engine. It's going to basically be me trying to make my own Twine, so I was wondering what all Twine could be used for. These stories are all examples of what Twine's capable of (though the Visual Novel and RPG styles would be a bit harder to pull off) and so these are things that I'd like to implement (someday, of course, one feature at a time :). Also, I like having a set of terminology for things, there's an old Chinese proverb that says "the root of all wisdom is learning to call things by their proper name" (at least, that's what I read somewhere). So this is for me to organize my thinking, and I believed it might be interesting for any readers who are as new to the Interactive Narrative structure as I am.
Know any good IN stories (or make your own)? Drop me a comment below, I'd love to check it out :)
Subscribe to:
Posts (Atom)























































