Badge time.png   The Paragon Wiki Archive documents the state of City of Heroes/Villains as it existed on December 1, 2012.

Difference between revisions of "User:Scuzzbopper/Demo Editing"

From Paragon Wiki Archive
Jump to: navigation, search
(Map)
m (Replacing page with 'Moved Live: Demo Editing Genuinely just for notes now.')
 
(62 intermediate revisions by the same user not shown)
Line 1: Line 1:
Pulling together some [[Demo Editing]] notes here.
+
Moved Live:  [[Demo Editing]]
  
== Overview ==
+
Genuinely just for notes now.
 
+
'''Demo Editing''' is a term used to describe the modifying of a CoH demo file.  Typically, the modified demo file is then used to produce user-generated screenshots or movies (machinima) of events and situations which did not actually take place during live game play.  A recorded demo is saved as text file, rather than a standard video file, containing all the commands required to instruct the game engine how to play back the recorded demo.  All of this information can edited, changed, deleted, or added to (or even created from scratch); requiring, at its simplest, only a text editor and a reasonable understanding of the demo information/code.  This allows for the creation of custom screenshots and movies via '''Demo Editing''' with relative ease.
+
 
+
See the [[Demo Recording]] entry for information on how to record and play back a demo.
+
+
<span style="color:orange;"> Insert a Sample Demo-Edited Screenshot Here.  How about "Victory At Last"?</span>
+
 
+
 
+
== Demo Code ==
+
 
+
<span style="color:orange;">Some intro text here.</span>
+
 
+
<span style="color:orange;">Think I prefer "Code" over "Commands" given the Time Increment & Entity ID</span>
+
 
+
 
+
 
+
=== Time Increment ===
+
 
+
The '''Time Increment''' is the information that tells the demo how to advance the play of the recording.  Each line of demo code begins with a number that tells the game engine how much time to advance the demo playback since the previous line, hence this number is referred to as the '''Time Increment''' (among other terms).
+
Looked at as a whole, rather than line by line, a demo file is formatted in such a way that it is organized into columns.  The first column is always the '''Time Increment'''.
+
 
+
The '''Time Increment''' is always a positive value integer and specifies the time in milliseconds (thousandths of a second) that the game engine waits, after the previous line of demo code, before executing the next line.  So a value of 2000 at the beginning of a line of demo code would mean that the 2 seconds of "real" time would pass, after the previous line of code, before the demo playback carries out that commands on that line.
+
 
+
<span style="color:orange;">Show Demo File Snippet Sample Here with Commentary</span>
+
 
+
Please note that this value, while it controls the advancement of the demo playback, does '''not''' control the time of day in a demo.  The time of day in a demo is fixed by the '''Time''' command, and, once specified, remains fixed throughout the demo playback and does not change.
+
 
+
The '''Time Increment''' is required for every line in a demo, and must begin each line, even if the '''Time Increment''' is just zero.
+
 
+
=== Entity ID ===
+
 
+
After the '''Time Increment''', most lines of demo code will have a second positive value integer.  A few special cases will have a text value after the '''Time Increment'''.  This second number (or text entry) is the '''Entity ID'''.  The value is the unique ID associated with every ''entity'' recorded in the demo.  ''entity'' refers to any model, object, mission objective, NPC, or player character in the demo.  Each such element must have a unique ID associated with it, as specified by the '''Entity ID'''.  All lines of code must have an '''Entity ID''' as the second element in the line, usually a positive integer.  The special cases for the '''Entity ID''' are discussed below.
+
 
+
<span style="color:orange;">Show Demo File Snippet Sample Here with Commentary</span>
+
 
+
Looked at in terms of a column format, the second column in a demo file is the '''Entity ID'''.
+
 
+
The '''Entity ID''' is a unique value associated with a specific ''entity''.  The '''Entity ID''' of each line tells the game engine which ''entity'' to apply/attach that line of demo code to.  For example, if a line of demo code includes an animation ('''MOV'''), the '''Entity ID Number''' tells the game engine which ''entity'' to have perform that animation in the demo playback. 
+
 
