History of the GMWAR map - history of my tools

School's Out for Summer (2004) - yell-net
When school let out for the summer in May 2004 my son Jack and I, my daughter Laura, and several of Jack's friends had more time to be shooting at each other using the random map created in the GUI and my hand altered maps. You can also type messages back and forth but Jack was not quite reading yet (he turned 6 during this time) and he and his friends couldn't participate in the text chat. Mostly we just yelled across the house. This was very restful as you can imagine.
Autopilots
One of the features built into the game is the ability to run players on autopilot. Since we had all of the computers hooked up to the LAN (we have a dozen or so) we were able to run many autopilots. Playing as a human on a map with more than a few bots was rather quick and aggravating.
Map files
Having downloaded some maps I started looking at what it took to modify the maps. The map data is stored on the server, and downloaded, in plain text. The text includes blocks of several lines, each of which describes a shape on the map. In early 80s professional graphicspeek (the only professional graphics I've ever been involved in) these are called primitives. The primitives are specified in the text file using decimal numbers for position. I was editing the text directly, without tools.
BZEDIT - editing by hand
There is an editor package for MSWindows called BZEDIT that allows you to specify the position of the primitives and immediately see the results rendered by a specialized version of the display client. Since I didn't have a MSWindows machine handy, I was just using two computers on the LAN, one to edit the text file and the other to refresh a view of the world map created by the text file. I used this process to create a custom map. When I had created enough to show off, my son joined me on that map and we started playing it.
Jack's Ideas
Jack (then age 6) asked me to do things to the map to make the autopilots get fooled. Human users could climb up on objects using JUMP while the autopilot tanks generally wouldn't. The GM flag allowed the humans to target the autopilot tanks. Another feature of the game was the ability to place doorways that instantly transport the tank to another doorway. These are called teleporters in BZFlag. The map language allows the creation of really large teleporters. The autopilot tanks would go through the teleporters eventually as they more or less drove around randomly. We placed the teleporters in enough locations that the autopilots would eventually all go through the teleporter. Jack's idea was that the tanks would all fall into a position on the map, by coming through the out-teleporter, so that each and every autopilot tank could be systematically destroyed by the human controlled tank. Jack was a typical 6 year old. Bang! Bang! Bang! No strategy required. Of course I did exactly what he wanted.
Jack specified that we needed a stage that looked out at the autopilot/bot trap. This stage became the gallery. I designed the guard rails and shields and made it two levels. The big field would now become something to leave, instead of the major part of the game. The idea was that you'd have platforms in various parts of the map that could shoot at each other. Each platform would have weaknesses that we would know and depending on where we were and where the other tanks were we'd have to use a different strategy each time.
Guided Missile Flags are important
Since the autopilots were now gathering in one place, due to the creation of a Bot-Trap, the GM flag became very valuable. The human tanks would want to stay off the elevation that the autopilots would accumulate. One of the implicit features of BZFlag is that it is much easier to shoot a tank on the same elevation as your tank, than one on a different elevation. The only way to reliably hit a tank on a different level was with GM. Autopilots don't go out of their way to get a GM flag so the human tanks have a dramatic advantage, so long as they have a GM flag. This being true, I made GM flags the most common flags on the map.
Autopilots distracted
The interesting thing about playing the map that resulted from Jack's collaboration is that the autopilot tanks were more or less totally distracted while the humans could then go about the business of killing each other without the super fast and accurate robots getting in the way.
Sharing the map to the Internet
By late-summer 2004 I figured out how to share the map out to the Internet. First I did it to allow friends to connect. Then I later figured out how to get the server listed to the global public list. Part of that process was establishing a password to the server and allowing other people to manage the server. Keeping the language clean was important. As Jack and Laura were now back at school the Internet players starting becoming more of a force on my design goals than Jack's ideas.
By 9-21-2004 I had created the northwest room and the high platform. I met piedude on bzflag on my server and he gave me many clues regarding how to find more info.
Our map was different!
Bizarrely, having only started playing BZFlag recently, and having almost no experience playing other people's maps, Jack and I had created something unusual. Our map had a learning curve. Most of the public maps are much easier to learn. This means that many players who find our map on the global list will join, be totally confused, and will leave.
On the other hand, the map was playable. In some ways it was pretty good. A balance was imposed on the complexity of the map by having to cater to five and six-year old sensibilities with a touch of odd caused by having the autopilot trap and shooting gallery.
Some of the Internet players became repeat customers. Not many, but some. We start attracting a very different crowd. Some of those offered suggestions and BZFlag methods, configurations, and techniques, that I wouldn't have learned as quickly without this peer group.
The trap and trap teleporters
In the summer of 2004 I created the trap building which had 6 floors and 6 arrival teleporters. Each floor was open to the south so people on the gallery could shoot the trapped autopilots. The floor had a ridge on it that humans could jump over but that the autopilots would get stuck on.
The traps were fed by large wide teleporters running the width of the north zone, and in 4 places on the big field.
Wide Teleporters feeding small teleporters
BZFlag v1 had a big problem with tanks getting stuck in teleporters. Basically you'd drive into a teleporter and not get out for a very long time. The amount of time you were stuck seemed to have to do with computer processing speed and might have been due to the math of locating the tank in the teleporter region. Not sure. If the teleporter you were departing from was exactly the size of the one you were arriving at there was no problem at all. The biggest problem happened when you were departing from large teleportal and arriving at a small one.
The solution to this teleporter issue was to take the big wide teleporters and feed them into successively smaller teleporters. I created a 'hall of mirrors' in the beam above the gallery to do this reduction. The hall of mirrors was really complex and confusing. Also tanks could hide in the hall of mirrors. I created world weapons to clean out the hall of mirrors periodically.
Many teleporters - Diagonal and Rogue's Gallery
Between August and December 2004 I added many design elements. I created text by making small boxes hang in the air. My first text said "TRAP" and was made from pyramids. Later i started labelling the Gallery and the teleporters in the Rogue's Gallery. The diagonal started out as a platform that ran diagonally. Actually first I had the pillars in all the corners. Then I put things between them.
The diagonal got 2 floors and later a method to go between the floors. The top floor would have secret teleporters that were all labelled in text made out of boxes. The teleporters went to all of the good places in the map. Originally I was going to make it so I could get there but nobody else could. The question was how to pull it off. I made a puzzle based on teleporter choices. You had 3 rooms of 3 teleporter choices to make. Taking the wrong one would drop you back into the map. Taking the right one would move you to the next room and eventually to the good teleporter room on the diagonal 2nd floor.
The Enemy solved the puzzle. So I made it more complicated. Now it was failure rooms that matched the success rooms. Now if you failed you still had the same number of rooms to go through. The Enemy wasn't put back at all. I finally figured out that the HUD, if turned on, would show the altitude. You could figure out the floors based on that. I also saw that almost nobody else could solve it. So I made The Enemy an admin.
Cable modem is not good enough -- Kaffeecontrol.de
The amount of time it takes for messages to get from players to the server and back again is called latency, or lag. The cable modem connection, via the cable network and out to the Internet through a remote gateway, is slow. The latency implicit in the cable modem connection seems to be around 50milliseconds even to another server in the same region. Going from a cable network to another cable network in my city (Orlando) took 100mS. Having a cable modem user in Europe (where a good percentage of the players are) to my server took at least 150mS, and usually nearly 300mS. A good server in Europe is better for USA players than a cable modem server in the US. One of the reguilar players, Bier, from Germany, offered me shell access to a linux computer at his work, Kaffeecontrol. Kaffeecontrol had a much lower latency internet connection than a cable modem. I happily accepted the offer. He could have just copied the map over to his server and run it, as all bzflag maps that are shared are publicly copiable. At issue is that if there were two copies of the map, it would divide the player group. Also any management (banning foul mouths, watching for cheaters) would not take place or would cost more time.
BZFLAG V2.0
When BZFlag v2 came out I was in trouble. The rules governing tank behavior were different. First of all the tanks didn't fit in the teleporters I had. (I now know I could have just changed the size of the tanks with /set but who knew?). Also, there were things you could do with version 2 meshes that I couldn't do with version 1 boxes.
AWK and C language to the rescue
It was time for a change. My method of editing the BZW files by hand was just too tedious. A friend in Colorado wrote me a program in AWK that converted the BZW files into lists of function calls in C. I wrote programs in C that created the BZW box primitives. Between the two programs and a ton of massaging I got back to the point I could create BZWs again, but now I had a C language source file instead of starting from raw BZW. The C compiler is included in the Mac OS and also in Linux.
Converting to V2 maps
Compiling in C
Birthday Server, 2005
New Condos
Back to GMWAR
Tadd's homepage