Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Scaffold 22 Released - twine-based RPG

I posted this project way back when in the 1.41 days but figured, since I'm releasing version 1.0 today, I'd post again. It's taken two years to turn this concept from a simple Twine click adventure with no formatting or visual features into a full fledged RPG with something close to professional production quality.

scaffold.jpg
Explore the cyberpunk-inspired space station Scaffold 22 as you take on the role of Vine, a former mercenary turned abomination hunter, on a mission to uncover the truth behind an insidious conspiracy. Hunt down vile abominations, sneak past security teams to hack into corporate systems, or forgo violence in search of diplomatic solutions – and potential allies to help you survive a futuristic world rife with corruption, political intrigue, abominable taint, and ideological conflict.

Free to play cyberpunk RPG available at: http://rage-productions.com/

Key Features:
- Fully illustrated cyberpunk-inspired world
- Branching narrative with multiple outcomes
- 6-10 hours of core gameplay
- Numerous combat and noncombat options
- Intuitive turn-based combat system
- Extensive gear, upgrade, and skill options
- browser-based and available on any device
- free to play

For more information refer to the official site or...
IndieDB: link
YouTube: link (fair warning: I ramble a LOT on this channel)
Facebook: link

Any and all feedback much appreciated.
«1

Comments

  • This is incredible. I had no idea this was achievable in Twine, but I think you've really pushed the boundaries. The quality and depth of Scaffold 22 is inspiring. I look forward to diving in. How can I spread the word about the game?
  • edited October 2016
    Thank you! That's both very kind and encouraging to hear.

    About spreading the word, any recommendation, share, or even mention - within or outside the IF community, online or IRL - is much appreciated. I'm not terribly adept at spreading word. I'll be trying in the weeks to come but I really appreciate any additional help, no matter how small.

    All that said, and this being the twine forums, I should probably point out that Scaffold 22 is by no way a technological masterpiece. It's based on an archaic iteration of Sugarcube and hacked together so haphazardly that MadExile will probably want to strangle me if he ever sees the source. What it does showcase however is what can be done in terms of depth and content. I imagine that, with better project management, a customized header, and a dedicated team, Twine could be pushed to produce far greater results.
  • MoLoLu wrote: »
    […] It's based on an archaic iteration of Sugarcube and hacked together so haphazardly that MadExile will probably want to strangle me if he ever sees the source. […]
    SugarCube (v0.9.6)…
    v0.9.6… v0.9.6… v0.9.6! /rage
  • looks pretty cool
  • v0.9.6… v0.9.6… v0.9.6! /rage

    Exactly my reaction upon realizing playlists weren't a thing back then. May update if I ever find the time to properly implement custom code rather than hack it into the compiled js.
  • edited October 2016
    Very impressive game! If my browser didn't crash at the part where Vine had met an important figure (who offered him a secret job), I would have continued playing this game the whole evening! It's so good!

    You made this with Twine 2.x? How did you actually "hack" Sugarcube?
  • Thanks you, Out of curiosity, do you know if the browser crash was game-related? If yes I'll have to look into it - hasn't crashed for me yet.
    You made this with Twine 2.x? How did you actually "hack" Sugarcube?

    Twine 1.4.1 actually. When I started writing, 2.x wasn't out yet and I didn't want to wait for the tech to mature.

    As for sugarcube hacking, if you look at the HTML source, it's fairly obvious where my modifications are as they're written directly into the compiled SC header. There's one noticeable change to the download savefile function that slips variables into the file name (where the player is & ingame time) to better identify saves.

    The other hacks aren't actually changes to sugarcube but I had some issues debugging jscript with Twine-based code as the stack trace would point to some gibberish location in the compiled code.

    To make it easier on myself, I implemented all the utility functions (stuff like timed actions, blink elements, assigning scroll position dynamically, etc) in the header's function declaration. This allows them to operate as though they were header functions native to SC (which they are, in essence).

    The proper way to do this ofc would be to grab the header source and recompile it with the changes in place. But I didn't think that part through until too late and saw no real reason to go back, as the system I have works - it just isn't pretty.
  • At hospital right now. See: userlib.js
  • MoLoLu wrote: »
    Thanks you, Out of curiosity, do you know if the browser crash was game-related? If yes I'll have to look into it - hasn't crashed for me yet.
    I can try to recreate the crash. If I can, then it may be game-related.

    MoLoLu wrote: »
    Twine 1.4.1 actually. When I started writing, 2.x wasn't out yet and I didn't want to wait for the tech to mature. [...]
    As a layman and beginner of Twine 1.4.2 (1.4.1 didn't work for me because of a bug), I think it's really advanced!

    Hopefully I'll be able to make something playable in the future.
  • At hospital right now. See: userlib.js

    Will look into. Wasn't aware that was a thing. Thanks!
    I can try to recreate the crash. [snip] Hopefully I'll be able to make something playable in the future.

    That would be awesome, just in case it is something silly I did. As for making smth playable, if there's one thing I wanted to do with Scaffold, it was demonstrate that some semblance of solid production is indeed possible. I'm hoping that we'll get a lot more impressive content in the months/years to come.
  • edited October 2016
    MoLoLu wrote: »
    At hospital right now. See: userlib.js
    Will look into. Wasn't aware that was a thing. Thanks!
    It's a file named userlib.js that goes into the SugarCube story format directory--the same one as the header.html file. Its contents is inlined into the compiled project. I forget what version it debuted in.
  • edited October 2016
    To Stormtr8per: about your crash, it turns out it is in fact the game. Something related to launching audio streams on mobile browsers and unloaded sound files /groan. I had the same issue and it ran fine on replay.

    Edit: for simplicity, I'm gonna disable audio on mobile until I can pack this up as an app. The headache on mobile is simply not worth the hassle it'll cause. Look for v.1.0.2 which should be live in an hour or so - that should solve all the crashes (and, sadly, kill the sound design but... oh well).
  • MoLoLu wrote: »
    Edit: for simplicity, I'm gonna disable audio on mobile until I can pack this up as an app. The headache on mobile is simply not worth the hassle it'll cause. Look for v.1.0.2 which should be live in an hour or so - that should solve all the crashes (and, sadly, kill the sound design but... oh well).
    Perhaps another reason to look into a later release of the SugarCube major version you're using, for its audio macros, which work around various HTML5 media element issues.

    Although, if it's what I think it may be, I'd suggest two things that you could try.

    1. Guard against misspelled IDs
    Within the playContextSound() function, you should probably be checking to see if audio is null after the call to document.getElementById(), to guard against misspellings of the IDs, which would cause an exception to be thrown.

    2. Guard against the currentTime/metadata SNAFU
    Until somewhat recently, most (all?) browser implementations of the HTML5 media elements would throw an exception upon attempting to set the currentTime of a media element which did not have, at least, its metadata loaded. The following code patches this issue by deferring the modification of currentTime until the metadata has been loaded, if an exception is thrown while attempting to do so normally.

    FIND: (within the playContextSound() function)
    			audio.currentTime = 0;
    
    REPLACE WITH:
    			try {
    				audio.currentTime = 0;
    			}
    			catch (ex) {
    				jQuery(audio)
    					.off('loadedmetadata.playContextSound')
    					.one('loadedmetadata.playContextSound', function () {
    						audio.currentTime = 0;
    					});
    			}
    
  • Sounds a lot like the metadata SNAFU. Will give that a try and test (though I really should update the header).

    Hopefully that will solve the immediate issue. Though that leaves the other half of the issue (slow streaming and audio / performance hiccups) which can only be averted with local media files. Even with a relatively low per-file size I'm pushing things on mobile; at least on PC the hiccups are slight. Will have to experiment a little to see what works best in practice.

    Thanks for the info though. I really should know better than to assume features will work as presumed by now.
  • You could also set the preload attribute on your <audio> tags. You don't seem to be doing that.
  • edited October 2016
    Yup, just noticed that's missing, though the issue runs deeper. Shameful disclosure: after a little more investigation, I conclude the crashes are due to how lazily I set up the audio handler.

    To avoid restarting tracks from the last pause point when moving in and out of areas, I simply mute out the audio, fading in and out as the player changes location. This works great as an effect (giving the illusion that events in the world move on without the player clicking anything) and helps smooth over fade in/out hiccups when the player transitions between zones quickly. However it also means that the browser is technically playing up to 7 tracks at once - sometimes even more due to audio cues popping in. PC can handle this no problem but mobile can't (I presume due to not being able to run that many audio channels, either bc SW or memory limits). Best guess is that after X amount of tracks being stacked up, one of the audio players hangs up and causes the tab to crash. This theory is supported by the fact that the tab won't crash immediately on load but only after a certain amount of audio tracks are piled on (plus, it matches what I've heard about mobile browsers being unable to handle multiple media files running at once).

    I could simulate a similar effect through various means (set playback position, timers, pausing playback, etc) but it wouldn't solve the underlying issue of audio players overlapping and risking critical mass. The game would be prone to crashing at random points in time for no discernible reason, meaning I'd have to limit the number of sounds playing via some sort of conflict detection, which in turn would cut into the game's feel & responsiveness. This becomes a notable issue when you look at how even simple audio cues can stack up in certain circumstances. For example, even with the baseline tracks paused, a typical combat scenario might play:

    - soundtrack loop
    - heartbeat loop
    - stinger
    - click cue
    - reload sound
    - attack sound
    - ally attack
    - enemy attack

    Depending on how quickly the audio loads in, these could all end up playing at once, resulting in a tab crash (or, at best, un-responsiveness). IMO there's no way I'm gonna solve this issue on mobile unless I completely redo the sound design to the point it will harm the PC experience - or just package the game up in an app and hook sound into shell code.


    Packaging seems like the simpler solution.
  • MoLoLu wrote: »
    To Stormtr8per: about your crash, it turns out it is in fact the game. Something related to launching audio streams on mobile browsers and unloaded sound files /groan. I had the same issue and it ran fine on replay.
    Oh, okay! No wonder it crashed the "whole" browser and all of the tabs when I played the game. I thought it was because of my poor internet connection.
  • Wow, this is really impressive !
    I'm going to test it right away.

    Again, congratulations for the good work !
  • Thanks aniki. Hope you enjoy :)

    Sorry for crashing your browser, stormtrooper. I really bungled testing on version 1.0.

    Also, for anyone interested in the game's development and a little insight into how the structure is set up in Twine, I made a video that briefly explains how the basic deign translates into what you see on the screen (skip ahead to ~1:30 for development and ~6:20 for the Twine related stuff):



    If anyone wants me to go into more detail about certain features, I'd be happy to explain. Just be aware my code is not the best. It's intended to be functional and little more.
  • I like how you show the progress that was made on the game over time. As someone who wants to tackle a larger project, it's reassuring that a game like Scaffold 22 had humble beginnings as well. Nice video.
  • Quick note to anyone who's played or is playing Scaffold 22: I released a minor update today (v.1.0.3) which fixes a bunch of typos and little bugs.

    Next step is to tackle the issues with the audio player and a few small gameplay features that don't quite work yet. Can't guarantee audio will in fact work in future versions but there seem to be some workarounds that might prevent some of the worst problems (I'm looking at you, Chrome...).
  • VERY NICE!!!! I like artwork. This is definitely a game I want to play more. Question: Why do you give it away for free?
  • This game is AWESOME!!! I will defiently be playing more of this! How did you make the buttons?!
  • MikeHart wrote: »
    Question: Why do you give it away for free?

    Agreed.
  • edited November 2016
    Sorry for the late reply. Been busy with other things.
    Deadshot wrote: »
    How did you make the buttons?!

    Thanks!

    They're all wrapped in HTML divs with the link (<a/>) element expanded to block so it fills the whole container, allowing me to use Sugarcupe syntax to create slightly more fancy buttons while still using variables and all. If you look at the HTML source (eg Element Inspector) you can see how the CSS is set up.

    Basically, I wrap:
    <div class='buttonclass'>[text|link]]</div>
    
    MikeHart wrote: »
    VERY NICE!!!! I like artwork. This is definitely a game I want to play more. Question: Why do you give it away for free?

    Thank you. Simply put: because I never planned the project to be commercial.

    Long explanation: I wrote the game to help me deal with crippling depression and a rather annoying mental disorder that prevented me from rejoining the workforce. At one point I considered making it a source of income but decided that was disrespecting the original intent. It was central to my healing process and I wanted to share the result with people, not make money off of it.

  • Ok, that is an absolutely respected reason to do it the way you did. Did it help you regarding your health condition?
  • MikeHart wrote: »
    Ok, that is an absolutely respected reason to do it the way you did. Did it help you regarding your health condition?

    Indeed. It gave me smth to focus on while I struggled to find ground and kept me focused, preventing me from drifting into unhealth(ier) behavior. Presently looking to get back into the workforce, which was unthinkable when this project started. Given, other things helped too, but seeing I could succeed with patience and perseverence despite all was extremely motivational. Not sure I'd have made it without the project to get up for every day.
  • MoLoLu wrote: »
    MikeHart wrote: »
    Ok, that is an absolutely respected reason to do it the way you did. Did it help you regarding your health condition?

    Indeed. It gave me smth to focus on while I struggled to find ground and kept me focused, preventing me from drifting into unhealth(ier) behavior. Presently looking to get back into the workforce, which was unthinkable when this project started. Given, other things helped too, but seeing I could succeed with patience and perseverence despite all was extremely motivational. Not sure I'd have made it without the project to get up for every day.

    That's good to hear.
  • scaffold.jpg
    Quick update for anyone who hasn't been following on IndieDB, I've sadly had to put Scaffold 22 on indefinite hold despite wanting to add a few more things. Reasons are largely due to time and financial constraints, though I am hoping to return to the project in some form - someday.

    For those who enjoyed the game and setting, I do have some good news. As of today the distant prequel and narrative inspiration to Scaffold 22 - a novel I wrote called The Municipality - is available on Kindle. Not quite as good as the mobile app I was hoping for but it's the next best I could do on short notice.

    More info The Municipality at: RAGE-Productions.com
    Direct Amazon Link: here
    Video regarding current situation: Prequel & On Hold
  • Good luck with your book.
Sign In or Register to comment.