Archive for December, 2007

Progress (5 tasks left until beta)

Monday, December 31st, 2007

Bugs

I found the last (I hope) bug in my MDL loading code so now all the models load correctly. There was a case where certain models would load but would be somewhat scrambled up. They all look good now so I think that code can finally sink into the background and “just work” from now on.

Texture Locking

I also took a look at the QERadiant source code and by doing so was able to figure out texture locking. It only works for dragging but that’s good enough for an initial release.

Texture Changes Undo/Redo

While I was near the texture code, I went ahead and solidified the undo/redo logic in there so that anything and everything you can do to a face (changing it’s texture, offsets, rotations, etc) can be rolled back.

Targeting Utilities

I added an easy way to connect entities. Select the first entity, then the target entities, and hit CMD+K. The editor will create unique target names and connect them all up correctly. Once entities are connected, if you select the one that targets the others, the editor will show you the entities that it targets with nice obvious lines and boxes. Like so:

targethighlights.jpg

Error Prevention

The editor now checks for bad entities/brushes both immediately after loading a MAP and immediately before saving one out. Culling these will help when something goes badly. Heh. It won’t catch everything but at least the obvious stuff will get cleaned up.

I’m probably going to refactor my approach to loading meshes for classes and mod support somewhat. In getting Quoth to work I discovered that maybe my current approach wasn’t the best. I’ll see what I can come up with…

Progress (7 tasks left until beta)

Sunday, December 30th, 2007

I got extrude working today to round out the initial set of CSG tools.

extrudepreview.jpg

I also started into adding mod support today. It’s not there yet but it’s getting close. I’m using Quoth as my test mod as it seems to be quite popular and is pretty extensive (so it’s a good stress test). I’ve got the classes loading and some of the models previewing. Check out my gug:

gugpreview.jpg

Mod support almost works. It’s uncovered a few bugs I needed to fix and it still needs some massaging but it’s moving forward at least.

Progress (12 tasks left until beta)

Saturday, December 29th, 2007

Nothing really visual to show off today, sorry. Just lots of internal code and tightening up of the user interface. Stuff like asking you to save changes if you’re closing a map you haven’t saved or making sure that you’ve specified a valid Quake directory in the Preferences panel.

Necessary stuff but a bit of a snore fest to read about.

Progress (16 tasks left until beta)

Friday, December 28th, 2007

Point Files
My QBSP now properly generates pointfiles for leak detection and the editor will load and display them.

pointfileloaded1.jpg

CSG Hollow
Make rooms in a flash.

csghollow.jpg

Did some optimizations today as well as refining the compiling tools.

Progress

Thursday, December 27th, 2007

I figured out how to embed the compiling tools (qbsp/light/vis) inside of the editor so now you won’t have to worry about where they are when using ToeTag. Just click the compile button and watch ToeTag do it’s thing. A quick shot of the compiler output window:

compilertools.jpg

My QBSP isn’t spitting out point files for some reason. Gotta fix that…

Shooter Still Going Strong

Thursday, December 27th, 2007

I’m amazed at how much traffic ‘Shooter in the Abstract‘ still gets. The downloadable versions (Mac and Windows combined) are still serving up over 1,000 downloads a month. This month it’ll come in about 1,300 or so.

Not bad for a free game that had almost zero marketing effort!

If you’re new to this blog and weren’t aware of the game, go check it out! It’s kinda fun.

Level Preview

Wednesday, December 26th, 2007

I’ve stopped working on the code for a few days (aside from bug fixes) to give the editor a really good work out. I’ve come up with a small level using the metal set.

I’m not sure this will ever become something I can release but it definitely shows the editor can create and edit levels. As I run into bugs, I’m fixing them. Soon I’ll be back to work on the code but I’m staying in level design for a few more days.

levelpreview1.jpg

Progress

Monday, December 24th, 2007

Kind of a random day.

Select Matching

Added the ability to select matching things. This expands on the previous “select all faces with this texture” functionality. Now what will happen is that if you have faces selected, it will select all faces that match any of the textures on the selected faces. If you don’t have faces selected, it will select matching entity classes - meaning that if you have a light selected, it will select all lights in the level. I want to expand this eventually into an SQL style selection mechanism where you could, from the entity inspector, issue selection commands like: “select all lights that have a light value of 150″. Eventually.

Hide/Show

Added some basic functionality to hide and show entities and brushes. Not too exciting but it’s core functionality that had to get done.

What really works well here is the “Isolate” button that I added to the toolbar. This hides everything that is not selected. It’s great for working on small subsections of large maps!

Cylinder Brush Builder

Added some new brush builders that will create cylinders. I decided on options for 6, 8 or 12 sides for now. That should be as detailed as you want to get in Quake.

cylinders.jpg

Spike Brush Builder

Same as above except for spikes. Options for 3, 4, 8 or 12 sides.

spikes.jpg

Keypresses

CMD+A - Select everything in the level
CMD+SHIFT+A - Select matching (see above)
OPTION+A - Select all brushes in selected entities. This is handy for moving a door made up of multiple brushes. Select one brush, hit OPTION+A, and start dragging.

CSG Mania Continues…

Sunday, December 23rd, 2007

And today is, apparently, bug fix day. I found an egregious bug in the selection management routines that would leave stuff in the selection buffer long after the object that owned it was deleted and gone. This caused weird crashes when using undo/redo extensively, but that’s all fixed now.

Also a little more CSG today:

Bevel
Creates a bevel on the selected edges, using the current grid size as a reference.

csgbevel.jpg

I plan to do an extrude/inner extrude feature and then I think I’m done with CSG for a bit. Going to get to work on more core features like compiling from within the editor, hiding/showing brushes, editing maps for custom mods like Quoth, etc.

Progress - CSG Mania

Saturday, December 22nd, 2007

So today I got an idea for how to make the carving as minimally damaging as possible. The subtraction routine will now sort all of the brush faces that it will be cutting with by their size before doing anything. This allows the largest (and generally the most influential) faces to cut first which should mean that the little brushes that are generated by the small detail faces will cut as little of the level as possible. I also hooked up undo/redo on the subtraction routine so you can experiment to your hearts content to get the best cuts.

I fixed a bug - or rather, an oversight - in the subtraction code so that you can now subtract multiple brushes from the world at once.

I’m adding a bunch of other CSG options now that subtraction is working:

Subtract From World
You knew about this one already. Subtracts the selected brushes from the world.

Clip Against World
Clips the selected brushes against the world geometry. This is basically the opposite of “Subtract From World”. This is nice for nicking an edge off a brush or adding an angled corner.

csgclipagainstworld.jpg

Merge
Merges all selected brushes into the best shape possible. If you select very different looking brushes and merge them, you won’t get great results but if you select chunks in a wall (for example) it will merge them together into a single optimized brush very nicely.

csgmerge.jpg

Split
This will perform a ring cut from a selected edge on a brush. This effectively splits a brush into 2 brushes across the middle of the selected edge.

ringcut.jpg

I’m working on others but we’ll have to see how they turn out.