+
<span style="color:orange;">Show Demo File Snippet Sample Here with Commentary</span>
+
 
+
==== Special Case Entity IDs ====
+
 
+
* '''0''': "0" (zero) is used as the entity ID value for the '''Version''', '''Map''', '''Base''', and '''Time''' commands.  This is likely used as a "null" value of the '''Entity ID''' to indicate that these commands are not associated with a particular ''entity''.
+
* '''CAM''':  The camera information recorded in the demo is identified by the text CAM in the place of the '''Entity ID''' number.  This can be viewed as a special case value of the '''Entity ID''' where it uses the text "CAM" in place of a number.
+
* '''SKYFILE''': Similar to CAM, the SKYFILE code appears in demo lines in the place normally associated with the '''Entity ID'''.  This can also be considered a special case value of the Entity ID, specific to the SKY command which always follows.
+
* '''DYNGROUPS''':  As with CAM and SKYFILE, the DYNGROUPS code can be viewed as a special case non-numeric '''Entity ID''' associated specifically with the DYNARRAY command.
+
 
+
=== Version ===
+
 
+
<span style="color:orange;">Does this even do anything? Or just one of those things you have to have.</span>
+
 
+
=== Map ===
+
 
+
The '''Map''' command tells the game engine what map to display for the demo playback.  The '''Map''' command will be followed on the same line by the file name of the map to be displayed, like so:
+
 
+
:0  0  Map maps/City_Zones/City_04_01/City_04_01.txt
+
 
+
The one exception to this is for demos made in supergroup bases.  Demos recorded in Bases will not have any file name specified after the '''Map''' command.  The '''Map''' command will end the line and will be followed by the '''Base''' command on the next line.
+
 
+
=== Base ===
+
 
+
Supergroup bases do not have any pre-defined map associated with them.  This is reflected in recorded demos by the '''Base''' command.  Demos recorded in a base will not have any map file name specified after the '''Map''' command, but the next line of the demo file will include the '''Base''' command, which will precedes a large amount of data apparently used to define and generate the base layout.  For example (not that the binary '''Base''' data is incomplete in this example and would typically continue to fill a page or more):
+
 
+
:0  0  Map
+
:0  0  Base "UÀ�\0x^íYsÛ¸–€ç5©Ê`õ˼Ü8Ü\pùÍ–—¤oÜí±Ü[35¥‚)Äâ5Eª¸\dQ~ý�¸H¤D� \de...
+
 
+
The '''Base''' command appears only for demos recorded inside a supergroup base.  Demos recorded in any other location, mission, or circumstance will not include the '''Base''' command.
+
 
+
=== Time ===
+
 
