///////////////////////////////////////////////////////////////////
Tim Sweeney
Epic MegaGames, Inc.
tim@epicgames.com

///////////////////////////////////////////////////////////////////
Words of wisdom

	"Keep it simple: as simple as possible, but no simpler."
		-- Albert Einstein

	"The best way to predict the future is to create it."
		-- Peter Drucker

	"The key to creativity is knowing how to hide your sources."
		-- Albert Einstein

	"Success is the best revenge."
		-- F. Scott Fitzgerald

	"Innovation sustains success while complacency leads to stagnation and decline"
		-- Bill Gates

	"Start-ups have been the key to the success of the Windows platform"
		-- Brad Chase, Microsoft

	"We're working 6 days a week until we ship. Crunch time baby."
		-- Joseph Selinske, Ritual

	"When you prioritize the quality above the ship date, you can't really give a 
	ship date, because you can only give a ship date if it overrides all the 
	other considerations."
		-- Bill Gates, Infoworld interview

	"...here was a computer on a chip, and if you took exponential extrapolation from 
	that, you could say that the computer industry would change very dramatically."
		-- Bill Gates

	"I have two measures for the people who do interactive stuff: Are you No. 1 or 
	No. 2 and if you're not, then I don't think No. 3 or No. 4, no matter how many 
	people are there and all, I don't think they're going to do that well."
		-- Bill Gates

	"The trick is that rather than getting stuck in the rut of established 
	techniques, you must constantly strive to "do better with less, in a 
	different way"; keep learning and changing and trying new approaches - and 
	working your rear end off - and odds are you'll be part of the wave of the future."
		-- Mike Abrash

	"Plan to throw one away; you will, anyhow."
		-- Fred Brooks, "The Mythical Man-Month", Chapter 11

	"History shows that users place a great deal of emphasis on binary compatibility."
		-- Byte Magazine

	"The key strategy for Microsoft has been to get lots of software written on top 
	of our platforms"
		-- Bill Gates

	"Our big strength isn't some intellectual property; it's not today's products. 
	It's really the ability to develop software with a great team."
		-- Bill Gates

	"But Microsoft has added a new wrinkle, a backup plan, that IBM did not: to 
	embrace any technology it perceives as a threat... It has taken us a few years 
	to realize the entire PC industry is just a value-added reseller for Intel and Microsoft." 
		-- Upside Magazine

	"No matter how short it is, it should have a beginning, a middle and an end. 
	Don't forget the story."
		-- Raoul Servais, Animator

	"Many people are touting Unreal as the Second Coming."
		-- Gamers Exchange

	"SGI's experience is that apps need to write to a scene graph 
	to get good performance without micro-optimization."
		-- OpenGL ARB

	"Methos: Ion Storm has licensed the Unreal engine for upcoming games. 
	What does the Unreal engine offer that the Quake 2 and other engines 
	don't?"
	"JohnRomero: More GL-only effects, a superfast map development cycle, 
	the most amazing development tools I've ever seen and a very 
	reasonable cost."

///////////////////////////////////////////////////////////////////
	Past work log entries are in TimOld.txt

///////////////////////////////////////////////////////////////////
3-10-98

====156
+		Fixed fire engine PostLoad not called problem.
+		New version.
+			New Galaxy.
+			Editor.
+			Code - verify clean recompile after reinstall.
+			Verify rebuild .u's.
+			Test debug version.
+			New Entry.unr, Unreal.unr.
+			Cleanup docs.
+			Carlo doubled internal sound volumes, fixed panning.
+			Retest clean install.

+	Talk to James about sample map w/ only the used textures saved out.

X	UnrealEd minor bug fixes:
X		Add mover must do a "perm" first to fold scaling in.
X		Mark script text before cut/paste.
X		Mark script text when start editing, so I can undo initial typing.
X		UnrealEd def props - modify all actors if they are using default.
X		When adding portals or invisible surfaces, force no texture or "portal" texture.

X		Optimize net sound playing.
X		Net code not sending initial changes when actor is spawned?
X		Net code unreliable functions should be sent if possible (not just bandwidth based)?
X		Net stats: rpc/c, server internal fps, client bytes / frame, reliable buffer free/total,
X			dynamic actors in the level, server level tick time.
X		Really nice, clean stats display.
X		Reliable buffer as dynarray, with only a maximum data count and maximum array count?
+		512x128 texture crashing on 3dfx in hud: logo.pcx -> Because of no mipmaps.

///////////////////////////////////////////////////////////////////
3-11-98

	delegate = closure = bound method reference
	multicast = list of delegates
	attaching event handler to ui = modifying a property

+	Level travelling - today!
+		Restart level when die remember inventory.
+			CarryInfo.
+			Including through savegames.
+			Even health - this is a controversial design issue.
+		"Savegames are not currently remembering the state that the music is in":

====156Update
+	Hub loading and saving:
+		ALevelInfo.HubStackLevel
+		LocalTravel map.unr: like open, but does proper gameplay travelling.
+		Document the new URL syntax.
+		Fixed exec commands with string parms not recognizing punctuation.

///////////////////////////////////////////////////////////////////
3-12-98

+	Complete hub transitions!
+		level/teleporter?push
+		level/teleporter?peer
+		?pop
+		Verify popping with proper inventory travelling.
+		Implement hub pushing and popping.
+		Implement oneway peer levels.
+		Savegames with hub stack.
+		Loadgames with hub stack.
+		LoadGame gate
+		SaveGame delete superfluous Save## files
+		LoadGame delete superfluous Game# files
+		SAVE_RELATIVE_PATH
+		?pop restarts vortex rikers
+		Player name and class carried between levels?
+		Pop with #teleporter spec.
+		Document the #teleporter syntax.
+		Implement single player <-> internet levels.

	The beta tester's name is Joel

///////////////////////////////////////////////////////////////////
3-13-98

====157
+	3d hardware: critical path for NEC, Microsoft.
X		fix sky clipping problems
X		fix weapon screenflash clipping
+		ask james about making weapons the right size
+		fix 3dfx screenflash darkening with alpha
+		Eliminate FlashAssist.
+		FTextureInfo, max pointer.
+		compute max light and fog in the upload code, more efficient (must cache)!
+		FPlane FogColor, FogDistance (rgba), per zone.
+			Surfaces
+			Gourauds
+			grFogColorValue()
+		Fix alt-enter.
+		Working 3dfx startup w/o instantiating SoftDrv

+	Editor.
+		Fix bright corners.
X		You know the sky is still clipping in the sunspire -> bias it.

	delegates
	inner classes / inner objects
	class-default metaobjects
	instance objects
	states
	fields: variables = functions = states

///////////////////////////////////////////////////////////////////
3-14-98

+	Reimport all properties after make completes (success or failure)?
+	Entire-make error recovery process.
+	Import props after COMPILE to guarantee importing of all meshes before refs.
+	Fixed Glide caching conflicts.

+	UnrealScript forward compatibility issues:
+		Don't allow intrinsic class to expand nonintrinsic class.
+		Objects and class defaults bins under inheretenace.
+		Store class ResThisHeaderSize variables only, not ResFullHeaderSize.
+		Merge ChildFunctions and ChildStates into Children.
+		SpecialEvent.PlaySound -> SpecialEvent.PlaySoundEffect
+		Script compiler, don't allow stack node name conflicts at a particular level.
+		>intrinsic(159) final operator(34) int *= ( out int A, int B ); second parms should be float.
X		Dead object nulling at loadtime to assist cleanup?
+		Retest -h
+		Serializable stack nodes must be named.
+		Kill NEST_Operator.
+		Hash states in addition to functions? FindFunction.

