/*-----------------------------------------------------------------------------
	Tim Sweeney, tim@epicgames.com
-----------------------------------------------------------------------------*/

Legend:	(blank)	Need to do it
		!!		Important
		+		Done
		??		Look into this
		X		Decided not to
		>>		A heading
		====	Denotes a new working version

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

The architecture for trinity is well underway, and it will be dramatically 
better in many ways. In fact, this next generation has more distinction than 
any before it, because it is the first of the transition from the pixel to 
the texture mapped triangle. Assumptions change and new capabilities arise 
beyond what a simple processor speed increase would have given. Pushing the 
technology is a long way from over, trust me. -- John Carmack

"Even the strongest of men are crushed like bugs under the feet of time" -- Tran

"Unreal is super cool" -- 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.

Human brain: 1,000,000,000 mips, 10,000 gigabytes of storage
PentiumPro:            200 mips,      2 gigabytes of storage
Moore's law: Microprocessors double in speed every 9 months.
-- Microprocessor report:

///////////////////////////////////////////////////////////////////////////////
>>Notes for others

	James & Dave:
		All anim seqs need rate definition, default 30.
		Please use mixed-case filenames for anything that is visible within UnrealEd,
			such as meshes, scripts, and textures.

	Art crue:
		All texture names need to be globally unique.
		Use as many common palettes as possible; performance will be best when there is a small
			number of palettes in view, like 8-12.
		We need a good font. Check out awesome Age of Wonders font.
		Please use mixed-case filenames for anything that is visible within UnrealEd, such
			as meshes, scripts, and textures.
		Need icons for all actors classes.

