3/13/2006 11:24:57 AM - Why is being Gumpy no fun?
I’ve been programming since I was 13… yes… Back in 1984 I was pecking away at a Commodore 64 keyboard writing a little in Basic and a lot in 6502 Assembler. I was spending so much time making my map editors, npc editors and tile editors. I was building little Ultima clones. The thing I loved the most back then was making the editors. The tools made building maps so much easier. I had some crazed passion for neat toolsets. So I was somewhat experienced at GUIs.
Later on in 1992 after building an Ultima 6 editor I got the attention of Origin who in turn hired me because of my cool toolsets and Ultima 6 clone. At that time I was granted the wonderful title of “Gumpy”. Now many will think to say “Run Forest Run!”. I’ll have to give a quick heads-up on the term Gumpy.
Back in Ultima 7, they were working on a Windowing system for the game, the backpacks, the chests, all those had floating interfaces. A name was needed for this system. An idea sparked between the duo of Zack Simpson and Tony Zurovec. They wanted something that would sound funny coming from the mouths of Corporate Executives during important meetings. I am not 100% sure which of the two first verbalized the word, but the end result was a strange sounding world called “GUMP”. From that point on the windowing system was know as Gumps. Note: It was confirmed that Tony Zurvec was actually the one who mumbled the word Gump. Ultima 7 had them, Ultima 8, Crusader and even today Ultima Online uses gumps.
Gumpy is the person who is brought onto the project and works with gumps more than anybody else. He is the guy that knows the inner workings of this mystical system like the back of his/her hand. Well for Ultima 8 and Crusader, that was me. Yes, your humble Lothgar was Gumpy for quite the number of years. I was a victim of my own GUI success.
So on to Dransik… I had GUMPS so burned into my head that it became part of me. I created a Gump System for Dransik. Gumps on Dransik were a serious pain to a lower part of my anatomy. When Zarq or I would want to create a new interface screen (Option Screen, Guild Screen, Skill Screen, etc) we had to create a panel in C++, create a set of buttons (again in C++), and place them all. We also had to create all this artwork for the buttons and panels (In ISO and AE the art was all created by Matt Sheffield). Something that drove us to pull our hair out was when we had to make any kind of change which would require us to move things around. I remember a time when Jeff Dee (Antix) wanted Zarq to change a few things on the Character Creation screen. Zarq had just spend a good day or so organizing the character creation screen. The look on his face was not one to envy. I felt so bad for him because he was about to spend another 6 hours importing art bits, arranging things around, running the game, testing it, doing more adjustments then hitting the bottle when he finally got home at midnight. This was common for us during those days, which probably explains the bits of gray hair sprouting out of my head now.
On every project I’ve worked on User Interface programmers take a serious beating. I was unfortunate enough to have been on the receiving end of these beatings many times. There are so many hours dedicated to creating interfaces and arranging the positions, colors and attributes of controls on a screen. I spent probably 30% of my days in early Dransik playing the role of Gumpy instead of making cool new content or fixing evil bugs. Do you still ask why being Gump is no fun?
This is why I have decided to break away from the road I’ve traveled in so many past projects. Yes, Interface design should not take programming time. It should be as easy is mocking up some cool thing on paper or in Photoshop. It should be so easy that even a Caveman can do it! (*looks around as not to offend any cavemen*) LO and SW are going to have very sophisticated gumps. But I don’t want to spend two years of my life being Gumpy on these projects. I have better use for my time. So what to do?
After this first launch of the new LO tech, I will be upgrading the gump system. They will all be data driven gumps. Yes, you can build them in a WYSIWYG editor (What You See Is What You Get) and integrate the them with Ooz on the client. How will this save me in time? Easy… Lets use the example of Zarq on the character creation screen in Dransik/AE.
Poor Zarq had to call upon Matt to create tons of bits and pieces of art, then he had to import them. No problem… It took maybe an hour for all the art changes and 15-20 minutes to import it all. Then Zarq had to dedicate his time to positioning pieces, scootching them around. That process usually was like this…
1. Position all gumps at previous locations
2. Compile client
3. Run Client
4. Connect to server
5. Go to that screen
6. Look at it and figure out what all is out of place
7. Stop the client and go back to Visual Studio
8. Change the coordinates for the gumps (guessing pretty much where things went)
9. Go back to step 2 until all things are back in place.
Now that doesn’t include new functionality. There was no quick way to test functionality without recompiling, testing, going back to C++ and doing it all over again. A single pass of this could take 20 minutes. This task was SO boring and time consuming. All we wanted to do was get back to working on code and fixing bugs that were rolling in.
Now with the data driven system and a visual editor you can import the art, place pieces on the interface (displayed exactly the way you’ll see it in game) and write functionality for buttons and controls right there in Ooz (the scripting language). Then you can test it out and verify functionality through script debug windows. Now, the best part is that you can drop the interface to a client that is already running! No recompiling, no reconnecting to the server and no searching for the state that brings up the gump! This will reduce hours down to minutes for gump development. I also have not mentioned that the new networking model understands how Gumps work and that the server may want to manipulate gumps on the client. Woo… More stories to tell at a later time.
|
3/9/2006 3:14:12 PM - Ramblings of a Madman
I’ve been working very hard on many aspects of the new technology. I have Ooz in and working. The vast majority of the client will be run by Ooz. However this requires my GUI builder to be complete. I want to have a demo out before then so I can solve issues with the core tech first. Therefore I’m going to hard-code the first few interface screens and Ooz them up later.
So I was building a quick and dirty character creation screen. You see, the first round of testing will not have your characters of old. Following tests will. I’m giving players the ability to select one of 12 avatar types (male/female of 6 different appearances). I’m not going to give away what they are yet, but be sure to know that we’ll be adding more later.
I feel a bit silly about this first round as well because we don’t have enough object tiles to make any kind of lush world. We have over 100 creatures, but no shop signs or wall torches. We’ll be fixing that. Again, this first test is not about having a complete game in place.
Plischa returns from the Czech Republic on Monday. After that she’ll probably begin doing some map building. I will have her focus on Western Sedok around the starting area.
Grendel is cranking away at some awesome creatures.
Antix is working on terrain and objects.
Tarantula has come over from Stygian Worlds to help make a few exterior objects.
Tonight I’ll be finishing up the character creation screen and getting some real gameplay in. I will probably NOT have combat in on the first test. I don’t want to get in too deep on interface and formulas until I get all the kinks worked out of the other systems.
There will be an internal bug system in the game that allows players to report problems. We’ll also have a page setup on the website as well.
Here is what is left for me to do…
- Character Creation
- Display Manager fix on Client (for layers)
- Shadow Caster needs to understand Layers
- Collision on server for layers
- Model CObjectRef in Ooz on server
- Write simple Oozcode for doors
- Global Chat System
- Chat Display
- Bug Reporter
|
3/8/2006 1:54:28 PM - My first Blog post - Memory Managers
I have been working on a solution for dynamic strings in Lothgar Online and Stygian Worlds. The problem is that when you dynamically allocate a bunch of small fragments of memory it causes some problems in Windows. The Windows memory manager has many issues. 1. It cannot handle memory fragmentation very well. 2. Allocations are VERY slow!
Here is how a memory manager typically works… The memory you allocate has a preceding header that you do not see. This header points to the next and sometimes previous fragment (also known as a heap node) in the heap. This allows the manager to traverse the heap in order to find a free fragment for allocation.
What my memory manager does is has two sets of links in the heap nodes. An allocated heap node has two links, one to the next and previous node. A free heap node contains not only a next/prev link to adjacent nodes, but also a pair of links to the next and previous free nodes. The memory manager also keeps track of the first and last free nodes.
When performing allocations that are close to the same size, allocations are almost instant since the first free node is usually accepted and therefore a traversal is not needed.
During an allocation, without the free node links, we’d have to traverse all nodes, free and allocated in order. When you have a free thread, then we only have to look at free nodes and we never even see the allocated nodes.
There are also all sorts of methods to combine free links that are adjacent to each other and so on. This helps prevent memory fragmentation, which in turn improves performance.
Anyways, I thought I’d go on about what I’ve been doing the past few days.
|
|