« Blog

COBERTOS BLOG

LTU Forge Global Games Jam

Participated in my first games jam a couple weeks ago, the LTU Forge Global Games Jam. Super fun, a little stressful at times, but it was so exciting to be able to do it in such a welcoming environment. Coming out of it, I feel inspired and more experienced for having done it. I really want to do another; a feeling similarly expressed by my friends.

Carl Escape is a narritive/dialog based game, so naturally that was the first system we worked on.

Multiple dialog bubbles with focus on the currently talking character was the implementation we went with after a few iterations. Blukat worked on the data structure that backed this one.

Basic dialog

While the final game had only two characters, it allowed for dynamic names, backgrounds, and choices in the dialog tree

Dialog with full artwork

As the art and storyline came in from JD, JabberJaws, and BearAxe, Blukat and I plugged in the assets into the API, everyone coming together when things needed final tweaks. Half way through, the dialog front end was mostly complete so I switched over to working on the minigames.

Read More »

Vue.js render() and $slots; Corrupt DOM

Just ran into an issue today when making a component with a custom render() function and messing around with vnodes passed in via $slots. A seemingly simple template produced really odd results where some DOM elements would disappear, some would be duplicated, some would be out of order, and others would have their inner content ripped out to their outside after a few rerenders. Small template tweaks would also produce vastly different output, sometimes seemingly correct output.

You can see an example in this codepen:

Fix

After hours of debugging I found assigning a v-bind:key to every element fixes it, kind of like how v-for needs a v-bind:key to work properly.

Read More »

Chemistory Level and Net Code

Chemistory over the past couple weeks got a few new features, the biggest being an actual level and client/server networking code (or at least the start of it).

There's a separate build for client (Browser) and server (NodeJS), both of which run THREE.js and Oimo.js, though the server doesn't actually render anything. It took a switch to Gulp from Grunt, a pull request to WWOBJLoader2, and heavy use of ifdef-loader but it all actually talks to each other. Next steps are to add boilerplate for RPCs and member syncing and test out a little bit of multiplayer.

I really hope this goes quickly! I want to get back to game play and UI so I can start play-sharing it with my friends.

Read More »

HelloWorld Games Jam Outcome

My current company, HelloWorld, hosted a small games jam after hours. Over the course of 5 days, James (another dev at HW) and I put together two small concepts utilizing a networking engine one of my other coworkers wrote

The original concept for my game was platformer where the player must escape a pool of rising lava and race her friends to some sort of goal. The first step was intergrating the networking engine with THREE.js and physics to get 3D aesthetics and correct movement. The actual gameplay is quite shaky due to integration problems and time limitations. Once the boilerplate was as complete as it could be, I spent a bit of time throwing together a test level and playtested it with James. For some added spice, I tried my hand at adding an animated model for the player. THREE.js and Sketchfab made this easier than I expected though I had to use the converted GLTF format SketchFab provides (THREE.js's THREE.FBXLloader doesn't support animations and has other corner case issues). Given the time constraints this is as far as I got but I say for an 8 hour game jam that's not too bad.

Super exciting and I'm looking forward to the next time I get to participate in a games jam. I've been keeping my eye on the The Forge to see if Lawrence Tech will host in 2019 where maybe a few people from HelloWorld can participate.

Read More »

Importing and Reloading Python Modules in Blender

Python in Blender can be tiring. A simple problem becomes an arduous trek through docs, examples, and sometimes the C API to find the Blender way to write given Python code. This is due to the many quirks of Blender's own internal Python environment.

Importing is one of those arduous tasks. Python provides a lot of functionality to import all different kinds of source and data files but Blender's implementation makes design decisions that create issues. This is my deep dive into Blender's Python import integration where at the end I provide a small module to make your future Blender importing life easier.

Importing

In a nutshell, Python's module importing/loading comes bundled in the from ... import ... as ... syntax. This syntax ultimately compiles to various forms of the __import__() function. Instead of interfacing with this directly, Python provides importlib in Python 3.4+ (previously imp in Python < 3.4) to make interfacing with __import__() much easier. Blender decides to forgo this setup for its own implementation with the intention of making their own integration work better with the way Blender handles its data. This allows it to support nifty features like code files being text datablocks and inline python snippets in other parts of the application.