+	Must support meshes with screwed up texture definitions like
+		the previous versions because James depends on meshes
+		with screwed up texture definitions for a lot of his meshes.
+	Texture/Clear crashing (drawactorsprite)

	"The 64-bit incarnations of the Katmai NI instructions will enable 
	Merced to deliver about 20 times the performance of a 200-MHz Pentium 
	Pro on 3-D applications."

///////////////////////////////////////////////////////////////////
3-15-98

+		Critical: Check failed: glxStopMusic()==0 [File:F:\Unreal\Galaxy\Src\Galaxy.cpp] [Line: 816]
+		Cleanup property code.
+		Eliminate AddProperty; use LinkOffsets in compiler.
+		Fixed glide throttling slowdown.
+		Compute property offsets at loadtime so alignment & structs can be altered.
+		Don't serialize bool bitmasks.
X		Don't store script num.
+		Don't store defaults size.
+		ConditionalPostLoad.
+		Fixed major archive pushing and popping bug.
+			Surprised this didn't manifest itself earlier.
+		Compute property ElementSizes at loading, except strings.
+			Handle structs properly.
+			Need to hardcode string ElementSize's.
+		Kill CPF_Instance
+			GetElementSize().
+		Eliminate ElementSize.
+		Struct offset compiler bug.
+		Don't roll struct and array offsets together.
+		Fix flash scale not darkening screen on 3dfx.

+		EX_StructCmpEq, EX_StructCmpNe
+		Retest network play

///////////////////////////////////////////////////////////////////

Steve:

I'm making some final cleanups to UnrealScript, and addressing
forwards-compatibility issues, mainly keeping user modifications
from breaking when we release updates/patches to the game. In doing
this the simplest way, I had to break a bit of script code by 
requiring that variables, states, and functions not have conflicting
names.

I made these changes to all the scripts, but you might prefer to
make them yourself (and not merge with mine).

The changes are you need to make:

Everywhere: Changed "Damage" to "DoDamage".
CreatureCarcass.uc: Change Landed to LandedSound; also search for Landed= and update those defaultproperties.
Actor.uc: Changed "Size" to "VSize"; search for "Size(" to see the callers.
SlithProjectile.uc: Delete the variable "Rand".
Queen.uc: Change variable "Footstep" to "FootstepSound".
Queen.uc: Change variable "Scream" to "ScreamSound".
Titan.uc: Change variable "Stomp" to "StompSound".
UnrealIPlayer.uc: Change variable "Gasp" to "GaspSound" and the references you find with "Gasp=".
PlayerPawn.uc: Change function "DodgeClickTime" to "SetDodgeClickTime".

///////////////////////////////////////////////////////////////////
3-16-98

+	Got James' code.

X		Problems with grouping by package in a rich object environment:
X			- No clear place for objects, i.e. all textures in the "textures" directory.
X			- User interface navigating tons of folders with no relevent objects.

====158
+	GetFullName, GetPathName nested package support.
+	Eliminate MasterPackage.
+	ResolveName handle nested packages.
+	UPackage can support nested packages.
+	CreatePackage support parent package.
+	CreatePackage support nested packages via string.
+	ResolveName don't do FName creation.
+	Robust ResolveName error handling.
+	ResolveName option to not do package creation.
+	FindObject support nested packages via string.
+	FindObject avoid redundent name/package creation.
+	Parse support nested packages via string.
+	Cleanup UClass::SerializeExpr.
+	Created test scripts: TestInfo UnrealTestInfo
X	LetBool: Evaluate variable after expression. -> Not a bug.
+	It is now valid to access default bools. (Tested)
+	Changed SpecialEvent Message state to DisplayMessage.

+	All parsing routines (package and object), accept hierarchical packages.

+	Script compiler:
+		Prevent variable and function/state name conflicts.
+		Texture Lock -> GetInfo.
+		Eliminate NormalLocks, Lock/Unlock.
+		Update all scripts; make notes for Steven.
X	Privatize FObjectManager implementation.
+	Need permanent tracking of changed scripts for export-all.
+		RF_SourceModified.
+	Eric suggestion: Shaved 2 msec from 3dfx palette uploads!
+	When initially run editor and press f7, recompiles everything.
+	Updated cache code and gave to Erik to optimize.
+	New version for James, Nick & Erik.

+	Eliminate PostLoad flags.
+	Eliminate InitLocks.
+	Eliminate TransLocks.
+	New RF_Transactional.
+	Replace TransLock with Modify calls.
X	All operators must be intrinsic, numbered, and final for proper linking.

+	Struct sizes changing will hose class hardcoded sizes.

///////////////////////////////////////////////////////////////////
3-17-98

+	Move State out of MainStack.
+	UObject memory usage reduction.
+		Dynamically allocate MainStack.
+		Serialize MainStack.
+		Cleanup InitExecution/BeginExecution stuff.
+		Get UObject memory overhead down to 48 bytes.

+	File format.
X		Always sort public exports to top of list.
+		OBJ LOAD: Enable specifying hierarchical base package.
+		Expanded name max size to 64.
+		Do signatures for operators.
+		Build FStackNode::NameCpp into signature.
+		Don't incorporate return type into NameCPP.
X		Save and load class names, not linker indices, then no need to import parent classes?
+		UnrealScript dependencies change-propagation contains(struct)=deep, references(code)=Shallow

///////////////////////////////////////////////////////////////////
3-18-98

second coming
glBlendFunc

unobjver.h
unobj.cpp
unlinker.cpp

Old import command: #exec OBJ LOAD FILE=Textures\SmokeEffect3.utx PACKAGE=UNREALI
New import command: #exec OBJ LOAD FILE=Textures\SmokeEffect3.utx PACKAGE=UNREALI.ASMD

Old "defaultproperties" reference: SomeTexture=UnrealI.SmokeEffect3
New "defaultproperties" reference: SomeTexture=UnrealI.ASMD.SmokeEffect3

Old UnrealScript reference: Temp=texture'UnrealI.SmokeEffect3';
New UnrealScript reference: Temp=texture'UnrealI.ASMD.SmokeEffect3';

+	Proper saving of hierarchical package exports.
+	Proper loading of hierarchical package exports.
+	Proper save hierarchical package imports.
+	Proper load hierarchical package imports.
+	Test w/ some James fx
+	Eliminate PackageFlags from UPackage.
+	Replace "parent class" terminology with "base class".
+	Replace Package relationship with more general Parent relationship.
+	GetPackage -> GetParent

+	Fixed netplay rep condition evaluation failure
+	Group ext's and dir's together.

///////////////////////////////////////////////////////////////////
3-19-98

====160
+	execGoto
+	Lighting.
+		Adjust lightmap size bias with freescaling (2.0 -> 1.34)
+		Test 3dfx ramifications.
+		Are lightmap sizes being rounded up to next 8 due to shadowmaps? Get it down!
+			Always generate shadow maps to separate area from illumination maps.
+			Allocate right amount of memory.
+			Merge illumination map and shadow map use skipsize.
+	Cache improvements.
+		MruId.
X		320x200: Bias 0.7.
+		New memory cache code no conflict with GCache.
+		Much smaller game cache, 2 megs (save 10 megs!) :)
+		No huge GCache in editor.
+	bParticles: New particle system effects, 1 hour implementation (new record?)

