The menu, please

menu_main2

I currently find myself working on Scout’s Journey’s menus (placeholder art shown.) Originally I wanted to do them in MenuQC, since gnounc had shown me some pretty clear-written MenuQC code a while back, but Spike convinced me to do it in CSQC instead. The upside of that, of course, is that the menus simply use the existing SJ GUI code, including the mouse pointer. Any menu is then only an extension of already-existing code.

The “secrets” to doing a CSQC menu are few:

  • set pr_csqc_formenus 1
  • run the initial game menu when the client is not connected (serverkey(“constate”) == “disconnected”)
  • seize the togglemenu command from CSQC (registercommand(“togglemenu”) / CSQC_ConsoleCommand)
  • disable the rest of your GUI in disconnected state.

The rest works exactly the same as any mouse-driven CSQC GUI. I plan to flesh out the menus over time, include a startup logo screen, and add some of the music that I already created.

logo

As might be obvious, Scout’s Journey is now using a dedicated colour palette. This should make the colours seem a lot more coherent and harmonic across the game. To create my palette, I actually went and painted out almost 30 colour lines in Mypaint using a gamut mask to limit the available base colours (great feature by the way.)

I got this idea (and many others) from a number of art books which I’m currently reading, including “Color and Light” by James Gurney and “Drawing on the Right Side of the Brain” by Betty Edwards. My aim is to improve my classical art skills in order to become a better overall game artist and designer. I’m also improving my anatomy knowledge to help with character modelling.

The books really have a lot of information that’s not generally available on the internet.

Apart from that I really should get to finishing the quest system and the rest of the GUI panels, and perhaps implement the hub system.

I also still have an eye on GLSL shaders.


Client side QuakeC series

grok_csqc

I started work on some CSQC documentation. I hope to go from common functions via networking and entities to graphical GUIs and how to do a mouse cursor.

Part 1 is here.

No, the irony of this site having a CSQC primer when most people have a hard time with plain old server side QC is not lost on me.


Blender: Sculpting new floor tiles

newconcrete_sculpt

Blender’s Sculpt mode is great to create textures, among other things. I’ve recently done a work-over of a couple Herdbase textures, and I grew tired of my photosourced floor tiles. So I did this.

newconcrete1

I mean, this is so much better! Textures created in Blender tend to beat photosourced ones hands down. The only photos in there are a basic concrete structure and a few grungemaps. The basis was a normal and AO map sculpted and baked in Blender, though.

newconcrete2

Here’s one with a different concrete structure in there, same base though.

I get the feeling I’ll sculpt a couple more textures to replace photosourced ones.

The mesh was first modelled with a subdivision modifier, then I switched to a multires modifier and sculpted on that (brush, clay, scrape, flatten, smooth). I used a pressure-sensitive tablet for sculpting. I topped it off by disturbing the creases a little using the Nudge brush.


Cage baking

cagebaking

Blender 2.71 was just released with a bunch of new features. The most interesting ones for game development are split vertex normals (for hard edges) and normal map baking using a cage.

The cage avoids a number of problems with normalmaps on complex objects; read the Polycount wiki to learn more. Cage baking in Blender uses their relatively new Cycles renderer. An instructional video is here.

cagebaked

I think the result is quite nice. There’s room for improvements, but this is a good start. The lowpoly mesh for use in the game is 500 polygons – the original highpoly one was 200,000 polies.

I look forward to baking weapon models with this.

Edit; after some texture work, the crate looks like this

crate_e


funky walls

modularset_herdbase_0614

Did a bit more modeling recently.

^ Modular wall set for herdbase level. Cycles render. This goes back all the way to the Remake Quake project. Naturally it looks better now, is a lot easier to use, and made the transition from BSP brushes to modular meshes.

Progress, eh.


Painting software status

It seems the Krita project is doing a kickstarter. Very good free digital painting app. Requires KDE, though.

The Mypaint project seems to be in active development again recently, as per their twitter. It sounds like version 1.2 isn’t far off.


Terrain collision

terrain_collision

Terrain models collide quite happily now. Meaning you can walk around on them as you’d expect. This isn’t the heightmap terrain, but a mesh made in Blender.

For some reason, q3map2 seems to treat terrain meshes as planar surfaces/triangle fans instead of triangle soup, so adding the meshcollide surfaceparm to the terrain shader directly did nothing. Only when I added a dedicated collision mesh with the meshcollide shader on it did things work. I don’t presently know why that happens.

collisionmesh

In this image from Blender, white is the collision mesh.

The terrain has about 5000 tris, which I find acceptable for something this size, and the collision mesh was decimated to about 1200 tris. So the entire terrain has the polycount of 2 or 3 character models. That’s pretty efficient.

Heightmaps are somewhat limited in a number of ways. On the upside, they’re easy to make. On the downside, they must be made separately from the rest of the environment so there is guesswork involved, and they can’t be as detailed. You also can’t have vertical terrain or caves with a heightmap.

I’ll have to figure out a way to blend textures on terrain meshes still, otherwise I might go with a megatexture-like approach. We’ll see. I can probably use vertex colours to vary the brightness of the surface.

In other news, I’m still writing SJ’s quest system, and I started using a different method to create visportals in my maps. I found that severely reducing the number of visportals / leaves brought a large gain in performance, especially in very large and detailed levels. The reduction of the vis data is done by disabling blocksize (which keeps the compiler from automatically chopping the map into blocks, aka leaves) and instead operating more with hint portals, antiportals and areaportals. The polycount of a scene rarely seems to matter anymore. What matters more is batching. I got the idea to use larger vis leaves from looking at Call of Duty (and Doom 3) with their visportals / cell based occlusion.

Call of Duty also gave me a number of other ideas, regarding for example AI navigation and scripting. It must be one of the most impressive idtech-based games (I’m talking CoD 1 and 2 here.)


Follow

Get every new post delivered to your Inbox.

Join 44 other followers