///////////////////////////////////////////////////////////////////////////////
Major subsystem work to do

	>>Audio.
		Running into wall sounds / feedback hooks
		Scraping along wall sounds / feedback hooks
		Floor surface roughness feedback hooks
		Floor footstep sounds
		Floor surface hurt

	>>Scripting.
		UType's replace CPT_'s for complete generic typing.
		UDatabase = scriptable dynamic array of UType's.
		Solve fragile base class problem by loading/saving with class/name for vars and
			stack node indices.
		Multiactor spawning hierarchies?

	>>Scripts.
		Triggerable lights, bTempLightingChange.
		Zone name text messages
		Overall brightness scaling value for screen!
		First mesh texture is script replaceable by resource (doable).

	>>Input system.
		Intellimouse support.
		Joystick axis support.
		Joystick buttons support.
		Other DirectInput device support.

	>>Object manager.
		UResource owners, like root? Would solve name resolution problems and provide scoping.
		Ultrascrutinize resource file format.
		Use hash as resource name starting point.
		No GC geditor.currenttexture/class, etc. by doing USubsystem.
		Current GC setup will toss resources that were referenced by
			records that are held only within the transaction tracker. To 
			avoid this problem, the transaction tracker must serialize all
			database items (via pointer to item <<serialize function).

	>>D3D junk.
		Create Z-buffer BEFORE IDirect3DDevice!
		Am I in a non-d3d mode?
		This sucks.
		Allocate Z-buffer before querying for device.
		Full flatshaded rendering.
		Device
			Software rendering in a window
			Software rendering DirectDraw
			Software rendering DirectDraw on 3dfx
			Direct3D fullscreen
			Direct3D fullscreen on 3dfx
			Direct3D fullscreen on NEC PowerVR
			3dfx Glide fullscreen
			OpenGL in a window
			----
			Fullscreen modes (select to launch)
		FindRenderDevice -> CreateRenderDevice
		Transparency

	>>AJudge actor type.
		Contains rules about letting players enter/leave including approving
			their persistent stats and accepting/rejecting them.
		Contains network play rules.
		PlayerEnter
		PlayerLeave

	>>Rendering.
		Must must must must do floor reflections from a floorsurf pvs, oh yes!
		If do mirrors, do water refraction.
		Caustic overlay textures!
		Gary's lazy evaluation rendering trick for dynamic
			shadows by prerendering lightviews and filtering.
		Volumetric fog with too many lightsources crashes.
		Lattice code must max/min clip Z to within X% on high slopes to prevent vmetric errors.
		Must worst-axis subdivide to reduce lattice sizes!
		Try specular bump mapping with regular lights based on 
			viewer's direct angle-off-texture-to-light.
			Account for truecolor, intermixed lightsources.
			Also handle lattice effects like flickering.
		Can palette table code efficiently handle Num<Max palettes?
		Can palette table code account for smaller/larger shade ramps?
		Add a TextureInfo to GBlit and use it in common between software/hw rendering.
		Ground fog! Yes yes yes yes yes!
		Laser site weapon, handled in fog and in point illuminataion.
		Optimizations - n*log n is a LOT less than n*n!
		Temporal oversampling possibilities
		Optimize SetupForPoly (1.2 msec for nothing)
		Dirty shadows alignment problem? Shadow fuzz visibility problem? Coplanar crack problems?
			Can solve all of these problems with NoMerge tag, and pre-raytrace merging of all
			identical iSurfs, even those coming from different brushes. Followed by separate
			merging of all identical iLightMeshes (only care about coplanarity and data size, 
			not absolute alignment).
		Raytracer point out of polygon rejection and nearest-shadow/light propagation?
		Span buffer encoding and decoding
			Span buffer encoding and decoding instead of mask map?	
				FSpanBuffer::DecodeFrom(const BYTE *Stream); // Assumes StartY,EndY already set
				FSpanBuffer::EncodeTo(BYTE *Stream);
				dword: num bytes comprising decompressed span buffer
				word: num empty spans
				word: num nonempty spans
				7-byte start/end, 0x7e = must use word start/end, start&0x80 = empty row, end&0x80=end of row,
					0x7d = clone previous row exactly.
			Savings: Save space whenever: Avg span/unspan length > 16, or row is identical to last row, or row is empty.
			Shadow map and illum map, use the span buffers!
		How much time is wasted in matrix inversion? Worth caching?
		Rewrite chunk filtering code
			- Use new dynamics classes
			- Figure out lighting in split zones
			- Figure out span merging strategy
		Proper rebuild order:
		1. Rebuild geometry excluding detail brushes
		2. Rebuild and optimize Bsp
		3. Rebuild detail brushes (adds & subtracts), performing coplanar overlays for subtraction
	Creature optimizations
		Shared-side rasterizer setup
		Build clipping span buffer rather than current awful raster clipping hack
		Optimize for speed
		Spanline z-buffer em
		Sunbeam effects like polybounded volumetric lights.
		Radiosity precomputation.
		Volumetric spotlights.
		Volumetric ground fog.
		Texture refraction coefficients.
		World cube sky option in addition to sky sheets.
		Infinite distance sprites like sun, moon.
		Two separate sky textures, top and bottom.
		Rope sprites.
		Store light mesh tetrisization information, to save mucho space.
		FLightMeshIndex iLightActor: inefficiencies due to a hardcoded limit
			of lights per surface: eats up a lot of memory but is still limited.
			How about storing a variable length list, and building an additional
			linked list at dynamic lighting time.
		Generate light mesh info when adding a surface to the BSP; trim it after
			BSP rebuild.

	>>Actors.
		WeaponCalcView is limited.  Should:
			Call for each thing in the inventory
			Draw each thing that returns a 1 from CalcView, as it returns it
			This allows for dual weapons, cool powerups, mutliple active inventory items
			Need weapon freeform movement option
		h & vseek function, returns iPotentialTarget or INDEX_NONE
		AutoVSeek & AutoHSeek based on bProjTarget
		Projectiles need Hit and HitNotify logic
		Compute ray/actor-sphere intersection and do the appropriate pyrotechnics spawns

	>>Extreme compression.
	*	Break up point components into unique floats (within a threshold),
		index them into a table, and huffman compress them by frequency, explicitly
		storing the very infrequent ones.
	*	RLE the shadow maps and huffman compress them by run length.
	*	FIF the textures and their mips.
	*	Delta compress all actor classes wrt their parent class.
	*	Delta compress all databases wrt the previous.
	*	Eliminate duplicate brushes and things.
	*	Can probably get 5:1 compression overall.

	>>Volumetric lighting extras.
		Tag leaves with v-light idynamics and manage list of active v-lights as traverse
			bsp from front to back, with stats.
		Implement polygon-sphere-cone rejection, or reject with simple sphere--plane
			intersection per span (side of plane reject, passthrough reject), with stats.
		C dual light and fog code with full darkening integration.
		Mask overflow problems with zmin/zmax checking.

	>>Moving brushes.
		Test moving brush ambient sounds
		Test doors that don't exist on particular net levels or difficulty settings
		Moving brush view in UnrealEd
		Moving brush trains, setforward/setreverse/on/off/toggle
		Implement MoverBump sensing
		Build list of newly-encroached actors as add brush
		ReturnWhenBump & stuff
		bSlave
		MT_TriggerCycleOn, MT_TriggerCycleOff, MT_Instant, MT_Destruct?
		MV_Sinusoid
		Gyrate by period option (for lights & such!)
		Test moving brush fillup conditions
		Send shoot msg to shot moving brushes
		Perfect brush/player interaction
		Slave brushes = huge moving brush optimization (4X faster for iris doors)
		Raytrace world brush nowhere option.
		Really need an "Edit Brush" option for texturing the brush (COOL!)
			Edit current brush, Edit level brushes, Use current brush
		Show moving brushes properly in UnrealEd
			Clean out moving brush stuff before csg, loads, saves
			Re-add moving brush stuff after csg, loads, saves
		Mover proximity stuff - don't fool with actor sphere, just place refs at all leaves
			below owned nodes and use Touch messages with slightly enlarged radius.
		Articulated cumulative rotation/movement slave brushes???

	>>Networking (handed over to Mark).
		Weird TcpDaemon idea.
			LevelInfo could spawn TcpDaemon actors as TCP connections are started/ended on a port.
			Slow TcpDaemon to TcpDaemon function calls like RPC.
		Desired player type spec for entering a level as something.
		DPlay UI, code
		WinSock UI, code
		Pending connection UI clean
		Simple 1-level server
		Multithread server
		Proper player recognition, join (with limits), abandon, timeout
		Full chat
		SpawnPlayActor sense net mode & spawn into playerstart farthest from opponent player team
		SpawnPlayActor handle whether player fits or not, handle optional team name & teleporter name

		Packetizer
			Build list of visible, nonstatic actors
			Sort by priority first, then by class
			Build packet of draw types, stopping when filled
			Update sent actor counters

		Depacketizer
			Delete nonstatic actors after expiry time
			Unpacketize packet, merging actors based on uniqueness
			Use AUnknown class

	>>Textures.
		FireEngine support.
		Animating texture support.
		DLL-ize.

	>>Teleporters:
		Handle same-level URL's
		Handle other-local-level URL's
		Stub [unreal:][//]server[/[level]] URL's
		Spawn Web browser on http:// ??

	>>Level brushes = actors w/ associated breps/bsps?  Cool for editability, one less thing to track.
		Can store brushes as classes
		CSG_Add, CSG_Subtract, etc.
		Brush selection popups (map edit mode & non) for setting properties
		Quake-like entity stuff, no bizarre brush list hacks

	>>Game logistics
		Idle state, begin, end, pause - via GEngine.Pause()
		Implement demo
		Load/save game, load level + proper resource purge

	>>UnrealEd projects
		Outline editor.
		Outline revolver, extruder, path extruder.
		Implement FMeshUV sharing by breaking out FMeshUV into a separate resource.
		Make note of when verts with common texture violate
		New editor features:
			- Brush "source" is always saved for each brush; this is
			  the solid-builder's base parms for solid-builder brushes,
			  or the 2d outline for 2d editor brushes. There is no source for
			  imported, intersected, or deintersected brushes.
			- Solid builder logic -> UnrealScript?
		New editor modes:
			- Move individual brush vertex.
			- Draw brush clipping line.
			- Draw event connector.
			- Draw 2D outline which is automatically extruded?
		New commands:
			- Group actors/brushes.
			- Subtract one brush from another brush?
		Texture properties
		Sound properties
		.BMP importer/exporter
		External tools
			Doom Importer
			Quake importer
			Quake exporter?
		2D lofter
			Rewrite using plain outline editor paradigm?
			Optimizations
			Extra functions
		UnrealEd online help
			HTML help format
			Expand docs in all important areas
		UnrealEd color prefs
		UnrealEd -> UnrealStudio?
		Eventually need drag box and brush grouping, group showing/hiding?
		Need Edit Brush option! Yeah!
		* Better brush stretching functions for making brushes fit.
		* 2D shape editor - no diagonals, great gridsnap, vertex deletion,
		  simple Doom features.
		* Post "add to world" solid editting--I.E. take a column and beam and group
		  them together--pull vertices around to change their configuration.
		* 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....
		* The ability to edit any brush at any time.
		* 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.)
		* Vertice manipulation of 3D brushes.
		* Clipping can be used to make *any* shape brush in seconds.  Absolutely no
		  restrictions.  Clumsy subtractions are never necessary.
		* Don't try anything but BSP.  BSP has every bit of functionality of the other
		  editors, plus a ton more. (Including clipping!)  It is also the most stable
		  of the bunch. (It hasn't crashed on me since v.12a)
		* Edit-brush option: Vertex manipilation, retexturing.
		* In any 2-d window, 2 or 3 'clipping points' can be placed with shift-right
		  click.  If 2 are placed, then the 3rd point for the clipping plane lies on
		  the visible line created by the first 2 points, in whatever 2d view you are
		  placing them.  After these points are placed, BSP shows only what lies to
		  one side of the plane that is created by these 3 points.  (The 'normal' of
		  the plane can be flipped with a button, causing the other side of the brush
		  to be missing.)  At this point, any of the clipping points can be moved in
		  any of the 2-d windows, altering the clipping plane, as well as the selected
		  brush.  Once you have it exaclty like you want, just hit the clip button.
		  BSP actually deletes the old brush and puts the new one in its place.  There
		  is no information saved on the actual 'subtraction' process. 
		* Subtraction actually changes the target brush, instead of placing 
		  'subtraction' brushes. Yes, intersect/deintersect actually chages the brush 
		  too, but only for the current brush.  Revision is a huge part of editing!

	Main loop
		Start in clean, no-level play state (later demo loop etc)
		Space = load & start level
		Load game & save game 100% in all cases
		Add res file based on *one* name/type; only adds that and its dependents?
		Macro system for cramming multiple levels and Classes.ucx stuff together
		Auto purge always work
		Save game, load game with purge
		Dehack camera levels
		Dehack edsrv levels

	Gfx ideas:
		Dynamic shadows antialiased via sublimation
		Alpha-blended texture type using palette
		Edge antialiasing
		Palette entries that are not lit by lookup table (how to do in 24-bit?)
		Lens flare
		Light highlight via alpha-blended sprite
		Underwater 3-way blur
		Sheafs of span-z light fading in and fading out
		Corona of light visible through water surface
		Xmas lighting
		Volumetrically lit fog with proper Z-clipping

	>>Game ideas:
		Girders with high-res masked textures
		Huge spider with thick legs
		Flashlight, perhaps gun-mounted
		Actor shadows via cone sampling
		Weapon powerups, including getting two of a kind of weapon
		Weapon body mounts, i.e. side cannons
		Create playerview mesh for all nonhuman morph targets
		Stolen Quake hammer
		Moonlight-shining-through-rain lighting effect
		Rain volumetric effect?
		Bots on equal terms with players - same movement primitives?
		Team play: Devil takes the highmost play (dead players can't reincarnate until
			only one team or player is left alive).
		Team skins; if you don't want to d/l em you get the defaults. Separate from resource system.
		Spawn other creatures to attack your opponents (friendly to own team).
		Indestructable admin players, can become invisible etc.

	>>Edge renderer
		Hedge links
		Perfect ael clipping and sorting
		Debug checks from hell

		Perfect ael z realization, z-shading
		Ael span generation
		Ael silhoette edge resorting
		Perfect nonconvex volume rendering
		Perfect portal rendering
		Optimize everything like hell!

	>>New bsp pass:
		35% of all points are near duplicates (within 0.2 units of each other), many of the others aren't
			relevant if they are only intrasurface!
		640x400: 11.5 msec; 320x200: 9.5 msec: This code is cache and geometry bound.

		Generate leaf numbers in leaves.
		Generate new format leaf side lists with duplicate removal.
		Special case portal surfs.

		60% of time is spent in GRender.GetPoint, 60% of points are cached!
		10%-20% of all lines are clipped depending on the scene.
		<0.5% of all lines are multiply clipped.

		2 classes of edges - static edges whose relative depth sorting does not change,
		and floating edges whose relative depth sorting can change. Handle each separately
		and merge them per scanline?

		Unordered flatshaded rendering.
		Unordered flatshaded rendering with proper clipping.
		Clip via per-surface effectiveness count.
			Clip via inherent start/end effective count.
		Unordered span buffer building.
		Z-aware span buffer building.
		100% pixel-perfect.

		* Merge surfaces.
		* Merge light meshes.
		* Run 1/2 unit wielding pass.
		* Each bsp leaf is a cv containing polys and portals.
		* Bsp heuristic adjusted to minimize added portal sides while balacing the
		  tree half decently.

	Phase 2.
	* Massively high-level optimized and tested in full unoccluded Jorus.
	   - Perform minimum possible sorting (bucket or myqsort) or, better yet, avoid.
	   - Perform minimum possible surface transformation and work, save stuff in Surf
	     area for later usage.
	   - Perform very fast front/back test.
	   - Very fast subpixel accuracy.
	   - Integrated point and vector transformation.
	   - Outcode rejection.
	   - Use vertical exact intersection if that's fastest.

	Phase 3.
	* Portal rendering with faulting.

	Phase 4.
	* Rebuild for play option.
	* Bsp portal generation and extraside minimization.
	* No redundent edge setup.
	* 0.5-unit point merging with dead-surface elimination.
	* Duplicate side elimination.
	* Superduo edge resolution.
	* Surface merging.
	* Lightmesh merging.
	* 640x400 Jorus always <= 3.0 msec occlusion on PPro-200.

	Phase 5.
	* Integrated creature feelers and creature occlusion rendering.

	>>New rendering technique notes
	New stats: Performance is now a function of 2 things: pvedges and vsurfs
		(not counting dynamic lighting and gameplay processing).
		pvedges reflects the number of "potentially visible edges" in the view;
		you can reduce it by occluding your levels and building simpler architecture.
		vsurfs is the number of visible surfaces in the view; reduce it by using
		simpler brushes and building simpler architecture.
		Polygon counts aren't relevant because Unreal knows not of polygons.
	Note that the editor and game use a very different rendering algorithm (use
		the "optimize for game" option in the rebuilder to optimize a level for
		gameplay rendering).  The game's is much faster but is not versatile enough to
		be edited.  However, you're always just a rebuild away from either format.
	Semisolids are no longer needed or supported.
	Zones and portals are now useful only for setting ZoneDescriptor properties; 
		they don't speed up (or slow down) the engine anymore.

///////////////////////////////////////////////////////////////////////////////
Things to ponder

* In Fourier theory convolution in the space domain is equivalant to 
  multiplication in the frequency domain. One can perform collision checking 
  using just a point by convolving the world with the collision volume of an 
  object. Is there a representation of polygon objects that is analogous to 
  the frequency domain of a signal, which would enable easy convolution of
  the world?

* Is there a way to perform texture mapping directly from a texture stored in
  its frequency domain?  If so, this would be an extremely powerful technique
  because:
    - Filtering quality would be ideal, because there would be no bilinear/bicubic
      artifacts.
    - Antialiasing would be ideal, since the source texture could simple be
      convolved (multiplied) by an anisotropic filter kernel which is a function
	  of the current texel's distance, orientation, and slant from the viewer.
    - Microtexturing would be natural, because a microtexture could be applied with
      a different tile size than the source texture.
  o(n*m) per pixel method:
    - It is trivial to perform slow fourier synthesis texture mapping simply by
      computing the n*m cos terms of the fourier expansion for each point.
    - The n*m method could be accelerated by following the n*m cosine terms
      along the rational linear path corresponding to a scanline. Mathematically
	  this can be accelerated by using a cos lookup table, or by using the
	  cos(a+b)=cos(a)sin(b)-cos(b)sin(a) expansion where [or something like that]
	  cos(a+b*t) can be determined with a sqrt but no cos/sin terms.
  o(n+m) per pixel method:
    - Perform a simple separation of variables and perform 1D fourier transforms.
  o(??) per pixels methods:
    - Use the FFT to reduce computational complexity.
  o(a*b) method:
	- The sinc filter analogy of this is the basis of more traditional anisotropic
	  texture filtering methods.
  Is this tractable in realtime?

* Volumetric lighting.
  - Clip spherical integration to arbitrary shapes like cones.
  - Clip spherical integration to a polygon-bounded hull or BSP using boundary raytracing.
  - Integrate a cone function.

* Audio.
  - Precompute a raytraced or radiosity-like solution to the sound dampening/echoing problem
    per node/zone, taking into account room geometry and absorptivity of materials/material 
	families and interpolate between adjacent nodes/zones as the player walks along. This
	would require convolving the output sound stream by the precomputed filter. Is this
	tractable in realtime?

Here it is: Recently, style sheets were introduced
to the web. They allow web sites to write some basic HTML, and
then reference a separate file that applys a style (like
all headers are green witha black background, etc.) If you want to change the style of your web site, you just
reference a new style sheet. - all of your web content stays the same.(the actual text.) My idea is this:
why not have a similar concept in UnrealEd?

Environment postprocessing - adding things like snow/moss/damage to levels based on
algorithms. Very applicable to terrain, perhaps also to regular geometry.

You should be able to see yourself. Look to the side, you see your shoulder. Look down, 
you see your feet. You fire downward... make sure not to blow your toes off!
Guns, ammo, powerups, etc... actually *LIE* on the floor, not hovering there spinning and 
making you wonder what keeps them up. Yes, this does occasionally make them harder to see, 
but that would make it more interesting :)
In multiplayer, you can actually _see_ what weapon your opponent carries, and base your 
tactics on that knowlege, rather than waiting till he fires. That is too often 
fatally too late.
For the next generation of games: the water reflects slightly :)
Enemies, when gibbed, leave their gibs behind, rather than Quake's rampant heads (or, 
leaves a random body part behind)
Deformation of walls when hit (at the very least, sprite bulletholes, etc...) 'Twould 
be very cool: you fire tarydium at a wall. Some stick into it, while others shatter, leaving 
tarydium dust and shards on the floor).

