#compdef ttfx

autoload -U is-at-least

_ttfx() {
    typeset -A opt_args
    typeset -a _arguments_options
    local ret=1

    if is-at-least 5.2; then
        _arguments_options=(-s -S -C)
    else
        _arguments_options=(-s -C)
    fi

    local context curcontext="$curcontext" state line
    _arguments "${_arguments_options[@]}" : \
'-i+[File to read input from]:INPUT_FILE:_files' \
'--input-file=[File to read input from]:INPUT_FILE:_files' \
'--tab-width=[]:TAB_WIDTH:_default' \
'--terminal-background-color=[]:TERMINAL_BACKGROUND_COLOR:_default' \
'--existing-color-handling=[]:EXISTING_COLOR_HANDLING:_default' \
'--frame-rate=[]:FRAME_RATE:_default' \
'--canvas-width=[]:CANVAS_WIDTH:_default' \
'--canvas-height=[]:CANVAS_HEIGHT:_default' \
'--anchor-canvas=[]:ANCHOR_CANVAS:_default' \
'--anchor-text=[]:ANCHOR_TEXT:_default' \
'--seed=[Seed for the random number generator (deterministic within ttfx)]:SEED:_default' \
'--print-completion=[Print a shell completion script and exit]:SHELL:(bash zsh)' \
'(--exclude-effects)*--include-effects=[Limit random-effect selection to these effects]:INCLUDE_EFFECTS:_default' \
'*--exclude-effects=[Exclude these effects from random-effect selection]:EXCLUDE_EFFECTS:_default' \
'--max-frames=[Parity harness\: stop after N frames]:MAX_FRAMES:_default' \
'-v[Print the version and exit]' \
'--version[Print the version and exit]' \
'--xterm-colors[]' \
'--no-color[]' \
'--wrap-text[]' \
'--ignore-terminal-dimensions[]' \
'--reuse-canvas[]' \
'--no-eol[]' \
'--no-restore-cursor[]' \
'-R[Run a random effect]' \
'--random-effect[Run a random effect]' \
'--m0-dump[M0 debug\: make every canvas character visible and print the first frame (used by the parity harness; hidden from help)]' \
'--parity-dump[Parity harness\: dump length-prefixed frames deterministically (requires --seed)]' \
'--virtual-clock[Parity harness\: drive the clock virtually (1/frame_rate per frame) so clock-dependent effects (matrix, thunderstorm) are reproducible on the real tty output path. Implied by --parity-dump]' \
'-h[Print help]' \
'--help[Print help]' \
":: :_ttfx_commands" \
"*::: :->ttfx" \
&& ret=0
    case $state in
    (ttfx)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:ttfx-command-$line[1]:"
        case $line[1] in
            (beams)
_arguments "${_arguments_options[@]}" : \
'*--beam-row-symbols=[Symbols to use for the beam effect when moving along a row. Strings will be used in sequence to create an animation]:BEAM_ROW_SYMBOLS:_default' \
'*--beam-column-symbols=[Symbols to use for the beam effect when moving along a column. Strings will be used in sequence to create an animation]:BEAM_COLUMN_SYMBOLS:_default' \
'--beam-delay=[Number of frames to wait before adding the next group of beams. Beams are added in groups of size random(1, 5)]:BEAM_DELAY:_default' \
'--beam-row-speed-range=[Speed range of the beam when moving along a row]:BEAM_ROW_SPEED_RANGE:_default' \
'--beam-column-speed-range=[Speed range of the beam when moving along a column]:BEAM_COLUMN_SPEED_RANGE:_default' \
'*--beam-gradient-stops=[Space separated, unquoted, list of colors for the beam, a gradient will be created between the colors]:BEAM_GRADIENT_STOPS:_default' \
'*--beam-gradient-steps=[Space separated, unquoted, numbers for the of gradient steps to use]:BEAM_GRADIENT_STEPS:_default' \
'--beam-gradient-frames=[Number of frames to display each gradient step. Increase to slow down the gradient animation]:BEAM_GRADIENT_FRAMES:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the wipe gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-frames=[Number of frames to display each gradient step. Increase to slow down the gradient animation]:FINAL_GRADIENT_FRAMES:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'--final-wipe-speed=[Speed of the final wipe as measured in diagonal groups activated per frame]:FINAL_WIPE_SPEED:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(binarypath)
_arguments "${_arguments_options[@]}" : \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'*--binary-colors=[Space separated, unquoted, list of colors for the binary characters. Character color is randomly assigned from this list]:BINARY_COLORS:_default' \
'--movement-speed=[Speed of the binary groups as they travel around the terminal]:MOVEMENT_SPEED:_default' \
'--active-binary-groups=[Maximum number of binary groups that are active at any given time as a percentage of the total number of binary groups. Lower this to improve performance]:ACTIVE_BINARY_GROUPS:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(blackhole)
_arguments "${_arguments_options[@]}" : \
'--blackhole-color=[Color for the stars that comprise the blackhole border]:BLACKHOLE_COLOR:_default' \
'*--star-colors=[List of colors from which character colors will be chosen and applied after the explosion, but before the cooldown to final color]:STAR_COLORS:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(bouncyballs)
_arguments "${_arguments_options[@]}" : \
'*--ball-colors=[Space separated list of colors from which ball colors will be randomly selected]:BALL_COLORS:_default' \
'*--ball-symbols=[Space separated list of symbols to use for the balls]:BALL_SYMBOLS:_default' \
'--ball-delay=[Number of frames between ball drops, increase to reduce ball drop rate]:BALL_DELAY:_default' \
'--movement-speed=[Movement speed of the characters]:MOVEMENT_SPEED:_default' \
'--movement-easing=[Easing function to use for character movement]:MOVEMENT_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(bubbles)
_arguments "${_arguments_options[@]}" : \
'*--bubble-colors=[Space separated, unquoted, list of colors for the bubbles. Ignored if --no-rainbow is left as default False]:BUBBLE_COLORS:_default' \
'--pop-color=[Color for the spray emitted when a bubble pops]:POP_COLOR:_default' \
'--bubble-speed=[Speed of the floating bubbles]:BUBBLE_SPEED:_default' \
'--bubble-delay=[Number of frames between bubbles]:BUBBLE_DELAY:_default' \
'--pop-condition=[Condition for a bubble to pop]:POP_CONDITION:_default' \
'--movement-easing=[Easing function to use for character movement after a bubble pops]:MOVEMENT_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'--rainbow[If set, the bubbles will be colored with a rotating rainbow gradient]' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(burn)
_arguments "${_arguments_options[@]}" : \
'--starting-color=[Color of the characters before they start to burn]:STARTING_COLOR:_default' \
'*--burn-colors=[Colors transitioned through as the characters burn]:BURN_COLORS:_default' \
'--smoke-chance=[Chance a given character will produce smoke while burning. Use 0 for no smoke]:SMOKE_CHANCE:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(colorshift)
_arguments "${_arguments_options[@]}" : \
'*--gradient-stops=[Space separated, unquoted, list of colors for the gradient]:GRADIENT_STOPS:_default' \
'*--gradient-steps=[Number of gradient steps to use. More steps will create a smoother gradient animation]:GRADIENT_STEPS:_default' \
'--gradient-frames=[Number of frames to display each gradient step. Increase to slow down the gradient animation]:GRADIENT_FRAMES:_default' \
'--travel-direction=[Direction the gradient travels across the canvas]:TRAVEL_DIRECTION:_default' \
'--cycles=[Number of times to cycle the gradient]:CYCLES:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use for the final gradient]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'--no-travel[Do not display the gradient as a wave]' \
'--reverse-travel-direction[Reverse the gradient travel direction]' \
'--no-loop[Do not loop the gradient]' \
'--skip-final-gradient[Skip the final gradient]' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(crumble)
_arguments "${_arguments_options[@]}" : \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(decrypt)
_arguments "${_arguments_options[@]}" : \
'--typing-speed=[Number of characters typed per keystroke]:TYPING_SPEED:_default' \
'*--ciphertext-colors=[Space separated, unquoted, list of colors for the ciphertext. Color will be randomly selected for each character]:CIPHERTEXT_COLORS:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the character gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(errorcorrect)
_arguments "${_arguments_options[@]}" : \
'--error-pairs=[Percent of characters that are in the wrong position. This is a float between 0 and 1.0]:ERROR_PAIRS:_default' \
'--swap-delay=[Number of frames between swaps]:SWAP_DELAY:_default' \
'--error-color=[Color for the characters that are in the wrong position]:ERROR_COLOR:_default' \
'--correct-color=[Color for the characters once corrected, this is a gradient from error-color and fades to final-color]:CORRECT_COLOR:_default' \
'--movement-speed=[Speed of the characters while moving to the correct position]:MOVEMENT_SPEED:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(expand)
_arguments "${_arguments_options[@]}" : \
'--expand-easing=[Easing function to use for character movement]:EXPAND_EASING:_default' \
'--movement-speed=[Movement speed of the characters]:MOVEMENT_SPEED:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(fireworks)
_arguments "${_arguments_options[@]}" : \
'*--firework-colors=[Space separated list of colors from which firework colors will be randomly selected]:FIREWORK_COLORS:_default' \
'--firework-symbol=[Symbol to use for the firework shell]:FIREWORK_SYMBOL:_default' \
'--firework-volume=[Percent of total characters in each firework shell]:FIREWORK_VOLUME:_default' \
'--launch-delay=[Number of frames to wait between launching each firework shell. +/- 0-50 percent randomness is applied to this value]:LAUNCH_DELAY:_default' \
'--explode-distance=[Maximum distance from the firework shell origin to the explode waypoint as a percentage of the total canvas width]:EXPLODE_DISTANCE:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'--explode-anywhere[If set, fireworks explode anywhere in the canvas. Otherwise, fireworks explode above highest settled row of text]' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(highlight)
_arguments "${_arguments_options[@]}" : \
'--highlight-brightness=[Brightness of the highlight color]:HIGHLIGHT_BRIGHTNESS:_default' \
'--highlight-direction=[Direction the highlight will travel]:HIGHLIGHT_DIRECTION:_default' \
'--highlight-width=[Width of the highlight. n >= 1]:HIGHLIGHT_WIDTH:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(laseretch)
_arguments "${_arguments_options[@]}" : \
'--etch-pattern=[Pattern used to etch the text]:ETCH_PATTERN:_default' \
'--etch-speed=[Along with etch_delay, determines the speed at which the characters are etched onto the terminal. This value specifies the number of characters to etch simultaneously]:ETCH_SPEED:_default' \
'--etch-delay=[Along with etch_speed, determines the speed at which the characters are etched onto the terminal. This values specifies the number of frames to wait before etching the next set of characters]:ETCH_DELAY:_default' \
'*--cool-gradient-stops=[Space separated, unquoted, list of colors for the gradient used to cool the characters after etching]:COOL_GRADIENT_STOPS:_default' \
'*--laser-gradient-stops=[Space separated, unquoted, list of colors for the laser gradient]:LASER_GRADIENT_STOPS:_default' \
'*--spark-gradient-stops=[Space separated, unquoted, list of colors for the spark cooling gradient]:SPARK_GRADIENT_STOPS:_default' \
'--spark-cooling-frames=[Number of frames to display each spark cooling gradient step. Increase to slow down the rate of cooling]:SPARK_COOLING_FRAMES:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the character gradient (applied across the canvas)]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-frames=[Number of frames to display each gradient step. Increase to slow down the gradient animation]:FINAL_GRADIENT_FRAMES:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(matrix)
_arguments "${_arguments_options[@]}" : \
'--highlight-color=[Color for the bottom of the rain column]:HIGHLIGHT_COLOR:_default' \
'*--rain-color-gradient=[Space separated, unquoted, list of colors for the rain gradient. Colors are selected from the gradient randomly. If only one color is provided, the characters will be displayed in that color]:RAIN_COLOR_GRADIENT:_default' \
'*--rain-symbols=[Space separated, unquoted, list of symbols to use for the rain]:RAIN_SYMBOLS:_default' \
'--rain-fall-delay-range=[Range for the speed of the falling rain as determined by the delay between rows. Actual delay is randomly selected from the range]:RAIN_FALL_DELAY_RANGE:_default' \
'--rain-column-delay-range=[Range of frames to wait between adding new rain columns]:RAIN_COLUMN_DELAY_RANGE:_default' \
'--rain-time=[Time, in seconds, to display the rain effect before transitioning to the input text]:RAIN_TIME:_default' \
'--symbol-swap-chance=[Chance of swapping a character'\''s symbol on each tick]:SYMBOL_SWAP_CHANCE:_default' \
'--color-swap-chance=[Chance of swapping a character'\''s color on each tick]:COLOR_SWAP_CHANCE:_default' \
'--resolve-delay=[Number of frames to wait between resolving the next group of characters. This is used to adjust the speed of the final resolve phase]:RESOLVE_DELAY:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the character gradient (applied from bottom to top). If only one color is provided, the characters will be displayed in that color]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Space separated, unquoted, list of the number of gradient steps to use. More steps will create a smoother and longer gradient animation]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-frames=[Number of frames to display each gradient step. Increase to slow down the gradient animation]:FINAL_GRADIENT_FRAMES:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(middleout)
_arguments "${_arguments_options[@]}" : \
'--starting-color=[Color for the initial text in the center of the canvas]:STARTING_COLOR:_default' \
'--expand-direction=[Direction the text will expand]:EXPAND_DIRECTION:_default' \
'--center-movement-speed=[Speed of the characters during the initial expansion of the center vertical/horiztonal line]:CENTER_MOVEMENT_SPEED:_default' \
'--full-movement-speed=[Speed of the characters during the final full expansion]:FULL_MOVEMENT_SPEED:_default' \
'--center-easing=[Easing function to use for initial expansion]:CENTER_EASING:_default' \
'--full-easing=[Easing function to use for full expansion]:FULL_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(orbittingvolley)
_arguments "${_arguments_options[@]}" : \
'--top-launcher-symbol=[Symbol for the top launcher]:TOP_LAUNCHER_SYMBOL:_default' \
'--right-launcher-symbol=[Symbol for the right launcher]:RIGHT_LAUNCHER_SYMBOL:_default' \
'--bottom-launcher-symbol=[Symbol for the bottom launcher]:BOTTOM_LAUNCHER_SYMBOL:_default' \
'--left-launcher-symbol=[Symbol for the left launcher]:LEFT_LAUNCHER_SYMBOL:_default' \
'--launcher-movement-speed=[Orbitting speed of the launchers]:LAUNCHER_MOVEMENT_SPEED:_default' \
'--character-movement-speed=[Speed of the launched characters]:CHARACTER_MOVEMENT_SPEED:_default' \
'--volley-size=[Percent of total input characters each launcher will fire per volley. Lower limit of one character]:VOLLEY_SIZE:_default' \
'--launch-delay=[Number of animation ticks to wait between volleys of characters]:LAUNCH_DELAY:_default' \
'--character-easing=[Easing function to use for launched character movement]:CHARACTER_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(overflow)
_arguments "${_arguments_options[@]}" : \
'*--overflow-gradient-stops=[Space separated, unquoted, list of colors for the overflow gradient]:OVERFLOW_GRADIENT_STOPS:_default' \
'--overflow-cycles-range=[Number of cycles to overflow the text]:OVERFLOW_CYCLES_RANGE:_default' \
'--overflow-speed=[Speed of the overflow effect]:OVERFLOW_SPEED:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(pour)
_arguments "${_arguments_options[@]}" : \
'--pour-direction=[Direction the text will pour]:POUR_DIRECTION:_default' \
'--pour-speed=[Number of characters poured in per tick. Increase to speed up the effect]:POUR_SPEED:_default' \
'--movement-speed-range=[Movement speed range of the characters]:MOVEMENT_SPEED_RANGE:_default' \
'--gap=[Number of frames to wait between each character in the pour effect]:GAP:_default' \
'--starting-color=[Color of the characters before the gradient starts]:STARTING_COLOR:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the character gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-frames=[Number of frames to display each gradient step]:FINAL_GRADIENT_FRAMES:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'--movement-easing=[Easing function to use for character movement]:MOVEMENT_EASING:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(print)
_arguments "${_arguments_options[@]}" : \
'--print-head-return-speed=[Speed of the print head when performing a carriage return]:PRINT_HEAD_RETURN_SPEED:_default' \
'--print-speed=[Speed of the print head when printing characters]:PRINT_SPEED:_default' \
'--print-head-easing=[Easing function to use for print head movement]:PRINT_HEAD_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(rain)
_arguments "${_arguments_options[@]}" : \
'*--rain-colors=[List of colors for the rain drops. Colors are randomly chosen from the list]:RAIN_COLORS:_default' \
'--movement-speed=[Falling speed range of the rain drops]:MOVEMENT_SPEED:_default' \
'*--rain-symbols=[Space separated list of symbols to use for the rain drops. Symbols are randomly chosen from the list]:RAIN_SYMBOLS:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'--movement-easing=[Easing function to use for character movement]:MOVEMENT_EASING:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(randomsequence)
_arguments "${_arguments_options[@]}" : \
'--speed=[Speed of the animation as a percentage of the total number of characters to reveal in each tick]:SPEED:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-frames=[Number of frames to display each gradient step]:FINAL_GRADIENT_FRAMES:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(rings)
_arguments "${_arguments_options[@]}" : \
'*--ring-colors=[Space separated, unquoted, list of colors for the rings]:RING_COLORS:_default' \
'--ring-gap=[Distance between rings as a percent of the smallest canvas dimension]:RING_GAP:_default' \
'--spin-duration=[Number of frames for each cycle of the spin phase]:SPIN_DURATION:_default' \
'--spin-speed=[Range of speeds for the rotation of the rings. The speed is randomly selected from this range for each ring]:SPIN_SPEED:_default' \
'--disperse-duration=[Number of frames spent in the dispersed state between spinning cycles]:DISPERSE_DURATION:_default' \
'--spin-disperse-cycles=[Number of times the animation will cycles between spinning rings and dispersed characters]:SPIN_DISPERSE_CYCLES:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(scattered)
_arguments "${_arguments_options[@]}" : \
'--movement-speed=[Movement speed of the characters]:MOVEMENT_SPEED:_default' \
'--movement-easing=[Easing function to use for character movement]:MOVEMENT_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the character gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-frames=[Number of frames to display each gradient step]:FINAL_GRADIENT_FRAMES:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(slice)
_arguments "${_arguments_options[@]}" : \
'--slice-direction=[Direction of the slice]:SLICE_DIRECTION:(vertical horizontal diagonal)' \
'--movement-speed=[Movement speed of the characters]:MOVEMENT_SPEED:_default' \
'--movement-easing=[Easing function to use for character movement]:MOVEMENT_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(slide)
_arguments "${_arguments_options[@]}" : \
'--movement-speed=[Speed of the characters]:MOVEMENT_SPEED:_default' \
'--grouping=[Direction to group characters]:GROUPING:_default' \
'--gap=[Number of frames to wait before adding the next group of characters]:GAP:_default' \
'--movement-easing=[Easing function to use for character movement]:MOVEMENT_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the character gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-frames=[Number of frames to display each gradient step]:FINAL_GRADIENT_FRAMES:_default' \
'--final-gradient-direction=[Direction of the gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'--reverse-direction[Reverse the direction of the characters]' \
'--merge[Merge the character groups originating from either side of the terminal]' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(smoke)
_arguments "${_arguments_options[@]}" : \
'--starting-color=[Color of the text before being colorized by the smoke]:STARTING_COLOR:_default' \
'*--smoke-symbols=[Symbols to use for the smoke. Strings will be used in sequence to create an animation]:SMOKE_SYMBOLS:_default' \
'*--smoke-gradient-stops=[Space separated, unquoted, list of colors for the smoke gradient]:SMOKE_GRADIENT_STOPS:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the character gradient (applied across the canvas)]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'--use-whole-canvas[If True, the entire canvas will be flooded. Otherwise the effect is limited to the text boundary]' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(spotlights)
_arguments "${_arguments_options[@]}" : \
'--beam-width-ratio=[Width of the beam of light as min(width, height) // n of the input text. Values less than 1 are raised to 1]:BEAM_WIDTH_RATIO:_default' \
'--beam-falloff=[Distance from the edge of the beam where the brightness begins to fall off, as a percentage of total beam width]:BEAM_FALLOFF:_default' \
'--search-duration=[Duration of the search phase, in frames, before the spotlights converge in the center]:SEARCH_DURATION:_default' \
'--search-speed-range=[Range of speeds for the spotlights during the search phase]:SEARCH_SPEED_RANGE:_default' \
'--spotlight-count=[Number of spotlights to use]:SPOTLIGHT_COUNT:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(spray)
_arguments "${_arguments_options[@]}" : \
'--spray-position=[Position for the spray origin]:SPRAY_POSITION:_default' \
'--spray-volume=[Number of characters to spray per tick as a percent of the total number of characters]:SPRAY_VOLUME:_default' \
'--movement-speed-range=[Movement speed range of the characters]:MOVEMENT_SPEED_RANGE:_default' \
'--movement-easing=[Easing function to use for character movement]:MOVEMENT_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(swarm)
_arguments "${_arguments_options[@]}" : \
'*--base-color=[Space separated, unquoted, list of colors for the swarms]:BASE_COLOR:_default' \
'--flash-color=[Color for the character flash. Characters flash when moving]:FLASH_COLOR:_default' \
'--swarm-size=[Percent of total characters in each swarm]:SWARM_SIZE:_default' \
'--swarm-coordination=[Percent of characters in a swarm that move as a group]:SWARM_COORDINATION:_default' \
'--swarm-area-count-range=[Range of the number of areas where characters will swarm]:SWARM_AREA_COUNT_RANGE:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(sweep)
_arguments "${_arguments_options[@]}" : \
'*--sweep-symbols=[Space separated list of symbols to use for the sweep shimmer]:SWEEP_SYMBOLS:_default' \
'--first-sweep-direction=[Direction of the first sweep, revealing uncolored characters]:FIRST_SWEEP_DIRECTION:_default' \
'--second-sweep-direction=[Direction of the second sweep, coloring the characters]:SECOND_SWEEP_DIRECTION:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the character gradient (applied from bottom to top)]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(synthgrid)
_arguments "${_arguments_options[@]}" : \
'*--grid-gradient-stops=[Space separated, unquoted, list of colors for the grid gradient]:GRID_GRADIENT_STOPS:_default' \
'*--grid-gradient-steps=[Space separated, unquoted, list of the number of gradient steps to use. More steps will create a smoother and longer gradient animation]:GRID_GRADIENT_STEPS:_default' \
'--grid-gradient-direction=[Direction of the gradient for the grid color]:GRID_GRADIENT_DIRECTION:_default' \
'*--text-gradient-stops=[Space separated, unquoted, list of colors for the text gradient]:TEXT_GRADIENT_STOPS:_default' \
'*--text-gradient-steps=[Space separated, unquoted, list of the number of gradient steps to use. More steps will create a smoother and longer gradient animation]:TEXT_GRADIENT_STEPS:_default' \
'--text-gradient-direction=[Direction of the gradient for the text color]:TEXT_GRADIENT_DIRECTION:_default' \
'--grid-row-symbol=[Symbol to use for grid row lines]:GRID_ROW_SYMBOL:_default' \
'--grid-column-symbol=[Symbol to use for grid column lines]:GRID_COLUMN_SYMBOL:_default' \
'*--text-generation-symbols=[Space separated, unquoted, list of characters for the text generation animation]:TEXT_GENERATION_SYMBOLS:_default' \
'--max-active-blocks=[Maximum percentage of blocks to have active at any given time. For example, if set to 0.1, 10 percent of the blocks will be active at any given time]:MAX_ACTIVE_BLOCKS:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(thunderstorm)
_arguments "${_arguments_options[@]}" : \
'--lightning-color=[Color for the lightning strike]:LIGHTNING_COLOR:_default' \
'--glowing-text-color=[Color for the text when glowing after a lightning strike]:GLOWING_TEXT_COLOR:_default' \
'--text-glow-time=[Number of frames to display each color in the post-lightning text glow cooling gradient. Increase to slow down the cooling animation]:TEXT_GLOW_TIME:_default' \
'*--raindrop-symbols=[Symbols to use for the raindrops]:RAINDROP_SYMBOLS:_default' \
'*--spark-symbols=[Symbols to use for the lightning impact sparks]:SPARK_SYMBOLS:_default' \
'--spark-glow-color=[Color for the spark glow after a lightning strike]:SPARK_GLOW_COLOR:_default' \
'--spark-glow-time=[Number of frames to display each color in the post-lightning spark cooling gradient. Increase to slow down the cooling animation]:SPARK_GLOW_TIME:_default' \
'--storm-time=[Duration, in seconds, the storm will occur]:STORM_TIME:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the character gradient (applied across the canvas)]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-frames=[Number of frames to display each gradient step. Increase to slow down the gradient animation]:FINAL_GRADIENT_FRAMES:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(unstable)
_arguments "${_arguments_options[@]}" : \
'--unstable-color=[Color transitioned to as the characters become unstable]:UNSTABLE_COLOR:_default' \
'--explosion-ease=[Easing function to use for character movement during the explosion]:EXPLOSION_EASE:_default' \
'--explosion-speed=[Speed of characters during explosion]:EXPLOSION_SPEED:_default' \
'--reassembly-ease=[Easing function to use for character reassembly]:REASSEMBLY_EASE:_default' \
'--reassembly-speed=[Speed of characters during reassembly]:REASSEMBLY_SPEED:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(vhstape)
_arguments "${_arguments_options[@]}" : \
'*--glitch-line-colors=[Space separated, unquoted, list of colors for the characters when a single line is glitching. Colors are applied in order as an animation]:GLITCH_LINE_COLORS:_default' \
'*--glitch-wave-colors=[Space separated, unquoted, list of colors for the characters in lines that are part of the glitch wave. Colors are applied in order as an animation]:GLITCH_WAVE_COLORS:_default' \
'*--noise-colors=[Space separated, unquoted, list of colors for the characters during the noise phase]:NOISE_COLORS:_default' \
'--glitch-line-chance=[Chance that a line will glitch on any given frame]:GLITCH_LINE_CHANCE:_default' \
'--noise-chance=[Chance that all characters will experience noise on any given frame]:NOISE_CHANCE:_default' \
'--total-glitch-time=[Total time, frames, that the glitching phase will last]:TOTAL_GLITCH_TIME:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient. If only one color is provided, the characters will be displayed in that color]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(waves)
_arguments "${_arguments_options[@]}" : \
'*--wave-symbols=[Symbols to use for the wave animation]:WAVE_SYMBOLS:_default' \
'*--wave-gradient-stops=[Space separated, unquoted, list of colors for the character gradient (applied across the canvas)]:WAVE_GRADIENT_STOPS:_default' \
'*--wave-gradient-steps=[Space separated, unquoted, list of the number of gradient steps to use]:WAVE_GRADIENT_STEPS:_default' \
'--wave-count=[Number of waves to generate. n > 0]:WAVE_COUNT:_default' \
'--wave-length=[The number of frames for each step of the wave]:WAVE_LENGTH:_default' \
'--wave-direction=[Direction of the wave]:WAVE_DIRECTION:_default' \
'--wave-easing=[Easing function to use for wave travel]:WAVE_EASING:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the final color gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(wipe)
_arguments "${_arguments_options[@]}" : \
'--wipe-direction=[Direction the text will wipe]:WIPE_DIRECTION:_default' \
'--wipe-delay=[Number of frames to wait before adding the next character group]:WIPE_DELAY:_default' \
'--wipe-ease=[Easing function to use for the wipe effect]:WIPE_EASE:_default' \
'*--final-gradient-stops=[Space separated, unquoted, list of colors for the wipe gradient]:FINAL_GRADIENT_STOPS:_default' \
'*--final-gradient-steps=[Number of gradient steps to use]:FINAL_GRADIENT_STEPS:_default' \
'--final-gradient-frames=[Number of frames to display each gradient step]:FINAL_GRADIENT_FRAMES:_default' \
'--final-gradient-direction=[Direction of the final gradient]:FINAL_GRADIENT_DIRECTION:_default' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" : \
":: :_ttfx__subcmd__help_commands" \
"*::: :->help" \
&& ret=0

    case $state in
    (help)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:ttfx-help-command-$line[1]:"
        case $line[1] in
            (beams)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(binarypath)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(blackhole)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(bouncyballs)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(bubbles)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(burn)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(colorshift)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(crumble)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(decrypt)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(errorcorrect)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(expand)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(fireworks)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(highlight)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(laseretch)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(matrix)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(middleout)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(orbittingvolley)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(overflow)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(pour)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(print)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(rain)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(randomsequence)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(rings)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(scattered)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(slice)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(slide)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(smoke)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(spotlights)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(spray)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(swarm)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(sweep)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(synthgrid)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(thunderstorm)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(unstable)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(vhstape)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(waves)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(wipe)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
        esac
    ;;
