User:CanvasK: Difference between revisions
m (Page 4 done. Only 53 dozen and some change to go) |
m (→WebM test: Seems to use a pop-out viewer at the moment) |
||
(40 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
A man with too much time on his hands and an unusual obsession with consistency and testing. | |||
I know next to nothing about competitive Smash, so don't expect any edits or answers regarding it. Feel free to use information on this page and my sub-pages for the mainspace. | |||
Apparently I have ownership of the [[User:CanvasK/Project Clean-Up|clean-up project]]. I recommend everyone look through it to get an idea of the scope and to help clean it up. | |||
==To-do== | |||
*Finish hitlag testing | |||
*Some gif lists have inconsistent names, let's fix that | |||
*Clean up [[:Category:Animated images]] | |||
*Attempt to find HRC thresholds for different angles, if they exist | |||
*Find when WoL music changes | |||
*Update spirit effect translations | |||
*Spirit Battle condition translations, at least for Japanese | |||
*Keep an eye on Spirit Battles. Someones gotta | *Keep an eye on Spirit Battles. Someones gotta | ||
** | **Python script is functional, still quite a bit of manual work but at least it doesn't take 3 days. Thanks to SnorlaxMonster for getting me on track | ||
:These are only here so they don't appear in the Unused Files list. This will be removed when they get a proper home | |||
{{SRHead|Bowser|s=20px}}{{SRHead|Young Link|s=20px}}{{SRHead|Yoshi|s=20px}}{{SRHead|Wolf|s=20px}}{{SRHead|Wario|s=20px}}{{SRHead|Super Sonic|s=20px}}{{SRHead|Sonic|s=20px}}{{SRHead|Slippy|s=20px}}{{SRHead|Sheik|s=20px}}{{SRHead|Samus|s=20px}}{{SRHead|Polygon|s=20px}}{{SRHead|Pikachu|s=20px}}{{SRHead|Peppy|s=20px}}{{SRHead|Ness|s=20px}}{{SRHead|Mewtwo|s=20px}}{{SRHead|Metal Mario|s=20px}}{{SRHead|Marth|s=20px}}{{SRHead|Mario|s=20px}}{{SRHead|Marina|s=20px}}{{SRHead|Mad Piano|s=20px}}{{SRHead|Luigi|s=20px}}{{SRHead|Lucas|s=20px}}{{SRHead|Link|s=20px}}{{SRHead|Kirby|s=20px}}{{SRHead|King Dedede|s=20px}}{{SRHead|Jigglypuff|s=20px}}{{SRHead|Goemon|s=20px}}{{SRHead|Giga Bowser|s=20px}}{{SRHead|Ganondorf|s=20px}}{{SRHead|Fox|s=20px}}{{SRHead|Falco|s=20px}}{{SRHead|Dr. Mario|s=20px}}{{SRHead|Donkey Kong|s=20px}}{{SRHead|Dark Samus|s=20px}}{{SRHead|Conker|s=20px}}{{SRHead|Captain Falcon|s=20px}}{{SRHead|Ebisumaru|s=20px}}{{SRHead|Metal Luigi|s=20px}}{{SRHead|Dragon King|s=20px}}{{SRHead|Banjo & Kazooie|s=20px}} | |||
===GIFs=== | |||
*A lot of attacks. May just scorched earth it since almost all of them are "misleading". | |||
<!--===Effects=== | <!--===Effects=== | ||
There's at least 50. Where to even start? | There's at least 50. Where to even start? | ||
===Types=== | ===Types=== | ||
Done--> | Done--> | ||
==Pages to keep updated with DLC== | |||
===Pages to keep updated with DLC=== | |||
*[[Spirit]], total count | *[[Spirit]], total count | ||
*[[List of spirits ( | *[[List of spirits (complete list)]], new entries | ||
*[[List of spirits (disambiguation)]], update counts | *[[List of spirits (disambiguation)]], update counts | ||
*[[Primary spirit]], new entries when applicable | *[[Primary spirit]], new entries when applicable | ||
Line 46: | Line 41: | ||
*[[Rematch]], max score | *[[Rematch]], max score | ||
=Quick links= | ==Quick links== | ||
{| style="border-spacing: 20px 0px;" | {| style="border-spacing: 20px 0px;" | ||
|[[/Facilities|Facility test data]] | |[[/Facilities|Facility test data]] | ||
Line 56: | Line 51: | ||
|[[User:CanvasK/SpiritBattleTable|SpiritBattleTable]]--> | |[[User:CanvasK/SpiritBattleTable|SpiritBattleTable]]--> | ||
|} | |} | ||
==How to GIF== | |||
There's a lot of sites that make GIFs, however most of them either lack control, add watermarks, or both; ezgif.com has decent control and no watermarks and I recommend it if you don't want to go through with the process below. There are two things that will be needed to make your own GIFs without websites or expensive editing programs: [https://www.ffmpeg.org/ FFmpeg] and [https://www.lcdf.org/gifsicle/ Gifsicle] (optional). Both of these programs are free command-line tools. Below is a command that will work for most situations: | |||
<pre>ffmpeg -ss <start_time> -t <duration> -i <video_file> -vf "crop=<c_width>:<c_height>:<c_topleft_x>:<c_topleft_y>,fps=<framerate>,scale=<width>:<height>:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0 <output_file></pre> | |||
Note: if "ffmpeg" or "gifsicle" aren't recognized as commands, find the location of the executable and use that. Example ffmpeg -> "C:\ffmpeg-4.2.2-win64-static\bin\ffmpeg.exe" | |||
<pre> | |||
start_time = The first frame of the video. Can either be seconds or [HH:]MM:SS[.ms] format | |||
duration = How far after start_time to go | |||
video_file = Source file | |||
output_file = Output file | |||
c_... = Cropping. The width and height and the top-left corner coordinates | |||
framerate = The frames per second (fps) of the output. Due to GIF specifications, 50 fps is the technical max framerate possible | |||
width, height = The width and height of the output. Either can be set to -1 to automatically change with the other. iw*x and ih*y can also be used to scale, example iw*.5 = 50% width | |||
Any of the inputs (except video_file and output_file) can be removed if they are unneeded | |||
split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer is to skirt around GIFs limited 256 color limit, either by dithering or creating a new set of 256 colors at a certain point. Optional, tends to increase filesize | |||
-loop 0 forces looping. Never tried without it so I don't know what happens without it | |||
=WebM test= | Example: ffmpeg -ss 4.0 -t 2.8333 -i "Min Min.mp4" -vf "fps=15,scale=600:-1:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0 "MinMinOnScreenAppearanceSSBU.gif" | ||
Use "Min Min.mp4", start 4 seconds in, go for 2.8333 seconds, play at 15 fps, scale width to 600, output to MinMinOnScreenAppearanceSSBU.gif. | |||
</pre> | |||
You are effectively done at this point. Afterwards Gifsicle can be used to reduce the filesize. | |||
<pre> | |||
gifsicle -b <gif_file> -O3 --lossy > <output_file> | |||
gif_file = Source file | |||
output_file = Output file | |||
-O3 lets Gifsicle determine how to optimize the file | |||
--lossy means some data will may be lost. This isn't a concern because GIF's 256 color limit makes it barely noticeable | |||
</pre> | |||
To avoid doing multiple lines, we can "pipe" the FFmpeg output into Gifsicle's input: | |||
<pre> | |||
ffmpeg -ss <start_time> -t <duration> -i <video_file> -vf "crop=<c_width>:<c_height>:<c_topleft_x>:<c_topleft_y>,fps=<framerate>,scale=<width>:<height>:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0 -f gif - | gifsicle -O3 --lossy > <output_file> | |||
-f gif tells FFmpeg that the file will be a GIF, which is necessary for Gifsicle to process | |||
Example: Example: ffmpeg -ss 4.0 -t 2.8333 -i "Min Min.mp4" -vf "fps=15,scale=600:-1:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0 -f gif - | gifsicle -O3 --lossy > "MinMinOnScreenAppearanceSSBU.gif" | |||
</pre> | |||
This will take care of almost everything you need for GIFs. See [https://ffmpeg.org/ffmpeg.html FFmpeg's] and [https://www.lcdf.org/gifsicle/man.html Gifsicle's] documentation for more details and other commands. And remember, it is pronounced GIF not GIF. | |||
===Formats=== | |||
;Victory Poses | |||
*<CHAR>VictoryPose<d>SSBU | |||
**d: 1=left, 2=up, 3=right | |||
*25 FPS, 600x338px | |||
*Start is 30f before fade (check histogram for new spikes) | |||
*4 seconds with palettegen, around 8 seconds for extended animations without palettegen | |||
**Mirror match for extended to include clapping animation | |||
;On-screen appearances | |||
*<CHAR>OnScreenAppearanceSSBU | |||
*15 FPS, 600x338px | |||
*Start is 6f after the black start screen | |||
*2.83333 seconds | |||
*Mirror match on Omega Battlefield. Stationary camera to prevent jumping around; better compression, smoother, and allows the full animation to be shown | |||
;Moves | |||
*<CHAR> <MOVE NAME/DIRECTION> <variation num?> SSBU | |||
*25 FPS; 480x270px (480-30x until <10MB) | |||
*Start is 12f before move's first frame | |||
*End is 12f after move ends or opponent stops moving, whichever is longer | |||
*Mirror match on Omega relevant stage | |||
;Taunts/Idle poses | |||
*SSBU<CHAR>Idle/Taunt<d> | |||
**d: 1=up, 2=side, 3=down | |||
*25 FPS, 600x338 | |||
*Minimum 6f before and after, mess with the values until it is smooth | |||
*Character should face the direction that makes their body point towards the screen | |||
*Camera zoomed a little larger than a Battlefield platform | |||
*Relevant Battlefield | |||
==WebM test== | |||
This is a comparison of WebM and GIF | This is a comparison of WebM and GIF | ||
[[File:GunnerOnScreenAppearanceSSBU.webm|400px]]{{ | [[File:GunnerOnScreenAppearanceSSBU.webm|400px]]{{clr}} | ||
WebM: 60 fps, full color-space, 1.07 MiB/1.12 MB (1,122,784 bytes) | WebM: 60 fps, full color-space, 1.07 MiB/1.12 MB (1,122,784 bytes) | ||
[[File:GunnerOnScreenAppearanceSSBU.gif|400px]]{{ | [[File:GunnerOnScreenAppearanceSSBU.gif|400px]]{{clr}} | ||
GIF: 15 fps, 256 colors, 3.53 MiB/3.70 MB (3,707,356 bytes) | GIF: 15 fps, 256 colors, 3.53 MiB/3.70 MB (3,707,356 bytes) | ||
Line 74: | Line 136: | ||
Cons of WebM: | Cons of WebM: | ||
#Not as many browsers support it | #Not as many browsers support it | ||
#Doesn't autoplay; May be a good thing considering point # | #Doesn't autoplay; May be a good thing considering point #3 | ||
#Much greater CPU usage | #Much greater CPU usage | ||
=Handy Regex= | ==Handy Regex== | ||
Remove duplicate text in links when a suffix would work:<br/> | |||
Search: \[\[{{color|red|<nowiki>([^\|]+)</nowiki>}}\|{{color|red|\1}}{{color|blue|([^\]]+)}}\]\]<br/> | |||
Replace: <nowiki>[[</nowiki>{{color|red|$1}}]]{{color|blue|$2}} | |||
Simple section/anchor link ([[Template:H2]]): <br/> | Simple section/anchor link ([[Template:H2]]): <br/> | ||
Search: \[\[ | Search: \[\[{{color|red|([^\#]+)}}\#{{color|blue|([^\]]+)}}\|{{color|blue|\2}}\]\] <br/> | ||
Replace: <nowiki>{{</nowiki>h2| | Replace: <nowiki>{{</nowiki>h2|{{color|red|$1}}|{{color|blue|$2}}<nowiki>}}</nowiki> | ||
Bracket simplifier ([[Template:B]]): <br/> | Bracket simplifier ([[Template:B]]): <br/> | ||
Search: \[\[ | Search: \[\[{{color|red|([^\)]+)}} \({{color|blue|([^\]]+)}}\)\|{{color|red|\1}}\]\] <br/> | ||
Replace: <nowiki>{{</nowiki>b| | Replace: <nowiki>{{</nowiki>b|{{color|red|$1}}|{{color|blue|$2}}<nowiki>}}</nowiki> | ||
3 param [[Template:S]] to [[Template:IW]]: <br/> | |||
Search: <nowiki>{{</nowiki>s\|{{color|red|<nowiki>([^}]+)</nowiki>}}\|{{color|blue|<nowiki>([^}]+)</nowiki>}}\|{{color|green|<nowiki>([^}]+)</nowiki>}}<nowiki>}}</nowiki> <br/> | |||
Replace: <nowiki>{{</nowiki>iw|{{color|red|$1}}|{{color|blue|$2}}|{{color|green|$3}}<nowiki>}}</nowiki> | |||
Rollover/hover text ([[Template:Rollover]]): <br/> | Rollover/hover text ([[Template:Rollover]]): <br/> | ||
Search: <nowiki><span</nowiki> class="explain" title=" | Search: <nowiki><span</nowiki> class="explain" title="{{color|red|([^>]+)}}">{{color|blue|([^<]+)}}<nowiki></span></nowiki> <br/> | ||
Replace: <nowiki>{{</nowiki>rollover| | Replace: <nowiki>{{</nowiki>rollover|{{color|blue|$2}}|{{color|red|$1}}|?<nowiki>}}</nowiki> | ||
<!-- | |||
Spirit type ([[Template:SpiritType]]): <br/> | Spirit type ([[Template:SpiritType]]): <br/> | ||
Search: \[\[File:SpiritType | Search: \[\[File:SpiritType{{color|red|([^\.]+)}}\.png.*\|\1\]\] <br/> | ||
Replace <nowiki>{{</nowiki>SpiritType| | Replace <nowiki>{{</nowiki>SpiritType|{{color|red|$1}}<nowiki>}}</nowiki> | ||
Spirit type (variable size): <br/> | Spirit type (variable size): <br/> | ||
Search: \[\[File:SpiritType | Search: \[\[File:SpiritType{{color|red|([^\.]+)}}\.png\|{{color|blue|([^p]+)}}px.*\|\1\]\] <br/> | ||
Replace:<nowiki>{{</nowiki>SpiritType| | Replace:<nowiki>{{</nowiki>SpiritType|{{color|red|$1}}|s={{color|blue|$2}}<nowiki>}}</nowiki>--> | ||
"(…)" defines a capture group. "." matches any character. "*" matches 0-infinite of the prior character; ".*" matches 0-infinite of any character. " | "\…" is used to escape characters, preventing the regex from interpreting them as part of the regex command. "(…)" defines a capture group. "." matches any character. "*" matches 0-infinite of the prior character; ".*" matches 0-infinite of any character. "[…]" defines a set of characters. "^" is a NOT operator; "[^…]" equates to not these characters. "\1,2,3,..." references a capture group in the search field, counting up from left to right. "$1,2,3,..." references a capture group in the replace field, counting up from left to right. | ||
=Extreme Spirit Teams= | ==Extreme Spirit Teams== | ||
==Max speed== | ===[[/Max speed|Max speed]]=== | ||
{|class="wikitable" | {|class="wikitable" | ||
! | ! | ||
Line 110: | Line 179: | ||
!Total | !Total | ||
|- | |- | ||
!rowspan=2|Max<br/> | !rowspan=2|Max<br/>Run/walk | ||
|Weight ↓ | |Weight ↓ | ||
|Trade-Off Speed ↑ | |Trade-Off Speed ↑ | ||
|Undamaged Speed ↑ | |Undamaged Speed ↑ | ||
|Undamaged Speed ↑ | |Undamaged Speed ↑ | ||
|Ninja | |Ninja | ||
|rowspan=2|6.272 | |rowspan=2|6.272 | ||
|- | |- | ||
Line 121: | Line 190: | ||
|1.4 | |1.4 | ||
|colspan=2|2.0 | |colspan=2|2.0 | ||
|1.6 | |||
|- | |||
!rowspan=2|No contradiction | |||
|Weight ↓ | |||
|Lightweight | |||
|Undamaged Speed ↑ | |||
|Undamaged Speed ↑ | |||
|Ninja | |||
|rowspan=2|5.824 | |||
|- | |||
|1.4 | |||
|1.3 | |||
|colspan=2|2.0 | |||
|1.6 | |||
|- | |||
!rowspan=2|Always on | |||
|Weight ↓ | |||
|Lightweight | |||
|Trade-Off Speed ↑ | |||
|Trade-Off Speed ↑ | |||
|Ninja | |||
|rowspan=2|5.2416 | |||
|- | |||
|1.4 | |||
|1.3 | |||
|colspan=2|1.8 | |||
|1.6 | |1.6 | ||
|} | |} | ||
==Min speed== | ===Min speed=== | ||
{|class="wikitable" | {|class="wikitable" | ||
! | ! | ||
Line 140: | Line 234: | ||
|rowspan=2|0.09 | |rowspan=2|0.09 | ||
|- | |- | ||
|0. | |0.6 | ||
|colspan=2|0.3 | |colspan=2|0.3 | ||
|{{bg|#DDD}}| | |{{bg|#DDD}}| | ||
|0. | |0.5 | ||
|} | |} | ||
==Max jump== | ===Max jump=== | ||
{|class="wikitable" | {|class="wikitable" | ||
! | ! | ||
Line 177: | Line 271: | ||
|} | |} | ||
==Min jump== | ===Min jump=== | ||
{|class="wikitable" | {|class="wikitable" | ||
! | ! | ||
Line 198: | Line 292: | ||
|} | |} | ||
=Spirit Experience= | ==Spirit Experience== | ||
This is the results of testing experience. | This is the results of testing experience. | ||
Line 235: | Line 329: | ||
With <code>max_exp</code> determined it is possible to find the experience needed to reach any level. | With <code>max_exp</code> determined it is possible to find the experience needed to reach any level. | ||
Exp at any level = <code>max_exp × (ratio^(level - 1) - 1)/(ratio^(98) - 1)</code>< | Exp at any level = <code>max_exp × (ratio^(level - 1) - 1)/(ratio^(98) - 1)</code> | ||
<math>\mbox{max exp} * \frac{\mbox{ratio}^{\mbox{level}-1}-1}{\mbox{ratio}^{98}-1}</math> | |||
Exp to the next level = <code>max_exp × (ratio^(level - 1))/(ratio^(98) - 1) × (ratio - 1)</code> | Exp to the next level = <code>max_exp × (ratio^(level - 1))/(ratio^(98) - 1) × (ratio - 1)</code> | ||
<math>\mbox{max exp} * (\mbox{ratio}-1) * \frac{\mbox{ratio}^{\mbox{level}-1}}{\mbox{ratio}^{98}-1}</math> | |||
====Ratio==== | ====Ratio==== | ||
Line 248: | Line 347: | ||
Between versions 1.0.0 and 1.1.0 Baby Mario (Superstar Mario), Tiki (Naga's Voice), K.K. Slider, Soma Cruz, and Dr. Kawashima (Concentration Training) had their stats changed without their max experience being updated. This causes them to require less experience than normal. Link (Link's Awakening) is also an exception, but instead requires more experience than normal (24276 vs 22851). Possible explanations are that his Power was 1.5× higher at one point or he was enhance-able from class 2 to 4. | Between versions 1.0.0 and 1.1.0 Baby Mario (Superstar Mario), Tiki (Naga's Voice), K.K. Slider, Soma Cruz, and Dr. Kawashima (Concentration Training) had their stats changed without their max experience being updated. This causes them to require less experience than normal. Link (Link's Awakening) is also an exception, but instead requires more experience than normal (24276 vs 22851). Possible explanations are that his Power was 1.5× higher at one point or he was enhance-able from class 2 to 4. | ||
=Limiter= | ==Limiter== | ||
The "Limiter", as I call it, is a hidden function involving Spirits and their damage multipliers. It only affects damage multipliers related to Sword types, Throw types (not attacks, types... I think), and 'Generic', 'Generic' being a term I use for damage multipliers that affect everything. | The "Limiter", as I call it, is a hidden function involving Spirits and their damage multipliers. It only affects damage multipliers related to Sword types, Throw types (not attacks, types... I think), and 'Generic', 'Generic' being a term I use for damage multipliers that affect everything. | ||
Line 263: | Line 362: | ||
</pre> | </pre> | ||
The <code>final_combined_mult</code> is what is used when an attack hits. Critical Hit ↑, Metal Killer, and Giant Killer do not use generic, they act outside everything similar to the 1v1 multiplier. Skills that will easily get you to experience the limiter are Trade-Off Attacks ↑ and Poison Power Up. Poison Power Up has a multiplier of 2.0×, but the limiter causes it to come out as 1.6×. Trade-Off Attacks ↑ has a multiplier of 1.23×, requiring an additional multiplier of 1.057× to reach the limiter. Trade-Off Attacks ↑ (1.23×) + Trade-Off Abilities ↑ (1.18×) will give 1.3757× instead of 1.4514×. | The <code>final_combined_mult</code> is what is used when an attack hits. Critical Hit ↑, Metal Killer, and Giant Killer do not use generic, they act outside everything similar to the 1v1 multiplier. Skills that will easily get you to experience the limiter are Trade-Off Attacks ↑ and Poison Power Up. Poison Power Up has a multiplier of 2.0×, but the limiter causes it to come out as 1.6×. Trade-Off Attacks ↑ has a multiplier of 1.23×, requiring an additional multiplier of 1.057× to reach the limiter. Trade-Off Attacks ↑ (1.23×) + Trade-Off Abilities ↑ (1.18×) will give 1.3757× instead of 1.4514×. | ||
==Lists== | |||
===World of Light exclusive=== | |||
The following spirits must be obtained in World of Light. Some can be gotten in other ways, but they must be gotten in World of Light first. '''Boss''', ''Master'', <u>Chest</u> | |||
<div style="column-count:5;-moz-column-count:5;-webkit-column-count:5"> | |||
*''Toadette'' | |||
*Kamek | |||
*''Honey Queen'' | |||
*Kammy Koopa | |||
*''Funky Kong'' | |||
*Candy Kong | |||
*<u>Wrinkly Kong</u> | |||
*Link (The Legend of Zelda) | |||
*'''Ganon''' | |||
*Saria | |||
*Impa | |||
*''Darunia'' | |||
*''Beedle'' | |||
*''Linebeck'' | |||
*Alfonzo & Engineer Link | |||
*''Kraid'' | |||
*'''Marx''' | |||
*Susie | |||
*Chef Kawasaki | |||
*''Peppy Hare'' | |||
*ROB 64 | |||
*''Slowpoke'' | |||
*<u>Gyarados</u> | |||
*Lapras | |||
*Solgaleo | |||
*Lunala | |||
*''Dr. Stewart'' | |||
*Pico | |||
*''Anna'' | |||
*''Ryoma'' | |||
*Medusa | |||
*''Dyntos'' | |||
*''Kat & Ana'' | |||
*Hal Emmerich | |||
*<u>{{rollover|Cardboard Box|Can be found at Timmy and Tommy's, which is part of World of Light|?}}</u> | |||
*''Charlie'' | |||
*''Timmy & Tommy'' | |||
*''Copper & Booker'' | |||
*Kapp'n | |||
*Kapp'n (Wild World) | |||
*Cyrus & Reese | |||
*<u>Auto</u> | |||
*''Gravity Man'' | |||
*MegaMan.EXE | |||
*ProtoMan.EXE | |||
*''Wii Balance Board'' | |||
*''Doc Louis'' | |||
*''Riki (Xenoblade Chronicles)'' | |||
*Mythra | |||
*''Zangief'' | |||
*Balrog | |||
*Vega | |||
*Sagat | |||
*''Sheldon'' | |||
*''Cap'n Cuttlefish'' | |||
*Great Zapfish | |||
*Mummy | |||
*The Creature & Flea Man | |||
*Death | |||
*Werewolf | |||
*'''Dracula''' | |||
*'''Dracula (2nd Form)''' | |||
*'''Master Hand''' | |||
*'''Crazy Hand''' | |||
*'''Giga Bowser''' | |||
*'''Galleom''' | |||
*'''Galeem''' | |||
*'''Dharkon''' | |||
*<u>Diskun</u> | |||
*Lip | |||
*<u>Ray Mk II</u> | |||
*Bomberman | |||
*'''Rathalos''' | |||
</div> | |||
===New file criteria=== | |||
*Must be a primary spirit | |||
*Must be an Advanced-class | |||
*Must have 1 or 2 slots | |||
*Can't be enhanceable | |||
*Can't be summonable | |||
*Can't be a challenge reward | |||
*Can't be exclusive to World of Light | |||
*Can't be from a paid DLC Spirit Board | |||
===Shop criteria=== | |||
*Can't be a fighter spirit of a fighter that hasn't been unlocked | |||
*Can't be summonable | |||
*Can't be a challenge reward | |||
*Can't be exclusive to World of Light | |||
===Spirit Board criteria=== | |||
===Classic Mode reward=== |
Latest revision as of 17:21, November 9, 2024
A man with too much time on his hands and an unusual obsession with consistency and testing.
I know next to nothing about competitive Smash, so don't expect any edits or answers regarding it. Feel free to use information on this page and my sub-pages for the mainspace.
Apparently I have ownership of the clean-up project. I recommend everyone look through it to get an idea of the scope and to help clean it up.
To-do
- Finish hitlag testing
- Some gif lists have inconsistent names, let's fix that
- Clean up Category:Animated images
- Attempt to find HRC thresholds for different angles, if they exist
- Find when WoL music changes
- Update spirit effect translations
- Spirit Battle condition translations, at least for Japanese
- Keep an eye on Spirit Battles. Someones gotta
- Python script is functional, still quite a bit of manual work but at least it doesn't take 3 days. Thanks to SnorlaxMonster for getting me on track
- These are only here so they don't appear in the Unused Files list. This will be removed when they get a proper home
GIFs
- A lot of attacks. May just scorched earth it since almost all of them are "misleading".
Pages to keep updated with DLC
- Spirit, total count
- List of spirits (complete list), new entries
- List of spirits (disambiguation), update counts
- Primary spirit, new entries when applicable
- Support spirit, new entries when applicable
- List of Spirits (<whatever> series) (usually Others), new entries
- Downloadable content (SSBU)/List of DLC Spirits, new entries
- Various fighter pages, new entries when applicable
- List of Spirit Board events
- Rematch, max score
Quick links
Facility test data | Spirit translations | Unused spirit effects | Spirit changelog |
How to GIF
There's a lot of sites that make GIFs, however most of them either lack control, add watermarks, or both; ezgif.com has decent control and no watermarks and I recommend it if you don't want to go through with the process below. There are two things that will be needed to make your own GIFs without websites or expensive editing programs: FFmpeg and Gifsicle (optional). Both of these programs are free command-line tools. Below is a command that will work for most situations:
ffmpeg -ss <start_time> -t <duration> -i <video_file> -vf "crop=<c_width>:<c_height>:<c_topleft_x>:<c_topleft_y>,fps=<framerate>,scale=<width>:<height>:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0 <output_file>
Note: if "ffmpeg" or "gifsicle" aren't recognized as commands, find the location of the executable and use that. Example ffmpeg -> "C:\ffmpeg-4.2.2-win64-static\bin\ffmpeg.exe"
start_time = The first frame of the video. Can either be seconds or [HH:]MM:SS[.ms] format duration = How far after start_time to go video_file = Source file output_file = Output file c_... = Cropping. The width and height and the top-left corner coordinates framerate = The frames per second (fps) of the output. Due to GIF specifications, 50 fps is the technical max framerate possible width, height = The width and height of the output. Either can be set to -1 to automatically change with the other. iw*x and ih*y can also be used to scale, example iw*.5 = 50% width Any of the inputs (except video_file and output_file) can be removed if they are unneeded split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer is to skirt around GIFs limited 256 color limit, either by dithering or creating a new set of 256 colors at a certain point. Optional, tends to increase filesize -loop 0 forces looping. Never tried without it so I don't know what happens without it Example: ffmpeg -ss 4.0 -t 2.8333 -i "Min Min.mp4" -vf "fps=15,scale=600:-1:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0 "MinMinOnScreenAppearanceSSBU.gif" Use "Min Min.mp4", start 4 seconds in, go for 2.8333 seconds, play at 15 fps, scale width to 600, output to MinMinOnScreenAppearanceSSBU.gif.
You are effectively done at this point. Afterwards Gifsicle can be used to reduce the filesize.
gifsicle -b <gif_file> -O3 --lossy > <output_file> gif_file = Source file output_file = Output file -O3 lets Gifsicle determine how to optimize the file --lossy means some data will may be lost. This isn't a concern because GIF's 256 color limit makes it barely noticeable
To avoid doing multiple lines, we can "pipe" the FFmpeg output into Gifsicle's input:
ffmpeg -ss <start_time> -t <duration> -i <video_file> -vf "crop=<c_width>:<c_height>:<c_topleft_x>:<c_topleft_y>,fps=<framerate>,scale=<width>:<height>:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0 -f gif - | gifsicle -O3 --lossy > <output_file> -f gif tells FFmpeg that the file will be a GIF, which is necessary for Gifsicle to process Example: Example: ffmpeg -ss 4.0 -t 2.8333 -i "Min Min.mp4" -vf "fps=15,scale=600:-1:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0 -f gif - | gifsicle -O3 --lossy > "MinMinOnScreenAppearanceSSBU.gif"
This will take care of almost everything you need for GIFs. See FFmpeg's and Gifsicle's documentation for more details and other commands. And remember, it is pronounced GIF not GIF.
Formats
- Victory Poses
- <CHAR>VictoryPose<d>SSBU
- d: 1=left, 2=up, 3=right
- 25 FPS, 600x338px
- Start is 30f before fade (check histogram for new spikes)
- 4 seconds with palettegen, around 8 seconds for extended animations without palettegen
- Mirror match for extended to include clapping animation
- On-screen appearances
- <CHAR>OnScreenAppearanceSSBU
- 15 FPS, 600x338px
- Start is 6f after the black start screen
- 2.83333 seconds
- Mirror match on Omega Battlefield. Stationary camera to prevent jumping around; better compression, smoother, and allows the full animation to be shown
- Moves
- <CHAR> <MOVE NAME/DIRECTION> <variation num?> SSBU
- 25 FPS; 480x270px (480-30x until <10MB)
- Start is 12f before move's first frame
- End is 12f after move ends or opponent stops moving, whichever is longer
- Mirror match on Omega relevant stage
- Taunts/Idle poses
- SSBU<CHAR>Idle/Taunt<d>
- d: 1=up, 2=side, 3=down
- 25 FPS, 600x338
- Minimum 6f before and after, mess with the values until it is smooth
- Character should face the direction that makes their body point towards the screen
- Camera zoomed a little larger than a Battlefield platform
- Relevant Battlefield
WebM test
This is a comparison of WebM and GIF
WebM: 60 fps, full color-space, 1.07 MiB/1.12 MB (1,122,784 bytes)
GIF: 15 fps, 256 colors, 3.53 MiB/3.70 MB (3,707,356 bytes)
Pros of WebM:
- Smaller file size
- Higher potential frame rate
- Larger color space
Cons of WebM:
- Not as many browsers support it
- Doesn't autoplay; May be a good thing considering point #3
- Much greater CPU usage
Handy Regex
Remove duplicate text in links when a suffix would work:
Search: \[\[([^\|]+)\|\1([^\]]+)\]\]
Replace: [[$1]]$2
Simple section/anchor link (Template:H2):
Search: \[\[([^\#]+)\#([^\]]+)\|\2\]\]
Replace: {{h2|$1|$2}}
Bracket simplifier (Template:B):
Search: \[\[([^\)]+) \(([^\]]+)\)\|\1\]\]
Replace: {{b|$1|$2}}
3 param Template:S to Template:IW:
Search: {{s\|([^}]+)\|([^}]+)\|([^}]+)}}
Replace: {{iw|$1|$2|$3}}
Rollover/hover text (Template:Rollover):
Search: <span class="explain" title="([^>]+)">([^<]+)</span>
Replace: {{rollover|$2|$1|?}}
"\…" is used to escape characters, preventing the regex from interpreting them as part of the regex command. "(…)" defines a capture group. "." matches any character. "*" matches 0-infinite of the prior character; ".*" matches 0-infinite of any character. "[…]" defines a set of characters. "^" is a NOT operator; "[^…]" equates to not these characters. "\1,2,3,..." references a capture group in the search field, counting up from left to right. "$1,2,3,..." references a capture group in the replace field, counting up from left to right.
Extreme Spirit Teams
Max speed
Primary Ability | Abilities | Style | Total | |||
---|---|---|---|---|---|---|
Max Run/walk |
Weight ↓ | Trade-Off Speed ↑ | Undamaged Speed ↑ | Undamaged Speed ↑ | Ninja | 6.272 |
1.4 | 1.4 | 2.0 | 1.6 | |||
No contradiction | Weight ↓ | Lightweight | Undamaged Speed ↑ | Undamaged Speed ↑ | Ninja | 5.824 |
1.4 | 1.3 | 2.0 | 1.6 | |||
Always on | Weight ↓ | Lightweight | Trade-Off Speed ↑ | Trade-Off Speed ↑ | Ninja | 5.2416 |
1.4 | 1.3 | 1.8 | 1.6 |
Min speed
Primary Ability | Abilities | Style | Total | |||
---|---|---|---|---|---|---|
Min Dash |
Weight ↑ ↑ (Support) | Slow Super Armor | Gravity (Ground Speed) | 0.09 | ||
0.6 | 0.3 | 0.5 |
Max jump
Primary Ability | Abilities | Style | Total | |||
---|---|---|---|---|---|---|
Max Jump |
Lightweight | Lightweight | Jump ↑ (Support, Jump Height) | Gravity (Jump) | 4.32 | |
1.6 | 1.8 | 1.5 | ||||
Max Short-Hop |
Lightweight | Lightweight | Jump ↑ (Support, Jump Speed) | Gravity (Jump) | 3.42 | |
1.9 | 1.2 | 1.5 |
Min jump
Primary Ability | Abilities | Style | Total | |||
---|---|---|---|---|---|---|
Min Jump |
Weight ↑ ↑ (Support) | Slow Super Armor | Runner (Jump) | 0.18 | ||
0.6 | 0.5 | 0.6 |
Spirit Experience
This is the results of testing experience.
The amount of experience a Spirit needs to reach lv.99 is based on its max power, rank, number of slots, if it is enhanceable, and if it is neutral or not. Power does not refer to 'Team Power'; power is attack+defense, team power is power modified by styles and skills.
Max Experience
The equation is:
max_exp = Power * slot_multiplier + class_exp
If the Spirit is neutral, divide the result by 2.
Slot Multiplier
- 0 slots: 0.5
- 1 slot : 0.55
- 2 slots: 0.605
- 3 slots: 0.6655
If the Spirit is enhanceable, multiply this value by 1.5.
Class Experience
For non-enhanceable:
- 1: 12000
- 2: 20000
- 3: 40000
- 4: 60000
For enhanceable:
- Starts at class 1:
- 2: 22000
- 3: 32000
- 4: 42000
- Starts at class 2:
- 3: 30000
- 4: 40000
- Starts at class 3:
- 4: 50000
Experience Growth
With max_exp
determined it is possible to find the experience needed to reach any level.
Exp at any level = max_exp × (ratio^(level - 1) - 1)/(ratio^(98) - 1)
Exp to the next level = max_exp × (ratio^(level - 1))/(ratio^(98) - 1) × (ratio - 1)
Ratio
Ratio is based on class.
- 1: 1.03
- 2: 1.035
- 3: 1.04
- 4: 1.04
Exceptions
Between versions 1.0.0 and 1.1.0 Baby Mario (Superstar Mario), Tiki (Naga's Voice), K.K. Slider, Soma Cruz, and Dr. Kawashima (Concentration Training) had their stats changed without their max experience being updated. This causes them to require less experience than normal. Link (Link's Awakening) is also an exception, but instead requires more experience than normal (24276 vs 22851). Possible explanations are that his Power was 1.5× higher at one point or he was enhance-able from class 2 to 4.
Limiter
The "Limiter", as I call it, is a hidden function involving Spirits and their damage multipliers. It only affects damage multipliers related to Sword types, Throw types (not attacks, types... I think), and 'Generic', 'Generic' being a term I use for damage multipliers that affect everything.
The first step to the function is to combine all of the related multipliers (Fist to fist, sword to sword, generic to generic, etc.) to get the raw_combined_mult
(terms are my own, not official). This includes both positive (>1.0×) and negative multipliers (<1.0×) from traits, skills, and styles.
Next step, if the multiplier is for sword or generic, is to go through the following:
IF raw_combined_mult < 1.3: do nothing IF raw_combined_mult > 1.3 AND raw_combined_mult < 1.5: final_combined_mult = raw_combined_mult * 0.5 + 0.65 IF raw_combined_mult > 1.5: final_combined_mult = raw_combined_mult * 0.2 + 1.2
The final_combined_mult
is what is used when an attack hits. Critical Hit ↑, Metal Killer, and Giant Killer do not use generic, they act outside everything similar to the 1v1 multiplier. Skills that will easily get you to experience the limiter are Trade-Off Attacks ↑ and Poison Power Up. Poison Power Up has a multiplier of 2.0×, but the limiter causes it to come out as 1.6×. Trade-Off Attacks ↑ has a multiplier of 1.23×, requiring an additional multiplier of 1.057× to reach the limiter. Trade-Off Attacks ↑ (1.23×) + Trade-Off Abilities ↑ (1.18×) will give 1.3757× instead of 1.4514×.
Lists
World of Light exclusive
The following spirits must be obtained in World of Light. Some can be gotten in other ways, but they must be gotten in World of Light first. Boss, Master, Chest
- Toadette
- Kamek
- Honey Queen
- Kammy Koopa
- Funky Kong
- Candy Kong
- Wrinkly Kong
- Link (The Legend of Zelda)
- Ganon
- Saria
- Impa
- Darunia
- Beedle
- Linebeck
- Alfonzo & Engineer Link
- Kraid
- Marx
- Susie
- Chef Kawasaki
- Peppy Hare
- ROB 64
- Slowpoke
- Gyarados
- Lapras
- Solgaleo
- Lunala
- Dr. Stewart
- Pico
- Anna
- Ryoma
- Medusa
- Dyntos
- Kat & Ana
- Hal Emmerich
- Cardboard Box
- Charlie
- Timmy & Tommy
- Copper & Booker
- Kapp'n
- Kapp'n (Wild World)
- Cyrus & Reese
- Auto
- Gravity Man
- MegaMan.EXE
- ProtoMan.EXE
- Wii Balance Board
- Doc Louis
- Riki (Xenoblade Chronicles)
- Mythra
- Zangief
- Balrog
- Vega
- Sagat
- Sheldon
- Cap'n Cuttlefish
- Great Zapfish
- Mummy
- The Creature & Flea Man
- Death
- Werewolf
- Dracula
- Dracula (2nd Form)
- Master Hand
- Crazy Hand
- Giga Bowser
- Galleom
- Galeem
- Dharkon
- Diskun
- Lip
- Ray Mk II
- Bomberman
- Rathalos
New file criteria
- Must be a primary spirit
- Must be an Advanced-class
- Must have 1 or 2 slots
- Can't be enhanceable
- Can't be summonable
- Can't be a challenge reward
- Can't be exclusive to World of Light
- Can't be from a paid DLC Spirit Board
Shop criteria
- Can't be a fighter spirit of a fighter that hasn't been unlocked
- Can't be summonable
- Can't be a challenge reward
- Can't be exclusive to World of Light