taseditor-ru: minor fixes

This commit is contained in:
ansstuff 2012-08-08 15:15:13 +00:00
parent fd1360db10
commit 08f14816f4
36 changed files with 3029 additions and 3098 deletions

106
help/js/jquery-ui-1.8.17.custom.min.js vendored Normal file

File diff suppressed because one or more lines are too long

270
help/js/jquery.dynatree.min.js vendored Normal file
View File

@ -0,0 +1,270 @@
// jquery.dynatree.js build 1.2.1_rc3
// Revision: 585, date: 2012-01-10 00:07:39
// Copyright (c) 2008-10 Martin Wendt (http://dynatree.googlecode.com/)
// Dual licensed under the MIT or GPL Version 2 licenses.
var _canLog=true;function _log(mode,msg){if(!_canLog){return;}
var args=Array.prototype.slice.apply(arguments,[1]);var dt=new Date();var tag=dt.getHours()+":"+dt.getMinutes()+":"+dt.getSeconds()+"."+dt.getMilliseconds();args[0]=tag+" - "+args[0];try{switch(mode){case"info":window.console.info.apply(window.console,args);break;case"warn":window.console.warn.apply(window.console,args);break;default:window.console.log.apply(window.console,args);break;}}catch(e){if(!window.console){_canLog=false;}}}
function logMsg(msg){Array.prototype.unshift.apply(arguments,["debug"]);_log.apply(this,arguments);}
var getDynaTreePersistData=null;var DTNodeStatus_Error=-1;var DTNodeStatus_Loading=1;var DTNodeStatus_Ok=0;(function($){var Class={create:function(){return function(){this.initialize.apply(this,arguments);};}};function getDtNodeFromElement(el){alert("getDtNodeFromElement is deprecated");return $.ui.dynatree.getNode(el);}
function noop(){}
var DynaTreeNode=Class.create();DynaTreeNode.prototype={initialize:function(parent,tree,data){this.parent=parent;this.tree=tree;if(typeof data==="string"){data={title:data};}
if(data.key===undefined){data.key="_"+tree._nodeCount++;}
this.data=$.extend({},$.ui.dynatree.nodedatadefaults,data);this.li=null;this.span=null;this.ul=null;this.childList=null;this._isLoading=false;this.hasSubSel=false;this.bExpanded=false;this.bSelected=false;},toString:function(){return"DynaTreeNode<"+this.data.key+">: '"+this.data.title+"'";},toDict:function(recursive,callback){var dict=$.extend({},this.data);dict.activate=(this.tree.activeNode===this);dict.focus=(this.tree.focusNode===this);dict.expand=this.bExpanded;dict.select=this.bSelected;if(callback){callback(dict);}
if(recursive&&this.childList){dict.children=[];for(var i=0,l=this.childList.length;i<l;i++){dict.children.push(this.childList[i].toDict(true,callback));}}else{delete dict.children;}
return dict;},fromDict:function(dict){var children=dict.children;if(children===undefined){this.data=$.extend(this.data,dict);this.render();return;}
dict=$.extend({},dict);dict.children=undefined;this.data=$.extend(this.data,dict);this.removeChildren();this.addChild(children);},_getInnerHtml:function(){var tree=this.tree,opts=tree.options,cache=tree.cache,level=this.getLevel(),data=this.data,res="";if(level<opts.minExpandLevel){if(level>1){res+=cache.tagConnector;}}else if(this.hasChildren()!==false){res+=cache.tagExpander;}else{res+=cache.tagConnector;}
if(opts.checkbox&&data.hideCheckbox!==true&&!data.isStatusNode){res+=cache.tagCheckbox;}
if(data.icon){res+="<img src='"+opts.imagePath+data.icon+"' alt='' />";}else if(data.icon===false){noop();}else{res+=cache.tagNodeIcon;}
var nodeTitle="";if(opts.onCustomRender){nodeTitle=opts.onCustomRender.call(tree,this)||"";}
if(!nodeTitle){var tooltip=data.tooltip?' title="'+data.tooltip.replace(/\"/g,'&quot;')+'"':'',href=data.href||"#";if(opts.noLink||data.noLink){nodeTitle='<span style="display:inline-block;" class="'+opts.classNames.title+'"'+tooltip+'>'+data.title+'</span>';}else{nodeTitle='<a href="'+href+'" class="'+opts.classNames.title+'"'+tooltip+'>'+data.title+'</a>';}}
res+=nodeTitle;return res;},_fixOrder:function(){var cl=this.childList;if(!cl||!this.ul){return;}
var childLI=this.ul.firstChild;for(var i=0,l=cl.length-1;i<l;i++){var childNode1=cl[i];var childNode2=childLI.dtnode;if(childNode1!==childNode2){this.tree.logDebug("_fixOrder: mismatch at index "+i+": "+childNode1+" != "+childNode2);this.ul.insertBefore(childNode1.li,childNode2.li);}else{childLI=childLI.nextSibling;}}},render:function(useEffects,includeInvisible){var tree=this.tree,parent=this.parent,data=this.data,opts=tree.options,cn=opts.classNames,isLastSib=this.isLastSibling(),firstTime=false;if(!parent&&!this.ul){this.li=this.span=null;this.ul=document.createElement("ul");if(opts.minExpandLevel>1){this.ul.className=cn.container+" "+cn.noConnector;}else{this.ul.className=cn.container;}}else if(parent){if(!this.li){firstTime=true;this.li=document.createElement("li");this.li.dtnode=this;if(data.key&&opts.generateIds){this.li.id=opts.idPrefix+data.key;}
this.span=document.createElement("span");this.span.className=cn.title;this.li.appendChild(this.span);if(!parent.ul){parent.ul=document.createElement("ul");parent.ul.style.display="none";parent.li.appendChild(parent.ul);}
parent.ul.appendChild(this.li);}
this.span.innerHTML=this._getInnerHtml();var cnList=[];cnList.push(cn.node);if(data.isFolder){cnList.push(cn.folder);}
if(this.bExpanded){cnList.push(cn.expanded);}
if(this.hasChildren()!==false){cnList.push(cn.hasChildren);}
if(data.isLazy&&this.childList===null){cnList.push(cn.lazy);}
if(isLastSib){cnList.push(cn.lastsib);}
if(this.bSelected){cnList.push(cn.selected);}
if(this.hasSubSel){cnList.push(cn.partsel);}
if(tree.activeNode===this){cnList.push(cn.active);}
if(data.addClass){cnList.push(data.addClass);}
cnList.push(cn.combinedExpanderPrefix
+(this.bExpanded?"e":"c")
+(data.isLazy&&this.childList===null?"d":"")
+(isLastSib?"l":""));cnList.push(cn.combinedIconPrefix
+(this.bExpanded?"e":"c")
+(data.isFolder?"f":""));this.span.className=cnList.join(" ");this.li.className=isLastSib?cn.lastsib:"";if(firstTime&&opts.onCreate){opts.onCreate.call(tree,this,this.span);}
if(opts.onRender){opts.onRender.call(tree,this,this.span);}}
if((this.bExpanded||includeInvisible===true)&&this.childList){for(var i=0,l=this.childList.length;i<l;i++){this.childList[i].render(false,includeInvisible);}
this._fixOrder();}
if(this.ul){var isHidden=(this.ul.style.display==="none");var isExpanded=!!this.bExpanded;if(useEffects&&opts.fx&&(isHidden===isExpanded)){var duration=opts.fx.duration||200;$(this.ul).animate(opts.fx,duration);}else{this.ul.style.display=(this.bExpanded||!parent)?"":"none";}}},getKeyPath:function(excludeSelf){var path=[];this.visitParents(function(node){if(node.parent){path.unshift(node.data.key);}},!excludeSelf);return"/"+path.join(this.tree.options.keyPathSeparator);},getParent:function(){return this.parent;},getChildren:function(){if(this.hasChildren()===undefined){return undefined;}
return this.childList;},hasChildren:function(){if(this.data.isLazy){if(this.childList===null||this.childList===undefined){return undefined;}else if(this.childList.length===0){return false;}else if(this.childList.length===1&&this.childList[0].isStatusNode()){return undefined;}
return true;}
return!!this.childList;},isFirstSibling:function(){var p=this.parent;return!p||p.childList[0]===this;},isLastSibling:function(){var p=this.parent;return!p||p.childList[p.childList.length-1]===this;},isLoading:function(){return!!this._isLoading;},getPrevSibling:function(){if(!this.parent){return null;}
var ac=this.parent.childList;for(var i=1,l=ac.length;i<l;i++){if(ac[i]===this){return ac[i-1];}}
return null;},getNextSibling:function(){if(!this.parent){return null;}
var ac=this.parent.childList;for(var i=0,l=ac.length-1;i<l;i++){if(ac[i]===this){return ac[i+1];}}
return null;},isStatusNode:function(){return(this.data.isStatusNode===true);},isChildOf:function(otherNode){return(this.parent&&this.parent===otherNode);},isDescendantOf:function(otherNode){if(!otherNode){return false;}
var p=this.parent;while(p){if(p===otherNode){return true;}
p=p.parent;}
return false;},countChildren:function(){var cl=this.childList;if(!cl){return 0;}
var n=cl.length;for(var i=0,l=n;i<l;i++){var child=cl[i];n+=child.countChildren();}
return n;},sortChildren:function(cmp,deep){var cl=this.childList;if(!cl){return;}
cmp=cmp||function(a,b){var x=a.data.title.toLowerCase(),y=b.data.title.toLowerCase();return x===y?0:x>y?1:-1;};cl.sort(cmp);if(deep){for(var i=0,l=cl.length;i<l;i++){if(cl[i].childList){cl[i].sortChildren(cmp,"$norender$");}}}
if(deep!=="$norender$"){this.render();}},_setStatusNode:function(data){var firstChild=(this.childList?this.childList[0]:null);if(!data){if(firstChild&&firstChild.isStatusNode()){try{if(this.ul){this.ul.removeChild(firstChild.li);firstChild.li=null;}}catch(e){}
if(this.childList.length===1){this.childList=[];}else{this.childList.shift();}}}else if(firstChild){data.isStatusNode=true;data.key="_statusNode";firstChild.data=data;firstChild.render();}else{data.isStatusNode=true;data.key="_statusNode";firstChild=this.addChild(data);}},setLazyNodeStatus:function(lts,opts){var tooltip=(opts&&opts.tooltip)?opts.tooltip:null,info=(opts&&opts.info)?" ("+opts.info+")":"";switch(lts){case DTNodeStatus_Ok:this._setStatusNode(null);$(this.span).removeClass(this.tree.options.classNames.nodeLoading);this._isLoading=false;if(this.tree.options.autoFocus){if(this===this.tree.tnRoot&&this.childList&&this.childList.length>0){this.childList[0].focus();}else{this.focus();}}
break;case DTNodeStatus_Loading:this._isLoading=true;$(this.span).addClass(this.tree.options.classNames.nodeLoading);if(!this.parent){this._setStatusNode({title:this.tree.options.strings.loading+info,tooltip:tooltip,addClass:this.tree.options.classNames.nodeWait});}
break;case DTNodeStatus_Error:this._isLoading=false;this._setStatusNode({title:this.tree.options.strings.loadError+info,tooltip:tooltip,addClass:this.tree.options.classNames.nodeError});break;default:throw"Bad LazyNodeStatus: '"+lts+"'.";}},_parentList:function(includeRoot,includeSelf){var l=[];var dtn=includeSelf?this:this.parent;while(dtn){if(includeRoot||dtn.parent){l.unshift(dtn);}
dtn=dtn.parent;}
return l;},getLevel:function(){var level=0;var dtn=this.parent;while(dtn){level++;dtn=dtn.parent;}
return level;},_getTypeForOuterNodeEvent:function(event){var cns=this.tree.options.classNames;var target=event.target;if(target.className.indexOf(cns.node)<0){return null;}
var eventX=event.pageX-target.offsetLeft;var eventY=event.pageY-target.offsetTop;for(var i=0,l=target.childNodes.length;i<l;i++){var cn=target.childNodes[i];var x=cn.offsetLeft-target.offsetLeft;var y=cn.offsetTop-target.offsetTop;var nx=cn.clientWidth,ny=cn.clientHeight;if(eventX>=x&&eventX<=(x+nx)&&eventY>=y&&eventY<=(y+ny)){if(cn.className==cns.title){return"title";}else if(cn.className==cns.expander){return"expander";}else if(cn.className==cns.checkbox){return"checkbox";}else if(cn.className==cns.nodeIcon){return"icon";}}}
return"prefix";},getEventTargetType:function(event){var tcn=event&&event.target?event.target.className:"",cns=this.tree.options.classNames;if(tcn===cns.title){return"title";}else if(tcn===cns.expander){return"expander";}else if(tcn===cns.checkbox){return"checkbox";}else if(tcn===cns.nodeIcon){return"icon";}else if(tcn===cns.empty||tcn===cns.vline||tcn===cns.connector){return"prefix";}else if(tcn.indexOf(cns.node)>=0){return this._getTypeForOuterNodeEvent(event);}
return null;},isVisible:function(){var parents=this._parentList(true,false);for(var i=0,l=parents.length;i<l;i++){if(!parents[i].bExpanded){return false;}}
return true;},makeVisible:function(){var parents=this._parentList(true,false);for(var i=0,l=parents.length;i<l;i++){parents[i]._expand(true);}},focus:function(){this.makeVisible();try{$(this.span).find(">a").focus();}catch(e){}},isFocused:function(){return(this.tree.tnFocused===this);},_activate:function(flag,fireEvents){this.tree.logDebug("dtnode._activate(%o, fireEvents=%o) - %o",flag,fireEvents,this);var opts=this.tree.options;if(this.data.isStatusNode){return;}
if(fireEvents&&opts.onQueryActivate&&opts.onQueryActivate.call(this.tree,flag,this)===false){return;}
if(flag){if(this.tree.activeNode){if(this.tree.activeNode===this){return;}
this.tree.activeNode.deactivate();}
if(opts.activeVisible){this.makeVisible();}
this.tree.activeNode=this;if(opts.persist){$.cookie(opts.cookieId+"-active",this.data.key,opts.cookie);}
this.tree.persistence.activeKey=this.data.key;$(this.span).addClass(opts.classNames.active);if(fireEvents&&opts.onActivate){opts.onActivate.call(this.tree,this);}}else{if(this.tree.activeNode===this){if(opts.onQueryActivate&&opts.onQueryActivate.call(this.tree,false,this)===false){return;}
$(this.span).removeClass(opts.classNames.active);if(opts.persist){$.cookie(opts.cookieId+"-active","",opts.cookie);}
this.tree.persistence.activeKey=null;this.tree.activeNode=null;if(fireEvents&&opts.onDeactivate){opts.onDeactivate.call(this.tree,this);}}}},activate:function(){this._activate(true,true);},activateSilently:function(){this._activate(true,false);},deactivate:function(){this._activate(false,true);},isActive:function(){return(this.tree.activeNode===this);},_userActivate:function(){var activate=true;var expand=false;if(this.data.isFolder){switch(this.tree.options.clickFolderMode){case 2:activate=false;expand=true;break;case 3:activate=expand=true;break;}}
if(this.parent===null){expand=false;}
if(expand){this.toggleExpand();this.focus();}
if(activate){this.activate();}},_setSubSel:function(hasSubSel){if(hasSubSel){this.hasSubSel=true;$(this.span).addClass(this.tree.options.classNames.partsel);}else{this.hasSubSel=false;$(this.span).removeClass(this.tree.options.classNames.partsel);}},_updatePartSelectionState:function(){var sel;if(!this.hasChildren()){sel=(this.bSelected&&!this.data.unselectable&&!this.data.isStatusNode);this._setSubSel(false);return sel;}
var i,l,cl=this.childList,allSelected=true,allDeselected=true;for(i=0,l=cl.length;i<l;i++){var n=cl[i],s=n._updatePartSelectionState();if(s!==false){allDeselected=false;}
if(s!==true){allSelected=false;}}
if(allSelected){sel=true;}else if(allDeselected){sel=false;}else{sel=undefined;}
this._setSubSel(sel===undefined);this.bSelected=(sel===true);return sel;},_fixSelectionState:function(){var p,i,l;if(this.bSelected){this.visit(function(node){node.parent._setSubSel(true);if(!node.data.unselectable){node._select(true,false,false);}});p=this.parent;while(p){p._setSubSel(true);var allChildsSelected=true;for(i=0,l=p.childList.length;i<l;i++){var n=p.childList[i];if(!n.bSelected&&!n.data.isStatusNode&&!n.data.unselectable){allChildsSelected=false;break;}}
if(allChildsSelected){p._select(true,false,false);}
p=p.parent;}}else{this._setSubSel(false);this.visit(function(node){node._setSubSel(false);node._select(false,false,false);});p=this.parent;while(p){p._select(false,false,false);var isPartSel=false;for(i=0,l=p.childList.length;i<l;i++){if(p.childList[i].bSelected||p.childList[i].hasSubSel){isPartSel=true;break;}}
p._setSubSel(isPartSel);p=p.parent;}}},_select:function(sel,fireEvents,deep){var opts=this.tree.options;if(this.data.isStatusNode){return;}
if(this.bSelected===sel){return;}
if(fireEvents&&opts.onQuerySelect&&opts.onQuerySelect.call(this.tree,sel,this)===false){return;}
if(opts.selectMode==1&&sel){this.tree.visit(function(node){if(node.bSelected){node._select(false,false,false);return false;}});}
this.bSelected=sel;if(sel){if(opts.persist){this.tree.persistence.addSelect(this.data.key);}
$(this.span).addClass(opts.classNames.selected);if(deep&&opts.selectMode===3){this._fixSelectionState();}
if(fireEvents&&opts.onSelect){opts.onSelect.call(this.tree,true,this);}}else{if(opts.persist){this.tree.persistence.clearSelect(this.data.key);}
$(this.span).removeClass(opts.classNames.selected);if(deep&&opts.selectMode===3){this._fixSelectionState();}
if(fireEvents&&opts.onSelect){opts.onSelect.call(this.tree,false,this);}}},select:function(sel){if(this.data.unselectable){return this.bSelected;}
return this._select(sel!==false,true,true);},toggleSelect:function(){return this.select(!this.bSelected);},isSelected:function(){return this.bSelected;},isLazy:function(){return!!this.data.isLazy;},_loadContent:function(){try{var opts=this.tree.options;this.tree.logDebug("_loadContent: start - %o",this);this.setLazyNodeStatus(DTNodeStatus_Loading);if(true===opts.onLazyRead.call(this.tree,this)){this.setLazyNodeStatus(DTNodeStatus_Ok);this.tree.logDebug("_loadContent: succeeded - %o",this);}}catch(e){this.tree.logWarning("_loadContent: failed - %o",e);this.setLazyNodeStatus(DTNodeStatus_Error,{tooltip:""+e});}},_expand:function(bExpand,forceSync){if(this.bExpanded===bExpand){this.tree.logDebug("dtnode._expand(%o) IGNORED - %o",bExpand,this);return;}
this.tree.logDebug("dtnode._expand(%o) - %o",bExpand,this);var opts=this.tree.options;if(!bExpand&&this.getLevel()<opts.minExpandLevel){this.tree.logDebug("dtnode._expand(%o) prevented collapse - %o",bExpand,this);return;}
if(opts.onQueryExpand&&opts.onQueryExpand.call(this.tree,bExpand,this)===false){return;}
this.bExpanded=bExpand;if(opts.persist){if(bExpand){this.tree.persistence.addExpand(this.data.key);}else{this.tree.persistence.clearExpand(this.data.key);}}
var allowEffects=!(this.data.isLazy&&this.childList===null)&&!this._isLoading&&!forceSync;this.render(allowEffects);if(this.bExpanded&&this.parent&&opts.autoCollapse){var parents=this._parentList(false,true);for(var i=0,l=parents.length;i<l;i++){parents[i].collapseSiblings();}}
if(opts.activeVisible&&this.tree.activeNode&&!this.tree.activeNode.isVisible()){this.tree.activeNode.deactivate();}
if(bExpand&&this.data.isLazy&&this.childList===null&&!this._isLoading){this._loadContent();return;}
if(opts.onExpand){opts.onExpand.call(this.tree,bExpand,this);}},isExpanded:function(){return this.bExpanded;},expand:function(flag){flag=(flag!==false);if(!this.childList&&!this.data.isLazy&&flag){return;}else if(this.parent===null&&!flag){return;}
this._expand(flag);},scheduleAction:function(mode,ms){if(this.tree.timer){clearTimeout(this.tree.timer);this.tree.logDebug("clearTimeout(%o)",this.tree.timer);}
var self=this;switch(mode){case"cancel":break;case"expand":this.tree.timer=setTimeout(function(){self.tree.logDebug("setTimeout: trigger expand");self.expand(true);},ms);break;case"activate":this.tree.timer=setTimeout(function(){self.tree.logDebug("setTimeout: trigger activate");self.activate();},ms);break;default:throw"Invalid mode "+mode;}
this.tree.logDebug("setTimeout(%s, %s): %s",mode,ms,this.tree.timer);},toggleExpand:function(){this.expand(!this.bExpanded);},collapseSiblings:function(){if(this.parent===null){return;}
var ac=this.parent.childList;for(var i=0,l=ac.length;i<l;i++){if(ac[i]!==this&&ac[i].bExpanded){ac[i]._expand(false);}}},_onClick:function(event){var targetType=this.getEventTargetType(event);if(targetType==="expander"){this.toggleExpand();this.focus();}else if(targetType==="checkbox"){this.toggleSelect();this.focus();}else{this._userActivate();var aTag=this.span.getElementsByTagName("a");if(aTag[0]){if(!$.browser.msie){aTag[0].focus();}}else{return true;}}
event.preventDefault();},_onDblClick:function(event){},_onKeydown:function(event){var handled=true,sib;switch(event.which){case 107:case 187:if(!this.bExpanded){this.toggleExpand();}
break;case 109:case 189:if(this.bExpanded){this.toggleExpand();}
break;case 32:this._userActivate();break;case 8:if(this.parent){this.parent.focus();}
break;case 37:if(this.bExpanded){this.toggleExpand();this.focus();}else if(this.parent&&this.parent.parent){this.parent.focus();}
break;case 39:if(!this.bExpanded&&(this.childList||this.data.isLazy)){this.toggleExpand();this.focus();}else if(this.childList){this.childList[0].focus();}
break;case 38:sib=this.getPrevSibling();while(sib&&sib.bExpanded&&sib.childList){sib=sib.childList[sib.childList.length-1];}
if(!sib&&this.parent&&this.parent.parent){sib=this.parent;}
if(sib){sib.focus();}
break;case 40:if(this.bExpanded&&this.childList){sib=this.childList[0];}else{var parents=this._parentList(false,true);for(var i=parents.length-1;i>=0;i--){sib=parents[i].getNextSibling();if(sib){break;}}}
if(sib){sib.focus();}
break;default:handled=false;}
if(handled){event.preventDefault();}},_onKeypress:function(event){},_onFocus:function(event){var opts=this.tree.options;if(event.type=="blur"||event.type=="focusout"){if(opts.onBlur){opts.onBlur.call(this.tree,this);}
if(this.tree.tnFocused){$(this.tree.tnFocused.span).removeClass(opts.classNames.focused);}
this.tree.tnFocused=null;if(opts.persist){$.cookie(opts.cookieId+"-focus","",opts.cookie);}}else if(event.type=="focus"||event.type=="focusin"){if(this.tree.tnFocused&&this.tree.tnFocused!==this){this.tree.logDebug("dtnode.onFocus: out of sync: curFocus: %o",this.tree.tnFocused);$(this.tree.tnFocused.span).removeClass(opts.classNames.focused);}
this.tree.tnFocused=this;if(opts.onFocus){opts.onFocus.call(this.tree,this);}
$(this.tree.tnFocused.span).addClass(opts.classNames.focused);if(opts.persist){$.cookie(opts.cookieId+"-focus",this.data.key,opts.cookie);}}},visit:function(fn,includeSelf){var res=true;if(includeSelf===true){res=fn(this);if(res===false||res=="skip"){return res;}}
if(this.childList){for(var i=0,l=this.childList.length;i<l;i++){res=this.childList[i].visit(fn,true);if(res===false){break;}}}
return res;},visitParents:function(fn,includeSelf){if(includeSelf&&fn(this)===false){return false;}
var p=this.parent;while(p){if(fn(p)===false){return false;}
p=p.parent;}
return true;},remove:function(){if(this===this.tree.root){throw"Cannot remove system root";}
return this.parent.removeChild(this);},removeChild:function(tn){var ac=this.childList;if(ac.length==1){if(tn!==ac[0]){throw"removeChild: invalid child";}
return this.removeChildren();}
if(tn===this.tree.activeNode){tn.deactivate();}
if(this.tree.options.persist){if(tn.bSelected){this.tree.persistence.clearSelect(tn.data.key);}
if(tn.bExpanded){this.tree.persistence.clearExpand(tn.data.key);}}
tn.removeChildren(true);this.ul.removeChild(tn.li);for(var i=0,l=ac.length;i<l;i++){if(ac[i]===tn){this.childList.splice(i,1);break;}}},removeChildren:function(isRecursiveCall,retainPersistence){this.tree.logDebug("%s.removeChildren(%o)",this,isRecursiveCall);var tree=this.tree;var ac=this.childList;if(ac){for(var i=0,l=ac.length;i<l;i++){var tn=ac[i];if(tn===tree.activeNode&&!retainPersistence){tn.deactivate();}
if(this.tree.options.persist&&!retainPersistence){if(tn.bSelected){this.tree.persistence.clearSelect(tn.data.key);}
if(tn.bExpanded){this.tree.persistence.clearExpand(tn.data.key);}}
tn.removeChildren(true,retainPersistence);if(this.ul){$("li",$(this.ul)).remove();}}
this.childList=null;}
if(!isRecursiveCall){this._isLoading=false;this.render();}},setTitle:function(title){this.fromDict({title:title});},reload:function(force){throw"Use reloadChildren() instead";},reloadChildren:function(callback){if(this.parent===null){throw"Use tree.reload() instead";}else if(!this.data.isLazy){throw"node.reloadChildren() requires lazy nodes.";}
if(callback){var self=this;var eventType="nodeLoaded.dynatree."+this.tree.$tree.attr("id")
+"."+this.data.key;this.tree.$tree.bind(eventType,function(e,node,isOk){self.tree.$tree.unbind(eventType);self.tree.logDebug("loaded %o, %o, %o",e,node,isOk);if(node!==self){throw"got invalid load event";}
callback.call(self.tree,node,isOk);});}
this.removeChildren();this._loadContent();},_loadKeyPath:function(keyPath,callback){var tree=this.tree;tree.logDebug("%s._loadKeyPath(%s)",this,keyPath);if(keyPath===""){throw"Key path must not be empty";}
var segList=keyPath.split(tree.options.keyPathSeparator);if(segList[0]===""){throw"Key path must be relative (don't start with '/')";}
var seg=segList.shift();for(var i=0,l=this.childList.length;i<l;i++){var child=this.childList[i];if(child.data.key===seg){if(segList.length===0){callback.call(tree,child,"ok");}else if(child.data.isLazy&&(child.childList===null||child.childList===undefined)){tree.logDebug("%s._loadKeyPath(%s) -> reloading %s...",this,keyPath,child);var self=this;child.reloadChildren(function(node,isOk){if(isOk){tree.logDebug("%s._loadKeyPath(%s) -> reloaded %s.",node,keyPath,node);callback.call(tree,child,"loaded");node._loadKeyPath(segList.join(tree.options.keyPathSeparator),callback);}else{tree.logWarning("%s._loadKeyPath(%s) -> reloadChildren() failed.",self,keyPath);callback.call(tree,child,"error");}});}else{callback.call(tree,child,"loaded");child._loadKeyPath(segList.join(tree.options.keyPathSeparator),callback);}
return;}}
tree.logWarning("Node not found: "+seg);return;},resetLazy:function(){if(this.parent===null){throw"Use tree.reload() instead";}else if(!this.data.isLazy){throw"node.resetLazy() requires lazy nodes.";}
this.expand(false);this.removeChildren();},_addChildNode:function(dtnode,beforeNode){var tree=this.tree,opts=tree.options,pers=tree.persistence;dtnode.parent=this;if(this.childList===null){this.childList=[];}else if(!beforeNode){if(this.childList.length>0){$(this.childList[this.childList.length-1].span).removeClass(opts.classNames.lastsib);}}
if(beforeNode){var iBefore=$.inArray(beforeNode,this.childList);if(iBefore<0){throw"<beforeNode> must be a child of <this>";}
this.childList.splice(iBefore,0,dtnode);}else{this.childList.push(dtnode);}
var isInitializing=tree.isInitializing();if(opts.persist&&pers.cookiesFound&&isInitializing){if(pers.activeKey===dtnode.data.key){tree.activeNode=dtnode;}
if(pers.focusedKey===dtnode.data.key){tree.focusNode=dtnode;}
dtnode.bExpanded=($.inArray(dtnode.data.key,pers.expandedKeyList)>=0);dtnode.bSelected=($.inArray(dtnode.data.key,pers.selectedKeyList)>=0);}else{if(dtnode.data.activate){tree.activeNode=dtnode;if(opts.persist){pers.activeKey=dtnode.data.key;}}
if(dtnode.data.focus){tree.focusNode=dtnode;if(opts.persist){pers.focusedKey=dtnode.data.key;}}
dtnode.bExpanded=(dtnode.data.expand===true);if(dtnode.bExpanded&&opts.persist){pers.addExpand(dtnode.data.key);}
dtnode.bSelected=(dtnode.data.select===true);if(dtnode.bSelected&&opts.persist){pers.addSelect(dtnode.data.key);}}
if(opts.minExpandLevel>=dtnode.getLevel()){this.bExpanded=true;}
if(dtnode.bSelected&&opts.selectMode==3){var p=this;while(p){if(!p.hasSubSel){p._setSubSel(true);}
p=p.parent;}}
if(tree.bEnableUpdate){this.render();}
return dtnode;},addChild:function(obj,beforeNode){if(typeof(obj)=="string"){throw"Invalid data type for "+obj;}else if(!obj||obj.length===0){return;}else if(obj instanceof DynaTreeNode){return this._addChildNode(obj,beforeNode);}
if(!obj.length){obj=[obj];}
var prevFlag=this.tree.enableUpdate(false);var tnFirst=null;for(var i=0,l=obj.length;i<l;i++){var data=obj[i];var dtnode=this._addChildNode(new DynaTreeNode(this,this.tree,data),beforeNode);if(!tnFirst){tnFirst=dtnode;}
if(data.children){dtnode.addChild(data.children,null);}}
this.tree.enableUpdate(prevFlag);return tnFirst;},append:function(obj){this.tree.logWarning("node.append() is deprecated (use node.addChild() instead).");return this.addChild(obj,null);},appendAjax:function(ajaxOptions){var self=this;this.removeChildren(false,true);this.setLazyNodeStatus(DTNodeStatus_Loading);if(ajaxOptions.debugLazyDelay){var ms=ajaxOptions.debugLazyDelay;ajaxOptions.debugLazyDelay=0;this.tree.logInfo("appendAjax: waiting for debugLazyDelay "+ms);setTimeout(function(){self.appendAjax(ajaxOptions);},ms);return;}
var orgSuccess=ajaxOptions.success,orgError=ajaxOptions.error,eventType="nodeLoaded.dynatree."+this.tree.$tree.attr("id")+"."+this.data.key;var options=$.extend({},this.tree.options.ajaxDefaults,ajaxOptions,{success:function(data,textStatus,jqXHR){var prevPhase=self.tree.phase;self.tree.phase="init";if(options.postProcess){data=options.postProcess.call(this,data,this.dataType);}
else if(data&&data.hasOwnProperty("d")){data=(typeof data.d)=="string"?$.parseJSON(data.d):response.d;}
if(!$.isArray(data)||data.length!==0){self.addChild(data,null);}
self.tree.phase="postInit";if(orgSuccess){orgSuccess.call(options,self,data,textStatus);}
self.tree.logDebug("trigger "+eventType);self.tree.$tree.trigger(eventType,[self,true]);self.tree.phase=prevPhase;self.setLazyNodeStatus(DTNodeStatus_Ok);if($.isArray(data)&&data.length===0){self.childList=[];self.render();}},error:function(jqXHR,textStatus,errorThrown){self.tree.logWarning("appendAjax failed:",textStatus,":\n",jqXHR,"\n",errorThrown);if(orgError){orgError.call(options,self,jqXHR,textStatus,errorThrown);}
self.tree.$tree.trigger(eventType,[self,false]);self.setLazyNodeStatus(DTNodeStatus_Error,{info:textStatus,tooltip:""+errorThrown});}});$.ajax(options);},move:function(targetNode,mode){var pos;if(this===targetNode){return;}
if(!this.parent){throw"Cannot move system root";}
if(mode===undefined||mode=="over"){mode="child";}
var prevParent=this.parent;var targetParent=(mode==="child")?targetNode:targetNode.parent;if(targetParent.isDescendantOf(this)){throw"Cannot move a node to it's own descendant";}
if(this.parent.childList.length==1){this.parent.childList=null;this.parent.bExpanded=false;}else{pos=$.inArray(this,this.parent.childList);if(pos<0){throw"Internal error";}
this.parent.childList.splice(pos,1);}
this.parent.ul.removeChild(this.li);this.parent=targetParent;if(targetParent.hasChildren()){switch(mode){case"child":targetParent.childList.push(this);break;case"before":pos=$.inArray(targetNode,targetParent.childList);if(pos<0){throw"Internal error";}
targetParent.childList.splice(pos,0,this);break;case"after":pos=$.inArray(targetNode,targetParent.childList);if(pos<0){throw"Internal error";}
targetParent.childList.splice(pos+1,0,this);break;default:throw"Invalid mode "+mode;}}else{targetParent.childList=[this];}
if(!targetParent.ul){targetParent.ul=document.createElement("ul");targetParent.ul.style.display="none";targetParent.li.appendChild(targetParent.ul);}
targetParent.ul.appendChild(this.li);if(this.tree!==targetNode.tree){this.visit(function(node){node.tree=targetNode.tree;},null,true);throw"Not yet implemented.";}
if(!prevParent.isDescendantOf(targetParent)){prevParent.render();}
if(!targetParent.isDescendantOf(prevParent)){targetParent.render();}},lastentry:undefined};var DynaTreeStatus=Class.create();DynaTreeStatus._getTreePersistData=function(cookieId,cookieOpts){var ts=new DynaTreeStatus(cookieId,cookieOpts);ts.read();return ts.toDict();};getDynaTreePersistData=DynaTreeStatus._getTreePersistData;DynaTreeStatus.prototype={initialize:function(cookieId,cookieOpts){if(cookieId===undefined){cookieId=$.ui.dynatree.prototype.options.cookieId;}
cookieOpts=$.extend({},$.ui.dynatree.prototype.options.cookie,cookieOpts);this.cookieId=cookieId;this.cookieOpts=cookieOpts;this.cookiesFound=undefined;this.activeKey=null;this.focusedKey=null;this.expandedKeyList=null;this.selectedKeyList=null;},_log:function(msg){Array.prototype.unshift.apply(arguments,["debug"]);_log.apply(this,arguments);},read:function(){this.cookiesFound=false;var cookie=$.cookie(this.cookieId+"-active");this.activeKey=(cookie===null)?"":cookie;if(cookie!==null){this.cookiesFound=true;}
cookie=$.cookie(this.cookieId+"-focus");this.focusedKey=(cookie===null)?"":cookie;if(cookie!==null){this.cookiesFound=true;}
cookie=$.cookie(this.cookieId+"-expand");this.expandedKeyList=(cookie===null)?[]:cookie.split(",");if(cookie!==null){this.cookiesFound=true;}
cookie=$.cookie(this.cookieId+"-select");this.selectedKeyList=(cookie===null)?[]:cookie.split(",");if(cookie!==null){this.cookiesFound=true;}},write:function(){$.cookie(this.cookieId+"-active",(this.activeKey===null)?"":this.activeKey,this.cookieOpts);$.cookie(this.cookieId+"-focus",(this.focusedKey===null)?"":this.focusedKey,this.cookieOpts);$.cookie(this.cookieId+"-expand",(this.expandedKeyList===null)?"":this.expandedKeyList.join(","),this.cookieOpts);$.cookie(this.cookieId+"-select",(this.selectedKeyList===null)?"":this.selectedKeyList.join(","),this.cookieOpts);},addExpand:function(key){if($.inArray(key,this.expandedKeyList)<0){this.expandedKeyList.push(key);$.cookie(this.cookieId+"-expand",this.expandedKeyList.join(","),this.cookieOpts);}},clearExpand:function(key){var idx=$.inArray(key,this.expandedKeyList);if(idx>=0){this.expandedKeyList.splice(idx,1);$.cookie(this.cookieId+"-expand",this.expandedKeyList.join(","),this.cookieOpts);}},addSelect:function(key){if($.inArray(key,this.selectedKeyList)<0){this.selectedKeyList.push(key);$.cookie(this.cookieId+"-select",this.selectedKeyList.join(","),this.cookieOpts);}},clearSelect:function(key){var idx=$.inArray(key,this.selectedKeyList);if(idx>=0){this.selectedKeyList.splice(idx,1);$.cookie(this.cookieId+"-select",this.selectedKeyList.join(","),this.cookieOpts);}},isReloading:function(){return this.cookiesFound===true;},toDict:function(){return{cookiesFound:this.cookiesFound,activeKey:this.activeKey,focusedKey:this.activeKey,expandedKeyList:this.expandedKeyList,selectedKeyList:this.selectedKeyList};},lastentry:undefined};var DynaTree=Class.create();DynaTree.version="$Version: 1.2.1_rc3$";DynaTree.prototype={initialize:function($widget){this.phase="init";this.$widget=$widget;this.options=$widget.options;this.$tree=$widget.element;this.timer=null;this.divTree=this.$tree.get(0);_initDragAndDrop(this);},_load:function(callback){var $widget=this.$widget;var opts=this.options,self=this;this.bEnableUpdate=true;this._nodeCount=1;this.activeNode=null;this.focusNode=null;if(opts.rootVisible!==undefined){this.logWarning("Option 'rootVisible' is no longer supported.");}
if(opts.minExpandLevel<1){this.logWarning("Option 'minExpandLevel' must be >= 1.");opts.minExpandLevel=1;}
if(opts.classNames!==$.ui.dynatree.prototype.options.classNames){opts.classNames=$.extend({},$.ui.dynatree.prototype.options.classNames,opts.classNames);}
if(opts.ajaxDefaults!==$.ui.dynatree.prototype.options.ajaxDefaults){opts.ajaxDefaults=$.extend({},$.ui.dynatree.prototype.options.ajaxDefaults,opts.ajaxDefaults);}
if(opts.dnd!==$.ui.dynatree.prototype.options.dnd){opts.dnd=$.extend({},$.ui.dynatree.prototype.options.dnd,opts.dnd);}
if(!opts.imagePath){$("script").each(function(){var _rexDtLibName=/.*dynatree[^\/]*\.js$/i;if(this.src.search(_rexDtLibName)>=0){if(this.src.indexOf("/")>=0){opts.imagePath=this.src.slice(0,this.src.lastIndexOf("/"))+"/skin/";}else{opts.imagePath="skin/";}
self.logDebug("Guessing imagePath from '%s': '%s'",this.src,opts.imagePath);return false;}});}
this.persistence=new DynaTreeStatus(opts.cookieId,opts.cookie);if(opts.persist){if(!$.cookie){_log("warn","Please include jquery.cookie.js to use persistence.");}
this.persistence.read();}
this.logDebug("DynaTree.persistence: %o",this.persistence.toDict());this.cache={tagEmpty:"<span class='"+opts.classNames.empty+"'></span>",tagVline:"<span class='"+opts.classNames.vline+"'></span>",tagExpander:"<span class='"+opts.classNames.expander+"'></span>",tagConnector:"<span class='"+opts.classNames.connector+"'></span>",tagNodeIcon:"<span class='"+opts.classNames.nodeIcon+"'></span>",tagCheckbox:"<span class='"+opts.classNames.checkbox+"'></span>",lastentry:undefined};if(opts.children||(opts.initAjax&&opts.initAjax.url)||opts.initId){$(this.divTree).empty();}
var $ulInitialize=this.$tree.find(">ul:first").hide();this.tnRoot=new DynaTreeNode(null,this,{});this.tnRoot.bExpanded=true;this.tnRoot.render();this.divTree.appendChild(this.tnRoot.ul);var root=this.tnRoot;var isReloading=(opts.persist&&this.persistence.isReloading());var isLazy=false;var prevFlag=this.enableUpdate(false);this.logDebug("Dynatree._load(): read tree structure...");if(opts.children){root.addChild(opts.children);}else if(opts.initAjax&&opts.initAjax.url){isLazy=true;root.data.isLazy=true;this._reloadAjax(callback);}else if(opts.initId){this._createFromTag(root,$("#"+opts.initId));}else{this._createFromTag(root,$ulInitialize);$ulInitialize.remove();}
this._checkConsistency();if(!isLazy&&opts.selectMode==3){root._updatePartSelectionState();}
this.logDebug("Dynatree._load(): render nodes...");this.enableUpdate(prevFlag);this.logDebug("Dynatree._load(): bind events...");this.$widget.bind();this.logDebug("Dynatree._load(): postInit...");this.phase="postInit";if(opts.persist){this.persistence.write();}
if(this.focusNode&&this.focusNode.isVisible()){this.logDebug("Focus on init: %o",this.focusNode);this.focusNode.focus();}
if(!isLazy){if(opts.onPostInit){opts.onPostInit.call(this,isReloading,false);}
if(callback){callback.call(this,"ok");}}
this.phase="idle";},_reloadAjax:function(callback){var opts=this.options;if(!opts.initAjax||!opts.initAjax.url){throw"tree.reload() requires 'initAjax' mode.";}
var pers=this.persistence;var ajaxOpts=$.extend({},opts.initAjax);if(ajaxOpts.addActiveKey){ajaxOpts.data.activeKey=pers.activeKey;}
if(ajaxOpts.addFocusedKey){ajaxOpts.data.focusedKey=pers.focusedKey;}
if(ajaxOpts.addExpandedKeyList){ajaxOpts.data.expandedKeyList=pers.expandedKeyList.join(",");}
if(ajaxOpts.addSelectedKeyList){ajaxOpts.data.selectedKeyList=pers.selectedKeyList.join(",");}
if(ajaxOpts.success){this.logWarning("initAjax: success callback is ignored; use onPostInit instead.");}
if(ajaxOpts.error){this.logWarning("initAjax: error callback is ignored; use onPostInit instead.");}
var isReloading=pers.isReloading();ajaxOpts.success=function(dtnode,data,textStatus){if(opts.selectMode==3){dtnode.tree.tnRoot._updatePartSelectionState();}
if(opts.onPostInit){opts.onPostInit.call(dtnode.tree,isReloading,false);}
if(callback){callback.call(dtnode.tree,"ok");}};ajaxOpts.error=function(dtnode,XMLHttpRequest,textStatus,errorThrown){if(opts.onPostInit){opts.onPostInit.call(dtnode.tree,isReloading,true,XMLHttpRequest,textStatus,errorThrown);}
if(callback){callback.call(dtnode.tree,"error",XMLHttpRequest,textStatus,errorThrown);}};this.logDebug("Dynatree._init(): send Ajax request...");this.tnRoot.appendAjax(ajaxOpts);},toString:function(){return"Dynatree '"+this.$tree.attr("id")+"'";},toDict:function(){return this.tnRoot.toDict(true);},serializeArray:function(stopOnParents){var nodeList=this.getSelectedNodes(stopOnParents),name=this.$tree.attr("name")||this.$tree.attr("id"),arr=[];for(var i=0,l=nodeList.length;i<l;i++){arr.push({name:name,value:nodeList[i].data.key});}
return arr;},getPersistData:function(){return this.persistence.toDict();},logDebug:function(msg){if(this.options.debugLevel>=2){Array.prototype.unshift.apply(arguments,["debug"]);_log.apply(this,arguments);}},logInfo:function(msg){if(this.options.debugLevel>=1){Array.prototype.unshift.apply(arguments,["info"]);_log.apply(this,arguments);}},logWarning:function(msg){Array.prototype.unshift.apply(arguments,["warn"]);_log.apply(this,arguments);},isInitializing:function(){return(this.phase=="init"||this.phase=="postInit");},isReloading:function(){return(this.phase=="init"||this.phase=="postInit")&&this.options.persist&&this.persistence.cookiesFound;},isUserEvent:function(){return(this.phase=="userEvent");},redraw:function(){this.tnRoot.render(false,false);},renderInvisibleNodes:function(){this.tnRoot.render(false,true);},reload:function(callback){this._load(callback);},getRoot:function(){return this.tnRoot;},enable:function(){this.$widget.enable();},disable:function(){this.$widget.disable();},getNodeByKey:function(key){var el=document.getElementById(this.options.idPrefix+key);if(el){return el.dtnode?el.dtnode:null;}
var match=null;this.visit(function(node){if(node.data.key==key){match=node;return false;}},true);return match;},getActiveNode:function(){return this.activeNode;},reactivate:function(setFocus){var node=this.activeNode;if(node){this.activeNode=null;node.activate();if(setFocus){node.focus();}}},getSelectedNodes:function(stopOnParents){var nodeList=[];this.tnRoot.visit(function(node){if(node.bSelected){nodeList.push(node);if(stopOnParents===true){return"skip";}}});return nodeList;},activateKey:function(key){var dtnode=(key===null)?null:this.getNodeByKey(key);if(!dtnode){if(this.activeNode){this.activeNode.deactivate();}
this.activeNode=null;return null;}
dtnode.focus();dtnode.activate();return dtnode;},loadKeyPath:function(keyPath,callback){var segList=keyPath.split(this.options.keyPathSeparator);if(segList[0]===""){segList.shift();}
if(segList[0]==this.tnRoot.data.key){this.logDebug("Removed leading root key.");segList.shift();}
keyPath=segList.join(this.options.keyPathSeparator);return this.tnRoot._loadKeyPath(keyPath,callback);},selectKey:function(key,select){var dtnode=this.getNodeByKey(key);if(!dtnode){return null;}
dtnode.select(select);return dtnode;},enableUpdate:function(bEnable){if(this.bEnableUpdate==bEnable){return bEnable;}
this.bEnableUpdate=bEnable;if(bEnable){this.redraw();}
return!bEnable;},count:function(){return this.tnRoot.countChildren();},visit:function(fn,includeRoot){return this.tnRoot.visit(fn,includeRoot);},_createFromTag:function(parentTreeNode,$ulParent){var self=this;$ulParent.find(">li").each(function(){var $li=$(this),$liSpan=$li.find(">span:first"),$liA=$li.find(">a:first"),title,href=null,target=null,tooltip;if($liSpan.length){title=$liSpan.html();}else if($liA.length){title=$liA.html();href=$liA.attr("href");target=$liA.attr("target");tooltip=$liA.attr("title");}else{title=$li.html();var iPos=title.search(/<ul/i);if(iPos>=0){title=$.trim(title.substring(0,iPos));}else{title=$.trim(title);}}
var data={title:title,tooltip:tooltip,isFolder:$li.hasClass("folder"),isLazy:$li.hasClass("lazy"),expand:$li.hasClass("expanded"),select:$li.hasClass("selected"),activate:$li.hasClass("active"),focus:$li.hasClass("focused"),noLink:$li.hasClass("noLink")};if(href){data.href=href;data.target=target;}
if($li.attr("title")){data.tooltip=$li.attr("title");}
if($li.attr("id")){data.key=$li.attr("id");}
if($li.attr("data")){var dataAttr=$.trim($li.attr("data"));if(dataAttr){if(dataAttr.charAt(0)!="{"){dataAttr="{"+dataAttr+"}";}
try{$.extend(data,eval("("+dataAttr+")"));}catch(e){throw("Error parsing node data: "+e+"\ndata:\n'"+dataAttr+"'");}}}
var childNode=parentTreeNode.addChild(data);var $ul=$li.find(">ul:first");if($ul.length){self._createFromTag(childNode,$ul);}});},_checkConsistency:function(){},_setDndStatus:function(sourceNode,targetNode,helper,hitMode,accept){var $source=sourceNode?$(sourceNode.span):null,$target=$(targetNode.span);if(!this.$dndMarker){this.$dndMarker=$("<div id='dynatree-drop-marker'></div>").hide().prependTo($(this.divTree).parent());}
if(hitMode==="after"||hitMode==="before"||hitMode==="over"){var pos=$target.offset();switch(hitMode){case"before":this.$dndMarker.removeClass("dynatree-drop-after dynatree-drop-over");this.$dndMarker.addClass("dynatree-drop-before");pos.top-=8;break;case"after":this.$dndMarker.removeClass("dynatree-drop-before dynatree-drop-over");this.$dndMarker.addClass("dynatree-drop-after");pos.top+=8;break;default:this.$dndMarker.removeClass("dynatree-drop-after dynatree-drop-before");this.$dndMarker.addClass("dynatree-drop-over");$target.addClass("dynatree-drop-target");pos.left+=8;}
this.$dndMarker.css({"left":pos.left,"top":pos.top,"z-index":1000}).show();}else{$target.removeClass("dynatree-drop-target");this.$dndMarker.hide();}
if(hitMode==="after"){$target.addClass("dynatree-drop-after");}else{$target.removeClass("dynatree-drop-after");}
if(hitMode==="before"){$target.addClass("dynatree-drop-before");}else{$target.removeClass("dynatree-drop-before");}
if(accept===true){if($source){$source.addClass("dynatree-drop-accept");}
$target.addClass("dynatree-drop-accept");helper.addClass("dynatree-drop-accept");}else{if($source){$source.removeClass("dynatree-drop-accept");}
$target.removeClass("dynatree-drop-accept");helper.removeClass("dynatree-drop-accept");}
if(accept===false){if($source){$source.addClass("dynatree-drop-reject");}
$target.addClass("dynatree-drop-reject");helper.addClass("dynatree-drop-reject");}else{if($source){$source.removeClass("dynatree-drop-reject");}
$target.removeClass("dynatree-drop-reject");helper.removeClass("dynatree-drop-reject");}},_onDragEvent:function(eventName,node,otherNode,event,ui,draggable){var opts=this.options,dnd=this.options.dnd,res=null,nodeTag=$(node.span),hitMode;switch(eventName){case"helper":var $helper=$("<div class='dynatree-drag-helper'><span class='dynatree-drag-helper-img' /></div>").append($(event.target).closest('a').clone());$("ul.dynatree-container",node.tree.divTree).append($helper);$helper.data("dtSourceNode",node);res=$helper;break;case"start":if(node.isStatusNode()){res=false;}else if(dnd.onDragStart){res=dnd.onDragStart(node);}
if(res===false){this.logDebug("tree.onDragStart() cancelled");ui.helper.trigger("mouseup");ui.helper.hide();}else{nodeTag.addClass("dynatree-drag-source");}
break;case"enter":res=dnd.onDragEnter?dnd.onDragEnter(node,otherNode):null;res={over:(res!==false)&&((res===true)||(res==="over")||$.inArray("over",res)>=0),before:(res!==false)&&((res===true)||(res==="before")||$.inArray("before",res)>=0),after:(res!==false)&&((res===true)||(res==="after")||$.inArray("after",res)>=0)};ui.helper.data("enterResponse",res);break;case"over":var enterResponse=ui.helper.data("enterResponse");hitMode=null;if(enterResponse===false){break;}else if(typeof enterResponse==="string"){hitMode=enterResponse;}else{var nodeOfs=nodeTag.offset();var relPos={x:event.pageX-nodeOfs.left,y:event.pageY-nodeOfs.top};var relPos2={x:relPos.x/nodeTag.width(),y:relPos.y/nodeTag.height()};if(enterResponse.after&&relPos2.y>0.75){hitMode="after";}else if(!enterResponse.over&&enterResponse.after&&relPos2.y>0.5){hitMode="after";}else if(enterResponse.before&&relPos2.y<=0.25){hitMode="before";}else if(!enterResponse.over&&enterResponse.before&&relPos2.y<=0.5){hitMode="before";}else if(enterResponse.over){hitMode="over";}
if(dnd.preventVoidMoves){if(node===otherNode){hitMode=null;}else if(hitMode==="before"&&otherNode&&node===otherNode.getNextSibling()){hitMode=null;}else if(hitMode==="after"&&otherNode&&node===otherNode.getPrevSibling()){hitMode=null;}else if(hitMode==="over"&&otherNode&&otherNode.parent===node&&otherNode.isLastSibling()){hitMode=null;}}
ui.helper.data("hitMode",hitMode);}
if(hitMode==="over"&&dnd.autoExpandMS&&node.hasChildren()!==false&&!node.bExpanded){node.scheduleAction("expand",dnd.autoExpandMS);}
if(hitMode&&dnd.onDragOver){res=dnd.onDragOver(node,otherNode,hitMode);}
this._setDndStatus(otherNode,node,ui.helper,hitMode,res!==false);break;case"drop":hitMode=ui.helper.data("hitMode");if(hitMode&&dnd.onDrop){dnd.onDrop(node,otherNode,hitMode,ui,draggable);}
break;case"leave":node.scheduleAction("cancel");ui.helper.data("enterResponse",null);ui.helper.data("hitMode",null);this._setDndStatus(otherNode,node,ui.helper,"out",undefined);if(dnd.onDragLeave){dnd.onDragLeave(node,otherNode);}
break;case"stop":nodeTag.removeClass("dynatree-drag-source");if(dnd.onDragStop){dnd.onDragStop(node);}
break;default:throw"Unsupported drag event: "+eventName;}
return res;},cancelDrag:function(){var dd=$.ui.ddmanager.current;if(dd){dd.cancel();}},lastentry:undefined};$.widget("ui.dynatree",{_init:function(){if(parseFloat($.ui.version)<1.8){if(this.options.debugLevel>=0){_log("warn","ui.dynatree._init() was called; you should upgrade to jquery.ui.core.js v1.8 or higher.");}
return this._create();}
if(this.options.debugLevel>=2){_log("debug","ui.dynatree._init() was called; no current default functionality.");}},_create:function(){var opts=this.options;if(opts.debugLevel>=1){logMsg("Dynatree._create(): version='%s', debugLevel=%o.",$.ui.dynatree.version,this.options.debugLevel);}
this.options.event+=".dynatree";var divTree=this.element.get(0);this.tree=new DynaTree(this);this.tree._load();this.tree.logDebug("Dynatree._init(): done.");},bind:function(){this.unbind();var eventNames="click.dynatree dblclick.dynatree";if(this.options.keyboard){eventNames+=" keypress.dynatree keydown.dynatree";}
this.element.bind(eventNames,function(event){var dtnode=$.ui.dynatree.getNode(event.target);if(!dtnode){return true;}
var tree=dtnode.tree;var o=tree.options;tree.logDebug("event(%s): dtnode: %s",event.type,dtnode);var prevPhase=tree.phase;tree.phase="userEvent";try{switch(event.type){case"click":return(o.onClick&&o.onClick.call(tree,dtnode,event)===false)?false:dtnode._onClick(event);case"dblclick":return(o.onDblClick&&o.onDblClick.call(tree,dtnode,event)===false)?false:dtnode._onDblClick(event);case"keydown":return(o.onKeydown&&o.onKeydown.call(tree,dtnode,event)===false)?false:dtnode._onKeydown(event);case"keypress":return(o.onKeypress&&o.onKeypress.call(tree,dtnode,event)===false)?false:dtnode._onKeypress(event);}}catch(e){var _=null;tree.logWarning("bind(%o): dtnode: %o, error: %o",event,dtnode,e);}finally{tree.phase=prevPhase;}});function __focusHandler(event){event=$.event.fix(event||window.event);var dtnode=$.ui.dynatree.getNode(event.target);return dtnode?dtnode._onFocus(event):false;}
var div=this.tree.divTree;if(div.addEventListener){div.addEventListener("focus",__focusHandler,true);div.addEventListener("blur",__focusHandler,true);}else{div.onfocusin=div.onfocusout=__focusHandler;}},unbind:function(){this.element.unbind(".dynatree");},enable:function(){this.bind();$.Widget.prototype.enable.apply(this,arguments);},disable:function(){this.unbind();$.Widget.prototype.disable.apply(this,arguments);},getTree:function(){return this.tree;},getRoot:function(){return this.tree.getRoot();},getActiveNode:function(){return this.tree.getActiveNode();},getSelectedNodes:function(){return this.tree.getSelectedNodes();},lastentry:undefined});if(parseFloat($.ui.version)<1.8){$.ui.dynatree.getter="getTree getRoot getActiveNode getSelectedNodes";}
$.ui.dynatree.version="$Version: 1.2.1_rc3$";$.ui.dynatree.getNode=function(el){if(el instanceof DynaTreeNode){return el;}
if(el.selector!==undefined){el=el[0];}
while(el){if(el.dtnode){return el.dtnode;}
el=el.parentNode;}
return null;}
$.ui.dynatree.getPersistData=DynaTreeStatus._getTreePersistData;$.ui.dynatree.prototype.options={title:"Dynatree",minExpandLevel:1,imagePath:null,children:null,initId:null,initAjax:null,autoFocus:true,keyboard:true,persist:false,autoCollapse:false,clickFolderMode:3,activeVisible:true,checkbox:false,selectMode:2,fx:null,noLink:false,onClick:null,onDblClick:null,onKeydown:null,onKeypress:null,onFocus:null,onBlur:null,onQueryActivate:null,onQuerySelect:null,onQueryExpand:null,onPostInit:null,onActivate:null,onDeactivate:null,onSelect:null,onExpand:null,onLazyRead:null,onCustomRender:null,onCreate:null,onRender:null,dnd:{onDragStart:null,onDragStop:null,autoExpandMS:1000,preventVoidMoves:true,onDragEnter:null,onDragOver:null,onDrop:null,onDragLeave:null},ajaxDefaults:{cache:false,timeout:0,dataType:"json"},strings:{loading:"Loading&#8230;",loadError:"Load error!"},generateIds:false,idPrefix:"dynatree-id-",keyPathSeparator:"/",cookieId:"dynatree",cookie:{expires:null},classNames:{container:"dynatree-container",node:"dynatree-node",folder:"dynatree-folder",empty:"dynatree-empty",vline:"dynatree-vline",expander:"dynatree-expander",connector:"dynatree-connector",checkbox:"dynatree-checkbox",nodeIcon:"dynatree-icon",title:"dynatree-title",noConnector:"dynatree-no-connector",nodeError:"dynatree-statusnode-error",nodeWait:"dynatree-statusnode-wait",hidden:"dynatree-hidden",combinedExpanderPrefix:"dynatree-exp-",combinedIconPrefix:"dynatree-ico-",nodeLoading:"dynatree-loading",hasChildren:"dynatree-has-children",active:"dynatree-active",selected:"dynatree-selected",expanded:"dynatree-expanded",lazy:"dynatree-lazy",focused:"dynatree-focused",partsel:"dynatree-partsel",lastsib:"dynatree-lastsib"},debugLevel:1,lastentry:undefined};if(parseFloat($.ui.version)<1.8){$.ui.dynatree.defaults=$.ui.dynatree.prototype.options;}
$.ui.dynatree.nodedatadefaults={title:null,key:null,isFolder:false,isLazy:false,tooltip:null,href:null,icon:null,addClass:null,noLink:false,activate:false,focus:false,expand:false,select:false,hideCheckbox:false,unselectable:false,children:null,lastentry:undefined};function _initDragAndDrop(tree){var dnd=tree.options.dnd||null;if(dnd&&(dnd.onDragStart||dnd.onDrop)){_registerDnd();}
if(dnd&&dnd.onDragStart){tree.$tree.draggable({addClasses:false,appendTo:"body",containment:false,delay:0,distance:4,revert:false,scroll:true,scrollSpeed:7,scrollSensitivity:10,connectToDynatree:true,helper:function(event){var sourceNode=$.ui.dynatree.getNode(event.target);if(!sourceNode){return"<div></div>";}
return sourceNode.tree._onDragEvent("helper",sourceNode,null,event,null,null);},start:function(event,ui){},_last:null});}
if(dnd&&dnd.onDrop){tree.$tree.droppable({addClasses:false,tolerance:"intersect",greedy:false,_last:null});}}
var didRegisterDnd=false;var _registerDnd=function(){if(didRegisterDnd){return;}
$.ui.plugin.add("draggable","connectToDynatree",{start:function(event,ui){var draggable=$(this).data("draggable"),sourceNode=ui.helper.data("dtSourceNode")||null;if(sourceNode){draggable.offset.click.top=-2;draggable.offset.click.left=+16;return sourceNode.tree._onDragEvent("start",sourceNode,null,event,ui,draggable);}},drag:function(event,ui){var draggable=$(this).data("draggable"),sourceNode=ui.helper.data("dtSourceNode")||null,prevTargetNode=ui.helper.data("dtTargetNode")||null,targetNode=$.ui.dynatree.getNode(event.target);if(event.target&&!targetNode){var isHelper=$(event.target).closest("div.dynatree-drag-helper,#dynatree-drop-marker").length>0;if(isHelper){return;}}
ui.helper.data("dtTargetNode",targetNode);if(prevTargetNode&&prevTargetNode!==targetNode){prevTargetNode.tree._onDragEvent("leave",prevTargetNode,sourceNode,event,ui,draggable);}
if(targetNode){if(!targetNode.tree.options.dnd.onDrop){noop();}else if(targetNode===prevTargetNode){targetNode.tree._onDragEvent("over",targetNode,sourceNode,event,ui,draggable);}else{targetNode.tree._onDragEvent("enter",targetNode,sourceNode,event,ui,draggable);}}},stop:function(event,ui){var draggable=$(this).data("draggable"),sourceNode=ui.helper.data("dtSourceNode")||null,targetNode=ui.helper.data("dtTargetNode")||null,mouseDownEvent=draggable._mouseDownEvent,eventType=event.type,dropped=(eventType=="mouseup"&&event.which==1);if(!dropped){logMsg("Drag was cancelled");}
if(targetNode){if(dropped){targetNode.tree._onDragEvent("drop",targetNode,sourceNode,event,ui,draggable);}
targetNode.tree._onDragEvent("leave",targetNode,sourceNode,event,ui,draggable);}
if(sourceNode){sourceNode.tree._onDragEvent("stop",sourceNode,null,event,ui,draggable);}}});didRegisterDnd=true;};})(jQuery);

View File

@ -3,7 +3,7 @@
<head>
<title>6. Продвинутые возможности</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,21 +53,21 @@
<div id="topic_content">
<p><span class="rvts20">Продвинутые возможности</span></p>
<p class="rvps2"><span class="rvts39"><br></span></p>
<p class="rvps2"><span class="rvts39"><br></span></p>
<p class="rvps2"><span class="rvts39"><br/></span></p>
<p class="rvps2"><span class="rvts39"><br/></span></p>
<p class="rvps15"><a class="rvts28" href="AdvancedFeatures.html#ProjectsSharing">1. Как делиться проектами</a></p>
<p class="rvps15"><a class="rvts28" href="AdvancedFeatures.html#UsingPatterns">2. Использование шаблонов</a></p>
<p class="rvps15"><a class="rvts28" href="AdvancedFeatures.html#UsingMarkers">3. Эффективное использование Маркеров</a></p>
<p class="rvps15"><a class="rvts28" href="AdvancedFeatures.html#UsingLua">4. Использование Lua</a></p>
<p class="rvps10"><span class="rvts23"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts23"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="ProjectsSharing"></a>
<span class="rvts53"><br></span></p>
<span class="rvts53"><br/></span></p>
<p class="rvps10"><span class="rvts23">1. Как делиться проектами</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Проект Тасэдитора сохраняется на диске в виде fm3-файла. В этом файле сохраняются все существенные аспекты состояния работы, чтобы можно было в точности восстановить отложенное состояние рабочего процесса. Размер этого "мгновенного снимка" может занимать немало места (в зависимости от объёма Гринзоны он может составлять сотни мегабайт).</span></p>
<p class="rvps10"><span class="rvts22">Поэтому в случаях, когда вам нужно выложить проект в Интернете (например, для опубликования), имеет смысл сохранять в проекте не полный снимок рабочего процесса, а только необходимую информацию. Для этого нужно выбрать в меню Тасэдитора пункт </span><span class="rvts26">File -&gt; Save Compact</span><span class="rvts22">. Появится окно, где можно выбрать, какие аспекты рабочего процесса следует сохранить в файл.</span></p>
<p class="rvps10"><img align="left" border="0" alt hspace="6" vspace="6" src="lib/save-compact.png"></p>
<p class="rvps10"><img align="left" alt="" style="padding : 6px;" src="lib/save-compact.png"/></p>
<p class="rvps10"><span class="rvts26">Binary format of Input</span><span class="rvts22"> сохранять Ввод мувика в двоичном формате. Эта настройка относится к формату fm2-мувиков, расширением которого является fm3-формат. По умолчанию галочка установлена. Если снять её, Ввод будет записан в fm3-файл в текстовом формате, что увеличит размер &nbsp;файла, но позволит редактировать его в любом текстовом редакторе. Однако Тасэдитор гораздо лучше приспособлен к редактированию мувиков, поэтому рекомендуется оставить эту галочку установленной и воздержаться от изменений содержимого fm3-файлов вне Тасэдитора. В некомпактных fm3-проектах (сохраняемых обычным способом) Ввод сохраняется в двоичном формате.</span></p>
<p class="rvps10"><span class="rvts26">Markers</span><span class="rvts22"> сохранять Маркеры в файл. Ввод будет сохраняться в любом случае, так как без Ввода невозможно будет открыть fm3-файлы в эмуляторе. Без Маркеров проигрывание fm3-мувиков возможно, но такие проекты не многим будут отличаться от fm2-мувиков. Рекомендуется оставить эту галочку установленной, чтобы передать в компактном проекте все текущие Маркеры и их Заметки. Размер файла при этом увеличится незначительно.</span></p>
<p class="rvps10"><span class="rvts26">Bookmarks</span><span class="rvts22"> сохранять Закладки в файл. Сохраняются данные всех имеющихся в проекте Закладок и их ответвлений. Рекомендуется оставить эту галочку установленной. Размер файла увеличится незначительно.</span></p>
@ -75,58 +75,57 @@
<p class="rvps10"><span class="rvts26">History</span><span class="rvts22"> сохранять Журнал Истории в файл. Размер файла увеличится на несколько мегабайт. Обычно нет смысла публиковать данные для отката изменений. Поэтому рекомендуется оставить эту галочку снятой. Когда вы открываете fm3-проект без журнала Истории, Тасэдитор создаёт его автоматически.</span></p>
<p class="rvps10"><span class="rvts26">Piano Roll</span><span class="rvts22"> сохранять текущую позицию вертикального скроллинга Piano Roll, чтобы при открытии проекта сразу увидеть тот же самый участок. Размер файла увеличится незначительно, поэтому можно оставить галочку установленной.</span></p>
<p class="rvps10"><span class="rvts26">Selection</span><span class="rvts22"> сохранять все данные Выделения в файл. Сохраняется как текущее Выделение (если есть), так и История Выделений. Размер файла увеличится незначительно, однако обычно нет смысла оставлять эти рабочие данные в публикуемом проекте. Поэтому рекомендуется оставить эту галочку снятой.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В результате компактного сохранения вы можете получить fm3-проект размером менее полумегабайта, при этом передавая в файле не только текущий мувик, но и все существенные данные, которые могут понадобиться получателю. Например, если вы работаете в соавторстве с другим ТАСером, нужно обмениваться не только Вводом, но и Маркерами, и Закладками. А Гринзону получатель файла сможет воссоздать самостоятельно, просто запустив просмотр в Тасэдиторе.</span></p>
<p class="rvps10"><span class="rvts22">При сохранении компактного проекта к имени файла добавляется суффикс "-compact". Компактное сохранение проекта не заменяет обычное сохранение, поэтому, если в проекте имеются несохранённые изменения, звёздочка из заголовка окна не исчезнет после Save Compact.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><img align="left" border="0" alt hspace="6" vspace="6" src="lib/export-to-fm2.png"></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="left" alt="" style="padding : 6px;" src="lib/export-to-fm2.png"/></p>
<p class="rvps10"><span class="rvts22">Помимо компактного сохранения проекта вы ещё можете экспортировать данные мувика в формат fm2, принятый на сайте TASVideos задолго до возникновения Тасэдитора. В этом формате вы передаёте только Ввод. Для этого нужно выбрать в меню Тасэдитора пункт </span><span class="rvts26">File -&gt; Export to FM2</span><span class="rvts22">. Появится окно, где можно выбрать формат &nbsp;целевого мувика (1P, 2P или Fourscore).</span></p>
<p class="rvps10"><span class="rvts22">Так как формат FM2 поддерживает хранение текстовых субтитров, можно использовать Заметки Маркеров в качестве материала для субтитров. Для этого нужно установить галочку "Convert Marker Notes to Movie Subtitles". Тогда при просмотре полученного fm2-мувика зрители будут видеть текстовые субтитры, появляющиеся на тех кадрах, где стояли соответствующие Маркеры в вашему проекте. А при необходимости можно далее конвертировать fm2-субтитры в общепринятый формат ".srt" для выкладывания ТАСа на Youtube. Для этого надо при проигрывании fm2 в FCEUX щёлкнуть правой кнопкой по игровому окну и в появившемся контекстном меню выбрать пункт "Dump Subtitles to SRT file".</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">FM2-файлы можно открывать в Тасэдиторе точно так же, как FM3-проекты. Для этого в окне выбора файла (</span><span class="rvts26">File -&gt; Open</span><span class="rvts22">) нужно применить фильтр "All Files (*.*)" и выбрать требуемый fm2-мувик. Тасэдитор выдаст сообщение о том, что данный файл не является проектом и потребует подтверждения загрузки. При положительном ответе Тасэдитор создаст новый проект, используя Ввод и настройки (1P/2P/Fourscore) из данного fm2-файла.</span></p>
<p class="rvps10"><span class="rvts22">Кроме того, вы можете импортировать Ввод из любого fm2 или fm3-файла с помощью </span><span class="rvts26">File -&gt; Import Input</span><span class="rvts22">. При этом не создаётся новый проект, просто текущий Ввод вашего проекта массово заменяется на Ввод из файла. Эта операция похожа на операцию "Вставка из Буфера Обмена", она заносится в Журнал Истории вашего проекта, и её можно откатить с помощью </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="UsingPatterns"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">2. Использование шаблонов</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При редактировании Ввода для каждой кнопки джойстика ТАСер составляет свою последовательность нажатий и отпусканий. Каждое нажатие можно нарисовать всего одним щелчком мыши (для создания длинного зажатия надо потянуть мышь вверх или вниз, не отпуская левую кнопку). Таким образом можно расставить последовательность какой угодно сложности.</span></p>
<p class="rvps10"><span class="rvts22">Для ускорения работы можно ещё запомнить типичные и часто используемые последовательности &nbsp;в виде шаблонов, чтобы устанавливать их парой щелчков, не рисуя каждое нажатие по отдельности.</span></p>
<p class="rvps10"><span class="rvts22">Шаблоны полезны в нескольких случаях:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда одинаковая последовательность часто используется в мувике (например, размеренное чередование нажатий и отпускания кнопки </span><span class="rvts32">B</span><span class="rvts22">)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда одну и ту же последовательность требуется рисовать для нескольких кнопок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда одну и ту же последовательность требуется перерисовывать много раз</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда одинаковая последовательность часто используется в мувике (например, размеренное чередование нажатий и отпускания кнопки </span><span class="rvts32">B</span><span class="rvts22">)</span></li>
<li class="rvps15"><span class="rvts22">когда одну и ту же последовательность требуется рисовать для нескольких кнопок</span></li>
<li class="rvps15"><span class="rvts22">когда одну и ту же последовательность требуется перерисовывать много раз</span></li>
</ul>
<p class="rvps10"><span class="rvts22">Чтобы добавить свой шаблон, нужно отредактировать в любом текстовом редакторе (например, в Блокноте) файл </span><span class="rvts21">taseditor_patterns.txt</span><span class="rvts22">, находящийся в подпапке </span><span class="rvts21">/tools</span><span class="rvts22"> папки FCEUX. Каждая нечётная строчка этого файла обозначает название шаблона, каждая чётная строчка содержит закодированную последовательность состояний кнопки. Кодировка очень простая единицей обозначается состояние "кнопка нажата", нулём обозначается состояние "кнопка отпущена".</span></p>
<p class="rvps10"><span class="rvts22">Каждый шаблон является зацикленным, то есть, когда Ввод по короткому шаблону устанавливается в длинный промежуток кадров, шаблон повторяется нужное количество раз, чтобы заполнить требуемый промежуток.</span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/patterns-menu.png"></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/patterns-menu.png"/></p>
<p class="rvps10"><span class="rvts22">Несколько наиболее очевидных шаблонов уже добавлено в файл автором. При добавлении или изменении шаблона необходимо перезапустить Тасэдитор, чтобы новые данные были прочитаны из файла. Список доступных шаблонов находится в верхнем правом углу окна TAS Editor. Для смены текущего шаблона нужно зайти в это меню и щёлкнуть по названию желаемого шаблона. Для простоты ориентирования в шаблонах рекомендуется отражать в названии каждого шаблона его игровую суть, или даже скопировать закодированную последовательность в название.</span></p>
<p class="rvps10"><span class="rvts22">Для установки шаблона Тасэдитору нужно знать начало и конец промежутка, в котором указанная кнопка будет нажиматься и отпускаться по заданному правилу. Существует 3 способа применения шаблона:</span></p>
<p class="rvps10"><span class="rvts26">1 способ. </span><span class="rvts22">Щёлкнуть по начальному кадру левой кнопкой мыши (в любой колонке Piano Roll), чтобы этот кадр стал выделенным. Затем зажать клавишу </span><span class="rvts34">Alt</span><span class="rvts22"> и щёлкнуть левой кнопкой мыши по конечному кадру в колонке редактируемой кнопки. В промежутке от выделенного до щёлкнутого кадра появится требуемая последовательность нажатий и отпусканий указанной кнопки. Этот способ удобно использовать, когда начальный кадр уже и так выделен из-за предыдущих щелчков по Piano Roll, и остаётся только зажать </span><span class="rvts34">Alt</span><span class="rvts22"> и сделать один щелчок по конечному кадру.</span></p>
<p class="rvps10"><span class="rvts26">2 способ.</span><span class="rvts22"> Щёлкнуть по начальному кадру левой кнопкой мыши (в любой колонке Piano Roll) и зажать левую кнопку мыши, начав рисование. Зажать клавишу </span><span class="rvts34">Alt</span><span class="rvts22"> и переместить курсор мыши вверх или вниз. Таким образом вы будете рисовать шаблонную последовательность нажатий и отпусканий указанной кнопки.</span></p>
<p class="rvps10"><span class="rvts26">3 способ.</span><span class="rvts22"> Выделить регион кадров, а затем зажать клавишу </span><span class="rvts34">Alt</span><span class="rvts22"> и щёлкнуть левой кнопкой мыши по символу редактируемой кнопки в Заголовке Piano Roll. В выделенной области появится требуемая последовательность нажатий и отпусканий указанной кнопки.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При использовании традиционного метода ТАСинга вы также можете применять шаблоны к записываемым последовательностям. Для этого нужно установить галочку </span><a class="rvts28" href="Toolbox.html#UsePattern">Use pattern</a><span class="rvts22"> в панели Рекордера. При этом вам может сначала потребоваться запись кнопок, которые не нужно чередовать (их следует записать без галочки Use pattern), а затем на том же участке с помощью Superimpose можно записать остальные кнопки по шаблону.</span></p>
<p class="rvps10"><span class="rvts22">Например, вам нужно записать стрельбу очередью во время перепрыгивания ямы. Сначала запишите процесс перепрыгивания без стрельбы, затем вернитесь Курсором Проигрывателя в начало участка (прыжком на Закладку), включите галочки Superimpose и Use pattern, зажмите кнопку </span><span class="rvts32">B</span><span class="rvts22"> и отпустите паузу эмуляции. На текущем участке произойдёт объединение Ввода прыжка с шаблонным Вводом стрельбы.</span></p>
<p class="rvps10"><span class="rvts22">До Тасэдитора вместо шаблонов существовала похожая концепция "Autofire". Однако из-за неудобств метода Записи она почти не использовалась, потому что во время впечатывания Ввода обычно проще нажимать и отпускать нужные кнопки вручную. Поэтому при использовании традиционного метода вы, скорее всего, не будете пользоваться шаблонами. Однако в нелинейном и полуавтоматическом методе шаблоны рисуются так же легко, как простые зажатия кнопок, и здесь они действительно могут повысить скорость работы.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Шаблоны используются при создании последовательностей для любой отдельно взятой кнопки. А когда нужно вставить типовую комбинацию сразу нескольких кнопок, следует воспользоваться функциями Copy/Paste.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="UsingMarkers"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">3. Эффективное использование Маркеров</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Не ленитесь ставить Маркеры и писать комментарии.</span></p>
<p class="rvps10"><span class="rvts22">В первую очередь Маркеры предназначены для упрощения сложных ситуаций за счёт структуризации проблемы. Когда в игре требуется проделать несколько комплексных взаимосвязанных действий, следует разбить большой участок на отдельные участки, чтобы чётко понимать, когда заканчивается одно действие и начинается другое. Даже если первоначальное разбиение окажется ошибочным, оно поможет привести ваши мысли в порядок.</span></p>
<p class="rvps10"><span class="rvts22">Естественно, не имеет смысла ставить Маркеры на ничем не примечательных участках, которые даже не требуется шлифовать (где достаточно, например, просто зажать </span><span class="rvts32">R</span><span class="rvts22">). А вот ключевые и памятные моменты мувика следует не только отмечать Маркерами, но и комментировать Заметками. Это позволит вам легко держать в голове мысленный образ всего проекта, а также осуществлять быструю навигацию по тексту Заметок.</span></p>
<p class="rvps10"><span class="rvts22">Причём не требуется писать литературные произведения, можно ограничиться простыми словами-метками, наподобие тегов. Слова придумаете на ходу, тут главное соблюдать системный подход. То есть, если в начале первого уровня (на экране перехода) вы поставили Маркер с Заметкой "level 1 start", то и в начале второго уровня следует написать "level 2 start", а не что-нибудь вроде "act II begin". Во время создания ТАСа у вас в голове формируется уникальный глоссарий, состоящий из понятий, актуальных для данной игры. И чем более системный подход вы применяете к написанию Заметок, тем проще будет охарактеризовать очередной участок, а значит, понять очередную задачу. И тем проще будет перемещаться между однотипными событиями мувика, а также находить старые участки Ввода, помня только их примерный результат в игре.</span></p>
<p class="rvps10"><span class="rvts22">Задачи, предлагаемые игроку в видеоиграх, очень часто повторяются. Детали и антураж могут меняться, но действия игрока остаются теми же. В особенно типовых случаях можно просто скопировать Ввод (решение подобной задачи из предыдущего уровня), и он успешно синхронизируется с новой игровой ситуацией (ну или понадобится небольшая модификация). Только после копипаста рекомендуется всё же разнообразить Ввод, чтобы зрители ТАСа не заскучали.</span></p>
<p class="rvps10"><span class="rvts22">Например, в начале многих уровней Super Mario Bros ТАСеру необходимо использовать одинаковую последовательность нажатий кнопок, чтобы оптимально разогнаться до максимальной скорости. Предположим, что вы добросовестно комментируете Ввод по ходу ТАСинга. Значит, в первом уровне на месте разгона вы оставили Заметку со словами вроде "acceleration" или тому подобными фразами по своему усмотрению. Теперь, когда в новом уровне вы начинаете создавать Ввод для участка с той же самой задачей, вы ставите в начало участка Маркер и пишете к нему Заметку, характеризующую текущую задачу. Очевидно, что в тексте Заметки тоже окажется слово "acceleration", потому что требуется разгон.</span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-selection.png"></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-selection.png"/></p>
<p class="rvps10"><span class="rvts22">И здесь уже можно воспользоваться функцией автоматического поиска похожих Заметок. Оставляете Курсор Проигрывателя на текущем участке и нажимаете кнопку </span><span class="rvts32">Similar</span><span class="rvts22"> в самом низу панели инструментов. Курсор Выделения сразу же прыгнет к Маркеру, который содержит наиболее похожую Заметку, по мнению Тасэдитора. Скорее всего, это будет Маркер в начале участка, отвечающего за разгон в первом уровне. Поэтому вы можете сразу выделить весь Ввод на этом участке, нажав </span><span class="rvts34">Ctrl + A</span><span class="rvts22">, скопировать его в Буфер Обмена (</span><span class="rvts34">Ctrl + C</span><span class="rvts22">), а затем вернуться к текущему участку (дважды нажать </span><span class="rvts34">Shift</span><span class="rvts22">) и вставить из Буфера Обмена (</span><span class="rvts34">Ctrl + V</span><span class="rvts22">).</span></p>
<p class="rvps10"><span class="rvts22">Если первый результат поиска не подходит, можно нажимать кнопку </span><span class="rvts32">More</span><span class="rvts22">, чтобы переходить к следующим вариантам похожих Заметок. Обычно нужный участок обнаруживается в числе первых предложенных вариантов, конечно, при условии, что этот участок был отмечен Маркером с разумной Заметкой.</span></p>
<p class="rvps10"><span class="rvts22">Важно заметить, что при написании Заметки к второму разгону слово "acceleration" появляется в тексте не нарочно, а потому что одинаковые игровые ситуации описываются одинаковыми словами. Поэтому запоминать текст старых Заметок совершенно не требуется в нужное время адекватные слова придут в голову сами.</span></p>
@ -134,47 +133,47 @@
<p class="rvps10"><span class="rvts22">Автопоиск также удобно использовать для прыжков между двумя (и более) взаимосвязанными участками, разнесёнными в мувике достаточно далеко. Скроллировать Piano Roll колесом мыши или прыгать через десятки Маркеров от одного участка к другому будет не столь оперативно, как сделать щелчок по кнопке </span><span class="rvts32">Similar</span><span class="rvts22"> или </span><span class="rvts32">More</span><span class="rvts22">. Чтобы участки-близнецы (или участок-источник и участок-приёмник) находились сразу же, имеет смысл написать в их заметках уникальное слово, которое не используется в других местах.</span></p>
<p class="rvps10"><span class="rvts22">Например, в игре Megaman с каждым робот-мастером необходимо драться дважды (во второй раз в конце игры). Логично предположить, что обе битвы будут озаглавлены Маркерами с Заметками, содержащими имя робота и слова "boss" или "fight", или что-то в этом духе. В результате, когда Курсор Проигрывателя находится на одном из этих двух мест, нажатие кнопки </span><span class="rvts32">Similar</span><span class="rvts22"> перебросит вас к другому.</span></p>
<p class="rvps10"><span class="rvts22">В этом примере нужные слова при написании Заметки нашлись автоматически, и они достаточно уникальны, чтобы не повторяться в других местах мувика (по крайней мере не в том же наборе слов), поэтому автопоиск сработает идеально. В каком-нибудь другом примере, возможно, придётся специально придумывать уникальное слово-метку, но чаще всего будет достаточно первого пришедшего в голову описания происходящей в игре ситуации.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/find-note.png"></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/find-note.png"/></p>
<p class="rvps10"><span class="rvts22">В некоторых случаях может пригодиться ручной поиск текста в Заметках. Например, полезно в ходе ТАСинга оставлять в некоторых местах Заметку со словом "TODO" (или что-нибудь подобное) там, где нет уверенности, что найдено окончательное решение задачи (самый оптимальный Ввод на участке). И когда у вас появится настроение провести работу над ошибками, можно будет пройтись по всем Маркерам с этим тегом, вызвав окно Find Note (</span><span class="rvts34">Ctrl + F</span><span class="rvts22">) и введя слово "TODO" для поиска.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если вам не нравится вся эта затея с Маркерами, вы вполне можете обойтись без них. В конце концов, большинство игр ставят перед ТАСером довольно простые задачи, которые не требуют высокоорганизованного подхода к процессу решения. Если задачу можно решить с наскока, конечно, не нужно тратить время на подготовку и укрепление позиций. Маркеры дают примущества в долгосрочных целях, а не в краткосрочных.</span></p>
<p class="rvps10"><span class="rvts22">Поэтому, как и в программировании, в большинстве случаев вы можете успешно писать так называемый "грязный код" (в нашем случае это мувик без Маркеров и Заметок), который быстро создаётся, но плохо поддерживается и расширяется. Либо вы можете создавать любовно оформленный проект, который приятно просматривать и модифицировать.</span></p>
<p class="rvps10"><span class="rvts22">Только важно понимать, что модифицировать свой мувик в попытках побить вчерашний рекорд ТАСерам приходится очень часто, поэтому затраты сегодняшнего времени на оформление проекта завтра могут окупиться тем, что сам внешний вид проекта мотивирует продолжать над ним работу.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="UsingLua"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">4. Использование Lua</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">На языке Lua можно писать скрипты, исполняемые эмулятором FCEUX одновременно с эмуляцией игры. Для написания скриптов требуются минимальные навыки программирования, при этом спектр доступных возможностей чрезвычайно широк. Можно создавать собственные инструменты для ТАСинга, модифицировать игру во время её исполнения, получать доступ к изображению и звуку на лету, передавать данные по сети или записывать на диск и т.д. А также с помощью Lua-скриптов можно писать расширения для Тасэдитора.</span></p>
<p class="rvps10"><span class="rvts22">Для полного освоения языка Lua потребуется прочесть его документацию, однако для простых скриптов будет достаточно чтения этого Руководства, а также </span><a class="rvts28" href="http://www.fceux.com/web/help/fceux.html?LuaScripting.html" target="_blank">раздела о Lua в Документации FCEUX</a><span class="rvts22">. Для начала попробуйте запустить примеры чужих скриптов, созданные ТАСерами для FCEUX. Они находятся в подпапке </span><span class="rvts21">/luaScripts</span><span class="rvts22">. Каждый скрипт представляет собой текстовый файл с расширением </span><span class="rvts21">.lua</span><span class="rvts22">, который можно создавать и редактировать в любом текстовом редакторе. Перед запуском скриптов нужно открыть ROM любой игры. Чтобы запустить скрипт, нужно открыть Lua-консоль (</span><span class="rvts26">File -&gt; Lua -&gt; New Lua Script Window</span><span class="rvts22">), в появившемся окне нажать кнопку </span><span class="rvts32">Browse</span><span class="rvts22"> и загрузить желаемый скрипт, затем нажать кнопку </span><span class="rvts32">Run</span><span class="rvts22">. Если эмулятор при этом стоит на паузе, требуется либо снять паузу на короткое время, либо сделать Frame Advance, чтобы скрипт начал работать. А саму Lua-консоль можно скрыть, чтобы не загораживала экран.</span></p>
<p class="rvps10"><span class="rvts22">Программный код в Lua-скриптах для FCEUX обычно делится на две части одна часть скрипта выполняется сразу в момент запуска скрипта, другая выполняется при наступлении определённых событий, таких как окончание эмуляции очередного кадра, загрузка или создание сэйва и т.д.</span></p>
<p class="rvps10"><span class="rvts22">Та часть кода, которая исполняется в момент запуска скрипта, обычно выполняется однократно (если, конечно, вы не организовали бесконечный цикл). Код выполняется построчно, сверху вниз. Чаще всего основная задача этой части кода инициализировать глобальные переменные и зарегистрировать функции, которые затем будут автоматически запускаться эмулятором FCEUX при наступлении определённых событий. В этих функциях (чаще всего в одной функции) обычно и задаётся код основных действий скрипта.</span></p>
<p class="rvps10"><span class="rvts22">Например, так может выглядеть код рисования хитбокса Марио для игры SMB:</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="98%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid;"><p class="rvps2"><span class="rvts55">marioWidth = 16</span></p>
<p class="rvps2"><span class="rvts55">marioHeight = 32</span></p>
<p class="rvps2"><span class="rvts55"><br></span></p>
<p class="rvps2"><span class="rvts55"><br/></span></p>
<p class="rvps2"><span class="rvts55">function everyframe()</span></p>
<p class="rvps2"><span class="rvts55"></span><span class="rvts55"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts55">marioX = memory.readbyte(0x3AD)</span></p>
<p class="rvps2"><span class="rvts55"></span><span class="rvts55"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts55">marioY = memory.readbyte(0xCE)</span></p>
<p class="rvps2"><span class="rvts55"></span><span class="rvts55"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts55">gui.drawbox(marioX, marioY, marioX + marioWidth, marioY + marioHeight)</span></p>
<p class="rvps2"><span class="rvts55">end</span></p>
<p class="rvps2"><span class="rvts55"><br></span></p>
<p class="rvps2"><span class="rvts55"><br/></span></p>
<p class="rvps2"><span class="rvts55">emu.registerafter(everyframe)</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При запуске этого скрипта FCEUX создаст и инициализирует две переменные marioWidth и marioHeight, а затем зарегистрирует функцию everyframe() на событие окончания каждого кадра (registerafter). После этого текст в скрипте заканчивается, и скрипт перестаёт выполняться, однако зарегистрированная функция остаётся в памяти эмулятора, и если теперь вы отпустите паузу или начнёте нажимать </span><span class="rvts27">Frame Advance</span><span class="rvts22">, после каждого кадра будет запускаться код из функции everyframe(). Этот код состоит из трёх строк первые две создают переменные, отвечающие за координаты хитбокса, и инициализируют их значениями из оперативной памяти (RAM) эмулируемой приставки.</span></p>
<p class="rvps10"><span class="rvts22">Конкретные адреса ячеек оперативной памяти можно взять из публичных источников (например, </span><a class="rvts28" href="http://tasvideos.org/GameResources/NES/SuperMarioBros.html" target="_blank">http://tasvideos.org/GameResources/NES/SuperMarioBros.html</a><span class="rvts22">) или найти самостоятельно методом отсеивания с помощью инструмента Cheat Search, встроенного в FCEUX. В данном случае нам известно, что по адресу </span><span class="rvts55">0x3AD </span><span class="rvts22">в игре хранится координата X Марио, а по адресу </span><span class="rvts55">0xCE</span><span class="rvts22"> координата Y. Поэтому от скрипта требуется только взять эти значения и нарисовать прямоугольник на соответствующем месте экрана.</span></p>
<p class="rvps10"><span class="rvts22">Про функции readbyte() и drawbox(), а также про другие полезные функции написано в </span><a class="rvts28" href="http://www.fceux.com/web/help/fceux.html?LuaFunctionsList.html" target="_blank">документации эмулятора FCEUX</a><span class="rvts22">. Про функции, доступные при запущенном Тасэдиторе, написано в </span><a class="rvts28" href="LuaAPI.html">Справочнике</a><span class="rvts22">. Используя эти знания, можно не только рисовать и выводить надписи поверх экрана приставки, но и контролировать Курсор Проигрывателя и Выделение, а главное манипулировать Вводом и Маркерами мувика.</span></p>
<p class="rvps10"><span class="rvts22">Например, так может выглядеть код, копирующий Ввод первого джойстика на место второго джойстика:</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="98%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid;"><p class="rvps2"><span class="rvts55">function doCopy()</span></p>
@ -188,30 +187,30 @@
<p class="rvps2"><span class="rvts55"></span><span class="rvts55"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts55"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts55">taseditor.applyinputchanges("Copy 1P-&gt;2P")</span></p>
<p class="rvps2"><span class="rvts55"></span><span class="rvts55"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts55">end</span></p>
<p class="rvps2"><span class="rvts55">end</span></p>
<p class="rvps2"><span class="rvts55"><br></span></p>
<p class="rvps2"><span class="rvts55"><br/></span></p>
<p class="rvps2"><span class="rvts55">taseditor.registermanual(doCopy, "Copy 1P to 2P")</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При запуске этого скрипта FCEUX зарегистрирует функцию doCopy() на событие нажатия кнопки </span><span class="rvts32">Run function</span><span class="rvts22">(registermanual). Теперь при каждом нажатии этой кнопки будет запускаться код этой функции, который состоит из девяти строк. Сначала функция получает от тасэдитора информацию о Выделении, и если оно не пустое (то есть выделен хотя бы один кадр в Piano Roll), то запускается цикл "for", перебирающий все выделенные кадры по порядку, начиная с первого и заканчивая последним. Для каждого выделенного кадра функция запрашивает у Тасэдитора Ввод первого игрока (и сохраняет в переменную </span><span class="rvts55">joypad1data</span><span class="rvts22">), затем делает заявку на изменение Ввода второго игрока в этом же кадре. Все заявки накапливаются в памяти Тасэдитора до завершения цикла for, после чего они все разом исполняются с помощью вызова applyinputchanges(). В итоге Ввод второго джойстика в выделенных кадрах будет совпадать с Вводом первого джойстика.</span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/lua-run-manual.png"></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/lua-run-manual.png"/></p>
<p class="rvps10"><span class="rvts22">Этот весьма простой скрипт уже представляет из себя полезный инструмент, который может пригодиться вам при создании ТАСов &nbsp;с управлением двумя игроками одновременно. После запуска этого скрипта вы во время ТАСинга сможете выделять в Piano Roll ряд кадров и нажимать кнопку </span><span class="rvts32">Run function</span><span class="rvts22"> (или хоткей "</span><span class="rvts26">Run Manual Lua function</span><span class="rvts22">") для синхронизации обоих игроков. Когда в результате действий этого скрипта изменится Ввод, произойдёт естественное усечение Гринзоны и добавление записи в Журнал Истории, чтобы при необходимости вы могли откатить произведённые скриптом изменения. Таким образом вы получаете полностью интегрированную в Тасэдитор фичу, логику которой запрограммировали сами.</span></p>
<p class="rvps10"><span class="rvts22">Хотя вы можете успешно ТАСить и без знания языка Lua, его использование может значительно сэкономить вам время и даже натолкнуть на неочевидные решения при оптимизации Ввода и анализе игрового Вывода.</span></p>
<p class="rvps10"><span class="rvts22">Очень часто игра скрывает от игрока существенные детали происходящего, и ТАСеру приходится просматривать состояние памяти напрямую, чтобы ориентироваться в ситуации и ощущать факторы оптимальности во время шлифовки участков. Например, во многих играх счётчик жизней босса не показывается на экране. Поэтому, чтобы точно знать данные о нанесении урона, ТАСеру необходимо просматривать числовое значение соответствующей ячейки RAM с помощью инструмента Memory Watch.</span></p>
<p class="rvps10"><span class="rvts22">А когда таких скрытых факторов много (например, несколько таймеров неуязвимости и атак босса, а также особые счётчики самого игрового персонажа), ТАСеру приходится просматривать и анализировать множество ячеек памяти, значения которых колеблются по разнообразным законам. В этом случае большим подспорьем будет визуализация некоторых данных на экране эмулятора, а не только в виде чисел в окне Memory Watch. Например, счётчик жизней босса можно изобразить в виде полоски над его головой (используя тот же метод drawbox), причём цвет полоски может быть индикатором нанесения урона или ещё каких-нибудь событий. В результате вы неплохо разгружаете голову, переходя от формата данных, который требуется переваривать, к формату, который сразу доводит основную мысль (например, "удар по боссу сработал").</span></p>
<p class="rvps10"><span class="rvts22">Поэтому рекомендуется освоить Lua хотя бы на уровне осмысленной модификации чужих скриптов. За время существования FCEUX было написано и опубликовано множество скриптов, выполняющих самые разные цели, и возможно, вам потребуется только изменить в чужом скрипте адреса ячеек RAM, подстроив его под свою игру. В некоторых случаях имеет смысл попросить помощи на </span><a class="rvts28" href="http://tasvideos.org/forum/viewforum.php?f=25" target="_blank">форуме TASVideos</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Курс по изучению Тасэдитора подошёл к концу. Если вы добросовестно подошли к чтению, теперь вы знаете почти всё, что нужно знать ТАСеру. Осталось лишь набраться опыта в реальной работе, довести большинство действий до автоматизма, чтобы не чувствовать рутину, а просто получать удовольствие от процесса вооружённого прохождения и исследования видеоигр.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring environment</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Курс для новичка</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,36 +49,36 @@
<div id="topic_content">
<p><span class="rvts20">Курс для новичка</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Эта часть документации представлена в виде учебника по ТАСингу.</span></p>
<p class="rvps10"><span class="rvts22">Здесь изложены принципы практического использования Тасэдитора. Также здесь систематизируются знания, накопленные в сообществе ТАСеров, и объясняется суть общепринятых методов ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22">Курс будет полезен как людям, не имеющим представления о ТАСинге, так и опытным ТАСерам, желающим освоить новейшие разработки в этой сфере, а также структурировать и усовершенствовать свои знания.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts24" href="Introduction.html">Введение</a></p>
<p class="rvps12"><span class="rvts25">Общая характеристика TAS Editor и цели его создания</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts24" href="ProgramInterface.html">Интерфейс программы</a></p>
<p class="rvps12"><span class="rvts25">Обучение основам взаимодействия пользователя с программой</span></p>
<p class="rvps10"><a class="rvts24" href="Navigation.html"><br></a></p>
<p class="rvps10"><a class="rvts24" href="Navigation.html"><br/></a></p>
<p class="rvps10"><a class="rvts24" href="TASingProcess.html">Процесс ТАСинга</a></p>
<p class="rvps12"><span class="rvts25">Авторское видение грамотного рабочего процесса</span></p>
<p class="rvps10"><a class="rvts24" href="Operations.html"><br></a></p>
<p class="rvps10"><a class="rvts24" href="Operations.html"><br/></a></p>
<p class="rvps10"><a class="rvts24" href="TASingMethodology.html">Методология ТАСинга</a></p>
<p class="rvps12"><span class="rvts25">Описание методов эффективного редактирования Ввода</span></p>
<p class="rvps10"><a class="rvts24" href="LuaAPI.html"><br></a></p>
<p class="rvps10"><a class="rvts24" href="LuaAPI.html"><br/></a></p>
<p class="rvps10"><a class="rvts24" href="ProgramCustomization.html">Настройка программы</a></p>
<p class="rvps12"><span class="rvts25">Детальный обзор всех настроек</span></p>
<p class="rvps10"><span class="rvts24"><br></span></p>
<p class="rvps10"><span class="rvts24"><br/></span></p>
<p class="rvps10"><a class="rvts24" href="AdvancedFeatures.html">Продвинутые возможности</a></p>
<p class="rvps12"><span class="rvts25">Описание приёмов работы, не попавших в предыдущие главы</span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Full featured Kindle eBooks generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Управление</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,272 +53,255 @@
<div id="topic_content">
<p><span class="rvts20">Управление</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор управляется с помощью </span><a class="rvts28" href="Controls.html#mouse">мыши</a><span class="rvts22"> и </span><a class="rvts28" href="Controls.html#keyboard">клавиатуры</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Для каждой операции в Тасэдиторе существует несколько вариантов её осуществления (через меню, либо с помощью хоткея, либо с помощью элемента оконного интерфейса).</span></p>
<p class="rvps10"><span class="rvts22">С помощью одной мыши можно совершить практически</span><span class="rvts22"> л</span><span class="rvts22">юбое действие, но некоторые функции быстрее запускаются с помощью клавиатуры. </span><span class="rvts22">В данном Руководстве подразумевается, что правая рука пользователя всё время управляет мышью, а левая рука лежит на клавиатуре, периодически зажимая </span><span class="rvts34">Shift</span><span class="rvts22">/</span><span class="rvts34">Ctrl</span><span class="rvts22">/</span><span class="rvts34">Alt</span><span class="rvts22"> или нажимая комбинацию клавиш.</span></p>
<p class="rvps10"><span class="rvts22">Некоторые действия (например, включение/выключение функции "Auto-adjust Input due to lag") можно совершить только с помощью мыши.</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps2"><span class="rvts6"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="mouse"></a>
<span class="rvts6"><br></span></p>
<span class="rvts6"><br/></span></p>
<p><span class="rvts58">Управление мышью</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts56" href="Controls.html#mouseover">наведение курсором</a></p>
<p class="rvps2" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts56" href="Controls.html#leftbutton">левая кнопка</a></p>
<p class="rvps2" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts56" href="Controls.html#rightbutton">правая кнопка</a></p>
<p class="rvps2" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts56" href="Controls.html#middlebutton">средняя кнопка</a></p>
<p class="rvps2" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts56" href="Controls.html#wheel">колесо</a></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps2" style="text-indent: 30px"><a class="rvts56" href="Controls.html#mouseover">наведение курсором</a></li>
<li class="rvps2" style="text-indent: 30px"><a class="rvts56" href="Controls.html#leftbutton">левая кнопка</a></li>
<li class="rvps2" style="text-indent: 30px"><a class="rvts56" href="Controls.html#rightbutton">правая кнопка</a></li>
<li class="rvps2" style="text-indent: 30px"><a class="rvts56" href="Controls.html#middlebutton">средняя кнопка</a></li>
<li class="rvps2" style="text-indent: 30px"><a class="rvts56" href="Controls.html#wheel">колесо</a></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><a name="mouseover"></a>
<span class="rvts6"><br></span></p>
<span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts51">Наведение курсором</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Курсор мыши служит указателем на элементы оконного интерфейса.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">A. </span><span class="rvts37">Отображение скриншотов и описаний для Закладок</span></p>
<p class="rvps10"><span class="rvts22">При наведении курсором мыши на правую половину любой Закладки (в Списке Закладок) появляется скриншот из игры, соответствующий происходящему на экране в кадре Закладки в указанном ответвлении мувика. Под скриншотом появляется текстовое описание (Заметка Маркера в данном ответвлении).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">B. </span><span class="rvts37">Отображение информации о Закладке</span></p>
<p class="rvps10"><span class="rvts22">При наведении курсором мыши на иконку любой Закладки (в Дереве ответвлений) появляется информация об указанном ответвлении, а также появляется скриншот и описание. При наведении на Закладки, не принадлежащие хронологии текущего ответвления, курсор мыши изменяется на стрелку с вопросительным знаком.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">C. </span><span class="rvts37">Подсвечивание кнопок в Заголовке Piano Roll</span></p>
<p class="rvps10"><span class="rvts22">При наведении курсором мыши на любой символ в Заголовке Piano Roll этот символ подсвечивается зелёным светом, если в Piano Roll есть выделенные строки. Свет подсказывает, что можно щёлкнуть по этому символу для изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а или Маркеров в выделенных кадрах.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="leftbutton"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">Левая кнопка</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Левая кнопка выполняет основную роль.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">A. </span><span class="rvts37">Стандартные операции в Windows</span></p>
<p class="rvps10"><span class="rvts22">Большинство элементов окна TAS Editor управляется так же, как в других Windows-программах:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие кнопок в GUI, в том числе щелчки по прогрессбару, по надписи "Bookmarks/Branches" или по "Marker </span><span class="rvts31">N</span><span class="rvts22">" действует в момент нажатия</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">установка/снятие галочек в GUI действует в момент отпускания</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">раскрытие меню программы, выбор команды в меню, установка/снятие галочек в меню</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">скроллинг обозримой области Piano Roll или Журнала Истории с помощью скроллбаров</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">перетаскивание окна TAS Editor и изменение размеров окна</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие кнопок в GUI, в том числе щелчки по прогрессбару, по надписи "Bookmarks/Branches" или по "Marker </span><span class="rvts31">N</span><span class="rvts22">" действует в момент нажатия</span></li>
<li class="rvps15"><span class="rvts22">установка/снятие галочек в GUI действует в момент отпускания</span></li>
<li class="rvps15"><span class="rvts22">раскрытие меню программы, выбор команды в меню, установка/снятие галочек в меню</span></li>
<li class="rvps15"><span class="rvts22">скроллинг обозримой области Piano Roll или Журнала Истории с помощью скроллбаров</span></li>
<li class="rvps15"><span class="rvts22">перетаскивание окна TAS Editor и изменение размеров окна</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">B. </span><span class="rvts37">Управление Курсором Проигрывателя</span></p>
<p class="rvps10"><span class="rvts22">При щелчке левой кнопкой мыши по колонке иконок Piano Roll вы посылаете Курсор Проигрывателя на указанный кадр. Если не отпускать левую кнопку, можно перетаскивать Курсор Проигрывателя вверх и вниз. Можно даже перетаскивать Курсор Проигрывателя на кадры за пределами видимой области Piano Roll, для этого нужно потащить его выше или ниже границ Piano Roll. При этом чем дальше от границы уводится перетаскивающий курсор мыши, тем выше будет скорость перемотки.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">C. </span><span class="rvts37">Выделение строк в Piano Roll</span></p>
<p class="rvps10"><span class="rvts22">Когда вы щёлкаете левой кнопкой мыши по номеру кадра в любой строке Piano Roll, эта строка становится выделенной, а если до этого были выделены какие-либо другие строки, с них выделение снимается. М</span><span class="rvts22">ожно выделить регион кадров, зажав левую кнопку мыши и растянув Выделение вверх или вниз.</span></p>
<p class="rvps10"><span class="rvts22">Если вы хотите вдобавок к новому выделению оставить старое выделение, перед щелчком зажмите клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22">. Так можно выделить несколько непересекающихся участков.</span></p>
<p class="rvps10"><span class="rvts22">Если вместо </span><span class="rvts34">Ctrl</span><span class="rvts22"> зажать перед щелчком </span><span class="rvts34">Shift</span><span class="rvts22">, выделится область кадров от верхнего кадра старого Выделения до места щелчка.</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком зажать </span><span class="rvts34">Alt</span><span class="rvts22">, появится Выделение по шаблону.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">D. </span><span class="rvts37">Установка/снятие Ввода в Piano Roll</span></p>
<p class="rvps10"><span class="rvts22">Навести курсор мыши на нужную ячейку (выбрав пересечение строки нужного кадра со столбцом нужной кнопки) и нажать левую кнопку мыши. </span><span class="rvts22">Ввод</span><span class="rvts22"> изменяется сразу же в момент нажатия. Если в данной клетке не было нажатия, оно устанавливается, если было, то снимается.</span></p>
<p class="rvps10"><span class="rvts22">При этом выбранная строка Piano Roll становится выделенной, а с других строк выделение снимается. Благодаря этой особенности Курсор Выделения всегда появляется там, где редактируется </span><span class="rvts22">Ввод</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком зажать клавишу </span><span class="rvts34">Shift</span><span class="rvts22">, при щелчке изменится состояние указанной кнопки во всех кадрах, начиная с Курсора Выделения и заканчивая кадром щелчка. Состояние Выделения при этом не изменится.</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком зажать клавишу </span><span class="rvts34">Alt</span><span class="rvts22">, </span><span class="rvts22">состояние указанной кнопки во всех кадрах, начиная с Курсора Выделения, будет установлено по шаблону. Состояние Выделения при этом не изменится.</span></p>
<p class="rvps10"><span class="rvts22">Если в настройках установлена галочка </span><a class="rvts28" href="ProgramCustomization.html#DrawInputbydragging">Config -&gt; Draw Input by dragging</a><span class="rvts22">, м</span><span class="rvts22">ожно рисовать и стирать Ввод, </span><span class="rvts22">зажав левую кнопку мыши и</span><span class="rvts22"> перемещая курсор мыши вверх или вниз. Рисование начинается при щелчке по пустой клетке, стирание начинается при щелчке по заполненной клетке. </span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">E. </span><span class="rvts37">Щелчки по кнопкам в Заголовке Piano Roll</span></p>
<p class="rvps10"><span class="rvts22">Если никакие строки Piano Roll не выделены, ничего не произойдёт. Нужно сначала выделить несколько кадров, к ним и будет применена операция при щелчке по Заголовку. Операция выполняется сразу же в момент нажатия левой кнопки.</span></p>
<p class="rvps10"><span class="rvts22">Если в некоторых выделенных кадрах нажатие выбранной кнопки отсутствует, после щелчка нажатия появляются во всех выделенных кадрах.</span></p>
<p class="rvps10"><span class="rvts22">Если же во всех выделенных строках соответствующая кнопка уже нажата, при щелчке все нажатия снимаются.</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком зажать и держать клавишу </span><span class="rvts34">Alt</span><span class="rvts22">, в выделенных кадрах будет установлен </span><span class="rvts22">Ввод</span><span class="rvts22"> по шаблону.</span></p>
<p class="rvps10"><span class="rvts22">Если щёлкать по "Frame#", вместо </span><span class="rvts22">Ввод</span><span class="rvts22">а в Выделении будут установлены или удалены Маркеры.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">F. </span><span class="rvts37">Установка и перетаскивание Маркеров</span></p>
<p class="rvps10"><span class="rvts22">При двойном щелчке по любому номеру кадра в Piano Roll вы устанавливаете на этот кадр Маркер и одновременно начинаете его перетаскивание. При отпускании левой кнопки Маркер физически переносится на кадр, над номером которого он был отпущен. Если отпустить Маркер над колонками </span><span class="rvts22">Ввод</span><span class="rvts22">а, перетаскивание будет отменено, и Маркер останется на старом месте. Если отпустить Маркер прямо над другим Маркером, эти Маркеры будут поменяны местами.</span></p>
<p class="rvps10"><span class="rvts22">Если отпустить Маркер за пределами Piano Roll, этот Маркер будет выброшен. Таким образом, чтобы удалить существующий Маркер, нужно дважды щёлкнуть по нему и перенести его за пределы окна Тасэдитора.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">G. </span><span class="rvts37">Вход/выход из поля редактирования Заметки</span></p>
<p class="rvps10"><span class="rvts22">При щелчке по верхнему или нижнему текстовому полю начинается редактирование Заметки, отображаемой в этом поле в данный момент.</span></p>
<p class="rvps10"><span class="rvts22">Для выхода (с сохранением изменений) нужно щёлкнуть по любому другому элементу окна TAS Editor.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">H. </span><span class="rvts37">Щелчки по Списку Закладок</span></p>
<p class="rvps10"><span class="rvts22">При щелчке по номеру кадра в Списке Закладок (левая половина любой строчки) будет произведён прыжок Курсором Проигрывателя на этот кадр (так называемый "прыжок на Закладку").</span></p>
<p class="rvps10"><span class="rvts22">При щелчке по индикатору времени в Списке Закладок (правая половина любой строчки) будет произведено восстановление состояния мувика из Закладки ("прыжок во времени"), а также </span><span class="rvts22">прыжок Курсором Проигрывателя на кадр Закладки</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Эти операции срабатывают в момент отпускания левой кнопки мыши.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">I. </span><span class="rvts37">Щелчки по Дереву ответвлений</span></p>
<p class="rvps10"><span class="rvts22">При одинарном щелчке по иконке Закладки &nbsp;будет произведён прыжок Курсором Проигрывателя на кадр этой Закладки (так называемый "прыжок на Закладку").</span></p>
<p class="rvps10"><span class="rvts22">При двойном щелчке </span><span class="rvts22">по иконке Закладки </span><span class="rvts22">будет произведено восстановление состояния мувика из этой Закладки ("прыжок во времени"), а также </span><span class="rvts22">прыжок Курсором Проигрывателя на кадр этой Закладки</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Эти операции срабатывают в момент нажатия левой кнопки мыши.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">J. </span><span class="rvts37">Щелчки по Журналу Истории</span></p>
<p class="rvps10"><span class="rvts22">С помощью щелчка левой кнопкой по любой строке в Журнале Истории вы можете вернуть мувик на момент времени, отмеченный в начале указанной строки.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="rightbutton"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">Правая кнопка</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Правая кнопка мыши используется реже, чем левая.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">A. </span><span class="rvts37">Навигация Курсором Проигрывателя с помощью колеса</span></p>
<p class="rvps10"><span class="rvts22">Зажать правую кнопку и вращать колесом мыши вверх/вниз. При этом курсор мыши не обязательно должен находиться над Piano Roll, он может быть на любом пустом месте окна TAS Editor или даже над окном FCEUX.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">B. </span><span class="rvts37">Скроллинг обозримой области Piano Roll</span></p>
<p class="rvps10"><span class="rvts22">Если зажать правую кнопку, когда курсор мыши находится над Piano Roll, можно скроллировать Piano Roll вправо/влево и вверх/вниз простым перемещением мыши за границы Piano Roll. Благодаря этому отпадает необходимость использовать горизонтальный скроллбар Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">C. </span><span class="rvts37">Установка Закладки</span></p>
<p class="rvps10"><span class="rvts22">При щелчке правой кнопкой мыши по Списку Закладок на текущем месте нахождения Курсора Проигрывателя ставится Закладка.</span></p>
<p class="rvps10"><span class="rvts22">Точно так же Закладка устанавливается при </span><span class="rvts22">щелчке </span><span class="rvts22">правой кнопкой </span><span class="rvts22">по иконке этой Закладки в Дереве ответвлений.</span></p>
<p class="rvps10"><span class="rvts22">Эта операция срабатывает в момент отпускания правой кнопки мыши.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">D. </span><span class="rvts37">Контекстное меню</span></p>
<p class="rvps10"><span class="rvts22">Когда курсор мыши находится над номером выделенного кадра (в колонке "Frame#" Списка Piano Roll), щелчок правой кнопкой вызывает контекстное меню. Меню появляется в момент отпускания правой кнопки мыши. Если щёлкнуть правой кнопкой по не выделенному кадру, ничего не произойдёт.</span></p>
<p class="rvps10"><span class="rvts22">Контекстное меню содержит следующие пункты:</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Set Markers</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Remove Markers</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Deselect</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Select between Markers</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Clear</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Delete</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Insert</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Insert # of Frames</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Clone</span></p>
<p class="rvps22" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts44">Truncate movie</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Set Markers</span></li>
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Remove Markers</span></li>
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Deselect</span></li>
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Select between Markers</span></li>
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Clear</span></li>
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Delete</span></li>
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Insert</span></li>
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Insert # of Frames</span></li>
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Clone</span></li>
<li class="rvps22" style="margin-left: 0; text-indent: 30px"><span class="rvts44">Truncate movie</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Также свои контекстные меню есть у текстовых полей (при редактировании Заметок) и у скроллбаров.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="middlebutton"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">Средняя кнопка</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">У средней кнопки мыши есть только одна функция ставить и снимать паузу эмуляции. Не имеет значения, где находится курсор мыши в момент щелчка средней кнопкой.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Когда эмулятор стоит на паузе, нажатие средней кнопки снимет паузу (аналогично нажатию хоткея </span><span class="rvts27">Pause</span><span class="rvts22">). Более того, если в Piano Roll есть зелёная стрелка, при щелчке по средней кнопке запустится добегание к зелёной стрелке (аналогично нажатию хоткея </span><span class="rvts27">Restore Playback</span><span class="rvts22">).</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком зажать клавишу </span><span class="rvts34">Shift</span><span class="rvts22">, запустится добегание к ближайшему Маркеру.</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком зажать клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22">, запустится добегание к Курсору Выделения (если он расположен ниже Курсора Проигрывателя) или же начнётся повторный просмотр участка, начиная с Курсора Выделения (если он расположен выше Курсора Проигрывателя).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Когда эмулятор не стоит на паузе, нажатие средней кнопки поставит его на паузу.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В современных компьютерных мышках средней кнопкой является её колесо.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="wheel"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">Колесо</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Колесо можно вращать вверх и вниз с различной скоростью. Когда требуется высокая точность, вращайте колесо медленно. Когда требуется быстрое перемещение, вращайте колесо быстро.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">A. </span><span class="rvts37">Скроллинг обозримой области Piano Roll</span></p>
<p class="rvps10"><span class="rvts22">Если курсор мыши при вращении колеса находится над Журналом Истории, то осуществляется скроллинг Журнала Истории. Во всех остальных случаях осуществляется скроллинг Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">B. </span><span class="rvts37">Навигация Курсором Проигрывателя</span></p>
<p class="rvps10"><span class="rvts22">Зажать правую кнопку и вращать колесом мыши. Курсор Проигрывателя будет перемещаться в соответствии с вращением колеса, одновременно прокручивая на экране FCEUX события игры в ту или иную сторону.</span></p>
<p class="rvps10"><span class="rvts22">Чтобы всегда видеть текущее положение голубого курсора в Piano Roll, нужно установить галочку "Follow cursor" в разделе Playback.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">C. </span><span class="rvts37">Прыжки по Маркерам</span></p>
<p class="rvps10"><span class="rvts22">Аналогично кнопкам </span><span class="rvts32">&lt;&lt;</span><span class="rvts22"> и </span><span class="rvts32">&gt;&gt;</span><span class="rvts22">, а также хоткеям </span><span class="rvts34">Ctrl</span><span class="rvts22">/</span><span class="rvts34">Shift</span><span class="rvts22"> + </span><span class="rvts34">Page Up</span><span class="rvts22">/</span><span class="rvts34">Page Down</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если зажать клавишу </span><span class="rvts34">Shift</span><span class="rvts22">, при прокручивании колеса Курсор Проигрывателя будет прыгать по Маркерам, позволяя быстро перейти к любому кадру Гринзоны. Piano Roll будет следовать за Курсором Проигрывателя, если установлена галочка "Follow cursor".</span></p>
<p class="rvps10"><span class="rvts22">Если зажать клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22">, при прокручивании колеса Курсор Выделения будет прыгать по Маркерам, позволяя быстро перейти к любому кадру мувика. Piano Roll всегда будет следовать за Курсором Выделения.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">D. </span><span class="rvts37">Пересечение промежутков во Вводе или Маркерах</span></p>
<p class="rvps10"><span class="rvts22">Зажать клавишу </span><span class="rvts34">Alt</span><span class="rvts22">, навести курсор мыши на середину длинного ряда кнопочных нажатий (или, наоборот, на пустоту) и сделать одинарный поворот колеса вверх или вниз. Piano Roll проскроллируется соответственно вверх или вниз на некое количество кадров, рассчитав расстояние так, чтобы курсор мыши указывал на кадр перед началом или после окончания этого длинного ряда кнопочных нажатий (или на начало/окончание пустоты). После этого можно либо дорисовать продолжение этого ряда, либо укоротить ряд.</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps2"><span class="rvts6"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="keyboard"></a>
<span class="rvts6"><br></span></p>
<span class="rvts6"><br/></span></p>
<p><span class="rvts58">Управление клавиатурой</span></p>
<p class="rvps2"><span class="rvts39"><br></span></p>
<p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/keyboard-all-keys.png"></p>
<p class="rvps5"><span class="rvts39"><br></span></p>
<p class="rvps2" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts56" href="Controls.html#modifiers">модификаторы (Shift, Ctrl и Alt)</a></p>
<p class="rvps2" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts56" href="Controls.html#accelerators">клавиатурные акселераторы</a></p>
<p class="rvps2" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts56" href="Controls.html#hotkeys">хоткеи FCEUX</a></p>
<p class="rvps2" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts56" href="Controls.html#virtual_joypad">кнопки виртуальных джойстиков</a></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts39"><br/></span></p>
<p class="rvps5"><img alt="" style="padding : 1px;" src="lib/keyboard-all-keys.png"/></p>
<p class="rvps5"><span class="rvts39"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps2" style="text-indent: 30px"><a class="rvts56" href="Controls.html#modifiers">модификаторы (Shift, Ctrl и Alt)</a></li>
<li class="rvps2" style="text-indent: 30px"><a class="rvts56" href="Controls.html#accelerators">клавиатурные акселераторы</a></li>
<li class="rvps2" style="text-indent: 30px"><a class="rvts56" href="Controls.html#hotkeys">хоткеи FCEUX</a></li>
<li class="rvps2" style="text-indent: 30px"><a class="rvts56" href="Controls.html#virtual_joypad">кнопки виртуальных джойстиков</a></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><a name="modifiers"></a>
<span class="rvts6"><br></span></p>
<span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts51">Модификаторы (Shift, Ctrl и Alt)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Зажатие этих клавиш изменяет функции щелчка левой кнопкой мыши, а также функции вращения колеса.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Shift</span><span class="rvts22"> отвечает за выделение региона кадров, а также за навигацию Курсором Проигрывателя.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Ctrl</span><span class="rvts22"> отвечает за выделение добавочных кадров, а также за навигацию Курсором Выделения.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Alt</span><span class="rvts22"> отвечает за генерацию </span><span class="rvts22">Ввод</span><span class="rvts22">а/Маркеров/выделения по шаблону, а также за пересечение промежутков колесом.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts34">Shift</span><span class="rvts22"> отвечает за выделение региона кадров, а также за навигацию Курсором Проигрывателя.</span></li>
<li class="rvps15"><span class="rvts34">Ctrl</span><span class="rvts22"> отвечает за выделение добавочных кадров, а также за навигацию Курсором Выделения.</span></li>
<li class="rvps15"><span class="rvts34">Alt</span><span class="rvts22"> отвечает за генерацию </span><span class="rvts22">Ввод</span><span class="rvts22">а/Маркеров/выделения по шаблону, а также за пересечение промежутков колесом.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если быстро нажать </span><span class="rvts34">Shift </span><span class="rvts22">два раза подряд, Piano Roll </span><span class="rvts22">автоматически скроллируется к Курсору Проигрывателя.</span></p>
<p class="rvps10"><span class="rvts22">Если быстро нажать </span><span class="rvts34">Ctrl </span><span class="rvts22">два раза подряд, Piano Roll </span><span class="rvts22">автоматически скроллируется к Курсору Выделения.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Во время рисования/стирания Ввода зажатие клавиши </span><span class="rvts34">Shift </span><span class="rvts22">позволяет рисовать в произвольных столбцах, а не только в одном.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="accelerators"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">Клавиатурные акселераторы</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Это жёстко определённые комбинации клавиш, типичные для большинства Windows-программ. В данном руководстве эти комбинации отмечаются красным цветом.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps18"><img border="0" alt hspace="1" vspace="1" src="lib/keyboard-accelerator-keys.png"></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps18"><img alt="" style="padding : 1px;" src="lib/keyboard-accelerator-keys.png"/></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts34">Ctrl + S</span><span class="rvts22"> = сохранить проект на диск</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Z</span><span class="rvts22"> = откат последнего изменения (undo)</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Y</span><span class="rvts22"> = возврат к отменённым изменениям (redo)</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Q</span><span class="rvts22"> = восстановление предыдущего Выделения (selection undo)</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + W</span><span class="rvts22"> = восстановление следующего Выделения (selection redo)</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + A</span><span class="rvts22"> = выделить все кадры между двумя соседними Маркерами</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + B</span><span class="rvts22"> = выделить участок, ранее скопированный в Буфер Обмена</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts34">Ctrl + C</span><span class="rvts22"> = копировать выделенный </span><span class="rvts22">Ввод</span><span class="rvts22"> в Буфер Обмена</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + X</span><span class="rvts22"> = вырезать выделенный </span><span class="rvts22">Ввод</span><span class="rvts22"> в Буфер Обмена</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + V</span><span class="rvts22"> = вставить </span><span class="rvts22">Ввод</span><span class="rvts22"> из Буфера Обмена поверх старого </span><span class="rvts22">Ввод</span><span class="rvts22">а</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + </span><span class="rvts34">Shift + V</span><span class="rvts22"> = вставить </span><span class="rvts22">Ввод</span><span class="rvts22"> из Буфера Обмена с раздвиганием старого </span><span class="rvts22">Ввод</span><span class="rvts22">а</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts34">Delete</span><span class="rvts22"> = очистить выделенный </span><span class="rvts22">Ввод</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Delete</span><span class="rvts22"> = удалить выделенные кадры из мувика</span></p>
<p class="rvps10"><span class="rvts34">Insert</span><span class="rvts22"> = вставить заданное число кадров в мувик</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Insert</span><span class="rvts22"> = клонировать выделенные кадры</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + </span><span class="rvts34">Shift + Insert</span><span class="rvts22"> = вставить пустые кадры на место выделения</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts34">Ctrl + F</span><span class="rvts22"> = вызвать окно Find Note</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts34">Ctrl + PageUp</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + </span><span class="rvts34">Page</span><span class="rvts34">Down</span><span class="rvts22"> = прыгать Курсором Выделения по Маркерам</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Home</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + </span><span class="rvts34">End</span><span class="rvts22"> </span><span class="rvts22">=</span><span class="rvts22"> </span><span class="rvts22">переместить Выделение</span><span class="rvts22"> </span><span class="rvts22">в начало / в конец мувика</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Вверх</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Вниз</span><span class="rvts22"> = переместить Выделение на 1 кадр выше / ниже</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Вправо</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Влево</span><span class="rvts22"> = скроллировать Piano Roll вправо и влево</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts34">Shift + </span><span class="rvts34">Page</span><span class="rvts34">Up</span><span class="rvts22"> / </span><span class="rvts34">Shift + </span><span class="rvts34">PageD</span><span class="rvts34">own</span><span class="rvts22"> </span><span class="rvts22">=</span><span class="rvts22"> прыгать Курсором Проигрывателя по Маркерам</span></p>
<p class="rvps10"><span class="rvts34">Shift + Home</span><span class="rvts22"> / </span><span class="rvts34">Shift + </span><span class="rvts34">End</span><span class="rvts22"> </span><span class="rvts22">=</span><span class="rvts22"> прыгать Курсором Проигрывателя </span><span class="rvts22">в начало / в конец мувика</span></p>
<p class="rvps10"><span class="rvts34">Shift + Вверх</span><span class="rvts22"> / </span><span class="rvts34">Shift</span><span class="rvts34"> + Вниз</span><span class="rvts22"> = переместить Курсор Проигрывателя на 1 кадр выше / ниже</span></p>
<p class="rvps10"><span class="rvts34">Shift + Вправо</span><span class="rvts22"> / </span><span class="rvts34">Shift</span><span class="rvts34"> + Влево</span><span class="rvts22"> = скроллировать Piano Roll вправо и влево</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts34">PageUp</span><span class="rvts22"> / </span><span class="rvts34">Page</span><span class="rvts34">Down</span><span class="rvts22"> = скроллировать Piano Roll постранично вверх / вниз</span></p>
<p class="rvps10"><span class="rvts34">Home</span><span class="rvts22"> / </span><span class="rvts34">End</span><span class="rvts22"> = скроллировать Piano Roll в начало / в конец мувика</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="hotkeys"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">Хоткеи FCEUX</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Настраиваемые клавиши эмулятора. См. главу </span><a class="rvts28" href="ProgramCustomization.html">Настройка программы</a><span class="rvts22">. </span><span class="rvts22">Клавиши, уже настроенные по умолчанию, в данном Руководстве отмечаются голубым цветом.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps18"><img border="0" alt hspace="1" vspace="1" src="lib/keyboard-hotkeys.png"></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps18"><img alt="" style="padding : 1px;" src="lib/keyboard-hotkeys.png"/></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts27">Ctrl + F1</span><span class="rvts22"> = открыть последний проект</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts27">Pause</span><span class="rvts22"> = пауза эмулятора</span></p>
<p class="rvps10"><span class="rvts27">Esc</span><span class="rvts22"> = отменить добегание</span></p>
<p class="rvps10"><span class="rvts27">Пробел</span><span class="rvts22"> = восстановить позицию Курсора Проигрывателя</span></p>
@ -326,253 +309,167 @@
<p class="rvps10"><span class="rvts27">\</span><span class="rvts22"> (обратная косая черта) = </span><span class="rvts27">Frame Advance</span><span class="rvts22"> (продвинуться на 1 кадр вперёд)</span></p>
<p class="rvps10"><span class="rvts27">Backspace </span><span class="rvts22">= перемотать на 1 кадр назад</span></p>
<p class="rvps10"><span class="rvts27">Shift + R</span><span class="rvts22"> = запустить проигрывание мувика с начала</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts27">-</span><span class="rvts22"> (белая клавиша "минус") = снизить скорость эмуляции</span></p>
<p class="rvps10"><span class="rvts27">=</span><span class="rvts22"> (белая клавиша "равно") = повысить скорость эмуляции</span></p>
<p class="rvps10"><span class="rvts27">Tab</span><span class="rvts22"> = Турбо (действует, пока клавиша зажата)</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts27">F1</span><span class="rvts27">-</span><span class="rvts27">F10</span><span class="rvts22"> = загрузка ответвления из Закладки</span></p>
<p class="rvps10"><span class="rvts27">1-0</span><span class="rvts22"> = </span><span class="rvts22">прыжок на Закладку</span></p>
<p class="rvps10"><span class="rvts27">Shift + F1-F10</span><span class="rvts22"> = установить Закладку</span></p>
<p class="rvps10"><span class="rvts27">I </span><span class="rvts22">= сохранить мувик в текущую Закладку-ответвление</span></p>
<p class="rvps10"><span class="rvts27">P</span><span class="rvts22"> = загрузить мувик из текущей Закладки-ответвления</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts27">M</span><span class="rvts22"> = показ счётчика перезаписей</span></p>
<p class="rvps10"><span class="rvts27">, </span><span class="rvts22">(запятая) = показ виртуальных джойстиков</span></p>
<p class="rvps10"><span class="rvts27">. </span><span class="rvts22">(точка) = показ счётчика кадров</span></p>
<p class="rvps10"><span class="rvts27">/ </span><span class="rvts22">(дробь) = показ счётчика лага</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts27">Shift + L</span><span class="rvts22"> = перезагрузить текущий Lua-скрипт</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<p class="rvps10"><span class="rvts27">Q</span><span class="rvts22"> = включение/выключение режима Записи</span></p>
<p class="rvps10"><span class="rvts27">W</span><span class="rvts22"> = переключение текущего джойстика для записи методом мультитрекинга</span></p>
<p class="rvps10"><span class="rvts27">Ctrl + R</span><span class="rvts22"> = команда Reset</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Полный список хоткеев FCEUX, работающих при запущенном Тасэдиторе:</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Power</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Reset</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Pause</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Frame Advance</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Screenshot</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Exit</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Slowest Speed</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Speed Down</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Normal Speed</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Speed Up</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Turbo</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Turbo Toggle</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 0</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 1</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 2</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 3</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 4</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 5</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 6</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 7</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 8</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 9</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts59">Next Savestate Slot</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts59">Previous Savestate Slot</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 0</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 1</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 2</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 3</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 4</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 5</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 6</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 7</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 8</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 9</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 0</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 1</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 2</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 3</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 4</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 5</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 6</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 7</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 8</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 9</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Play Movie From Beginning</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Toggle Read-Only</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Toggle Frame Display</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Toggle Input Display</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Toggle Status Icon</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Reload current Lua script</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Sound Mute Toggle</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Sound Volume Up</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Sound Volume Down</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Sound Volume Normal</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Record AVI As...</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Stop AVI</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Eject or Insert FDS Disk</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Switch FDS Disk Side</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Use Input Preset 1</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Use Input Preset 2</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Use Input Preset 3</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Toggle Background Display</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Toggle Object Display</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Lag Counter Toggle</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open Memory Watch</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open Cheats</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open Debugger</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open Hex Editor</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open PPU Viewer</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open Name Table Viewer</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open Trace Logger</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open Code/Data Logger</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Frame Adv.-Skip Lag</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Reload ROM or TAS Editor Project</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Toggle Movie Subtitles</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open Ram Watch</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Open Ram Search</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Toggle Rerecord Display</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Frame Rewind</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Restore Playback</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Cancel Seeking</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Switch Auto-restore last position</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Switch current Multitracking mode</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts47">Run Manual Lua function</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts57"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts47">Power</span></li>
<li class="rvps15"><span class="rvts27">Reset</span></li>
<li class="rvps15"><span class="rvts27">Pause</span></li>
<li class="rvps15"><span class="rvts27">Frame Advance</span></li>
<li class="rvps15"><span class="rvts47">Screenshot</span></li>
<li class="rvps15"><span class="rvts47">Exit</span></li>
<li class="rvps15"><span class="rvts47">Slowest Speed</span></li>
<li class="rvps15"><span class="rvts27">Speed Down</span></li>
<li class="rvps15"><span class="rvts47">Normal Speed</span></li>
<li class="rvps15"><span class="rvts27">Speed Up</span></li>
<li class="rvps15"><span class="rvts27">Turbo</span></li>
<li class="rvps15"><span class="rvts47">Turbo Toggle</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 0</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 1</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 2</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 3</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 4</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 5</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 6</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 7</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 8</span></li>
<li class="rvps15"><span class="rvts27">Savestate Slot 9</span></li>
<li class="rvps15"><span class="rvts59">Next Savestate Slot</span></li>
<li class="rvps15"><span class="rvts59">Previous Savestate Slot</span></li>
<li class="rvps15"><span class="rvts27">Save State</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 0</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 1</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 2</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 3</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 4</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 5</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 6</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 7</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 8</span></li>
<li class="rvps15"><span class="rvts27">Save State to Slot 9</span></li>
<li class="rvps15"><span class="rvts27">Load State</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 0</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 1</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 2</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 3</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 4</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 5</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 6</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 7</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 8</span></li>
<li class="rvps15"><span class="rvts27">Load State from Slot 9</span></li>
<li class="rvps15"><span class="rvts27">Play Movie From Beginning</span></li>
<li class="rvps15"><span class="rvts27">Toggle Read-Only</span></li>
<li class="rvps15"><span class="rvts27">Toggle Frame Display</span></li>
<li class="rvps15"><span class="rvts27">Toggle Input Display</span></li>
<li class="rvps15"><span class="rvts47">Toggle Status Icon</span></li>
<li class="rvps15"><span class="rvts27">Reload current Lua script</span></li>
<li class="rvps15"><span class="rvts47">Sound Mute Toggle</span></li>
<li class="rvps15"><span class="rvts47">Sound Volume Up</span></li>
<li class="rvps15"><span class="rvts47">Sound Volume Down</span></li>
<li class="rvps15"><span class="rvts47">Sound Volume Normal</span></li>
<li class="rvps15"><span class="rvts47">Record AVI As...</span></li>
<li class="rvps15"><span class="rvts47">Stop AVI</span></li>
<li class="rvps15"><span class="rvts47">Eject or Insert FDS Disk</span></li>
<li class="rvps15"><span class="rvts47">Switch FDS Disk Side</span></li>
<li class="rvps15"><span class="rvts47">Use Input Preset 1</span></li>
<li class="rvps15"><span class="rvts47">Use Input Preset 2</span></li>
<li class="rvps15"><span class="rvts47">Use Input Preset 3</span></li>
<li class="rvps15"><span class="rvts47">Toggle Background Display</span></li>
<li class="rvps15"><span class="rvts47">Toggle Object Display</span></li>
<li class="rvps15"><span class="rvts27">Lag Counter Toggle</span></li>
<li class="rvps15"><span class="rvts47">Open Memory Watch</span></li>
<li class="rvps15"><span class="rvts47">Open Cheats</span></li>
<li class="rvps15"><span class="rvts47">Open Debugger</span></li>
<li class="rvps15"><span class="rvts47">Open Hex Editor</span></li>
<li class="rvps15"><span class="rvts47">Open PPU Viewer</span></li>
<li class="rvps15"><span class="rvts47">Open Name Table Viewer</span></li>
<li class="rvps15"><span class="rvts47">Open Trace Logger</span></li>
<li class="rvps15"><span class="rvts47">Open Code/Data Logger</span></li>
<li class="rvps15"><span class="rvts47">Frame Adv.-Skip Lag</span></li>
<li class="rvps15"><span class="rvts27">Reload ROM or TAS Editor Project</span></li>
<li class="rvps15"><span class="rvts47">Toggle Movie Subtitles</span></li>
<li class="rvps15"><span class="rvts47">Open Ram Watch</span></li>
<li class="rvps15"><span class="rvts47">Open Ram Search</span></li>
<li class="rvps15"><span class="rvts27">Toggle Rerecord Display</span></li>
<li class="rvps15"><span class="rvts27">Frame Rewind</span></li>
<li class="rvps15"><span class="rvts27">Restore Playback</span></li>
<li class="rvps15"><span class="rvts27">Cancel Seeking</span></li>
<li class="rvps15"><span class="rvts27">Switch Auto-restore last position</span></li>
<li class="rvps15"><span class="rvts27">Switch current Multitracking mode</span></li>
<li class="rvps15"><span class="rvts47">Run Manual Lua function</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Остальные хоткеи FCEUX не будут работать при запущенном Тасэдиторе (см. главу </span><a class="rvts28" href="MistakeProofing.html">Защита от ошибок</a><span class="rvts22">).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="virtual_joypad"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">Кнопки виртуальных джойстиков</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Аналоги кнопок настоящего геймпада приставки, настраиваемые либо на клавиши клавиатуры, либо на кнопки реального джойстика. См. главу </span><a class="rvts28" href="ProgramCustomization.html#fceux-config">Настройка программы</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если вам нужно помимо кнопок джойстика ещё вводить команды приставки, используйте меню FCEUX или хоткеи:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">NES -&gt; Reset или хоткей "</span><span class="rvts27">Reset</span><span class="rvts22">" (по умолчанию </span><span class="rvts27">Ctrl + R</span><span class="rvts22">) для команды "Сброс"</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">NES -&gt; Power или хоткей "</span><span class="rvts45">Power</span><span class="rvts22">" для команды "Включение" (в реальной работе не требуется)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">NES -&gt; Eject/Insert Disk или хоткей "</span><span class="rvts45">Eject or Insert FDS Disk</span><span class="rvts22">" для команды "Вытащить/Вставить диск" (актуально только для Famicom Disk System)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">NES -&gt; Switch Disk Side или хоткей "</span><span class="rvts45">Switch FDS Disk Side</span><span class="rvts22">" для команды "Поменять сторону диска" (актуально только для Famicom Disk System)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">NES -&gt; Reset или хоткей "</span><span class="rvts27">Reset</span><span class="rvts22">" (по умолчанию </span><span class="rvts27">Ctrl + R</span><span class="rvts22">) для команды "Сброс"</span></li>
<li class="rvps15"><span class="rvts22">NES -&gt; Power или хоткей "</span><span class="rvts45">Power</span><span class="rvts22">" для команды "Включение" (в реальной работе не требуется)</span></li>
<li class="rvps15"><span class="rvts22">NES -&gt; Eject/Insert Disk или хоткей "</span><span class="rvts45">Eject or Insert FDS Disk</span><span class="rvts22">" для команды "Вытащить/Вставить диск" (актуально только для Famicom Disk System)</span></li>
<li class="rvps15"><span class="rvts22">NES -&gt; Switch Disk Side или хоткей "</span><span class="rvts45">Switch FDS Disk Side</span><span class="rvts22">" для команды "Поменять сторону диска" (актуально только для Famicom Disk System)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Эти команды срабатывают только в режиме Записи, причём для отображения результата на экране FCEUX необходимо после запуска команды (например, после нажатия </span><span class="rvts27">Ctrl + R</span><span class="rvts22">) ещё дополнительно нажать </span><span class="rvts27">Frame Advance </span><span class="rvts22">либо отпустить паузу эмулятора, чтобы впечатать команду в мувик.</span></p>
<p class="rvps10"><span class="rvts22">Так как в TAS Editor 1.0 в Piano Roll нет колонок, отображающих записанные нажатия команд, рекомендуется сразу же после записи команды ставить на этот кадр Маркер с Заметкой о наличии здесь команды.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="notes"></a>
<span class="rvts6"><br></span></p>
<span class="rvts6"><br/></span></p>
<p><span class="rvts58">Управление при редактировании Заметок</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">При редактировании Заметок клавиатура используется для печатания текста.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">1. Следующие акселераторы действуют иначе:</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + A</span><span class="rvts22"> выделяет весь текст Заметки</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Z</span><span class="rvts22"> откатывает последний введённый символ</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + X</span><span class="rvts22">, </span><span class="rvts34">Ctrl + C</span><span class="rvts22">, </span><span class="rvts34">Ctrl + V</span><span class="rvts22"> копипаст текста</span></p>
<p class="rvps10"><span class="rvts34">Delete</span><span class="rvts22"> удаляет выделенный текст или один символ после курсора</span></p>
<p class="rvps10"><span class="rvts34">Home</span><span class="rvts22">/</span><span class="rvts34">End</span><span class="rvts22"> перемещают курсор в начало и конец текста</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">2. Хоткеи FCEUX вообще не действуют.</span></p>
<p class="rvps10"><span class="rvts27">Backspace</span><span class="rvts22"> удаление символа перед курсором</span></p>
<p class="rvps10"><span class="rvts27">Esc</span><span class="rvts22"> выход из режима редактирования без сохранения изменений</span></p>
<p class="rvps10"><span class="rvts27">Tab</span><span class="rvts22"> переключение между нижним и верхним полем</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">4. Кнопки виртуальных джойстиков не действуют (но будут действовать в том случае, если в настройках FCEUX стоит галочка Config -&gt; Enable -&gt; Background Input).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">5. Управление мышью остаётся без изменений. Щелчок за пределами поля редактирования завершает редактирование Заметки, сохраняя изменения. Также, если во время редактирования увести соответствующий курсор из области редактируемого Маркера, изменения сохранятся, и начнётся редактирование Заметки другого Маркера.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Full featured Kindle eBooks generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Ответы на вопросы</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,59 +53,57 @@
<div id="topic_content">
<p><span class="rvts20">Ответы на вопросы</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">Здесь подобран ряд вопросов, которые могут возникнуть у вас при работе с Тасэдитором даже после прочтения </span><a class="rvts28" href="BeginnersGuide.html">Курса для новичка</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если у вас возникнет вопрос, на который вы не смогли найти ответ в данном Руководстве, задайте этот вопрос на форуме </span><a class="rvts28" href="http://tasvideos.org/forum/index.php" target="_blank">TASVideos</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Что делать, если обнаружился баг или странное поведение Тасэдитора?</span></p>
<p class="rvps10"><span class="rvts22">Сообщите об этом в </span><a class="rvts28" href="http://tasvideos.org/forum/viewforum.php?f=15" target="_blank">разделе FCEUX</a><span class="rvts22"> форума TASVideos. Постарайтесь сформулировать суть проблемы максимально точно, чтобы автор мог смоделировать проблемную ситуацию. Приложите скриншот, если суть проблемы наглядно отражается на экране.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Можно ли использовать Тасэдитор для других эмуляторов?</span></p>
<p class="rvps10"><span class="rvts22">Нет. Несмотря на то, что программный код Тасэдитора достаточно изолирован от кода эмулятора FCEUX, он всё же не является плагином или фронтендом. Поэтому понадобится вручную портировать исходный код Тасэдитора, при необходимости дорабатывая его в соответствии с особенностями конкретных эмулируемых платформ.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Как использовать Тасэдитор для традиционного метода ТАСинга?</span></p>
<p class="rvps10"><span class="rvts22">Вы можете использовать этот метод сразу же, без дополнительных настроек. Однако, если вам морально требуются некоторые ограничения старого подхода (без которых вы чувствуете себя неуютно), можно сделать следующее:</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">установить галочку </span><a class="rvts28" href="ProgramCustomization.html#OldcontrolschemeforBranching">Config -&gt; Old control scheme for Branching</a></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">снять галочку </span><a class="rvts28" href="ProgramCustomization.html#BranchesrestoreentireMovie">Config -&gt; Branches restore entire Movie</a></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">установить галочку </span><a class="rvts28" href="ProgramCustomization.html#CombineconsecutiveRecordings">Config -&gt; Combine consecutive Recordings/Draws</a></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">снять галочку </span><a class="rvts28" href="ProgramCustomization.html#UseInputkeysforColumnSet">Config -&gt; Use Input keys for Column Set</a></p>
<ul style="text-indent: 25px; margin-left: 5px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">установить галочку </span><a class="rvts28" href="ProgramCustomization.html#OldcontrolschemeforBranching">Config -&gt; Old control scheme for Branching</a></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">снять галочку </span><a class="rvts28" href="ProgramCustomization.html#BranchesrestoreentireMovie">Config -&gt; Branches restore entire Movie</a></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">установить галочку </span><a class="rvts28" href="ProgramCustomization.html#CombineconsecutiveRecordings">Config -&gt; Combine consecutive Recordings/Draws</a></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">снять галочку </span><a class="rvts28" href="ProgramCustomization.html#UseInputkeysforColumnSet">Config -&gt; Use Input keys for Column Set</a></li>
</ul>
<p class="rvps10"><span class="rvts22">Также рекомендуется переключить Список закладок в вид Дерева ответвлений.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Почему не работает меню по правой кнопке в окне FCEUX?</span></p>
<p class="rvps10"><span class="rvts22">Это сделано специально для удобства </span><a class="rvts28" href="Navigation.html#rewinding-by-wheel">навигации Курсором Проигрывателя</a><a class="rvts28" href="Navigation.html#rewinding-by-wheel"> с помощью колеса мыши</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Замечено, что курсор мыши зачастую движется синхронно с взглядом человека, работающего за компьютером. Поэтому при просмотре изображения на экране FCEUX курсор мыши будет нередко находиться в рамках окна FCEUX, и при зажимании правой кнопки мыши (для перемотки колесом) контекстное меню будет загораживать часть экрана и раздражать. Так как в этом меню нет никаких существенных пунктов, решено было его убрать.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Почему иногда при щелчке правой кнопкой по Piano Roll появляется контекстное меню, а иногда не появляется?</span></p>
<p class="rvps10"><span class="rvts22">Контекстное меню появляется при щелчке правой кнопкой мыши по номеру любого выделенного кадра. Если щёлкнуть по не выделенному кадру или по ячейке Ввода, меню не появится. Это сделано для удобства перетаскивания содержимого Piano Roll (особенно для скроллинга по горизонтали) с помощью щелчка и зажимания правой кнопки.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется вместо использования контекстного меню применять клавиатурные комбинации и другие более быстрые способы доступа к функциям Тасэдитора.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Почему сразу после остановки под Курсором Проигрывателя был зелёный кадр без лага, а после отжатия паузы там оказался красный?</span></p>
<p class="rvps10"><span class="rvts22">Информация о лаге появляется у эмулятора только после завершения эмуляции кадра (при переходе на следующий кадр). Курсор Проигрывателя указывает на текущий кадр, и в это время эмулятор обладает информацией о лаге предыдущего кадра, а о лаге текущего кадра ещё ничего не знает. Поэтому кадр в голове Гринзоны всегда рисуется зелёным цветом (если отодвинуть с него Курсор Проигрывателя).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Почему при ручном откате операций "AdjustLag" в Тасэдиторе может самопроизвольно происходить повторное срабатывание этой операции?</span></p>
<p class="rvps10"><span class="rvts22">Если вы одновременно с галочкой "Auto-adjust Input due to lag" включили функцию "Auto-restore last position", Тасэдитор будет заново эмулировать участок сразу же после отката Журнала Истории (например, нажатия </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">), а во время эмуляции работает функция авто-подгонки Ввода по лагу.</span></p>
<p class="rvps10"><span class="rvts22">Поэтому в случаях, когда требуется откатить изменения с помощью Журнала Истории, рекомендуется отключать либо галочку "Auto-adjust Input due to lag", либо "Auto-restore last position", чтобы не возникал конфликт этих трёх функций.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Как вставить в мувик команду Сброса?</span></p>
<p class="rvps10"><span class="rvts22">Поставить Курсор Проигрывателя на нужный кадр, включить режим Записи, выбрать в меню FCEUX пункт </span><span class="rvts26">NES -&gt; Reset </span><span class="rvts22">и нажать </span><span class="rvts27">Frame Advance</span><span class="rvts22">. Затем рекомендуется поставить на этот кадр Маркер, так как в Piano Roll нет колонок Ввода для команд Reset/Power и т.д. После этого можно выключить режим Записи и продолжить редактирование Мувика. Кадр с записанным Сбросом можно сдвигать вниз/вверх с помощью вставки/удаления пустых строк перед этим кадром.</span></p>
<p class="rvps10"><span class="rvts22">Точно так же записываются остальные команды приставки. Подробнее см. </span><a class="rvts28" href="Controls.html#virtual_joypad">Управление</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Почему fm3-файлы занимают так много места?</span></p>
<p class="rvps10"><span class="rvts22">В fm3-файле обычно сохраняется мгновенный снимок рабочего процесса ТАСера, в том числе вся Гринзона, которая и занимает большую часть файла. Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#ProjectsSharing">Продвинутые возможности</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Почему в этом Руководстве так много текста?</span></p>
<p class="rvps10"><span class="rvts22">Помимо сухого перечисления спецификаций здесь находится обучающий Курс, в котором систематизируются принципы эффективного подхода к ТАСингу. Ранее не существовало попыток сформулировать ТАСерский опыт в виде учебника. Поэтому автор посчитал, что многословность является меньшим злом, чем возможная неточность изложения.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Формат FM3</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -51,335 +51,313 @@
<div id="topic_content">
<p><span class="rvts20">Формат FM3</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">Формат FM3 является расширенной версией старого формата FM2. В FM2 хранятся данные, необходимые для воспроизведения мувика, а FM3 добавляет к ним данные о состоянии рабочего процесса в Тасэдиторе.</span></p>
<p class="rvps10"><span class="rvts22">Спецификации формата FM2 можно прочитать в Справке FCEUX, а также </span><a class="rvts28" href="http://www.fceux.com/web/FM2.html" target="_blank">на официальном сайте эмулятора</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Любой FM3-файл состоит из трёх частей:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts28" href="FM3format.html#Header">Заголовок</a><span class="rvts22"> (как в fm2)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts28" href="FM3format.html#InputLog">Журнал Ввода</a><span class="rvts22"> (как в fm2)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts28" href="FM3format.html#TaseditorData">Данные Тасэдитора</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><a class="rvts28" href="FM3format.html#Header">Заголовок</a><span class="rvts22"> (как в fm2)</span></li>
<li class="rvps10"><a class="rvts28" href="FM3format.html#InputLog">Журнал Ввода</a><span class="rvts22"> (как в fm2)</span></li>
<li class="rvps10"><a class="rvts28" href="FM3format.html#TaseditorData">Данные Тасэдитора</a></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="Header"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Заголовок</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Заголовок хранится в текстовом формате, в кодировке ASCII.</span></p>
<p class="rvps10"><span class="rvts22">Он состоит из нескольких строк вида "ключевое слово + значение".</span></p>
<p class="rvps10"><span class="rvts22">Символом перевода строки может быть как </span><span class="rvts74">\r\n</span><span class="rvts22">, так и </span><span class="rvts74">\n</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если в начале очередной строки идёт символ "|" (вертикальная черта), это значит, что Заголовок закончился, и начался Журнал Ввода.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В начале каждой строки Заголовка находится ключевое слово, после которого стоит пробел, а затем идёт текстовое представление значения.</span></p>
<p class="rvps10"><span class="rvts22">В первой строке Заголовка должно идти ключевое слово </span><span class="rvts26">version</span><span class="rvts22">, остальные ключевые слова могут располагаться в какой угодно последовательности.</span></p>
<p class="rvps10"><span class="rvts22">Значение заканчивается переводом строки.</span></p>
<p class="rvps10"><span class="rvts22">Значение следует разбирать в зависимости от ключевого слова либо как целочисленное значение, либо как строку текста.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts37">Список ключевых слов с целочисленным значением:</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">(включая значения для переменных типа Boolean, где 1 = </span><span class="rvts74">true</span><span class="rvts22">, 0 = </span><span class="rvts74">false</span><span class="rvts22">)</span></p>
<p class="rvps10"><span class="rvts22">(числовое значение должно умещаться в переменную типа </span><span class="rvts74">int32</span><span class="rvts22">)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">version</span><span class="rvts22"> (наличие обязательно) номер версии формата мувика; на данный момент это </span><span class="rvts26">3</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">emuVersion</span><span class="rvts22"> (обязательно) версия эмулятора, в котором был создан этот файл (например, </span><span class="rvts26">21060</span><span class="rvts22">)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">rerecordCount</span><span class="rvts22"> (наличие не обязательно) счётчик перезаписей</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">palFlag</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) (не обязательно) </span><span class="rvts74">true</span><span class="rvts22">, если мувик использует тайминг PAL, а по умолчанию используется NTSC</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">NewPPU</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) (не обязательно) </span><span class="rvts74">true</span><span class="rvts22">, если мувик использует New PPU</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">FDS</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) (не обязательно) </span><span class="rvts74">true</span><span class="rvts22">, если мувик создан для игры с Famicom Disk System</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">fourscore</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) </span><span class="rvts74">true</span><span class="rvts22">, если мувик создан с использованием устройства fourscore. Если fourscore не использовалось, то в Заголовке обязательно наличие значений для ключевых слов </span><span class="rvts26">port0</span><span class="rvts22"> и </span><span class="rvts26">port1</span><span class="rvts22">.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">port0</span><span class="rvts22"> тип устройства ввода, настроенного на порт 0 приставки. Возможны следующие значения:</span></p>
<p class="rvps15" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_NONE = 0 (ничего не подключено)</span></p>
<p class="rvps15" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_GAMEPAD = 1 (подключен стандартный геймпад NES)</span></p>
<p class="rvps15" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_ZAPPER = 2 (подключен пистолет)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">port1</span><span class="rvts22"> тип устройства ввода, настроенного на порт 1 приставки. Возможны следующие значения:</span></p>
<p class="rvps15" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_NONE = 0 (ничего не подключено)</span></p>
<p class="rvps15" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_GAMEPAD = 1 (подключен стандартный геймпад NES)</span></p>
<p class="rvps15" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_ZAPPER = 2 (подключен пистолет)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">port2</span><span class="rvts22"> (обязательно) тип устройства ввода, настроенного на порт FCExp приставки. Возможны следующие значения:</span></p>
<p class="rvps15" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SIFC_NONE = 0 (ничего не подключено)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">binary</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) (не обязательно) </span><span class="rvts74">true</span><span class="rvts22">, если Журнал Ввода сохранён в двоичном формате. FM2-файлы обычно хранят Ввод в текстовом формате, чтобы его было удобно редактировать в текстовых редакторах. FM3-файлы обычно хранят Ввод в двоичном формате, чтобы сэкономить место на диске</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">length</span><span class="rvts22"> (обязательно для fm3) размер мувика (количество кадров в сохранённом Журнале Ввода). Если в Заголовке есть это ключевое слово, и его значение &gt;= 0, то Журнал Ввода оканчивается после означенного количества записей, а затем следуют данные Тасэдитора. Именно наличие этого ключевого слова в Заголовке отличает FM3-файлы от FM2-файлов.</span></p>
<p class="rvps15"><span class="rvts22"><br></span></p>
<p class="rvps15"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts26">version</span><span class="rvts22"> (наличие обязательно) номер версии формата мувика; на данный момент это </span><span class="rvts26">3</span></li>
<li class="rvps15"><span class="rvts26">emuVersion</span><span class="rvts22"> (обязательно) версия эмулятора, в котором был создан этот файл (например, </span><span class="rvts26">21060</span><span class="rvts22">)</span></li>
<li class="rvps15"><span class="rvts26">rerecordCount</span><span class="rvts22"> (наличие не обязательно) счётчик перезаписей</span></li>
<li class="rvps15"><span class="rvts26">palFlag</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) (не обязательно) </span><span class="rvts74">true</span><span class="rvts22">, если мувик использует тайминг PAL, а по умолчанию используется NTSC</span></li>
<li class="rvps15"><span class="rvts26">NewPPU</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) (не обязательно) </span><span class="rvts74">true</span><span class="rvts22">, если мувик использует New PPU</span></li>
<li class="rvps15"><span class="rvts26">FDS</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) (не обязательно) </span><span class="rvts74">true</span><span class="rvts22">, если мувик создан для игры с Famicom Disk System</span></li>
<li class="rvps15"><span class="rvts26">fourscore</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) </span><span class="rvts74">true</span><span class="rvts22">, если мувик создан с использованием устройства fourscore. Если fourscore не использовалось, то в Заголовке обязательно наличие значений для ключевых слов </span><span class="rvts26">port0</span><span class="rvts22"> и </span><span class="rvts26">port1</span><span class="rvts22">.</span></li>
<li class="rvps15"><span class="rvts26">port0</span><span class="rvts22"> тип устройства ввода, настроенного на порт 0 приставки. Возможны следующие значения:</span></li>
</ul>
<ul style="text-indent: 60px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 60px"><span class="rvts22">SI_NONE = 0 (ничего не подключено)</span></li>
<li class="rvps15" style="text-indent: 60px"><span class="rvts22">SI_GAMEPAD = 1 (подключен стандартный геймпад NES)</span></li>
<li class="rvps15" style="text-indent: 60px"><span class="rvts22">SI_ZAPPER = 2 (подключен пистолет)</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts26">port1</span><span class="rvts22"> тип устройства ввода, настроенного на порт 1 приставки. Возможны следующие значения:</span></li>
</ul>
<ul style="text-indent: 60px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 60px"><span class="rvts22">SI_NONE = 0 (ничего не подключено)</span></li>
<li class="rvps15" style="text-indent: 60px"><span class="rvts22">SI_GAMEPAD = 1 (подключен стандартный геймпад NES)</span></li>
<li class="rvps15" style="text-indent: 60px"><span class="rvts22">SI_ZAPPER = 2 (подключен пистолет)</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts26">port2</span><span class="rvts22"> (обязательно) тип устройства ввода, настроенного на порт FCExp приставки. Возможны следующие значения:</span></li>
</ul>
<ul style="text-indent: 60px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 60px"><span class="rvts22">SIFC_NONE = 0 (ничего не подключено)</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts26">binary</span><span class="rvts22"> (</span><span class="rvts74">bool</span><span class="rvts22">) (не обязательно) </span><span class="rvts74">true</span><span class="rvts22">, если Журнал Ввода сохранён в двоичном формате. FM2-файлы обычно хранят Ввод в текстовом формате, чтобы его было удобно редактировать в текстовых редакторах. FM3-файлы обычно хранят Ввод в двоичном формате, чтобы сэкономить место на диске</span></li>
<li class="rvps15"><span class="rvts26">length</span><span class="rvts22"> (обязательно для fm3) размер мувика (количество кадров в сохранённом Журнале Ввода). Если в Заголовке есть это ключевое слово, и его значение &gt;= 0, то Журнал Ввода оканчивается после означенного количества записей, а затем следуют данные Тасэдитора. Именно наличие этого ключевого слова в Заголовке отличает FM3-файлы от FM2-файлов.</span></li>
</ul>
<p class="rvps15"><span class="rvts22"><br/></span></p>
<p class="rvps15"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts37">Список ключевых слов со строковым значением:</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">(эти строки не могут содержать символ перевода строки, так как он служит индикатором окончания значения)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">romFilename</span><span class="rvts22"> (обязательно) имя файла, использованного при создании проекта</span></p>
<p class="rvps10"><span class="rvts26">romChecksum</span><span class="rvts22"> (обязательно) MD5-чексумма РОМа, использованного при создании мувика</span></p>
<p class="rvps10"><span class="rvts26">comment</span><span class="rvts22"> (не обязательно) комментарий. По традиции автор мувика обозначается комментарием вида "author имя". Пример: "comment author AnS"</span></p>
<p class="rvps10"><span class="rvts26">subtitle</span><span class="rvts22"> (не обязательно) сообщение, которое будет выводиться на экран эмулятора во время проигрывания этого мувика. Сразу после слова subtitle через пробел должно следовать целочисленное значение, определяющее номер кадра, на котором должно появиться сообщение. После этого числа через пробел следует текст выводимого сообщения. Пример: "subtitle 100 Level Two" на сотом кадре мувика появится сообщение "Level Two"</span></p>
<p class="rvps10"><span class="rvts26">guid</span><span class="rvts22"> (обязательно) уникальный идентификатор мувика, сгенерированный при его создании</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="InputLog"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Журнал Ввода</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Журнал Ввода состоит из последовательности записей о состоянии Ввода на каждом кадре мувика. Эти записи могут храниться в виде текстовых строк или в виде двоичных данных.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts37">Текстовый формат:</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Каждый кадр мувика представлен текстовой строкой, в начале и конце которой находится символ "|".</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если не используется fourscore, строка имеет следующий вид:</span></p>
<p class="rvps10"><span class="rvts26">|команды|port0|port1|port2|</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В поле </span><span class="rvts26">команды</span><span class="rvts22"> должно находиться десятичное целое число, интерпретируемое как битовая карта состояний команд приставки:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 0 (значение числа = 1) Сброс</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 1 (значение числа = 2) Power</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 2 (значение числа = 4) Eject/Insert Disk</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 3 (значение числа = 8) Switch Disk Side</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">бит 0 (значение числа = 1) Сброс</span></li>
<li class="rvps10"><span class="rvts22">бит 1 (значение числа = 2) Power</span></li>
<li class="rvps10"><span class="rvts22">бит 2 (значение числа = 4) Eject/Insert Disk</span></li>
<li class="rvps10"><span class="rvts22">бит 3 (значение числа = 8) Switch Disk Side</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Формат полей </span><span class="rvts26">port0</span><span class="rvts22">, </span><span class="rvts26">port1 </span><span class="rvts22">и </span><span class="rvts26">port2 </span><span class="rvts22">зависит от типа устройства ввода, настроенного на данный порт.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_NONE: поле должно быть пустым</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_GAMEPAD: Поле состоит из восьми текстовых символов, соответствующих восьми кнопкам джойстика. Если символ равен " " (пробел) или "." (точка), это означает, что соответствующая кнопка на данном кадре отпущена. Любой другой символ означает, что соответствующая кнопка на данном кадре нажата. Для простоты запоминания, какой столбец какой кнопке соответствует, рекомендуется использовать символы в следующей последовательности: RLDUTSBA (</span><span class="rvts32">Вправо</span><span class="rvts22">, </span><span class="rvts32">Влево</span><span class="rvts22">, </span><span class="rvts32">Вниз</span><span class="rvts22">, </span><span class="rvts32">Вверх</span><span class="rvts22">, </span><span class="rvts32">Start</span><span class="rvts22">, </span><span class="rvts32">Select</span><span class="rvts22">, </span><span class="rvts32">B</span><span class="rvts22">, </span><span class="rvts32">A</span><span class="rvts22">).</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_ZAPPER: Поле состоит из последовательности текстовых символов вида </span><span class="rvts26">XXX YYY B Q Z</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">XXX</span><span class="rvts22">: %03d координата X мыши</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">YYY</span><span class="rvts22">: %03d координата Y мыши</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">B</span><span class="rvts22">: %1d 1 = кнопка мыши нажата, 0 = не нажата</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">Q</span><span class="rvts22">: %1d значение, необходимое для эмуляции пистолета</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts26">Z</span><span class="rvts22">: %d значение, необходимое для эмуляции пистолета, количество разрядов у этого числа может варьироваться</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">SI_NONE: поле должно быть пустым</span></li>
<li class="rvps10"><span class="rvts22">SI_GAMEPAD: Поле состоит из восьми текстовых символов, соответствующих восьми кнопкам джойстика. Если символ равен " " (пробел) или "." (точка), это означает, что соответствующая кнопка на данном кадре отпущена. Любой другой символ означает, что соответствующая кнопка на данном кадре нажата. Для простоты запоминания, какой столбец какой кнопке соответствует, рекомендуется использовать символы в следующей последовательности: RLDUTSBA (</span><span class="rvts32">Вправо</span><span class="rvts22">, </span><span class="rvts32">Влево</span><span class="rvts22">, </span><span class="rvts32">Вниз</span><span class="rvts22">, </span><span class="rvts32">Вверх</span><span class="rvts22">, </span><span class="rvts32">Start</span><span class="rvts22">, </span><span class="rvts32">Select</span><span class="rvts22">, </span><span class="rvts32">B</span><span class="rvts22">, </span><span class="rvts32">A</span><span class="rvts22">).</span></li>
<li class="rvps10"><span class="rvts22">SI_ZAPPER: Поле состоит из последовательности текстовых символов вида </span><span class="rvts26">XXX YYY B Q Z</span></li>
</ul>
<ul style="text-indent: 60px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10" style="text-indent: 60px"><span class="rvts26">XXX</span><span class="rvts22">: %03d координата X мыши</span></li>
<li class="rvps10" style="text-indent: 60px"><span class="rvts26">YYY</span><span class="rvts22">: %03d координата Y мыши</span></li>
<li class="rvps10" style="text-indent: 60px"><span class="rvts26">B</span><span class="rvts22">: %1d 1 = кнопка мыши нажата, 0 = не нажата</span></li>
<li class="rvps10" style="text-indent: 60px"><span class="rvts26">Q</span><span class="rvts22">: %1d значение, необходимое для эмуляции пистолета</span></li>
<li class="rvps10" style="text-indent: 60px"><span class="rvts26">Z</span><span class="rvts22">: %d значение, необходимое для эмуляции пистолета, количество разрядов у этого числа может варьироваться</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если используется fourscore, все устройства ввода считаются геймпадами, и каждая запись представлена строкой вида:</span></p>
<p class="rvps10"><span class="rvts26">|команды|RLDUTSBA|RLDUTSBA|RLDUTSBA|RLDUTSBA|port2|</span></p>
<p class="rvps10"><span class="rvts22">(команды, игрок 1, игрок 2, игрок 3, игрок 4, пустота)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts37">Двоичный формат:</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Перед началом Журнала Ввода располагается символ "|".</span></p>
<p class="rvps10"><span class="rvts22">Каждый кадр мувика представлен записью в виде последовательности байтов. Размер каждой записи одинаков и зависит от устройств ввода, настроенных на порты приставки.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В первом байте каждой записи хранится битовая карта состояний команд приставки:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 0 Сброс</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 1 Power</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 2 Eject/Insert Disk</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 3 Switch Disk Side</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">бит 0 Сброс</span></li>
<li class="rvps10"><span class="rvts22">бит 1 Power</span></li>
<li class="rvps10"><span class="rvts22">бит 2 Eject/Insert Disk</span></li>
<li class="rvps10"><span class="rvts22">бит 3 Switch Disk Side</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если не используется fourscore, остальное содержание записи зависит от устройств ввода, настреонных на порт 0 и порт 1:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_NONE: 0 байтов добавляется к размеру записи</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_GAMEPAD: 1 байт добавляется к размеру записи. Каждый бит этого байта отражает состояние сооветствующей кнопки джойстика (бит 0 = </span><span class="rvts32">A</span><span class="rvts22">, бит 1 = </span><span class="rvts32">B</span><span class="rvts22">, бит 2 = </span><span class="rvts32">Select</span><span class="rvts22">, бит 3 = </span><span class="rvts32">Start</span><span class="rvts22">, бит 4 = </span><span class="rvts32">Вверх</span><span class="rvts22">, бит 5 = </span><span class="rvts32">Вниз</span><span class="rvts22">, бит 6 = </span><span class="rvts32">Влево</span><span class="rvts22">, бит 7 = </span><span class="rvts32">Вправо</span><span class="rvts22">). Если бит установлен, кнопка считается нажатой на данном кадре, иначе она считается отпущенной</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">SI_ZAPPER: 12 байтов добавляется к размеру записи.</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">первый байт </span><span class="rvts26"> </span><span class="rvts22">координата X мыши</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">второй байт координата Y мыши</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">третий байт 1 = кнопка мышки нажата, 0 = не нажата</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">четвёртый байт значение, необходимое для эмуляции пистолета</span></p>
<p class="rvps10" style="text-indent: 60px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">байты с 5-го по 12-й (</span><span class="rvts74">uint64</span><span class="rvts22">) значение, необходимое для эмуляции пистолета</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">SI_NONE: 0 байтов добавляется к размеру записи</span></li>
<li class="rvps10"><span class="rvts22">SI_GAMEPAD: 1 байт добавляется к размеру записи. Каждый бит этого байта отражает состояние сооветствующей кнопки джойстика (бит 0 = </span><span class="rvts32">A</span><span class="rvts22">, бит 1 = </span><span class="rvts32">B</span><span class="rvts22">, бит 2 = </span><span class="rvts32">Select</span><span class="rvts22">, бит 3 = </span><span class="rvts32">Start</span><span class="rvts22">, бит 4 = </span><span class="rvts32">Вверх</span><span class="rvts22">, бит 5 = </span><span class="rvts32">Вниз</span><span class="rvts22">, бит 6 = </span><span class="rvts32">Влево</span><span class="rvts22">, бит 7 = </span><span class="rvts32">Вправо</span><span class="rvts22">). Если бит установлен, кнопка считается нажатой на данном кадре, иначе она считается отпущенной</span></li>
<li class="rvps10"><span class="rvts22">SI_ZAPPER: 12 байтов добавляется к размеру записи.</span></li>
</ul>
<ul style="text-indent: 60px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10" style="text-indent: 60px"><span class="rvts22">первый байт </span><span class="rvts26"> </span><span class="rvts22">координата X мыши</span></li>
<li class="rvps10" style="text-indent: 60px"><span class="rvts22">второй байт координата Y мыши</span></li>
<li class="rvps10" style="text-indent: 60px"><span class="rvts22">третий байт 1 = кнопка мышки нажата, 0 = не нажата</span></li>
<li class="rvps10" style="text-indent: 60px"><span class="rvts22">четвёртый байт значение, необходимое для эмуляции пистолета</span></li>
<li class="rvps10" style="text-indent: 60px"><span class="rvts22">байты с 5-го по 12-й (</span><span class="rvts74">uint64</span><span class="rvts22">) значение, необходимое для эмуляции пистолета</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если используется fourscore, все устройства ввода считаются геймпадами, и к размеру записи добавляется 4 байта. Биты первого байта отражают состояние сооветствующей кнопки первого джойстика (бит 0 = </span><span class="rvts32">A</span><span class="rvts22">, бит 1 = </span><span class="rvts32">B</span><span class="rvts22">, бит 2 = </span><span class="rvts32">Select</span><span class="rvts22">, бит 3 = </span><span class="rvts32">Start</span><span class="rvts22">, бит 4 = </span><span class="rvts32">Вверх</span><span class="rvts22">, бит 5 = </span><span class="rvts32">Вниз</span><span class="rvts22">, бит 6 = </span><span class="rvts32">Влево</span><span class="rvts22">, бит 7 = </span><span class="rvts32">Вправо</span><span class="rvts22">). Биты второго байта отражают состояние сооветствующей кнопки второго джойстика, и т.д.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="TaseditorData"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Данные Тасэдитора</span></p>
<p class="rvps21"><span class="rvts22"><br></span></p>
<div class="rvps21"><div align="center"><table width="450" border="1" cellpadding="0" cellspacing="0" style="border-color: #d3c4af #000000 #000000 #d3c4af; border-style: solid;">
<p class="rvps21"><span class="rvts22"><br/></span></p>
<div class="rvps21"><table width="450" border="1" cellpadding="0" cellspacing="0" style="border-color: #ffffff #000000 #000000 #ffffff; border-style: solid;">
<tr valign="middle">
<td width="104" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">4 байта</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 104px;"><p class="rvps5"><span class="rvts6">4 байта</span></p>
</td>
<td width="146" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">unsigned int32</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 146px;"><p class="rvps5"><span class="rvts6">unsigned int32</span></p>
</td>
<td width="192" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">FM3 version</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 192px;"><p class="rvps5"><span class="rvts6">FM3 version</span></p>
</td>
</tr>
<tr valign="middle">
<td width="104" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">4 байта</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 104px;"><p class="rvps5"><span class="rvts6">4 байта</span></p>
</td>
<td width="146" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">unsigned int32</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 146px;"><p class="rvps5"><span class="rvts6">unsigned int32</span></p>
</td>
<td width="192" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">saved modules</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 192px;"><p class="rvps5"><span class="rvts6">saved modules</span></p>
</td>
</tr>
<tr valign="middle">
<td width="104" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">???</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 104px;"><p class="rvps5"><span class="rvts6">???</span></p>
</td>
<td width="146" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">stream</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 146px;"><p class="rvps5"><span class="rvts6">stream</span></p>
</td>
<td width="192" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">MARKERS DATA</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 192px;"><p class="rvps5"><span class="rvts6">MARKERS DATA</span></p>
</td>
</tr>
<tr valign="middle">
<td width="104" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">???</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 104px;"><p class="rvps5"><span class="rvts6">???</span></p>
</td>
<td width="146" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">stream</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 146px;"><p class="rvps5"><span class="rvts6">stream</span></p>
</td>
<td width="192" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">BOOKMARKS DATA</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 192px;"><p class="rvps5"><span class="rvts6">BOOKMARKS DATA</span></p>
</td>
</tr>
<tr valign="middle">
<td width="104" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">???</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 104px;"><p class="rvps5"><span class="rvts6">???</span></p>
</td>
<td width="146" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">stream</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 146px;"><p class="rvps5"><span class="rvts6">stream</span></p>
</td>
<td width="192" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">GREENZONE DATA</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 192px;"><p class="rvps5"><span class="rvts6">GREENZONE DATA</span></p>
</td>
</tr>
<tr valign="middle">
<td width="104" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">???</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 104px;"><p class="rvps5"><span class="rvts6">???</span></p>
</td>
<td width="146" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">stream</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 146px;"><p class="rvps5"><span class="rvts6">stream</span></p>
</td>
<td width="192" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">HISTORY DATA</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 192px;"><p class="rvps5"><span class="rvts6">HISTORY DATA</span></p>
</td>
</tr>
<tr valign="middle">
<td width="104" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">???</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 104px;"><p class="rvps5"><span class="rvts6">???</span></p>
</td>
<td width="146" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">stream</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 146px;"><p class="rvps5"><span class="rvts6">stream</span></p>
</td>
<td width="192" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">PIANO ROLL DATA</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 192px;"><p class="rvps5"><span class="rvts6">PIANO ROLL DATA</span></p>
</td>
</tr>
<tr valign="middle">
<td width="104" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">???</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 104px;"><p class="rvps5"><span class="rvts6">???</span></p>
</td>
<td width="146" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">stream</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 146px;"><p class="rvps5"><span class="rvts6">stream</span></p>
</td>
<td width="192" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">SELECTION DATA</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 192px;"><p class="rvps5"><span class="rvts6">SELECTION DATA</span></p>
</td>
</tr>
</table>
</div></div>
<p class="rvps21"><span class="rvts22"><br></span></p>
</div>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Данные Тасэдитора начинаются сразу после окончания последней записи в Журнале Ввода. </span></p>
<p class="rvps10"><span class="rvts22">Если во время загрузки fm3-файла сразу после окончания последней записи в Журнале Ввода обнаруживается конец файла, Тасэдитор воспримет этот файл как fm2-файл.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Первые 4 байта данных содержат номер версии формата проекта. Релизная версия TAS Editor 1.0 имеет версию формата под номером 1.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Следующие 4 байта содержат битовую карту, которая может использоваться для определения, какие модули Тасэдитора сохранили свои данные в этот файл:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 0 в файле сохранены Маркеры</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 1 в файле сохранены Закладки</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 2 в файле сохранена вся Гринзона</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 3 в файле сохранен Журнал Истории</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 4 в файле сохранены данные Piano Roll</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">бит 5 в файле сохранена История Выделений</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">бит 0 в файле сохранены Маркеры</span></li>
<li class="rvps10"><span class="rvts22">бит 1 в файле сохранены Закладки</span></li>
<li class="rvps10"><span class="rvts22">бит 2 в файле сохранена вся Гринзона</span></li>
<li class="rvps10"><span class="rvts22">бит 3 в файле сохранен Журнал Истории</span></li>
<li class="rvps10"><span class="rvts22">бит 4 в файле сохранены данные Piano Roll</span></li>
<li class="rvps10"><span class="rvts22">бит 5 в файле сохранена История Выделений</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"> При сохранении проекта Тасэдитор поочерёдно вызывает все модули, требующие сохранения данных. В зависимости от настроек компактного сохранения каждый модуль осуществляет выборочную сериализацию своих данных в файловый поток. Порядок сохранения модулей всегда одинаков (Маркеры, Закладки, Гринзона, История, Piano Roll, Выделение). При загрузке проекта Тасэдитор вызывает модули в той же очерёдности, и они загружают свои данные из файлового потока, перемещая вперёд указатель на текущую позицию в файле.</span></p>
<p class="rvps10"><span class="rvts22">Чтобы оценить целостность загружаемых данных, каждый модуль при сохранении записывает в файл строку-идентификатор своих данных. И если перед началом загрузки своих данных модуль не обнаружит эту строку на текущей позиции в файловом потоке, он откажется от загрузки и создаст данные по умолчанию, передав тасэдитору сообщение об ошибке загрузки. Кроме того, если вместо строки-идентификатора сохранения он обнаружит строку-идентификатор отсутствия данных, он откажется от загрузки и создаст данные по умолчанию, без генерации сообщения об ошибке.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<div class="rvps21"><div align="center"><table width="450" border="1" cellpadding="0" cellspacing="0" style="border-color: #d3c4af #000000 #000000 #d3c4af; border-style: solid;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps21"><table width="450" border="1" cellpadding="0" cellspacing="0" style="border-color: #ffffff #000000 #000000 #ffffff; border-style: solid;">
<tr valign="middle">
<td width="106" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; background-color: #0000ff;"><p class="rvps5"><span class="rvts81">Модуль</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; background-color: #0000ff; width: 106px;"><p class="rvps5"><span class="rvts81">Модуль</span></p>
</td>
<td width="174" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; background-color: #0000ff;"><p class="rvps5"><span class="rvts81">Идентификатор</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; background-color: #0000ff; width: 174px;"><p class="rvps5"><span class="rvts81">Идентификатор</span></p>
<p class="rvps5"><span class="rvts81">сохранённых данных</span></p>
</td>
<td width="162" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; background-color: #0000ff;"><p class="rvps5"><span class="rvts81">Идентификатор</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; background-color: #0000ff; width: 162px;"><p class="rvps5"><span class="rvts81">Идентификатор</span></p>
<p class="rvps5"><span class="rvts81">отсутствия данных</span></p>
</td>
</tr>
<tr valign="middle">
<td width="106" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">Маркеры</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 106px;"><p class="rvps5"><span class="rvts6">Маркеры</span></p>
</td>
<td width="174" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">MARKERS</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 174px;"><p class="rvps5"><span class="rvts6">MARKERS</span></p>
</td>
<td width="162" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">MARKERX</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 162px;"><p class="rvps5"><span class="rvts6">MARKERX</span></p>
</td>
</tr>
<tr valign="middle">
<td width="106" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">Закладки</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 106px;"><p class="rvps5"><span class="rvts6">Закладки</span></p>
</td>
<td width="174" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">BOOKMARKS</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 174px;"><p class="rvps5"><span class="rvts6">BOOKMARKS</span></p>
</td>
<td width="162" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">BOOKMARKX</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 162px;"><p class="rvps5"><span class="rvts6">BOOKMARKX</span></p>
</td>
</tr>
<tr valign="middle">
<td width="106" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">Гринзона</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 106px;"><p class="rvps5"><span class="rvts6">Гринзона</span></p>
</td>
<td width="174" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">GREENZONE</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 174px;"><p class="rvps5"><span class="rvts6">GREENZONE</span></p>
</td>
<td width="162" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">GREENZONX</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 162px;"><p class="rvps5"><span class="rvts6">GREENZONX</span></p>
</td>
</tr>
<tr valign="middle">
<td width="106" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">История</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 106px;"><p class="rvps5"><span class="rvts6">История</span></p>
</td>
<td width="174" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">HISTORY</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 174px;"><p class="rvps5"><span class="rvts6">HISTORY</span></p>
</td>
<td width="162" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">HISTORX</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 162px;"><p class="rvps5"><span class="rvts6">HISTORX</span></p>
</td>
</tr>
<tr valign="middle">
<td width="106" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">Piano Roll</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 106px;"><p class="rvps5"><span class="rvts6">Piano Roll</span></p>
</td>
<td width="174" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">PIANO_ROLL</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 174px;"><p class="rvps5"><span class="rvts6">PIANO_ROLL</span></p>
</td>
<td width="162" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">PIANO_ROLX</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 162px;"><p class="rvps5"><span class="rvts6">PIANO_ROLX</span></p>
</td>
</tr>
<tr valign="middle">
<td width="106" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">Выделение</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 106px;"><p class="rvps5"><span class="rvts6">Выделение</span></p>
</td>
<td width="174" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">SELECTION</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 174px;"><p class="rvps5"><span class="rvts6">SELECTION</span></p>
</td>
<td width="162" style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none;"><p class="rvps5"><span class="rvts6">SELECTIOX</span></p>
<td style="border-color: #000000; border-style: solid; border-right: none; border-bottom: none; width: 162px;"><p class="rvps5"><span class="rvts6">SELECTIOX</span></p>
</td>
</tr>
</table>
</div></div>
<p class="rvps21"><span class="rvts22"><br></span></p>
<p class="rvps21"><span class="rvts22"><br></span></p>
<p class="rvps21"><span class="rvts22"><br></span></p>
<p class="rvps21"><span class="rvts22"><br></span></p>
<p class="rvps21"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
</div>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Глоссарий</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,17 +53,17 @@
<div id="topic_content">
<p><span class="rvts20">Глоссарий</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">Здесь перечислено большинство используемых в данном Руководстве терминов, и приведена их краткая характеристика. Более подробное описание некоторых терминов дано в </span><a class="rvts28" href="BeginnersGuide.html">Курсе новичка</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется сразу прочитать весь глоссарий целиком, так как многие термины тесно связаны друг с другом.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Почти все термины имеют англоязычный первоисточник, так как ТАСерские традиции вырабатывались в среде англоговорящих игроков.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="Input"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/game-player-taser.png"></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/game-player-taser.png"/></p>
<p class="rvps10"><span class="rvts22">Input Ввод</span></p>
<p class="rvps10"><span class="rvts22">Данные о действиях игрока, воспринимаемые игрой и влияющие на её поведение.</span></p>
<p class="rvps10"><span class="rvts22">Из-за многозначности слова "Ввод" среди русскоязычных ТАСеров чаще используется англицизм "Инпут", который можно перевести как "Вводимые данные".</span></p>
@ -71,125 +71,125 @@
<p class="rvps10"><span class="rvts22">Примеры существующих типов Ввода: нажатие кнопки джойстика, наклон аналогового стика, прикосновение стилуса, крик в микрофон и т.д.</span></p>
<p class="rvps10"><span class="rvts22">В Тасэдиторе используется представление Ввода в формате "последовательность кнопочных состояний".</span></p>
<p class="rvps10"><a name="Output"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Output Вывод</span></p>
<p class="rvps10"><span class="rvts22">Данные, выдаваемые игрой в ответ на Ввод игрока.</span></p>
<p class="rvps10"><span class="rvts22">Из-за многозначности слова "Вывод" в данном Руководстве используются слова "результат", "реакция игры" и т.п.</span></p>
<p class="rvps10"><span class="rvts22">Взаимодействие игрока с игрой можно представить в виде схемы, где игрок является субъектом, а игра объектом взаимодействия.</span></p>
<p class="rvps10"><span class="rvts22">Примеры существующих типов Вывода: изображение, звук, вибрация джойстика, изменение просматриваемой ячейки памяти, информация о лаге и т.д.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Walkthrough Прохождение (прохождение видеоигры)</span></p>
<p class="rvps10"><span class="rvts22">Последовательность действий для успешного завершения игры. Эту последовательность игрок вводит в игру для достижения желаемой цели. Последовательность может быть записана вживую (real-time в реальном времени) либо приготовлена в виде воспроизводимых данных (например, журнал нажатых кнопок). Во втором случае эту последовательность можно неоднократно редактировать.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Speedrun Пробег</span></p>
<p class="rvps10"><span class="rvts22">Соревновательное прохождение на скорость. Часто используется англицизм "cпидран".</span></p>
<p class="rvps10"><span class="rvts22">В некоторых играх присутствует встроенный режим под названием "Speedrun" или "Time Attack", при котором игра ведёт учёт затраченного времени на прохождение. Для других игр можно использовать внешний таймер, измеряя время в секундах или TV-кадрах (обычно подразумевается 60 кадров в секунду).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">TAS (Tool-Assisted Superplay / Tool-Assisted Speedrun) ТАС</span></p>
<p class="rvps10"><span class="rvts22">Прохождение, при создании которого были использованы инструменты для редактирования совершаемых действий игрока. Благодаря редактированию можно создавать крайне неординарные прохождения видеоигр.</span></p>
<p class="rvps10"><span class="rvts22">Процесс создания ТАСа называется ТАСингом, а авторы зовутся ТАСерами.</span></p>
<p class="rvps10"><span class="rvts22">Целью ТАСа может быть не только спидран, но и развлекательный видеоролик (playaround).</span></p>
<p class="rvps10"><span class="rvts22">ТАСы распространяются:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">в виде готовых видеороликов с Выводом (youtube, AVI-файлы &nbsp;и т.д.)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">в виде исходных мувиков с Вводом (fm2 и т.д.)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">в виде готовых видеороликов с Выводом (youtube, AVI-файлы &nbsp;и т.д.)</span></li>
<li class="rvps15"><span class="rvts22">в виде исходных мувиков с Вводом (fm2 и т.д.)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Movie Мувик (фильм)</span></p>
<p class="rvps10"><span class="rvts22">Контейнер для хранения Ввода и сопутствующих данных.</span></p>
<p class="rvps10"><span class="rvts22">В отличие от видеороликов, игровой Вывод (изображение и звук) в мувике не хранится, он появляется на экране только в результате применения Ввода мувика к соответствующей игре.</span></p>
<p class="rvps10"><span class="rvts22">Также мувиком называется файл (movie file), в котором хранится Ввод и сопутствующие данные.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Lag Лаг (задержка)</span></p>
<p class="rvps10"><span class="rvts22">Особая ситуация в игре, вызванная повышенной нагрузкой на процессор.</span></p>
<p class="rvps10"><span class="rvts22">Процессор может производить строго фиксированное количество операций в единицу времени (например, за 1 кадр). Но игра пытается имитировать безграничность реальной жизни, поэтому количество взаимодействующих объектов в ней может сильно варьироваться. Как следствие, возможны ситуации, когда обработка объектов занимает больше времени, чем предусмотрено. В таких ситуациях задерживается обработка Ввода и Вывода, что невыгодно при создании спидрана. Поэтому лаг зачастую выступает в качестве одного из факторов оптимальности, который нужно учитывать во время тестирования вариантов Ввода. Обычно требуется минимизировать количество кадров с лагом.</span></p>
<p class="rvps10"><span class="rvts22">Наличие лага в кадре определяется эмулятором после окончания обработки данного кадра. Если во время обработки кадра игра опросила Ввод, считается, что лага в кадре нет. Если игра не опросила Ввод лаг в кадре есть. В Тасэдиторе кадры с лагом отмечаются красными строками. Рисовать Ввод на этих кадрах бесполезно.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Desync Рассинхронизация (расхождение)</span></p>
<p class="rvps10"><span class="rvts22">Отличие Вывода от ожидаемого образца.</span></p>
<p class="rvps10"><span class="rvts22">Может произойти в случае, если Ввод проигрывается на другой игре, другом эмуляторе или с другими настройками синхронизирования. Также может произойти, если эмулятор не обеспечивает детерминизм должным образом.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Segment Участок</span></p>
<p class="rvps10"><span class="rvts22">Условная единица разбиения мувика на логические составляющие.</span></p>
<p class="rvps10"><span class="rvts22">Разбиение мувика на участки это разложение большой задачи на мелкие подзадачи.</span></p>
<p class="rvps10"><span class="rvts22">Границы участка определяются игровыми событиями. Начальное событие отсекает все предыдущие задачи и концентрирует внимание ТАСера на ближайшем наборе условий. Конечное событие служит для оценки оптимальности всех вариантов решения текущей задачи.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="TASingProcess.html">Процесс ТАСинга</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Optimization Оптимизация</span></p>
<p class="rvps10"><span class="rvts22">В ТАСинге: Процесс постепенного улучшения целевых характеристик мувика.</span></p>
<p class="rvps10"><span class="rvts22">Большинство задач в видеоиграх решаются множеством разнообразных способов. У каждого способа есть свои плюсы и минусы. ТАСер перед началом работы выбирает свои цели (например, сделать пацифистский спидран), тем самым расставляя приоритеты среди вышеупомянутых плюсов и минусов. Поэтому любые способы решения можно оценить и сравнить между собой, чтобы определить лучший и худший.</span></p>
<p class="rvps10"><span class="rvts22">Оптимизация ТАСа заключается в редактировании Ввода и оценке получающегося Вывода. Когда ТАСер получает от игры более предпочтительный результат, он оставляет текущий Ввод в качестве основного, пока не найдёт ещё более оптимальный Ввод. В финальном ТАСе для каждой подзадачи оставлен наилучший вариант решения.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="TASingMethodology.html">Методология ТАСинга</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Improvement Улучшение</span></p>
<p class="rvps10"><span class="rvts22">Возможность решить задачу более оптимально. Например, достичь такого же результата с меньшими затратами, или улучшить результат без увеличения затрат.</span></p>
<p class="rvps10"><span class="rvts22">Примеры улучшений в ТАСинге: использование неиспользованного таймсэйвера, повышение эффективности использования таймсэйвера, повышение развлекательности мувика без потери скорости.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Timesaver Таймсэйвер (экономия времени)</span></p>
<p class="rvps10"><span class="rvts22">Жаргонный термин, используемый для обозначения ключевой категории трюков в спидранах.</span></p>
<p class="rvps10"><span class="rvts22">При создании спидрана ТАСеру необходимо использовать все не запрещённые возможности для максимально быстрого прохождения игры. В первую очередь это грамотная шлифовка Ввода, во вторую поиск и применение трюков. ТАСер пытается использовать все известные ему трюки максимально эффективно, чтобы его рекорд скорости нельзя было легко побить.</span></p>
<p class="rvps10"><span class="rvts22">Примеры таймсэйверов: фичи игры, баги игры, манипуляция удачей.</span></p>
<p class="rvps10"><span class="rvts22">Иногда ТАСер сознательно отказывается от использования некоторых таймсэйверов, в этом случае для его ТАСа отводится отдельная категория на сайте. Например: спидран SMB без использования кнопки </span><span class="rvts32">B</span><span class="rvts22"> (отказ от фичи), спидран Sonic the Hedgehog без прохождения сквозь стены (отказ от бага).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Feature Фича (особенность)</span></p>
<p class="rvps10"><span class="rvts22">Запланированный разработчиками аспект игры, который необходимо учитывать в качестве фактора оптимальности при создании Ввода мувика.</span></p>
<p class="rvps10"><span class="rvts22">Некоторые фичи не существенны для простого игрока, но существенны для ТАСера. Поэтому перед оптимизацией Ввода рекомендуется провести исследования игрового движка.</span></p>
<p class="rvps10"><span class="rvts22">Примеры существеных для ТАСера фич: ускорение при ранении (damage boost), вынужденное ожидание при подсчёте очков, наличие субпикселей у координат персонажа, особенности искусственного интеллекта врагов и т.д.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Bug Баг (ошибка)</span></p>
<p class="rvps10"><span class="rvts22">Не запланированный разработчиками аспект игры, который необходимо учитывать в качестве фактора оптимальности при создании Ввода мувика.</span></p>
<p class="rvps10"><span class="rvts22">Баги игры должны быть воспроизводимыми (хотя бы теоретически) на настоящей приставке. Использование багов, специфичных для эмулятора, не разрешается.</span></p>
<p class="rvps10"><span class="rvts22">Многие баги обнаруживаются даже при обычной игре без использования инструментов. Некоторые же требуют тщательного исследования поведения игры и изучения её исполняемого кода.</span></p>
<p class="rvps10"><span class="rvts22">Примеры багов: упрощённая проверка коллизий, отсутствие проверки испорченных данных в сохранении, непредусмотренное изменение ячеек оперативной памяти, ошибка в порядке очерёдности проверок и т.д.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Luck Manipulation Манипуляция удачей</span></p>
<p class="rvps10"><span class="rvts22">Категория трюков, основанных на неограниченной эксплуатации фич, использование которых при нормальной игре сдерживается нехваткой знаний и способностей игрока.</span></p>
<p class="rvps10"><span class="rvts22">По сути любая оптимизация Ввода является манипуляцией с игровыми фичами. Но некоторые аспекты игры кажутся обычным игрокам особенно непредсказуемыми. Алгоритмы их функционирования нарочно скрыты разработчиками от невооружённого глаза, игроку они показаны как случайные и неконтролируемые.</span></p>
<p class="rvps10"><span class="rvts22">Однако на самом деле все аспекты видеоигр являются детерминированными (однозначно зависящими от Ввода). Использование инструментов и вдумчивого анализа позволяет выявить скрытые закономерности и использовать их при создании Ввода мувика.</span></p>
<p class="rvps10"><span class="rvts22">А в некоторых случаях вместо исследования алгоритмов достаточно воспользоваться методом перебора, натыкаясь на удачный исход событий методом проб и ошибок, а затем оставляя в мувике именно тот Ввод, который приводит игру к удачному результату.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="NonlinearTASing.html#turbo-seeking">Нелинейный ТАСинг</a><span class="rvts22"> (пример манипуляции)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Subpixels Субпиксели (дробная часть пикселя)</span></p>
<p class="rvps10"><span class="rvts22">Наличие не только целых, но и дробных значений у координат персонажа в игре.</span></p>
<p class="rvps10"><span class="rvts22">В общем случае ТАСеру следует понимать отличие между экранными координатами спрайта и реальными координатами физического объекта в игре. Только в простейших играх эти координаты совпадают, обычно же на экран выводится приблизительное положение вещей, где проекции всех объектов выравнены по сетке пикселей. Чтобы узнать реальные координаты (и другие скрытые от глаз игрока данные), нужно просматривать ячейки оперативной памяти эмулируемой платформы. Это делается с помощью просмотрщика памяти (Memory Watch) или Lua.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Recording Запись</span></p>
<p class="rvps10"><span class="rvts22">Один из видов создания Ввода в мувике.</span></p>
<p class="rvps10"><span class="rvts22">Заключается в последовательном добавлении Ввода в конец мувика, одновременно с просмотром промежуточных результатов.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="Toolbox.html#recorder">Панель инструментов</a><span class="rvts22">, </span><a class="rvts28" href="TASingMethodology.html#linear-tasing">Методология ТАСинга</a><span class="rvts22">, </span><a class="rvts28" href="TraditionalTASing.html">Традиционный метод ТАСинга</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Rerecording Перезапись (повторная запись)</span></p>
<p class="rvps10"><span class="rvts22">Один из видов редактирования Ввода в мувике.</span></p>
<p class="rvps10"><span class="rvts22">Заключается в последовательном изменении Ввода, начиная с определённого кадра, одновременно с просмотром промежуточных результатов.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="TASingMethodology.html#linear-tasing">Методология ТАСинга</a><span class="rvts22">, </span><a class="rvts28" href="TraditionalTASing.html">Традиционный метод ТАСинга</a><span class="rvts22">, </span><a class="rvts28" href="Ideas.html#RerecordsCounter">Счётчик перезаписей</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Multitracking Мультитрекинг (многодорожечная запись)</span></p>
<p class="rvps10"><span class="rvts22">Один из способов записи Ввода при прохождении игр в режиме нескольких игроков.</span></p>
<p class="rvps10"><span class="rvts22">Заключается в поочерёдной записи Ввода на одном участке для каждого игрока отдельно.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="Toolbox.html#multitracking">Панель инструментов</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Turbo Турбо (повышенная скорость)</span></p>
<p class="rvps10"><span class="rvts22">Ускорение эмуляции игры до максимально возможной скорости.</span></p>
<p class="rvps10"><span class="rvts22">Используется для пропуска несущественных игровых событий и уменьшения времени ожидания при добегании к дальнему кадру мувика.</span></p>
<p class="rvps10"><span class="rvts22">С помощью настроек эмулятора можно гибко варьировать скорость эмуляции, замедляя или ускоряя её при необходимости. Под Турбо понимается максимально возможная скорость эмуляции. Этот предел зависит от скорости вашего компьютера.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="Toolbox.html#turbo-seek">Панель инструментов</a><span class="rvts22">, </span><a class="rvts28" href="NonlinearTASing.html#turbo-seeking">Нелинейный ТАСинг</a><span class="rvts22">, </span><a class="rvts28" href="SemiautomaticTASing.html#turbo-seeking">Полуавтоматический ТАСинг</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Savestate Сэйв (сохранение)</span></p>
<p class="rvps10"><span class="rvts22">Снимок состояния эмулируемой платформы.</span></p>
<p class="rvps10"><span class="rvts22">В отличие от встроенных игровых сохранений, здесь сохраняется и восстанавливается исчерпывающая информация о состоянии эмулируемой системы. Это необходимо для обеспечения детерминизма при навигации по мувику (в частности, при Перезаписи Ввода).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Piano Roll Piano Roll (перфолента)</span></p>
<p class="rvps10"><span class="rvts22">Особый тип визуального представления данных, похожий на представление в виде таблицы.</span></p>
<p class="rvps10"><span class="rvts22">Подобный интерфейс используется в редакторах музыки (MIDI-секвенсорах и MOD-трекерах). Его имя и принцип действия унаследован из физического аналога (давно существовавшие свёртки перфорированной бумаги для механических клавесинов).</span></p>
<p class="rvps10"><span class="rvts22">В Piano Roll Тасэдитора отображаются и редактируются данные мувика (Ввод и Маркеры), а также отображаются некоторые данные эмулируемой игры (текущий кадр, Журнал лага, Закладки и т.д.).</span></p>
<p class="rvps10"><span class="rvts22">Каждая строка Piano Roll соотносится с одним кадром мувика.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="PianoRoll.html">Интерфейс Piano Roll</a><span class="rvts22">, </span><a class="rvts28" href="Ideas.html#PianoRoll">Piano Roll</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Playback cursor Курсор Проигрывателя</span></p>
<p class="rvps10"><span class="rvts22">Текущий проигрываемый кадр мувика. События этого кадра отображаются в окне эмулятора в виде скриншота, а в Piano Roll соответствующая строка обозначается голубым цветом и значком "Play" (голубая стрелка).</span></p>
<p class="rvps10"><span class="rvts22">Одновременно можно видеть только события одного кадра мувика. Чтобы увидеть скриншот последующих событий мувика, нужно переместить голубой Курсор Проигрывателя вперёд (вниз по Piano Roll), чтобы увидеть скриншот предыдущих событий, нужно переместить курсор назад (вверх по Piano Roll).</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="PianoRoll.html">Интерфейс Piano Roll</a><span class="rvts22">, </span><a class="rvts28" href="Navigation.html#playback-cursor">Навигация Курсором Проигрывателя</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Greenzone Гринзона (зона мгновенного доступа)</span></p>
<p class="rvps10"><span class="rvts22">Хранилище данных, специально разработанное для ускорения навигации Курсором Проигрывателя по мувику.</span></p>
<p class="rvps10"><span class="rvts22">В это хранилище Тасэдитор собирает сэйвы для каждого кадра мувика во время эмуляции, а при необходимости использует эти сэйвы для мгновенного прыжка Курсором Проигрывателя на любой кадр.</span></p>
@ -201,68 +201,64 @@
<p class="rvps10"><span class="rvts22">Самый верхний выделенный кадр называется Курсором Выделения.</span></p>
<p class="rvps10"><span class="rvts22">Курсор Выделения автоматически следует за процессом редактирования Ввода, поэтому с его помощью можно осуществлять навигацию по местам редактирования.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="PianoRoll.html">Интерфейс Piano Roll</a><span class="rvts22">, </span><a class="rvts28" href="Navigation.html#selection-cursor">Навигация Курсором Выделения</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Marker Маркер</span></p>
<p class="rvps10"><span class="rvts22">Жёлтая отметка для кадра в Piano Roll, акцентирующая на нём внимание.</span></p>
<p class="rvps10"><span class="rvts22">Маркером можно отметить любой кадр в Piano Roll. С помощью установки и удаления Маркеров можно повысить наглядность и удобство работы.</span></p>
<p class="rvps10"><span class="rvts22">Цели использования Маркеров:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">структуризация Ввода</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">формализация знаний (с помощью Заметок)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">ускорение навигации</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">быстрое выделение участков (</span><span class="rvts34">Ctrl + A</span><span class="rvts22">)</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">структуризация Ввода</span></li>
<li class="rvps15"><span class="rvts22">формализация знаний (с помощью Заметок)</span></li>
<li class="rvps15"><span class="rvts22">ускорение навигации</span></li>
<li class="rvps15"><span class="rvts22">быстрое выделение участков (</span><span class="rvts34">Ctrl + A</span><span class="rvts22">)</span></li>
</ul>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="PianoRoll.html#markers">Интерфейс Piano Roll</a><span class="rvts22">, </span><a class="rvts28" href="Ideas.html#Markers">Маркеры</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Note Заметка</span></p>
<p class="rvps10"><span class="rvts22">Однострочная текстовая запись, прилагаемая к каждому Маркеру.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="PianoRoll.html#markers">Интерфейс Piano Roll</a><span class="rvts22">, </span><a class="rvts28" href="Controls.html#notes">Управление</a><span class="rvts22">, </span><a class="rvts28" href="AdvancedFeatures.html#UsingMarkers">Продвинутые возможности</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Bookmark Закладка</span></p>
<p class="rvps10"><span class="rvts22">Отметка для кадра в Piano Roll, хранящая информацию о данном кадре, в том числе ответвление мувика, которое однозначно приводит игру к событиям данного кадра.</span></p>
<p class="rvps10"><span class="rvts22">Закладки могут использоваться для навигации Курсором Проигрывателя, но в Тасэдиторе они в основном используются для хранения ответвлений.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="Toolbox.html#bookmarks">Панель инструментов</a><span class="rvts22">, </span><a class="rvts28" href="Ideas.html#BookmarksBranches">Закладки и ответвления</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Branch Ответвление</span></p>
<p class="rvps10"><span class="rvts22">Резервная копия мувика, хранящая его состояние на момент создания Закладки.</span></p>
<p class="rvps10"><span class="rvts22">Текущий мувик заменяется на требуемое ответвление с помощью загрузки соответствующей Закладки.</span></p>
<p class="rvps10"><span class="rvts22">С помощью ответвлений можно одновременно хранить в проекте несколько разных мувиков и мгновенно переключаться между ними:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">для сравнения альтернативных стратегий прохождения</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">для хранения текущего лучшего варианта при тестировании других вариантов на участке</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">для запоминания ещё неиспользованных трюков, которые могут пригодиться в будущем</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">для сравнения своего мувика с чужим (при создании обгона)</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">для сравнения альтернативных стратегий прохождения</span></li>
<li class="rvps15"><span class="rvts22">для хранения текущего лучшего варианта при тестировании других вариантов на участке</span></li>
<li class="rvps15"><span class="rvts22">для запоминания ещё неиспользованных трюков, которые могут пригодиться в будущем</span></li>
<li class="rvps15"><span class="rvts22">для сравнения своего мувика с чужим (при создании обгона)</span></li>
</ul>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="Toolbox.html#bookmarks">Панель инструментов</a><span class="rvts22">, </span><a class="rvts28" href="ProgramCustomization.html#BranchesworkonlywhenRecording">Настройка программы</a><span class="rvts22">, </span><a class="rvts28" href="Ideas.html#BookmarksBranches">Закладки и ответвления</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Project Проект</span></p>
<p class="rvps10"><span class="rvts22">Контейнер для хранения рабочих данных при использовании в Тасэдиторе.</span></p>
<p class="rvps10"><span class="rvts22">Также проектом называется файл (project file), в котором хранятся рабочие данные пользователя.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="AdvancedFeatures.html#ProjectsSharing">Продвинутые возможности</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Lua Lua</span></p>
<p class="rvps10"><span class="rvts22">Интерпретируемый язык программирования, использующийся во многих ТАСерских эмуляторах для визуализации данных и создания индивидуальных инструментов.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="AdvancedFeatures.html#UsingLua">Продвинутые возможности</a><span class="rvts22">, </span><a class="rvts28" href="Ideas.html#Lua">Луа-автоматизация</a><span class="rvts22">, </span><a class="rvts28" href="LuaAPI.html">Lua-функции</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Bot Бот (робот)</span></p>
<p class="rvps10"><span class="rvts22">Средство для автоматизации определённых действий.</span></p>
<p class="rvps10"><span class="rvts22">Обычно программы-боты используются для избавления человека от рутинных действий, не требующих высокой гибкости ума. В отличие от человека, боты не изобретают путь решения задачи, а методично перебирают варианты решения, следуя фиксированному алгоритму, заложенному программистом.</span></p>
<p class="rvps10"><span class="rvts22">Сами по себе боты не способны создать экстраординарное прохождение видеоигры. Их практично использовать только для исчерпывающего перебора вариантов на коротком участке мувика. И в большинстве случаев ТАСеру проще перебрать варианты вручную, интуитивно отсеивая тупиковые варианты в уме, чем заниматься написанием бота и долгим ожиданием результатов полного перебора.</span></p>
<p class="rvps10"><span class="rvts22">Для создания ботов требуется умение программировать. Обычно боты либо пишутся на Lua, либо встраиваются в эмуляторы с помощью модификации исходного кода.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Pattern Шаблон</span></p>
<p class="rvps10"><span class="rvts22">В Тасэдиторе: заданная последовательность значений Ввода для одной (любой) кнопки.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="AdvancedFeatures.html#UsingPatterns">Продвинутые возможности</a><span class="rvts22">, </span><a class="rvts28" href="Ideas.html#Patterns">Шаблоны</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Free EBook and documentation generator</a></p>
</div>
<div id="topic_footer">

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
<head>
<title>Реализация</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,430 +53,335 @@
<div id="topic_content">
<p><span class="rvts20">Реализация</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Первоначально TAS Editor базировался на коде экспериментального инструмента TASEdit из FCEUX 2.1.5.</span></p>
<p class="rvps10"><span class="rvts22">TASEdit представлял из себя редактор Ввода (в духе TAS Movie Editor), встроенный в эмулятор, чтобы сократить время между редактированием и просмотром участков. Так как при разработке TASEdit не проводилось исследование принципов и закономерностей ТАСинга, у авторов TASEdit не было чёткого видения финального инструмента, и имеющийся код не был расширяемым. Поэтому вскоре после начала разработки TAS Editor его код был полностью переписан, чтобы облегчить дальнейшее расширение функционала.</span></p>
<p class="rvps10"><span class="rvts22">Архитектура Тасэдитора спроектирована, исходя из авторских представлений о методическом ТАСинге и о необходимом функционале для облегчения такого ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts78">Программные модули (классы)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">taseditor.cpp</span></p>
<p class="rvps10"><span class="rvts22">Main - главный шлюз между эмулятором и Тасэдитором (Main gate between emulator and Taseditor)</span></p>
<p class="rvps10"><span class="rvts22">Main главный шлюз между эмулятором и Тасэдитором (Main gate between emulator and Taseditor)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">точка запуска Тасэдитора эмулятором</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">точка выхода из Тасэдитора</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно (раз в кадр) вызывает обновление всех модулей, требующих регулярного обновления</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует функции раздела File: создание нового проекта, открытие файла, сохранение, компактное сохранение, импорт, экспорт</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">обрабатывает некоторые хоткеи FCEUX</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">точка запуска Тасэдитора эмулятором</span></li>
<li class="rvps15"><span class="rvts22">точка выхода из Тасэдитора</span></li>
<li class="rvps15"><span class="rvts22">Регулярно (раз в кадр) вызывает обновление всех модулей, требующих регулярного обновления</span></li>
<li class="rvps15"><span class="rvts22">реализует функции раздела File: создание нового проекта, открытие файла, сохранение, компактное сохранение, импорт, экспорт</span></li>
<li class="rvps15"><span class="rvts22">обрабатывает некоторые хоткеи FCEUX</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">taseditor_window.cpp</span></p>
<p class="rvps10"><span class="rvts22">Window - пользовательский интерфейс (User Interface)</span></p>
<p class="rvps10"><span class="rvts22">Window пользовательский интерфейс (User Interface)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции с окном Тасэдитора: создание, перерисовка, изменение размера, перетаскивание окна, всплывающие подсказки, щелчки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует обработчики для всех кнопок и чекбоксов в GUI Тасэдитора, чтобы запретить срабатывание клавиши Пробел, а также обрабатывать щелчок средней кнопкой мыши</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">обрабатывает системные сообщения и передаёт сигналы от пользователя другим модулям Тасэдитора (а для некоторых простейших команд реализует логику на месте, например, диалог ввода настроек Greenzone capacity и т.п.)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">включает/выключает передачу клавиатурного управления эмулятору при получении/потере фокуса окна</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию: обновляет текст заголовка окна; обновляет иконку курсора мыши</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">обновляет состояние галочек при изменении соответствующих настроек</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит информацию о 10 последних проектах (File-&gt;Recent) и обновляет её при загрузках/сохранениях файлов</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: текст заголовка окна, имя файла справки, размер, координаты и другие свойства всех элементов GUI</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">реализует все операции с окном Тасэдитора: создание, перерисовка, изменение размера, перетаскивание окна, всплывающие подсказки, щелчки</span></li>
<li class="rvps15"><span class="rvts22">реализует обработчики для всех кнопок и чекбоксов в GUI Тасэдитора, чтобы запретить срабатывание клавиши Пробел, а также обрабатывать щелчок средней кнопкой мыши</span></li>
<li class="rvps15"><span class="rvts22">обрабатывает системные сообщения и передаёт сигналы от пользователя другим модулям Тасэдитора (а для некоторых простейших команд реализует логику на месте, например, диалог ввода настроек Greenzone capacity и т.п.)</span></li>
<li class="rvps15"><span class="rvts22">включает/выключает передачу клавиатурного управления эмулятору при получении/потере фокуса окна</span></li>
<li class="rvps15"><span class="rvts22">по требованию: обновляет текст заголовка окна; обновляет иконку курсора мыши</span></li>
<li class="rvps15"><span class="rvts22">обновляет состояние галочек при изменении соответствующих настроек</span></li>
<li class="rvps15"><span class="rvts22">хранит информацию о 10 последних проектах (File-&gt;Recent) и обновляет её при загрузках/сохранениях файлов</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: текст заголовка окна, имя файла справки, размер, координаты и другие свойства всех элементов GUI</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">bookmarks.cpp</span></p>
<p class="rvps10"><span class="rvts22">Bookmarks - Менеджер Закладок (Manager of Bookmarks)</span></p>
<p class="rvps10"><span class="rvts22">Bookmarks Менеджер Закладок (Manager of Bookmarks)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит 10 Закладок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции с Закладками: ининициализация, установка Закладки, прыжок на Закладку, загрузка Ответвления Закладки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает данные всех Закладок из файла проекта. При ошибке: сбрасывает список Закладок и Ответвлений</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует всю логику работы Списка Закладок: создание, перерисовка, наведение мышью, щелчки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно обновляет состояние анимированных вспышек в Списке Закладок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию: обновляет расцветку строк Списка закладок, поддерживая актуальное состояние каждой ячейки Списка</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: идентификатор сохранения, идентификаторы команд по работе с Закладками, текст заголовка панели, градиенты анимированных вспышек, номер слота по умолчанию</span></p>
<p class="rvps15"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит 10 Закладок</span></li>
<li class="rvps15"><span class="rvts22">реализует все операции с Закладками: ининициализация, установка Закладки, прыжок на Закладку, загрузка Ответвления Закладки</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает данные всех Закладок из файла проекта. При ошибке: сбрасывает список Закладок и Ответвлений</span></li>
<li class="rvps15"><span class="rvts22">реализует всю логику работы Списка Закладок: создание, перерисовка, наведение мышью, щелчки</span></li>
<li class="rvps15"><span class="rvts22">Регулярно обновляет состояние анимированных вспышек в Списке Закладок</span></li>
<li class="rvps15"><span class="rvts22">по требованию: обновляет расцветку строк Списка закладок, поддерживая актуальное состояние каждой ячейки Списка</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: идентификатор сохранения, идентификаторы команд по работе с Закладками, текст заголовка панели, градиенты анимированных вспышек, номер слота по умолчанию</span></li>
</ul>
<p class="rvps15"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">branches.cpp</span></p>
<p class="rvps10"><span class="rvts22">Branches - Менеджер Ответвлений (Manager of Branches)</span></p>
<p class="rvps10"><span class="rvts22">Branches Менеджер Ответвлений (Manager of Branches)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит информацию об Ответвлениях (родственных связах Закладок), а также номер текущего Ответвления</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">дополнительно хранит время последнего изменения проекта (см. файерболл), а также время начала проекта (см. тучка)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">кеширует и хранит данные, использованные при рассчётах (кадр первого расхождения нпута для каждой пары Закладок; номер самой дальней Закладки, соответвтвующей хронологии определённой Закладки)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает свои данные из файла проекта. При ошибке: передаёт сигнал выше</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует всю логику работы Дерева Ответвлений: создание, пересчёт связей, анимация, перерисовка, наведение мышью, щелчки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию: реагирует на изменение Закладок или текущего мувика, изменяя структуру Дерева Ответвлений</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно анимирует Дерево Ответвлений и рассчитывает положение Курсора Проигрывателя на этом Дереве</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: координаты элементов Дерева Ответвлений, тайминги анимаций</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит информацию об Ответвлениях (родственных связах Закладок), а также номер текущего Ответвления</span></li>
<li class="rvps15"><span class="rvts22">дополнительно хранит время последнего изменения проекта (см. файерболл), а также время начала проекта (см. тучка)</span></li>
<li class="rvps15"><span class="rvts22">кеширует и хранит данные, использованные при рассчётах (кадр первого расхождения нпута для каждой пары Закладок; номер самой дальней Закладки, соответвтвующей хронологии определённой Закладки)</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает свои данные из файла проекта. При ошибке: передаёт сигнал выше</span></li>
<li class="rvps15"><span class="rvts22">реализует всю логику работы Дерева Ответвлений: создание, пересчёт связей, анимация, перерисовка, наведение мышью, щелчки</span></li>
<li class="rvps15"><span class="rvts22">по требованию: реагирует на изменение Закладок или текущего мувика, изменяя структуру Дерева Ответвлений</span></li>
<li class="rvps15"><span class="rvts22">Регулярно анимирует Дерево Ответвлений и рассчитывает положение Курсора Проигрывателя на этом Дереве</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: координаты элементов Дерева Ответвлений, тайминги анимаций</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">bookmark.cpp</span></p>
<p class="rvps10"><span class="rvts22">Bookmark - данные одной Закладки (Single Bookmark data)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит всю информацию одной конкретной Закладки: снимок состояния мувика, копию сэйва одного кадра Гринзоны, скриншот этого кадра, состояние вспышки данной Закладки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает свои данные из файла проекта. При ошибке: передаёт сигнал выше</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует процедуру установки Закладки: создание снимка мувика, установка ключевого кадра снимка на текущее положение Проигрывателя, копирование сэйва из Гринзоны, взятие и компрессия скриншота с экрана, запуск анимации вспышки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">запускает соответствующие вспышки при прыжке на Закладку и при загрузке Ответвления</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Bookmark данные одной Закладки (Single Bookmark data)</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит всю информацию одной конкретной Закладки: снимок состояния мувика, копию сэйва одного кадра Гринзоны, скриншот этого кадра, состояние вспышки данной Закладки</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает свои данные из файла проекта. При ошибке: передаёт сигнал выше</span></li>
<li class="rvps15"><span class="rvts22">реализует процедуру установки Закладки: создание снимка мувика, установка ключевого кадра снимка на текущее положение Проигрывателя, копирование сэйва из Гринзоны, взятие и компрессия скриншота с экрана, запуск анимации вспышки</span></li>
<li class="rvps15"><span class="rvts22">запускает соответствующие вспышки при прыжке на Закладку и при загрузке Ответвления</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">snapshot.cpp</span></p>
<p class="rvps10"><span class="rvts22">Snapshot - Моментальный снимок всех редактируемых данных (Snapshot of all edited data)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит всю информацию одного снимка мувика: размер и содержимое инпута (инпут = кнопочные нажатия + команды), снимок состояния Маркеров на момент создания снимка, номер ключевого кадра, начальный и конечный кадр операции, тип операции и текстовое описание снимка (включая время создания)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">дополнительно хранит информацию о последовательной Записи/рисовании инпута</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">опционально может хранить или не хранить карту Горячих Правок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует детали создания снимка: копирование инпута, опциональное копирование карты горячих правок, копирование Маркеров, запоминание времени создания</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует детали полного/частичного восстановления данных из снимка: инпута, карты горячих правок, Маркеров</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует компрессию и декомпрессию хранимых данных</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает свои данные из файла проекта, при ошибке загрузки передаёт сигнал выше</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует поиск первого несовпадения в содержимом двух снимков или в содержимом данного снимка и текущего состояния мувика</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">предоставляет интерфейс для чтения отдельно взятых данных: чтение инпута отдельного кадра, чтение любой ячейки карты горячих правок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции с картами Горячих Правок: копирование, частичное копирование, обновление/угасание, установка новых точек на карте горячих правок, сравнением инпута двух снимков</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Snapshot Моментальный снимок всех редактируемых данных (Snapshot of all edited data)</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит всю информацию одного снимка мувика: размер и содержимое Ввода (Ввод = кнопочные нажатия + команды), снимок состояния Маркеров на момент создания снимка, номер ключевого кадра, начальный и конечный кадр операции, тип операции и текстовое описание снимка (включая время создания)</span></li>
<li class="rvps15"><span class="rvts22">дополнительно хранит информацию о последовательной Записи/рисовании Ввода</span></li>
<li class="rvps15"><span class="rvts22">опционально может хранить или не хранить карту Горячих Правок</span></li>
<li class="rvps15"><span class="rvts22">реализует детали создания снимка: копирование Ввода, опциональное копирование карты горячих правок, копирование Маркеров, запоминание времени создания</span></li>
<li class="rvps15"><span class="rvts22">реализует детали полного/частичного восстановления данных из снимка: Ввода, карты горячих правок, Маркеров</span></li>
<li class="rvps15"><span class="rvts22">реализует компрессию и декомпрессию хранимых данных</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает свои данные из файла проекта, при ошибке загрузки передаёт сигнал выше</span></li>
<li class="rvps15"><span class="rvts22">реализует поиск первого несовпадения в содержимом двух снимков или в содержимом данного снимка и текущего состояния мувика</span></li>
<li class="rvps15"><span class="rvts22">предоставляет интерфейс для чтения отдельно взятых данных: чтение Ввода отдельного кадра, чтение любой ячейки карты горячих правок</span></li>
<li class="rvps15"><span class="rvts22">реализует все операции с картами Горячих Правок: копирование, частичное копирование, обновление/угасание, установка новых точек на карте горячих правок, сравнением Ввода двух снимков</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">markers.cpp</span></p>
<p class="rvps10"><span class="rvts22">Markers - Моментальный снимок состояния маркеров (Snapshot of Markers state)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит данные о состоянии Маркеров: массив распределения Маркеров по кадрам и массив Заметок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует компрессию и декомпрессию хранимых данных</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает свои данные из файла проекта, при ошибке загрузки передаёт сигнал выше</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: максимальная длина Заметки</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Markers Моментальный снимок состояния маркеров (Snapshot of Markers state)</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит данные о состоянии Маркеров: массив распределения Маркеров по кадрам и массив Заметок</span></li>
<li class="rvps15"><span class="rvts22">реализует компрессию и декомпрессию хранимых данных</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает свои данные из файла проекта, при ошибке загрузки передаёт сигнал выше</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: максимальная длина Заметки</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">popup_display.cpp</span></p>
<p class="rvps10"><span class="rvts22">Popup display - Менеджер всплывающих окон (Manager of popup windows)</span></p>
<p class="rvps10"><span class="rvts22">Popup display Менеджер всплывающих окон (Manager of popup windows)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции с всплывающими окнами: инициализацию, перерисовку, центрирование, декомпрессию и конвертирование скриншотов</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно отслеживает изменения Менеджера закладок и запускает/обновляет/закрывает всплывающие окна</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию: обновляет содержимое всплывающих окон</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: координаты и внешний вид всплывающих окон, тайминги всплывания/исчезания</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">реализует все операции с всплывающими окнами: инициализацию, перерисовку, центрирование, декомпрессию и конвертирование скриншотов</span></li>
<li class="rvps15"><span class="rvts22">Регулярно отслеживает изменения Менеджера закладок и запускает/обновляет/закрывает всплывающие окна</span></li>
<li class="rvps15"><span class="rvts22">по требованию: обновляет содержимое всплывающих окон</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: координаты и внешний вид всплывающих окон, тайминги всплывания/исчезания</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">history.cpp</span></p>
<p class="rvps10"><span class="rvts22">History - История изменений мувика (History of movie modifications)</span></p>
<p class="rvps10"><span class="rvts22">History История изменений мувика (History of movie modifications)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит массив записей в Журнал Истории (снимки мувика, резервные копии Закладок, резервные копии номера текущей Закладки) и указатель на текущий снимок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает массив снимков из файла проекта, при ошибке загрузки очищает массив и начинает новую историю со снимка текущего состояния мувика</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию: проверяет различия между последним снимком и текущим мувиком, принимает решение о необходимости создания новой точки отката. А в особых случаях может создать точку отката без проверки изменений, полагаясь, что вызывающий модуль сам проверил различия</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции восстановления состояния мувика: откат (undo), повторение (redo), возврат на произвольный снимок из массива</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">дополнительно хранит состояние курсора-указки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно следит за обновлением состояние курсора-указки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно (во время паузы эмулятора) ищет в Журнале несжатые пункты и сжимает первый попавшийся</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует всю логику работы Списка истории: создание, перерисовка, щелчки, автоскроллинг</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: идентификатор сохранения, идентификаторы и текстовые обозначения всех возможных типов изменения мувика, тайминг указки</span></p>
<p class="rvps15"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит массив записей в Журнал Истории (снимки мувика, резервные копии Закладок, резервные копии номера текущей Закладки) и указатель на текущий снимок</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает массив снимков из файла проекта, при ошибке загрузки очищает массив и начинает новую историю со снимка текущего состояния мувика</span></li>
<li class="rvps15"><span class="rvts22">по требованию: проверяет различия между последним снимком и текущим мувиком, принимает решение о необходимости создания новой точки отката. А в особых случаях может создать точку отката без проверки изменений, полагаясь, что вызывающий модуль сам проверил различия</span></li>
<li class="rvps15"><span class="rvts22">реализует все операции восстановления состояния мувика: откат (undo), повторение (redo), возврат на произвольный снимок из массива</span></li>
<li class="rvps15"><span class="rvts22">дополнительно хранит состояние курсора-указки</span></li>
<li class="rvps15"><span class="rvts22">Регулярно следит за обновлением состояние курсора-указки</span></li>
<li class="rvps15"><span class="rvts22">Регулярно (во время паузы эмулятора) ищет в Журнале несжатые пункты и сжимает первый попавшийся</span></li>
<li class="rvps15"><span class="rvts22">реализует всю логику работы Списка истории: создание, перерисовка, щелчки, автоскроллинг</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: идентификатор сохранения, идентификаторы и текстовые обозначения всех возможных типов изменения мувика, тайминг указки</span></li>
</ul>
<p class="rvps15"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">piano_roll.cpp</span></p>
<p class="rvps10"><span class="rvts22">Piano Roll - интерфейс в виде перфоленты (Piano Roll interface)</span></p>
<p class="rvps10"><span class="rvts22">Piano Roll интерфейс в виде перфоленты (Piano Roll interface)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует всю логику работы Списка Piano Roll: создание, перерисовка, скроллинг, наведение, щелчки, перетаскивание</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">регулярно обновляет размер Списка в соответствии с размером инпута мувика</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию: скроллирует видимую область Списка к указанному элементу или позиции: к Курсору Проигрывателя, к Курсору Выделения, к курсору-указке, к целевому кадру Проигрывателя, к Маркеру</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает текущую позицию вертикального скроллинга из файла проекта, при ошибке загрузки скроллирует список в начало</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции с Заголовком Списка: создание, перерисовка, анимация, наведение мышью, щелчки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">регулярно подсвечивает символы Заголовка в соответствии с текущими данными от Рекордера</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию: запускает вспышки символов Заголовка</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует всю логику работы колеса мыши: скроллинг Списка, навигация Курсором Проигрывателя, навигация Курсором Выделения, пересечение пустот колесом</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует контекстное меню по правому щелчку</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: идентификатор сохранения, идентификаторы колонок списка, ширины колонок списка, таблицы цветов ячеек, градиент карты Горячих Правок, градиент вспышек символов Заголовка, тайминги вспышек, все шрифты Тасэдитора, изображения</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">реализует всю логику работы Списка Piano Roll: создание, перерисовка, скроллинг, наведение, щелчки, перетаскивание</span></li>
<li class="rvps15"><span class="rvts22">регулярно обновляет размер Списка в соответствии с размером Ввода мувика</span></li>
<li class="rvps15"><span class="rvts22">по требованию: скроллирует видимую область Списка к указанному элементу или позиции: к Курсору Проигрывателя, к Курсору Выделения, к курсору-указке, к целевому кадру Проигрывателя, к Маркеру</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает текущую позицию вертикального скроллинга из файла проекта, при ошибке загрузки скроллирует список в начало</span></li>
<li class="rvps15"><span class="rvts22">реализует все операции с Заголовком Списка: создание, перерисовка, анимация, наведение мышью, щелчки</span></li>
<li class="rvps15"><span class="rvts22">регулярно подсвечивает символы Заголовка в соответствии с текущими данными от Рекордера</span></li>
<li class="rvps15"><span class="rvts22">по требованию: запускает вспышки символов Заголовка</span></li>
<li class="rvps15"><span class="rvts22">реализует всю логику работы колеса мыши: скроллинг Списка, навигация Курсором Проигрывателя, навигация Курсором Выделения, пересечение пустот колесом</span></li>
<li class="rvps15"><span class="rvts22">реализует контекстное меню по правому щелчку</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: идентификатор сохранения, идентификаторы колонок списка, ширины колонок списка, таблицы цветов ячеек, градиент карты Горячих Правок, градиент вспышек символов Заголовка, тайминги вспышек, все шрифты Тасэдитора, изображения</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">selection.cpp</span></p>
<p class="rvps10"><span class="rvts22">Selection - Менеджер выделений (Manager of selections)</span></p>
<p class="rvps10"><span class="rvts22">Selection Менеджер выделений (Manager of selections)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">содержит определение типа данных "Набор выделенных кадров"</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит массив наборов выделенных кадров ("история выделений")</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает массив выделений из файла проекта, при ошибке загрузки очищает массив и начинает новую историю с пустого выделения</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">постоянно отслеживает изменения выделенных строк в Списке и принимает решение о необходимости создания новой точки отката выделений</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции восстановления состояния выделения: откат выделения (selection undo), повторение выделения (selection redo)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию: изменяет текущее выделение: очистить выделение, прыгнуть Курсором Выделения на указанный кадр, выделить регион, выделить всё, выделить между Маркерами, выделить содержимое Буфера Обмена</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно проверяет выход текущего выделения за рамки Списка и при необходимости корректирует текущее выделение, определяет факт перехода выделения на другой Маркер и обновляет Заметку в нижнем текстовом поле</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует логику работы нижних кнопок &lt;&lt; и &gt;&gt; (прыжки Курсора Выделения по Маркерам)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">здесь же размещается код нижнего текстового поля для редактирования Заметок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: идентификатор сохранения, префикс подписи к нижнему полю</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">содержит определение типа данных "Набор выделенных кадров"</span></li>
<li class="rvps15"><span class="rvts22">хранит массив наборов выделенных кадров ("история выделений")</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает массив выделений из файла проекта, при ошибке загрузки очищает массив и начинает новую историю с пустого выделения</span></li>
<li class="rvps15"><span class="rvts22">постоянно отслеживает изменения выделенных строк в Списке и принимает решение о необходимости создания новой точки отката выделений</span></li>
<li class="rvps15"><span class="rvts22">реализует все операции восстановления состояния выделения: откат выделения (selection undo), повторение выделения (selection redo)</span></li>
<li class="rvps15"><span class="rvts22">по требованию: изменяет текущее выделение: очистить выделение, прыгнуть Курсором Выделения на указанный кадр, выделить регион, выделить всё, выделить между Маркерами, выделить содержимое Буфера Обмена</span></li>
<li class="rvps15"><span class="rvts22">Регулярно проверяет выход текущего выделения за рамки Списка и при необходимости корректирует текущее выделение, определяет факт перехода выделения на другой Маркер и обновляет Заметку в нижнем текстовом поле</span></li>
<li class="rvps15"><span class="rvts22">реализует логику работы нижних кнопок &lt;&lt; и &gt;&gt; (прыжки Курсора Выделения по Маркерам)</span></li>
<li class="rvps15"><span class="rvts22">здесь же размещается код нижнего текстового поля для редактирования Заметок</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: идентификатор сохранения, префикс подписи к нижнему полю</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">editor.cpp</span></p>
<p class="rvps10"><span class="rvts22">Editor - Инструмент для редактирования (Tool for editing)</span></p>
<p class="rvps10"><span class="rvts22">Editor Инструмент для редактирования (Tool for editing)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует операции изменения инпута: установка/снятие инпута на заданном участке, установка по шаблону, установка в Выделении, установка по шаблону в Выделении</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует операции изменения Маркеров: установка/снятие в Выделении, установка по шаблону в Выделении, установка всех в Выделении, снятие всех в Выделении</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит данные Шаблонов и код их загрузки/генерации</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: имя файла шаблонов, идентификатор нажатия кнопки в шаблонах</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">реализует операции изменения Ввода: установка/снятие Ввода на заданном участке, установка по шаблону, установка в Выделении, установка по шаблону в Выделении</span></li>
<li class="rvps15"><span class="rvts22">реализует операции изменения Маркеров: установка/снятие в Выделении, установка по шаблону в Выделении, установка всех в Выделении, снятие всех в Выделении</span></li>
<li class="rvps15"><span class="rvts22">Хранит данные Шаблонов и код их загрузки/генерации</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: имя файла шаблонов, идентификатор нажатия кнопки в шаблонах</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">splicer.cpp</span></p>
<p class="rvps10"><span class="rvts22">Splicer - Инструмент для монтажа (Tool for montage)</span></p>
<p class="rvps10"><span class="rvts22">Splicer Инструмент для монтажа (Tool for montage)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции массового редактирования инпута: копипаст, клонирование, очистка региона, вставка и удаление кадров, обрезка</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит данные о выделении, использованном при последнем копировании в Буфер Обмена</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно проверяет состояние текущего выделения и выводит информацию о нём на панель, также выводит информацию о данных в Буфере Обмена</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при запуске Тасэдитора проверяет содержимое Буфера Обмена</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: символьные коды кнопок инпута, текст для информационной панели Splicer</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">реализует все операции массового редактирования Ввода: копипаст, клонирование, очистка региона, вставка и удаление кадров, обрезка</span></li>
<li class="rvps15"><span class="rvts22">хранит данные о выделении, использованном при последнем копировании в Буфер Обмена</span></li>
<li class="rvps15"><span class="rvts22">Регулярно проверяет состояние текущего выделения и выводит информацию о нём на панель, также выводит информацию о данных в Буфере Обмена</span></li>
<li class="rvps15"><span class="rvts22">при запуске Тасэдитора проверяет содержимое Буфера Обмена</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: символьные коды кнопок Ввода, текст для информационной панели Splicer</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">taseditor_config.cpp</span></p>
<p class="rvps10"><span class="rvts22">Config - текущая конфигурация (Current settings)</span></p>
<p class="rvps10"><span class="rvts22">Config текущая конфигурация (Current settings)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит состояние всех настроек Тасэдитора</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">все модули Тасэдитора могут обращаться к этому классу для получения или изменения текущих настроек</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при запуске FCEUX эмулятор записывает данные из файла fceux.cfg в этот класс, при выходе считывает данные из этого класса в файл fceux.cfg</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: значения настроек по умолчанию, предельные значения настроек</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит состояние всех настроек Тасэдитора</span></li>
<li class="rvps15"><span class="rvts22">все модули Тасэдитора могут обращаться к этому классу для получения или изменения текущих настроек</span></li>
<li class="rvps15"><span class="rvts22">при запуске FCEUX эмулятор записывает данные из файла fceux.cfg в этот класс, при выходе считывает данные из этого класса в файл fceux.cfg</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: значения настроек по умолчанию, предельные значения настроек</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">playback.cpp</span></p>
<p class="rvps10"><span class="rvts22">Playback - проигрыватель состояний эмулятора (Player of emulation states)</span></p>
<p class="rvps10"><span class="rvts22">Playback проигрыватель состояний эмулятора (Player of emulation states)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует функции проигрывателя мувика: показ любого кадра (прыжок), запуск/отмена добегания к указанному кадру, пауза, перемотка</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно следит за изменениями текущего кадра эмуляции (и управляет эмулятором), вызывает перерисовку соответствующих ячеек Списка, останавливает добегание при достижении цели, анимирует перерисовку кадра цели, обеспечивает следование Списка за курсором, определяет факт перехода курсора на другой маркер и обновляет текст в верхнем поле</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует логику работы верхних кнопок &lt;&lt; и &gt;&gt; (прыжки курсора по маркерам)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует логику работы кнопок &lt; и &gt; (покадровое перемещение курсора)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует логику работы кнопки || (пауза) и средней кнопки мыши, а также реагирует на внешние изменения паузы эмуляции</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции с прогрессбаром: сброс, установка значений, щелчки (отмена добегания)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">здесь же размещается код верхнего поля для редактирования Заметок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: префикс подписи к верхнему полю, тайминги анимации кадра цели, длительность задержки перед повторным срабатыванием зажатых кнопок GUI, масштаб прогрессбара</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">реализует функции проигрывателя мувика: показ любого кадра (прыжок), запуск/отмена добегания к указанному кадру, пауза, перемотка</span></li>
<li class="rvps15"><span class="rvts22">Регулярно следит за изменениями текущего кадра эмуляции (и управляет эмулятором), вызывает перерисовку соответствующих ячеек Списка, останавливает добегание при достижении цели, анимирует перерисовку кадра цели, обеспечивает следование Списка за курсором, определяет факт перехода курсора на другой маркер и обновляет текст в верхнем поле</span></li>
<li class="rvps15"><span class="rvts22">реализует логику работы верхних кнопок &lt;&lt; и &gt;&gt; (прыжки курсора по маркерам)</span></li>
<li class="rvps15"><span class="rvts22">реализует логику работы кнопок &lt; и &gt; (покадровое перемещение курсора)</span></li>
<li class="rvps15"><span class="rvts22">реализует логику работы кнопки || (пауза) и средней кнопки мыши, а также реагирует на внешние изменения паузы эмуляции</span></li>
<li class="rvps15"><span class="rvts22">реализует все операции с прогрессбаром: сброс, установка значений, щелчки (отмена добегания)</span></li>
<li class="rvps15"><span class="rvts22">здесь же размещается код верхнего поля для редактирования Заметок</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: префикс подписи к верхнему полю, тайминги анимации кадра цели, длительность задержки перед повторным срабатыванием зажатых кнопок GUI, масштаб прогрессбара</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">greenzone.cpp</span></p>
<p class="rvps10"><span class="rvts22">Greenzone - зона доступа (Access zone)</span></p>
<p class="rvps10"><span class="rvts22">Greenzone зона доступа (Access zone)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит массив сэйвов, используемых для ускорения перехода Проигрывателя на любой указанный кадр</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">также хранит журнал проявлений лага в кадрах</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает массив сэйвов и историю лага из файла проекта, при ошибке загрузки гринзона усекается до последнего успешно загруженного сэйва</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно проверяет наличие сэйва для текущего кадра в своём массиве, при отсутствии создаёт его, а также записывает информацию о проявлении лага в предыдущем кадре</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует авто-подгонку Ввода по лагу</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно производит постепенную очистку массива сэйвов для экономии памяти, удаляя самые старые сэйвы</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию: (при изменении инпута мувика) усекает размеры гринзоны, удаляя сэйвы, ставшие неактуальными вследствие изменения инпута. После усечения может также переместить Курсор Проигрывателя (который обязан всегда находиться внутри Гринзоны), а также запустить добегание к цели</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: идентификатор сохранения, настройки постепенной очистки, тайминг очистки</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит массив сэйвов, используемых для ускорения перехода Проигрывателя на любой указанный кадр</span></li>
<li class="rvps15"><span class="rvts22">также хранит журнал проявлений лага в кадрах</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает массив сэйвов и историю лага из файла проекта, при ошибке загрузки гринзона усекается до последнего успешно загруженного сэйва</span></li>
<li class="rvps15"><span class="rvts22">Регулярно проверяет наличие сэйва для текущего кадра в своём массиве, при отсутствии создаёт его, а также записывает информацию о проявлении лага в предыдущем кадре</span></li>
<li class="rvps15"><span class="rvts22">реализует авто-подгонку Ввода по лагу</span></li>
<li class="rvps15"><span class="rvts22">Регулярно производит постепенную очистку массива сэйвов для экономии памяти, удаляя самые старые сэйвы</span></li>
<li class="rvps15"><span class="rvts22">по требованию: (при изменении Ввода мувика) усекает размеры Гринзоны, удаляя сэйвы, ставшие неактуальными вследствие изменения Ввода. После усечения может также переместить Курсор Проигрывателя (который обязан всегда находиться внутри Гринзоны), а также запустить добегание к цели</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: идентификатор сохранения, настройки постепенной очистки, тайминг очистки</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">recorder.cpp</span></p>
<p class="rvps10"><span class="rvts22">Recorder - инструмент для записи инпута (Tool for input recording)</span></p>
<p class="rvps10"><span class="rvts22">Recorder инструмент для записи Ввода (Tool for input recording)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">в момент записи кнопочных нажатий в мувик (в самом конце кадра) по сигналу эмулятора перехватывает запись и накладывает свои фильтры мультитрекинга, а затем отражает изменения инпута в Истории и Гринзоне</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно отслеживает нажатые кнопки виртуальных джойстиков и предоставляет данные для подсветки символов Заголовка Списка. Также реагирует на использование хоткея Switch Read Only и обновляет элементы интерфейса на панели Recorder и заголовок панели Закладок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует функцию редактирования инпута в режиме Read Only (ColumnSet кнопками виртуального джойстика)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: идентификаторы и текстовые обозначения режимов мультитрекинга, суффиксы для заголовка окна TAS Editor</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">в момент записи кнопочных нажатий в мувик (в самом конце кадра) по сигналу эмулятора перехватывает запись и накладывает свои фильтры мультитрекинга, а затем отражает изменения Ввода в Истории и Гринзоне</span></li>
<li class="rvps15"><span class="rvts22">Регулярно отслеживает нажатые кнопки виртуальных джойстиков и предоставляет данные для подсветки символов Заголовка Списка. Также реагирует на использование хоткея Switch Read Only и обновляет элементы интерфейса на панели Recorder и заголовок панели Закладок</span></li>
<li class="rvps15"><span class="rvts22">реализует функцию редактирования Ввода в режиме Read Only (ColumnSet кнопками виртуального джойстика)</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: идентификаторы и текстовые обозначения режимов мультитрекинга, суффиксы для заголовка окна TAS Editor</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">markers_manager.cpp</span></p>
<p class="rvps10"><span class="rvts22">Markers_manager - Менеджер Маркеров (Manager of Markers)</span></p>
<p class="rvps10"><span class="rvts22">Markers_manager Менеджер Маркеров (Manager of Markers)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит один снимок состояния Маркеров, отвечающий за текущее (актуальное) состояние Маркеров в проекте</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет и загружает свои данные из файла проекта, при ошибке загрузки очищает данные</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Регулярно следит, чтобы размер массива Маркеров был не меньше количества кадров в мувике</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует все операции с Маркерами: установка Маркера на кадр, удаление Маркера, вставка и удаление кадров между Маркерами, усечение массива Маркеров, изменение Заметок, поиск кадра по номеру Маркера, интерфейс доступа к данным внутри снимка состояния Маркеров</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует копирование данных между снимками состояния Маркеров (в том числе частичное копирование) и поиск первого несовпадения в содержимом двух снимков состояния Маркеров</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">здесь же размещается код поиска "похожих" Заметок</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">здесь же размещается код редактирования Заметок к Маркерам</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">здесь же размещается код диалога Find Note</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: идентификатор сохранения, настройки поиска похожих Заметок</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит один снимок состояния Маркеров, отвечающий за текущее (актуальное) состояние Маркеров в проекте</span></li>
<li class="rvps15"><span class="rvts22">сохраняет и загружает свои данные из файла проекта, при ошибке загрузки очищает данные</span></li>
<li class="rvps15"><span class="rvts22">Регулярно следит, чтобы размер массива Маркеров был не меньше количества кадров в мувике</span></li>
<li class="rvps15"><span class="rvts22">реализует все операции с Маркерами: установка Маркера на кадр, удаление Маркера, вставка и удаление кадров между Маркерами, усечение массива Маркеров, изменение Заметок, поиск кадра по номеру Маркера, интерфейс доступа к данным внутри снимка состояния Маркеров</span></li>
<li class="rvps15"><span class="rvts22">реализует копирование данных между снимками состояния Маркеров (в том числе частичное копирование) и поиск первого несовпадения в содержимом двух снимков состояния Маркеров</span></li>
<li class="rvps15"><span class="rvts22">здесь же размещается код поиска "похожих" Заметок</span></li>
<li class="rvps15"><span class="rvts22">здесь же размещается код редактирования Заметок к Маркерам</span></li>
<li class="rvps15"><span class="rvts22">здесь же размещается код диалога Find Note</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: идентификатор сохранения, настройки поиска похожих Заметок</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">taseditor_lua.cpp</span></p>
<p class="rvps10"><span class="rvts22">Lua - Менеджер возможностей Луа (Manager of Lua features)</span></p>
<p class="rvps10"><span class="rvts22">Lua Менеджер возможностей Луа (Manager of Lua features)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует логику всех функций Lua-библиотеки taseditor</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">содержит список отложенных изменений инпута</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">по требованию (от FCEUX Lua engine): обновляет кнопку "Run function"</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: идентификаторы джойпадов для изменений инпута, максимальная длина имени для функции </span><span class="rvts21">applychanges()</span><span class="rvts22">, текст для кнопки "Run function" по умолчанию</span></p>
<p class="rvps15"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">реализует логику всех функций Lua-библиотеки taseditor</span></li>
<li class="rvps15"><span class="rvts22">содержит список отложенных изменений Ввода</span></li>
<li class="rvps15"><span class="rvts22">по требованию (от FCEUX Lua engine): обновляет кнопку "</span><span class="rvts32">Run function</span><span class="rvts22">"</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: идентификаторы джойпадов для изменений Ввода, максимальная длина имени для функции </span><span class="rvts21">applychanges()</span><span class="rvts22">, текст для кнопки "</span><span class="rvts32">Run function</span><span class="rvts22">" по умолчанию</span></li>
</ul>
<p class="rvps15"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts21">taseditor_project.cpp</span></p>
<p class="rvps10"><span class="rvts22">Project - заголовок рабочего проекта (Header of working project)</span></p>
<p class="rvps10"><span class="rvts22">Project Менеджер рабочего проекта (Manager of working project)</span></p>
<p class="rvps10"><span class="rvts44">[единичный экземпляр]</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">хранит информацию о файловом имени проекта и о наличии несохранённых изменений</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует сохранение и загрузку проектов из файловой системы</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">реализует функцию автоматического сохранения проекта</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит ресурсы: масштаб настройки автосохранения, имя проекта по умолчанию</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">хранит информацию о файловом имени проекта и о наличии несохранённых изменений</span></li>
<li class="rvps15"><span class="rvts22">реализует сохранение и загрузку проектов из файловой системы</span></li>
<li class="rvps15"><span class="rvts22">реализует функцию автоматического сохранения проекта</span></li>
<li class="rvps15"><span class="rvts22">Хранит ресурсы: масштаб настройки автосохранения, имя проекта по умолчанию</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts78">Модификация эмулятора</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор требует внесения следующих модификаций в код самого эмулятора.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модули </span><span class="rvts26">Main</span><span class="rvts22">/</span><span class="rvts26">Window</span><span class="rvts22">:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">вызывать центральную функцию Тасэдитора после эмуляции каждого кадра, а также, когда эмулятор на паузе. Частота вызова должна быть не менее 20 раз в секунду (это требуется для плавности анимаций)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">передавать системные сообщения окну Тасэдитора. Также передавать Тасэдитору сообщения таблицы клавиатурных акселераторов</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">если эмулятор не использует колесо мыши, он должен пересылать WM_MOUSEWHEEL Тасэдитору, а не игнорировать это сообщение. То же самое с обработкой средней кнопки</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при выходе из эмулятора, если запущен Тасэдитор, необходимо вызывать функцию AskSave(), чтобы Тасэдитор проверил наличие несохранённых изменений и позволил пользователю сохранить их. Если функция AskSave() возвращает </span><span class="rvts74">false</span><span class="rvts22">, отменять выход из эмулятора (это означает, что пользователь выбрал Отмену)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">вызывать центральную функцию Тасэдитора после эмуляции каждого кадра, а также, когда эмулятор на паузе. Частота вызова должна быть не менее 20 раз в секунду (это требуется для плавности анимаций)</span></li>
<li class="rvps10"><span class="rvts22">передавать системные сообщения окну Тасэдитора, в том числе сообщения клавиатурных акселераторов</span></li>
<li class="rvps10"><span class="rvts22">если эмулятор не использует колесо мыши, он должен пересылать WM_MOUSEWHEEL Тасэдитору, а не игнорировать это сообщение. То же самое с обработкой средней кнопки</span></li>
<li class="rvps10"><span class="rvts22">при выходе из эмулятора, если запущен Тасэдитор, необходимо вызывать функцию AskSave(), чтобы Тасэдитор проверил наличие несохранённых изменений и позволил пользователю сохранить их. Если функция AskSave() возвращает </span><span class="rvts74">false</span><span class="rvts22">, отменять выход из эмулятора (это означает, что пользователь выбрал Отмену)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Movie</span><span class="rvts22">:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">предоставлять полный доступ к данным текущего мувика (создание/чтение/запись/любая модификация). Мувик должен быть промежуточным слоем между пользовательским вводом (генерируемым с помощью виртуальных джойстиков) и эмулируемой игрой. Игра ни на каком этапе эмуляции не должна брать инпут напрямую из виртуальных джойстиков. Альтернатива (как реализовано в FCEUX): при любом изменении Ввода мувика на текущем кадре эмулятор должен изменять состояние виртуальных джойстиков, используя данные из мувика. В любом случае, Тасэдитор взаимодействует с игрой, модифицируя данные мувика, и ничего не знает про виртуальные джойстики. В Piano Roll отображаются данные из текущего мувика (хотя у Тасэдитора есть и своё внутреннее представление инпута - класс "Snapshot"), и при редактировании Ввода изменяются данные текущего мувика</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">в режиме Записи в начале каждого кадра (сразу после чтения данных из виртуальных джойстиков в мувик) отправлять сигнал Рекордеру; быть готовым, что Рекордер изменит данные этого кадра в мувике</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">предоставлять полный доступ к данным текущего мувика (создание/чтение/запись/любая модификация). Мувик должен быть промежуточным слоем между пользовательским вводом (генерируемым с помощью виртуальных джойстиков) и эмулируемой игрой. Игра ни на каком этапе эмуляции не должна брать Ввод напрямую из виртуальных джойстиков. Альтернатива (как реализовано в FCEUX): при любом изменении Ввода мувика на текущем кадре эмулятор должен изменять состояние виртуальных джойстиков, используя данные из мувика. В любом случае, Тасэдитор взаимодействует с игрой, читая и модифицируя данные мувика, и не опрашивает виртуальные джойстики. В Piano Roll отображаются данные из текущего мувика, и при редактировании Ввода изменяются данные текущего мувика</span></li>
<li class="rvps10"><span class="rvts22">в режиме Записи в начале каждого кадра (сразу после чтения данных из виртуальных джойстиков в мувик) отправлять сигнал Рекордеру (и Рекордер может изменить данные этого кадра в мувике)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Input</span><span class="rvts22">:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">предоставлять интерфейс для чтения нажатых в данный момент кнопок виртуального джойстика</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда запущен Тасэдитор, сброс/выключение и другие команды эмулируемой платформы не должны срабатывать сразу по команде пользователя. Они должны лишь подавать сигнал Рекордеру (в начале кадра - вместе с новым инпутом), и он сам применит их после записи соответствующих данных в мувик. А когда режим Записи отключен, у пользователя вообще не должно быть возможности вызвать команды эмулируемой платформы</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">предоставлять интерфейс для чтения нажатых в данный момент кнопок виртуального джойстика</span></li>
<li class="rvps10"><span class="rvts22">Сброс/выключение и другие команды эмулируемой платформы не должны срабатывать сразу по команде пользователя. Они должны работать подобно копкам виртуальных джойстиков, чтобы у Тасэдитора была возможность разрешить или запретить выполнение вызванной команды. А когда режим Записи отключен, у пользователя вообще не должно быть возможности вызвать команды эмулируемой платформы</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Output</span><span class="rvts22">:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">предоставлять доступ к текущему значению флага лага (в конце каждого кадра)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">иметь функцию записи скриншота в память (в том числе с записью HUD)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">предоставлять доступ к текущему значению флага лага (в конце каждого кадра)</span></li>
<li class="rvps10"><span class="rvts22">иметь функцию записи текущего скриншота в память (в том числе с наложенным HUD и Lua-вывода)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">SaveStates</span><span class="rvts22">:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сэйвы должны восстанавливать состояние игры в точности</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохранение и загрузка сэйва не должны занимать много процессорного времени, так как Гринзона автоматически создаёт сэйв в конце каждого кадра, и это не должно быть заметным для пользователя</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">объём сэйва (в сжатом состоянии) не должен занимать слишком много места, так как для комфортной работы в Тасэдиторе требуется хранить Гринзону как минимум для 1000 ближайших кадров</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">в отличие от традиционных сэйвов, в сэйвах Гринзоны не должно быть мувика (это лишняя трата места)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">иметь функцию создания сэйва в памяти и функцию загрузки состояния игры из сэйва в памяти</span></li>
<li class="rvps10"><span class="rvts22">сэйвы должны восстанавливать состояние игры в точности</span></li>
<li class="rvps10"><span class="rvts22">сохранение и загрузка сэйва не должны занимать много процессорного времени, так как Гринзона автоматически создаёт сэйв для каждого кадра, и это не должно быть заметным для пользователя</span></li>
<li class="rvps10"><span class="rvts22">сэйвы должны храниться в сжатом виде, чтобы объём сэйва не занимал слишком много места, так как для комфортной работы в Тасэдиторе требуется хранить Гринзону как минимум для 1000 ближайших кадров</span></li>
<li class="rvps10"><span class="rvts22">в сэйвах Гринзоны не должно быть данных текущего мувика (это лишняя трата места)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Config</span><span class="rvts22">:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при запуске эмулятор должен загружать данные </span><span class="rvts74">taseditor_config</span><span class="rvts22"> из файла общих настроек эмулятора, если же файл не найден, не трогать Taseditor_config (тогда в нём останутся настроки по умолчанию)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при выходе эмулятор должен сохранять данные </span><span class="rvts74">taseditor_config</span><span class="rvts22"> в файл общих настроек</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">при запуске эмулятор должен загружать данные </span><span class="rvts74">taseditor_config</span><span class="rvts22"> из файла общих настроек эмулятора, если же файл не найден, не трогать </span><span class="rvts74">taseditor_config</span><span class="rvts22"> (тогда в нём останутся настроки по умолчанию)</span></li>
<li class="rvps10"><span class="rvts22">при выходе эмулятор должен сохранять данные </span><span class="rvts74">taseditor_config</span><span class="rvts22"> в файл общих настроек</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Lua engine</span><span class="rvts22">:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">поддерживать библиотеку </span><span class="rvts21">taseditor</span><span class="rvts22">. Логика функций реализуется самим Тасэдитором, а от эмулятора требуется брать входные данные из стека и передавать их соответствующей функции Тасэдитора, а затем принимать выходные данные и помещать их в стек Луа</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">поддерживать регистрацию не более одной </span><a class="rvts28" href="LuaAPI.html#registermanual">Manual-функции</a><span class="rvts22"> и как минимум одной </span><a class="rvts28" href="LuaAPI.html#registerauto">Автофункции</a></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">подавать сигнал Тасэдитору об изменении статуса Manual-функции (регистрация/удаление), чтобы тот изменял состояние кнопки "Run function"</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">поддерживать библиотеку </span><span class="rvts21">taseditor</span><span class="rvts22">. Логика функций реализуется самим Тасэдитором, а от эмулятора требуется брать входные данные из стека и передавать их соответствующей функции Тасэдитора, а затем принимать выходные данные и помещать их в стек Луа</span></li>
<li class="rvps10"><span class="rvts22">поддерживать регистрацию не более одной </span><a class="rvts28" href="LuaAPI.html#registermanual">Manual-функции</a><span class="rvts22"> и как минимум одной </span><a class="rvts28" href="LuaAPI.html#registerauto">Автофункции</a></li>
<li class="rvps10"><span class="rvts22">подавать сигнал Тасэдитору об изменении статуса Manual-функции (регистрация/удаление), чтобы тот изменял состояние кнопки "</span><span class="rvts32">Run function</span><span class="rvts22">"</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Replay</span><span class="rvts22">:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">эмулятор должен уметь проигрывать проекты Тасэдитора как обычные мувики, игнорируя дополнительные данные в конце файла</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">так как размеры проектов Тасэдитора могут быть огромными, при открытии файла не нужно загружать их в память полностью</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">определять тип проигрываемого мувика (обычный мувик или мувик с данными Тасэдитора в конце). Если это проект Тасэдитора, то при попытке редактирования его содержимого (при загрузке сэйва в режиме Read+Write) эмулятор должен отказываться от редактирования и предлагать запуск Тасэдитора, а в случае запуска сразу передавать Тасэдитору ссылку на проигрываемый файл</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">эмулятор должен уметь проигрывать проекты Тасэдитора как обычные мувики, игнорируя дополнительные данные в конце файла</span></li>
<li class="rvps10"><span class="rvts22">так как размеры проектов Тасэдитора могут быть огромными, при открытии файла не нужно загружать их в память полностью</span></li>
<li class="rvps10"><span class="rvts22">определять тип проигрываемого мувика (обычный мувик или мувик с данными Тасэдитора в конце). Если это проект Тасэдитора, то при попытке редактирования его содержимого (при загрузке сэйва в режиме Read+Write) эмулятор должен отказываться от редактирования и предлагать запуск Тасэдитора, а в случае запуска сразу передавать Тасэдитору ссылку на проигрываемый файл</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Остальное</span><span class="rvts22">:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">эмулятор обязан быть стабильным и детерминированным. Основой работы Проигрывателя Тасэдитора является строгая детерминированность игрового процесса. Если при загрузках сэйвов состояние игры будет хоть немного отличаться от состояния в момент сохранения, это повлечёт много проблем, в частности, навигация Курсором Проигрывателя будет неадекватной</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">необходимо учесть все пункты </span><a class="rvts28" href="MistakeProofing.html">Защиты от ошибок</a><span class="rvts22">, относящиеся к модификации эмулятора. В частности при запуске Тасэдитор должен иметь возможность временно отключать ряд настроек эмулятора и восстанавливать их значение при выходе. Эмулятор должен обеспечить невозможность редактирования пользователем этих настроек во время работы Тасэдитора</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">желательна высокая производительность эмуляции, позволяющая ускорять эмуляцию (функция "турбо") во много раз. Неплохо также иметь возможность автоматически отключать звук при турбо-эмуляции.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">эмулятор обязан быть стабильным и детерминированным. Основой работы Проигрывателя Тасэдитора является строгая детерминированность игрового процесса. Если при загрузках сэйвов состояние игры будет хоть немного отличаться от состояния в момент сохранения, это повлечёт много проблем, в частности, навигация Курсором Проигрывателя будет неадекватной</span></li>
<li class="rvps10"><span class="rvts22">необходимо учесть все пункты </span><a class="rvts28" href="MistakeProofing.html">Защиты от ошибок</a><span class="rvts22">, относящиеся к модификации эмулятора. В частности при запуске Тасэдитор должен иметь возможность временно отключать ряд настроек эмулятора и восстанавливать их значение при выходе. Эмулятор должен обеспечить невозможность редактирования пользователем этих настроек во время работы Тасэдитора</span></li>
<li class="rvps10"><span class="rvts22">желательна высокая производительность эмуляции, позволяющая ускорять эмуляцию (функция "турбо") во много раз. Неплохо также иметь возможность автоматически отключать звук при турбо-эмуляции.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>1. Введение</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,9 +53,9 @@
<div id="topic_content">
<p><span class="rvts20">Введение</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/famtasia-smb3j.png"></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/famtasia-smb3j.png"/></p>
<p class="rvps10"><span class="rvts22">ТАСинг это процесс создания экстраординарного прохождения игры. Для настоящего ТАСера недостаточно просто пройти игру до конца, требуется сделать нечто настолько необычное, что это оправдает использование инструментов.</span></p>
<p class="rvps10"><span class="rvts22">Для этого и мыслить требуется нестандартно. В</span><span class="rvts22">о время нормальной игры практически весь ход наших мыслей определяется игровыми правилами, за несоблюдение которых игра штрафует геймовером и другими средствами. Несложными психологическими приёмами игра направляет фантазию игрока в нужное русло, чтобы дать ему правдоподобную атмосферу целостного мира и удержать его в запланированной разработчиками зоне комфорта.</span></p>
<p class="rvps10"><span class="rvts22">Поэтому для успешного создания неординарного прохождения ТАСеру необходимо не только в совершенстве владеть инструментами эмулятора, но и уметь мысленно абстрагироваться от правил игры, при этом физически оставаясь в рамках этих правил (ведь ТАСинг это не читерство, нельзя воздействовать на игру иначе как кнопками джойстика).</span></p>
@ -63,79 +63,69 @@
<p class="rvps10"><span class="rvts22">Возможность исправлять свои ошибки раскрепощает фантазию человека и побуждает его экспериментировать. Иллюзии конкретной игры уже менее ограничивают спектр мыслей ТАСера. Но на ход мыслей всё ещё оказывают влияние стереотипы реального физического мира. Например, если опасный объект убивает персонажа, то логично предположить, что он убивает всегда. Хотя на самом деле может оказаться, он убивает только в чётные кадры или только при обнулении дробной части координат. Но об этом невозможно догадаться, используя одни лишь сэйвы и замедление. Нужно сначала перестать быть игроком, чтобы стать независимым исследователем.</span></p>
<p class="rvps10"><span class="rvts22">Большим прорывом в истории развития ТАСинга стал </span><span class="rvts26">Frame Advance</span><span class="rvts22"> покадровая эмуляция игр. Теперь при ТАСинге игра постоянно стоит на паузе, предоставляя ТАСеру возможность размеренно анализировать каждый аспект геймплея по отдельности. Раньше (при простом замедлении) игра не переставала быть связным потоком событий, которые игрок вынужден воспринимать как единый коктейль переживаний и эмоций. А теперь при покадровой игре ТАСер может обособить в голове любое отдельно взятое событие текущего кадра. Это значительно меняет принципы восприятия игровой информации. Стереотипы материального мира уже не диктуют ТАСеру, как действовать в мире виртуальном, и человек видит игру более объективно, а значит, может обнаружить несовершенства/лазейки в её правилах.</span></p>
<p class="rvps10"><span class="rvts22">Хотя сама игра по-прежнему пытается навязать игроку типовые шаблоны поведения, и новичку справляться с этим сложнее, чем опытному ТАСеру. Именно поэтому опытным ТАСерам гораздо легче обогнать чужой спидран не из-за ловкого владения инструментами, а из-за </span><span class="rvts31">"профессиональной деформации"</span><span class="rvts22">, позволяющей легко замечать уязвимости в играх.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">С тех пор было изобретено ещё много инструментов ТАСинга, однако сам способ взаимодействия ТАСера с игрой оставался без изменений. ТАСер редактирует Ввод в той же последовательности, в которой течёт время в игре. Эта линейность процесса формирует определённые ограничения в мышлении ТАСера. Когда вы привыкаете после каждого нажатия кнопки получать от игры визуальное подтверждение срабатывания этой кнопки, вы ассоциируете себя с игровым персонажем. Из-за этого вам гораздо труднее взглянуть на происходящее "со стороны". А ведь от ТАСера требуется максимально объективный взгляд на игру.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Разработка инструментального комплекса под названием "TAS Editor" преследует две основные цели:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">1)</span>
<span class="rvts22">понизить порог вхождения в ТАСинг для новичков</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">2)</span>
<span class="rvts22">повысить объективность оценки игрового процесса</span></p>
<p class="rvps15"><span class="rvts22"><br></span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">понизить порог вхождения в ТАСинг для новичков</span></li>
<li class="rvps15"><span class="rvts22">повысить объективность оценки игрового процесса</span></li>
</ol>
<p class="rvps15"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Первая цель достигается с помощью детальной визуализации всех аспектов ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22">Вторая цель достигается с помощью </span><span class="rvts22">перехода от линейного переписывания отрезков мувика к нелинейному редактированию Ввода. Более высокий уровень абстрагирования от правил проходимой игры </span><span class="rvts22">достигается за счёт появления у ТАСера новых возможностей:</span></p>
<h1 class="rvps14" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts0"><span class="rvts22">возможность изменять Ввод в произвольной последовательности (а не только в той последовательности, в которой протекают события игры) </span></span><span class="rvts0"><span class="rvts30"></span></span><span class="rvts0"><span class="rvts22"> благодаря интерфейсу Piano Roll</span></span></h1>
<h1 class="rvps14" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts0"><span class="rvts22">возможность просматривать игровые события в произвольном порядке (а не только кадр за кадром) </span></span><span class="rvts0"><span class="rvts30"></span></span><span class="rvts0"><span class="rvts22"> благодаря Гринзоне</span></span></h1>
<h1 class="rvps14" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts0"><span class="rvts22">возможность определять причинно-следственную связь между </span></span><span class="rvts0"><span class="rvts22">Ввод</span></span><span class="rvts0"><span class="rvts22">ом и его отдалёнными последствиями (а не только ближайшими) </span></span><span class="rvts0"><span class="rvts30"></span></span><span class="rvts0"><span class="rvts22"> благодаря функции турбо-добегания</span></span></h1>
<h1 class="rvps14" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts0"><span class="rvts22">возможность реализовать собственное логическое разбиение мувика на составные части (а не только на TV-кадры или на уровни игры) </span></span><span class="rvts0"><span class="rvts30"></span></span><span class="rvts0"><span class="rvts22"> благодаря Маркерам.</span></span></h1>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts0"><span class="rvts22">возможность изменять Ввод в произвольной последовательности (а не только в той последовательности, в которой протекают события игры) </span></span><span class="rvts0"><span class="rvts30"></span></span><span class="rvts0"><span class="rvts22"> благодаря интерфейсу Piano Roll</span></span></li>
<li class="rvps14"><span class="rvts0"><span class="rvts22">возможность просматривать игровые события в произвольном порядке (а не только кадр за кадром) </span></span><span class="rvts0"><span class="rvts30"></span></span><span class="rvts0"><span class="rvts22"> благодаря Гринзоне</span></span></li>
<li class="rvps14"><span class="rvts0"><span class="rvts22">возможность определять причинно-следственную связь между </span></span><span class="rvts0"><span class="rvts22">Ввод</span></span><span class="rvts0"><span class="rvts22">ом и его отдалёнными последствиями (а не только ближайшими) </span></span><span class="rvts0"><span class="rvts30"></span></span><span class="rvts0"><span class="rvts22"> благодаря функции турбо-добегания</span></span></li>
<li class="rvps14"><span class="rvts0"><span class="rvts22">возможность реализовать собственное логическое разбиение мувика на составные части (а не только на TV-кадры или на уровни игры) </span></span><span class="rvts0"><span class="rvts30"></span></span><span class="rvts0"><span class="rvts22"> благодаря Маркерам.</span></span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В дополнение к этому в TAS Editor 1.0 реализован новый уровень большинство старых инструментов ТАСинга:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">журнал лага эволюция Счётчика лага</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">журнал нажатых кнопок эволюция Индикатора </span><span class="rvts22">Ввод</span><span class="rvts22">а</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">пошаговый откат в дополнение к загрузкам старого состояния мувика</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">встроенный редактор вместо хекс-редактора и Блокнота</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">номер и название текущего логического блока в дополнение к номеру текущего кадра</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">счётчик Выделения (линейка) в дополнение к счётчику кадров</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">шаблоны вместо настроек Autofire</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Superimpose (наложение) вместо настроек Auto-hold</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">журнал лага эволюция Счётчика лага</span></li>
<li class="rvps15"><span class="rvts22">журнал нажатых кнопок эволюция Индикатора </span><span class="rvts22">Ввод</span><span class="rvts22">а</span></li>
<li class="rvps15"><span class="rvts22">пошаговый откат в дополнение к загрузкам старого состояния мувика</span></li>
<li class="rvps15"><span class="rvts22">встроенный редактор вместо хекс-редактора и Блокнота</span></li>
<li class="rvps15"><span class="rvts22">номер и название текущего логического блока в дополнение к номеру текущего кадра</span></li>
<li class="rvps15"><span class="rvts22">счётчик Выделения (линейка) в дополнение к счётчику кадров</span></li>
<li class="rvps15"><span class="rvts22">шаблоны вместо настроек Autofire</span></li>
<li class="rvps15"><span class="rvts22">Superimpose (наложение) вместо настроек Auto-hold</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Запуская Тасэдитор, приготовьтесь к управлению игрой с высоты птичьего полёта. Если вы уже имеете опыт ТАСинга традиционным способом, некоторые аспекты обучения покажутся вам проще, а некоторые сложнее, чем для новичка. Старые привычки могут помешать взглянуть на ТАСинг под другим углом зрения. Однако постарайтесь прочитать весь Курс до конца, вы наверняка узнаете много нового о ТАСинге в целом.</span></p>
<p class="rvps10"><span class="rvts22">Одной из наиболее непривычных особенностей ТАСинга в Тасэдиторе является упор на мышиное управление. Мышка даёт пользователю высокую скорость редактирования </span><span class="rvts22">Ввод</span><span class="rvts22">а и удобство перемотки Проигрывателя. Хотя большинство функций Тасэдитора имеют свои аналоги на клавиатуре, без мыши комфортная и эффективная работа невозможна.</span></p>
<p class="rvps10"><span class="rvts22">Традиционный метод ТАСинга не так уж далеко ушёл от обычного прохождения игры с геймпадом или клавиатурой в руках. Геймпад является эффективным средством для создания кнопочного </span><span class="rvts22">Ввод</span><span class="rvts22">а. Однако основную</span><span class="rvts22"> часть времени ТАСер проводит за различными манипуляциями с однажды совершённым </span><span class="rvts22">Ввод</span><span class="rvts22">ом. И здесь уже удобнее использовать не геймпад, а клавиатуру или мышку. Например, нажатиями одной клавиши вы сможете передвинуть часть Ввода, чтобы она воспринималась игрой на кадр позже или раньше. А когда требуется изменить высоту прыжка (то есть длительность зажатия кнопки </span><span class="rvts32">A</span><span class="rvts22">), проще сделать это одним щелчком, чем переключаться в режим Записи и набирать весь диапазон кадров заново.</span></p>
<p class="rvps10"><span class="rvts22">Тем не менее, при желании можно работать в Тасэдиторе точно так же, как делали мувики раньше. Тасэдитор поддерживает все существенные аспекты традиционного метода ТАСинга. Если использовать окно Тасэдитора только в качестве информационной панели где-нибудь у края экрана, вы можете даже не заметить никаких изменений в своей работе. Это хорошая причина для плавного перехода от устаревшего метода ТАСинга к новому. Поначалу вам могут приглянуться второстепенные фичи Тасэдитора, такие как визуализация лага и Дерево ответвлений. Позже может потребоваться небольшой копипаст </span><span class="rvts22">Ввод</span><span class="rvts22">а, при котором Тасэдитор послужит быстрой заменой внешнему редактору. И через некоторое время вы обнаружите, что непосредственное редактирование </span><span class="rvts22">Ввод</span><span class="rvts22">а работает быстрее перезаписи.</span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/chip-and-dale.png"></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/chip-and-dale.png"/></p>
<p class="rvps10"><span class="rvts22">Преимущество нового метода ТАСинга перед традиционным очевиднее всего проявляется при создании ТАСов с управлением двумя и более игроками одновременно. В своё время для традиционного ТАСинга были придуманы различные костыли вроде автозажатия (Auto-hold), назначения нескольких кнопок на одну клавишу, создания макросов и скриптов для мультитрекинга. С Тасэдитором всё это становится неактуальным, так как ТАСер больше не вынужден вживаться в роль игрока, который ассоциирует себя с управляемым персонажем. Теперь вы не играете, а размышляете над разложенной по полочкам игрушкой и создаёте сценарий действий в виде </span><span class="rvts22">Ввод</span><span class="rvts22">а. Так что нет большой разницы, находится ли под вашим управлением один, два или множество персонажей.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор также задуман как средство борьбы с рутиной. В ТАСинге всегда было много нудных повторяющихся действий. Конечно, программа не избавляет от необходимости проверять все возможные варианты развития игровой ситуации, но она автоматизирует ряд вещей и даёт прирост эффективности в мелочах, позволяя ТАСеру сохранять терпение дольше, чем при полностью ручном ТАСинге.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Интересные факты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Во время создания Тасэдитора на продумывание деталей и способов усовершенствования рабочего процесса ушло больше времени, чем на написание кода.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Большинство действий в Тасэдиторе можно совершить несколькими способами.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Любую совершённую операцию можно откатить или повторить.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Можно полностью игнорировать любую часть функционала Тасэдитора, используя только приглянувшиеся фичи.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">Во время создания Тасэдитора на продумывание деталей и способов усовершенствования рабочего процесса ушло больше времени, чем на написание кода.</span></li>
<li class="rvps15"><span class="rvts22">Большинство действий в Тасэдиторе можно совершить несколькими способами.</span></li>
<li class="rvps15"><span class="rvts22">Любую совершённую операцию можно откатить или повторить.</span></li>
<li class="rvps15"><span class="rvts22">Можно полностью игнорировать любую часть функционала Тасэдитора, используя только приглянувшиеся фичи.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Особое внимание было уделено пользовательскому интерфейсу. Когда наберётесь опыта, сможете совершать многие действия машинально, не отвлекаясь от анализа игровой ситуации.</span></p>
<p class="rvps10"><span class="rvts22">Если у вас появится какая-нибудь идея по уменьшению рутинности ТАСинга пишите на форум TASVideos. Многие идеи, воплощённые в Тасэдиторе, когда-то были озвучены на этом форуме в качестве "инструментов мечты".</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Помимо нового подхода к ТАСингу Тасэдитор также предлагает средства для организации рабочего процесса. Из-за бессистемного подхода многие новички тратят большую часть времени неэффективно, распыляют силы, быстро устают и в итоге получают далёкий от идеала ТАС. Со временем они вырабатывают некий набор приёмов и привычек, становятся опытными ТАСерами. Но приёмы традиционного метода довольно плохо поддаются словесному объяснению (до сих пор они не были формализованы), поэтому каждому новому ТАСеру приходится учиться на собственных ошибках. В этом Курсе мы попытаемся сформировать чёткое представление о методичном ТАСинге, как традиционном, так и новом.</span></p>
<p class="rvps10"><span class="rvts22">Рабочий процесс в Тасэдиторе во многом похож на программирование с использованием интерпретируемого языка. Вы редактируете код и одновременно видите результат исполнения кода на экране. ТАСер может мгновенно увидеть результат своих промежуточных действий на экране, а может увлечься конструированием одного участка "кода" и просмотреть результат лишь после завершения конструкции.</span></p>
<p class="rvps10"><span class="rvts22">У программистов есть ценная традиция повышение читабельности кода с помощью комментариев. Это позволяет держать в голове более чёткую картину проекта и обходиться без постоянной перепроверки результатов, потому что в большинстве случаев результат весьма предсказуем, когда известен контекст. Более того, высокая читабельность кода позволяет при возвращении к отложенному проекту быстро освежить все необходимые воспоминания. Конечно, если программист добросовестно документировал свой код во время его написания.</span></p>
<p class="rvps10"><span class="rvts22">Теперь и ТАСер может документировать свой проект прямо в процессе создания писать комментарии, присваивать структурам (шаблонам и блокам </span><span class="rvts22">Ввод</span><span class="rvts22">а) понятные имена, тестировать различные версии кода в отдельных ветках репозитория (Дерева ответвлений), продуктивно работать в соавторстве с другим ТАСером. При этом от пользователя не требуется соблюдать какие-либо конвенции. Вы сами определяете правила оформления своего проекта. Например, если вы не поленились в первом уровне дать название использованному трюку, в следующих уровнях вы сможете продублировать нужную последовательность кнопок всего несколькими нажатиями клавиш, если поленились придётся отыскать место выполнения трюка вручную. В простеньких ТАСах можно обойтись без комментариев и долгосрочных планов, однако в сложных проектах этот функционал Тасэдитора может весьма пригодиться.</span></p>
<p class="rvps10"><span class="rvts22">Сайт </span><a class="rvts28" href="http://tasvideos.org" target="_blank">TASVideos.org</a><span class="rvts22"> поддерживает загрузку проектов Тасэдитора (fm3-файлов) в сабмишенах, так что вы можете делиться не только готовым мувиком, но и своими наработками, поощряя атмосферу открытости и взаимопомощи. Если не хотите делиться, можете экспортировать данные в формат fm2 и опубликовать только его.</span></p>
<p class="rvps10"><span class="rvts22">FM3-файлы проигрываются эмулятором FCEUX начиная с версии 2.1.6 точно так же, как FM2-файлы. В более ранних версиях FCEUX fm3-файлы также можно проиграть, предварительно поменяв расширение файла на fm2.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В следующей главе: </span><a class="rvts29" href="ProgramInterface.html">обзор интерфейса и обучение основам работы с программой</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Easily create iPhone documentation</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Lua-функции</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,54 +53,54 @@
<div id="topic_content">
<p><span class="rvts20">Lua-функции</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">TAS Editor 1.0 предоставляет библиотеку из 24 функций, доступных для использования в Lua-скриптах, запускаемых в эмуляторе FCEUX. С помощью Lua-скриптов вы можете автоматизировать некоторые аспекты работы в Тасэдиторе и даже создать свои инструменты для обработки мувика.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В папке FCEUX есть папка </span><span class="rvts21">/luaScripts</span><span class="rvts22">, в которой находится подпапка </span><span class="rvts21">/taseditor</span><span class="rvts22">. Там можно найти несколько скриптов с примерами использования функций этой библиотеки.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если вы не знаете, как создавать и запускать Lua-скрипты в эмуляторах, прочитайте раздел </span><a class="rvts28" href="AdvancedFeatures.html#UsingLua">Продвинутые возможности</a><span class="rvts22">, а также соответствующий раздел в </span><a class="rvts28" href="http://www.fceux.com/web/help/fceux.html?Commands.html" target="_blank">документации</a><a class="rvts28" href="http://www.fceux.com/web/help/fceux.html?Commands.html" target="_blank"> FCEUX</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps3"><span class="rvts7">Полный список функций:</span></p>
<p class="rvps2"><span class="rvts22"><br></span></p>
<p class="rvps2"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#registerauto">taseditor.registerauto(function func)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#registermanual">taseditor.registermanual(function func, [string name])</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#engaged">bool taseditor.engaged()</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#markedframe">bool taseditor.markedframe(int frame)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#getmarker">int taseditor.getmarker(int frame)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#setmarker">int taseditor.setmarker(int frame)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#clearmarker">taseditor.clearmarker(int frame)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#removemarker">taseditor.removemarker(int frame)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#getnote">string taseditor.getnote(int index)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#setnote">taseditor.setnote(int index, string newtext)</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#getcurrentbranch">int taseditor.getcurrentbranch()</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#getrecordermode">string taseditor.getrecordermode()</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#getsuperimpose">int taseditor.getsuperimpose()</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#getlostplayback">int taseditor.getlostplayback()</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#getplaybacktarget">int taseditor.getplaybacktarget()</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#setplayback">taseditor.setplayback(int frame)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#stopseeking">taseditor.stopseeking()</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#getselection">table taseditor.getselection()</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#setselection">taseditor.setselection(table new_set)</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#getinput">int taseditor.getinput(int frame, int joypad)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#submitinputchange">taseditor.submitinputchange(int frame, int joypad, int input)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#submitinsertframes">taseditor.submitinsertframes(int frame, int number)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#submitdeleteframes">taseditor.submitdeleteframes(int frame, int number)</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#applyinputchanges">int taseditor.applyinputchanges([string name])</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#clearinputchanges">taseditor.clearinputchanges()</a></p>
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#clearinputchanges"><br></a></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><a class="rvts28" href="LuaAPI.html#clearinputchanges"><br/></a></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="registerauto"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.registerauto(function func)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Регистрирует функцию ("Auto Function", Автофункция), которая будет периодически вызываться эмулятором. Можно зарегистрировать и исполнять Автофункцию, даже когда Тасэдитор не запущен.</span></p>
<p class="rvps10"><span class="rvts22">Когда FCEUX эмулирует игру, Автофункция запускается по окончании каждого кадра (то есть 60 раз в секунду в NTSC-играх и 50 раз в PAL).</span></p>
<p class="rvps10"><span class="rvts22">Когда FCEUX стоит на паузе, Автофункция запускается 20 раз в секунду.</span></p>
@ -108,9 +108,9 @@
<p class="rvps10"><span class="rvts22">Как и в случае с остальными регистрируемыми Луа-функциями в FCEUX, одновременно может быть зарегистрирована только одна Автофункция. Если вы зарегистрируете две Автофункции, вторая заменит первую, причём второй вызов </span><span class="rvts21">taseditor.registerauto()</span><span class="rvts22"> возвратит ссылку на код старой Автофункции. Вы можете удалить зарегистрированную Автофункцию, вызвав </span><span class="rvts21">taseditor.registerauto(</span><span class="rvts74">nil</span><span class="rvts21">)</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если скрипт заканчивает свою работу, а зарегистрированные функции остались, FCEUX не удаляет скрипт из памяти, чтобы была возможность вызывать эти функции. Скрипт завершается, если пользователь останавливает его вручную, или же если все зарегистрированные функции оказываются удалены.</span></p>
<p class="rvps10"><a name="registermanual"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.registermanual(function func, [string name])</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Регистрирует функцию ("Manual Function", Ручная функция), которая может быть вызвана пользователем Тасэдитора вручную. Можно зарегистрировать Ручную функцию даже когда Тасэдитор не запущен.</span></p>
<p class="rvps10"><span class="rvts22">Ручная функция не зависит от состояния паузы эмуляции. Она будет вызвана в конце кадра, в течение которого пользователь нажал кнопку </span><span class="rvts32">Run function</span><span class="rvts22"> в интерфейсе Тасэдитора.</span></p>
<p class="rvps10"><span class="rvts22">Вы можете указать название, которое будет отображаться на кнопке вместо текста "Run function".</span></p>
@ -119,132 +119,129 @@
<p class="rvps10"><span class="rvts22">С помощью регистрации Луа-функций вы можете создавать новые инструменты для Тасэдитора. Например, можно написать скрипт, который инвертирует выделенный Ввод, так что пользователь сможет в любой момент выделить регион мувика и нажать кнопку </span><span class="rvts32">Run function</span><span class="rvts22"> для инвертирования Ввода в этом регионе.</span></p>
<p class="rvps10"><span class="rvts22">Как и в случае с остальными регистрируемыми Луа-функциями в FCEUX, одновременно может быть зарегистрирована только одна Ручная функция. Если вы зарегистрируете две Ручные функции, вторая заменит первую, причём второй вызов </span><span class="rvts21">taseditor.registermanual()</span><span class="rvts22"> возвратит ссылку на старую Ручную функцию. Вы можете удалить зарегистрированную Ручную функцию, вызвав </span><span class="rvts21">taseditor.registermanual(</span><span class="rvts74">nil</span><span class="rvts21">)</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если скрипт заканчивает свою работу, а зарегистрированные функции остались, FCEUX не удаляет скрипт из памяти, чтобы была возможность вызывать эти функции. Скрипт завершается, если пользователь останавливает его вручную, или же если все зарегистрированные функции оказываются удалены.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="engaged"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">bool taseditor.engaged()</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps9"><span class="rvts22">Возвращает </span><span class="rvts74">true</span><span class="rvts22">, если Тасэдитор в данный момент запущен, иначе возвращает </span><span class="rvts74">false</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает </span><span class="rvts74">true</span><span class="rvts22">, если Тасэдитор в данный момент запущен, иначе возвращает </span><span class="rvts74">false</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Кроме того, когда Тасэдитор запущен, вызов функции </span><span class="rvts21">movie.mode()</span><span class="rvts22"> возвращает строку "taseditor".</span></p>
<p class="rvps10"><a name="markedframe"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">bool taseditor.markedframe(int frame)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает </span><span class="rvts74">true</span><span class="rvts22">, если в текущем мувике на указанном кадре установлен Маркер, иначе возвращает </span><span class="rvts74">false</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает </span><span class="rvts74">false</span><span class="rvts22">.</span></p>
<p class="rvps10"><a name="getmarker"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">int taseditor.getmarker(int frame)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает порядковый номер Маркера, под которым находится указанный кадр.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает -1.</span></p>
<p class="rvps10"><a name="setmarker"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">int taseditor.setmarker(int frame)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Устанавливает Маркер на указанный кадр. Возвращает порядковый номер установленного Маркера.</span></p>
<p class="rvps10"><span class="rvts22">Если на этом кадре уже есть Маркер, никаких изменений не производится, будет возвращён номер существующего Маркера на указанном кадре.</span></p>
<p class="rvps10"><span class="rvts22">Можно устанавливать Маркеры даже за пределами Ввода.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает -1.</span></p>
<p class="rvps10"><a name="clearmarker"></a>
<span class="rvts22"><br></span></p>
<p class="rvps9"><span class="rvts72">taseditor.clearmarker(int frame)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><a name="removemarker"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.removemarker(int frame)</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Удаляет Маркер с указанного кадра. Если на этом кадре не было Маркера, никаких изменений не производится.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, никаких изменений не производится.</span></p>
<p class="rvps10"><a name="getnote"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">string taseditor.getnote(int index)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает строку с текстом Заметки указанного Маркера.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает </span><span class="rvts74">nil</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если указанный Маркер не существует, возвращает текст Заметки нулевого Маркера.</span></p>
<p class="rvps10"><a name="setnote"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.setnote(int index, string newtext)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Изменяет текст Заметки указанного Маркера.</span></p>
<p class="rvps10"><span class="rvts22">Если указанный Маркер не существует, никаких изменений не производится.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, никаких изменений не производится.</span></p>
<p class="rvps10"><a name="getcurrentbranch"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">int taseditor.getcurrentbranch()</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает число от 0 до 9, представляющее собой номер текущего ответвления.</span></p>
<p class="rvps10"><span class="rvts22">Если в проекте отсутствуют ответвления, возвращает -1.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает -1.</span></p>
<p class="rvps10"><a name="getrecordermode"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">string taseditor.getrecordermode()</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает строку, соответствующую текущему режиму Рекордера:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">"All"</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">"1P"</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">"2P"</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">"3P"</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">"4P"</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">"All"</span></li>
<li class="rvps10"><span class="rvts22">"1P"</span></li>
<li class="rvps10"><span class="rvts22">"2P"</span></li>
<li class="rvps10"><span class="rvts22">"3P"</span></li>
<li class="rvps10"><span class="rvts22">"4P"</span></li>
</ul>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает </span><span class="rvts74">nil</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Когда вам требуется узнать состояние Записи (Read-only или Read+Write), воспользуйтесь функцией </span><span class="rvts21">emu.readonly()</span><span class="rvts22">.</span></p>
<p class="rvps10"><a name="getsuperimpose"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">int taseditor.getsuperimpose()</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает текущее состояние галочки "Superimpose" в интерфейсе Тасэдитора.</span></p>
<p class="rvps10"><span class="rvts22">0 галочка не установлена (пустой чекбокс)</span></p>
<p class="rvps10"><span class="rvts22">1 галочка установлена</span></p>
<p class="rvps10"><span class="rvts22">2 неопределённое состояние (можно трактовать это как "галочка наполовину установлена")</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает -1.</span></p>
<p class="rvps10"><a name="getlostplayback"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">int taseditor.getlostplayback()</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает номер кадра, на котором находился Курсор Проигрывателя до изменения Ввода.</span></p>
<p class="rvps10"><span class="rvts22">Если Курсор Проигрывателя не терял позицию при усечении Гринзоны, возвращает -1.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает -1.</span></p>
<p class="rvps10"><a name="getplaybacktarget"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">int taseditor.getplaybacktarget()</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если Проигрыватель Тасэдитора в данный момент добегает (seek) к целевому кадру, эта функция возвращает номер целевого кадра.</span></p>
<p class="rvps10"><span class="rvts22">Если же Проигрыватель не занят добеганием, возвращает -1.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает -1.</span></p>
<p class="rvps10"><a name="setplayback"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.setplayback(int frame)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Посылает Курсор Проигрывателя на указанный кадр.</span></p>
<p class="rvps10"><span class="rvts22">Если указанный кадр не находится в Гринзоне, Проигрыватель Тасэдитора начинает добегание к этому кадру.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, ничего не производится.</span></p>
<p class="rvps10"><a name="stopseeking"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.stopseeking()</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Прекращает добегание и ставит эмулятор на паузу.</span></p>
<p class="rvps10"><span class="rvts22">Если Проигрыватель не занят добеганием, просто ставит эмулятор на паузу.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, ничего не производится.</span></p>
<p class="rvps10"><a name="getselection"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">table taseditor.getselection()</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает таблицу (массив), содержащую номера выделенных в данынй момент кадров. Эти номера отсортированы по возрастанию.</span></p>
<p class="rvps10"><span class="rvts22">Если выделенных кадров в данный момент нет, возвращает </span><span class="rvts74">nil</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает </span><span class="rvts74">nil</span><span class="rvts22">.</span></p>
<p class="rvps10"><a name="setselection"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.setselection(table new_set)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Изменяет текущее Выделение на указанный набор кадров. Номера кадров в вашей таблице не обязательно отсортировывать.</span></p>
<p class="rvps10"><span class="rvts22">Если нужно очистить Выделение, используйте </span><span class="rvts21">taseditor.setselection(</span><span class="rvts74">nil</span><span class="rvts21">)</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, ничего не производится.</span></p>
<p class="rvps10"><a name="getinput"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">int taseditor.getinput(int frame, int joypad)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возвращает число, представляющее собой Ввод указанного джойстика на указанном кадре.</span></p>
<p class="rvps10"><span class="rvts22">Если указан отрицательный номер кадра, возвращает -1.</span></p>
<p class="rvps10"><span class="rvts22">Если указан номер кадра за пределами текущего Ввода мувика, возвращает 0, что может трактоваться как отсутствие нажатий на этом кадре.</span></p>
@ -258,9 +255,9 @@
<p class="rvps10"><span class="rvts22">Если указанный джойстик не является числом в пределах [0-4], возвращает -1.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, возвращает -1.</span></p>
<p class="rvps10"><a name="submitinputchange"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.submitinputchange(int frame, int joypad, int input)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Отправляет запрос Тасэдитору, требуя изменить Ввод указанного джойстика на указанном кадре.</span></p>
<p class="rvps10"><span class="rvts22">Сам Ввод мувика будет изменён только после вызова </span><span class="rvts21">taseditor.applyinputchanges()</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Таким образом вы можете изменить сразу несколько кадров мувика, сделав несколько последовательных вызовов </span><span class="rvts21">taseditor.submitinputchange()</span><span class="rvts22">, а затем применив все накопившиеся запросы к мувику одним вызовом </span><span class="rvts21">taseditor.applyinputchanges()</span><span class="rvts22">.</span></p>
@ -271,9 +268,9 @@
<p class="rvps10"><span class="rvts22">Указанный Ввод должен быть числом, которое Тасэдитор сможет представить в виде последовательности битов, отражающих состояние соответствующих кнопок указанного джойстика </span><span class="rvts22">(бит 0 = A, бит 1 = B, бит 2 = Select, бит 3 = Start, бит 4 = Вверх, бит 5 = Вниз, бит 6 = Влево, бит 7 = Вправо)</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, ничего не производится.</span></p>
<p class="rvps10"><a name="submitinsertframes"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.submitinsertframes(int frame, int number)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Отправляет запрос Тасэдитору, требуя вставить указанное количество пустых кадров перед указанным номером кадра мувика.</span></p>
<p class="rvps10"><span class="rvts22">Сам Ввод мувика будет изменён только после вызова </span><span class="rvts21">taseditor.applyinputchanges()</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Вставка пустых кадров сдвигает вниз часть старого Ввода, а также сдвигает вниз часть Маркеров (если установлена галочка "</span><a class="rvts28" href="ProgramCustomization.html#BindMarkerstoInput">Bind Markers to Input</a><span class="rvts22">").</span></p>
@ -282,9 +279,9 @@
<p class="rvps10"><span class="rvts22">Если указан номер кадра за пределами Ввода мувика, Тасэдитор расширит границы мувика во время </span><span class="rvts21">applyinputchanges()</span><span class="rvts22"> до указанного кадра.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, ничего не производится.</span></p>
<p class="rvps10"><a name="submitdeleteframes"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.submitdeleteframes(int frame, int number)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Отправляет запрос Тасэдитору, требуя удалить из мувика указанное количество кадров, начиная с указанного кадра.</span></p>
<p class="rvps10"><span class="rvts22">Сам Ввод мувика будет изменён только после вызова </span><span class="rvts21">taseditor.applyinputchanges()</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Удаление кадров сдвигает вверх часть старого Ввода, а также сдвигает вверх часть Маркеров (если установлена галочка "</span><a class="rvts28" href="ProgramCustomization.html#BindMarkerstoInput">Bind Markers to Input</a><span class="rvts22">").</span></p>
@ -293,9 +290,9 @@
<p class="rvps10"><span class="rvts22">Если указан номер кадра за пределами Ввода мувика, Тасэдитор расширит границы мувика во время </span><span class="rvts21">applyinputchanges()</span><span class="rvts22"> до указанного кадра.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, ничего не производится.</span></p>
<p class="rvps10"><a name="applyinputchanges"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">int taseditor.applyinputchanges([string name])</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Моментально применяет список накопившихся запросов к текущему мувику. Если эти запросы действительно внесли какие-то изменения во Ввод мувика, в Журнале Истории появится новый пункт (чтобы пользователь мог откатить эти изменения), как следствие, Гринзона может быть усечена, Курсор Проигрывателя может отступить назад и запустить автоматическое добегание.</span></p>
<p class="rvps10"><span class="rvts22">Возвращает номер кадра, на котором были обнаружен первый факт изменения Ввода.</span></p>
<p class="rvps10"><span class="rvts22">Если изменений не обнаружено (например, вы запросили Тасэдитор установить нажатия для кнопок, которые и так уже нажаты), возвращает -1.</span></p>
@ -304,18 +301,18 @@
<p class="rvps10"><span class="rvts22">После применения всех запросов Тасэдитор очищает список запросов.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, ничего не производится.</span></p>
<p class="rvps10"><a name="clearinputchanges"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps9"><span class="rvts72">taseditor.clearinputchanges()</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Очищает список накопившихся запросов, позволяя отменить их до вызова </span><span class="rvts21">applyinputchanges()</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется вызывать эту функцию перед формированием нового списка запросов, чтобы быть уверенным, что в список не попадут какие-нибудь старые запросы.</span></p>
<p class="rvps10"><span class="rvts22">Если Тасэдитор не запущен, ничего не производится.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Защита от ошибок</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,206 +53,137 @@
<div id="topic_content">
<p><span class="rvts20">Защита от ошибок</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Здесь приведён список всевозможных мелочей, призванных улучшить взаимодействие пользователя с программой. Все эти детали следует учесть при портировании Тасэдитора на другие платформы.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда пользователь выходит из эмулятора, тот сначала подаёт запрос Тасэдитору, чтобы Тасэдитор мог сохранить текущий проект. Если в проекте имеются несохранённые данные, Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо сохранить изменения, либо не сохранять их, либо отменить выход из эмулятора.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При проигрывании fm3-проектов вне Тасэдитора (в виде обычных мувиков) пользователь может переключить эмулятор в режим Записи и попытаться осуществить перезапись. В этом случае эмулятор сообщает пользователю, что текущий мувик является проектом Тасэдитора, и предлагает начать его редактирование. В случае отказа эмулятор отключает режим Записи и продолжает проигрывание Ввода из файла проекта. В случае согласия эмулятор подаёт сигнал Тасэдитору, и в конце текущего кадра тот запустится и загрузит текущий проигрываемый проект.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда в эмулятор загружен РОМ, запустить Тасэдитор можно в любой момент. Если открыть окно Тасэдитора во время записи или проигрывания мувика, Тасэдитор автоматически создаст безымянный проект, содержащий Ввод из этого мувика. При этом, если мувик начинается с сэйва, Тасэдитор выдаст предупреждение об отсутствии поддержки таких мувиков и создаст чистый мувик.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Пока проекту не присвоено имя, функция автоматического сохранения не работает.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При первом сохранении безымянного проекта Тасэдитор предлагает в качестве имени fm3-файла имя текущего РОМа с расширением, изменённым на fm3.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Так как формат fm3 является надстройкой над форматом fm2, пользователь может открывать fm2-файлы как обычные проекты через диалог "Open TAS Editor Project", выбрав фильтр "All Files (*.*)". При открытии fm2-файлов Тасэдитор дополнительно информирует об этом с помощью диалога Yes/No. Пользователь может либо загрузить fm2-файл в качестве проекта, либо отменить загрузку.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">После открытия fm2-файла или запорченного fm3-файла этот проект считается безымянным, хотя в заголовке окна Тасэдитора отображается имя загруженного файла. При первом сохранении (</span><span class="rvts34">Ctrl + S</span><span class="rvts22">) появится диалог SaveAs, где в качестве имени будет предложено имя загруженного fm2/fm3-файла с расширением, изменённым на fm3. Пользователь может либо сохранить проект под этим именем, либо изменить имя. Таким образом Тасэдитор акцентирует внимание пользователя на том, что сохраняемый проект значительно отличается от имеющегося на диске файла под тем же именем.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В fm3-проектах хранится номер версии используемого fm3-формата. Разные версии могут быть полностью или частично не совместимы между собой. Если при загрузке проекта его версия не совпадает с текущей поддерживаемой версией, проект считается запорченным. Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо продолжить попытку загрузки всего проекта (не рекомендуется), либо загрузить из проекта только fm2-данные о Вводе (рекомендуется), либо отменить загрузку.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Формат fm2 (а значит, и fm3) поддерживает хранение MD5-чексуммы РОМа, использованного при создании мувика/проекта. При загрузке проектов Тасэдитор сверяет чексумму текущего РОМа с чексуммой из проекта, и если они не совпадают, выводит диалог Yes/No, отображающий оригинальное и текущее имя РОМа. Пользователь может либо продолжить загрузку, либо отменить её. Далее, при сохранении этого проекта Тасэдитор вновь обнаружит несовпадение чексумм и предложит заменить в сохраняемом файле имя РОМа и его MD5-чексумму. Пользователь может либо подтвердить замену, либо сохранить проект со старым именем и чексуммой, либо отменить сохранение.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При загрузке запорченных файлов проектов Тасэдитор в меру сил пытается не допустить зависание эмулятора. При обнаружении ошибки во время загрузки дальнейшая загрузка прекращается, и незагруженные данные заменяются данными по умолчанию. В частности, если ошибка произошла во время загрузки Гринзоны, в проекте останутся только кадры Гринзоны, успешно вытащенные из файла, остальные кадры будут бледными. Сообщения об ошибках, произошедших при загрузке проекта, помещаются в Message Log эмулятора FCEUX.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Во время загрузки проекта Тасэдитор принимает во внимание текущие настройки "Greenzone capacity" и "Undo levels". Например, если при сохранении проекта </span><span class="rvts37">Greenzone capacity = 5000</span><span class="rvts22">, а при загрузке </span><span class="rvts37">Greenzone capacity = 3000</span><span class="rvts22">, часть кадров во время загрузки будет пропущена. Это необходимо для того, чтобы проекты, сохранённые на более мощном компьютере, легко загружались на слабом компьютере, у которого могло бы не хватить памяти для загрузки проекта в том же виде, в котором он был сохранён.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При запуске Тасэдитор загружает данные о шаблонах из файла </span><span class="rvts21">taseditor_patterns.txt</span><span class="rvts22">. Если этот файл невозможно открыть (например, он удалён), Тасэдитор создаёт небольшой набор шаблонов по умолчанию, чтобы меню Patterns никогда не пустовало.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Сохранения, используемые Гринзоной, немного отличаются от обычных сохранений. Они не содержат данные мувика, так как для Гринзоны это лишняя информация. Кроме того, они всегда сжаты. Это необходимо для экономии памяти.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Если в результате операции </span><a class="rvts28" href="Operations.html#Delete">Delete</a><span class="rvts22"> или </span><a class="rvts28" href="Operations.html#LUAChange">Lua Change</a><span class="rvts22"> пользователь удалит весь Ввод из мувика, Тасэдитор в тот же момент создаст один пустой кадр в начале мувика.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Во время выделения региона кадров с помощью растягивания мышкой пользователь может второй рукой нажимать акселераторы и хоткеи. Чтобы не было конфликта, во время DRAG_MODE_SELECTION не срабатывают функции, свзанные с изменением выделения:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts21">ClearSelection()</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts21">SelectAll()</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts21">SelectBetweenMarkers()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + A</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts21">selection.undo()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + Q</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts21">selection.redo()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + W</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts21">ReselectClipboard()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + B</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts21">selection.Transpose()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + Вверх</span><span class="rvts22">, </span><span class="rvts34">Ctrl + Вниз</span><span class="rvts22">, </span><span class="rvts34">Ctrl + Home</span><span class="rvts22">, </span><span class="rvts34">Ctrl + End</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts21">selection.JumpPrevMarker()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + Page Up</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts21">selection.JumpNextMarker()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + Page Down</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При перетаскивании Курсора Проигрывателя действует небольшое ограничение, связанное с добеганием. Обычно в Тасэдиторе сразу после щелчка левой кнопкой по столбцу иконок начинается перетаскивание (DRAG_MODE_PLAYBACK), при котором Курсор Проигрывателя перемещается на строку, на которую указывает курсор мыши при зажатой левой кнопке. Однако возможна ситуация, когда пользователь щёлкнул по кадру далеко от головы Гринзоны и не хочет тащить голубой курсор туда вручную. При щелчке запустилось добегание к этому кадру, и началось перетаскивание голубого курсора, но из-за галочки "Follow cursor" Piano Roll прыгнул к текущему положению голубого курсора, и курсор мыши стал указывать уже на другой кадр. Пользователь может не успеть отпустить левую кнопку мыши до момента, когда курсор мыши стал указывать на другой кадр. Чтобы разрешить данную ситуацию, Тасэдитор при перетаскивании считает, что самое первое добегание имеет более высокий приоритет, чем перетаскивание Курсора Проигрывателя. Поэтому во время первого добегания, запущенного при щелчке по столбцу иконок, пользователь не может перетаскивать голубой курсор вверх и вниз. Он может только отменить перетаскивание, отпустив левую кнопку мыши, а затем сделать новый щелчок по столбцу иконок, если требуется. Во время первого добегания курсор мыши заменяется на стрелку с песочными часами. Как только первое добегание окончено, перетаскивание Курсора Проигрывателя будет полноценным.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Так как столбец иконок в Piano Roll довольно узкий, пользователь может случайно промахнуться во время щелчка по этому столбцу. При щелчке по левой границе Piano Roll, а также &nbsp;по пространству слева Piano Roll &nbsp;Тасэдитор считает, что был осуществлён щелчок по колонке иконок. В результате пользователю не нужно точно прицеливаться, когда требуется передвинуть Курсор Проигрывателя или начать его перетаскивание. Благодаря этому возрастает скорость и комфортность работы.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда эмулятор стоит на паузе, средняя кнопка мыши работает только при условии, что правая кнопка мыши отпущена. Так как средняя кнопка обычно является колесом, пользователь может случайно надавить её при вращении колеса с зажатой правой кнопкой (перемещение Курсора Проигрывателя). Вращение колеса с зажатыми клавишами-модификаторами используется гораздо реже, поэтому для них защита не требуется.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Щелчок средней кнопкой по окну FCEUX передаётся окну Тасэдитора. Точно так же передаётся сообщение в вращении колеса, когда фокус у окна FCEUX. А щелчок правой кнопкой по окну FCEUX никак не действует. Благодаря этому пользователь может использовать среднюю кнопку (колесо мыши), даже когда курсор мыши находится над окном FCEUX.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Даже если включен режим Записи, во время добегания Тасэдитор не будет менять Ввод. Благодаря этой особенности можно свободно перетаскивать Курсор Проигрывателя без выключения режима Записи, не опасаясь затереть Ввод.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда запущен Тасэдитор, следующие команды в меню FCEUX доступны только в режиме Записи и при отсутствии добегания:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">NES -&gt; Reset</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">NES -&gt; Power</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">NES -&gt; Eject/insert Disk</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">NES -&gt; Switch Disk Side</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда запущен Тасэдитор, следующие команды в меню FCEUX не доступны:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Open ROM</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Close</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Recent</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Savestate -&gt; Load State</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Savestate -&gt; Save State</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Savestate -&gt; Load State From</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Savestate -&gt; Save State As</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Savestate -&gt; Next save slot</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Savestate -&gt; Previous save slot</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Savestate -&gt; View save slots</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Movie -&gt; Recent</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Movie -&gt; Record Movie</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Movie -&gt; Play Movie</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">File -&gt; Movie -&gt; Stop Movie</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Config -&gt; Enable -&gt; Auto-savestates (всегда отключено во время работы Тасэдитора)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Config -&gt; Enable -&gt; Backup Savestates (всегда отключено во время работы Тасэдитора)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Config -&gt; Enable -&gt; Compress Savestates (всегда включено во время работы Тасэдитора)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Config -&gt; PAL Emulation (следует настроить это до запуска Тасэдитора)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Config -&gt; PPU -&gt; New PPU / Old PPU (следует настроить это до запуска Тасэдитора)</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Tools -&gt; Open TAS Editor</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Также необходимо, чтобы пользователь не изменял настройки синхронизации мувика во время редактирования проекта. Когда запущен Тасэдитор, следующие элементы GUI в окне "Input Configuration" заблокированы:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">галочка "Attach four-score"</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">галочка "Replace port 2 Start With &nbsp;Microphone"</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">ListBox с выбором port0</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">ListBox с выбором port1</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">ListBox с выбором port2</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда запущен Тасэдитор, следующие хоткеи не работают:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Hide Menu Toggle</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Fastest Speed</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Save State As...</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Load State From...</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Record Movie To...</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Play Movie From...</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Stop Movie</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Insert Coin / Toggle Dipswitch эти команды пока не поддерживаются форматом fm2</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Load Last Auto-save</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">View save slots</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Open TAS Editor</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Open ROM</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Close ROM</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Undo/Redo Savestate</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Toggle Fullscreen</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хоткеи, поведение которых меняется при запущенном Тасэдиторе:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Power</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Reset</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Eject or Insert FDS Disk</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Switch FDS Disk Side</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Savestate Slot 0</span><span class="rvts22"> </span><span class="rvts27">Savestate Slot 9</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Save State to Slot 0</span><span class="rvts22"> </span><span class="rvts27">Save State to Slot 9</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Load State from Slot 0</span><span class="rvts22"> </span><span class="rvts27">Load State from Slot 9</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Play Movie From Beginning</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts27">Reload ROM or TAS Editor Project</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Так как клавиши </span><span class="rvts34">Alt</span><span class="rvts22"> и </span><span class="rvts27">F10</span><span class="rvts22"> активно используются при работе в Тасэдиторе, их стандартное действие (открытие меню программы) отключено.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Так как клавиша </span><span class="rvts27">Пробел</span><span class="rvts22"> по умолчанию используется в качестве хоткея, её стандартное действие (симуляция щелчка по элементу GUI, на котором находится фокус клавиатуры) отключена. Также для каждого элемента GUI в окне Тасэдитора реализована обработка щелчка средней кнопкой мыши, чтобы этот щелчок срабатывал независимо от положения курсора мыши.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Так как контекстное меню при щелчке правой кнопкой по Piano Roll почти никогда не требуется, оно появляется только когда пользователь щёлкает по выделенной строке в столбце номеров кадров (Frame#). В остальных случаях контекстное меню не появляется, зато при щелчке правой кнопкой по Piano Roll начинается удобное перетаскивание содержимого Piano Roll во все стороны.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Так как правая кнопка часто используется для перемещения Курсора Проигрывателя колесом, пользователь может щёлкать ею без оглядки на текущее положение курсора мыши. При этом возможен случайный щелчок по Закладке и, соответственно, перезапись Закладки. Чтобы этого не допустить, Список Закладок и Дерево ответвлений требуют от пользователя нажать и отпустить правую кнопку на одной и той же Закладке. При этом, если между нажатием и отпусканием правой кнопки пользователь совершил вращение колесом, установка Закладки отменяется.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Пользователь может осуществлять прыжки на Закладки одинарным щелчком по желаемой иконке в Дереве ответвлений. При этом он ожидает, что голубой треугольник (Курсор Проигрывателя) после щелчка окажется на этом месте в Дереве ответвлений. Это справедливо для Закладок, ответвления которых находятся в текущей хронологии, но это не так для Закладок, представляющих альтернативные стратегии прохождения. При прыжках на кадры этих Закладок Курсор Проигрывателя будет находиться в другом ответвлении (хотя и на том же самом кадре). Чтобы заранее уведомить пользователя о возможном недопонимании с его стороны, при наведении на иконки таких Закладок курсор мыши превращается в стрелку с вопросительным знаком.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Во время трансформации Дерева ответвлений наведение курсора мыши на его элементы не работает, потому что активная область элементов постоянно перемещается и убегает от курсора мыши. Наведение начинает работать сразу после остановки всех иконок.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Когда пользователь выходит из эмулятора, тот сначала подаёт запрос Тасэдитору, чтобы Тасэдитор мог сохранить текущий проект. Если в проекте имеются несохранённые данные, Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо сохранить изменения, либо не сохранять их, либо отменить выход из эмулятора.</span></li>
<li class="rvps10"><span class="rvts22">При проигрывании fm3-проектов вне Тасэдитора (в виде обычных мувиков) пользователь может переключить эмулятор в режим Записи и попытаться осуществить перезапись. В этом случае эмулятор сообщает пользователю, что текущий мувик является проектом Тасэдитора, и предлагает начать его редактирование. В случае отказа эмулятор отключает режим Записи и продолжает проигрывание Ввода из файла проекта. В случае согласия эмулятор подаёт сигнал Тасэдитору, и в конце текущего кадра тот запустится и загрузит текущий проигрываемый проект.</span></li>
<li class="rvps10"><span class="rvts22">Когда в эмулятор загружен РОМ, запустить Тасэдитор можно в любой момент. Если открыть окно Тасэдитора во время записи или проигрывания мувика, Тасэдитор автоматически создаст безымянный проект, содержащий Ввод из этого мувика. При этом, если мувик начинается с сэйва, Тасэдитор выдаст предупреждение об отсутствии поддержки таких мувиков и создаст чистый мувик.</span></li>
<li class="rvps10"><span class="rvts22">Пока проекту не присвоено имя, функция автоматического сохранения не работает.</span></li>
<li class="rvps10"><span class="rvts22">При первом сохранении безымянного проекта Тасэдитор предлагает в качестве имени fm3-файла имя текущего РОМа с расширением, изменённым на fm3.</span></li>
<li class="rvps10"><span class="rvts22">Так как формат fm3 является надстройкой над форматом fm2, пользователь может открывать fm2-файлы как обычные проекты через диалог "Open TAS Editor Project", выбрав фильтр "All Files (*.*)". При открытии fm2-файлов Тасэдитор дополнительно информирует об этом с помощью диалога Yes/No. Пользователь может либо загрузить fm2-файл в качестве проекта, либо отменить загрузку.</span></li>
<li class="rvps10"><span class="rvts22">После открытия fm2-файла или запорченного fm3-файла этот проект считается безымянным, хотя в заголовке окна Тасэдитора отображается имя загруженного файла. При первом сохранении (</span><span class="rvts34">Ctrl + S</span><span class="rvts22">) появится диалог SaveAs, где в качестве имени будет предложено имя загруженного fm2/fm3-файла с расширением, изменённым на fm3. Пользователь может либо сохранить проект под этим именем, либо изменить имя. Таким образом Тасэдитор акцентирует внимание пользователя на том, что сохраняемый проект значительно отличается от имеющегося на диске файла под тем же именем.</span></li>
<li class="rvps10"><span class="rvts22">В fm3-проектах хранится номер версии используемого fm3-формата. Разные версии могут быть полностью или частично не совместимы между собой. Если при загрузке проекта его версия не совпадает с текущей поддерживаемой версией, проект считается запорченным. Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо продолжить попытку загрузки всего проекта (не рекомендуется), либо загрузить из проекта только fm2-данные о Вводе (рекомендуется), либо отменить загрузку.</span></li>
<li class="rvps10"><span class="rvts22">Формат fm2 (а значит, и fm3) поддерживает хранение MD5-чексуммы РОМа, использованного при создании мувика/проекта. При загрузке проектов Тасэдитор сверяет чексумму текущего РОМа с чексуммой из проекта, и если они не совпадают, выводит диалог Yes/No, отображающий оригинальное и текущее имя РОМа. Пользователь может либо продолжить загрузку, либо отменить её. Далее, при сохранении этого проекта Тасэдитор вновь обнаружит несовпадение чексумм и предложит заменить в сохраняемом файле имя РОМа и его MD5-чексумму. Пользователь может либо подтвердить замену, либо сохранить проект со старым именем и чексуммой, либо отменить сохранение.</span></li>
<li class="rvps10"><span class="rvts22">При загрузке запорченных файлов проектов Тасэдитор в меру сил пытается не допустить зависание эмулятора. При обнаружении ошибки во время загрузки дальнейшая загрузка прекращается, и незагруженные данные заменяются данными по умолчанию. В частности, если ошибка произошла во время загрузки Гринзоны, в проекте останутся только кадры Гринзоны, успешно вытащенные из файла, остальные кадры будут бледными. Сообщения об ошибках, произошедших при загрузке проекта, помещаются в Message Log эмулятора FCEUX.</span></li>
<li class="rvps10"><span class="rvts22">Во время загрузки проекта Тасэдитор принимает во внимание текущие настройки "Greenzone capacity" и "Undo levels". Например, если при сохранении проекта </span><span class="rvts37">Greenzone capacity = 5000</span><span class="rvts22">, а при загрузке </span><span class="rvts37">Greenzone capacity = 3000</span><span class="rvts22">, часть кадров во время загрузки будет пропущена. Это необходимо для того, чтобы проекты, сохранённые на более мощном компьютере, легко загружались на слабом компьютере, у которого могло бы не хватить памяти для загрузки проекта в том же виде, в котором он был сохранён.</span></li>
<li class="rvps10"><span class="rvts22">При запуске Тасэдитор загружает данные о шаблонах из файла </span><span class="rvts21">taseditor_patterns.txt</span><span class="rvts22">. Если этот файл невозможно открыть (например, он удалён), Тасэдитор создаёт небольшой набор шаблонов по умолчанию, чтобы меню Patterns никогда не пустовало.</span></li>
<li class="rvps10"><span class="rvts22">Сохранения, используемые Гринзоной, немного отличаются от обычных сохранений. Они не содержат данные мувика, так как для Гринзоны это лишняя информация. Кроме того, они всегда сжаты. Это необходимо для экономии памяти.</span></li>
<li class="rvps10"><span class="rvts22">Если в результате операции </span><a class="rvts28" href="Operations.html#Delete">Delete</a><span class="rvts22"> или </span><a class="rvts28" href="Operations.html#LUAChange">Lua Change</a><span class="rvts22"> пользователь удалит весь Ввод из мувика, Тасэдитор в тот же момент создаст один пустой кадр в начале мувика.</span></li>
<li class="rvps10"><span class="rvts22">Во время выделения региона кадров с помощью растягивания мышкой пользователь может второй рукой нажимать акселераторы и хоткеи. Чтобы не было конфликта, во время DRAG_MODE_SELECTION не срабатывают функции, свзанные с изменением выделения:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">ClearSelection()</span></li>
<li class="rvps10"><span class="rvts21">SelectAll()</span></li>
<li class="rvps10"><span class="rvts21">SelectBetweenMarkers()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + A</span></li>
<li class="rvps10"><span class="rvts21">selection.undo()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + Q</span></li>
<li class="rvps10"><span class="rvts21">selection.redo()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + W</span></li>
<li class="rvps10"><span class="rvts21">ReselectClipboard()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + B</span></li>
<li class="rvps10"><span class="rvts21">selection.Transpose()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + Вверх</span><span class="rvts22">, </span><span class="rvts34">Ctrl + Вниз</span><span class="rvts22">, </span><span class="rvts34">Ctrl + Home</span><span class="rvts22">, </span><span class="rvts34">Ctrl + End</span></li>
<li class="rvps10"><span class="rvts21">selection.JumpPrevMarker()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + Page Up</span></li>
<li class="rvps10"><span class="rvts21">selection.JumpNextMarker()</span><span class="rvts22"> </span><span class="rvts34">Ctrl + Page Down</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">При перетаскивании Курсора Проигрывателя действует небольшое ограничение, связанное с добеганием. Обычно в Тасэдиторе сразу после щелчка левой кнопкой по столбцу иконок начинается перетаскивание (DRAG_MODE_PLAYBACK), при котором Курсор Проигрывателя перемещается на строку, на которую указывает курсор мыши при зажатой левой кнопке. Однако возможна ситуация, когда пользователь щёлкнул по кадру далеко от головы Гринзоны и не хочет тащить голубой курсор туда вручную. При щелчке запустилось добегание к этому кадру, и началось перетаскивание голубого курсора, но из-за галочки "Follow cursor" Piano Roll прыгнул к текущему положению голубого курсора, и курсор мыши стал указывать уже на другой кадр. Пользователь может не успеть отпустить левую кнопку мыши до момента, когда курсор мыши стал указывать на другой кадр. Чтобы разрешить данную ситуацию, Тасэдитор при перетаскивании считает, что самое первое добегание имеет более высокий приоритет, чем перетаскивание Курсора Проигрывателя. Поэтому во время первого добегания, запущенного при щелчке по столбцу иконок, пользователь не может перетаскивать голубой курсор вверх и вниз. Он может только отменить перетаскивание, отпустив левую кнопку мыши, а затем сделать новый щелчок по столбцу иконок, если требуется. Во время первого добегания курсор мыши заменяется на стрелку с песочными часами. Как только первое добегание окончено, перетаскивание Курсора Проигрывателя будет полноценным.</span></li>
<li class="rvps10"><span class="rvts22">Так как столбец иконок в Piano Roll довольно узкий, пользователь может случайно промахнуться во время щелчка по этому столбцу. При щелчке по левой границе Piano Roll, а также &nbsp;по пространству слева Piano Roll &nbsp;Тасэдитор считает, что был осуществлён щелчок по колонке иконок. В результате пользователю не нужно точно прицеливаться, когда требуется передвинуть Курсор Проигрывателя или начать его перетаскивание. Благодаря этому возрастает скорость и комфортность работы.</span></li>
<li class="rvps10"><span class="rvts22">Когда эмулятор стоит на паузе, средняя кнопка мыши работает только при условии, что правая кнопка мыши отпущена. Так как средняя кнопка обычно является колесом, пользователь может случайно надавить её при вращении колеса с зажатой правой кнопкой (перемещение Курсора Проигрывателя). Вращение колеса с зажатыми клавишами-модификаторами используется гораздо реже, поэтому для них защита не требуется.</span></li>
<li class="rvps10"><span class="rvts22">Щелчок средней кнопкой по окну FCEUX передаётся окну Тасэдитора. Точно так же передаётся сообщение в вращении колеса, когда фокус у окна FCEUX. А щелчок правой кнопкой по окну FCEUX никак не действует. Благодаря этому пользователь может использовать среднюю кнопку (колесо мыши), даже когда курсор мыши находится над окном FCEUX.</span></li>
<li class="rvps10"><span class="rvts22">Даже если включен режим Записи, во время добегания Тасэдитор не будет менять Ввод. Благодаря этой особенности можно свободно перетаскивать Курсор Проигрывателя без выключения режима Записи, не опасаясь затереть Ввод.</span></li>
<li class="rvps10"><span class="rvts22">Когда запущен Тасэдитор, следующие команды в меню FCEUX доступны только в режиме Записи и при отсутствии добегания:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">NES -&gt; Reset</span></li>
<li class="rvps10"><span class="rvts22">NES -&gt; Power</span></li>
<li class="rvps10"><span class="rvts22">NES -&gt; Eject/insert Disk</span></li>
<li class="rvps10"><span class="rvts22">NES -&gt; Switch Disk Side</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Когда запущен Тасэдитор, следующие команды в меню FCEUX не доступны:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">File -&gt; Open ROM</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Close</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Recent</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Savestate -&gt; Load State</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Savestate -&gt; Save State</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Savestate -&gt; Load State From</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Savestate -&gt; Save State As</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Savestate -&gt; Next save slot</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Savestate -&gt; Previous save slot</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Savestate -&gt; View save slots</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Movie -&gt; Recent</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Movie -&gt; Record Movie</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Movie -&gt; Play Movie</span></li>
<li class="rvps10"><span class="rvts22">File -&gt; Movie -&gt; Stop Movie</span></li>
<li class="rvps10"><span class="rvts22">Config -&gt; Enable -&gt; Auto-savestates (всегда отключено во время работы Тасэдитора)</span></li>
<li class="rvps10"><span class="rvts22">Config -&gt; Enable -&gt; Backup Savestates (всегда отключено во время работы Тасэдитора)</span></li>
<li class="rvps10"><span class="rvts22">Config -&gt; Enable -&gt; Compress Savestates (всегда включено во время работы Тасэдитора)</span></li>
<li class="rvps10"><span class="rvts22">Config -&gt; PAL Emulation (следует настроить это до запуска Тасэдитора)</span></li>
<li class="rvps10"><span class="rvts22">Config -&gt; PPU -&gt; New PPU / Old PPU (следует настроить это до запуска Тасэдитора)</span></li>
<li class="rvps10"><span class="rvts22">Tools -&gt; Open TAS Editor</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Также необходимо, чтобы пользователь не изменял настройки синхронизации мувика во время редактирования проекта. Когда запущен Тасэдитор, следующие элементы GUI в окне "Input Configuration" заблокированы:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">галочка "Attach four-score"</span></li>
<li class="rvps10"><span class="rvts22">галочка "Replace port 2 Start With &nbsp;Microphone"</span></li>
<li class="rvps10"><span class="rvts22">ListBox с выбором port0</span></li>
<li class="rvps10"><span class="rvts22">ListBox с выбором port1</span></li>
<li class="rvps10"><span class="rvts22">ListBox с выбором port2</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Когда запущен Тасэдитор, следующие хоткеи не работают:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Hide Menu Toggle</span></li>
<li class="rvps10"><span class="rvts22">Fastest Speed</span></li>
<li class="rvps10"><span class="rvts22">Save State As...</span></li>
<li class="rvps10"><span class="rvts22">Load State From...</span></li>
<li class="rvps10"><span class="rvts22">Record Movie To...</span></li>
<li class="rvps10"><span class="rvts22">Play Movie From...</span></li>
<li class="rvps10"><span class="rvts22">Stop Movie</span></li>
<li class="rvps10"><span class="rvts22">Insert Coin / Toggle Dipswitch эти команды пока не поддерживаются форматом fm2</span></li>
<li class="rvps10"><span class="rvts22">Load Last Auto-save</span></li>
<li class="rvps10"><span class="rvts22">View save slots</span></li>
<li class="rvps10"><span class="rvts22">Open TAS Editor</span></li>
<li class="rvps10"><span class="rvts22">Open ROM</span></li>
<li class="rvps10"><span class="rvts22">Close ROM</span></li>
<li class="rvps10"><span class="rvts22">Undo/Redo Savestate</span></li>
<li class="rvps10"><span class="rvts22">Toggle Fullscreen</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Хоткеи, поведение которых меняется при запущенном Тасэдиторе:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Power</span></li>
<li class="rvps10"><span class="rvts27">Reset</span></li>
<li class="rvps10"><span class="rvts22">Eject or Insert FDS Disk</span></li>
<li class="rvps10"><span class="rvts22">Switch FDS Disk Side</span></li>
<li class="rvps10"><span class="rvts27">Savestate Slot 0</span><span class="rvts22"> </span><span class="rvts27">Savestate Slot 9</span></li>
<li class="rvps10"><span class="rvts27">Save State</span></li>
<li class="rvps10"><span class="rvts27">Save State to Slot 0</span><span class="rvts22"> </span><span class="rvts27">Save State to Slot 9</span></li>
<li class="rvps10"><span class="rvts27">Load State</span></li>
<li class="rvps10"><span class="rvts27">Load State from Slot 0</span><span class="rvts22"> </span><span class="rvts27">Load State from Slot 9</span></li>
<li class="rvps10"><span class="rvts27">Play Movie From Beginning</span></li>
<li class="rvps10"><span class="rvts27">Reload ROM or TAS Editor Project</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Так как клавиши </span><span class="rvts34">Alt</span><span class="rvts22"> и </span><span class="rvts27">F10</span><span class="rvts22"> активно используются при работе в Тасэдиторе, их стандартное действие (открытие меню программы) отключено.</span></li>
<li class="rvps10"><span class="rvts22">Так как клавиша </span><span class="rvts27">Пробел</span><span class="rvts22"> по умолчанию используется в качестве хоткея, её стандартное действие (симуляция щелчка по элементу GUI, на котором находится фокус клавиатуры) отключена. Также для каждого элемента GUI в окне Тасэдитора реализована обработка щелчка средней кнопкой мыши, чтобы этот щелчок срабатывал независимо от положения курсора мыши.</span></li>
<li class="rvps10"><span class="rvts22">Так как контекстное меню при щелчке правой кнопкой по Piano Roll почти никогда не требуется, оно появляется только когда пользователь щёлкает по выделенной строке в столбце номеров кадров (Frame#). В остальных случаях контекстное меню не появляется, зато при щелчке правой кнопкой по Piano Roll начинается удобное перетаскивание содержимого Piano Roll во все стороны.</span></li>
<li class="rvps10"><span class="rvts22">Так как правая кнопка часто используется для перемещения Курсора Проигрывателя колесом, пользователь может щёлкать ею без оглядки на текущее положение курсора мыши. При этом возможен случайный щелчок по Закладке и, соответственно, перезапись Закладки. Чтобы этого не допустить, Список Закладок и Дерево ответвлений требуют от пользователя нажать и отпустить правую кнопку на одной и той же Закладке. При этом, если между нажатием и отпусканием правой кнопки пользователь совершил вращение колесом, установка Закладки отменяется.</span></li>
<li class="rvps10"><span class="rvts22">Пользователь может осуществлять прыжки на Закладки одинарным щелчком по желаемой иконке в Дереве ответвлений. При этом он ожидает, что голубой треугольник (Курсор Проигрывателя) после щелчка окажется на этом месте в Дереве ответвлений. Это справедливо для Закладок, ответвления которых находятся в текущей хронологии, но это не так для Закладок, представляющих альтернативные стратегии прохождения. При прыжках на кадры этих Закладок Курсор Проигрывателя будет находиться в другом ответвлении (хотя и на том же самом кадре). Чтобы заранее уведомить пользователя о возможном недопонимании с его стороны, при наведении на иконки таких Закладок курсор мыши превращается в стрелку с вопросительным знаком.</span></li>
<li class="rvps10"><span class="rvts22">Во время трансформации Дерева ответвлений наведение курсора мыши на его элементы не работает, потому что активная область элементов постоянно перемещается и убегает от курсора мыши. Наведение начинает работать сразу после остановки всех иконок.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Навигация</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,301 +53,305 @@
<div id="topic_content">
<p><span class="rvts20">Навигация</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">Экран FCEUX может отображать лишь события одного кадра. Piano Roll может отображать в окне содержимое нескольких десятков кадров. </span><span class="rvts22">Но мувик среднестатистического ТАСа содержит десятки тысяч кадров. Поэтому ТАСеру постоянно необходимо перемещаться по мувику вверх и вниз, чтобы отобразить в окне Piano Roll интересующий его участок мувика, либо чтобы отобразить на экране FCEUX события интересующего кадра мувика.</span></p>
<p class="rvps10"><span class="rvts22">Эта деятельность называется навигацией по мувику. Во время ТАСинга на неё тратится много времени, и её можно значительно оптимизировать.</span></p>
<p class="rvps10"><span class="rvts22">В Тасэдиторе предусмотрено множество способов навигации. В зависимости от конкретной ситуации более удобным будет являться тот или иной способ, поэтому для максимальной эффективности ТАСинга необходимо в совершенстве овладеть всеми. В идеале все навыки навигации должны переместиться в моторную память, тогда вы сможете молниеносно появляться в нужной точке мувика, при этом не переставая обдумывать текущую задачу.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">Все способы навигации по мувику:</span></p>
<p class="rvps10"><span class="rvts57"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts60" href="Navigation.html#scrolling-piano-roll">Скроллинг Piano Roll</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">1.</span>
<a class="rvts60" href="Navigation.html#scrollbar-drag">Перетаскивание скроллбара</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">2.</span>
<a class="rvts60" href="Navigation.html#wheel">Скроллинг колесом</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">3.</span>
<a class="rvts60" href="Navigation.html#jumping-by-pages">Листание страниц</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">4.</span>
<a class="rvts60" href="Navigation.html#jump-home-end">Прыжок в начало/конец мувика</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">5.</span>
<a class="rvts60" href="Navigation.html#scroll-to-playback">Прыжок к Курсору Проигрывателя</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">6.</span>
<a class="rvts60" href="Navigation.html#scroll-to-selection">Прыжок к Курсору Выделения</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">7.</span>
<a class="rvts60" href="Navigation.html#scroll-to-playback-marker">Прыжок к Маркеру над Курсором Проигрывателя</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">8.</span>
<a class="rvts60" href="Navigation.html#scroll-to-selection-marker">Прыжок к Маркеру над Курсором Выделения</a></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts61" href="Navigation.html#playback-cursor">Навигация Курсором Проигрывателя</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">1.</span>
<a class="rvts60" href="Navigation.html#frame-advance-rewind">Покадровое перемещение</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">2.</span>
<a class="rvts60" href="Navigation.html#rewinding-by-wheel">Перемотка колесом мыши</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">3.</span>
<a class="rvts64" href="Navigation.html#drag-playback">Перетаскивание Курсора Проигрывателя</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">4.</span>
<a class="rvts60" href="Navigation.html#playback-jumping-markers">Прыжки по Маркерам</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">5.</span>
<a class="rvts60" href="Navigation.html#jump-bookmark">Прыжки по Закладкам</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">6.</span>
<a class="rvts60" href="Navigation.html#playback-home-end">Прыжок в начало/конец мувика</a></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts63" href="Navigation.html#selection-cursor">Навигация Курсором Выделения</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">1.</span>
<a class="rvts60" href="Navigation.html#selection-up-down">Смещение Выделения стрелками</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">2.</span>
<a class="rvts60" href="Navigation.html#selection-home-end">Смещение Выделения в начало/конец мувика</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">3.</span>
<a class="rvts60" href="Navigation.html#selection-jumping-markers">Прыжки по Маркерам</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">4.</span>
<a class="rvts60" href="Navigation.html#selection-history">Откаты истории Выделения</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">5.</span>
<a class="rvts60" href="Navigation.html#reselect-clipboard">Прыжок на место последнего копирования в Буфер Обмена</a></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts62" href="Navigation.html#special">Особые способы навигации</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">1.</span>
<a class="rvts60" href="Navigation.html#crossing-gaps">Пересечение промежутков во Вводе и Маркерах</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">2.</span>
<a class="rvts60" href="Navigation.html#find-note">Прыжок на Маркер с искомой Заметкой</a></p>
<p class="rvps15" style="text-indent: 32px; margin-left: 20px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 18px;">3.</span>
<a class="rvts60" href="Navigation.html#similar-note">Прыжок на Маркер с похожей Заметкой</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts57"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><a class="rvts60" href="Navigation.html#scrolling-piano-roll">Скроллинг Piano Roll</a></li>
</ul>
<ol style="text-indent: 32px; margin-left: 20px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#scrollbar-drag">Перетаскивание скроллбара</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#wheel">Скроллинг колесом</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#jumping-by-pages">Листание страниц</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#jump-home-end">Прыжок в начало/конец мувика</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#scroll-to-playback">Прыжок к Курсору Проигрывателя</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#scroll-to-selection">Прыжок к Курсору Выделения</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#scroll-to-playback-marker">Прыжок к Маркеру над Курсором Проигрывателя</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#scroll-to-selection-marker">Прыжок к Маркеру над Курсором Выделения</a></li>
</ol>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><a class="rvts61" href="Navigation.html#playback-cursor">Навигация Курсором Проигрывателя</a></li>
</ul>
<ol style="text-indent: 32px; margin-left: 20px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#frame-advance-rewind">Покадровое перемещение</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#rewinding-by-wheel">Перемотка колесом мыши</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts64" href="Navigation.html#drag-playback">Перетаскивание Курсора Проигрывателя</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#playback-jumping-markers">Прыжки по Маркерам</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#jump-bookmark">Прыжки по Закладкам</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#playback-home-end">Прыжок в начало/конец мувика</a></li>
</ol>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><a class="rvts63" href="Navigation.html#selection-cursor">Навигация Курсором Выделения</a></li>
</ul>
<ol style="text-indent: 32px; margin-left: 20px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#selection-up-down">Смещение Выделения стрелками</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#selection-home-end">Смещение Выделения в начало/конец мувика</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#selection-jumping-markers">Прыжки по Маркерам</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#selection-history">Откаты истории Выделения</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#reselect-clipboard">Прыжок на место последнего копирования в Буфер Обмена</a></li>
</ol>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><a class="rvts62" href="Navigation.html#special">Особые способы навигации</a></li>
</ul>
<ol style="text-indent: 32px; margin-left: 20px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#crossing-gaps">Пересечение промежутков во Вводе и Маркерах</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#find-note">Прыжок на Маркер с искомой Заметкой</a></li>
<li class="rvps15" style="text-indent: 32px"><a class="rvts60" href="Navigation.html#similar-note">Прыжок на Маркер с похожей Заметкой</a></li>
</ol>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="scrolling-piano-roll"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p><span class="rvts58">Скроллинг Piano Roll</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="scrollbar-drag"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">1. Перетаскивание скроллбара</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">С помощью скроллбара можно скроллировать Список Piano Roll, просматривая содержимое мувика.</span></p>
<p class="rvps10"><span class="rvts22">Курсор Проигрывателя и Выделение останутся на своих местах, и при необходимости можно будет либо вернуться к ним, либо наоборот, перенести их в новое место мувика (одинарный щелчок меняет Выделение, двойной щелчок перемещает Курсор Проигрывателя).</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно попасть в дальнюю точку мувика, рядом с которой нет Закладки или Маркера. Одним махом можно проскроллировать Piano Roll на сотню тысяч кадров вперёд или назад</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при ручном поиске нужного участка </span><span class="rvts22">Ввод</span><span class="rvts22">а, расположение которого не известно и может быть где угодно в мувике</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно попасть в дальнюю точку мувика, рядом с которой нет Закладки или Маркера. Одним махом можно проскроллировать Piano Roll на сотню тысяч кадров вперёд или назад</span></li>
<li class="rvps15"><span class="rvts22">при ручном поиске нужного участка </span><span class="rvts22">Ввод</span><span class="rvts22">а, расположение которого не известно и может быть где угодно в мувике</span></li>
</ul>
<p class="rvps10"><a name="wheel"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">2. Скроллинг колесом</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">С помощью колеса можно также скроллировать содержимое Piano Roll, но скорость скроллинга будет ограничена (в отличие от скроллбара), поэтому этот способ больше подходит для внимательного просмотра данных в окрестностях одного участка.</span></p>
<p class="rvps10"><span class="rvts22">Курсор мыши при скроллировании может быть где угодно, кроме Журнала Истории.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при ручном поиске нужного участка </span><span class="rvts22">Ввод</span><span class="rvts22">а, расположение которого может быть где угодно поблизости</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">при ручном поиске нужного участка </span><span class="rvts22">Ввод</span><span class="rvts22">а, расположение которого может быть где угодно поблизости</span></li>
</ul>
<p class="rvps10"><a name="jumping-by-pages"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">3. Листание страниц</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие клавиш</span><span class="rvts22"> </span><span class="rvts34">Page Up</span><span class="rvts22"> и </span><span class="rvts34">Page Down</span><span class="rvts22"> скроллирует содержимое Piano Roll вверх и вниз на целую страницу (зависит от размера окна Piano Roll).</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при ручном поиске нужного участка </span><span class="rvts22">Ввод</span><span class="rvts22">а, расположение которого может быть где угодно поблизости</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">при ручном поиске нужного участка </span><span class="rvts22">Ввод</span><span class="rvts22">а, расположение которого может быть где угодно поблизости</span></li>
</ul>
<p class="rvps10"><a name="jump-home-end"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">4. Прыжок в начало/конец мувика</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие клавиш</span><span class="rvts22"> </span><span class="rvts34">Home</span><span class="rvts22"> и </span><span class="rvts34">End</span><span class="rvts22"> скроллирует содержимое Piano Roll в начало и конец мувика.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно попасть в начало или конец мувика</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно попасть в начало или конец мувика</span></li>
</ul>
<p class="rvps10"><a name="scroll-to-playback"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">5. Прыжок к Курсору Проигрывателя</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При щелчке левой кнопкой мыши по верхнему номеру Маркера Piano Roll автоматически скроллируется к Курсору Проигрывателя. Кроме того, вместо щелчка можно быстро дважды нажать клавишу </span><span class="rvts34">Shift</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно осмотреть контекст текущего кадра в мувике</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно вернуться к проигрываемому участку издалека</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно осмотреть контекст текущего кадра в мувике</span></li>
<li class="rvps15"><span class="rvts22">когда нужно вернуться к проигрываемому участку издалека</span></li>
</ul>
<p class="rvps10"><a name="scroll-to-selection"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">6. Прыжок к Курсору Выделения</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При щелчке левой кнопкой мыши по нижнему номеру Маркера Piano Roll автоматически скроллируется к началу Выделения.</span><span class="rvts22"> Кроме того, вместо щелчка можно быстро дважды нажать клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно вернуться к редактируемому участку</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно вернуться к редактируемому участку</span></li>
</ul>
<p class="rvps10"><a name="scroll-to-playback-marker"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">7. Прыжок к Маркеру над Курсором Проигрывателя</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При щелчке по верхнему полю для редактирования Заметок Piano Roll автоматически скроллируется к Маркеру, Заметка которого сейчас будет редактироваться.</span></p>
<p class="rvps10"><span class="rvts22">Работает, только если установлена галочка </span><a class="rvts28" href="ProgramCustomization.html#FollowMarkerNotecontext">View -&gt; Follow Marker Note context</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно увидеть начало просматриваемого участка (при условии, что там стоит Маркер)</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно увидеть начало просматриваемого участка (при условии, что там стоит Маркер)</span></li>
</ul>
<p class="rvps15"><a name="scroll-to-selection-marker"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">8. Прыжок к Маркеру над Курсором Выделения</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При щелчке по нижнему полю для редактирования Заметок Piano Roll автоматически скроллируется к Маркеру, Заметка которого сейчас будет редактироваться.</span></p>
<p class="rvps10"><span class="rvts22">Работает, только если установлена галочка </span><a class="rvts28" href="ProgramCustomization.html#FollowMarkerNotecontext">View -&gt; Follow Marker Note context</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно увидеть начало редактируемого участка (при условии, что там стоит Маркер)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно увидеть начало редактируемого участка (при условии, что там стоит Маркер)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="playback-cursor"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p><span class="rvts58">Навигация Курсором Проигрывателя</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Курсор Проигрывателя привязан к событиям игры. При его перемещении будет изменяться изображение на экране FCEUX. Он не всегда может мгновенно переместиться в указанный кадр, иногда может потребоваться добегание.</span></p>
<p class="rvps10"><span class="rvts22">Если в панели Playback установлена галочка "Follow cursor", то Piano Roll автоматически скроллируется вслед за Курсором Проигрывателя.</span></p>
<p class="rvps10"><a name="frame-advance-rewind"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">1. Покадровое перемещение</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие кнопок </span><span class="rvts32">&lt;</span><span class="rvts22"> и </span><span class="rvts32">&gt;</span><span class="rvts22"> в панели Playback, либо нажатие акселераторов </span><span class="rvts34">Shift + Вверх</span><span class="rvts22"> и </span><span class="rvts34">Shift + Вниз</span><span class="rvts22">, либо нажатие хоткеев </span><span class="rvts27">Frame Rewind </span><span class="rvts22">и </span><span class="rvts27">Frame Advance</span><span class="rvts22"> перемещает Курсор Проигрывателя на 1 кадр назад и вперёд.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно тщательно просматривать события каждого кадра на маленьком участке</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно тщательно просматривать события каждого кадра на маленьком участке</span></li>
</ul>
<p class="rvps10"><a name="rewinding-by-wheel"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">2. Перемотка колесом мыши</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При зажатой правой кнопке мыши колесо мыши вместо скроллинга Piano Roll будет перемещать Курсор Проигрывателя вверх или вниз.</span></p>
<p class="rvps10"><span class="rvts22">В этом способе сочетается покадровая точность перемещения и возможность гибко варьировать скорость перемещения, вращая колесо быстрее или медленнее.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно просматривать события каждого кадра на участке</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно просматривать события каждого кадра на участке</span></li>
</ul>
<p class="rvps10"><a name="drag-playback"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts51">3. Перетаскивание Курсора Проигрывателя</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">С помощью курсора мыши можно перетаскивать Курсор Проигрывателя вверх и вниз по мувику. Для этого нужно щёлкнуть левой кнопкой по любой клетке в самом левом столбце Piano Roll (колонка с иконками) и, не отпуская левую кнопку, переместить курсор мыши вверх или вниз. Этот способ позволяет не только смотреть события игры на экране FCEUX, но и скроллировать Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при поиске игровых событий в мувике</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при ручном поиске нужного участка </span><span class="rvts22">Ввод</span><span class="rvts22">а, расположение которого может быть где угодно</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">при поиске игровых событий в мувике</span></li>
<li class="rvps15"><span class="rvts22">при ручном поиске нужного участка </span><span class="rvts22">Ввод</span><span class="rvts22">а, расположение которого может быть где угодно</span></li>
</ul>
<p class="rvps10"><a name="playback-jumping-markers"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">4. Прыжки по Маркерам</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие кнопок </span><span class="rvts32">&lt;&lt;</span><span class="rvts22"> и </span><span class="rvts32">&gt;&gt;</span><span class="rvts22"> в панели Playback, либо нажатие акселераторов </span><span class="rvts34">Shift + Page Up</span><span class="rvts22"> и </span><span class="rvts34">Shift + Page Down</span><span class="rvts22"> перемещает Курсор Проигрывателя на Маркер вверх и вниз.</span></p>
<p class="rvps10"><span class="rvts22">Аналогично можно вращать колесо мыши с зажатой клавишей </span><span class="rvts34">Shift</span><span class="rvts22"> Курсор Проигрывателя будет прыгать по Маркерам.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно вернуться на начало просматриваемого участка (при условии, что там стоит Маркер)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно быстро перейти на соседние участки, чтобы просмотреть их события</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно вернуться на начало просматриваемого участка (при условии, что там стоит Маркер)</span></li>
<li class="rvps15"><span class="rvts22">когда нужно быстро перейти на соседние участки, чтобы просмотреть их события</span></li>
</ul>
<p class="rvps10"><a name="jump-bookmark"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">5. Прыжки по Закладкам</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие хоткея, соответствующего номеру Закладки (</span><span class="rvts27">0-9</span><span class="rvts22">), посылает Курсор Проигрывателя на кадр этой Закладки.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно просмотреть события мувика, на которых была оставлена Закладка (например, начало текущего уровня)</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно просмотреть события мувика, на которых была оставлена Закладка (например, начало текущего уровня)</span></li>
</ul>
<p class="rvps10"><a name="playback-home-end"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">6. Прыжок в начало/конец мувика</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие </span><span class="rvts22">акселераторов</span><span class="rvts22"> </span><span class="rvts34">Shift + </span><span class="rvts34">Home</span><span class="rvts22"> и </span><span class="rvts34">Shift + </span><span class="rvts34">End</span><span class="rvts22"> перемещает </span><span class="rvts22">Курсор Проигрывателя</span><span class="rvts22"> в начало и в конец мувика.</span></p>
<p class="rvps10"><span class="rvts22">Также при нажатии хоткея "</span><span class="rvts27">Play movie from the beginning</span><span class="rvts22">" (по умолчанию </span><span class="rvts27">Shift + R</span><span class="rvts22">) Курсор Проигрывателя прыгает на начальный кадр мувика.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно просмотреть события мувика с самого начала</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно заполнить весь мувик Гринзоной до конца</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно просмотреть события мувика с самого начала</span></li>
<li class="rvps15"><span class="rvts22">когда нужно заполнить весь мувик Гринзоной до конца</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="selection-cursor"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p><span class="rvts58">Навигация Курсором Выделения</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Курсор Выделения всегда может переместиться в указанный кадр.</span></p>
<p class="rvps10"><span class="rvts22">Когда в Piano Roll выделено более одной строки, Курсором Выделения считается самая верхняя из них.</span></p>
<p class="rvps10"><a name="selection-up-down"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">1. Смещение Выделения стрелками</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие клавиатурных акселераторов </span><span class="rvts34">Ctrl + </span><span class="rvts34">Вверх</span><span class="rvts22"> и </span><span class="rvts34">Ctrl + </span><span class="rvts34">Вниз</span><span class="rvts22"> перемещает Выделение на 1 кадр вверх и вниз. Piano Roll автоматически скроллируется вслед за ним.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно передвинуть Курсор Выделения чуть выше или чуть ниже</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно передвинуть Курсор Выделения чуть выше или чуть ниже</span></li>
</ul>
<p class="rvps10"><a name="selection-home-end"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">2. Смещение Выделения в начало/конец мувика</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие </span><span class="rvts22">акселераторов</span><span class="rvts22"> </span><span class="rvts34">Ctrl + </span><span class="rvts34">Home</span><span class="rvts22"> и </span><span class="rvts34">Ctrl + </span><span class="rvts34">End</span><span class="rvts22"> перемещает Выделение в начало и в конец мувика. Piano Roll автоматически скроллируется вслед за ним.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно выделить регион в начале или конце мувика</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно выделить регион в начале или конце мувика</span></li>
</ul>
<p class="rvps10"><a name="selection-jumping-markers"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">3. Прыжки по Маркерам</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие кнопок </span><span class="rvts32">&lt;&lt;</span><span class="rvts22"> и </span><span class="rvts32">&gt;&gt;</span><span class="rvts22"> в самом низу Панели Инструментов, либо нажатие акселераторов </span><span class="rvts34">Ctrl + Page Up</span><span class="rvts22"> и </span><span class="rvts34">Ctrl + Page Down</span><span class="rvts22"> перемещает Курсор Выделения на Маркер вверх и вниз. Piano Roll автоматически скроллируется вслед за ним.</span></p>
<p class="rvps10"><span class="rvts22">Аналогично можно вращать колесо мыши с зажатой клавишей </span><span class="rvts34">Ctrl</span><span class="rvts22"> Курсор Выделения будет прыгать по Маркерам.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно вернуться на начало редактируемого участка (при условии, что там стоит Маркер)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно быстро перейти на соседние участки, чтобы просмотреть или отредактировать их </span><span class="rvts22">Ввод</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно вернуться на начало редактируемого участка (при условии, что там стоит Маркер)</span></li>
<li class="rvps15"><span class="rvts22">когда нужно быстро перейти на соседние участки, чтобы просмотреть или отредактировать их </span><span class="rvts22">Ввод</span></li>
</ul>
<p class="rvps10"><a name="selection-history"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">4. Откаты истории Выделения</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие акселераторов </span><span class="rvts34">Ctrl + Q</span><span class="rvts22"> и </span><span class="rvts34">Ctrl + W</span><span class="rvts22"> возвращает Выделение на состояние, предшествующее текущему или следующее за текущим. Piano Roll автоматически скроллируется вслед за ним.</span></p>
<p class="rvps10"><span class="rvts22">Это уникальный способ навигации, позволяющий вернуться к ранее отредактированным участкам и напомнить всю последовательность редактирования.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно вернуться к недавно отредактированному участку, точное расположение которого уже забыто</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно вернуться к недавно отредактированному участку, точное расположение которого уже забыто</span></li>
</ul>
<p class="rvps10"><a name="reselect-clipboard"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">5. Прыжок на место последнего копирования в Буфер Обмена</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нажатие акселератора </span><span class="rvts34">Ctrl + B</span><span class="rvts22"> возвращает Выделение на место последнего копирования в Буфер Обмена. Piano Roll автоматически скроллируется вслед за ним.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно вернуться на место, откуда был недавно скопирован </span><span class="rvts22">Ввод</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно вернуться на место, откуда был недавно скопирован </span><span class="rvts22">Ввод</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="special"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p><span class="rvts58">Особые способы навигации</span></p>
<p><a name="crossing-gaps"></a>
<span class="rvts65"><br></span></p>
<span class="rvts65"><br/></span></p>
<p class="rvps10"><span class="rvts23">1. Пересечение промежутков во Вводе и Маркерах</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если навести курсор мыши на любую клетку </span><span class="rvts22">Ввод</span><span class="rvts22">а, зажать </span><span class="rvts34">Alt</span><span class="rvts22"> и прокрутить колесо мыши вверх, Piano Roll проскроллируется вверх таким образом, чтобы курсор мыши указывал на вышестоящее нажатие указанной кнопки либо на первое встреченное "отсутствие нажатия" указанной кнопки. Если прокрутить колесо вниз, Piano Roll проскроллируется вниз таким образом, чтобы курсор мыши указывал на нижестоящее нажатие указанной кнопки либо на первое встреченное "отсутствие нажатия" указанной кнопки.</span></p>
<p class="rvps10"><span class="rvts22">Если навести курсор мыши на колонку с номерами кадров, зажать </span><span class="rvts34">Alt</span><span class="rvts22"> и прокрутить колесо мыши вверх, Piano Roll проскроллируется вверх таким образом, чтобы курсор мыши указывал на вышестоящий Маркер. Если прокрутить колесо вниз, Piano Roll проскроллируется вниз таким образом, чтобы курсор мыши указывал на нижестоящий Маркер.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно найти начало или конец длинного ряда нажатий</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно найти вышестоящее или нижестоящее нажатие кнопки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно найти вышестоящий или нижестоящий Маркер</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно найти начало или конец длинного ряда нажатий</span></li>
<li class="rvps15"><span class="rvts22">когда нужно найти вышестоящее или нижестоящее нажатие кнопки</span></li>
<li class="rvps15"><span class="rvts22">когда нужно найти вышестоящий или нижестоящий Маркер</span></li>
</ul>
<p class="rvps10"><a name="find-note"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">2. Прыжок на Маркер с искомой Заметкой</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При нажатии кнопки "</span><span class="rvts32">Find next</span><span class="rvts22">" (или клавиши </span><span class="rvts45">Enter</span><span class="rvts22">) в окне </span><span class="rvts26">Find Note</span><span class="rvts22"> Piano Roll автоматически скроллируется к первому найденному Маркеру, Заметка которого включает искомый текст. Искать можно либо вверх от текущего положения Курсора Выделения, либо вниз.</span></p>
<p class="rvps10"><span class="rvts22">Курсор Выделения будет установлен на найденный Маркер, чтобы в нижнем текстовом поле была видна его Заметка.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно найти участок, расположение которого не известно и может быть где угодно в мувике, но известна часть текста из Заметки Маркера, стоящего рядом с этим участком</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно найти участок, расположение которого не известно и может быть где угодно в мувике, но известна часть текста из Заметки Маркера, стоящего рядом с этим участком</span></li>
</ul>
<p class="rvps10"><a name="similar-note"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">3. Прыжок на Маркер с похожей Заметкой</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При щелчке по кнопке "</span><span class="rvts32">Similar</span><span class="rvts22">" или "</span><span class="rvts32">More</span><span class="rvts22">" Piano Roll автоматически скроллируется к Маркеру, Заметка которого очень похожа на Заметку у текущего просматриваемого участка.</span></p>
<p class="rvps10"><span class="rvts22">Курсор Выделения будет установлен на этот Маркер, чтобы в нижнем текстовом поле была видна Заметка.</span></p>
<p class="rvps10"><span class="rvts22">Этот способ описан в главе </span><a class="rvts28" href="AdvancedFeatures.html">Продвинутые возможности</a><span class="rvts22">. Он работает только в проектах, где ТАСер прилежно ставит Маркеры и кратко описывает в Заметках суть </span><span class="rvts22">Ввод</span><span class="rvts22">а под каждым Маркером.</span></p>
<p class="rvps10"><span class="rvts22">Когда предпочтительнее использовать:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">когда нужно быстро найти участок, расположение которого не известно и может быть где угодно в мувике, но известно, что суть </span><span class="rvts22">Ввод</span><span class="rvts22">а на том участке выражается теми же словами, что и суть </span><span class="rvts22">Ввод</span><span class="rvts22">а на текущем просматриваемом участке.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring environment</a></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">когда нужно быстро найти участок, расположение которого не известно и может быть где угодно в мувике, но известно, что суть </span><span class="rvts22">Ввод</span><span class="rvts22">а на том участке выражается теми же словами, что и суть </span><span class="rvts22">Ввод</span><span class="rvts22">а на текущем просматриваемом участке.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/create-epub-ebooks">Write EPub books for the iPad</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>4.2. Нелинейный ТАСинг</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,41 +53,33 @@
<div id="topic_content">
<p><span class="rvts20">Нелинейный ТАСинг</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-method2.png"></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-method2.png"/></p>
<p class="rvps10"><span class="rvts22">Это основной метод при работе в Тасэдиторе. Для полного осознания всех его преимуществ вам потребуется несколько дней практики. Особенно долгим может быть переход, если вы уже прочно привязались к традиционному методу и не любите изучать новые технологии.</span></p>
<p class="rvps10"><span class="rvts22">При работе с этим методом режим Записи должен быть всегда выключен. Галочка "Auto-restore last position" должна быть выключена. Галочки "Turbo seek" и "Follow cursor" по умолчанию отключены и включаются по мере необходимости.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Основное занятие ТАСера:</span></p>
<p class="rvps10"><span class="rvts53"><br></span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">1.</span>
<span class="rvts22">Проскроллировать Piano Roll к началу редактируемого участка мувика, доставить сюда Курсор Проигрывателя, определиться с целью. Полезно также отметить начало участка Маркером.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">2.</span>
<span class="rvts22">Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки (как именно требуется изменить </span><span class="rvts22">Ввод</span><span class="rvts22">, на каких кадрах и т.д.</span><span class="rvts22">).</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">3.</span>
<span class="rvts22">Н</span><span class="rvts22">авигация курсором мыши к любому кадру мувика осуществляется почти мгновенно.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">4.</span>
<span class="rvts22">Отредактировать участок мышью. М</span><span class="rvts22">ожно менять Ввод либо вслепую (не просматривая состояние игры), либо время от времени перемещать Курсор Проигрывателя, чтобы засвидетельствовать изменения мувика.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">5.</span>
<span class="rvts22">Просмотреть участок до момента наступления конечного события. Если целевое событие в игре не наступает в разумные сроки, вернуться к пункту 2.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">6.</span>
<span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">] </span><span class="rvts22">Определить кадр конца участка, поставив Курсор Проигрывателя на начальный кадр целевого события. </span><span class="rvts22">Полезно также отметить конец участка Маркером.</span><span class="rvts22"> Рекомендуется с</span><span class="rvts22">охранить полученный вариант прохождения участка в любую свободную Закладку.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">7.</span>
<span class="rvts22">Если это не первый вариант прохождения участка, с</span><span class="rvts22">равнить </span><span class="rvts22">полученный результат с лучшим результатом, используя критерий оптимальности (например, сравнить номер кадра нового и старого конца участка). Если новый вариант оказался лучше&nbsp;</span><span class="rvts22"> (или если это ваш первый вариант прохождения участка), </span><span class="rvts31">рекомендуется</span><span class="rvts22"> сохранить результат в Закладку 9. </span><span class="rvts22">Слот 9 будет отвечать за хранение самого лучшего результата шлифовки участка. Если не сохранять лучший вариант в Закладку, он останется только в текущем мувике и в Журнале Истории.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">8.</span>
<span class="rvts22">Вернуться к пункту 2 и опробовать ещё варианты, до тех пор пока не иссякнут идеи по данному участку.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">9.</span>
<span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">]</span><span class="rvts22"> Если идеи иссякают, можно почерпнуть информацию из прошлого или будущего: пересмотреть несколько участков, перетаскивая Курсор Проигрывателя или отпустив паузу эмулятора. При необходимости можно по-быстрому дорисовать </span><span class="rvts22">Ввод</span><span class="rvts22"> для событий игры, идущих после окончания текущего участка.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">10.</span>
<span class="rvts22">Когда идеи полностью иссякли, восстановить лучший вариант прохождения из Журнала Истории или из Закладки 9</span><span class="rvts22"> в текущий мувик</span><span class="rvts22">, определиться со следующим участком и вернуться к пункту 1.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts53"><br/></span></p>
<ol style="text-indent: 25px; margin-left: 5px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Проскроллировать Piano Roll к началу редактируемого участка мувика, доставить сюда Курсор Проигрывателя, определиться с целью. Полезно также отметить начало участка Маркером.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки (как именно требуется изменить </span><span class="rvts22">Ввод</span><span class="rvts22">, на каких кадрах и т.д.</span><span class="rvts22">).</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Н</span><span class="rvts22">авигация курсором мыши к любому кадру мувика осуществляется почти мгновенно.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Отредактировать участок мышью. М</span><span class="rvts22">ожно менять Ввод либо вслепую (не просматривая состояние игры), либо время от времени перемещать Курсор Проигрывателя, чтобы засвидетельствовать изменения мувика.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Просмотреть участок до момента наступления конечного события. Если целевое событие в игре не наступает в разумные сроки, вернуться к пункту 2.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">] </span><span class="rvts22">Определить кадр конца участка, поставив Курсор Проигрывателя на начальный кадр целевого события. </span><span class="rvts22">Полезно также отметить конец участка Маркером.</span><span class="rvts22"> Рекомендуется с</span><span class="rvts22">охранить полученный вариант прохождения участка в любую свободную Закладку.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Если это не первый вариант прохождения участка, с</span><span class="rvts22">равнить </span><span class="rvts22">полученный результат с лучшим результатом, используя критерий оптимальности (например, сравнить номер кадра нового и старого конца участка). Если новый вариант оказался лучше&nbsp;</span><span class="rvts22"> (или если это ваш первый вариант прохождения участка), </span><span class="rvts31">рекомендуется</span><span class="rvts22"> сохранить результат в Закладку 9. </span><span class="rvts22">Слот 9 будет отвечать за хранение самого лучшего результата шлифовки участка. Если не сохранять лучший вариант в Закладку, он останется только в текущем мувике и в Журнале Истории.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Вернуться к пункту 2 и опробовать ещё варианты, до тех пор пока не иссякнут идеи по данному участку.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">]</span><span class="rvts22"> Если идеи иссякают, можно почерпнуть информацию из прошлого или будущего: пересмотреть несколько участков, перетаскивая Курсор Проигрывателя или отпустив паузу эмулятора. При необходимости можно по-быстрому дорисовать </span><span class="rvts22">Ввод</span><span class="rvts22"> для событий игры, идущих после окончания текущего участка.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Когда идеи полностью иссякли, восстановить лучший вариант прохождения из Журнала Истории или из Закладки 9</span><span class="rvts22"> в текущий мувик</span><span class="rvts22">, определиться со следующим участком и вернуться к пункту 1.</span></li>
</ol>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Так как все создаваемые варианты прохождения участка автоматически сохраняются в Журнале Истории, у ТАСера-новичка может возникнуть соблазн не сохранять варианты в Закладки, а просто один раз дойти до конечного события, а затем экспериментировать с этим Вводом, постепенно улучшая его (а если вместо улучшения получилось ухудшение сразу же откатывать изменения с помощью </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">). Такой способ ТАСинга крайне не рекомендуется, так как он не позволяет вам мыслить далеко за рамками первоначального варианта (из-за подсознательного страха потерять имеющийся лучший вариант, если уйти от него слишком далеко). Даже если в результате последнего изменения Ввода у вас получилось ухудшение прохождения участка, нужно не откатываться к старому варианту, а пытаться разобраться в причинах ухудшения и продолжать осмысленную модификацию, чтобы получить улучшение.</span></p>
<p class="rvps10"><span class="rvts22">Чтобы не бояться, что предыдущее успешное прохождение участка затеряется в глубинах Журнала Истории, рекомендуется поступать так же, как делают в традиционном методе отвести специальный слот для лучшего варианта прохождения участка и каждый раз ставить эту Закладку на конец участка, когда результат стал ещё лучше. </span></p>
<p class="rvps10"><span class="rvts22">Точно так же нужно поступать с перспективными вариантами прохождения участка, которые в чём-то лучше, а в чём-то хуже друг друга. Если вы сохраняете все альтернативные варианты в отдельные Закладки, вы можете со спокойной душой удалять их из мувика или изменять до неузнаваемости для возврата к ним вам потребуется всего одно нажатие клавиши, а не долгий поиск по Журналу Истории.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В этом методе ТАСинга, в отличие от традиционного, можно не заметить разделение мувика на логические участки, так как не требуется постоянно обозначать начало и конец текущего участка Закладками. Однако рекомендуется всё-таки соблюдать порядок и отмечать хотя бы начало участка Маркером (чтобы ограничить количество факторов оптимальности и не править </span><span class="rvts22">Ввод</span><span class="rvts22"> на предыдущих участках).</span></p>
<p class="rvps10"><span class="rvts22">Начало и конец участка обычно ассоциируются не с номером кадра, а с определёнными событиями игры. Но так как на начальное событие редактируемый </span><span class="rvts22">Ввод</span><span class="rvts22"> участка никак не влияет, то начальный кадр участка не изменяется в процессе оптимизации, и этот кадр можно однозначно зафиксировать Маркером.</span></p>
<p class="rvps10"><span class="rvts22">Конечное событие участка может наступить в разное время в зависимости от </span><span class="rvts22">Ввод</span><span class="rvts22">а на участке. Поэтому, если вы отмечаете конец участка Маркером, необходимо будет перетаскивать этот Маркер выше или ниже, когда из-за изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а конечное событие изменилось. Если вам лень это делать, можно обойтись установкой Закладки, в которой заодно сохранится полученный вариант прохождения участка. Ну а для самых простых участков можно вообще никак не отмечать конечный кадр, полагаясь на собственную память и на зелёную стрелку Тасэдитора.</span></p>
@ -109,100 +101,85 @@
<p class="rvps10"><span class="rvts22">Пункт 2. Надо бы поэкспериментировать с прыжками и т.д...</span></p>
<p class="rvps10"><span class="rvts22">Курсор Проигрывателя каждый раз будет автоматически отпрыгивать вверх, а на его месте будет оставаться зелёная стрелка.</span></p>
<p class="rvps10"><span class="rvts22">Кроме того, вы можете сосредоточиться на первой части участка, мысленно определив подучасток, задачей которого будет наибыстрейшее получение максимума горизонтальной скорости. Для создания такого подучастка нужно перемотать Курсор Проигрывателя на кадр, в котором скорость достигает максимума в текущей стратегии прохождения участка, а затем просто начать редактирование </span><span class="rvts22">Ввод</span><span class="rvts22">а над этим кадром. При усечении Гринзоны зелёная стрелка перескочит на этот кадр, автоматически обозначив конец подучастка, и вы сможете сравнивать результат новой стратегии с результатом старой.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Процесс создания </span><span class="rvts22">Ввод</span><span class="rvts22">а в нелинейном методе представляет собой постоянное чередование редактирования и просмотра участка. Анализ ситуации происходит как во время просмотра, так и во время редактирования.</span></p>
<p class="rvps10"><span class="rvts22">Оптимальное соотношение времени на редактирование и просмотр формируется само по себе в процессе ТАСинга. Более того, это соотношение может меняться в процессе работы над проектом. Чем больше вы ТАСите одну игру, тем лучше вы ощущаете её закономерности. Поэтому ближе к концу своего мувика вы сможете интуитивно предсказывать результаты изменений </span><span class="rvts22">Ввод</span><span class="rvts22">а ещё во время редактирования, или даже раньше во время обдумывания их в голове. А просмотр участка будет нужен только для подтверждения догадки.</span></p>
<p class="rvps10"><span class="rvts22">В некоторых случаях можно судить об оптимальности </span><span class="rvts22">Ввод</span><span class="rvts22">а по промежуточным результатам, даже не просматривая участок до конца. Например, если персонаж на середине участка спотыкается об уступ и обнуляет скорость, можно сразу догадаться, что к концу участка он дойдёт позже, чем в прошлый раз. Поэтому не всегда хочется просматривать участок полностью, зачастую достаточно просмотреть пару актуальных кадров и продолжить редактирование. Однако такая спешка чревата тем, что вы мимоходом отвергнете решение, которое на первый взгляд кажется неоптимальным, хотя имеет огромный потенциал для успеха. Например, споткнувшись об уступ, Марио может случайно проникнуть внутрь стенки и пройти насквозь быстрее, чем обычно. Поэтому на всякий случай рекомендуется не торопиться, а досматривать участок до конца, когда критерий оптимальности уж наверняка не подведёт.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Способы просмотра результатов </span><span class="rvts22">Ввод</span><span class="rvts22">а на участке:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">отпускание паузы хоткеем </span><span class="rvts27">Pause</span><span class="rvts22"> или нажатием средней кнопки мыши. После окончания участка требуется вручную поставить эмулятор на паузу (обычно не страшно, если вышло чуть позже, в крайнем случае можно потом отмотать наверх)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">запуск добегания к зелёной стрелке хоткеем </span><span class="rvts27">Restore Playback </span><span class="rvts22">или нажатием средней кнопки, когда есть зелёная стрелка</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">запуск добегания к ближайшему Маркеру нажатием средней кнопки при зажатой клавише </span><span class="rvts34">Shift</span><span class="rvts22">, если в конце участка поставлен Маркер</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">запуск добегания к Курсору Выделения нажатием средней кнопки при зажатой клавише </span><span class="rvts34">Ctrl</span><span class="rvts22">, если Курсор Выделения стоит ниже Курсора Проигрывателя</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">повторный просмотр участка от Курсора Выделения до Курсора Проигрывателя нажатием средней кнопки при зажатой клавише </span><span class="rvts34">Ctrl</span><span class="rvts22">, если Курсор Выделения стоит выше Курсора Проигрывателя</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">перетаскивание Курсора Проигрывателя курсором мыши вручную на нужный кадр</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">перемещение Курсора Проигрывателя колесом мыши с зажатой правой кнопкой</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">покадровое перемещение Курсора Проигрывателя хоткеями </span><span class="rvts27">Frame Rewind</span><span class="rvts22"> и </span><span class="rvts27">Frame Advance</span><span class="rvts22">, либо кнопками </span><span class="rvts32">&lt;</span><span class="rvts22"> и </span><span class="rvts32">&gt; </span><span class="rvts22">или </span><span class="rvts22">акселераторами </span><span class="rvts34">Shift + Вверх</span><span class="rvts22"> и </span><span class="rvts34">Shift + Вниз</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">а также остальные </span><a class="rvts28" href="Navigation.html#playback-cursor">способы навигации Курсором Проигрывателя</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">отпускание паузы хоткеем </span><span class="rvts27">Pause</span><span class="rvts22"> или нажатием средней кнопки мыши. После окончания участка требуется вручную поставить эмулятор на паузу (обычно не страшно, если вышло чуть позже, в крайнем случае можно потом отмотать наверх)</span></li>
<li class="rvps15"><span class="rvts22">запуск добегания к зелёной стрелке хоткеем </span><span class="rvts27">Restore Playback </span><span class="rvts22">или нажатием средней кнопки, когда есть зелёная стрелка</span></li>
<li class="rvps15"><span class="rvts22">запуск добегания к ближайшему Маркеру нажатием средней кнопки при зажатой клавише </span><span class="rvts34">Shift</span><span class="rvts22">, если в конце участка поставлен Маркер</span></li>
<li class="rvps15"><span class="rvts22">запуск добегания к Курсору Выделения нажатием средней кнопки при зажатой клавише </span><span class="rvts34">Ctrl</span><span class="rvts22">, если Курсор Выделения стоит ниже Курсора Проигрывателя</span></li>
<li class="rvps15"><span class="rvts22">повторный просмотр участка от Курсора Выделения до Курсора Проигрывателя нажатием средней кнопки при зажатой клавише </span><span class="rvts34">Ctrl</span><span class="rvts22">, если Курсор Выделения стоит выше Курсора Проигрывателя</span></li>
<li class="rvps15"><span class="rvts22">перетаскивание Курсора Проигрывателя курсором мыши вручную на нужный кадр</span></li>
<li class="rvps15"><span class="rvts22">перемещение Курсора Проигрывателя колесом мыши с зажатой правой кнопкой</span></li>
<li class="rvps15"><span class="rvts22">покадровое перемещение Курсора Проигрывателя хоткеями </span><span class="rvts27">Frame Rewind</span><span class="rvts22"> и </span><span class="rvts27">Frame Advance</span><span class="rvts22">, либо кнопками </span><span class="rvts32">&lt;</span><span class="rvts22"> и </span><span class="rvts32">&gt; </span><span class="rvts22">или </span><span class="rvts22">акселераторами </span><span class="rvts34">Shift + Вверх</span><span class="rvts22"> и </span><span class="rvts34">Shift + Вниз</span></li>
<li class="rvps15"><span class="rvts22">а также остальные </span><a class="rvts28" href="Navigation.html#playback-cursor">способы навигации Курсором Проигрывателя</a></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Не стоит привязываться к одному из этих способов, лучше чередовать их в зависимости от ситуации. Для тестирования мелких изменений проще использовать колесо мыши или </span><span class="rvts27">Frame Advance</span><span class="rvts22">/</span><span class="rvts27">Rewind</span><span class="rvts22">. А для просмотра всего участка уже имеет смысл перетащить Курсор Проигрывателя в начало и нажать среднюю кнопку или </span><span class="rvts27">Pause</span><span class="rvts22">/</span><span class="rvts27">Restore Playback</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Важно отметить, что вы можете просматривать и редактировать </span><span class="rvts22">Ввод</span><span class="rvts22"> одновременно. Когда галочка "Follow cursor" снята, Piano Roll во время проигрывания мувика остаётся на месте редактирования, и вы можете дорисовывать нажатия кнопок прямо в момент их выполнения. Например, попробуйте во время исполнения прыжка Марио начать изменять высоту этого прыжка, дорисовывая или стирая лишние нажатия </span><span class="rvts32">A</span><span class="rvts22"> на текущем участке. Останавливать эмуляцию при этом не требуется.</span></p>
<p class="rvps10"><span class="rvts22">При необходимости можно замедлить</span><span class="rvts22"> эмуляцию хоткеями </span><span class="rvts27">-</span><span class="rvts22"> и </span><span class="rvts27">=</span><span class="rvts22">, чтобы во время просмотра было достаточно времени для неспешных щелчков мышью. Однако, когда требуется не только пощёлкать, но ещё и подумать, следует вернуть эмулятор на паузу.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="turbo-seeking"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Процесс эмуляции можно не только замедлять, но и ускорять. Раньше ускорение эмуляции использовалось только для быстрой навигации Курсором Проигрывателя к нужному уровню в игре. В Тасэдиторе турбо-эмуляция ещё используется в качестве оригинального способа ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22">С помощью ускоренной эмуляции можно наглядно ощутить взаимосвязь не только между нажатием и следующим кадром, но также между нажатием и отдалённым событием.</span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/dw-luck_manipulation.gif"></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/dw-luck_manipulation.gif"/></p>
<p class="rvps10"><a name="LuckManipulation"></a>
<span class="rvts22">Возьмём в качестве примера манипуляцию удачей.</span></p>
<p class="rvps10"><span class="rvts22">Без </span><span class="rvts22">турбо-добегания</span><span class="rvts22"> вы можете увидеть взаимосвязь между нажатием кнопки </span><span class="rvts32">B</span><span class="rvts22"> и появлением пули в следующем кадре. Соответственно, в голове появляется ассоциация "</span><span class="rvts32">B</span><span class="rvts22"> = выстрел", и мысли идут в направлении "чем позже поставлю нажатие </span><span class="rvts32">B</span><span class="rvts22">, тем позже вылетит пуля".</span></p>
<p class="rvps10"><span class="rvts22">А с турбо вы можете сразу после установки </span><span class="rvts32">B</span><span class="rvts22"> увидеть выпавший из убитого врага приз, пропустив неважные промежуточные шаги (выстрел, полёт пули, столкновение, смерть врага и т.д.). В голове появляется ассоциация "</span><span class="rvts32">B</span><span class="rvts22"> = вероятность приза", и мысли идут в направлении "от времени нажатия </span><span class="rvts32">B</span><span class="rvts22"> зависит тип приза".</span></p>
<p class="rvps10"><span class="rvts22">Таким образом турбо позволяет автоматически отфильтровать ненужную информацию, идущую посреди участка, и сразу получить только нужную, появляющуюся в конце участка.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Делается это так:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Включаете галочку "Turbo seek". </span><span class="rvts22">Отключаете галочку "Follow cursor", чтобы Piano Roll не убегал вслед за Курсором Проигрывателя.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Устанавливаете пробное нажатие кнопки </span><span class="rvts32">B</span><span class="rvts22"> в начало участка, на котором требуется стрелять во врага.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Просматриваете попадение пули во врага и выпадение/отсутствие приза, оставляете Курсор Проигрывателя на этом месте (когда приз уже пару секунд должен лежать на земле) это и будет конец участка.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Допустим, с первого раза выпал неудачный приз, но вы знаете, что в этой игре можно манипулировать удачей, выстрелив во врага чуть раньше или позже.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Переносите нажатие на один кадр вперёд (достаточно вставить перед старым нажатием пустой кадр с помощью </span><span class="rvts34">Ctrl + </span><span class="rvts34">Shift + Insert</span><span class="rvts22">).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В этот момент события игры автоматически откатываются назад, на экране FCEUX можно увидеть момент перед выстрелом.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Нажимаете среднюю кнопку мыши или </span><span class="rvts27">Пробел</span><span class="rvts22"> (ту клавишу, которая назначена на хоткей </span><span class="rvts27">Restore Playback</span><span class="rvts22">). События игры мгновенно прокрутятся на максимально возможной скорости, и вы практически сразу увидите, какой из врага выпадает приз теперь.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Если приз опять не тот, вновь нажимаете </span><span class="rvts34">Ctrl + </span><span class="rvts34">Shift + Insert</span><span class="rvts22"> для вставки ещё одного пустого кадра (а значит выстрел откладывается ещё на один кадр) и вновь нажимаете </span><span class="rvts27">Restore Playback</span><span class="rvts22">, чтобы увидеть новый вариант.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Так можно продолжать, пока не будет найден номер кадра, на котором нажатие выстрела будет давать игроку требуемый приз. Всего за одну минуту можно успеть протестировать более сотни вариантов, машинально нажимая хоткеи и глядя только на экран FCEUX.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">Включаете галочку "Turbo seek". </span><span class="rvts22">Отключаете галочку "Follow cursor", чтобы Piano Roll не убегал вслед за Курсором Проигрывателя.</span></li>
<li class="rvps15"><span class="rvts22">Устанавливаете пробное нажатие кнопки </span><span class="rvts32">B</span><span class="rvts22"> в начало участка, на котором требуется стрелять во врага.</span></li>
<li class="rvps15"><span class="rvts22">Просматриваете попадение пули во врага и выпадение/отсутствие приза, оставляете Курсор Проигрывателя на этом месте (когда приз уже пару секунд должен лежать на земле) это и будет конец участка.</span></li>
<li class="rvps15"><span class="rvts22">Допустим, с первого раза выпал неудачный приз, но вы знаете, что в этой игре можно манипулировать удачей, выстрелив во врага чуть раньше или позже.</span></li>
<li class="rvps15"><span class="rvts22">Переносите нажатие на один кадр вперёд (достаточно вставить перед старым нажатием пустой кадр с помощью </span><span class="rvts34">Ctrl + </span><span class="rvts34">Shift + Insert</span><span class="rvts22">).</span></li>
<li class="rvps15"><span class="rvts22">В этот момент события игры автоматически откатываются назад, на экране FCEUX можно увидеть момент перед выстрелом.</span></li>
<li class="rvps15"><span class="rvts22">Нажимаете среднюю кнопку мыши или </span><span class="rvts27">Пробел</span><span class="rvts22"> (ту клавишу, которая назначена на хоткей </span><span class="rvts27">Restore Playback</span><span class="rvts22">). События игры мгновенно прокрутятся на максимально возможной скорости, и вы практически сразу увидите, какой из врага выпадает приз теперь.</span></li>
<li class="rvps15"><span class="rvts22">Если приз опять не тот, вновь нажимаете </span><span class="rvts34">Ctrl + </span><span class="rvts34">Shift + Insert</span><span class="rvts22"> для вставки ещё одного пустого кадра (а значит выстрел откладывается ещё на один кадр) и вновь нажимаете </span><span class="rvts27">Restore Playback</span><span class="rvts22">, чтобы увидеть новый вариант.</span></li>
<li class="rvps15"><span class="rvts22">Так можно продолжать, пока не будет найден номер кадра, на котором нажатие выстрела будет давать игроку требуемый приз. Всего за одну минуту можно успеть протестировать более сотни вариантов, машинально нажимая хоткеи и глядя только на экран FCEUX.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если у вас очень медленный компьютер, ассоциирование выстрела с выпавшим призом может не сработать, так как турбо-перемотка будет работать медленно, и вам придётся ждать результат, теряя концентрацию внимания. К счастью, FCEUX очень быстрый эмулятор (при использовании Old PPU).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Итак, второй метод ТАСинга можно разделить на три подвида:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">1)</span>
<span class="rvts22">редактирование на паузе</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">2)</span>
<span class="rvts22">редактирование во время просмотра (в частности, замедленного просмотра)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">3)</span>
<span class="rvts22">редактирование на паузе с просмотром итогового результата (с помощью турбо-добегания)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">редактирование на паузе</span></li>
<li class="rvps15"><span class="rvts22">редактирование во время просмотра (в частности, замедленного просмотра)</span></li>
<li class="rvps15"><span class="rvts22">редактирование на паузе с просмотром итогового результата (с помощью турбо-добегания)</span></li>
</ol>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Выбор конкретного метода зависит от текущей задачи ТАСера. Начинать обучение следует с редактирования во время паузы эмулятора. Можно осуществлять полный или частичный просмотр после каждого мелкого изменения, а можно перерисовать весь участок и только потом просмотреть получившийся результат.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Плюсы нелинейного ТАСинга:</span></p>
<p class="rvps15"><span class="rvts23">+ </span><span class="rvts22">Мгновенная навигация к месту редактирования.</span></p>
<p class="rvps15"><span class="rvts23">+ </span><span class="rvts22">Возможность пропускать ненужные сцены и ассоциировать действие с итогом.</span></p>
<p class="rvps15"><span class="rvts23">+ </span><span class="rvts22">Отстранённость ТАСера от игрового потока позволяет изучать поведение игры более объективно.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Минусы метода:</span></p>
<p class="rvps15"><span class="rvts23"> </span><span class="rvts22">Отсутствие геймерской "отдачи" при редактировании на паузе. Для объективности это полезно, но нередко требуется слиться с игрой более плотно.</span></p>
<p class="rvps15"><span class="rvts23"> </span><span class="rvts22">Упор на мышиное управление. Клавиатура/джойстик в этом методе могут помочь быстро генерировать </span><span class="rvts22">Ввод</span><span class="rvts22">, но их возможности для навигации очень ограничены. А во время шлифовки навигация требуется очень часто.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Когда использовать:</span><span class="rvts22"> в большинстве случаев оптимизации участков. Полезно также комбинировать этот метод со следующим методом, переключаясь между ними для формирования в голове наиболее объективной картины игровых возможностей.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="SemiautomaticTASing.html">Следующий метод</a><span class="rvts22"> исправляет главный минус этого метода и в ряде случаев полностью заменяет его.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour">Easily create EBooks</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Операции</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,148 +53,148 @@
<div id="topic_content">
<p><span class="rvts20">Операции над мувиком</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">При внесении любых изменений в мувик Тасэдитор регистрирует эти изменения в Журнале Истории. В текст каждой записи Журнала добавляется время внесения изменений, а также номер ключевого кадра (или начало и конец региона кадров), где произошли изменения.</span></p>
<p class="rvps10"><span class="rvts22">Здесь перечислены все возможные типы записей в Журнал Истории, а также дана примерная оценка частоты использования соответствующих операций.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<div class="rvps21"><div align="center"><table width="420" border="1" cellpadding="0" cellspacing="0" style="border-color: #000000 #d3c4af #d3c4af #000000; border-style: solid;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps21"><table width="420" border="1" cellpadding="0" cellspacing="0" style="border-color: #000000 #ffffff #ffffff #000000; border-style: solid;">
<tr valign="middle">
<td width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #0000ff;"><p class="rvps5"><span class="rvts70">Изменение Ввода</span></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #0000ff; width: 132px; height: 10px;"><p class="rvps5"><span class="rvts70">Изменение Ввода</span></p>
</td>
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #0000ff;"><p class="rvps5"><span class="rvts70">Изменение Маркеров</span></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #0000ff; width: 150px; height: 10px;"><p class="rvps5"><span class="rvts70">Изменение Маркеров</span></p>
</td>
<td width="124" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #0000ff;"><p class="rvps5"><span class="rvts70">Прочее</span></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #0000ff; width: 124px; height: 10px;"><p class="rvps5"><span class="rvts70">Прочее</span></p>
</td>
</tr>
<tr valign="middle">
<td width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #ccf8f8;"><p class="rvps5"><a class="rvts69" href="Operations.html#Set">Set</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #ccf8f8; width: 132px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Set">Set</a></p>
</td>
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerSet">Marker Set</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerSet">Marker Set</a></p>
</td>
<td width="124" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #ede4e4;"><p class="rvps5"><span class="rvts69">Initialization</span></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #ede4e4; width: 124px; height: 10px;"><p class="rvps5"><span class="rvts69">Initialization</span></p>
</td>
</tr>
<tr valign="middle">
<td width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8f8;"><p class="rvps5"><a class="rvts69" href="Operations.html#Unset">Unset</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8f8; width: 132px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Unset">Unset</a></p>
</td>
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerRemove">Marker Remove</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerRemove">Marker Remove</a></p>
</td>
<td width="124" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #ede4e4;"><p class="rvps5"><a class="rvts69" href="Operations.html#Undefined">Undefined</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #ede4e4; width: 124px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Undefined">Undefined</a></p>
</td>
</tr>
<tr valign="middle">
<td width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8f8;"><p class="rvps5"><a class="rvts69" href="Operations.html#Pattern">Pattern</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8f8; width: 132px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Pattern">Pattern</a></p>
</td>
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerPattern">Marker Pattern</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerPattern">Marker Pattern</a></p>
</td>
<td rowspan="13" width="124" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid;"><p class="rvps5"><span class="rvts68"><br></span></p>
<td rowspan="13" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; width: 124px;"><p class="rvps5"><span class="rvts68"><br/></span></p>
</td>
</tr>
<tr valign="middle">
<td colspan="2" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8d6;"><p class="rvps5"><a class="rvts69" href="Operations.html#Insert">Insert</a></p>
<td colspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8d6; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Insert">Insert</a></p>
</td>
</tr>
<tr valign="middle">
<td colspan="2" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8d6;"><p class="rvps5"><a class="rvts69" href="Operations.html#InsertNum">Insert#</a></p>
<td colspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8d6; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#InsertNum">Insert#</a></p>
</td>
</tr>
<tr valign="middle">
<td colspan="2" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8d6;"><p class="rvps5"><a class="rvts69" href="Operations.html#Delete">Delete</a></p>
<td colspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8d6; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Delete">Delete</a></p>
</td>
</tr>
<tr valign="middle">
<td colspan="2" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8d6;"><p class="rvps5"><a class="rvts69" href="Operations.html#Truncate">Truncate</a></p>
<td colspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8d6; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Truncate">Truncate</a></p>
</td>
</tr>
<tr valign="top">
<td colspan="2" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8d6;"><p class="rvps5"><a class="rvts69" href="Operations.html#AdjustLag">AdjustLag</a></p>
<td colspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8d6; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#AdjustLag">AdjustLag</a></p>
</td>
</tr>
<tr valign="middle">
<td width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #ccf8f8;"><p class="rvps5"><a class="rvts69" href="Operations.html#Clear">Clear</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #ccf8f8; width: 132px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Clear">Clear</a></p>
</td>
<td rowspan="3" width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid;"><p class="rvps5"><span class="rvts68"><br></span></p>
<td rowspan="3" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; width: 150px; height: 10px;"><p class="rvps5"><span class="rvts68"><br/></span></p>
</td>
</tr>
<tr valign="middle">
<td width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #ccf8f8;"><p class="rvps5"><a class="rvts69" href="Operations.html#Cut">Cut</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #ccf8f8; width: 132px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Cut">Cut</a></p>
</td>
</tr>
<tr valign="middle">
<td width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #ccf8f8;"><p class="rvps5"><a class="rvts69" href="Operations.html#Paste">Paste</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #ccf8f8; width: 132px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Paste">Paste</a></p>
</td>
</tr>
<tr valign="top">
<td colspan="2" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8d6;"><p class="rvps5"><a class="rvts69" href="Operations.html#PasteInsert">PasteInsert</a></p>
<td colspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8d6; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#PasteInsert">PasteInsert</a></p>
</td>
</tr>
<tr valign="top">
<td colspan="2" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8d6;"><p class="rvps5"><a class="rvts69" href="Operations.html#Clone">Clone</a></p>
<td colspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8d6; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Clone">Clone</a></p>
</td>
</tr>
<tr valign="top">
<td width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #ccf8f8;"><p class="rvps5"><a class="rvts69" href="Operations.html#Record">Record</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #ccf8f8; width: 132px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Record">Record</a></p>
</td>
<td rowspan="2" width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid;"><p class="rvps5"><span class="rvts68"><br></span></p>
<td rowspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; width: 150px; height: 10px;"><p class="rvps5"><span class="rvts68"><br/></span></p>
</td>
</tr>
<tr valign="top">
<td width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #ccf8f8;"><p class="rvps5"><a class="rvts69" href="Operations.html#Import">Import</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #ccf8f8; width: 132px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Import">Import</a></p>
</td>
</tr>
<tr valign="top">
<td colspan="2" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8d6;"><p class="rvps5"><a class="rvts69" href="Operations.html#Branch">Branch</a></p>
<td colspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8d6; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Branch">Branch</a></p>
</td>
<td width="124" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #ede4e4;"><p class="rvps5"><a class="rvts69" href="Operations.html#Bookmark">Bookmark</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #ede4e4; width: 124px;"><p class="rvps5"><a class="rvts69" href="Operations.html#Bookmark">Bookmark</a></p>
</td>
</tr>
<tr valign="top">
<td rowspan="8" width="132" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid;"><p class="rvps5"><span class="rvts68"><br></span></p>
<td rowspan="8" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; width: 132px; height: 10px;"><p class="rvps5"><span class="rvts68"><br/></span></p>
</td>
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerBranch">Marker Branch</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerBranch">Marker Branch</a></p>
</td>
<td rowspan="9" width="124" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid;"><p class="rvps5"><span class="rvts6"><br></span></p>
<td rowspan="9" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; width: 124px;"><p class="rvps5"><span class="rvts6"><br/></span></p>
</td>
</tr>
<tr valign="top">
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerRename">Marker Rename</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerRename">Marker Rename</a></p>
</td>
</tr>
<tr valign="top">
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts71" href="Operations.html#MarkerDrag">Marker Drag</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts71" href="Operations.html#MarkerDrag">Marker Drag</a></p>
</td>
</tr>
<tr valign="top">
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts71" href="Operations.html#MarkerSwap">Marker Swap</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts71" href="Operations.html#MarkerSwap">Marker Swap</a></p>
</td>
</tr>
<tr valign="top">
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerShift">Marker Shift</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#MarkerShift">Marker Shift</a></p>
</td>
</tr>
<tr valign="top">
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts69" href="Operations.html#LUAMarkerSet">LUA Marker Set</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#LUAMarkerSet">LUA Marker Set</a></p>
</td>
</tr>
<tr valign="top">
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts69" href="Operations.html#LUAMarkerRemove">LUA Marker Remove</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#LUAMarkerRemove">LUA Marker Remove</a></p>
</td>
</tr>
<tr valign="top">
<td width="150" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #f2f2c8;"><p class="rvps5"><a class="rvts69" href="Operations.html#LUAMarkerRename">LUA Marker Rename</a></p>
<td valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #f2f2c8; width: 150px; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#LUAMarkerRename">LUA Marker Rename</a></p>
</td>
</tr>
<tr valign="top">
<td colspan="2" height="10" valign="middle" style="border-color : #d3c4af #000000 #000000 #d3c4af; border-style: solid; background-color: #d3f8d6;"><p class="rvps5"><a class="rvts69" href="Operations.html#LUAChange">LUA Change</a></p>
<td colspan="2" valign="middle" style="border-color : #ffffff #000000 #000000 #ffffff; border-style: solid; background-color: #d3f8d6; height: 10px;"><p class="rvps5"><a class="rvts69" href="Operations.html#LUAChange">LUA Change</a></p>
</td>
</tr>
</table>
</div></div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
</div>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="Initialization"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Initialization</span></p>
<p class="rvps10"><span class="rvts47">Категория: прочее</span></p>
<p class="rvps10"><span class="rvts22">Эта запись создаётся автоматически при создании Журнала Истории.</span></p>
@ -203,275 +203,262 @@
<p class="rvps22"><span class="rvts44">20:24:53 Initialization</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">крайне редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после нулевого кадра.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="Undefined"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Undefined</span></p>
<p class="rvps10"><span class="rvts47">Категория: прочее</span></p>
<p class="rvps10"><span class="rvts22">Неопределённое изменение. В Тасэдиторе 1.0 эта запись не используется.</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">никогда</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="Set"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Set</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Ввода</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при установке нажатия одной кнопки в один или несколько кадров.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps24" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок по пустой клетке Ввода в Piano Roll устанавливается одно нажатие в эту клетку</span></p>
<p class="rvps24" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">рисование Ввода при помощи щелчка по пустой клетке и дальнейшего перемещения курсора мыши без отпускания левой кнопки устанавливается целый ряд нажатий вдоль линии рисования</span></p>
<p class="rvps24" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Shift</span><span class="rvts22"> + щелчок по пустой клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll устанавливается целый ряд от места щелчка до Курсора Выделения</span></p>
<p class="rvps24" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок по символу в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и в выделенных кадрах есть пустоты в данной колонке) устанавливается в Выделении</span></p>
<p class="rvps24" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие кнопки виртуального джойстика (при условии, что в Piano Roll есть Выделение, и в выделенных кадрах есть пустоты в данной колонке) устанавливается в Выделении</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps24" style="text-indent: 30px"><span class="rvts22">щелчок по пустой клетке Ввода в Piano Roll устанавливается одно нажатие в эту клетку</span></li>
<li class="rvps24" style="text-indent: 30px"><span class="rvts22">рисование Ввода при помощи щелчка по пустой клетке и дальнейшего перемещения курсора мыши без отпускания левой кнопки устанавливается целый ряд нажатий вдоль линии рисования</span></li>
<li class="rvps24" style="text-indent: 30px"><span class="rvts34">Shift</span><span class="rvts22"> + щелчок по пустой клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll устанавливается целый ряд от места щелчка до Курсора Выделения</span></li>
<li class="rvps24" style="text-indent: 30px"><span class="rvts22">щелчок по символу в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и в выделенных кадрах есть пустоты в данной колонке) устанавливается в Выделении</span></li>
<li class="rvps24" style="text-indent: 30px"><span class="rvts22">нажатие кнопки виртуального джойстика (при условии, что в Piano Roll есть Выделение, и в выделенных кадрах есть пустоты в данной колонке) устанавливается в Выделении</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:25:18 Set 15-21</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">очень часто</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился </span><span class="rvts22">Ввод</span><span class="rvts43">.</span></p>
<p class="rvps11"><span class="rvts23"><br></span></p>
<p class="rvps11"><span class="rvts23"><br/></span></p>
<p class="rvps11"><a name="Unset"></a>
<span class="rvts23"><br></span></p>
<span class="rvts23"><br/></span></p>
<p class="rvps11"><span class="rvts23">Unset</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Ввода</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при снятии нажатия одной кнопки в одном или нескольких кадрах.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок по заполненной клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll убирается нажатие из этой клетки</span></p>
<p class="rvps24" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">стирание Ввода при помощи щелчка по заполненной клетке и дальнейшего перемещения курсора мыши без отпускания левой кнопки убирается целый ряд нажатий вдоль линии стирания</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Shift</span><span class="rvts22"> + щелчок по заполненной клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll убираются все имеющиеся нажатия этой кнопки в Выделении</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Ctrl</span><span class="rvts22"> + щелчок по заполненной клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll убираются нажатия этой кнопки в выделенных кадрах</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок по символу в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и во всех выделенных кадрах есть нажатия в данной колонке) убираются все нажатия этой кнопки в Выделении</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие кнопки виртуального джойстика (при условии, что в Piano Roll есть Выделение, и во всех выделенных кадрах есть нажатия в данной колонке) убираются все нажатия этой кнопки в Выделении</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">щелчок по заполненной клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll убирается нажатие из этой клетки</span></li>
<li class="rvps24" style="text-indent: 30px"><span class="rvts22">стирание Ввода при помощи щелчка по заполненной клетке и дальнейшего перемещения курсора мыши без отпускания левой кнопки убирается целый ряд нажатий вдоль линии стирания</span></li>
<li class="rvps15"><span class="rvts34">Shift</span><span class="rvts22"> + щелчок по заполненной клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll убираются все имеющиеся нажатия этой кнопки в Выделении</span></li>
<li class="rvps15"><span class="rvts34">Ctrl</span><span class="rvts22"> + щелчок по заполненной клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll убираются нажатия этой кнопки в выделенных кадрах</span></li>
<li class="rvps15"><span class="rvts22">щелчок по символу в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и во всех выделенных кадрах есть нажатия в данной колонке) убираются все нажатия этой кнопки в Выделении</span></li>
<li class="rvps15"><span class="rvts22">нажатие кнопки виртуального джойстика (при условии, что в Piano Roll есть Выделение, и во всех выделенных кадрах есть нажатия в данной колонке) убираются все нажатия этой кнопки в Выделении</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:25:22 Unset 21</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">очень часто</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился </span><span class="rvts22">Ввод</span><span class="rvts43">.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Pattern"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Pattern</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Ввода</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при установке нажатий/отпусканий одной кнопки по шаблону.</span></p>
<p class="rvps10"><span class="rvts22">В текст записи добавляется название использованного шаблона.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps23" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Alt</span><span class="rvts22"> + щелчок по любой клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll в промежутке от кадра щелчка до Курсора Выделения последовательность нажатий указанной кнопки заменяется на последовательность, соответствующую текущему шаблону</span></p>
<p class="rvps23" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Alt</span><span class="rvts22"> + </span><span class="rvts22">рисование Ввода при помощи щелчка и дальнейшего перемещения курсора мыши без отпускания левой кнопки </span><span class="rvts22">в промежутке от кадра, на который указывает курсор мыши, до Курсора Выделения последовательность нажатий указанной кнопки заменяется на последовательность, соответствующую текущему шаблону</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Alt</span><span class="rvts22"> + щелчок по символу в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение) последовательность нажатий указанной кнопки в выделенных кадрах заменяется на последовательность, соответствующую текущему шаблону</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Alt</span><span class="rvts22"> + нажатие кнопки виртуального джойстика (при условии, что в Piano Roll есть Выделение) последовательность нажатий этой кнопки в выделенных кадрах заменяется на последовательность, соответствующую текущему шаблону</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps23" style="text-indent: 30px"><span class="rvts34">Alt</span><span class="rvts22"> + щелчок по любой клетке </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll в промежутке от кадра щелчка до Курсора Выделения последовательность нажатий указанной кнопки заменяется на последовательность, соответствующую текущему шаблону</span></li>
<li class="rvps23" style="text-indent: 30px"><span class="rvts34">Alt</span><span class="rvts22"> + </span><span class="rvts22">рисование Ввода при помощи щелчка и дальнейшего перемещения курсора мыши без отпускания левой кнопки </span><span class="rvts22">в промежутке от кадра, на который указывает курсор мыши, до Курсора Выделения последовательность нажатий указанной кнопки заменяется на последовательность, соответствующую текущему шаблону</span></li>
<li class="rvps15"><span class="rvts34">Alt</span><span class="rvts22"> + щелчок по символу в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение) последовательность нажатий указанной кнопки в выделенных кадрах заменяется на последовательность, соответствующую текущему шаблону</span></li>
<li class="rvps15"><span class="rvts34">Alt</span><span class="rvts22"> + нажатие кнопки виртуального джойстика (при условии, что в Piano Roll есть Выделение) последовательность нажатий этой кнопки в выделенных кадрах заменяется на последовательность, соответствующую текущему шаблону</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:25:40 Pattern 21-30 Alternating (1010...)</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился </span><span class="rvts22">Ввод</span><span class="rvts43">.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Insert"></a>
<span class="rvts67"><br></span></p>
<span class="rvts67"><br/></span></p>
<p class="rvps11"><span class="rvts23">Insert</span></p>
<p class="rvps10"><span class="rvts47">Категории: изменение Ввода, изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при вставке одного или нескольких пустых кадров посреди мувика, что приводит к сдвиганию </span><span class="rvts22">Ввод</span><span class="rvts22">а (и Маркеров, если они привязаны к </span><span class="rvts22">Ввод</span><span class="rvts22">у) вниз.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Shift + Insert</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) перед выделенными строками появляются пустые строки, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Insert (при условии, что в Piano Roll есть Выделение) перед выделенными строками появляются пустые строки, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Insert (пункт доступен только когда в Piano Roll есть Выделение) перед выделенными строками появляются пустые строки, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Shift + Insert</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) перед выделенными строками появляются пустые строки, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз</span></li>
<li class="rvps15"><span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Insert (при условии, что в Piano Roll есть Выделение) перед выделенными строками появляются пустые строки, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Insert (пункт доступен только когда в Piano Roll есть Выделение) перед выделенными строками появляются пустые строки, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:25:58 Insert 21</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">часто</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился </span><span class="rvts22">Ввод</span><span class="rvts43">. Это может быть кадр, находящийся ниже, чем место вставки.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="InsertNum"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Insert#</span></p>
<p class="rvps10"><span class="rvts47">Категории: изменение Ввода, изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при вставке заданного количества пустых кадров посреди мувика, что приводит к сдвиганию </span><span class="rvts22">Ввод</span><span class="rvts22">а (и Маркеров, если они привязаны к </span><span class="rvts22">Ввод</span><span class="rvts22">у) вниз.</span></p>
<p class="rvps10"><span class="rvts22">В текст записи добавляется количество вставленных кадров.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие клавиши </span><span class="rvts34">Insert</span><span class="rvts22"> и введение требуемого числа кадров если в Piano Roll есть Выделение, перед самым первым выделенным кадром появляется требуемое количество пустых строк, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз. Если выделения нет, то требуемое количество пустых строк появляется перед Курсором Проигрывателя</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Insert # of Frames если в Piano Roll есть Выделение, перед самым первым выделенным кадром появляется требуемое количество пустых строк, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз. Если выделения нет, то требуемое количество пустых строк появляется перед Курсором Проигрывателя</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Insert # of Frames (пункт доступен всегда) если в Piano Roll есть Выделение, перед самым первым выделенным кадром появляется требуемое количество пустых строк, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз. Если выделения нет, то требуемое количество пустых строк появляется перед Курсором Проигрывателя</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие клавиши </span><span class="rvts34">Insert</span><span class="rvts22"> и введение требуемого числа кадров если в Piano Roll есть Выделение, перед самым первым выделенным кадром появляется требуемое количество пустых строк, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз. Если выделения нет, то требуемое количество пустых строк появляется перед Курсором Проигрывателя</span></li>
<li class="rvps15"><span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Insert # of Frames если в Piano Roll есть Выделение, перед самым первым выделенным кадром появляется требуемое количество пустых строк, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз. Если выделения нет, то требуемое количество пустых строк появляется перед Курсором Проигрывателя</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Insert # of Frames (пункт доступен всегда) если в Piano Roll есть Выделение, перед самым первым выделенным кадром появляется требуемое количество пустых строк, выделение вместе с </span><span class="rvts22">Ввод</span><span class="rvts22">ом сдвигается вниз. Если выделения нет, то требуемое количество пустых строк появляется перед Курсором Проигрывателя</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:26:09 Insert#4 29</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился </span><span class="rvts22">Ввод</span><span class="rvts43">. Это может быть кадр, находящийся ниже, чем место вставки.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Delete"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Delete</span></p>
<p class="rvps10"><span class="rvts47">Категории: изменение Ввода, изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при удалении одного или нескольких кадров посреди мувика, что приводит к сдвиганию </span><span class="rvts22">Ввод</span><span class="rvts22">а (и Маркеров, если они привязаны к </span><span class="rvts22">Ввод</span><span class="rvts22">у) вверх.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Ctrl + Delete</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) содержимое выделенных строк исчезает, само выделение остаётся на месте, Ввод в последующих кадрах сдвигается вверх</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Delete (при условии, что в Piano Roll есть Выделение) содержимое выделенных строк исчезает, само выделение остаётся на месте, Ввод в последующих кадрах сдвигается вверх</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Delete (пункт доступен только когда в Piano Roll есть Выделение) содержимое выделенных строк исчезает, само выделение остаётся на месте, Ввод в последующих кадрах сдвигается вверх</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Ctrl + Delete</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) содержимое выделенных строк исчезает, само выделение остаётся на месте, Ввод в последующих кадрах сдвигается вверх</span></li>
<li class="rvps15"><span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Delete (при условии, что в Piano Roll есть Выделение) содержимое выделенных строк исчезает, само выделение остаётся на месте, Ввод в последующих кадрах сдвигается вверх</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Delete (пункт доступен только когда в Piano Roll есть Выделение) содержимое выделенных строк исчезает, само выделение остаётся на месте, Ввод в последующих кадрах сдвигается вверх</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:26:12 Delete 33</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">часто</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился Ввод. Это может быть кадр, находящийся ниже, чем место удаления.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Truncate"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Truncate</span></p>
<p class="rvps10"><span class="rvts47">Категории: изменение Ввода, изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при усечении хвоста мувика, что приводит удалению Ввода (и Маркеров, если они привязаны к Вводу), начиная с указанной строки.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Truncate movie если в Piano Roll есть Выделение, мувик усекается сразу после первого выделенного кадра. Если выделения нет, то мувик усекается сразу после Курсора Проигрывателя</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Truncate movie (пункт доступен всегда) если в Piano Roll есть Выделение, мувик усекается сразу после первого выделенного кадра. Если выделения нет, то мувик усекается сразу после Курсора Проигрывателя</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Truncate movie если в Piano Roll есть Выделение, мувик усекается сразу после первого выделенного кадра. Если выделения нет, то мувик усекается сразу после Курсора Проигрывателя</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Truncate movie (пункт доступен всегда) если в Piano Roll есть Выделение, мувик усекается сразу после первого выделенного кадра. Если выделения нет, то мувик усекается сразу после Курсора Проигрывателя</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:26:28 Truncate 42</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">крайне редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после кадра усечения мувика.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="AdjustLag"></a>
<span class="rvts43"><br></span></p>
<span class="rvts43"><br/></span></p>
<p class="rvps11"><span class="rvts23">AdjustLag</span></p>
<p class="rvps10"><span class="rvts47">Категории: изменение Ввода, изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при автоматическом сдвигании </span><span class="rvts22">Ввод</span><span class="rvts22">а (и Маркеров, если они привязаны к </span><span class="rvts22">Ввод</span><span class="rvts22">у)</span><span class="rvts22"> во время проигрывания мувика с включенной галочкой "Auto-adjust Input due to lag".</span></p>
<p class="rvps10"><span class="rvts22">В текст записи добавляется число, обозначающее количество вставленных или удалённых кадров.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">изменить Ввод на участке и запустить просмотр участка, отпустив паузу если во время эмуляции лаг проявляется иначе, чем при предыдущем просмотре, весь последующий Ввод сдвигается таким образом, чтобы учесть это изменение.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">записать новый Ввод поверх старого</span><span class="rvts22"> если во время записи очередного кадра лаг на этом кадре проявляется иначе, чем при предыдущем просмотре, весь последующий Ввод сдвигается таким образом, чтобы учесть это изменение.</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">изменить Ввод на участке и запустить просмотр участка, отпустив паузу если во время эмуляции лаг проявляется иначе, чем при предыдущем просмотре, весь последующий Ввод сдвигается таким образом, чтобы учесть это изменение.</span></li>
<li class="rvps15"><span class="rvts22">записать новый Ввод поверх старого</span><span class="rvts22"> если во время записи очередного кадра лаг на этом кадре проявляется иначе, чем при предыдущем просмотре, весь последующий Ввод сдвигается таким образом, чтобы учесть это изменение.</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:26:39 AdjustLag [+1] 30</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">часто</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после кадра, в котором изменилось поведение лага.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Clear"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Clear</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Ввода</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при снятии нажатий всех кнопок с одного или нескольких кадров.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие клавиши </span><span class="rvts34">Delete</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Clear (при условии, что в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор контекстном меню пункта Clear (пункт доступен только когда в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие клавиши </span><span class="rvts34">Delete</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></li>
<li class="rvps15"><span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Clear (при условии, что в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор контекстном меню пункта Clear (пункт доступен только когда в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:26:51 Clear 15-20</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">средне</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился Ввод.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Cut"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Cut</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Ввода</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при совершении операции Cut ("Вырезать" копирование данных в Буфер Обмена с одновременным удалением этих данных из источника). Эта операция приводит к снятию нажатий всех кнопок с одного или нескольких кадров.</span></p>
<p class="rvps10"><span class="rvts22">Эта операция идентична операции Clear, за исключением того, что Ввод перед удалением попадают в Буфер Обмена.</span></p>
<p class="rvps10"><span class="rvts37">Замечание:</span><span class="rvts22"> хотя последствия операции Cut можно откатить с помощью </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">, данные в Буфере Обмена при этом не будут откатываться.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Ctrl + X</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Cut (при условии, что в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Ctrl + X</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></li>
<li class="rvps15"><span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Cut (при условии, что в Piano Roll есть Выделение) все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:27:05 Cut 21-23</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился Ввод.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Paste"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Paste</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Ввода</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при вставке данных из Буфера Обмена в мувик (поверх старых данных).</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Ctrl + V</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) </span><span class="rvts22">Ввод</span><span class="rvts22"> из Буфера Обмена вставляется поверх Ввода мувика. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым. В Заголовке Piano Roll вспыхивают символы кнопок, для которых было установлено хотя бы одно нажатие в выделенных кадрах</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Paste (при условии, что в Piano Roll есть Выделение) Ввод из Буфера Обмена вставляется поверх Ввода мувика. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым. В Заголовке Piano Roll вспыхивают символы кнопок, для которых было установлено хотя бы одно нажатие в выделенных кадрах</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Ctrl + V</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) </span><span class="rvts22">Ввод</span><span class="rvts22"> из Буфера Обмена вставляется поверх Ввода мувика. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым. В Заголовке Piano Roll вспыхивают символы кнопок, для которых было установлено хотя бы одно нажатие в выделенных кадрах</span></li>
<li class="rvps15"><span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Paste (при условии, что в Piano Roll есть Выделение) Ввод из Буфера Обмена вставляется поверх Ввода мувика. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым. В Заголовке Piano Roll вспыхивают символы кнопок, для которых было установлено хотя бы одно нажатие в выделенных кадрах</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:27:11 Paste 21</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">ниже среднего</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился Ввод.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="PasteInsert"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">PasteInsert</span></p>
<p class="rvps10"><span class="rvts47">Категории: изменение Ввода, изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при вставке данных из Буфера Обмена в мувик (с раздвиганием старых данных).</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Shift + V</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) Ввод из Буфера Обмена вставляется в мувик, старый Ввод на этих кадрах смещаются вниз. Также смещаются вниз Маркеры, если они привязаны</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; PasteInsert (при условии, что в Piano Roll есть Выделение) Ввод из Буфера Обмена вставляется в мувик, старый Ввод на этих кадрах смещаются вниз. Также смещаются вниз Маркеры, если они привязаны</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Shift + V</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) Ввод из Буфера Обмена вставляется в мувик, старый Ввод на этих кадрах смещаются вниз. Также смещаются вниз Маркеры, если они привязаны</span></li>
<li class="rvps15"><span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; PasteInsert (при условии, что в Piano Roll есть Выделение) Ввод из Буфера Обмена вставляется в мувик, старый Ввод на этих кадрах смещаются вниз. Также смещаются вниз Маркеры, если они привязаны</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:27:16 PasteInsert 21</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился Ввод. Это может быть кадр, находящийся ниже, чем место вставки.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Clone"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Clone</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Ввода, изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при вставке одного или нескольких кадров посреди мувика, что приводит к сдвиганию Ввода (и Маркеров, если они привязаны к Вводу) вниз.</span></p>
<p class="rvps10"><span class="rvts22">Ввод в появившихся кадрах будет являться копией Ввода из сдвинутых ниже кадров.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Ctrl + Insert</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) перед выделенными строками появляются их копии, выделение вместе с Вводом сдвигается вниз</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Clone (при условии, что в Piano Roll есть Выделение) перед выделенными строками появляются их копии, выделение вместе с Вводом сдвигается вниз</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Clone (пункт доступен только когда в Piano Roll есть Выделение) перед выделенными строками появляются их копии, выделение вместе с Вводом сдвигается вниз</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие клавиатурного акселератора </span><span class="rvts34">Ctrl + Insert</span><span class="rvts22"> (при условии, что в Piano Roll есть Выделение) перед выделенными строками появляются их копии, выделение вместе с Вводом сдвигается вниз</span></li>
<li class="rvps15"><span class="rvts22">выбор в меню Тасэдитора пункта Edit -&gt; Clone (при условии, что в Piano Roll есть Выделение) перед выделенными строками появляются их копии, выделение вместе с Вводом сдвигается вниз</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Clone (пункт доступен только когда в Piano Roll есть Выделение) перед выделенными строками появляются их копии, выделение вместе с Вводом сдвигается вниз</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:27:34 Clone 23</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">часто</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился Ввод. Это может быть кадр, находящийся ниже, чем место вставки.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Record"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Record</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Ввода</span></p>
<p class="rvps10"><span class="rvts22">Эта запись в Журнал Истории создаётся при Записывании Ввода в мувик с помощью виртуальных джойстиков в режиме Recording.</span></p>
<p class="rvps10"><span class="rvts22">В текст записи добавляются номера виртуальных джойстиков, Ввод которых был изменён.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие кнопок виртуального джойстика (когда отжата пауза эмулятора, и включен режим Recording) новые нажатия появляются на кадрах, где находится Курсор Проигрывателя. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие кнопок виртуального джойстика одновременно с нажатием хоткея Frame Advance (когда эмулятор стоит на паузе, и включен режим Recording) новые нажатия появляются на кадрах, где находится Курсор Проигрывателя. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие кнопок виртуального джойстика (когда отжата пауза эмулятора, и включен режим Recording) новые нажатия появляются на кадрах, где находится Курсор Проигрывателя. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым</span></li>
<li class="rvps15"><span class="rvts22">нажатие кнопок виртуального джойстика одновременно с нажатием хоткея Frame Advance (когда эмулятор стоит на паузе, и включен режим Recording) новые нажатия появляются на кадрах, где находится Курсор Проигрывателя. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:28:01 Record(1P) 18-24</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">ниже среднего</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после Курсора Проигрывателя.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Import"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Import</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Ввода</span></p>
<p class="rvps10"><span class="rvts22">Эта запись в Журнал Истории создаётся при импорте Ввода из любого другого fm2/fm3-файла.</span></p>
<p class="rvps10"><span class="rvts22">В текст записи добавляется имя файла, из которого был взят Ввод. Номер кадра в этих записях отсутствует, так как заменяется весь Ввод, начиная с нулевого кадра.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">выбор пункта меню File -&gt; Import Input и открытие файла-источника. Текущий Ввод проекта полностью заменяется на Ввод из выбранного файла, Маркеры остаются без изменений</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">выбор пункта меню File -&gt; Import Input и открытие файла-источника. Текущий Ввод проекта полностью заменяется на Ввод из выбранного файла, Маркеры остаются без изменений</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:28:53 Import Battletoads-WIP1.fm2</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">крайне редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где началось расхождение между новым и старым Вводом.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Bookmark"></a>
<span class="rvts43"><br></span></p>
<span class="rvts43"><br/></span></p>
<p class="rvps11"><span class="rvts23">Bookmark0</span></p>
<p class="rvps11"><span class="rvts23">Bookmark1</span></p>
<p class="rvps11"><span class="rvts23">Bookmark2</span></p>
@ -486,20 +473,19 @@
<p class="rvps10"><span class="rvts22">Эта запись создаётся при изменении данных одной Закладки.</span></p>
<p class="rvps10"><span class="rvts22">Пересохранение Закладки в уже заполненный слот срабатывает, только если новые данные отличаются от имеющихся в данном слоте. Например, если отличается кадр Закладки или мувик её ответвления.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие хоткея Shift + клавиша в ряду от </span><span class="rvts27">F1</span><span class="rvts22"> до </span><span class="rvts27">F10</span><span class="rvts22"> на кадре, где находится Курсор Проигрывателя, будет установлена Закладка, хранящая в своём ответвлении копию текущего мувика</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой мыши по любой строке Списка Закладок</span><span class="rvts22"> на кадре, где находится Курсор Проигрывателя, будет установлена Закладка, хранящая в своём ответвлении копию текущего мувика</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой мыши по любой иконке Закладок в Дереве ответвлений</span><span class="rvts22"> на кадре, где находится Курсор Проигрывателя, будет установлена Закладка, хранящая в своём ответвлении копию текущего мувика</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие хоткея Shift + клавиша в ряду от </span><span class="rvts27">F1</span><span class="rvts22"> до </span><span class="rvts27">F10</span><span class="rvts22"> на кадре, где находится Курсор Проигрывателя, будет установлена Закладка, хранящая в своём ответвлении копию текущего мувика</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой мыши по любой строке Списка Закладок</span><span class="rvts22"> на кадре, где находится Курсор Проигрывателя, будет установлена Закладка, хранящая в своём ответвлении копию текущего мувика</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой мыши по любой иконке Закладок в Дереве ответвлений</span><span class="rvts22"> на кадре, где находится Курсор Проигрывателя, будет установлена Закладка, хранящая в своём ответвлении копию текущего мувика</span></li>
</ul>
<p class="rvps10"><span class="rvts22">При успешном сохранении Закладки её ответвление становится текущим, а в окне эмулятора появляется сообщение "Branch </span><span class="rvts31">N</span><span class="rvts22"> saved."</span></p>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:28:53 Bookmark1 10</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">часто</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="Branch"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Branch0 to</span></p>
<p class="rvps11"><span class="rvts23">Branch1 to</span></p>
<p class="rvps11"><span class="rvts23">Branch2 to</span></p>
@ -515,18 +501,18 @@
<p class="rvps10"><span class="rvts22">В текст записи добавляется время этой Закладки, так как содержимое мувика возвращается во времени на тот момент, когда создавалась данная Закладка.</span></p>
<p class="rvps10"><span class="rvts22">Номер кадра в этих записях отсутствует, так как заменяется либо весь Ввод (при установленной галочке Branches restore entire Movie), либо Ввод с нулевого кадра до кадра Закладки (не включая этот кадр).</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие хоткея в ряду клавиш от </span><span class="rvts27">F1</span><span class="rvts22"> до </span><span class="rvts27">F10</span><span class="rvts22"> Ввод и Маркеры текущего мувика заменяются на Ввод и Маркеры из соответствующего ответвления</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок левой кнопкой мыши по правой половине Списка закладок </span><span class="rvts22">Ввод и Маркеры текущего мувика заменяются на Ввод и Маркеры из соответствующего ответвления</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие хоткея в ряду клавиш от </span><span class="rvts27">F1</span><span class="rvts22"> до </span><span class="rvts27">F10</span><span class="rvts22"> Ввод и Маркеры текущего мувика заменяются на Ввод и Маркеры из соответствующего ответвления</span></li>
<li class="rvps15"><span class="rvts22">щелчок левой кнопкой мыши по правой половине Списка закладок </span><span class="rvts22">Ввод и Маркеры текущего мувика заменяются на Ввод и Маркеры из соответствующего ответвления</span></li>
</ul>
<p class="rvps10"><span class="rvts22">При успешной загрузке Закладки её ответвление становится текущим, а в окне эмулятора появляется сообщение "Branch </span><span class="rvts31">N</span><span class="rvts22"> loaded."</span></p>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:29:02 Branch1 to 20:28:15</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">средне</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где началось расхождение между новым и старым Вводом.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="MarkerBranch"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Marker Branch0 to</span></p>
<p class="rvps11"><span class="rvts23">Marker Branch1 to</span></p>
<p class="rvps11"><span class="rvts23">Marker Branch2 to</span></p>
@ -540,185 +526,188 @@
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при загрузке ответвления соответствующей Закладки (0-9) в случае, когда Ввод ответвления был идентичен текущему Вводу, а Маркеры ответвления отличались от текущих Маркеров (или отличались их Заметки).</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">нажатие хоткея в ряду клавиш от </span><span class="rvts27">F1</span><span class="rvts22"> до </span><span class="rvts27">F10</span><span class="rvts22"> Маркеры текущего мувика заменяются на Маркеры из ответвления. Данное ответвление становится текущим</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок левой кнопкой мыши по правой половине Списка закладок </span><span class="rvts22">Маркеры текущего мувика заменяются на Маркеры из ответвления. Данное ответвление становится текущим</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">нажатие хоткея в ряду клавиш от </span><span class="rvts27">F1</span><span class="rvts22"> до </span><span class="rvts27">F10</span><span class="rvts22"> Маркеры текущего мувика заменяются на Маркеры из ответвления. Данное ответвление становится текущим</span></li>
<li class="rvps15"><span class="rvts22">щелчок левой кнопкой мыши по правой половине Списка закладок </span><span class="rvts22">Маркеры текущего мувика заменяются на Маркеры из ответвления. Данное ответвление становится текущим</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:29:33 Marker Branch1 to 20:28:15</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">крайне редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="MarkerSet"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Marker Set</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при установке Маркера на один или несколько кадров.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">двойной щелчок по номеру кадра в Piano Roll (при условии, что на этом кадре ещё нет Маркера) на этот кадр устанавливается Маркер</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок по Frame# в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и среди выделенных кадров есть кадры без Маркеров) Маркеры устанавливаются на всех кадрах в выделении</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Set Marker (пункт доступен только когда в Piano Roll есть Выделение) Маркеры устанавливаются на всех кадрах в выделении</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">двойной щелчок по номеру кадра в Piano Roll (при условии, что на этом кадре ещё нет Маркера) на этот кадр устанавливается Маркер</span></li>
<li class="rvps15"><span class="rvts22">щелчок по Frame# в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и среди выделенных кадров есть кадры без Маркеров) Маркеры устанавливаются на всех кадрах в выделении</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Set Marker (пункт доступен только когда в Piano Roll есть Выделение) Маркеры устанавливаются на всех кадрах в выделении</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:29:47 Marker Set 15-18</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">часто</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="MarkerRemove"></a>
<span class="rvts43"><br></span></p>
<span class="rvts43"><br/></span></p>
<p class="rvps11"><span class="rvts23">Marker Remove</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при снятии Маркера с одного или нескольких кадров.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">двойной щелчок по номеру кадра в Piano Roll (при условии, что на этом кадре есть Маркер), перетаскивание Маркера за пределы Piano Roll и отпускание этот Маркер удаляется</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок по Frame# в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и на всех выделенных кадрах есть Маркеры) со всех выделенных кадров удаляются Маркеры</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Remove Marker (пункт доступен только когда в Piano Roll есть Выделение) со всех выделенных кадров удаляются Маркеры</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">двойной щелчок по номеру кадра в Piano Roll (при условии, что на этом кадре есть Маркер), перетаскивание Маркера за пределы Piano Roll и отпускание этот Маркер удаляется</span></li>
<li class="rvps15"><span class="rvts22">щелчок по Frame# в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и на всех выделенных кадрах есть Маркеры) со всех выделенных кадров удаляются Маркеры</span></li>
<li class="rvps15"><span class="rvts22">щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Remove Marker (пункт доступен только когда в Piano Roll есть Выделение) со всех выделенных кадров удаляются Маркеры</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:29:52 Marker Remove 16-18</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">средне</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="MarkerPattern"></a>
<span class="rvts43"><br></span></p>
<span class="rvts43"><br/></span></p>
<p class="rvps11"><span class="rvts23">Marker Pattern</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при установке Маркеров по шаблону.</span></p>
<p class="rvps10"><span class="rvts22">В текст записи добавляется название использованного шаблона.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Alt</span><span class="rvts22"> + щелчок по Frame# в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение) последовательность Маркеров в выделенных кадрах заменяется на последовательность, соответствующую текущему шаблону</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts34">Alt</span><span class="rvts22"> + щелчок по Frame# в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение) последовательность Маркеров в выделенных кадрах заменяется на последовательность, соответствующую текущему шаблону</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:30:11 Marker Pattern 20-30 One Quarter (10001000...)</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">крайне редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="MarkerRename"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Marker Rename</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при изменении текста Заметки одного Маркера.</span></p>
<p class="rvps10"><span class="rvts22">В текст записи добавляется новый текст Заметки.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щёлкнуть мышью по верхнему текстовому полю, стереть старый текст и ввести новый текст, затем нажать Enter или щёлкнуть по Piano Roll изменится текст Заметки Маркера, под которым в данный момент находится Курсор Проигрывателя</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">щёлкнуть мышью по нижнему текстовому полю, ввести новый текст, затем нажать Enter или щёлкнуть по любому месту окна TAS Editor изменится текст Заметки Маркера, под которым в данный момент находится начало Выделения</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">щёлкнуть мышью по верхнему текстовому полю, стереть старый текст и ввести новый текст, затем нажать Enter или щёлкнуть по Piano Roll изменится текст Заметки Маркера, под которым в данный момент находится Курсор Проигрывателя</span></li>
<li class="rvps15"><span class="rvts22">щёлкнуть мышью по нижнему текстовому полю, ввести новый текст, затем нажать Enter или щёлкнуть по любому месту окна TAS Editor изменится текст Заметки Маркера, под которым в данный момент находится начало Выделения</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:31:01 Marker Rename 20 Testing...</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">часто</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="MarkerDrag"></a>
<span class="rvts43"><br></span></p>
<span class="rvts43"><br/></span></p>
<p class="rvps11"><span class="rvts23">Marker Drag</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся после перетаскивания Маркера на новое место.</span></p>
<p class="rvps10"><span class="rvts22">В текст записи помещается старый и новый номер кадра данного Маркера, а также текст его Заметки.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">навести курсор мыши на номер кадра с Маркером, зажать левую кнопку и перетащить Маркер на другой кадр, на котором нет Маркера, отпустить левую кнопку Маркер переместится с одного кадра на другой</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">навести курсор мыши на номер кадра с Маркером, зажать левую кнопку и перетащить Маркер на другой кадр, на котором нет Маркера, отпустить левую кнопку Маркер переместится с одного кадра на другой</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:31:08 Marker Drag 20=&gt;15 Testing...</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">средне</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="MarkerSwap"></a>
<span class="rvts43"><br></span></p>
<span class="rvts43"><br/></span></p>
<p class="rvps11"><span class="rvts23">Marker Swap</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся после перетаскивания Маркера на кадр с другим Маркером, в результате чего они меняются местами.</span></p>
<p class="rvps10"><span class="rvts22">В текст записи помещается старый и новый номер кадра данного Маркера, а также текст его Заметки.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">навести курсор мыши на номер кадра с Маркером, зажать левую кнопку и перетащить Маркер на другой кадр, на котором есть Маркер, отпустить левую кнопку Маркеры поменяются местами</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">навести курсор мыши на номер кадра с Маркером, зажать левую кнопку и перетащить Маркер на другой кадр, на котором есть Маркер, отпустить левую кнопку Маркеры поменяются местами</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:31:14 Marker Swap 24&lt;=&gt;28</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="MarkerShift"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">Marker Shift</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при изменении мувика, которое не изменило Ввод, но привело к смещению Маркеров вверх или вниз.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">вставить пустой кадр перед самым концом мувика, за которым нет нажатий, но есть Маркер размер Ввода увеличится на один пустой кадр, изменений Ввода зарегистрировано не будет, но Маркер сместится на один кадр вниз</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">склонировать пустой кадр перед самым концом мувика, за которым нет нажатий, но есть Маркер размер Ввода увеличится на один пустой кадр, изменений Ввода зарегистрировано не будет, но Маркер сместится на оидн кадр вниз</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">скопировать в Буфер Обмена пустой кадр, затем сделать </span><span class="rvts26">PasteInsert</span><span class="rvts22"> перед самым концом мувика, за которым нет нажатий, но есть Маркер размер Ввода увеличится на один пустой кадр, изменений Ввода зарегистрировано не будет, но Маркер сместится на один кадр вниз</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">вставить пустой кадр перед самым концом мувика, за которым нет нажатий, но есть Маркер размер Ввода увеличится на один пустой кадр, изменений Ввода зарегистрировано не будет, но Маркер сместится на один кадр вниз</span></li>
<li class="rvps15"><span class="rvts22">склонировать пустой кадр перед самым концом мувика, за которым нет нажатий, но есть Маркер размер Ввода увеличится на один пустой кадр, изменений Ввода зарегистрировано не будет, но Маркер сместится на оидн кадр вниз</span></li>
<li class="rvps15"><span class="rvts22">скопировать в Буфер Обмена пустой кадр, затем сделать </span><span class="rvts26">PasteInsert</span><span class="rvts22"> перед самым концом мувика, за которым нет нажатий, но есть Маркер размер Ввода увеличится на один пустой кадр, изменений Ввода зарегистрировано не будет, но Маркер сместится на один кадр вниз</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:31:44 Marker Shift 21</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">крайне редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="LUAMarkerSet"></a>
<span class="rvts43"><br></span></p>
<span class="rvts43"><br/></span></p>
<p class="rvps11"><span class="rvts23">LUA Marker Set</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при установке Маркера на один кадр с помощью вызова функции </span><span class="rvts21">taseditor.setmarker()</span><span class="rvts22"> из Луа-скрипта.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">исполнить Луа-скрипт со строкой </span><span class="rvts21">taseditor.setmarker(framenum)</span><span class="rvts22"> на кадре с номером framenum появится Маркер (если же Маркер там уже был, то запись в журнале Истории не появится)</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">исполнить Луа-скрипт со строкой </span><span class="rvts21">taseditor.setmarker(framenum)</span><span class="rvts22"> на кадре с номером framenum появится Маркер (если же Маркер там уже был, то запись в журнале Истории не появится)</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:35:14 LUA Marker Set 0</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="LUAMarkerRemove"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">LUA Marker Remove</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при снятии Маркера с одного кадра с помощью вызова функции </span><span class="rvts21">taseditor.clearmarker()</span><span class="rvts22"> из Луа-скрипта.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">написать и исполнить Луа-скрипт со строкой </span><span class="rvts21">taseditor.clearmarker(framenum)</span><span class="rvts22"> с кадра с номером framenum снимется Маркер</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">написать и исполнить Луа-скрипт со строкой </span><span class="rvts21">taseditor.clearmarker(framenum)</span><span class="rvts22"> с кадра с номером framenum снимется Маркер</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:36:12 LUA Marker Remove 0</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="LUAMarkerRename"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">LUA Marker Rename</span></p>
<p class="rvps10"><span class="rvts47">Категория: изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при изменении текста Заметки одного Маркера с помощью вызова функции </span><span class="rvts21">taseditor.setnote()</span><span class="rvts22"> из Луа-скрипта.</span></p>
<p class="rvps10"><span class="rvts22">В текст записи добавляется новый текст Заметки.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">написать и исполнить Луа-скрипт со строкой </span><span class="rvts21">taseditor.setnote(markernum, newtext)</span><span class="rvts22"> текст Заметки Маркера под номером markernum изменится на содержимое строки newtext</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">написать и исполнить Луа-скрипт со строкой </span><span class="rvts21">taseditor.setnote(markernum, newtext)</span><span class="rvts22"> текст Заметки Маркера под номером markernum изменится на содержимое строки newtext</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:37:03 LUA Marker Rename 0 Hello from Lua!</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона не усекается.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><a name="LUAChange"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps11"><span class="rvts23">LUA Change</span></p>
<p class="rvps10"><span class="rvts47">Категории: изменение Ввода, изменение Маркеров</span></p>
<p class="rvps10"><span class="rvts22">Запись создаётся при изменении Ввода/Маркеров одного или нескольких кадров с помощью вызова функции </span><span class="rvts21">taseditor.applyinputchanges()</span><span class="rvts22"> из Луа-скрипта.</span></p>
<p class="rvps10"><span class="rvts22">Вместо слова "Change" в тексте записи может фигурировать любое другое слово или словосочетание, которое указывается в качестве параметра функции </span><span class="rvts21">taseditor.applyinputchanges()</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Варианты:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">написать и исполнить Луа-скрипт со строками </span><span class="rvts21">taseditor.submitinputchange(frame, joypad, input)</span><span class="rvts22"> и </span><span class="rvts21">taseditor.applyinputchanges(name)</span><span class="rvts22"> Ввод мувика изменится в соответствии с параметрами вызванных функций </span><span class="rvts21">submitinputchange()</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">написать и исполнить Луа-скрипт со строками </span><span class="rvts21">taseditor.submitinsertframes(frame, number)</span><span class="rvts22">, а также </span><span class="rvts21">taseditor.submitdeleteframes(frame, number)</span><span class="rvts22"> и </span><span class="rvts21">taseditor.applyinputchanges(name)</span><span class="rvts22"> Ввод и Маркеры мувика сместятся вверх или вниз в соответствии с параметрами вызванных функций </span><span class="rvts21">submitinsertframes()</span><span class="rvts22"> и </span><span class="rvts21">submitdeleteframes()</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">написать и исполнить Луа-скрипт со строками </span><span class="rvts21">taseditor.submitinputchange(frame, joypad, input)</span><span class="rvts22"> и </span><span class="rvts21">taseditor.applyinputchanges(name)</span><span class="rvts22"> Ввод мувика изменится в соответствии с параметрами вызванных функций </span><span class="rvts21">submitinputchange()</span></li>
<li class="rvps15"><span class="rvts22">написать и исполнить Луа-скрипт со строками </span><span class="rvts21">taseditor.submitinsertframes(frame, number)</span><span class="rvts22">, а также </span><span class="rvts21">taseditor.submitdeleteframes(frame, number)</span><span class="rvts22"> и </span><span class="rvts21">taseditor.applyinputchanges(name)</span><span class="rvts22"> Ввод и Маркеры мувика сместятся вверх или вниз в соответствии с параметрами вызванных функций </span><span class="rvts21">submitinsertframes()</span><span class="rvts22"> и </span><span class="rvts21">submitdeleteframes()</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:39:56 LUA Corruptor 10</span></p>
<p class="rvps10"><span class="rvts22">Частота использования: </span><span class="rvts31">редко</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts43">Гринзона усекается: после первого же кадра, где изменился Ввод.</span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps10"><span class="rvts43"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps10"><span class="rvts43"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Free Kindle producer</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>2.1. Piano Roll</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,28 +53,25 @@
<div id="topic_content">
<p><span class="rvts20">Piano Roll</span></p>
<p class="rvps5"><span class="rvts39"><br></span></p>
<p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/taseditor-smb.png"></p>
<p class="rvps21"><span class="rvts22"><br></span></p>
<p class="rvps5"><span class="rvts39"><br/></span></p>
<p class="rvps5"><img alt="" style="padding : 1px;" src="lib/taseditor-smb.png"/></p>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Рабочее пространство Тасэдитора похоже на интерфейс большинства программ для написания музыки Piano Roll (перфолента). Piano Roll представляет из себя таблицу, содержащую все необходимые данные о редактируемом проекте. Пользователь может не только просматривать эти данные, но и редактировать их с помощью щелчков мыши по клеткам таблицы.</span></p>
<p class="rvps10"><span class="rvts22">При первом открытии Тасэдитора вы, скорее всего, увидите пустой проект, содержащий лишь стартовый (нулевой) кадр мувика. Поэтому перед началом экспериментов нужно временно отключить паузу эмуляции, чтобы мувик дошёл хотя бы до титульного экрана игры, где уже можно воздействовать на игру с помощью Ввода. По умолчанию для управления паузой эмулятора служит клавиша </span><span class="rvts27">Pause</span><span class="rvts22"> на клавиатуре, но в Тасэдиторе вы можете использовать вместо неё среднюю кнопку мыши (колесо). Попробуйте просмотреть запущенную видеоигру пару секунд, затем вновь нажмите </span><span class="rvts27">Pause</span><span class="rvts22"> или среднюю кнопку мыши, чтобы остановить эмулятор.</span></p>
<p class="rvps10"><span class="rvts22">Во время эмуляции содержимое Piano Roll заполняется информацией о пройденных кадрах. Каждая строка Списка Piano Roll отвечает за один кадр. Порядковый номер этого кадра указан в начале каждой строки, нумерация идёт сверху вниз. Когда экранных размеров не хватает для отображения всех кадров мувика, у Списка появляется вертикальный скроллбар.</span></p>
<p class="rvps10"><span class="rvts22">По цвету каждой строки можно узнать информацию о соответствующем кадре игрового процесса:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Бледные (почти белые) строки означают, что эти кадры мувика не содержатся в Гринзоне. Обычно это значит, что эмулятор ещё не доходил в игре до данных кадров мувика и ничего не знает о происходящем в игре на этих кадрах. Например, если бы вы загрузите в Тасэдитор готовый мувик, в Piano Roll будут сразу отображаться все кадры этого мувика, но до запуска проигрывания они будут белёсыми. На верхней картинке эти строки начинаются с кадра 24, потому что Гринзона заканчивается на кадре 23.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Зелёные и красные строки означают, что эти кадры содержатся в Гринзоне, эмулятор уже проиграл эту часть мувика, и вы уже видели на экране FCEUX, что именно происходит в игре в этих кадрах. Красным цветом отмечены кадры с лагом, в остальном же разницы между красными и зелёными строками нет.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Голубая строка (на картинке это 18-й кадр) показывает текущий кадр эмуляции. События этого кадра отображаются на экране FCEUX в данный момент времени. Эта строка всегда в единственном экземпляре. В дальнейшем эту строчку мы будем называть </span><span class="rvts26">Курсор Проигрывателя</span><span class="rvts22"> (Playback cursor). Во время паузы этот курсор стоит на одном кадре, а когда игра эмулируется, курсор бежит вниз, оставляя за собой след из зелёных и красных кадров Гринзоны. Вы можете ставить Курсор Проигрывателя на любой кадр мувика, чтобы узнать события игры в этом кадре. Для этого щёлкните левой кнопкой мыши по желаемой строчке в самом левом столбце Piano Roll (по которому перемещается голубая треугольная стрелка) голубая стрелка перепрыгнет на эту строку вместе с Курсором Проигрывателя, а содержимое экрана FCEUX обновится, отобразив состояние игры на этом кадре. Если теперь не отпускать левую кнопку мыши, можно свободно перетаскивать голубой курсор вверх и вниз.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Синяя строка выделенный участок мувика. Цвет выделения может быть и другим, это зависит от ваших настроек Windows (от выбранной Визуальной темы). Строки Piano Roll выделяются при щелчках по ним левой кнопкой мыши. На картинке показано выделение 28-го кадра, но при необходимости можно выделить любой другой, и даже несколько строк одновременно. Для выделения региона нужно щёлкнуть по номеру кадра и, не отпуская кнопку, переместить мышь вверх или вниз, растягивая Выделение как угодно. </span><span class="rvts37">Замечание:</span><span class="rvts22"> строки Piano Roll выделяются не только при щелчках по номерам кадров, но также при щелчках по </span><span class="rvts22">Ввод</span><span class="rvts22">у (то есть по любому столбцу справа от колонки с номерами кадров). В дальнейшем мы будем называть все синие строки </span><span class="rvts26">Выделением</span><span class="rvts22"> (Selection), а в случае, когда выделена только одна строчка, будем называть её </span><span class="rvts26">Курсором Выделения</span><span class="rvts22"> (Selection cursor). В отличие от Курсора Проигрывателя, Курсор Выделения не привязан к состоянию эмулируемой игры. Чтобы полностью убрать Выделение, можно щёлкнуть правой кнопкой мыши по номеру выделенного кадра и в появившемся контекстном меню выбрать пункт "Deselect". Впрочем, обычно нет нужды убирать оставшееся от прошлой операции Выделение, так как при следующей операции над мувиком оно всё равно появится в новом месте.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Фиолетовая строка появляется на краткий миг при использовании Отката (Undo). Таким образом программа показывает конкретное место отменённых изменений. Большое удобство Тасэдитора состоит в том, что абсолютно любое изменение мувика можно откатывать с помощью стандартной комбинации клавиш </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">, поэтому не бойтесь экспериментировать.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Бледные (почти белые) строки означают, что эти кадры мувика не содержатся в Гринзоне. Обычно это значит, что эмулятор ещё не доходил в игре до данных кадров мувика и ничего не знает о происходящем в игре на этих кадрах. Например, если бы вы загрузите в Тасэдитор готовый мувик, в Piano Roll будут сразу отображаться все кадры этого мувика, но до запуска проигрывания они будут белёсыми. На верхней картинке эти строки начинаются с кадра 24, потому что Гринзона заканчивается на кадре 23.</span></li>
<li class="rvps10"><span class="rvts22">Зелёные и красные строки означают, что эти кадры содержатся в Гринзоне, эмулятор уже проиграл эту часть мувика, и вы уже видели на экране FCEUX, что именно происходит в игре в этих кадрах. Красным цветом отмечены кадры с лагом, в остальном же разницы между красными и зелёными строками нет.</span></li>
<li class="rvps10"><span class="rvts22">Голубая строка (на картинке это 18-й кадр) показывает текущий кадр эмуляции. События этого кадра отображаются на экране FCEUX в данный момент времени. Эта строка всегда в единственном экземпляре. В дальнейшем эту строчку мы будем называть </span><span class="rvts26">Курсор Проигрывателя</span><span class="rvts22"> (Playback cursor). Во время паузы этот курсор стоит на одном кадре, а когда игра эмулируется, курсор бежит вниз, оставляя за собой след из зелёных и красных кадров Гринзоны. Вы можете ставить Курсор Проигрывателя на любой кадр мувика, чтобы узнать события игры в этом кадре. Для этого щёлкните левой кнопкой мыши по желаемой строчке в самом левом столбце Piano Roll (по которому перемещается голубая треугольная стрелка) голубая стрелка перепрыгнет на эту строку вместе с Курсором Проигрывателя, а содержимое экрана FCEUX обновится, отобразив состояние игры на этом кадре. Если теперь не отпускать левую кнопку мыши, можно свободно перетаскивать голубой курсор вверх и вниз.</span></li>
<li class="rvps10"><span class="rvts22">Синяя строка выделенный участок мувика. Цвет выделения может быть и другим, это зависит от ваших настроек Windows (от выбранной Визуальной темы). Строки Piano Roll выделяются при щелчках по ним левой кнопкой мыши. На картинке показано выделение 28-го кадра, но при необходимости можно выделить любой другой, и даже несколько строк одновременно. Для выделения региона нужно щёлкнуть по номеру кадра и, не отпуская кнопку, переместить мышь вверх или вниз, растягивая Выделение как угодно. </span><span class="rvts37">Замечание:</span><span class="rvts22"> строки Piano Roll выделяются не только при щелчках по номерам кадров, но также при щелчках по </span><span class="rvts22">Ввод</span><span class="rvts22">у (то есть по любому столбцу справа от колонки с номерами кадров). В дальнейшем мы будем называть все синие строки </span><span class="rvts26">Выделением</span><span class="rvts22"> (Selection), а в случае, когда выделена только одна строчка, будем называть её </span><span class="rvts26">Курсором Выделения</span><span class="rvts22"> (Selection cursor). В отличие от Курсора Проигрывателя, Курсор Выделения не привязан к состоянию эмулируемой игры. Чтобы полностью убрать Выделение, можно щёлкнуть правой кнопкой мыши по номеру выделенного кадра и в появившемся контекстном меню выбрать пункт "Deselect". Впрочем, обычно нет нужды убирать оставшееся от прошлой операции Выделение, так как при следующей операции над мувиком оно всё равно появится в новом месте.</span></li>
<li class="rvps10"><span class="rvts22">Фиолетовая строка появляется на краткий миг при использовании Отката (Undo). Таким образом программа показывает конкретное место отменённых изменений. Большое удобство Тасэдитора состоит в том, что абсолютно любое изменение мувика можно откатывать с помощью стандартной комбинации клавиш </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">, поэтому не бойтесь экспериментировать.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Чтобы добавлять и изменять </span><span class="rvts22">Ввод</span><span class="rvts22"> мувика, щёлкайте мышкой по клеткам в столбцах Piano Roll, находящихся правее столбика с номерами кадров. Если щёлкнуть по пустой клетке, то на ней появится символ, соответствующий кнопке реального джойстика эмулируемой приставки (NES).</span></p>
<div class="rvps21"><div align="center"><table width="600" border="0" cellpadding="6" cellspacing="0" style="border-width: 0px;">
<div class="rvps21"><table width="600" border="0" cellpadding="6" cellspacing="0" style="border-width: 0px;">
<tr valign="middle">
<td width="586" height="14"><p class="rvps15"><span class="rvts26">A</span><span class="rvts22"> кнопка </span><span class="rvts32">A</span></p>
<td style="width: 586px; height: 14px;"><p class="rvps15"><span class="rvts26">A</span><span class="rvts22"> кнопка </span><span class="rvts32">A</span></p>
<p class="rvps15"><span class="rvts26">B</span><span class="rvts22"> кнопка </span><span class="rvts32">B</span></p>
<p class="rvps15"><span class="rvts26">S</span><span class="rvts22"> кнопка </span><span class="rvts32">Select</span></p>
<p class="rvps15"><span class="rvts26">T</span><span class="rvts22"> кнопка </span><span class="rvts32">Start</span></p>
@ -83,33 +80,33 @@
<p class="rvps15"><span class="rvts26">L</span><span class="rvts22"> </span><span class="rvts22">крестовина</span><span class="rvts22"> </span><span class="rvts32">Влево</span></p>
<p class="rvps15"><span class="rvts26">R</span><span class="rvts22"> </span><span class="rvts22">крестовина</span><span class="rvts22"> </span><span class="rvts32">Вправо</span></p>
</td>
<td width="258" height="178"><p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/NES-controller.png"></p>
<td style="width: 258px; height: 178px;"><p class="rvps5"><img alt="" style="padding : 1px;" src="lib/NES-controller.png"/></p>
</td>
</tr>
</table>
</div></div>
</div>
<p class="rvps10"><span class="rvts22">Если щёлкнуть по уже заполненной клетке, то она очистится, и соответствующая кнопка будет считаться отпущенной на этом кадре. Других состояний у кнопок нет только эти два: нажата/отпущена.</span></p>
<p class="rvps10"><span class="rvts22">Если вам непривычно соотносить эти 8 символов с кнопками реального джойстика, попробуйте просто нажимать в Тасэдиторе клавиши, настроенные в эмуляторе на джойстик первого игрока. Во время нажатия кнопок будут загораться зелёным светом соответствующие буквы в Заголовке Piano Roll, и вы легко ассоциируете столбцы Piano Roll с кнопками геймпада.</span></p>
<p class="rvps10"><span class="rvts22">Основная часть работы в Тасэдиторе проходит именно за этим занятием установкой и снятием нажатий кнопок на разных кадрах. Тем самым вы формируете </span><span class="rvts37">последовательность состояний кнопок</span><span class="rvts22">, которая передаётся в игру и отражается на действиях управляемого персонажа. Например, если в Super Mario Bros посреди игрового процесса поставить в одну клетку Piano Roll один символ A, Марио сделает маленький прыжок (произошло короткое нажатие кнопки </span><span class="rvts32">A</span><span class="rvts22">). Если же поставить несколько символов A подряд (в столбик), Марио сделает большой прыжок (длительное зажатие кнопки </span><span class="rvts32">A</span><span class="rvts22">).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Когда вы изменяете </span><span class="rvts22">Ввод</span><span class="rvts22"> выше строки, в которой стоит Курсор Проигрывателя, голубой курсор отступает назад (назад по мувику = вверх по Piano Roll), при этом очищая часть Гринзоны. Это происходит в связи с тем, что ваши изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а ведут к изменениям хода игровых событий, так что ранее запомненное в Гринзоне состояние игры становится не актуальным. После изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а вам необходимо будет снова проиграть несколько кадров то есть либо снять на время паузу эмулятора, либо схватить Курсор Проигрывателя за треугольную стрелку и перетащить вниз до интересующего кадра. При этом вы увидите на экране FCEUX результаты модификации </span><span class="rvts22">Ввод</span><span class="rvts22">а, а заодно восстановите часть Гринзоны.</span></p>
<p class="rvps10"><span class="rvts22">Кроме того, вы ещё можете зажать </span><span class="rvts26">правую кнопку мыши</span><span class="rvts22"> и покрутить колесо мыши вниз, чтобы вручную довести Курсор Проигрывателя к нужному кадру. Управление колесом является самым отзывчивым способом навигации по малому участку </span><span class="rvts22">Ввод</span><span class="rvts22">а. Задействуется только одна рука, и при этом курсор мыши может находиться где угодно, например, оставаться над клетками редактируемого Ввода. Попробуйте, это очень эффективный способ перемотки назад и вперёд. Удобно зажимать средним пальцем правую кнопку мыши, а указательным вращать колесо, не отрывая взгляд от экрана FCEUX.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Помимо одиночных щелчков по клеткам Piano Roll можно также менять состояние кнопок сразу в нескольких кадрах. Например, если вы хотите, чтобы кнопка </span><span class="rvts32">R</span><span class="rvts22"> (</span><span class="rvts32">Вправо</span><span class="rvts22">) была зажата на протяжении 20 кадров подряд, не обязательно 20 раз щёлкать по соответствующим клеткам Piano Roll сверху вниз. Достаточно щёлкнуть по начальному кадру избранного участка и, не отпуская левую кнопку мыши, переместить курсор мыши вверх или вниз при движении курсор мыши будет оставлять за собой след, и таким образом вы нарисуете вертикальный ряд нажатий. Аналогично можно стереть несколько нажатий, щёлкнув по первому удаляемому символу и переместив "ластик" выше или ниже. Стирание начинается при щелчке по заполненной клетке Ввода, а при щелчке по пустой клетке начинается рисование.</span></p>
<p class="rvps10"><span class="rvts22">Кроме этого, можно также зажать клавишу </span><span class="rvts34">Shift</span><span class="rvts22"> перед щелчком по </span><span class="rvts22">Ввод</span><span class="rvts22">у, тогда влияние щелчка распространится не только на ту клетку, по которой вы щёлкнули, но и на все клетки в этом столбце, начиная с Курсора Выделения. Таким образом, вы можете сначала сделать обычный щелчок по начальной клетке запланированного ряда нажатий, а потом зажать </span><span class="rvts34">Shift</span><span class="rvts22"> и сделать щелчок по конечной клетке появится запланированный ряд нажатий.</span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/piano-roll-header-l.png"></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/piano-roll-header-l.png"/></p>
<p class="rvps10"><span class="rvts22">Существует ещё один способ массовой установки и снятия нажатий. Выделите несколько отдельных строк, например, пятую строку, десятую и двадцатую. Затем щёлкните по букве </span><span class="rvts26">L</span><span class="rvts22"> в Заголовке Piano Roll. Если на выделенных кадрах не было нажатий кнопки </span><span class="rvts32">L</span><span class="rvts22"> (</span><span class="rvts32">Влево</span><span class="rvts22">), то они там появятся. Если же во всех выделенных кадрах кнопка </span><span class="rvts32">L</span><span class="rvts22"> уже проставлена, щелчок по заголовку очистит эти нажатия.</span></p>
<p class="rvps10"><span class="rvts22">Позже вы освоите ещё несколько методов редактирования </span><span class="rvts22">Ввод</span><span class="rvts22">а, но это основные из них. Поначалу может показаться, что слишком неестественно рисовать кнопочные нажатия мышкой, вместо того, чтобы привычно симулировать их нажатиями клавиш на клавиатуре. Однако это чувство дискомфорта вскоре пройдёт, если вы посвятите Тасэдитору хотя бы несколько дней.</span></p>
<p class="rvps10"><span class="rvts22">Особенность ТАСинга всегда была в том, что на первоначальный ввод кнопок уходит крайне мало времени, зато почти всё время уходит на последующие микро-модификации этого </span><span class="rvts22">Ввод</span><span class="rvts22">а где-то требуется удлинить время зажатия кнопки, где-то переставить нажатие кнопки на кадр раньше, где-то поменять </span><span class="rvts32">U</span><span class="rvts22"> и </span><span class="rvts32">D</span><span class="rvts22"> местами, и так далее. Преимущество Тасэдитора проявляется именно в процессе оптимизации мувика, а к рисованию </span><span class="rvts22">Ввод</span><span class="rvts22">а мышкой нужно просто привыкнуть. Вы наверняка освоитесь с этим уже к концу чтения данного Курса.</span></p>
<p class="rvps10"><a name="HotChanges"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При установке нажатий вы должны были заметить, что проставляемые вами буквы различаются по цвету, более того, по мере добавления новых кнопок старые буквы меняют свой цвет от оранжевого к фиолетовому и синему, пока не становятся стандартно-чёрными. Это экспериментальная фича Тасэдитора, созданная для повышения интуитивности ввода. </span><span class="rvts22">Фича называется "Горячие Правки" (Hot Changes). Когда вы вносите изменения в </span><span class="rvts22">Ввод</span><span class="rvts22"> мувика, самые последние нажатия отображаются наиболее горячим цветом (оранжевым). Если после этого вы производите изменения в другом месте мувика (скажем, меняете другую кнопку на этом же кадре или ставите нажатие на другом кадре), то предыдущая правка немного остывает, становясь менее яркой.</span></p>
<p class="rvps10"><span class="rvts22">Таким образом, вы всегда можете по беглому взгляду на Piano Roll догадаться, какие нажатия были установлены недавно, а какие давно. Кроме того, вы сможете увидеть, какие нажатия были недавно удалены (на их месте остаётся чёрточка).</span></p>
<p class="rvps10"><span class="rvts22">Если эта фича вам не нравится, вы сможете её потом отключить, однако в рамках учебного курса мы будем подразумевать, что "горячие правки" у вас подключены.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Узкая колонка перед колонкой с номерами кадров служит не только для перетаскивания Курсора Проигрывателя. В ней ещё отображаются информационные иконки. Г</span><span class="rvts22">олубая стрелка в этом столбце всегда указывает на кадр, где находится Курсор Проигрывателя. Зелёная стрелка показывает место, где находился Курсор Проигрывателя до того, как над ним изменился </span><span class="rvts22">Ввод.</span><span class="rvts22"> А ц</span><span class="rvts22">ифровыми карточками в этой колонке обозначаются Закладки, о них будет рассказано чуть позже.</span></p>
<p class="rvps10"><a name="markers"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Жёлтые прямоугольники под номером некоторых кадров (на картинке это номера 12 и 23) это </span><span class="rvts26">Маркеры</span><span class="rvts22">. Помимо жёлтого цвета о наличии Маркера на этих кадрах говорит и широкий шрифт, которым напечатан номер кадра.</span></p>
<p class="rvps10"><span class="rvts22">Маркеры предназначены для упрощения навигации по мувику, а также для самоорганизации ТАСера. Вы сами выбираете принцип их использования: можете ставить их на начало каждого уровня игры, а можете ставить и на каждый прыжок, выстрел или другое игровое событие, которое имеет свой кадр начала и кадр окончания. С помощью установки Маркеров вы логически разбиваете мувик на блоки, и потом вы сможете мгновенно перемещаться по мувику не только от кадра к кадру, но и от блока к блоку.</span></p>
<p class="rvps10"><span class="rvts22">Структуризация помогает держать в голове более чёткий образ всего мувика. Такой мысленный образ формируется в голове у каждого ТАСера, но обычно он весьма расплывчатый то есть ТАСер помнит примерную последовательность действий, но не помнит детали (зачастую это и не требуется). Когда ТАСер выключает эмулятор, образ начинает постепенно забываться, становится всё более расплывчатым. Поэтому при следующем включении обычно требуется просмотреть текущий мувик с начала, чтобы освежить воспоминания. Иногда это требуется делать даже чаще в зависимости от степени расплывчатости образа. Поэтому рекомендуется закреплять этот образ расстановкой реальных Маркеров.</span></p>
@ -117,32 +114,31 @@
<p class="rvps10"><span class="rvts26">1 способ. </span><span class="rvts22">Сделать двойной щелчок левой кнопкой мыши по номеру кадра. Если на этом кадре не было Маркера, он там появится. Если Маркер уже есть, с зажатой левой кнопкой можно перетаскивать этот Маркер куда угодно, например, переместить его на соседний кадр или вообще выбросить за пределы Piano Roll, тем самым удалив его.</span></p>
<p class="rvps10"><span class="rvts26">2 способ. </span><span class="rvts22">Выделить с помощью щелчков по номерам кадров одну или несколько строк в Piano Roll, а затем щёлкнуть по Заголовку Piano Roll на слово "Frame#". Если среди выделенных строк были строки без Маркеров, то на них будут установлены Маркеры. Если же все выделенные строки содержат Маркеры, все Маркеры с них будут удалены. Таким образом можно массово удалять или устанавливать Маркеры, точно так же, как </span><span class="rvts22">Ввод</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts26">3 способ. </span><span class="rvts22">Выделить один или несколько кадров </span><span class="rvts22">в Piano Roll, затем щ</span><span class="rvts22">ёлкнуть правой кнопкой по любому выделенному номеру кадра и в появившемся меню выбрать пункт "Set Markers" (Установить Маркеры) или "Remove Markers" (Удалить Маркеры). Этот наименее удобный способ, вместо него рекомендуется использовать первый или второй.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Все операции с Маркерами можно откатывать (</span><span class="rvts34">Ctrl + Z</span><span class="rvts22">) точно так же, как и операции с </span><span class="rvts22">Ввод</span><span class="rvts22">ом.</span></p>
<p class="rvps10"><span class="rvts22">Маркеры автоматически нумеруются Тасэдитором по порядку их расположения в мувике сверху вниз от первого до последнего. </span><span class="rvts22">В верхнем левом углу окна Тасэдитора вы можете увидеть номер Маркера, под которым в данный момент находится Курсор Проигрывателя (надпись "Marker </span><span class="rvts31">N</span><span class="rvts22">" голубого цвета). Эта надпись не только информирует, но и является кнопкой для автоскроллинга. Если вы оставили Курсор Проигрывателя в одной части мувика, а потом проскроллировали Piano Roll подальше от этого курсора, вы всегда можете мгновенно вернуться к голубому курсору, щёлкнув по голубой надписи "Marker" (или быстро нажав клавишу </span><span class="rvts34">Shift</span><span class="rvts22"> дважды). Эта особенность вам неоднократно понадобится в процессе редактирования больших мувиков.</span></p>
<p class="rvps10"><span class="rvts22">Точно такая же надпись-кнопка есть в нижнем левом углу Тасэдитора. Надпись "Marker </span><span class="rvts31">N</span><span class="rvts22">" синего цвета (такого же цвета, как и Курсор Выделения) показывает номер Маркера, под которым находится Выделение. При щелчке по этой надписи Piano Roll автоматически прыгает к Выделению. Эта кнопка пригодится вам так же часто, как верхняя. Её клавиатурный аналог двойное нажатие клавиши </span><span class="rvts34">Ctrl</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Легко запомнить, что клавиша </span><span class="rvts34">Shift</span><span class="rvts22"> часто используется для управления Курсором Проигрывателя, а клавиша </span><span class="rvts34">Ctrl</span><span class="rvts22"> для Курсора Выделения.</span></p>
<p class="rvps10"><span class="rvts22">Когда Курсор Проигрывателя и Курсор Выделения находятся под одним и тем же Маркером, номера вверху и внизу будут, естественно, совпадать.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Маркеры не только разделяют мувик на логические блоки, но и содержат текстовые записи (комментарии и рабочие заметки). Текст </span><span class="rvts26">Заметки</span><span class="rvts22"> Маркера отображается сразу же после его номера. В верхнем текстовом поле отображается Заметка Маркера, под которым в данный момент находится Курсор Проигрывателя, а в нижнем текстовом поле отображается Заметка Маркера, под которым находится Курсор Выделения.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию каждый новый Маркер содержит пустую Заметку. При создании Маркера двойным щелчком нижнее текстовое поле автоматически становится активным, так как Курсор Выделения указывает на кадр с только что созданным Маркером. Поэтому вы сразу же можете напечатать текст Заметки для этого Маркера, а затем продолжить работу с мувиком, </span><span class="rvts22">и</span><span class="rvts22">зменения текста сохранятся автоматически</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Отредактировать Заметку старого Маркера можно любым из следующих способов:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">установить Курсор Выделения на этот Маркер и щёлкнуть по нижнему текстовому полю, чтобы оно активировалось</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">просто дважды щёлкнуть по уже имеющемуся Маркеру, нижнее поле активируется автоматически</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">установить Курсор Проигрывателя на этот Маркер и щёлкнуть по верхнему текстовому полю, чтобы оно активировалось</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">установить Курсор Выделения на этот Маркер и щёлкнуть по нижнему текстовому полю, чтобы оно активировалось</span></li>
<li class="rvps10"><span class="rvts22">просто дважды щёлкнуть по уже имеющемуся Маркеру, нижнее поле активируется автоматически</span></li>
<li class="rvps10"><span class="rvts22">установить Курсор Проигрывателя на этот Маркер и щёлкнуть по верхнему текстовому полю, чтобы оно активировалось</span></li>
</ul>
<p class="rvps10"><span class="rvts22">Для окончания редактирования нажмите </span><span class="rvts26">Enter</span><span class="rvts22"> или просто щёлкните мышкой по любому постороннему элементу окна TAS Editor. Если вы передумали, нажмите </span><span class="rvts26">Esc</span><span class="rvts22"> для отмены редактирования. Все возможности редактирования Заметок перечислены в </span><a class="rvts38" href="Controls.html#notes">Справочнике</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется вводить хотя бы односложную Заметку, чтобы не забыть, зачем здесь был поставлен этот Маркер. Это не отнимет много времени, если устанавливать Маркеры двойным щелчком и вводить короткие сообщения. Зачастую даже не придётся отрывать руку от мыши.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps17"><a class="rvts24" href="Toolbox.html">Описание Панели инструментов</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>5. Настройка программы</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,34 +53,34 @@
<div id="topic_content">
<p><span class="rvts20">Настройка программы</span></p>
<p class="rvps2"><span class="rvts39"><br></span></p>
<p class="rvps2"><span class="rvts39"><br></span></p>
<p class="rvps2"><span class="rvts39"><br/></span></p>
<p class="rvps2"><span class="rvts39"><br/></span></p>
<p class="rvps10"><span class="rvts22">Перед тем, как начинать серьёзный ТАСинг, настройте Тасэдитор согласно своим предпочтениям.</span></p>
<p class="rvps10"><span class="rvts22">В этой главе перечислены все настройки инструмента, а также настройки эмулятора FCEUX, которые влияют на работу в Тасэдиторе.</span></p>
<p class="rvps10"><span class="rvts22">Все настройки хранятся в файле </span><span class="rvts31">fceux.cfg</span><span class="rvts22"> в папке эмулятора. Если вы удалите этот файл, при следующем запуске FCEUX настройки сбросятся на значения по умолчанию.</span></p>
<div class="rvps10"><table width="100%" border="0" cellpadding="4" cellspacing="0" style="border-width: 0px;">
<tr valign="top">
<td width="847"><p class="rvps10"><span class="rvts22">Для начала, если вы уже прочитали </span><a class="rvts28" href="ProgramInterface.html">главу 2</a><span class="rvts22"> и поняли назначение всех элементов интерфейса, стоит отключить всплывающие подсказки (предназначенные исключительно для новичка). </span><span class="rvts22">Для этого зайдите в пункт меню Тасэдитора "Help" (Справка) и уберите галочку с подпункта "Enable Tooltips". Можете предварительно прочитать все подсказки, наводя курсор мыши на различные элементы окна Тасэдитора, чтобы закрепить уже имеющиеся знания об интерфейсе программы.</span></p>
<td style="width: 847px;"><p class="rvps10"><span class="rvts22">Для начала, если вы уже прочитали </span><a class="rvts28" href="ProgramInterface.html">главу 2</a><span class="rvts22"> и поняли назначение всех элементов интерфейса, стоит отключить всплывающие подсказки (предназначенные исключительно для новичка). </span><span class="rvts22">Для этого зайдите в пункт меню Тасэдитора "Help" (Справка) и уберите галочку с подпункта "Enable Tooltips". Можете предварительно прочитать все подсказки, наводя курсор мыши на различные элементы окна Тасэдитора, чтобы закрепить уже имеющиеся знания об интерфейсе программы.</span></p>
</td>
<td width="148" valign="top"><p class="rvps19"><img border="0" alt hspace="1" vspace="1" src="lib/help-menu.png"></p>
<td valign="top" style="width: 148px;"><p class="rvps19"><img alt="" style="padding : 1px;" src="lib/help-menu.png"/></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><a name="view-menu"></a>
<span class="rvts22">Теперь откройте пункт "View" (Вид).</span></p>
<p class="rvps10"><img align="left" border="0" alt hspace="6" vspace="6" src="lib/view-menu.png"></p>
<p class="rvps10"><img align="left" alt="" style="padding : 6px;" src="lib/view-menu.png"/></p>
<p class="rvps10"><span class="rvts22">Подпункт "Find Note window" вызывает окно поиска текста в Заметках Маркеров. Эта функция будет полезной, если вы документируете свой мувик с помощью Заметок.</span></p>
<p class="rvps10"><span class="rvts22">Далее в меню "View" идут галочки настроек внешнего вида программы. Чтобы не делать настройки наугад, прямо сейчас создайте пробный проект (просто открыв Тасэдитор) и экспериментируйте с ним.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="DisplayBranchScreenshots"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">View -&gt; Display Branch Screenshots</span></p>
<p class="rvps10"><span class="rvts22">Отображает всплывающие скриншоты (снимки экрана) при наведении курсором мыши на Закладки. С помощью скриншота вы можете быстро восстановить в уме события, сохранённые в мувике данной Закладки. Таким образом облегчается поиск нужного ответвления не обязательно загружать Закладку, чтобы иметь представление о её содержимом. Переводя курсор мыши с одной Закладки на другую, можно очень быстро сравнивать альтернативные стратегии, не загружая ответвления.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию эта опция включена. Если отключить, скриншоты не будут появляться при наведении.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется включить эту функцию, если вас не раздражают всплывающие картинки, частично загораживающие Piano Roll.</span></p>
<p class="rvps10"><a name="DisplayBranchDescriptions"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">View -&gt; Display Branch Descriptions</span></p>
<p class="rvps10"><span class="rvts22">Отображает всплывающие текстовые описания при наведении курсором мыши на Закладки. С помощью этого текста, как и с помощью скриншота, вы можете ещё до загрузки Закладки понять, требуется ли загружать данное ответвление.</span></p>
<p class="rvps10"><span class="rvts22">Текст описания берётся из Заметки Маркера, под которым находится кадр данной Закладки. Сам Маркер может быть уже давно удалён из текущего мувика, но если Закладка была создана, когда Маркер ещё существовал, то значит, она содержит в себе ответвление мувика, где Маркер существует. И при возврате во времени на эту Закладку мувик восстановится на состояние, где Маркер существует.</span></p>
@ -88,37 +88,37 @@
<p class="rvps10"><span class="rvts22">По умолчанию эта опция включена. Если отключить, текстовые описания не будут появляться при наведении.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется включить эту функцию, если вас не раздражают всплывающие текстовые поля.</span></p>
<p class="rvps10"><a name="EnableHotChanges"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">View -&gt; Enable Hot Changes</span></p>
<p class="rvps10"><span class="rvts22">Включает и отключает функцию Горячих Правок.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию эта опция включена. Если отключить, то символы установленных нажатий кнопок на Piano Roll будут отображаться только стандартным чёрным цветом. Если включить, то у каждого символа будет своя степень "горячести", зависящая от того, как давно была изменена соответствующая клетка в Piano Roll. Более горячими являются символы, установленные недавно. Они отображаются более ярким оттенком красного цвета. По мере уменьшения горячести цвет символа постепенно темнеет и переходит в стандартный чёрный.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps18"><img border="0" alt hspace="1" vspace="1" src="lib/hotchanges-colors.png"></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps18"><img alt="" style="padding : 1px;" src="lib/hotchanges-colors.png"/></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Всего Тасэдитор поддерживает 15 оттенков горячести + нулевой чёрный. Когда вы меняете состояние ячейки </span><span class="rvts22">Ввод</span><span class="rvts22">а, ей присваивается максимальное значение горячести (15), а все ячейки, изменённые перед этим, остывают на 1 единицу. Таким образом, по одному взгляду на Piano Roll сразу понятно, какие изменения были произведены только что, какие перед этим, какие недавно, а какие давно.</span></p>
<p class="rvps10"><span class="rvts22">Благодаря Горячим Правкам можно видеть недавно удалённые нажатия на их месте вместо пустой клетки отображается чёрточка соответствующего цвета. По мере редактирования другого </span><span class="rvts22">Ввод</span><span class="rvts22">а цвет этой чёрточки будет остывать, и после 15 посторонних правок чёрточка окончательно исчезнет.</span></p>
<p class="rvps10"><span class="rvts22">Такие же чёрточки будут показывать место вставки новых кадров посреди мувика, чтобы пользователю было проще ориентироваться в </span><span class="rvts22">Ввод</span><span class="rvts22">е.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется включить эту функцию, чтобы повысить удобство работы в Тасэдиторе. Теоретически, даже скорость работы должна повыситься, так как вам придётся меньше вспоминать, какое действие было совершено полминуты назад. Конечно, даже без Горячих Правок можно легко восстановить в уме цепочку прошедших событий с помощью отката Истории (несколько нажатий </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">), а затем вернуть мувик обратно (столько же нажатий </span><span class="rvts34">Ctrl + Y</span><span class="rvts22">). Но в этом случае возможно нежелательное усечение Гринзоны из-за изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а. Так что лучше просто оставить Горячие Правки включенными.</span></p>
<p class="rvps10"><span class="rvts22">Единственным минусом этой функции является тот факт, что карта Горячих Правок сохраняется в Журнале Истории и в FM3-файле проекта, увеличивая занимаемый объём памяти.</span></p>
<p class="rvps10"><a name="Followundocontext"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">View -&gt; Follow undo context</span></p>
<p class="rvps10"><span class="rvts22">При откатах Истории (undo) эта функция автоматически скроллирует Piano Roll к месту совершения изменений. На кадре, где произведено изменение, на короткое время появляется фиолетовая указка, чтобы акцентировать внимание пользователя на произведённых изменениях мувика.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию эта опция включена. Если отключить, то Piano Roll не будет самостоятельно скроллироваться к месту изменений.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется включить эту функцию, чтобы было легче отслеживать глазами отменяемые правки. Обычно после отката требуется сразу же внести подобные правки на том же кадре или рядом с ним, поэтому автоматический скроллинг в большинстве случаев полезен.</span></p>
<p class="rvps10"><a name="FollowMarkerNotecontext"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">View -&gt; Follow Marker Note context</span></p>
<p class="rvps10"><span class="rvts22">При редактировании текста Заметки эта функция автоматически скроллирует Piano Roll к Маркеру этой Заметки. Например, когда вы щёлкаете по верхнему текстовому полю, чтобы начать редактирование Заметки Маркера над Курсором Проигрывателя, Piano Roll перескакивает на этот Маркер, чтобы вы могли видеть его контекст (соседние Маркеры и </span><span class="rvts22">Ввод</span><span class="rvts22">). А при щелчке по нижнему текстовом полю (Заметка Маркера над Курсором Выделения) Piano Roll скроллируется к Маркеру над Курсором Выделения. Таким образом вы можете увидеть окружение нужного Маркера, отредактировать текст его Заметки, а потом вернуться к редактированию </span><span class="rvts22">Ввод</span><span class="rvts22">а.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию эта опция включена. Если отключить, то Piano Roll не будет самостоятельно скроллироваться к Маркерам при редактировании их Заметок.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется включить эту функцию, чтобы лучше ориентироваться в Маркерах.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">На этом настройка внешнего вида программы завершена. При дальнейшей работе вам вряд ли понадобится перенастраивать эти галочки.</span></p>
<p class="rvps10"><img align="left" border="0" alt hspace="6" vspace="6" src="lib/config-menu.png"></p>
<p class="rvps10"><img align="left" alt="" style="padding : 6px;" src="lib/config-menu.png"/></p>
<p class="rvps10"><span class="rvts22">Теперь откройте пункт меню "Config" (Конфигурация). Здесь уже находятся опции, существенно влияющие на ход работы в Тасэдиторе. Перенастройка некоторых из них вам может понадобиться неоднократно.</span></p>
<p class="rvps10"><a name="SetGreenzonecapacity"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/greenzone-capacity.png"></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/greenzone-capacity.png"/></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Set Greenzone capacity</span></p>
<p class="rvps10"><span class="rvts22">Определяет максимальный объём Гринзоны. Гринзона используется для упрощения навигации Курсором Проигрывателя, позволяя ТАСеру мгновенно возвращаться на любой ранее проигранный кадр мувика. Естественно, для запоминания информации Гринзоне требуется много оперативной памяти, а также много места на диске для сохранения FM3-проекта.</span></p>
<p class="rvps10"><span class="rvts22">Чем больше зелёных и красных кадров в Piano Roll, тем больше памяти занимает Гринзона. Для большинства NES-игр на 1 кадр уходит примерно по 10 килобайт. Проекты больших мувиков могут занимать несколько сотен мегабайт. Это сказывается на времени загрузки/сохранения проекта.</span></p>
@ -132,30 +132,30 @@
<p class="rvps10"><span class="rvts22">По умолчанию объём Гринзоны составляет 10000 кадров. Этого должно быть достаточно для большинства ТАСов. При желании вы можете увеличить или уменьшить это значение. В реальной работе рекомендуется использовать значение не ниже 1000, так как дальнейшая экономия будет незначительной. Желательно ставить такое значение, чтобы в окрестностях оптимизируемого участка Гринзона всегда оставалась без пустот.</span></p>
<p class="rvps10"><span class="rvts22">Минимальное значение этого параметра равно единице (исключительно для тестов, ТАСить при таком значении просто невыносимо), максимальное значение 50000 кадров.</span></p>
<p class="rvps10"><a name="Setmaxundolevels"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Set max undo levels</span></p>
<p class="rvps10"><span class="rvts22">Определяет количество уровней отката изменений. Столько раз вы сможете нажать </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">, возвращая проект на предыдущие состояния. И столько же строк (плюс одна текущая) содержится в Журнале Истории.</span></p>
<p class="rvps10"><span class="rvts22">Журналу Истории требуется много оперативной памяти и немного места на диске для сохранения FM3-проекта. Весь Журнал сохраняется в файле проекта в сжатом виде, сжатие производится постепенно во моменты простоев в работе, незаметно для пользователя. Благодаря этому на время сохранения проекта объём Журнала Истории влияет незначительно.</span></p>
<p class="rvps10"><span class="rvts22">С помощью этой настройки можно регулировать используемый объём памяти. </span><span class="rvts22">По умолчанию установлено 100 уровней отката. Это значит, что вы сможете отменить 100 совершённых с мувиком действий. Это не так уж и много, ведь в реальном ТАСинге действия совершаются очень быстро, а время летит незаметно. Если в вашем компьютере более 2GB оперативной памяти, можете увеличить значение "max undo levels" вплоть до максимально возможного 1000 уровней.</span></p>
<p class="rvps10"><a name="SetAutosaveperiod"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Set Autosave period</span></p>
<p class="rvps10"><span class="rvts22">Определяет, сколько минут несохранённые изменения могут оставаться без присмотра.</span></p>
<p class="rvps10"><span class="rvts22">В Тасэдиторе реализована функция автоматического сохранения проекта на диск. Раньше ТАСерам не требовалось периодически сохранять на диск текущее состояние их ТАСа, так как мувик сохранялся в каждом использованном сэйве. Теперь же имеет смысл время от времени нажимать </span><span class="rvts34">Ctrl + S</span><span class="rvts22">, чтобы сохранить на диск состояние проекта весь </span><span class="rvts22">Ввод</span><span class="rvts22">, Маркеры, Закладки, всю Гринзону, Журнал Истории и т.д. Тогда при последующем открытии FM3-файла в Тасэдиторе вы окажетесь в той же самой обстановке, в которой прервали работу в прошлый раз. Даже Piano Roll будет указывать на тот же самый участок мувика.</span></p>
<p class="rvps10"><span class="rvts22">Так как сохранение проекта может занимать несколько секунд, нет смысла делать это слишком часто. По умолчанию установлено значение "autosave period" в 15 минут. Это означает, что если вы совершили в проекте какие-нибудь существенные изменения (например, изменили </span><span class="rvts22">Ввод</span><span class="rvts22">, и в заголовке окна Тасэдитора появилась звёздочка), а потом в течение 15 минут так и не сохранили проект на диск, Тасэдитор либо напомнит вам об этом, либо запустит сохранение самостоятельно (если установлена галочка "</span><a class="rvts28" href="ProgramCustomization.html#SilentAutosave">Silent autosave</a><span class="rvts22">").</span></p>
<p class="rvps10"><span class="rvts22">Функция автоматического сохранения начинает работать только после того, как проекту присвоено файловое имя на диске.</span></p>
<p class="rvps10"><span class="rvts22">Вы можете отключить эту функцию, установив значение 0. Но делать это не рекомендуется, так как теоретически возможна потеря данных в случае непредвиденного сбоя. Рекомендуется поставить значение 10 минут. Максимально возможное значение этого параметра равно 1440 минут или 24 часа (1 сутки).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Это были числовые настройки Тасэдитора, далее следуют галочки.</span></p>
<p class="rvps10"><a name="SilentAutosave"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Silent Autosave</span></p>
<p class="rvps10"><span class="rvts22">Определяет поведение функции автоматического сохранения проекта.</span></p>
<p class="rvps10"><span class="rvts22">Если галочка установлена, по истечении периода автосохранения Тасэдитор молча сохраняет проект на диск под тем же именем.</span></p>
<p class="rvps10"><span class="rvts22">Если галочка снята, по истечении периода автосохранения Тасэдитор выводит на экран диалог сохранения файла (Save As), где вы можете либо подтвердить сохранение, либо отменить его тогда Тасэдитор подождёт ещё один период, прежде чем напомнить о наличии несохранённых данных.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию галочка установлена. Если вы хотите полностью контролировать ситуацию, например, не допустить сохранение случайных изменений, внесённых при просмотре чужого FM3-проекта, можете снять эту галочку. Но для повышения комфортности ТАСинга рекомендуется её включить.</span></p>
<p class="rvps10"><a name="AutofirePatternskipsLag"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Autofire Pattern skips Lag</span></p>
<p class="rvps10"><span class="rvts22">Учитывает лаг при использовании шаблонов (</span><span class="rvts34">Alt</span><span class="rvts22"> + щелчки по </span><span class="rvts22">Ввод</span><span class="rvts22">у или по Заголовку Piano Roll).</span></p>
<p class="rvps10"><span class="rvts22">Если галочка снята, при использовании шаблона появится последовательность нажатий и отпусканий, в точности соответствующая выбранному шаблону (например, для шаблона "Alternating (1010...)" нажатия будут строго чередоваться с отпусканиями).</span></p>
@ -165,27 +165,27 @@
<p class="rvps10"><span class="rvts22">Если после изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а лаговые кадры появились на других местах посреди шаблона, нужно восстановить выделение на тех же кадрах (</span><span class="rvts34">Ctrl + Q</span><span class="rvts22">) и сделать ещё один </span><span class="rvts34">Alt</span><span class="rvts22"> + щелчок по этой же кнопке в Заголовке Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию эта галочка установлена. Рекомендуется оставить её включенной, так как в большинстве случаев ТАСеру нужно ориентироваться не на визуальное отображение последовательности нажатий в Piano Roll, а на то, как воспринимает </span><span class="rvts22">Ввод сама</span><span class="rvts22"> игра.</span></p>
<p class="rvps10"><a name="DrawInputbydragging"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Draw Input by dragging</span></p>
<p class="rvps10"><span class="rvts22">Позволяет рисовать </span><span class="rvts22">Ввод</span><span class="rvts22">, зажав левую кнопку мыши и перемещая курсор мыши над поверхностью Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию эта функция подключена, и вы можете быстро нарисовать длительное зажатие какой-нибудь кнопки, либо стереть часть </span><span class="rvts22">Ввод</span><span class="rvts22">а ластиком. При щелчке по пустой клетке начинается рисование </span><span class="rvts22">Ввод</span><span class="rvts22">а, при щелчке по заполненной клетке начинается стирание </span><span class="rvts22">Ввод</span><span class="rvts22">а.</span></p>
<p class="rvps10"><span class="rvts22">Рисование/стирание </span><span class="rvts22">Ввод</span><span class="rvts22">а по умолчанию ограничено одним столбцом (чтобы можно было совершать размашистые движения мышью при установке длительных зажатий). Однако, если после начала рисования зажать клавишу </span><span class="rvts34">Shift</span><span class="rvts22">, вы сможете рисовать/стирать </span><span class="rvts22">Ввод</span><span class="rvts22"> по всем колонкам (это не столько практично, сколько весело).</span></p>
<p class="rvps10"><span class="rvts22">Если снять эту галочку, вы сможете устанавливать только отдельные нажатия щелчками по клеткам </span><span class="rvts22">Ввод</span><span class="rvts22">а в Piano Roll, а рисование будет отключено. Это может пригодиться, если у вас дрожат руки, и способ рисования </span><span class="rvts22">Ввод</span><span class="rvts22">а вам не подходит. В остальных случаях рекомендуется включить эту функцию.</span></p>
<p class="rvps10"><a name="CombineconsecutiveRecordings"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Combine consecutive Recordings/Draws</span></p>
<p class="rvps10"><span class="rvts22">Объединяет последовательную Запись </span><span class="rvts22">Ввод</span><span class="rvts22">а в один пункт журнала Истории. А также объединяет в один пункт весь </span><span class="rvts22">Ввод</span><span class="rvts22">, нарисованный одним нажатием кнопки мыши.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию галочка снята. В режиме Recording каждый записанный кадр будет создавать отдельный пункт в Журнале Истории, и вы сможете откатывать изменения (с помощью </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">) для каждого кадра. А при рисовании </span><span class="rvts22">Ввод</span><span class="rvts22">а (нажать левую кнопку мыши и водить курсором мыши по Piano Roll) каждый новый штрих будет создавать новый пункт в Журнале Истории, и вы сможете откатывать штрихи поодиночке.</span></p>
<p class="rvps10"><span class="rvts22">Однако в реальной работе такая точность отката не требуется, так как во время Записи проще вернуться Курсором Проигрывателя на предыдущий кадр (хоткеем </span><span class="rvts27">Rewind one frame</span><span class="rvts22">) и переписать его, чем откатывать изменения и потом всё равно возвращаться на предыдущий кадр для Записи нового </span><span class="rvts22">Ввод</span><span class="rvts22">а. В случае рисования обычно требуется либо откатить весь нарисованный </span><span class="rvts22">Ввод</span><span class="rvts22">, либо просто подтереть часть нарисованного </span><span class="rvts22">Ввод</span><span class="rvts22">а, не прибегая к </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">. Поэтому для экономии места в Журнале Истории рекомендуется включить эту галочку.</span></p>
<p class="rvps10"><a name="Use1PkeysforallsingleRecordings"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Use 1P keys for all single Recordings</span></p>
<p class="rvps10"><span class="rvts22">Позволяет записывать </span><span class="rvts22">Ввод</span><span class="rvts22"> любых джойстиков, пользуясь только кнопками первого джойстика. Эта функция используется в традиционном методе при Записи </span><span class="rvts22">Ввод</span><span class="rvts22">а способом мультитрекинга, когда ТАСер сначала записывает на нужном участке </span><span class="rvts22">Ввод</span><span class="rvts22"> первого игрока (при этом любые случайные нажатия на кнопки второго джойстика игнорируются), а затем </span><span class="rvts22">Ввод</span><span class="rvts22"> второго игрока.</span></p>
<p class="rvps10"><span class="rvts22">Благодаря мультитрекингу ТАСер освобождается от необходимости нажимать на кнопки двух джойстиков одновременно. </span><span class="rvts22">А благодаря опции "</span><span class="rvts26">Use 1P keys for all single Recordings</span><span class="rvts22">" ТАСер может вообще не настраивать второй джойстик, не назначать кнопки второго игрока на отдельные клавиши. Когда галочка установлена, при Записи второго игрока будут использоваться клавиши, назначенные на кнопки первого джойстика.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию галочка включена. Если отключить эту функцию, то при Записи второго игрока будут использоваться настройки кнопок второго джойстика.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется включить эту функцию, чтобы сэкономить место на клавиатуре.</span></p>
<p class="rvps10"><a name="UseInputkeysforColumnSet"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Use Input keys for Column Set</span></p>
<p class="rvps10"><span class="rvts22">Позволяет изменять </span><span class="rvts22">Ввод</span><span class="rvts22"> в выделенных кадрах с помощью нажатия соответствующих кнопок джойстика.</span></p>
<p class="rvps10"><span class="rvts22">Эта функция предназначена для ускорения редактирования </span><span class="rvts22">Ввод</span><span class="rvts22">а. Для массовой установки/снятия нажатий пользователь либо рисует длинный ряд нажатий, либо выделяет ряд кадров и щёлкает по нужному символу в Заголовке Piano Roll </span><span class="rvts22"></span><span class="rvts22"> символ вспыхивает, а </span><span class="rvts22">Ввод</span><span class="rvts22"> в данном столбце изменяется сразу во всех выделенных кадрах.</span></p>
@ -193,7 +193,7 @@
<p class="rvps10"><span class="rvts22">По умолчанию эта функция отключена. Рекомендуется включить её, если вы пользуетесь преимущественно новыми методами ТАСинга, а не записываете </span><span class="rvts22">Ввод</span><span class="rvts22"> традиционным методом. При использовании Записи вам нужно либо отключить эту функцию, либо просто снять Выделение, чтобы при нажатиях кнопок джойстика не срабатывала функция установки кнопок в выделенных кадрах.</span></p>
<p class="rvps10"><span class="rvts22">Благодаря этой функции можно записывать кнопки с джойстика даже при отключенном режиме Recording. Нужно поставить Курсор Выделения на кадр, где требуется вписать </span><span class="rvts22">Ввод</span><span class="rvts22">, и нажимать кнопки на джойстике, чтобы записать их в мувик. Режим мультитрекинга в данном случае действует точно так же, как при обычной Записи. Например, если установлена радиокнопка 2P, при нажатии кнопки </span><span class="rvts32">A</span><span class="rvts22"> будет установлен </span><span class="rvts22">Ввод</span><span class="rvts22"> в колонке "</span><span class="rvts22">A</span><span class="rvts22">" второго джойстика.</span></p>
<p class="rvps10"><a name="BindMarkerstoInput"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Bind Markers to Input</span></p>
<p class="rvps10"><span class="rvts22">Привязывает Маркеры к </span><span class="rvts22">Ввод</span><span class="rvts22">у. Если галочка установлена, то функции редактирования </span><span class="rvts22">Ввод</span><span class="rvts22">а оказывают также влияние и на Маркеры. Например, вставка пустых кадров сдвигает вниз не только нижестоящий </span><span class="rvts22">Ввод</span><span class="rvts22">, но и все нижестоящие Маркеры.</span></p>
<p class="rvps10"><span class="rvts22">Обычно Маркеры устанавливаются на определённые события, происходящие в игре. Когда ТАСер улучшает свой предыдущий результат и доходит до этого места в игре быстрее, чем раньше, то соответствующий Маркер (установленный ещё при первой попытке) должен теперь указывать на более ранний кадр. Нередко приходится перетаскивать его вручную. Но благодаря привязке Маркеры самостоятельно смещаются при внесении изменений в </span><span class="rvts22">Ввод, и ручная</span><span class="rvts22"> перестановка Маркеров в этом случае требуется крайне редко.</span></p>
@ -203,12 +203,12 @@
<p class="rvps10"><span class="rvts22">По умолчанию галочка установлена. Рекомендуется большую часть времени работать с привязанными Маркерами, при необходимости отвязывая их.</span></p>
<p class="rvps10"><span class="rvts22">Для удобства пользователя Тасэдитор подсвечивает привязанные Маркеры в Piano Roll более бледным жёлтым цветом, а отвязанные более насыщенным жёлтым.</span></p>
<p class="rvps10"><a name="EmptynewMarkerNotes"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Empty new Marker Notes</span></p>
<p class="rvps10"><span class="rvts22">Определяет текст Заметок по умолчанию. Если галочка установлена, при создании нового Маркера его Заметка будет пустой. Если галочка снята, при создании нового Маркера текст для его Заметки копируется из текста Заметки вышестоящего Маркера.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию галочка включена. Рекомендуется оставить её включенной, но не забывать вводить текст для важных Маркеров, чтобы не все Маркеры были с пустыми Заметками.</span></p>
<p class="rvps10"><a name="OldcontrolschemeforBranching"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Old control scheme for Branching</span></p>
<p class="rvps10"><span class="rvts22">Имитирует ограничения традиционного метода ТАСинга, связанные с управлением Закладками (сэйвами).</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию галочка снята, и клавиши </span><span class="rvts27">F1-F10</span><span class="rvts22"> используются для загрузки ответвления соответствующей Закладки, а цифровые клавиши </span><span class="rvts27">1-0</span><span class="rvts22"> используются для прыжка возвратить голубым курсором на кадр Закладки без смены мувика.</span></p>
@ -216,31 +216,31 @@
<p class="rvps10"><span class="rvts22">Эта настройка предназначена для помощи старым ТАСерам плавно перейти к ТАСингу в Тасэдиторе.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется не устанавливать эту галочку, так как новая схема управления Закладками гораздо удобнее (хотя бы тем, что она не требует постоянного переключения режимов).</span></p>
<p class="rvps10"><a name="BranchesrestoreentireMovie"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Branches restore entire Movie</span></p>
<p class="rvps10"><span class="rvts22">Определяет способ восстановления ответвлений при прыжках на Закладки во времени.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию галочка установлена, и при загрузке Закладки весь текущий мувик полностью заменяется на мувик, сохранённый в ответвлении Закладки.</span></p>
<p class="rvps10"><span class="rvts22">Если же галочка отсутствует, то при загрузке Закладки </span><span class="rvts22">текущий мувик полностью заменяется на мувик из ответвления, но сразу усекается, начиная с кадра Закладки. </span><span class="rvts22">Таким образом имитируется загрузка сэйвов в традиционном методе ТАСинга: из сэйва восстанавливается только та часть мувика, которая предшествует Курсору Проигрывателя, а остальные кадры (начиная с голубого курсора и до конца мувика) не загружаются. Это имеет смысл при ТАСинге традиционным методом, так как </span><span class="rvts22">после загрузки сэйва ТАСер обычно сразу дописывает новый </span><span class="rvts22">Ввод</span><span class="rvts22"> на место голубого курсора, и незачем загружать из сэйва данные, которые тут же будут перезаписаны. Но в Тасэдиторе мувик редактируется независимо от положения Курсора Проигрывателя, поэтому можно загружать из Закладки всё содержимое мувика от начала до конца, невзирая на то, что голубой курсор может быть посередине.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется не убирать эту галочку, если вы не планируете ограничиваться традиционным методом ТАСинга.</span></p>
<p class="rvps10"><a name="HUDinBranchscreenshots"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; HUD in Branch screenshots</span></p>
<p class="rvps10"><span class="rvts22">Определяет способ съёмки скриншотов для Закладок.</span></p>
<p class="rvps10"><span class="rvts22">Если галочка установлена, берётся полный снимок экрана, включая иконки и сообщения самого эмулятора, Lua-вывод и прочие данные поверх изображения игры. Если галочка снята, в Закладку попадает только игровое изображение.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию галочка включена. Рекомендуется оставить её включенной, чтобы использовать Lua-вывод при сравнении скриншотов двух альтернативных стратегий прохождения участка.</span></p>
<p class="rvps10"><a name="AutopauseattheendofMovie"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Autopause at the end of Movie</span></p>
<p class="rvps10"><span class="rvts22">Автоматически останавливает проигрывание мувика, если оно началось не с последнего кадра.</span></p>
<p class="rvps10"><span class="rvts22">При просмотре готового (или частично готового) мувика обычно не требуется выходить за пределы уже записанного </span><span class="rvts22">Ввод</span><span class="rvts22">а. Это требуется только для расширения границ мувика, когда, например, записан первый уровень, и нужно начинать запись второго.</span></p>
<p class="rvps10"><span class="rvts22">Поэтому галочка </span><span class="rvts22">"</span><span class="rvts53">Autopause at the end of Movie</span><span class="rvts54">" по умолчанию установлена, и после просмотра мувика эмулятор автоматически ставится на паузу. Если снять эту галочку, то эмулятор не будет останавливаться после окончания </span><span class="rvts22">Ввод</span><span class="rvts54">а, а будет продолжать проигрывание пустого места в конце мувика, бесконечно увеличивая размеры мувика, пока пользователь не нажмёт клавишу </span><span class="rvts27">Pause</span><span class="rvts54"> или среднюю кнопку мыши.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется оставить эту галочку включенной.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="fceux-config"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Теперь вы ознакомлены со всеми настройками Тасэдитора, осталось рассмотреть некоторые настройки эмулятора FCEUX, которые могут потребоваться ТАСеру в работе.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Если вы планируете ТАСить традиционным методом, обязательно нужно назначить кнопки джойстика первого игрока на такие клавиши клавиатуры, которые удобно нажимать одновременно с нажатием клавиши </span><span class="rvts27">Frame Advance</span><span class="rvts22">. Хотя FCEUX поддерживает настройку кнопок виртуального NES-джойстика на кнопки реального PC-геймпада, рекомендуется для ввода использовать именно клавиатуру, чтобы помимо игровых кнопок иметь быстрый доступ ещё и к </span><span class="rvts27">Frame Advance</span><span class="rvts22">, </span><span class="rvts27">Frame Rewind</span><span class="rvts22">, </span><span class="rvts27">Pause</span><span class="rvts22">, а также к 10 слотам сохранения.</span></p>
<p class="rvps10"><span class="rvts22">При правильной работе в Тасэдиторе Запись требуется не так часто, а в тех случаях, когда она требуется (например, при записи тестовой версии прохождения уровня), не обязательно иметь быстрый доступ к функциональным клавишам. Поэтому можно вынести игровое управление на USB-геймпад, если он у вас есть.</span></p>
<p class="rvps10"><span class="rvts22">Кнопки виртуального джойстика настраиваются в FCEUX следующим образом. В меню эмулятора выбрать </span><span class="rvts26">Config -&gt; Input</span><span class="rvts22">. В появившемся окне выбрать из левого ниспадающего списка пункт </span><span class="rvts37">Gamepad</span><span class="rvts22"> (обычно он уже выбран). Щёлкнуть по левой кнопке </span><span class="rvts32">Configure</span><span class="rvts22"> (нам требуется настроить только первый джойстик). В появившемся окне щёлкнуть по кнопке </span><span class="rvts32">Up</span><span class="rvts22">, появится маленькое окошко, теперь нужно дважды нажать на клавиатуре клавишу, которая должна отвечать за виртуальную кнопку </span><span class="rvts32">Вверх</span><span class="rvts22">. Первое нажатие назначит клавишу, второе подтвердит выбор (можно вместо второго нажатия просто щёлкнуть по кнопке </span><span class="rvts32">Close</span><span class="rvts22">). Далее нужно проделать то же самое с остальными виртуальными кнопками </span><span class="rvts32">Down</span><span class="rvts22">, </span><span class="rvts32">Left</span><span class="rvts22">, </span><span class="rvts32">Right</span><span class="rvts22">, </span><span class="rvts32">Select</span><span class="rvts22">, </span><span class="rvts32">Start</span><span class="rvts22">, </span><span class="rvts32">B</span><span class="rvts22">, </span><span class="rvts32">A</span><span class="rvts22">. После настройки всех восьми кнопок первого джойстика (Virtual Gamepad 1) можно закрыть окно Gamepad, а затем и окно Input Configuration.</span></p>
@ -257,14 +257,14 @@
<p class="rvps10"><span class="rvts22">Хоткеи "</span><span class="rvts27">Pause</span><span class="rvts22">" и "</span><span class="rvts27">Restore Playback</span><span class="rvts22">" по умолчанию назначены на клавиши "</span><span class="rvts27">Pause/Break</span><span class="rvts22">" и "</span><span class="rvts27">Пробел</span><span class="rvts22">", но в большинстве случаев вместо них проще использовать среднюю кнопку мыши, а клавишу "Пробел" можно переназначить на что-нибудь другое.</span></p>
<p class="rvps10"><span class="rvts22">Напоследок стоит запомнить хоткей "</span><span class="rvts27">Cancel Seeking</span><span class="rvts22">" (клавиша "</span><span class="rvts27">Esc</span><span class="rvts22">" по умолчанию). Нажатие этой клавиши является аналогом щелчка по прогрессбару Тасэдитора если Проигрыватель занимался добеганием к целевому кадру, добегание будет отменено.</span></p>
<p class="rvps10"><span class="rvts22">Остальные хоткеи почти не используются при работе в Тасэдиторе. Некоторые хоткеи FCEUX вообще не действуют при запущенном Тасэдиторе. Например, хоткей "Open ROM" не сработает необходимо загрузить РОМ до запуска Тасэдитора. Полный список хоткеев, работающих при запущенном Тасэдиторе, можно найти в </span><a class="rvts28" href="Controls.html#hotkeys">Справочнике</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В следующей главе раскрываются </span><a class="rvts28" href="AdvancedFeatures.html">особые возможности программы</a><span class="rvts22">. Вы можете отложить чтение этой главы до тех пор, пока не освоитесь с основными возможностями. В любом случае, сейчас вы уже вполне готовы к продуктивной работе в Тасэдиторе.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/create-epub-ebooks">Write EPub books for the iPad</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>2. Интерфейс программы</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,29 +53,28 @@
<div id="topic_content">
<p><span class="rvts20">Интерфейс программы</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">В этой главе описывается интерфейс программы и способы взаимодействия с ней.</span></p>
<p class="rvps10"><span class="rvts22">При описании используется множество специфических терминов, так что перед началом изучения рекомендуется прочесть </span><a class="rvts33" href="Glossary.html">Глоссарий</a><span class="rvts22">. </span><span class="rvts22">Также желательно запустить Тасэдитор прямо сейчас и всё время проверять описываемое на практике, параллельно с чтением.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Для входа в Тасэдитор нужно проделать следующее:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">1)</span>
<span class="rvts22">запустить эмулятор FCEUX</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">2)</span>
<span class="rvts22">загрузить РОМ любой игры (File -&gt; Open ROM)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">3)</span>
<span class="rvts22">открыть окно Тасэдитора (Tools -&gt; TAS Editor)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">запустить эмулятор FCEUX</span></li>
<li class="rvps15"><span class="rvts22">загрузить РОМ любой игры (File -&gt; Open ROM)</span></li>
<li class="rvps15"><span class="rvts22">открыть окно Тасэдитора (Tools -&gt; TAS Editor)</span></li>
</ol>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">После запуска Тасэдитора игра сбрасывается, а эмулятор автоматически ставится на паузу. Во время ТАСинга эмулятор должен стоять на паузе, чтобы игра не подгоняла и не отвлекала от анализа информации.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps18"><img border="0" alt hspace="1" vspace="1" src="lib/Monitor-example.png"></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps18"><img alt="" style="padding : 1px;" src="lib/Monitor-example.png"/></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При ТАСинге в Тасэдиторе значительную часть рабочего стола занимает окно самого Тасэдитора. Окно эмулятора используется для вывода изображения, его размер желательно увеличить вдвое, чтобы даже мельчайшие детали были заметными при беглом взгляде. В процессе работы вам часто придётся переводить взгляд то на окно Тасэдитора (на содержимое Piano Roll), то на окно эмулятора. Поэтому желательно разместить эти окна вплотную. На оставшемся месте рабочего стола вы можете расположить окна просмотрщика памяти, Луа-консоль и т.д.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Размер окна Тасэдитора можно изменять, перетаскивая границы окна с помощью мыши. Выбранный пользователем размер и положение окна запоминается при выходе из эмулятора и восстанавливается при следующем запуске программы.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В заголовке окна отображается имя программы (TAS Editor) и имя текущего проекта. </span><span class="rvts22">Если в проекте имеются несохранённые изменения, в конце этой надписи отображается звёздочка. </span><span class="rvts22">Кроме того, в режиме Записи Ввода в заголовке окна появляется слово "Recording".</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Меню программы такое же, как в текстовых редакторах типа Notepad.</span></p>
<p class="rvps10"><span class="rvts22">Пункт меню </span><span class="rvts26">File</span><span class="rvts22"> отвечает за все файловые операции Тасэдитора создание нового проекта, открытие существующего файла, сохранение на диск, импорт и экспорт данных. Также в этом пункте есть подменю "Recent", в котором запоминаются пути к недавно использованным проектам, это можно использовать для быстрой загрузки последнего проекта.</span></p>
<p class="rvps10"><span class="rvts22">В пункте меню </span><span class="rvts26">Edit</span><span class="rvts22"> содержатся функции, позволяющие редактировать мувик так, как если бы он был обычным текстовым или табличным файлом. Большинство этих функций можно вызывать стандартными комбинациями клавиш, такими как </span><span class="rvts34">Ctrl + C</span><span class="rvts22">, </span><span class="rvts34">Ctrl + V</span><span class="rvts22"> и т.д. Они будут рассмотрены далее.</span></p>
@ -83,35 +82,35 @@
<p class="rvps10"><span class="rvts22">В пункте меню </span><span class="rvts26">Config</span><span class="rvts22"> находятся все остальные настройки программы такие как таймер автоматического сохранения проекта, количество уровней отката и другие возможности, назначение которых будет раскрыто по ходу обучения. Для начала рекомендуется не менять эти настройки.</span></p>
<p class="rvps10"><span class="rvts22">Наконец, пункт меню </span><span class="rvts26">Help</span><span class="rvts22"> содержит ссылку на данное Руководство и диалог "О программе" (About). Кроме того, в меню Help вы можете отключить/включить всплывающие подсказки.</span></p>
<p class="rvps10"><span class="rvts22">С правой стороны этого меню отдельно располагается пункт </span><span class="rvts26">Pattern</span><span class="rvts22">, показывающий название текущего шаблона. Шаблоны представляют собой заготовленные последовательности нажатий и отпусканий для одной кнопки. Их использование позволяет в некоторых случаях ускорить создание </span><span class="rvts22">Ввод</span><span class="rvts22">а. Подробнее о шаблонах будет рассказано в </span><a class="rvts36" href="AdvancedFeatures.html">6 главе</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-width: 0px;">
<tr valign="top">
<td width="125"><p class="rvps2"><img border="0" alt hspace="1" vspace="1" src="lib/pianoroll.png"></p>
<td style="width: 125px;"><p class="rvps2"><img alt="" style="padding : 1px;" src="lib/pianoroll.png"/></p>
</td>
<td width="797"><div class="rvps10"><table width="100%" border="0" cellpadding="10" cellspacing="0" style="border-width: 0px;">
<td style="width: 797px;"><div class="rvps10"><table width="100%" border="0" cellpadding="10" cellspacing="0" style="border-width: 0px;">
<tr valign="top">
<td><p class="rvps10"><span class="rvts22">Всё содержимое окна Тасэдитора можно разделить на две части рабочее пространство (Piano Roll) слева, панель инструментов (Toolbox) справа.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps17"><a class="rvts24" href="PianoRoll.html">Описание Piano Roll</a></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts6"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts6"><br/></span></p>
</td>
<td width="67"><p class="rvps19"><img border="0" alt hspace="1" vspace="1" src="lib/toolbox.png"></p>
<td style="width: 67px;"><p class="rvps19"><img alt="" style="padding : 1px;" src="lib/toolbox.png"/></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Справочник</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,34 +49,34 @@
<div id="topic_content">
<p><span class="rvts20">Справочник</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><a class="rvts24" href="Glossary.html">Глоссарий</a></p>
<p class="rvps12"><span class="rvts25">Расшифровка большинства терминов, используемых в сфере ТАСинга</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts24" href="Controls.html">Управление</a></p>
<p class="rvps12"><span class="rvts25">Полный обзор всех нюансов управления в программе</span></p>
<p class="rvps10"><a class="rvts24" href="Navigation.html"><br></a></p>
<p class="rvps10"><a class="rvts24" href="Navigation.html"><br/></a></p>
<p class="rvps10"><a class="rvts24" href="Navigation.html">Навигация</a></p>
<p class="rvps12"><span class="rvts25">Полный обзор всех способов навигации по мувику</span></p>
<p class="rvps10"><a class="rvts24" href="Operations.html"><br></a></p>
<p class="rvps10"><a class="rvts24" href="Operations.html"><br/></a></p>
<p class="rvps10"><a class="rvts24" href="Operations.html">Операции</a></p>
<p class="rvps12"><span class="rvts25">Полный обзор </span><span class="rvts25">всех возможных типов модификации мувика</span></p>
<p class="rvps10"><a class="rvts24" href="LuaAPI.html"><br></a></p>
<p class="rvps10"><a class="rvts24" href="LuaAPI.html"><br/></a></p>
<p class="rvps10"><a class="rvts24" href="LuaAPI.html">Lua-функции</a></p>
<p class="rvps12"><span class="rvts25">Полный обзор </span><span class="rvts25">всех функций библиотеки taseditor</span></p>
<p class="rvps10"><span class="rvts24"><br></span></p>
<p class="rvps10"><span class="rvts24"><br/></span></p>
<p class="rvps10"><a class="rvts24" href="FAQ.html">Ответы на вопросы</a></p>
<p class="rvps12"><span class="rvts25">Подборка вероятных вопросов и ответов на них</span></p>
<p class="rvps10"><span class="rvts24"><br></span></p>
<p class="rvps10"><span class="rvts24"><br/></span></p>
<p class="rvps10"><a class="rvts24" href="SpeedrunnersSynopsis.html">Конспект спидраннера</a></p>
<p class="rvps12"><span class="rvts25">Свод типовых задач при поиске кратчайшего пути на участках</span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Write eBooks for the Kindle</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>4.3. Полуавтоматический ТАСинг</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,9 +53,9 @@
<div id="topic_content">
<p><span class="rvts20">Полуавтоматический ТАСинг</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-method3.png"></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-method3.png"/></p>
<p class="rvps10"><span class="rvts22">Этот метод является дальнейшим развитием идей нелинейного метода ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22">Во многих случаях ТАСеру требуется сразу видеть результат своих изменений </span><span class="rvts22">Ввод</span><span class="rvts22">а. В идеале он должен осознавать последствия своего решения одновременно с принятием решения. Но в реальности драгоценные мгновенья уходят на введение своего решения в компьютер и последующую навигацию Курсором Проигрывателя от кадра изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а до кадра конца участка.</span></p>
<p class="rvps10"><span class="rvts22">Третий метод ТАСинга позволяет переложить навигацию Курсором Проигрывателя на Тасэдитор и сосредоточить внимание только на редактировании. Тасэдитор будет мгновенно реагировать на каждое изменение </span><span class="rvts22">Ввод</span><span class="rvts22">а и сразу отображать его результат на экране FCEUX. Благодаря тому, что вы ощущаете воздействие каждого щелчка на игровой процесс, достигается высочайший уровень взаимосвязи между ТАСером и игрой. При таком тесном взаимодействии не только ТАСер управляет игрой, но и игра направляет действия ТАСера в нужное русло.</span></p>
@ -63,89 +63,74 @@
<p class="rvps10"><span class="rvts22">Этот метод ТАСинга назван полуавтоматическим, потому что получилось нечто среднее между использованием автоматических ботов и ручным ТАСингом. Само по себе использование ботов не обладает высокой степенью гибкости, присущей человеческому мышлению. С другой стороны, ручной перебор (зацикленное тестирование множества однотипных вариантов </span><span class="rvts22">Ввод</span><span class="rvts22">а) угнетает своей рутинностью.</span></p>
<p class="rvps10"><span class="rvts22">Идея третьего метода ТАСинга в том, что вы редактируете </span><span class="rvts22">Ввод</span><span class="rvts22">, а Тасэдитор запускает и останавливает просмотр участка. Курсор Проигрывателя автоматически возвращается на то место, откуда его сбросило в момент усечения Гринзоны.</span></p>
<p class="rvps10"><span class="rvts22">Режим Записи и галочка "Follow cursor" должны быть выключены. Галочка "Auto-restore last position" должна быть включена. Галочка "Turbo seek" по умолчанию отключена и включается при необходимости.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Основное занятие ТАСера:</span></p>
<p class="rvps10"><span class="rvts53"><br></span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">1.</span>
<span class="rvts22">Проскроллировать Piano Roll к началу редактируемого участка мувика, доставить сюда Курсор Проигрывателя, определиться с целью. Полезно также отметить начало участка Маркером.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">2.</span>
<span class="rvts22">Приблизительно прикинуть кадр конца участка, доставить Курсор Проигрывателя на этот кадр и оставить его там, даже если на участке пока отсутствует Ввод, необходимый для достижения конечного события.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">3.</span>
<span class="rvts22">Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки (как именно требуется изменить </span><span class="rvts22">Ввод</span><span class="rvts22">, на каких кадрах и т.д.</span><span class="rvts22">).</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">4.</span>
<span class="rvts22">Н</span><span class="rvts22">авигация курсором мыши к любому кадру мувика осуществляется почти мгновенно.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">5.</span>
<span class="rvts22">Редактировать участок мышью. </span><span class="rvts22">После каждого вносимого изменения Курсор Проигрывателя будет автоматически проигрывать участок от первого изменённого кадра до текущего конца участка. При необходимости можно передвигать текущий конец участка, перемещая Курсор Проигрывателя вручную (колесом).</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">6.</span>
<span class="rvts22">Продолжать редактирование, возвращаясь к пункту 4 или 3, пока целевое событие не наступит в рамках участка.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">7.</span>
<span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">] С</span><span class="rvts22">охранить полученный вариант прохождения участка в любую свободную Закладку.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">8.</span>
<span class="rvts22">Если это не первый вариант прохождения участка, с</span><span class="rvts22">равнить </span><span class="rvts22">полученный результат с лучшим результатом, используя критерий оптимальности. Если новый вариант оказался лучше&nbsp;</span><span class="rvts22"> (или если это ваш первый вариант прохождения участка), </span><span class="rvts31">рекомендуется</span><span class="rvts22"> сохранить результат в Закладку 9. </span><span class="rvts22">Слот 9 будет отвечать за хранение самого лучшего результата шлифовки участка. Если не сохранять лучший вариант в Закладку, он останется только в текущем мувике и в Журнале Истории.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">9.</span>
<span class="rvts22">Вернуться к пункту 3 и опробовать ещё варианты, до тех пор пока не иссякнут идеи по данному участку.</span></p>
<p class="rvps15" style="text-indent: 25px; margin-left: 5px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">10.</span>
<span class="rvts22">Когда идеи полностью иссякли, восстановить лучший вариант прохождения из Журнала Истории или из Закладки 9</span><span class="rvts22"> в текущий мувик</span><span class="rvts22">, определиться со следующим участком и вернуться к пункту 1.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts53"><br/></span></p>
<ol style="text-indent: 25px; margin-left: 5px; list-style-position: inside;">
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Проскроллировать Piano Roll к началу редактируемого участка мувика, доставить сюда Курсор Проигрывателя, определиться с целью. Полезно также отметить начало участка Маркером.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Приблизительно прикинуть кадр конца участка, доставить Курсор Проигрывателя на этот кадр и оставить его там, даже если на участке пока отсутствует Ввод, необходимый для достижения конечного события.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки (как именно требуется изменить </span><span class="rvts22">Ввод</span><span class="rvts22">, на каких кадрах и т.д.</span><span class="rvts22">).</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Н</span><span class="rvts22">авигация курсором мыши к любому кадру мувика осуществляется почти мгновенно.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Редактировать участок мышью. </span><span class="rvts22">После каждого вносимого изменения Курсор Проигрывателя будет автоматически проигрывать участок от первого изменённого кадра до текущего конца участка. При необходимости можно передвигать текущий конец участка, перемещая Курсор Проигрывателя вручную (колесом).</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Продолжать редактирование, возвращаясь к пункту 4 или 3, пока целевое событие не наступит в рамках участка.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">] С</span><span class="rvts22">охранить полученный вариант прохождения участка в любую свободную Закладку.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Если это не первый вариант прохождения участка, с</span><span class="rvts22">равнить </span><span class="rvts22">полученный результат с лучшим результатом, используя критерий оптимальности. Если новый вариант оказался лучше&nbsp;</span><span class="rvts22"> (или если это ваш первый вариант прохождения участка), </span><span class="rvts31">рекомендуется</span><span class="rvts22"> сохранить результат в Закладку 9. </span><span class="rvts22">Слот 9 будет отвечать за хранение самого лучшего результата шлифовки участка. Если не сохранять лучший вариант в Закладку, он останется только в текущем мувике и в Журнале Истории.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Вернуться к пункту 3 и опробовать ещё варианты, до тех пор пока не иссякнут идеи по данному участку.</span></li>
<li class="rvps15" style="text-indent: 25px"><span class="rvts22">Когда идеи полностью иссякли, восстановить лучший вариант прохождения из Журнала Истории или из Закладки 9</span><span class="rvts22"> в текущий мувик</span><span class="rvts22">, определиться со следующим участком и вернуться к пункту 1.</span></li>
</ol>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Основное отличие этого метода от простого нелинейного в том, что при редактировании участка Курсор Проигрывателя находится в конце участка, а не где-то в начале. При каждом усечении Гринзоны Курсор Проигрывателя автоматически добегает к концу участка, точнее, к тому месту, где был конец участка до изменения Ввода. Если после изменения Ввода кадр конца участка изменился, достаточно слегка передвинуть </span><span class="rvts22">голубой курсор колесом мыши на пару кадров выше или ниже. А во многих случаях даже это не требуется, так как ТАСеру не всегда нужно знать конечный кадр участка, порой надо только увидеть цепочку событий, происходящих на участке в результате изменённого Ввода.</span></p>
<p class="rvps10"><span class="rvts22">Просмотр участка запускается после каждого промежуточного изменения Ввода, даже если вы ещё не закончили свою мысль и не собираетесь сравнивать итоговый результат с результатом предыдущего способа прохождения участка. Обычно во время увлечённого редактирования ТАСер не смотрит на экран FCEUX, продолжая щёлкать по Piano Roll, пока не воплотит свою мысль в виде большой кнопочной комбинации. А когда </span><span class="rvts22">Ввод</span><span class="rvts22"> участка уже представляет интерес, ТАСер обращает внимание на экран эмулятора или Memory Watch, которые продолжают обновляться при каждом изменении Ввода на участке.</span></p>
<p class="rvps10"><span class="rvts22">Например, чтобы осуществить прыжок через яму, вы сначала рисуете длинное зажатие </span><span class="rvts32">R</span><span class="rvts22"> на участке и даже не смотрите на экран FCEUX, где в это время Марио на бегу проваливается в яму. Вы дорисовываете нажатие кнопки </span><span class="rvts32">A</span><span class="rvts22">, а затем уже смотрите на экран эмулятора и стираете/дорисовываете дополнительные нажатия </span><span class="rvts32">A</span><span class="rvts22">, перемещая начало и длительность прыжка и наблюдая траекторию прыгающего персонажа.</span></p>
<p class="rvps10"><span class="rvts22">Таким образом, процесс шлифовки </span><span class="rvts22">Ввод</span><span class="rvts22">а в данном методе представляет собой одновременный просмотр и редактирование участка. </span><span class="rvts22">Так как ТАСер каждый раз мгновенно видит в эмуляторе результат своих действий, он почти сразу входит в тесный информационный контакт с игрой и начинает мыслить синхронно с её регулярными откликами. Игра начинает помогать ТАСеру принимать и отфильтровывать решения, начинает играть вместе с ним, а иногда даже за него. </span><span class="rvts22">В результате можно потерять беспристрастность ума и пойти на поводу очевидных решений, поощряемых самой игрой. Поэтому не стоит использовать этот метод ТАСинга постоянно, рекомендуется чередовать его с предыдущим.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Как и в предыдущем методе, здесь можно менять скорость добегания, получая различные вариации метода:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">1)</span>
<span class="rvts22">редактирование в реальном времени с постоянным тестированием изменений</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">2)</span>
<span class="rvts22">редактирование при замедленной эмуляции с постоянным тестированием изменений</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">3)</span>
<span class="rvts22">редактирование с мгновенным просмотром итога (турбо)</span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">редактирование в реальном времени с постоянным тестированием изменений</span></li>
<li class="rvps15"><span class="rvts22">редактирование при замедленной эмуляции с постоянным тестированием изменений</span></li>
<li class="rvps15"><span class="rvts22">редактирование с мгновенным просмотром итога (турбо)</span></li>
</ol>
<p class="rvps10"><a name="turbo-seeking"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Как и в третьей вариации нелинейного ТАСинга, здесь турбо создаёт психологическую ассоциацию между двумя отдалёнными событиями (началом и концом участка). Но теперь эта ассоциация многократно усиляется благодаря окончательному убиранию посредников скоростной просмотр участка запускается ещё до отпускания кнопки мыши. Едва ТАСер щёлкает по какому-то кадру Piano Roll, он уже видит результат, который вообще-то наступает в игре через несколько секунд после нажатия кнопки.</span></p>
<p class="rvps10"><a name="FindStartButtonPress"></a>
<span class="rvts22">В качестве примера можно привести поиск первого кадра для нажатия кнопки </span><span class="rvts32">Start</span><span class="rvts22">. Во многих играх нажать эту кнопку можно раньше, чем отобразится графика на экране. Кроме того, нередко после срабатывания </span><span class="rvts32">Start</span><span class="rvts22"> игра на некоторое время задумывается, ничем не подавая вид, что нажатие сработало. Только через секунду или две мы видим смену заставки и тем самым узнаём, что нажатие </span><span class="rvts32">Start</span><span class="rvts22"> сработало.</span></p>
<p class="rvps10"><span class="rvts22">В традиционном методе на поиск самого первого кадра уйдёт 5-10 минут. В Тасэдиторе на это уходит менее минуты.</span></p>
<p class="rvps10"><span class="rvts22">Делается это так:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Включаете галочку </span><span class="rvts22">"Auto-restore last position" и </span><span class="rvts22">"Turbo seek". </span><span class="rvts22">Отключаете галочку "Follow cursor", чтобы Piano Roll не убегал вслед за Курсором Проигрывателя.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Ставите пробное нажатие </span><span class="rvts32">Start</span><span class="rvts22"> на кадре, где оно точно сработает, например, на кадр 100.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Просматриваете срабатывание кнопки до момента, когда по изображению на экране уже понятно, что </span><span class="rvts32">Start </span><span class="rvts22">сработал (например, появился экран World 1-1). Допустим, это кадр 200. Оставляете Курсор Проигрывателя на этом месте это и будет конец участка.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Теперь удаляете своё пробное нажатие </span><span class="rvts32">Start</span><span class="rvts22"> (в окне FCEUX тут же мигнёт и исчезнет экран </span><span class="rvts22">World 1-1,</span><span class="rvts22"> и останется экран заставки, так как нажатия </span><span class="rvts32">Start</span><span class="rvts22"> больше нет).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Ставите нажатие </span><span class="rvts32">Start</span><span class="rvts22"> на первый или второй кадр мувика, ещё до того, когда приставка начинает опрашивать джойстик. В окне FCEUX ничего не меняется, так как это нажатие не сработало.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Зажимаете одной рукой </span><span class="rvts34">Ctrl + Shift</span><span class="rvts22">, другой начинаете периодически (раз в секунду или чаще это зависит от мощности вашего компьютера) нажимать </span><span class="rvts34">Insert</span><span class="rvts22">. После каждого нажатия </span><span class="rvts34">Ctrl + Shift + Insert</span><span class="rvts22"> символ кнопки </span><span class="rvts32">Start </span><span class="rvts22">отодвигается на один кадр вперёд, а в окне FCEUX вы видите, повлияло ли это нажатие на состояние игры в кадре 200, или не повлияло. Если у вас быстрый компьютер, то добегание голубого курсора до кадра 200 будет почти мгновенным, если же компьютер медленный, то придётся подождать около полсекунды (процесс добегания можно отслеживать по прогрессбару в разделе Playback).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Пока нажатие </span><span class="rvts32">Start</span><span class="rvts22">, методично сдвигаемое вами вниз, не доходит до искомого кадра, окно FCEUX будет показывать заставку, но когда очередное нажатие </span><span class="rvts34">Ctrl + Shift + Insert</span><span class="rvts22"> передвинуло </span><span class="rvts32">Start</span><span class="rvts22"> на нужный кадр, в окне FCEUX появится экран </span><span class="rvts22">World 1-1</span><span class="rvts22">.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Таким образом, вы обнаружили самый первый возможный кадр для нажатия </span><span class="rvts32">Start</span><span class="rvts22">. Номер этого кадра, скорее всего, будет намного меньше 100. Для уверенности можно тут же нажать </span><span class="rvts34">Ctrl + Delete</span><span class="rvts22">, чтобы сместить нажатие </span><span class="rvts32">Start</span><span class="rvts22"> на предыдущий кадр и увидеть в окне FCEUX экран заставки, а затем нажать </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">, чтобы вернуть </span><span class="rvts32">Start </span><span class="rvts22">на место и увидеть </span><span class="rvts22">World 1-1.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">Включаете галочку </span><span class="rvts22">"Auto-restore last position" и </span><span class="rvts22">"Turbo seek". </span><span class="rvts22">Отключаете галочку "Follow cursor", чтобы Piano Roll не убегал вслед за Курсором Проигрывателя.</span></li>
<li class="rvps15"><span class="rvts22">Ставите пробное нажатие </span><span class="rvts32">Start</span><span class="rvts22"> на кадре, где оно точно сработает, например, на кадр 100.</span></li>
<li class="rvps15"><span class="rvts22">Просматриваете срабатывание кнопки до момента, когда по изображению на экране уже понятно, что </span><span class="rvts32">Start </span><span class="rvts22">сработал (например, появился экран World 1-1). Допустим, это кадр 200. Оставляете Курсор Проигрывателя на этом месте это и будет конец участка.</span></li>
<li class="rvps15"><span class="rvts22">Теперь удаляете своё пробное нажатие </span><span class="rvts32">Start</span><span class="rvts22"> (в окне FCEUX тут же мигнёт и исчезнет экран </span><span class="rvts22">World 1-1,</span><span class="rvts22"> и останется экран заставки, так как нажатия </span><span class="rvts32">Start</span><span class="rvts22"> больше нет).</span></li>
<li class="rvps15"><span class="rvts22">Ставите нажатие </span><span class="rvts32">Start</span><span class="rvts22"> на первый или второй кадр мувика, ещё до того, когда приставка начинает опрашивать джойстик. В окне FCEUX ничего не меняется, так как это нажатие не сработало.</span></li>
<li class="rvps15"><span class="rvts22">Зажимаете одной рукой </span><span class="rvts34">Ctrl + Shift</span><span class="rvts22">, другой начинаете периодически (раз в секунду или чаще это зависит от мощности вашего компьютера) нажимать </span><span class="rvts34">Insert</span><span class="rvts22">. После каждого нажатия </span><span class="rvts34">Ctrl + Shift + Insert</span><span class="rvts22"> символ кнопки </span><span class="rvts32">Start </span><span class="rvts22">отодвигается на один кадр вперёд, а в окне FCEUX вы видите, повлияло ли это нажатие на состояние игры в кадре 200, или не повлияло. Если у вас быстрый компьютер, то добегание голубого курсора до кадра 200 будет почти мгновенным, если же компьютер медленный, то придётся подождать около полсекунды (процесс добегания можно отслеживать по прогрессбару в разделе Playback).</span></li>
<li class="rvps15"><span class="rvts22">Пока нажатие </span><span class="rvts32">Start</span><span class="rvts22">, методично сдвигаемое вами вниз, не доходит до искомого кадра, окно FCEUX будет показывать заставку, но когда очередное нажатие </span><span class="rvts34">Ctrl + Shift + Insert</span><span class="rvts22"> передвинуло </span><span class="rvts32">Start</span><span class="rvts22"> на нужный кадр, в окне FCEUX появится экран </span><span class="rvts22">World 1-1</span><span class="rvts22">.</span></li>
<li class="rvps15"><span class="rvts22">Таким образом, вы обнаружили самый первый возможный кадр для нажатия </span><span class="rvts32">Start</span><span class="rvts22">. Номер этого кадра, скорее всего, будет намного меньше 100. Для уверенности можно тут же нажать </span><span class="rvts34">Ctrl + Delete</span><span class="rvts22">, чтобы сместить нажатие </span><span class="rvts32">Start</span><span class="rvts22"> на предыдущий кадр и увидеть в окне FCEUX экран заставки, а затем нажать </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">, чтобы вернуть </span><span class="rvts32">Start </span><span class="rvts22">на место и увидеть </span><span class="rvts22">World 1-1.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Точно так же можно очень быстро находить оптимальную длительность зажатия кнопки </span><span class="rvts32">A</span><span class="rvts22"> для изменения высоты прыжка и приземления в нужной точке. Можно легко манипулировать удачей во многих играх. И вообще, удобство автоматического турбо-добегания наглядно проявляется в ситуациях, когда на участке действует всего один фактор оптимальности, и требуется быстро перебрать пару сотен однотипных вариантов.</span></p>
<p class="rvps10"><span class="rvts22">Полуавтоматический ТАСинг стимулирует меньше думать и больше экспериментировать. Во многих видеоиграх именно такой подход приводит к успеху, однако постарайтесь не увлечься комфортностью этого метода, забыв про остальные.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Плюсы полуавтоматического ТАСинга:</span></p>
<p class="rvps15"><span class="rvts23">+ </span><span class="rvts22">Постоянная отдача позволяет на ходу корректировать свои решения и заранее отсекать в уме заведомо ошибочные комбинации </span><span class="rvts22">Ввод</span><span class="rvts22">а. Это уменьшает количество требуемых исправлений и ускоряет рабочий процесс.</span></p>
<p class="rvps15"><span class="rvts23">+ </span><span class="rvts22">Мгновенная навигация к месту редактирования.</span></p>
<p class="rvps15"><span class="rvts23">+ </span><span class="rvts22">Возможность пропускать ненужные сцены и ассоциировать действие с итогом.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Минусы метода:</span></p>
<p class="rvps15"><span class="rvts23"> </span><span class="rvts22">Упор на мышиное управление.</span></p>
<p class="rvps15"><span class="rvts23"> </span><span class="rvts22">Настойчивая отдача провоцирует ТАСера отсекать некоторые нелогичные, но потенциально выигрышные комбинации.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Когда использовать:</span><span class="rvts22"> </span><span class="rvts22">когда нужно отшлифовать участок, для которого уже известны все факторы оптимальности.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Теперь вы изучили главные принципы работы в Тасэдиторе и уже можете начинать ТАСить свою любимую игру. </span><span class="rvts22">Лучше всего обучает практика, и только в процессе реальной разработки своего личного ТАСа вы сможете освоить все премудрости.</span></p>
<p class="rvps10"><span class="rvts22">После пары недель практического ТАСинга рекомендуется заново перечитать третью и четвёртую главу данного Курса, чтобы усвоить текст на более глубоком уровне, ведь во время первого чтения вы наверняка многое поняли не до конца.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В следующей главе: </span><a class="rvts28" href="ProgramCustomization.html">настройка программы для максимально комфортной работы</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid;"><p class="rvps10"><span class="rvts26">ПРАКТИЧЕСКОЕ ЗАДАНИЕ: </span><span class="rvts22">Хорошенько отшлифуйте </span><span class="rvts22">Ввод</span><span class="rvts22"> в распланированных участках своего тестового мувика. Если пробное разбиение Маркерами оказалось неудачным переразбивайте на ходу.</span></p>
@ -155,12 +140,12 @@
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Конспект спидраннера</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,31 +53,29 @@
<div id="topic_content">
<p><span class="rvts20">Конспект спидраннера</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">Создание спидранов является наиболее простым видом ТАСинга, и его основные приёмы давно изучены. Здесь приводится классификация типовых задач спидраннера, возникающих во время шлифовки Ввода на участках. Перед чтением этого раздела рекомендуется усвоить материалы </span><a class="rvts28" href="TASingProcess.html">Процесс ТАСинга</a><span class="rvts22"> и </span><a class="rvts28" href="TASingMethodology.html">Методология ТАСинга</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При создании спидрана необходимо находить кратчайший способ прохождения каждого участка игры. Процесс поиска заключается в тестировании множества вариантов прохождения участка и выборе самого лучшего варианта.</span></p>
<p class="rvps10"><span class="rvts22">Для ускорения этого процесса обычно сравниваются между собой только два варианта: </span><span class="rvts26">новый</span><span class="rvts22"> рабочий вариант и наилучший </span><span class="rvts26">старый</span><span class="rvts22"> вариант, а все остальные старые варианты забываются (впрочем, некоторые любопытные варианты можно сохранить в Закладки) .</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Самый лучший из всех ранее протестированных (старых) вариантов может храниться:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">в Закладках рекомендуется</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">в Журнале Истории автоматически</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">в памяти ТАСера не рекомендуется</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">в Закладках рекомендуется</span></li>
<li class="rvps15"><span class="rvts22">в Журнале Истории автоматически</span></li>
<li class="rvps15"><span class="rvts22">в памяти ТАСера не рекомендуется</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Когда новый рабочий вариант оказывается лучше (оптимальнее) наилучшего старого, автоматически подразумевается, что он лучше всех остальных старых вариантов, поэтому этот рабочий вариант становится наилучшим. В случае использования Закладок следует сохранить новый вариант в тот же слот, где хранился наилучший старый вариант.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Критерием оптимальности может быть:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">наличие/отсутствие требуемого события в новом и старом варианте </span><span class="rvts74">(bool)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">время наступления целевого события в новом и старом варианте </span><span class="rvts74">(int)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">состояние игры на одном и том же кадре нового и старого мувика </span><span class="rvts74">(string)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">наличие/отсутствие требуемого события в новом и старом варианте </span><span class="rvts74">(bool)</span></li>
<li class="rvps15"><span class="rvts22">время наступления целевого события в новом и старом варианте </span><span class="rvts74">(int)</span></li>
<li class="rvps15"><span class="rvts22">состояние игры на одном и том же кадре нового и старого мувика </span><span class="rvts74">(string)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Соответственно, при сравнении двух вариантов требуется делать одно из трёх:</span></p>
<p class="rvps15"><a class="rvts28" href="SpeedrunnersSynopsis.html#CompareEvent">1. Сравнивать наличие/отсутствие требуемого события.</a></p>
<p class="rvps27"><a class="rvts60" href="SpeedrunnersSynopsis.html#CompareEvent-A">А. По памяти</a></p>
@ -91,9 +89,9 @@
<p class="rvps27"><a class="rvts60" href="SpeedrunnersSynopsis.html#CompareState-A">А. По памяти</a></p>
<p class="rvps27"><a class="rvts60" href="SpeedrunnersSynopsis.html#CompareState-B">B. С помощью Закладок</a></p>
<p class="rvps10"><a name="CompareEvent"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">1. Сравнивать наличие/отсутствие требуемого события.</span></p>
<p class="rvps10"><span class="rvts22">Выигрывает вариант, где требуемое событие происходит в рамках текущего участка (а вредное событие, соответственно, не происходит). Обычно появление требуемого события - это всего лишь первый этап при создании Ввода на участке, а следующим этапом будут попытки ускорить момент появления этого события.</span></p>
<p class="rvps10"><span class="rvts22">Выигрывает вариант, где требуемое событие происходит в рамках текущего участка (а вредное событие, соответственно, не происходит). Обычно появление требуемого события это всего лишь первый этап при создании Ввода на участке, а следующим этапом будут попытки ускорить момент появления этого события.</span></p>
<p class="rvps10"><span class="rvts22">Перебор вариантов проходит до первого успешного варианта, либо пока не надоест.</span></p>
<p class="rvps10"><span class="rvts22">Аналогия с программированием: сравнение двух Boolean (переменная логического типа), сравнение двух массивов Boolean.</span></p>
<p class="rvps10"><a name="CompareEvent-A"></a>
@ -101,7 +99,7 @@
<p class="rvps10"><a name="CompareEvent-B"></a>
<span class="rvts22">B. Если требуемое событие является комплексным (например, требуется одновременно подстрелить нескольких врагов), рекомендуется в процессе перебора вариантов сохранять в Закладки те варианты, где требуемое событие выполнилось хотя бы частично (например, игрок подстрелил одновременно двух врагов из трёх). Если в конце концов требуемого события так и не удастся добиться, может сгодиться и такой частичный успех.</span></p>
<p class="rvps10"><a name="CompareTime"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">2. Сравнивать время наступления целевого события.</span></p>
<p class="rvps10"><span class="rvts22">Выигрывает вариант, где целевое событие наступает раньше всего. Время наступления целевого события определяется кадром, перед которым целевого события в игре ещё не было, а на этом кадре оно уже есть. Номер этого кадра определяется при наведении на него Курсора Проигрывателя и просмотре экорана FCEUX.</span></p>
<p class="rvps10"><span class="rvts22">Перебор вариантов проходит до тех пор, пока не надоест.</span></p>
@ -115,7 +113,7 @@
<p class="rvps10"><a name="CompareTime-D"></a>
<span class="rvts22">D. Для участков средней и высокой сложности используйте Закладки, отображаемые в столбце иконок Piano Roll. Если новый кадр целевого события находится выше иконки Закладки, то новый вариант лучше старого варианта из этой Закладки, и вам следует установить эту Закладку на этот новый кадр, сделав быстрый сэйв.</span></p>
<p class="rvps10"><a name="CompareState"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">3. Сравнивать состояние игры на одном и том же кадре.</span></p>
<p class="rvps10"><span class="rvts22">Выигрывает вариант, в котором у игры в целом более выгодные характеристики. Этот тип сравнений рекомендуется использовать для оценки сложных и многогранных игровых ситуаций. Например, в гонке Формула-1 цель найти оптимальный баланс между максимальным продвижением вперёд и минимальной изношенностью шин.</span></p>
<p class="rvps10"><span class="rvts22">Перебор вариантов проходит до тех пор, пока не надоест.</span></p>
@ -124,14 +122,14 @@
<span class="rvts22">A. Для простых участков бывает достаточно запомнить некоторые характеристики состояния игры, достигнутого в наилучшем варианте прохождения участка. При просмотре новых вариантов Курсор Проигрывателя всегда останавливается на том же самом кадре, и в окне FCEUX и в Memory Watch отображаются новые значения интересующих характеристик. Если некоторые характеристики оказались лучше, а некоторые хуже, то требуется взвесить их в уме (или использовать обобщающую Lua-формулу) и решить, стал ли новый вариант в целом лучше, чем старый. Если решено, что новый вариант лучше, необходимо запомнить его характеристики вместо характеристик предыдущего наилучшего варианта. Однако, когда таких характеристик больше, чем одно число, рекомендуется не полагаться на память, а использовать Закладки. Пример: </span><a class="rvts28" href="NonlinearTASing.html#LuckManipulation">манипуляция удачей</a><span class="rvts22">.</span></p>
<p class="rvps10"><a name="CompareState-B"></a>
<span class="rvts22">B. Для участков средней и высокой сложности, а также для гигантских участков (размером с целый уровень игры) используйте Закладки, хранящие альтернативные ответвления мувика. Наилучший вариант сохраняется в один слот, а тестируемые варианты сохраняются в другой слот. После этого можно легко переключаться между этими слотами и сравнивать значения каждой существенной характеристики. Кроме того, можно наводить курсор мыши на соответствующие Закладки в Списке Закладок или Дереве ответвлений, чтобы видеть скриншоты состояний игры и сравнивать характеристики визуально. Также можно не сохранять текущий вариант в Закладку, а визуально сравнивать текущее изображение в окне FCEUX со скриншотом наилучшего варианта прохождения участка. Для отображения ячеек памяти на скриншотах рекомендуется использовать Lua-вывод, тогда окно Memory Watch не понадобится, и об оптимальности можно будит судить по скриншотам. Подробнее: </span><a class="rvts28" href="ProgramCustomization.html#DisplayBranchScreenshots">Настройка программы</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">После нахождения самого быстрого варианта прохождения ТАСер может дополнительно улучшить участок, добавив немного развлекательности в игровые события. Критерии оптимальности при этом могут быть самыми разными, но время прохождения участка должно оставаться без изменений.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>TAS Editor изнутри</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,32 +49,32 @@
<div id="topic_content">
<p><span class="rvts20">TAS Editor изнутри</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">В этом разделе описываются все идеи, заложенные в основу Тасэдитора, а также раскрываются некоторые детали итоговой реализации TAS Editor 1.0. Для получения полной информации об алгоритмах, используемых в Тасэдиторе, вы можете изучить его исходники на языке C++.</span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор является программой с открытым исходным кодом (open source). Он распространяется по лицензии </span><a class="rvts28" href="http://ru.wikipedia.org/wiki/MIT_License" target="_blank">MIT</a><span class="rvts22">, которая позволяет любому человеку как угодно распоряжаться исходным кодом. Выбор лицензии обусловлен желанием поощрить модификацию и портирование Тасэдитора на другие платформы.</span></p>
<p class="rvps10"><span class="rvts22">Загрузить исходные коды эмулятора FCEUX 2.1.6 со встроенным Тасэдитором вы можете из официального SVN-репозитория: </span><a class="rvts28" href="http://sourceforge.net/p/fceultra/code/" target="_blank">http://sourceforge.net/p/fceultra/code/</a></p>
<p class="rvps10"><span class="rvts22">Для работы с SVN вам потребуется SVN-клиент, например, </span><a class="rvts28" href="http://ru.wikipedia.org/wiki/Tortoise_SVN" target="_blank">TortoiseSVN</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Исходный код Тасэдитора сравнительно неплохо откомментирован, и для понимания большинства нюансов будет достаточно базовых навыков программирования на C++ под </span><span class="rvts22">Win32 API. Так как для автора этот проект был первым опытом создания серьёзных приложений, некоторые задачи могут быть решены недостаточно эффективно, однако при портировании рекомендуется сохранять архитектуру приложения, так как она содержит резерв для расширения в соответствии с авторской теорией ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts24" href="Ideas.html">Идеи</a></p>
<p class="rvps12"><span class="rvts25">Детальное описание идей, заложенных в Тасэдитор</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts24" href="Implementation.html">Реализация</a></p>
<p class="rvps12"><span class="rvts25">Архитектура программы</span></p>
<p class="rvps10"><a class="rvts24" href="Navigation.html"><br></a></p>
<p class="rvps10"><a class="rvts24" href="Navigation.html"><br/></a></p>
<p class="rvps10"><a class="rvts24" href="MistakeProofing.html">Защита от ошибок</a></p>
<p class="rvps12"><span class="rvts25">Список нюансов</span><span class="rvts22">, призванных улучшить взаимодействие пользователя с программой</span></p>
<p class="rvps10"><a class="rvts24" href="Operations.html"><br></a></p>
<p class="rvps10"><a class="rvts24" href="Operations.html"><br/></a></p>
<p class="rvps10"><a class="rvts24" href="FM3format.html">Формат FM3</a></p>
<p class="rvps12"><span class="rvts25">Спецификации файла проекта Тасэдитора</span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps12"><span class="rvts25"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Free Web Help generator</a></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps12"><span class="rvts25"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Full featured multi-format Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>4. Методология ТАСинга</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,141 +53,132 @@
<div id="topic_content">
<p><span class="rvts20">Методология ТАСинга</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Эта глава посвящена центральному занятию в ТАСинге созданию оптимального </span><span class="rvts22">Ввод</span><span class="rvts22">а на отдельно взятом участке мувика. Размер участка может быть любым, критерии и факторы оптимизации могут быть разными, но именно благодаря упорной ручной шлифовке </span><span class="rvts22">Ввод</span><span class="rvts22">а ТАСы выглядят так блестяще.</span></p>
<p class="rvps10"><span class="rvts22">Процесс создания наилучшего </span><span class="rvts22">Ввод</span><span class="rvts22">а на оптимизируемом участке можно представить в виде зацикленного процесса исправления ошибок в предыдущих версиях </span><span class="rvts22">Ввод</span><span class="rvts22">а на этом участке. М</span><span class="rvts22">ы будем называть ошибкой любую нереализованную возможность приблизить ТАС к поставленной цели (к самому быстрому спидрану или самому красивому прохождению). </span><span class="rvts26">Большинство ошибок успешно исправляются многократным осмотром и модификацией участка.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Чтобы исправить ошибку нужно:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">1.</span>
<span class="rvts22">Осознать факт ошибки.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">2.</span>
<span class="rvts22">Предположить способ решения.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">3.</span>
<span class="rvts22">Осуществить навигацию к месту исправления.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">4.</span>
<span class="rvts22">Внести изменения.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">5.</span>
<span class="rvts22">Оценить результат и подтвердить факт исправления ошибки.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Осознать факт ошибки.</span></li>
<li class="rvps10"><span class="rvts22">Предположить способ решения.</span></li>
<li class="rvps10"><span class="rvts22">Осуществить навигацию к месту исправления.</span></li>
<li class="rvps10"><span class="rvts22">Внести изменения.</span></li>
<li class="rvps10"><span class="rvts22">Оценить результат и подтвердить факт исправления ошибки.</span></li>
</ol>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">1. </span><span class="rvts22">Осознание ошибки при ТАСинге происходит либо во время просмотра мувика в режиме Read-Only, либо прямо во время Записи/редактирования </span><span class="rvts22">Ввод</span><span class="rvts22">а.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td height="15" style="border-color: #000000; border-style: solid;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">Зачастую ТАСер вместо обнаружения реальной ошибки только предполагает, что данный участок ещё можно улучшить. Всегда полезно усомниться в идеальности текущего результата и поэкспериментировать с Вводом порой действительно обнаруживаются нереализованные возможности.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">Зачастую ТАСер вместо обнаружения реальной ошибки только предполагает, что данный участок ещё можно улучшить. Всегда полезно усомниться в идеальности текущего результата и поэкспериментировать с Вводом порой действительно обнаруживаются нереализованные возможности.</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><a name="loop"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">2. </span><span class="rvts22">Способы решения либо очевидны сразу, либо находятся экспериментальным путём. В редких случаях требуются расчёты и сравнения. В правильно выбранных участках все факторы оптимальности находятся внутри участка. Информация из предыдущих или последующих участков требуется редко.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td height="15" style="border-color: #000000; border-style: solid;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">Иногда ТАСер исправляет одну ошибку, незаметно создавая другую. В этом случае процесс оптимизации может пойти в неправильном направлении. К счастью, в ТАСинге такие ситуации возникают редко, так как видеоигры гораздо нагляднее и примитивнее реальной жизни, поэтому игроку проще обнаружить все факторы и верный критерий оптимальности. Тасэдитор дополнительно облегчает этот процесс благодаря умной визуализации данных.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">Иногда ТАСер исправляет одну ошибку, незаметно создавая другую. В этом случае процесс оптимизации может пойти в неправильном направлении. К счастью, в ТАСинге такие ситуации возникают редко, так как видеоигры гораздо нагляднее и примитивнее реальной жизни, поэтому игроку проще обнаружить все факторы и верный критерий оптимальности. Тасэдитор дополнительно облегчает этот процесс благодаря умной визуализации данных.</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">3. </span><span class="rvts22">Возможность навигации к месту ошибки является главным отличием ТАСинга от обычных спидранов. Простые игроки тоже могут осознать ошибку и понять способ её исправления, но только ТАСеры всегда возвращаются назад для её коррекции.</span></p>
<p class="rvps10"><span class="rvts22">В традиционном методе ТАСинга навигация к месту ошибки может занимать довольно много времени (несколько секунд). В Тасэдиторе навигация к любому кадру участка занимает менее секунды.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td height="15" style="border-color: #000000; border-style: solid;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">Иногда место совершения ошибки находится на более раннем участке, а обнаруживается только на текущем. В этом случае нужно выявить участок совершения ошибки и отредактировать его согласно полученной информации от текущего участка. В традиционном методе ТАСинга можно просматривать и редактировать только один и тот же участок. В Тасэдиторе можно редактировать один участок, а просматривать другой.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">Иногда место совершения ошибки находится на более раннем участке, а обнаруживается только на текущем. В этом случае нужно выявить участок совершения ошибки и отредактировать его согласно полученной информации от текущего участка. В традиционном методе ТАСинга можно просматривать и редактировать только один и тот же участок. В Тасэдиторе можно редактировать один участок, а просматривать другой.</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">4. </span><span class="rvts22">Внесение изменений это воплощение мыслей ТАСера в жизнь. Чем меньше задержка между мыслью и её реализацией, тем лучше.</span></p>
<p class="rvps10"><span class="rvts22">В традиционном методе ТАСинга исправление ошибки длится дольше, так как помимо перезаписи ошибочных кадров требуется ещё перезаписать весь последующий </span><span class="rvts22">Ввод.</span><span class="rvts22"> В Тасэдиторе это обычно не требуется.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td height="15" style="border-color: #000000; border-style: solid;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">В действительности, любое изменение Ввода влечёт за собой изменения игрового процесса (поэтому-то Гринзона всегда усекается после кадра, где произошло изменение Ввода). Но в ряде случаев изменения игрового процесса носят незначительный характер, и старый Ввод по-прежнему синхронизируется с изменённым игровым процессом. В других случаях нужна небольшая модификация, но полная переработка Ввода почти никогда не требуется.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">В действительности, любое изменение Ввода влечёт за собой изменения игрового процесса (поэтому-то Гринзона всегда усекается после кадра, где произошло изменение Ввода). Но в ряде случаев изменения игрового процесса носят незначительный характер, и старый Ввод по-прежнему синхронизируется с изменённым игровым процессом. В других случаях нужна небольшая модификация, но полная переработка Ввода почти никогда не требуется.</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">5. </span><span class="rvts22">Чтобы увидеть результат, достаточно возобновить просмотр мувика с начала участка или прямо с места исправления ошибки, не перепроверяя предшествующие участки, так как исправление ошибки влияет только на последующие события.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td height="15" style="border-color: #000000; border-style: solid;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">Если вы записываете не спидран, а развлекательный мувик, то после исправления ошибки (например, перемещение спрайта по более плавной траектории) всё-таки желательно просмотреть предшествующие события, чтобы это исправление удачно смотрелось не только в контексте своего участка, но и в общей последовательности игровых событий.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts46">Примечание: </span><span class="rvts47">Если вы записываете не спидран, а развлекательный мувик, то после исправления ошибки (например, перемещение спрайта по более плавной траектории) всё-таки желательно просмотреть предшествующие события, чтобы это исправление удачно смотрелось не только в контексте своего участка, но и в общей последовательности игровых событий.</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Досмотреть участок требуется до конца, то есть до момента, когда в игре происходит целевое событие, и к нему можно однозначно применить критерий оптимальности. </span><span class="rvts22">После этого ошибка либо считается исправленной/несуществующей, либо требуется вернуться к </span><a class="rvts28" href="TASingMethodology.html#loop">пункту 2</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="linear-tasing"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">До Тасэдитора ошибки в мувике исправлялись с помощью создания и загрузки сэйвов. Если вы не знакомы с этим методом ТАСинга, вот его суть:</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Игра всё время стоит на паузе. Пауза отпускается только при просмотре готовых участков.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">ТАСер поочерёдно впечатывает </span><span class="rvts22">Ввод</span><span class="rvts22"> в кадры, на которые указывает Курсор Проигрывателя. Он видит результат совершённого </span><span class="rvts22">Ввод</span><span class="rvts22">а через 1 кадр после впечатывания (иногда через несколько кадров). Опытный ТАСер после каждого сложновоспроизводимого движения создаёт сэйв, чтобы потом иметь возможность вернуться назад и не переписывать весь участок с начала.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Чтобы исправить ошибку, ТАСер возвращается к месту ошибки и переписывает весь </span><span class="rvts22">Ввод</span><span class="rvts22">, начиная с кадра, требующего изменения. Если на этом кадре был сделан сэйв, можно сразу загрузить этот сэйв в режиме Read+Write и начать исправление. Если же имеются только сэйвы перед этим кадром, существует два варианта навигации. Первый вариант: загрузить предшествующий сэйв в режиме Read-Only и покадрово досмотреть мувик до нужного кадра, затем вернуться в режим Записи, тем самым сохранив старый Ввод на промежутке между кадром сэйва и кадром ошибки. Второй вариант: не переключаясь из режима Записи, загрузить ближайший сэйв и по памяти повторить старый Ввод, дойдя до кадра ошибки. Второй вариант используется чаще, потому что после сэйва обычно располагается легковоспроизводимый Ввод (например, простое зажатие </span><span class="rvts32">R + B</span><span class="rvts22">). Опытный ТАСер на всякий случай сразу создаёт на кадре ошибки сэйв, чтобы в следующий раз быстро возвращаться прямо к кадру, не тратя время на навигацию. Такая предусмотрительность имеет смысл, потому что ошибка редко исправляется с первой попытки, обычно требуется многократно переписывать один и тот же кусочек </span><span class="rvts22">Ввод</span><span class="rvts22">а, начиная примерно с одного и того же кадра.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Неудобства метода наглядно проявляются, когда нужно увидеть отдалённый результат </span><span class="rvts22">Ввод</span><span class="rvts22">а (например, кнопка выбора была нажата сейчас, а шарик рулетки остановится только через несколько секунд). В таком случае ТАСер делает сэйв перед началом </span><span class="rvts22">Ввод</span><span class="rvts22">а, записывает решающий </span><span class="rvts22">Ввод</span><span class="rvts22"> и делает сэйв после него, а затем отпускает паузу и наспех проходит игру до появления результата. При удовлетворительном результате ТАСер загружает сэйв, идущий после решающего Ввода, и покадрово записывает оптимальное прохождение, уже будучи уверенным в успешном исходе. При неудовлетворительном результате он загружает начальный сэйв, меняет решающий </span><span class="rvts22">Ввод</span><span class="rvts22"> и повторяет все действия снова (создаёт сэйв на конец </span><span class="rvts22">Ввод</span><span class="rvts22">а, отключает паузу и ждёт результата). И так может продолжаться довольно долго, особенно если для просмотра отдалённого результата требуется не просто ждать, а ещё и вводить несущественные для результата нажатия.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Чтобы скопировать старый </span><span class="rvts22">Ввод</span><span class="rvts22"> (например, разгон Марио в начале каждого уровня), ТАСер либо зазубривает комбинацию кнопок и каждый раз вбивает её заново, либо копирует кнопочную последовательность с помощью нескольких прыжков (загрузок сэйвов) между местом-источником и местом-приёмником. Игра посылается то на сэйв предыдущего </span><span class="rvts22">Ввод</span><span class="rvts22">а (посмотреть нажатия в режиме Read-Only и запомнить парочку в уме), то на сэйв текущего места записи (переключиться на Read+Write и выложить запомненные нажатия). Если после каждого прыжка пододвигать тот и другой сэйв на пару кадров вперёд, навигация между источником и приёмником </span><span class="rvts22">Ввод</span><span class="rvts22">а будет не очень утомительной. Ну а когда требуется скопировать длинную последовательность нажатий, используется внешний редактор </span><span class="rvts22">Ввод</span><span class="rvts22">а с функциями копипаста. Но переключение между разными программами сильно отвлекает ТАСера, поэтому зачастую проще скопировать </span><span class="rvts22">Ввод</span><span class="rvts22"> вручную.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Чтобы посмотреть весь записанный уровень, ТАСер отключает Запись и загружает сэйв, поставленный в начале уровня (обычно для этого используется редкий слот на клавише </span><span class="rvts27">F10</span><span class="rvts22">). Затем он отпускает паузу и смотрит прохождение, как обычный зритель. После окончания просмотра ТАСер возвращается точно к последнему записанному кадру, загрузив его сэйв (обычно это наиболее часто используемый слот, </span><span class="rvts27">F1</span><span class="rvts22">), и начинает записывать новый участок.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Таким образом, большинство слотов (из 10 имеющихся) используется для навигации между различными моментами игры. Используя термины Тасэдитора для навигации Курсором Проигрывателя по мувику. В особо напряжённых ситуациях десяти слотов может и не хватить для быстрой телепортации между всеми интересующими местами, но обычно хватает 5-7 штук, которыми опытный ТАСер жонглирует с поразительной скоростью.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Парочка оставшихся слотов обычно используется для хранения альтернативных стратегий прохождения. Когда ТАСер заранее не знает, какой из двух вариантов прохождения уровня окажется лучше, он сначала записывает первый вариант, делает сэйв на окончание уровня в отдельный слот, а затем записывает второй вариант, и делает сэйв на окончание уровня в соседний слот. Затем попеременно загружает то один, то другой слот (или поочерёдно просматривает оба варианта мувика) и, выбрав лучший из них, продолжает запись, начиная с конца выбранного варианта, а другой вариант выбрасывается.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Игра всё время стоит на паузе. Пауза отпускается только при просмотре готовых участков.</span></li>
<li class="rvps10"><span class="rvts22">ТАСер поочерёдно впечатывает </span><span class="rvts22">Ввод</span><span class="rvts22"> в кадры, на которые указывает Курсор Проигрывателя. Он видит результат совершённого </span><span class="rvts22">Ввод</span><span class="rvts22">а через 1 кадр после впечатывания (иногда через несколько кадров). Опытный ТАСер после каждого сложновоспроизводимого движения создаёт сэйв, чтобы потом иметь возможность вернуться назад и не переписывать весь участок с начала.</span></li>
<li class="rvps10"><span class="rvts22">Чтобы исправить ошибку, ТАСер возвращается к месту ошибки и переписывает весь </span><span class="rvts22">Ввод</span><span class="rvts22">, начиная с кадра, требующего изменения. Если на этом кадре был сделан сэйв, можно сразу загрузить этот сэйв в режиме Read+Write и начать исправление. Если же имеются только сэйвы перед этим кадром, существует два варианта навигации. Первый вариант: загрузить предшествующий сэйв в режиме Read-Only и покадрово досмотреть мувик до нужного кадра, затем вернуться в режим Записи, тем самым сохранив старый Ввод на промежутке между кадром сэйва и кадром ошибки. Второй вариант: не переключаясь из режима Записи, загрузить ближайший сэйв и по памяти повторить старый Ввод, дойдя до кадра ошибки. Второй вариант используется чаще, потому что после сэйва обычно располагается легковоспроизводимый Ввод (например, простое зажатие </span><span class="rvts32">R + B</span><span class="rvts22">). Опытный ТАСер на всякий случай сразу создаёт на кадре ошибки сэйв, чтобы в следующий раз быстро возвращаться прямо к кадру, не тратя время на навигацию. Такая предусмотрительность имеет смысл, потому что ошибка редко исправляется с первой попытки, обычно требуется многократно переписывать один и тот же кусочек </span><span class="rvts22">Ввод</span><span class="rvts22">а, начиная примерно с одного и того же кадра.</span></li>
<li class="rvps10"><span class="rvts22">Неудобства метода наглядно проявляются, когда нужно увидеть отдалённый результат </span><span class="rvts22">Ввод</span><span class="rvts22">а (например, кнопка выбора была нажата сейчас, а шарик рулетки остановится только через несколько секунд). В таком случае ТАСер делает сэйв перед началом </span><span class="rvts22">Ввод</span><span class="rvts22">а, записывает решающий </span><span class="rvts22">Ввод</span><span class="rvts22"> и делает сэйв после него, а затем отпускает паузу и наспех проходит игру до появления результата. При удовлетворительном результате ТАСер загружает сэйв, идущий после решающего Ввода, и покадрово записывает оптимальное прохождение, уже будучи уверенным в успешном исходе. При неудовлетворительном результате он загружает начальный сэйв, меняет решающий </span><span class="rvts22">Ввод</span><span class="rvts22"> и повторяет все действия снова (создаёт сэйв на конец </span><span class="rvts22">Ввод</span><span class="rvts22">а, отключает паузу и ждёт результата). И так может продолжаться довольно долго, особенно если для просмотра отдалённого результата требуется не просто ждать, а ещё и вводить несущественные для результата нажатия.</span></li>
<li class="rvps10"><span class="rvts22">Чтобы скопировать старый </span><span class="rvts22">Ввод</span><span class="rvts22"> (например, разгон Марио в начале каждого уровня), ТАСер либо зазубривает комбинацию кнопок и каждый раз вбивает её заново, либо копирует кнопочную последовательность с помощью нескольких прыжков (загрузок сэйвов) между местом-источником и местом-приёмником. Игра посылается то на сэйв предыдущего </span><span class="rvts22">Ввод</span><span class="rvts22">а (посмотреть нажатия в режиме Read-Only и запомнить парочку в уме), то на сэйв текущего места записи (переключиться на Read+Write и выложить запомненные нажатия). Если после каждого прыжка пододвигать тот и другой сэйв на пару кадров вперёд, навигация между источником и приёмником </span><span class="rvts22">Ввод</span><span class="rvts22">а будет не очень утомительной. Ну а когда требуется скопировать длинную последовательность нажатий, используется внешний редактор </span><span class="rvts22">Ввод</span><span class="rvts22">а с функциями копипаста. Но переключение между разными программами сильно отвлекает ТАСера, поэтому зачастую проще скопировать </span><span class="rvts22">Ввод</span><span class="rvts22"> вручную.</span></li>
<li class="rvps10"><span class="rvts22">Чтобы посмотреть весь записанный уровень, ТАСер отключает Запись и загружает сэйв, поставленный в начале уровня (обычно для этого используется редкий слот на клавише </span><span class="rvts27">F10</span><span class="rvts22">). Затем он отпускает паузу и смотрит прохождение, как обычный зритель. После окончания просмотра ТАСер возвращается точно к последнему записанному кадру, загрузив его сэйв (обычно это наиболее часто используемый слот, </span><span class="rvts27">F1</span><span class="rvts22">), и начинает записывать новый участок.</span></li>
<li class="rvps10"><span class="rvts22">Таким образом, большинство слотов (из 10 имеющихся) используется для навигации между различными моментами игры. Используя термины Тасэдитора для навигации Курсором Проигрывателя по мувику. В особо напряжённых ситуациях десяти слотов может и не хватить для быстрой телепортации между всеми интересующими местами, но обычно хватает 5-7 штук, которыми опытный ТАСер жонглирует с поразительной скоростью.</span></li>
<li class="rvps10"><span class="rvts22">Парочка оставшихся слотов обычно используется для хранения альтернативных стратегий прохождения. Когда ТАСер заранее не знает, какой из двух вариантов прохождения уровня окажется лучше, он сначала записывает первый вариант, делает сэйв на окончание уровня в отдельный слот, а затем записывает второй вариант, и делает сэйв на окончание уровня в соседний слот. Затем попеременно загружает то один, то другой слот (или поочерёдно просматривает оба варианта мувика) и, выбрав лучший из них, продолжает запись, начиная с конца выбранного варианта, а другой вариант выбрасывается.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Как видите, почти всё в традиционном методе ТАСинга делается благодаря сэйвам. </span><span class="rvts22">В Тасэдиторе же сэйвы (точнее, пришедшие на их место Закладки) не играют основную роль. Они здесь используются в основном для хранения альтернативных стратегий прохождения, а навигация Курсором Проигрывателя осуществляется либо с помощью перетаскивания, либо с помощью колеса мыши.</span></p>
<p class="rvps10"><span class="rvts22">Более того, при редактировании Ввода Тасэдитор делает упор на навигацию без Курсора Проигрывателя. Чтобы исправить ошибку, не обязательно возвращать саму игру к кадру с ошибкой, можно пролистать Piano Roll к этому месту и изменить </span><span class="rvts22">Ввод</span><span class="rvts22"> мышкой.</span></p>
<p class="rvps10"><span class="rvts22">Так как вместо Записи в Тасэдиторе эффективнее использовать редактирование, отпадает необходимость постоянно переключать режимы. Теперь эмулятор всё время находится в режиме Read-Only.</span></p>
<p class="rvps10"><span class="rvts22">Игра по-прежнему всё время стоит на паузе, но ТАСер теперь видит результат своего </span><span class="rvts22">Ввод</span><span class="rvts22">а не всегда, а только когда пожелает. Поначалу это может показаться неудобством (отсутствует привычная отдача от вводимых нажатий), но на самом деле в этом скрывается большой плюс Тасэдитора независимость пользователя от игры. Вместо механизма стандартной геймерской отдачи задействуются другие механизмы передачи информации. ТАСер всё равно получает все необходимые сведения о том, как игра воспринимает его </span><span class="rvts22">Ввод</span><span class="rvts22">, но информационный поток не вливается в него постоянно, а выдаётся по команде.</span></p>
<p class="rvps10"><span class="rvts22">Ну а при необходимости можно получить в Тасэдиторе многократно усиленную "отдачу" для этого нужно использовать третий метод ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Рассмотрим преимущества и недостатки всех трёх методов по порядку.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Три метода ТАСинга в Тасэдиторе:</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: -20px; padding-left: 20px; margin-left: 30px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<a class="rvts48" href="TraditionalTASing.html">Традиционный метод</a></p>
<p class="rvps15" style="text-indent: -15px; padding-left: 15px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">навигация по участку Курсором Проигрывателя через прыжки по Закладкам</span></p>
<p class="rvps15" style="text-indent: -15px; padding-left: 15px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">запись последовательностей с клавиатуры/джойстика</span></p>
<p class="rvps15" style="text-indent: -15px; padding-left: 15px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">автоматический просмотр промежуточных результатов Ввода</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: -20px; padding-left: 20px; margin-left: 30px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<a class="rvts49" href="NonlinearTASing.html">Нелинейный метод</a></p>
<p class="rvps15" style="text-indent: -15px; padding-left: 15px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">навигация </span><span class="rvts22">по участку </span><span class="rvts22">мышкой и Курсором Выделения</span></p>
<p class="rvps15" style="text-indent: -15px; padding-left: 15px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">редактирование </span><span class="rvts22">Ввод</span><span class="rvts22">а мышкой/клавиатурой/джойстиком</span></p>
<p class="rvps15" style="text-indent: -15px; padding-left: 15px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">по команде пользователя: просмотр промежуточных или итоговых результатов </span><span class="rvts22">Ввода</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: -20px; padding-left: 20px; margin-left: 30px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<a class="rvts50" href="SemiautomaticTASing.html">Полуавтоматический метод</a></p>
<p class="rvps15" style="text-indent: -15px; padding-left: 15px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">навигация </span><span class="rvts22">по участку </span><span class="rvts22">мышкой и Курсором Выделения</span></p>
<p class="rvps15" style="text-indent: -15px; padding-left: 15px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">редактирование </span><span class="rvts22">Ввод</span><span class="rvts22">а мышкой/клавиатурой/джойстиком</span></p>
<p class="rvps15" style="text-indent: -15px; padding-left: 15px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">автоматический просмотр промежуточных или итоговых результатов </span><span class="rvts22">Ввода</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 50px; list-style-position: outside;">
<li class="rvps15" style="text-indent: 0px"><a class="rvts48" href="TraditionalTASing.html">Традиционный метод</a></li>
</ul>
<ul style="text-indent: 0px; margin-left: 55px; list-style-position: outside;">
<li class="rvps15" style="text-indent: 0px"><span class="rvts22">навигация по участку Курсором Проигрывателя через прыжки по Закладкам</span></li>
<li class="rvps15" style="text-indent: 0px"><span class="rvts22">запись последовательностей с клавиатуры/джойстика</span></li>
<li class="rvps15" style="text-indent: 0px"><span class="rvts22">автоматический просмотр промежуточных результатов Ввода</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 50px; list-style-position: outside;">
<li class="rvps15" style="text-indent: 0px"><a class="rvts49" href="NonlinearTASing.html">Нелинейный метод</a></li>
</ul>
<ul style="text-indent: 0px; margin-left: 55px; list-style-position: outside;">
<li class="rvps15" style="text-indent: 0px"><span class="rvts22">навигация </span><span class="rvts22">по участку </span><span class="rvts22">мышкой и Курсором Выделения</span></li>
<li class="rvps15" style="text-indent: 0px"><span class="rvts22">редактирование </span><span class="rvts22">Ввод</span><span class="rvts22">а мышкой/клавиатурой/джойстиком</span></li>
<li class="rvps15" style="text-indent: 0px"><span class="rvts22">по команде пользователя: просмотр промежуточных или итоговых результатов </span><span class="rvts22">Ввода</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 50px; list-style-position: outside;">
<li class="rvps15" style="text-indent: 0px"><a class="rvts50" href="SemiautomaticTASing.html">Полуавтоматический метод</a></li>
</ul>
<ul style="text-indent: 0px; margin-left: 55px; list-style-position: outside;">
<li class="rvps15" style="text-indent: 0px"><span class="rvts22">навигация </span><span class="rvts22">по участку </span><span class="rvts22">мышкой и Курсором Выделения</span></li>
<li class="rvps15" style="text-indent: 0px"><span class="rvts22">редактирование </span><span class="rvts22">Ввод</span><span class="rvts22">а мышкой/клавиатурой/джойстиком</span></li>
<li class="rvps15" style="text-indent: 0px"><span class="rvts22">автоматический просмотр промежуточных или итоговых результатов </span><span class="rvts22">Ввода</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>3. Процесс ТАСинга</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,8 +53,8 @@
<div id="topic_content">
<p><span class="rvts20">Процесс ТАСинга</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Суть ТАСинга в стремлении к абсолютному идеалу. Применив научный подход к прохождению видеоигр, можно увидеть в них не просто мимолётное развлечение, а сложную и интересную оптимизационную задачу.</span></p>
<p class="rvps10"><span class="rvts22">Для решения комплексных задач требуется проявлять не только изобретательность, но и методичность.</span></p>
<p class="rvps10"><span class="rvts22">Чтобы создать идеальное (или близкое к идеалу) прохождение игры, нужно сначала записать неидеальное прохождение, а затем заняться последовательным улучшением его отдельно взятых частей. Когда каждый фрагмент мувика является идеальным, можно говорить об идеальности всего ТАСа.</span></p>
@ -64,36 +64,36 @@
<p class="rvps10"><span class="rvts22">Конечно, это утрированная картина, ведь помимо непосредственно обработки мувика ТАСер ещё занимается предварительными исследованиями и экспериментами с игрой (для выявления скрытых факторов). Но это уже не имеет отношения к Тасэдитору.</span></p>
<p class="rvps10"><span class="rvts22">Умение интуитивно выбирать участки отличает опытного ТАСера от новичка. Многие ТАСеры даже не задумываются, чем они руководствуются, когда спонтанно акцентируют своё внимание на некоем участке </span><span class="rvts22">Ввод</span><span class="rvts22">а, подсознательно ограничивая начало и конец текущего этапа работ. Некоторые даже полагают, что просто записывают мувик кадр за кадром подряд, не замечая, что в основном работают в рамках "окна" размером в 20-200 кадров, и это окно передвигается вперёд по мувику не плавно, а прыжками (конец предыдущего участка зачастую становится началом следующего).</span></p>
<p class="rvps10"><span class="rvts22">Сейчас мы попробуем проанализировать этот навык, чтобы научиться осмысленнно определять границы текущего участка в каждом конкретном случае. А потом уже практика ТАСинга научит вас определять их машинально.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Правильно выбранный участок (подзадача) должен давать ТАСеру чёткую непротиворечивую </span><span class="rvts26">цель</span><span class="rvts22"> и простые однозначные </span><span class="rvts26">средства</span><span class="rvts22"> для её достижения.</span></p>
<p class="rvps10"><span class="rvts26">Цель</span><span class="rvts22"> прохождения любого участка игры это достижение определённого события. Например, целью прохождения всей игры является появление на экране надписи THE END. Целью прохождения одного уровня может быть событие "изменился счётчик уровней в оперативной памяти приставки" или "потемнел экран в конце текущего уровня". А целью небольшого участка может быть даже просто событие типа "персонаж приземлился по ту сторону ямы". Эти промежуточные цели определяются ситуацией в игре на данном участке мувика.</span></p>
<p class="rvps10"><span class="rvts22">Исходя из цели ТАСер формулирует в уме </span><span class="rvts26">критерий оптимальности</span><span class="rvts22"> правило, по которому он сможет сравнивать любые два способа прохождения участка игры. При ТАСинге недостаточно просто достигнуть цели, нужно перепробовать множество разных вариантов её достижения и выбрать из них самый лучший, используя некий критерий. Например, в спидране обычно лучшим вариантом прохождения участка считается тот вариант, в котором целевое событие наступает раньше. То есть, если в первом варианте прохождения участка целевое событие начинается на кадре 350, а во втором на кадре 340, то второй вариант лучше первого, и в финальном мувике должен остаться именно он.</span></p>
<p class="rvps10"><span class="rvts26">Средств</span><span class="rvts22"> достижения целевого события у игрока очень много. Теоретически, любой аспект геймплея (в том числе не учтённый разработчиками) может помочь или помешать ТАСеру. Чтобы не запутаться в этом многообразии, надо рассматривать все игровые возможности в виде </span><span class="rvts26">факторов оптимальности</span><span class="rvts22">. Фактор оптимальности - это любой игровой аспект, который напрямую влияет на оптимальность прохождения участка.</span></p>
<p class="rvps10"><span class="rvts26">Средств</span><span class="rvts22"> достижения целевого события у игрока очень много. Теоретически, любой аспект геймплея (в том числе не учтённый разработчиками) может помочь или помешать ТАСеру. Чтобы не запутаться в этом многообразии, надо рассматривать все игровые возможности в виде </span><span class="rvts26">факторов оптимальности</span><span class="rvts22">. Фактор оптимальности это любой игровой аспект, который напрямую влияет на оптимальность прохождения участка.</span></p>
<p class="rvps10"><span class="rvts22">При такой постановке вопроса сразу отпадает множество неактуальных на данном участке возможностей. Например, обычный игрок может переждать врага в укрытии, но в спидране такая возможность даже не рассматривается. В результате у ТАСера остаётся ограниченный набор полезных действий и игровых индикаторов, за которыми требуется следить. И чем меньше участок, тем более ограничен и понятен этот набор, а значит, тем легче перебрать сочетания факторов и найти идеальную комбинацию действий.</span></p>
<p class="rvps10"><span class="rvts22">С другой стороны, чем меньше участок, тем менее его цель пересекается с финальной целью ТАСа. Финальная цель у ТАСера одна сделать идеальное прохождение, например, самое быстрое в мире (то есть счётчик кадров в момент окончания мувика должен иметь минимально возможное значение). Но в рамках каждого конкретного участка цель может быть другой, иногда даже противоположной по звучанию (например, продержаться как можно дольше в бонус-уровне, за счёт чего потом будет сэкономлено время в другом месте). Поэтому для совсем мелких участков критерий оптимальности обычно не применяется, и эти микро-участки оцениваются только в составе более крупного участка.</span></p>
<p class="rvps10"><span class="rvts22">Например, если во время перепрыгивания ямы вам необходимо отстреливаться от врагов, в принципе, можно рассматривать каждую выпущенную пулю в виде подучастка (чтобы изолировать и обдумать такие факторы как "таймер перезарядки", "максимум 3 пули на экране" и т.д.). Но сравнивать потом нужно будет именно варианты перепрыгивания через яму, в составе которых находятся подучастки с выстрелами. Даже если в первом варианте перепрыгивания (который заканчивается на кадре 350) вы подстрелили двух врагов, а во втором (заканчивается на 340) застрелили только одного, выбирать следует второй участок, так как его критерий оптимальности более соответствует финальной цели спидрана.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Возьмём пример со слишком большим участком. В спидране Super Mario Bros требуется максимально быстро добраться от начала до конца World 1-1, то есть нужно максимизировать координату X персонажа, который перемещается слева направо. В начале уровня координата Марио равна нулю, а в конце уровня, допустим, равна тысяче. С помощью кнопок джойстика можно по-разному влиять на эту координату.</span></p>
<p class="rvps10"><span class="rvts22">Если в качестве оптимизируемого участка выбрать весь уровень от момента с </span><span class="rvts37">X = 0</span><span class="rvts22"> до события </span><span class="rvts37">X = 1000</span><span class="rvts22">, то у нас появляется однозначный критерий оптимальности при записи и оценке вариантов прохождения участка самым лучшим вариантом будет мувик с минимальным значением счётчика кадров на момент </span><span class="rvts37">X = 1000</span><span class="rvts22">. Итак, у нас есть критерий, но нет факторов. Как именно нужно нажимать кнопки, чтобы получить </span><span class="rvts37">X = 1000</span><span class="rvts22"> за наименьшее количество кадров? Здесь человек подключает логику и интуицию. При нажатии кнопки </span><span class="rvts32">R</span><span class="rvts22"> координата X обычно возрастает, а при нажатии </span><span class="rvts32">L</span><span class="rvts22"> убывает. И вот, самое очевидное решение зажать кнопку </span><span class="rvts32">R</span><span class="rvts22"> и узнать, через сколько кадров значение X дорастёт до тысячи. Однако при просмотре такого варианта в эмуляторе оказывается, что Марио упирается в препятствия, и координата X не растёт, хотя кнопка </span><span class="rvts32">R</span><span class="rvts22"> зажата. Тем самым обнаруживается новый фактор необходимость перепрыгивать препятствия и ямы. В результате применения кнопки </span><span class="rvts32">A</span><span class="rvts22"> персонаж вскоре достигает момента с </span><span class="rvts37">X = 1000</span><span class="rvts22">, и при этом по критерию оптимальности сразу отсеялись все варианты прохождения, где нажатия кнопки </span><span class="rvts32">A</span><span class="rvts22"> были менее своевременными (например, там, где Марио спотыкался о края труб, счётчик кадров в конце участка был больше).</span></p>
<p class="rvps10"><span class="rvts22">Тут игрок может посчитать, что учёл все факторы оптимальности, и что участок пройден идеально. Однако это не так. В Super Mario Bros довольно сложный физический движок. На координату X влияет текущее значение скорости, а на значение скорости влияет ускорение. На ускорение влияет кнопка </span><span class="rvts32">B</span><span class="rvts22"> и положение Марио в воздухе или на земле. Также существуют трубы-телепорты и полезные баги игры, вроде "flagpole glitch" и т.д. А в рабочей памяти человека может одновременно храниться лишь </span><a class="rvts28" href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_%D1%81%D0%B5%D0%BC%D1%8C_%D0%BF%D0%BB%D1%8E%D1%81-%D0%BC%D0%B8%D0%BD%D1%83%D1%81_%D0%B4%D0%B2%D0%B0" target="_blank">около 7 объектов</a><span class="rvts22">, поэтому часть факторов обязательно ускользнёт от вас во время редактирования </span><span class="rvts22">Ввод</span><span class="rvts22">а. Необходимо уменьшить участок до масштаба, при котором факторы проявляются по отдельности, или хотя бы небольшой группой.</span></p>
<p class="rvps10"><span class="rvts22">Сосредоточимся на участке от </span><span class="rvts37">X = 0</span><span class="rvts22"> до </span><span class="rvts37">X = 50</span><span class="rvts22">, критерий оптимальности тот же.</span><span class="rvts22"> Здесь уже становится заметно, что в первой половине участка Марио почему-то бежит медленнее, чем во второй, причём во второй половине он бежит всё время с одинаковой скоростью, которую можно принять за максимально возможную. Таким образом проявляется фактор ускорения, и ТАСер начинает думать, как бы на него повлиять. Благодаря экспериментам с прыжками он может обнаружить различие значений ускорения в воздухе и на земле. Таким образом проявляется ещё один фактор.</span></p>
<p class="rvps10"><span class="rvts22"> В результате по текущему критерию оптимальности к моменту с </span><span class="rvts37">X = 50</span><span class="rvts22"> быстрее приходит тот вариант мувика, где ТАСер в начале уровня создал сложную комбинацию из нажатий и отпусканий кнопок </span><span class="rvts32">R</span><span class="rvts22">, </span><span class="rvts32">B</span><span class="rvts22"> и </span><span class="rvts32">A</span><span class="rvts22">, а не просто зажал </span><span class="rvts32">R</span><span class="rvts22"> и </span><span class="rvts32">B</span><span class="rvts22">. И это прохождение уже гораздо ближе к идеалу, после этого можно на какое-то время успокоиться и взяться за следующий участок (от </span><span class="rvts37">X = 50</span><span class="rvts22"> до </span><span class="rvts37">первого препятствия)</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Теперь рассмотрим другую крайность ТАСер выбирает очень маленький участок и ограничивается оптимизацией только заданного набора кадров. На таком масштабе хорошо видны цели и средства, весь участок целиком умещается в окне Piano Roll, работать одно удовольствие. Однако здесь возможна ситуация, когда мы получаем неверный критерий оптимальности, который противоречит финальной цели ТАСа.</span></p>
<p class="rvps10"><span class="rvts22">Например, если в SMB увлечься максимизацией скорости и ускорения в промежутках между каждой следующей сотней пикселей, можно забыть про трубу, которая сокращает путь к концу уровня. Ведь остановка и ныряние в трубу сбрасывают значение скорости в ноль, что противоречит плану по максимизации фактора "скорость". В данном случае участок был выбран неверно, и, как следствие, появился неверный критерий оптимальности ("на момент </span><span class="rvts37">X = 200</span><span class="rvts22"> счётчик кадров должен быть минимален"). Нужно было определить концом участка момент ныряния в трубу. Такие ошибки порой замечаются при повторном просмотре готового мувика на свежую голову, но иногда ошибка менее очевидна и обнаруживается только после опубликования.</span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/smb-segments.gif"></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/smb-segments.gif"/></p>
<p class="rvps10"><span class="rvts22">Например, в том же SMB после ныряния в трубу (мир 1-1) нужно добраться до выхода, находящегося справа. Казалось бы, требуется с первых мгновений начинать максимизацию скорости. Однако тесты показали, что в течение первой дюжины кадров правильнее всего будет зажать кнопку </span><span class="rvts32">L</span><span class="rvts22">, а не </span><span class="rvts32">R</span><span class="rvts22">, чтобы сначала приземлиться немного левее от стенки, через которую требуется перепрыгнуть. Если сразу зажать </span><span class="rvts32">R</span><span class="rvts22">, то Марио приземлится вплотную перед стенкой, и ему придётся прыгать вертикально вверх, &nbsp;обнулив всю набранную скорость.</span></p>
<p class="rvps10"><span class="rvts22">Таким образом, если вы выберете в качестве оптимизируемого участка промежуток из дюжины первых кадров (от </span><span class="rvts37">появления Марио</span><span class="rvts22"> до </span><span class="rvts37">приземления</span><span class="rvts22">) , критерий оптимальности подскажет вам неверную последовательность кнопок (по результатам тестов выиграет вариант с зажатием </span><span class="rvts32">R</span><span class="rvts22"> вместо </span><span class="rvts32">L</span><span class="rvts22">). Здесь нужно выбирать участок от первого кадра появления Марио до момента перепрыгивания угла стенки.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Конкретные размеры участка сильно различаются не только от игры к игре, но и от этапа к этапу в одной и той же игре. Опытные ТАСеры используют индивидуальный подход к каждому следующему участку (хоть и не задумываются об этом слишком долго). Выбирать следующий участок по тому же принципу, что и предыдущий плохая идея, это срабатывает только в очень однообразных играх.</span></p>
<p class="rvps10"><span class="rvts22">В принципе, можно измерять участок в кадрах (например, ставить цель максимизировать координату X на момент истечения первой сотни кадров мувика), но логичнее ассоциировать конец участка с каким-нибудь мелким рубежом в игре (например, удачное преодоление ловушки или убийство очередного врага) тогда сама цель будет подсказывать вам средства для её достижения. Задача типа "взять цветок максимально быстро" звучит гораздо понятнее, чем задача "на кадр 300 быть максимально близко к цветку".</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В подавляющем большинстве видеоигр игровой процесс делится на "комнаты", "волны врагов" и "последовательности ловушек", между которыми обязательно присутствуют краткие моменты расслабления. Даже в играх со скроллингом и свободным исследованием мира дизайн уровней всегда таков, что можно выделить насыщенные участки и промежутки отдыха между ними. Дело в том, что </span><span class="rvts26">дизайнеры тоже структурируют задачу игрока на подзадачи</span><span class="rvts22">, так что в ряде случаев ТАСер может воспользоваться заготовленным разбиением. Главное, не забывать его критически оценивать и при необходимости доразбивать на более мелкие подучастки (впрочем, это дробление произойдёт само собой в процессе редактирования Ввода большого участка).</span></p>
<p class="rvps10"><span class="rvts22">Это можно сравнить с тем, как писатели разбивают книгу на главы (уровни игры), а главы на абзацы и предложения (участки). Простой читатель (игрок) довольствуется авторским разбиением для удобства чтения и впитывания авторского замысла. Но литературному критику (ТАСеру) необходимо уметь читать между строк, разбивая предложения по своему разумению.</span></p>
<p class="rvps10"><span class="rvts22">Например, в Super Mario Bros между каждой группой врагов есть относительно спокойный промежуток уровня, на котором не требуется особое мастерство управления, его можно бездумно пробежать или пропрыгать, зажав </span><span class="rvts32">Вправо </span><span class="rvts22">(подразумевается, что Марио уже давно разогнался до максимальной скорости). Идеальный ТАС в такие моменты почти не будет отличаться от неидеального прохождения. Эти моменты очень хорошо подходят в качестве промежуточных целей если обозначить здесь конец участка, то критерий его оптимальности не будет противоречить финальной цели ТАСа. И обычно эти моменты чередуются достаточно часто, чтобы полученный между ними участок был небольшим (одна-две сотни кадров), ну или потребуется разбиение его на два-три рабочих участка.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Разделение ТАСа на участки существовало всегда, но Тасэдитор делает этот процесс более осмысленным и понятным для новичка. В Тасэдиторе вы можете визуально отметить начало и конец любого участка с помощью Маркеров или Закладок.</span></p>
<p class="rvps10"><span class="rvts22">При просмотре тестового прохождения можно легко выбрать кадр начала участка момент в игре, когда все предшествующие факторы можно игнорировать. Так, например, в начале каждого уровня начинается очередной участок, потому что все факторы, действовашие на последнем участке предыдущего уровня (такие как счётчик жизней босса), утратили свою актуальность, уступив место новым факторам. Поэтому в начале каждого уровня имеет смысл ставить Маркер или Закладку, обозначив не только начало уровня, но и начало текущего рабочего участка. Благодаря визуальной отметке вы не будете отвлекаться на соседний Ввод при шлифовке участка и не потратите время на анализ устаревших факторов и тестирование бесполезных вариантов.</span></p>
<p class="rvps10"><a name="EndOfSegment"></a>
@ -102,11 +102,11 @@
<p class="rvps10"><span class="rvts22">Однако в сложных ТАСах, где голова заполнена обдумыванием множества факторов оптимальности, лучше не торопиться, а методично отмечать текущий конец участка Маркером, перетаскивая этот Маркер в случае улучшения Ввода на участке. Ведь в сложных ТАСах улучшение участка это большое достижение, так что слишком часто изменять отметку конца участка вам не придётся.</span></p>
<p class="rvps10"><span class="rvts22">Когда появляется уверенность, что найдено наилучшее решение из всех возможных, надо переходить к следующему участку. Не нужно просто так удалять старые Маркеры, они могут пригодиться в будущем, когда вы усомнитесь в идеальности тех или иных решений (например, найдя новый трюк) и захотите отредактировать Ввод в ранее пройденных уровнях. Скорее всего, логика разбиения останется той же даже после появлении нового фактора (нового трюка), и готовое разбиение сэкономит вам время.</span></p>
<p class="rvps10"><span class="rvts22">Если в процессе тестирования вариантов Ввода на участке у вас появляется уверенность, что найдена наилучшая последовательность Ввода для первой половины (или трети) участка, имеет смысл разбить участок надвое и заняться только оставшимся вторым. Часто такие ситуации возникают, когда изначально взят слишком большой участок, и только при редактировании проявились логические подучастки в его составе. Это обычная практика.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Итак, если ваш характер не приемлет порядка, вы можете вовсе не ставить Маркеры и Закладки во время работы, представляя участки умозрительно. Но учтите, что эта информация тоже занимает часть рабочей памяти человека, так что в результате может не хватить места для каких-то факторов оптимальности, и вы этого даже не заметите.</span></p>
<p class="rvps10"><span class="rvts22">Если же вы, наоборот, любите порядок, рекомендуется после завершения шлифовки участка (а можно и до или во время шлифовки) добавлять к Маркерам текстовые Заметки. Желательно оставлять комментарий хотя бы к Маркеру в начале участка, например, название участка или тег. Таким образом вы одновременно с ТАСингом документируете его разработку, оформляете появляющийся Ввод и придаёте ему объективный смысл. Это особенно полезно при работе в соавторстве, но и при ТАСинге в одиночку вы можете заметить, что "документация" из прошлых уровней мотивирует продолжать ТАСинг следующих. Отнимая секунды на печать текста, Маркеры дают силы не забросить проект на годы.</span></p>
<p class="rvps10"><span class="rvts22">Также Заметки помогают полнее раскрыть потенциал хитроумных трюков и багов игры. Дело в том, что во время написания текста Заметки, вы формализуете собственные знания об описываемом явлении. Когда суть трюка хранится в голове, вам будет казаться, что вы знаете о нём всё, и что в текущем ТАСе он уже и так используется максимально эффективно. Но когда появляется объективная модель в виде словесного описания трюка, нередко раскрываются новые грани вещей, казавшихся очевидными. На сайте TASVideos.org часто были случаи, когда один ТАСер прочитал описание какого-то трюка в сабмишене другого ТАСера и обнаружил способ использовать этот трюк лучше автора. Также были случаи, когда сам автор, перечитав свой свежий сабмишен, хлопал себя по лбу и срочно записывал улучшение.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Несмотря на всю полезность Маркеров и организации рабочего процесса, основной целью ТАСинга является создание Ввода. На поиск идеальной последовательности нажатий на каждом участке уходит намного больше времени, чем на всё остальное.</span></p>
<p class="rvps10"><span class="rvts22">Зачастую почти сразу кажется, что текущий Ввод самый лучший из всех возможных (особенно при сравнении с первоначальным вариантом). Но обычно это не так, особенно если вы делаете вывод об оптимальности, ориентируясь только на экран FCEUX, а не на состояние памяти (Memory Watch). Поэтому всегда есть смысл предполагать текущий результат неидеальным. Если вы в данный момент не видите в нём никаких ошибок и потенциальных улучшений, то надо переходить к следующему участку, но не отвергать последующие попытки улучшить предыдущие участки.</span></p>
<p class="rvps10"><span class="rvts22">Чаще просматривайте готовую часть мувика с начала игры или начала уровня до последнего записанного участка и пытайтесь заметить несовершенства. Тасэдитор позволяет редактировать </span><span class="rvts22">Ввод</span><span class="rvts22"> прямо во время просмотра, поэтому любую спонтанную идею можно ввести посреди готовых участков сразу же, как только идея пришла в голову. Если она окажется неудачной, просто откатите последние изменения Истории или вернитесь во времени на Закладку с последним актуальным состоянием мувика. А если идея действительно улучшит ваш ТАС, после радостных известий необходимо будет ещё добиться синхронизации последующих участков </span><span class="rvts22">Ввод</span><span class="rvts22">а (так как из-за реализации этой идеи последующее состояние игры изменится). Причём переписывать весь последующий </span><span class="rvts22">Ввод </span><span class="rvts22">в большинстве случаев не требуется. Обычно достаточно лишь удалить или вставить пару кадров (сдвинув все участки вверх), или подправить несколько участков между местом реализации идеи и ближайшим чекпоинтом (конец уровня или т.п.). В Тасэдиторе всё это делается довольно быстро, а в ходе вынужденных исправлений вы можете обнаружить ещё какую-нибудь ошибку или нереализованную идею.</span></p>
@ -114,9 +114,9 @@
<p class="rvps10"><span class="rvts22">Главное не жалеть выбрасывать уже проделанную работу, когда многодневные труды по отшлифовке мувика становятся неактуальными из-за обнаружения ошибки (упущенной возможности оптимизации).</span></p>
<p class="rvps10"><span class="rvts22">ТАСинг традиционным методом очень быстро приучает ТАСера к мысли о неизбежности потерь. Сам принцип многократной перезаписи одного и того же участка предлагает ТАСеру оценивать свой прогресс количеством затраченных попыток, ушедших впустую. Ведь при ТАСинге без Тасэдитора выбрасывать проделанную работу приходится на каждом шагу, как в мелочах, так и по-крупному.</span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор позволяет предотвратить некоторые мелкие потери, но он не спасает от необходимости крупных переделок в случае обнаружения новых факторов оптимизации. Например, проходя третий уровень, вы можете обнаружить новый трюк, который также срабатывает на первом уровне, теперь вам необходимо заново переделывать не только первый и третий уровни, но, скорее всего, и второй, к которому новый трюк не имеет никакого отношения. Конечно, во второй раз те же самые уровни ТАСить гораздо проще, но сам факт выброшенного времени иногда удручает, и поначалу даже кажется, что исправление старой ошибки не стоит того, чтобы тратить на него время. В этом случае следует, не долго думая, либо заставить себя сделать это, либо отложить исправление на следующий раз, оставив рядом с ошибкой Маркер с памяткой, детально описывающей суть проблемы. Если к моменту окончания ТАСа таких отложенных планов накапливается немало, придётся назвать почти готовый мувик "тестовым пробегом" и после продолжительного отдыха взяться за его переписывание. Впрочем, ревизия готового ТАСа имеет смысл всегда, даже когда на уме нет запланированных улучшений.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В следующей главе: </span><a class="rvts28" href="TASingMethodology.html">описание методов оптимизации Ввода</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid;"><p class="rvps10"><span class="rvts26">ПРАКТИЧЕСКОЕ ЗАДАНИЕ: </span></p>
@ -126,12 +126,12 @@
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring environment</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Заглавная страница</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -46,48 +46,48 @@
</div>
<div id="topic_content">
<p class="rvps5"><span class="rvts6"><br></span></p>
<p class="rvps5"><span class="rvts6"><br></span></p>
<p class="rvps5"><span class="rvts6"><br/></span></p>
<p class="rvps5"><span class="rvts6"><br/></span></p>
<p class="rvps4"><span class="rvts8">TAS Editor 1.0</span></p>
<p class="rvps1"><span class="rvts9"><br></span></p>
<p class="rvps1"><span class="rvts9"><br></span></p>
<p class="rvps1"><span class="rvts9"><br/></span></p>
<p class="rvps1"><span class="rvts9"><br/></span></p>
<p class="rvps1"><span class="rvts9">Добро пожаловать в Руководство по использованию Тасэдитора!</span></p>
<p class="rvps1"><span class="rvts9"><br></span></p>
<div class="rvps1"><div align="center"><table width="90%" border="0" cellpadding="0" cellspacing="0" style="border-width: 0px;">
<p class="rvps1"><span class="rvts9"><br/></span></p>
<div class="rvps1"><table width="90%" border="0" cellpadding="0" cellspacing="0" style="border-width: 0px;">
<tr valign="top">
<td><p class="rvps1"><span class="rvts9">Тасэдитор это интегрированная среда разработки, ориентированная на создание TAS.</span></p>
<p class="rvps1"><span class="rvts9">Прохождение видеоигр в Тасэдиторе похоже одновременно на интерактивное программирование и рисование нот мышкой в музыкальном редакторе.</span></p>
</td>
</tr>
</table>
</div></div>
<p class="rvps4"><span class="rvts10"><br></span></p>
<div class="rvps4"><div align="center"><table width="700" border="1" cellpadding="8" cellspacing="0" style="border-color: #000000; border-style: solid;">
</div>
<p class="rvps4"><span class="rvts10"><br/></span></p>
<div class="rvps4"><table width="700" border="1" cellpadding="8" cellspacing="0" style="border-color: #000000; border-style: solid;">
<tr valign="bottom">
<td width="32%" height="20" style="border-color: #000000; border-style: solid; border-bottom: none; background-color: #ffe5e3;"><p class="rvps6"><a class="rvts16" href="BeginnersGuide.html">Курс для новичка</a></p>
<td style="border-color: #000000; border-style: solid; border-bottom: none; background-color: #ffe5e3; width: 32%; height: 20px;"><p class="rvps6"><a class="rvts16" href="BeginnersGuide.html">Курс для новичка</a></p>
</td>
<td width="32%" height="20" style="border-color: #000000; border-style: solid; border-bottom: none; background-color: #d9ffdd;"><p class="rvps6"><a class="rvts16" href="Reference.html">Справочник</a></p>
<td style="border-color: #000000; border-style: solid; border-bottom: none; background-color: #d9ffdd; width: 32%; height: 20px;"><p class="rvps6"><a class="rvts16" href="Reference.html">Справочник</a></p>
</td>
<td width="30%" height="20" style="border-color: #000000; border-style: solid; border-bottom: none; background-color: #d0ffff;"><p class="rvps6"><a class="rvts17" href="TASEditorInside.html">TAS Editor изнутри</a></p>
<td style="border-color: #000000; border-style: solid; border-bottom: none; background-color: #d0ffff; width: 30%; height: 20px;"><p class="rvps6"><a class="rvts17" href="TASEditorInside.html">TAS Editor изнутри</a></p>
</td>
</tr>
<tr valign="top">
<td width="32%" height="38" style="border-color: #000000; border-style: solid; border-top: none; border-bottom: none; background-color: #ffe5e3;"><p class="rvps5"><span class="rvts15">Если вы впервые открываете данное Руководство, рекомендуется полностью прочитать этот учебник</span></p>
<td style="border-color: #000000; border-style: solid; border-top: none; border-bottom: none; background-color: #ffe5e3; width: 32%; height: 38px;"><p class="rvps5"><span class="rvts15">Если вы впервые открываете данное Руководство, рекомендуется полностью прочитать этот учебник</span></p>
</td>
<td width="32%" height="38" style="border-color: #000000; border-style: solid; border-top: none; border-bottom: none; background-color: #d9ffdd;"><p class="rvps5"><span class="rvts15">Заглядывайте сюда, когда нужно получить полную информацию о возможностях и ограничениях Тасэдитора</span></p>
<td style="border-color: #000000; border-style: solid; border-top: none; border-bottom: none; background-color: #d9ffdd; width: 32%; height: 38px;"><p class="rvps5"><span class="rvts15">Заглядывайте сюда, когда нужно получить полную информацию о возможностях и ограничениях Тасэдитора</span></p>
</td>
<td width="30%" height="38" style="border-color: #000000; border-style: solid; border-top: none; border-bottom: none; background-color: #d0ffff;"><p class="rvps5"><span class="rvts15">Заходите, когда пожелаете узнать больше деталей о внутренностях системы</span></p>
<td style="border-color: #000000; border-style: solid; border-top: none; border-bottom: none; background-color: #d0ffff; width: 30%; height: 38px;"><p class="rvps5"><span class="rvts15">Заходите, когда пожелаете узнать больше деталей о внутренностях системы</span></p>
</td>
</tr>
<tr valign="top">
<td width="32%" height="163" style="border-color: #000000; border-style: solid; border-top: none; background-color: #ffe5e3;"><p class="rvps7"><a class="rvts12" href="Introduction.html">Введение</a></p>
<td style="border-color: #000000; border-style: solid; border-top: none; background-color: #ffe5e3; width: 32%; height: 163px;"><p class="rvps7"><a class="rvts12" href="Introduction.html">Введение</a></p>
<p class="rvps7"><a class="rvts12" href="ProgramInterface.html">Интерфейс программы</a></p>
<p class="rvps7"><a class="rvts14" href="TASingProcess.html">Процесс ТАСинга</a></p>
<p class="rvps7"><a class="rvts14" href="TASingMethodology.html">Методология ТАСинга</a></p>
<p class="rvps7"><a class="rvts14" href="ProgramCustomization.html">Настройка программы</a></p>
<p class="rvps7"><a class="rvts14" href="AdvancedFeatures.html">Продвинутые возможности</a></p>
</td>
<td width="32%" height="163" style="border-color: #000000; border-style: solid; border-top: none; background-color: #d9ffdd;"><p class="rvps7"><a class="rvts14" href="Glossary.html">Глоссарий</a></p>
<td style="border-color: #000000; border-style: solid; border-top: none; background-color: #d9ffdd; width: 32%; height: 163px;"><p class="rvps7"><a class="rvts14" href="Glossary.html">Глоссарий</a></p>
<p class="rvps7"><a class="rvts14" href="Controls.html">Управление</a></p>
<p class="rvps7"><a class="rvts14" href="Navigation.html">Навигация</a></p>
<p class="rvps7"><a class="rvts14" href="Operations.html">Операции</a></p>
@ -95,28 +95,28 @@
<p class="rvps7"><a class="rvts14" href="FAQ.html">Ответы на вопросы</a></p>
<p class="rvps7"><a class="rvts14" href="SpeedrunnersSynopsis.html">Конспект спидраннера</a></p>
</td>
<td width="30%" height="163" style="border-color: #000000; border-style: solid; border-top: none; background-color: #d0ffff;"><p class="rvps7"><a class="rvts14" href="Ideas.html">Идеи</a></p>
<td style="border-color: #000000; border-style: solid; border-top: none; background-color: #d0ffff; width: 30%; height: 163px;"><p class="rvps7"><a class="rvts14" href="Ideas.html">Идеи</a></p>
<p class="rvps7"><a class="rvts14" href="Implementation.html">Реализация</a></p>
<p class="rvps7"><a class="rvts14" href="MistakeProofing.html">Защита от ошибок</a></p>
<p class="rvps7"><a class="rvts14" href="FM3format.html">Формат FM3</a></p>
</td>
</tr>
</table>
</div></div>
<p class="rvps4"><span class="rvts6"><br></span></p>
<p class="rvps4"><span class="rvts6"><br></span></p>
<p class="rvps4"><span class="rvts6"><br></span></p>
</div>
<p class="rvps4"><span class="rvts6"><br/></span></p>
<p class="rvps4"><span class="rvts6"><br/></span></p>
<p class="rvps4"><span class="rvts6"><br/></span></p>
<p class="rvps3"><span class="rvts6">Автор TAS Editor 1.0: АнС</span></p>
<p class="rvps3"><span class="rvts6">Помощь в тестировании: feos</span></p>
<p class="rvps3"><span class="rvts6"><br></span></p>
<p class="rvps3"><span class="rvts6"><br/></span></p>
<p class="rvps3"><span class="rvts6">Автор данного Руководства: АнС</span></p>
<p class="rvps3"><span class="rvts6">Помощь в корректировке: feos, exelord</span></p>
<p class="rvps3"><span class="rvts6"><br></span></p>
<p class="rvps3"><span class="rvts6"><br></span></p>
<p class="rvps3"><span class="rvts6"><br></span></p>
<p class="rvps3"><span class="rvts6"><br></span></p>
<p class="rvps3"><span class="rvts6"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p class="rvps3"><span class="rvts6"><br/></span></p>
<p class="rvps3"><span class="rvts6"><br/></span></p>
<p class="rvps3"><span class="rvts6"><br/></span></p>
<p class="rvps3"><span class="rvts6"><br/></span></p>
<p class="rvps3"><span class="rvts6"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>2.2. Панель инструментов</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,30 +53,25 @@
<div id="topic_content">
<p><span class="rvts20">Панель инструментов</span></p>
<p class="rvps5"><span class="rvts39"><br></span></p>
<p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/taseditor-smb.png"></p>
<p class="rvps21"><span class="rvts22"><br></span></p>
<p class="rvps5"><span class="rvts39"><br/></span></p>
<p class="rvps5"><img alt="" style="padding : 1px;" src="lib/taseditor-smb.png"/></p>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Панель инструментов содержит 7 разделов:</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts40" href="Toolbox.html#playback">Playback Проигрыватель</a></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts40" href="Toolbox.html#recorder">Recorder Рекордер</a></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts40" href="Toolbox.html#splicer">Splicer Монтажный инструмент</a></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts40" href="Toolbox.html#lua">Lua Луа-автоматизация</a></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts40" href="Toolbox.html#bookmarks">Bookmarks Закладки</a></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts40" href="Toolbox.html#history">History Журнал Истории</a></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 12pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<a class="rvts40" href="Toolbox.html#selection">кнопки навигации Курсором Выделения</a></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><a class="rvts40" href="Toolbox.html#playback">Playback Проигрыватель</a></li>
<li class="rvps15"><a class="rvts40" href="Toolbox.html#recorder">Recorder Рекордер</a></li>
<li class="rvps15"><a class="rvts40" href="Toolbox.html#splicer">Splicer Монтажный инструмент</a></li>
<li class="rvps15"><a class="rvts40" href="Toolbox.html#lua">Lua Луа-автоматизация</a></li>
<li class="rvps15"><a class="rvts40" href="Toolbox.html#bookmarks">Bookmarks Закладки</a></li>
<li class="rvps15"><a class="rvts40" href="Toolbox.html#history">History Журнал Истории</a></li>
<li class="rvps15"><a class="rvts40" href="Toolbox.html#selection">кнопки навигации Курсором Выделения</a></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="playback"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-playback.png"></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-playback.png"/></p>
<p class="rvps10"><span class="rvts22">В самом верху находится раздел </span><span class="rvts26">Проигрывателя</span><span class="rvts22"> (Playback). Проигрыватель управляет процессом эмуляции игры держит на паузе, проигрывает в любом направлении, перематывает на желаемый кадр и так далее. Он</span><span class="rvts22"> позволяет обращаться с видеоиграми так же легко, как с обычной видеозаписью, невзирая на их интерактивность.</span></p>
<p class="rvps10"><span class="rvts22">Вверху находятся 5 управляющих кнопок Проигрывателя.</span></p>
<p class="rvps10"><span class="rvts22">Кнопка "</span><span class="rvts32">||</span><span class="rvts22">" (пауза/продолжить) является аналогом клавиатурного хоткея </span><span class="rvts27">Pause Emulation</span><span class="rvts22">. При её нажатии эмуляция игры либо приостанавливается, либо продолжается. Если на вашей мышке есть средняя кнопка, проще нажимать её вместо кнопки "</span><span class="rvts32">||</span><span class="rvts22">", в этом случае даже не нужно будет подводить курсор мыши к разделу Проигрывателя.</span></p>
@ -86,7 +81,7 @@
<p class="rvps10"><span class="rvts22">Кнопка "</span><span class="rvts32">&gt;&gt;</span><span class="rvts22">" (быстрая перемотка вперёд) прыгает Курсором Проигрывателя по Маркерам вперёд. В примере с верхней картинкой при нажатии "</span><span class="rvts32">&gt;&gt;</span><span class="rvts22">" голубой курсор прыгнет на 23-й кадр (где установлен Маркер 2). Благодаря этой кнопке можно быстро проматывать события мувика вперёд. Однако в случае, если следующий Маркер находится вне Гринзоны, эмулятору потребуется какое-то время для эмуляции неизведанных кадров, поэтому прыжок голубого курсора может быть не мгновенным, придётся чуть-чуть подождать. У этой кнопки есть аналог на клавиатуре: </span><span class="rvts34">Shift + Page Down</span><span class="rvts22">. Эту кнопку также можно зажимать.</span></p>
<p class="rvps10"><span class="rvts22">В качестве эксперимента попробуйте сделать мувик из тысячи кадров и поставить пару десятков Маркеров, по одному через каждые 30-50 кадров. Затем зажмите </span><span class="rvts34">Shift</span><span class="rvts22"> и, нажимая клавиши </span><span class="rvts26">Page Up</span><span class="rvts22"> или </span><span class="rvts26">Page Down</span><span class="rvts22">, почувствуйте все удобства быстрой перемотки. </span><span class="rvts22">Помимо клавиш </span><span class="rvts26">Page Up</span><span class="rvts22"> и </span><span class="rvts26">Page Down </span><span class="rvts22">можно также вращать колесо мыши, зажав клавишу </span><span class="rvts34">Shift</span><span class="rvts22">.</span></p>
<p class="rvps10"><a name="progressbar"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Под управляющими кнопками Проигрывателя находится индикатор выполнения (</span><span class="rvts42">Progress bar</span><span class="rvts22">) и четыре переключателя (Checkbox).</span></p>
<p class="rvps10"><span class="rvts22">Прогрессбар служит для оценки оставшегося времени при добегании к указанному кадру.</span></p>
<p class="rvps10"><span class="rvts22">Дело в том, что для мгновенного прыжка на затребованный кадр эмулятор должен хотя бы однажды проэмулировать игру до этого кадра, применив ваш мувик в качестве игрового </span><span class="rvts22">Ввод</span><span class="rvts22">а, чтобы получить актуальное состояние игры на требуемый момент. После того, как состояние игры однажды просчитано, оно сохраняется в Гринзону, и в следующий раз эмулятор может мгновенно прыгнуть на этот кадр, пока не изменился </span><span class="rvts22">Ввод</span><span class="rvts22">, предшествующий этому кадру. Если Ввод изменился, потребуется новый пересчёт игровых событий, так как даже малейшее изменение нажатых кнопок может повлечь серьёзные изменения в игровом процессе. Поэтому при любом изменении Ввода Гринзона автоматически усекается, выбрасывая из памяти все кадры, на которые оказывает влияние изменившийся Ввод. И эти кадры эмулятору нужно просчитывать заново, что занимает некоторое время.</span></p>
@ -95,111 +90,103 @@
<p class="rvps10"><span class="rvts22">Во время добегания можно изменить конечную цель, сделав щелчок в колонке иконок перед номером желаемого кадра. Если во время добегания поставить эмулятор на паузу, голубой курсор приостановится, мигание целевого кадра замедлится, но добегание не будет отменено при отпускании паузы Курсор Проигрывателя продолжит бег к цели и автоматически остановится при её достижении.</span></p>
<p class="rvps10"><span class="rvts22">Прогрессбар также используется во время загрузки и сохранения больших проектов Тасэдитора на диск.</span></p>
<p class="rvps10"><a name="turbo-seek"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Галочка "</span><span class="rvts26">Turbo seek</span><span class="rvts22">" позволяет влиять на скорость добегания. С помощью функции </span><span class="rvts45">Turbo</span><span class="rvts22"> эмулятор может эмулировать игру с максимально достижимой скоростью, сокращая конечное время добегания в десятки раз. Поэтому при добегании к дальнему кадру рекомендуется установить эту галочку. Однако во время работы над ТАСом часто требуется увидеть не только конечный кадр определённого участка, но и внимательно рассмотреть все промежуточные кадры. В таких случаях следует снять эту галочку и даже уменьшить скорость эмуляции с помощью хоткеев </span><span class="rvts27">- </span><span class="rvts22">и </span><span class="rvts27">=</span><span class="rvts22">, чтобы не упустить важные детали при просмотре изображения эмулируемой игры.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Галочка "</span><span class="rvts26">Follow cursor</span><span class="rvts22">" заставляет Piano Roll следить за перемещениями Курсора Проигрывателя и автоматически скроллировать видимую область Piano Roll таким образом, чтобы голубой курсор всегда был виден пользователю. Это позволяет отслеживать глазами проигрываемый </span><span class="rvts22">Ввод</span><span class="rvts22"> прямо по ходу эмуляции. Обычно во время редактирования больших участков эту галочку необходимо отключать, чтобы Piano Roll не убегал от места редактирования </span><span class="rvts22">Ввод</span><span class="rvts22">а.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Галочка "</span><span class="rvts26">Auto-restore last position"</span><span class="rvts22"> заставляет Проигрыватель автоматически запускать добегание после вынужденного отступления голубого курсора. Каждый раз, когда вы меняете </span><span class="rvts22">Ввод</span><span class="rvts22">, Гринзона усекается после кадра изменения, и Курсор Проигрывателя отступает назад вместе с ней, забывая о событиях, ставших не актуальными после изменения Ввода. С помощью галочки автовосстановления позиции вы сможете сразу увидеть </span><span class="rvts26">новые</span><span class="rvts22"> события на этих кадрах. Когда галочка установлена, после каждого изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а Проигрыватель будет заново эмулировать изменившийся участок, позволяя ТАСеру оперативно сравнивать различные варианты развития игровых событий.</span></p>
<p class="rvps10"><span class="rvts22">Благодаря автоматическому восстановлению позиции ТАСер может сконцентрировать внимание только на редактировании </span><span class="rvts22">Ввод</span><span class="rvts22">а и в кратчайшие сроки перебрать множество вариантов действий на одном участке. Подробнее об этом методе ТАСинга будет рассказано позже.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Галочка "</span><span class="rvts26">Auto-adjust Input due to lag"</span><span class="rvts22"> включает автоматическую подгонку Ввода в соответствии с изменениями лага на просматриваемом участке.</span></p>
<p class="rvps10"><span class="rvts22">Для игры имеет значение только Ввод на зелёных строках Piano Roll. На красных строках нет смысла ставить какие-либо нажатия, так как в кадрах с лагом игра не опрашивает Ввод, для игрового движка эти кадры просто не существуют. Когда вы редактируете Ввод, вы изменяете ход игровых событий, и лаг тоже может проявляться уже в других кадрах, где его раньше не было. Если в этих кадрах ранее был нарисован Ввод, необходимо передвинуть этот Ввод на кадр без лага. Чтобы не делать это каждый раз вручную, достаточно установить эту галочку, тогда Тасэдитор будет вставлять на место образующихся лаговых кадров пустые строки, тем самым передвигая Ввод.</span></p>
<p class="rvps10"><span class="rvts22">Операции по автоподгонке производятся Тасэдитором только во время проигрывания участка, когда Курсор Проигрывателя бежит по бледным строкам Piano Roll, поочерёдно занося эти новые кадры в Гринзону. Эти операции также можно откатить с помощью </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">, однако не рекомендуется это делать при установленной галочке "Auto-restore last position", так как сразу после отката Проигрыватель запустит добегание, и авто-подгонка может произойти вновь.</span></p>
<p class="rvps10"><span class="rvts22">Игры с часто проявляющимся лагом имеет смысл ТАСить с постоянно включенной автоподгонкой Ввода. Эта функция успешно работает при любом методе ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="recorder"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-recorder.png"><span class="rvts22">Под Проигрывателем находится раздел </span><span class="rvts26">Рекордера</span><span class="rvts22"> (Recorder). Рекордер служит для записи кнопочного </span><span class="rvts22">Ввод</span><span class="rvts22">а с клавиатуры (или геймпада) в мувик, прямо как при обычной игре в любом эмуляторе.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-recorder.png"/><span class="rvts22">Под Проигрывателем находится раздел </span><span class="rvts26">Рекордера</span><span class="rvts22"> (Recorder). Рекордер служит для записи кнопочного </span><span class="rvts22">Ввод</span><span class="rvts22">а с клавиатуры (или геймпада) в мувик, прямо как при обычной игре в любом эмуляторе.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Галочка "</span><span class="rvts26">Recording</span><span class="rvts22">" включает и выключает режим Записи. Перед тем как начать запись кнопочных нажатий, убедитесь, что Курсор Проигрывателя находится на нужном кадре, с которого вы хотите начать запись. Затем либо нажмите хоткей "</span><span class="rvts27">Toggle Read-only</span><span class="rvts22">" (по умолчанию клавиша </span><span class="rvts27">Q</span><span class="rvts22">), либо установите галочку Recording щелчком по ней. При этом в заголовке окна Тасэдитора появится слово "Recording", а в окне FCEUX появится сообщение "Movie is now Read+Write". Теперь вы можете либо отпустить паузу и проходить игру в обычном или замедленном состоянии, либо впечатывать кнопки покадрово с помощью хоткея </span><span class="rvts27">Frame Advance</span><span class="rvts22">. По мере продвижения голубого курсора мувик будет заполняться информацией о нажатых вами кнопках.</span></p>
<p class="rvps10"><span class="rvts22">Можно неоднократно перезаписывать один и тот же участок мувика, затирая старые данные новой информацией о нажатиях/отпусканиях. Если вам не понравилось, как был пройден только что записанный участок (например, персонаж упал в яму), переставьте Курсор Проигрывателя повыше, а именно на кадр, после которого были совершены неправильные нажатия кнопок (например, слишком поздно была нажата кнопка </span><span class="rvts32">A</span><span class="rvts22">), затем продолжите Запись, нажимая уже правильные кнопки в правильное время.</span></p>
<p class="rvps10"><span class="rvts22">Когда участок готов, следует отключить режим Записи, чтобы случайно не затереть </span><span class="rvts22">Ввод</span><span class="rvts22"> при навигации Курсором Проигрывателя по мувику. Уберите галочку "Recording" щелчком или нажатием хоткея. Обычно при работе в Тасэдиторе галочка Записи почти всё время отключена, так как вместо Записи используется прямое редактирование мувика мышью.</span></p>
<p class="rvps10"><span class="rvts22">Благодаря возможности обратной перемотки вы можете добавлять </span><span class="rvts22">Ввод</span><span class="rvts22"> по частям, а не только по порядку следования кадров. Например, теоретически можно сначала записать второй уровень игры, а затем первый. Или же записать уровни по порядку, а потом переписать первый, оставив второй уровень без изменений.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется комбинировать возможности Рекордера с возможностями Piano Roll. Для длинных и лёгких участков игры обычно проще записать последовательность нажатий с клавиатуры или удобного USB-геймпада, а вот для мелких разбросанных правок проще использовать мышку.</span></p>
<p class="rvps10"><a name="superimpose"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Галочка "</span><span class="rvts26">Superimpose</span><span class="rvts22">" (Наложение) в разделе Рекордера позволяет объединять новый </span><span class="rvts22">Ввод</span><span class="rvts22"> с уже имеющимся </span><span class="rvts22">Вводом</span><span class="rvts22"> на том же участке мувика. Например, сначала с помощью мыши вы можете нарисовать зажатие кнопки </span><span class="rvts32">R</span><span class="rvts22"> на длинном участке, чтобы персонаж всё время бежал вправо. Затем можно поставить галочку "Superimpose", включить Запись и нажимать только кнопки прыжка и стрельбы, без необходимости вручную нажимать кнопку </span><span class="rvts32">Вправо</span><span class="rvts22">. В игре в это время персонаж будет бежать вправо и прыгать/стрелять по команде.</span></p>
<p class="rvps10"><span class="rvts22">У галочки "Superimpose" помимо состояний "включена" и "отключена" есть дополнительное третье состояние промежуточное между "включена" и "отключена". Принцип работы таков: если пользователь нажимает какие-либо кнопки геймпада во время Записи, эти кнопки будут записаны в мувик вместо старого Ввода. Если же пользователь не нажимает ни одной кнопки во время Записи, то старый Ввод на текущих кадрах не удаляется (то есть Рекордер не будет записывать "</span><span class="rvts31">отсутствие нажатия</span><span class="rvts22"> всех кнопок" поверх старого </span><span class="rvts22">Ввод</span><span class="rvts22">а).</span></p>
<p class="rvps10"><span class="rvts22">Таким образом третье состояние галочки "Superimpose" позволяет вам не беспокоиться о постоянном включении и отключении Записи в тех случаях, когда требуется записывать </span><span class="rvts22">Ввод только в некоторые промежутки старого Ввода</span><span class="rvts22">.</span></p>
<p class="rvps10"><a name="UsePattern"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Галочка "</span><span class="rvts26">Use pattern</span><span class="rvts22">" (Использовать шаблон) применяет текущий шаблон во время Записи кнопок. Название текущего шаблона можно увидеть в верхнем правом углу окна TAS Editor (самый последний пункт меню). При щелчке по этому пункту появляется ниспадающее меню, где можно выбрать другой шаблон из списка заготовленных.</span></p>
<p class="rvps10"><span class="rvts22">Шаблоны используются для ускорения ввода частых нажатий и отпусканий. Например, если в игре требуется стрелять с максимально возможной частотой (то есть чередовать один кадр нажатия кнопки </span><span class="rvts32">B</span><span class="rvts22"> и один кадр отпускания кнопки </span><span class="rvts32">B</span><span class="rvts22">), можно просто выбрать шаблон "</span><span class="rvts31">Alternating (1010...)</span><span class="rvts22">" и зажать кнопку </span><span class="rvts32">B </span><span class="rvts22">не заботясь о её периодическом отпускании благодаря применению шаблона в нужные промежутки времени нажатие кнопки просто не будет записываться.</span></p>
<p class="rvps10"><a name="multitracking"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Кроме управляющих галочек в Рекордере есть круглые радиокнопки (Radio buttons), реализующие функцию </span><span class="rvts26">мультитрекинга</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts26">Многодорожечная Запись</span><span class="rvts22"> серьёзно облегчает работу при традиционном ТАСинге игры на двоих и более игроков. Вместо того, чтобы нажимать руками кнопки одновременно на двух геймпадах, можно сначала записать прохождение короткого участка игры первым персонажем, а затем записать рядом кнопки второго.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию настроена Запись всех игроков одновременно (установлена радиокнопка "All"). Вы можете выбрать отдельный джойстик, щёлкнув по соответствующей радиокнопке (1P, 2P и т.д. количество доступных геймпадов зависит от типа мувика). Также для переключения радиокнопок можно использовать хоткей "</span><span class="rvts27">Switch current Multitracking mode</span><span class="rvts22">"</span><span class="rvts22"> (по умолчанию клавиша </span><span class="rvts27">W</span><span class="rvts22">). </span><span class="rvts22">Теперь во время Записи эмулятор будет воспринимать только нажатия кнопок для выбранного игрока, а колонки </span><span class="rvts22">Ввод</span><span class="rvts22">а для остальных игроков не будут изменяться, даже если вы случайно нажмёте какую-нибудь кнопку на их джойстике.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="splicer"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-splicer.png"></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-splicer.png"/></p>
<p class="rvps10"><span class="rvts22">Под Рекордером находится раздел </span><span class="rvts26">Монтажа</span><span class="rvts22"> (Splicer).</span></p>
<p class="rvps10"><span class="rvts22">Нужно сразу отметить, что вам здесь не пригодится опыт работы в программах для нелинейного монтажа видео, ведь в тех программах вы оперируете готовым видеоматериалом (Выводом), а в Тасэдиторе можно редактировать только Ввод, при этом финальный видеоряд всё равно определяется самой игрой.</span></p>
<p class="rvps10"><span class="rvts22">В этом разделе выводится информация о размере текущего Выделения сколько строк (rows) выделено в высоту, и сколько колонок (columns) занимает </span><span class="rvts22">Ввод</span><span class="rvts22"> в ширину. Благодаря этой информации вы можете использовать Выделение в качестве </span><span class="rvts37">линейки</span><span class="rvts22"> для измерений. Например, чтобы быстро узнать расстояние (в кадрах) между двумя игровыми событиями, достаточно щёлкнуть мышкой по одному и растянуть Выделение до другого выделятся все кадры между этими двумя строчками, а в разделе Splicer появится сообщение "Selection: </span><span class="rvts31">N</span><span class="rvts22"> rows, </span><span class="rvts31">M</span><span class="rvts22"> columns", где </span><span class="rvts31">N</span><span class="rvts22"> искомое количество кадров.</span></p>
<p class="rvps10"><span class="rvts22">Также здесь находится информация о данных в Буфере Обмена содержится ли там Ввод, который можно вставить в любое место мувика, или не содержится. Если содержится, то указывается количество строк и колонок этого Ввода. Данные в Буфере Обмена хранятся независимо от Тасэдитора, они сохраняются там даже после закрытия FCEUX, пока какая-нибудь другая программа не скопирует в Буфер Обмена что-нибудь своё.</span></p>
<p class="rvps10"><span class="rvts22">В разделе "Splicer" нет никаких управляющих элементов, так как все команды для монтажа Ввода вынесены в раздел меню </span><span class="rvts26">Edit</span><span class="rvts22">, а также назначены на быстрые клавиши клавиатуры. </span><span class="rvts22">Рекомендуется использовать в процессе монтажа именно клавиатурные комбинации их легко запомнить, а скорость работы повышается во много раз.</span></p>
<p class="rvps10"><a name="splicing-operations"></a>
<span class="rvts22"><br></span></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Перечень всех функций Монтажного инструмента.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">По сути это стандартные возможности любого текстового редактора (копипаст и т.п.), но в Тасэдиторе их можно применять к </span><span class="rvts22">Ввод</span><span class="rvts22">у прямо во время эмуляции игры (даже при отпущенной паузе), что позволяет на лету анализировать результаты их применения и оперативно корректировать свои действия.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Copy </span><span class="rvts22">(</span><span class="rvts34">Ctrl + C</span><span class="rvts22">) копирует весь выделенный </span><span class="rvts22">Ввод</span><span class="rvts22"> в Буфер Обмена.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Paste </span><span class="rvts22">(</span><span class="rvts34">Ctrl + V</span><span class="rvts22">) вставляет </span><span class="rvts22">Ввод</span><span class="rvts22"> из Буфера Обмена в мувик, начиная с кадра, где стоит Курсор Выделения. Старые данные мувика на этом месте затираются новыми, хотя при желании можно использовать наложение новых на старые, если у Рекордера установлена галочка "Superimpose".</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Paste Insert </span><span class="rvts22">(</span><span class="rvts34">Ctrl + </span><span class="rvts34">Shift</span><span class="rvts34"> + </span><span class="rvts34">V</span><span class="rvts22">) раздвигает мувик и вставляет данные из Буфера Обмена, начиная с кадра, где стоит Курсор Выделения. Старые данные мувика отодвигаются вниз.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Clear </span><span class="rvts22">(</span><span class="rvts34">Delete</span><span class="rvts22">) очищает выделенные кадры, удаляя с них нажатия всех кнопок.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Cut </span><span class="rvts22">(</span><span class="rvts34">Ctrl + X</span><span class="rvts22">) = </span><span class="rvts23">Copy</span><span class="rvts22"> + </span><span class="rvts23">Clear</span><span class="rvts22"> копирует </span><span class="rvts22">Ввод</span><span class="rvts22"> из выделенного участка мувика и очищает этот участок.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Delete </span><span class="rvts22">(</span><span class="rvts34">Ctrl + Delete</span><span class="rvts22">) удаляет выделенные кадры из мувика, сдвигая последующие кадры на их место. Очень удобно таким образом перемещать </span><span class="rvts22">Ввод</span><span class="rvts22"> вверх.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Insert </span><span class="rvts22">(</span><span class="rvts34">Ctrl + Shift + Insert</span><span class="rvts22">) вставляет в мувик пустоту на место выделенных кадров, сдвигая последующие кадры вперёд. Очень удобно таким образом перемещать </span><span class="rvts22">Ввод</span><span class="rvts22"> вниз.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Clone </span><span class="rvts22">(</span><span class="rvts34">Ctrl + Insert</span><span class="rvts22">) аналог </span><span class="rvts23">Insert</span><span class="rvts22">, но вместо пустоты в мувик вставляются копии выделенных кадров. Зачастую этот способ ещё удобнее, чем </span><span class="rvts34">Ctrl + Shift + Insert</span><span class="rvts22">.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Insert number of frames </span><span class="rvts22">(</span><span class="rvts34">Insert</span><span class="rvts22">) позволяет вставить на место Курсора Выделения любое желаемое количество пустых кадров. При нажатии клавиши </span><span class="rvts34">Insert</span><span class="rvts22"> появляется окошко для ввода требуемого количества кадров, нужно напечатать число и нажать OK. Если передумали, можно нажать Cancel (Esc) для убирания окошка.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts23">Truncate</span><span class="rvts22"> удаляет все кадры мувика, начиная со следующего за Курсором Выделения. Редко используемая функция, поэтому у неё нет хоткея, она доступна только через меню программы или меню по правой кнопке мыши.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts23">Copy </span><span class="rvts22">(</span><span class="rvts34">Ctrl + C</span><span class="rvts22">) копирует весь выделенный </span><span class="rvts22">Ввод</span><span class="rvts22"> в Буфер Обмена.</span></li>
<li class="rvps15"><span class="rvts23">Paste </span><span class="rvts22">(</span><span class="rvts34">Ctrl + V</span><span class="rvts22">) вставляет </span><span class="rvts22">Ввод</span><span class="rvts22"> из Буфера Обмена в мувик, начиная с кадра, где стоит Курсор Выделения. Старые данные мувика на этом месте затираются новыми, хотя при желании можно использовать наложение новых на старые, если у Рекордера установлена галочка "Superimpose".</span></li>
<li class="rvps15"><span class="rvts23">Paste Insert </span><span class="rvts22">(</span><span class="rvts34">Ctrl + </span><span class="rvts34">Shift</span><span class="rvts34"> + </span><span class="rvts34">V</span><span class="rvts22">) раздвигает мувик и вставляет данные из Буфера Обмена, начиная с кадра, где стоит Курсор Выделения. Старые данные мувика отодвигаются вниз.</span></li>
<li class="rvps15"><span class="rvts23">Clear </span><span class="rvts22">(</span><span class="rvts34">Delete</span><span class="rvts22">) очищает выделенные кадры, удаляя с них нажатия всех кнопок.</span></li>
<li class="rvps15"><span class="rvts23">Cut </span><span class="rvts22">(</span><span class="rvts34">Ctrl + X</span><span class="rvts22">) = </span><span class="rvts23">Copy</span><span class="rvts22"> + </span><span class="rvts23">Clear</span><span class="rvts22"> копирует </span><span class="rvts22">Ввод</span><span class="rvts22"> из выделенного участка мувика и очищает этот участок.</span></li>
<li class="rvps15"><span class="rvts23">Delete </span><span class="rvts22">(</span><span class="rvts34">Ctrl + Delete</span><span class="rvts22">) удаляет выделенные кадры из мувика, сдвигая последующие кадры на их место. Очень удобно таким образом перемещать </span><span class="rvts22">Ввод</span><span class="rvts22"> вверх.</span></li>
<li class="rvps15"><span class="rvts23">Insert </span><span class="rvts22">(</span><span class="rvts34">Ctrl + Shift + Insert</span><span class="rvts22">) вставляет в мувик пустоту на место выделенных кадров, сдвигая последующие кадры вперёд. Очень удобно таким образом перемещать </span><span class="rvts22">Ввод</span><span class="rvts22"> вниз.</span></li>
<li class="rvps15"><span class="rvts23">Clone </span><span class="rvts22">(</span><span class="rvts34">Ctrl + Insert</span><span class="rvts22">) аналог </span><span class="rvts23">Insert</span><span class="rvts22">, но вместо пустоты в мувик вставляются копии выделенных кадров. Зачастую этот способ ещё удобнее, чем </span><span class="rvts34">Ctrl + Shift + Insert</span><span class="rvts22">.</span></li>
<li class="rvps15"><span class="rvts23">Insert number of frames </span><span class="rvts22">(</span><span class="rvts34">Insert</span><span class="rvts22">) позволяет вставить на место Курсора Выделения любое желаемое количество пустых кадров. При нажатии клавиши </span><span class="rvts34">Insert</span><span class="rvts22"> появляется окошко для ввода требуемого количества кадров, нужно напечатать число и нажать OK. Если передумали, можно нажать Cancel (Esc) для убирания окошка.</span></li>
<li class="rvps15"><span class="rvts23">Truncate</span><span class="rvts22"> удаляет все кадры мувика, начиная со следующего за Курсором Выделения. Редко используемая функция, поэтому у неё нет хоткея, она доступна только через меню программы или меню по правой кнопке мыши.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Наиболее часто во время ТАСинга в Тасэдиторе вы будете использовать </span><span class="rvts34">Ctrl + Delete</span><span class="rvts22"> (</span><span class="rvts23">Delete Frames</span><span class="rvts22">) и </span><span class="rvts34">Ctrl + Insert</span><span class="rvts22"> (</span><span class="rvts23">Clone Frames</span><span class="rvts22">) для быстрого перемещения редактируемых участков вверх/вниз по &nbsp;списку кадров, тем самым совершая в игре определённые действия раньше или позже по времени.</span></p>
<p class="rvps10"><span class="rvts22">В отличие от хоткеев FCEUX эти клавиатурные комбинации нельзя переназначить, поэтому, если у вас на </span><span class="rvts34">Ctrl</span><span class="rvts22">, </span><span class="rvts34">Insert</span><span class="rvts22"> или </span><span class="rvts34">Delete</span><span class="rvts22"> назначены какие-то другие функции эмулятора, необходимо изменить настройки эмулятора.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="lua"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-lua.png"></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-lua.png"/></p>
<p class="rvps10"><span class="rvts22">Под Монтажным инструментом находится маленький раздел </span><span class="rvts26">Lua</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Здесь находится одна неактивная кнопка и одна галочка, назначение которых будет описано позже. Пока вы не знакомы с Lua-скриптингом, этот раздел вам не понадобится.</span></p>
<p class="rvps10"><span class="rvts22">Использование скриптового языка Lua позволяет автоматизировать часть работы ТАСера и даже создавать собственные плагины для Тасэдитора. Этому посвящена отдельная часть главы </span><a class="rvts40" href="AdvancedFeatures.html#UsingLua">Продвинутые возможности</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="bookmarks"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-bookmarks.png"></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-bookmarks.png"/></p>
<p class="rvps10"><span class="rvts22">Далее располагается раздел </span><span class="rvts26">Закладок</span><span class="rvts22"> (Bookmarks/Branches). О Закладках следует рассказать подробнее.</span></p>
<p class="rvps10"><span class="rvts22">Закладки являются развитием принципа эмуляторных сэйвов. До Тасэдитора сэйвы были единственным способом навигации по мувику, с их помощью ТАСер возвращался к месту ошибки и исправлял её. В Тасэдиторе есть множество других способов навигации, однако и этот способ решено было оставить для совместимости со старыми принципами.</span></p>
<p class="rvps10"><span class="rvts22">В вашем распоряжении 10 слотов для Закладок, которые нумеруются цифрами от 0 до 9. Вы можете поставить любую из 10 Закладок на любой кадр мувика, предварительно указав на этот кадр Курсором Проигрывателя.</span></p>
<p class="rvps10"><span class="rvts26">1 способ</span><span class="rvts22"> поставьте голубой курсор на кадр, где должна появиться Закладка и сделайте эмуляторный сэйв (по умочанию это </span><span class="rvts34">Shift</span><span class="rvts22"> + любая из клавиш в ряду </span><span class="rvts27">F1</span><span class="rvts22">-</span><span class="rvts27">F10</span><span class="rvts22">). Например, нажмите </span><span class="rvts27">Shift + F1</span><span class="rvts22"> для установки первой Закладки. Она тут же отобразится в Списке Закладок, сверкнув красным светом.</span></p>
<p class="rvps10"><span class="rvts26">2 способ</span><span class="rvts22"> поставьте голубой курсор на нужный кадр и щёлкните </span><span class="rvts26">правой кнопкой мыши</span><span class="rvts22"> по строке Списка Закладок. Например, щёлкните правой кнопкой по второй строке Списка, чтобы установить вторую Закладку.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нечаянно совершённую установку Закладок можно отменять </span><span class="rvts22">с помощью </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">В Списке Закладок отображается цифровой номер Закладки, номер кадра Закладки и время установки Закладки. </span><span class="rvts22">При наведении курсора мыши на время Закладки (правый столбец в Списке) вы увидите всплывающий скриншот из игры, дающий представление о содержимом Закладки с точки зрения игрового процесса. Когда у вас будет много Закладок, скриншоты помогут быстрее в них ориентироваться.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В момент установки Закладки Тасэдитор сохраняет в указанный слот не только текущее место положения Курсора Проигрывателя, но и всё содержимое мувика на текущий момент времени. Теперь вы в любой момент можете либо "</span><span class="rvts31">прыгнуть на Закладку в пространстве</span><span class="rvts22">", вернув Курсор Проигрывателя на запомненное Закладкой место, либо "</span><span class="rvts31">прыгнуть на Закладку во времени</span><span class="rvts22">", вернув весь мувик в запомненное Закладкой состояние.</span></p>
<p class="rvps10"><span class="rvts22">Чтобы вернуться на Закладку в пространстве, щёлкните левой кнопкой мыши по </span><span class="rvts26">левой половине</span><span class="rvts22"> нужной Закладки (более светлая половина Списка Закладок, где написан номер кадра, на котором установлена Закладка). Или же воспользуйтесь клавиатурой нажмите соответствующую цифру (цифровые клавиши </span><span class="rvts27">0-9</span><span class="rvts22"> расположены под клавишами </span><span class="rvts27">F1-F10</span><span class="rvts22">). О совершении прыжка вы сможете догадаться не только по перемещению голубого курсора в Piano Roll, но и по зелёной вспышке использованной Закладки.</span></p>
<p class="rvps10"><span class="rvts22">Чтобы вернуться на Закладку во времени, щёлкните левой кнопкой мыши по </span><span class="rvts26">правой половине</span><span class="rvts22"> нужной Закладки (более яркая половина Списка Закладок, где написано время создания Закладки). Или же загрузите соответствующий эмуляторный сэйв (по умолчанию это клавиши </span><span class="rvts27">F1-F10</span><span class="rvts22">). Если при прыжке во времени изменяется </span><span class="rvts22">Ввод</span><span class="rvts22"> мувика (когда восстанавливается его состояние на момент создания Закладки), то использованная Закладка вспыхивает синим светом, иначе вспыхивает зелёным, как при простом прыжке Курсора Проигрывателя. В случае изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а, как обычно, возможно автоматическое усечение Гринзоны. И, конечно же, вы всегда можете отменить это изменение с помощью </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">, вернув мувик к состоянию, которое у него было перед прыжком на Закладку во времени.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Таким образом, часть Закладок можно использовать для ускорения навигации. Например, поставить Закладку на начало просматриваемого участка мувика и периодически возвращать Курсор Проигрывателя на кадр этой Закладки, чтобы повторно проиграть события игры на всём участке. Впрочем, для этой же цели можно поставить в начале участка обычный Маркер. Преимущество Закладки перед Маркером только в том, что на Закладку можно будет мгновенно прыгнуть из любого сколь угодно отдалённого места мувика, а к Маркеру издалека нужно добираться прыжками через соседние Маркеры.</span></p>
<p class="rvps10"><span class="rvts22">Другую часть Закладок можно использовать для хранения альтернативных вариантов прохождения одного и того же участка игры. При ТАСинге сложных игр мы не всегда можем сразу оценить степень оптимальности той или иной стратегии прохождения уровня. Порой ТАСеру требуется записать несколько разных способов прохождения одного и того же участка игры, а затем тщательно сравнить готовые мувики и выбрать наиболее подходящий, чтобы оставить его в конечном ТАСе.</span></p>
<p class="rvps10"><span class="rvts22">В традиционном ТАСинге каждый вариант прохождения хранится в отдельном файле (сэйве), и для переключения между мувиками нужно загружать соответствующие сэйвы, созданные во время записи альтернативных стратегий прохождения.</span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-branches.png"></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-branches.png"/></p>
<p class="rvps10"><span class="rvts22">В Тасэдиторе все сохранённые варианты прохождения хранятся вместе, образуя между собой иерархию под названием &nbsp;</span><span class="rvts26">Дерево ответвлений</span><span class="rvts22"> (Branches Tree). Для переключения между альтернативными ответвлениями нужно загрузить соответствующую Закладку, вернув мувик на желаемую ветвь заготовленных вариантов развития истории. По сути всё так же, как раньше. </span><span class="rvts22">Но подход Тасэдитора позволяет удобно визуализировать все альтернативные стратегии в виде схемы, чтобы облегчить ориентацию ТАСера среди множества записанных вариантов.</span></p>
<p class="rvps10"><span class="rvts22">Когда вы записываете два варианта прохождения второго уровня игры, первый уровень в обоих вариантах проходится одинаково, так что расхождение </span><span class="rvts22">Ввод</span><span class="rvts22">а идёт не с самого начала мувика, а только с начала второго уровня. Если на кадре перед началом второго уровня вы когда-то поставили Закладку 1, на схеме будет видно расхождение двух линий, начиная с цифры 1, а с начала мувика до цифры 1 оба варианта будут совпадать в виде одной линии.</span></p>
<p class="rvps10"><span class="rvts22">По расцветке линий на схеме можно будет определить, какие Закладки содержат мувик, совпадающий с мувиком текущей Закладки. Например, если ставить по одной Закладке в конец каждого уровня, то все эти Закладки будут объединены между собой красной линией, так как мувик каждой следующей Закладки фактически состоит из мувика предыдущей Закладки, плюс дописанного прохождения ещё одного уровня.</span></p>
@ -207,27 +194,27 @@
<p class="rvps10"><span class="rvts22">Теперь щёлкните левой кнопкой мыши по заголовку раздела Закладок (по надписи Bookmarks/Branches). При этом Список Закладок сменится на изображение схемы ответвлений (Branches). Если мувик третьей сохранённой Закладки отличается от мувика второй Закладки, но это различие начинается после кадра, где установлена первая Закладка, то вы должны увидеть картину наподобие показанной выше. Тучка символизирует начало проекта (корень иерархии). Закладки представлены соответствующими номерами, синим номером отмечена текущая Закладка (последний использованный слот). Если после сохранения или загрузки Закладки в мувик уже вносились изменения, на схеме появляется фаербол, который символизирует конец мувика.</span></p>
<p class="rvps10"><span class="rvts22">На схеме также отображается текущая позиция Курсора Проигрывателя. Попробуйте перетаскивать голубой курсор мышкой вверх и вниз по Piano Roll, либо просто проиграть весь мувик от начала до конца (нажмите </span><span class="rvts34">Shift + Home</span><span class="rvts22"> и отпустите паузу эмулятора). Вы увидите перемещение маленькой голубой стрелки по красным линиям, соединяющим все Закладки в текущей хронологии. Например, если текущей Закладкой является вторая, значок Курсора Проигрывателя будет перемещаться по маршруту "тучка -&gt; Закладка 1 -&gt; Закладка 2". А остальные Закладки останутся в стороне, так как они представляют альтернативную хронологию, не совпадающую с текущим проигрываемым мувиком.</span></p>
<p class="rvps10"><span class="rvts22">Дерево ответвлений автоматически перестраивается каждый раз, когда вы создаёте новую Закладку или изменяете содержимое существующей. </span><span class="rvts22">В зависимости от сложности вашего проекта схема ответвлений может быть очень разной.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<div class="rvps21"><div align="center"><table width="10%" border="0" cellpadding="1" cellspacing="2" style="border-width: 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps21"><table width="10%" border="0" cellpadding="1" cellspacing="2" style="border-width: 0px;">
<tr valign="top">
<td><p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/branches-example1.png"></p>
<td><p class="rvps5"><img alt="" style="padding : 1px;" src="lib/branches-example1.png"/></p>
</td>
<td><p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/branches-example2.png"></p>
<td><p class="rvps5"><img alt="" style="padding : 1px;" src="lib/branches-example2.png"/></p>
</td>
<td><p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/branches-example3.png"></p>
<td><p class="rvps5"><img alt="" style="padding : 1px;" src="lib/branches-example3.png"/></p>
</td>
</tr>
<tr valign="top">
<td><p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/branches-example4.png"></p>
<td><p class="rvps5"><img alt="" style="padding : 1px;" src="lib/branches-example4.png"/></p>
</td>
<td><p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/branches-example5.png"></p>
<td><p class="rvps5"><img alt="" style="padding : 1px;" src="lib/branches-example5.png"/></p>
</td>
<td><p class="rvps5"><img border="0" alt hspace="1" vspace="1" src="lib/branches-example6.png"></p>
<td><p class="rvps5"><img alt="" style="padding : 1px;" src="lib/branches-example6.png"/></p>
</td>
</tr>
</table>
</div></div>
<p class="rvps10"><span class="rvts22"><br></span></p>
</div>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Вы можете наводить курсор мыши на номер любой Закладки, чтобы увидеть информацию о ней.</span></p>
<p class="rvps10"><span class="rvts22">Также вы можете сделать </span><span class="rvts26">одинарный щелчок левой</span><span class="rvts22"> кнопкой мыши по любой Закладке, чтобы послать Курсор Проигрывателя на кадр этой Закладки (прыжок в пространстве). Щелчком по тучке вы посылаете Курсор Проигрывателя в начало мувика (аналогично нажатию </span><span class="rvts34">Shift + Home</span><span class="rvts22">), а щелчком по фаерболу вы посылаете Курсор Проигрывателя в конец мувика (аналогично нажатию </span><span class="rvts34">Shift + End</span><span class="rvts22">).</span></p>
<p class="rvps10"><span class="rvts22">Кроме того, вы можете сделать </span><span class="rvts26">двойной щелчок левой</span><span class="rvts22"> кнопкой мыши, чтобы прыгнуть на указанную Закладку во времени. При этом из указанной Закладки восстанавливается состояние мувика, Закладка становится текущей, а Курсор Проигрывателя перемещается на кадр Закладки.</span></p>
@ -235,34 +222,34 @@
<p class="rvps10"><span class="rvts22">Как видите, в режиме просмотра Дерева ответвлений можно совершать все те же действия, что и в режиме просмотра Списка Закладок. Поэтому для опытных пользователей рекомендуется использовать в работе только вид Дерева ответвлений, так как он даёт больше информации для ТАСера. Когда нужно переключиться обратно на просмотр Списка Закладок, щёлкните по заголовку раздела (по надписи Branches).</span></p>
<p class="rvps10"><span class="rvts22">Попробуйте использовать все 10 доступных слотов, каждый раз немного меняя </span><span class="rvts22">Ввод</span><span class="rvts22"> текущего мувика и просматривая отредактированные изменения на экране FCEUX. Позиция каждой Закладки на Дереве ответвлений определяется, исходя из </span><span class="rvts22">Ввод</span><span class="rvts22">а, предшествующего кадру Закладки. Подразумевается, что ТАСер всегда сначала просматривает нарисованный </span><span class="rvts22">Ввод</span><span class="rvts22"> в эмуляторе, а только потом сохраняет проделанную часть работы в Закладку.</span></p>
<p class="rvps10"><span class="rvts22">В руках опытного ТАСера Закладки являются мощным инструментом, позволяющим многократно облегчить процесс ТАСинга и реализовать даже то, что кажется невозможным. Обычно "невозможным" всё представляется только лишь из-за чудовищной, необъятной сложности. Но стоит лишь снизить сложность хотя бы в сотню раз (благодаря инструментам и умной организации процесса), и достижение из ранга невозможных переходит в разряд просто трудных.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="history"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-history.png"></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-history.png"/></p>
<p class="rvps10"><span class="rvts22">Под разделом Закладок располагается раздел </span><span class="rvts26">Истории</span><span class="rvts22"> (History).</span></p>
<p class="rvps10"><span class="rvts22">В этом списке Тасэдитор ведёт строгий учёт всех проделанных операций в текущем проекте. Каждое действие по изменению </span><span class="rvts22">Ввод</span><span class="rvts22">а, Маркеров или Закладок заносится в журнал, который сохраняется в файл проекта вместе с остальными данными. </span><span class="rvts22">Полный перечень всех возможных типов записей в Журнал Истории вы можете прочитать в </span><a class="rvts28" href="Operations.html">Справочнике</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Благодаря Журналу Истории вы можете использовать Откат (Undo) и Повтор (Redo) клавишами </span><span class="rvts34">Ctrl + Z</span><span class="rvts22"> и </span><span class="rvts34">Ctrl + Y</span><span class="rvts22">. </span><span class="rvts22">Помимо этих клавишных комбинаций вы можете просто щёлкать на любой строке Журнала Истории левой кнопкой мыши, чтобы откатить мувик на время создания соответствующей записи в Журнале. При этом в Piano Roll на долю секунды появляется курсор-указка фиолетового цвета, акцентирующий внимание пользователя на месте произведённых при откате изменений. Как обычно, при изменении </span><span class="rvts22">Ввод</span><span class="rvts22">а возможно автоматическое усечение Гринзоны.</span></p>
<p class="rvps10"><span class="rvts22">Максимальное количество уровней отката настраивается в меню </span><a class="rvts40" href="ProgramCustomization.html#Setmaxundolevels">Config</a><span class="rvts22">, от этого количества зависит максимальный объём Журнала Истории и, как следствие, объём занимаемой памяти.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="selection"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-selection.png"></p>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-selection.png"/></p>
<p class="rvps10"><span class="rvts22">В самом низу Панели инструментов находятся 4 кнопки для управления Курсором Выделения.</span></p>
<p class="rvps10"><span class="rvts22">О назначении кнопок "</span><span class="rvts32">&lt;&lt;</span><span class="rvts22">" и "</span><span class="rvts32">&gt;&gt;</span><span class="rvts22">" легко догадаться по аналогии с верхники кнопками "</span><span class="rvts32">&lt;&lt;</span><span class="rvts22">" и "</span><span class="rvts32">&gt;&gt;</span><span class="rvts22">" в разделе Playback. Верхняя часть окна Тасэдитора содержит элементы управления для навигации Курсором Проигрывателя, а нижняя часть окна элементы управления для навигации Курсором Выделения.</span></p>
<p class="rvps10"><span class="rvts22">Кнопка "</span><span class="rvts32">&lt;&lt;</span><span class="rvts22">" (прыжок назад) перемещает Курсор Выделения на кадр, на котором установлен вышестоящий Маркер. В примере с верхней картинкой при нажатии "</span><span class="rvts32">&lt;&lt;</span><span class="rvts22">" синий курсор прыгнет с 28-го на 23-й кадр, где установлен Маркер 2. Благодаря этой кнопке можно очень быстро возвращать Выделение к началу редактируемого участка и вообще к началу любого отмеченного участка. У этой кнопки есть аналог на клавиатуре: </span><span class="rvts34">Ctrl + Page Up</span><span class="rvts22">. Эту кнопку можно зажимать синий курсор будет очень быстро прыгать по Маркерам вверх по Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22">Кнопка "</span><span class="rvts32">&gt;&gt;</span><span class="rvts22">" (прыжок вперёд) прыгает Курсором Выделения по Маркерам вперёд. В примере с верхней картинкой при нажатии "</span><span class="rvts32">&gt;&gt;</span><span class="rvts22">" синий курсор прыгнет с 28-го на кадр за пределами видимости (где установлен следующий Маркер), при этом Piano Roll автоматически проскроллируется вслед за Курсором Выделения. Благодаря этой кнопке можно очень быстро перемещаться по мувику вниз. У этой кнопки есть аналог на клавиатуре: </span><span class="rvts34">Ctrl + Page Down</span><span class="rvts22">. Эту кнопку также можно зажимать.</span></p>
<p class="rvps10"><span class="rvts22">Важная особенность этой пары кнопок в том, что Курсор Выделения в отличие от Курсора Проигрывателя не привязан к состоянию игры, поэтому его прыжки по Маркерам всегда совершаются мгновенно, не завися от наличия Гринзоны у целевого кадра. Особенно удобно читать таким образом Заметки Маркеров одну за другой в нижнем текстовом поле, нажимая </span><span class="rvts34">Ctrl + Page Down</span><span class="rvts22"> для мгновенного перехода к следующей Заметке.</span></p>
<p class="rvps10"><span class="rvts22">В качестве эксперимента попробуйте поставить десяток Маркеров по одному через каждые 30-50 кадров а затем зажмите </span><span class="rvts34">Ctrl</span><span class="rvts22"> и, нажимая клавиши </span><span class="rvts26">Page Up</span><span class="rvts22"> или </span><span class="rvts26">Page Down</span><span class="rvts22">, почувствуйте все удобства быстрой навигации. Помимо клавиш </span><span class="rvts26">Page Up</span><span class="rvts22"> и </span><span class="rvts26">Page Down </span><span class="rvts22">можно также вращать колесо мыши, зажав клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Кнопки "</span><span class="rvts32">Similar</span><span class="rvts22">" и "</span><span class="rvts32">More</span><span class="rvts22">" нужны для поиска похожих Заметок. Это ещё одна экспериментальная особенность Тасэдитора, о которой будет рассказано позже. Для новичка эта функция не требуется.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps2"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Теперь вы ознакомлены с основными принципами использования программы.</span></p>
<p class="rvps10"><span class="rvts22">В следующей главе: </span><a class="rvts40" href="TASingProcess.html">системный подход к ТАСингу</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid;"><p class="rvps10"><span class="rvts26">ПРАКТИЧЕСКОЕ ЗАДАНИЕ: </span><span class="rvts22">Пройдите World 1-1 в игре Super Mario Bros (или любой другой игре) с помощью одной только мышки, без использования режима Записи.</span></p>
@ -272,11 +259,11 @@
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>4.1. Традиционный ТАСинг</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,83 +53,71 @@
<div id="topic_content">
<p><span class="rvts20">Традиционный ТАСинг в Тасэдиторе</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><img align="right" border="0" alt hspace="6" vspace="6" src="lib/toolbox-method1.png"></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-method1.png"/></p>
<p class="rvps10"><span class="rvts22">В этом методе </span><span class="rvts22">Ввод</span><span class="rvts22"> не редактируется точечными изменениями, а записывается целыми сессиями различной длительности (обычно короткими).</span></p>
<p class="rvps10"><span class="rvts22">Для переключения между просмотром и редактированием необходимо включать и выключать режим Записи (клавиша </span><span class="rvts27">Q</span><span class="rvts22"> по умолчанию). Рекомендуется установить галочку "Follow cursor", чтобы наблюдать записываемый </span><span class="rvts22">Ввод</span><span class="rvts22"> в Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Основное занятие ТАСера:</span></p>
<p class="rvps10"><span class="rvts53"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">1.</span>
<span class="rvts22">Поставить Курсор Проигрывателя на начало редактируемого участка мувика, создать на этом кадре Закладку 1, определиться с целью.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">2.</span>
<span class="rvts22">Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки (как именно требуется изменить </span><span class="rvts22">Ввод</span><span class="rvts22">, начиная с какого кадра и т.д.).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">3.</span>
<span class="rvts22">Осуществить навигацию к месту исправления ошибки (например, загрузить Закладку 1 и заново проиграть до нужного кадра, либо загрузить заранее заготовленную Закладку прямо на нужном кадре).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">4.</span>
<span class="rvts22">В режиме Read+Write пройти игру </span><span class="rvts22">до наступления целевого события, записав </span><span class="rvts22">Ввод, отличающийся от уже имевшегося на этом участке</span><span class="rvts22">. По ходу записи следует периодически создавать Закладки в свободных слотах для ускорения навигации в случае, когда нужно откатить предыдущее действие.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">5.</span>
<span class="rvts22">Когда ошибочность тестируемого варианта очевидна ещё до окончания записи участка, имеет смысл сразу вернуться к пункту 2.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">6.</span>
<span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">] </span><span class="rvts22">Сохранить готовый вариант во временную Закладку.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">7.</span>
<span class="rvts22">Если это не первый вариант прохождения участка, сравнить полученный результат с лучшим результатом, используя критерий оптимальности. Если новый вариант оказался лучше (или если это ваш первый вариант прохождения участка), сохранить результат в Закладку 9. </span><span class="rvts22">Слот 9 будет отвечать за хранение самого лучшего результата шлифовки участка.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">8.</span>
<span class="rvts22">Вернуться к пункту 2 и опробовать ещё варианты, до тех пор пока не иссякнут идеи по данному участку.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">9.</span>
<span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">] </span><span class="rvts22">Если идеи иссякают, можно почерпнуть информацию из прошлого: пересмотреть несколько предыдущих участков в режиме Read-Only (например, загрузить Закладку 0, поставленную на начало уровня). Также можно получить пищу для ума из будущего: поиграть в события игры, идущие после окончания текущего участка.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">10.</span>
<span class="rvts22">Когда идеи полностью иссякли, восстановить лучший вариант прохождения из Закладки 9 в текущий мувик, определиться со следующим участком и вернуться к пункту 1.</span></p>
<p class="rvps15"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps2"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts53"><br/></span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">Поставить Курсор Проигрывателя на начало редактируемого участка мувика, создать на этом кадре Закладку 1, определиться с целью.</span></li>
<li class="rvps15"><span class="rvts22">Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки (как именно требуется изменить </span><span class="rvts22">Ввод</span><span class="rvts22">, начиная с какого кадра и т.д.).</span></li>
<li class="rvps15"><span class="rvts22">Осуществить навигацию к месту исправления ошибки (например, загрузить Закладку 1 и заново проиграть до нужного кадра, либо загрузить заранее заготовленную Закладку прямо на нужном кадре).</span></li>
<li class="rvps15"><span class="rvts22">В режиме Read+Write пройти игру </span><span class="rvts22">до наступления целевого события, записав </span><span class="rvts22">Ввод, отличающийся от уже имевшегося на этом участке</span><span class="rvts22">. По ходу записи следует периодически создавать Закладки в свободных слотах для ускорения навигации в случае, когда нужно откатить предыдущее действие.</span></li>
<li class="rvps15"><span class="rvts22">Когда ошибочность тестируемого варианта очевидна ещё до окончания записи участка, имеет смысл сразу вернуться к пункту 2.</span></li>
<li class="rvps15"><span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">] </span><span class="rvts22">Сохранить готовый вариант во временную Закладку.</span></li>
<li class="rvps15"><span class="rvts22">Если это не первый вариант прохождения участка, сравнить полученный результат с лучшим результатом, используя критерий оптимальности. Если новый вариант оказался лучше (или если это ваш первый вариант прохождения участка), сохранить результат в Закладку 9. </span><span class="rvts22">Слот 9 будет отвечать за хранение самого лучшего результата шлифовки участка.</span></li>
<li class="rvps15"><span class="rvts22">Вернуться к пункту 2 и опробовать ещё варианты, до тех пор пока не иссякнут идеи по данному участку.</span></li>
<li class="rvps15"><span class="rvts22">[</span><span class="rvts37">необязательный пункт</span><span class="rvts22">] </span><span class="rvts22">Если идеи иссякают, можно почерпнуть информацию из прошлого: пересмотреть несколько предыдущих участков в режиме Read-Only (например, загрузить Закладку 0, поставленную на начало уровня). Также можно получить пищу для ума из будущего: поиграть в события игры, идущие после окончания текущего участка.</span></li>
<li class="rvps15"><span class="rvts22">Когда идеи полностью иссякли, восстановить лучший вариант прохождения из Закладки 9 в текущий мувик, определиться со следующим участком и вернуться к пункту 1.</span></li>
</ol>
<p class="rvps15"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Эти 10 пунктов могут описать не только ТАСинг, но вообще любой процесс создания Ввода в эмуляторе.</span></p>
<p class="rvps10"><span class="rvts22">Например, когда вы просто записываете пробное прохождение игры (то есть играете с сэйвами, но без упорной шлифовки) вы используете только пункты 1 5. При этом вам сгодится любое успешное прохождение участка, так что при первом же наступлении конечного события вы сразу с пункта 5 переходите на пункт 1, к следующему участку. В таком прохождении вы сохраняетесь ради быстрой навигации в случае фатальной ошибки (например, не успел нажать кнопку </span><span class="rvts32">A</span><span class="rvts22"> и упал в яму), чтобы не пришлось переписывать Ввод с самого начала игры.</span></p>
<p class="rvps10"><span class="rvts22">Ну а во время серьёзной записи ТАСа необходимо не просто достичь конечного события в игре, но перепробовать множество различных вариантов достижения, чтобы в итоге выбрать самый лучший. Поэтому необходимо многократно повторить пункты 2 8, пока не возникнет чувство, что участок пройден идеально. </span><span class="rvts22">Пункты 6 10 отличают ТАСинг от простой игры с сэйвами.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Процесс Записи </span><span class="rvts22">Ввод</span><span class="rvts22">а представляет собой редактирование </span><span class="rvts22">Ввод</span><span class="rvts22">а прямо во время просмотра. То есть просматривая состояние игры на кадр 200, вы готовите </span><span class="rvts22">Ввод</span><span class="rvts22"> для кадра 201 (кладёте пальцы на нужные кнопки), а затем с помощью </span><span class="rvts27">Frame Advance</span><span class="rvts22"> передаёте этот Ввод в игру и сразу же видите результат состояние игры на кадр 201 (если ориентироваться по состоянию оперативной памяти). Этот результат является промежуточным, его можно использовать для примерной оценки текущей игровой ситуации, но нельзя использовать для сравнения прошлой и текущей стратегии прохождения участка. Так что не нужно применять критерий оптимальности после каждого введённого/просмотренного кадра. Даже если в начале участка вы обгоняете прошлый вариант, в середине вы можете отстать. Только при достижении конца участка (пункт 6) появляется объективная основа для сравнений. Поэтому конец участка надо выбирать правильно.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Основную часть рабочего времени в этом цикле занимают пункты 3 и 4. Порой, прежде чем дойти до конца участка, требуется несколько раз повторить пункты 2, 3, 4 и 5, записывая и отбраковывая решения, ошибочность которых становится очевидной почти сразу, даже без сравнений с прошлыми вариантами прохождения. Н</span><span class="rvts22">апример, если вашего персонажа посреди разбега убивает враг, то сразу понятно, что далее вводить кнопки разбега быссмысленно, нужно откатиться назад и переписать </span><span class="rvts22">Ввод</span><span class="rvts22"> так, чтобы враг промахнулся. В особо напряжённых ситуациях лучше даже разбить текущий участок на подучастки </span><span class="rvts37">до</span><span class="rvts22"> и </span><span class="rvts37">после</span><span class="rvts22"> взаимодействия с врагом, чтобы оптимизировать их по отдельности.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Так как редактирование </span><span class="rvts22">Ввод</span><span class="rvts22">а в этом методе осуществляется с помощью Курсора Проигрывателя (а не с помощью курсора мыши), то для эффективной работы необходимо научиться быстро доставлять голубой курсор к нужному кадру, пока не забылась текущая идея по улучшению участка. По мере наработки опыта ТАСеры приучаются жонглировать Закладками на уровне моторной памяти, машинально создавая промежуточные Закладки во время записи </span><span class="rvts22">Ввод</span><span class="rvts22">а и беспечно загружая их при малейшей необходимости. Этому навыку невозможно научить, это приходит со временем, обычно после завершения первого-второго ТАСа.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Плюсы метода:</span></p>
<p class="rvps15"><span class="rvts51">+ </span><span class="rvts22">Интуитивно понятный любому геймеру процесс.</span></p>
<p class="rvps15"><span class="rvts51">+ </span><span class="rvts22">Постоянная отдача позволяет на ходу корректировать свои решения и заранее отсекать в уме заведомо ошибочные комбинации </span><span class="rvts22">Ввод</span><span class="rvts22">а. Это уменьшает количество требуемых исправлений.</span></p>
<p class="rvps15"><span class="rvts51">+ </span><span class="rvts22">Границы текущего участка машинально отмечаются с помощью Закладок (ради навигации), приучая ТАСера к порядку.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Минусы метода:</span></p>
<p class="rvps15"><span class="rvts51"> </span><span class="rvts22">Настойчивая отдача провоцирует ТАСера отсекать некоторые нелогичные, но потенциально выигрышные комбинации.</span></p>
<p class="rvps15"><span class="rvts51"></span><span class="rvts26"> </span><span class="rvts22">Медленная навигация к месту ошибки может отвлечь от мысли.</span></p>
<p class="rvps15"><span class="rvts51"></span><span class="rvts26"> </span><span class="rvts22">Так как Закладок всего 10, границы прошлых участков теряются при создании нового участка.</span></p>
<p class="rvps15"><span class="rvts22"><br></span></p>
<p class="rvps15"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Когда использовать: </span><span class="rvts22">при записи пробного прохождения участка, когда не важна точность, но требуется примерное выполнение запланированной последовательности действий. А в отшлифовке </span><span class="rvts22">Ввод</span><span class="rvts22">а этот метод значительно уступает остальным. </span><span class="rvts22">Тем не менее, если вы новичок, рекомендуется освоить этот метод ТАСинга, так как инструменты для его применения есть в большинстве современных эмуляторов, а Тасэдитор пока есть только в FCEUX.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При миграции в Тасэдитор традиционный метод несколько усовершенствовался по сравнению с тем же методом вне Тасэдитора:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Появилась возможность не повторять заново весь </span><span class="rvts22">Ввод </span><span class="rvts22">от ближайшего сэйва до места ошибки и от места ошибки до конца участка. Для навигации без затирания Ввода можно прямо в режиме Записи вращать колесо мыши или перемещать Курсор Проигрывателя любым другим способом (кроме способа </span><span class="rvts27">Frame Advance</span><span class="rvts22">, т.к. он будет затирать старый Ввод).</span></p>
<p class="rvps23" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Появились новые способы навигации Курсором Проигрывателя (обратная перемотка, прыжки по Маркерам, прыжки по Закладкам без необходимости выключения Записи). Это позволяет быстрее попадать к любому желаемому месту и реже создавать Закладки.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При загрузке ответвления Закладки мувик не усекается после кадра Закладки. Поэтому теперь можно сначала записать, к примеру, участок кадров 900-1000, а затем записать участок 700-900, не потеряв при этом записанные данные 900-1000 (но, возможно, потребуется пересинхронизация нажатий).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможность использовать Тасэдитор вместо внешнего редактора </span><span class="rvts22">Ввод</span><span class="rvts22">а (для копипаста и т.п.).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Визуализация </span><span class="rvts22">Ввод</span><span class="rvts22">а, лага, ответвлений Закладок и т.д.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Дополнительные инструменты: мультитрекинг, наложение, шаблоны, авто-подгонка Ввода и т.д.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">Появилась возможность не повторять заново весь </span><span class="rvts22">Ввод </span><span class="rvts22">от ближайшего сэйва до места ошибки и от места ошибки до конца участка. Для навигации без затирания Ввода можно прямо в режиме Записи вращать колесо мыши или перемещать Курсор Проигрывателя любым другим способом (кроме способа </span><span class="rvts27">Frame Advance</span><span class="rvts22">, т.к. он будет затирать старый Ввод).</span></li>
<li class="rvps23" style="text-indent: 30px"><span class="rvts22">Появились новые способы навигации Курсором Проигрывателя (обратная перемотка, прыжки по Маркерам, прыжки по Закладкам без необходимости выключения Записи). Это позволяет быстрее попадать к любому желаемому месту и реже создавать Закладки.</span></li>
<li class="rvps15"><span class="rvts22">При загрузке ответвления Закладки мувик не усекается после кадра Закладки. Поэтому теперь можно сначала записать, к примеру, участок кадров 900-1000, а затем записать участок 700-900, не потеряв при этом записанные данные 900-1000 (но, возможно, потребуется пересинхронизация нажатий).</span></li>
<li class="rvps15"><span class="rvts22">Возможность использовать Тасэдитор вместо внешнего редактора </span><span class="rvts22">Ввод</span><span class="rvts22">а (для копипаста и т.п.).</span></li>
<li class="rvps15"><span class="rvts22">Визуализация </span><span class="rvts22">Ввод</span><span class="rvts22">а, лага, ответвлений Закладок и т.д.</span></li>
<li class="rvps15"><span class="rvts22">Дополнительные инструменты: мультитрекинг, наложение, шаблоны, авто-подгонка Ввода и т.д.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a class="rvts28" href="NonlinearTASing.html">Следующий метод</a><span class="rvts22"> гораздо эффективнее, хоть и требует некоторого привыкания.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour">Easily create CHM Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -90,7 +90,18 @@ body {
#popupMenu a{
display: block;
padding: 5px 5px 2px 5px;
margin: 5px 10px 2px 5px;
}
.close-button{
color: #666;
cursor: hand;
cursor: pointer;
float: right;
font-size: 10px;
position: relative;
top: -5px;
right: -3px;
}
/* Search highlight */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -4,10 +4,9 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<title>TAS Editor Manual</title>
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<title>TAS Editor Manual Rus</title>
<script type="text/javascript">
<!--
var sTopic = "";
if (top.location.href.lastIndexOf("?") > 0)
sTopic = top.location.href.substring(top.location.href.lastIndexOf("?") + 1, top.location.href.length);
@ -16,7 +15,6 @@
document.write('<frame src="toc.html" name="FrameTOC">');
document.write('<frame src="' + sTopic + '" name="FrameMain">');
document.write('</frameset>');
//-->
</script>
</head>

View File

@ -0,0 +1,68 @@
/*!
* jQuery UI 1.8.12
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI
*/
(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.12",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
;/*!
* jQuery UI Widget 1.8.12
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Widget
*/
(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
;/*
* jQuery UI Tabs 1.8.12
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Tabs
*
* Depends:
* jquery.ui.core.js
* jquery.ui.widget.js
*/
(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.12"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
;

View File

@ -0,0 +1,15 @@
/*
* Treeview pre-1.4.1 - jQuery plugin to hide and show branches of a tree
*
* http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
* http://docs.jquery.com/Plugins/Treeview
*
* Copyright (c) 2007 Jörn Zaefferer
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $
*
*/;(function($){$.extend($.fn,{swapClass:function(c1,c2){var c1Elements=this.filter('.'+c1);this.filter('.'+c2).removeClass(c2).addClass(c1);c1Elements.removeClass(c1).addClass(c2);return this;},replaceClass:function(c1,c2){return this.filter('.'+c1).removeClass(c1).addClass(c2).end();},hoverClass:function(className){className=className||"hover";return this.hover(function(){$(this).addClass(className);},function(){$(this).removeClass(className);});},heightToggle:function(animated,callback){animated?this.animate({height:"toggle"},animated,callback):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();if(callback)callback.apply(this,arguments);});},heightHide:function(animated,callback){if(animated){this.animate({height:"hide"},animated,callback);}else{this.hide();if(callback)this.each(callback);}},prepareBranches:function(settings){if(!settings.prerendered){this.filter(":last-child:not(ul)").addClass(CLASSES.last);this.filter((settings.collapsed?"":"."+CLASSES.closed)+":not(."+CLASSES.open+")").find(">ul").hide();}return this.filter(":has(>ul)");},applyClasses:function(settings,toggler){this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event){if(this==event.target)toggler.apply($(this).next());}).add($("a",this)).hoverClass();if(!settings.prerendered){this.filter(":has(>ul:hidden)").addClass(CLASSES.expandable).replaceClass(CLASSES.last,CLASSES.lastExpandable);this.not(":has(>ul:hidden)").addClass(CLASSES.collapsable).replaceClass(CLASSES.last,CLASSES.lastCollapsable);this.prepend("<div class=\""+CLASSES.hitarea+"\"/>").find("div."+CLASSES.hitarea).each(function(){var classes="";$.each($(this).parent().attr("class").split(" "),function(){classes+=this+"-hitarea ";});$(this).addClass(classes);});}this.find("div."+CLASSES.hitarea).click(toggler);},treeview:function(settings){settings=$.extend({cookieId:"treeview"},settings);if(settings.add){return this.trigger("add",[settings.add]);}if(settings.toggle){var callback=settings.toggle;settings.toggle=function(){return callback.apply($(this).parent()[0],arguments);};}function treeController(tree,control){function handler(filter){return function(){toggler.apply($("div."+CLASSES.hitarea,tree).filter(function(){return filter?$(this).parent("."+filter).length:true;}));return false;};}$("a:eq(0)",control).click(handler(CLASSES.collapsable));$("a:eq(1)",control).click(handler(CLASSES.expandable));$("a:eq(2)",control).click(handler());}function toggler(){$(this).parent().find(">.hitarea").swapClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).swapClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().swapClass(CLASSES.collapsable,CLASSES.expandable).swapClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightToggle(settings.animated,settings.toggle);if(settings.unique){$(this).parent().siblings().find(">.hitarea").replaceClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).replaceClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().replaceClass(CLASSES.collapsable,CLASSES.expandable).replaceClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightHide(settings.animated,settings.toggle);}}function serialize(){function binary(arg){return arg?1:0;}var data=[];branches.each(function(i,e){data[i]=$(e).is(":has(>ul:visible)")?1:0;});$.cookie(settings.cookieId,data.join(""));}function deserialize(){var stored=$.cookie(settings.cookieId);if(stored){var data=stored.split("");branches.each(function(i,e){$(e).find(">ul")[parseInt(data[i])?"show":"hide"]();});}}this.addClass("treeview");var branches=this.find("li").prepareBranches(settings);switch(settings.persist){case"cookie":var toggleCallback=settings.toggle;settings.toggle=function(){serialize();if(toggleCallback){toggleCallback.apply(this,arguments);}};deserialize();break;case"location":var current=this.find("a").filter(function(){return this.href.toLowerCase()==location.href.toLowerCase();});if(current.length){current.addClass("selected").parents("ul, li").add(current.next()).show();}break;}branches.applyClasses(settings,toggler);if(settings.control){treeController(this,settings.control);$(settings.control).show();}return this.bind("add",function(event,branches){$(branches).prev().removeClass(CLASSES.last).removeClass(CLASSES.lastCollapsable).removeClass(CLASSES.lastExpandable).find(">.hitarea").removeClass(CLASSES.lastCollapsableHitarea).removeClass(CLASSES.lastExpandableHitarea);$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings,toggler);});}});var CLASSES=$.fn.treeview.classes={open:"open",closed:"closed",expandable:"expandable",expandableHitarea:"expandable-hitarea",lastExpandableHitarea:"lastExpandable-hitarea",collapsable:"collapsable",collapsableHitarea:"collapsable-hitarea",lastCollapsableHitarea:"lastCollapsable-hitarea",lastCollapsable:"lastCollapsable",lastExpandable:"lastExpandable",last:"last",hitarea:"hitarea"};$.fn.Treeview=$.fn.treeview;})(jQuery);

File diff suppressed because one or more lines are too long

View File

@ -2,9 +2,9 @@
<html>
<head>
<title>TAS Editor Manual- Table of Contents</title>
<title>TAS Editor Manual Rus- Table of Contents</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/silver-theme/jquery-ui-1.8.12.custom.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/dynatree/chm/ui.dynatree.css" />
@ -42,51 +42,57 @@
});
// Toc
$("#tab-toc").dynatree({
clickFolderMode: 1,
debugLevel: 0,
imagePath: 'css/dynatree/chm/',
onActivate: function(node){
if ($("#tab-keywords") && $("#tab-keywords").dynatree && $("#tab-keywords").dynatree("getTree") && $("#tab-keywords").dynatree("getTree").activateKey)
$("#tab-keywords").dynatree("getTree").activateKey(null);
if(node.data.href && node.data.href != '#'){
window.open(node.data.href, node.data.target);
if ($("#tab-toc").length) {
$("#tab-toc").dynatree({
clickFolderMode: 1,
debugLevel: 0,
imagePath: 'css/dynatree/chm/',
onActivate: function(node){
if ($("#tab-keywords").length && $("#tab-keywords").dynatree && $("#tab-keywords").dynatree("getTree") && $("#tab-keywords").dynatree("getTree").activateKey)
$("#tab-keywords").dynatree("getTree").activateKey(null);
if(node.data.href && node.data.href != '#'){
window.open(node.data.href, node.data.target);
}
}
}
});
// Expand all nodes if required
$("#tab-toc").dynatree("getRoot").visit(function(node){
node.expand(true);
});
// Select the active help id
if (sHelpIdToActivate != '') $("#tab-toc").dynatree("getTree").activateKey(sHelpIdToActivate);
// Expand all nodes if required
$("#tab-toc").dynatree("getRoot").visit(function(node){
node.expand(true);
});
// Select the active help id
if (sHelpIdToActivate != '') $("#tab-toc").dynatree("getTree").activateKey(sHelpIdToActivate);
}
// Keywords
$("#tab-keywords").dynatree({
clickFolderMode: 1,
debugLevel: 0,
imagePath: 'css/dynatree/chm/',
onClick: function(node, event){
HideKwPopup();
if (node.data && node.data.click)
{
var aRefList = null;
eval('aRefList=' + node.data.click);
if (ShowKwPopup(node.li, aRefList))
if ($("#tab-keywords").length) {
$("#tab-keywords").dynatree({
clickFolderMode: 1,
debugLevel: 0,
imagePath: 'css/dynatree/chm/',
onClick: function(node, event){
HideKwPopup();
if (node.data && node.data.click)
{
if ($("#tab-toc") && $("#tab-toc").dynatree && $("#tab-toc").dynatree("getTree") && $("#tab-toc").dynatree("getTree").activateKey)
$("#tab-toc").dynatree("getTree").activateKey(null);
if(node.data.href && node.data.href != '#'){
window.open(node.data.href, node.data.target);
var aRefList = null;
eval('aRefList=' + node.data.click);
if (ShowKwPopup(node.li, aRefList))
{
if ($("#tab-toc") && $("#tab-toc").dynatree && $("#tab-toc").dynatree("getTree") && $("#tab-toc").dynatree("getTree").activateKey)
$("#tab-toc").dynatree("getTree").activateKey(null);
if(node.data.href && node.data.href != '#'){
window.open(node.data.href, node.data.target);
}
}
}
}
}
});
// Expand all nodes if required
$("#tab-keywords").dynatree("getRoot").visit(function(node){
node.expand(true);
});
// Expand all nodes if required
$("#tab-keywords").dynatree("getRoot").visit(function(node){
node.expand(true);
});
}
// Load search data
$.getScript("js/searchdata.js", function() {
bSearchDataLoaded = true;
@ -99,7 +105,7 @@
function SelectTocItem(sHelpId)
{
if ($("#tab-toc") && $("#tab-toc").dynatree && $("#tab-toc").dynatree("getTree") && $("#tab-toc").dynatree("getTree").getNodeByKey) {
if ($("#tab-toc").length && $("#tab-toc").dynatree && $("#tab-toc").dynatree("getTree") && $("#tab-toc").dynatree("getTree").getNodeByKey) {
$("#tab-toc").dynatree("getTree").getNodeByKey(sHelpId).activateSilently();
}
else {
@ -122,6 +128,14 @@
var oParentDiv = document.createElement("DIV");
oParentDiv.id = "popupMenu";
var oLink = null;
// Close button
oLink = document.createElement("SPAN");
oLink.className = "close-button";
oLink.innerHTML = "X";
oLink.href = "#";
oLink.onclick = HideKwPopup;
oParentDiv.appendChild(oLink);
// Items
for (var nCnt=0; nCnt<aLinks.length; nCnt++)
{
oLink = document.createElement("A");