Fix the friggin zone bugs
searchlights should upd in UnrealEd
Camera w/ player controls w/o focus sucks CPU time
Import loses panning bug
Turning player controls on then off screws up some dyn lite fx in UnrealEd Sky8 well
fix counter %i

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

///////////////////////////////////////////////////////////////////
5-26-97

====0.864z
+	Inoxx bug fix day :)
+	fixed click on the texture to reselect , the properties text has disappeard (Inoxx)
+	Fixed physProjectile bug (Steven)
+	Fixed alt key sucking in camera views in UnrealEd (Inoxx).
+	Fixed bug not being able to type 'z' in script editor! Ack! (Steven)
X	BTW is it possible to prevent the game to autosave when playing with ctrl - P ?
X	And when in DirectDraw. No.
+	'H' toggles hide-actors. BTW a key would be cool to toggle: hide/show actors. (Inoxx)

X	the geometry is screwed, strange , both brushes come from 2D editor
X	no 3ds brushes here Attachment Converted: f:\eudora\attach\BUG3.T3D
X	-> 2d editor sometimes creates bad brushes (don't use them).

+	Open free camera: dynamic light, no brushes, no movers, yes actors. (Inoxx)

///////////////////////////////////////////////////////////////////
5-27-97

====0.865a
X	Using keyboard and mouse at the same time (like walking and moving the
X	heap up ) generate some weird effect , is look not smooth at all moving with 
X	keyboard only is perfectly smooth , moving with mouse only is perfectly smooth 
X	too, but the both at the same time is ugly : Fixed

+	Whenever I type a Z in unrealed, it does an undo (as if it was a ctrl-Z)...

+	The green colors are still here when coming from directdraw mode. (Inoxx)

X	In the Properties dialog box, when you input a string, it parses it out
X	to only the first word unless you specifically put ("") quotes around it
X	when inputting the data. -> No, this was fixed after 0.84.

+	I'm not able to import Extreme. (Inoxx) Works now.

+	Portals not displayed. (Test.unr)

====0.865b
X	Why is the saving so slow? is it a bug or a feature? (Inoxx) -> Feature.

+	Only one sprite chunk is hardware-rendered. On hardware, render source
+	points unclipped. Fixed, but sprites suck. Use meshes wherever possible.

+	Subclass and edit new is broken.

X	Sometimes the textures browser is replaced by a camera view. (Inoxx) Can't duplicate.
+	WM_MOUSEWHEEL -> AXIS_MouseW

+   Pressing mouse right button AND up or down moves the player's head.

====0.865c
+	Made the frigging orthogonal view backdrop white again.
+	Extended MoveActor and TestMoveActor with IgnorePawns boolean.
+	RotateActor.
+	MoveActor handle moving hierarchy.

====0.865d
X	Negative lights, for spawning post-explosions. Bleah! Looks awful.

///////////////////////////////////////////////////////////////////
5-28-97

====0.865e
+	It appears that AnimEnd is never called for animations that only have one
+	frame. Is this true? And is that what you intended? (jschneider) Fixed this bug.

X	3dfx support: I do get weird white triangles and lines flashing on the 
X	screen occasionally, as well as lockups after running around for a 
X	minute or so. (total lock) I don't know what else to tell you about 
X	this one, happens in any map that has decent size and it just freezes 
X	like it is taking a screenshot. (Cliff) Broken hardware!

+	When save 'light', get error untagged name (Jason Emery). Fixed.

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

====0.865f
+	Moving brush fixes.
+	IsOverlapping.
+	Movers must default to bBlocksActors, bBlocksPlayers!

X	UActors: Derive from Primitive, and perform delegation of collision checks? Hmmm.
+	Actor collision query function - optionally delegate to primitive.

+	AActor::GetCollisionExtent:   support movers properly.
+	Fixed major array-through-context bug (Les Bird).

+	Retest the suites.

+	Replaced PF_IsFront, PF_IsBack with NF_IsFront, NF_IsBack, because there was
+		a potential inversion problem with the BSP where polys are flipped relative
+		to their coplanar node.

====0.865g
+	Handle coordinate system transforms for.
+		UModel::BoxLineCheck

///////////////////////////////////////////////////////////////////
5-29-97

====0.865h
+	FYI: trying to spawn a null ('none') class will result in Unreal crashing.
+	While reasonable, it would be nice if the spawn function just returned a
+	null reference and maybe a warning. -> Fixed

X	>- computer locks up totally (even Pview doesnt get you out of this one) when
X	>  clicking somewhere on the Rebuilder window.
X	>  this happens on all my computers, level loaded doesn't matter (freshly
X	>  installed 86v, loaded Unreal.map trying to click on BSP in the Rebuilder
X	>  window, CRASH) -> This does not sound like 0.864v!

+	Fixed script compiler function-after-label-in-state crash.

+	Export U, import U.
+	Zone PlayerEvent!
+	Clean up UnMath coords functions.

+	Rotation variance of collision volume problem. Must actually transform collision
+		BSP hulls and operate on the transformed versions (simply skipping the bounding 
+		boxes).

+	Handle coordinate system transformation.
+		UModel::PointCheck
+		UModel::LineCheck
+		UModel::BoxPointCheck

+	Retest trace.

====0.865i
+	Fixed major owner bug in MyBoxPointCheck.
+	Separated iBound into iRenderBound and iCollisionBound.

+	Space updates all views instead of ctrl.
+	Fixed SerializeBin code.
	
====0.865j
+	CPF_Intrinsic: Intrinsic actor properties, not touched by script?

====0.865k
+	Eliminated hardcoded rendering dynamics limit.
X	Resize rendering point and vector caches on the fly?

+	Made curved surface technique 2x faster, and much smoother.
+	Fixed UnrealEd not being movable when non-maximized.

+	Environment mapped meshes.
+		Actor bMeshEnviroMap with regular and curvy surfaces.
+		EnvironmentMap texture per zone (get from parent).
+		bZoneEnviro flag to use environment map surface from zone.
+		Separated actor texture into Sprite, Skin.
X		Option for 2-layer enviro mapping on 3d hardware. -> Looks like crap.

====0.865m
+	BeginState/EndState probes.
+	Fixed new trace bug, optimized Trace.

+	3dfx now supports all possible sizes of light meshes.
+	3dfx now supports modulation blended detail texture mapping.

///////////////////////////////////////////////////////////////////
5-30-97

====0.865n
+	Test spawning over 3000 actors.
+	3dfx handle transparency and normalized 5551/565 textures.
+	Must use chroma-keying for masked shadowed textures??

====0.865o
+	Improved 3dfx masked/transparent shadowed textures.
+	Optional glide fog diminishing.

====0.865p
+	Fixed dynamic light sticking problem, 3dfx only.
+	Fixed UnrealScript gotcha: Can't override a function and make it final.
+	Import-and-add now selects all brushes AND all actors.

///////////////////////////////////////////////////////////////////
5-31-97

====0.865q
+	Now BLACK is always treated as the mask color, not color 0. This greatly simplifies
+		the artwork (no dpaint touchups).

+	P & K keys - update all views! (Show icons!)

+	Fix the zone code!
+		Merged zone building code with visibility code.
+		Zone finder must filter through both the front and the back.
+		Portal code is now 100% totally general!
+		Zones/portals can work for water now (but we still need swimming player controls)

====0.865r
+	Clean up zone code.

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

	3dfx questions
		What's the deal with grDepthMask( DepthBuffering ) not working?
		How to ping-pong the w-buffer?
	3dfx requests for future hardware
		Clamp rgba values to the (0-255) range at render time, so that they
			can safely underflow or overflow within a specified range. Useful for
			overbrightening and interpolating rational linear values (such as alpha
			blended detail textures) where the range isn't bounded to 0-255.		

///////////////////////////////////////////////////////////////////
6-1-97

====0.865s
+	Zone extensions.
+		Only split up polys (and use PF_NoMerge) if nonzero zones differ; right now it does way too much splitting.
+		Opt geom after zone generation rather than before!
+		Handle zones with semisolid invisible brushes cleanly. PF_Invisible now flows!
+		Handle rendering zone portals with an actual texture (i.e. transparent).

+	UnrealEd: Click on compile error on script whose window is not open crashes.
+	UnrealEd water option use water zoning.

====0.865t
+	Fixed rendering bugs with transparent portals.

====0.865u
X	3dfx should support zone ambient lights (affect palettes?) -> Software only!
+	3dfx can see detail texture lines during transition -> Now alpha-fade them in.
+	3dfx fade out transparent textures based on Z.
+	Must make detail alpha persp-linear.

====0.865v
+	Fixed .u loader -> However, the .ucx loader still needs work.
X	Is there a way to do polygon filtering/splitting that's guaranteed to produce consistent results?

+	LE_SpotLight now implements dynamic shadows.
+	DrawScale should affect scaled sprites!

====0.865w
+	Optimizations.

///////////////////////////////////////////////////////////////////
6-2-97

====0.866a
+	Fixed moving brush position bugs.
+	Cleaned up bounding volume code.
+	Cleaned up the math code.
+	virtual FBoundingBox UPrimitive::GetBoundingBox( AActor *Owner )
+		Changed GetUncoords to ToWorld.
+		Changed GetCoords to ToLocal.
+	UMesh::BoundVisible properly handles all rotation.

====0.866b
+	Improved AActor::GetCollisionExtent.
+	Extended UPrimitive.