+	Fixed can't-delete brushes.
+	Light flickering (max problem)
+		Need to fix the vtric rebuild bugs.

///////////////////////////////////////////////////////////////////
3-20-98

+	#teleporter?pop needs to go to teleporter
+	?pop needs to carry inventory
+	Fixed other player weapons disappearing due to backfacing.
+	MWP setvbuf & audio import
+	Smoother mouse input.
+	Tested netplay.

+	Lack of hierarchical packages (basis of grouping)? -> Fix it!

///////////////////////////////////////////////////////////////////
3-21-98

	OpenGL targets:
		Nvidia Riva 128
		Intel i740
		3dfx verify workingness

X	GetPackageLinker should take string, and not require package.
X		ResolveName, two variants (never create any packages).
X		FPackageInfo, needs parent name.
X		Update all callers.
X		Don't create spurious packages.

+	Deep scoping support.
+		ULanguageObject -> UField.
+		UField base class of UStruct, UEnum.
+		UField scoped by package; no Owner.
+		Cleanup FStackNodePtr.
+		UStackNode.
+		Move from FStackNode to UStackNode, keeping FStackNodePtr.
+		Proper stack node naming and package scoping.

+		FExecStack use UStackNode* rather than FStackNodePtr.
+		FindLabelLink.
+		FunctionIsRemote
+		CallRemoteFunction

+		CallFunction.
+		FindNode.

+		Nested package importing (hairy).

+		Eliminate FStackNodePtr serialization in script code.
+			EX_FinalFunction
+		Nested package saving of states and functions.
+		Forward compatible function and state binding.

+		Convert VfHash to UStackNode*.

+		Script compiler don't use FStackNodePtr internally.
+		Convert links to UStackNode*.
+		Eliminate FStackNodePtr.
+	unguardexecSlow stuff can display some better output now.

+		No UClass::StackTree.

///////////////////////////////////////////////////////////////////
3-22-98

+	Separate UStackNode into UClass, UFunction, UState.
+	Move NEST_ enums purely to the compiler.
+		unscrcom preoper fix
+		move enesttype out

+		FindNode.
+		AActor::FunctionIsRemote.
+		UObject::GotoState
+		CallFunction
+		ProcessEvent

+	Eliminate the function union.
+	NameCPP.
+	Eliminate the state union.
+	Eliminate OwnerClass, deduce in GetOwnerClass().
+	UField doesn't need Owner.

X	Is ForwardDeclarer needed at all?
+	UConst definition.

+	CallParent -> Super (Java convention) - document (superclass terminology)
+	CallGlobal -> Global

+	FConst -> UConstant (CompileConst) derive from UField.
+	FConst* FindConst( FName Name );
+	Super, Global: Generalize for all stack nodes.

+	Cleanup UStackNode, UState and UFunction.
+		UField-derived ctors must take InSuper parm.
+		BaseStruct -> Super, GetSuperStruct, GetSuperClass
X		IsChildOf generalize to UField's.
X		UField-derived ctors assert class of their package.
+		ParentItem->Super, GetSuperFunction/GetSuperState/GetSuperStruct/GetSuperClass.
+		Scaled sprite particle systems.

+	Separate EStackNodeFlags into EStateFlags and EFuncFlags, Locals->Properties.

+	FindObject ExactClass option.
+	UClass should subclass UState.

X	Eliminate FProperties; build into FStackNode.
+	Eliminate UClass::StackRoot.
+	UClass::Bind and UStackNode::Bind, common ifc.

	UField
		UConst
		UEnum
		UStruct
			UStackNode
				UFunction
				UState
					UClass

+	Move Next to UField.
+	Children -> UField.
+	Get rid of the ForwardDeclarer nonsense.
+	TFieldIterator<fieldclass>
X	LabelTable -> TArray build at loadtime.

///////////////////////////////////////////////////////////////////
3-23-98

+	UStackNode needs code holding support.
+		Script, SerializeExpr -> UStackNode.
+		Fixed hairy bool merging bug (dig).
+		No UStackNode iCode.
+		Script compiler emit to TopNode.
+		No FExecStack CodeClass.
+		Unreal.exe -strict, GIsStrict: All script warnings are critical errors.

+		Cleanup FExecStack.
+		SaveGame fixes (offset trashing).
+		Network fixes.

X	GotoState take concrete in-scope (or via class.state) UState object?

+	FConst -> UConst.
+	CompileFieldExpr generalize to handle constants generally.

+	MergeBools, GetInheretanceSuper.
+	FPropertyIterator use GetInheretanceSuper.
+	FindVariable
+	SerializeTaggedProperties update Region, Rotation.
+	Import .t3d update Rotation.
+	Eliminate CPT_EnumDef.
+	Eliminate CPT_StructDef.

+	struct Region -> struct PointRegion
+	Struct Rotation -> struct Rotator
+	update docs on rotator

+	UClass::Export structdefs and enumdefs
+	No FindConst.
+	test -h

X	Single-rooted approach, explicitly save UPackage as root of package file?
X		Export #1 should be the root itself.
X		Would simplify SavePackage, level management, etc.

X	Don't create unnecessary packages?

+	paths define umodel::linecheck crash in 160 (pancho) -> need to rebuild first
+	Test adding and removing functions.
X	Autoserialize the state/class hash and continually maintain its consistency?

+	test enumname.varname
+	test struct expanding class, enum, etc.
+	test class expanding struct
+	test state expanding class
+	struct expands nobody
+	global.var
+	super.var
+	test dupe enums
+	test enumname.enumcount
+	smoother actor light transitions
+	CompileVariableExpr
+	Eliminate AddProperty.

+	Cleanup GetVarType, GetVarNameAndDim.

///////////////////////////////////////////////////////////////////
3-24-98

+	Critical: appError called while debugging.
+	Eliminate FProperties.
+	Define UProperty.
+	LinkOffsets -> UStackNode (no mergebools).
+	check all getownerclass

+	PropertyFlags.
+	PropertyName.
+	FindProperty

+	FPropertyIterator iterate UProperty's.

///////////////////////////////////////////////////////////////////
3-25-98

