Magelusion the Beginning

And so beings the development of Magelusion for the LOWREZJAM 2020 game jam! The basic idea is the player will play as a Mage trapped in a dungeon/castle-like environment and will need to elude enemies and solve environment puzzles to escape!

I’ve already been poking at the game for about two days for a Jam that has 16 days in it. My goal is to have most of the core mechanics in the game by day 10, then, with the remaining 5/6 days add all of the polish, like menus and any sort of stats.

For this jam I’m using my favorite game engine, Godot. One of the things I want to experiment with this Jam is creating and using “pixel particle” effects for things like blood and possibly even a magic system. Ultimately this might be biting off more than I can chew, but if I don’t try, I will never learn, right?

I’m also going for a very minimalist art style… basically 2 bit art I’m putting together using Aseprite (see some of the screenshots below). I’m not an artist by any stretch of the imagination, but I like Aseprite because, for me, it only gives me the tools for pixel art without all of the clutter of a full raster program while still being a full featured program in and of itself… Ha! Love pitching my favorite tools!

The trick with this 2-bit art, though, is while the base art will all be black/white, I’m using a very simple shader to alter the colors of various layers. Why not just use those colors in the art itself? Because I may want to tweak the colors as I develop, and it would be tedious, for me, to go in and change colors for the base art every time. With the shader, I can just tell it what colors to use and it instantly changes all the colors. It’s a rediculously simple shader… like… “Noobs First Shader” simple, but it gets the job done.

Here it is, for anyone interested…

shader_type canvas_item;

uniform bool AUTO_REPLACE = false;
uniform bool IGNORE_ALPHA = false;
uniform vec4 COLOR_A : hint_color = vec4(1.0, 1.0, 1.0, 1.0);
uniform vec4 COLOR_A_REPLACEMENT : hint_color = vec4(1.0, 1.0, 1.0, 1.0);
uniform vec4 COLOR_B : hint_color = vec4(0.0, 0.0, 0.0, 1.0);
uniform vec4 COLOR_B_REPLACEMENT : hint_color = vec4(0.0, 0.0, 0.0, 1.0);

void fragment(){
	vec4 cc = texture(TEXTURE, UV);
	float a = cc.a;
	if (IGNORE_ALPHA)
		a = 1.0;
		
	if (cc == COLOR_A || AUTO_REPLACE){
		cc = vec4(COLOR_A_REPLACEMENT.xyz, a);
	} else if (cc == COLOR_B){
		cc = vec4(COLOR_B_REPLACEMENT.xyz, a);	
	}
	COLOR = cc;
}

Well… that’s my work so far, and I still have 14 more days to work on this. I’m feeling really good about it so far! Here’s to hoping the momentum and morale lasts!

Some screenshots for your enjoyment!


Black and white tileset. Still very much a work in progress, but the stuff in the upper left corner is pretty much locked in.

Tileset in Aseprite

Black and white tileset. Still very much a work in progress, but the stuff in the upper left corner is pretty much locked in.


Movement system test. The recording is a little choppy.

Movement Demo

Movement system test. The recording is a little choppy.