pxl8/demo/main.fnl

112 lines
3.1 KiB
Text
Raw Normal View History

2025-08-13 15:04:49 -05:00
(local pxl8 (require :pxl8))
2025-10-06 18:14:07 -05:00
(local cube3d (require :mod.cube3d))
2025-08-13 15:04:49 -05:00
(var time 0)
(var current-effect 1)
(var particles nil)
(var fire-init false)
(var rain-init false)
(var snow-init false)
2025-10-05 16:25:17 -05:00
(var use-nes-palette false)
2025-08-13 15:04:49 -05:00
2025-09-28 13:10:29 -05:00
(var logo-x 256)
(var logo-y 148)
(var logo-dx 100)
(var logo-dy 80)
(var logo-sprite nil)
2025-08-13 15:04:49 -05:00
(global init (fn []
2025-10-05 16:25:17 -05:00
(pxl8.load_palette "sprites/pxl8_logo.ase")
2025-10-04 04:13:48 -05:00
(set logo-sprite (pxl8.load_sprite "sprites/pxl8_logo.ase"))
(set particles (pxl8.particles_new 1000))))
2025-08-13 15:04:49 -05:00
(global update (fn [dt]
(set time (+ time dt))
2025-09-28 13:10:29 -05:00
(when (pxl8.key_pressed "1")
2025-08-13 15:04:49 -05:00
(set current-effect 1))
2025-09-28 13:10:29 -05:00
(when (pxl8.key_pressed "2")
2025-08-13 15:04:49 -05:00
(set current-effect 2))
2025-09-28 13:10:29 -05:00
(when (pxl8.key_pressed "3")
(set current-effect 3))
(when (pxl8.key_pressed "4")
2025-08-13 15:04:49 -05:00
(set current-effect 4))
2025-09-28 13:10:29 -05:00
(when (pxl8.key_pressed "5")
2025-08-13 15:04:49 -05:00
(set current-effect 5)
2025-09-28 13:10:29 -05:00
(set fire-init false))
(when (pxl8.key_pressed "6")
2025-08-13 15:04:49 -05:00
(set current-effect 6)
2025-09-28 13:10:29 -05:00
(set rain-init false))
(when (pxl8.key_pressed "7")
(set current-effect 7)
2025-08-13 15:04:49 -05:00
(set snow-init false))
2025-10-04 04:13:48 -05:00
(when (pxl8.key_pressed "8")
(set current-effect 8))
2025-10-05 16:25:17 -05:00
(when (pxl8.key_pressed "9")
(set use-nes-palette (not use-nes-palette))
(local palette-path (if use-nes-palette "palettes/nes.ase" "sprites/pxl8_logo.ase"))
2025-10-05 17:19:59 -05:00
(pxl8.load_palette palette-path))
2025-09-28 13:10:29 -05:00
2025-10-04 04:13:48 -05:00
(case current-effect
1 (do
(set logo-x (+ logo-x (* logo-dx dt)))
(set logo-y (+ logo-y (* logo-dy dt)))
(when (or (< logo-x 0) (> logo-x 512))
(set logo-dx (- logo-dx)))
(when (or (< logo-y 0) (> logo-y 296))
(set logo-dy (- logo-dy))))
8 (cube3d.update dt)
_ nil)
2025-09-28 13:10:29 -05:00
2025-08-13 15:04:49 -05:00
(when particles
(pxl8.particles_update particles dt))))
2025-10-04 04:13:48 -05:00
(global frame (fn []
(case current-effect
2025-09-28 13:10:29 -05:00
1 (do
(pxl8.clr 0)
(when logo-sprite
(pxl8.sprite logo-sprite logo-x logo-y 128 64)))
2025-09-28 13:10:29 -05:00
2025-10-05 16:25:17 -05:00
2 (pxl8.vfx_plasma time 0.10 0.04 1)
2025-09-28 13:10:29 -05:00
3 (pxl8.vfx_tunnel time 2.0 0.25)
4 (do
(pxl8.clr 0)
2025-10-05 16:25:17 -05:00
(local bars [{:base_y 60 :amplitude 30 :height 16 :speed 2.0 :phase 0 :color 1 :fade_color 18}
{:base_y 180 :amplitude 35 :height 16 :speed 1.8 :phase 2.0 :color 1 :fade_color 27}
{:base_y 300 :amplitude 25 :height 16 :speed 2.2 :phase 4.0 :color 1 :fade_color 24}])
(pxl8.vfx_raster_bars bars time))
2025-09-28 13:10:29 -05:00
5 (do
2025-08-13 15:04:49 -05:00
(pxl8.clr 0)
(when particles
(when (not fire-init)
(pxl8.particles_clear particles)
(pxl8.vfx_fire particles 160 140 100 12)
(set fire-init true))
(pxl8.particles_render particles)))
2025-09-28 13:10:29 -05:00
6 (do
2025-08-13 15:04:49 -05:00
(pxl8.clr 0)
(when particles
(when (not rain-init)
(pxl8.particles_clear particles)
(pxl8.vfx_rain particles 320 10.0)
(set rain-init true))
(pxl8.particles_render particles)))
2025-09-28 13:10:29 -05:00
7 (do
2025-08-13 15:04:49 -05:00
(pxl8.clr 0)
(when particles
(when (not snow-init)
(pxl8.particles_clear particles)
(pxl8.vfx_snow particles 320 5.0)
(set snow-init true))
(pxl8.particles_render particles)))
2025-10-04 04:13:48 -05:00
8 (cube3d.frame)
2025-08-13 15:04:49 -05:00
_ (pxl8.clr 0))))