Ghost Bird


  • *
  • Posts: 217
It's amazing right? haha
It definitely could be! I may consider this


  • *
  • Posts: 2389
hahah, the fan art is amazing, he does not skip leg day.


  • *
  • Posts: 217

All of it is summarized in this neato gif:

1. New and (probably) final lighting system is finished! It now runs half-half between shader and code. The code grabs the lights in the level and generates up to 3 arrays of tiles, sends them all to the shader, and the shader generates colors based on the data and blends them and all that cool shader stuff. The colored lights work completely now.

2. Particles! You can see them in the torches. Just a neat small effect.

3. Backgrounds and stuff! Both parallax and static. These reaally make the level more visually dynamic and interesting, and I've been planning it for a while (as you can see from the gif of that web port thing i made). My only hesitation from it is this issue:
The lighting is pretty heavily affected by the color behind it, specifically its brightness. The brighter it is, the less opaque i can make the light, which is good because the more opaque the light, the less visible anything beneath it is. Moving all the lights to a shader helps this a bit because i can make it more additive (which it is now), but it's still not the best. Having these background layers darken for each layer, while looking really cool, really screws with the light colors. Because of this, i was forced to create a system where i can change colors of an image, generate the data i need from it with a java program, send it to a .txt file, and have the game load it during run-time and switch the colors of the lights, allowing me to nudge colors until it looks good on most background colors/brightnesses. I think I've done a pretty good job with the ones in the gif!
This will continue to get annoying for each additional area in the game, with its own set of background colors, so i'll have to make different alterations of lights for different areas. But this system will help out a lot with that!



  • *
  • Posts: 217
I've started streaming my gamedev progress recently! I plan on streaming fridays, maybe tuesdays?? I'm not sure, but follow me if you're interested in watching!


Crystal wires connect from those crystal things to any source such as light/dark blocks, etc! They work wonderfully, I just need to think of more things for them to interact with!


New background layers for the tech area. I'll clean them up when I make an actual level


(Also the rock decorations and stuff were made during stream number 2)


More assets for the grass area! Like trees and bushes, and also clouds I didn't add in that gif:



  • *
  • Posts: 2261
color prism = awesome


  • Posts: 1524
WOW!! im not going to lie.. this is amazing.  id love to play it when its done!  does this run on mobile?? or does all the lighting effects bog it down?  and i apologize if you already answered, how did you get the effect of the level seems to bend while ghost bird walks around,, the ground to walk on and whatnot


  • *
  • Posts: 217
thanks ceosol!

squeeb, The game uses like 4 shaders so I don't think it would work well on mobile. (It's still pretty heavy on PC)
The bending effect is done with a shader! That one is the most simple of the shaders, just offsetting the y position of each pixel based on its horizontal distance to the player


  • Posts: 1524
WOW! i didnt know so much could be done with the shaders!!  great effects :)


  • *
  • Posts: 217
