「ケン通常技」の編集履歴(バックアップ)一覧はこちら
ケン通常技 - (2017/06/21 (水) 02:55:33) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
***近A
&sizex(4){発生5F 持続4F 硬直9F 硬直差-4 攻撃レベル1 ダメージ9}
備考:
#image(test.gif)#javascript(){
//var bookmarklet = function() {
//var bookmarklet = function() {
gif = "test.gif"
var playGIF = function(gif) {
var stream;
var hdr;
var loadError = null;
var transparency = null;
var delay = null;
var disposalMethod = null;
var lastDisposalMethod = null;
var frame = null;
var playing = true;
var forward = true;
var frames = [];
var clear = function() {
transparency = null;
delay = null;
lastDisposalMethod = disposalMethod;
disposalMethod = null;
frame = null;
//frame = tmpCanvas.getContext('2d');
};
// XXX: There's probably a better way to handle catching exceptions when
// callbacks are involved.
var doParse = function() {
try {
parseGIF(stream, handler);
} catch(err) {
doLoadError('parse');
}
};
var doGet = function() {
var h = new XMLHttpRequest();
h.overrideMimeType('text/plain; charset=x-user-defined');
h.onload = function(e) {
//doLoadProgress(e);
// TODO: In IE, might be able to use h.responseBody instead of overrideMimeType.
stream = new Stream(h.responseText);
setTimeout(doParse, 0);
};
h.onprogress = doLoadProgress;
h.onerror = function() { doLoadError('xhr'); };
h.open('GET', gif.src, true);
h.send();
};
var doText = function(text) {
toolbar.innerHTML = text; // innerText? Escaping? Whatever.
//ctx.fillStyle = 'black';
//ctx.font = '32px sans-serif';
//ctx.fillText(text, 8, 32);
};
var doShowProgress = function(prefix, pos, length, draw) {
//toolbar.style.display = pos === length ? 'none' : 'block';
//toolbar.style.display = pos === length ? '' : 'block'; // FIXME Move this to doPlay() or something.
toolbar.style.visibility = pos === length ? '' : 'visible'; // FIXME Move this to doPlay() or something.
if (draw) {
var height = Math.min(canvas.height >> 3, canvas.height);
var top = (canvas.height - height) >> 1;
var bottom = (canvas.height + height) >> 1;
var mid = (pos / length) * canvas.width;
// XXX Figure out alpha fillRect.
//ctx.fillStyle = 'salmon';
ctx.fillStyle = 'rgba(255,160,122,0.5)';
ctx.fillRect(mid, top, canvas.width - mid, height);
//ctx.fillStyle = 'teal';
ctx.fillStyle = 'rgba(0,128,128,0.5)';
ctx.fillRect(0, top, (pos / length) * canvas.width, height);
}
doText(prefix + ' ' + Math.floor(pos / length * 100) + '%');
};
var doLoadProgress = function(e) {
// TODO: Find out what lengthComputable actually means.
if (e.lengthComputable) doShowProgress('Loading...', e.loaded, e.total, true);
};
var doLoadError = function(originOfError) {
var drawError = function() {
ctx.fillStyle = 'black';
ctx.fillRect(0, 0, hdr.width, hdr.height);
ctx.strokeStyle = 'red';
ctx.lineWidth = 3;
ctx.moveTo(0, 0);
ctx.lineTo(hdr.width, hdr.height);
ctx.moveTo(0, hdr.height);
ctx.lineTo(hdr.width, 0);
ctx.stroke();
};
loadError = originOfError;
hdr = {width: gif.width, height: gif.height}; // Fake header.
frames = [];
drawError();
setTimeout(doPlay, 0);
};
var doHdr = function(_hdr) {
hdr = _hdr;
//console.assert(gif.width === hdr.width && gif.height === hdr.height); // See other TODO.
canvas.width = hdr.width;
canvas.height = hdr.height;
div.style.width = hdr.width + 'px';
//div.style.height = hdr.height + 'px';
toolbar.style.minWidth = hdr.width + 'px';
tmpCanvas.width = hdr.width;
tmpCanvas.height = hdr.height;
//if (hdr.gctFlag) { // Fill background.
// rgb = hdr.gct[hdr.bgColor];
// tmpCanvas.fillStyle = 'rgba(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ',');
//}
//tmpCanvas.getContext('2d').fillRect(0, 0, hdr.width, hdr.height);
// TODO: Figure out the disposal method business.
};
var doGCE = function(gce) {
pushFrame();
clear();
transparency = gce.transparencyGiven ? gce.transparencyIndex : null;
delay = gce.delayTime;
disposalMethod = gce.disposalMethod;
// We don't have much to do with the rest of GCE.
};
var pushFrame = function() {
if (!frame) return;
frames.push({data: frame.getImageData(0, 0, hdr.width, hdr.height),
delay: delay});
};
var doImg = function(img) {
if (!frame) frame = tmpCanvas.getContext('2d');
var ct = img.lctFlag ? img.lct : hdr.gct; // TODO: What if neither exists?
var cData = frame.getImageData(img.leftPos, img.topPos, img.width, img.height);
img.pixels.forEach(function(pixel, i) {
// cData.data === [R,G,B,A,...]
if (transparency !== pixel) { // This includes null, if no transparency was defined.
cData.data[i * 4 + 0] = ct[pixel][0];
cData.data[i * 4 + 1] = ct[pixel][1];
cData.data[i * 4 + 2] = ct[pixel][2];
cData.data[i * 4 + 3] = 255; // Opaque.
} else {
// TODO: Handle disposal method properly.
// XXX: When I get to an Internet connection, check which disposal method is which.
if (lastDisposalMethod === 2 || lastDisposalMethod === 3) {
cData.data[i * 4 + 3] = 0; // Transparent.
// XXX: This is very very wrong.
} else {
// lastDisposalMethod should be null (no GCE), 0, or 1; leave the pixel as it is.
// assert(lastDispsalMethod === null || lastDispsalMethod === 0 || lastDispsalMethod === 1);
// XXX: If this is the first frame (and we *do* have a GCE),
// lastDispsalMethod will be null, but we want to set undefined
// pixels to the background color.
}
}
});
frame.putImageData(cData, img.leftPos, img.topPos);
// We could use the on-page canvas directly, except that we draw a progress
// bar for each image chunk (not just the final image).
ctx.putImageData(cData, img.leftPos, img.topPos);
};
var doPlay = (function() {
var i = -1;
var curFrame; // XXX These two are <input> tags. They're declared up here
// instead of in initToolbar's scope so that stepFrame has
// access to them. This is hacky and should be eliminated.
// (Maybe this should actually be a class instead of a
// cheap plastic imitation? At the very least it should be
// abstracted more.)
var delayInfo;
var showingInfo = false;
var pinned = false;
var stepFrame = function(delta) { // XXX: Name is confusing.
i = (i + delta + frames.length) % frames.length;
curFrame.value = i + 1;
delayInfo.value = frames[i].delay;
putFrame();
};
var step = (function() {
var stepping = false;
var doStep = function() {
stepping = playing;
if (!stepping) return;
stepFrame(forward ? 1 : -1);
var delay = frames[i].delay * 10;
if (!delay) delay = 100; // FIXME: Should this even default at all? What should it be?
setTimeout(doStep, delay);
};
return function() { if (!stepping) setTimeout(doStep, 0); };
}());
var putFrame = function() {
ctx.putImageData(frames[i].data, 0, 0);
};
var initToolbar = function() {
// Characters.
var right = '▶';
var left = '◀';
var bar = '❙';
var rarr = '→';
var larr = '←';
var xsign = '✖';
//var infosource = 'ℹ';
var circle = '○';
var circledot = '⊙';
//var blackSquare = '■'; // XXX
//var doubleVerticalLine = '‖'; // XXX
var nearr = '↗';
// Buttons.
var playIcon = right;
var pauseIcon = bar + bar;
var revplayIcon = left;
var prevIcon = left + bar;
var nextIcon = bar + right;
//var showInfoIcon = infosource;
var showInfoIcon = 'i'; // Fonts.
var revIcon = larr;
var revrevIcon = rarr;
var closeIcon = xsign;
var pinIcon = circledot;
var unpinIcon = circle;
var popupIcon = nearr;
/**
* @param{Object=} attrs Attributes (optional).
*/ // Make compiler happy.
var elt = function(tag, cls, attrs) {
var e = document.createElement(tag);
if (cls) e.className = 'jsgif_' + cls;
for (var k in attrs) {
e[k] = attrs[k];
}
return e;
};
var simpleTools = elt('div', 'simple_tools');
var rev = elt('button', 'rev');
var showInfo = elt('button', 'show_info');
var prev = elt('button', 'prev');
var playPause = elt('button', 'play_pause');
var next = elt('button', 'next');
var pin = elt('button', 'pin');
var close = elt('button', 'close');
var infoTools = elt('div', 'info_tools');
curFrame = elt('input', 'cur_frame', {type: 'text'}); // See above.
delayInfo = elt('input', 'delay_info', {type: 'text'}); // See above.
var updateTools = function() {
if (playing) {
playPause.innerHTML = pauseIcon;
playPause.title = 'Pause'
prev.style.visibility = 'hidden'; // See TODO.
next.style.visibility = 'hidden';
} else {
playPause.innerHTML = forward ? playIcon : revplayIcon;
playPause.title = 'Play';
prev.style.visibility = '';
next.style.visibility = '';
}
toolbar.style.visibility = pinned ? 'visible' : ''; // See TODO.
infoTools.style.display = showingInfo ? '' : 'none'; // See TODO.
showInfo.innerHTML = showInfoIcon;
showInfo.title = 'Show info/more tools'
rev.innerHTML = forward ? revIcon : revrevIcon;
rev.title = forward ? 'Reverse' : 'Un-reverse';
prev.innerHTML = prevIcon;
prev.title = 'Previous frame';
next.innerHTML = nextIcon;
next.title = 'Next frame'
pin.innerHTML = pinned ? unpinIcon : pinIcon;
pin.title = pinned ? 'Unpin' : 'Pin';
close.innerHTML = closeIcon;
close.title = 'Close jsgif and go back to original image';
curFrame.disabled = playing;
delayInfo.disabled = playing;
toolbar.innerHTML = '';
simpleTools.innerHTML = '';
infoTools.innerHTML = '';
var t = function(text) { return document.createTextNode(text); };
if (frames.length < 2) { // XXX
// Also, this shouldn't actually be playing in this case.
// TODO: Are we going to want an info tool that'll be displayed on static GIFs later?
if (loadError == 'xhr') {
toolbar.appendChild(t("Load failed; cross-domain? "));
var popup = elt('button', 'popup');
popup.addEventListener('click', function() { window.open(gif.src); } );
popup.innerHTML = popupIcon;
popup.title = 'Click to open GIF in new window; try running jsgif there instead';
toolbar.appendChild(popup);
} else if (loadError == 'parse') {
toolbar.appendChild(t("Parse failed "));
}
toolbar.appendChild(close);
return;
}
// We don't actually need to repack all of these -- that's left over
// from before -- but it doesn't especially hurt either.
var populate = function(elt, children) {
elt.innerHTML = '';
children.forEach(function(c) { elt.appendChild(c); });
//children.forEach(elt.appendChild); // Is this a "pseudo-function"?
};
// XXX Blach.
var simpleToolList = forward ? [showInfo, rev, prev, playPause, next, pin, close]
: [showInfo, rev, next, playPause, prev, pin, close];
populate(toolbar, [simpleTools, infoTools]);
populate(simpleTools, simpleToolList);
populate(infoTools, [t(' frame: '), curFrame, t(' / '), t(frames.length), t(' (delay: '), delayInfo, t(')')]);
};
var doRev = function() {
forward = !forward;
updateTools();
rev.focus(); // (because repack)
};
var doNextFrame = function() { stepFrame(1); };
var doPrevFrame = function() { stepFrame(-1); };
var doPlayPause = function() {
playing = !playing;
updateTools();
playPause.focus(); // In case this was called by clicking on the
// canvas (we have to do this here because we
// repack the buttons).
step();
};
var doCurFrameChanged = function() {
var newFrame = +curFrame.value;
if (isNaN(newFrame) || newFrame < 1 || newFrame > frames.length) {
// Invalid frame; put it back to what it was.
curFrame.value = i + 1;
} else {
i = newFrame - 1;
putFrame();
}
};
var doCurDelayChanged = function() {
var newDelay = +delayInfo.value;
if (!isNaN(newDelay)) {
frames[i].delay = newDelay;
}
};
var doToggleShowingInfo = function() {
showingInfo = !showingInfo;
updateTools();
showInfo.focus(); // (because repack)
};
var doTogglePinned = function() {
pinned = !pinned;
updateTools();
pin.focus(); // (because repack)
};
// TODO: If the <img> was in an <a>, every one of these will go to the
// URL. We don't want that for the buttons (and probably not for
// anything?).
showInfo.addEventListener('click', doToggleShowingInfo, false);
rev.addEventListener('click', doRev, false);
curFrame.addEventListener('change', doCurFrameChanged, false);
prev.addEventListener('click', doPrevFrame, false);
playPause.addEventListener('click', doPlayPause, false);
next.addEventListener('click', doNextFrame, false);
pin.addEventListener('click', doTogglePinned, false);
close.addEventListener('click', doClose, false);
delayInfo.addEventListener('change', doCurDelayChanged, false);
canvas.addEventListener('click', doPlayPause, false);
// For now, to handle GIFs in <a> tags and so on. This needs to be handled better, though.
div.addEventListener('click', function(e) { e.preventDefault(); }, false);
updateTools();
};
return function() {
setTimeout(initToolbar, 0);
if (loadError) return;
canvas.width = hdr.width;
canvas.height = hdr.height;
step();
};
}());
var doClose = function() {
playing = false;
parent.insertBefore(gif, div);
parent.removeChild(div);
};
var doDecodeProgress = function(draw) {
doShowProgress('Decoding (frame ' + (frames.length + 1) + ')...', stream.pos, stream.data.length, draw);
};
var doNothing = function(){};
/**
* @param{boolean=} draw Whether to draw progress bar or not; this is not idempotent because of translucency.
* Note that this means that the text will be unsynchronized with the progress bar on non-frames;
* but those are typically so small (GCE etc.) that it doesn't really matter. TODO: Do this properly.
*/
var withProgress = function(fn, draw) {
return function(block) {
fn(block);
doDecodeProgress(draw);
};
};
var handler = {
hdr: withProgress(doHdr),
gce: withProgress(doGCE),
com: withProgress(doNothing), // I guess that's all for now.
app: {
// TODO: Is there much point in actually supporting iterations?
NETSCAPE: withProgress(doNothing)
},
img: withProgress(doImg, true),
eof: function(block) {
//toolbar.style.display = '';
pushFrame();
doDecodeProgress(false);
doText('Playing...');
doPlay();
}
};
var parent = gif.parentNode;
var div = document.createElement('div');
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var toolbar = document.createElement('div');
var tmpCanvas = document.createElement('canvas');
// Copy the computed style of the <img> to the <div>. The CSS specifies
// !important for all its properties; this still has a few issues, but it's
// probably preferable to not doing it. XXX: Maybe this should only copy a
// few specific properties (or specify properties more thoroughly in the
// CSS)?
// (If we don't hav getComputedStyle we'll have to get along without it, of
// course. It's not as if this supports IE, anyway, though, so I don't know
// if that really matters.)
//
// XXX: Commented out for now. If uncommenting, make sure to add !important
// to all the CSS properties in jsgif.css
//
//if (window.getComputedStyle) {
// for (var s in window.getComputedStyle(gif)) {
// div.style[s] = gif.style[s];
// }
//}
// This is our first estimate for the size of the picture. It might have been
// changed so we'll correct it when we parse the header. TODO: Handle zoom etc.
canvas.width = gif.width;
canvas.height = gif.height;
toolbar.style.minWidth = gif.width + 'px';
div.className = 'jsgif';
toolbar.className = 'jsgif_toolbar';
div.appendChild(canvas);
div.appendChild(toolbar);
parent.insertBefore(div, gif);
parent.removeChild(gif);
doText('Loading...');
doGet();
};
var bookmarkletCSS = '/* INSERT_CSS_HERE */';
var insertCSS = function(css) { // Surely there's a much better way of handling this whole thing.
// XXX: If there isn't a better way of handling this: Should we remove the <style> tag when the bookmarklet is done?
var style = document.createElement('style');
style.type = 'text/css';
style.textContent = css; // See TODO.
document.body.appendChild(style);
};
var to_a = function(pseudoList) { // Blagh, delicious DOM. I'll do this for now.
var a = [];
for (var i = 0; i < pseudoList.length; i++) {
a.push(pseudoList[i]);
}
return a;
};
// There *has* to be a better way of doing this. This is just... Temporary. That's right, temporary.
var join = function(strings, between) {
if (between === undefined) between = '';
return strings.reduce(function(s, n) { return s + between + n; }, '');
};
var elemClasses = function(elem) {
return elem.className.split(/\s/);
};
var addClass = function(elem, cls) {
elem.className += ' ' + cls;
};
var removeClass = function(elem, cls) {
var classes = elemClasses(elem).filter(function(_cls) { return _cls !== cls; });
elem.className = join(classes, ' ');
};
var imgs = to_a(document.getElementsByTagName('img'));
var gifs = imgs.filter(function(img) {
return img.src.slice(-4).toLowerCase() === '.gif';
// This is a very cheap plastic imitation of checking the MIME type -- I've
// seen GIFs with no extension (or, even worse, ending in .jpg). I can't
// see a good way of figuring out if an image is a GIF, though, so this
// will have TODO for now.
});
// Partial workaround: If there were no .gif images, we'll just try all the <img> tags.
if (gifs.length === 0) gifs = imgs;
var clicked = function(e) {
var gif = this; // eventListener context
gifs.forEach(rmOverlay);
setTimeout(function() { playGIF(gif); }, 0);
e.preventDefault();
};
var mkOverlay = function(gif) {
if (elemClasses(gif).indexOf('jsgif_overlaid') !== -1) return; // Idempotent.
addClass(gif, 'jsgif_overlaid');
gif.addEventListener('click', clicked, false);
};
var rmOverlay = function(gif) {
// XXX: What if the bookmarklet was run more than once?
removeClass(gif, 'jsgif_overlaid');
gif.removeEventListener('click', clicked, false);
};
//var clicked = function() {
// var gif = overlay_to_gif(this);
// gifs.forEach(rmOverlay);
// setTimeout(function() { playGIF(gif); }, 0);
//};
//var mkOverlay = function(gif) {
// var overlayOuter = document.createElement('div');
// overlayOuter.className = 'jsgif_overlay_outer';
// var overlayInner = document.createElement('div');
// overlayInner.className = 'jsgif_overlay_inner';
// var parent = gif.parentNode;
// parent.insertBefore(overlayOuter, gif);
// parent.removeChild(gif);
// overlayOuter.appendChild(gif);
// overlayOuter.appendChild(overlayInner);
// overlayInner.addEventListener('click', clicked, false);
//};
//var clearOverlay = function(gif) {
// var overlayOuter = gif.parentNode;
// var parent = overlayOuter.parentNode;
// overlayOuter.removeChild(gif);
// parent.insertBefore(gif, overlayOuter);
// parent.removeChild(overlayOuter);
//};
//var overlay_to_gif = function(overlayInner) {
// // We get overlayInner because that's what the event handler is on.
// return overlayInner.previousSibling;
//};
insertCSS(bookmarkletCSS);
// XXX: In retrospect, this behavior is more confusing than useful.
//if (gifs.length === 1) {
// setTimeout(function() { playGIF(gifs[0]); }, 0);
// return;
//}
gifs.forEach(mkOverlay);
//};
// So here we take advantage of the fact that we didn't tell Closure that we're
// exporting this function, which means we can do "var b = ...; b();" and it'll
// handle it correctly.
// This used to be even more convoluted.
// BEGIN_NON_BOOKMARKLET_CODE
/*
// END_NON_BOOKMARKLET_CODE
bookmarklet();
// BEGIN_NON_BOOKMARKLET_CODE
*/
// END_NON_BOOKMARKLET_CODE
}
----
***遠A
&sizex(4){発生5F 持続4F 硬直9F 硬直差-4 攻撃レベル1 ダメージ7}
備考:
----
***近B
&sizex(4){発生8F 持続4F 硬直5F 硬直差+2 攻撃レベル2 ダメージ9}
備考:
----
***遠B
&sizex(4){発生7F 持続4F 硬直5F 硬直差+2 攻撃レベル2 ダメージ7}
備考:
----
***近C(一段目)
&sizex(4){発生9F 持続4F 硬直21F 硬直差-9 攻撃レベル3 ダメージ11}
***近C(二段目)
&sizex(4){発生17F 持続4F 硬直13F 硬直差-1 攻撃レベル4 ダメージ11}
備考:
----
***遠C
&sizex(4){発生11F 持続4F 硬直17F 硬直差-5 攻撃レベル4 ダメージ19}
備考:
----
***近D
&sizex(4){発生7F 持続4F 硬直29F 硬直差-17 攻撃レベル4 ダメージ22}
備考:
----
***遠D
&sizex(4){発生7F 持続4F 硬直29F 硬直差-14 攻撃レベル5 ダメージ19}
備考:
----
***2A
&sizex(4){発生5F 持続4F 硬直9F 硬直差-4F 攻撃レベル1 ダメージ6}
備考:
----
***2B
&sizex(4){発生7F 持続2F 硬直5F 硬直差+6F 攻撃レベル3 ダメージ6}
備考:
----
***2C
&sizex(4){発生11F 持続4F 硬直17F 硬直差-5F 攻撃レベル4 ダメージ18}
備考:同技にキャンセル可
----
***2D
&sizex(4){発生13F 持続4F 硬直21F 硬直差-6F 攻撃レベル5 ダメージ15}
備考:----
***JA
&sizex(4){発生3F 持続6F 硬直5F 硬直差ーF 攻撃レベル2 ダメージ6}
備考:
----
***JB
&sizex(4){発生10F 持続3F 硬直4F 硬直差ーF 攻撃レベル3 ダメージ6}
備考:
----
***JC
&sizex(4){発生10F 持続6F 硬直10F 硬直差ーF 攻撃レベル4 ダメージ16}
備考:
----
***JD(一段目)
&sizex(4){発生9F 持続2F 硬直25F 硬直差ーF 攻撃レベル3 ダメージ5}
***JD(二段目)
&sizex(4){発生13F 持続2F 硬直21F 硬直差ーF 攻撃レベル3 ダメージ5}
***JD(一段目)
&sizex(4){発生17F 持続2F 硬直17F 硬直差ーF 攻撃レベル3 ダメージ5}
備考:ヒット時ブーストキャンセル不可 最終硬直のみブーストキャンセル可
一段目、二段目のみノックバック値攻撃レベル1相当
----
***6A
&sizex(4){発生27F 持続4F 硬直13F 硬直差-1F 攻撃レベル4 ダメージ22}
備考:
----
***6B
&sizex(4){発生23F 持続4F 硬直13F 硬直差-1F 攻撃レベル4 ダメージ22}
備考:ヒットorガード時ジャンプキャンセル可
常時攻撃レベル5までの中上段アーマーあり
----
***バニシングストライク
&sizex(4){発生19~39F 持続4F 硬直21F 硬直差-9F 攻撃レベル4 ダメージ22}
備考:
----
***グレイブシュート
&sizex(4){発生17F 持続4F 硬直13F 硬直差-1F 攻撃レベル4 ダメージ22}
備考:
----
***ヘヴィーストライク
&sizex(4){発生39F 持続4F 硬直21F 硬直差ー 攻撃レベル4 ダメージ6}
備考:
----
***通常投げ
&sizex(4){発生4F 持続1F 硬直7F 硬直差ー 攻撃レベルー ダメージ0}
***通常投げ成功時
&sizex(4){発生ー 持続ー 硬直29F 硬直差ー 攻撃レベル3 ダメージ15}
備考:
----
***掴み投げ
&sizex(4){発生9F 持続4F 硬直9F 硬直差ー 攻撃レベル5 ダメージ3}
***掴み投げ成功時
&sizex(4){発生ー 持続ー 硬直ー 硬直差ー 攻撃レベル1、5 ダメージ1}
備考:
***近A
&sizex(4){発生5F 持続4F 硬直9F 硬直差-4 攻撃レベル1 ダメージ9}
備考:
----
***遠A
&sizex(4){発生5F 持続4F 硬直9F 硬直差-4 攻撃レベル1 ダメージ7}
備考:
----
***近B
&sizex(4){発生8F 持続4F 硬直5F 硬直差+2 攻撃レベル2 ダメージ9}
備考:
----
***遠B
&sizex(4){発生7F 持続4F 硬直5F 硬直差+2 攻撃レベル2 ダメージ7}
備考:
----
***近C(一段目)
&sizex(4){発生9F 持続4F 硬直21F 硬直差-9 攻撃レベル3 ダメージ11}
***近C(二段目)
&sizex(4){発生17F 持続4F 硬直13F 硬直差-1 攻撃レベル4 ダメージ11}
備考:
----
***遠C
&sizex(4){発生11F 持続4F 硬直17F 硬直差-5 攻撃レベル4 ダメージ19}
備考:
----
***近D
&sizex(4){発生7F 持続4F 硬直29F 硬直差-17 攻撃レベル4 ダメージ22}
備考:
----
***遠D
&sizex(4){発生7F 持続4F 硬直29F 硬直差-14 攻撃レベル5 ダメージ19}
備考:
----
***2A
&sizex(4){発生5F 持続4F 硬直9F 硬直差-4F 攻撃レベル1 ダメージ6}
備考:
----
***2B
&sizex(4){発生7F 持続2F 硬直5F 硬直差+6F 攻撃レベル3 ダメージ6}
備考:
----
***2C
&sizex(4){発生11F 持続4F 硬直17F 硬直差-5F 攻撃レベル4 ダメージ18}
備考:同技にキャンセル可
----
***2D
&sizex(4){発生13F 持続4F 硬直21F 硬直差-6F 攻撃レベル5 ダメージ15}
備考:----
***JA
&sizex(4){発生3F 持続6F 硬直5F 硬直差ーF 攻撃レベル2 ダメージ6}
備考:
----
***JB
&sizex(4){発生10F 持続3F 硬直4F 硬直差ーF 攻撃レベル3 ダメージ6}
備考:
----
***JC
&sizex(4){発生10F 持続6F 硬直10F 硬直差ーF 攻撃レベル4 ダメージ16}
備考:
----
***JD(一段目)
&sizex(4){発生9F 持続2F 硬直25F 硬直差ーF 攻撃レベル3 ダメージ5}
***JD(二段目)
&sizex(4){発生13F 持続2F 硬直21F 硬直差ーF 攻撃レベル3 ダメージ5}
***JD(一段目)
&sizex(4){発生17F 持続2F 硬直17F 硬直差ーF 攻撃レベル3 ダメージ5}
備考:ヒット時ブーストキャンセル不可 最終硬直のみブーストキャンセル可
一段目、二段目のみノックバック値攻撃レベル1相当
----
***6A
&sizex(4){発生27F 持続4F 硬直13F 硬直差-1F 攻撃レベル4 ダメージ22}
備考:
----
***6B
&sizex(4){発生23F 持続4F 硬直13F 硬直差-1F 攻撃レベル4 ダメージ22}
備考:ヒットorガード時ジャンプキャンセル可
常時攻撃レベル5までの中上段アーマーあり
----
***バニシングストライク
&sizex(4){発生19~39F 持続4F 硬直21F 硬直差-9F 攻撃レベル4 ダメージ22}
備考:
----
***グレイブシュート
&sizex(4){発生17F 持続4F 硬直13F 硬直差-1F 攻撃レベル4 ダメージ22}
備考:
----
***ヘヴィーストライク
&sizex(4){発生39F 持続4F 硬直21F 硬直差ー 攻撃レベル4 ダメージ6}
備考:
----
***通常投げ
&sizex(4){発生4F 持続1F 硬直7F 硬直差ー 攻撃レベルー ダメージ0}
***通常投げ成功時
&sizex(4){発生ー 持続ー 硬直29F 硬直差ー 攻撃レベル3 ダメージ15}
備考:
----
***掴み投げ
&sizex(4){発生9F 持続4F 硬直9F 硬直差ー 攻撃レベル5 ダメージ3}
***掴み投げ成功時
&sizex(4){発生ー 持続ー 硬直ー 硬直差ー 攻撃レベル1、5 ダメージ1}
備考: