Game Development Community

[Bug 1.1 Beta] Shape Editor sequence editing broken - LOGGED

by Justin Knight · in Torque 3D Professional · 02/23/2010 (7:56 am) · 6 replies

System: Vista 64, 4GB RAM, GeForce GTX 260

Trying to add a sequence with a frame out of range results in a crash to desktop with the message "TSThread::advancePos(3)" and the following in the console:
TSShape::addSequence: End keyframe (31) out of range (0-30) for sequence '__backup__mySequence11'
d:torquetorque 3d 2009 pro 1.1 beta 1enginesourcetststhread.cpp(394) : Fatal - TSThread::advancePos (3)

Trying to create, edit and save additional sequences using the shape editor frequently fails and gives errors like these in the console log:

getSequenceSource: Could not find sequence named '__backup__ambient'
TSShape::addSequence: Could not find sequence named '__backup__ambient'
getSequenceSource: Could not find sequence named '__backup__ambient'
TSShape::addSequence: Could not find sequence named '__backup__ambient'
getSequenceBlend: Could not find sequence named '__proxy__ambient'
getSequenceCyclic: Could not find sequence named '__proxy__ambient'
getSequencePriority: Could not find sequence named '__proxy__ambient'
getTriggerCount: Could not find sequence named '__proxy__ambient'
getSequenceSource: Could not find sequence named '__proxy__ambient'
getSequenceSource: Could not find sequence named '__proxy__ambient'
TSShape::addSequence: Could not find sequence named ''
getSequenceBlend: Could not find sequence named '__proxy__ambient'
getSequenceCyclic: Could not find sequence named '__proxy__ambient'
getSequencePriority: Could not find sequence named '__proxy__ambient'
getTriggerCount: Could not find sequence named '__proxy__ambient'
getSequenceSource: Could not find sequence named '__proxy__ambient'
getSequenceSource: Could not find sequence named '__proxy__ambient'
TSShape::addSequence: Could not find sequence named ''
renameSequence: Could not find sequence named '__proxy__ambient'
TSShape::addSequence: Could not find sequence named '__proxy__ambient'
TSShape::addSequence: Could not find sequence named '__proxy__ambient'
TSShape::addSequence: Could not find sequence named '__proxy__ambient'
getSequenceSource: Could not find sequence named '__backup__ambient'
TSShape::addSequence: Could not find sequence named '__backup__ambient'
getSequenceSource: Could not find sequence named '__backup__ambient'
TSShape::addSequence: Could not find sequence named '__backup__ambient'
getSequenceSource: Could not find sequence named '__backup__ambient'
TSShape::addSequence: Could not find sequence named '__backup__ambient'
getSequenceSource: Could not find sequence named '__backup__ambient'
TSShape::addSequence: Could not find sequence named '__backup__ambient'
getSequenceSource: Could not find sequence named '__backup__ambient'
TSShape::addSequence: Could not find sequence named '__backup__ambient'
getSequenceSource: Could not find sequence named '__backup__ambient'
TSShape::addSequence: Could not find sequence named '__backup__ambient'
TSShape::addSequence: Could not find sequence named '__backup__ambient'
getSequenceBlend: Could not find sequence named 'ambient'
getSequenceCyclic: Could not find sequence named 'ambient'
getSequencePriority: Could not find sequence named 'ambient'
getTriggerCount: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
TSShape::addSequence: Could not find sequence named ''
getSequenceBlend: Could not find sequence named 'ambient'
getSequenceCyclic: Could not find sequence named 'ambient'
getSequencePriority: Could not find sequence named 'ambient'
getTriggerCount: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
TSShape::addSequence: Could not find sequence named ''
TSShape::addSequence: Could not find sequence named 'ambient'
getSequenceBlend: Could not find sequence named 'ambient'
getSequenceCyclic: Could not find sequence named 'ambient'
getSequencePriority: Could not find sequence named 'ambient'
getTriggerCount: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
TSShape::addSequence: Could not find sequence named ''
getSequenceBlend: Could not find sequence named 'ambient'
getSequenceCyclic: Could not find sequence named 'ambient'
getSequencePriority: Could not find sequence named 'ambient'
getTriggerCount: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
TSShape::addSequence: Could not find sequence named ''
getSequenceBlend: Could not find sequence named 'ambient'
getSequenceCyclic: Could not find sequence named 'ambient'
getSequencePriority: Could not find sequence named 'ambient'
getTriggerCount: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
TSShape::addSequence: Could not find sequence named ''
getSequenceBlend: Could not find sequence named 'ambient'
getSequenceCyclic: Could not find sequence named 'ambient'
getSequencePriority: Could not find sequence named 'ambient'
getTriggerCount: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'ambient'
TSShape::addSequence: Could not find sequence named ''
Set::remove: Object "10463" does not exist in set
TSShape::addSequence: Could not find sequence named 'ambient'
getSequenceSource: Could not find sequence named 'mySequence1'
getSequenceSource: Could not find sequence named 'mySequence1'
renameSequence: Could not find sequence named 'mySequence1'
renameSequence: Could not find sequence named 'mySequence1'
getSequenceBlend: Could not find sequence named 'mySequence1'
getSequenceCyclic: Could not find sequence named 'mySequence1'
getSequencePriority: Could not find sequence named 'mySequence1'
getTriggerCount: Could not find sequence named 'mySequence1'
getSequenceSource: Could not find sequence named 'mySequence1'
getSequenceSource: Could not find sequence named 'mySequence1'
TSShape::addSequence: Could not find sequence named ''
getSequenceBlend: Could not find sequence named 'mySequence1'
getSequenceCyclic: Could not find sequence named 'mySequence1'
getSequencePriority: Could not find sequence named 'mySequence1'
getTriggerCount: Could not find sequence named 'mySequence1'
getSequenceSource: Could not find sequence named 'mySequence1'
getSequenceSource: Could not find sequence named 'mySequence1'
TSShape::addSequence: Could not find sequence named ''
getSequenceBlend: Could not find sequence named 'mySequence1'
getSequenceCyclic: Could not find sequence named 'mySequence1'
getSequencePriority: Could not find sequence named 'mySequence1'
getTriggerCount: Could not find sequence named 'mySequence1'
getSequenceSource: Could not find sequence named 'mySequence1'
getSequenceSource: Could not find sequence named 'mySequence1'
TSShape::addSequence: Could not find sequence named ''
getSequenceSource: Could not find sequence named 'mySequence1'
getSequenceSource: Could not find sequence named 'mySequence1'
renameSequence: Could not find sequence named 'mySequence1'