esac
;;
        esac
    ;;
esac
}

(( $+functions[_ttfx_commands] )) ||
_ttfx_commands() {
    local commands; commands=(
'beams:Create beams which travel over the canvas illuminating the characters behind them' \
'binarypath:Binary representations of each character move towards the home coordinate of the character' \
'blackhole:Characters are consumed by a black hole and explode outwards' \
'bouncyballs:Characters are bouncy balls falling from the top of the canvas' \
'bubbles:Characters are formed into bubbles that float down and pop' \
'burn:Burns vertically in the canvas' \
'colorshift:Display a gradient that shifts colors across the terminal' \
'crumble:Characters lose color and crumble into dust, vacuumed up, and reformed' \
'decrypt:Display a movie style decryption effect' \
'errorcorrect:Some characters start in the wrong position and are corrected in sequence' \
'expand:Expands the text from a single point' \
'fireworks:Characters launch and explode like fireworks and fall into place' \
'highlight:Run a specular highlight across the text' \
'laseretch:A laser etches characters onto the terminal' \
'matrix:Matrix digital rain effect' \
'middleout:Text expands in a single row or column in the middle of the canvas then out' \
'orbittingvolley:Four launchers orbit the canvas firing volleys of characters inward to build the input text from the center out' \
'overflow:Input text overflows and scrolls the terminal in a random order until eventually appearing ordered' \
'pour:Pours the characters into position from the given direction' \
'print:Lines are printed one at a time following a print head. Print head performs line feed, carriage return' \
'rain:Rain characters from the top of the canvas' \
'randomsequence:Prints the input data in a random sequence' \
'rings:Characters are dispersed and form into spinning rings' \
'scattered:Text is scattered across the canvas and moves into position' \
'slice:Slices the input in half and slides it into place from opposite directions' \
'slide:Slide characters into view from outside the terminal' \
'smoke:Smoke floods the canvas colorizing any characters it crosses' \
'spotlights:Spotlights search the text area, illuminating characters, before converging in the center and expanding' \
'spray:Draws the characters spawning at varying rates from a single point' \
'swarm:Characters are grouped into swarms and move around the terminal before settling into position' \
'sweep:Sweep across the canvas to reveal uncolored text, reverse sweep to color the text' \
'synthgrid:Create a grid which fills with characters dissolving into the final text' \
'thunderstorm:Create a thunderstorm in the terminal' \
'unstable:Spawn characters jumbled, explode them to the edge of the canvas, then reassemble them in the correct layout' \
'vhstape:Lines of characters glitch left and right and lose detail like an old VHS tape' \
'waves:Waves travel across the terminal leaving behind the characters' \
'wipe:Wipes the text across the terminal to reveal characters' \
'help:Print this message or the help of the given subcommand(s)' \
    )
    _describe -t commands 'ttfx commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__beams_commands] )) ||
_ttfx__subcmd__beams_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx beams commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__binarypath_commands] )) ||
_ttfx__subcmd__binarypath_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx binarypath commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__blackhole_commands] )) ||
_ttfx__subcmd__blackhole_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx blackhole commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__bouncyballs_commands] )) ||
_ttfx__subcmd__bouncyballs_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx bouncyballs commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__bubbles_commands] )) ||
_ttfx__subcmd__bubbles_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx bubbles commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__burn_commands] )) ||
_ttfx__subcmd__burn_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx burn commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__colorshift_commands] )) ||
_ttfx__subcmd__colorshift_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx colorshift commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__crumble_commands] )) ||
_ttfx__subcmd__crumble_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx crumble commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__decrypt_commands] )) ||
_ttfx__subcmd__decrypt_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx decrypt commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__errorcorrect_commands] )) ||
_ttfx__subcmd__errorcorrect_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx errorcorrect commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__expand_commands] )) ||
_ttfx__subcmd__expand_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx expand commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__fireworks_commands] )) ||
_ttfx__subcmd__fireworks_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx fireworks commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help_commands] )) ||
_ttfx__subcmd__help_commands() {
    local commands; commands=(
'beams:Create beams which travel over the canvas illuminating the characters behind them' \
'binarypath:Binary representations of each character move towards the home coordinate of the character' \
'blackhole:Characters are consumed by a black hole and explode outwards' \
'bouncyballs:Characters are bouncy balls falling from the top of the canvas' \
'bubbles:Characters are formed into bubbles that float down and pop' \
'burn:Burns vertically in the canvas' \
'colorshift:Display a gradient that shifts colors across the terminal' \
'crumble:Characters lose color and crumble into dust, vacuumed up, and reformed' \
'decrypt:Display a movie style decryption effect' \
'errorcorrect:Some characters start in the wrong position and are corrected in sequence' \
'expand:Expands the text from a single point' \
'fireworks:Characters launch and explode like fireworks and fall into place' \
'highlight:Run a specular highlight across the text' \
'laseretch:A laser etches characters onto the terminal' \
'matrix:Matrix digital rain effect' \
'middleout:Text expands in a single row or column in the middle of the canvas then out' \
'orbittingvolley:Four launchers orbit the canvas firing volleys of characters inward to build the input text from the center out' \
'overflow:Input text overflows and scrolls the terminal in a random order until eventually appearing ordered' \
'pour:Pours the characters into position from the given direction' \
'print:Lines are printed one at a time following a print head. Print head performs line feed, carriage return' \
'rain:Rain characters from the top of the canvas' \
'randomsequence:Prints the input data in a random sequence' \
'rings:Characters are dispersed and form into spinning rings' \
'scattered:Text is scattered across the canvas and moves into position' \
'slice:Slices the input in half and slides it into place from opposite directions' \
'slide:Slide characters into view from outside the terminal' \
'smoke:Smoke floods the canvas colorizing any characters it crosses' \
'spotlights:Spotlights search the text area, illuminating characters, before converging in the center and expanding' \
'spray:Draws the characters spawning at varying rates from a single point' \
'swarm:Characters are grouped into swarms and move around the terminal before settling into position' \
'sweep:Sweep across the canvas to reveal uncolored text, reverse sweep to color the text' \
'synthgrid:Create a grid which fills with characters dissolving into the final text' \
'thunderstorm:Create a thunderstorm in the terminal' \
'unstable:Spawn characters jumbled, explode them to the edge of the canvas, then reassemble them in the correct layout' \
'vhstape:Lines of characters glitch left and right and lose detail like an old VHS tape' \
'waves:Waves travel across the terminal leaving behind the characters' \
'wipe:Wipes the text across the terminal to reveal characters' \
'help:Print this message or the help of the given subcommand(s)' \
    )
    _describe -t commands 'ttfx help commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__beams_commands] )) ||
_ttfx__subcmd__help__subcmd__beams_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help beams commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__binarypath_commands] )) ||
_ttfx__subcmd__help__subcmd__binarypath_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help binarypath commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__blackhole_commands] )) ||
_ttfx__subcmd__help__subcmd__blackhole_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help blackhole commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__bouncyballs_commands] )) ||
_ttfx__subcmd__help__subcmd__bouncyballs_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help bouncyballs commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__bubbles_commands] )) ||
_ttfx__subcmd__help__subcmd__bubbles_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help bubbles commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__burn_commands] )) ||
_ttfx__subcmd__help__subcmd__burn_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help burn commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__colorshift_commands] )) ||
_ttfx__subcmd__help__subcmd__colorshift_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help colorshift commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__crumble_commands] )) ||
_ttfx__subcmd__help__subcmd__crumble_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help crumble commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__decrypt_commands] )) ||
_ttfx__subcmd__help__subcmd__decrypt_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help decrypt commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__errorcorrect_commands] )) ||
_ttfx__subcmd__help__subcmd__errorcorrect_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help errorcorrect commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__expand_commands] )) ||
_ttfx__subcmd__help__subcmd__expand_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help expand commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__fireworks_commands] )) ||
_ttfx__subcmd__help__subcmd__fireworks_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help fireworks commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__help_commands] )) ||
_ttfx__subcmd__help__subcmd__help_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help help commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__highlight_commands] )) ||
_ttfx__subcmd__help__subcmd__highlight_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help highlight commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__laseretch_commands] )) ||
_ttfx__subcmd__help__subcmd__laseretch_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help laseretch commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__matrix_commands] )) ||
_ttfx__subcmd__help__subcmd__matrix_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help matrix commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__middleout_commands] )) ||
_ttfx__subcmd__help__subcmd__middleout_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help middleout commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__orbittingvolley_commands] )) ||
_ttfx__subcmd__help__subcmd__orbittingvolley_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help orbittingvolley commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__overflow_commands] )) ||
_ttfx__subcmd__help__subcmd__overflow_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help overflow commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__pour_commands] )) ||
_ttfx__subcmd__help__subcmd__pour_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help pour commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__print_commands] )) ||
_ttfx__subcmd__help__subcmd__print_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help print commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__rain_commands] )) ||
_ttfx__subcmd__help__subcmd__rain_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help rain commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__randomsequence_commands] )) ||
_ttfx__subcmd__help__subcmd__randomsequence_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help randomsequence commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__rings_commands] )) ||
_ttfx__subcmd__help__subcmd__rings_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help rings commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__scattered_commands] )) ||
_ttfx__subcmd__help__subcmd__scattered_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help scattered commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__slice_commands] )) ||
_ttfx__subcmd__help__subcmd__slice_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help slice commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__slide_commands] )) ||
_ttfx__subcmd__help__subcmd__slide_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help slide commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__smoke_commands] )) ||
_ttfx__subcmd__help__subcmd__smoke_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help smoke commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__spotlights_commands] )) ||
_ttfx__subcmd__help__subcmd__spotlights_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help spotlights commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__spray_commands] )) ||
_ttfx__subcmd__help__subcmd__spray_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help spray commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__swarm_commands] )) ||
_ttfx__subcmd__help__subcmd__swarm_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help swarm commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__sweep_commands] )) ||
_ttfx__subcmd__help__subcmd__sweep_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help sweep commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__synthgrid_commands] )) ||
_ttfx__subcmd__help__subcmd__synthgrid_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help synthgrid commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__thunderstorm_commands] )) ||
_ttfx__subcmd__help__subcmd__thunderstorm_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help thunderstorm commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__unstable_commands] )) ||
_ttfx__subcmd__help__subcmd__unstable_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help unstable commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__vhstape_commands] )) ||
_ttfx__subcmd__help__subcmd__vhstape_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help vhstape commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__waves_commands] )) ||
_ttfx__subcmd__help__subcmd__waves_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help waves commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__help__subcmd__wipe_commands] )) ||
_ttfx__subcmd__help__subcmd__wipe_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx help wipe commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__highlight_commands] )) ||
_ttfx__subcmd__highlight_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx highlight commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__laseretch_commands] )) ||
_ttfx__subcmd__laseretch_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx laseretch commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__matrix_commands] )) ||
_ttfx__subcmd__matrix_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx matrix commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__middleout_commands] )) ||
_ttfx__subcmd__middleout_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx middleout commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__orbittingvolley_commands] )) ||
_ttfx__subcmd__orbittingvolley_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx orbittingvolley commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__overflow_commands] )) ||
_ttfx__subcmd__overflow_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx overflow commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__pour_commands] )) ||
_ttfx__subcmd__pour_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx pour commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__print_commands] )) ||
_ttfx__subcmd__print_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx print commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__rain_commands] )) ||
_ttfx__subcmd__rain_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx rain commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__randomsequence_commands] )) ||
_ttfx__subcmd__randomsequence_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx randomsequence commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__rings_commands] )) ||
_ttfx__subcmd__rings_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx rings commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__scattered_commands] )) ||
_ttfx__subcmd__scattered_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx scattered commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__slice_commands] )) ||
_ttfx__subcmd__slice_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx slice commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__slide_commands] )) ||
_ttfx__subcmd__slide_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx slide commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__smoke_commands] )) ||
_ttfx__subcmd__smoke_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx smoke commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__spotlights_commands] )) ||
_ttfx__subcmd__spotlights_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx spotlights commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__spray_commands] )) ||
_ttfx__subcmd__spray_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx spray commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__swarm_commands] )) ||
_ttfx__subcmd__swarm_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx swarm commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__sweep_commands] )) ||
_ttfx__subcmd__sweep_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx sweep commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__synthgrid_commands] )) ||
_ttfx__subcmd__synthgrid_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx synthgrid commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__thunderstorm_commands] )) ||
_ttfx__subcmd__thunderstorm_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx thunderstorm commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__unstable_commands] )) ||
_ttfx__subcmd__unstable_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx unstable commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__vhstape_commands] )) ||
_ttfx__subcmd__vhstape_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx vhstape commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__waves_commands] )) ||
_ttfx__subcmd__waves_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx waves commands' commands "$@"
}
(( $+functions[_ttfx__subcmd__wipe_commands] )) ||
_ttfx__subcmd__wipe_commands() {
    local commands; commands=()
    _describe -t commands 'ttfx wipe commands' commands "$@"
}

if [ "$funcstack[1]" = "_ttfx" ]; then
    _ttfx "$@"
else
    compdef _ttfx ttfx
fi
