560
560
local edit_screen = {}
561
561
local edit_actor = make_actor (0 ,4 )
562
562
local edit_cmds = {}
563
+ local all_cmds = {}
563
564
564
565
function cmd_fly (cmd ,btns )
565
566
local cmd_item = add (edit_cmds ,{
@@ -599,6 +600,14 @@ function cmd_roll(cmd,btns)
599
600
add (cmd_item .path ,{type = 1 ,x = edit_actor .x ,y = edit_actor .y })
600
601
end
601
602
function cmd_checkpoint (cmd )
603
+ if # edit_cmds > 0 then
604
+ if edit_cmds [# edit_cmds ].cmd == cmd then
605
+ -- cheap error feedback
606
+ cls (8 )
607
+ flip ()
608
+ return
609
+ end
610
+ end
602
611
local cmd_item = add (edit_cmds ,{
603
612
cmd = cmd ,
604
613
t = 0 ,
@@ -616,15 +625,64 @@ function cmd_del()
616
625
edit_actor = make_actor (0 ,4 )
617
626
end
618
627
end
619
- local all_cmds = {
628
+ function cmd_save ()
629
+ cur_screen = save_screen
630
+ end
631
+ function cmd_load ()
632
+ cur_screen = load_screen
633
+ end
634
+ function cmd_exit ()
635
+ -- release memory
636
+ edit_cmds = {}
637
+ cur_screen = start_screen
638
+ end
639
+ function load_track (id )
640
+ edit_cmds = {}
641
+ local mem = 0x2000 + id * 256
642
+ local id = peek (mem )
643
+ while id != 0 do
644
+ local cmd = all_cmds [id ]
645
+ local btns = {}
646
+ if cmd .btn then
647
+ btns [cmd .btn ]= true
648
+ end
649
+ cmd .click (cmd ,btns )
650
+ mem += 1
651
+ id = peek (mem )
652
+ end
653
+ end
654
+ function save_track (cmds ,id )
655
+ if (# cmds > 255 ) assert (" track too long" )
656
+
657
+ -- map data
658
+ local mem = 0x2000 + id * 256
659
+ local addr = mem
660
+ for i = 1 ,# cmds do
661
+ local cmd = cmds [i ]
662
+ poke (addr ,cmd .id )
663
+ addr += 1
664
+ end
665
+ poke (addr ,0 )
666
+ cstore (mem ,mem ,256 )
667
+ end
668
+
669
+ all_cmds = {
620
670
{spr = 2 ,click = cmd_fly ,btn = 3 ,ttl = 30 },
621
671
{spr = 3 ,click = cmd_fly ,btn = 2 ,ttl = 30 },
622
672
{spr = 4 ,click = cmd_roll ,btn = 0 },
623
673
-- checkpoint. must be collected in order
624
674
{spr = 5 ,click = cmd_fly ,ttl = 30 },
625
675
{spr = 6 ,click = cmd_checkpoint },
626
- {spr = 7 ,click = cmd_del }
676
+ {spr = 7 ,click = cmd_del },
677
+ {spr = 9 ,click = cmd_load },
678
+ {spr = 8 ,click = cmd_save },
679
+ {spr = 10 ,click = cmd_exit }
627
680
}
681
+ -- assign cmd index
682
+ -- no more than 15 commands!!!
683
+ for i = 1 ,# all_cmds do
684
+ all_cmds [i ].id = i
685
+ end
628
686
function addat (array ,idx ,elt )
629
687
local len =# array
630
688
for i = idx ,len do
@@ -689,12 +747,11 @@ function edit_screen:draw()
689
747
local x = 1
690
748
for i = 1 ,# all_cmds do
691
749
local cmd = all_cmds [i ]
692
- if i == edit_cmd_i then
693
- rectfill (x ,117 ,x + 8 ,126 ,13 )
694
- end
750
+ pal (5 ,i == edit_cmd_i and 7 or 5 )
695
751
spr (cmd .spr ,x ,118 )
696
752
x += 10
697
753
end
754
+ pal ()
698
755
699
756
print ((t / 60 ).. " s - " .. count .. " /256" ,2 ,2 ,7 )
700
757
end
@@ -842,14 +899,14 @@ function _init()
842
899
end
843
900
844
901
__gfx__
845
- 0000000000000000e eeeeeeeeeeeeeeeee5555eeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000000000000000000
846
- 0000000000000000e eeeeeeeeeeeeeeee5dddd5ee555555eeeeeee5eeeeeeeee0000000000000000000000000000000000000000000000000000000000000000
847
- 0070070000000000e ee55eeee555555ee5ee5edeee5dd5eeeeeee55eee8ee8ee0000000000000000000000000000000000000000000000000000000000000000
848
- 0007700000000000e e5555eeed5555dee5ee55eeeee55eeee55e55deeed88dee0000000000000000000000000000000000000000000000000000000000000000
849
- 0007700000000000e555555 eeed55deeed55555eee5555eeed555deeeee88eee0000000000000000000000000000000000000000000000000000000000000000
850
- 0070070000000000e ddddddeeeeddeeeeedd55dee555555eeed5deeeee8dd8ee0000000000000000000000000000000000000000000000000000000000000000
851
- 0000000000000000e eeeeeeeeeeeeeeeeeee5deeeddddddeeeedeeeeeedeedee0000000000000000000000000000000000000000000000000000000000000000
852
- 0000000000000000e eeeeeeeeeeeeeeeeeeedeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000000000000000000
902
+ 0000000000000000e eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000
903
+ 0000000000000000e eeeeeeeeeeeeeeeee5555eee555555eeeeeee5eeeeeeeeeeee55eeeeee55eeeeeeeeeee0000000000000000000000000000000000000000
904
+ 0070070000000000e ee55eeee555555ee5eeee5eee5ee5eeeeeee55eee5ee5eeeee55eeeee5555eeee5555ee0000000000000000000000000000000000000000
905
+ 0007700000000000e e5555eeee5555eee5ee5eeeeee55eeee55e55eeeee55eeeee5555eeeee55eeeee5555ee0000000000000000000000000000000000000000
906
+ 0007700000000000e555555 eeee55eeee5ee55eeee5555eeee555eeeeee55eeeeee55eeeeee55eeeee5555ee0000000000000000000000000000000000000000
907
+ 0070070000000000e eeeeeeeeeeeeeeeee55555ee555555eeee5eeeeee5ee5eee5eeee5ee5eeee5eee5555ee0000000000000000000000000000000000000000
908
+ 0000000000000000e eeeeeeeeeeeeeeeeeee55eeeeeeeeeeeeeeeeeeeeeeeeeee555555ee555555eeeeeeeee0000000000000000000000000000000000000000
909
+ 0000000000000000e eeeeeeeeeeeeeeeeeee5eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000
853
910
0000000000000000e eeeeeee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
854
911
0000000000000000e eeeeeee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
855
912
0000000000000000e eeddeee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0 commit comments