+local dragon = string.split([[
+ / )
+ ( |\
+ /| \\
+ // \\
+ /// \|
+ /( \ )\
+ \\ \_ //)
+ \\ :\__ ///
+ \\ ) // \
+ \\: / // |/
+ \\ / \ // \
+ /) \ ___..-' (| \_|
+ // / _.' \ \ \
+ /| \ \________ \ | /
+ (| _ _ __/ '-. ) /.'
+ \\ . '-.__ \_ / / \
+ \\_'. > --._ '. \ / / /
+ \ \ \ \ \ .' /.'
+ \ \ '._ / \ ) / .' |
+ \ \_ \_ | .'_/ __/
+ \ \ \_ | / / _/ \_
+ \ \ / _.' / / \
+ \ | /.' / .' '-,_
+ \ \ .' _.'_/ \
+ /\ /\ ) ___( /_.' \ |
+ | _\__// \ (.' _/ | |
+ \/_ __ /--'` , __/ /
+ (_ ) /b) \ '. : \___.-'_/ \__/
+ /:/: , ) : ( /_.'__/-'|_ _ /
+ /:/: __/\ > __,_.----.__\ / (/(/(/
+(_(,_/V .'/--' _/ __/ | /
+ VvvV //` _.-' _.' \ \
+ n_n// (((/->/ | /
+ '--' ~=' \ |
+ | |_,,,
+ \ \ /
+ '.__)
+]], "\n")
+
+local title = string.split([[
+ ____ ___ ____ ____
+| _ \ _ __ __ _ __ _ ___ _ __ |_ _| _ \ / ___|
+| | | | '__/ _` |/ _` |/ _ \| '_ \ | || |_) | |
+| |_| | | | (_| | (_| | (_) | | | || || _ <| |___
+|____/|_| \__,_|\__, |\___/|_| |_|___|_| \_\\____|
+ |___/
+]], "\n")
+
+local size_dragon = cutie.get_dimensions(dragon)
+local size_title = cutie.get_dimensions(title)
+
+dragonirc.splashscreen = async(function()
+ cutie.set_cursor_shown(false)
+ local promise = Promise()
+ local splashscreen_time = 0
+
+ local interval
+
+ interval = setInterval(function()
+ splashscreen_time = splashscreen_time + 1 / 60
+
+ if splashscreen_time > 1 then
+ promise:resolve()
+ clearInterval(interval)
+ return
+ end
+
+ cutie.handle_resize()
+ cutie.set_background({0, 0, 0})
+ cutie.empty_screen()
+
+ cutie.set_bold()
+
+ local size = cutie.get_terminal_size()
+
+ cutie.set_color(360 * math.max(1 - splashscreen_time * 2 / 3, 0))
+ cutie.render_at(dragon,
+ (size[1] - size_dragon[1]) / 2,
+ (size[2] - size_dragon[2]) / 2
+ )
+
+ cutie.set_color({1, 1, 1})
+ cutie.render_at(title,
+ (size[1] - size_title[1]) / 2,
+ size[2] - size_title[2] - 1
+ )
+
+ cutie.flush_buffer()
+ end, 1000 / 60)
+
+ await(promise)
+
+ cutie.set_cursor_shown(true)
+end)