; SPDX-FileCopyrightText: 2023 Jummit
;
; SPDX-License-Identifier: GPL-3.0-or-later
(local {: new-world} (require :world))
(local {: new-opponent-select} (require :opponent_select))
(local {: new-tutorial} (require :tutorial))
(local {: new-credits} (require :credits))
(local {: draw-cards :kinds card-kinds} (require :cards))
(local {: select-with-mouse : perform-select} (require :select))
(local {: slide} (require :slide))
(local {: decay} (require :decay))
(fn draw-title-screen []
(do
(_G.cls 8)
(_G.rect 0 30 250 75 9)
(_G.print "TIC-80:\nACCESS BATTLERS" 36 39 13 false 2)))
(fn emit [entities]
(each [_ entity (ipairs entities)]
(case entity
(where {:emitter {:wait ?wait : delay : emission}}
(or (= ?wait nil) (= ?wait 0)))
(do
(table.insert entities (emission))
(set entity.emitter.wait delay))
{:emitter {: wait}}
(set entity.emitter.wait (- wait 1)))))
(fn emitter [direction x y]
{:emitter {:delay 20
:emission (fn []
{:card {:owner (math.random 1 2)
:kind (. card-kinds
(math.random 1 (length card-kinds)))
:open true}
:sliding {:x direction}
: x
: y
:decay-in 250})}})
(fn draw-selected [world]
(each [_ entity (ipairs world)]
(case entity
{:selected true : x : y}
(_G.print ">" (- x 8) y 13))))
(fn draw-text [world]
(each [_ entity (ipairs world)]
(case entity
{: text : x : y}
(_G.print text x y 13))))
(fn new-title-screen []
(_G.music 1)
(local world (new-world [draw-title-screen
draw-cards
draw-text
draw-selected
slide
emit
decay
select-with-mouse
perform-select]
[{:title-screen {:selected 1}}
(emitter 1 -8 10)
(emitter -1 238 114)]))
(each [i [text world-fn] (ipairs [["1 Player" new-opponent-select]
["2 Players" new-opponent-select]
["How to Play"
(fn [] (new-tutorial world))]
[:Credits (fn [] (new-credits world))]])]
(table.insert world {:on-select (fn [] (set world.next (world-fn)))
:x 80
:y (+ 60 (* i 8))
:w 100
:h 8
: text}))
world)
{: new-title-screen}