Yeah shaders are super useful. But they will be perfect once I'm able to use shaders on different layers, because right now I can't put anything above the lighting. (probably.... now that I'm thinking about it i may have an idea that most likely would not work but is still possible maybee)

Thanks a lot!


  • *
  • Posts: 217
progress from stream number 4

  • New night theme for grass area. May still play around with colors and such
  • Made a systems to get waterfalls working (shown below)

progress from stream number 5 boo hoo nobody joined to watch this stream.also it was the stream i made the most progress on anything...

  • Waterfalls work completely.
  • Sprite and animation for water source, a lion head
  • New magic source, a crystal that turns on and off at intervals (or is always on)
  • Waterfalls turn beam orbs when running atop them
  • Player physics changed to account for spinning orb; player now moves with the rotation
  • Beam orb physics changed; now they're a lot easier to point in the direction you want

Here's the animation by itself

Also I bought a new microphone so stream quality will go waay up once that arrives


  • Posts: 175
Love the waterfall (and everything else). Keep up the good work!


  • *
  • Posts: 1298


  • *
  • Posts: 217
whew boy, it's been a while!
As mentioned before, i've been prioritizing updates on tigsource but I'll still try to remember to update here

So to catch yall up,

I took a contracting job to make a mobile game (in stencyl) which took a long time and is the main reason for my absence on the game. That has been recently finished and released, and I have since started working on Ghost Bird again!

I began by deciding to remake the whole game.

I built off of the original LD build into what it is now, meaning theres a ton of left over crappy code and assets that i don't want. I'm basically going to be manually programming the most important parts (game scale stuff) and copy/pasting the complicated stuff (shaders and lighting)and probably just copy-paste all the other stuff while moving things around, etc.

I've even written a design doc exclusively on how i'm going to organize my code and assets (which i won't share because it is probably of no use to anyone else)

I've also made some cool things take a look:

now aint that neat.

this is mainly progress from rebuilding the game. the previous images were all on the previous build. This one is (and will be) a lot cleaner, but most of this is copied code so its not much faster, but that's fine.

I have finally gotten around to fleshing out the design for the world/story/etc. with the help of a friend or two. I've mapped out the base layout of the world, including zones and path progression. I've also figured out a general story and some branching paths/endings. Next will be to go into more detail, designing rooms and puzzles, etc.


Check out these new and improved shrooms!!

Now, the mushrooms aren't the thing i'm so excited about, just a vessel of it:

I have finally figured out a way to draw on top of my lighting shader while still under the other shaders!*

*It's not actually drawn on top, as we will see in my explanation below

The thing I disliked most about my lighting, specifically the colored lights part, is that it washed out, flattened, and overpowered basically everything on screen in that area. I've spent the most time tweaking color values in such a way to minimize over-flooding necessary detail, while maximizing the prettiness of the lights, because the less opaque I make the lights, the less likely i'll get the colors to match up to the ones I want in my palette. for instance: the brightest blue in that latest gif needs to be fairly opaque in order to turn out that color, but because I couldn't draw beneath the shader, it would just make every pixel in that area that color, and I really hated it. You can tell in the older mushroom gif how low-intensity the lights are. That's the other end of the extreme, and neither looks that great in my eyes, or at least it's not perfect.

This is what they looked like before, and what they would've looked like if I didn't make the lights so dim. The light itself looks so much cooler, but it's totally useless if you can't see what's emitting it!

So, I basically needed a way to draw between the shaders.

For the longest time this has been the last thing i've considered impossible to do. I never thought I'd be able to do the original lighting, never thought i'd be able to turn it into a shader, never thought i'd optimize the lighting algorithm enough to use in the game, etc. etc. I've surpassed them all for the most part, except the one; drawing between shaders. I spent a long time thinking about this and basically regarded it as impossible to do in Stencyl. I needed to be able to split shaders into layers and draw between them, so I could have my pixel quantization, color palette, and screen warp shaders still in effect and the lighting shader overwritten. Before transitioning to shaders I could do this pretty well:

I have 2 different layers of lighting here: One in front of tiles, and one behind. and both are behind this beautiful ghost bird.

This was great because I could have high-intensity light on the background, while maintaining detail on the tiles and other stuff immediately behind the light.

(Also these gifs just made me realize I've forgotten to add the light-trail thing in the newer build. maybe it looks better without it? I don't know. Let me know what you think please thanks)

Anyway, here's how I did it.

Just like the dumb hacky way I'm currently sending the tile data and light color arrays to the shader (arrays of 10-digit integers, mod-ing/floor dividing to grab sections of digits as data), This "fix" is too, dumb and hacky.

Basically I'm doing another check in the lighting shader to see if it should draw onto the current pixel or not. The only data any pixel could have is 3 8bit RGB colors (and a useless constant alpha). So What I'm doing is i'm quantizing (boy I guess I love this word) each 255 integer to a multiple of 16, and checking if each R G and B value is a multiple of 16, and iff it is, don't draw on top of it.

Code: [Select]
vec4 origColor = texture2D(uImage0, vTexCoord);
if((colored) && (mod(floor(origColor.rgb * 255.0 + 0.5), 16.0) == vec3(0.0))){
gl_FragColor = origColor;
} else {

Because this is terrible and hacky, this basically only works in the case that Ghost Bird is in currently. I'm restricting the game to a small color palette, so I can almost guarantee that none of the colors in the game will randomly create a false-positive for this check. Even the lighting that uses very much off-palette colors, which used to be drawn on screen normally, is being drawn within the same shader so there's no way these colors could accidentally create false positives either. Any other game and there would be random misplaced pixels.

Also I'm not too sure about the nitty-gritty details of shaders, but this extra check could possibly be saving GPU time. I've read that if-statements are not good because of divergence (maybe this specific check is ok though?), so that may attribute to a slower shader, but if it's not too much slower the check basically exits the whole shader code for that pixel, which has a ton of stuff like color blending, etc.

But yeah. There you go. Final annoyance solved. I have full control over what colors are drawn to the screen. I no longer have anything to whine about besides my own working speed.

Time to go make everything even more pretty!