Unreal Engine 1

Where can I find the latest source code? Can you direct me to the link. thanks!

Create an account on https://www.unrealengine.com, link it with your GitHub account, and you can download the latest UE4 source code from https://github.com/EpicGames/UnrealEngine.

Uff…this Post is about UE1 source no about UE4…

Ilustration about latest version UE1 ver.533 is demo Mobile Forces developed by Rage Software. (Has static meshes and firs code for projector). MF has D3Ddriver DX8, because MF was release in 2002. Original ver. 533 was with D3DDriver 7. D3DDriver 8 MF include error … detail texture works incorrect…:frowning:

In Render in UnLight in Ut version was description:

Description:
Computes all point lighting information and builds surface light meshes
based on light actors and shadow maps.

Definitions:
attenuation:
The amount by which light diminishes as it travells from a point source
outward through space. Physically correct attenuation is propertional to
1/(distance*distance), but for speed, Unreal uses a lookup table
approximation where all light ceases after a light’s predefined radius.
diffuse lighting:
Viewpoint-invariant lighting on a surface that is the result of a light’s
brightness and a surface texture’s diffuse lighting coefficient.
dynamic light:
A light that does not move, but has special effects.
illumination map:
A 2D array of floating point or MMX Red-Green-Blue-Unused values which
represent the illumination that a light applies to a surface. An illumination
map is the result of combining a light’s spatial effects, attenuation,
incidence factors, and shadow map.
incidence:
The angle at which a ray of light hits a point on a surface. Resulting brightness
is directly proportional to incidence.
light:
Any actor whose LightType member has a value other than LT_None.
meshel:
A mesh element; a single point in the rectangular NxM mesh containing lighting or
shadowing values.
moving light:
A light that moves. Moving lights do not cast shadows.
radiosity:
The process of determining the surface lighting resulting from
propagation of light through an environment, accounting for interreflection
as well as direct light propagation. Radiosity is a computationally
expensive preprocessing step but generates physically correct lighting.
raytracing:
The process of tracing rays through a level between lights and map lattice points
to precalculate shadow maps, which are later filtered to provide smoothing.
Raytracing generates cool looking though physically unrealistic lighting.
resultant map:
The final 2D array of floating point or MMX values which represent the total
illumination resulting from all of the lights (and hence illumination maps)
which apply to a surface.
shadow map:
A 2D array of floating point values which represent the amount of shadow
occlusion between a light and a map lattice point, from 0.0 (fully occluded)
to 1.0 (fully visible).
shadow hypervolume:
The six-dimensional hypervolume of space which is not affected by a volume
lightsource.
shadow volume:
The volume of space which is not affected by a point lightsource. The inverse of light
volume.
shadow z-buffer:
A 2D z-buffer representing a perspective projection depth view of the world from a
lightsource. Often used in dynamic shadowing computations.
spatial lighting effect:
A lighting effect that is a function of a location in space, usually relative to
a light’s location.
specular lighting:
Viewpoint-varient lighting on a shiny surface that is the result of a
light’s brightness and a surface texture’s specular lighting
coefficient.
static illumination map:
An illumination map that represents the total of all static light illumination
maps that apply to a surface. Static illumination maps do not change in time
and thus they can be cached.
static light:
A light that is constantly on, does not move, and has no special effects.
surface map:
Any 2D map that applies to a surface, such as a shadow map or illumination
map. Surface maps are always aligned to the surface’s U and V texture
coordinates and are bilinear filtered across the extent of the surface.
volumetric lighting:
Lighting that is visible as a result of light interacting with a volume in
space due to an interacting media such as fog. Volumetric lighting is view
variant and cannot be associated with a particular surface.

Design notes:

  • Uses a multi-tiered system for generating the resultant map for a surface,
    where all known constant intermediate and resulting meshes that may be needed
    in the future are cached, and all known variable intermediate and resulting
    meshes are allocated temporarily.

Notes:
No radiosity.
No dynamic shadows.
No shadow hypervolumes.
No shadow volumes.
No shadow z-buffers.

Interesting
I wonder how this would be implemented without shader DX8,9.
As it thought the author in 1999…?

I look forward to coming out Unreal 1 source and when users will be think about this futures…

17…:)…:slight_smile:

Would it be possible for the community to have a go at it ? I think that would be really fun job to update it.

Interesting history information about unreal engine 1 released to the public.

/*-----------------------------------------------------------------------------

-----------------------------------------------------------------------------*/

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.”
– 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. –

“Even the strongest of men are crushed like bugs under the feet of time” – Tran

“Unreal is super cool” –

“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.”
– 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