+
The '''Time''' command instructs the game engine what time of day to use for the demo playback.  The value which follows the '''Time'' command on this line is the time of day, in hours, using the military time notation (also known as 24-hour clock notation), with fractions of an hour expressed a decimal value.  Hence values following the '''Time''' command may range from 0.0 to 23.99.  In a demo, this line would appear as follows:
+
 
+
:0  0  Time 14.428092
+
 
+
Where the value of 14.428092 corresponds to 2:25 AM (and 41 seconds).  Some examples of '''Time''' values, with their equivalent 12-hour clock notation, are as follows:
+
 
+
<span style="color:orange;">Make this a table?</span>
+
 
+
:0.000 = 12 Midnight
+
:6.500 = 6:30 AM
+
:12.000 = 12 Noon
+
:16.667 = 4:40 PM
+
:22.000 = 10:00 PM
+
 
+
Note that, unlike in-game, the time of day does ''not'' advance in demo playback, so whatever the time is as specified in the demo code is what the time of day will be for the entire demo playback.
+
 
+
<!-- That is still correct, yes?  Nothing has changed recently that I missed as far as time of day advancing goes? -->
+
 
+
=== POS ===
+
 
+
Position.  Map coordinates.  Where the object/model/whatever in question appears.  Keys to the required unique ID that all entities have (second column).  In X,Z,Y code ('''NOT''' X,Y,Z).  (No commas.)
+
 
+
:X = East/West; Further E is smaller values
+
:Y = North/South; Further N is smaller values
+
:Z = Up/Down; Further down is smaller values (right?)
+
 
+
Comment on "CAM POS".
+
 
+
=== PYR ===
+
 
+
Pitch-Yaw-Roll.  Most of POS comments apply.  Spacial orientation of object/entity.  Expressed in terms of -pi to +pi.  This is what determines if Ms. Liberty is standing on her feet or standing on her head.  Make graphics for this one showing various orientations and to give scale of -pi/+pi.
+
 
+
Give a link to [http://en.wikipedia.org/wiki/Radians Radians].
+
 
+
Comment on "CAM PYR"
+
 
+
=== New ===
+
 
+
Tells you that you are adding a new entity.  The second number column (ID) attached to this command is when and where the unique ID for the entity is first specified.  This is the line where you also give it a name (after the '''New''').  Names need quotations if they are more than one word.  If it's just one word, then the names don't need quotes.
+
 
+
=== NPC ===
+
 
+
Tells you that it is an NPC and then you specify the model code for the NPC.  Don't forget the ID (required).
+
 
+
=== MOV ===
+
 
+
The animation the NPC entity is performing.  Thousands to choose from.  ID required.  Specify the name of the animation after '''MOV'''.
+
 
+
=== HP ===
+
 
+
The '''CURRENT''' Health (Hit Points) of the NPC entity.  Not always required.  If it's a destructible object (object here meaning like a truck, or cardboard box, or whatever; not a person-type thingie), then you will need this to make things show up right (along with the next line).  ID required.  Will change throughout the demo if the entity is getting beat on.
+
 
+
Harmless to add this (always paired with HPMAX) if you aren't sure if it's needed or not.
+
 
+
=== HPMAX ===
+
 
+
The Maximum Health of the NPC entity.  Not always required (see notes for HP above and the destructible object comments below).  ID required (like always).  The relative proportion of the two determines the appearance of destructible objects.
+
 
+
=== DEL ===
+
 
+
Opposite of NEW.  Deletes stuff.
+
 
+
=== Player ===
+
 
+
=== COSTUME ===
+
 
+
Blah blah blah.  May leave this section & PARTSNAME for someone else.
+
 
+
=== PARTSNAME ===
+
 
+
=== XLU ===
+
 
+
Does this do anything?
+
 
+
=== SEQ ===
+
 
+
Non-desctructible objects.  Stands for "Sequence"?  These are all the non-destructible (ones you can't smash) mission objectives (and a few other mission-objective-type-thingies, like the ore convertor in Bloody Bay or the key stations and missile launch terminal in Warburg).  They are classed as "SEQ" instead of "NPC".  Don't know why.  Maybe something to do with them being clickies and needing to specify them as clickable.
+
 
+
'''They do not appear in demo playback.  Don't show up.  Invisible.'''
+
 