====0.866c
+	Moved cylinder collision code to UPrimitive.
+	Properly use UPrimitive::GetBoundingBox and eliminate TransformedBound dependence in code.
+		Use for generalized actor bounding boxes.
+	AActor::GetPrimitive.
+	Eliminated bCheckCollision.

====0.866d
+	GetData, Element on a const object imply const data.
+	STEVE: NOTE: SetActorZone now takes a Test parm to indicate whether to send messages.
+	Cleaned up MoveActor, FarMoveActor.

====0.866e
+	Eliminated the "Engine" keyword for functions - it's obsolete.
+	New "intrinsic(0)" declaration and EX_ProcessFunction enable you to call old AActor::Process
+		style functions regardless of whether they reside in C++ or script code.
+	SNODE_EditableState
X	Enable mover ::Process intrinsics to be called from script.
+	Timer() now takes no parameters.
+	Fixed TransformPlaneBy bug!
+	Optimized 3dfx code to reduce palette/texture churning.

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

	Notes for steven:
		When you need to kill an actor after a certain amount of time, just set the life span
			rather than using a timer and destroying the actor manually.
		Should all actors perhaps default to bEnginePhysics=true?
		Don't use BoxPointCheck yet, it's still broken.
		UnrealEd now includes a pulldown-list for setting an actor's initial state; to make a
			state changeable in UnrealEd, just declare it like this:
				state() MyState {...}
			instead of
				state MyState {}
		Can you merge in my PlayerCalcView code for the behind-the-player view?
		We need to be wary of infinite-recursive problems when we use Move from within
			a Touch/Bump notification. I ran into this problems with the following script,
			and James ran into it with some of his projectile code. Check out the new
			function "singular" specifier - you can use it with notification functions like Bump
			to prevent recursion.

class NewTrigger expands Trigger;
function Bump( actor Other )
{
	// This recurses infinitely when called by Human.
	log( "I was bumped by " $ Other.Class );
	Move( Normal(Other.Location - Location) * 10.0 );
}

Solution:

class NewTrigger expands Trigger;
var int RecursiveCount=0;
function Bump( actor Other )
{
	if( ++RecursiveCount == 1 )
	{
		log( "I was bumped by " $ Other.Class );
		Move( Normal(Location - Other.Location) * 10.0 );
	}
	RecursiveCount--;
}

Bug fix in execLineOfSightTo: *Always* validate parameters passed to C++ code from script code
and handle incorrect parameters gracefully. It should be impossible to crash the engine by 
writing a buggy script, except for the case of infinite recursion. For example, actor pointers 
with NULL before calling functions that expect actor parameters. Applicable functions:

static void execLineOfSightTo( FExecStack &Stack, UObject *Context, BYTE *&Result )
{
	guardSlow(execLineOfSightTo);
	debugState(Context!=NULL);
	debugState(Context->IsA("Pawn"));

	P_GET_ACTOR(Other);
	P_FINISH;

	*(DWORD*)Result = Other ? ((APawn *)Context)->LineOfSightTo(Other) : 0;
	unguardSlow;
}
AUTOREGISTER_INTRINSIC( AI_LineOfSightTo, execLineOfSightTo);

See also:
	execActorReachable
	execFindPathToward
	execMoveToward
	execStrafeFacing
	execTurnToward

====0.866f
+	New UnrealScript "state() StateName" notation makes a state settable within UnrealEd, which
+		enables level editors to override the default state. UnrealEd now includes some interface
+		improvements in the actor property editing code to facilitate this.

+	Added SNODE_IteratorFunc.

+	Moving brushes, use regular physics rotating code.
+	MoveActor move floors.

+	Settable state combo box in UnrealEd.

+	Renamed "Floor" to "Base" for clarity.

///////////////////////////////////////////////////////////////////
6-3-97

====0.866g
+	Rearranged execution stack in anticipation of vf hashing.
+	FStackNodeLink overhaul.

====0.866h
+	Changed FStackNodeLink to FStackNodePtr, now use pointer semantics.

+	You can no longer override a non-final function with a final function. This is an optimization.
+	Fixed decompiler bug with accessing properties through actor casts.
+	Cleaned up FNestInfo.

====0.866i
+	Don't allow calling iterator functions directly.
+	Multiple recompiles & loads chokes the vftable freer?
+	Extended FStackNode to include two parent pointers, ParentItem and ParentNest.
+	Cleaned up the decompiler.

====0.866j
+	Fixed bug in new mover intrinsics which conflicted with Steven's intrinsics.
+	Added in checking for duplicate registered intrinsics.

///////////////////////////////////////////////////////////////////
6-4-97

====0.866k
+	UnrealScript SNODE_SingularFunc to prevent reentrance on a per-actor basis, bSingularFunc.

+	The new UnrealScript "singular" attribute can be applied to functions, to prevent them from
+	being reentered. When a singular function is called in an actor, and another singular function
+	is already being executed recursively in that actor, the later singular function returns
+	immediately without doing anything. This mechanism exists to prevent infinite-recursive
+	situations such as can occur when an actor tries to move in response to a "Bump" notification.

+	Intrinsic vector MirrorVectorByNormal(vect,normal);

+	Added physPathing, physMovingBrush.
+	Removed PHYS_Splining.

// Here is a cool test script.
class Popcorn expands Trigger;

function BeginPlay() {
	CallParent.BeginPlay();
	Physics = PHYS_Projectile;
	bEnginePhysics = true;
	bBounce = true;
	bHidden = false;
}

singular function Bump( actor Other ) {
	Velocity = Normal(Other.Location - Location) * 400.0;
}

singular function HitWall( vector Normal ) {
	Velocity = MirrorVectorByNormal( Velocity, Normal );
}

====0.866m
+	Finished up virtual function hashing. Whew!

====0.866n
+	My physics modes.
+		PhysAlpha, PhysRate -> Root. Negative rate is ok.
+		PHYS_MovingBrush.
+		PHYS_Interpolating.
+		InterpolateEnd notification.
+		latent FinishInterpolation();

///////////////////////////////////////////////////////////////////
6-5-97

====0.866o
+	InterpolateBrushTo();
+	Moved all the brush intrinsics to UnrealScript.

+	Fixed big huge bug in UnrealScript which caused function parameters to be
+	mismatched when bytes are passed as parameters.

====0.866p
+	Fixed triggers!
+	'Begin:' label in states is now optional.
+	Sorry, I eliminated NoName. Use '' instead.
+	Scripted all of the new moving brush modes.
+	New: In ULevel::MoveActor, bump messages are *not* send to an actor's base when the actor
+		bumps it. This prevents a flurry of unnecessary messages.
+	Moving brush sound effects.

+	A state that overrides a state (of the same name) in its parent class inherets all of the
+		functions and labels in that parent state. The syntax is unchanged.
+	New: A base state can now inherent from another state in the same class. The syntax for this is:

state MyBaseState
{
	//...
}

state MyNewState expands MyBaseState
{
	//...
}

+	IsState now returns whether an actor is in the specified state. This may return a different
+	result than (Actor.State==TestState) because an actor may inheret from a parent state with
+	a different name.

+	Note that states can have either no inheretance or single inheretance. There
+	is no way to do handle multiple inheretance (or "interfaces") with states.

+	Pawn.Message command.

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

====0.866q
+	Fixed UnrealScript problem compiling code like "RotationArray[Index].Pitch".
+	Actor movement code now automatically updates moving brushes.
+	Make sure Touch & Bump messaging is done with movers.

+	New ResetTrigger mechanism for synchronizing mover-trigger-switches and the movers they control.
+	New BumpButton moving brush type! Awesome.

///////////////////////////////////////////////////////////////////
6-6-97

====0.866r
+	Iterators.
+		NAME_ForEach

====0.866s
+	Compiler support for iterators.
+		Latent function calls are not allowed inside iteration loops.
+		Loading/saving scripts with iterator tokens.
+		Iterator decompiler.
+		Can break out of a foreach.
+		Can return from a function in a foreach (EX_IteratorPop first).
+		Cannot goto into or out of a ForEach.
+		Iterator compiling finished.

====0.866t
+	Created all intrinsic stubs.
+	Script compiler automatic typecasting of out object to BaseClass.

+	Fixed zones Merged in extreme.

///////////////////////////////////////////////////////////////////
6-7-97

====0.866u
+	Fixed Trace.

====c
+	Script execution support for iterators.
+		Implement AllActors.
+		At end of iteration, iterator variable should be set to None.

		EX_Iterator + [wOffset End] + Iterator function call
		Start:
			Code...
			EX_IteratorNext
		End:
		EX_IteratorPop

====0.866w
+	Iterators.
+		execAllActors
+		execChildActors
+		execBasedActors
+		execTouchingActors

====0.866x
X	Allow casting strings to names. -> Would violate the UnrealScript sandbox.
+	More iterators.
+		execRadiusActors
+		execZoneActors

///////////////////////////////////////////////////////////////////
6-8-97

====0.866y
+	Merged Steven's code.

====0.867a
+	Test & fix
+		UModel::PointCheck
+		UPrimitive::PointCheck
+		UModel::BoxPointCheck
+		UPrimitive::BoxPointCheck

+	Torture test the actor destroying code.

X	ScriptConst not inhereted?
X	ScriptConst as delete-optimization? -> No can do.
X	Test enforcing ScriptConst.

+	Optimized UnrealScript virtual functions.

+	Teleporter bStatic=false.
+	Trace now takes bNoPawns parm.

+	Require names enclosed in ''.
+	Stubbed in the new mesh collision routines.

====0.867b
+	Trace now takes flags to indicate what to check collision with.

====0.867c
+	Merged Ammon's sound code.
+	execVisibleActors
+	UnrealEd music click on ".." must bring up song.

+	All pawns must default to bCanTeleport=True.
+	Seeing: check bHidden!

+	Brush collision must work with brush prepivot/postpivot.

====0.867d
+	Clean up model PreSubtract, PostAdd.
+	Clean up AActor::ToLocal, AActor::ToWorld.

///////////////////////////////////////////////////////////////////
6-9-97

====0.867e
+	Fix BoxPointCheck out normal. 1 = no hit, 0=hit.
+	BoxPointCheck now fulfills Steve's wildest dreams and fantasies.

====0.867f
+	Update from Steven.
+	FCoords::Inverse() is 16 times faster.
+	FCoords::Inverse now properly inverts the origin.
+	Handle proper sheering of movers.

+	Eliminate bEnginePhysics.
+	FarMoveActor needs to set OldLocation.

====0.867g
+	Objects are getting touch messages with themselves.
+	Weapons curvy?
+	Creature masking.

+	Simplified Trace: FCollisionHash::LineCheck now can optionally handle the level actor.
+	Expanded IsBlockedBy to handle the level actor and bCollideWorld properly.
+	Simplified MoveActor.

+	All of the collision functions now take an FVector Extent (instead of height & radius) for
+		simplicity and generality.

====0.867h
+	Eliminated PointCheck, LineCheck: Now use BoxPointCheck and BoxLineCheck with an extent of
+		FVector(0,0,0) to do this. This keeps the interface cleaner.

+	Implemented foreach TraceActors(), but no zone change notifications yet.
+	This is a really cool function!

====0.867i
+	Somehow merge node flags and trace flags into some kind of "solid volume classification flags"?
+	Fixed walking through actors problems.
+	Fixed walking through level problems.
+	Tightened up LineCheck: Should be rock-solid now!

+	Hash line check take optional "check level" flag.

///////////////////////////////////////////////////////////////////
6-10-97

====0.867j
+	Clean up class intrinsicness and capitalization.
+	Need working playerstarts.
+	Get rid of .mac macros.

+	Start spawned actor names at ClassName1.
X	All drawscales should be 1.0.

====0.867k
+	Implemented AActor::IsBasedOn.
+	Tightened up SpawnActor code for cameras.
+	Cleaned up moving brush code.

///////////////////////////////////////////////////////////////////
6-11-97

====0.867m
+	Get rid of hardcoded \unreal paths in the scripts.
+	Extended PlaceActor to handle actors.
+	Improved math cosine and sine consistency.
+	Merged with James & Steven.
+	Use Skin texture for texture #0 if specified.

====0.867n
+	Fixed the collision hash bug from hell.
+	Property flags like Const now propagate through structure references!
+	This created a collision bug with code like Location.Z += 9;
+	See CPF_PropagateFromStruct.

+	Split UPrimitive::GetBoundingBox into GetRenderBoundingBox, GetCollisionBoundingBox.
+	UnLevAct: Rotate if < 0.5
+	Verify mesh collision sizes.
+	Fix trace flag handling.
X	Trace still needed? Is ForEach with a Break better? -> It's nice for performance.

X	Fix CollisionTrace.
X		execCollisionTrace
X		Test CollisionTrace for the behind-view.
X	Eliminated CollisionTrace.

+	ULevel::SetState: Don't send BeginPlay messages or other stuff if already up for play?
+	Eliminate UnrealScript CollisionTrace intrinsic.

+	Trace: optional vector Extent
+	TraceActors: optional vector Extent

+	Check out steve's t3d: unrdm1.t3d

====0.867o
+	STEVE: I no longer need sizeof(AScriptedPawn)==sizeof(APawn), so feel free to go back to
+		sticking variables in AScriptedPawn.
+	If I were smart I would eliminate remembered-actors reconciliation!
+	UnrealEd Double clicking on state combo doesn't advance.
X	MoveActor take optional rotation for optimization. -> Separating these two things is nicer.
+	Add collision extent to Trace.

+	SpawnActor templates are no longer supported: Too problematic.
+	Audio.
+	Gracefully handle negative DrawScale.
+	FScreenBound
+	FScreenLocation

+	DrawScaledSprite

+	AMover EncroachingOn
+	function bool EncroachingOn( actor Other );
+	function EncroachedBy( actor Other );
+	Fixed BoxCheck owner problem

///////////////////////////////////////////////////////////////////
6-12-97

====0.867p
+	InterpolationPoint.
?	Illegal span range errors.
+	Delete key is back in.
+	Vital for E3.
+		bInterpolating.
+		Rotation or not depeding on physics.
+		bDirectional.
+		Option to do rate by RateModifier.
+		Flyby support.
+	Bogus script warning when GotoState with no state.
+	James logging owner.rotation.pitch / yaw / roll bug. Non-bug.

///////////////////////////////////////////////////////////////////
6-13-97

====0.867q
+	Event lines are back in UnrealEd.
+	Ship1c import bug. Brush is screwed up beyond repair.
+	Movers no longer take the shortest rotation path between their
+		keyframes. They follow the rotation you specified in UnrealEd, including
+		windings.

+	Return values aren't copied out of intrinsics.
+	Calling UnrealScript from C++ doesn't handle return values.
+	Undo textures isn't synched with rebuild.

+	Copy Inv.u InvCalcView1 to InvCalcView1.
+	NOTE TO SELF: Never ever ever store redundent information that must be maintained.

+	SinglePointCheck
+	CheckEncroachment

///////////////////////////////////////////////////////////////////
6-14-97

	Steven: Notable changes...
	* Pawn.u: Trigger and Untrigger now take an Instigator parameter (the compiler catches this).
	* UnLevel.h: MoveActor now takes NewRotation. Use Actor->Rotation for no rotation.

====0.867r
+	Trigger messages need an instigator.
+	Mover EncroachDamage.
+	Fixed that DirectDraw problem!
+	Test all mover reverse cases.
+	Mover encroach damage.
+	Added new NewRotation parameter to MoveActor. Just use Actor->Rotation to not rotate.
+	Eliminated RotateActor.

====0.867s
+	New UnrealEd progress bar & status bar - should be more stable.
+	Changed compile shortcut keys to be in line with VC++/VJ++.

+	BeginSlowTask
+	Fixed up d3d code.
+	Proper spawn tag!

X	Input system keeps keys held on overflow?
X		Test ResetInput. These seem to be weapon bugs.
X	3dfx backfaced masked polys like skaarj dreads are backface rejected. -> Mesh not set up for masking.
X	Way to make a moving brush into a zone?
X	Properly interleave timers with animation and movement?

///////////////////////////////////////////////////////////////////
6-15-97

====0.867t
+	Fixed bug in probes - probe functions aren't reenabled properly when you are in a
+		state but the probe function is global.
+	Added cool new triggerable light class!
+	Actor InterpolateEnd.
+	Should be able to duplicate moving brushes.
+	Slave movers.
X	MouseLook with triggerpaths.
+	NF_TagForEmpty change.
+	Encroaching problems? Test3.
X	Little animation interpolation problems with weapon - James noweeninto?

+	Fix moving brush sounds.
+	UnrealEd scrolls line out of view.

====0.867u
+	Fixed windows asynchronous keyboard input problem! Controls are much better!
+	GetKeyboardState

====0.867v
+	3dfx status bar died.
+	Everyone's maps.

///////////////////////////////////////////////////////////////////
6-16-97

====0.867w
+	Fixed moving brush ambient moving sound not stopping.
+	REND CURVY toggles curved surface rendering.

====0.867x
+	3dfx texture panning.
+	Improved software-rendering mipmap smoothing.
+	Augh.unr - lighting bug with invisible collision brushes.
+	Light <-> Convex volume association via portal clipping.

+	In 3dfx fullscreen when you press the stupid windows key you lose control.
+	Spline pathing.

///////////////////////////////////////////////////////////////////
6-17-97

====0.867y
+	Quick optimizations.
+	FindSpot = slooow!
+	FCollisionHash::PointCheck was ignoring bActors.
+	Hash objs by name & type.
+	Added "SERVER RESTART" command.
+	Bind.mac defaults.
+	Caps lock toggles mouse look.

+	bRestartLevel
+	ObjectHashOf

+	Actor spawning slowness?
+	Fixed MergeNearPoints error.

====0.867z
+	Slap on the hud.

====0.868a
	Leaf-reject based on radius.
	Reflective marble floors?

	Leaf lights.
	Sky. 2 parallaxing backdrop textures.
		Handle light extent.
		Handle volumetric extent.
	Truecolor creature lighting - diffuse and phong attenuated by brightness.

	UObject::Kill problems on exit.
	Subtle light pulse option: LT_SubtlePulse.
	Brushes weirdly rotate back to starting position when they encroach.

	Restart-the-level option!
	3dfx dynamic lighting optimization?

	Triggerable ambient sounds.
	Ole auto error still happens in VB with autosave. Nice and isolated now, though!

	Moving down into trigger on moving brush
	Wavy use fake sinus-panning on 3d hardware.

	FarMoveActor must separate the standing actors from its base,
		and separate the current actor from its base.
	When encroach, attempt to move out. Or, multiaxis rotation with standing actors 
		needs to handle the actor box size when rotating?
	Set bIsPlayer is set at spawn time when spawning a camera actor.

	Status bar code.
	Add mesh interpolation toggle.

	Windows.
		bFire held when mouse firing?
		DirectSound focus bug? Augh!
		D3D needs work.
		Snapback to level.
		Key to snap back to level.

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

// Next actor in status bar.
var StatusInfo Next;

// The actor who is responsible for updating this StatusInfo.
var actor Controller;

// Textures.
var(Textures) texture Textures[16];
var() float TexStartX [16], TexEndX[16];
var() float TexStartY [16], TexEndY[16];

// Fonts to draw on top. Menu items are first.
var() font       Fonts[12];
var() string[40] FontText[12];
var() float      FontStartX[12], FontEndX[12];
var() float      FontStartY[12], FontEndY[12];

// Information.
var() enum EStatusPosition
{
	SPOS_TopLeft,
	SPOS_TopRight,
	SPOS_BottomLeft,
	SPOS_BottomRight,
	SPOS_StretchTop,
	SPOS_StretchBottom,
	SPOS_StretchLeft,
	SPOS_StretchRight,
} StatusPosition;
var() int  Priority;         // Priority, 0=least important, 3=most important.
var() float StackSeparation; // Separation when stacking items.
var() int MenuDefault;       // Default menu item number.
var() int MenuMax;           // Maximum items in menu.
var() int ScaleHeight;       // Local scaling.
var() int ScaleWidth;        // Local scaling.

// Status.
var int  MenuCurrent;        // Current menu item.
var bool bInputFocus;        // Has input focus.
var bool bMustRedraw;        // Must recompose the texture.
var bool bVisible;           // Whether to draw this.
var bool bTransparent;       // Whether it's transparent.

// Regenerate the status bar.
function Regenerate();

	Status bar issues:
		Background textures in status bar.
		Status bar expanding/contracting.
		Fonts.
		Opacity.
		Pawn possess must create / destroy StatusBar.
		Handle menus automatically as part of StatusBar.
		Bind up, down, enter to keys for menus?
		How to handle multiple views w/ different resolutions in netgames?
			Menu & status bar data must be rez 1ndepedent.
		Inventory thumbnails.
		Active weapon ammo
		Armor

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

	Teleporting.
	Hub transitions.

	When you have a brush I should use bCollideWorld instead of bCollideActors and
		use Bump instead of Touch. Test with RazorJack.

	3dfx light brightnesses.

	UPrimitive GetRenderBoundingBox handle sprites?
	Do brush visibility and conditional updating with sprite code! Then moving them
		will be essentially free!

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

	0.868 import notes:
		When importing from 0.84:
			See 0.864v import notes.
		When importing from 0.864:
			DrawScale= to Ignore=

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

	ForEach TraceActors should check for zone transitions! Yeah!
	ULevel::LineCheck needs zone accumulation option.
	Need UnrealScript PointCheck function to classify point & zone.
	ULevel::PointCheck needs list option.

	UMesh::LineCheck.

	Killing a dynamic light in gameplay doesn't cleanup its stuff.
	Killing any light in UnrealEd doesn't clean up its stuff.

	Player walk out of slime/lava leave green dynamic light trails.
	DE: Detail textures.

	Way of doing PlayAnim and tweening into a running sequence.

	UnrealEd.
		ResType 'ResTypeName' so I can merge Brush, Mesh, Model & Cylinder into Primitive.

	Jitter problem when using both keyboard and mouse.

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

	E3: 19th - 21st: Maybe:
		Proper actor lighting.
		Fog.
		Ground fog.
		Volumetric lighting.
		Actor shadows.
		Dynamic light shadows.
		Terrain.
		Inverse texture mapper for realtime dynamic light shadows and precomputed radiosity!

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

	Pulse type light effect that goes entire range.
	Bools to disable c&s player controls and rotation.
	Negative lights!

	Ability to tag creature polygons with DWORD PolyFlags, use frmPolyFlags.
		Unlit
		No curve
		Enviro mapped
		Tag name like 'Head' etc.
		class FSurfaceInfo
		{
			UTexture	*Texture;	// Texture map.
			UPrimitive	*Source;	// From whence it came.
			AActor		*Owner;		// Actor owning it.
			FName		Group;		// Group.
			FName		Item;		// Item.
			DWORD		PolyFlags;  // Polygon flags.
		};

	Pancho's texture bug with nontiling textures.

	When importing .u's, report resource related error messages more usefully.
	It would be nice if resource loading failures during loading scripts appeared 
	in the script compilation window (so errors are more evident)  

	Delete classes: Make sure there are no references.
	Delete texture set: Make sure there are no references.

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

	Load/import class creates invalid junk in class browser.
	SaveClass slow-task.
	Compile/make slow-task? Eliminate results window?

	More generalized way of keeping stuff around by its ULinkers.

	Open map
	Add file to map...
		Texture set (.utx)
		Sound set   (.uax)
		Class set   (.ucx)
		Music set   (.umx)
	Dependencies...
		Unreal.ucx
		Unreal.gfx
		Unreal.tab
		...Texture sets
		...Sound sets

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

	3dfx.
		Set up textures so DE can start experimenting with detail textures!
		What's wrong with DepthBufferEnable?
		3dfx volumetric lighting and ground fog.
		Ping pong z buffer to eliminate the need for z clear?
		Brightness/gamma setting.
		Three-clip the textures for better detail clamping?
		Generalize colored lighting code to support merge fx.

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

