Gah - a solution with more questions. – EntropicLqd

Legacy:Mod Ideas/U-Replay

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search
Mod ideas for UT 2003 – U-Replay

Description[edit]

by Flashman

This is a rather big idea, and if successful could make its way into the big LANs - its primary target. The Idea is this: UT Demo files (and I'm assuming UT2k3 ones too) store information about the game that took place. This information must (Although I must admit my research in this area is poor at best) contain a minimum amount of data such as Player model/skin, player position, current weapon, position of things like projectiles and status of triggers/movers.

I beleive this data could be used in an external 3D application such as 3D Studio MAX to position higher poly models, and have high poly versions of the main maps too, to facilitate the creation of high detail animations of the recorded game. This could be rendered with any camera angle you want, using high-quality materials and effects the likes of which aren't possible with todays (Or even tomorrows) 3D cards. Think phong shading, bump maps on everything, raytraced reflection & refraction... all effects would be customisable before the render, as the scene could be saved first and edited in the chosen 3D package.

Another feature I have in mind is on the inital read of the demo file, the U-Replay engine reads ahead in the list of actions for a player, and determines if they are slowing down, speeding up or jumping etc, and builds up to it accordingly, i.e. preparing to spring when jumping from a crouched position.

The code would need to be something like a bit of MAX Script, a plugin or external executable that references a set of resources:

IK linked models for the players
.max scenes for the Levels
Meshes for the weapons

This could be used to show highlights of Tournaments and matches or just for fun. It could also be used in the creation of cutscene movies for mod-makers.

This idea is admittedly an incredibly complex solution to get a nice idea but could have a lot of promise given a big enough development team and enough interest from the community.

Just picture a big silver-screen at the next LAN you go to, with your game playing for all to see in cinema-quality video! ;)

Interested Scripters[edit]

If you are interested in developing this mod for UT2003 then add your name to the list. Once you start development you should indicate that below (and hopefully include a link to a journal page). Before you start development you should also check this section to see if anyone else has started.

Discussion[edit]

Zedsquared: Nice idea but IIRC the demo data is basically a recording of the network data sent out to clients and really needs an unreal engine to decode it properly. It's not a frame by frame storage of what was where but a stream of function calls and variable values that the game plays back by pretending it all came from a server. Many actors will just be spawned and then do their own thing ( like flying off across the map if they are projectiles ) without any further data about them appearing in the recorded stream. So what you really need here is a way to spit out all that sort of data into some sort of huge log file which then gets post processed, the easiest way would be to recompile actor and put a bunch of log statements in tick (for position, animation state, etc) then playback with gametime slowed... Trouble is actor is a native class so again you need to be able to recompile the engine... so not one for mere mortal mod coders, unless anyone knows otherwise :-)

Flashman: I would have thought that all was involved would be taking those function calls and using the rules passed to it to create a keyframe in your MAX animation, because every time something changes state or direction etc the engine will need notification, so it would be a case of creating some form of parser that could interpret the information the same way as unreal does, but instead storing keyframes on your high-q objects? Besides, no 3D animation package needs a value for where an object is EVERY frame, just when it's expected to chenge the rules, just the same as the data passed from a server in UT

Mychaeel: Unreal's demo playback mechanism heavily relies on the actors' script code (as Zedsquared said already), so building a stand-alone Unreal demo playback application would basically mean that you'd have to recreate most of the game content from scratch. Some UT2003 actors perform rather complex actions on their own.

Githianki: With the exception of a lot of the high quality features you mention (bump mapping, phong, etc.) you could do what you are describing but in a far easier way. Simply set up everything in UT2003! What you'd need is to create a duplicate set using the hi-res stuff. If you were willing to sacrifice on the accuracy of the dynamic stuff, you could simply instruct the engine to render complete frames at whatever rate it takes and store the frame buffer results for compilation into a video. The engine could theoretically handle huge files (texture and models) just not at playable rates. If you could code a mod that made sure each frame was rendered complete you'd be set (it might only take vsync on to do this). Of course you'd need to do the buffer capture too but I think there are programs for this. The engine doesn't do some functions and you'd still need a low quality version to set up your previews. When they were set you'd copy your triggers, etc. over into your hi-res version check all the names to match the hires assests and let it go. Not sure what you'd gain other than you might find working with Unreal much easier than MAX. The things you could do are hire res meshes, textures and animations. A big issue though might be memory since I don't know how well the engine would actually accomodate huge file sizes. If the engine is to last 5 years then by the time you have all your high quality assests ready to go, the engine might support some of the rendering features that you mention. Update: check out this link Capturing Unreal Video

Flashman: I like what you're saying but the one prob with this would be, once you've made a high-res version of a level, high poly meshes etc, how do you then get the demo file to run properly? My impression is that getting a demo file from, say Curse ]|[, to run on UberHighDetail_Curse]|[ would be impossible. Anyone out there know otherwise?

The other things not in UT2003 that would look cool in a Max-Cine quality render would be:

  • Proper transparency, with index of refraction etc.
  • Fur, hair, Cloth simulation. (Although require appropriate plugins)
  • Procedural Textures... more when I get back :D

DJPaul: This might be doable if someone has a Unreal Engine license; and I doubt any of the people who'd look at this page (myself included) has a spare Unreal Engine license sitting around... ;)

Foxpaw: I think this is possible, though it would probrably involve a lot of work on the importing into max part. It is not only possible, but somewhat feasable if you had a beefy computer to do the grunt work. Here's how it could work:

  1. Play game while recording demo. You will have to have a special mutator loaded, but it won't do anything normally.
  2. Replay the recorded demo. Trigger the mutator which previously wasn't doing anything through the use of the Mutate function. The mutator then begins calling DynamicActors (or maybe AllActors, but I think DynamicActors would catch everything) every tick, and spewing a boatload of information into an internal data store. (Dynamic array, linked list, whichever you prefer) This data store contains the actors "state," whatever info you feel is appropriate. I'm not sure what would happen if you altered the game speed with the mutator... slowing down the game's playback (not just slowing the framerate, but slowing the actual playback) would be good because then the resources being used for the mutator's dumping wouldn't cause as much havok with the playback.
  3. Use a second keyword in the Mutate function to cease information dumping. Information is then saved to the hard disk using either log statements or the handy-dandy... well, okay, I didn't name it, but the system I use for storing ship designs for my mod is capable of storing an arbitrary amount of information onto the hard drive, in pretty much whatever format you want.
  4. Read that information into MAX somehow. I'm not sure how you'd do that but I'm sure it can be done.

This is similar to the idea of recompiling actor, but it works external of actor so it wouldn't require you to recompile the actor class. Note that number 2 will cause some minor slowdown. Number 3 will cause the computer to "freeze," but the harddrive will still be grinding away. You could maybe sacrifice resolution and use a capture rate lower than every tick.. that would save lots of time on the exporting/importing.