+	Fix the config loading.
+	UFieldIterator should jump between classes manually (don't assume autolinking)?
+	properties are bkwds
+	Script compiler use UProperties.
+	FProperty -> UProperty.

+	test editor
+	test -h

+	No hardcoded offsets; uses the UProperty* directly.
+	No hardcoded bitmasks.
X	Arrays: Save variable, and compute size on the fly from src property definition's Size var.
+	Forward compatible variable handling.

+	Test adding and removing variables.

X	EX_ValidateObject
X		Incremental actor cleanup set None for bDeleteMe's.

+	FProperty::ExportProperty.
+	FProperty::PropertyClass.
+	FPropertyIterator cleanup
+	Use TFieldIterator<FProperty>.

X	Hash the properties along with other fields?
+	TFieldIterator<>(NULL) is now safe.	

+	Update property sheet code.

+	Fold FProperty into UProperty.
+	Eliminate redundent PropertyName.
+	cleanup core fwd declaration
+	Hardcoded struct lengths -> struct ptr.
+	Examine the remaining bytecodes for problems.

+	EX_StructMember
+	Cleanup core headers.

X	WWindow use UProperty*.
+	UProperty subclasses.

+	UProperty subclass GetElementSize.

///////////////////////////////////////////////////////////////////
3-26-98

+	exit/purge garbage crash
+	unscrcom decorated name fix:
+		must parse var types manually (new code) when building siguature.
+		eliminate tempsetname
+	-h
+	fix netplay (repoffset)
X	EX_ArrayElement inject UProperty subclass for sizing.

+	LinkOffsets/FinishProperties.
+	no ex_nothing garbage for default properties, so func parms are bc-expandable

+	Compiler must save and restore all subobjects of Class for proper post error cleanup.

+	Eliminate UStackNode.

///////////////////////////////////////////////////////////////////
3-27-98

====161
+	Game bugs.
+		litemap and fogmap have diff ubits and vbits sometimes (lowres)
+		Actor property application
+		volumetric gpf when rebuild
+		fixed massive rebuild slowdown
+		Bad.unr: Shows off new low shadow detail lighting problem.
X		is duplicate duplicating multiple times??
+		duplicating loses semisolidity
+		Set solid/semisolid doesn't clear other flags.
+		selection sometimes not showing? when brightness too high!
+		Duplicating zone portals loses zoneportalness.
+		Problem restoring game state from savegame?
+		Stupid actor not showing up in Inoxx's map still -> allow selecting radius
+		No DrawLevelActors.
X		fix editor crash handling
X		warnf crashes in editor because of threading.
+		Jeremy reimport map levelinfo!=0 mismatch problem.
+		"Duplicating brush changes it to an add".

X		light: extend convolution filter output range from 0x80 to 0xff
+		Separate lightmap u and v scaling.
+			Does that screw up the matrix math?
X		Merge coplanars option back in with warning!
+		Always crashes when exit after import-into.
+		SkaarjTrooper player weapon not shown - backfaced?

+		Fixed being able to delete the levelinfo.
+		Cleaned up line drawer crashing?
X		Eliminate the entry-level-always-loaded concept.
+		Net crashing when server exits unexpectedly on client.
+		Net crashing in unreal.unr. Game needs to work with Engine.PlayerPawn.

		Man vs. Machine: John Henry

///////////////////////////////////////////////////////////////////
3-28-98

+		broken line clipper
+		Beep when done rebuild. it already does, duh!
X		How do we tell what vertex is highlighted on a mover now? We can't see it to snap movers together.
+		Can't delete textures in editor because they're in use.
X		116: Exporting a good map then reimporting it makes it fail to play due to levelinfo not actor 0.
+		glx DestPanning
+		purging garbage crash after import-into.

+		Listening to music causes loading problem in UnrealEd (playerpawn)
X		How to expose the volume level to unrealscript?
+		Don't crash with musicevents with song=none??
+		Complain if SaveConfig unreal.ini is write protected.
X		Combine flashscale and flashfog wrt 3d hardware ifc; PushFlash, PopFlash.
X		DrawMesh print warning if invalid texture used, and skip the poly.
+		If error moving file after gobj.save, delete save.tmp.
+		In software the single polygons are not doublesided. (for trees,wings on creatures, ears etc)   (pancho)
+		Fix subsurface rendering
+		151:test2\joel's crash logs\load-dig-game-crash-156.txt: Galaxy crash after loadgame.
+		128:quitting out of game from esc menu in ddraw crashes/hangs some machines, use ?exit url.
+		102:special-lit lights are affecting movers
+		Cursor trapped in box (clipped) when exit on some machines

+		movers broken in vortex2
+		can't pick up health?

+		load vs compile offset diff?
+		health pick bug: FExecStack code node vs. scope node!

///////////////////////////////////////////////////////////////////
3-29-98

====162
+	Bugs
+		savegame problem fixed?
+		rend curvy def
+		cliff setupforactor crash? added more debugging code
+		prefs repaint extremely slow in game -> GTickDue processing.
+		can't undo adding/deleting in maps loaded from old version
+		low shadow detail on all movers always

+		Pipe: 16.7 -> 14.1
+		Fixed double clicks not registering for firing.
+		Eliminate RZ dependence.
+		Light clipping radius.
+		Fixed editing arrays bug.

+	Bluff:
+		Full pure bsp traversal = 10 msec
+		Pipe all vertices = 15 msec
+		New(gmem) everything = 4 msec

X	Are masked textures especially slow on glide?
+	Much faster new MemStack templates.

///////////////////////////////////////////////////////////////////
3-30-98

+	ogl guys

//=============================================================================
// MeshDef: Definition of a brush's mesh points.
//=============================================================================

class MeshDef expands Object
	intrinsic;

// Types.
struct Polygon
{
	var vector Verts[];
};

// Properties.
var vector Points[];
var polygon Polys[];

// MeshDef interface.
function int AddPoint( vector v, optional bool Merge )
{
	// Add a point to the mesh and return its index.
	local int i;
	if( Merge )
		for( i=0; i<Points.Count; i++ )
			if( Points[i] == v )
				return i;
	return Points.AddItem( v );
}
function int AddTri( int A, int B, int C, optional bool Invert )
{
	// Add a triangle to the mesh and return its index.
	local int i;
	i=Polys.Add();
	Polys[i].Verts.AddItem( A );
	Polys[i].Verts.AddItem( B );
	Polys[i].Verts.AddItem( C );
	if( Invert )
		InvertPoly();
	return i;
}
function int AddQuad( int A, int B, int C, int D )
{
	// Add a quad to the mesh and return its index.
	local int i;
	i=Polys.Add();
	Polys[i].Verts.AddItem( A );
	Polys[i].Verts.AddItem( B );
	Polys[i].Verts.AddItem( C );
	Polys[i].Verts.AddItem( D );
	if( Invert )
		InvertPoly();
	return i;
}
function int BeginAddPoly()
{
	// Begin adding a polygon to the mesh and return its index.
	return Polys.Add();
}
function AddPolyVertex( int A )
{
	// Add a vertex to this polygon.
	Polys[Polys.Count-1].Verts.AddItem( A );
}
function EndAddPoly( optional bool Invert )
{
	// End adding vertices to this polygon.
	if( Invert )
		InvertPoly();
}
function InvertPoly()
{
	// Invert the last polygon.
	local int i, n;
	n = Polys[Polys.Count-1].Verts.Count;
	for( i=0; i<n/2; i++ )
		Exchange( Polys[Polys.Count-1].Verts[i], Polys[Polys.Count-1].Verts[n-i-1] );
}

defaultproperties
{
}

//=============================================================================
// Builder: Builds a brush.
//=============================================================================
class Builder expands Object
	abstrct
	intrinsic;

// Builder interface.
function() bool Build( MeshDef M );

defaultproperties
{
}

//=============================================================================
// CubeBuilder: Builds a polygonal cube brush.
//=============================================================================
class CubeBuilder expands Builder
	intrinsic;

// Properties.
var(Type) float Height, Width, Breadth;
var(Type) bool bHollow;
var(Type) float WallThickness;

// Functions.
function BuildCube( float D0, float D1, float D2, name TopN, name BotN, name WallN, bool Invert )
{
	local int i;
	local float a,b,c;

	// Compute points.
	i = M.Points.Count;
	for( a=-0.5; a<=0.5; a+=1 )
		for( b=-0.5; b<=0.5; b+=1 )
			for( c=-0.5; c<=0.5; c+=1 )
				M.AddPoint( vect(D0*a, D1*b, D2*c) );

	// Add polygons.
	M.AddQuad( i+0, i+2, i+3, i+1, WallN );
	M.AddQuad( i+1, i+3, i+7, i+5, WallN );
	M.AddQuad( i+4, i+5, i+7, i+6, WallN );
	M.AddQuad( i+0, i+4, i+6, i+2, WallN );
	M.AddQuad( i+2, i+6, i+7, i+3, TopN  );
	M.AddQuad( i+0, i+1, i+5, i+4, BotN  );
}

// Builder interface.
bool function() Build( MeshDef M, InteractionContext C )
{
	local float a,b,c;

	// Validate properties.
	if( Height<=0 || Width<=0 || Breadth<=0 )
		return C.Warn( "Dimensions must be positive" );
	if( bHollow && WallThickness<=0 )
		return C.Warn( "Dimensions must be positive" );
	if( bHollow && (WallThickness*2>=Height || WallThickness*2>=Width || WallThickness*2>=Breadth) )
		return C.Warn( "Wall is too thick" );

	// Build stuff.
	BuildCube( Height, Width, Breadth, 'Ceiling', 'Floor', 'Wall', false );
	if( bHollow )
		BuildCube( Height-2*WallThickness, Width-2*WallThickness, Breadth-2*WallThickness, 'InnerCeiling', 'InnerFloor', 'InnerWall', true );

	// Success.
	return 1;
}

defaultproperties
{
	Height=256
	Width=256
	Breadth=256
	bHollow=false
}

///////////////////////////////////////////////////////////////////

+	ALevelInfo::LocalizedPkg
+	Update2 with James' stuff.
+	-nobind option
+	multiple exporting enums and consts
+	added more Galaxy debugging code NAME_Music, NAME_Sound
+	test saving firetex
+	proper script 'localized' defs.
+	copy mover to brush then add crashes (could be causing other mover problems)
+	fine tuned music volume levels

+	Bugs.
X		don't route copy and paste to game if in a child window, i.e. brush builder
X		Functions need a category.

set SST_DUALHEAD=1
OOW values must be within ( 1.0 / 1.0 .. 1.0 / 65535.0 ). 
voodoo2

///////////////////////////////////////////////////////////////////
3-31-98

+	Localization support.
+		CPF_Localized
+		CLASS_Localized
X		intrinsic(537) function ConsoleExec( string[127] Command, string[127] Result ); -> Steve
+		don't export class to defaultproperties
X		fix erik alt-tabbing out of ddraw maximizes window thing
+		?class= not working in netplay

+		Install create internet server hook: -server.
+		Install create safe mode hook: -nosound -noddraw -nodsound -nohard.
+		startup in DirectDraw fullscreen mode, default on, verify that safe mode skips it.

+		Do viable mouse capturing for playing in a window.
+		Property sheet doubleclicking selects previous item not current.
+		Class 'x' expands 'y' needs to accept package qualifiers.
+			GetQualifiedClass.

+		merge unlight.cpp
+		should automatically loadconfig for class defaults, not for each individual object!
+			after register
+			in serialize

///////////////////////////////////////////////////////////////////
4-1-98

+	Config.
X		store the bindings and crap in the client, not the input system.
X		avoid redundent ini reading?
X			breaks with fstrings.
+		UnrealScript private variables.
X		UnrealScript private functions.
+		get/set from console for stuff like music/sound/brightness for Steve
+		get/set way of referring to subsystems in the .ini
X		cannon.uc pip bug?
+		FObjectManager::GlobalSetProperty

X		ALevelInfo LocalizedPackage? No!
+		minigun fix

====163
+		Recompile crash that Nick reported is due to undo archive preload failure.
+		whew
+		red triggerlights in dig sticking, shouldn't because of bDeleteMe.
+		actor cleanup, need to precompute the uobject references.
+		run game from editor should generate game.log
+		slowlog obsolete.
+		jason ddraw problem fixed?

///////////////////////////////////////////////////////////////////

	Warning: Dynamic arrays! This is unsafe, because VC++ doesn't
	evaluate C++ function calls in the proper order relative to
	the overloaded operator(), so the dynamic array may well be
	reallocated leaving you writing to an invalid pointer.

	TArray<type> X;
	DoSomethingWith( X(X.Add(n)) );

///////////////////////////////////////////////////////////////////
4-2-98

+		Your cool player configuration windows where you can rebind your keys is broken
+		Configuration menus now gone(they took long enough to program now they just vanish-like a step backwards).
+		The game is forgetting your settings such as crosshair/viewbob/dodging etc.
+		Can't run editor???
+			editor.log to the bugs/163

+		FindObject ANY_PACKAGE should first try fully qualified name search
+			i.e. test GET softdrv.softwarerender.volumetric

+		ParseObject
+		FindObject(ANY_PACKAGE): Try fully qualified name first
+		CreatePackage
+		subpackage fire loading error (findobject problem with package=NULL)
+		OBJ LOAD FILE=..\unreali\textures\fireeffect13.utx package=unreali.fire
+		update pkg doc

+		Hooks for sound downsampling.
+		GPhysicalMemory
+		GSecondsPerCycle
+		GPentiumPro
+		steve needs loadpackage without loading any objects; and accessing package directory

+		MouseWheelUp, MouseWheelDown: bind to nextweapon/prevweapon.
+			IK_MouseWheelDown IK_MouseWheelUp

+		Fixed duplicate function compiling lockup
+		Dir names: 8 characters, A-Z, 0-9, _
+		Order InstallShield 5.1 International for Windows 95 and NT - West $1295 
+		appLaunchURL, no error string return.
+		cyl colliding with movers?

haptech.com / haptic.com

///////////////////////////////////////////////////////////////////
4-3-98

+	Localization issues
+		Core.int (srcsafe)
+		Fully internationalize core
X		Wildcard package
+		Don't do Editor for now.
+		ConfigFilename
+		Fully internationalize Launch.
+		FURL::Init.
+		Clean unbuild.h (move to Core.int, Engine.int, Unreal.ini).
+		3dfx mouse jerking and not capturing
+		Release mouse when in menu in netplay
+		3dfx mouse rotation funkyness, and forgetting to clip?

+		right-clicking in menu regrabs mouse
+		going out of ddraw with menu doesn't release cursor

+		SLOW_GUARD script profile!

X	cliff can't alt grab textures?
+	improved profile info

///////////////////////////////////////////////////////////////////
4-4-98

+	preload must be an FArchive function.
+	Script cleanup via preloading.
+	Examine all preloading: is it sound?
+	Check FArchive.IsTrans()
+	No special serializing offsets and stuff, use normal serialization

+	Fully internationalize Window.
+		AddButton base on string length.
+	Fully internationalize WinDrv.

X	3dfx fail gracefully -> glide is unable to do this.
X	load with nonexistant glide2x.dll fail gracefully
+	Fully internationalize GlideDrv. -> Nothing to translate!
+	Fully internationalize Galaxy.
+	Fully internationalize SoftDrv.
+	LOG_Localization
+	Fully internationalize Engine.
+	Savegame show progress (GSaving)
+	Install include .int's.
+	Installer component descriptions.
+	Progress text for components.
+	UnrealScript logging take name.
+	Fully internationalize IpDrv.

+	rebuild lights captures mouse in editor
X	editor stupid setfocus
+	obvious flush errors, vortex2
+	Rebuilder improve
+	Note <?Core.Errors.ExportOpen?> error reports, send log.

+	C++ global Localize("tag","classheading","pkg");
X	C++: UObject::Localize(...)
X	C++: AActor::Localize(...)
+	UnrealScript localization function.
+	Replace outdated "exec" commands with auto configurables.
+	Capture mouse on startup (release when pause/menu).
+	Portal adjacency graph with attenuation factors - steve did it

+	fixed [paths] problem with savegames and starting dm maps
+	flush problem is cache corruption?

///////////////////////////////////////////////////////////////////
4-5-98

X	TeleportPad: Intersect and deintersect broken.
+	Editor "dumpint packagename".
+	Give localization doc to level designers.

///////////////////////////////////////////////////////////////////
4-6-98

	Localized class kwd in all scripts
	CLASS_Localized load localized text in game.
	Editor always use raw version of Unrealfiles (no localized load).
	Config option for determining language.
	in 320x200, multiply mip factor by .66
	Official "no light" option
	sw sky option
	fix skies in netplay
	no redraw border when screen scaled down
	voodoo rush incompatibility log?
	viewtarget no show owned weapons

	Crappy lighting, need PF_AlignLighting option
	Fix mover lighting once and for all

engine:
	border.pcx
	cloudcast.pcx
	console.pcx
	lg2font.pcx
	lrgfont.pcx
	medfont.pcx
	medfont2.pcx
	smallfont.pcx
	defaulttexture.pcx

unreali:
	lg2font.pcx
	lrgfont.pcx
	lgred.pcx
	medfont2.pcx
	tinyfon2.pcx
	tinyfon3.pcx
	tinyfont.pcx
	check.pcx
	dot.pcx
	ex.pcx
	expal*.pcx?

	NameMap (AddPropertyCpp/.u)
		WinDrv.
		Window.
		SoftDrv.
		Render.
		Galaxy.
		GlideDrv.
		Fire.
	Property sheet
	UnrealScript printing option to map name

	Translation things to look at
		WinDrv menus
		menu.txt
		"true"
		"false"
		"none"
		Check statusupdatef
		Check warnf
		addpropertycpp
		"largefont"
		"medfont"?

---

		rooted controls tab console option
			occasional software flushes.
			occasional mesh flushes.
			shadow maps?
			fake shadow maps?
		listen server beacon
		gatherbeacons timeout=1.0 (timeout in seconds)
		server naming...

		First run detection
			Set sound playback rate
			Set low quality sound option
			Set low res texture option
			Cache size (1-2 megs)
			No lighting

3d hw driver picking [.dll], autodetection option
mesh picking
skin picking, must be compatible with mesh
gameinfo picking
map/episode picking

modelskin(umodel)

[Public]
softdrv.softwarerenderdevice=renderdevice
blablabla=texture

To create a ULinkerLoad that describes a loaded package and access its objects:

ULinkerLoad* Linker = GObj.GetPackageLinker( NULL, "YourFilename.utx", LOAD_NoFail, NULL, NULL );
INT Count = GetExportCount( Linker );
FName ClassName, ObjectName;
for( INT i=0; i<Count; i++ )
{
	GObj.GetExport( Linker, i, ClassName, ObjectName );
}

To access the list of objects in the package:

		client-optional packages for things like skins
		Mouse control inaccurate(I can show this to people personally).
			look at this on myschas machine

		proper detail texture mapping as second pass, check with James' detail textures. crypt.utx/detail.utx
		v2 2passfog
		Install voodoo2.

	Configuration.
		Menu of rendering drivers / audio drivers available?
			Config properties for all registered drivers.
			Combo box for all registered drivers?
		Build into config menus?
		Autodetection strategy?
		Safe mode recovery strategy? -> "Unreal" and "Unreal compatibility mode" icons.

	Memory usage.
		don't load defaulttexture, render.default, cloudcast for gameplay! (192k)
		Support mipmap tossing in game when not HighDetailTextures.
		why is OBJ LIST memory differing between loads? incomplete gc?
		sounds need to show up on obj list.

	Bugs.
		Prevent GC'ing stuff whose wproperties are being edited!
		music not showing up in editor
		0: vtric errors
		stop looping sounds when switching levels
		low and high detail skies
		stairs have almost-1 normal vectors, problem??
		cleaning up properties is way slower now, need cheat object property list
		512x512 textures garbage on 3dfx
		these is a lightmap flush problem in software (root of 3dfx flush problem?)
		"Key & Mouse Config" explicit menu option, "Performance" settings. Need "NoLighting" option.
		"No music" option for reducing ram.
		"No sound" option for reducing ram.
		Don't reload existing stuff in game when switching levels?
		PF_DirtyShadows -> no edge darkening?
		rolling makes sky warp on 3dfx???
		eliminate bsp option?
		Need brush locking option.
		rebuilding map with vtrics enabled crashes sometimes
		clicking on tex in brws rerenders screen more than once
		hit test clipregion
		Eliminate "camera zoom"
		Eliminate SHOW_Backdrop
		Eliminate SHOW_Coords
		SHOW_CurrentClassOnly
		SHOW_Events (!!)
		When move brushes 3D views should say "out of date - geometry needs rebuilding", click to go away.
		Lock options (actor brushes, all actors, surface selection).
		Recognize right-clicking on brush vertices in modes like snap-scale.
		Funky forgetting of brush vert clicking, maybe when none selected.
		"MergeBrushes" option, detexture interior polys and instance the brushes.
		replace textures and sounds when level designers screw up and lose them?
			CLASS_SafeReplace
			texture DefaultTexture
			sound DefaultSound
		Don't duplicate songs in memory.
		Holes related to out of plane bases?
		corona shadows
		bot weapons are completely black

		Split ClipBspSurf into transform and clip.
		bounding box clipping errors are due to bad outcoding.
			do box occlusion using real rasterizer for ultimate rejection and accuracy.

		still getting 3dfx lockups AND software lockups
		movers seem to be encroaching on other movers (and destroyable walls) now, were'nt before.

	Geometry.
		BSP rebuild second phase: operate directly on detail brushes.
		Water leaks.
		Holes.
		Maybe go back to old polygon shovelling approach and tighten up the geometry calculations?

	Optimizations, etc.
		Gigantic number of items in cache causes a performance problem in tick, create.
		Mesh optimizations.
			UMesh::GetRenderBoundingSphere (and collision). Verify in GetPoints.
			Mesh bounding sphere volumetric and rendering rejection.
			Always do bounding sphere cone and frustrum rejection!
		Multi polygon DrawGouraudPoly to amortize mode changes?
		Draw actors after translucencies in software, or sort?
		Leaf filtering.
			Can initialize leaf list to one leaf and put all stuff in that leaf in editor.
			Maintain actor leaf associations in UnActCol.cpp!
				- collision bounding sphere
				- rendering bounding sphere
				- light radii
				- volumetric radii
				* meshes
				* sprites
			Render off that info (no filtering till in view).
			Do movers this way?
		Store collision hulls relative to plane list (big memory savings).
		BSP plane list?
		Don't expand data structures for movers?
		Further investigate occlusion optimizations.

	Rendering.
		correct vtric transparency?
		avoid redundent vtric setup on transparencies by proper caching.
		Need translucent flag that says 'don't draw me if translucecy disabled'

	Input.
		Need reset to factory defaults, applied to property or entire section (Default.ini)
		Key/Button alias config special-case.
			Use existing Alias expander.
			Show alias name on left instead of array dimension.
			(Supress if alias has no name).
			Show keys next to aliases.
			Show [clear] [new button]
			Special-case key/button/joystick press acceptor window.
			Handle all key/button config options.
		Presets?
		Joystick
			DirectInput support.
			Buttons and button config.
			Axes and axis config.

	Networking:
		Heartbeat and get server list.
		Functions, don't name each parm!
		Real progress indicator.
		Server-switch disconnect for level changing, forward users
			to new level same server or new server
		Bugs.
			skys broken in netplay
			Stats: channels open, relevent actors, Packet lossage
			Saturating with reliable packets?
			Bandwidth issues.
			challenge login because spoofers can't receive at their forged ips?
			way of specifying client port
			retire delta packets?
			timestamped client packets and time based updates?
		Robustness.
			Crashproof property exchange assuming hostile client.
			ProtocolVersion negotiation (two way).
			Test protocol negotiation failure.
		Performance.
			Net play needs ideal pkt size?
			Figure out why file transfer performance sucks at high frame rates.
			Global bandwidth cap solution per machine, not per level?
			Relevence of dynamic decorations like bodies should not time out (per-actor option?)
			Use packet stamping to gauge ping time to current server.
			Sucks under low bandwidth / high packet loss conditions.
			Analyze spawn and move parms for common actors.
			Unreliables like AnimSeq, bFire not getting updated when packets are lost.
		Logistics.
			ViewTarget and PlayerCalcView issues in network play.
			Maybe server should dynamically spawn levels on demand?
			Test and fix a 3-level server to make sure all multipackage issues are resolved.
		Informational.
			Client-readable server rules via GameInfo public variables.
				Map title, server name, server url, email. Basically, have a mechanism for querying the LevelInfo CPF_Public variables.
				AllowClientsideBots, Monsters.
				Game version.

	Objects.
		Manage package cache by GUID.
		Multilevel client problem: Packages with same name but different guids/contents.
			Solve by scoping remote package names by GUID rather than name.
		Save and load class names, not linker indices?
			Then, don't need to import imports' parent classes.
		Implement basic package Guid generation as part of UPackage.
		Handle dir names w/ spaces?
		SerializeTaggedProperty: Struct type mismatches crashes

	Install
		.int files
		DirectX install option
		Glide install option
		Tell about space required

///////////////////////////////////////////////////////////////////

	Merging.
		ULevel + ALevelInfo. New Level.DefaultZone.
		Merge FTextureInfo and UTexture.
		Clean up FLightMapIndex; ULightMap expands UBitmap.
		UCanvas, UViewport, FSceneNode issues?
		Eliminate UnrealI.TriggerLight.
		Unlimited # zones?
		Transactioning base on serialization?
		FPoly: TArray<FVector> Vertices, once transactioning is fixed, unlimited size.
		Use nested packages for texture grouping, sound grouping (auto upgrade).
		Eliminate UObject::Group and use hierarchical packages instead.
		Auto upgrade the textures and sounds.

	Dynarrays and transaction tracking:
		Don't ttrack nested dynarrays, only rooted arrays.
		Allow dynarrays in structs (Much easier if not).
		FArchive needs a custom FArray serializer?
		TArray::ModifyItem, ::ModifyAll?
		New UTransaction class for GC-safe transaction tracking.
		Can do PostLoadItem stuff in serializer.
		Must virtualize the dynarrays (low cost - 4 bytes).
		Check types: Object, ArrayItem, ArrayRange.
		Eliminate all database macros, vars, functions, ::Ptr, AR_INDEX

///////////////////////////////////////////////////////////////////

	Steve:
		Pre ClientHearSound zone sound attenuation, to lower bandwidth
		The game needs to work with ?class=engine.playerpawn (for licensees running without unreali.u)
		Be wary of new UnrealScript compiler and execution bugs.
		Steve menu needs "WINDOWS" option when running fullscreen?
		NetMode -> bClient/bServer instead of NetMode stuff?
		Help & Info
			Buy Unreal stuff
			Read The Manual
			Unreal Homepage
			Unreal Server List
		UnrealScript should use Ux and Ax naming conventions for clarity?
		Clock on status bar c00l option? :)
		Bot difficulty option for non network bot games? speed option?
		Option to turn off 3rd person deaths?

	James:
		We still need better pickup sounds (health,armor) i've been complaining about this for 6 months, aargh!
		Update scripts to import UnrealI .utx's into subpackages
		Detail textures.
		Cooler dispersion pistol effect (particle system?)
		Cooler bubble effects (particle system?)

	Erik:
		Groundfog?
		cloudcast?
		VTune the rendering code in detail?

	Carlo:
		Fix Galaxy?

	Level designers:
		Use more detail brushes.
		Keyboard testing of levels.
		Software testing of levels.