//
// Information about an object stored in (or imported by) this ULinker's
// UnrealFile.
//
class FStoredObject
{
	// Variables.
	UObject* Object;		   // Object in memory, NULL if not mapped into memory.
	FName    ObjectName;	   // Name of object.
	FName    ClassName;        // Name of object's class.
	ULinker* ImportFrom;       // Linker to import it from, NULL = this one.
	DWORD    FileHeaderOffset; // Where this resides in this file, 0=imported.
	DWORD    FileHeaderSize;   // File header size (for debugging only).
	DWORD    Flags;            // Object flags.

	// Constructors.
	FStoredObject( UObject* InObject, DWORD InFlags, ULinker *InImportLinker )
	:	Object				(InObject)
	,	ObjectName			(InObject->GetFName())
	,	ObjectName			(InObject->GetClass()->GetFName())
	,	ImportFrom			(InImportLinker)
	,	FileHeaderOffset	(0)
	,	FileHeaderSize		(0)
	,	Flags				(InFlags)
	{}
	FStoredObject( UObject* InObject, DWORD InFlags, DWORD InFileHeaderOffset, DWORD InFileHeaderSize )
	:	Object				(InObject)
	,	ObjectName			(InObject->GetFName())
	,	ObjectName			(InObject->GetClass()->GetFName())
	,	ImportFrom			(NULL)
	,	FileHeaderOffset	(InFileHeaderOffset)
	,	FileHeaderSize		(InFileHeaderSize)
	,	Flags				(InFlags)
	{}
};

	// Save: convert ImportFrom linker.
	// Load: Must be able to gracefully handle failing due to not locating the
	//       proper imports.

	ConstructLinkerFor(file):
		Construct linker object.
		Load summary.
		For each import in summary.
			If file is a dll.
				Verify that dll is found.
			ElseIf linker doesn't already exist for file.
				ConstructLinker(imported file).
		Load names.
		Build FStoredObject table.
		If any ConstructLinker files, clean up gracefully - loading a file must
			be able to fail cleanly if imports aren't ok.

	Loadfile(file):
		ConstructLinkerFor(file).
			If failed, skip gracefully.
		Check that all objects in the file are properly imported.
			If failed, skip gracefully.
		LoadAllObjects(file).

	Save in absolutely no specific order: loading is responsible for
		sequencing things properly.

	UnrealFiles.
		Update file tag.
		App tag separate from file version.
		Package tag?
		Dependencies: Fully variable length, specify *location*.
		Allow data areas of items to be expanded for forward compatibility via general functions.
		File store minver, maxver for forward compatibility where applicable.

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

	Scripts & intrinsics.
		Set reverb & force parms when start, change zone, possess.
		When change zones void ReverbParamsSet(INT Space, INT Depth);

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

	New status bar rendering code.

	UnrealEd
		Work out all actor naming issues, ability to rename individual actors in UnrealEd.
		Before save-for-play, perform root make and validation step.
		Save map files relative to the specified dependencies.

119-127, 196 234 235 236 237 238 239 240 241, 316+
//////////////////////////////////////////////////////////////////////////////

		FireEngine texture support and texture hierarchies including bump maps.

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

Unreal engine manifesto
	UnrealScript language reference
		Overview
			Java style simplicity, object orientation, and compile-time error checking
			Rich, Safe, High-level, slow
			Pointerless
			Object oriented
			Time based execution
			State scoping
		Example program structure
			General style (Java/C like, braces, semicolons)
		The class declaration
			Explain inheretance
			Class specifiers
		Variables
			Base types
			Arrays
			Objects and actors
			Initializing variables
			Specifiers
			Editable variables
			Enumerations
			Regular, local, and static variables
		Functions
			Local variables
			Return value
			Specifiers
			Virtual functions vs. Final functions
		States
			Concept
			Explain latent execution of code
			Explain state scoping and overriding of functions, labels
			Auto
			Ignores
			Inheretance
			Editable states
		Constants
			Regular constants
			String constants
			Vector, Rotation constants
			Object/Actor constants, None
			Name constants, NoName
			Self
			SizeOf, EnumCount, ArrayCount
		Expressions
			Assignment
			Operators
				Regular operators
				Advanced operators
				Precedence
			Accessing objects and actors
				The . operator, explanation of null context handling
				Vector, rotation . operator
			Conversions
				Automatic promotion/demotion
				Actor casts
				Vector, rotation casts
			Function calling
				Explain state and class scoping
				CallParent, CallGlobal, CallClass
				Broadcast
		Iterators
			ForEach
		Flow control
			For, Do, While, Until, Break
			If, Else If, Else
			Select, Case, Default, Break
			Labels and goto
			ForEach and iterators
		UnrealEd macro stream
	Intrinsic functions
		State
			GotoState, Goto
			Explain probes, Disable, Enable
		Logging and debugging
			Logging
			Assert
		Object related
		Actor related
			Spawn
			Destroy, describe latency issues
		String
			Explain concatenation
		Physics
		AI
	Technical overview
		Garbage collected
		Virtual machine interpretter
		Two-pass
	Interfacing with C++ code
		Creating intrinsic classes, generating root.h
		Calling C++ from UnrealScript: creating intrinsic functions
		Calling UnrealScript from C++
		Plugin DLL's
	Unreal classes
		Object
			Database
		Actor
			bStatic meaning
			Each major property category
		Pawn

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

	Compiler speed is limited by property and UClass lookups! Duh!
		Could include 16*2 property hash entries in class for 16x faster prop lookup.
		Can hash resources by name/type.
	Saving actors - Save properties as tagged deltas, so that actors can easily be
		auto-upgraded in a typesafe way.

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

		SpawnActor.
			Perform initial touch testing.
			Refuse to spawn if blocked.

		execCollideActorsSet
			Perform initial Touch, or UnTouch.
			Refuse if blocked.

		execSetCollisionSize
			Perform Touch, UnTouch, succeed/fail.

		UnrealScript CollisionTrace function.

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

	Actors can either be owned by other actors or by Level (None is not an option?)
	Then unowned actors would be in line for deletion.

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

	Need simply animated textures (tex-00, text-01, etc).
	UnrealEd def props - modify all actors if they are using default.

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

	Terrastuff
		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.

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

	Safe recompiles.
		After a compile, must postload and reimport the actorlist to refresh the 
			bin pointers or only do this at runtime and let UClass have its own 
			bin struct? Ugh. Maybe just need a RemapBin function to remap 
			properties from one class to another by name. Could keep the original
			classes around (and rename after compile).

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

	UnrealEd later.
		Brush list merged into actor list.
		Actors can be 'Locked' like brushes when map edit mode is off.
		Cut and paste actors + brushes.
		Easy grouping and auto zoning.
		Support dragging cameras around like any other actors.

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

	Thing that still suck in Unreal:
		Global name scoping of all resources -> name scoping should be hierarchical, names optional.
		Separation of the actor list and brush list -> Can merge them with a little work.
		Terribly slow moving brush code -> Can fix with rendering rewrite.
		Lack of grouping in UnrealEd -> Can add grouping pretty trivially.
		Lack of 2d ops in UnrealEd -> Can add with 2-3 weeks of work.
		Switch() approach to class properties -> Implement UType and UnrealScript struct command.
		Unstructured editor modes, lack of mouse-movement feedback in the editing windows.

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

Also, I noticed that the 'autosave' feature pops up when Unrealed is out of
focus. Autosave is soo annoying at the moment, that I mostly disable it
from the start... 

Tex brws can't handle long filenames with spaces. They import ok but you can't select them.

Tex brws "out of vm" bug - due to create dib section?

2.  You should change the about box before the show.  It still has the
old about box which says it will be published by EA  (I doubt GT
Interactive will like that)

Don't allow creating actor classes w/ spaces in names.

24-bit color crashes.
Mesh viewer rotate.

Show sound radii in radii view

When adding portals, use no texture.
Alt-Tab DirectDraw maximization problem.

MergeNearPoints problem?
