(some links may not work anymore)
Still working combat issues. I added some code to the AI that performs morale checks and readies the best weapon/shield/armor. Of course, 'best' depends on the circumstances, but at least I have a basic algorithm in place.
Whew! Path finding is finally working. I used a modified A* algorithm that seems to work fairly well. I also put some very simple AI in the code (find closest enemy, move towards it, beat it into submission). Now I need to test icons bigger than 1x1, and then test with multiple enemy icons.
Progress reports are slowing down as I work on the combat code. I am redesigning combat processing to handle combatants that are on automatic. Not coding the AI, just putting in the hooks to allow it to happen. Along the way I have been adding things like allowing multiple targets. I was cranking out the events fairly quickly because the code changes became almost routine, but now the coding will slow down since it requires more thought.
In between the weekend's Thanksgiving activities, I polished off the bitmapped font handling and added sound to combat. I have neglected the combat code for some time while I finished event handling, and it needed some reworking to make it compatible with recent changes in the way items and monsters are stored. I will put up a screen shot of combat later today. My real goal was to add path finding to combat so the combatants could move towards each other, but as usual I got sidetracked with other things.
I updated the screen shots of the item/spell/monster editors, and the global data editor.
The item/spell/monster sound effects are now added to the editor. To test things on the engine side I need combat, and as mentioned previously the spells can not be cast yet. The combat code works but I have plans to rearrange/improve it so I am waiting to get started on that until this weekend (long holiday weekend). So I have finally started to convert the editor/engine over to using bitmapped fonts rather than Windows fonts. I was using the System font because it is fixed width, and using the Win32 TextOut() function. This made things easy when I wanted to change the color of the text, or create highlighted text. Now I let the user specify a font in the editor, and the engine renders it onto a bitmap with each character having a fixed height but variable width. This means I have to render multiple times for each needed color, white, red, yellow, green, blue, and highlighted. Many thanks to the guys working on CDX, which provided me with an example of how to do this. It will probably take me a few days to get it all working, and then I'll start adding sound to combat. In addition, I need to add some path finding and basic monster AI.
I put the item/monster/spell text files on the Downloads page. They show the format used. The actual content is not necessarily accurate. While working on import/export of text files I increased the limit on items/spells/monsters to just over 16 million entries. I am still in the process of allowing the editor to specify the sound effects made by items/spells/monsters.
Now the engine will play MIDI or WAV files when the game begins, and for the Sound event. I only allow WAV files for sound effects such as when the party takes a step. I started to allow selection of sound effects for items/spells/monsters, such as the sound an item makes if it is used for attack and hits or misses. Also, each spell makes a sound when cast and monsters can make sounds when they attack. Anyway, I started to add this capability into the editor/engine when I got sidetracked. When I first began this project I wanted to learn something about Microsoft Access and VBA coding so I put items/spells/monsters into an Access database. Later, I converted those files to binary data files and used the database as a master copy, with the editor able to export the database info into the binary data files. However, maintaining the database along with the structure changes in the binary files is a pain. So I just finished giving the editor the ability to import/export the item/spell/monster files using text files. The editor will still create a binary file for the engine to use, but at least it will be less trouble to make changes to the content in the files.
I found some source code that reads and plays MIDI files and I am trying to integrate it into UAF.
I have my DirectSound wrapper integrated into the editor and engine now. The editor allows the user to choose the intro and party death tunes, as well as the party-stepping sound and the party-bumps-into-wall sound. The engine plays these sounds as needed and loops the intro/death tunes. For now, only WAV files are supported. Just like the artwork, all WAV files are compressed by the editor into data files that the engine extracts as needed depending on the engine state. Basically, there are global sounds, adventuring sounds, combat sounds, and event sounds. The globals are always loaded and the rest are loaded and released as the engine state changes. I have also added the Sound event into the editor and I am working on the engine to support this event right now. The editor allows any number of sounds to be added to the event and each will be played once in the order they were added to the event.
The Utilities event is done. The editor allows any or all of the created items/keys/quests to be used for a possession test by the party - not just 6 of them. So far the enforced limit for events, quests, and items is 2 billion, but a design with so many objects would be huge. Keys are still limited to 8, since I don't have a convenient way of displaying color-coded key-to-wallslot associations for more keys. I also changed the Special Item/Key event to allow giving or taking any number of configured items/keys to/from the party. I saved the Sounds event for last because I do not have sound support in UAF. Today I will begin adding sound using the DirectSound interface. Besides supporting the Sounds event, I need to add interface sounds like when the party takes a step or a character shoots an arrow, as well as intro music. I expect that adding sound will take more than a few days to complete, especially since I am not familiar with DirectSound.
I finally finished the Quest event. While testing the addition of quest states in the save game files I found a mistake in the way event states are saved. In the process of fixing the problem I increased the maximum number of events to 2 billion per level. That's the enforced limit anyway, I predict a level with that many events will have a very large file size. I plan to work on the Utilities event next.
I have added quest data to the editor and engine, now I am working on the actual quest event that modifies the quest data. Each quest can have 65535 stages and each quest can be named.
Finished the Guided Tour event without nearly the difficulty I had anticipated. I made a few tweaks to the event processing portion of the engine and everything fell into place. Each tour step has text associated with it that is displayed before the step is taken (just like FRUA). If the step is a 'pause' then the player must hit return after the text is displayed to continue the tour. As with all text in every event, if the text is long enough to require displaying it in multiple pages, then the player will have to hit return after each page of text is displayed. No limit is imposed on event text length. Next up is the Quest code.
Finished the Chain event. Mostly just editor changes for this one, no new game menus or screen processing. Next I will tackle the Guided Tour event. I can see the end of the tunnel! Only a few more events left to code. After all are completed I will go back and re-test each and polish things up. Also need to test more variations on chained events. Finally, after I feel like event processing is completed, I can move on to something different. I have been working on the events for quite awhile now.
Got back from vacation :( and finished the 'Human Change Class' stuff. Retrofitted all functions which depend on the character class to also take the dual class into account if the dual class is available. So now the Training Hall event is finished. Also limited the accumulation of experience points by a character to 1 point into the next level. Once a character gains enough exp pts to achieve the next level all future pts are ignored until the character trains. Next on the agenda is the Chain event.
Still thinking about multi-class humans. I went ahead and finished the Small Town event. I altered the FRUA approach and it now allows each of the menu options to chain to an event. So the Temple menu option can chain to a Temple event, or whatever. If a menu option does not have a chained event it is not displayed. It sort of works out to be Question Button event with 6 pre-labeled buttons, all of which return to the previous event after the chain is complete. I'm taking a small trip for the rest of the week and will not be coding more of UAF until this weekend.
The Training Hall event is nearly done. Still working on the 'Human Change Class' stuff, but the other training hall options are coded. I was using the Give Experience event to allow my test character to get enough experience to train and I noticed that the event could give a character enough experience to jump multiple levels. I am fairly certain that the AD&D rules do not allow this but will check it out and restrict this as needed.
I finally finished the Temple event. The editor allows the adding of any spell in the database to the spells that the player can purchase (not just cleric spells). Also, I added a new field to the spell editor to specify the base price that will be charged for casting the spell. The base price is subject to the cost adjustments specified by the event. While refining the way the events are edited I added the step and rest events to the new event tree. I have not updated the screen shot yet. Next goal is to complete the Training Hall event. The engine is already aware of experience levels by class and knows to change the color of the character name when sufficient points are gained for advancing to the next level. Other options available in this event, such as load/save, have already been implemented so I don't expect this event to take too long.
I ditched the old system of event creation/editing, and changed to a tree structure that displays all events for the current level in a hierarchical format. I put up a screen shot of it too! It is a definite improvement over the old method.
One of the poor design decisions that I made long ago keeps biting me, and is doing it again while working on the Temple spells. When I began UAF I was not a C++ wizard so I tried to keep everything in plain C syntax. My event structure contained a union of all possible event types along with some common event data. Unfortunately, unions don't allow constructors in the various event structures. This disallows using templatized containers, or CStrings, or whatever pre-built class I might like to make use of in the events. Yes, I could write my own container code without using those provided, but I hate to re-invent the wheel. I already have the code for characters that maintains spell books using linked lists and wanted to use the same code to handle Temple events. So to cut this story short, I have been changing the event structure to be a C++ class, with a base event class and each specific type of event inheriting from the base. I should be done with this stuff soon and will get back to finishing the Temple event.
I live on the east coast of Florida and that pesky hurricane Floyd kept me busy with other things beside UAF. Thankfully it missed the our coast and did no real damage in my area. While working the Temple event I decided not to use the fixed list of available spells per spell level. I want to allow the module creator to choose spells from the spell database. Progress is being made, it is just taking longer than I thought it would.
Finished Tavern events. Besides being able to name each drink, you can also specify the drink points. The points remain with the party even after leaving the tavern, and decline at a (configurable) rate of 10 points per hour. Seemed like it might provide opportunities for an event trigger, or perhaps affect combat in some way. I will be working on the Temple event next.
Whew! Finally had time to finish the vault event. While mucking around with the code that builds and displays item/treasure lists on the game screen I cleaned up several things. Since I work on UAF in spurts, some code was written more than a year ago. Sometimes when I go back to use old code for something else I start to redesign or clean it up. Next I will work on the Tavern and Tavern Tales events.
While revamping the item join/divide code I got sidetracked once again and have spent two days reorganizing the source code into a more logical folder hierarchy. Ok, now I'm really going to finish that vault event!
The new name is UA Forever (UAF). Kind of silly but it works for now.
Well, as usual, working on one thing leads me down other paths. The Vault event menus provide the item join/divide options. I have this coded for the character items, but it was not generic enough to work with the Vault items so I am doing some redesign that allows me to use the same code for both. The Vault itself is added to the editor and game engine, just need to add in the new menu options. Also, I noticed today that the name UA2000 is used by a commercial product already. So I will be changing the name of my own efforts to something else later today.
Finished all 3 question events. Needed to add some functionality to the event processor to allow the question event to re-execute after a chained event was terminated (per the 'Return to Question' option). Also added code to terminate event processing if the party dies in middle of an event chain. My plan is to work on the Vault event next.
The Question List and Button events are so similar to the processing for the Question Yes/No event that I am working on all 3 at the same time. I have got the editor dialogs finished for each, now working on the game engine.
Finished the encounter and pass time events. Beginning work on the question yes/no event.
I am working on the encounter event, which means I also have to add code that displays the correct sprite pic as the monster gets closer to the player.
Welcome! This project of mine has been under construction for the last four years, off and on. It is a part time effort for me that I enjoy working on in my (minimal) spare time. When MSN offered it's members free home pages, I decided to make my efforts public and learn about web page development along the way. Check out the Features and Screenshots pages.