///////////////////////////////////////////////////////////////////

	Known problems everyone has to live with.
		UnrealEd sheered brushes disappearing when zoomed in.
		"merge coplanars" option does nothing. It was unsafe.


	Restarting map: Unreal forgets player config settings (mouselook etc).
	Need mouselook always on option

///////////////////////////////////////////////////////////////////

	Thing that still suck in Unreal 1:
		Lack of totally unique naming within a package. -> Fix it!
		Memory hogging moving brush code. -> Unsure.
		Unstructured editor modes, lack of mouse-movement feedback in the editing windows. -> Unreal 2.
		Licensees: Lack of documentation / diagrams / usage flowcharts / support. -> Incrementally write more docs.
		Internet play file size. -> Improve it for Unreal 3.
		Lack of interfaces / runtime subobjects. -> Unreal 3.
		Lack of gouraud shading option on world surfs. -> Unreal 2 or 3.
		Lack of creature shadows. -> Unreal 2 or 3.
		Lack of grouping, categorized actor-list view in UnrealEd. -> Unreal 2.
		Lack of native 2d ops in UnrealEd. -> Unreal 2.
		Lack of radiosity lighting. -> Unreal 2 or 3.
		Lack of vertex manipulation and carving. -> Unreal 2.
		Lack of texture and sound compression in file format. -> Unreal 2 or 3.

