E3M4Rmx - Progress
Monday, March 31st, 2008Here’s a shot of my in-progress remix of E3M4. It’s coming along but there’s a lot of work still ahead of me.
Here’s a shot of my in-progress remix of E3M4. It’s coming along but there’s a lot of work still ahead of me.
I finished implementing Quick Groups today in ToeTag. It’s really interesting to me how I figure out the features that the editor needs simply by using it. I was constantly having to copy things like light fixtures or complicated wall structures and other things made of many brushes/entities. This sucked a lot because I had to reselect everything from scratch.
With ‘Quick Groups’, if you are diligent from the start of your map, you’ll be sitting pretty once you reach critical mass of detail. Every level designer knows what critical mass of detail is. That’s the point in the development of your map when you’ve established the visual theme and now you’re heading for the finish line. You’re working on gameplay and new areas but the visuals are more or less established. With ‘Quick Groups’ you’ll be able to copy complex brushes/entities from earlier in your map without a hassle. You select one brush/entity, hit CMD+OPTION+G and then all the other brushes/entities that are part of that quick group are selected.
It does smart things too. If you copy a group of brushes/entities that are part of a quick group, the new brushes/entities that are pasted into the map will be placed into a new quick group automatically so they will be selectable as a group as well.
Creating a quick group is easy as well. Select the brushes/entities that you want to be grouped together and hit CMD+G.
This is hugely powerful once you get the hang of it. And I’ll go even further and say that it’s more powerful than a prefab system. There, I said it.
Prefabs are a great idea in theory but when it comes to Quake levels you tend to customize things in every level. Your prefab library tends to morph to keep up with your current levels requirements. So you might as well use quick groups and work within the level itself.
And let’s face it - level designers like designing levels. They don’t want to use a bunch of stuff that someone else built. They want to build it themselves.
Sure, sometimes you need something standardized like a slipgate or a teleporter. If that’s the case, just open another map in ToeTag, copy and paste what you need. Prefabs be damned!
I decided to try something out yesterday. I’m trying to figure out how to get an OBJ file to integrate with ToeTag in a seamless fashion. I had many ideas but then came up with the one that I felt was ideal : have QBSP simply insert those triangles directly into the resulting BSP! Why fool around with trying to create convex shapes from the OBJ file or extruding the polys backwards or other techniques that can get messy?
Well, because the QBSP code is horrifically complicated. Well maybe not for some people but for me, it is. I can’t make heads or tails out of what Carmack is doing in there. Global variables everywhere, obscure variable names, oddly structured function calls - ye gods. So that idea is dead. I thought that I was close at one point as I had it reading the triangles in and I was inserting them into the BSP but lots of stuff was breaking and they weren’t rendering and … well, just forget it.
I’m going to do a more traditional implementation of it now. ToeTag will read the triangulated mesh into the editor, break it down immediately into a set of brushes and then you can work with it freely.
I will offset the pain of this somewhat by implementing a feature that I will call “Quick Groups”. You’ll be able to select a set of brushes, hit CMD+G, and then those brushes will work as a group. If you double click on one, it will select all of the others in the quick group. Any imported triangle meshes will automatically go into their own quick group. Should work well enough I suppose although I really would have liked to have gotten the QBSP solution working. I guess that’ll have to wait until someone who speaks Carmack better than I do can take a look at it.
So I can’t decide on anything to work on at the moment so I’m taking part in a fun little project over at func_msgboard. We’re remixing various Quake maps. Remixing means different things to different people but for my part I’m going to add a bunch of detail, optimize as much as I can, add a few secrets and maybe a few small additional gameplay areas and call it done.
For my part, I’m doing a remix of E3M4 (Satan’s Dark Delight). I’ve always loved that map but felt that it was somewhat lacking in the visuals department. Hopefully I can make some improvements on id’s original work!
Oh, and I think the email stuff is sorted out. Maybe. *sigh*
My email is acting up at the moment so if you’re getting errors sending me anything, that’s why! I’ll post again when it’s sorted out. I don’t have a lot of time to work on this so it might be a day or two. Hooray!
Work is pretty hectic at the moment which is why I haven’t done much in the last week or so. I’m also not sure what to work on next. I have a few options but none of them are lighting my fire. I’ll have to think about it some more.
In other news, today is my birthday! I’m 38. Ye gods.
Ankh released a map for Qonquer and I’m very happy as this is the first map made by someone else for the mod!
It’s a fairly simple arena with straight up combat. Right up Qonquer’s alley!
New version!
http://www.wantonhubris.com/qonquer/Qonquer.html
Direct download:
http://www.wantonhubris.com/qonquer/Qonquer_v1_1.zip
Anyone who found it too easy before will hopefully find that it scales a little better if you play on Hard or Nightmare.
Changes:
- added “impulse 12” for cycling to the previous weapon with ammo
- fixed the ‘Elder Arena’ on Easy skill (no monsters were spawning!)
- minions will no longer hurt each other or the player
- made the minions stand further away from the player so they won’t trap you in the corner
- increased various limits, tweaked various times, based more values on skill level
- added finale screen (take a screenshot, impress your friends)
- proper respawn for the player after finale
So I was struggling with trying to set up an ending cinematic screen for Qonquer. I wanted to do a screen where it would spit out some stats on your game and give you some closure rather than just sitting there staring up from the floor in your dead body.
However, when I tried to customize the text being sent to the SVC_FINALE screen in QuakeC I discovered that you can’t send a dynamic text block. You can only send a static string. Even better, you can’t even send multiple strings. You can only send one if you’re using the WriteString function. Nasty.
So Preach over at func_msgboard gave me a link to some source code that included routines for spitting out chars to a channel in QuakeC. There were 8 versions of the function, each sending from 1-8 characters at a time to the channel (I named them pr1() through pr8() in my code base). I thought I was home free. Nope! Those emit values, not characters. Which means that if you want to spit out, for example, the word “Qonquer” you need something like this in your code:
pr7( 81,111,110,113,117,101,114 );
Those numbers are the ASCII character codes for each letter. Yeah, not exactly intuitive to read OR to write.
So what I ended up doing was writing a real simple Cocoa application to help me out. It will take a text string and split it up into the necessary function calls to get that text into the SVC_FINALE screen.
For example, let’s say I wanted to spit out “[Qonquer] - game over!”. I would use my program and it would generate this:
// [Qonquer] - game over!
pr8( 91,81,111,110,113,117,101,114 );
pr8( 93,32,45,32,103,97,109,101 );
pr6( 32,111,118,101,114,33 );
As you can see, it breaks the string up into multiple calls because QuakeC can only handle 8 arguments in any given function. It also emits a comment line at the top so you can see what those lines are supposed to be emitting.
Here’s a screenshot of the utility in action:
I need to add some checkboxes and things to this screen to support adding newlines and things like that but this is basically it! This will help me out a lot on this and future QuakeC projects. When it’s done, I’ll make the source available with the rest of the Qonquer mod.
If you’re interested in reading up on Qonquer, downloading it, or creating your own maps for it:
Have fun!