#1
02/23/2010 (7:42 pm)
I can't reproduce the out-of-range keyframe crash. Here is what I did:

1. Select a sequence
2. Hit 'new' button to make a copy of the selected sequence
3. Edit the in/out edit box with a value outside the valid keyframe range. The edit appears to be ignored, and the value is reset back to the first/last frame respectively.

Alternatively:

1. Select a sequence
2. Change the in/out value to be outside range, but don't hit enter
3. Hit 'new' to make a copy of the selected sequence (with the new values). The 'out-of-range' console error is printed, but the sequence is still added and the in/out values are clamped to the valid range.


I did see a crash when deleting a sequence while it was playing. To fix this, change GuiShapeEdPreview::refreshThreadSequences in guiShapeEdPreview.cpp (around line 427) to this:

// Detect changed (or removed) sequence indices
if ( thread.key->getSeqIndex() != mModel->getShape()->findSequence( thread.sequence ) )
{
#2
02/23/2010 (7:45 pm)
If you can find a sequence of create/edit steps to reproduce the console errors you listed above I'd greatly appreciate it. The editor has to do some messy behind-the-scenes work to make the 3space format appear to be easily editable, so it's very possible there is something going awry.
#3
02/24/2010 (1:33 am)
I tried to create some sequences on the same .dts this morning, but using a clean Full Template build. I didn't get the console errors or crash this time and was able to create the sequences OK. The code it creates looks a bit convoluted:

singleton TSShapeConstructor(Double_doorsDAE)
{
   baseShape = "./double_doors.DAE";
};

function Double_doorsDAE::onLoad(%this)
{
   %this.addSequence("ambient", "__backup__ambient1");
   %this.addSequence("__backup__ambient1", "open", "0", "30");
   %this.addSequence("__backup__ambient1", "__proxy__open");
   %this.addSequence("ambient", "__backup__ambient2");
   %this.addSequence("__backup__ambient2", "close", "30", "59");
   %this.addSequence("__backup__ambient2", "__proxy__close");
   %this.removeSequence("__backup__ambient1");
   %this.removeSequence("__backup__ambient2");
}

I'll try again using our build to see if I can reproduce the errors. I've made some source changes but mainly just integrating webkit, database and an md5 function - nothing that should effect sequence editing.
#4
02/24/2010 (1:50 am)
Looking at the file I was editing yesterday again the ambient sequence wasn't there:
singleton TSShapeConstructor(Double_doorsDAE)
{
   baseShape = "./double_doors.DAE";
};

function Double_doorsDAE::onLoad(%this)
{
   %this.renameSequence("ambient", "__backup__ambient");
   %this.addSequence("__backup__ambient", "ambient", "0", "30");
   %this.removeSequence("__backup__ambient");
   %this.addSequence("ambient", "__backup__ambient1");
   %this.removeSequence("ambient");
   %this.renameSequence("mySequence1", "open");
   %this.removeSequence("__backup__ambient1");
   %this.addSequence("__deleted_ambient_2", "__backup____deleted_ambient_21");
   %this.addSequence("__backup____deleted_ambient_21", "mySequence1", "0", "30");
   %this.addSequence("mySequence1", "__backup__mySequence11");
   %this.addSequence("__backup__mySequence11", "mySequence2", "0", "30");
   %this.addSequence("__deleted_mySequence1_3", "__backup____deleted_mySequence1_31");
   %this.removeSequence("mySequence1");
   %this.addSequence("__backup____deleted_mySequence1_31", "mySequence1", "0", "30");
   %this.removeSequence("__backup____deleted_ambient_21");
   %this.removeSequence("__backup__mySequence11");
   %this.removeSequence("__backup____deleted_mySequence1_31");
}

So I deleted the .cs and .dts files and reimported from the .dae. I was then able to create the open and close sequences correctly, ending up with this code:

singleton TSShapeConstructor(Double_doorsDAE)
{
   baseShape = "./double_doors.DAE";
   loadLights = "0";
};

function Double_doorsDAE::onLoad(%this)
{
   %this.addSequence("ambient", "__backup__ambient1");
   %this.addSequence("__backup__ambient1", "open", "0", "30");
   %this.addSequence("__backup__ambient1", "__proxy__open");
   %this.addSequence("ambient", "__backup__ambient2");
   %this.addSequence("__backup__ambient2", "mySequence1", "0", "30");
   %this.addSequence("__backup__ambient2", "__proxy__mySequence1");
   %this.renameSequence("mySequence1", "close");
   %this.renameSequence("__proxy__mySequence1", "__proxy__close");
   %this.removeSequence("__backup__ambient1");
   %this.removeSequence("__backup__ambient2");
}

Sorry can't seem to reproduce this now. If it happens again I'll reply to this post.
#5
08/21/2010 (5:36 am)
Logged as TQA-861.
#6
09/03/2010 (3:35 pm)
@Justin
Does this still occur for you in 1.1 Beta 2? We've never been able to reproduce it in QA.