User:CanvasK

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 ( 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

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  -t -i  -vf "crop=:::,fps= ,scale= : :flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0  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  -O3 --lossy >  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  -t -i  -vf "crop=:::,fps= ,scale= : :flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer" -loop 0 -f gif - | gifsicle -O3 --lossy > 

-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:
 * 1) Smaller file size
 * 2) Higher potential frame rate
 * 3) Larger color space

Cons of WebM:
 * 1) Not as many browsers support it
 * 2) Doesn't autoplay; May be a good thing considering point #4
 * 3) Doesn't autoloop Loops if the time is <15 seconds
 * 4) Much greater CPU usage

Handy Regex
Remove duplicate text in links when a suffix would work: Search: \[\[([^\\|\1([^\]]+)|undefined\]\] Replace: $1$2

Simple section/anchor link (Template:H2): Search: \[\[([^\#]+)\#([^\]]+)|undefined\|\2\]\] Replace:

Bracket simplifier (Template:B): Search: \[\[([^\)]+) \(([^\]]+)|undefined\)\|\1\]\] Replace:

3 param Template:S to Template:IW: Search: {{ s\|{{color|red| ([^}]+) }}\|{{color|blue| ([^}]+) }}\|{{color|green| ([^}]+) }} }} Replace:

Rollover/hover text (Template:Rollover): Search: <span class="explain" title="([^>]+)">([^<]+) Replace:

"\…" 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.

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: If the Spirit is neutral, divide the result by 2.

Slot Multiplier
If the Spirit is enhanceable, multiply this value by 1.5.
 * 0 slots: 0.5
 * 1 slot : 0.55
 * 2 slots: 0.605
 * 3 slots: 0.6655

Class Experience
For non-enhanceable: For enhanceable:
 * 1: 12000
 * 2: 20000
 * 3: 40000
 * 4: 60000
 * 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  determined it is possible to find the experience needed to reach any level.

Exp at any level =

$$\mbox{max exp} * \frac{\mbox{ratio}^{\mbox{level}-1}-1}{\mbox{ratio}^{98}-1}$$

Exp to the next level =

$$\mbox{max exp} * (\mbox{ratio}-1) * \frac{\mbox{ratio}^{\mbox{level}-1}}{\mbox{ratio}^{98}-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  (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  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×.

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
 * 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
 * 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