So as some of you are probably aware I was given access to work on UE1 by Epic, so here's a mouthful of updates to come:
Editor: Quote:- Added to editor texture browser a right click option to compress/decompress textures and to add/remove mipmaps.
- Fixed StaticMesh simple collision model creator properly handle correctly different coordinate spaces between the mesh and builder brush.
- Made LevelInfo.TimeSeconds never save from editor to avoid unneccessary space wasted.
- Fixed editor to reset Runaway loop counter every frame so it wont eventually always fail to run UScript code in Editor.
- Fixed editor to properly handle certain Canvas functions in render callbacks (i.e: WorldToScreen, DrawBox).
- Improved add actor ontop of a mesh actor tool.
- Improved visuals for editor path network render
- Added right click option for builder brush to transform current shape into a dynamic zone (and added brush shape as an option for dynamic zone shape).
- Made ed mesh browser 'show bones' tool also draw bounding sphere and bounds for vertex meshes. Made 'show bone names' tool show vertex numbers for vert meshes (to help mod devs find vert indices).
Engine: Quote:- Added base IPv6 support.
- Added multi-threading support for memory allocator and log writer.
- Fixed a memory leak when accessing destroyed actors string values.
- Heavily improved skeletal mesh functions (and added option to specify transformation spaces with bone modifier functions). Also including support to use multiple animation sets per actor.
UnrealScript: Quote:- Added support for 'skip' parameters to regular native functions (not just operators second parameter).
- Made "replace to" parm in "ReplaceStr" skippable, meaning it wont get evaluated if there are no replacements found.
- Fixed ternary operators (<condition> ? <value if true> : <value if false>) to support l-values (and fixed a compiler bug with them).
- Added "typecast" compiler keyword (can be used to hard cast any value to any type), for example: int i = typecast<int>(Class) will grab pointer value of 'Class'. Using this feture is compatible with any Unreal version.
- Added struct constructor function: plane p = construct<plane>(2,0,1,0) or plane p = construct<plane>(X=2,Z=1) (both methods works), which is faster then manually assigning each struct value in script but slower then using vect or rot constants.
- Fixed FindObject so that if searched object contains a dot in the name, it will seek for it as a full object name instead of any object with matching name.
- Added Actor.FindSpot native function that seeks for empty space for a box extent space (same way as bCollideWhenPlacing works).
- Improved Engine FindSpot to find free spot better and more efficiently.
- Fixed PointCheck to only check at blocking actors.
- Added Actor.bNetInitialRotation to make server network Actor rotation along with initial spawn information.
- Added function Actor.OnDrawActor to be called if bCustomDrawActor is true.
- Added function Actor.ReplicationEnded to notify when a bNoDelete actor channel has been closed (Actor.PostNetBeginPlay will be called when re-opened again).
- Fixed Actor.PostNetBeginPlay not getting called on bStatic or bNoDelete actors.
- Changed 'if' conditions to compile as coerce parms to easily allow cast them into bool comparisions.
- Changed bool operators to also take coerce parameters.
- Fixed a compiler bug where when it would compile a sub expression it would automatically truncate float into int, as example: int i = (1.f/10.f)*100.f would compile as int(int(1.f/10.f)*100.f), thus resulting in value 0.
- Fixed ConsoleCommands to properly handle multi-parameter exec functions, if using multiple string parameters then they will be split by spaces, unless they are enclosed with quotation marks or apostrophes.
- Made return value from exec function return to ConsoleCommand output.
- Made if first parameter of exec function is "PlayerPawn Caller", then that will be set to the PlayerPawn executing the command (or None if ran on any other Actor).
- Made ExecFunctionStr work same way as ConsoleCommand with parameters.
- Added functions to LevelInfo: static native final function PlayerPawn GetLocalPlayerPawn() / static native final function LevelInfo GetLevelInfo() - To easily find active PlayerPawn and Level in the game.
- Added variables to LevelInfo: RealTimeSeconds (actual TimeSeconds unmodified by TimeDilation), NetTimeSeconds (network synced between server and client TimeSeconds, only for 227j clients and when LevelInfo.bNetworkTimeSeconds is true), LastDeltaTime (current frame DeltaTime), LastRealDeltaTime (current frame DeltaTime unmodified by TimeDilation).
- Added Actor.bTickRealTime to allow Actor tick by real DeltaTime unmodified by TimeDilation.
- Fixed Texture trace to support trace with collision extent.
- Added function Pawn.WalkTextureChange which is called if LevelInfo.bCheckWalkSurfaces is true.
- Removed redundant functions Actor.SpawnAct and Actor.NativeExec.
- Added parms to Actor.Spawn: SpawnInstigator/SpawnTemplate/bNoCollisionFail from prevous SpawnAct function.
- Added new parm to Actor.SetTimer: CallbackObject: To call the timer function on any external object.
- Made defaultproperties importer detect if same variable is imported multiple times (and throw compiler warnings).
- Added feature to allow defaultproperties with numeric values contain math evaluations in them, ex: Health=Nali.Health*2 or SomeFlag=(1 << 3)
- Added support for simple preprocessed maths in script code (encompassed with {}), as example: Health+={Nali.Health/2}, which will compile as Health+=20;
- Changed GameRules.ModifyThreat to take third parm as enum instead of byte.
- Added Actor.RenderPass to set manual render order.
- Made ScriptCompiler avoid saving references to super function unless you explicitly call Super in your code.
- Added a new parm to Canvas.SetTile3DOffset, bWorldOffset, to allow easily draw canvas stuff anywhere in world space.
- Added variables Canvas.Mirror (to detect if current draw is inside mirror reflection) and Canvas.Recursion (to detect portal depth of current canvas call).
- Added new parm to Canvas.DrawTile, vector WorldPosition, to make it draw the tile as a sprite in level.
Optimizations: Quote:- Optimized Real crouching code.
- Optimized serverside networking code.
- Made vectors better compressed over network between 227j+ clients only.
- Made all meshes animations lookup use a mapped hash value instead of an array lookup for a huge performance boost in animation lookup code.
- Made Actor shadows use multi-threading for rendering it.
- Optimized and improved dynamic zones.
- Added a projector feature (Projector.bBuildStaticMap) to make it generate pre-rendered model for BSP and bStatic StaticMeshes for a huge performance boost with MapProjectors.
New in-game features: Quote:- Added flag to level info for SupportsCrouchJumping, which will enable crouch-jumping.
- Added FAKELAG <ping> consolecommand for server to fabricate lag (for debugging).
- Made HTTP downloading clients notify server of their download progress (for UnrealScript to catch serverside).
- Fixed LevelInfo.bCheckWalkSurfaces to work. It will make Texture.Friction scale Pawns walking friction (if you use Friction 10, it will function as a ladder texture, similar to Half-Life).
Bug fixes: Quote:- Fixed server to remember what variables has been networked when a bNoDelete actor becomes network irrelevant and then relevant again.
- Fixed a security flaw with networking which clients could abuse to leak memory on server.
- Fixed a division by zero error with BigRock.
- Improved stability with decals and projectors on save/load games.
- Fixed a bug with TcpLink and UdpLink which would make it shut down socket twice upon destroy (thus throwing a windows warning).
- Fixed SunlightCoronas from shining through static meshes (and optimized it).
- Fixed weather emitter particles to also hit static meshes.