Almonaster Work-In-Progress
Page last updated: November 24, 2000
The latest development version is build 618.1
New in 618 beta 1
Almonaster:
Codework:
- Cleaned up the internal Almonaster locking interfaces
- Cleaned up a few string casts in the update code for less heap usage
- Changed table name generation to be on the stack instead of the heap. This
should save many heap allocations per page render and increase the server's performance
and scalability on multi-proc machines
- Combined Context and Gui classes into HtmlRenderer class (major
code cleanup and restructuring)
- Combined ProfileViewer and EmpireAdministrator search interfaces
internally
- Changed a few direct writes to empire classic scores to go through the
new scoring system interface
- Took some steps towards keeping HTML out of the database: this means
that the game engine no longer filters text input from players, but it
filters every string that could have been submitted by a human when rendering a page or
preparing an update message. This was done because there's nothing that says
that the Almonaster game engine won't be used with some other display system
in the future that isn't HTML. So with some exceptions (markups in
update messages, for example), the game engine is now content to allow the
rendering layer on top of it to decide what's a valid string and what's not.
Bug fixes:
- Fixed a reference counting bug that was preventing the game engine from
shutting down properly
- Fixed a bug in the new map generation code that could cause spurious
assertions in disconnected maps
- Fixed a bug in the new map generation code that was causing crashes when
viewing maps from the Game Administrator
- Fixed a bug in the new map generation code that was preventing ships from
legitimately moving to planets in games with exposed maps
- Fixed broken <strong> tag on Server Status page
- Fixed Options page to allow "no default builder planet" to
remain selected
- Fixed bug that caused ship coloring for truced / trading empires to be
rendered in the wrong color (thanks, Vesigoth)
- Fixed a lock re-acquisition bug that would occur when an empire resigned
from a game in which every other empire was ready for an update
- Fixed map generation bug that could cause adjacent homeworlds to be linked
- Fixed messages sent when games are drawn (thanks, Agt)
- Removed unused KillAGame.gif from buttons
New features:
- Implemented classic SC-style surrenders (this was actually quite involved)
- Added gameclass option to send a custom message to empires who enter a
game (thanks, Galaxia)
- Added option for obliterated empires to view the update message from the update in
which they're obliterated (thanks, Galaxia)
- Added advanced search interface to Profile Viewer for non-novice empires
- Added Profile Editor option to choose simple or advanced search interface
in Profile Viewer
- Added max hits per page option to Profile Viewer simple search interface
- Added victory sneer text to advanced search interface
- Added more rigorous gameclass and server name filtering
- Personal gameclass names can now be longer
- When an empire resigns, its ships are now deleted from the game
- Map verifier in debug builds now checks for adjacent linked homeworlds
- Parenthesis can no longer be used in empire names
- Updated FAQ
Alajar:
- Fixed a minor bug that could cause statistics files to be created with the
wrong name (e.g., 2000_09_31 instead of 2000_09_01)
- Fixed double printing of "Shutting down server" on shutdown
- Fixed hang on server restart
- Fixed bug where Variant of type V_INT64 wouldn't render any text in
IHttpResponse::WriteText()
- Fixed code path for shutdown on pagesource initialization failure to flush
report files before closing
- IHttpResponse::WriteText() with a Variant of type V_UTCTIME will now
render a full date string instead of the number of seconds since 1970
- Incremented Alajar version to 1.53
New in 618 beta 2
Almonaster
- Fixed classic score toplist not updating when empire with less than 0
classic score blanked its statistics (thanks, CJ)
- Fixed statistics blanking to set ruins to 0 (thanks CJ)
- Fixed auto-backup time periods - they were being set to 24 times the
correct value
- Added reserved empire names (e.g., "The System")
- Added sensitive maps as alt tags on planets. Only appears to work on IE for now.
Get with it, Netscape!
- Broke up "JavaScript features" into separate components in
Profile Editor
- Changed local path graphics to allow file paths of any type, including
other http servers
- Removed spurious assertion in code that checks all games for updates
- Made sure that planet names could be at least as long as empire names
- Fixed last update message feature to not ask for the name of the gameclass
after the game ends (this doesn't work for gameclasses that go away after
games end; e.g., personal gameclasses)
- Changed colonization and invasion of planets owned by other empires to
always reset the max pop to the proper value before applying population
changes
- The code now calculates next resource predictions after generating a map.
This prevents the predictions from going negative if the max ag ratio is
positive and all of the empire's planets are set to low max pop values
- Replaced text form for password protected game with a checkbox that leads
to a confirmation page (thanks, Galaxia)
Alajar:
- Fixed error in GMT time display
- Updated HTTP-display version to 1.53
New for 618 final
Almonaster
- Fixed carriage returns turning into <br> tags in the quote and other
text areas (thanks, Galaxia)
- Fixed victory sneer row in search screen (thanks, Agt)
- Fixed scenario where empire would drop off a toplist and no replacement
could be found
Osal
- Added a flag to String::AtoHtml that specifies that no actual HTML tags
should be written
New for 618.1
Almonaster:
- Fixed spurious </strong> tag in game pages (thanks, Galaxia)
- Fixed engineer action display messages (thanks, Galaxia and Lady Thismet)
- Changed ship selection in gameclass creation forms to use checkboxes
- Fixed security hole caused by IP address search being exposed to
non-novice empires (thanks, CJ)
- Updated FAQ
Alajar:
- Fixed directory browsing for URLs without directory terminators
Todo
- Finish Alajar.html documentation
- Update FAQ about:
Map generation algorithm
Update algorithm
Exact ship special action descriptions, math
- Implement 3.0 ships:
- Carrier:
No new orders
Absorbs DEST during battle - square of BR after carrier loss
Carrier loss incurred when DEST affects ship, not on every battle
TODO: how much is carrier loss?
TODO: build and maintenance costs?
- Builder:
New orders: Create Planet at xx, yy
If BR * 10 > Planet Create Cost, then planet is created.
Created planets have average resources, are explored by creator, link exists
between created planet and builder planet
TODO: how much is Planet Create Cost?
TODO: build and maintenance costs?
- Morpher:
New orders: Change into <type> for any type known to empire except
morpher
Displayed as morphed ship type on all screens
Morpher loss incurred on every metamorphosis
When changed to cloaker, cloaked automatically (!!)
TODO: build and maintenance costs?
- Jumpgate
Stationary
New orders: Jump to <Planet> for all explored and non-annihilated
planets within range
Range is divisor of BR: BR / Range = hops that can be reached.
Range is measured as greater of two distances. E.g., 0,0 -> 3,4 = 4. So
if the Range = 1.5, then only a BR6 jumpgate can send ships that far.
TODO: how much is jumpgate loss?
TODO: build and maintenance costs?
- Do Game Histories properly
Add the following events:
Game creation time
Empire entries, exits, resignations, deletions
Pause events
Each update:
Time
First contacts, diplomacy level
changes
Idle empires
Planet colonizations, invasions,
terraforms, nukes, annihilations, links, etc.
Fleet battle outcomes
Surrenders, obliterations, ruins
Save async buffered strings from each update.
Save map from end of game to .html file, without body markups, but with
default UI elements
Make logs + map available in big Game History collection, provide collection
trimming in Server
Administrator
-
- Keep track of daily logins, games started / finished, etc. (Sturgeon Moon)
- Record last 20 nukes on system
- Implement stargate range limits
- Spectator games (CJ, Galaxia)
-
- Write TOS, find place for it in UI
- Make purge interface use search interface
- Provide a way for Alajar filecache to update files at runtime
-
- Feature: build option in map / planets pages (dofiki)
- Feature: truce / trade / alliance ship combat penalty option (CJ)
- Feature: JavaScript client code that generates tables from data arrays submitted in
HTML code (Galaxia)
-
- 3.0 database:
One file for all tables
Create ITransaction interface that inherits from IDatabase and dispenses out ITransactionTable
interfaces. Implement with private MemoryManager for all affected tables
Create ISearchTable, which uses copy on write to give you your own private table to play with
without a read lock
Remove need for QI for IID_IReadTable when you have a write table
Make all IxTable objects contained instances of Table objects, so no need
for allocate/delete on each use
Delegate all read / write requests to Read / Write tables - don't have two
implementations
Return out of memory on all allocation failures
Add support for sparse files on Windows 2000
- Alajar: multi-hosting, full Http 1.1 support
-
- Osal: add more meaningful Osal error codes for the various classes and
namespaces
-
- Create cooler gameclasses for default install, with simpler games for
beginners and descriptions
- Experiment with Chatroom frames
-
Implement mechanism for saving and restoring "game state"
-
Implement ship / fleet auto-control interface
-
Empire groups / clans
-
-
Add Independent Planet graphic to themes
- Replace temporary buttons with final versions in Dark Mood button set
Future enhancements:
Alajar
- Organize ports to other platforms, especially to Linux
- Create a page source that provides CGI-like functionality
- Implement standard SSI support
- Implement an FTP server
- Implement byte range requests
Almonaster:
- Make all groups of connected database updates fully transactional
Database:
- Implement SmartTransactions
- Implement ODBC interface
- Change indices to use trees, allow duplicate data, range searches