Unreal Engine 1 Announcements Page
Latest news from the Unreal™ engine development team - adapted from the original Unreal Technology page Also Visit PlanetUnreal • Beyond Unreal • Unrealism • Unreal-2003.netNews (2003)
Make Something Unreal Contest Update September 7, 2003 - by Steven Polge
Here (in no particular order) are the Voice/Sound Category finalists for Phase 1 of the $1000000 NVidia Make Something Unreal Contest.
Jupiter Effect: Influx Attack of the Tentacle Creatures UGRRLL2003 gabeSoundPack Steven Hawking voice GODZ FaceOff
Honorable Mentions;
We've also added the following maps to the honorable mentions list:
CTF-Nyleve
DM-1on1-Lighthouse
DM-TreeofAges
DM-Lightfalls
Make Something Unreal Contest Update September 7, 2003 - by Steven Polge
Here (in no particular order) are the Original Level Category (levels using original art content) finalists for Phase 1 of the $1000000 NVidia Make Something Unreal Contest.
DM-NIRVANA2
CTF-ADDIEN
DOM-APHRODITE
CTF-MAISON_DARBRE
DM-1ON1-ALPU2
FO-TDM-TAKABAN (from
FACEOFF)
CTF-UNEARTHED_SE
DM-ARISTOCRACY
DM-BLOOM
DMN-LAZYWATERS (from DOMAIN)
Honorable mentions in the Original Level category go to
DM-ELITEARENA
DM-LINCOLNCOUNTYNW
DMN-ERRIGALDAWN-ALPHA (from DOMAIN)
CTF-HAUNTED
DM-Lightfalls
Here (in no particular order) are the Level Category finalists for Phase 1 of the $1000000 NVidia Make Something Unreal Contest.
BR-CONTACT
CTF-WARZONE
DM-SYNTHETIC
DM-LAHAINE
DM-1ON1-AUGUSTNOON
CTF-STONEWALL
CTF-HADESREALM
BR-RINGBALL
DM-NYSTIC
BR-H16-DIAZ-R-U
Honorable mentions in the Level category go to
CTF-KOTD_WID
CTF-Nyleve
DM-1on1-Lighthouse
DM-TreeofAges
Make Something Unreal Contest Update September 4, 2003 - by Steven Polge
Here (in no particular order) are the Models Category finalists for Phase 1 of the $1000000 NVidia Make Something Unreal Contest.
NeoFin
Effigy
Beast
Exoslave
Annoying
Kid Faceoff
Terrorist Faceoff
Counter-Terrorist Bevonne
EVA-01
Angel
Interceptor
Honorable mentions in the Models category go to
Husky, from Animal Kingdom Global Warzone characters Oscar from Warbeast Moloch Marines from Jungle Warfare Jupiter Effect: Influx Ninja Somos Mechanatrix Neva
Make Something Unreal Contest Update August 21, 2003 - by Steven Polge
UT2003 Troopers, while an outstanding mod, is not eligible for the contest, so it has been replaced in the list of mod finalists by AirBuccaneers.
Here (in no particular order) are the Tool Category finalists for Phase 1 of the $1000000 NVidia Make Something Unreal Contest.
UnCodeX VasSaveToServer JaFO's Botmanager GFE for UT2003 UT2K3Bench WOTgreal Maps Converter(CTF) JamLander - UnrealEd? exporter for 3dsmax Umod Wizard PimpServ UDG
Honorable mentions in the Tool category go to
UT2003 Screenshots Converter UT2k3 RegCheck? UT2k3Mi UTelAdSE UT2Vote16 UT2Monitor UT Buddy Locator Unreal Illustrator UT2003 Custom Installation Tool
We'd also like to point out the outstanding tools at BDBUnreal, which were not entered because the author is working as a contractor on UT2004, including
BDBMapVote.
Make Something Unreal Contest Update August 8, 2003 - by Steven Polge
Worm2K3 was accidentally left off the list of honorable mentions in the mutator category. That error has been corrected below.
I also would like to highlight a couple of impressive mods for which I've reviewed release made since the Phase 1 deadline, that look to be serious competitors in the Mod category. Path to Victory and Shattered Oasis both look like they will be serious contenders in Phase 2 - they are well worth keeping an eye on.
Make Something Unreal Contest Update August 7, 2003 - by Steven Polge
Here (in no particular order) are the Mutator Category finalists for Phase 1 of the $1000000 NVidia Make Something Unreal Contest.
SwitchArsenal Monster Guard Weapons of Evil Sentinel Mr. Pants' Excessive OverKill? MonkeyMatrixMoves ChaosUT2 Arkon Weapons SuperBots WeaponStuff Laser Instagib JaFO's PowerPills? ZenCoder's Weapons Relics2K3 TTM 2003 Healthbot
Honorable mentions in the Mutator category go to
Radar2003 Mercury Missile Instagib ApocMatrixMoves Leaderboard Medicine Gun MP5 Shorty Dynamic Arena Monster Arena FlyMutator Boots of Jumping Taken from Behind Gibalicious The Potatogun Grapple Bullshit VasOnFire VasVolatile Random Weapon Swap Drop Everything Unreal Lottery Random Item Placement Ultima Weapon TLMutator GibLife Jolle Mutator Pack UT2003RPG Punisher Static Mutator Soul Reavers Customizable Species Stats Worm2K3
Make Something Unreal Contest Update August 4, 2003 - by Steven Polge
We've been reviewing the first phase entries for the $1000000 NVidia Make Something Unreal contest and selecting the finalists in each category for judging by the full panel of judges. One important addition we've made to the competition after looking at the entries is the creation of an additional category, for new game types, with the purpose of rewarding fun new game types that don't have the scope of some of the total conversions being developed, and therefore aren't compeittive in the mods category. The prizes for the game types category will be similar to the tools category. We'll be making an official press release containing this news and other important news about the contest, but I wanted to give the community a heads up here.
For entrants, here's some general overall feedback:
- There were quite a few promising entries, particularly in the mod category, that were too early for judging. We're happy to look at them, and get an idea of where you are going, and look forward to seeing more complete and polished versions in phase 2.
- We were pretty lenient in this round about confusing installation procedures. Make sure that your entries are easy to install and use in the next phase! Any entry that is provided as a zip file should include paths information for the files in the zip, so that a user can just unzip into their c:\UT2003 directory and have all the files automatically put in the proper subdirectory. Also, please provide instructions with your entry about how to play your mod, whether it is in game or through an external executable/batch file. Also, if your mod has a web page, please include it in your installion instructions.
- We frown on mods that make changes to Epic content.
- Using mutators as a way of setting gametype options is confusing, and fills up the mutator menu with game type specific mutators. Please use the game options menu for setting options specific to your game type.
- If you didn't enter the contest in the first phase, you can still enter in future phases. The three phases of the $1000000 NVidia Make Something Unreal Mod Contest are independent. You can enter any category in the second or third phase, whether or not you had submitted an entry in any previous phase. The only limitation is that there must be significant improvements to an entry for it to be considered if it had previously been submitted in an earlier phase of the contest.
And now, without further ado, here are the Mod category finalists for Phase 1 (in no particular order):
Sweet Dreams Marble Mania 2003 UnrealSpeed Fatal Arts DeathBall Domain Faceoff Conquest Marines GODZ Jupiter Effect: Influx Jungle Warfare UETF Chronicles Global Warzone AirBuccaneersThe following entrants in the Mod category were not selected for the final Phase 1 judging in the Mod category, but we felt they deserved honorable mentions:
Proelium Nali Bricks ChaosUT UT2003 Troopers (not eligible)
Here are the Game type category finalists for Phase 1
Flag Hunter Boss of the Arena Roundmatch Pack One flag capture Riftwar Minions of Destruction: CyberSports? DuelGame Overload Greed Duality V.I.P. Quad Team Deathmatch XCTF 2003 UETF Chronicles
The following entrants in the Game type category were not selected for final Phase 1 judging, but we felt they deserved honorable mentions:
Assimilation Team False Prophet VASBioInvasion
We'll be announcing finalists in the other categories over the next several days. Note that some of the entries that didn't make the finals in the Mod category will be finalists in other categories.
Make Something Unreal Contest Clarification July 31, 2003 - by Steven Polge
I've seen a lot of confusion on this point. The three phases of the $1000000 NVidia Make Something Unreal Mod Contest are independent. You can enter any category in the second or third phase, whether or not you had submitted an entry in any previous phase. The only limitation is that there must be significant improvements to an entry for it to be considered if it had previously been submitted in an earlier phase of the contest.
So, if you didn't enter the contest in the first phase, you haven't lost any ground yet for the second phase!
We are in the process of reviewing the entries for the first phase right now, and we're quite impressed by a lot of them.
Updated DefOpenAL32?.dll for UT2003 version 2225 July 11, 2003 - by Daniel Vogel
An updated DefOpenAL32?.dll (v0.9.9.1) fixing spatialization issues with the default software mixer can be downloaded here. The file belongs in the UT2003/System folder.
I want to specifically thank Nick Borrelli, Christopher Linder, Daniel Peacock, Carlo Vogelsang and Johnathan Wendel for bringing the problems to my attention and help getting them fixed. Thanks guys!
Updated UT2003 DEMO MacOS? Dedicated Server June 9, 2003 - by Ryan C. Gordon
An updated dedicated server binary for the original ut2003 Mac demo is now available here. This fixed version lets demo dedicated servers host for retail UT2003 clients on any operating system. Without this fixed version, you can only host other 2206 demo clients.
To use:
- Unpack it with Stuffit Expander. This will create a "ucc-bin" file.
- Find your UT2003 demo icon, right-click/control-click it.
- Select "Show Package Contents" on the popup menu.
- In the newly-opened folder, drag the newly-created "ucc-bin" file into the "System" folder.
- When it tells you that file already exists, click the "replace" button.
- Continue to use the dedicated server as you normally would, now.
The retail game (shipping June 11th!) has this fix. This is for the initial public tech demo only!
UTV 2003 Public Beta Available May 26, 2003 - by Joe Wilcox
The first public beta of UTV 2003 is now available right here. UTV is a proxy server that allows multiple spectators without having major impact on a game server. It needs UT2003 version 2225 to run (clients and the game server can be any version) and is currently Win32 only. See the enclosed documentation for more information.
UT2003 Software Renderer for 2225 May 19, 2003 - by Daniel Vogel
UPDATE: I originally forgot to include the highlighted line below which is required for maps like CTF-Chrome to show up correctly.
A zip file containing the integration of RAD's Pixomatic software renderer into UT2003 can be found here. Unzip it into the UT2003/System directory and adding the following section to your UT2003.ini file
[PixoDrv.PixoRenderDevice]
FogEnabled?=True
Zoom2X=True
LimitTextureSize?=True
LowQualityTerrain?=True
TerrainLOD?=10
SkyboxHack?=True
FilterQuality3D?=1
FilterQualityHUD?=1
HighDetailActors?=False
SuperHighDetailActors?=False
ReduceMouseLag?=False
DesiredRefreshRate?=0
DetailTexMipBias?=0.000000
Use16bitTextures=False
Use16bit=True
UseStencil?=False
UseCompressedLightmaps?=False
DetailTextures=False
UsePrecaching?=True
SimpleMaterials=True
should then allow you to select it by modifying your UT2003.ini file as follows.
RenderDevice=PixoDrv.PixoRenderDevice
;RenderDevice=D3DDrv.D3DRenderDevice
;RenderDevice=Engine.NullRenderDevice
;RenderDevice=OpenGLDrv.OpenGLRenderDevice
Keep in mind to lower your resolution to maybe 320x240 or 512x384 in case you have a slow CPU. You can do this from the console by typing "setres 320x240" or "setres 512x384" respectively.
Please check out this thread on the UT2003 forums for questions and bug reports.
UT2003 Source and Debug .U's for 2225 April 23, 2003 - by Joe Wilcox
You can find the .UC source code and debug .U files for UT2003 v2225 by following the below links..
Grab the source to 2225 here or Grab the debug .U files here
UT2003 AI for Level Designers February 14, 2003 - by Steven Polge
This tutorial provides an overview of getting UT2003 levels set up for bots.
8:12 PM EST, the tutorial was updated with a correction on shootspots (thanks Twigstir).
UT2003 Pushing Models Tutorial February 7, 2003 - by Joe Wilcox
I've added a tutorial explaining in detail how to setup a custom model so it can be pushed from a server to the client. You can find the tutorial here.
UT2003 Tweak Guide February 4, 2003 - by Steven Polge
Here's a link to our UT2003 Tweak Guide for advanced users.
Pre 2186 version of DefOpenAL32?.dll February 2, 2003 - by Daniel Vogel
If you are experiencing sound/ music issues with the 2186 patch you might want to try to replace DefOpenAL32?.dll in your UT2003/System directory with an older version which can be found here.
PLE plugin update Oct 30, 2002 - by Erik de Neve
If after applying the latest patch you run into compatibility issues with the custom Maya PLE exporter, download this updated version; unzip and place into PLE's bin\plug-ins folder, overwriting the original unEditor.mll.
UDE Update 02-10-11 Oct 11, 2002 - by Joe Wilcox
Here is the latest version of UDE. Please report any bugs directly to me.
UPaint Update 1.0.2 Oct 9, 2002 - by Erik de Neve
This new UPaint 1.0.2 self-installing patch from Right Hemisphere updates UT2003's popular 3D skin painter program with the following:
- Fixes an open-file bug under Win98/WinME.
- Fixes a crash on saving.
- Skins are saved separately, with a single .UTX and .UPL for each
character. Note that:
- These two files are all that is needed to trade characters with other users.
- To share source art (so you can continue to paint and edit) you'll want to use the .UPP and .UPT files.
- To delete a skin, just delete its [name].UTX and [name].UPL files. - Texture data in the generated .UTX files is now compressed (DXT3) automatically.
Character model source art Oct 7, 2002 - by Erik de Neve
Digital Extremes have made
the 3DS Max source art for all the UT2003 character meshes available to the
UT2003 user community, via PolyCount.
Note that all the original, high resolution skin source textures for the UT2003
characters can be found the 3rd CD of the UT2003 retail version, in the \Extras\SkinArt
folder.
FAQ Oct 6, 2002 - by Daniel Vogel"> Lock-up FAQ Oct 6, 2002 - by Daniel Vogel
I created a small text file with suggestions on how to solve random system lock- ups - it's available here.
Dedicated Server Beta Test Oct 3, 2002 - by Steven Polge
- 11:30pm EST edit by Jack Porter
We currently have enough beta testers for the free UT2003 dedicated server. If all goes well we'll be releasing on this tomorrow. Look for a list of mirror sites on www.unrealtournament2003.com.
UT2003 Editor Win98/ME Update Oct 3, 2002 - by Erik de Neve
A fix is now available to run the UT2003 Editor under Win98 and WinME?. Download, unzip, and copy the resulting two files into your UT2003\System folder, overwriting the ones already there.
UDE, UScript and Debug .U's Oct 2, 2002 - by Joe Wilcox
Sorry for the delay. Below you will find the latest beta version of the Unreal Development Environment (UDE), all .UC uscript source files for the retail release of UT2003, and precompiled "Debug" .U's. This should be everything you need to make script mods for UT2003. When using the "Debug" .U's, please make sure you keep a backup copy of your originals. They are not compatible online and do effect performance.
* Update: I've also added the missing .BMP file for the debugger.
Please place this file in your /HELP directory.
- Click here to download UDE and the retail uscript source files
- Click here to download the retail .U packages compiled in debug mode
- Click here to download DebuggerLogo?.bmp
- Click here to download the extremely important UDE patch
* Update #2: A user found a big bug that would cause UCC to attempt to recompile all of your .U's, not just new ones. If this has happened to you, don't worry. You can find the original .U's in your system dir with the extension .~U or on the CD. Install the patch above to fix it.
* Update #3: Wow.. so that's how you bring a T1 to it's knees. We had to move the files to a new home with a lot more bandwidth. So if you have had problems downloading them, please try again.
Support for 3rd Party Server Querying Oct 1, 2002 - by Jack Porter
We have made server lists available via HTTP for both demo and full version UT2003 servers so that 3rd party server query tools can add UT2003 support.
- http://ut2003master.epicgames.com/serverlist/full-all.txt
- http://ut2003master.epicgames.com/serverlist/demo-all.txt
ut2003.exe unreal://ip:gameport
- Jack
UPaint Update Sep 30, 2002 - by Erik de Neve
A patch for the excellent UPaint program included with the retail version of Unreal Tournament 2003, created by Right Hemisphere, is available here: UPaint 1.0.1 self-installing patch. It addresses the following issues:
- Fixed an alpha bug with Face Projection - caused feathered mask areas to become transparent.
- Fixed a memory leak in the renderer - caused performance loss over time.
- Right-click will now cancel the polygonal selection tool.
- Erik
Unreal Tournament 2003 Tools Update Sep 27, 2002 - by Steven Polge
We have included a full suite of tools with Unreal Tournament 2003 for mod authors to make maps, game modifications, textures, and models. Below are a couple of updates to the UT2003 tools.
- If you are using the Unreal Editor, unzip this file into your UT2003\system directory, to fix a crash when rebuilding AI paths: Editor Update (1.26 MB). There is also a problem running the editor on Windows 98. We should have a fix for this problem posted shortly.
- We are also going to be making the Unreal Development Environment, a powerful script programming IDE, available very soon.
- Steve
Older News (2000 - 2002)
Unreal Tournament 2003 Demo! Sep 14, 2002 - by Tim Sweeney
The Unreal Tournament 2003 demo has been released! Download it here. Here are some important issues:
- You need to have DirectX? 8.1b installed to play the game successfully. If you get a crash on startup or at a random time during gamplay, this is likely to be the cause. Download it from Microsoft's DirectX? site.
- We'll be releasing a small patch tomorrow. This will fix a number of reported bugs, and also serve as the first public test of UT2003's new auto-update feature.
- There was a bug in the server browser that caused it to crash frequently under heavy load. This wasn't triggered until thousands of servers came online. We found a master server-side fix for this so the problem should be gone now. Sorry for the inconvenience!
- Server admins, if running multiple servers on one machine, please give each server a port number differing from the others by at least 20: for example, 7000, 7020, 7040, ... To work around the bug mentioned above, we had to ban servers that are running on consecutive port numbers. Restarting servers using the new port number guidelines will bring them back online.
- The master server was intermittently down or unresponsive earlier because Epic's Internet connection was flooded. We've moved it to a much faster server offsite and it should be running fine now.
- Several other crash bugs have shown up significantly in the bug reports. We're looking into these. Thanks to everyone who has submitted bug reports to ut2003bugs@epicgames.com.
- UT2003's global player statistics tracking system will be coming online tomorrow. To use it, you'll need to turn on stats tracking from the settings menu, and choose a unique name and password.
- Yes, UT2003's Joystick support needs work.
- Be sure to read the UT2003 Demo Frequently Asked Questions for information on other known issues and workarounds.
Also:
- We'll be updating the master server tomorrow so it exposes the server list publically, and working with the All Seeing Eye guys and QTracker guys and others to have them hooked up to UT2003 shortly.
More updates will follow.
-Tim
Unreal Tournament 436 OpenGL? renderer fix Sep 6, 2002 - by Daniel Vogel
The below replacement OpenGLDrv?.dll fixes extension detection with very large extension strings. I also uploaded the (embarassing) source for people who want to tinker with it.
- http://unreal.epicgames.com/files/UT436-OpenGLDrv-090602.zip (33KB)
- <a href="http://unreal.epicgames.com/files/UT436-OpenGLDrv-Src-090602.zip" target="_blank">http://unreal.epicgames.com/files/UT436-OpenGLDrv-Src-090602.zip (254KB)
Linux UT 436 Server Denial of Service Fix (really, this time) August 20, 2002 - by Jack Porter
Sorry, it took a little longer than expected! Ryan informs me this patch is good to go, and we've had some server administrators testing it for a few days. We suggest all server admins running on Linux install this patch.
Unreal Tournament 436 Server Denial of Service Fix July 18, 2002 - by Jack Porter
All UT server admins are encouraged to install this replacement IpDrv?.dll
This fix causes the UT server to correctly process ICMP port unreachable messages, and disconnect any connection it receives one for. This solves the Windows 2000 creeping ping problem and the denial of service attack mentioned in this article. Users not running UT servers do not need to apply this patch.
Gameplay Programmer Position August 31, 2001 - by Steven Polge
My crappy mail program ate a number of submissions. If you have sent mail to gameprogrammer@epicgames.com, please resend it.
Gameplay Programmer Position August 22, 2001 - by Steven Polge
See this page for details.
Updated beta OpenGL? renderer May 9, 2001 - by Daniel Vogel
This is a zip with latest beta version of the OpenGL? renderer which fixes the black screen at exit bug. Thanks to NVIDIA for helping me track it down. There have been no changes which could affect performance or visual quality.
For bugs please email utbugs436@epicgames.com
Updated beta OpenGL? renderer March 11, 2001 - by Daniel Vogel
This is a zip with latest beta version of the OpenGL? renderer. It mostly fixes a bug in parsing the ini file options. The previous released D3D driver was very buggy and as it only resulted in a performance increase on a very limited range of cards the zip doesn't contain an updated version. If you want to use D3D please use the D3D renderer from the 436 patch. To install the new OpenGL? renderer simply unzip it into your UnrealTournament?/System directory and modify your UnrealTournament?.ini file so the OpenGLRenderDevice? section looks like below. If you want to use the compressed textures from the 2nd UT CD simply copy them over replacing existing textures and if you have problems using the textures from the 2nd CD in online games you might want to ask the server administrator to update his/her server. If you have a TNT or TNT2 you might have to set UseTNT? to 1 depending on the version of the drivers you are using. If the game runs at ~ 1 frame per second it is a clear sign that UseTNT?=1 is needed. Also please make sure that your desktop is set to 32 bit before starting the game.
[OpenGLDrv.OpenGLRenderDevice]
RefreshRate?=75
DetailTextures=1
UseTrilinear?=1
UseS3TC?=1
UseTNT?=0
LODBias=0
UseMultiTexture?=1
UsePalette?=1
UseAlphaPalette?=0
Translucency=1
VolumetricLighting?=1
ShinySurfaces?=1
Coronas=1
HighDetailActors?=1
MaxAnisotropy?=0
AlwaysMipmap?=0
UsePrecache?=0
SupportsLazyTextures?=0
For bugs please email utbugs436@epicgames.com
New beta D3D and OpenGL? renderers January 19, 2001 - by Daniel Vogel
This is a zip with beta versions of both a new D3D and OpenGL? renderer. The new D3D renderer uses DirectX8? which should result in improved performance due to improved texture management. It also now supports the DXT1 compressed textures from the 2nd UT CD. The OpenGL? renderer is now up- to date with the D3D renderer and needs some settings added to the OpenGLDrv? setting of your UnrealTournament?.ini file.
[OpenGLDrv.OpenGLRenderDevice]
RefreshRate=60
UseTrilinear?=False
UseS3TC?=True
UseTNT?=False
LODBias=0
UseMultiTexture?=True
UsePalette?=True
UseAlphaPalette?=False
For bugs please email utbugs436@epicgames.com
Where to find the 436 "no delta" patch January 15, 2001 - by Steven Polge
If you are looking for the "no delta" version of the 436 patch (if you have the Creative Labs bundled UT version 428 or are having problems patching where the installer keeps asking you to insert the UT CD), check out 3d Gamers.
NGStats approved mods January 5, 2001 - by Steven Polge
A number of popular mods are now officially supported by NGStats. This means that results from servers using these mods will still count towards NGStats rankings. The approved mods include:
Assault Bonus Pack by Stefan Schwarz
http://www.planetunreal.com/eavy/assault.html
Boden's Toys by Brent Barrett http://home.pacbell.net/brent983/
UT Reporter www.fury.co.uk/ut
CSHP2 by Dr. Sin http://www.creativecarnage.com/CSHP
UTCV by ocr|mr.frost^badct; http://www.badct.de/utc/
DE Mutators by Digital Extremes http://www.digitalextremes.com
CCProtector by Dr. Sin www.creativecarnage.com/unreal/mutators
Spawn Protect by Stefan Schwarz http://www.planetunreal.com/eavy/
BDBMapVote by BDB http://www.planetunreal.com/BDBUnreal/mapvote.htm
New 436 PKG Commandlet November 13, 2000 - by Warren Marshall
A few people have been asking for this for quite some time now and it finally got to the top of my todo list, so here it is. This is a new ucc commandlet which will prove useful for some people ... particularly those creating things like skins and texture packages. This commandlet will import/export data from packages into/from directory structures. For example, this is useful for people making new skins who don't want to have to start up UnrealEd? to import the skin into a package and so on.
Rather than explain it here, I've created a separate page with full docs on it's use.
Just unzip this file into your Unreal Tournament system directory. That's all there is to it. Of course, it's recommended that you backup your current directory in case something goes badly.
NOTE : This is built on top of version 436, so this is only usable if you have that version installed. It MIGHT work on other versions, but it seems doubtful.
- Warren
Alternate D3DDrv.dll for 436 patch November 8, 2000 - by Steven Polge
This d3ddrv.dll will solve the problem some TNT1 and TNT2 users are seeing with text on their menus and HUD. Unzip the file into your UnrealTournament?\system directory.
- Steve
Unreal Tournament Patch version 436 released! November 7, 2000 - by Steven Polge
We've released the patch version 436 for the Win32 version of Unreal
Tournament. Simultaneously. Westlake
Interactive is releasing the Macintosh patch to version 436 and Loki
Games is releasing the Linux patch. Version 436 clients are network
compatible with all previous public releases of UT, but version 436 servers
support only 432 and above clients, so we encourage everyone to upgrade as soon
as possible!
We also have the server-only version of 436 available. Finally, we have the "no delta" version of the 436 patch. Its much larger (33 MB vs. 7.2 MB), and is intended for people having problems installing the normal patch - in particular customers with the Japanese version of UT or the 428 version bundled with certain Creative Labs products, or customers who get errors when trying to install a patch along the lines of : "The file system\botpack.u from the CD-ROM is not the expected version. Therefore, Unreal Tournament can't be patched."
Check the Unreal Tournament Versions Page for download locations. Here are the release notes. Send bug reports to utbugs436@epicgames.com.
- Steve
Epic Games Appoints Bruce Shankle Director, Unreal Engine Technology and Support
Raleigh, NC -- November 6, 2000 -- Epic Games today announced the appointment
of Bruce Shankle as director, Unreal Engine Technology and Support. Bruce
oversees the creation, organization and promotion of information, tools and
resources for supporting and empowering developers using the Unreal Engine
technology.
"On the Unreal development team, we've always taken pride in supporting our
partners directly by having Unreal Engine licensees get answers straight from
the developers who created the technology," said Tim Sweeney, lead
programmer and company founder. "Bruce's extensive experience in support,
training, and development tools enhances this team and allows us to continue the
expansion of our licensing program."
Bruce became deeply involved with the Unreal technology was when he developed
UnDox, an Unreal Engine developer productivity tool which generates HTML
navigational maps and documentation from UnrealScript? source code, enabling
development teams to manage and navigate large projects.
"There is an unlimited amount of power and potential in the Unreal Engine
and I am looking forward to helping developers further their games with this
industry-leading technology," said Shankle.
As co-founder of CodeMarine?, Inc., a developer training company in Raleigh, NC,
Bruce created developer tools and assisted in complex software design projects
for such companies as Microsoft, IBM, and Orbital Sciences. Bruce created
courseware and delivered classes to developers on emerging software
technologies. His articles and essays on software development have earned him a
place on the cover of several Microsoft developer journals, and his
documentation, samples, and source code can be found in the Microsoft Developer
Network (MSDN).
"Now that Unreal engine supports the PC, X-box, and PlayStation2?, and can render unprecedented character animation and large outdoor environments with ease, the market potential for licensing our engine has increased exponentially," said Epic Vice President Mark Rein. "Epic is highly committed to expanding our engine licensing business and through moves such as hiring Bruce to support our developers, we will continue to aggressively expand our market share."
The Unreal Engine includes the Unreal Editor for level creation, Unreal Script programming language, source code for the engine, editor & all Epic-created tools, complete game source code for Unreal and Unreal Tournament, unlimited support from Epic's award-winning technology team and access to updates and new features, such as the new skeletal animation system and large-scale terrain system.
The Unreal Engine is being used to power games from several top game developers including 3DRealms who are using the Unreal Engine to create Duke Nukem Forever and renowned role-playing designer Warren Spector at Ion Storm who created Deus Ex which recently won the prestigious Best PC Game title at the annual British Academy of Film and Television Arts Interactive Awards.
Epic is the only major 3D game engine provider with games available for the PC and PlayStation? 2. The unified codebase employed by the Unreal Engine allows developer making games for PC, Xbox and PlayStation?®2 console platforms to effortlessly retarget their code and content between platforms. Because of the unified codebase Epic was able to, during the development of Unreal Tournament for PlayStation? 2, recompile and run the exact same version of the game on both PC and the console platform. The provided a real cost savings and huge productivity boost. Unreal Engine source code for Sega Dreamcast, Apple Macintosh and Linux versions are also available at no extra charge to developers.
Epic Games Inc., based in Raleigh, N.C., and established in 1991, is a developer of cutting-edge PC games. The company is best known as the creator of hit PC 3D action games Unreal, an award-winning blockbuster hit having sold more than 1 million copies, and Unreal Tournament which has been recognized as the Game of the Year by leading gaming media outlets including Computer Gaming World, the No. 1 PC games magazine. Epic's Unreal Engine has been licensed to several top PC game developers for games in a variety of genres. In the past Epic was well known for it's shareware games including Jill of the Jungle, Jazz Jackrabbit and Epic Pinball. Additional information can be obtained through Epic's Web site at http://www.epicgames.com.
UT Custom Skins October 25, 2000 - by Steven Polge
As part of the skin cheat fix in recent versions of UT, skin packages must now be prefixed with the meshname + "skin". For example, the skin package FCommandoAsia?.utx will be rejected for use in online play. Renaming the package to FCommandoSkinsAsia?.utx will fix the problem.
Job Opening October 11, 2000 - by Steven Polge
We have a job opening for an Unreal Engine Senior Technical Support Manager. Check this page for the qualifications and responsibiilities.
UnrealEd? v432 Fix October 9, 2000 - by Warren Marshall
A few people have reported a weird crash with the dockable browsers in the new UnrealEd? included in the 432 patch. I believe I have a fix for that, and a few other things I noticed. You can grab that file here ...
To install this, just unzip it into your system directory. Here is a quick list of what is included ...
- the "TextureLock" option should work 100% now
- fixed the crash that some people were getting when docking a browser and getting a crash when trying to restart the editor
- rewrote "UEditorEngine::polySelectMatchingBrush" because SHIFT+B was crashing at random times. Should be stable now.
- brush clipping was merging faces on the resulting brush
- may have fixed the random "WinMain/message pump" crash
The first item may raise an eyebrow or two. :) TextureLock is
something I put in a while ago, but just haven't made a UI button for it.
What it will do is stop the editor from resetting texture alignment on brushes
that you manipulate vertices on. To access it, go into Advanced Options,
open up "Editor", then "Grid", and you'll see
the option there called "TextureLock". Change that to
TRUE and restart the editor. It should work for you now.
I'm 99% sure that I've fixed it, but if you still get the crash related to docking browsers, please email a copy of your "editor.log" file to unrealed2@epicgames.com.
Thanks!
- Warren
Unreal Tournament Patch v432 Released! October 5, 2000 - by Steven Polge
We've released version 432 for the Win32 version of Unreal Tournament. It is completely network compatible with all previous publicly released versions. Check the Unreal Tournament Versions Page for download locations for the Win32 patch, which is about 6 MB. Here are the release notes. We're also releasing new public headers for version 432 - check the downloads page. Send bug reports to utbugs432@epicgames.com.
- Steve
Editor Status Update September 22, 2000 - by Warren Marshall
Been a while since I did one of these so I figured I would just take a moment to show you a few of the new features that are coming in the next version of UnrealEd? ... and I brought pictures!
Texture Browser
You can now go into an "actual size" mode, similar to the texture browsers in some of the Quake editors.
You can still use the old way if you prefer it ... it's totally
configurable. Also notice that the texture names/sizes are much easier to
read now.
Sky Boxes
You can now view sky boxes in the editor when you go into the real time preview mode.
2D Shape Editor
You no longer have to export a texture, convert it into a BMP file, then load it into the 2D shaper in order to get a background image. Now, you can simply follow the steps shown in this series of pictures.
- Select a texture.
- Choose the "Get From Current Texture" menu option.
- Texture appears as your background image.
The 2D shaper will also support zooming in the next version. You can stop asking me for that now. :)
-Warren
Latest Unreal Engine News September 8, 2000 - by Tim Sweeney
Check out:
- New Unreal Technology Preview (Daily Radar)
- NVidia and Epic Announce Strategic Partnership (Yahoo)
-Tim
"Creeping Ping" bug with Windows 2000 August 31, 2000 - by Jack Porter
Some server admins have reported that after a while all of the players get increasingly
lagged out when the UT server is running on Windows 2000. This seems to happen only
when the remote administration webserver is running. We believe it may be related
to this Win2K issue:
http://support.microsoft.com/support/kb/articles/Q258/1/00.ASP?LN=EN-US&SD=tech&FR=0
The workaround is to only run the remote admin webserver when you actually want to administer your
server. Disable the remote admin webserver by removing the line which says
ServerActors=UWeb.Webserver
in your server's INI file. To activate the webserver, join your server as an admin and
type the following command:
admin summon uweb.webserver
When you've finished administering your server, you can disable the webserver with the command
admin killall webserver
- Jack
A Note to Modmakers August 25, 2000 - by Jack Porter
A lot of people have noticed that it takes the UT menus a long time to start up when you have lots of mods installed. This is because the code which creates the Mod menu loads all of the mod packages into memory to add them to the mods' items to the Mod menu. We've addressed this for the next UT patch, but we need modmakers to make a small change to the way they add items to the Mod menu. Previously, mod menu items were created with an .int file entry something like this:
Object=(Name=ChaosUT.ChaosUTModMenuItem,Class=Class,MetaClass=UMenu.UMenuModMenuItem)
To make your mod load quicker when UT starts up, you need to add a Description field on the end.
Object=(Name=ChaosUT.ChaosUTModMenuItem,Class=Class,MetaClass=UMenu.UMenuModMenuItem,Description="ChaosUT Config,Configure ChaosUT")
The stuff after the comma is the text that appears on the help bar at the
bottom of the screen. If you don't make the change to your int file, your
mod will still work with the next UT patch, but it won't load any faster -
so please make the change for the next release of your mod.
- Jack
Editor Status Update August 25, 2000 - by Warren Marshall
Just wanted to take a moment here to let everyone know about some of the editor stuff that will be in the next patch that comes your way.
2D Shaper
The 2D shaper can now handle multiple shapes, like the old one did. But
the coolest thing is that it can now handle bezier segments (you can have as
many as you want). You select a side, turn it into a bezier segment
and you get 2 control points that you can use to control the shape of the
segment. The segment has multiple detail levels so you can control how
smooth the curves are. It also allows you to create whatever kind of shape
you want, and it will triangulate the shape automatically when the time comes to
create a brush from it.
The file format has changed, so any shapes you've currently saved won't be
usable in this new one ... so print them out or something. :P
Movers
When you right click a mover there is a new menu option called
"Show Polys". What this will do is add the movers polygons into the
current BSP. You can then change the texturing, surface flags, etc of
those polys and those changes will be reflected on the mover itself. So
you don't have to recreate movers anymore to change the way they look. The
only drawback to this is that the polys it stuffs into the BSP -- they're just
temporary, but you will have to rebuild your map to get rid of them. But I
think that's a more than reasonable trade off. :)
Modes
"Brush Clipping" has been made into it's own mode
("MODE BRUSHCLIP"). This allowed several good things to
happen ..
- You can place clipping markers anywhere you want to now. On top of
brushes, actors, etc ...
- Placing clipping markers will no longer deselect the currently selected
brushes
- Many bugs have been fixed, including the ever nasty "can't clip
a brush that you've vertex manipulated"
- NOTE : this mainly applies to any NEW brushes you create
after getting this version. Old brushes may work OK if you transform them
permanently before trying the clip though ...
"Vertex Editing" is also it's own mode now ("MODE VERTEXEDIT").
Mainly for ease of use reasons. It's also got all of the dragging
weirdness worked out of it.
And there's a brand new mode, called "Face Dragging" ("MODE
FACEDRAG"). This mode allows you to resize brushes much like QER.
You select the brush(es) you want to drag faces on and enter this mode.
CTRL+Left clicking and dragging in a 2D viewport will grab the faces on the
selected brushes which are facing the mouse cursor and drag them. So
resizing a cube becomes a simple affair without having to resort to the snap
scaling tool. It's also great for skewing brushes. The important
difference is that the entire brush doesn't scale evenly while you drag ... only
the specific faces it grabs will move.
Misc
Some of these might be repeats from above, so if you see any that are, just
pretend you didn't see them ...
* Actor grouping (like vis groups in Worldcraft)
* made all browsers dockable inside of a master browser window (individually
configured)
* you can have a mix using this system ... have some browsers docked,
others floating
* added ability in texture browser to rename textures
* all browser windows will fill in a default filename when saving packages or
exporting items
* 2D shape editor
* you can build shapes however you want - no more worrying about
triangles
* shapes will auto-triangulate when you create a brush
* now supports multiple shapes
* supports bezier segments
* had problems with beziers on the left hand side of the shape
* would have problems with tons of polys in the shape
* now has the ability to scale shapes up or down
* brush pivot point should now be in the correct place after creating a
brush
* "Radii view" will now work in the 3D window by rendering the
collision cylinder as an 8-sided wire cylinder
* "Radii view" will also show the radius of things like lights in the
3D window
* made the "snap vertex" graphic on the bottom bar larger
* various vertex editing fixes/improvements
* Brush Clipping
* changed the marker to a little push pin
* clip markers are now numbered as you add them in - like QER
* clip markers have a circle drawn around them that doesn't scale with
zoom distance
* you can select clip markers by clicking the circle as well
as the actor itself
* fixed MeshBrowser? not playing individual animations
* changed vertex editing color to always be white
* may have fixed the way the tabs would overlap each in the "surface
properties" and "build options" dialogs
* turned the mesh viewer into a regular browser window - it can be docked and is
treated the same as the other browser windows
* cleaned up the UI on all the browsers - things are much more consistent and
cleaner now
* when an image is loaded into the 2D shaper, the lines should be dark gray
instead of black
* the image also shifts around when you move the origin. It
shouldn't - lock it at the origin.
* box selection mode will no longer occasionally leave the box sitting there
until you move the camera again
* fixed the "can't clip brush after using vertex manipulation on it"
bug. If something goofy DOES happen with the brush clipping it can be fixed 99%
of the time by transforming the brush permanently, and trying the clip again.
* CTRL+E hotkey for "Save As"
- Warren
Latest UT Buzz August 23, 2000 - by Tim Sweeney
Lots of cool stuff is happening with Unreal Tournament.
First, check out the latest preview at IGN PS2!
IGN also has coverage of Infogrames' upcoming product lineup. Infogrames has been a great partner and we're thrilled to be a major part of their plans.
Next, according to GameWeek, Unreal engine games are holding two of the top ten spots, even 2 and 9 months after release!
1. Diablo 2
2. The Sims
3. Roller Coaster Tycoon
4. Who Wants To Be A Millionaire
5. Who Wants To Be A Millionaire 2
6. Unreal Tournament
7. Slots
8. Deus Ex
9. Age of Empires II
10. SimCity? 3000 Unlimited
A big congratulations to the ION Storm Austin team for creating a great game, and for their project's commercial success.
-Tim
Unreal Tournament Full Server-Only v428 Released! August 14, 2000 - by Steven Polge
We've released a full server-only version 428 for the Win32 version of Unreal Tournament. It is completely network compatible with all previous publicly released versions. Check the Unreal Tournament Versions Page for download locations for the 72 MB zip. Send bug reports to utbugs428@epicgames.com.
We strongly recommend that server admins upgrade to version 428. We've made a lot of improvements to server CPU utilization and network performance, as well as fixing a lot of bugs and cheats. We've also added cool new features like file download redirection (added in version 413), which allows users to download files from another server at high speed, getting them up and playing faster without sucking bandwidth and CPU cycles from your server.
Here's the server specific changes made since version 400:
Version 428
- fixed 'killall bot' working on servers even if not admin.
- fixed creeping ping problem with Win2K.
- fix for occasional accidental port changes on servers using NGStats.
Version 425
- fixed the skin cheats
- fixed creeping pings problem for passworded servers
- fixed problems with passwords with spaces
- improved server CPU utilization
- improved prioritization of network traffic for low bandwidth users
- fixed ActorLineCheck?() crash
- fixed suicide spamming
- Last Man Standing now can have time limit
- fixed collision bug which cropped up in 420 (overlord)
- lowered NGStats thread priority on dedicated servers, so NGStats doesn't hold up level
changes.
- Added bExternalBatcher configuration option to [Engine.GameInfo]. If true, the game doesn't try to run the NGStats world log batch process.
Version 420
- fixed security holes with ServerRestartGame?() SwitchLevel?() and SwitchCoopLevel?()
Version 413
- fixed problem causing Bunch->IsError() assertion which was causing some server crashes
- fixed last man standing late entry cheat
- fixed head gib not replicated on headshot in network play
- fixed die at start of feign death and can't respawn in network game
- Servers can adjust the minimum compatible version number reported to clients using:
[IpServer.UdpServerQuery] MinNetVer?=405. This can be used to prevent older
clients from seeing your server if you are running a mod which requires a UT
version newer than 400.
- ngWorldStats version 1.5.5 is included in the patch.
- The UT server now queries ngWorldStats log batcher to determine if it is
correctly processing stats logs. 413 servers report this information
to UBrowser, and shows both whether ngWorldStats is enabled on the server, and
whether it is actually working correctly.
- Server admins can now redirect auto-downloads to a remote HTTP (WWW) server.
Custom content such as maps, skins and texture packages can be stored on the remote
website either uncompressed or in a compressed file format (.uz) for
faster downloads.
Version 405
- fixed problem with one of the 402 server optimizations causing pickups to be shown when they should be hidden if high packet loss
- fixed gold players showing up in CTF
- fixed deathsounds and hit sounds from other players not being heard in net games
- downloads from server are now rate controlled
- Servers can deny auto-downloading of content by setting AllowDownLoads?=false in the [IpDrv.TcpNetDriver] section of the Unrealtournament.ini file.
- reduced how long carcasses hang around on servers
- Improved bit packing for network packets (server performance improvement)
Version 402
- fixed guided warhead blowing up if no client response with 300 msec after spawning
- players can no longer switch to illegal team if server is full and force team balance set
- Major server CPU utilization improvements
- Steve
Unreal Tournament Patch v428 Released! August 13, 2000 - by Steven Polge
We've released version 428 for the Win32 version of Unreal Tournament. It is completely network compatible with all previous publicly released versions. Check the Unreal Tournament Versions Page for download locations for the Win32 patch, which is about 6 MB. Here are the release notes. Send bug reports to utbugs428@epicgames.com.
- Steve
D3D performance August 5, 2000 - by Erik de Neve
We plan to quickly address any performance, networking, and editor issues people may have with version 425 in an upcoming patch. If you have any issues with the Direct3D support in patch 425 and would like to help test the latest revision, download this d3ddrv.dll to replace the file that is in your UnrealTournament?\system folder. All feedback welcome at utbugs425@epicgames.com
- Erik
UnrealEd2? Trick August 4, 2000 - by Warren Marshall
Just a quick note about the 425 patch. You can now add your own buttons to the button bar on the left hand side, but I failed to document this fact in the patch readme file. So here's how to do it ...
To create an example button, add this to the end of your unrealed.ini file ...
[UserDefinedGroup]
NumButtons?=1
Button0=Align Camera on Selected Actors,AddMover,CAMERA ALIGN
This sets up 1 user defined button, defined by the "Button0" line. There are 3 fields, that break down like this...
1. Tool tip text ("Align Camera on Selected Actors").
2. The filename of the bitmap you want to display on the button ("AddMover"). This bitmap MUST be the "system\EditorRes" directory and be 30x30 pixels in size (for best effect). The color depth is not really important, but the UnrealEd? ones are 24-bit.
3. The "exec" command that you want the button to execute ("CAMERA
ALIGN"). This command gets sent to the editors command parser and executed. In the example, the command "camera align" will align all the viewport cameras on the selected actor.
And that's it! Adding more than 1 button should be self explanatory. :)
On another note ... I'll likely be posting updates to this page on a somewhat weekly basis letting you guys (specifically the editing community) know what I'm doing in regards to the editor and what to expect in future versions. Who knows, maybe even a screenshot or two. :)
UPDATE : It was brought to my attention that 425 has a small bug in it which prevents you from creating more than one user defined button. I made a quick fix here for the people who want to use this feature. Make sure you make a backup of your original unrealed.exe file before copying this one into your system directory. You can download the fix here : UnrealEd425-UserButtonFix.zip.
- Warren
Cool Web Sites August 3, 2000 - by Tim Sweeney
I just wanted to point out the web site UnrealEd.exe, an awesome resource for Unreal level designers. The site has an active set of Forums and, for beginners, a very thorough Tutorials section!
While I'm plugging web sites, FlipCode.com also deserves mention; it's a cool leading-edge site for game programmers, with an emphasis on 3D graphics.
Also, the frequently-updated Unreal community web sites, Unreal Universe and PlanetUnreal, are great resources for Unreal Tournament players, and UnrealEngine.com follows the broader scope of Unreal engine based games.
- Tim
Epic partners with Loki for Unreal Tournament Linux support August 2, 2000 - by Steven Polge
Here's the press release. You can also get Linux version 425 from Loki here. You must have the UT Windows CD to install the Linux version.
- Steve
Unreal Tournament Patch v425 Released! August 1, 2000 - by Steven Polge
We've released version 425 for the Win32 version of Unreal Tournament. It is completely network compatible with all previous publicly released versions. Check the Unreal Tournament Versions Page for download locations for the Win32 patch, which is about 6 MB. Here are the release notes. We've also released a full server-only version of 425. Send bug reports to utbugs425@epicgames.com.
- Steve
Final Unreal 1 Patch Released July 13, 2000 - by Erik de Neve
Yes - hell froze over, allowing the cows to skid home - we released the final Unreal 1 patch. Based on version 226 from July last year, it includes the latest Direct3D and sound code from Unreal Tournament. Click here for download locations.
- Erik
Unreal Tournament Patch v420 Released! May 22, 2000 - by Steven Polge
We've released version 420 of Unreal Tournament. It is completely network compatible with all previous publicly released versions. Check the Unreal Tournament Versions Page for download locations for the Win32 patch, which is about 5.6 MB. Here are the release notes. This version includes the new UnrealEd? version 2.0, described in this press release.
- Steve
IpDrv?.so Update for Linux 413 Apr 17, 11:25 AM - by Brandon Reinhart
I had a bad makefile when I built the release version of 413 for Linux, which caused it to build in a null interface for the IP driver. This means you won't be able to run servers or connect to network games with it. You can get a fixed IpDrv.so by clicking on that link. Put it in your System directory to fix the problem.I've also put together a new version of the patch for people who haven't downloaded it yet. This is version 413a:
I'm not having a very good weekend and now its pouring over into the week. /me buckles down for a mess of a week.- GreenMarine?
UT 413 for Linux Patch! Apr 16, 1:25 PM - by Brandon Reinhart
The Unreal Tournament 413 patch for Linux is up for release. This patch includes all of the game related fixes from the windows version of 413 and a lot of new stuff for people using the Linux client. The OpenUT team has added a ton of cool features to the client including:- Music! If you have libmikmod you can now play music inside of UT.
- SDL input! SDL adds a lot finer control over the game.
- SDL mesa GL support! Mesa support now in very good condition.
HUGE HUGE HUGE PROPS for the following hackers from the OpenUT? project:
OpenUT Programming
- John Fulmer
- Joshua R. Kaldon- Garvin
- Chris Gilbert
- Jeroen Janssen
- Jeremy Muhlich
- Marcus Sundberg
- Nicholas Vinen
- Daniel Vogel
- Doug Dahl
- Andreas Ehliar
- Albert K T Hui
- Jeffrey H. Ingber
- Matt Matthews
- Andy Piper
- Dustin Reyes
- Andy Ward
- Jeremy Weatherford
Speaking of open projects, I plan to put up a new version of the UT headers for Windows and Linux and all of the rest of the Unreal Tournament public source in a couple days. Also, I'll put up new debugging libs for 413 at the sourceforge site.
- GreenMarine?
Bright released Apr 10, 9:15 PM - by Erik de Neve
Buckling under popular demand from the UT skinning/mod community we are releasing a public version of 'Bright', our trusty old command-line-based texture palettizer tool. Get it right here. Documentation included in the zip file. We used this throughout development of Unreal and Unreal Tournament to convert source art textures into 8-bit formats with minimal loss of quality.
- Erik
413 Patch Issues Mar 30, 2:15 PM - by Steven Polge
Several issues with the 413 patch have been pointed out. We will have an updated patch as soon as possible to address these issues. In the meantime, if you are having D3D video performance problems, see Erik's update below. If you are having problems installing UT, or getting an error after installation that "UnrealTournament.exe is not a valid Win32 application" or "UnrealTournament.exe is too big to fit into system memory", try installing into the default directory for UT (c:\UnrealTournament). Our patch installer seems to be occasionally corrupting files when installing into different directory structures. We are still working on the problems of the 413 patch not working with minimum installs, and problems patching the Spanish/Italian version of UT.
- Steve
Direct3D support in 413 Mar 29, 9:00 PM - by Erik de Neve
The latest Direct3D code in version 413 was changed to be compatible with more cards. However, if your Direct3D experience after applying patch 413 is less than optimal, you may want to replace the d3ddrv.dll file in your Unrealtournament\system folder with this version of the file. Thanks to everyone who has given us feedback on D3D compatibility and performance so far. For detailed instructions and more options, refer to our Direct3D troubleshooting page.
- Erik
New Version of Unreal Tournament Mar 27, 4:30 PM - by Steven Polge
We've released version 413 of Unreal Tournament. It is completely network compatible with all previous publicly released versions. Check the Unreal Tournament Versions Page for download locations for the Win32 patch, which is about 5.6 MB. Here are the release notes. We will shortly be releasing the patch for Linux, as well as free, downloadable standalone version of the Win32 and Linux servers.
- Steve
News Tidbits Mar 8, 7:45 PM - by Tim Sweeney
Happy birthday to Unreal Universe, the cool Unreal Tournament news site run by Robert "Apache" Howarth!
And, at GameSpy.com, it's Engine Week, featuring a series of interviews with engine developers pimping their wares.
Tomorrow, we're headed out to the Game Developers Conference in San Jose, California to show the latest Unreal engine goods.
-Tim
GameSpy? Mod Developers Week Feb 28, 10:30 PM - by Tim Sweeney
Check out the keynote article on the state of mod development, by our own Brandon "GreenMarine" Reinhart. This is the first feature in GameSpy's new Mod Developer Week feature.
Upcoming articles in the series feature Jesse Taylor from the Infiltration mod team for Unreal Tournament, and David "crt" Wright of Rocket Arena for Quake 3 and Unreal Tournament.
Now is an exciting time for mod development, as the best teams of enthusiasts are earning tremendous praise, opening up serious biz opportunities. This dynamic reminds me of the shareware game business around 1991 when Epic, Apogee/3D Realms and id Software were born. Back then, we were just a handful of kids making games for our own enjoyment, and releasing them online for others to enjoy -- hoping that we might be able to make some money to pay the bills.
Today all three companies are industry leaders.
Now, think about where today's best mod authors will be in 9 years!
The advantage that enabled id, 3D Realms, and Epic to rise to the top is something that today's mod authors have too: we're in the middle of a thriving community, and that gives us an awesome feedback loop. If we release something that sucks -- whether it's something big like Unreal 1's network code, or something subtle like weapon balancing -- then thousands of people will email us complaining until we fix it. Thousands of smart people besides ourselves are expanding the game universe by running web sites, making mods, building levels, and running servers, and they let us know what they like and dislike. In this kind of pressure-cooker environment, only good games and good ideas survive.
-Tim
UT Bonus Pack Released! Feb 25, 5:25 PM - by Brandon Reinhart
The UT Bonus Pack has been released! This free expansion to Unreal Tournament includes 3 new player models, a bunch of new DM and CTF maps, and a ton of extra skins! You can download it from GameCenter?:To install the Bonus Pack, just double click the .umod file and it should begin installing. If you are having trouble, extract the ZIP file to a temporary folder such as C:\Temp, and then use Start | Run to run the following command:
C:\UnrealTournament\System\Setup.exe install C:\temp\UTBonusPack.umod
Hungarian translation of UT available Feb 25, 12:00 PM - by Steven Polge
Tibor Kaszás created a hungarian translation of Unreal Tournament, including
player and narrator voices. It is available at www.extra.hu/magyar_ut.
Common Questions Feb 22, 6:20 PM - by Tim Sweeney
9 out of 10 doctors say now would be a good time to prune the Unreal tech page, and that sounds like a good idea to me. I'd like to start over by talking about a bunch of things I've been meaning to cover, but never found the time.
Common Questions I'm Asked
Q. I'm an aspiring game developer and I want to get into the
business. What's the best way to be hired?
A. The single most important thing game companies will look for is past
experience: what cool stuff you have worked on previously. This might
sound like a Catch-22: "You need experience to get a job, and you need a
job to get experience". But nowadays, the mod communities around
leading games like Half-Life, Unreal Tournament, and Quake 3 Arena are great
proving grounds where aspiring game developers can work on projects freely
(mostly in their spare time), and build levels, mods, and other game-play
enhancements. In the past few years, the majority of new talent Epic has
hired have been people from the Unreal and Quake communities:
- Steve Polge, creator of the ReaperBot? mod for Quake.
- Brandon "GreenMarine" Reinhart, early Unreal mod maker and writer of cool UnrealScript? programming tutorials.
- Jack "mek" Porter, Unreal mod maker and PlanetUnreal? news correspondent.
- Alan Willard, maker of cool Unreal and Quake levels.
- Shane Caudle, amazing artist and level designer who was building his own Quake TC.
While past work on cool projects is the number one criteria for most game developers, having a University degree is a major advantage. While this isn't a must at Epic, most larger game developers place more emphasis on having a degree. Besides that, college is a great opportunity to learn useful stuff. My degree is in Mechanical Engineering (University of Maryland) -- by the time I was in college, I had been programming for about 10 years and didn't feel getting a computer science degree would be challenging. So, I chose engineering, and that turned out to be a major challenge, and incredibly valuable.
The math I learned there, including vector calculus and finite element analysis, which are directly applicable to 3D games, is something I never would have studied independently. Self-taught programmers pick up algorithms just by looking at other code and reading the occasional book (that's how I learned to program). But differential equations are just not the kind of thing you're likely to rediscover on your own, though understanding them brings clarity to lots of real-world problems you'll encounter.
Q. What do I need to get started making mods for popular games?
A. Just a copy of the game, the editing and compiling tools, and access
to the web sites that contain information for mod authors. For Unreal
Tournament, you just need a copy of UT, which includes the editor (on CD#2)
and all the UnrealScript code for the entire
game; visit the Unreal community web sites (listed at the top of this page) for
tons of pointers to Unreal information. For Quake
3 Arena, you need the retail game and the utilities; visit PlanetQuake
to get started. For Half-Life,
get the game and see PlanetHalfLife
for tips.
Q. I'm working on a project; do I need to license the Unreal
Tournament engine or sign any paperwork?
A. That depends on what you're doing:
- If you are making a freely available mod, all you need is the retail version of the game.
- If you are using the engine for non-commercial academic purposes, all you need is the retail game. Lots of people have been using the Unreal Tournament engine as part of university projects and theses.
- If you are a startup game developer and are prototyping a game in the Unreal Tournament engine (using the tools available in the retail version), you don't need a license agreement while you're prototyping the game. You do need a license agreement in place before you advertise a game, sign a publishing agreement, or otherwise profit from the game.
Programming Languages
Ever since my GameSpy Developer Week article, "A Critical Look At Programming Languages", I've been getting questions about whether we plan to "do something about it" and define a new programming language. The answer is, we're already doing that to a certain extent with UnrealScript, which is a high-level, object-oriented, platform-independent language with some cool extensions aimed at game code development.
As an engine developer, we'll always be involved in language design to a certain extent. In the future, the scripting language could evolve into a simpler form, more true to the "scripting" term: controlling sequences of in-game events. Or, the scripting language could grow to subsume even more of the engine code. We'll be evaluating these options anew with each major iteration of the engine, doing whatever is most appropriate for the technology, recognizing the benefits and drawbacks of going with well-known proven tech, versus creating newer, better tech.
Also...
- The cool soon-to-be-public site Linux Newbie already has posted a cool article on how to get started with Unreal Tournament under Linux. This site is a great idea; the biggest barrier to widespread Linux adoption right now is the difficulty of getting started, and now in standard decentralized Linux fashion, sites and resources are starting to pop up to address this.
- Common answers to UnrealScript? questions on ChessMess.com (saw this on Blue's News).
-Tim
Action UT! Feb 22, 2:00 AM - by Brandon Reinhart
Kick ass! The A-Team has announced their latest mod in the Action series will be for UT! Here are the details from their announcement:The A-team, makers of Action Quake2 and Action Half Life, would like to announce that we are in active development of Action Unreal Tournament. Action is the game that lets you experience your favorite action movie from your very own PC, bringing realism with a fast paced touch. Have you ever seen a good action movie, and wished your regular old death match could be as furious, fast, and exciting? Action does that and more. With the Unreal Tournament engine powering Action, be prepared for an experience not soon forgotten. Watch for it at: http://aut.action-web.net
The Action Team has really been hardcore on putting together this project, I've already seen their discussions on weapons and features and it looks like its going to be packed. Its really cool seeing top notch mods like this move to Unreal Tournament!
Older News (1999)
November 29, 1999
Updated UT Linux Distribution (400A)
An updated version of the UT Linux distribution is now available. This version fixes several installer problems and adds a few performance improvements. If you already have UT Linux installed, just unarchive the LinuxCoreSystem?.tar.gz file in your UnrealTournament? directory and add DGAMouseEnabled?=True to the [XDrv.XClient] section of your UnrealTournament?.ini. Otherwise, follow the installation instructions in the README.
The README covers the changes and has additional instructions.
- GreenMarine?
- Epic Games, USA DOWNLOAD UT Linux 400A (3.47MB)
November 22, 1999
Running Full-version Servers with the Demo .INI files
Server administrators - please do not run full version of UT with the .ini files from the demo version. It causes everyone to have a messed up skin. To fix this problem without replacing your .ini files, make sure the [Engine.GameEngine] section of the .ini has the following ServerPackages? lines:
ServerPackages=SoldierSkins
ServerPackages?=CommandoSkins
ServerPackages?=FCommandoSkins
ServerPackages?=SGirlSkins
ServerPackages?=BossSkins
ServerPackages?=Botpack
- Jack
November 19, 1999
Porting Unreal I maps to Unreal Tournament
Unreal I content is automatically replaced by Unreal Tournament content if you run an Unreal I DM map with one of the Unreal Tournament gametypes. However, we recommend that you manually replace the Unreal I inventory items in your level with their UT equivalents and release an updated version of the map. Otherwise, both the Unreal I and UT versions will be loaded on the content, which will cause swapping on clients with low amounts of memory.
- Steve Polge
November 16, 1999
This document describes how to set up your levels to support the new UT gametypes and bots.
- Steve Polge
November 9, 1999
Patch for server performance
This patch (489 KB) contains improvements to server performance for version 348. We are also working on some other optimizations for the full version, but we did not want to include any changes which impacted network compatibility in this patch.
- Steve Polge
October 20, 1999
Demo Playback Crash Fixed
Here is a fix (488KB) for the crash in version 348 when playing back recorded demos. It does not break net compatibility and is only needed if you want to play back recorded demos. Sorry about this oversight.
- Jack
UT for Linux 348 Demo README
Here is the README for the UT Linux demo.
- Brandon "GreenMarine" Reinhart
October 19, 1999
New Unreal Tournament Demo Released - Version 348
This version will be the last demo version avaiable before UT appears on store shelves. This version is NOT network compatible with previous versions, so we encourage everyone to upgrade. It doesn't contain any new content - only performance improvements and bug fixes. ngWorldStats will also be reset for this demo release.
- Download links are available here. More mirror sites will be added soon!
- There is a list of changes since the last demo.
- Be sure to check out the list of Known Issues as well.
- Jack
October 6, 1999
I recently upgraded to Windows 2000 Release Candidate 2, and wanted to mention that it's extremely solid! With NVidia's latest Windows 2000 TNT/GeForce drivers, DirectX7?'s Direct3D and OpenGL? both work flawlessly. What's cool about the new OS:
- High-performance DirectX7? Direct3D and OpenGL? support.
- USB mouse support -- mouse movement is very smooth.
- Much more stable than Windows 98, especially for software development.
- Good administration tools, more powerful than NT4 and far easier to use.
- Great international support.
- Dual processor support.
- Plug and play.
Windows 2000 Internationalization
This is a topic we're very interested in, because we're always trying to make our games and engine as widely accessible as possible. As a matter of fact, today I'm working out the font management issues for the Japanese version of Unreal Tournament.
The Windows 95/98 OS had very weak international support, and a confusing array of incomplete features such as supporting Unicode in a few API's but not all, weird and undocumented multibyte character set handling, and mixed ANSI/OEM file system conventions. Localizing Windows 9X apps is a very difficult undertaking.
On the other hand, Windows 2000 is by far the most thoroughly internationalized piece of software I've ever seen. All international versions sharing the same binaries, fonts, and input support. Everything is 100% Unicode. So, you can open up a Japanese language document on your English computer, visit Arabic web sites, use an Input Method Editor to type in Chinese text, and so on. While most people might not care about that, it's infinitely beneficial for developers to have that power at their fingertips, because it enables you to do all of your international development and most of your testing without jumping through hoops and installing multiple OS's.
When Windows 2000 makes its transition into the consumer OS market, it will be a great day for worldwide software development.
-Tim
October 2, 1999
Unreal Tournament players overtake QuakeWorld? at #5
Top Game Servers By Players
from http://www.gamespy.com/stats/index.shtm
@ 7:52 PM EST
Game
Servers Players
============== === =======
Half Life 1502
4344
Quake II
1628 1711
Starsiege TRIBES 589 1162
Quake 3: Arena 1040 1156
Unreal Tournament 423 520
Quakeworld 623 517
Kingpin
127 256
Unreal
134 144
Turok 2
20 43
Descent 3
8 23
-Tim
October 1, 1999
TNT Users, Try This!
Tweaks:
- Play in 16-bit color, which is significantly faster than 32-bit color.
- Turn the detail options down in the Preferences/Video menu.
- Use the "-" key to reduce the HUD size.
- In Preferences/Game, turn off the display of your weapon.
- If you have enabled Advanced Options / Audio / Use3DHardware audio support, TURN IT OFF for now! Big driver performance problems.
Experimental improvement for the brave:
- Try NVidia's Beta Detonator 3.34 drivers (thanks to <a href="http://www.anandtech.com/" target="_parent">Anandtech's site for the link).
- Try putting this new D3DDRV.DLL into your \TournamentDemo\System directory. Please back up your existing one first!
These two downloads are beta and haven't been rigorously tested yet, but in our gameplay sessions here, they're a huge improvement on low-RAM machines with the TNT, TNT2, and GeForce256?.
Please let us know how these work for you, by emailing utbugs@epicgames.com
Latest Findings
We've been benchmarking UT performance and memory usage on many 3D cards, and we've found the source of the performance problems on 64-96 meg machines with TNT/TNT2 cards.
Our measurements indicate that the TNT/TNT2 drivers consume up to 25 megabytes of page-locked system memory with UT, while other Direct3D cards don't. On machines with 64-96 megs, that kills performance, as one would expect. The game runs, but data is swapped to the hard drive so frequently that playability is compromised. We've been comparing with other 3D cards and aren't seeing the issue on the Rage 128 or Voodoo3 under Direct3D.
System-wide memory allocations measured with SYSMON.EXE on a 64-meg Celeron running Windows 98 SE:
- TNT D3D: 51 MB baseline, 122 MB playing UT in 16-bit color, 134 MB playing UT in 32-bit color.
- Rage 128 D3D: 55 MB baseline, 107 MB playing UT in 16-bit color, 109 MB playing UT in 32-bit color.
- Voodoo3 D3D: 51 MB baseline, 100 MB playing UT in 16-bit color.
We're working with the NVidia guys to track down the source of the extra 25 megabytes of memory consumption. I'm going to hold off on posting our benchmarks till we've had a good chance to deal with the memory consumption issue, so everyone is on a level playing field. The NVidia cards already perform well on PC's with lots of RAM, so they should be in good shape once the memory issues are solved.
Links
Unreal Technology in the news:
- The Little Engine That Can Do More - MSNBC
- Playing With The Big Kids - Newsday
Cool Sites:
- Unreality.dk - Cool Unreal site & community host in Denmark.
- GameSpy.com - The GameSpy? empire's new portal site. Check out their live stats page, where Unreal Tournament is #6 and rising quickly. Hopefully someday we'll overtake that 3-year-old QuakeWorld? thing. :-)
-Tim
September 29, 1999
More Hardware Troubleshooting
- We received some more confirmations of Unreal working better on TNT's with the Creative
Labs unified drivers using Glide than Direct3D. If you have a Creative Labs TNT card
and have having performance problems, try that. Especially if you have under 128 megs of
RAM.
- Lots of reports of slowdowns from users with Monster Sound's who have enabled the
"Advanced Options / Audio / Use3DHardware". If you're having this
slowdown, disable Use3DHardware and try again. Then please email utbugs@epicgames.com and let us know whether that
helped. I've seen three confirmations from users that their problems (huge slow
down) went away after disabling this.
- Jack and I have been tracking down the performance problems with the TNT on 64-meg (and
lower) machines. To our great surprise, it appears that the TNT is keeping duplicate
system memory copies of all our textures--we saw system memory grow and shrink in almost
exact proportion to our "supposed" video memory texture allocations. Thus
the game uses an extra 12-26 megabytes of system memory--a very inefficient allocation of
resources. This is a big surprise, because the NVidia guys has always told us this isn't
the case.
Problem in my code? I don't think so, but I'd love to be proven wrong. I'll follow up with our henchmen at NVidia and Microsoft and see if we can track this down...
Direct3D Anomalies
We've been looking at the feedback on Direct3D performance and investigating some strange reports. Recently, we've mainly been testing on 96-meg and 128-meg machines (I have a Celeron 400, Jack Porter has a K6-2 450). On these machines, TNT1 performance is good -- average 28 fps at 648x480, 25 fps at 800x600. The TNT2 performance is significantly better.
However, upon removing some RAM and testing Direct3D on a 64-meg K6-2, the "precache" time increased by about 5X, and performance dropped to a few frames per second. These performance drops don't occur in the software renderer, and don't occur in Glide. Something is going wrong between Unreal, Direct3D, and the TNT's Direct3D driver, and we're investigating.
Overall, the feedback indicates a very wide variance in performance among TNT users, much more so than with any other card. Our internal testing has indicated this too; for example, we've found (and worked around) a lot of driver bugs that only happen on one machine, and not others with otherwise similar configurations.
Don't Try This At Home Dept.: Some TNT users have reported that tweaking their BIOS's "AGP Aperture Size" improves performance on 64-meg machines. We have tried this and couldn't find any differences on our 64-meg test machine. Others report that the Creative Labs unified drivers (with TNT Glide support) outperform Direct3D on their cards. If anybody finds definite improvements or workarounds, or has insight into what's happening, please email utbugs@epicgames.com and let us know.
Thanks.
Athlon In The House
Mark Rein walked into Best Buy and picked up a 650 MHz Athlon off the shelf -- an IBM Aptiva with a TNT2 Ultra bundled in. Fastest off-the-shelf machine we've ever seen! Click here for our in-depth Athlon review.
-Tim
September 28, 1999
Unrealty
More on this later, but for now I just wanted to mention that the Unrealty team at Perilith Industrielle have released a demo showcasing the Unreal Technology applied to real-estate walkthroughs. They've also have posted a research paper on the topic, which was presented at VSMM'99.
UnrealTournament?.co.uk
Check out UnrealTournament.co.uk, a cool and growing news site with a focus on the UK and Ireland. There's a lot of excitement over UT in the United Kingdom and Europe in general, as we experienced firsthand when a bunch of the guys went to the ECTS show in London.
-Tim
Known Issues With The Demo
The known issues list is continuing to be updated, and is accessible here.
Unreal Tournament Demo Mirrors
Just got the latest list of UT download mirrors from Blue's News.
Full Demo:
Patch for 3dfx-only demo:
Final Demo File Information
A few versions of the final demo that were not intended for release have been released on various news sites. We made these builds of the demo so that server operators could set up servers. Unfortunately, a few unscrupulous server operators decided to release these builds on webpages. This only causes to create confusion. We have been working with GT on synchronizing a release and have been working on final issues with the demo.
Specifically, a test patch for upgrading the 3dfx only version of the demo was made available. This patch worked, but lacked the new DeathMatch? map being released with the final demo. We pulled the patch, but various news sites had already made it available without our authorization.
Finally, a version of the demo "338a" has been going around that is also not legitimate. This version was built by the Epic team last night to test for a server map change problem (that was fixed). This version was mistakenly copied to the server operator's ftp, somebody downloaded and put it up for download.
Following me still? Here are the file names of the final demo and the file sizes. Demo version 338a will not work with the final demo. It is not new and you shouldn't download it if you find it.
File: UTDemo338.exe
Size: 55,603,712 bytes
Description: This is the final demo. Website administrators, please make sure the version
you end up mirroring matches this.
File: UTDemo338cPatch.exe
Size: 9,892,864 bytes
Description: This is the patch to update the 3dfx demo to the final demo.
Please don't mirror anything else. It only serves to confuse the end user. We apologize for the confusion and the difficulty.
Brandon Reinhart
September 24, 1999
Demo Changelog
We've posted a changelog of all the bug-fixes and improvements we've made since the 3dfx beta. These improvements will be in the full demo, which will be released in a couple of days. You can check out the change log here.
- Jack
September 22, 1999
DirectX7?
Microsoft has released DirectX7?. You can read about it and download it from Microsoft's DirectX? Page and download it on their Download Page.
Now that DirectX7? is available, we're doing final testing and tweaking on the upcoming Unreal Tournament demo with Direct3D and OpenGL? support, coming in the next few days.
One thing we've found on DirectX7? is that NVidia TNT2 performance is not fill-rate limited until you get to very high resolutions. During testing, performance at 640x480 seemed a bit slow, but as we increased the resolution, the frame rate was hardly impacted at all. So 1024x768 seems to yield the best overall experience on this card.
I've enabled support for 32-bit color textures under Direct3D, which significantly improve the graphical quality, with a 10-15% frame rate impact.
The Direct3D code now uses vertex buffers, which speeds up mesh and text drawing a bit.
What about OpenGL??
We're still maintaining OpenGL? sypport, though it's not as much of a priority at the moment because texture management performance in GL on Windows is significantly behind Direct3D. It's still useful in NT4 and Linux of course. I've been advocating a GL extension which would enable the fine-grained control over texture management that has led to such an improvement in Unreal performance under Direct3D. Here is a suggestion I sent to the OpenGL? ARB.
I've been maintaining the Unreal / Unreal Tournament rendering code under both Direct3D and OpenGL? simultaneously for a while. They used to have approximately equal performance back when I was using Direct3D's "driver-managed textures" (similar to the one and only OpenGL? option for texture management, which is transparent to the application). Unfortunately, the performance wasn't very good, and the memory usage was nuts because our game uses a huge amount of textures, and the automatic texture management in Direct3D and OpenGL? had to keep duplicate copies around as "backing store" to the copies in video memory.
However, I recently rewrote my Direct3D code to manage textures explicitly. I create a limited number of textures of all possible sizes, forced to be in video memory, and then at runtime swap my actual game textures into those "video memory textures". This way, I have complete control over texture management, and can make optimal decisions about where to put textures, based on the constraints of my app, such as:
- Texture usage patterns.
- Decompressing textures at glTexImage2D time using my own internal formats.
- Having a background thread load them off disk speculatively and stick them in video memory when needed.\
- Other nonlinear, possibly time-variant priority factors.
When I replaced D3D's default texture manager with my own code, Unreal's performance and memory usage under Direct3D improved very significantly, to the point where it's not worth bothering playing the game in OpenGL? anymore.
So, my question is, does anybody have plans to add an "extended version of glBindTexture" which lets the application tell the OpenGL? driver, "allocate this texture in video memory, keep it there, and never swap it out"? If an option like this existed, I could do the same kind of high-level optimizations as I did in Direct3D, and probably get a comparable increase in performance. Obviously, video memory is a limited resource, so at some point those glBindTextures will fail if video memory fills up, and have to return an error code.
This is a bit lower-level than GL's existing glBindTexture mechanism, but I think it's justified by the need to support apps which use huge quantities of textures and have to manage them carefully in order to maintain realtime frame rates.
For example:
If the
GL_EXT_BIND_TEXTURE_2D_VIDEOMEMORY
string is exposed, then you can replace a call to
glBindTexture( GL_TEXTURE_2D, MyBindId? )
with
glBindTexture( GL_TEXTURE_2D_VIDEOMEMORY, MyBindId? )
and the texture is guaranteed to be allocated in video memory and never moved around by the GL driver's texture manager.For my application, glPrioritizeTextures(?) isn't a viable solution, because it still requires extra backing-store copies of textures to be kept in system memory so they can be swapped in and out. In addition, implementing my own texture manager on top of the existing, unextended glBindTexture isn't at all efficient, because I don't have any way of knowing how many textures I can allocate before they start spilling out of video memory, and in addition most GL drivers do lots of extra internal memcpy's in the process -- and with big textures, having lots of unnecessary 256K memcpys (for 256x256x32-bit textures) just kills performance.
Such a solution would benefit Unreal engine games on Windows, Linux, and possibly Mac such as Unreal Tournament, Duke Nukem Forever, Deus Ex, Wheel of Time, etc etc etc. As well as other developers' texture-intensive games that use OpenGL?, such Starsiege: Tribes (the developers have been running into this same issue).
Experiencing poor Internet play on your Voodoo3 3500TV?
As Voodoo Extreme reports, the Voodoo3 3500TV's WebTV? installer does some evil things to your Internet setting, causing many games (including Unreal Tournament and Quake 3 Arena) to experience poor Internet play:
Hello, We are aware of the problems that the Voodoo3 3500TV is experiencing with online games. Many of these problems can be cured by removing WebTV?, however that will disable the Visual Reality software. The problem usually can also be cured by removing the Internet Explorer 5 upgrade from Windows98. While these are just a work around, and not really fixes, both options usually will cure the problem until 3dfx releases a real fix. We are currently working with Microsoft to try and figure out whether the problem is due to Microsoft software (WebTV? and IE5) or 3dfx software (3500TV drivers and Visual Reality).
Thank you for your patience,
Aaron D. Patton
3dfx Interactive Email Support
-Tim
September 18, 1999
New Unreal Engine Licensee?
Just saw <a href="http://www.segfault.org/story.phtml?mode=2&id=378b5a17-016888e0" target="_parent">this exciting story mentioned on <a href="http://www.bluesnews.com/" target="_parent">Blues' News. :)
-Tim "so you thought the Unreal engine was just for games?" Sweeney
A3D and EAX Support
3D sound acceleration is absent from the Unreal Tournament 3dfx demo while we sort out some recent code changes, but will be in the full demo coming next week. A big thanks to the A3D guys, Skip McIlvane? and Scott Etherton for helping us get the code back up and running.
-Tim
Quick Note to Server Admins
Server administrators - Please turn off the "Tournament Mode" checkbox. It forces the game to wait for all the player connections to fill up before the game starts. This is very frustrating for players when the Max Players is set to 16.
Also, if you're getting DNS errors trying to connect to the remote server administration, you might want to check Advanced Options. Under Webserver, be sure your ServerName? is BLANK. This setting is used by the webserver and is not related to the server name as it appears in the Server Browser. This corresponds to the ServerName? entry in UnrealTournament?.ini under the [UWeb.Webserver] section.
Remote Administration Server Crash Fix
I've made a fix for the WWW-based Remote Administration - In version 322 this seems to crash some machines instantly and works fine on others. One of my machines had no problems but the other would crash as soon as I logged in. If you're a Server Administrator you should download this file and extract it into your TournamentDemo?\System directory. Server administrators only, please. No-one else needs this fix.
- Jack
September 17, 1999
Demo Version 321 -> 322 Patch Now Available
There is now a patch available for users who have downloaded the older 321 version from sites which accidentally posted it earlier today. This patch updates your version of the demo to 322. You only need this pacth if your version of the demo says "Version 321" in the top right corner. The patch is available here. The file is 5.35 MB (5,612,778 bytes).
Update on Demo Version Numbers
William Harms from PCGamer let me know that PCGamer and Next Generation are now running the correct version of the demo. The correct version of the .exe file is called UTDemo3dfx.exe and is 51,305,472 bytes.
On Demo Version Numbers
There is only one version of the demo which should be around. In the top right of the menus it should say "Version 322". Version 321 was the version we were testing the night of the Hurricane - if you have this version and got it from an FTP site advertising it as the UT demo, please let me know. Note that Version 321 will NOT work with the 322 demo (and you won't see 322 servers in UBrowser)
- Jack
The 3dfx Unreal Tournament Demo Has Been Released
3dfxgamers.com have released the Unreal Tournament demo. Download it NOW from one of these links (50MB)!
Download UT demo from 3dfxgamers.com.
Download UT demo from 3dgamers.com
Download UT demo from agn3d.com
Download UT demo from Mplayer.Com.
Download UT demo from PC Gamer Online.
Download UT demo from Sharky Extreme.
<a href="ftp://ftp.unrealfiles.com/pub/unrealfiles/ut/official/demo/3dfx/utdemo.exe" target="_top">Download UT demo from UTFiles.com.
Download UT demo from UnrealUniverse?.com.
Download UT demo from Won.net.Please visit the UT Demo Known Bugs and Issues page before posting a bug report.
- Jack
All is well!
Sorry the demo wasn't out yesterday. 3dfx worked all night on getting their infrastructure ready to handle the demand. They are targeting demo release for Friday morning.
While they were working that out, Tim and I updated the demo archive. I put the ngStats fix in there so it is not necessary to download it. That's one good thing.
Based on feedback from testers, I've reevaluated my method of calculating ping in UT. After ECTS I decided to convince Tim we should subtract frametime from the ping calculation. This would result in the ping being a direct reflection of network performance (or close enough).
In retrospect this was a flawed decision for various reasons. I have changed the ping calculation to better reflect gameplay. This means that you might see a ping higher than you would expect when you join a server. I feel that this is better than seeing a lower ping than you would expect. I would rather you say "I'm getting a good game here, although my ping seems high" than "If my ping is this low, I should be getting better gameplay."
Big thanks go to Evil Avatar. I sent him various test DLLs with changes in the way I calculated ping. He then ran the game and played for a while. When he exited he told me the ping that my changes reflected and whether or not the gameplay felt to be at that level. We tested three or four variations and ultimately settled on the one I felt was the best in theory and turned out to be the best in practice.
You would be surprised how much ping can affect ones perception of a match even if the actual conditions behind a match are the same. I feel the current ping report more accurately reflects what people have come to expect from net gameplay. That removes some of the butterflies from my stomach, but I'm still apprehensive. This is the first demo of my first commercial game so I'm pretty nervous!!
Make good use of utbugs@epicgames.com to send us feedback. We'll definately be reading it.
- Brandon "GreenMarine" Reinhart
September 16, 1999
ngStats in the 3dfx UT Demo will need to be updated.
Okay, the version of ngStats in the 3dfx demo has a problem with it. It causes the player's name to show up wrong when you view your stats. The NetGames? guys are putting together a fix and will have a new ngStats for UT distribution on their website soon. Probably before the demo hits the net. I'll update my plan and our various webpages with the URL when its available. Only people downloading the 3dfx UT demo and playing with [local] ngStats will need to get this fix. I suggest you get it when its available because ngStats is cool and fun to play with.
When you first play UT make sure you pick a skill level that suits your abilities. UT's first four skill levels are easier, so that if Joe Average buys the game he can have fun without getting spanked by the bots. If you play online, chances are you'll want to pick one of the top 4 skill levels. In the full version of UT, the skill level will ramp up as you play. In the demo it does this a little, but because there are only 5 maps its hard to feel the ramping.
Brandon "GreenMarine" Reinhart
September 14, 1999
Unreal Tournament demo schedule
To quote Voodoo Extreme quoting me :), here's the Unreal Tournament demo release plan:
- Windows 3dfx demo this week.
- Windows Direct3D/OpenGL next week.
- Linux Glide/OpenGL soon after.
- Mac timing not figured out yet.
DirectX7?
Microsoft's new DirectX7? API will be released soon. I've already ported Unreal Tournament's Direct3D code to DirectX7? and have noticed a nice speedup on the TNT2 and GeForce256?, primarily due to improved texture management.
The API's simplicity has also improved, which is something you don't often see: usually code just gets more complex as it evolves. Porting Unreal Tournament's code from DirectX6? to DirectX7? only took 3.5 hours, and mostly consisted of deleting now-redundant code and changing function calls and interfaces. I'm very glad to see the IDirect3DTexture, IDirect3DViewport, and IDirect3DLight interfaces gone, and replaced by much simpler state-setting code. Direct3D's abuses of object-oriented programming are now gone.
With DirectX7?, Microsoft did something I welcome, and would like to see more of: they designed the new Direct3D interfaces to not be backwards-compatible with the old ones. This enabled them to remove from view a bunch of the old baggage that obfuscated Direct3D: execute buffers are gone, unnecessary intermediate objects are gone, and much less weird COM QueryInterface? stuff is necessary.
Ripping out old code and replacing it with new, better designed code is a great practice which too many software developers are afraid of.
-Tim Sweeney
August 16, 1999
Unreal Tournament development note
In response to the pirate punk who has been claiming to have a "final" version of UT...
Unreal Tournament isn't finished yet, so there isn't a final version. We're still polishing, fine-tuning, and optimizing the game and will 'till it's done.
Believe me, when UT goes gold, we'll be announcing it here prominently.
Until the demo and release version are available, any copy of UT you see is an unfinished beta version; unless you're a reviewer who received such a copy direct from Epic or GT, having such a copy is illegal. These versions are clearly labeled "confidential beta version" or "release candidate - not for distribution" in at least 5 places in the program. In addition, they have time-bomb logic which will cause them to stop functioning after a certain amount of time. So if anybody gets hold of a version of UT before release, it should be pretty clear that it's not legitimate.
-Tim
August 14, 1999
DirectX7?
Some people have been asking about our plans for supporting the upcoming DirectX7?. Unreal Tournament will ship with DirectX6? support, and will be compatible with (but not optimized for) DirectX7?. As soon as Microsoft has released DirectX7? and we've had a chance to optimize the code for DX7 and test it across a wide range of cards, we'll release an Unreal Tournament patch with complete DirectX7? optimizations. This has been the plan all along.
DirectX7 has lots of cool new features. The ones which Unreal Tournament will exploit are:
- Improved texture management.
- Hooks to enable 3D card drivers to perform their own texture management to improve performance.
- Optimized polygon path for significantly faster polygon rates.
- Windows 2000 support.
-Tim
August 1, 1999
Unreal Tournament Linux Client
I've been spending the past 5 days or so banging out a Linux client for UT. At this point, it is completely playable with renderers for Glide and MesaGL?. It runs very well under my Voodoo 3 3000 at 1024x768 (Redhat 6, Linux 2.2.5-15). (There is some kind of physics bug in the flyby code that only shows up under egcs, so I can't do a timedemo right now. I'll fix it later.)
The client requires X windows, libXpm, and libMesaGL. (My RedHat? 6 distribution didn't come with libXpm installed, but Jack says that it is very common. MesaGL? is only required if you are using the MesaGL? renderer. If you are using the Glide renderer, then you'll need libglide2x.)
The only major issue left on my todo list for the client is to port the Galaxy sound library. That will probably take a day or two (barring any unforseen problems). I also want to tweak my mouse input code a bit, add some kind of support for unwrapping exceptions caused by OS signals, and add a command line option to allow command input from the Linux console (or xterm or whatever).
If everything goes well, then the client will be on the 2nd CD of UT. I'll work out some kind of install program or rpm script to make putting it together easy. This means that the Linux hackers can buy a copy of the game off of the store shelf and be good to go. This isn't guaranteed, as I have to get the sound code working and make sure it plays and works as well as or better than the win32 version first, but its a good possibility. This also means that we will make a Linux UT demo available.
The Linux server is in good shape. We are looking at possibly making a special free distribution of UT that will contain what you need to run a server but no game content. We are also considering giving away around a hundred copies of the gold version of UT as soon as it comes out of duplicaton. Don't email me or anyone else here asking if you can get a copy, because we won't answer. We haven't worked out all the details yet (but will in a few days).
Screenshots
The first is a shot of UT running under linux at 1024x768. Look exactly the same as the
windows version? Well, that's a good thing. :-) The second shot is of my desktop. I'm
launching Unreal Tournament in one window and then trying to take a xwd in the other
window hehe. Notice the UT splash screen, appropriately altered to show the OS of choice.
- UT under linux at 1024x768. [jpg]
- UT launching from X. [jpg]
Pimpage:
Code Crusader is a really cool open source IDE for linux that Jason Keimeg turned me on to. I use MS DevStudio? most of the time under windows and when I started using Code Crusader I didn't feel that any features were missing. It has a fast editor and good project management. It also has a very cool C++ inheritance graph capability.
K Desktop Environment is the desktop environment I'm using for X. It rocks! It has all sorts of nifty applications that make things easier, plus it has some cool device browsing capabilities if you are pretty Linux illiterate like me.
LinuxGames.com is a cool site with information about which developers are doing what in Linux. They also keep track of what games they have found to be successful in WINE (a windows emulator for Linux...icky).
So we are making good progress on the Linux front. Now that I've got the Unreal Engine nice and portable, all of our future games will be co-developed under Win32 and Linux. Licensees who base their games off of portable Unreal Engine versions will also be in a good position to make games for both Win32 and Linux.
If you have any questions you can email me at brandon@epicgames.com and if you have any nifty X or Linux programming hints feel free to fire them off. :-)
- Brandon "GreenMarine" Reinhart
July 16, 1999
How to get the latest NVidia Riva TNT drivers
I've had a few questions from users asking how to obtain the latest NVidia Riva TNT/TNT2 drivers, which are required to run Unreal in Direct3D (previous drivers had problems with Unreal).
It's easy, just follow these 35 simple steps! :-|
- Go to www.nvidia.com.
- Click on "Resource Center".
- Click on "Drivers"
- Click "Accept" to the lawyer prose.
- ose the little tiny popup window that offers to subscribe you to their marketing email list.
To prepare for installation of the drivers
1 Start Microsoft Windows 98.
2 Click the Start button, point to Settings, and click Control Panel.
3 Double-click Display, and click the Settings tab.
4 Click Adapter, click the Change tab, click Next.
5 Select the option to display a list of drivers, then click Next.
6 Select Show all Hardware button, then select the Standard display types from the Manufactures list.
7 Select Standard PCI Graphics Adapter (VGA) from the list, then select Next.
8 Click Next to install the driver, click Finish, then select Apply to complete the installation.To install the drivers
1 Click the Start button, point to Settings, and click Control Panel.
2 Double-click Display, and click the Settings tab.
3 Click Advanced Properties, click the Adapter tab, then click Change.
4 Click Next, click Next, then Click Next.
5 Select or type the path to the driver, then click OK. Windows should find files for the NVidia RIVA TNT. If Windows cannot find the files, check that the path name is correct.
6 If Windows found the files, click Next. Windows copies the files to the hard disk.
7 Click Finish to complete the installation.
8 Click Yes when Windows asks if you wish to restart the computer.
Which brings us to...
Downloading drivers and patches is an unfortunate necessity in this industry. There are several reasons for this. One, Direct3D and OpenGL? are at a pretty early stage of evolution on the PC compared to other drivers (for example, printer drivers are now very reliable and stable). So, there are a lot of features in the API's that aren't very well defined or well tested, and the API's and extensions are evolving very quickly. Two, hardware makers are under extreme market pressure to get their cards to market quickly, so they often end up rushing the drivers, and fixing them later. Three, there is tremendous variation among Direct3D and OpenGL? games, so that a driver that performs bug-free under some games may have bugs revealed as soon as a new game ships.
These factors are unfortunate, especially for novice gamers who buy a new 3D game and have trouble getting it working. But they're not a sign of evil or incompetence among companies. When you combine the free, open nature of the PC hardware and software market with the incredibly rapid pace of 3D hardware innovation, you get a certain amount of chaos. This is why PC games are much less reliable than Playstation games, but also why PC's and games get better every few months. So, I see that as an acceptable tradeoff.
Responsibilities of Software and Hardware makers
Since software and hardware makers know their games and drivers are imperfect and will need to be patched, we have a responsibility to our customers. We are obligated to keep up with the latest innovations and incompatibilities.
This process isn't perfect. We've released a lot of Unreal patches, and made many improvements to the product -- and the patching process -- along the way. In the beginning, we released many separate sporadic hardware-specific patches as .zip files, and that made it hard for users to keep up with the proper complete version. Since then, we created the Unreal tech page to keep the community informed of patches and progress; we created our own installer/patcher to automate the process, and we have a private beta test team consisting of enthusiasts in the community to validate patches before they're released publicly. So we're always making a real effort to improve the ease-of-use.
How to patch Unreal
Nowadays, the Unreal patching process is pretty close to optimal. To get an update, you need to:
- Go to http://unreal.epicgames.com/
- Click on the Latest Patch link
- Read the instructions
- Click on a download link
- Choose "run this program from its current location" in Internet Explorer
- Wait for the download...
- The patcher will go through its automated installation, detect your current copy of Unreal, update it, then let you run it or read the optional release notes.
For Unreal Tournament the process is even more automated. UT contains a "download latest version" option in the game, which sends you to our web page, and eliminates steps 1-2 above. It can also automatically detect that your version is outdated.
I'd love to see 3D hardware makers borrow this "make patches easy" concept. It would make all our mutual customers happier! Not to mention any names <cough>NVidia</cough>.
July 13, 1999
ngStats Game Wednesday Night
Unreal Tournament will ship with out of the box support for statistics logging and ranking using Net Games USA's ngWorldStats software. The software allows players to track their performance online at ut.ngWorldStats.com. You can track tons of different types of stats: your kills, your best game, your total score overall, and so forth.
This Wednesday July 14, 1999 at 10:00PM Eastern, three Epic developers are going to deathmatch three Net Games USA developers and put the stats online at:
So this is what we are going to do. Everybody at Epic uses ngWorldStats and ngStats quite a bit. We think its going to kick some ass for organized clan play and for big tournaments. You can use ngWorldStats for watching your individual performance online and you can use ngStats for LAN parties, big tournaments, or even tracking your single player performance.
In order to show off some of the clan play goodness, we are going to have the following setup.
- A 20 minute timed Team DeathMatch?, 3 versus 3.
- The map will be DM-Grinder, a medium sized deathmatch map by "Myscha the Sled Dog"
- Epic's Team:
- Brandon "GreenMarine" Reinhart
- Cliff "CliffyB" Bleszinski
- Alan "Talisman" Willard
- NetGames USA's Team:
- Craig "BotanikA" Sparks
- Jason "Rhea" Keimig
- Mike "Dovienya" Swink
During the game we'll be taking screenshots to put up afterwards. The stats page will update immediately after the game completes and you'll be able to see how everybody fared.
We think that ngStats is going to be a great way for teams to visualize their strengths and weaknesses as well as archive their games. Craig and Brandon use it at LAN parties (put it on your LAN party server along with a web browser and you have an instant game reporting nexus.)
Finally, UT supports Net Games USA's ngTCS - Tourney Control System out of the box. You can use it for LAN parties or big tourneys to automatically perform online event registration, match scheduling, interactive match brackets, and live game stat reporting.
Coolness! So drop by http://UT.ngWorldStats.com/Epic_vs_ngUSA/ Wednesday night to check out the game. Also check out http://UT.ngWorldStats.com/ for a look at the world stat logging system and check out http://www.netgamesusa.com/ for info on NetGames? USA.
- GreenMarine?
July 12, 1999
New Downloads & Links Pages
By popular request, the links on the tech page have been updated and cleaned up. I added:
- New Unreal Downloads page: An index of all the official
files here on the tech page, plus links to dedicated Unreal download sites. If
you're looking for the latest PC or Mac patch, UnrealEd? patch, Fusion maps, or whatever,
look here.
- New Unreal Links page. Links to some of the major "hub" web sites related to the Unreal community, Epic, our partners.
I also wanted to mention the supercool new download site, Unrealfiles.com, check it out.
-Tim
July 10, 1999
The AMD Athlon Rocks!
My new 550 MHz <a href="http://www.amd.com/products/cpg/athlon/index.html" target="_parent">AMD Athlon (K7) just clocked a jaw-dropping 68.5 Unreal timedemo at 1024x768, running on a Voodoo3 3000 card. Even more telling, at no point did the frame rate ever drop below 38.0 fps. That's astounding, considering the intense lightmap and geometry usage in the timedemo level. Even while playing Unreal Tournament's most texture and polygon intensive level (Shane Caudle's DmGothic?), the frame rate hardly ever went below 60 fps.
The Athlon's 128K L1 cache is awesome for memory-intensive games like Unreal. Operations like visibility determination, which thrash on the Pentium III's 32K cache, now run at full speed on the Athlon. This CPU truly shows a generational performance improvement, like going from my old 486 to my first Pentium.
When I saw AMD's K7 spec, I was pretty skeptical. The K6 had been hyped up, but in reality it was slower for Unreal than a Pentium II of comparable clock rate, due to its poor non-SIMD floating point performance. The K7 claimed to fix all of that, and debut a new architecture with 3 execution pipelines. I decided to wait and see, without getting my hopes up.
Bottom line: I waited, and now I have seen! The Athlon is clearly the fastest x86 CPU at any clock speed.
Congratulations go to AMD.
My wish list:
- I want to be able to buy dual-processor Athlon workstations from major manufacturers like Dell and Gateway.
- I want MMX, 3DNow! and SSE code generation support in Visual C++, with native SIMD C/C++ datatypes like float2, float4, and short4, making the compiler manage all register allocation and code generation.
- I want one of these! 8-)
-Tim
July 8, 1999
Linux Assimilated; Added to the Collective.
I just played the first working test game of Unreal Tournament on the linux server. Woo hoo! Huge thanks go out to the Linux Guru Mike Danylchuk for doing the majority of the porting. He brought the linux server up to 224 and then I finished it off. I spent the majority of my time learning egcs and figuring out the right way of doing things. Once I got a hang of it, the process was simple. Most of my problems stemmed from variable size issues (which resulted in offset errors between the C++ and UnrealScript? representations of objects). Mike, an experienced egcs hacker, was able to point out the culprits and I adjusted the C++ header generator to compensate.
Also big thanks to Tim for weathering my endless barrage of questions and offering helpful suggestions.
This means that a solid UT linux server will most likely be available when UT ships (if not sooner). I'll probably see what needs to be done to get everything moved over to the Unreal source safe and cook up an Unreal linux server for our beta testers tonight.
Brandon 'Linux Has Issues' Reinhart (GreenMarine)
July 3, 1999
On Our World Domination Plans
Ok, the headline is exaggerating a bit. Still, there are some cool things happening with the Unreal engine that we find very exciting--uses of the technology that we never dreamed would exist a couple years ago.
For example, as the latest PlanetUnreal news story describes, the Digitalo Design team is building a "virtual reconstruction" of the <a href="http://www.planetunreal.com/index.asp?images.asp?interviews/images/vrnd1big.jpg" target="_parent">Notre Dame Cathedral. And it looks jaw-droppingly amazing! The team here, busy working on Unreal Tournament, is very jealous about the polygon counts these guys are using (the lucky bastards don't have to worry about the CPU impact of 12 players deathmatching in their creation!)
Also, the rapidly-growing independent news site, <a href="http://www.unrealengine.com/" target="_parent">UnrealEngine.com, is covering lots of other Unreal engine projects that fall way outside the "first person action" stereotype, such as Hasbro's Nerf Arena Blast (see <a href="http://www.avault.com/news/displaynews.asp?story=6301999-102335" target="_parent">AVault preview) -- as well as the other well-known projects from our partners.
There are other interesting things happening with the tech, behind the scenes. A number of schools (ranging from high schools to universities) are using UnrealScript? to each real-time object-oriented programming. Several university masters-degree thesis projects are centered around projects involving the engine. Some architects are using the editor to generate real-time architectural walkthroughs. At least two Silicon Valley startups are pitching completely non-game projects incorporating the Unreal engine to investors.
What's really happening here?
What we're seeing is part of a larger trend that will continue to grow. Remember ten years ago, when PC's were very weak compared to the state-of-the art: SGI workstations, and the Unix workstations from HP, Sun, and Apollo?
Now, a $2000 Pentium III PC with a Voodoo3 or TNT2 card eclipses the performance of a $30,000 SGI for real-time rendering. The CPU is faster, the fill rate is faster. When I first saw an SGI Reality Engine, my impression was, "Holy cow, I can't believe how much better this is than my '286!" But nowadays, the best 3D games look far cooler than anything you see running on a Reality Engine.
That entire segment of the high tech industry, the one containing non-PC workstations, SGI's high end hardware, simulation tools vendors, and so on, is falling off a cliff and disappearing. One-time leaders like SGI and Intergraph are turning into niche players, who are losing out badly to the new guys like Dell, Gateway, NVidia, and 3dfx who were born and bred in the consumer, high volume, low-price PC era.
The result is that projects, like the Notre Dame reconstruction, architectual walkthroughs, and training simulations--which were once the realm of high-end SGI's--are now coming to the PC in droves. Soon, they'll all be here.
The Economics
What we're seeing in processors, 3D accelerators, and games is a fundamentally different level of technological progress than happens in other markets. Industrial era businesses, like car manufacturing, and limited by raw materials and labor. Most of what you pay for a car goes to materials, labor, and the other economic components of the industrial pipeline (like transportation, insurance, and so on). Years of tweaking the process have made manufacturing near optimally efficient, so future progress goes very slowly, gaining perhaps 2%-3% productivity per year. That's why there is no Moore's law for car performance.
But in our business, the cost of raw materials is insignificant, so innovation is driven by volume and R&D investment. A 500 MHz Pentium III now costs the same to manufacture as a 60 MHz Pentium cost in its day, or a 386-16 long ago. A retail game contains around $2.50 of raw materials (box and CD) and sells for around $49.95. So, manufacturing isn't a limiting factor here.
Still, games, processors, and 3D cards require a tremendous up-front investment in R&D and facilities. It takes lots of people and a lot of capital to develop a game, design a chip, or design and build a manufacturing plant. The difference is, this investment is a fixed cost--you pay it once, then you have the ability manufacture as many games or chips as you desire at an (approximately) insignificant cost.
The remaining piece of the puzzle is the "winner take all" nature of technology markets. Since manufacturing costs are small, price differences are minor, leadership goes to the companies that have the best high-volume products. Therefore, everyone invests heavily in R&D, and attempts to produce the best product in hopes of selling tons of chips or games or engines. When they do this successfully, they make a profit and plow it back into the business to get further ahead. Most R&D and capital-investment hungry markets work this way; it's why you only see a handful of prominent CPU makers, 3D card makers, and engine developers. The ones who delivered were successful early on and reinvested in their continued growth; and those who didn't deliver either out-of-business or are falling apart now.
The Result: General-Purpose Solutions Win
The result is that high-volume general-purpose hardware and software is quickly gaining the lead in absolute performance. This trend will only accelerate as the PC market becomes larger and the R&D investments grow. The ramifications are:
- Specialized software and hardware loses out to general-purpose. The company that focuses on generality (for example, a CPU, or a 2D+3D graphics accelerator, or a general-purpose game engine) has the expectation of higher sales, and can make so much more of an R&D investment that special-purpose solutions can't compete (for example, 3D-only accelerators, or a once-off engine powering a single game).
- Volume and increasing R&D investment enable 3dfx and NVidia to sell millions of $150 graphics cards that outperform SGI's $50,000 solution which sells 1000 units. That has the effect of crushing SGI's business model, even though companies like 3dfx aren't even consciously trying to compete with SGI.
- When a company like Epic or id Software builds a 3D engine, we do it with the expectation of it powering games that sell a few million copies, between our games and licensee projects. We make money from each one, and that realization drives investment in making more and better tools. This gives our engines a price, performance, and feature advantage over "in-house" engines made specifically for one game, and over less-capable engines designed for niche markets. We amortize our R&D investment over ~10X more units sold. This licensing model has already proven successful with mainstream game developers, but now it's starting to overflow into non-game markets too. We have this great 3D engine, why not use it for your architectural walkthrough?
- As a result of widespread interest, thriving ecosystems develop around successful general-purpose products. For example, there are hundreds of web sites dedicated to 3dfx hardware, and lots of developers optimizing their games for 3dfx. There are many hundreds of web sites covering Unreal and licensee projects; thousands of kickass aspiring level designers building maps and making them available online; many licensees building games; and lots of other cool projects that tie into the engine, such as mods and TC's, and the research projects like Notre Dame. The community has a multiplicative effect on growing the platform.
Where we go from here
When you look at the big picture, what's happening now with 3D graphics on the PC is just the tip of the iceberg. In the past, we've been limited to the realm of hardcore gamers, but now 3D acceleration is becoming much more mainstream, and 3D engines are becoming recognized as a viable development tool for a wide range of projects. The coming years will be interesting.
-Tim
July 1, 1999
226 Progress
Testing of 226a brought in mixed results: Direct3D performance improved for most testers, but some had crashes and other weirdness. I'm looking into all of this now; I think most of the problems are driver/hardware related, but I should be able to work around most of them in the code. We'll definitely go through a couple more internal test versions before releasing 226 though.
I'm also adding a new "wizard" based user-interface for switching 3D drivers and changing "safe mode" settings, to improve the user-friendlyness of the Direct3D/OpenGL/Glide/Software switching.
Recommended Reading
<a href="http://www.amazon.com/exec/obidos/ASIN/0387947752/002-3430157-9555648" target="_parent">A Theory of Objects is an excellent book for people trying to design object-oriented programming languages (or just learn the theoretical background of OOP). It does get pretty technical, defining a lambda-calculus variant in terms of objects, and analyzing OOP concepts within that framework. But it sheds a lot of light on the general language-design problems that UnrealScript? faced.
After writing a big piece of code like the UnrealScript? compiler, it's cool to examine some of the design decisions that I made without really knowing what I was doing, only to discover there's a well-developed theoretical foundation for what I basically hacked together until I felt it worked right. For example, it turns out that UnrealScript?'s type-compatibility checking (the rules for determining whether a variable is compatible as an assignment parameter or function call parameter), exactly follow the rules of type covariance, contravariance, and invariance.
June 30, 1999
Direct3D Is Happening
We're testing 226a internally now. The results of are good so far. If no significant "non-driver" problems are found, we'll have Unreal 226a out later this week. Here is the kind of feedback we're seeing on D3D Unreal performance.
First client impressions, after zonking it with a couple of really nasty, detailed, clippy, high polycount maps: incredible improvement! I got through DMDowntown, my personal UnrealRavager?(tm) with nary a clip, pop or tick. Switching resolutions works well now, but you have to have the latest Hercules driver (now using 1.70, dated 6-28-99) for it to work, or you get a critical error. ALT-ENTER works fine too, thanks Tim (now I can get multiple screenshots without exiting and restarting Unreal). DMBreakfast, a new map which uses a great deal of UnrealEd? rendered graphics, played very well too.
This is a quantum leap for the 'in game' video speed on the Hercules TNT2. Most impressive. I'll try to get this patch on the Nali City game server (unreal://207.53.187.28) tomorrow so we can all beat it up.
-Pete, PlanetUnreal
This isn't a miracle improvement, but TNT, G400, and Rage 128 owners should see clear speed and smoothness gains. Just make sure you get the latest drivers available for your card.
-Tim
June 19, 1999
Unreal Direct3D
Our Direct3D performance and stability have increased significantly since version 225. For the past few days, I've been swapping 3D cards in and out, tuning Unreal's Direct3D performance on all of them. I'm not in the benchmarking biz, so I'm just going to give my personal reaction from playing, and say that the Riva TNT, TNT2, Matrox G400, and ATI Rage 128 are all very nice for playing Unreal now!
(Don't ask about the Riva 128, Rage Pro, and Permedia 2, they are worse for gameplay than Unreal's software renderer).
Everyone's complaint with Direct3D support in past versions of Unreal, on good cards like the TNT, has been "the average frame rate and benchmark numbers are fine, but there is major hitching and pausing during gameplay". This was due to several factors, which I tracked down and fixed with help and advice from some driver writers. The key improvements are:
- Dramatically less memory usage. My Direct3D code wasted tons of hidden, "behind the scenes" memory while swapping textures into video memory, leading to lots of virtual-memory swapping.
- New texture management code, better optimized for Unreal's texture usage patterns. I had been relying on Direct3D's built-in texture manager, which is slowed down by its generality.
The next patch ("when it's done") will incorporate the new Direct3D code. This will be out before Unreal Tournament ships, and we'll be looking for feedback from players on its performance and stability.
I'd like to thank Ben de Waal, Sim Dietrich, and Doug Rogers at NVidia; Sameer Nene at Microsoft; and Eric Le at Matrox for providing cool advice and performance tips.
Summary of things I learned about Direct3D
Never ever Lock() a video memory surface. That is amazingly slow, especially on TNT cards. When I went to a pure Blt() based texture handling scheme, my worst-case frame rate went from 8 fps to 20 fps.
Games that use large amounts of textures, palettized textures especially, should not use DDSCAPS2_TEXTUREMANAGE. Write your own texture manager, and optimize it around your game's usage patterns. You can get much better performance than using the general-purpose one that's built in.
Realize that DDSCAPS2_TEXTUREMANAGE makes system-memory copies of all your textures as backing-store for the ones cached in video memory temporarily. If your native textures are palettized and the 3D card doesn't support paletted textures (a very common case with Unreal), realize that you're going to end up with major memory waste. Unreal 225 and earlier kept around (a) its own 8-bit copy of each texture, (b) the D3D texture manager's 16-bit copy of each texture, and (c) the 16-bit video memory copy. In Unreal in some cases, this wasted 40+ megs of system RAM! When I dumped DDSCAPS2_TEXTUREMANAGE, I went down to about 12 megs of system RAM. Better yet, a lot of cool new cards like the TNT2 and G400 have 32 megs of video memory, so you can effectively store all your textures there, and free the system memory copies (which I do), to bring the waste down to 0. This improves smoothness very significantly by reducing virtual memory usage.
Realize that DDSCAPS2_TEXTUREMANAGE can potentially do evil stuff to your frame rate, for example if it tries to free many small textures to make room for a big texture. (It's totally general-purpose, so it has to handle all the bizarre inputs you might throw at it).
Never allocate or free video-memory textures during gameplay in Direct3D. This operation is slow. Do it at init time. I do this in Unreal now, caching all textures into fixed-size bins in video memory. I swap textures into the bins in realtime, but never reallocate the bins.
Don't be afraid to constrain your engine, texture formats, texture sizes, etc to get optimal Direct3D performance. GENERAL==SLOW, especially when dealing with texture management, where you are already pushing RAM and memory bandwidth limits.
Overall, Direct3D has come a long way. The API and drivers are quite stable now. In my 100 hours of rewriting the Direct3D code and testing it on 10+ different 3D cards under Windows 98, I had 5 lockups. This is about the same as my experience with OpenGL? on Windows NT.
-Tim
June 16, 1999
Mapshots
There are a bunch of cool new things that mod and map authors can do in UT. Map authors can stick a "mapshot" in their .unr file, which will be displayed when the user starts a practice session or a server (along with the author's name and the map name). Here are the steps:
- Take a screenshot of your map.
- Use an art program to convert the shot to a 256x256 .BMP or .PCX.
- Start UnrealED?.
- Select the Texture browse tab.
- Click "Import" and select the screenshot you took.
- Enter the Package name "MyLevel" make sure you spell it just like that.
- Enter the Texture name as "Screenshot" make sure you spell it just like that.
- Import the screenshot with mipmaps turned off.
- Open the Level Properties for your map.
- Under Display, set the texture to the one you just imported.
- Save your map.
This will import the texture "Screenshot" into your map. Of course, you don't have to use a screenshot of your map. You can always put a picture of yourself, or a scan of your cat.
- GreenMarine?
Mutators
Mutators are another cool thing. Mutators are like Actor arbitrators for a GameInfo?. You can have any number of mutators in a game. When an Actor is added to the game, it asks each Mutator to deal with it. This allows you to write a simple little Mutator object and completely change the behavior of the game. Here are some things we've done with mutators:
- The LowGrav? mutator makes games played with it have low gravity.
- The PulseArena? mutator makes evey weapon in the game become a PulseGun?.
- The InstaGib? mutator is a sort of micro mod.
- The NoPowerups? mutator removes all powerups from a game.
InstaGib is particularly cool. We played it for three hours last night. It removes all armor and all powerups and gives everyone a special shock rifle. The rifle has a reduced firing rate, no alt fire, unlimited ammo, and does 1000 points of damage. The game plays like OSP Tourney DM rail arena (my inspiration hehe). One shot kills, but you got to hit them dead on. We were playing with the LowGrav? mutator on also, so it was pretty wild.
Using Mutators, a mod author can write a complete mod with only a little bit of code. Just write up your new powerups or weapons and then write a mutator to facilitate their placement, instead of a new GameInfo?. Mutators don't have all the capabilities of GameInfos?. They are a supplement, not a replacement. The benefit is that the Mutator you write can be used with any gametype. You can play InstaGib? CTF if you want, or InstaGib? Domination, or LowGrav? Team Deathmatch.
Mod authors focusing on larger projects (like a class based mod) could write special mutators to give server operators more options. You could have a NoSnipers? mutator, or a NoRocketLauncher? mutator. Then a server operator could combine the mutators to get special behavior.
Some mutators are mututally exclusive. There is a special Mutator called "Arena." No more than one Arena mutator subclass can be in the game at one time. The "SniperArena" and "RocketArena" mutators replace each weapon in the map with their respective weapon type. The game will only allow one of these to be added to the mutator list. Programmers can look at the Arena mutator code to learn how to set up a relationship like this.
There is a lot you can do with them, so start coming up with ideas. :-)
- GreenMarine?
June 6, 1999
Direct3D Improvements
Since Riva TNT users are reporting that Direct3D is more than 30% faster than OpenGL? on their cards, I've been spending some more time improving the D3D code, adding better support for video mode switching, and optimizing the texture management code a bit more.
Another motivation for the Direct3D improvements is the Matrox G400. I just received one, and it's an awesome video card--fast fill rate, great graphics quality, and decent texture management performance. The G400 has a great Direct3D driver, but their OpenGL? is hideously bad.
One interesting new feature I managed to implement in Direct3D is recursive, fractal detail textures. With this feature enabled in Direct3D, you never see any individual texels, no matter how close you get to a surface. It's a really interesting contrast to the blurry bilinear filtering you see near surfaces in most games. Considering how fast current 3D hardware has become, there's no reason for games to reveal any individual texels anywhere.
-Tim
June 4, 1999
Unreal 225f Mirrors
You can download the Unreal 225f patch from one of these locations:
- 3DFiles.com - Download Locations
- 3DGamers.com - Download
- UnrealKingdom.com - Download
- PlanetUnreal.com - Download Locations
Unreal 225f Followup
I've had to pull the 225f patch from the Tech Page WWW server. Our T1 here in the office has become almost completely unusable since this morning's post on Blue's and elsewhere about the Direct3D improvements in 225f. I am currently organizing a couple of mirror sites so we can make the file available to all in the next hour or so.
- Jack
June 1, 1999
UnrealEd? Follow-Up
If UnrealEd? is crashing at startup and you are getting an error message regarding "UEditorEngine::FinishAllSnaps <- WM_USER_EXEC <- VbWindowProc <- glxDetectOutput", that is a separate problem that seems to be caused by some sound card drivers.
You can avoid this crash by running "UnrealEd -nosound". You don't get any sound, but UnrealEd? otherwise works fine for editing.
Server Cheats?
A few server admins have been reporting a cheat that enables clients without administrative rights to change the speed of the server's game (as if typing "slomo 0.5" from the console in a local game). What's the trick? First person to give the exact steps to duplicate the cheat gets a free signed copy of Unreal Tournament as soon as it ships. Send reports to unreal225@epicgames.com with a subject "SLOMO CHEAT". Include your shipping address.
Are people seeing any other cheats occuring on the public Unreal servers? If so, let us know, unreal225@epicgames.com (no prizes for this, we'll just fix the security holes!)
UnrealEd? for 3dfx Voodoo3 bundle owners
The version of Unreal that shipped with 3dfx's Voodoo3 bundle didn't include UnrealEd?. So, we now have the Standalone UnrealEd? Installer which installs UnrealEd?.exe and all of its DLL's into the appropriate directories. For this to work, you must have Unreal installed, and you must point the UnrealEd? installer to the same directory Unreal is in (for example c:\Unreal). Then just run c:\Unreal\System\UnrealEd.exe to start editing.
-Tim
May 31, 1999
Latest News
- 4 out of 5 users have reported success with the experimental UnrealEd? fix -- it made those nasty "Runtime Error" messages go away. If you're having problems with UnrealEd? not starting up, grab this file!
- The other one reported an error message relating to Threed32.ocx which I fixed in UnrealEd Experimental Fix 3.
- There was a master server outage/problem today. If you weren't seeing servers in Unreal's new server browser or GameSpy? today, don't worry, the problem was at the master server and it has been fixed.
- Aussies, check out the OzUnreal Contest for Australian level designers!
Holiday?
Here at Epic HQ, we suspect today is some type of holiday. The tell-tale sign is that the parking lot was empty when we all came to work this morning. That usually gives it away. However, we haven't figured out the identity of the occasion -- it seems too warm outside for Easter, and our publisher isn't calling us three times a day about shipping our game so it's probably not Christmas.
New 225f Patch for server administrators only
This should fix the UActorChannel?::ReplicateActor crash and some smaller problems. It's backwards-compatible with Unreal 224-225 clients. If you have any server crashes, please email your Unreal.log file to unreal225@epicgames.com.
Only download this if you are running an Unreal server: UnrealPatch225f.exe.
-Tim
Server 225e Patch Feedback
Server admins are reporting much better performance, but 90% of the bug reports point to a crash in UActorChannel?::ReplicateActor. I've been fixing this (and a few other things) and will have a new server-only patch later tonight. Thanks for everyone's feedback!
UnrealEd? Experimental Fix 2
Based on feedback, Saturday's experimental UnrealEd? fix solved the problems for only about 20% of users (wild guesstimate) who were previously unable to run UnrealEd?. On further investigation, we've found a set of Visual Basic runtime DLL's that are more likely to work for most users. If UnrealEd? still isn't working for you, please try Experimental Fix 2. Please let us know what happens by emailing unreal225@epicgames.com with a subject of "Experimental Fix 2".
IMPORTANT: After installing the fix, reboot your machine before running UnrealEd?. The proper files won't be refreshed until you reboot.
Webmasters: Please only post this info on Unreal news sites. I don't want it to go on general gaming sites until we have feedback on patch success/failure from users.
-Tim
May 29, 1999
For server administrators only: Unreal 225e Patch
This is a test version incorporating all of the latest server-side stability and performance improvements. It's backwards compatible with Unreal 224 clients. If you're running a 224 server and are experiencing performance or stability problems, please upgrade. If you experience any server problems or server crashes with 225, please email your Unreal.log file to unreal225@epicgames.com so we can investigate the problems. The results on our test server here at Epic indicate that this version is significantly faster (i.e. supports more players) than 224, and is more stable but I don't expect it to be perfect, because I rewrote about a thousand lines of server code to improve performance, and there will probably be some bugs to shake out.
Only download this if you are running an Unreal server: UnrealPatch225e.exe.
The general Unreal 225 patch for everybody including users will be available in a few days.
-Tim
On engine licensing
In this MSNBC interview, I think John Carmack hit the nail on the head on the "build vs. buy" decision that goes into licensing an engine:
"If you want to aim for something thats 100 percent proprietary and youre willing to take 18 months longer on the project to develop the technology while running a significant risk of abject failure, you make your own game engine. If youve been to a few E3s, youve probably seen a dozen instances of somebody making a really, really cool demo thats showing off some new technical direction then the game never comes out."
Though game engine licensing was occuring over two years ago, we're still very much in the early days of this rapidly growing and evolving market: Game developers are learning what an engine can and can't do for them, and engine developers are still learning the ropes of the business models, engine modularity, support, and version management.
I'm happy to see the press treating engines level-headedly: everyone seem to recognize that an engine is a useful tool that can speed development and enable a developer to focus on game development rather than technology; but also that an engine is just a tool and isn't a miracle solution for game development. When an exciting new technology is evolving, there's always a danger of it being massively overhyped and pushed as a cure-all solution (see Java), but engines seem to have received a fair showing, not unrealistically positive or negative.
-Tim
UnrealEd? "Runtime Error 20005" Experimental Fix
People who are getting the infamous "Runtime Error 20005" or other problems when UnrealEd? is initializing, please install this Experimental Fix, then try running UnrealEd? again. Does this solve the problem for you? Please email unreal225@epicgames.com and let us know either way. Note: This is a feedback email address, not tech support.
Webmasters: Can we please not post this on big general gaming sites? I want to get feedback from users on the effectiveness of the fix before widely publicizing it. I'll post the results here in a couple of days. Thanks.
-Tim
May 19, 1999
Unreal 225 musings
The recent work on 225 has been focused on improving server performance and stability, and it has been paying off really well. It turns out that 224's server code was noticeably slower than 220, as a result of some code improvements I made but didn't test and time rigorously. The two bottleneck routines in the server are the visibility tracer and the actor replicator. I've been making the visibility tracer faster by processing all actors simultaneously and optimizing the code for a pure "yes/no" visibility test, rather than using the more general (and slower) line trace routine built into the engine. The actor replicator has gained significant speedups from a combination of low-level optimization (to the bit-stream writer, and replication condition caching code), and a new time-stamping system that speeds up replication by up to 50% on servers with high player counts.
Now, the 225 server is faster than all previous versions, and I'm working on some further improvements over the next few days.
As many server admins have pointed out to us, if we can double Unreal's server performance, admins will be able to run twice as many servers on their machines!
"Make Something Unreal" Contest
Check out the Contest site for the latest info and news on the contest for Unreal map makers, mod authors, artists, and TC developers!
Things That Are Cool
- Microsoft Visual SourceSafe?: Anybody who is programming on a large project without using a source-control system is nuts! SourceSafe? provides a central repository for all code, and enables programmers to check out files and work on them without their changes "colliding" with those of other programmers. SourceSafe? also tracks all changes to all files since the beginning of a project, which has been incredibly useful in developing Unreal, because it enables us to examine our past code changes when tracking down bugs. Finally, SourceSafe? is excellent for managing "branched" projects: when we split Unreal 224 apart from the Unreal Tournament codebase, SourceSafe? managed the files' shared history automatically.
- GLsetup: Now that Microsoft has publicly committed to dropping the ball on 3D hardware driver distribution with DirectX7?, GLsetup is the only hope for game developers who want their game to work on users' computers out-of-the-box. The PC is already plagued by driver problems, and the classic symptom is users having to go to the web and download new drivers to get new games working. The world would be a much better place if Microsoft took a leadership role in driver updates, by keeping the DirectX? redistribution continually refreshed with new QA-certified drivers, thus assuring that new games always work "out of the box" -- if that happened, PC gaming would be a lot closer to the level of reliability of console games. But Microsoft isn't doing that, and GLsetup is a grassroots effort to solve the problem.
-Tim
P.S. Check out Unreal Nation, the cool in-depth Unreal news site.
May 8, 1999
Latest progress
All the known server-crashing problems in 224 have been fixed and are in internal testing now. Stability has improved quite a bit. There is still significantly higher server CPU usage in 224 compared to 220 on heavily populated servers, and I'm still tracking this down.
The Direct3D code has been cleaned up and optimized a bit, giving a few FPS improvement on the Riva TNT, with support for detail textures now enabled. 225 will include the new D3D driver, and the 225 public source release will include the source.
-Tim
May 5, 1999
Maps that broke since 220
Some user maps such has DmHellShrap broke with version 224. This was caused by a little bug in the file backwards-compatibility code, that I've fixed for 225. Map authors don't need to do anything, this will automatically be fixed with 225. The specific problem I fixed was an exit with an assertion:
Assertion failed: Field [File:..\Inc\UnClass.h] [Line: 139]
If there are any user maps which don't require .u file mods, and the maps refuse to load with a different error message than this, please email the map (or a URL where we can download the map) to unreal224@epicgames.com.
-Tim
Quick Notes
We've been going through the Unreal 224 bug reports and addressing lots of issues people have pointed out. Here's the latest status.
- Creative Labs EAX 3D sound support is fixed for 225.
- We're working with Aureal to get A3D 2.0 support into 225, which is very likely to happen.
- I fixed the cause of the "out of memory" errors that tended to happen when the console was pulled down on some machines. There was a problem in UnrealScript? with switch statements operating on strings, which caused this and some similar problems reported by licensees. Thanks to Mark Poesch of <a href="http://www.wheeloftime.com" target="_parent">Legend for tracking this one down.
- Under some conditions, alt-tabbing between fullscreen and windowed play would cause the in-a-window game window to be collapsed to zero size. Fixed.
- I optimized the network visibility code by about 25%. Server admins are reporting notably more CPU usage per player with 224 than 220. I haven't tracked this down, but I'm going through a lot of code to measure and improve the server performance.
Many other fixes, tweaks, and incremental improvements are in the works. See the Known Bugs page for more info.
-Tim
May 4, 1999
Customizing UBrowser
A few of people have asked how they can customize the tabs in Unreal Browser, to display specific tabs for their netgame mods. This can be done easily by editing your Unreal.ini file. Each tab in UBrowser has an associated Server List. This server list has one or more Server List Factories - classes which add servers to a server list. We shipped 224 with four list factory classes, but mod makers can make their own if they have some custom method of getting a list of servers for their gametype:
- UBrowserGSpyFact - queries a GameSpy? style master server like master0.gamespy.com
- UBrowserHTTPFact - queries an HTTP (web server) master server list from a website, like the telfragged master server (currently offline?)
- UBrowserLocalFact - broadcasts the local LAN looking for local servers
- UBrowserSubsetFact - gets servers from another list and adds them if they meet specific criteria (like game type).
To customize a tab, you just need to decide which list factories you need and the parameters you need to give them. In unreal.ini in the [UBrowser.UBrowserMainClientWindow] section, there are a number of arrays. Each array index represents a server list tab.
- ServerListNames[x] - The title of the tab
- ServerListTags[x] - Some code name representing this tab (used to specify it in a subset factory)
- ListFactories0[x] thru ListFactories9?[x] - the factories used to build this server list
- URLAppend[x] - optional URL parameters appended when joining servers of this type
- AutoRefreshTime[x] - how often to automatically refresh this list (0 = never)
For example, a tab which queries two master servers (and removes duplicates), has entries in the ini file like this:
ServerListNames[0]=All Servers
ServerListTags?[0]=All
ListFactories0?[0]=UBrowser.UBrowserGSpyFact,MasterServerAddress=master0.gamespy.com,MasterServerTCPPort=28900,Region=0
ListFactories1?[0]=UBrowser.UBrowserHTTPFact,MasterServerAddress=master.telefragged.com,MasterServerTCPPort=80,MasterServerURI=/servers.txt
URLAppend[0]=
AutoRefreshTime?[0]=0
For a tab showing only games of the specific game type for your mod, you would use a UBrowserSubsetFact? to filter out only servers for your mod. The SuperSetTag? specifies which server list to get the servers to filter from:
ServerListNames[1]=My Mod
ServerListTags?[1]=MyMod
ListFactories0[1]=UBrowser.UBrowserSubsetFact,SupersetTag=All,GameType=My Mod Type,bCompatibleServersOnly=True
URLAppend[1]=
AutoRefreshTime?[1]=0
Valid parameters to the the UBrowserSubsetFact? factory are:
- bLocalServersOnly - include only local servers
- bCompatibleServersOnly - include only servers which are network compatible with your version of Unreal
- GameType - include only servers with this GameName?
- MinPlayers - include only servers with at least this many players
I have just added a "MaxPing" filter for the 225 patch. If anyone has any other requests for filtering servers, or any questions about UBrowser, please let me know. Tim mentioned he's going to modify the mod installer so it's able to add an entry into the next available array slot, so mod makers can automatically add tabs to users' UBrowser windows when they install the mod.
- Jack "Mek" Porter
May 3, 1999
Known Bugs
Having a problem with Unreal? Please visit the Known Bugs page to see if we know about it and are addressing it, and if there any any workarounds.
Future Patch
There will be another Unreal 1 patch. It will be 225. It will contain fixes for the significant bugs reported that are under our control (3D card drivers are dependent on the hardware makers). By popular demand, our focus on future Unreal 1 patches will be making bug fixes and small, incremental improvements. So, we've split off the Unreal 1 code base from the Unreal Tournament code base, and won't be major new features added to the Unreal 1 code base, just fixes.
This code split gives the server community some room to get back together and grow healthily. The server community was fragmented in the past because of our Unreal 224 delays, at one point having 4 major versions available (220 for the PC, 219 for the Mac, 222 for U.S. 3dfx Voodoo3 users, 223 for European 3dfx Voodoo3 users. From here on, we'll keep network compatibility between versions, and keep code changes to a minimum. And we'll keep Unreal 1 script compatibility (but not UT script compatibility).
The split also gives us more flexibility in releasing future patches. In the past, we've been adding so many new features to the engine for Unreal Tournament, some necessitating architectural changes, that we've had a long internal testing cycle for each patch. From now on, the Unreal 1 changes will be simple and localized.
The split is also something our Unreal tech licensees have wanted. From here on, our partners who want to ship games soon (before or soon after Unreal Tournament) will prefer to stay on the 224 track to gain stability and minimize changes, and those with further-off products may want to move forward with the Unreal Tournament code track, to keep up to date with the latest features.
-Tim
Check out the Unreal news sites
- PlanetUnreal has lots of news and tips about 224.
- UnrealEngine.com is a news site dedicated to the Unreal engine.
- Unreal.org is a master index of Unreal resources on the Internet, and has tons of cool Unreal related links.
I'll be making a summary of reported bugs, workaround, and related feedback from the community later tonight.
OpenGL? UnrealEd?
Thanks PlanetUnreal for pointing out this feature I added months ago but basically forgot about. :)
Though it theoretically works, the consumer OpenGL? drivers I've tried aren't yet stable enough for it to work reliably on real-world hardware. But for people who like experimenting, if in-game OpenGL? support works flawlessly, you can try editor OpenGL? support by changing the WindowedRenderDevice?= line in Unreal.ini to WindowedRenderDevice?=OpenGLDrv.OpenGLRenderDevice. Problems I've experienced on my Riva TNT and ATI Rage Pro (2 months ago) include crashing in the display driver when resing windows, failure to create HRC's when opening windows, and texture corruption.
If there is enough demand, perhaps we can pressure 3D hardware makers to test with UnrealEd?. Hopefully this will be easier now that we've released Unreal's OpenGL? source code to the public.
-Tim
May 2, 1999
STAT NET: Diagnosing your connection to the server
When playing a multiplayer game of Unreal, press TAB and type STAT NET to bring up the network stats display. You'll see something like this:
(IN/OUT):
137 PING
38 CHANNELS
0 0 UNORDERED/SEC
12% 14% PACKET LOSS
11 32 PACKETS/SEC
126 32 BUNCHES/SEC
1395 2031 BYTES/SEC
2600 2600 NETSPEED
The numbers on the left represent incoming statistics (for example, how many packets from the server to you were lost), and the right outgoing statistics (for example, how many packets from you to the server were lost). There interesting stats are:
- PING: Round-trip time between you and the server, in milliseconds. Modem users will typically see 200-350 for in-country gameplay. ISDN/T1 users will be in the 50-200 range. Playing overseas results in enormous times, 600-1000 or more. This number represents the quality of the connection between you and the server, and really should be 300 or less for good gameplay performance. A bad connection on either end can hurt the ping time.
- CHANNELS: Roughly, the number of objects that the server is actively updating to you. Proportional to how much combat is happening around you.
- PACKET LOSS: Percentage of packets lost between the client and server. The higher
the packet loss, the worse the performance will be, and the more you'll see objects
skipping around rather than moving smoothly. High packet loss can be caused by:
- Using too aggressive a network speed on the client side. Try typing "NETSPEED 2600" on the console to reign in bandwidth usage.
- The server's connection is overtaxed. This will result in heavy packet loss and a bad gameplay experience for everyone. Servers will limited bandwidth available need to set their play limit conservative (expect 5000 bytes per client per second), and also lower the MaxClientRate? variable in Unreal.ini. A value of 5000 should be good for everyone.
- A bad connection anywhere between you and the server.
- A bad connection between you and your ISP.
- PACKETS/SEC: Number of packets being sent per second. The number on the left should be 13 or higher. If it's significantly less, that means the server is either running too slowly, or experiencing high packet loss. Gameplay will be bad at 10, and unbearable at 5. The number on the right is proportional to your frame rate and you don't need to worry about it.
- BUNCHES/SEC: Number of objects being updated per second. Not important for tweaking.
- BYTES/SEC: Bytes being sent per second.
- NETSPEED: The network speed setting you set using the console NETSPEED command.
Recommended settings are:
- 2600 for a typical modem connection.
- 2400 for a poor modem connection.
- 5000 for an ISDN connection.
- 20000 for a T1 connection.
Server Alert
Unreal 224 servers are popping up very rapidly, and becoming filled to capacity rather quickly. From the last couple hours of cruising the net and playing on various servers, we're seeing wildly varying performance. As with all games, the quality of Unreal netplay is a function of how well the server is performing and how good your connection is (bandwidth, packet loss, and latency).
If you're having a bad experience, please try out a few other servers. This can affect performance hugely. In my game sessions here, I had some great performance with a 300 msec ping and 28.8Kbps bandwidth, and some astronomically bad performance with a 100 ping and 50Kbps bandwidth. The bad performance fell into two categories.
Some servers have more users than bandwidth available, so they are dropping packets, experiencing 50%+ packet loss and escalating ping. Some are just running very slowly, around 5 fps (I'm not sure why, perhaps other processes were running?). This tends to happen whenever we release a patch, as people rush to get into gameplay, flooding the servers that have upgraded, users setting up servers on cable modems out of desperation to get into a game... It can get chaotic. In the future, the new backwards-compatible network code should mean there are always lots of servers available when a patch is released.
So, bottom line: Please don't bitch if netplay performance is erratic over the next couple days as servers get set up and stabilized. If netplay performance sucks after a couple of days, THEN commence bitching. :-)
-Tim
Unreal 224v C++ headers released!
For hardcore mod authors who want to experiment with Unreal's C++ interface, here it is! This code requires Microsoft Visual C++ 6.0 with no service packs or SP1. Read the Public Source ReadMe? for more information and distribution terms.
Now it's time for a disclaimer about the C++ code. For mod authors, UnrealScript? is the best way to write game code. The fact that 100% of the Unreal 1 and Unreal Tournament game-specific code is in UnrealScript? illustrates our strategy here, that UnrealScript? is a fully-featured language designed to simplify game programming compared to C++. The C++ code is significantly more complex than UnrealScript?, and is only necessary for programming things that just aren't possible under UnrealScript?, such as algorithmic textures, performance-critical AI decision making, and that kind of low-level work. Furthermore, our distributing just the headers (and not the C++ engine source), means that many key aspects of the engine are hidden in implementation details, so it's going to be hard to understand what's happening "under the hood". Another major downside to C++ is that C++ mods will break with almost every upcoming patch, whereas UnrealScript? is more stable (having broken only 3 times in 11 months and approximately 12 public betas released). Summary: This C++ code is for very, very hardcore mod makers only.
That said, there is some cool stuff here. I've included all of the core and engine header files and .lib link libraries in this release, so you can compile your own DLL's and link them to Unreal. I've also included the C++ code for some modules which we don't feel are confidential: Unreal's OpenGL? support layer (OpenGLDrv?), the engine startup code (Launch), and the installer/uninstaller (Setup).
The OpenGL? code will be of interest to OpenGL? driver writers who want to see what we do in Unreal, in order to optimize their drivers, and possible to enthusiasts who want to experiment with rendering.
We will probably be able to publically release the Direct3D driver code soon too, also to aid driver writers and experimenters, but our Direct3D development partner is going to first spend some time cleaning up that code.
This code is provided as-is: we don't have much time for answering everyone's questions about it, so you're mostly on your own.
The C++ code can be downloaded here. Unzip it into your \Unreal directory, and the proper subdirectories will be created (described in the ReadMe). The C++ code compiles there and links to DLL's in the \Unreal\System directory, read to run. Enjoy!
-Tim Sweeney
Unreal 224v Released to the public!
The Unreal 224v patch is now available for download from our downloads page, along with the release notes.
-Tim Sweeney
May 1, 1999
224 Progress Continued
The team found about 10 bugs in Unreal 224t that are significant and merit fixing before release, so I'm just wrapping up fixes for them now, and we'll have another release candidate (224u) in internal testing this afternoon. Thanks for the patience...we're almost there.
Blues News posted a huge 3DS Max rendering of a bunch of Unreal Tournament characters. These are the actual meshes (same poly count as the game), but textures of this resolution will only be available on cards that support S3TC texture compression such as the Savage4 (though other cards will have support soon). Current 3D cards will have to make due with four 256x256 textures per player. Our new skinning method enables player meshes to be mapped with four textures, so we can have separate faces and armor. This Ultima Online inspired approach lets players customize their look more than past 3D action games.
-Tim Sweeney
April 30, 1999
224 Progress
We're testing out another release candidate of 224 internally today. We're up to 224t. We haven't found any showstopper problems yet. Fingers crossed...
MOD Installer Notes
I just wanted to post some info about the upcoming Unreal 224 installer for mod authors. One of the major Unreal community-oriented features in this version is the mod installer, which enables mod authors to distribute their work in a single, self-contained ".umod" (Unreal MOD) file. Users can then download and launch a .umod file directly, in the same way that launching a .zip file brings up WinZip?. The umod's files are then installed into the appropriate directories.
To create your own .umod file, you need to create two text files describing your mod, for example:
- MyMod.ini (Technical description of the mod and the files it installs)
- MyMod.int (English language text for the mod)
Create these two files carefully, because the syntax is fairly strict. Then, you can build your mod using the new "ucc.exe" command-line tool:
- ucc master MyMod? (instructs the Unreal master-version builder to create MyMod?.umod)
The result is a file MyMod?.umod, which installs your mod. You can launch this file by double-clicking on its icon in the Windows Explorer, or start it from the command prompt with: "start MyMod?.umod".
| SetupFusion.ini (Technical description of the umod) | SetupFusion.int (English language text describing the umod) |
| [Setup] Product=UnrealFusionMapPack Version=100 Archive=UnrealFusionMapPack.umod SrcPath?=. MasterPath?=.. Requires=UnrealRequirement Group=SetupGroup Group=MapsGroup [UnrealRequirement] Product=Unreal Version=224 [SetupGroup] Copy=(Src=System\Manifest.*,Flags=3) [MapsGroup] MasterPath?=\\Server\Safe\Master\FusionMaps File=(Src=Maps\DM-Cybrosis.unr) File=(Src=Maps\DM-Letting.unr) File=(Src=Maps\DM-Loxi.unr) File=(Src=Maps\DM-Mojo.unr) File=(Src=Maps\DM-Shrapnel.unr) |
[Setup] LocalProduct?=Unreal Fusion Map Pack ReadMe?=Help\ReadMe224.htm SetupWindowTitle?=Unreal Fusion Map Pack Setup AutoplayWindowTitle?=Unreal Options ProductURL?=http://www.unreal.com/ VersionURL?=http://unreal.epicgames.com/versions.htm Developer=Epic Games, Inc. DeveloperURL?=http://www.epicgames.com/ Logo=Help\Logo.bmp [UnrealRequirement] LocalProduct?=Unreal ProductURL?=http://www.unreal.com/ VersionURL?=http://unreal.epicgames.com/versions.htm Developer=Epic Games, Inc. DeveloperURL?=http://www.epicgames.com/ |
The Setup*.ini file (technical description of the mod)
The [Setup] section describes the mod being installed.
- Product= is the internal (not displayed) name of the mod.
- Language= is the default language. "int" means International English, "frt" means French, "det" means Deutsch, etc.
- Version= is the version of this mod being installed. The version number is up to you, but it should be unique with each release, and always increase over time.
- Archive= is the name of the .umod file you want to generate.
- SrcPath= is the path where you want the .umod file to be generated. Leave this as "." to put it in the \Unreal\System directory.
- MasterPath= is the path where your .umod's files reside. Leave this as ".." to get the .umod files out of the \Unreal directory. You shouldn't need to change this.
- One or more Requires= statements list the other products your mod relies on. All Unreal mods rely on Unreal, so you should always have a "Requires=UnrealRequirement" line here. It's also possible for you to create a "mod for another mod" or a "mod for a level pack" or whatever; in this case you'll just have multiple Requires= lines here. Each Requires= line refers to a section with the corresponding name, for example Requires=UnrealRequirement says "Look in the section titled [UnrealRequirement] for information about the required mod".
- One or more Group= lines listing groups of files to install. For example, this mod installs two groups of files: Group=SetupGroup (corresponding to the files listed in the [SetupGroup] section) and Group=MapsGroup (corresponding to the files listed in the [MapsGroup] section). All umods must include the Group=SetupGroup definition, because these files are required by the mod installer.
The [UnrealRequirement] section describes the minimum version of "Unreal" the mod requires. All Unreal mods require Unreal, so you should always copy this section verbatim. If your mod relies on other mods, you need to add a "Requires=xxxRequirement" to the [Setup] section, and then add an [xxxRequirement] section to the .ini file, with the following information.
- Product= the mod you require.
- Version= the minimum version number required.
The [SetupGroup] section must be included as-is in all mods. It describes the files required by the mod installer. (You don't need to know this, but internally, the mod installer creates files called "Manifest.ini" and "Manifest.int" containing information about the mod).
The [MapsGroup] section is a user-defined list of files to be installed. It includes the following:
- MasterPath= an optional path saying "where to obtain the files in this group". You don't need a MasterPath?= line in your own mod. We use this internally because we keep all our maps on a central file server (hence the long network pathname). Mod developers will be keeping their maps in their regular Unreal directory structure, so a MasterPath?= line isn't required.
- File=(Src=Path\Filename.ext) lists files to install. For example, "File=(Src=Maps\DM-Loxi.unr)" says "install the file \Unreal\Maps\DM-Loxi.unr".
- Ini=Path\Filename.ini,Section.Key=Value adds or modifies lines in the .ini files. For example, "Ini=System\User.ini,Engine.Input.A=Say Hello" binds the user's "A" key to "Say Hello". "Ini=System\Unreal.ini,URL.Name=Fred" sets the player's name to "Fred".
The Setup*.int file (English language text describing the mod)
The [sections] in the .int file mirror those described in the .ini file above. The idea is that the .ini file contains all the technical info, and the .int file contains all human-readable text. This approach enables us to completely translate the installer into other languages, and the translators only need to deal with the installer text, rather than a jumble of text and technical parameters mixed together.
The [Setup] section contains text describing the mod:
- LocalProduct= gives the name of the mod in the language (.int for International English).
- ReadMe= gives the name of your ReadMe? file to display. It's optional. If you exclude it, no ReadMe? file will be displayed.
- SetupWindowTitle= title of the setup program's main window.
- ProductURL= gives the URL users are sent to when they right-click on your product name in the installer.
- VersionURL= the URL users are sent to when they right-click on your version number in the installer.
- Developer= the name of the developer who created the mod.
- DeveloperURL= the URL users are sent to when they right-click on the developer name in the installer.
- Logo= optional .bmp file to display as the installer's logo. If you don't specify one, the default Unreal logo is used.
The [UnrealRequirement] (and any other requirement sections you specify) contain the following. In the case of the [UnrealRequirement] section itself, just copy and paste the section above into your own installer files.
- LocalProduct= the name of the required product.
- ProductURL= URL where users can obtain information about the product (and download a patch if required).
- VersionURL= URL where users can obtain information about the product version (and download a patch if required).
- Developer= developer of the required product.
- DeveloperURL= URL for the developer of the required product.
Test your mod
This is a very important step. Install another copy of Unreal and the latest patch into a new directory, then try installing your .umod into that directory and running it. This is the only way to make sure your mod is complete and self-contained. It's all too easy to forget certain .u, .utx, .int or .uax files that your mod requires. Installing your .umod into your existing "development" Unreal directory and testing it from there isn't enough, you need to test a clean installation.
Limitations
- Almost all aspects of a mod can be uninstalled, but changes a mod makes to the .ini files using the "Ini=" option aren't undone at uninstall time (it's not clear how to handle this properly in cases where multiple mods change the same .ini line).
- The .umod files are not compressed. .umod compression will be supported later, in a way that is backwards-compatible with existing uncompressed .umod's. For now, you can stick your mod within a .zip file, and users can launch it by double-clicking on the .umod file from within WinZip?.
Summary
By packaging your Unreal mod into a .umod file, you gain the following benefits:
- Users can install your mod intuitively, by downloading it and either "Opening it" directly from the net in Internet Explorer, or double-clicking on the file after downloading.
- Users don't need to manually unzip certain files into certain directories, so a layer of potential confusion is eliminated.
- Your .umod file can automatically update the user's Unreal.ini file, so users never need to change their .ini file manually to make your mod work.
- Users can easily uninstall your mod by running "\Unreal\System\Setup.exe" and clicking on your mod from the list. This has been a very highly requested feature from users, since uninstalling Unreal mods manually can be a pain due to files being distributed among various directories.
- Your "ReadMe" file can automatically be installed, and the user can have the option of reading it after installing.
- All .umod's are stamped with "Developer, Product, Version" information and hyperlinks (http: or mailto:) you specify, so mod credits are always available and presented in a consistent way.
- The ease-of-use features add up to make mods more accessible to gamers, and will help expand everyone's audience beyond hardcore enthusiasts.
Things the community can do with .umod's
"It's not just for total conversions": Some other uses for .umod's are:
- Map packs. There are a lot of great user deathmatch levels on the net, but it's hard to locate maps "of a common theme" among the thousands available. So, map makers focusing on certain types of maps can collaborate and create a map pack, like the Unreal team did in releasing the free Fusion Map Pack.
- New weapons.
- New game types (such as CTF), and standard maps for those game types.
- Language packs. In case anyone feels the need to translate Unreal into other languages (we only provide English, French, German, Spanish, and Italian).
-Tim
April 19, 1999
Getting closer...
But we're not quite there with 224 yet. The guys have been beating on internal test versions for the past few days, and we've been polishing the code. It's both a blessing and a curse that the Unreal code is evolving by leaps and bounds, gaining major new features all the time. This approach makes testing each new patch a major effort. Though, 224 will be especially worth the effort because of the in-game server browser and level-of-detail optimizations.
224 will probably happen late this week.
Here is a <a href="http://www.next-generation.com/jsmid/news/6387.html" target="_parent">Next-Generation article where Mark Rein shamelessly plugs the patch.
Network Cross-Compatibility
(warning: nitty-gritty technical info)
An interesting technology feature in 224 is a new method of evolving .u files in a way that is backwards-compatible for network play.
One of the things that has always bothered me about past versions of Unreal is that clients and servers had to have exactly-matching .u files in order to play together. This has meant that every recent Unreal patch has broken network compatibility, leaving some players orphaned. The reason behind this is that Unreal's network code (described in detail here) uses the positions of objects within .u files as a "common point of reference" which clients and servers use to map objects between each others' address spaces. Some scheme of this nature is necessary when network code is generalized like Unreal's is, with the same scripts executing on the client and server, passing arbitrary data back and forth, with the network code transparently coordinating the game world.
I've been aware of some solutions to this problem all along (such as "send all object names as strings"), but they all sacrificed bandwidth.
Recently, I found a no-compromises way to enable .u files to evolve incrementally without losing compatibility. Now, when we release a new version, we copy the .u files into a new developers-only subdirectory \Unreal\SystemConform. Then we can make minor changes to our scripts and recompile new versions that are network-compatible with the old ones. When recompiling and saving a .u file such as \Unreal\System\Engine.u, the script compiler now examines the existing file \Unreal\SystemConform\Engine.u, and makes the new version "conform to the layout of the original". In addition, when a client connects to a server, they both negotiate to figure out who has the earliest version of each .u file, and both talk about objects "in relation to that old .u file". This enables compatibility without any loss in performance or bandwidth usage.
Really major updates will always break code assumptions and require downloading an update. This approach just makes minor incremental updates possible, enables us to test spot-fixes on the net, and generally makes our programming lives easier.
April 15, 1999
Important Unreal 224 Note To Mod Authors
Unreal 224 .u files aren't backwards compatible with past versions of the engine. So you'll need to take special steps to upgrade your .u files.
To upgrade mods to 224, you'll first need to export your scripts to *.uc files. You can do this in all versions of UnrealEd? like this:
- Bring up the UnrealEd? class browser on the right side of the screen.
- Click on the "Load" button and load your mod's .u file.
- Click on the "Export All" button and have UnrealEd? export all of the loaded scripts to .uc files (including yours and the engine's), creating a directory structure for all the .uc files: for example, the files from the Core package are in \unreal\core\classes\*.uc. If your mod is named XYZ, your .uc files will be exported to \unreal\XYZ\classes\*.uc.
In Unreal version 221 and earlier, you can rebuild your mod named "XYZ" from the command line by typing:
cd \unreal\system
del XYZ.u
unreal -make
You can do that now, prior to the release of 224, to verify that your mod has been safely exported and can be rebuilt from the command line. I highly recommend doing this now, because if you install 224, you will no longer be able to load your old .u files, so you'll have to downgrade back to 220 in order to export them. Some developers prefer to edit scripts in UnrealEd?, but many of us actually edit scripts in an external editor (like Visual C++) and use the command-line interface for all production work.
In Unreal 224, we have a new command-line compiler with a slighly different syntax:
cd \unreal\system
del XYZ.u
ucc make
-Tim
Maps, Textures, Sounds, Music are backwards compatible
...so there shouldn't be any problem with existing user maps built with past versions of UnrealEd?. I checked this by downloading a bunch of maps from Unreal Resources and Nali City and testing them. The one "gotcha" is that some user maps being distributed contain .u files, and those aren't backwards compatible, so they will refuse to load until the .u files they depend on are upgraded.
Latest News
I've been awake for way too long, so please forgive my spelling and grammar!
Internal testing of 224 continues. Things are looking pretty good, though we need to go through a couple more iterations before everything's in perfect shape.
The Adrenaline Vault has a good article on the latest Unreal 224 features. They spill the beans on the major new feature I alluded to below:
Another major enhancement to be included in 224 is continuous level of detail,which varies polygon counts on objects such as player characters and power-ups relative to their distance from the camera, or player's perspective. In Unreal Tournament, this will enable the engine to place more characters and objects on the screen and still maintain a consistent and fluid framerate. Rein said this is an important feature not just for Unreal and Unreal Tournament but also for engine licensees since it also opens the engine to new game types, such as real-time strategy titles, that were not previously obvious choices for the engine.
Cool Stuff
While I wait for 200,000 lines of Unreal code to recompile, I wanted to point out some more cool things that seem to be under-appreciated.
- WinAmp is a great MP3 music player for Windows; and its companion, ShoutCast is a streaming "Internet radio" companion. While I know MP3's and Internet radio has been around for a while, WinAmp? really deserves credit for its grassroots following and overall coolness factor.
- Windows 2000 internationalization support. This pure Unicode OS will mark the first time Microsoft ships a single binary worldwide, which will be a great leap forward in making it easy to develop games (and applications, and websites...) for the international market.
- MELP 2400 bits-per-second phone-quality voice compresion. Speech compression research has been making major leaps and bounds lately, as quality voice compression ratios skyrocket. The latest set of algorithms analyze an audio stream and (to simplify things a bit) transform it backwards to vocal cord excitation. The resulting compression ratio is in the neighborhood of 100-to-1. This is a research subject Carlo Vogelsang (Unreal sound engine programmer) and I have been looking into lately, and it turns out to be very complex and math intensive.
-Tim
April 14, 1999
3dfx Voodoo3 Totally Rocks!
I just picked up a carload of the new Voodoo3 3000's; we've put them to good use, as the team is now testing the upcoming 224 patch.
The performance and graphical quality of the Voodoo3 are simply amazing. Though we've had a board for over a month, beta drivers and pre-release board problems prevented us from realizing just how far ahead of the pack this hardware is.
On the PC, most technological improvements come in little incremental improvements, such that we seldom have a chance to experience a single major leap. Back when 3dfx introduced the Voodoo 1, that was one of those rare leaps. Since I've been off working on "OpenGL land" on the Riva TNT, ATI Rage 128, and other accelerators, I haven't had a 3dfx card in my machine since soon after Unreal shipped. So, for me at least, getting a Voodoo3 and being able to play at those ultra high resolutions at a great frame rate, is another one of those leaps.
While the Voodoo3's fill rate is outstandling, where the card really clobbers all others is its texture management performance. This is a very important characteristic, because it determines how smooth the performance is from frame-to-frame. Unreal, though it shipped nearly a year ago, still pushes texture limits harder than other 3D action games, and Unreal Tournament pushes them even harder.
Unreal 224 performance is also being helped by some new lighting optimizations, and a major new engine feature, which Erik de Neve (Unreal optimization and algorithmic texture guru) has been working on. But I'm not allowed to talk about that since Mark Rein is writing a press release about it now.
Note: Unreal 220 is incompatible with Voodoo3's due to some changes that were made to Glide; people who have Voodoo3 2000's will need the upcoming 224 patch.
-Tim Sweeney
March 24, 1999
Stat logging & Global ranking in UT
A press release went out today discussing how Unreal Tournament is going to be using NetGames, USA's stat collection software. I thought I would update the tech page to make it a little more clear on exactly what this means.
NetGames, USA has published a very cool set of stat logging guidelines for games. The guidelines, called ngLog, establish a series of criteria for in-game logging as well as an output format. UT is currently 100% compliant with the ngLog guidelines.
Why is this cool? Well, stat collection during a game allows us to do some pretty neat things. Using NetGames?, USA's ngStats software, we can take the log files and generate HTML reports on how you played the game. You'll be able to see things like how many kills you got with a certain weapon, who killed you the most, and so forth. Unreal Tournament implements this report generation in two ways.
First, you have local logging. This applies to the single player game, listen servers, and some dedicated servers. When you turn on local logging an unencrypted log of the game is recorded on your machine. The exact contents of the log depend on the game type...for example in CTF you'll get special CTF events in addition to the normal game messages. At the end of the single player game, the log is compiled and an HTML report of the game is generated. You can take a look at the report if you want or you can keep playing. If you want to run a listen server or a dedicated server for a LAN party or a bunch of buddies, than you can turn on local logging and generate HTML for those games.
The really cool thing about local logging is the persistant stat tracking. As you play, all of your scores are tracked to give you a lifetime total. If you play through the entire single player Unreal Tournament with local logging turned on, you can see how many kills you personally racked up during the entire game, your proficiency with a certain weapon, or what bot gave you the most trouble. There is also a link on the main report page that tracks your best game ever...other games are sorted by date. Its really cool to watch in action, especially when you are playing with friends. Building up a database of many games can show some surpising insight into the way you play.
The second type of stat logging is global logging. This is very very cool. Dedicated servers that have an external internet connection can turn on global logging. When a game is played on that server an encrypted log is generated. At the end of the game a batcher is called that sends the log file to NetGames? USA's global stat compilation server. All of the stats for that game are entered into the global database and the relevant HTML is updated. This allows for some very cool things like: global laddering, player of the week, and clan of the week. You can even pull up your own stats and compare them to anyone else who plays UT online. Don't want to be logged? UT's internal server browser indicates whether or not a server is running global logging.
We are fully aware of methods of cheating and hacking that might be employed against the system. Log forgery is not possible because of safeguards and watermarks built into the ngLog system. There are a couple ways where hackers could ruin global laddering. If this happens, we'll remove the ladder. I'm hoping people will play nice and we won't have to do this, but there are lot of punks out there. Even if the ladder is compromised, there will still be a lot of other cool things, like global game tracking and personal stat tracking. These can't really be compromised, because if you get online and play legitimately than your own scores will reflect that. If you cheat up your own scores...no one else cares. You've only cheated yourself.
I hope this explanation is clear. I'm going to bug Craig at NetGames? USA for some snappy shots of the system and if he doesn't get back to me I'll just make some of my own. :-P
A couple other things. All of the batcher URLs for the NetGames? USA executables are exposed in the UT .ini files. This means that util programmers can read up on ngLog now and start on their own HTML generation programs. They can change the .ini reference or write an UnrealScript? frontend to their util and have UT call it instead. In addition there are two new engine level objects for use with stat logging. StatLog? and StatLogFile? can be subclassed for the purpose of writing stat logs that aren't in the ngLog protocol. Finally, mod authors will be able to add their own log entries by making custom StatLogFile? objects.

Here are two shots of local logging [ngStats] and global logging [ngWorldStats]. Click to enlarge. - GreenMarine?
March 19, 1999
Latest News
We've been going through many iterations of internal testing and improvements on the upcoming patch, which is now known as 223. Here is the latest list of changes. The story behind the version number is that each time we make a new version for internal testing, we give it a new version letter (for example, 221a, 221b). Between the previously released 220 patch and the current one we're working on, we've gone through more than 52 internal versions. We've beta-tested two release candidate patches, but each one has required more work. I don't have a release date for this patch yet, but we're working hard to get it finished.
One unfortunate side-effect of the recent UnrealScript? improvements (dynamic strings, multi-skin support, other engine enhancements) is that 223 will have to break mod compatibility with previous versions, and require at least a recompile (and code changes in many cases). We hate breaking mods, because we understand how much pain it causes for mod makers and the community to get back in synch with the latest version, but sometimes it's a necessary evil, as a side-effect of progress.
One bonus we're putting into 223 to help compensate for the pain and suffering is Jack "Mek" Porter's windowed GUI code, the high-level UnrealScript? windowing framework we're using for Unreal Tournament. This includes the graphical "server browser" for finding good servers to play on -- sort of an in-game GameSpy?. The windowing code will give the community a chance to experiment with windowing well before Unreal Tournament ships.
Level-Of-Detail Texture Mapping
I finally got the chance to write a rendering optimization I've been thinking about for a long time now, level-of-detail texture mapping.
Unreal's biggest performance problem in OpenGL? has been texture management overhead, which causes frame rates to vary a lot (for example, jumping from 30+ fps down to 15 fps for a frame or two when new textures come into view). This is especially noticeable on on the Riva TNT, which has a very good fill rate and can handle large polygon counts, but is around 4X slower transferring textures to the card than Voodoo2.
Solution: I create redundant versions of textures, scaled down 4X (in memory usage), 16X, 64X, and 256X. When an object being rendered is far away, I use a lower resolution version of the texture -- which doesn't cause visual problems (since the texture would be mipmapped anyway) but requires less texture data to be transferred.
This has enabled us to boost the Unreal Tournament player models' texture usage to 256K of texels per model. More info about additional level-of-detail features later...
Future of Programming Languages
Lately, I've been doing research on programming languages, in the interest of gaining new ideas to implement in the successor to UnrealScript? for our next-generation (after Unreal Tournament) engine. Some of the topics I've been formulating are:
- Garbage collection (see the <a href="http://www.iecc.com/gclist/GC-faq.html"
target="_parent">GC FAQ for background). UnrealScript? uses a simple recursive
mark-and-sweep garbage collector which is only executed when changing levels, along with
some special-case code to garbage-collect destroyed actors during gameplay. Most
implementations of Java use a background thread to run a generational garbage collector.
Java's approach is more general, but can cause pauses during execution as large
amounts of garbage are purged, which is bad for frame-rate consistency.
Java garbage collection presents a problem for object finalizers (the equivalent of C++ destructors), because the finalizer is executed at some random time after the object in question effectively becomes garbage, and finalizers of multiple objects are executed in random order. This limitation makes finalizers dangerous and not terribly useful. One work-around is to not support finalizers. Another work-around is to support them, but publish a list of "things that aren't safe to do from within a finalizer" (such as cause finalized objects to become rooted again, make assumptions about finalization order, etc). UnrealScript?'s current solution is a mix of the two; finalizers must be native (implemented in C++) and are subject to those safety guidelines.
Another general conceptual problem I have with garbage collection is that, often, the physical lifetime of an object (as defined by the garbage collector) often exceeds the "practical" lifetime of an object (as defined by the semantics of the program you're writing). For example, a window object in a windowing system is only meaningful when the window is open on screen; after the window has been closed, the object becomes meaningless even though it still exists and other objects might still be referring to the window. The general problem is that programmers often would like a "way of explicitly destroying an object and removing any other objects' references to it". C and C++ avoid this problem by making all memory management the program's responsibility. Java avoids it by making the program responsible for determening whether an object you're referring to is meaningful (for example by calling IsOpen?()). It would certainly be nice if object lifetime management and notifications became the full responsibility of the programming language, enabling programmers to instead focus on higher-level problems.
The garbage-collection strategy that would be ideal, from the standpoint of predictable code and memory usage, is to finalize and destroy objects the exact moment they become garbage, i.e. when the last variable still referencing it changes. I've tried, very unsuccessfully, to find efficient approaches to manage such as system by tracking multiple reference counts, doubly-linked lists of two-way references between objects, etc etc etc, and haven't been able to find an approach more efficient that performing a brute-force mark-and-sweep pass every time a reference to an object changes (plus optimizations such as reference counting to collect objects without cyclic references). Stated in graph theory, the question boils down to "Given a graph and a particular directed edge of the graph, does removing that edge break the graph into two disjoint pieces?" Does anybody know if there is a graph-theory algorithm for determining this, which enables you to add a directed edge to the graph in constant time, and also remove an edge and determine disjointedness from that removal in constant time?
- LISP defines a new kind of object called a "function closure" which basically
represents a pointer-to-a-member-function with several of its parameters bound to specific
values (for example, binding the implicit "Self"/"this" parameter to a
particular object. This is a great object-oriented generalization of
function-pointers, but the syntax becomes fairly complex in a statically-typed language
(some issues you run into are recursively-defined closure types, and cyclic closure
types). Microsoft's Java extensions in Visual J++ include a simpler and more limited
type of object called a "delegate" which is a pointer-to-a-member-function bound
to a specific instance of an object. I plan to experiment with these possibilities
and implement "something along these lines" in the next engine.
- Inner classes, as defined by Java, are a great feature for attaching objects together hierarchically. This is definitely a feature I want for the future. One example area where inner would simplify and generalize the code is Unreal's actor lighting support. Currently, the Actor class has a bunch of variables related to lighting (LightBrightness?, LightHue?, LightSaturation?, LightEffect?, etc), and an enumeration LightType? that describes the light's overall mode of operation. While this is an improvement over past engines, and general enough for 1998-1999 games, it could be much better. Actors could instead reference a separate Light object which describes the lighting in a more general way. Instead of having a hardcoded enumeration for light effects (such as LE_TorchWaver, LE_Cylinder, LE_Spotlight), all the different light types could be represented by separate classes (TorchWaverLight?, CylinderLight?, SpotLight?) with the class supplying the appropriate spatial and volumetric lighting math. Additionally, the lighting objects could be made hierarchical, so you could modulate a cylinder light by a spotlight, and add a torch wavering effect on top. New light classes could be defined modularly to supply new lighting functions without modifying the engine source.
While my plan for the next scripting language is gaining more clarity, there are still a lot of wide-open issues. For example, whether Java-style interfaces are necessary (since most of the same functionality can be obtained from inner classes), what the final garbage-collection strategy is, how similar do we want to make the language to Java, etc.
Visible Surface Determination
One of the biggest next-generation challenges for 3D programmers will be in solving the "visible surface determination" problem for complex scenes. Doom basically used a densely portalized BSP scheme; Quake used a BSP in conjunction with precomputing the visibility from each BSP leaf in the world to every other leaf, trading off precomputation time in exchange for rendering performance. Unreal uses a sparsely portalized BSP tree and performs a software span-buffering pass to determine which polygons are visible prior to actually rendering them. None of these approaches are clearly superior to the others; they each have strengths and weaknesses. Unreal's tradeoff enables us to render more complex multi-pass surfaces (very high-res textures, detail textures, light maps, and fog maps) but limits our polygon counts, since rendering performance grows approximately as "n log n" with polygon counts, compared to Quake's basically linear "n" scaling.
The visuals of Unreal Tournament vs. Quake 3 Arena will provide a very useful equal-footing comparison between the two techniques, with id Software is pushing the limits of polygon counts, and us pushing the limits of texture detail.
After this generation of games, I think we'll all have to fundamentally change the way we approach the visibility problem. As 3D worlds grow larger, more seamlessly interconnected, and more vibrant in terms of dynamic and procedural geometry, we'll need more of a no-tradeoffs approach than precomputed visibility or BSP's. Portal and anti-portal clipping schemes look promising. Hardware-assisted visibility tests (such as HP's <a href="http://www.opengl.org/Documentation/Version1.2/HPspecs/occlusion_test.txt" target="_parent">OpenGL occlusion test extension) look promising. Even the good old DFE scheme becomes more practical with increased 3D hardware performance. After Unreal Tournament, I'll be experimenting again with all of these techniques.
Commentary on Cool Stuff
I just wanted to point out the following cool technical things.
- OpenGL <a href="http://www.opengl.org/Documentation/Version1.2/EXTspecs/fragment_lighting.txt" target="_parent">Fragment Lighting and <a href="http://www.opengl.org/Documentation/Version1.2/EXTspecs/light_texture.txt" target="_parent">Light Texture extensions. These exceedingly clear, general, and well thought-out rendering capabilities are going to be the next quantum leap in 3D hardware acceleration acceleration, enabling true Phong/Blinn bump mapping and a tremendous variety of other features. My reaction to seeing this spec for the first time is reminiscent of first experiencing 3dfx's Voodoo accelerator and the Glide API--it's "I can't believe how powerful yet simple this is to work with".
- Hyperbolic Tree Controls: This is the first generally useful new GUI control I've seen in years. Imagine the possibilities for using hyperbolic trees to browse the actor lists and server interconnectivity of huge interconnected online worlds.
- Burrows-Wheeler Data Compression: A new, unpatented approach to data compression; trivial implementations can easily beat PKZIP.
-Tim
February 12, 1999
Cool Unreal resources on the Net
This UnRoyal site contains reviews of single-player maps and a top-ten list. If you want some new Unreal single-player action but don't like digging masses of levels, go check it out! It's a very useful site and it's currently under-appreciated.
In contrast, Unreal Resources is for people who want to see it all...it's a massive site containing nearly all deathmatch maps and Unreal mods in existence.
Playing modem Half Li..., um, I mean, Unreal
For people who want to play direct modem-to-modem multiplayer, the Atomic Half-Life site has a good article on configuring Windows for this, which will work with most Internet playable games.
-Tim
February 10, 1999
Latest News
Progress on Unreal 221 and Unreal Tournament continues. We are making changes and improvements at such a fast pace that it has been hard/impossible to stabilize the code for the 3-5 days required to fully test a new patch. I apologize for the earlier false start we had with 221.
What we've been programming
I've been juggling work on the installer, OpenGL?, and some core UnrealScript? improvements. The installer is coming together, and is complete in terms of installing the retail game and patches, but more work remains to be done on uninstallation issues, and improved support for installing/distributing mods. Some of the latest UnrealScript? improvements include a command-line script compiler, which can be used from any programmer's editor (or Visual C++) with standard output of error messages; UnrealScript? execution optimizations; and support for dynamic strings.
UnrealScript's string support has been pretty solid all along, as a result of using BASIC style functions (Left, Right, Mid, InStr?, Chr, Asc...) instead of C's error-prone string handling functions (strcpy, strcat, strcmp, sprintf). The one annoying limitation, which has been the source of some bugs in the past, is that strings were fixed length. 221 supports dynamically sized strings with no practical size limitation (just available memory). This makes it easier to write text-processing routines, which the new in-game server browser is really stressing.
Steve Polge has been improving the AI and the flexibility of the game code. Because Unreal Tournament's gameplay can be far more complex than Unreal 1's (from a bot's perspective) as a result of team play and Capture The Flag, Steve has been teaching the bots a lot of new techniques for coordinating together and better understanding the environments. It's sooo cool watching Cliff and Myscha playing CTF with a few bots on their teams.
Jack Porter is hammering away on the new user interface code and the in-game server browser. In the past, first-person action games haven't been known for having good user interfaces. We're hoping to change that, and go for the quality level of an EA Sports interface. Sticking to our general-purpose roots, Jack isn't just creating user-interface code for Unreal Tournament, he's creating a flexible, object-oriented UI framework which will be very suitable for licensees and mod makers.
Brandon Reinhart is working hard, implementing a lot of the Unreal Tournament game code, the single-player progression, stats tracking, and much more. The stats tracking is going to be a very cool feature for Internet play; perhaps I can convince Brandon to write a note about it here.
Erik de Neve, who created Unreal's algorithmic fire and water effects and optimized much of the rendering code, is working on a next-generation project that will make its debut in Unreal 2.
Linux Notes
We now have a command-line (windowless, console based) script compiler and server for Unreal, which has minimal dependencies on Windows. This is a first step towards a Linux port, and it also runs very well under Wine, with minimal overhead. This might be a good interim solution for Linux server administrators, before the full port is done. I just noticed in GameSpy? that the top server on the list is titled "CHiX Unreal NT Server (220) PORT UNREAL TO LINUX". Hint taken. :)
We actually have the Unreal 221 Core source compiling under EGCS 2.90.29, C++ templates and all. Getting the thing linking and running successfully will require a lot more work, which we won't be able to focus on until UT ships, but the experience thus far has been very positive.
-Tim Sweeney
January 28, 1999
Unreal 221 Development Update
Unreal 221 development continues, with quite a lot of new features slipping into this version.
Right now, Mark Poesch (the lead programmer of Wheel of Time) is visiting us here in Raleigh, merging in some of the improvements the Legend team has added into the Unreal engine for WoT? and Legend's upcoming Unreal level pack.
I'm working on Unreal's OpenGL? support, and will soon get a version of the code to the 3D hardware makers who have some driver issues to work out. The Riva TNT is currently the fastest and most stable card, with the ATI Rage 128 looking very promising, especially in 24-bit color.
I'm also extending the Unreal installer which shipped with the 220 patch, turning it into a full-blown installation program for future patches, shareware versions, and retail versions. I'm also contemplating extending it to support Unreal mods, which could then be distributed in a self-contained format (.uzip?) which Unreal automatically knows how to install. This would put cool mods just 3-4 mouse clicks away from users who are browsing mod sites like Unreal Resources, a great improvement over the current process of "download a file, run PkZip?, extract the .utx files to the Unreal\Textures directory, extract the .unr files to the Unreal\Maps directory, run Unreal, then try to figure out how to launch the mod". This has the potential to bring mods to a much wider audience.
While I don't enjoy the painful and redundant task of writing an install program, I see it as worthwhile because it's such a critical piece of a game--especially one which is supported by an online community and third-party licensees.
Unreal Tournament
The rest of the team is hard at work on Unreal Tournament, and we're really happy with the way the game is shaping up. Unreal was such a huge, multi-faceted project that we weren't able to focus on deathmatch as much as we would have liked. Unreal Tournament, with its identical gameplay style between single-player and multiplayer (the only difference being bots vs. human opponents) has given us a far more opportunity to polish the gameplay and the look-and-feel.
-Tim Sweeney
January 7, 1999
Demo Recording
Unreal finally supports demo recording! I have spent the last few days implementing server-side demo recording, based on Unreal's generic networking code. It currently supports recording demos of multiplayer games on dedicated and non-dedicated Unreal servers, as well as recording Botmatches. When played back, you can watch the game from the perspective of any of the players, or fly about the level at will - just like you can as a spectator in multiplayer games. This will be available in an alpha form in Unreal 221.
Multiplayer client-side and single-player recording are not fully operational yet, although it should currently be possible to record demos on a co-op play server. Testing and bug-fixing of 221 continued on Wednesday, but there's still a litte more to be done before we can release it.
- Jack "Mek" Porter
January 4, 1999
Unreal 221 Not Yet Available
Currently there is a bad UnrealBeta221?.exe patch being distributed around the net. This is NOT Unreal 221. Please do not download and use this patch. Sorry about the confusion.
- Brandon "GreenMarine" Reinhart
January 1, 1999
Happy New Year
The team is now getting back together from the holiday and we'll get back to Unreal 221 development first thing tomorrow (Saturday). We were on the verge of releasing the patch right before Christmas, but we're now back to being a few days away, since I added some new features that need re-testing, and some additional bugs have been found.
For me, the holidays were fun and productive. I hauled my computer up to Maryland for a one-week visit with my parents, and that provided a good excuse to work on engine improvements and new R&D in a zero-distractions environment. Without getting to deep into the details, here are some of the things I worked on:
- Unicode Unreal. I finished up 16-bit Unicode support; now the
Unreal code base can be recompiled for the ANSI (8-bit) or UNICODE (16-bit) character
sets. This has several advantages. First of all, localizing a game for
non-Roman languages (such as Japanese, Chinese, Korean, Hebrew, Arabic) is easy with
Unicode. Second, we're really interested in Windows CE, and that is a pure Unicode
OS. Windows CE is the native operating system of the Dreamcast, so Unicode is a
natural stepping-stone along the Dreamcast porting path which we're exploring.
Windows CE is also used in tons of palm-top computers. Now, none of these palm-top
computers are currently interesting from a gamer's perspective, but if you extrapolate
their grown--in terms of video resolutions, RAM, and processing power--along a Moore's Law
curve, they're not that many years away from being comparable to low-end Pentium II PC's
today. I like to think that the GameBoy?'s of the future won't be a closed platform,
but rather run a standardized OS like Windows CE.
All Unreal data files are "character set neutral", meaning they can contain any mix of ANSI and Unicode characters, and they're automatically converted/truncated at load time. Network play similarly "just works" between the Unicode and non-Unicode versions.
Regarding Unicode font issues ("who's going to paint all those Japanese characters?"), Jack Porter has built a TrueType? font importer into UnrealEd?, which converts any Windows TrueType? font to an Unreal-compatible font bitmap. This is an essential part of our Unicode efforts, but also ties into the new user interface he and Brandon are building for Unreal Tournament. There are lots of Unicode fonts with support for nearly all Windows-supported languages, so localizing games into all languages should be fairly painless.
- Data compression. I spent a couple days experimenting with
various compression schemes and found some interesting results. First of all, it's
fairly easy to achieve PKZIP-quality compression--the algorithms are well documented and
easy to implement. Second, it's nearly impossible to beat PKZIP by much of a margin.
Beyond the standard algorithms (Huffman and LZH compression), I experimented with
many variations, including:
- "Double" Huffman-compressing each character in a file then recursively merging compressed regions together into spans, with the goal of compressing "different types of data" with different encoding tables. This approach came out neutral: there were huge gains in compression, but they were offset by having to store lots of Huffman tables.
- Trying Huffman compression in bases other than 2 (such as 3, 5, and 7): no overall gains.
- "Infinite sliding window": An LZH-style scheme that spends a huge amount of CPU time on compression by analyzing an entire file for differences. Here, the gain was typically 10%, but it was unbearably slow to work with.
- Arithmetic encoding. This is a Huffman-style scheme that employs some basic number theory to generate a compression table using arbitrary bases (other than base 2). This gets real gains of around 10% compared to Huffman, but is much slower to decode because it relies on arbitrary-precision integer math.
I didn't get the compression code into the Unreal master source (it was standalone R&D). I'm considering supporting compression for client-downloadable files in Unreal Tournament, to make it easier to go onto servers running custom maps. My most usable compression scheme got 4:1 compression on .unr and .u files (nice!) but no significant compression on textures and sounds.
Unreal's textures compress poorly for an interesting reason: they are already stored using palettes, which are a form of compression. Furthermore, the process of generating an optimal palette for an image yields an array of bytes which are distributed near-uniformly, which is the worst possible case for variable-code-word compression. I think the state-of-the-art in texture compression will be S3's real-time S3T/DXT scheme, which is fairly lossy, but optimal for real-time decompression while rendering. And it's 6:1 for all possible kinds of data.One interesting technique I played around with for texture compression is wavelet compression. The 2D wavelet scheme for textures is quite similar to mipmaps: to oversimplify a lot, you represent an nxn image as a sequence of 1x1, 2x2, 4x4, 8x8 ... nxn. Each bitmap is stored as "signed differences" relative to the lower-res versions of the bitmap. Wavelets are a good starting point for lossy compression schemes, because the "most visually noticeable" details are in the low-res bitmaps, and in the high-frequency portions of the high-res ones. So, it's fairly easy to filter out unimportant details and compress what remains. Wavelets are also nice because you can generate all your texture's mipmaps from a single wavelet without any overhead. While I don't think wavelets will play a role in our future texture-mapping plans, they look more useful as a way of storing and manipulating height maps and displacement maps. Wavelets provide a very efficient, "level of detail"-aware form of storing 2D surface geometry.
- 3D API's. I spent a few days learning the basics of curved
surface rendering, which turned out to be very interesting. I was going to do my
research with Direct3D (under Windows NT 5.0 Beta 3 RC0) but the 3D hardware support isn't
quite there yet, so I took the opportunity to learn OpenGL? using the software rasterizer
and 3dfx's OpenGL? minidriver. Both renderers were extremely stable and easy to use.
To my amazement, I never experienced a "blue screen of death" or had to
reboot--quite a difference from my past work with Glide and Direct3D! (Note: I
haven't been very closely involved in the Unreal Direct3D and OpenGL? support, which has
been developed by our partners, so this is my first really in-depth experience).
OpenGL's approach to window management turns out to be extremely simple and reliable. I went from zero to having a spinning cube up and running in under 30 minutes. The tools GL provides for polygon drawing are extremely simple and powerful. For just drawing a few lone polygons, glVertex() and its associated functions are super-easy. For drawing complex meshes, GL's approach to providing separate client-side arrays for vertices, colors, and texture coordinates is very easy and efficient for multi-pass rendering, since you can swap out one table (say, texture coordinates) without affecting the others.
OpenGL's texture approach (glTexImage2D and glBindTexture) are also very simple and powerful. I remember back under DirectX5?, trying to upload a texture to hardware. I spent 4 hours trying to figure out the code and rebooting my computer as it repeatedly locked up. I spent less than 15 minutes figuring out OpenGL? texturing and implementing it. Comparing both API's texturing approaches, OpenGL?'s texture management is absolutely the right way to go.
- It's extremely foolproof--you call 3 textures to create, upload, and delete textures. Nothing can possibly go wrong!
- There is no bizarre/mysterious emulation going on. For example, in Direct3D you can modify a texture by Lock()ing it and writing to "video memory" directly. But, on some hardware (like the Riva TNT), the hardware stores textures internally in a "swizzled" format you can't access directly. So some emulation thing has to go on behind the scenes where multiple copies of the textures are maintained and copied around.
- OpenGL hides the inner details of texture management from the app, enabling the driver to be optimized for whatever style of texture management is best for a particular 3D card. In OpenGL?, a driver writer has total control over texturing and can optimize the hell out of it. In Direct3D, the API hides the application from the hardware and vice-versa, which makes it impossible for a game or a hardware driver to implement good texture caching.
Here's a link to OpenGL information and DirectX information.
- Curved Surfaces. I became familiar with a bunch of different
techniques. Curved surfaces pose the same kind of dilemma I felt when writing
Unreal's software renderer: there are lots of mutually incompatible approaches to choose
from, but no really clear favorite. Each technique has some desirable strengths, but
no technique combines them all.
My first experimentation was with bicubic bezier patches, which are a great primitive for building curvy shapes without holes between patches (as with polygons, continuity can be guaranteed by having adjacent patches share vertices and control points). However, they require a fair amount of math for tessellation and, though continuity can be guaranteed, it's hard to join patches together smoothly (with a continuous normal vector across adjacent patches), especially during animation. I'm pretty sure these will be a key primitive in the next-generation engine. Beziers are very intuitive to model with.
The tensor-product math for bicubic bezier quad patches can easily be modified to enable "bicubic bezier triangles", which can share edges continuously with quads. I haven't been able to find any references on this, but I derived the math, and it seems to work.
Then, a totally different approach can be used to generate smoothly curved surfaces of arbitrary topology, using a technique known as "subdivision surfaces". This looks promising: approximately the same overhead as Beziers, but a bit more general.
All of the above approaches can also be modified to support displacement maps, for creating more organic geometry. While it will be a long time before 3D hardware supports sufficient triangle densities for displacement maps to be practical for fine surface detail (such as rocks and bricks in walls), they're very applicable to terrain and coarse surface detail.
There are two even wilder curved techniques I experimented with and found to be quite promising, but I don't want to get too far off on that tangent.
No, Unreal Tournament will not contain any curved surfaces. While curves are cool and we'd love to have them, we've been totally focused on core game play, networking, and user-interface enhancements for UT.
One thing that has become extremely clear in my curved-surface rendering research is that editing tools will be a make-or-break factor in the success of next-generation level design. UnrealEd? is a pretty feature-filled polygon based editing tool, but we're going to need a lot more than that for the next generation. So many features that were trivial with polygon engines--such as texture alignment, light map placement, primitive building tools, object alignment, and freeform object editing--become more complex when curves are involved. The editing tools will need to be more powerful and intuitive in order to compensate. Editing tools will be a huge focus for us going into the next project.
-Tim Sweeney
Other Updates
- We updated and coolified the Unreal Technology Partners page, which lists all the announced Unreal engine licensees.
- Alexander Brandon updated the Music composition page.
- Dave Carter's Nerve Damage contains lots of cool resources for Unreal modelers and animators.
December 27, 1998
Unreal Resources
Morn has reopened unreal.org to serve as a comprehensive Unreal resources page. In addition to basic pointers to news, mod authoring, and mapping information, he's running a few local newsgroups you can obtain from news://unreal.org.
Hope everyone had a great Christmas. I know I did. Sleater-Kinney is amazing.
221 will be out any day, right now I'm the only dude here in the offices and while I could release the patch, I need word from Tim on whats up first. Laterz,
Brandon "GreenMarine" Reinhart
December 23, 1998
We're going to hold off on the upcoming 221 update until after Christmas. A few minor issues remain and, with most of the team away or inaccessible for Christmas, testing has been going slowly.
Have a safe and happy holidays, everyone!
-Tim Sweeney
December 21, 1998
Unreal 221 ReadMe? file
For the curious, here is ReadMe221.htm, the list of bug fixes for the upcoming patch. Also, we translated the original release Unreal ReadMe? File to HTML.
221 internal testing; installer underway
We're still testing and tweaking 221 internally. It's really stabilizing well, though it's still a couple days away.
Work continues on the new Unreal installer and patching program. While this might not seem like a very good use of Unreal development time, PlanetUnreal's survey indicated that 17.1% of the respondents encountered problems installing the 220 patch. So, this was a pretty important thing to fix. Here's a screenshot.
-Tim Sweeney
December 19, 1998
Unreal Licensing Information
Since I get a lot of emails about this, I went ahead and added the Unreal engine licensing information to the page here. See the links under "licensing" in the frame on the left.
I also went ahead and posted the remaining Unreal licensee documentation. Most of this info will only be useful to mod authors after the C++ code is released with 221.
Unreal 221 Status
We're wrapping up the bug fixes and testing it internally now. It's near release, but it could take us 24-72 hours to go throught the final iterations of testing. The 221 patch just incorporates minor bug-fixes to 220 based on feedback from gamers; it doesn't contain any significant new features or optimizations.
For 221, I've also been writing a real installation program, since we've received a lot of support questions along the lines of "I downloaded UnrealBeta220?.zip, now what do I do with it?" It turns out there are a lot of issues with people not having WinZip?, old versions of Zip/WinZip not supporting long filenames and refusing to overwrite read-only files, and uncertainty over where to unzip the patch files.
-Tim Sweeney
Improved skin and mod support in Unreal 220
The menus in Unreal 220 determine what player classes, game types, weapons, and skins are available by scanning the .int files. Each package (.u file or .utx texture file) should have an associated .int file which can specify what new objects can be found in that package. This allows mod authors to have their new content seamlessly integrated and available from the existing Unreal menus.
To add new skins, you should create a utx file containing only skins for a specific mesh. The utx name should begin with this mesh's name, for example "male1skins2" or "female2skinsCTF". This utx file goes in the Unreal\Textures directory, while the associated .int file (with the same name) goes into the Unreal\System directory. The .int file should specify what skins are available in the .utx file using the format
[Public] Object=(Name=Male1Skins2.JMale2,Class=Texture) Object=(Name=Male1Skins2.JMale3,Class=Texture) Object=(Name=Male1Skins2.JMale4,Class=Texture) Object=(Name=Male1Skins2.JMale5,Class=Texture) Object=(Name=Male1Skins2.JMale6,Class=Texture) Object=(Name=Male1Skins2.JMale7,Class=Texture) Object=(Name=Male1Skins2.JMale8,Class=Texture)
Male1Skins2 should be replaced with the package name (the name of the .utx file). When importing the skins into the utx file, do not give them a group, since this will confuse the skin name parser. As an example, you can create a .utx file containing the "hidden" Male1 skins. Open UnrealEd?, and from the Textures browser select and export the skins JMale2 to JMale8 (using the export button in the bottom right hand corner). Then import all these skins into a new .utx file, Male1Skins2 (you should specify this as the package name). Save this package, and the use notepad to create a Male1Skins2.int file in Unreal\System. It should include the lines above, listing all the skins contained in the .utx file. Or, if you're lazy, you can get male1skins2.zip.
You will also want to reference this new skins package in the ServerPackages?[] list in unreal.ini so that your server will download this package to clients if necessary.
If you have created a new game type (a subclass of GameInfo?), with a class name of "Mayhem", and the name of your package is "Bloodshed" , you can make it visible to Unreal menus by adding the following line in the [public] section of Bloodshed.int:
Object=(Name=BloodShed.Mayhem,Class=Class,MetaClass=Engine.GameInfo)
If you also created a new weapon "BlastCannon", you can make it visible to the Unreal menus by adding the following line in the [public] section of Bloodshed.int:
Object=(Name=Bloodshed.BlastCannon,Class=Class,MetaClass=Engine.Weapon)
Finally, if you also created a new player class ( a subclass of PlayerPawn?) called "Executioner", you can make it visible to the Unreal menus by adding the following line in the [public] section of Bloodshed.int:
Object=(Name=Bloodshed.Executioner,Class=Class,MetaClass=UnrealShare.UnrealiPlayer)
- Steve Polge
December 18, 1998
Unreal Tournament notes for mod authors
I've had several inquiries from mod makers about how hard it will be to "port maps and mods from Unreal 1 to Unreal Tournament". The answer is, port? What's this talk of porting? This stuff just works.
Steve Polge put a lot of effort into updating the Unreal 220+ game code so that it integrates seamlessly with Unreal Tournament. Both products install into the \Unreal directory, and are mutually compatible. So, you can install one, the other, or both -- and existing maps and mods which are compatible with the latest version of Unreal, will be fully compatible.
For convenience, Unreal Tournament ships with all of the script packages from Unreal 1 (including UnrealShare?.u and UnrealI?.u), all of the .utx files, and all of the .uax files. Unreal Tournament is a superset of the Unreal 1 with the exception of the Unreal 1 maps and music. All new UT content (lots of scripts, textures, sounds, game types, and new actors) are designed to interoperate with the existing ones in Unreal 1.
The new player code is implemented in a subclass of UnrealIPlayer?, which means that Unreal Tournament players will work in user-created deathmatch maps for Unreal 1. However, the new UnrealTournamentPlayer? classes and meshes include new features and animations, so you can choose to take advantage of this (and require UT), or not. The new game types are GameInfo? subclasses. The new weapons and pickups interoperate with the old ones.
UnrealEd supports Unreal Tournament maps without any modifications. This "just works" in the same way that most of the licensees use UnrealEd? without modifications.
One huge Unreal Tournament feature that script programmers will be interested in is the all-new user interface code. While Unreal 1's menus are functional, the "look and feel" is basically derived from Doom's menus, which were derived from Wolfenstein 3D's menus, which probably date back to some even earlier id Software game.
The new game UI is a cutting-edge redesign, and continues our tradition of creating code and tools which licensees and mod makers can endlessly customize and tweak. I can't say more about it yet, but the ongoing joke is that we're going to rename it UnrealOS? (it's just a joke, but the analogy will become clear later). Maybe we'll release UI screenshots at some point.
-Tim Sweeney
December 15, 1998
Unreal Networking Code: Status
Unreal 220 incorporates the majority of the low-level bandwidth optimizations I've been planning for Unreal 1 and Unreal Tournament. I was just looking back at the initial shipping version of Unreal and comparing packets, and realized that we've achieved a bandwidth usage improvement of over 250% in both directions.
This doesn't mean we're going to stop now...there are some minor protocol improvements planned, and also high-level game play optimizations that Steve and Brandon are working on, moving more logic to the client-side to reduce lag and save bandwidth. But, the foundation is now very solid, and the rest of our work mostly consists of building on that foundation.
The cool thing about Unreal's networking support is that we brought the real-world Internet play performance up to the state-of-the-art without sacrificing generality. When I first posted the Unreal Networking Architecture, it was simultaneously praised for being a powerful and very general framework, and flamed because Unreal's initial Internet play performance was below gamers' expectations. The critics were delighted to claim, "this networking engine is a Grand Scheme that will never perform well in the real world". They sure were wrong! Iit turned out that all the performance bottlenecks were in the low-level protocol, and were all completely fixable given sufficient R&D time.
It took a lot of hard work to identify all of the inefficiencies in the protocol and come up with solid, general solutions. The key problems in game networking are data compression, error correction, and latency reduction. They turn out to be mutually opposing:
- Standard data compression schemes (i.e. Huffman and arithmetic coding) work best when you have a large, well-known compression window, and large symbol tables. Sending symbol tables isn't practical when you have a low-bandwidth, high-latency connection, and when your window history is questionable due to transmission errors.
- Error correction schemes are tough to implement when you have low-bandwidth, high packet loss conditions (for example., most gamers' modem-based Internet connections!) I went through 6 separate error correction schemes in Unreal, 5 of which all fell apart in various conditions. One big trap is getting into a feedback loop that saps away bandwidth and increases ping times. Another trap is retransmitting time-sensitive data when it gets lost, causing lag. These issues are tricky in bandwidth-intensive action games, because you need to support multiple tiers of reliability in packets, and some level of sequencing between them.
- Latency reduction is another tricky issue, because of the way modems queue data: The larger a packet is sent, the more latency is induced in the buffering scheme. So, you want to send small packets to keep latency down. But, UDP packets have significant built-in overhead, so you want to send large packets to keep bandwidth up.
In the end, I opted to go with several a custom bit-encoding compression scheme, which adapts itself to the type of data being sent, and intelligently crams it into the least amount of bits possible. This has worked very well, because the previously large overhead present in packet headers (which identify the game objects being updated) was reduced very significantly.
My initial attempts at error correction were based on sliding-window schemes. These are still supported in the protocol, because they are great for sending latency-insensitive data, for example when you download a map upon entering an Unreal server. However, for the far majority of game data, I use an asynchronous scatter-gather data replication scheme which guarantees that game objects will all be updated correctly under all packet-loss conditions, sacrificing guaranteed ordering of updates in order to improve bandwidth usage.
To trade off latency and bandwidth, I adjust packet sizes based on the bandwidth available, and hand-tuned the factors to get an acceptable tradeoff.
Behind the scenes, we've also optimized a lot of the prioritization logic. Visible objects are now updated based on a priority queue that is weighted according to a viewing probability, and a predictor/corrector algorithm which updates the objects which "need it most" (based on extrapolated position error and gameplay priority).
To test everything, I wrote an "ISP From Hell" simulator into Unreal that lets you toy around with various packet loss, variable packet lag, and packet disordering combinations, and the "STAT NET" display. There's also an option built in (C++ source required) which writes an extremely detailed network traffic analysis to the log file. Having and using these visualization tools turned out to be invaluable. Without the tools, the wasted bits, complex feedback loops, and race conditions in the protocol would have never have been found.
So, where do we go from here? The majority of the network-related improvements coming in the Unreal Tournament timeframe (still unannounced) are high-level, in areas like gameplay rules, client-side prediction, ease of use, and user interface.
Further off in the future, there are a lot of new possibilities that can be directly extrapolated from the Unreal Networking Architecture document. Unreal 1 networking can be described simply as "a small number of game clients connected to a single server". However, the protocol's low-level design is peer-to-peer rather than client-server. You might say that Unreal just looks like a client-server engine, because our Unreal 1 game code favors the server's logic over the client's. For the next-generation engine, I'm going to experiment with a lot of new networking configurations. For example, the protocol could be used for a server-to-server backbone, enabling servers to be clustered together with objects moving seamlessly between them--can you say Ultima Online 3D? There are also other interesting possibilities for servers, such as a spanning-tree chat backbone similar to IRC, or UnrealScript? application servers (for example, managing user accounts on one machine, chatting on a second, skin repository on a third, supporting a cluster of dedicated game servers). These aren't promised features at this point, just possibilities...but to me, very exciting possibilities.
-Tim
December 14, 1998
SaveGames
Somehow the patch info file says that 220 supports previous savegames. It doesn't. You can use the list at http://www.planetunreal.com/index.asp?/game/Console.shtm to get the names of all the maps in the game and how to rebuild your game (by warping to the map you were on and summoning all the weapons). Sorry about that, I know it sucks, but 220 made big changes to the PlayerPawn? format and other things that end up breaking old save games.
- Brandon "GreenMarine" Reinhart
WinZip Reminder
Remember, if you get an error that says "Cannot find file for package: UnrealShare?" you need to reinstall the patch using an unzip program that supports long file names.
- Brandon "GreenMarine" Reinhart
Dedicated Server Plan
The feedback regarding what is needed to improve the state of Unreal dedicated servers on the net has been great. I've taken that feedback and compiled a list of what needs to be done to make Unreal better from the server point of view:
- Linux Server Port: This was suggested by everyone who emailed me! Mek and I plan on having a Linux server port ready in February. It might be ready sooner, but Unreal Tournament is our current highest priority. (Certain cool things in UT will be added to Unreal in future patches.)
- Win NT Service: This was also highly recommended. We will set it up so that Unreal can be run as an NT service as soon as possible.
- Fixed Remote Administration: I'll be looking into the current issues with remote server administration. If you have issues with remote administration, send lists to unreal220@epicgames.com.
- Longer Uptimes: There are a few issues that have been pointed out to me that are causing dedicated servers to crash after a few hours of play. If you experience this, email your server's log files to unreal220@epicgames.com.
Those are the primary points we hope to address as soon as possible. A lot of people have told me that the lack of a Linux server is the number one issue preventing Unreal servers from proliferating. The demand is very high so we will answer it as soon as we can. Thank you for your feedback regarding dedicated servers.
- Brandon "GreenMarine" Reinhart
December 13, 1998
Installer Problems
Let me just reiterate again: do not ctrl-alt-del out of the installer. It will take up to 15 minutes to patch your copy of Unreal. If you abort the process you will just have to start over. If you have virtual memory errors, you need to close programs on your machine, clear off some harddrive space and try again. The #1 problem people are having with the patch is that they are killing the patch process prematurely.
- Brandon "GreenMarine" Reinhart
220 Known Issues
220 Reported Issues
Drafted by: Brandon Reinhart
Draft Date: 12/13/98
Previous saved games do not work with 220. Such is the bane of object serialization.
NOT BUGS
- You MUST use a long filenames unzip program to correctly unarchive the patch.
- Installer requires a large amount of virtual memory. If you get a virtual memory error,
close some programs, clear some HD space and try again.
- If the installer pauses, IT IS NOT HUNG. Let it continue. It may take 15 minutes to
patch.
- If the patcher reports that it is NOT RESPONDING please DO NOT kill the process.
Sound Issues
- Dying pilot sound doesn't play.
- Kevlar armor doesn't play.
Botmatch
- Default AI set to 255.
Misc
- Cycling through players as a spectator does 2 at once?
- ScriptWarning?: MaleThree? MaleThree0? (Function
SpawnCarcass?:0016) Accessed None
- ScriptWarning?: MaleThree? MaleThree0? (Function
SpawnCarcass?:0032) Accessed None
- ScriptWarning?: MaleThree? MaleThree0? (Function DoJump?:00E4)
Accessed None
- ScriptWarning?: DeathMatchGame? DeathMatchGame0? (Function
GameInfo?.Killed:0142) Accessed None
Long Filenames
A few users have reported getting an error that Unreal couldn't locate UnrealShare?.u. This happens when you use a ZIP program like PKZIP for DOS to extract the 220 patch. Be sure to use a ZIP program which supports long filenames, such as WinZip.
- Jack "Mek" Porter
Dedicated Servers
I'm going to update the information on starting a dedicated server pretty soon. I want to get feedback from people regarding servers. Do you think it is easy or hard to start a server? Would a linux server help increase the number of servers available on the net?
I'm really interested in trying to get more dedicated servers up and running and I would like to get email from people regarding their thoughts on the issue. We've greatly reduced the RAM and CPU requirements of Unreal dedicated servers and want to figure out ways to better improve the state of the scene by getting more servers on GameSpy?. Send your feedback to brandon@epicgames.com or unreal220@epicgames.com. As it stands, its really hard to find a good game because of the lack of dedicated servers.
So far the feedback regarding the 220 patch has been great. The team would like to thank all the fans who have supported Unreal throughout its growth. We think that online play has come a long way since the game was released and we know we still have a lot to do.
- Brandon "GreenMarine" Reinhart
Building List of Issues
I'm currently going through the bug reports building a list of issues people are reporting. Thanks for the great feedback! I'll probably post a list of known issues to this page tonight so everyone can get an idea of what has already been reported and what is going to be fixed in 221 (which should be out next weekend, I would imagine).
The most serious issues at this point are problems people are having with the patch installer. The installer requires a fairly large about of virtual memory to run successfully, so make sure you aren't running any other applications when you install it. If you get an error indicating you are low on virtual memory, clean off some harddrive space and try the patch again. There will probably not be any other patches this big, but we aren't sure at this point. I have also received reports of CRC errors when installing the patch. I would imagine that the cause of this is archive corruption (in which case you need to redownload the patch), but I"m not sure. I'll ask Tim :-).
The other major install issues is that some people are running unreal.exe and then getting no harddrive activity (patch lockup). If you have this problem, please send information on your system configuration to unreal220@epicgames.com. Include what steps you took to installing the patch.
Finally, we know about the botmatch skill bug that causes bots to play at skill level 255. To fix it, just adjust the bots skill manually. We'll have a code fix for that in 221.
- Brandon "GreenMarine" Reinhart
Request of Webmasters
When announcing the patch, please point users to http://unreal.epicgames.com/versions.htm to obtain the patch, rather than putting a hyperlink directly to the patch file. This way, users will always see the release notes and installation instructions, and the list of download mirrors will be readily available. Thank you!
Also, a big thanks to the PlanetUnreal team, and a bunch of hardcore Unreal players on IRC for helping with last-minute testing.
Unreal Mod Breakage
A quick reminder, Unreal 220 breaks compatibility with most user mods which include UnrealScript? (.u) files. Mod authors will need to update their mods to fix compatibility. I apologize for the inconvenience to mod authors; this was a tough decision, but the extent of the improvements we were able to make to the game code by breaking compatibility makes it all seem worthwhile.
All user maps and texture sets should continue to work.
Unreal 220 Beta Patch Released
Go to the Unreal Patch Page for information and downloads! This is a huge patch containing a lot of new Deathmatch features, game improvements, and script improvements.
Unreal 220 is a public beta patch. We've done a significant amount of internal testing, but we'll be doing more wide-scale testing before the upcoming official, non-beta patch. To summarize the Unreal 1 roadmap:
- Unreal 220 (Beta): Internet improvements, core game improvements, bug fixes.
- Unreal 221 (Beta): Incremental fixes.
- Unreal 222 (Official): Non-beta patch; shareware version will be released.
- Additional patches as necessary.
Report bugs to: unreal220@epicgames.com. If you're experiencing a crash, please attach a copy of your log file: \Unreal\System\Unreal.log to help us troubleshoot. This is not a tech support email address; the Unreal team reads all bug reports and looks into them, but we can't guarantee an individual response.
I'll be away on Sunday, and back in Monday to start dealing with any issues people have with 220.
Also, next week I'll be releasing Unreal's C++ headers so that mod authors can start experimenting with C++ plug-ins for game play, algorithmic textures, and lots of other stuff--everything but UnrealEd? plug-ins (which are coming later with the UnrealEd? C++ rewrite). The C++ headers require Microsoft Visual C++ 6.0 to compile.
Enjoy!
-Tim
December 12, 1998
The team played a huge coop game through all the levels of Unreal, and 220 is looking good -- "almost there". Here's the list of bugs we found during the test session, which we're fixing now:
tim's issues:
"brightness" txt isn't shown
brightness setting not saved
alt-enter loses menu in w95 glide but
"advanced options" doesn't
verify ipdrv not loaded for normal play
avoid losing savegames! (firstrun detect *.usa)
no music when enter dig coop
spinning death anim plays superfast
"connecting" msg shows current level
name not next
"netspeed" setting doesn't persist
across level switches in lan game
cliff says screenshot crashing
make sure all mover subclasses are
bAlwaysRelevent
text wrap: additional lines have leading spaces
steve issues:
no pickup sound for kevlar vest
dude in chair isn't screaming
sparking wire anim in vortex rikers isn't
showing
brandon:
coop scoreboard needed, to show who's in the
game
December 11, 1998
Here is the ReadMe file from the upcoming 220 patch. We're doing some final testing on it now. If that goes well, 220 will be released Saturday. Otherwise, we'll spend a few more days fixing and testing.
December 10, 1998
We're still testing and tweaking Unreal 220. It's getting closer...
LoonyGames has a cool article that compares, contrasts, and critiques some next-generation game development tools, and focuses on the strengths and weaknesses of UnrealEd? and 3D Studio Max. The author makes a lot of good points about features that would improve UnrealEd?, many of which are already planned for the upcoming C++ UnrealEd? rewrite.
December 14, 1998
Hard at work
We're hard at work putting the finishing touches on Unreal 220. It's looking good, but the extent of the changes and improvements has required quite a lot of testing and refinement. It won't be ready for public consumption this week or over the weekend, but hopefully early next week.
A lot of mod authors have emailed asking for early access to Unreal 220 so they can get their stuff is up and running in the new version. The answer right now is "maybe"...if the code comes together over the weekend, I'll post a public "for mod authors only" version. 220 will break compatibility with most UnrealScript? mods, but I've modified UnrealEd? so that mods can still be loaded (this is a change: 219's UnrealEd? gives a fatal error when loading an incompatible .u file). Upgrading most mods will be easy; the most significant changes are function parameter changes all over the place, and splitting off the network-related variables in Pawn into a new PlayerReplicationInfo? class, to make scoreboard-programming simpler and more expandable. In terms of mod support, the week following 220's release will be chaotic, with mods being repaired and re-released. Sorry, we would have liked to avoid this, but the improvements we wanted to make were just too cool to stick with full backwards-compatibility.
Levels, sounds, texture files, music files, and audio files remain backwards-compatible.
Shortly after 220, I'll be releasing the C++ headers required for users to write C++ add-ons. I'm planning on throwing together a very simple SampleTexture? package showing how to make algorithmic textures, and a SampleActor? package showing how to write intrinsic C++ functions for actors. This stuff should give mod authors a very significant amount of new stuff to play with, though the more exciting C++ stuff will come in a later release with the UnrealEd? plug-in interface. It will be interesting to see the response to the C++ headers, because the Unreal engine's C++ architecture is very, very different than what people are used to in Quake and other engines. It's very much a framework rather than an API.
Jack "Mek" Porter has come here from Australia for a few months to help with the Unreal Tournament programming, and is currently working on some cool new mouse-based user interface code. He is a big Linux fan, and is talking with Brandon Reinhart about cooperating on a native Linux port of the Unreal server.
That's UnrealEd?.net
The cool independent Unreal editing site I mentioned is actually UnrealEd.net, not UnrealEd?.com.
November 19, 1998
Unreal 220 Internet Improvements
I'm now down in Raleigh, North Carolina with the rest of the Unreal team. Things are really coming together for the top-secret project we're working on, and Unreal 220 is starting to solidify. We don't have a release date yet, but it could be as early as next week.
The Internet play improvements in 220 are quite noticeable. Steve and I are using a new physics prediction scheme based on motion compensation. This improves the smoothness of other players' movement in deathmatch games, especially in large, open levels like DmDeck16?, where lots of players are visible.
Steve has redesigned the moving brush code so that moving brushes now are now handled client-side. Platforms and doors are very smooth now. Finally, I've created a new scheme for managing temporary actors like projectiles, which reduces their bandwidth by about 30%.
Steve and Brandon have also added a lot of other improvements, such as showing ping times, server name, and level name in the player list, showing the name of opponents when you point the crosshair at them in a network game, a beep when chat messages come in, and color coding of messages.
Unreal Editor Progress
I've also been working on the new Unreal Editor, featuring a user-interface rewrite (moving over to C++ from Visual Basic). It's now more than half-way done. Architecturally, the new editor code is far more general than the old UnrealEd?. The editor itself is very abstract, and almost all functionality is implemented through plug-ins. There are plug-in interfaces for brush builders, views of objects (like 3D scenes and the 2D editor), view controllers, import tools, export tools, browsers, and operations on arbitrary kinds of objects. Plug-ins can even define their own sub plug-in interfaces, etc.
This new approach will provide a more solid foundation for Unreal 1 editing, but the big gains will come in the next-generation engine. A major bottleneck in creating the Unreal 1 engine was the complex coupling between the rendering engine and the editor, which made it difficult to modify the renderer. The new approach generalizes the concept of editing, and will make it easier to add cool new features which require editor support.
I plan to start releasing public betas of the new UnrealEd? as soon as it's really stabilized, with the first beta in the first week or two of 1999 if all goes well.
We have long planned to release the editor as a full retail product through GT Interactive after it has been cleaned up and finalized, but there doesn't seem to be enough mainstream retail interest to justify it. So, unless something changes real soon, we'll plan to release the final version freely, with the manual provided in HtmlHelp? format rather than printed.
Web Site Notes
A request of web sites providing collections of Unreal related files, such as the cool Unreal Resources page: Please link to the official Download page for the Unreal patches, rather than mirroring specific patch versions locally. A bunch of web sites have old Unreal patches in their download sections (as old as the 1.01 patch), which are no longer relevent. If everyone links to the central Download page, users are more likely to get the latest patch. Thanks!
Cool Unreal related things I've seen recently...
- Unloaded, a great "overhead view" mod including some custom levels. It feels a lot like the classic arcade game Gauntlet.
- AEus' Unreal Stats Page, a totally cool stats tool for server administrators.
- UnrealEd.com has grown to contain more and more useful UnrealEd? resources.
Unreal mod notes
Mod developers who get the cryptic "sandbox" error when trying their mods in network play: This error means you have a .upkg file that says server-side-only because you copied the one from IpDrv?.u (which is SUPPOSED to be server-side-only). This usually prevents the mod from working, but sometimes just causes actors defined in the mod to not be visible to players. If you don't have a .upkg problem, you won't have a problem. If you do have a .upkg file, it should read:
[Flags]
AllowDownload?=False
ClientOptional?=False
ServerSideOnly?=False
-Tim Sweeney
Older News (1998)
News 11-10-98
Latest News
The latest PlanetUnreal survey shows a significant gain in gamers' satisfaction with the latest 219 patch, compared to the previous ones. We're now hammering on version 220, which includes significant new Internet play improvements, plus some core game improvements that the rest of the team has been working on. 220 won't be out this week, but should be ready soon after.
There seems to be one Internet problem in 219 that is affecting 10-15% of players. I haven't figured out the cause yet, but the symptom is a ping time (visible with STAT NET) that swings around wildly, going from 200 to 1000 or more over the course of several seconds. Many of these players report that other games like Quake 2 don't exhibit the problem--which indicates it's not just a bad connection or ISP. I suspect packet-ordering problems, though I haven't been able to duplicate it here.
The Roadmap
In the remainder of 1998, we will be releasing:
- Unreal 219: Latest version. Download here.
- Unreal 220: Further Internet improvements, core game improvements, bug fixes.
- Unreal 221: Incremental fixes
- Unreal 222: Offical (non-beta) patch; shareware version will be released.
- Additional patches as necessary.
We also have some cool things in the works for 1999. Since Unreal first shipped, I've been working on Internet improvements and bug fixes, while the rest of the team has been working on a top-secret project we are referring to as "Unreal Tournament". There have been a lot of rumors and speculation about what this project will be. Some of the rumors are completely incorrect. For example, we are not using any alien technology recovered from crashed spaceships on Tournament. (We're saving that for our next project).
I'm also working on the new, enhanced UnrealEd?, with lots of new features, improved stability, a plug-in interface, and other goodies. We don't have a date for this, but I'm expecting a public beta around new years, with final release early in 1999.
At some point, we'll be publically releasing Unreal's C++ interface so the community can start on .dll plug-ins for Unreal and UnrealEd?. This will happen no later than the new UnrealEd? public beta. It might be possible to release it sooner, however there are changes in the works which won't be binary compatible, so user-created .dll's would break and need to be recompiled.
What can you do with Unreal .dll's? Lots. Here are some examples:
- Define new kinds of algorithmic textures that can be created in UnrealEd? and used in levels.
- Expose anything you can do in C++ to UnrealScript?, for example the file system, ActiveX?, more Internet functionality, etc.
- Write performance-critical game support routines, such as AI.
While it's also possible to write game code directly in C++, the preferable way to do that is UnrealScript?, since there is already a lot of game support infrastructure built into the language.
Server Administration
Remote server administration isn't working in 219, but will be addressed shortly. 219 does have a few new features for local server administration. While running a server, click on the Unreal server icon and choose "Show log window". In the log, you can type:
- SERVERTRAVEL <levelname>: Jump to a new server.
- SAY <message>: Broadcast a message to all users.
-Tim Sweeney
News 11-2-98
Unreal 219!
It's now available for download HERE. The Epic Deathmatch servers will be shut down for the night, to provide more bandwidth for downloads.
The testing is going well
Ok, ok, you can stop now, that's enough testers. :) Server performance has definitely improved since I last benchmarked it. My dual-processor Pentium II-300 is serving a 20-player game, copying 600 megs across the network, and running a 3dfx Unreal client at 800x600. The server is keeping up a steady 15 fps. I have more optimizations planned, though.
On my 28.8K connection, gameplay has remained pretty smooth until I get into a firefight with 5-6 people, at which point the movement of other players starts to become unsmooth. We should be able to improve this significantly further in 220, with two protocol improvements. First, I'll be improving the scheme for managing temporary objects like projectiles, which should reduce their bandwidth usage by around 30%. Second, Steve Polge and I working out a new variable priority predictor/corrector scheme for transmitting the movement of other players.
Testing 219
I have an Unreal 219 server up and running at unreal://208.212.53.3/ in case a few people want to help test. You can join in and play with 218; it's fully compatible. 219 should be available soon, unless new bugs are discovered.
News 11-1-98
Unreal Grows...
More public servers keep popping up every day. Awesome!
I noticed that the percentage of servers shown as "not responding" has gone up, though I'm not sure whether that's due to server crashes, or people accidentally having their LAN server listed in GameSpy? when it's not meant to be public. Server admins, if your server crashes unexpectedly, please email your Unreal.log file to unreal218@epicgames.com so we can investigate it.
A reminder, server administrators can get help in the new "Server Administration" forum on the <a href="http://megaboard.epicgames.com/" target="_parent">Epic Message Board.
According to the feedback we receive, and in <a href="http://www.planetunreal.com/" target="_parent">PlanetUnreal's survey, 218 has fixed the past network problems and made Unreal playable on the Internet for the large majority of people. Still, we have lots of improvements in the works, which will further increase the game's smoothness and responsiveness during network play, as well as a few new features that I'm not allowed to announce yet. :) The next patch, 219, will be purely bug fixes to 218 (no speed difference). After that, 220 will contain some more high-level improvements to many areas of the network code.
Currently, there seem to be two sets of people who are still having some problems with Unreal on the Internet. One set has 28.8K-33.6K modem connections that experience an unusally high amount of packet loss. 220 should improve this a bit, but when you have upwards of 20% packet loss, gameplay is bound to suffer. The other set of problems is being reported by people with some unusual connections we haven't been able to test on internally: people with dual simultaneous modem connections, people with connections that receive via satellite and send via modem, and some similar configurations. I haven't determined what's going wrong in these cases yet, but I suspect packet-order problems.
News 10-30-98
Unreal 218 patch information (RTFM!)
If you downloaded the 218 patch, please read the release notes. If you're still experiencing problems with Unreal on your modem connection, you need to use the NETSPEED command described there, so that Unreal doesn't try to use more bandwidth than you have available.
Resources for Server Administrators
Here are some resources to aid new Unreal server administrators in getting up and running:
- Master Servers: How to get listed in GameSpy? and other querying tools (new).
- Server Administration Tips: Basic information about running an Unreal server.
- Epic Message Board: New "Server Administration" forum. Steve Polge, Brandon Reinhart, and I will be answering questions from server administrators and people writing server-querying tools.
Unreal Multiplayer Ramp-Up
A lot of news sites have been picking up on Unreal's multiplayer improvements:
The number of public Unreal servers listed in GameSpy? is now up to 51 as I write this, and has been growing at a rate of over 20% daily. While working on the upcoming 219 patch, I've been spending a couple hours each day playing Unreal online, especially on the servers running user-created levels. The community has made some really impressive levels, and I'm glad to see that a lot of servers are now making use of downloadable levels, textures, sounds, and music.
Other Servers
In addition to the public servers listed in GameSpy?, there are 14 extremely high quality, public servers on World Opponent Network listed in their own web-based "server finder" site.
I should also mention our other online partner, MPlayer, and the Unreal Kingdom news site on MPlayer.
-Tim
Status of Direct3D 10-28-98
All Drivers
Some issues across-the-board with switching between fullscreen and windowed mode, and switching resolutions during gameplay. We're looking into theses issues.
Riva TNT
Has lots of potential, but there are major problems with their Direct3D driver: rainbow colors, time-lag, w-buffering issues, missing textures. We are hoping nVidia will issue an updated driver soon. The ball is in their court now.
Riva 128
Their latest driver should run Unreal OK. The framerate isn't very good, and there will be a lot of "stuttering" since texture downloads are very slow on this hardware. Some users are reporting that creature polygons appear corrupted. Hopefully nVidia will fix thie error in their driver.
Intel i740
There are some problems with their currently-available Direct3D driver, but they have an internal beta driver which fixes many problems. Hopefully this will be ready for the public soon.
ATI Rage Pro
They have a beta Direct3D driver which runs Unreal pretty well (though it doesn't appear to be available for public release yet). Multitexturing currently isn't working with Unreal, because of a hardware limitation (it can't multitexture a paletted base texture map along with a non-paletted light map).
3dfx Voodoo2
There isn't any reason to use Direct3D for Voodoo2, since we support Glide natively and that tends to be more stable and faster, but their latest Direct3D driver does run Unreal pretty well. Their detail texture blending (D3DBLEND_DIFFUSEALPHA) doesn't work, which breaks detail textures. There are reports of missing lightmaps in some areas (not sure what's wrong). 3dfx could get a performance increase here by implementing subrect Blts and hardware triangle-fan setup.
S3 Savage 3D
Works well with their internal beta Direct3D driver. Not sure when this will be available via the web.
Matrox G200
Works pretty well.
Rendition
Works pretty well.
Permedia
Only supports monochrome lighting due to blending limitations. Explosions are displayed with a black background (due to a bug in the current Unreal code). Fairly slow texture downloading -- performance isn't great.
Drivers we consider playable, in best-to-worst order
- Voodoo2: Fastest of all.
- Savage/G200: Reasonable performance. Not as fast a fill rate as Voodoo2, but texture downloads are fast, and they support palettes, making for a steady frame rate.
- Rage Pro/Rendition: Reasonable performance. High display quality in truecolor mode.
The others should be playable pending public release of improved Direct3D drivers for their hardware.
On Permedia, Riva 128, and Rendition, you may get better performance using Unreal's software renderer, especially if you have a Pentium II class processor. This isn't such a bad thing, because the software renderer supports all of Unreal's key features, including truecolor lighting and volumetric fog.
News 10-28-98
Latest Happenings
Since the Unreal 218 patch was released, the number of Unreal servers showing up in GameSpy? has increased by 225%. A huge thanks to everyone who is running Unreal servers now. It's awesome to see the community grow and begin to reach critical mass.
At any time, about 20% of the servers listed in GameSpy? are shown as "Not Responding". I've been looking into this, and there are three reasons for this. One, the server has been shut down or crashed but hasn't timed out and been removed from the list. Two, the server is switching levels, which prevents it from responding to GameSpy? queries for 5-20 seconds. Third, the server is shown in GameSpy? because a user running a LAN server (dedicated or non-dedicated) enabled the "DoUplink" option to publicise their server to the world without realizing the consequences, but either exited or is on a LAN blocked off by a firewall. We'll work with the GameSpy? guys to adjust the timeouts so that fewer "Not Responding" servers are listed.
News 10-26-98
Direct3D Drivers
To use Unreal's Direct3D support, you must have Microsoft DirectX? 6.0 installed. You also need the latest Direct3D driver from your 3D hardware maker. Because Unreal uses many new Direct3D features, many hardware makers had to update their drivers for Unreal to work. Therefore, some of the drivers distributed with DirectX? 6.0 have problems with Unreal (crashes or visual anomalies). Here are driver download sites for various brands:
- 3DLabs Permedia
- 3Dfx Voodoo, Voodoo Rush, Voodoo2, Voodoo Banshee
- ATI Rage
- Intel i740
- Matrox G200
- nVidia Riva 128 (known problems), Riva TNT
- Rendition Verite
- S3 Savage 3D
- Trident Microsystems (untested, probably doesn't work)
- #9 Visual Technology (untested, probably doesn't work)
Please keep in mind that Unreal's Direct3D support is an early beta and isn't yet working reliably on all 3D hardware.
Known Issues
I've update the list of Known Issues, summarizing the problems people have found with 219. There are a bunch of items, but most are non-showstoppers. I'm working on them now. Overall, though, 218 is by far the best-received version of Unreal to date! New servers are popping up rapidly (50% increase in the past 18 hours), with player counts rising even faster.
Unreal 218 Gaining Support
After releasing the patch at midnight Sunday night, it was amazing to see how many Unreal servers had it up and running in less than an hour minutes.
It will be interesting to watch new Unreal servers spring up on the net now that our Internet play quality is under control. In the not-too-distant future, we'll have many more improvements in Unreal network play: performance enhancements, new features requested by the community, and several cool upcoming surprises. GameSpy? currently shows 27 Unreal servers, and a couple thousand for Quake. Clearly, we got off to a very slow start while we learned the the ins-and-outs of Internet game programming; now Unreal is on a solid footing and we're really beginning to pick up the pace!
Level designers in the Unreal community have already started producing some great Deathmatch maps (see Unreal Resources for downloads), so we expect to see things accelerate in this area, too.
PlanetUnreal? performance survey
If you're using the new 218 patch, please fill out PlanetUnreal's Unreal performance survey. We'll be watching Unreal players' feedback in the survey, and looking at all the 218 bug reports sent to the unreal218@epicgames.com account. Everyone's feedback will be taken into account for future improvements to the Internet play and other features.
More about 3D API's
In an interview on Voodoo Extreme, I gave my opinion in the ongoing OpenGL? vs Direct3D debate, and I wanted to add some more information here.
First of all, both our DreamForge? partners working on the OpenGL? support, and our Direct3D partner have both done a very high-quality job, given the constraints of Unreal and the 3D card drivers available. My feelings on the two 3D standards are based completely on their API's and the quality of drivers available.
Next, I wanted to give some more detail on the code.
| API support layer | Lines of C++ code |
| 3dfx Glide | 1711 |
| Direct3D | 3123 |
| NEC PowerVR? | 4049 |
| OpenGL | 5697 |
Now, the Glide is the simplest, because it's aimed at the Voodoo family of 3D cards, which are very standard and straightforward to support. For programming to 3dfx cards, Glide is the ideal API. For people thinking "If Glide is so great, why don't other 3D cards support it?" The short answer is, if Glide supported other manufacturer's 3D cards, it would pick up all the complications involved in real-world Direct3D and OpenGL? programming: Testing for core capabilities, working around driver bugs, etc.
The Direct3D code is next in simplicity. It began as a working 1600 line driver, then expanded as it was optimized and support was added for 3D cards that lack key features. The Direct3D API follows the traditional Microsoft model of being not very beautiful code, but dealing with real-world hardware robustly, by providing a capability-querying mechanism and well-tested drivers.
The PowerVR? code is large because the PCX2 chip's rendering approach is very different than what Unreal was designed for. This makes the implementation fairly complex, though the next-generation PowerVR?, currently on-hold in the PC market while NEC focuses on the Sega DreamCast?, is a great chip that's more traditional in its architecture, and more optimal for Unreal.
The OpenGL? code is large because of optimizations and support for lots of real-world hardware. If reduced to plain-vanilla OpenGL?, this would probably be the simplest and most stable driver of them all, because the OpenGL? API is very straightforward.
Unreal 218 Patch is ready!
You can read the release notes and download the patch from the Patch Page! Our test session went well, and the participants (including a lot of modem players, and even some overseas modem players) reported major success with the performance improvements.
Epic's two deathmatch servers have been upgraded to 218: Deathmatch 1 and Deathmatch 2. However, since our T1 line is going to be very saturated with people downloading the patch, performance probably won't be very good on our server for the next several days.
10-25-98
Geting closer...
We're gearing up for a big internal test session with 218 right now. The release date of the 218 patch will depend on the outcome. Note that 218 is not network-compatible with 217, so if you see our 2 test servers in GameSpy?, please don't try to join (you won't be able to).
10-24-98
Almost there...
The latest Direct3D support is now integrated into the Unreal codebase. It will be in the upcoming 218 patch in "public beta" form. It hasn't gone through wide testing yet, but we and our partners have been testing it a lot internally on Windows 95 and 98. It's looking good on the next-generation 3D cards (Riva TNT, Matrox G200, Savage 3D), though high-level optimizations are planned that will boost performance further.
The Voodoo2 multitexture code is in, thanks to the efforts of Jack Mathews at 3dfx.
I'm doing some final Internet play testing and tweaking on the patch. My "torture test" environment is an ISP connection at 24.4K with 400 msec ping. If it's playable on that, it should be playable on anything. :) Yesterday's testing revealed a few last-minute problems that I'm working on now.
More discussion on CORBA
William van der Sterren provided this insight into CORBA with respect to realtime apps:
In general, CORBA causes too much overhead and latency to be a server/clients gaming protocol. This is due to IIOP's (the default inter-ORB protocol) use of TCP/IP, and the use of large packet sizes (compared to the dedicated bit-tuned gaming protocols being used in, for example, Quake2 and Unreal). Though support for IIOP is mandatory, an ORB vendor can deploy more efficient (or more secure) protocols between 'his' ORBs, optionally using other network protocols. By default, CORBA calls are synchronous (that is, the calling object is blocked until a response is received from the called object). Such a connection-oriented call is best implemented using TCP.
CORBA also supports so-called 'one-way' operations, that enable the caller to continue processing immediately after making the call - the call is non-blocking. Here, it might make sense to use UDP as an underlying protocol, provided you deal with the unreliability at the application level (the 'call' might not arrive at the client). Some specialized high-performance ORBs, such as Nortel's RCP-ORB, <http://www.nortel.com/RCP-ORB/>, use other transport protocols than TCP for one-way calls. Most ORBs implement optimized mechanisms for 'intra-server' and 'intra-process' communication (not that relevant for multi-player gaming).
I'll post more thoughts on the topic in the future. With Unreal, distributed object models are already playing a role in multiplayer gaming, but only in a "tip of the iceberg" sort of way. This kind of technology will expand very interestingly in the future.
10-22-98
Linux Unreal
Linux Games has reported a way to run the existing version of Unreal under Linux, using the Wine Windows emulator for Linux. They've included a screenshot and more information at this Unreal in Wine page.
Hired Guns
Want to see something cool and unique that's being done with the Unreal engine? Check out the Hired Guns preview. The Devil's Thumb team is really pushing the engine, and has implemented a beautiful user-interface design featuring multiple game windows. I look forward to playing this game. (Thanks PlanetUnreal for pointing out the preview).
10-19-98
Network Improvements Underway
I went ahead and modified Unreal's streaming protocol to read and write bit-oriented streams rather than byte-oriented streams. This has led to an additional increase in bandwidth efficiency. Compared to 217, upstream bandwidth is now utilized 25% more efficiency, with downstream bandwidth boosted by approximately 35%. I've also been tweaking the priotitization of actors, and gaining some incremental improvements in smoothness from that. I really look forward to releasing the new patch in a few days and hearing what people think!
Unreal's separation of network support into three layers, UnrealScript? replication/RPC, the low-level transport protocol, and the TCP/IP driver, has really made the optimizations manageable. While monolithic C-style code has a reputation for being more optimizable than a layered, object-oriented design, the experience I've gained on Unreal mostly indicates the opposite. It's great to be able to rip out one module (like Unreal's low-level transport) and replace it with a better and more efficient implementation, without breaking all the code it interfaces too.
10-14-98
Network Objects Follow-Up
I've chatted with several people lately who have added insight to the discussion of multi-language programming and networking. One interesting topic mentioned was using the CORBA protocol to coordinate network games. CORBA is a high-reliability protocol with a fairly high amount of overhead and latency, due to its exacting nature and use of TCP. I see CORBA as a very suitable protocol for network game backbones. For example, if you were doing an Ultima Online style world with multiple servers that stay in synch, CORBA would be good for linking servers together in a high-reliability, non performance-critical way. But, CORBA isn't suited for an actual realtime modem-based gameplay protocol, since it's TCP based (which adds terrible lag under lossy conditions), and the protocol has enough overhead that it's not going to be able to handle large amounts of data over the modem.
AWT
AWT is a graphical user-interface layer for UnrealScript?, which has been making some cool progress lately.
Cheat Challenge Update
I've received a bunch of tips from two Unreal enthusiasts. Congratulations go to Mek @ PlanetUnreal? and RisingSun? for discovering and verifying two holes in Unreal, and to Mike Lambert for suggesting a potential third one. Also, thanks all the players who provided observations they saw of potential cheating online. I'll write more about these techniques after the next patch has been released, and the holes plugged.
In the meantime, if you too have figured out how to cheat in Unreal, pat yourself on the back, you outsmarted me! But also, please resist the temptation to cheat on the public deathmatch servers...it spoils the fun.
Another Public Master Server
This just in:
How about a mention of the OGN Public Unreal Master Server? It's been available for almost two weeks and has no access restrictions, bandwidth or otherwise. The server is running @ master.ogn.org:27500. Server lists can be retrieved @ http://master.ogn.org:6669/list/game/unreal. A page describing how to link to it can be found @ http://www.ogn.org/UnrealMaster
-- sky G.
http://www.qhunter.com/
http://www.golightly.org/
http://www.aurorablue.org/
10-13-98
Unreal Cheat-Finding Challenge
I've seen two reports that people have found a way to cheat in Internet play. One person reported seeing a little tiny 1-inch tall player walking around named "LilTinyChessPiece", and another reported a player who never took damage. I've been scouring the code, and haven't found any holes which would enable this kind of cheating, but I'd love to hear if anybody has found a way.
If you find a way for players to cheat or crash servers over the Internet in Unreal, please email me. The first person to report a particular security hole in Unreal will receive credit and thanks here for helping to protect the Unreal community from cheaters.
People who cheat in Deathmatch are lamers, but people who are motivated by simply discovering ways to cheat are doing valuable research.
Note: I don't consider the following things Unreal cheats:
- Server administrators cheating on their own server. Since the admin is in control of the server, there are many ways he could disadvantage players (in any game, not just Unreal), but fortunately people who go to the effort of setting up their own server tend to be honest and respectful of the community.
- Any of the standard TCP/IP tricks people can use to confuse Web & FTP servers, such as SYN flooding, packet flooding, DNS spoofing, and so on. These aren't Unreal-specific cheats, and I can't stop them.
UnrealScript? Notes
There was recently a "to script or not to script" debate about the merits of UnrealScript? vs pure C/C++. In this debate, several misconceptions were put forth, which I want to correct:
- UnrealScript replicated functions (described in the Network Architecture Documentation)
indeed return instantly, rather than blocking execution while waiting for network
acknowledgement. Function calls are sent across the network using an asynchronous
RPC-like approach, and are executed upon reception. They can either be sent wih
guaranteed delivery and sequencing (by using the "reliable" keyword), or without
sequencing (using "unrelible"). Unreliable replicated functions are most
efficient, and should be used for non-vital events like hearing sounds.
If one were to assume UnrealScript? functions were synchronous and blocking, one would indeed draw incorrect conclusions such as this statement: "That must make AIs in multiplayer games really fun, they fire at you and do an RPC, then freeze until they get a ping back from the client."
- As our licensees know, UnrealScript? classes and C++ classes fully interoperate.
You can derive C++ classes from UnrealScript? classes, and vice-versa. For all actor
classes, running "Unreal.exe -make" automatically parses the UnrealScript?
classes, and generates C++ stubs for them, including:
- C++ variable declarations mirroring the UnrealScript? ones, allowing variables to be accessed identically in either language.
- C++ -> UnrealScript? calling stubs, enabling C++ functions to call into UnrealScript? functions.
- UnrealScript -> C++ calling stubs, enabling UnrealScript? functions to call into C++.
Indeed, we invested a lot of effort into providing dual programming interfaces, enabling seamless sharing of objects and code between the two languages. Among other things, I studied COM, MFC/VB/ActiveX, CORBA/IDL, and JNI in order to determine the most efficient and least error-prone methods of cross-language programming. There is a lot of great research material on the net, for those who are interested.
I suspect that people who have a low opinion of mixed-language programming have likely drawn their conclusions from JNI and CORBA/IDL which do indeed involve a lot of messy handle/id references and error-prone redundent declaration of objects. It doesn't have to be this way. For an example of "cross-language programming done right", check out the ActiveX? support in Microsoft Visual J++ and Visual Basic -- they're ultra-clean, automatic, and they involve no redundency. MFC also does a pretty good nearly-automatic job of cross-language ActiveX? object handling. Mixed-language programming can be very fruitful, if it's implemented properly.
- Unreal performs all file loading and saving using serialization. Serialization is
automatic for objects defined in UnrealScript?. For objects and structures defined
only in C++, such as the following function that serializes a vector.
friend FArchive& FVector::operator<<( FArchive& Ar, FVector& V ) { return Ar << V.X << V.Y << V.Z; }For programmers just learning about object-orientation, a must-read is: <a href="http://www.amazon.com/exec/obidos/ASIN/0201633612/o/qid=908310340/sr=2-1/002-5033601-8164246" target="_parent">Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing) by Erich Gamma, Richard Helm,