:
	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  *Stream); // Assumes StartY,EndY already set
			FSpanBuffer::EncodeTo( *Stream);
			dword: num bytes comprising decompressed span buffer
			word: num empty spans
			word: num nonempty spans
			7- 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 ).
	Weird  idea.
		LevelInfo could spawn  actors as TCP connections are started/ended on a port.
		Slow  to  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,  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,  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,  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 nm method could be accelerated by following the nm 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
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 :slight_smile:
•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 :slight_smile:
•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 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 :slight_smile:
  • 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? () 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 ****.

====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, *&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-&gt;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 - ?

  • 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!  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. really..it is released on E3? If not, it is biggest failing Unreal.  
	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-&gt;GetFName())
,	ObjectName			(InObject-&gt;GetClass()-&gt;GetFName())
,	ImportFrom			(InImportLinker)
,	FileHeaderOffset	(0)
,	FileHeaderSize		(0)
,	Flags				(InFlags)
{}
FStoredObject( UObject* InObject, DWORD InFlags, DWORD InFileHeaderOffset, DWORD InFileHeaderSize )
:	Object				(InObject)
,	ObjectName			(InObject-&gt;GetFName())
,	ObjectName			(InObject-&gt;GetClass()-&gt;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?)
 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 -&gt; name scoping should be hierarchical, names optional.
	Separation of the actor list and brush list -&gt; Can merge them with a little work.
	Terribly slow moving brush code -&gt; Can fix with rendering rewrite.
	Lack of grouping in UnrealEd -&gt; Can add grouping pretty trivially.
	Lack of 2d ops in UnrealEd -&gt; Can add with 2-3 weeks of work.
	Switch() approach to class properties -&gt; 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?

  1. 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?

I always wondered what F prefix for non-UObject classes means in the Unreal Engine?

What is meant a clean source?

For only clean…no rewriting code I could try help a clean source of release. It would be an honor for me.

I think is probably a lot of people who would like to help Epic with UE1 source.
It is the big unknown. What does UE1 mean for Tim? Source will want to go alone. Or cleanup enters someone else and he will work on UE5…:slight_smile:

Remember dynamic shadow on Riva TNT from Creative:
http://www.celticwarriors.net/Website/Mirrors/Epic%20S3TC%20Pressrelease/Unreal%20-%20Press%20Releases.htm

This is the future of computer gaming realism and it will be available to Unreal Engine licensees. Never not realized in UE1,UE2… Shadows was in UE3, why so late?

Interesting is accordance:

Creative have licensed the Unreal Engine from us and have been doing some research in the area of both sound and graphics. They’ve already implemented a fantastic real-time creature shadowing technique using the Riva TNT’s stencil-buffer capabilities.

's Reverse refers to a stencil buffer implementation of shadow volumes, which became a technique to become widely popular among video games following the 2004 release of Doom 3. Around 1999, a patent was filed that covers a “Method for rendering shadows using a shadow volume and a stencil buffer” and was issued by the USPTO in 2002. had independently conceived a similar algorithm to what’s covered by the patent, which he created in the year 2000 while working on Doom 3. The patent in question is owned by Creative Labs.

Real-time shadowing by Crative wasnt used due to patent or rejection by Creative? or is it just a agreement fortuity?

You could just release it As-is. The Fans could fix it?

Slowly approaching the end of the year. There will be a moment of free time over Christmas. What to look at the source Unreal 1.
It is now download and edit an unofficial source ver. 400. It will be a problem when will be release this unofficial version Unreal engine the game? 17 years is a long wait.
I think it’s time to move forward.

I am interested to grab Unreal 1 source. :slight_smile:

I’m interested to have the 436 source release @Tim

Can someone explain to me why everyone wants to work into Unreal Engine 1’s source? I can understand it if it’s just a nostalgia and experimental thing, but (please, I am a mere peasant in this subject) how would it contribute to your modern work? I’m asking this out of curiosity and don’t mean to offend or be rude.

Didn’t realize I had a double post going on.

Well, why not, I know a couple of peoples who are interested to expand UT99 engine to work with the latest technology to keep the game alive but also more than just that, to offer more variety of things to do in the game than what we can currently do. Even anti-cheat will have plenty of workaround, updated network technology (faster download are good, we may already have one from Higor’s creation but what can be more there to improve?), and to improve other areas of the game which can use attention on such as graphic (Couple of peoples out there are a sucker for it, so why not let it work with the additional options in the newer machines?) for gameplay and weapons. There can be a whole lot more information to comply but I just posted a short info.

So nostalgic.

O yeah it would be great… what if instead of

Epic let that work to the community? xD… and maybe the community maybe some day can do it xD.

What about UE2 / UT99??

I was enjoying games like Unreal Gold,Unreal Tournament(older series),