Progress, I guess...

Posted by Astryl on June 19, 2014, 7:20 a.m.

So I kinda did something with my engine for the Completition… but it's not something easily visible: Just structural changes and a slight tweak to lighting.

Yes, I've been lazy as heck. Haven't done any major programming in the last three weeks.

I've got a plan though. Probably not going to end up with a major game by the end of this, but I'll have something. Something more than I had before, anyway :P

Most of my work has involved rebasing the engine to make full use of the modern OpenGL system. At the moment, everything is an unholy mess of fixed-function and shader programming. Things like the HUD and HWEPS are all being drawn with the fixed-function pipeline, while all level geometry is using the shaders I wrote.

Speaking of shaders…

During the last comp, where I was starting to work on Exile 2.0, I created an interesting shader I call a "color limiter". Basically, I clamp the input RGBA values at intervals of whatever I want. So I can simulate a 256 color palette quite easily.

Why bother? Well originally I wanted my game to have the look of Hexen, or Duke3D, without having to artificially limit my artwork, or keep my textures at 16x16/32x32.

There was an unintended side-effect as well, that makes the textures look like they have depth: As you move around, the shadows play over the features of the texture, making it appear to be more three-dimensional than they are.

The best demonstration I have of this effect is one of my first screenshots with the shader enabled:

Take a close look at the wall (Floor lighting was derped in that version of the shader. Wasn't calculating Y distance, so it was flat-looking).

Here's the same texture used in an older (And far darker) version of the engine:

Big difference.

Anyway, back to the limiter shader… here's a comparison. No limiter:

And the same shot but with the limiter enabled, clamping each texture to a simple 256-color palette:

So… back to the to-do list. I have a ton of stuff I want to add to the engine. Mostly scripting related.

Currently, I'm using LUA and SLB for some basic scripting, but I'm finding it to be overkill for my purposes. In place of this, I've designed a simple and effective Low Level Language that gets translated into a simple bytecode, can fully utilize the engine's tasking system, and can easily communicate with other sections of bytecode.

The way I'm dealing with this is by linking all scripts in memory during game load, and providing a global symbol table to them all, as well as API symbols.

Game objects can utilize the Script class to execute scripts; multiple scripts at once if necessary. I'm not using traditional multi-threading for this; as per usual, I'm utilizing what I learned of OS task management to create a self-managed system.

This way, I don't have to worry about resource locks for scripts, and can save a bit of development time.

On a completely different side of the code, I have a prototype in place for my netcode. What I'm trying (And it may not work), is to use a channel based system. So there are, say, 65535 channels available. Each time the game receives a network message, it stores it in the channel it's intended for; GameObjects can interface with the channels and update based on information received on their own channel.

And then finally, models. I'm adding in basic model support to the game again. I'm aiming to specifically support both a static model format and an animated model format; I'm leaning toward OBJ models for the first, and MD3 models for the latter.

Well, I've run out of stuff to talk about for now.

So what have I been doing, besides not programming?

Gaming. A lot of gaming.

To be specific, I've started practicing with speedruns of a few of my favorite games. That happened after I watched a lot of these videos:

And then I got my hands on LiveSplit. My current time for Megaman X is 56:37, Megaman 7 is 1:10:21, and a bunch of unfinished runs that I'm working on.

And then there's Dark Souls. The multiplayer has been busy. Messages everywhere, bloodstains everywhere, a veritable army of summons available, invasions galore… It's been a load of fun :P

On a new character the other day, I saw a summon sign at the entrance to Lower Undead Burg. I've been having a really good time with summoning/invading; no connection issues whatsoever, for some reason.

So I decided to summon this guy. Let me tell you this: I didn't even get a chance to wave. He just sprinted down the stairs and the next thing I'm hearing the sounds of carnage. Literally took us all of three minutes to get from the entrance to solidly beating Capra Demon on the first try.

I also stuck around a bit and left my summon sign in front of Capra's fog gate; I'm part of the Warriors of Sunlight covenant, so I tend to get summoned pretty quickly.

I've never enjoyed a game so much, for so long :P

'cept maybe some of the classic NES games I keep on going back to. And Minecraft.

Well, my hands are freezing over. Time to grab a hot cup of tea/coffee and do something with my time…

Comments

aeron 10 years, 3 months ago

Color limiter eh? I was on a similar track during the spring compo thanks to the optional theme, I sort of posterized the image by rounding each color channel to 4 bits. Although in my case, I was losing a significant amount of detail due to the scale of my textures so most things ended up looking very flat, especially without any kind of dithering. I eventually gave up at adding dither and correcting the palette because well, it just wasn't the look I wanted to go for.

I still want to experiment with lofi shaders like that though. I was recently inspired by the gameboy camera after rediscovering the article about taking color photos with filters. The images come out so perfectly dithered and the palette ended up being very convincing. I tried a free app on my phone and it wasn't bad but lacked shaders that had color and square pixels. I started but never finished a shader to snap colors, pixellate, and apply dither. I think it would be cool to apply to videos, pictures, or games in realtime.

Also I know exactly what you mean about that depth illusion. It very much mimics how artists dealt with lighting in very low color backgrounds. Though it mostly just brings me back to playing 3d games with their fancy 16bit textures and early GL lights. Ahh, those were the days :')

Astryl 10 years, 3 months ago

Yeah, it is easier to see when the game is in motion. I've got quite a few massive changes to make to the way collisions are handled too. At the moment it's still purely 2D with a heightmap check, but because of new map format changes I want to implement, I'm going to have to go for a 3D approach, possibly making use of BSP collision.

A Megaman game on the XB360? Hmm. Only one game I know with Megaman in it on the 360 is Marvel vs Capcom…

Definitely not X. :P

These days, I'd recommend playing them on an emulator; or the GBA games on an NDS. The best ones to start out with are the first three X games (On SNES, Wii VC), or the Zero games (On GBA). Classic games… there's the first 6 on the NES that I often return to when I'm bored, 7 on SNES… most of these are also available on the Virtual Console, and the first 6 are available on the 3DS e-Shop.