]> git.bts.cx Git - p8-playback.git/blob - playback.lua
Added minimised version for in-game playback
[p8-playback.git] / playback.lua
1 function playback_record()
2         _flip=flip
3         __recording_frame=0
4         __recording_buttons=btn()
5         __recording_buttons_pressed=btnp()
6         __recording_first=true
7         flip=function()
8                 _flip()
9                 __recording_frame+=1
10                 local b,bp=btn(),btnp()
11                 if b!=__recording_buttons or bp!=__recording_buttons_pressed then
12                         __recording_buttons=b
13                         __recording_buttons_pressed=bp
14                         printh(__recording_frame..","..__recording_buttons..","..__recording_buttons_pressed,playback_filename,__recording_first)
15                         __recording_first=false
16                 end
17         end
18
19         menuitem(playback_menu_idx, "end recording",function()
20                 flip=_flip
21                 playback_default_menu()
22         end)
23 end
24
25 function playback_play()
26         function playback_read_line()
27                 local data=""
28                 while stat(120) do
29                         serial(0x800,0x4300,1)
30                         local c=chr(peek(0x4300))
31                         if(c=="\n")break
32                         data..=c
33                 end
34                 if(#data==0)return nil
35                 return data
36         end
37
38         local cx,cy=peek2(0x5f28),peek2(0x5f2a)
39         while stat(120)==false do
40                 camera()
41                 rectfill(10,50,117,78,0)
42                 rect(10,50,117,74,7)
43                 print("drop playback file",20,60,7)
44                 flip()
45                 camera(cx,cy)
46         end
47
48         _flip=flip
49         _btn=btn
50         _btnp=btnp
51
52         __playback_frame=0
53         _btn_data=0
54         _btn_p_data=0
55
56         btn=function(b,pl)
57                 if(b==nil and pl==nil)return _btn_data
58                 if(pl==nil)pl=0
59                 return (_btn_data&(1<<(b+pl*6)))>0
60         end
61
62         btnp=function(b,pl)
63                 if(b==nil and pl==nil)return _btn_p_data
64                 if(pl==nil)pl=0
65                 return (_btn_p_data&(1<<(b+pl*6)))>0
66         end
67
68         _playback_next_frame,_playback_next_btn,_playback_next_btnp=unpack(split(playback_read_line()))
69
70         flip=function()
71                 _flip()
72                 __playback_frame+=1
73
74                 if __playback_frame>=_playback_next_frame then
75                         _btn_data,_btn_p_data=_playback_next_btn,_playback_next_btnp
76                         local line=playback_read_line()
77                         if(line!=nil)_playback_next_frame,_playback_next_btn,_playback_next_btnp=unpack(split(line))
78                 end
79         end
80
81         menuitem(playback_menu_idx+1, "end playback",function()
82                 flip=_flip
83                 btn=_btn
84                 btnp=_btnp
85                 playback_default_menu()
86         end)
87 end
88
89 function playback_default_menu()
90         menuitem(playback_menu_idx, "record playback",function() playback_record() end)
91         menuitem(playback_menu_idx+1, "play playback",function() playback_play() end)
92 end
93
94 if(playback_filename==nil)playback_filename="recording"
95 if(playback_menu_idx==nil)playback_menu_idx=4
96 playback_default_menu()