-- title: Definitely not an Impostor -- name: impostor -- author: Teletype Games -- desc: Life of a programmer in the Vector -- site: https://git.teletype.hu/games/impostor -- license: MIT License -- version: 0.1 -- script: lua a={}b={}c={}d={}e={}f={}g={}h={}i={}j={}k={}l={}m={}n={}o={}p={}q={}function q.initial_data()return{screen={width=240,height=136},colors={black=0,light_grey=2,dark_grey=1,red=13,light_blue=9,blue=3,white=4,item=7,meter_bg=1},timing={splash_duration=120,minigame_win_duration=180}}end function q.reset()local Qb=q.initial_data()q.screen=Qb.screen q.colors=Qb.colors q.timing=Qb.timing end local F=7 local G=2 local H=3 local I=0xDE function q.save()mset(I,G,F)mset(q.timing.splash_duration,H,F)end function q.load()if mget(G,F)==I then q.timing.splash_duration=mget(H,F)else q.reset()end end q.load()local function J(Qb,Rb)if not Rb then return Qb end for Sb,Tb in pairs(Rb)do Qb[Sb]=Tb end return Qb end function d.get_default_ddr()local Qb=12 local Rb=30 local Sb=(4*Qb)+(3*Rb)local Tb=(q.screen.width-Sb)/2 return{bar_fill=0,max_fill=100,fill_per_hit=10,miss_penalty=5,bar_x=20,bar_y=10,bar_width=200,bar_height=12,arrow_size=Qb,arrow_spawn_timer=0,arrow_spawn_interval=45,arrow_fall_speed=1.5,arrows={},target_y=115,target_arrows={{dir="left",x=Tb},{dir="down",x=Tb+Qb+Rb},{dir="up",x=Tb+(Qb+Rb)*2},{dir="right",x=Tb+(Qb+Rb)*3}},hit_threshold=8,button_pressed_timers={},button_press_duration=8,input_cooldowns={left=0,down=0,up=0,right=0},input_cooldown_duration=10,frame_counter=0,current_song=nil,pattern_index=1,use_pattern=false,return_window=nil,win_timer=0}end function d.get_default_button_mash()return{bar_fill=0,max_fill=100,fill_per_press=8,base_degradation=0.15,degradation_multiplier=0.006,button_pressed_timer=0,button_press_duration=8,return_window=nil,bar_x=20,bar_y=10,bar_width=200,bar_height=12,button_x=20,button_y=110,button_size=12,focus_center_x=nil,focus_center_y=nil,focus_initial_radius=0,win_timer=0}end function d.get_default_rhythm()return{line_position=0,line_speed=0.015,line_direction=1,target_center=0.5,target_width=0.3,initial_target_width=0.3,min_target_width=0.08,target_shrink_rate=0.9,score=0,max_score=10,button_pressed_timer=0,button_press_duration=10,return_window=nil,bar_x=20,bar_y=10,bar_width=200,bar_height=12,button_x=210,button_y=110,button_size=10,press_cooldown=0,press_cooldown_duration=15,focus_center_x=nil,focus_center_y=nil,focus_initial_radius=0,win_timer=0}end function d.draw_win_overlay()local Qb="WELL DONE!"local Rb=#Qb*4 local Sb=6 local Tb=4 local Ub=Rb+Tb*2 local Vb=Sb+Tb*2 local Wb=(q.screen.width-Ub)/2 local Xb=(q.screen.height-Vb)/2 rect(Wb,Xb,Ub,Vb,q.colors.dark_grey)rectb(Wb,Xb,Ub,Vb,q.colors.white)j.text_center(Qb,q.screen.width/2,Xb+Tb,q.colors.white)end function d.configure_ddr(Qb)return J(d.get_default_ddr(),Qb)end function d.configure_button_mash(Qb)return J(d.get_default_button_mash(),Qb)end function d.configure_rhythm(Qb)return J(d.get_default_rhythm(),Qb)end local K=6 local L=0 local M=0xCA r={}function r.initial_data()return{current_menu_item=1,splash_timer=q.timing.splash_duration,popup={show=false,content={}},game_in_progress=false,stat_screen_active=false,minigame_ddr=d.get_default_ddr(),minigame_button_mash=d.get_default_button_mash(),minigame_rhythm=d.get_default_rhythm(),meters=c.get_initial(),timer=p.get_initial(),game={current_screen="home",current_situation=nil,},day_count=1,}end function r.reset()local Qb=r.initial_data()for Rb in pairs(r)do if type(r[Rb])~="function"then r[Rb]=nil end end for Rb,Sb in pairs(Qb)do r[Rb]=Sb end end function r.new_game()r.reset()r.game_in_progress=true s.refresh_menu_items()g.get_by_id(r.game.current_screen).init()end function r.save_game()if not r.game_in_progress then return end mset(M,L,K)end function r.load_game()if mget(L,K)~=M then r.new_game()return end r.reset()r.game_in_progress=true s.refresh_menu_items()g.get_by_id(r.game.current_screen).init()end function b.safeindex(Qb,Rb)return((Rb-1+#Qb)%#Qb)+1 end function b.go_to_screen_by_id(Qb)local Rb=g.get_by_id(Qb)if Rb then r.game.current_screen=Qb Rb.init()else t.show({"Error: Screen '"..Qb.."' not found!"})end end function b.contains(Qb,Rb)for Sb=1,#Qb do if Qb[Sb]==Rb then return true end end return false end function j.text(Qb,Rb,Sb,Tb,Ub,Vb)local Wb=q.colors.black if Tb==Wb then Wb=q.colors.light_grey end Vb=Vb or 1 print(Qb,Rb+1,Sb+1,Wb,Ub,Vb)print(Qb,Rb,Sb,Tb,Ub,Vb)end function j.text_center(Qb,Rb,Sb,Tb,Ub,Vb)Vb=Vb or 1 local Wb=print(Qb,0,-6,0,Ub,Vb)local Xb=Rb-(Wb/2)j.text(Qb,Xb,Sb,Tb,Ub,Vb)end local N=0 local O=1 local P=2 local Q=3 local R=4 local S=5 local T=7 local U=48 local V=51 local W=50 function k.up()return btnp(N)end function k.down()return btnp(O)end function k.left()return btnp(P)end function k.right()return btnp(Q)end function k.select()return btnp(R)or keyp(U)end function k.menu_confirm()return btnp(R)or keyp(W)end function k.player_interact()return btnp(S)or keyp(W)end function k.menu_back()return btnp(T)or keyp(V)end function k.toggle_popup()return keyp(W)end local X=1000 local Y=500 local Z=100 local ab=20 local bb=0.02 local cb=0.16 local db=600 c.COLOR_ISM=q.colors.red c.COLOR_WPM=q.colors.blue c.COLOR_BM=q.colors.black c.COLOR_BG=q.colors.meter_bg function c.get_initial()return{ism=Y,wpm=Y,bm=Y,combo=0,combo_timer=0,hidden=false,}end function c.hide()if r and r.meters then r.meters.hidden=true end end function c.show()if r and r.meters then r.meters.hidden=false end end function c.get_max()return X end function c.set_decay(Qb)ab=Qb end function c.get_decay_percentage()return math.floor(ab/X*100)end function c.get_combo_multiplier()if not r or not r.meters then return 1 end local Qb=r.meters.combo if Qb==0 then return 1 end return 1+math.min(cb,bb*(2^(Qb-1)))end function c.update()if not r or not r.game_in_progress or not r.meters then return end local Qb=r.meters local Rb=string.find(a.get_current_id(),"^minigame_")~=nil if not Rb then if Qb.combo>0 then Qb.combo_timer=Qb.combo_timer+1 if Qb.combo_timer>=db then Qb.combo=0 Qb.combo_timer=0 end end end end function c.add(Qb,Rb)if not r or not r.meters then return end local Sb=r.meters if Sb[Qb]~=nil then Sb[Qb]=math.min(X,Sb[Qb]+Rb)end end function c.on_minigame_complete()local Qb=r.meters local Rb=math.floor(Z*c.get_combo_multiplier())c.add("wpm",Rb)c.add("ism",Rb)c.add("bm",Rb)Qb.combo=Qb.combo+1 Qb.combo_timer=0 end function c.draw()if not r or not r.game_in_progress or not r.meters then return end if r.meters.hidden then return end local Qb=r.meters local Rb=c.get_max()local Sb=44 local Tb=2 local Ub=182 local Vb=228 local Wb=5 local Xb=11 local Yb=math.floor((Wb-Tb)/2)local Zb={{key="wpm",label="WPM",color=c.COLOR_WPM,row=0},{key="ism",label="ISM",color=c.COLOR_ISM,row=1},{key="bm",label="BM",color=c.COLOR_BM,row=2},}for ac,bc in ipairs(Zb)do local cc=Xb+bc.row*Wb local dc=cc+Yb local ec=math.max(0,math.floor((Qb[bc.key]/Rb)*Sb))rect(Ub,dc,Sb,Tb,c.COLOR_BG)if ec>0 then rect(Ub,dc,ec,Tb,bc.color)end print(bc.label,Vb,cc,bc.color,false,1,true)end end local eb=5 local fb=false local gb=false local hb=false local ib=0 local jb=0 local kb=0 local lb=eb local mb=nil local nb=0 local ob=0 local function pb(Qb,Rb)local Sb=math.max(Qb,q.screen.width-Qb)local Tb=math.max(Rb,q.screen.height-Rb)return math.sqrt(Sb*Sb+Tb*Tb)end function n.start(Qb,Rb,Sb)Sb=Sb or{}fb=true gb=false hb=false ib=Qb jb=Rb kb=Sb.initial_radius or 0 lb=Sb.speed or eb mb=Sb.on_complete end function n.close(Qb,Rb,Sb)Sb=Sb or{}fb=true gb=true hb=false ib=Qb jb=Rb kb=pb(Qb,Rb)lb=Sb.speed or eb mb=Sb.on_complete end function n.start_driven(Qb,Rb,Sb)Sb=Sb or{}fb=true gb=false hb=true ib=Qb jb=Rb nb=Sb.initial_radius or 0 ob=pb(Qb,Rb)kb=nb mb=nil end function n.set_percentage(Qb)if not hb then return end kb=nb+Qb*(ob-nb)end function n.is_active()return fb end function n.stop()fb=false gb=false hb=false kb=0 mb=nil end function n.update()if not fb then return end if hb then return end if gb then kb=kb-lb if kb<=0 then local Qb=mb n.stop()if Qb then Qb()end end else kb=kb+lb if kb>=pb(ib,jb)then local Qb=mb n.stop()if Qb then Qb()end end end end function n.draw()if not fb then return end local Qb=ib local Rb=jb local Sb=kb local Tb=q.screen.width local Ub=q.screen.height local Vb=q.colors.black if gb and Sb<=0 then rect(0,0,Tb,Ub,Vb)return end local Wb=math.max(0,math.floor(Rb-Sb))local Xb=math.min(Ub-1,math.ceil(Rb+Sb))if Wb>0 then rect(0,0,Tb,Wb,Vb)end if Xb0 then rect(0,Yb,bc,1,Vb)end if cc=1 then o.increase()Qb.progress=Qb.progress-1 end end end function p.draw()if not r or not r.game_in_progress or not r.meters or not r.timer then return end if r.meters.hidden and not r.stat_screen_active then return end local Qb=10 local Rb=20 local Sb=5 local Tb=3 local Ub=r.timer.progress local Vb if Ub<=0.25 then Vb=q.colors.white elseif Ub<=0.5 then Vb=q.colors.light_blue elseif Ub<=0.75 then Vb=q.colors.blue elseif Ub<=1 then Vb=q.colors.red end local Wb=q.colors.dark_grey local Xb=-math.pi*0.5 local Yb=Ub*2*math.pi local Zb=Sb*Sb local ac=Tb*Tb for ec=-Sb,Sb do for fc=-Sb,Sb do local gc=fc*fc+ec*ec if gc<=Zb and gc>ac then local hc=math.atan(ec,fc)local ic=hc-Xb if ic<0 then ic=ic+2*math.pi end if ic<=Yb then pix(Qb+fc,Rb+ec,Vb)else pix(Qb+fc,Rb+ec,Wb)end end end end local bc=Xb+Yb local cc=math.floor(Qb+math.cos(bc)*(Tb-1)+0.5)local dc=math.floor(Rb+math.sin(bc)*(Tb-1)+0.5)line(Qb,Rb,cc,dc,q.colors.white)end function i.draw_top_bar(Qb)rect(0,0,q.screen.width,10,q.colors.dark_grey)j.text(Qb,3,2,q.colors.light_blue)end function i.draw_menu(Qb,Rb,Sb,Tb)for Ub,Vb in ipairs(Qb)do local Wb=Tb+(Ub-1)*10 if Ub==Rb then j.text(">",Sb-8,Wb,q.colors.light_blue)end j.text(Vb.label,Sb,Wb,q.colors.light_blue)end end function i.update_menu(Qb,Rb)if k.up()then m.sfx_beep()Rb=Rb-1 if Rb<1 then Rb=#Qb end elseif k.down()then m.sfx_beep()Rb=Rb+1 if Rb>#Qb then Rb=1 end end return Rb end function i.word_wrap(Qb,Rb)if Qb==nil then return{""}end local Sb={}for Tb in(Qb.."\n"):gmatch("(.-)\n")do local Ub=""local Vb=0 for Wb in Tb:gmatch("%S+")do Vb=Vb+1 if#Ub==0 then Ub=Wb elseif#Ub+#Wb+1<=Rb then Ub=Ub.." "..Wb else table.insert(Sb,Ub)Ub=Wb end end if Vb>0 then table.insert(Sb,Ub)else table.insert(Sb,"")end end if#Sb==0 then return{""}end return Sb end function m.music_stop()music()end function m.music_play_mainmenu()end function m.music_play_wakingup()end function m.music_play_room_morning()end function m.music_play_room_street_1()end function m.music_play_room_street_2()end function m.music_play_room_()end function m.music_play_room_work()music(0)end function m.sfx_select()sfx(17,'C-7',30)end function m.sfx_deselect()sfx(18,'C-7',30)end function m.sfx_beep()sfx(19,'C-6',30)end function m.sfx_success()sfx(16,'C-7',60)end function m.sfx_bloop()sfx(21,'C-3',60)end u={test_song={name="Test Song",bpm=120,fps=60,end_frame=570,pattern={{frame=30,dir="left"},{frame=60,dir="down"},{frame=90,dir="up"},{frame=120,dir="right"},{frame=135,dir="left"},{frame=150,dir="right"},{frame=165,dir="left"},{frame=180,dir="right"},{frame=210,dir="left"},{frame=210,dir="right"},{frame=240,dir="up"},{frame=240,dir="down"},{frame=270,dir="left"},{frame=300,dir="right"},{frame=330,dir="left"},{frame=345,dir="down"},{frame=360,dir="up"},{frame=375,dir="right"},{frame=390,dir="left"},{frame=405,dir="down"},{frame=420,dir="up"},{frame=435,dir="right"},{frame=465,dir="up"},{frame=465,dir="down"},{frame=495,dir="left"},{frame=495,dir="right"},{frame=525,dir="up"},{frame=540,dir="down"},{frame=555,dir="left"},{frame=570,dir="right"}}},test_song_2={name="Test Song 2",bpm=120,fps=60,end_frame=570,pattern={{frame=30,dir="left"},{frame=60,dir="down"},{frame=90,dir="up"},{frame=120,dir="right"},{frame=135,dir="left"},{frame=150,dir="right"},{frame=165,dir="left"},{frame=180,dir="right"},{frame=210,dir="left"},{frame=210,dir="right"},{frame=240,dir="up"},{frame=240,dir="down"},{frame=270,dir="left"},{frame=300,dir="right"},{frame=330,dir="left"},{frame=345,dir="down"},{frame=360,dir="up"},{frame=375,dir="right"},{frame=390,dir="left"},{frame=405,dir="down"},{frame=420,dir="up"},{frame=435,dir="right"},{frame=465,dir="up"},{frame=465,dir="down"},{frame=495,dir="left"},{frame=495,dir="right"},{frame=525,dir="up"},{frame=540,dir="down"},{frame=555,dir="left"},{frame=570,dir="right"}}},random={name="Random Mode",bpm=0,fps=60,end_frame=nil,pattern={}}}function v(Qb,Rb,Sb)Sb=Sb or 60 local Tb=60/Rb local Ub=Tb*Sb return math.floor(Qb*Ub)end function w(Qb,Rb,Sb)Sb=Sb or 60 local Tb={}for Ub,Vb in ipairs(Qb)do local Wb=Vb[1]local Xb=Vb[2]table.insert(Tb,{frame=v(Wb,Rb,Sb),dir=Xb})end return Tb end local sb={}local tb={}function l.register(Qb)if not Qb or not Qb.id then trace("Error: Invalid sprite object registered (missing id)!")return end if sb[Qb.id]then trace("Warning: Overwriting sprite with id: "..Qb.id)end sb[Qb.id]=Qb end function l.show(Qb,Rb,Sb,Tb,Ub,Vb,Wb,Xb)if not sb[Qb]then trace("Error: Attempted to show non-registered sprite with id: "..Qb)return end tb[Qb]={id=Qb,x=Rb,y=Sb,colorkey=Tb,scale=Ub,flip_x=Vb,flip_y=Wb,rot=Xb,}end function l.hide(Qb)tb[Qb]=nil end function l.draw()for Qb,Rb in pairs(tb)do local Sb=sb[Qb]if not Sb then trace("Error: Sprite id "..Qb.." in _active_sprites is not registered.")tb[Qb]=nil end local Tb=Rb.colorkey or Sb.colorkey or 0 local Ub=Rb.scale or Sb.scale or 1 local Vb=Rb.flip_x or Sb.flip_x or 0 local Wb=Rb.flip_y or Sb.flip_y or 0 local Xb=Rb.rot or Sb.rot or 0 if Sb.sprites then for Yb=1,#Sb.sprites do local Zb=Sb.sprites[Yb]spr(Zb.s,Rb.x+(Zb.x_offset or 0),Rb.y+(Zb.y_offset or 0),Zb.colorkey or Tb,Zb.scale or Ub,Zb.flip_x or Vb,Zb.flip_y or Wb,Zb.rot or Xb)end else spr(Sb.s,Rb.x,Rb.y,Tb,Ub,Vb,Wb,Xb)end end end l.register({id="norman",sprites={{s=0,x_offset=0,y_offset=0},{s=1,x_offset=0,y_offset=-8},{s=2,x_offset=-4,y_offset=4},{s=3,x_offset=4,y_offset=4,flip_x=1},{s=4,x_offset=-2,y_offset=8},{s=5,x_offset=2,y_offset=8,flip_x=1}}})local ub={}function f.register(Qb)if not Qb or not Qb.id then t.show({"Error: Invalid situation object registered (missing id)!"})return end if not Qb.handle then Qb.handle=function()end end if not Qb.update then Qb.update=function()end end if ub[Qb.id]then trace("Warning: Overwriting situation with id: "..Qb.id)end ub[Qb.id]=Qb end function f.get_by_id(Qb)return ub[Qb]end function f.get_all(Qb)if Qb then local Rb={}for Sb,Tb in pairs(ub)do if Tb.screen_id==Qb then table.insert(Rb,Tb)end end return Rb end return ub end function f.apply(Qb,Rb)local Sb=f.get_by_id(Qb)local Tb=g.get_by_id(Rb)if not Sb then trace("Error: No situation found with id: "..Qb)return nil end if b.contains(Tb.situations,Qb)then Sb.handle()return Qb else trace("Info: Situation "..Qb.." cannot be applied to current screen (id: "..Rb..").")return nil end end f.register({id="drink_coffee",handle=function()m.sfx_select()l.show("norman",100,100)end,})local vb={}function e.register(Qb)if not Qb or not Qb.id then t.show({"Error: Invalid decision object registered (missing id)!"})return end if not Qb.label then t.show({"Error: Invalid decision object registered (missing label)!"})return end if not Qb.condition then Qb.condition=function()return true end end if not Qb.handle then Qb.handle=function()end end if vb[Qb.id]then trace("Warning: Overwriting decision with id: "..Qb.id)end vb[Qb.id]=Qb end function e.get_by_id(Qb)return vb[Qb]end function e.get_all()return vb end function e.get_for_screen(Qb)if not Qb or not Qb.decisions then return{}end local Rb={}for Sb,Tb in ipairs(Qb.decisions)do local Ub=e.get_by_id(Tb)if Ub then table.insert(Rb,Ub)end end return Rb end function e.filter_available(Qb)local Rb={}for Sb,Tb in ipairs(Qb)do if Tb and Tb.condition()then table.insert(Rb,Tb)end end return Rb end function e.draw(Qb,Rb)local Sb=16 local Tb=q.screen.height-Sb rect(0,Tb,q.screen.width,Sb,q.colors.dark_grey)if#Qb>0 then local Ub=Qb[Rb]local Vb=Ub.label local Wb=#Vb*4 local Xb=Tb+4 local Yb=(q.screen.width-Wb)/2 j.text("<",2,Xb,q.colors.light_blue)j.text(Vb,Yb,Xb,q.colors.item)j.text(">",q.screen.width-6,Xb,q.colors.light_blue)end end function e.update(Qb,Rb)if k.left()then m.sfx_beep()Rb=b.safeindex(Qb,Rb-1)elseif k.right()then m.sfx_beep()Rb=b.safeindex(Qb,Rb+1)end return Rb end e.register({id="have_a_coffee",label="Have a Coffee",handle=function()local Qb=f.apply("drink_coffee",r.game.current_screen)r.game.current_situation=Qb end,})e.register({id="go_to_home",label="Go to Home",handle=function()b.go_to_screen_by_id("home")end,})e.register({id="go_to_toilet",label="Go to Toilet",handle=function()b.go_to_screen_by_id("toilet")end,})e.register({id="go_to_walking_to_office",label="Walking to office",handle=function()b.go_to_screen_by_id("walking_to_office")end,})e.register({id="go_to_office",label="Go to Office",handle=function()b.go_to_screen_by_id("office")end,})e.register({id="go_to_walking_to_home",label="Walking to home",handle=function()b.go_to_screen_by_id("walking_to_home")end,})e.register({id="play_button_mash",label="Play Button Mash",handle=function()c.hide()x.start("game",{focus_center_x=q.screen.width/2,focus_center_y=q.screen.height/2,focus_initial_radius=0,})end,})e.register({id="play_rhythm",label="Play Rhythm Game",handle=function()c.hide()y.start("game",{focus_center_x=q.screen.width/2,focus_center_y=q.screen.height/2,focus_initial_radius=0,})end,})e.register({id="play_ddr",label="Play DDR (Random)",handle=function()c.hide()z.start("game",nil)end,})local wb={}function h.get_maps_array()local Qb={}for Rb,Sb in pairs(wb)do table.insert(Qb,Sb)end return Qb end function h.register(Qb)if wb[Qb.id]then trace("Warning: Overwriting map with id: "..Qb.id)end wb[Qb.id]=Qb end function h.get_by_id(Qb)return wb[Qb]end function h.draw(Qb)local Rb=h.get_by_id(Qb)if not Rb then return end map(Rb.from_x,Rb.from_y,Rb.width,Rb.height,Rb.to_x,Rb.to_y)end h.register({id="bedroom",from_x=0,from_y=0,width=30,height=17,to_x=0,to_y=0,})h.register({id="street",from_x=30,from_y=0,width=30,height=17,to_x=0,to_y=0,})h.register({id="office",from_x=60,from_y=0,width=30,height=17,to_x=0,to_y=0,})local xb={}function g.register(Qb)if xb[Qb.id]then trace("Warning: Overwriting screen with id: "..Qb.id)end if not Qb.situations then Qb.situations={}end if not Qb.init then Qb.init=function()end end if not Qb.update then Qb.update=function()end end if not Qb.draw then Qb.draw=function()end end xb[Qb.id]=Qb end function g.get_by_id(Qb)return xb[Qb]end function g.get_all()return xb end g.register({id="home",name="Home",decisions={"go_to_toilet","go_to_walking_to_office",},background="bedroom"})g.register({id="toilet",name="Toilet",decisions={"go_to_home",},background="bedroom",init=function()r.stat_screen_active=true c.hide()local Qb=q.screen.width*0.75 local Rb=q.screen.height*0.75 n.start_driven(Qb,Rb)n.set_percentage(0.15)end,update=function()if not r.stat_screen_active then return end if k.select()or k.player_interact()then n.stop()r.stat_screen_active=false c.show()end end,draw=function()if not r.stat_screen_active then return end local Qb=q.screen.width local Rb=Qb/2 local Sb=math.floor(Qb*0.75)local Tb=math.floor((Qb-Sb)/2)local Ub=4 j.text_center("day "..r.day_count,Rb,10,q.colors.white)local Vb="reflecting on my past and present\n...\nboth eventually flushed."local Wb=i.word_wrap(Vb,38)local Xb=24 for hc,ic in ipairs(Wb)do j.text_center(ic,Rb,Xb,q.colors.light_grey)Xb=Xb+8 end local Yb=r.meters local Zb=c.get_max()local ac=c.get_decay_percentage()local bc=string.format("-%d%%",ac)local cc=c.get_combo_multiplier()local dc=math.floor((cc-1)*100)local ec=string.format("+%d%%",dc)local fc=Xb+10 local gc={{key="wpm",label="Work Productivity Meter"},{key="ism",label="Impostor Syndrome Meter"},{key="bm",label="Burnout Meter"},}for hc,ic in ipairs(gc)do local jc=fc+(hc-1)*20 j.text_center(ic.label,Rb,jc,q.colors.white)local kc=jc+8 local lc=math.max(0,math.floor((Yb[ic.key]/Zb)*Sb))rect(Tb,kc,Sb,Ub,c.COLOR_BG)if lc>0 then rect(Tb,kc,lc,Ub,q.colors.blue)end local mc=print(bc,0,-6,0,false,1)j.text(bc,Tb-mc-4,kc,q.colors.light_blue)j.text(ec,Tb+Sb+4,kc,q.colors.light_blue)end end,})g.register({id="walking_to_office",name="Walking to office",decisions={"go_to_home","go_to_office",},background="street"})g.register({id="office",name="Office",decisions={"play_button_mash","play_rhythm","play_ddr","go_to_walking_to_home","have_a_coffee",},situations={"drink_coffee",},background="office"})g.register({id="walking_to_home",name="Walking to home",decisions={"go_to_home","go_to_office",},background="street"})local yb={}function a.register(Qb,Rb)yb[Qb]=Rb end function a.get(Qb)return yb[Qb]end function a.set_current(Qb)r.current_window=Qb end function a.get_current_id()return r.current_window end function a.get_current_handler()local Qb=a.get(r.current_window)if Qb and Qb.update and Qb.draw then return function()Qb.update()Qb.draw()end else return function()trace("Error: No handler for window: "..tostring(r.current_window))end end end A={}a.register("splash",A)B={}a.register("intro",B)s={}a.register("menu",s)C={}a.register("game",C)t={}a.register("popup",t)D={}a.register("configuration",D)E={}a.register("audiotest",E)x={}a.register("minigame_button_mash",x)y={}a.register("minigame_rhythm",y)z={}a.register("minigame_ddr",z)function A.draw()local Qb="Definitely not an Impostor"local Rb=(q.screen.height-6)/2 j.text_center(Qb,q.screen.width/2,Rb,q.colors.white)end function A.update()r.splash_timer=r.splash_timer-1 if r.splash_timer<=0 or k.menu_confirm()then a.set_current("intro")end end B.y=q.screen.height B.speed=0.5 B.text=[[ Norman Reds’ everyday life seems ordinary: work, meetings, coffee, and endless notifications. But beneath him, or around him — something is constantly building, and it soon becomes clear that there is more going on than meets the eye. ]]function B.draw()local Qb=(q.screen.width-132)/2 j.text(B.text,Qb,B.y,q.colors.light_blue)end function B.update()B.y=B.y-B.speed local Qb=1 for Rb in string.gmatch(B.text,"\n")do Qb=Qb+1 end if B.y<-Qb*8 then a.set_current("menu")end if k.menu_confirm()then a.set_current("menu")end end local zb={}function s.draw()i.draw_top_bar("Main Menu")i.draw_menu(zb,r.current_menu_item,108,70)end function s.update()r.current_menu_item=i.update_menu(zb,r.current_menu_item)if k.menu_confirm()then local Qb=zb[r.current_menu_item]if Qb and Qb.decision then m.sfx_select()Qb.decision()end end end function s.new_game()r.new_game()C.set_state("game")end function s.load_game()r.load_game()C.set_state("game")end function s.save_game()r.save_game()end function s.resume_game()C.set_state("game")end function s.exit()exit()end function s.configuration()D.init()C.set_state("configuration")end function s.audio_test()E.init()C.set_state("audiotest")end function s.refresh_menu_items()zb={}if r.game_in_progress then table.insert(zb,{label="Resume Game",decision=s.resume_game})table.insert(zb,{label="Save Game",decision=s.save_game})end table.insert(zb,{label="New Game",decision=s.new_game})table.insert(zb,{label="Load Game",decision=s.load_game})table.insert(zb,{label="Configuration",decision=s.configuration})table.insert(zb,{label="Audio Test",decision=s.audio_test})table.insert(zb,{label="Exit",decision=s.exit})r.current_menu_item=1 end D.controls={}D.selected_control=1 function D.init()D.controls={{label="Save",action=function()q.save()end,type="action_item"},{label="Restore Defaults",action=function()q.reset()end,type="action_item"},}end function D.draw()i.draw_top_bar("Configuration")local Qb=10 local Rb=40 local Sb=q.screen.width-10 local Tb=4 for Ub,Vb in ipairs(D.controls)do local Wb=Rb+(Ub-1)*12 local Xb=q.colors.light_blue if Vb.type=="numeric_stepper"then local Yb=Vb.get()local Zb=Vb.label local ac=string.format(Vb.format,Yb)local bc=Sb-(#ac*Tb)if Ub==D.selected_control then Xb=q.colors.item j.text("<",Qb-8,Wb,Xb)j.text(Zb,Qb,Wb,Xb)j.text(ac,bc,Wb,Xb)j.text(">",Sb+4,Wb,Xb)else j.text(Zb,Qb,Wb,Xb)j.text(ac,bc,Wb,Xb)end elseif Vb.type=="action_item"then local Yb=Vb.label if Ub==D.selected_control then Xb=q.colors.item j.text("<",Qb-8,Wb,Xb)j.text(Yb,Qb,Wb,Xb)j.text(">",Qb+8+(#Yb*Tb)+4,Wb,Xb)else j.text(Yb,Qb,Wb,Xb)end end end j.text("Press B to go back",Qb,120,q.colors.light_grey)end function D.update()if k.menu_back()then C.set_state("menu")return end if k.up()then D.selected_control=D.selected_control-1 if D.selected_control<1 then D.selected_control=#D.controls end elseif k.down()then D.selected_control=D.selected_control+1 if D.selected_control>#D.controls then D.selected_control=1 end end local Qb=D.controls[D.selected_control]if Qb then if Qb.type=="numeric_stepper"then local Rb=Qb.get()if k.left()then local Sb=math.max(Qb.min,Rb-Qb.step)Qb.set(Sb)elseif k.right()then local Sb=math.min(Qb.max,Rb+Qb.step)Qb.set(Sb)end elseif Qb.type=="action_item"then if k.menu_confirm()then Qb.action()end end end end E.index_menu=1 E.index_func=1 E.list_func={}E.menuitems={}E.last_pressed=false function E.generate_menuitems(Qb,Rb)return{{label="Play music/sound: "..(Qb[Rb]or"?"),decision=function()local Sb=m[Qb[Rb]]if Sb then Sb()else trace("Invalid Audio function: "..Qb[Rb])end end},{label="Stop playing music",decision=function()m.music_stop()end},{label="Back",decision=function()E.back()end},}end function E.generate_listfunc()local Qb={}for Rb,Sb in pairs(m)do if type(Sb)=="function"then Qb[#Qb+1]=Rb end end table.sort(Qb)return Qb end function E.back()m.sfx_deselect()C.set_state("menu")end function E.init()E.last_pressed=false E.index_menu=1 E.index_func=1 E.list_func=E.generate_listfunc()E.menuitems=E.generate_menuitems(E.list_func,E.index_func)end function E.draw()i.draw_top_bar("Audio test")i.draw_menu(E.menuitems,E.index_menu,20,50)end function E.update()if k.up()then E.index_menu=b.safeindex(E.menuitems,E.index_menu-1)elseif k.down()then E.index_menu=b.safeindex(E.menuitems,E.index_menu+1)elseif k.left()then E.index_func=b.safeindex(E.list_func,E.index_func-1)E.menuitems=E.generate_menuitems(E.list_func,E.index_func)elseif k.right()then E.index_func=b.safeindex(E.list_func,E.index_func+1)E.menuitems=E.generate_menuitems(E.list_func,E.index_func)elseif k.menu_confirm()then E.menuitems[E.index_menu].decision()elseif k.menu_back()then E.back()end end local Ab=40 local Bb=40 local Cb=160 local Db=80 local Eb=Ab+10 local Fb=Bb+10 local Gb=8 function t.show(Qb)r.popup.show=true r.popup.content=Qb or{}C.set_state("popup")end function t.hide()r.popup.show=false r.popup.content={}C.set_state("game")end function t.update()if r.popup.show then if k.menu_confirm()or k.menu_back()then t.hide()end end end function t.draw()if r.popup.show then rect(Ab,Bb,Cb,Db,q.colors.black)rectb(Ab,Bb,Cb,Db,q.colors.light_blue)local Qb=Fb for Rb,Sb in ipairs(r.popup.content)do j.text(Sb,Eb,Qb,q.colors.light_grey)Qb=Qb+Gb end j.text("[A] Close",Eb,Bb+Db-Gb-2,q.colors.light_blue)end end function x.init(Qb)r.minigame_button_mash=d.configure_button_mash(Qb)end function x.start(Qb,Rb)x.init(Rb)local Sb=r.minigame_button_mash Sb.return_window=Qb or"game"if Sb.focus_center_x then n.start_driven(Sb.focus_center_x,Sb.focus_center_y,{initial_radius=Sb.focus_initial_radius})end a.set_current("minigame_button_mash")end function x.update()local Qb=r.minigame_button_mash if Qb.win_timer>0 then Qb.win_timer=Qb.win_timer-1 if Qb.win_timer==0 then c.on_minigame_complete()c.show()if Qb.focus_center_x then n.stop()end a.set_current(Qb.return_window)end return end if k.select()then Qb.bar_fill=Qb.bar_fill+Qb.fill_per_press Qb.button_pressed_timer=Qb.button_press_duration if Qb.bar_fill>Qb.max_fill then Qb.bar_fill=Qb.max_fill end end if Qb.bar_fill>=Qb.max_fill then Qb.win_timer=q.timing.minigame_win_duration return end local Rb=Qb.base_degradation+(Qb.bar_fill*Qb.degradation_multiplier)Qb.bar_fill=Qb.bar_fill-Rb if Qb.bar_fill<0 then Qb.bar_fill=0 end if Qb.button_pressed_timer>0 then Qb.button_pressed_timer=Qb.button_pressed_timer-1 end if Qb.focus_center_x then n.set_percentage(Qb.bar_fill/Qb.max_fill)end end function x.draw()local Qb=r.minigame_button_mash if Qb.return_window=="game"then C.draw()end if not Qb.focus_center_x then rect(0,0,q.screen.width,q.screen.height,q.colors.black)end rect(Qb.bar_x-2,Qb.bar_y-2,Qb.bar_width+4,Qb.bar_height+4,q.colors.light_grey)rectb(Qb.bar_x-2,Qb.bar_y-2,Qb.bar_width+4,Qb.bar_height+4,q.colors.dark_grey)local Rb=(Qb.bar_fill/Qb.max_fill)*Qb.bar_width if Rb>0 then local Ub=q.colors.light_blue if Qb.bar_fill>66 then Ub=q.colors.item elseif Qb.bar_fill>33 then Ub=q.colors.blue end rect(Qb.bar_x,Qb.bar_y,Rb,Qb.bar_height,Ub)end local Sb=q.colors.light_grey if Qb.button_pressed_timer>0 then Sb=q.colors.light_blue end circb(Qb.button_x,Qb.button_y,Qb.button_size,Sb)if Qb.button_pressed_timer>0 then circ(Qb.button_x,Qb.button_y,Qb.button_size-2,Sb)end j.text_center(" Z",Qb.button_x-2,Qb.button_y-3,q.colors.light_grey)j.text_center("MASH Z!",q.screen.width/2,Qb.bar_y+Qb.bar_height+10,q.colors.light_grey)local Tb=math.floor((Qb.bar_fill/Qb.max_fill)*100)j.text_center(Tb.."%",Qb.bar_x+Qb.bar_width/2,Qb.bar_y+2,q.colors.black)if Qb.win_timer>0 then d.draw_win_overlay()end end function y.init(Qb)r.minigame_rhythm=d.configure_rhythm(Qb)end function y.start(Qb,Rb)y.init(Rb)local Sb=r.minigame_rhythm Sb.return_window=Qb or"game"if Sb.focus_center_x then n.start_driven(Sb.focus_center_x,Sb.focus_center_y,{initial_radius=Sb.focus_initial_radius})end a.set_current("minigame_rhythm")end function y.update()local Qb=r.minigame_rhythm if Qb.win_timer>0 then Qb.win_timer=Qb.win_timer-1 if Qb.win_timer==0 then c.on_minigame_complete()c.show()if Qb.focus_center_x then n.stop()end a.set_current(Qb.return_window)end return end Qb.line_position=Qb.line_position+(Qb.line_speed*Qb.line_direction)if Qb.line_position>1 then Qb.line_position=1 Qb.line_direction=-1 elseif Qb.line_position<0 then Qb.line_position=0 Qb.line_direction=1 end if Qb.press_cooldown>0 then Qb.press_cooldown=Qb.press_cooldown-1 end if k.select()and Qb.press_cooldown==0 then Qb.button_pressed_timer=Qb.button_press_duration Qb.press_cooldown=Qb.press_cooldown_duration local Rb=Qb.target_center-(Qb.target_width/2)local Sb=Qb.target_center+(Qb.target_width/2)if Qb.line_position>=Rb and Qb.line_position<=Sb then Qb.score=Qb.score+1 else Qb.score=Qb.score-1 if Qb.score<0 then Qb.score=0 end end Qb.target_width=Qb.initial_target_width*(Qb.target_shrink_rate^Qb.score)if Qb.target_width=Qb.max_score then Qb.win_timer=q.timing.minigame_win_duration return end if Qb.button_pressed_timer>0 then Qb.button_pressed_timer=Qb.button_pressed_timer-1 end if Qb.focus_center_x then n.set_percentage(1-Qb.score/Qb.max_score)end end function y.draw()local Qb=r.minigame_rhythm if Qb.return_window=="game"then C.draw()end if not Qb.focus_center_x then rect(0,0,q.screen.width,q.screen.height,q.colors.black)end rect(Qb.bar_x-2,Qb.bar_y-2,Qb.bar_width+4,Qb.bar_height+4,q.colors.light_grey)rectb(Qb.bar_x-2,Qb.bar_y-2,Qb.bar_width+4,Qb.bar_height+4,q.colors.dark_grey)rect(Qb.bar_x,Qb.bar_y,Qb.bar_width,Qb.bar_height,q.colors.dark_grey)local Rb=Qb.target_center-(Qb.target_width/2)local Sb=Qb.bar_x+(Rb*Qb.bar_width)local Tb=Qb.target_width*Qb.bar_width rect(Sb,Qb.bar_y,Tb,Qb.bar_height,q.colors.light_blue)local Ub=Qb.bar_x+(Qb.line_position*Qb.bar_width)rect(Ub-1,Qb.bar_y,2,Qb.bar_height,q.colors.item)local Vb="SCORE: "..Qb.score.." / "..Qb.max_score j.text_center(Vb,q.screen.width/2,Qb.bar_y+Qb.bar_height+8,q.colors.light_grey)j.text_center("Press Z when line is in green!",q.screen.width/2,Qb.bar_y+Qb.bar_height+20,q.colors.light_grey)local Wb=q.colors.light_grey if Qb.button_pressed_timer>0 then Wb=q.colors.light_blue end circb(Qb.button_x,Qb.button_y,Qb.button_size,Wb)if Qb.button_pressed_timer>0 then circ(Qb.button_x,Qb.button_y,Qb.button_size-2,Wb)end j.text_center("Z",Qb.button_x-2,Qb.button_y-3,Wb)if Qb.win_timer>0 then d.draw_win_overlay()end end function z.init(Qb)r.minigame_ddr=d.configure_ddr(Qb)end function z.start(Qb,Rb,Sb)z.init(Sb)r.minigame_ddr.return_window=Qb or"game"r.minigame_ddr.debug_song_key=Rb if Rb and u and u[Rb]then r.minigame_ddr.current_song=u[Rb]r.minigame_ddr.use_pattern=true r.minigame_ddr.pattern_index=1 r.minigame_ddr.debug_status="Pattern loaded: "..Rb else r.minigame_ddr.use_pattern=false if Rb then r.minigame_ddr.debug_status="Song not found: "..tostring(Rb)else r.minigame_ddr.debug_status="Random mode"end end a.set_current("minigame_ddr")end local function Hb()local Qb=r.minigame_ddr local Rb=Qb.target_arrows[math.random(1,4)]table.insert(Qb.arrows,{dir=Rb.dir,x=Rb.x,y=Qb.bar_y+Qb.bar_height+10})end local function Ib(Qb)local Rb=r.minigame_ddr for Sb,Tb in ipairs(Rb.target_arrows)do if Tb.dir==Qb then table.insert(Rb.arrows,{dir=Qb,x=Tb.x,y=Rb.bar_y+Rb.bar_height+10})break end end end local function Jb(Qb)local Rb=r.minigame_ddr local Sb=math.abs(Qb.y-Rb.target_y)return Sb<=Rb.hit_threshold end local function Kb(Qb)local Rb=r.minigame_ddr return Qb.y>Rb.target_y+Rb.hit_threshold end local function Lb(Qb,Rb,Sb,Tb)local Ub=12 local Vb=Ub/2 if Sb=="left"then tri(Qb+Vb,Rb,Qb,Rb+Vb,Qb+Vb,Rb+Ub,Tb)rect(Qb+Vb,Rb+Vb-2,Vb,4,Tb)elseif Sb=="right"then tri(Qb+Vb,Rb,Qb+Ub,Rb+Vb,Qb+Vb,Rb+Ub,Tb)rect(Qb,Rb+Vb-2,Vb,4,Tb)elseif Sb=="up"then tri(Qb,Rb+Vb,Qb+Vb,Rb,Qb+Ub,Rb+Vb,Tb)rect(Qb+Vb-2,Rb+Vb,4,Vb,Tb)elseif Sb=="down"then tri(Qb,Rb+Vb,Qb+Vb,Rb+Ub,Qb+Ub,Rb+Vb,Tb)rect(Qb+Vb-2,Rb,4,Vb,Tb)end end function z.update()local Qb=r.minigame_ddr if Qb.win_timer>0 then Qb.win_timer=Qb.win_timer-1 if Qb.win_timer==0 then c.on_minigame_complete()c.show()a.set_current(Qb.return_window)end return end if Qb.bar_fill>=Qb.max_fill then Qb.win_timer=q.timing.minigame_win_duration return end Qb.frame_counter=Qb.frame_counter+1 if Qb.use_pattern and Qb.current_song and Qb.current_song.end_frame then if Qb.frame_counter>Qb.current_song.end_frame and#Qb.arrows==0 then Qb.win_timer=q.timing.minigame_win_duration return end end if Qb.use_pattern and Qb.current_song and Qb.current_song.pattern then local Tb=Qb.current_song.pattern while Qb.pattern_index<=#Tb do local Ub=Tb[Qb.pattern_index]if Qb.frame_counter>=Ub.frame then Ib(Ub.dir)Qb.pattern_index=Qb.pattern_index+1 else break end end else Qb.arrow_spawn_timer=Qb.arrow_spawn_timer+1 if Qb.arrow_spawn_timer>=Qb.arrow_spawn_interval then Hb()Qb.arrow_spawn_timer=0 end end local Rb={}for Tb,Ub in ipairs(Qb.arrows)do Ub.y=Ub.y+Qb.arrow_fall_speed if Kb(Ub)then table.insert(Rb,Tb)Qb.bar_fill=Qb.bar_fill-Qb.miss_penalty if Qb.bar_fill<0 then Qb.bar_fill=0 end end end for Tb=#Rb,1,-1 do table.remove(Qb.arrows,Rb[Tb])end for Tb,Ub in pairs(Qb.input_cooldowns)do if Qb.input_cooldowns[Tb]>0 then Qb.input_cooldowns[Tb]=Qb.input_cooldowns[Tb]-1 end end for Tb,Ub in pairs(Qb.button_pressed_timers)do if Qb.button_pressed_timers[Tb]>0 then Qb.button_pressed_timers[Tb]=Qb.button_pressed_timers[Tb]-1 end end local Sb={left=k.left(),down=k.down(),up=k.up(),right=k.right()}for Tb,Ub in pairs(Sb)do if Ub and Qb.input_cooldowns[Tb]==0 then Qb.input_cooldowns[Tb]=Qb.input_cooldown_duration Qb.button_pressed_timers[Tb]=Qb.button_press_duration local Vb=false for Wb,Xb in ipairs(Qb.arrows)do if Xb.dir==Tb and Jb(Xb)then Qb.bar_fill=Qb.bar_fill+Qb.fill_per_hit if Qb.bar_fill>Qb.max_fill then Qb.bar_fill=Qb.max_fill end table.remove(Qb.arrows,Wb)Vb=true break end end if not Vb then Qb.bar_fill=Qb.bar_fill-2 if Qb.bar_fill<0 then Qb.bar_fill=0 end end end end end function z.draw()local Qb=r.minigame_ddr if not Qb then cls(0)print("DDR ERROR: Context not initialized",10,10,12)print("Press Z to return",10,20,12)if k.select()then a.set_current("game")end return end if Qb.return_window=="game"then C.draw()end rect(0,0,q.screen.width,q.screen.height,q.colors.black)rect(Qb.bar_x-2,Qb.bar_y-2,Qb.bar_width+4,Qb.bar_height+4,q.colors.light_grey)rectb(Qb.bar_x-2,Qb.bar_y-2,Qb.bar_width+4,Qb.bar_height+4,q.colors.dark_grey)local Rb=(Qb.bar_fill/Qb.max_fill)*Qb.bar_width if Rb>0 then local Ub=q.colors.light_blue if Qb.bar_fill>66 then Ub=q.colors.item elseif Qb.bar_fill>33 then Ub=q.colors.blue end rect(Qb.bar_x,Qb.bar_y,Rb,Qb.bar_height,Ub)end local Sb=math.floor((Qb.bar_fill/Qb.max_fill)*100)j.text_center(Sb.."%",Qb.bar_x+Qb.bar_width/2,Qb.bar_y+2,q.colors.black)if Qb.target_arrows then for Ub,Vb in ipairs(Qb.target_arrows)do local Wb=Qb.button_pressed_timers[Vb.dir]and Qb.button_pressed_timers[Vb.dir]>0 local Xb=Wb and q.colors.light_blue or q.colors.light_grey Lb(Vb.x,Qb.target_y,Vb.dir,Xb)end end if Qb.arrows then for Ub,Vb in ipairs(Qb.arrows)do Lb(Vb.x,Vb.y,Vb.dir,q.colors.blue)end end j.text_center("Hit the arrows!",q.screen.width/2,Qb.bar_y+Qb.bar_height+10,q.colors.light_grey)local Tb=60 if Qb.debug_status then j.text_center(Qb.debug_status,q.screen.width/2,Tb,q.colors.item)Tb=Tb+10 end if Qb.use_pattern then j.text_center("PATTERN MODE - Frame:"..Qb.frame_counter,q.screen.width/2,Tb,q.colors.light_blue)if Qb.current_song and Qb.current_song.pattern then j.text_center("Pattern Len:"..#Qb.current_song.pattern.." Index:"..Qb.pattern_index,q.screen.width/2,Tb+10,q.colors.light_blue)end else j.text_center("RANDOM MODE",q.screen.width/2,Tb,q.colors.blue)end if Qb.win_timer>0 then d.draw_win_overlay()end end local Mb={}local Nb=1 function C.draw()local Qb=g.get_by_id(r.game.current_screen)if Qb.background then h.draw(Qb.background)elseif Qb.background_color then rect(0,0,q.screen.width,q.screen.height,Qb.background_color)end i.draw_top_bar(Qb.name)if not r.stat_screen_active and#Mb>0 then e.draw(Mb,Nb)end l.draw()n.draw()Qb.draw()end function C.update()n.update()if k.menu_back()then a.set_current("menu")s.refresh_menu_items()return end local Qb=g.get_by_id(r.game.current_screen)Qb.update()if r.game.current_situation then local Tb=f.get_by_id(r.game.current_situation)if Tb and Tb.update then Tb.update()end end if r.stat_screen_active then return end local Rb=e.get_for_screen(Qb)Mb=e.filter_available(Rb)if#Mb==0 then return end if Nb>#Mb then Nb=1 end local Sb=e.update(Mb,Nb)if Sb~=Nb then Nb=Sb end if k.select()then local Tb=Mb[Nb]if Tb and Tb.handle then m.sfx_select()Tb.handle()end end end function C.set_state(Qb)a.set_current(Qb)end local Ob=false local function Pb()if Ob then return end r.reset()a.set_current("splash")s.refresh_menu_items()Ob=true end function TIC()Pb()cls(q.colors.black)local Qb=a.get_current_handler()if Qb then Qb()end c.update()p.update()if r.game_in_progress then c.draw()p.draw()end end -- -- 000:0404005f574fc2c3c71d2b53fff1e8ab52367e2553ffa30000875129adff83769c00e436fa77a8ff004dc3c3c7ffccaa -- -- -- 000:00000000c666666006606060c636366006606060c606366006666660c0000000 -- 001:0000000006666666060600600666666606000600066666660633633300000000 -- 002:0000000066666666006000066666666660060006666666666333363300000000 -- 004:1111111111111111111111111111111111111111111111111111111111111111 -- 005:1111111111111111111111111111111111111111111111111111111100000000 -- 006:0222222200010010033055010130150603305501013015060330550100000000 -- 007:2222222001022220601022206001022060201020602201006022201000000000 -- 008:0000000003330333033303330333000003330111033301110333011103330111 -- 009:0000000033333333333333330000000011100111111001111110011111100111 -- 010:0000000033303330333033300000333011103330111033301110333011103330 -- 011:111111111111111111111100111110a511110a51111015a51101515111000000 -- 012:111111111111111101111111101111115a01111115a011115151011100000111 -- 013:1000000004444444044444440444444404444444044444440444444404444444 -- 014:0000000144444240444424204444424044442420444442404444242044444240 -- 015:0000000004244444024444440424400002444444042424240242424200000000 -- 016:000000004444442044444240c004442044444240e424242042424240c0000000 -- 017:0000000002424240042424200244444004244440024404400424044002440440 -- 018:0000000002424240042424200444424004444420044042400440442004404240 -- 019:0222222200010012055016020150660205501602015066020550160200000000 -- 020:2222222022221000222203302222013022220330222201302222033000000000 -- 021:0333011103330111033301110333011103330111033300000333011103330111 -- 022:1110011111100111111001111110011111100111000000001110011111100111 -- 023:1110333011103330111033301110333011103330000033301110333011103330 -- 024:1111111011111110111111101111111011111110111111101111111011111110 -- 025:0444444404444444044444440444444404444444044044440440444404404444 -- 026:4444242044444240444424204444424044442420444442404444242044444240 -- 027:3333111133331111333311113333111111113333111133331111333311113333 -- 028:0424044002440440042404400244444004244440024242400424242000000000 -- 029:0440442004404240044044200444424004444420024242400424242000000000 -- 030:0000000006666660036060600360666006606060036660600360666003606060 -- 031:0222222200010010033033030130130103303303013013010330330300000000 -- 032:22222220c10012203033022030130220303302203013022030330220c0000000 -- 033:0333011103330111033301110333011103330111033301110333011100000000 -- 034:1110011111100111111001111110011111100111111001111110011100000000 -- 035:1110333011103330111033301110333011103330111033301110333000000000 -- 036:0440444404404444044044440444444404444444044444440444444404444444 -- 037:0000000002222222022000220201110202011102020111020220002202222222 -- 038:0000000022222220220002202011102020111020201110202200022022222220 -- 039:0000000002222222022222220222222202222222022222220222222202222222 -- 040:0000000022222220222222202222222022222220222222202222222022222220 -- 041:0000000002222222022200000220111102201121020112000201120402012200 -- 042:0000000022222220000002201111102021211020000210203430102000430020 -- 043:0666606003606060036066600366606003606060066060600360606003666660 -- 044:0222222202222222022222220222222202222222000000000001111100011111 -- 045:2222222022222220222222202222222022222220000000001111100011111000 -- 046:1111111111111111111111111000000002222222022222220222222202222222 -- 047:1111111111111111111111110000000022222222222222222222222222222222 -- 048:111111111111111111111111c000100022220444e222044422220444e2220444 -- 049:1111111111111111111111111100001100222201022222200222222002222220 -- 050:1111111011111110111111101111111011111110111111101111111011110000 -- 051:1111111111111111111111111111111111111111111111111111111100011111 -- 052:0444444404444444044444440444444404444444044444440444444410000000 -- 053:4444242044444240444424204444424044442420444442404444242000000001 -- 054:0222222202222222022000220201110202011102020111020220002202222222 -- 055:2222222022222220220002202011102020111020201110202200022022222220 -- 056:0222222202222222022222220222222202222222022222220222222200000000 -- 057:2222222022222220222222202222222022222220222222202222222000000000 -- 058:0201122202012222020112220201222202201222022022220222000002222222 -- 059:2204302022204020202200202000002020222020222220200000022022222220 -- 060:5555555555555555555555556666111155555555555555555555555566616666 -- 061:5555555555555555555555556666666655551555555515555555655566666611 -- 062:0222222202222222022222220222222202222222022222220222222202222222 -- 063:2222222222222222222222222222222222222222222222222222222222222222 -- 064:22220444e222044422220444e222044422220444e222044422220444e2220444 -- 065:0222222002222220020000206022220002222220022222200200002000111100 -- 066:5000000004444444044044440440444404404444044044440444444460000000 -- 067:0000000544444240444424204444424044442420444442404444242000000001 -- 068:0000000001111111011111110111111101111111011111110111111100000000 -- 069:0000000011111110111111101111111011111110111111101111111000000000 -- 070:5555555555555555555555551111666655555555555555555555555511666111 -- 071:000000000222220002222090022209900220999002099d900099199009919790 -- 072:0000000022222220222222202222222022220000222011002212000021222220 -- 073:5555555555555555555555556611166655555551555555515555555166666111 -- 074:0000000001111111000000001111666655555555555555555555555511666111 -- 075:0000000011111111000000006611166655555551555555515555555166666111 -- 076:0000000011111111000000001111666655555555555555555555555511666111 -- 077:0000000011111110000000006611166655555551555555515555555166666111 -- 078:1111111111111111111100001110919111101010110191011019191000919190 -- 079:1111111111111111000000009191919000000010111110901111101000000090 -- 080:09191990c991990209199020c999020209902020c902020200202020c0000000 -- 081:0000000002020200202020200200022020002220000222202022222002222220 -- 082:5555555555555055555501056666010155550105555501055555010566610106 -- 083:5555555555555555000000000222222202222222022222220222222202222222 -- 084:5555555555555555000000002222222022222220222222202222222022222220 -- 085:5555000055500220550202206022022002220220022202200222022002220220 -- 086:1000000110333301103333011033330110333301103333011033330110333301 -- 087:3010101033331111333311113333111111113333111133331111333311113333 -- 088:3333101033331090333310103333109011113010111010901110201011101090 -- 089:2222222022222220222222202222222022222220222222202222222022222220 -- 090:5555550055555022555502226611022255550222555502225555501266666100 -- 091:0005010522200105222201052222010622220105222201052210505500066111 -- 092:5000000002222222022222220222222202222222022222220222222202222222 -- 093:0222022002220220022202200222022002220220022202200222022002220220 -- 094:1033330110333301103333011033330110333301103333011033330110000001 -- 095:3333101033331090333310103333109011113010111130901111301011113000 -- 096:00000000c111111100000000c106666601051555c105155501056555c0066611 -- 097:0000000011111110000000006666101055555010555550105555501066616000 -- 098:5555555555555550555555056666116655550055555500555555655566666611 -- 099:0555555500555555050555550661111105500555115005550055555500616666 -- 100:0222222202222222022222220000000000000000501055555010555560006666 -- 101:2222222022222220222222200000000000000000555501055555010566660001 -- 102:0222022002220220022202200222022002220220022202200222022012220220 -- 103:1000000103333330033333300333333003333330033333300333333010000001 -- 104:5500000050222222022222220222222202222222022222220222222202222222 -- 105:0222222222222222222222222222222222222222222222222222222222222222 -- 106:1222000012201110120111101011111001111110011111100111111001111110 -- 107:0000000001111111011111110111111101111111011111115000000066000066 -- 108:0000000011111111111111111111111111111111111111110000000066666611 -- 109:1111111011111110111111101111111011111110111111100000000566000066 -- 110:1111111111111111111111111111010011101044111010441110104400000010 -- 111:1111111111111111111111110011111144011111440111114401111110000000 -- 112:11111111111111111111111111111111111111111111111111110111c0004000 -- 113:3333104433331044333310003333111111113333111133331111333311113333 -- 114:4403111144031111000311113333111111110000111044441104444411014444 -- 115:3304440133044401330444013304440100104033440103334440333344103333 -- 116:3330111133020000330124243330111111110111111130111111301111113300 -- 117:1103111100401111242011111240111111203333124033331120333300013333 -- 118:1111111100000000033333330333333303333333033333330000000011111111 -- 119:1111111100000000333333303333333033333330333333300000000011111111 -- 120:1a12222222a222222212222222a222222212222222a222222212222222222222 -- 121:1a8b888822888b8b228b888822b8bb8b22888b88228b88882288b88b228b8b88 -- 122:8b8b8888b8b88b8bb88b888888b8bb8b8b888b8888bb88888b88b88bb88b8b88 -- 123:8b8b888800000000055555550555555500000000055555550555555500000000 -- 124:8b8b888800000000555555555555555500000000555555555555555500000000 -- 125:8b8b888800000000555555505555555000000000555555505555555000000000 -- 126:0000000007777777070000000703333307033333070333330703333307033333 -- 127:0000000077777777000000003333333033333330333333303333333033333330 -- 128:000000007777777700000000e222222222222222e222222222222222e2222222 -- 129:0000000077777770000000702222207022222070222220702222207022222070 -- 130:3000000300ffff000ddddff00dddddf00dddddf00dddddf000dddd0000000000 -- 131:0555555505555555055555550555555500000000050b88880508b88b000b8b88 -- 132:555555555555555555555555555555550000000088bb88888b88b88bb88b8b88 -- 133:555555505555555055555550555555500000000088bb80508b88b050b88b8000 -- 134:0703333307033333070333330703333307033333070333330703333307033333 -- 135:3333333033333330333333303333333033333330333333303333333033333330 -- 136:2222207022222070222220702222207022222070222220702222207022222070 -- 137:4444444444444444444444444444444444444444444444444444444444444444 -- 138:4442222244422222444222224442222244422222444222224442222244422222 -- 139:0000000000bbbb0008888bb0088888b0088888b0088888b00088880030000003 -- 140:0000000007777777076666770767776707677776076777760767777607766667 -- 141:0000000077777770777777707777777077777770777777777677777777777777 -- 142:0000000066666666666666666666666600000000777777777777777777777777 -- 143:0000000066666070666660706666607000000070777777707777777077777770 -- 144:1a80088be2800b8822800888e280088b22800b88e220022221a001a2ea100a12 -- 145:88888888b88b8b888b8888b8888b888888888b8b12222222a1a1a1a21a1a1a12 -- 146:0776777707767777077677770776777707677777076777770777777700000000 -- 147:7677666676777776767777677677767767776777677666667777777700000000 -- 148:7766667777777677777767767776777677677776766666767777777700000000 -- 149:7667777067767770777767706666677077776770777767707777777000000000 -- 150:2220022222200222222002222220022222200222222002222220022222200222 -- 151:1a12222222a222222212222222a222222212222222222222a1a1a1a21a1a1a12 -- 152:2222222222222222222222222222222222222222444444444444444444444444 -- 153:222002222220022222200222222002222220022212200222a000000200000000 -- 154:222222222222222222222222222222222222222212222222a1a1a1a21a1a1a12 -- 155:11111000111100331110a033110a903310a9a0330a9a903309a9a0330a9a9033 -- 156:0000000033333333333333333333333333333333333333333333333333333333 -- 157:000000000a9a9a9a09a9a9a90a9a9a9a09a9a9a90a9a9a9a09a9a9a90a9a9a9a -- 158:001111119a001111a9a904449a9a9004a9a9a9a09a9a9a9aa9a9a9a99a9a9a9a -- 159:111111111111111111111111111111111111111100111111090111110a900111 -- 160:1111111111111111444444444444444444444444444444441111111111111111 -- 161:09a9a0330a9a903309a9a0330000000003333333033333330333333303333333 -- 162:3333333333333333333333330000000033333333333333333000000301111110 -- 163:3333333333333333333333330000000033333333333333333333333333333333 -- 164:09a9a9a90a9a9a9a09a9a9a90000000003333333033333330333333303333333 -- 165:a9a9a9a99a9a9a9aa9a9a9a90000000033333333333333333333333333333333 -- 166:09a9a0110a9a9a0109a9a9a00000000033333333333333333000000301111110 -- 167:1111111111111111111111110011111133001111333301113333300133333330 -- 168:0333333003333301033333010333330103333301000000011111111111111111 -- 169:1100001110555501055005500506605005066050055005501055550111000011 -- 170:0333333310333333103333331033333310333333100000001111111111111111 -- 171:0333333303333333033333330333333303333333000000001111111111111111 -- 172:3333333033333301333333013333330133333301000000011111111111111111 -- 173:0333333010333330103333301033333010333330100000001111111111111111 -- 174:111111111111111111111111111111111111111112222222a1a1a1a21a1a1a12 -- 175:1111111111111111111111111111111111111111444444444444444444444444 -- 176:00000000c111111001101010c131311001101010c101311001111110c0000000 -- 177:0000000001111111010100100111111101000100011111110133133300000000 -- 178:0000000011111111001000011111111110010001111111111333313300000000 -- 179:11111111111111111111111111111111111100001110b161110b100010810101 -- 180:1111111111111111111111111111111101111111b01111110001111101011111 -- 181:111111111000111000880110080880100b08801008b080100b80801010b80010 -- 182:081b01010081b00011001b1b11110000111111111111110111111080111108b0 -- 183:01011111000111111b0111110011111111111111111111111111111111111111 -- 184:1111111111111100111110081111108011111010111110811111101811111101 -- 185:110b80100110801080110000b80111108b80111008b801100b1b011080b18010 -- 186:11108b801108b801008b80111100011111111111111111101111100111110818 -- 187:1111111111111111111111111111111111111111000111118001111108011111 -- 188:0000000004444444040010040440404404404004044040440440400404444444 -- 189:0000000044444444044001000440440404400404044044040040040444444444 -- 190:0000000044444444404040044040404044004004444040444000404444444444 -- 191:0000000044444444400410444044044440040004404444044004001444444444 -- 192:0000000044444440444444404444444044444440444444404444444044444440 -- 193:0000000002222222020000000200000002000000020000000200000002000000 -- 194:0000000022222222000000000000000000000000000000000000000000000000 -- 195:0000000022222220000000100000001000000010000000100000001000000010 -- 196:3333999933339999333399993000000002222222000000000444444404111111 -- 197:3333999933339999333399990000000922222203000000004440d6d011201110 -- 198:3333999933339999333399993333999999993333999933339999333399993333 -- 199:0000000001111110031010100310111001101010031110100310111003101010 -- 200:1111110811111101111111101111111011111111111111111111111111111111 -- 201:180b8010810180101810b0108180101008180010108100101108101011108010 -- 202:111081801110180811018081110810b8101801801080b8011008101100100111 -- 203:8b011111b8011111801111110111111111111111111111111111111111111111 -- 204:0440000404404444044040040440440404440014044444440444444404444444 -- 205:4001404404404004000040400440404404404044444444444444444444400000 -- 206:4040041000404404404004004040444440400400444444444404444400044444 -- 207:4444000044440222044402220444022214440222444402224444000044444444 -- 208:00000040e222204022222040e222204022222040e22220400000004044444440 -- 209:0200000002000000020000000200000002000000020000000200000002000000 -- 210:0000001000000010000000100000001000000010000000100000001000000010 -- 211:0444444404111111044444440411111104444444000000000111111100000000 -- 212:4440222011201110444024201120444044402420000000001111111000000000 -- 213:0111101003101010031011100311101003101010011010100310101003111110 -- 214:1000000000606000060606060000000010565656106565651106565611100000 -- 215:0000000100606060060606000000000055555501555555015555501100000111 -- 216:0444444404444044044404040440440004404404044044440444444400000000 -- 217:4404444440444444044444404444440444444440444444444444444400000000 -- 218:4404444440444004044404404444044400004440444444444444444400000000 -- 219:4444440044444402404444000044441044044444444444104444444400000000 -- 220:0000444022204440000044401101444000444440440144404444444000000000 -- 221:0200000002000000020000000200000002000000020000000211111100000000 -- 222:0000000000000000000000000000000000000000000000001111111100000000 -- 223:000000000000000000000000000000000000000000000000111dd11100000000 -- 224:00000010c000001000000010c000001000000010c000001011111110c0000000 -- 225:3333333333333333333333333333333313131313313131311313131331313131 -- 226:0203333302033333020333330203333302031313020131310203131300013131 -- 227:3333302033333020333330203333302013131020313130201313102031313000 -- 228:0000000011111111111111111111111111111111111111111111111100000000 -- 229:3000000004444444044044440440444404404444044044440444444430000000 -- 230:0000000344444240444424204444424044442420444442404444242000000001 -- 231:333333303333330033333090333309901310999031099d901099199009919790 -- 232:3333333333333333333333333333333313130000313011001313000331313131 -- 233:0000000002222222022222220222200202220440022204440220444402204414 -- 234:0000000022222220100001202100002002222220400222204440022044444020 -- 235:3333333333333033333301033333010313130103313101011313010331310101 -- 236:0204414402200441022220040222222002222222022222220222200002220111 -- 237:1444402044140220444402204144022000402220220222200222222010222220 -- 238:3333330033333022333302223333022213130222313102221313101231313100 -- 239:0003010322200103222201032222010322220103222201012210101300013131 -- 240:02220111c222001102220000c222033302220333c222200002222222c2222222 -- 241:1002222001202220002022203002222031222220022222202222222022222220 -- 242:3333333333333330333333033333113313130013313100311313131331313131 -- 243:0333333300333333030333330331133303100313113001310013131300313131 -- 244:022222200222220002222090022209900220999002099d900099199009919790 -- 245:2222222022222220222222202222222022220000222011002212000021222220 -- 246:0000000001111111000000000103333301031313010131310103131300013131 -- 247:0000000011111110000000003333301013131010313130101313101031313000 -- -- -- 002:00000000000000000000444400044444000444440044ffff004fffff004f3333 -- 003:0000000000000000441600004242600044241000ff426000fff4100033f26000 -- 004:00000333000035550003655500365555003555ff00356fff00365f3f00355fff -- 005:33000000553000005563000055563000ff553000fff53000f3f63000fff53000 -- 016:0000000000000000000000000000003000000353000035350003535100353535 -- 017:0000000000000000000000003000000053300000151300005151300015151300 -- 018:004f99ff000fffff0000ff3300000fff00003666000355550035652503163555 -- 019:99f41000fff26000ff600000f600000063300000555330005555530055535530 -- 020:00356f6f003655f60365511f3653122f3531222f363221220532232203322322 -- 021:f6f530006f563000f1156300f2215300f2226300221233002232130022121300 -- 032:0033535100353533003351ff00351f3f0003ff3f0003ffff00003ff3000323ff -- 033:5555530033555300ff155300f3f15300f3ff3000ffff30003ff30000ff323000 -- 034:036135250316355503613525031633110333331103f333330333333300033333 -- 035:55565530555355305556553013335530133333303333ff303333333033330000 -- 036:00322322003223330033331a003ff31a003ff3a1003333a100003a1a00003a1a -- 037:223213003332130011133300111f300011133000111300001113000011130000 -- 048:00323123003231430032314300313339000f3333000033300000333000033330 -- 049:324303003443030034430300933313003333f000033300000333000003333000 -- 050:0003333000033330000333300003333000053530003311300031113000333330 -- 051:3333000033330000333300003333000035350000311330003111300033333000 -- 052:000031a1000031a100003a1a00003a1a00003333000003f3000003f300000330 -- 053:111300001113000011130000111300003333000003f3000003f3000003300000 -- -- -- 000:ffffffffff0010201020102010201020102010201020102000ffffffffff40404040404087f3f3f3f397a7b7c7d7a7e7f70818a7b7c7d7a7b7c7d7a70b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 001:ffffffffff0040404040404040404040404040404040404000ffffffffff40404040404087f3f3f3f328a7384858a76878f388a7384858a7384858a70b40403b4b4040404040404040404040404040404040404040404040400b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 002:ffffffffff00406070408090a040b0c0d0e0f001f001112100ffffffffff984098409840a8f3f3f3f3b8a7a7a7a7a7c8d8e8f8a7a7a7a7a7a7a7a7a70b405b6b7b4040404040404040404040404040d0e0f001f001f00111210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 003:ffffffffff004031414051617140814091a1b1b1b1b1c1d100ffffffffff984098409840a8f3f3f3f3091919191919293949591919191919191919190b8b9babbb4040cbdbebfb0c401c2c2c2c3c4091a14c5c6c6c6c6cc1d10b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 004:ffffffffffe140f1024012223240814042a15262728292a2e1ffffffffff984098409840a8f3f3f3f369f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f37c8c9cacbc7282ccdcecfc0d401d3030302d4042a13d4d7282728292a27c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 005:ffffffffffb240c2d240e2f203132333435363738393a3b3b2ffffffffff984098409840a8f3f3f3f369f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f35d406d7d40e3958d9dadbdcd40ddedfded0e404353839383938393a3b35d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 006:ffffffffffe1c3d3c3d3e3f30414c3d32434445410201020e1ffffffffff404040404040798989898999a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a97c1e1e1e1e44542e1e1e1e3e1e444e4e4e541e243444544454445444547c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 007:ffffffffffb264748494a4b4c4d46494649464940040e4f4b2ffffffffff4040404040404040404040404040404040404040404040404040404040405d1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 008:ffffffffffe1c30515d325d33545c3d355d3c3d365b17585e1ffffffffff4040404040404098989898404040404040404040404040404040404040407c1e7e8e1e1e1e9eae1ebe1e1e1e1e1e1e1e1e72821ebe1e72821ebe1e7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 009:ffffffffffb264e395a5b594e39564c5d5946494e5b1b1f5b2ffffffffff4040404040404040404040404040404040404040404040404040404040405d1e05151ebe1ecedeeefe1e1e1e1e1e1e1e1ee395eefe1ee395eefe1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 010:ffffffffffe1c306162636d34656c395d5d3c3d376b1b1b1e1ffffffffff404040404040409898989840b9c9c9d9e9f90a0a0a0a4040400a0a0a0a407c1ee395eefe1e0f1f2f3f1e1e1e1e1e1e1e1ee3952f3f1ee3952f3f1e7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 011:ffffffffffb264946494649464948696a694649410201020b2ffffffffff4040404040404040404040401a2a3a4a5a6a7a40404040404040404040405d1ee3952f3f1e4f5f1ebe1e1e1e1e1e1e1e1ee3951ebe1ee3951ebe1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 012:ffffffffffe1c37282d3c3d3c3d3b6c6d6d3c3d300e6f607e1ffffffffff4040404040404098989898408a9aaabaca9ada40404040404040404040407c1e4f5f1ebe1e0515eefe1e1e1e1e1e1e1e1ee395eefe1ee395eefe1e7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 013:ffffffffffb264e395946494649464946494649465172737b2ffffffffffeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea5d1e0515eefe1e6f7f2f3f1e1e1e1e1e1e1e1e6f7f2f3f1e6f7f2f3f1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 014:ffffffffffe1c34454d3c3d3c3d3c3d3c3d3c3d3e5b14757e1fffffffffff3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f37c1e6f7f2f3f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 015:ffffffffffb2649464946494649464946494649476b1b1b1b2fffffffffff3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f35d1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 016:ffffffffff0010201020766777001020102010201020102000fffffffffff3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f30b1b2b1b2b7667776777761b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- -- -- 000:060006400600064006000640060006400600060006000600060006000600060006000600060006000600060006000600060006000600060006000600300000000900 -- 016:05000500050005400540054005700570057005400540054005700570057005c005c005c005c005c005c005c005c005c005c005c005c005c005c005c0470000000000 -- 017:040004000400040004000400046004600460046004600460146024c034c054c064c084c0a4c0b4c0c4c0c4c0d4c0d4c0e4c0f4c0f4c0f4c0f4c0f4c0400000000000 -- 018:04c004c004c004c004c004c0046004600460046004600460240034005400640084009400a400b400c400d400d400e400e400e400f400f400f400f400300000000000 -- 019:0400040004000400040004d014d014d024d034d054d074d094d0b4d0c4d0e4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0400000000000 -- 020:090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900500000000000 -- 021:01000100010001000100f10001100110011001100110f11001200120012001200120f1201130113011302130213021302130313041308130a130d130380000000000 -- 032:010001100100011001000110010001100100010001000100010001000100010001000100010001000100010001000100010001000100010001000100301000000800 -- 033:000000010002000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d40000000004 -- 044:0600f6000620f6000600f6000610f600f600f6000600f600f600f600f6000600060006000600060006000600060006000600060006000600060006004600000f0f00 -- 045:0000f0000020f0000000f0000010f000f000f0000000f000f000f000f0000000000000000000000000000000000000000000000000000000000000004600000f0f00 -- 048:090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900400000000000 -- 056:4100510061406140717081709100b100c100d100e100e100e100f100f100f100f100f100f100f100f100f100f100f100f100f100f100f100f100f100580000000600 -- 057:000000010002000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c40000000004 -- 058:41004110410041104100411041004110c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100400000080800 -- 059:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000 -- 060:220022002200820082008200820082008200820082008200820082008200820082008200820082008200820082008200820082008200820082008200100000000000 -- 061:9f009f00bf00df00df00ef00ef00ef00ef00ef00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00400000000000 -- 062:00000100010001000100510081008100910091009100a100a100a100a100a100b100b100b100b100c100c100c100d100d100d100e100e100e100f100484000000000 -- 063:00b000100000000000000000100060009000b000c000d000d000e000e000e000f000f000f000f000f000f000f000f000f000f000f000f000f000f000200000000000 -- -- -- 000:bcceefceedddddc84333121268abaa99 -- 001:6789bdd96adc83248dd6334adda7578b -- 002:0123456789abcdef0123456789abcdef -- 003:224578acdeeeeddcba95434567653100 -- 004:00000000ffffffff00000000ffffffff -- 005:0123456789abcdeffedcba9876543210 -- 006:0123456789abcdef0123456789abcdef -- 007:76543210123456789abcdefedcba9878 -- 008:0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f -- 009:fff000fff000fff000fff000fff000ff -- -- -- 000:4008b50000000000000000001008c10000004008b50000001008c1000000000000000000e008b30000004008b50000001008c10000000008c10000000008c10000000000000000000000000000000000000000000000000000000000000000004008b50000000000000000001008c10000004008b50000001008c10000000008c1000000e008b30000004008b50000001008c10000000008c10000000008c10000000008c10000000008c10000000008c1000000000000000000000000000000 -- 001:4008b50000000000000000001008c10000004008b50000001008c1000000000000000000e008b30000004008b50000001008c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007008b50000007008b50000001008c10000007008b50000001008c10000000008c10000007008b50000009008b50000001008c10000009008b50000001008c10000009008b50000009008b50000001008c10000009008b50000001008c1000000 -- 003:4008d30000000000000000000000000000000000000000004008d90000000000000000000000000000000000000000004008d30000000000000000000000000000004008d30000004008d90000000000000000000000000000000000000000004008d30000000000000000000000000000000000000000004008d90000000000000000000000000000000000000000004008d30000000000000000000000000000004008d30000004008d9000000000000000000000000000000000000000000 -- -- -- 000:100001200001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 --