///////////////////////////////////////////////////////////////////

	UnrealEd release:
		Before save-for-play, perform root make and validation step.
		RGB/HSV color editor + UnrealEd color preferences.
		Clean up confusion in UnrealEd over what things are saved in what files,
			especially with class packages & level packages.
			Need option to show dirty packages referenced by level but not saved
			(simple GetLinkerIndex thing)
		Post-compile property remapping via recursive SerializeTaggedBins.
			Would need to reallocate objects via garbage collector when sizes change.
			Would need to serialize all (as recursively tagged bins).
			Deserialize all (as recursively tagged bins).
			Eliminate ClassPropText; use an object<->text map.
			Could use this for loading new .u's safely.
		Test forward-declarations during root rebuild.
		Catch forward-declaration problems after make ends.

///////////////////////////////////////////////////////////////////

	Hardware supported:

	3D hardware
		3dfx Glide
		NEC PowerVR SGL
	Input
		DirectInput devices
		Other
			Microsoft Intellimouse

///////////////////////////////////////////////////////////////////

	Unreal 1.5:
		Nice quaternion representations, and very versatile multirotation functions.
			Rotation limitations have sucked in Unreal 1.
		Generalized spatial envelopes!
			Lights AND sounds, i.e. conic sounds
		Audio
			Multiple music playing with spatialization, i.e. pipe organ
		Effects.
			f(z) lights.
			Corona of light visible through water surface.
			Underwater sheafs of span-z light fading in and fading out.
			Lens flares.
			Render-time moving brush code without dynamic BSP updating.
			Slave brushes = huge moving brush optimization (4X faster for iris doors).
			Hierarchical moving brushes.
			Store light mesh tetrisization information, to save 2X space.
			Rope sprites.
			Sunbeam effects like polybounded volumetric lights.
			Exploit detail brushes for optimization.
			Investigate rle-ing the shadow bitmasks.
			Investingate ground fog.
			Datatype specific compression.
			rot cyl lites!
			Any-orientation cylinder lights
			editor way of switching song segments
			click on 2d view and "move the 3d view here"
			Volumetric distance fog.
			Volumetric ground fog.
			Triggerlights no performance cost when unchanged?
			PF_DirtyShadows = cool!
		DFG
			Drag and drop placement of individual texture components and subtrees.
			Copy and paste any texture component or component subtree to color, percent, or bump types.  Pasting automatically converts between the texture types.
			Multiple levels of Undo/Redo for all actions.
			Simple connect of texture components by dragging wires from parent to child.
			Direct link selection and identification.
		Editing.
			Rebuild only visible stuff option, for room by room editing
			Shift-drag actors = drag a copy of the actors.
			2D box mode with grid snapping and cool selection box like WorldCraft.
				Visual Basic style initiation.
				HSelectionBoxDragPoint.
				HSelectionBoxDragLine.
				Select-all-inside-box when draw, release a drag (+ctrl).
				Click on backdrop eliminate dragger.
				ASelectionBox.
				(Disappar when deselected)
			2D/3D plane clipping with grid or vertex snapping.
				HClipPoint
				AClipLine
				(Disappar when deselected)
			2D brush bounding box dragger for adding brushes (later).
			2D A-=B, A+=B ops (carving, merging).
			Eliminated old outdated tools.
			Group selected actors, ungroup selected actors.
				-> Hierarchiality with grouping?
				-> Group, Ungroup buttons.
			Grid plus, grid minus buttons.
			WorldCraft style drag, rotate, sheer boxes.
			WorldCraft style rock-solid cumulative rotations and scaling.
			Hide selected, hide unselected, unhide all.
			Figure out selecting surfaces also select brushes.
			Texalign
				Planar floor alignment with scaling factor
				Natural alignment
				Floodfill alignment based on one starting polygon
				Cyllindrical alignment about pivot * n tiles
		List actors.
			Sorting/grouping:
				By group
				By name
				By class
				By tag
				By event
			Matching:
				All
				Matching query expression
				Name begins with...
				Tag begins with...
				Class is...
				Event begins with...
		More advanced luminaires
			Elliptical lights
			Various spherical, conic, and cyllindrical lighting functions
			Beat the hell out of Lightscape, but in realtime
		Selection tool that uses UnrealScript compiler for parsing would be cool!
		Surface properties tracing and content flags.
		Soft smoothed blended skins on meshes.
		Brush builders.
			Wedges.
			Arch interiors.
			Wedges.
		UnrealScript.
			UnrealScript debugger.
		UnrealEd.
			Quake, Quake2, Doom importers with actor emulation.
			Eventually need drag box and brush grouping, group showing/hiding?
			Cutting and pasting (being able to select a group of solids and copy them to a new loacation w/o having to draw them in mid-air and de-intersect-save-etc.
			Quick resizing of any brush with a mouse drag. (Lets you quickly match the length of a brush with another, or avoid filling any dialogue boxes.)
			Clipping planes. (Creating a plane with 3 points, then using it to subtract a portion of the selected brush on one side of the plane.)
			Ability for operations like add and subtract to affect a target brush instead of the world.
			Show all event lines including dispatchers, roundrobins.
			Event line dragging.
		Rendering.
			Moonlight-shining-through-rain lighting effect
		Typed importers.
			UTextureFactoryPcx
			UTextureFactoryBmp
				Properly recognize file type to import.
			UPolysFactoryT3d
			UPolysFactoryDxf
			UPolysFactoryAsc
		UExporter
			UEnumExporter (hardcode enum exporting)
			ULevelExporter
			UModelExporter
			UTextureExporterPcx/Bmp
			Eliminate UObject::Export, UObject::ExportToFile
			UObject::ExportProperties to editor.

	Unreal 2:
		Inverse portals?
		Static mesh shadows?
		LOD insects and stuff!
		Precomputed self shadowing on meshes
		Seamless soft-skinning, diffuse, specular, emissive maps?
		Diffraction
		64-bit internal lighting
		FEM stress, strain, heterogenous materials, deformation, cracking, failure
		Game
			Weapon body mounts, i.e. side cannons.
			Spawn other creatures to attack your opponents (friendly to own team).
			See the player during play (look down and see your feet etc).
		UnrealScript
			General struct constants
			Local variable initializers to non-const values
			Local variables anywhere
			Javadoc style comments
			UnrealScript dynamic array support
				CPT_DynArray, support in compiler?
				Mirror C++ TArray functions in UnrealScript.
				Either preallocate Num and fix it and runtime, or make it expandable.
				Eliminate static arrays.
				CPT_String -> dynarray of chars.
				UnrealScript-defined duplicate/template-ctor dynarray support.
				Local variable dynamic array and string support (destruction).
		Bones animation system with IK
			Bone defs
			3DS Max Bones Pro importer
			Bone collisionsphere defs
			Bone physics
		Textures
			Particulate surfaces (sand, dirt)
		Multilevel frames
			Smooth level transitions
		Event propagators
			Triggerflow diagram, use delegate model?
		Rendering
			2 lightmaps a static one and a dynamic one.
			Lazy evaluation rendering trick for dynamic shadows by prerendering lightviews and filtering.
			Environment postprocessing - adding things like snow/moss/damage to levels based on
				algorithms. Very applicable to terrain, perhaps also to regular geometry.
		Potential Erik projects
			Clouds
			Algorithmic static textures
			Algorithmic plants
			Algorithmic terrain
		UnrealEd
			Integrated 2D outline editor.
			Integrated 3D path editor.
			Dataflow graph style editing drag-drop-draw editing (intriggers, enablers, disablers, outtriggers).
			Linear path extruder, revolver, sheet builder.
			Vertex manipulation of brush vertices and polygons.
			Subdivision surface triangle-mesh editing (additive brushes only).
			Brush editing & texturing window.
			Optional room-based compositing.
			Show moving brushes at rendertime.
			Mesh texture mapping.
			Store parametric-solid dialog data in brush definition for full construction history.
			Draw event connections visually?
			Texture and brush style sheets.
			Templated environmental destruction (realtime CSG or predefined breakpoints).
			FrontPage style navigation model
		Brainstorm ideas
			Liquid radiosity
			Aural radiosity
			FEM crumbling, structural destruction
		Terrain.
			Volcano you go in - entrance to volcano!
			Crater to walk down into.
			Face anomaly like on Mars.
			Strip mine with descending ramps - entrance to mine.
			Lake shores.
			Valleys.
			Impassible rivers with bridges.

	Future technologies to ponder.
		Fourier synthesis texture mapping.
		Wavelet based fractal surfaces.
		Wavelet based texture mapping.
		Volumetric polygon-bounded lighting volumes.
		ITU G.723.1: Algebraic-Code-Excited Linear Prediction (ACELP)
		Wavelet based subdivision surface rendering.
		Triangular texture mapping.

	Cool things you can do with Unreal today.
		Create special kinds of devices, like gun turrets which are controlled by people.
		Add functions for DM's spawning monsters and opening passageways on the fly.
		Dynamically changing teleporter destinations in UnrealScript to link worlds together in dynamic ways.
		Player controls for all of the monsters which aren't yet possessable.
		Experimenting with third-person view.
		Compose electronic music by chaning together sound effects (using instrument sfx).
		Text readout using moving brushes with dynamic textures.
		Create tons of new network play modes and goals.
		Make your plug-in's and extensions work with other peoples'.
		Actual streaming texture animation!