Unfortunately this override seems to break some functionality including relative imports and simply makes other tasks like how to structure a multi-file project confusing. This is a real bummer for large Blender applications. The above StackOverflow answer recommends appending to sys.path which works just fine but leaves a more comprehensive system to be desired. Things like module reloading for easy development and the ability to register and unregister large applications at will to support the little checkbox in the User Preferences window.

Read More »

On Sexism and Gender Diversity in Tech - NodeJS

Sparked by a recent NodeJS culture conflict

For anyone who works with NodeJS extensively (or any of the popular npm packages), you might be familiar with the "Code of Conduct"s that exist in a lot of npm package repos. The Technical Steering Committee has one and similar ones can be found for Emberjs, Angular, ESLint, Babel, Gulp, Yarn, and so many other repos inside and outside the javascript ecosystem. These guidelines can spark quite a bit of hot debate not only in discussion forums but even in the GitHub issues and merge requests when trying to integrate the ideas and their specifics.

Curiously, there are also quite a few that do not mention anything about "conduct" in their repos, examples being ThreeJS, Bluebird, and Grunt. Perhaps they've never considered or had a problematic conduct but there's also the more worrying possibility that it is a result of apathy of willful resistance (though I would think less likely).

The issue isn't with those that advocate, the issue is with those that just don't care. This mentality whereby a person's conduct is not meaningful if they are productive and commit good code just isn't good for a healthy community. Poor behavior allowed to persist will only help to exclude those that it targets. The output of the troublemaker in question is not the issue here, but the community that surrounds it.

Though I personally haven't had to deal with any gender specific barriers in my career (because I'm just a normal guy), it's not really hard to see how others face issues. From my inquiries into friends' experiences, to specific internet findings like the so-called "Feminist Software Foundation", a satirical but also hateful account who would try to characterize very left feminists by making ridiculous pull requests to popular repositories and arguing when they failed, to a general but hushed air of sexism in a few workplaces I've worked in, to the recent "manifesto" released by a Google employee, to the online comments mentioned in The Outline's article, it isn't hard to see how these issues persist even with awareness and advocacy. The issue isn't that non-males output is unfairly decided to be worse; a narrow view of the issue. There issue is instead systematic and based in society. A few bad actors (intentional or otherwise) and many mostly-indifferent bystanders keep certain groups from entering tech whether at interviews, in academics, in childhood development, or other aspects of life/social development. It's not always explicit yet it's just behind every door.

Read More »

Compiling Blender as a Python Module for Windows 10 x64 using Visual Studio

If you want to do unit tests of Blender Python code, it might be to your benefit to not startup Blender every time you want to run them but to just import Blender as a Python module and run them from the command line. This is especially important/nice if you want to automate your tests. Note, before you jump in, if you just need mathutils you can get that separately here.

Luckily, Blender's build has a nifty feature by which you can compile it as a Python module and then import blender from Python...

import bpy #Starts up Blender as Python module
from mathutils import Vector #Import a Blender specific library

Unfortunately for me, all of the tutorials I found were not geared toward the target I was looking for: Blender 2.78, Windows 10 x64, Microsoft Visual Studio Express 2013+, and Python 3.5. After a couple days I was able to get it all building and working with this tool chain and it should work just as well for x86, a different Python version, or a different MSVS version.

The Build Process

Read More »

Projected Balance Calculator Pt Deux

I updated the balance projection calculator thingy a week or so ago but I thought I'd write about it. Here's a demo image:

New features include:

  • Filled graph with colors for extra spice
  • Multiple graphs including maximum possible expenditures and savings percentages
  • Labels to show exactly what charges come out when (using a given label when setting up the charges)
Read More »

Theme's Done

Took longer than expected and there's still some little tiny niggles but everything's back to about where it was, except better. Sharing buttons (not just Tumblr's), social links, no more glitchy WebGL background (sadly I miss it but it was too much to maintain), a better build system, post excerpts, CDN, sub 1.0s page load times. Buttery smooth.

Expect hopefully a couple tutorials, some game development, and maybe some sewing/cosplay in the near future!

Read More »
Older posts