+
They are also distinct code entities from regular models with their own code (so you can't just replace '''SEQ''' with '''NPC''' to make them show up).
+
 
+
Any mission objectives that you can smash are regular old '''NPC'''-classified models.
+
 
+
=== FX ===
+
 
+
Tells you what the FX is.  Here's a sample:
+
 
+
0  3  FX Maintained 4 POWERS/KINETICS/KINSPEEDCONTINUING.FX 0
+
 
+
* First number = time index
+
* Second number = unique ID of the entity that "owns" this FX
+
* '''FX''' code = "Hi, I'm an FX."
+
* After '''FX''' ("Maintained," here) = Duration Type of FX, either ''Maintained'' (ongoing) or '''OneShot'' (goes "bam" and it's gone).  Usually FXs are one or the other, but some Maintained/OneShot FX are the same (and just loop the OneShot or whatever if they're Maintained.
+
* Next number is the unique ID of the FX.  Not the unique ID of the entity shooting the FX off or afflicted by it, but a new/different unique ID just for the FX itself.
+
* Then the code for the particular FX.
+
* Then a zero, that I think is just an end-of-line type thingie (need to check).
+
 
+
=== FXSCALE ===
+
 
+
Just put in "FXSCALE 10.000000 10".  I forget what messing with this does, if anything.
+
 
+
=== ORIGIN ===
+
 
+
Who is shooting this FX off.  Where the FX is coming from.  When you've got an FX in play, you need to specify who's catching and who's pitching.  Need to do both even if it's a self-only power and you're doing '''both''' the pitching ''and'' the catching.
+
 
+
0  3  ORIGIN ENT 0 0
+
 
+
If it's a self-only power, both numbers after ENT ("Entity" I figure) are 0.  If it's a beam thing and needs at origin point, then the number after ENT is the unique ID of the shooter (pitcher).
+
 
+
<span style="color:orange;">I ''THINK''.  Need to double-check.  Haven't played with FX in a while.  Need to review ORIGIN/TARGET.  Probably got something wrong in here since I'm going just by memory.  Last number always zero for both of these?  Is origin always 0 0 or do beam effects, where the zap can be seen traveling from A to B have an ORIGIN line that includes the source Entity ID.</spam>
+
 
+
=== TARGET ===
+
 
+
Who's on the receiving end of the FX.
+
 
+
0  3  TARGET ENT 3 0
+
 
+
First number after '''ENT''' is the unique ID of the entity getting hit by the FX.
+
 
+
Can also be
+
 
+
TARGET POS X Z Y
+
 
+
For Targeted AoE powers ("shoot at the ground" powers/targeting recticle powers).
+
 
+
=== FXDESTROY ===
+
 
+
Ends an FX.
+
 
+
=== SKY ===
+
 
+
Controls invasion sky color.  Binary control for first two fields.  Third field unknown, but lets you do some wonky color/depth-of-field stuff if you crank up the value.  Haven't tried negative values.  Should do that.
+
 
+
Also frequently used as a generic time (demo play) advancer (advancing time index of first column number).
+
 
+
=== DYNARRAY ===
+
 
+
Controls war walls up down.  Also controls other "dynamic" effects, like the Recluse's Victory "war boards" in Atlas and Grandville, the appearance of Recluse's Victory itself (I think, verify), etc.
+
 
+
Only appears for maps/demo recordings that need it, so may not appear in all demo file code.
+
 
+
Bases are DYNLIB.
+
 
+
=== CHAT ===
+
 
+
Chat.  Did I12 remove chat from global channels and such from demos?  Haven't noticed anything but local-type stuff in a few I've looked at.
+
 
+
=== FLOAT ===
+
 
+
"Pop up" text (like "Salvage Found").  Note that it makes calls to pre-defined text strings, so doesn't look like you can customize the text seen, just pick from the pre-defined messages.
+
 
+
=== floatdmg ===
+
 
+
Damage-specific float text.
+
 
+
=== EntRagdoll ===
+
 
+
Ragdoll stuff.  The code variables obviously manage ragdoll physics playback appearance (but no idea what they all mean)
+
 
+
=== DYNLIB ===
+
 
+
Base entity code based off of previous line NPC call.
+
 
+
 
+
== Basic Model Substitution ==
+
 
+
== Default Camera POV ==
+
 
+
(Talking about axis through the head thing.)
+
 
+
Or maybe this as a subset of some sort of section on Camera Manipulation?
+
 
+
== Transparency (Stealth) ==
+
 
+
Most stealth/invisibility/transparency effects don't play back in demos. The few exceptions (like trainer War Witch and Numina) are built into the model and not something you can apply.
+
 
+
However, although the standard stealth powers don't work, this FX does:
+
 
+
OBJECTIVEOBJECTFX/GHOSTED.FX
+
 
+
This is the placeable mission objective effect (like for planting bombs) that make the objects transparent until you place them. I did a quick demo test as follows (splicing States onto the City Rep):
+
 
+
:0 6 NEW "City Representative"
+
:0 6 NPC Model_Statesman
+
:0 6 POS 128.5 -768 -639.5
+
:0 6 PYR 0 0 0
+
:0 6 MOV ALTREADY_TRANS_XARMS
+
:0 6 FX Maintained 7 OBJECTIVEOBJECTFX/GHOSTED.FX 0
+
 
+
 
+
The FX line is the only one I added (make sure it doesn't conflict with any other FX) and voila! Transparent Statesman.
+
 
+
Qualifiers:
+
 
+
* The transparency effect pulsates, so it's not a consistent steady level of transparency.
+
* The FX also includes the mission objective noise, so you might have to work with the audio.
+
 
+
 
+
== Invasion Sky & War Walls ==
+
 
+
:Normal sky: SKYFILE SKY 1 0 1.000000
+
:Invasion sky: SKYFILE SKY 0 1 1.000000
+
 
+
That's using the first two fields (which is how it records during an actual invasion), which appear to be binary.
+
 
+
You can also play with the final number to tweak things, though I don't know how that functions. My best guess being that it's a saturation value of some sort -- the more you increase it, the more color starts washing out all detail, although interestingly it seems to predominate in the foreground, rather than the sky or distance. Possibly a depth of field value. Dunno.
+
 
+
:War Walls Up:  0  DYNGROUPS DYNARRAY |100,0
+
:War Walls Down:  0  DYNGROUPS DYNARRAY |0,0
+
 
+
== Walking ==
+
 
+
How to make player characters walk here.
+
 
+
== Destructible Objects ==
+
 
+
Object-based NPCs that are classed as "destructible" have a variable appearance based on their hit points, sometimes as simple as destroyed/not-destroyed, sometimes with multiple different appearances including partly-damaged states.
+
 
+
To make these work in demos, you have to assign hit points to the models. If you don't do that, then the game assumes the hit points are zero and treats the model as "destroyed", which usually, but not always, means that it's just gone.
+
 
+
So when you're splicing these into the demo code, include hit points for them like so:
+
 
+
:0 23 NPC v_destcldrn_cauldron
+
:0 23 MOV READY
+
:0 23 HP 150.00
+
:0 23 HPMAX 150.00
+
 
+
Setting the HP equal to HPMAX will give you the default, undestroyed appearance, and hopefully that should make them appear for you. If you want to see if there are transitional appearances, you can try setting HP to half of HPMAX, and so forth. Not all have transitional appearances, but some do. The Clockwork Paladin construction comes to mind as an object with multiple different transitional appearances depending on HP. This is also how the Rikti A Bomb warning lights color is controlled.
+
 
+
Not all object models are destructible, but seeing "dest" anywhere in the object name is generally a guarantee that it is one of these. But there are also destructible models that don't have "dest" in the name. If in doubt, add HP & HPMAX (at 100% HP) to the model code.
+
 
+
 
+
== Fixing "Player" FX ==
+
 
+
What it looks like is happening is that many FXs are not working if they are attached to the Player (meaning the character flagged as the Player in the demo). I pasted in some other NPCs and players (not as the "Player") and they appeared to work fine.
+
 
+
I suspect that this may have been something that crept in with I11, because some of the Maintained FXs that I was able to get to work are the Willpower FX, but older power set FXs didn't work for me (just based on 1 or 2 that I tried quickly). I also tried inserting the moneybag FX into some of my own demos and had the same problem with it not appearing on my "Player".
+
 
+
So, although you're doing everything right, it appears to be an issue with demos that isn't working. As I said, it appears to only be the one character flagged as the "Player" that is the problem. Other players and NPCs look like they work OK, so here's a quick fix. What you can do to get by this issue is create an invisible model attached to the "Player" flag and turn your character into just a regular player. You can do this by making the following code into the beginning of your demo:
+
 
+
:1 0 Version 2
+
:0 0 Map maps/City_Zones/Trial_06_01/Trial_06_01.txt
+
:0 0 Time 21.028650
+
:0 CAM POS 1818.146851 -318.060516 9450.268555
+
:0 CAM PYR -0.346 1.370835 0
+
:0 50 Player
+
:0 50 NEW "Invisible Placeholder"
+
:0 50 NPC Puddle
+
:0 50 POS 1803.004883 -319.173309 9443.212891
+
:0 50 PYR 0 3.11 0
+
:0 50 MOV READY
+
:0 1 NEW " "
+
:0 1 COSTUME 1 ffffff -3.297710 -1.000000 -0.015873 -1.000000 -0.523810 -0.777778 -0.682540 -0.047619 -0.015873 -0.428571 0.714286 -0.015873 -0.492063 0.015873 -0.650794 -0.460317 -0.523810 0.428571 -1.000000 0.396825 -0.142857 -0.301587 0.682540 0.015873 -0.746032 -1.000000 1.000000 -0.492063 0.460317 0.365079
+
:0 1 PARTSNAME shorts skin_tights bikini_3 000000 000055
+
 
+
...the end there being the rest of your character's costume as normal. Puddle is an invisible model, so by inserting that as the "Player" it gets you past this bug (I also changed your character's name field to <0 1 NEW " ">, otherwise, as you are no longer the "Player", the character's name would appear above your head).
+
 
+
 
+
== Internal Links ==
+
 
+
[[Demo Recording]]
+
 
+
 
+
== External Links ==
+
 
+
=== Guides ===
+
 
+
* [http://boards.cityofheroes.com/showflat.php?Cat=&Board=faq&Number=1838565 Custom Demo Creation Guide] (12/04/04)
+
* [http://boards.cityofheroes.com/showflat.php?Cat=&Board=faq&Number=851259 Demo File Format FAQ] (07/07/04)
+
* [http://files.filefront.com/StormknightsVideoGuide+1+0pdf/;9888227;/fileinfo.html Storm Knight's Video Guide] (08/07/04)
+
* [http://boards.cityofheroes.com/showflat.php?Cat=&Board=faq&Number=1874789 Screenshot and Demo Guide v2] (12/09/04)
+
* [http://boards.cityofheroes.com/showflat.php?Cat=&Board=faq&Number=1939763 A Kitty's guide to making CoH movies!] (12/21/04)
+
* [http://boards.cityofheroes.com/showflat.php?Cat=&Number=3322019 Demo Editing and Videos - The end-to-end guide] (07/20/05)
+
* [http://boards.cityofheroes.com/showflat.php?Cat=0&Board=faq&Number=5659797 Paris' Demo Guide] (06/01/06)
+
* [http://boards.cityofheroes.com/showflat.php?Cat=0&Board=faq&Number=6017752 DEMO File Format: Addendum (character parts)] (07/16/06)
+
* [http://boards.cityofheroes.com/showflat.php?Cat=0&Number=10177900&an=0&page=0#Film Toons on Film City Scoop article] (02/08/08)
+
* [http://boards.cityofheroes.com/showflat.php?Cat=0&Number=10262307 Demo Edit Tutorial: Jumping on a moving truck] (02/21/08)
+
 
+
=== Tools & Applications ===
+
 
+
* [http://home.kc.rr.com/dasloth/CoH/Demos/DemoEdit.htm Zloth's CoH Demo Editor]
+
* [http://files.filefront.com/CoH+demo+editor/;9888228;/fileinfo.html Storm_Knight's CoH demo editor]
+
* [http://home.earthlink.net/~balshor/DemoEditorInstaller.exe Balshor's Demo Editor]
+

Latest revision as of 00:24, 11 June 2008

Moved Live: Demo Editing

Genuinely just for notes now.