voidCommitFrame(intframeNum,IControllersource);//why pass in frameNum? Calling api
voidPokeFrame(intframeNum,stringinput);//Why does this exist as something different than Commit Frame?
voidCaptureState();//Movie code should manage wheter it needs to capture a state
LoadStateResultCheckTimeLines(TextReaderreader,boolonlyGuid,boolignoreGuidMismatch,outstringerrorMessage);//No need to return a status, no reason to have hacky flags, no need to pass a textreader
stringGetTime(boolpreLoad);//Rename to simply: Time, and make it a DateTime
voidDumpLogIntoSavestateText(TextWriterwriter);//Why pass a Textwriter, just make a string property that is the inputlog as text
voidLoadLogFromSavestateText(TextReaderreader,boolisMultitracking);//Pass in the text? do we need to care if it is multitracking, and can't hte movie already know that?
int?Frames{get;}//Nullable is a hack, also why does calling code need to know the number of frames, can that be minimized?
intRawFrames{get;}//Hacky to need two different frame properties
voidFinish();//Why isn't the movie in charge of this?
voidStartRecording(booltruncate=true);//Why do we need to truncate or not truncate? Why isn't the object in charge of this decision?
voidStartPlayback();//Poorly named for what it does, SetToPlay() perhaps? Also, this seems like too much power to give the calling code
voidSwitchToRecord();//Ditto
voidSwitchToPlay();//Dubious that it is needed
boolFrameLagged(intframe);//SHould be a property of a Record object
byte[]GetState(intframe);//Should be a property of a Record object
stringGetInput(intframe);//Should be a property of a Record object
byte[]InitState{get;}//Should be a record object?
boolStartsFromSavestate{get;set;}//Why is this settable!!!