I’m going through the BART turnstile and look up — and who is it but Mattias Lehman, an old friend who recently left Riot games to work as an activist in the Sunrise Movement. We talk and catch up. He’s amazing and working to directly make the world better (did I mention he has a Patreon?).
I look down. I see my light-blue button-up collared shirt as I commute into San Fransisco for my web development day job. I haven’t done any serious work on my projects for several months, ever since the grant didn’t go through. I feel like I’ve gotten complacent.
I’ve had some mental health challenges this year, and taking it slow has been good for me (especially after trying to cope by throwing myself into a pit of the aforementioned grant-writing work). But there was something about hearing what he’s done that made me feel like it was time to kick back into gear.
So I take a look at Crescent Loom. How does it make me feel? Overwhelmed. There’s so much it’s trying to do. My abilities have already been pushed to their limits. There’s two solutions for this: get more resources, or scale back. The grant was an attempt to get help, and didn’t work.
One option left: cut down the scope. Significantly.
Action Potential Explorer
What’s the smallest thing CL could be to start living out in the world? I listed the things it illustrates well: the propagation of action potentials, contralateral movement, how ion channels produce a neuron’s behavior, temporal vs spatial summation, how small networks of neurons are enough to make an animal move….
A common theme when I’ve talked to biology teachers is that teaching action potentials is hard. Students memorize its shape, maybe something about ion channels opening and closing, and then move on with their lives. I decided that this area was the best overlap between what CL illustrates and what’s needed in the world.
That very night, I hashed out a design for the Crescent Loom Action Potential Explorer. It cuts out most of the game; no creature creation, no editing of brains. Just a pre-made creature that you can poke and prod at, including the ability to toggle ion channels on and off to illustrate what they do. And instead of an in-game tutorial (which takes a lot of dev work), I’m going to guide students/teachers through the simulation using a website-based guidebook they can have open in another window/tab.
My goal is to finish this up as something to live-in-the-world by the end of the year.
However! Because life doesn’t care whether your busy for when it throws you curveballs, right in the middle of this redesign, I had a very special experience while attending the XOXO conference in Portland.
It was groundbreaking enough for me that I dropped everything to make a short narrative game about what happened. I finished it just in time for Coming Out Day this month — instead of saying more, I am ABSOLUTELY DELIGHTED to now share it with you:
It takes about 20 minutes, works in-browser, and headphones are recommended.
The grant-folk didn’t go for it, not even close. The submission got a score of 65 out of 100. I have two reactions:
This is disappointing, but par for the course. Getting grants is hard, and it’s normal to miss a number of swings. They gave fairly good feedback, and we actually did pretty well for where I’m coming from (outside of an institution, no previously awarded grants). We learned a lot by going through the process. I can rest, prepare, and try again next year having addressed their concerns.
I also was able to talk to some teachers and have ideas for a micro version of the game that could be used in classrooms almost as-is, so this will give us time to get some kind of minimum viable product living out there in the world.
Skin in the game
Not at all because I was sad and needed to google animals, I did some work going back to the game’s roots for the creature’s designs: nudibranches (and squid)!
So cute! So squishy! CL’s creatures don’t look much like them, though. It’d be cool if things could be more… squishy? I had a system at one point to have deformable skin. Playing around with that again:
Some errors: that weird popping-out of the skin when it bends far. Math is hard. If you happen to know about polygon convex hulls (and related things), I could probably use a hand?
I’m also taking a look at heating up two other games that have been on the backburner for a while now. I’m partnering with an artist to give my first game, Starship Rubicon, a facelift.
New (VERY VERY work-in-progress):
IMO my original art never really popped, so it’s super exciting to see it decked out to be a lot more colorful — it’ll be an interesting design challenge to keep that color while also preserving visual clarity amid the explosions.
Second, I have a geology board game that’s been begging to have its rules solidified enough that I don’t make up new ones every time we play through it.
It’ll probably need a kickstarter once it gets solidified, but seeing as I’ve never made a board game before, this is another one I’m gonna need to find some collaborators for.
🌈 Friendship is magic 🌈
Woof, the last wicklog was in January? I really let these slip. However! I have been writing. A lot. Out of the avenues for getting funding, I think that grant-writing is the best choice for CL. Grants are hefty, don’t come with many strings, and usually have for-public-good goals that line up well with CL’s educational aspects.
I wrote a grant about a year ago to get a sense of the process. As expected, I didn’t get it. They told me that they loved the idea, but I needed a business plan. Which was fair —I didn’t really have a plan beyond “I dunno, sell it to people, I guess?”.
So I’ve spent the intervening year talking with folks working in edu games get a sense of what works business-wise (and to make friends!). Cold-calling, setting up meetings, and going to socials was NOT AN EASY THING for me, an introvert who once bussed across town for a meetup, saw that it was in a ~bar~, and got so scared that I turned around and got on the bus going back. Emailing a handful of people to ask for something is usually a full day’s work for me.
So I’m hecka proud of myself and thankful to the folks I worked with, because we pulled all this together into a finished Grant Proposal #2: Operation: Get Crescent Loom Into Classrooms:
~ take a look! ~
(It was an SBIR application to the Department of Education, for reference)
These fifteen pages (plus a stack of supporting materials, e.g. budget) are a culmination of the last year’s worth of work, including a business plan that I think will be able to thread the needle between profitability and making it available to low-resource organizations.
I think we have a solid shot, but these grants are very competitive (I think they select ~12 out of 500 applications). Even if they don’t go for this one, I now have a good footing for future shots.
They’ll let us know about the grant on June 20th, so I have a few months to do some free-form tooling around with the design. I want to 1) make it run faster so there can be more critters on the screen, and 2) experiment with different layouts to make the initial contact with the brain stuff more intuitive.
There’s always a balance between what to simulate and what to simplify. I’ve taken the tactic of initially simulating as much as I could and then paring away what is unnecessary. I think simulated action potentials traveling down axons is now on that cutting block.
It used to be that you could see a pulse of activity travel along an axon, like so:
But setting up simulation values such that they worked for both the very-fast, very-large conductances of an action potential AND the slower dynamics of a cell body was difficult; it forced me to average things out so action potentials were slow enough that the simulation time-step could catch them. It also added a bunch of math overhead to calculated current flowing through these long wires.
So I asked myself: what does simulating them add? I think it’s really cool to be able to see the chain-reaction of a pulse going down the length of an axon, but functionally, is it worth it to do 20X more work to get “A activates B” to be a little more fancy? By treating it like a single unit, I cut out a ton of overhead and can get them to fire at slightly-more-realistic rates:
I have a few reservations:
1) I like how the original animation looked a LOT more.
2) There is an intuition that players have that pulses take longer to travel down longer connections, which is actually correct and is lost in this new simplification.
3) You won’t be able to stimulate any part of an axon anymore and see a pulse travel outwards from that, which I thought was the coolest way to understand what axons were actually doing.
But I’m pretty sure I can cheat most of these back in with a more-simple hard-coded mechanisms. It’s not as elegant, but pursuing structural elegance over usability is one of the deadly programmer sins.
As far as different layouts go, I’ve never been happy with how separated the brain is from the body. It’s a hold-over from the very earliest designs of the prototype, but I haven’t found a better solution yet. But I would love it if instead of working on the brain floating off next to the creature, you could zoom into the creature and work there. Something like this:
There’s a lot of challenges of this design (how do you see what’s going on in both the creature and brain at the same time?), but I’ll play around with it to see how it feels.
I wanted to get a better picture of where I was in my process, so I made a timeline of CL’s development thus far:
I’m a little surprised at how little time over the last two years I’ve actually spent working on it full-time. A bit after the kickstarter, a bit at Stugan, but wrangling with business stuff and writing and day jobbing has meant that it’s been only a bit under 50%, overall. Hopefully getting more resources with the grant will help stabilize things?
Happy new year! It’s been a good start for me, especially compared to the emotional wasteland of the last few months. I’ve started seeing a therapist, am surrounded by housemates who care about me, started a really really cool project (at the end of this post), and am putting together the pieces for another grant attempt.
I want to start out going through some technical stuff in this first section — feel free to skip to the end if you just want a sneak peek at what’ll be coming down the pipe this year.
Taking a break from development has hardly felt like a break. I attended a handful of conferences (XOXO, Intentional Play, and Society for Neuroscience) and life always finds a way to fill any empty space.
- Version 0.6.0 released, with all the work I did in Sweden.
- Prepping for another crack at writing a SBIR grant for the new year. (???)
- Talking with folks about using CL in some real-world applications.
Back in the states. Stugan was great, friendship is the real treasure, etc.
Reflecting, one of the things I heard the most from visiting industry professionals & Stugan alumni was: “I came here thinking I’d finish my game in a year or so. It actually ended up taking 4 more years // I’m still working on it.”
I don’t want to be working on CL forever. I have other projects/games I’m excited to get to in my life. So here’s setting an intentional & somewhat arbitrary goal: I want to wrap up the main development in the next three years (by the end of 2021). That’s not a release date announcement, but I want to come up with a realistic plan to get that to happen. If at that point there’s no end in sight, I will re-evaluate if I want to just move onto another project.
First off, at my current rate, I’m not going to meet that. I have a part-time web dev job which is necessary for paying my bills & building a financial buffer back up, but it heavily cuts into the hours per week I can develop CL. Also, it’s high time I professionally brought other people onto the project. It’s in dire need of an art & sound pass, and Stugan showed me how important it is to even just have one other person to discuss & design with.
So it looks like I need to secure enough funding to support / contract 1-5 people. This is outside the scope of Kickstarter; looking at my other options, it looks like need to either find a publisher or get a grant. Turning my attention towards fund-raising once again means that progress on the game itself is gonna grind to a halt, but the collaboration it enables later will more than make up for it in the long-term.
Grants are nice because you don’t have to pay the money back, and Crescent Loom is an *excellent* fit for the handful of science education ones out there, so that’s where I’m going to put my focus. I’ll be putting together a calendar of grants & budgets & stuff for the next update.
Plus, I’ve been working on this thing non-stop for two years. It’s time to take a bit of a break.
I’ve talked in the past about having a “design pillar” of accessibility, but realized at Stugan I hadn’t actually fleshed out what that meant and what other pillars I might have. Here’s my first draft, with corresponding questions that I should ask about any new feature or design decision:
Direction Through Subtraction
I finished a first draft of an expanded tutorial at Stugan; instead of the old single level which led you by the nose through making a creature in under four minutes using voiceover and flashing buttons…
… the new tutorial teases out each individual concept into its own short challenge. And instead of flashing buttons to grab attention, it uses *direction through subtraction*; I simply remove all elements of the game except for the one I want to teach, and let the player figure it out through natural exploration.
For example, let’s take a look at the very first level. It opens up with no UI; just a floating egg in the water
Pressing any key (or clicking on the egg, as most people do) will hatch the creature. Oh, exciting! But it doesn’t seem to do anything after that?
So people move the mouse around the screen, clicking. They maybe experimentally press a few keys on the keyboard. Eventually, a they discover (helped by a tooltip on mouseover) that they can press the glowing center of the creature to open up the “brain”.
Whoa, what’s all this, then? People would get distracted moving the two muscle neurons around, so I disabled the ability to do that this level. All that’s left is this “stimulator” tool. So you pick it up and start trying to zap various things on the screen. Since zapping the creature directly doesn’t do anything, you eventually try those two red diamonds in the brain.
It twitched! Ohhhh, the muscle neurons control the muscles! And the other one makes it turn the other way… I can get it to swim!
The level is very short, and they reach the end quickly. This is important; the game’s not about manually stimulating muscles to navigate a large map. They’ve already had their moment of insight, so it’s time to move onto the next thing.
Different People Want Different Things
Direction through subtraction is good because encourages exploration and discovery. However, it can be scary. “Am I doing the right thing?” is a real fear for many people. Referring back to design pillars #1 and #2, I’m going to need to find ways to encourage and prop up these players.
A trend in modern design is giving players control over what sort of experience they’re looking for by letting them select from different “play modes” at the start of a game. Here’s a good example from Subnautica:
This evolved from the easy / medium / hard difficulty sliders, which had the problem of not giving any sort of context and feeling infantilizing to non-hardcore gamers. This design makes it clear what each one means & naming them in a way that validates the experience of different play-styles.
For Crescent Loom, where the difficulty comes not from resource limitations but from the understanding of the mechanics, these options could take the form of teaching styles. Does the player want to discover the mechanics on their own through trial-and-error, or be guided step-by-step through the process? I haven’t seen other learning games do this before, so it would be amazing to consult with an educational specialist here.
Till next time!
Twenty game developers in the Swedish woods for six weeks. How has that been going, huh? Turns out a lot can get done in a focused, community-supported environment.
People are helping me!
Right off the bat, I got some excellent visual design advice from Wren and Isi to make the creatures look softer & stand out by darkening the background and environment. The dreamlike underwater motion of the Loominals is the game’s strongest visual selling point; an easy way to emphasize that is to make them really pop in comparison to their environment.
Phil introduced me to this thing called a graphics profiler, which watches your game and keeps track of how long different parts of it take to draw. You can use it to figure out what parts of your draw function take a long time to draw & try to optimize accordingly. It’s a perfect example of an amazing tool that I just didn’t know about because of my lack of professional training, and how workshops like Stugan can help devs just by putting them in the same room.
Shader for edit mode:
Wren suggested that I could fix the problem of players forgetting whether they were in play or edit mode (e.g. “why isn’t it moving?”) by visually differentiating them; have some kind of full-screen style change that makes it obvious if things are paused. Here’s an example where they do that in Transistor:
My first design was a blueprint-inspired aesthetic, like so:
But Phil pointed out that this might end up being too jarring a transition from the normal colors / scene, and recommended just using a strong blur effect, like so:
If I did it right, I could bring in the blur like a microscope was being adjusted, which would be an elegant way to imply the kind of technology being used in the narrative. However, getting this kind of effect requires using graphics shaders — something that is quite technical. I’ve never used them before, and had a lot of fear about dipping my toes in.
Phil and Adam came again to my rescue, explained the basics of shaders, and helped me troubleshoot things until they worked. I still need to work on the transition in to/out of the blur, but here it is in full glorious motion:
Pokemon-style ending sequence:
For level design, I decided the simplest task to give players would be the classic “reach this point” objective that games have perfected over the last few decades. The basic level in CL will be constructing a creature, navigating an environment, and reaching a goal point.
But what is their motivation for doing so, and what happens when they get there? I asked myself my favorite question: “what is the feeling I’m trying to create?”:
> competency / progression: the player is figuring the game out, successfully mastering the mechanics
> safety: the creature in question is safe, we helped rescue it
The design for the former (progression) isn’t difficult: games have a rich tradition of “level complete” screens filled with stars, ratings, and literal trumpets to celebrate success. I can just throw one of these up and for the most part people will know exactly what it means and be emotionally cued appropriately.
For the latter (safety), I was reminded of the capture animations for pokemon, e.g. :
Here’s the first test & in-game version, which I was pretty happy with:
But few designs survive contact with players: people thought it was some kind of laser disintegration ray!
I wasn’t sure what to do until Sara suggested making the ray expand and clearly “gulp” it down to a single point before pulling it back in. Along with some shininess, this made it so so much better:
I want to say, again, how amazing an experience it is here. I see people helping each other almost every day— Photoshop techniques, tutoring in Unity, gif-making programs, design feedback… I feel so incredibly lucky to be sharing space with so many smart, creative, kind people. 🙂
Jennie is interviewing teams each week & making short videos showcasing their projects. Here’s mine!
On the advice/example of Emily, I made a twitter account specifically for Crescent Loom! I immediately spent an afternoon filling it up with a bunch of gifs & commentary from the first half-year of development (from prototyping to the end of the Kickstarter). It’s sorta like going through an old family photo album and is probably more than a little self-indulgent. Yay!
Stugan is a little over halfway over, and I’ve made 3 of the ~6 new tutorial levels. Since a lot of my time so far has been spent making the supporting systems (e.g. the golden end-of-level animation, limiting the number of parts available, making sub-maps you can zoom into), I’m hoping the last few levels will be mostly issues of design & implementation. What could go wrong.
Since this post has already gotten pretty long, I think I’ll hold off on writing more about these until the next update.
Good news: I found a typo in my water physics that’s been there for over a year! I was multiplying the amount of lift each part generated by a lot.
Bad news: If I fix it, creatures stop being able to swim.
My problem is that I don’t actually understand what causes ANY creature to swim. I just plugged in the laws of physics (incorrectly), mimicked the motion of creatures in nature, and it seemed to work out.
What’s more, an accurate description of the physics of swimming fish amazingly does not seem to exist in science (or at least, I haven’t been able to find one). Where exactly does the force come from? What are the minimum rules necessary to model it? What are the important parameters that fish have optimized? If anybody could point me in the right direction, I’d be very thankful.
We did an 8-hour game jam last week! Selina, Martina, and myself made a small meditative game where you toss rocks to direct a school of fish through shallow water. You can play it in-browser here: Throwing Pebbles At Fish
Thanks to global warming, Sweden is experiencing a freakish heat wave (didn’t expect to miss the nice cool climate of California while visiting a Nordic country). Since none of the buildings here are prepared for this, we don’t have much in the terms of AC — great conditions for getting dehydrated.
This is the best explanation I have for the fact that the day after the game jam, I lost vision & hearing, and collapsed in intense abdominal pain and had to be ambulance’d to the hospital. Dom was kind enough come along and stay with me for the eight hours before they decided it was likely a kidney stone (which can be triggered by elongated periods of dehydration). Not a great time, but they gave me some good painkillers and it’s likely not going to be dangerous. Just gotta drink lots and lots of water.
So, yeah, I lost a few days and have been taking it easier since. Bodies are capricious meat-machines that can (and will) break down in exciting ways! 😀
Hello from Sweden! Today’s my first day at the Stugan summer workshop, where 20 game devs (including myself) are going to be working on our respective projects for two months. It’s a beautiful place full of beautiful people, and I’m SO EXCITED to be here!
Note that these pictures were taken at like 9pm. The sun barely even sets here. I am very confused.
I’ve been thinking a lot about what I want the emotions of Crescent Loom to be, prompted by this great talk by Erin Hoffman where she deconstructs games by looking at the emotions at each action in its gameplay loop. She points out that the experience of play is not a single feeling, but a looping cascade of different emotional states. Playing a game is like listening to a song. The experience can’t be described by any one single note — you have to look at how elements interact and repeat over time.
This framework is especially salient for learning games because humans learn through stories and remember through emotion. If we want to take full advantage of what games have to offer, we need to weave compelling emotional journeys into our gameplay loops.
So: what are the emotions of Crescent Loom? So far, I’ve been vaguely building towards this feeling of “divine creation”, the idea of molding life out of dust and filling a ocean with colorful, elegant creatures — with maybe a hint of Frankenstein thrown in.
However! The lived emotional experience of new players is far from that; it’s closer to slapstick, a farce. They cobble a creature together and it twitches, writhes, and dashes itself against the rocks. “Why have you created me, master?”, it would cry if it had a mouth. Browsing the library of player-created creatures reveals multitudes of such gibbering biological messes.
Crescent Loom finds itself balanced between these emotions: the ideal of effortless beauty versus the reality of comical stitched-together abominations. Turns out that playing God is hard; it’s only through failure and experimentation that one finds elegance. I turned to Erin’s model to help organize my thinking and construct a path for players to reach this state of success & joy.
To warm up, I first did a graph for a similar creative-sandbox game called Kerbal Space Program, where you construct rockets and try to put them into orbit:
KSP has a particularly excellent core loop. There’s preparation & creativity as you build a rocket and a sense of excitement and build up as you launch your rocket and try to exit the atmosphere. However, the thing that I think it does the best is to have a satisfying payoff on either success OR failure: you get satisfaction or a cool explosion, respectively. No matter the outcome, you’re drawn back to the drawing board to try and do something cooler or to fix what went wrong.
Let’s take a look at the one for Crescent Loom as it currently works in sandbox mode:
This loop is quieter than the one in KSP. They start out the same (building a creature/rocket) but instead of high-tension space missions, Crescent Loom offers a more passive experience akin to watching things swimming around in a fishbowl. You and poke and prod the creatures to see how they react until you find something to change, at which point you pause, re-enter the creature editor, and begin the loop anew.
Since the game offers so little direction, the player’s motivation and rewards are internal. They ask “can I make something that does X?” and derive joy from just watching their creature swim around. However, self-directed play doesn’t work for everyone. Without something obvious to work towards, or without some presented problem to solve, there’s no fuel to keep people engaged with the loop. Once you finish a creature, it just sort of sits there and there’s no sense of progression.
So! My goal for my two months in Sweden is to put together something for this sense of progression and to introduce players to the game. As I mentioned in the last wicklog, I’m thinking that this’ll take the form of a series of series of levels/puzzles where you mend injured creatures. Here’s my sketch of the first few levels:
I’m not sure about deletion / editing before how to add new parts, so the order may swap around some as I playtest.
Calling the creatures “creatures” has worked so far but it’s a little… generic? I’ve played around with trying to come up with a specific name for them e.g. “Pokemon”, but hadn’t found anything I liked — but one of my housemates just suggested calling them “loominals” This:
- makes the name Crescent Loom a little more relevant
- is a pun on “luminescent”, which is cool
- is loomins/loomies for short, which is adorable.
It follows that the role of the player should be called a Loominologist instead of a Neuroweaver, which is what I’ve been going with up until now.
Too silly? Do I need a special name for the creatures at all? I’d love to hear what you think!
I’m going to Sweden!! Stugan is a 2-month workshop for about 20 developers to focus on a goal while in a cabin out in the woods. They bring in mentors, and there’s a focus on collaboration & making friends.
So… it’s basically summer camp for game devs. 🙂
Part of the application was making a video that lays out my goals, which you can see here:
There’s… not a lot you can do in just two months of development, so I set my scope for just making a better introduction to the game. It’s a design I’ve been kicking around for a while: playing as a veterinarian and being presented with a series of creatures with some sort of physical or neural problem that you need to fix.
I see this setting as having a few key advantages:
- It’s a natural framing device for a progression of puzzles; a novice vet is going to be handed creatures with simpler issues.
- It will allow me to show completed creatures to give players a baseline for what they look like, in contrast to the current method of throwing people in with a whole bunch of tools and not much idea what they’re doing.
- Being a vet is a suuuuper common “I want to be X when I grow up!” dream, but there haven’t been many games where you can be one. I suspect that it’ll be a strong hook for kids.
I’ll be leaving on June 22 and getting back around August 21, including 10 days after the workshop ends for just doing some hiking around the country. I am very, very happy to have been selected for this. Aghklhglbk ~
De-cluttered cell popup
I’ve been redesigning the system for interacting with neurons on the board every few months for the last year or so. The current iteration is to have a tooltip and little icons pop up when you mouse over them, like so:
The main drawback to this is that when there’s a lot of neurons, the view can get super cluttered — especially with that big blocky box of text covering everything above the cell:
What are you even mousing over here? It’s just madness.
So I bumped the label off to the side & made it more clear what each icon did, like so:
The key to making those orange tool labels strongly associated with their icon is that little slide animation they do. Coming out of the icon (as opposed to just fading in) emphasizes the attachment.
Up til now, people have had to sorta take my word that there was lots of cool neuro stuff happening under Crescent Loom’s hood — so I’ve spent the last month or so making a details panel where you can actually watch ion channels open and close during action potentials.
While working on panel, I went through one of those design cascades where you change one thing, which makes you realize you need to change another, etc. It started when I finished the first draft of the panel mock-up:
There’s information all over the place! Plus, I never loved how the options menu popped out from the top bar. It worked fine for selecting new cells to place, but it was kind of weird that in order to change an option, you had to click on the neuron and then go back up to the top of the screen like you were placing a new one.
So I bumped the options menu into the details panel. And while I was at it, I restored the visual options for neurite and synapse types (which I’d killed last year in an effort to solve this same problem of too many menus in too many different places):
It was such a relief to get the option menus in one dedicated place instead of just being tacked-on to the tool bar. As it happened, I’d been struggling with the same problem with the body part menu, and the too-many-menus problem was currently way worse over there:
So I mocked up a corresponding “Limb Details Panel” that used the same format as the neuron’s:
Making this limb panel got me thinking: right now I only have the capability to have a single multiple-choice set of options for cells (e.g. “Fast”, “Medium”, or “Slow”), but it’d be useful to be able to have that numerical slider that limbs have (e.g. the Pitch slider in the above screenshot). Also, being able to independently modify multiple properties in the same cell instead of just choosing from a few presets seems like an obviously useful thing to be able to do, in retrospect. It’d look something like this:
Changing this kind of thing always requires some amount of under-the-hood reshuffling of code. However, in this case things are complicated by the specter of backwards compatibility; how do I add this feature without breaking all the creatures that have already been saved by the old system?
I’ll talk about the backwards compatibility issue more in the next section, but let’s just appreciate the progression of things here: we started with a new bit of UI to display the inner workings of neurons, bounced around consolidating and standardizing the options system, and am now faced with potentially jeopardizing the save data of all the creatures made so far. Turns out that computer games are highly interconnected, complicated beasts.
I got stuck going down a very technical rabbit-hole for a week or so: optimizing creature file sizes. Here’s a small slice of what one currently looks like:
There’s a ton of room for improvement even in this small slice:
- Replacing repeated labels like “bodyA” and “skipedges” for something shorter.
- I’m storing the vertices for the graphic sprites AND the physical bodies, essentially doubling the size needed for each limb.
- And possibly the biggest thing: reducing the length of all those decimal numbers! I really don’t need to be storing values to the 14th decimal (that’s the ten-trillionth place for those counting at home) — the 4th should be more than sufficient.
Cutting out duplicate information, changing labels, and setting a fixed decimal length took some work, but once again the really tricky part is figuring out what to do with all the previously-saved creatures. Do I abandon them? Do I write some kind of custom converter to translate them all into the new format? Do I let my loading functions just build up with a bunch of legacy options as I continue making changes over time?
Finding some way to preserve the current creatures will take work, and will ultimately be rendered obsolete anyway as I refine the format even more in the future. I am sure that I will inevitably someday hit a snag that will require just wiping out all the current data, so what’s the point in preserving it for now? This has already happened once; the hundreds of creatures made with the first Kickstarter demo were impossible to keep after I switched from basic circles and squares to complex polygons
Then again, it feel bad to pour hours into a creation and then have it just thrown away, so I don’t want deletions to just become a regular thing. I stopped playing Starbound after they left early access and wiped out my 100+ hours of building and exploration.
So I think I’ll try to compromise. I’ll preserve the current creatures for the time being, but set expectations by adding a “These will someday be deleted!” note to the save window.
I mentioned back in March that I’d be demoing CL at an after-school program, and just got the pictures back today!
It struck me how similar running the session for middle-schoolers was to the time I ran it for undergraduates. People respond to similar incentives (“make a creature that can win a race!”) and stumble into the same pitfalls (initially making something over-complicated).
Making a game that can work in the classroom is not for the faint-of-heart, but seeing kids have that moment of understanding, collaborate, and excitedly build cool stuff gives me hope that CL might be able to make it as a tool for educators.
Thanks for reading!