-- title: Definitely not an Impostor -- name: impostor -- author: Teletype Games -- desc: Life of a programmer -- site: https://git.teletype.hu/games/impostor -- license: MIT License -- version: 1.0-alpha -- script: lua a={}b={}c={}d={}e={}f={}g={}h={}i={}j={}k={}l={}m={}n={}o={}p={}q={}r={}s={}t={}u={}function u.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={minigame_win_duration=180}}end function u.reset()local Sc=u.initial_data()u.screen=Sc.screen u.colors=Sc.colors u.timing=Sc.timing end local P=7 local Q=2 local R=0xDE function u.save()mset(R,Q,P)end function u.load()if mget(Q,P)==R then return else u.reset()end end u.load()local S=9 local T="ASCENSION"local U=false local V=false local W=0 local X=0 local Y=120 local Z=false local ab=0 local bb=120 local cb=nil function t.get_initial()U=false return{level=0,}end function t.get_level()if not v or not v.ascension then return 0 end return v.ascension.level end function t.get_max_level()return S end function t.increase()if not v or not v.ascension then return end v.ascension.level=math.min(S,v.ascension.level+1)U=true end function t.did_increase()return U end function t.consume_increase()local Sc=U U=false return Sc end function t.is_complete()return t.get_level()>=S end function t.draw(Sc,Tc,Uc)if not v or not v.ascension then return end Uc=Uc or{}local Vc=v.ascension.level if Vc<1 then return end local Wc=Uc.lit_color or u.colors.white local Xc=Uc.spacing or 5 for Yc=1,Vc do local Zc=T:sub(Yc,Yc)local ad if Yc==Vc and Z then ad=t.get_fade_color()else ad=Wc end print(Zc,Sc+(Yc-1)*Xc,Tc,ad,false,1,true)end end function t.get_fade_color()if not cb then cb={u.colors.black,u.colors.dark_grey,u.colors.light_grey,u.colors.white,}end if not Z then return u.colors.white end local Sc=math.min(ab/bb,1)local Tc=math.floor(Sc*(#cb-1))+1 return cb[Tc]end function t.start_fade()Z=true ab=0 end function t.start_flash()V=true W=0 X=Y end function t.draw_flash()if not V then return end W=W+1 local Sc=u.screen.width local Tc=u.screen.height local Uc=W/Y local Vc=math.abs(math.sin(Uc*math.pi*6))local Wc=(Vc>0.5)and u.colors.white or u.colors.light_grey rect(0,0,Sc,Tc,Wc)if W>=X then V=false t.start_fade()end end function t.update_fade()if not Z then return end ab=ab+1 if ab>=bb then Z=false end end function t.is_flashing()return V end local db=6 local eb=0 local fb=0xCA v={}function v.initial_data()return{current_menu_item=1,test_mode=false,popup={show=false,content={}},game_in_progress=false,stat_screen_active=false,minigame_ddr={},minigame_button_mash={},minigame_rhythm={},meters=c.get_initial(),ascension=t.get_initial(),timer=p.get_initial(),triggers={},home_norman_visible=false,have_met_sumphore=false,game={current_screen="home",current_situation=nil,},day_count=1,glitch={enabled=false,state="active",timer=0,},_end={state="choice",selection=1,},discussion={active=false,id=nil,step=1,selected_answer=1,scroll_y=0,scroll_timer=0,auto_scroll=true,return_window=nil,},}end function v.reset()local Sc=v.initial_data()for Tc in pairs(v)do if type(v[Tc])~="function"then v[Tc]=nil end end for Tc,Uc in pairs(Sc)do v[Tc]=Uc end end function v.new_game()v.reset()v.game_in_progress=true w.refresh_menu_items()g.get_by_id(v.game.current_screen).init()x.start({text=[[ Norman was never a bad simulation engineer, but we need to be careful in letting him improve. We need to distract him. ]],on_text_complete=function()m.sfx_alarm()v.home_norman_visible=false b.go_to_screen_by_id("home")y.start("game",{focus_center_x=(u.screen.width/2)-22,focus_center_y=(u.screen.height/2)-18,focus_initial_radius=0,target_points=100,instruction_text="Wake up Norman!",show_progress_text=false,on_win=function()m.music_play_wakingup()v.home_norman_visible=true c.show()a.set_current("game")end,})end,})end function v.save_game()if not v.game_in_progress then return end mset(fb,eb,db)end function v.load_game()if mget(eb,db)~=fb then v.new_game()return end v.reset()v.game_in_progress=true w.refresh_menu_items()g.get_by_id(v.game.current_screen).init()end function b.safeindex(Sc,Tc)return((Tc-1+#Sc)%#Sc)+1 end function b.go_to_screen_by_id(Sc)local Tc=g.get_by_id(v.game.current_screen)local Uc=g.get_by_id(Sc)if Uc then v.game.current_screen=Sc if Tc and Tc.exit then Tc.exit()end Uc.init()else z.show({"Error: Screen '"..Sc.."' not found!"})end end function b.contains(Sc,Tc)for Uc=1,#Sc do if Sc[Uc]==Tc then return true end end return false end function j.text(Sc,Tc,Uc,Vc,Wc,Xc)local Yc=u.colors.black if Vc==Yc then Yc=u.colors.light_grey end Xc=Xc or 1 print(Sc,Tc+1,Uc+1,Yc,Wc,Xc)print(Sc,Tc,Uc,Vc,Wc,Xc)end function j.text_center(Sc,Tc,Uc,Vc,Wc,Xc)Xc=Xc or 1 local Yc=print(Sc,0,-6,0,Wc,Xc)local Zc=Tc-(Yc/2)j.text(Sc,Zc,Uc,Vc,Wc,Xc)end local gb=0 local hb=1 local ib=2 local jb=3 local kb=4 local lb=5 local mb=7 local nb=48 local ob=51 local pb=50 function k.up()return btnp(gb)end function k.down()return btnp(hb)end function k.left()return btnp(ib)end function k.right()return btnp(jb)end function k.space()return keyp(nb)end function k.select()return btnp(kb)or keyp(nb)end function k.menu_confirm()return btnp(kb)or keyp(pb)end function k.player_interact()return btnp(lb)or keyp(pb)end function k.menu_back()return btnp(mb)or keyp(ob)end function k.toggle_popup()return keyp(pb)end s={}function s.draw(Sc,Tc)Tc=Tc or{}local Uc=Tc.char_w or 4 local Vc=Tc.char_h or 5 local Wc=Tc.line_gap or 0 local Xc=Tc.word_gap or 6 local Yc=Tc.color or u.colors.light_blue local Zc={}local ad=0 for ed in(Sc.."\n"):gmatch("(.-)\n")do table.insert(Zc,ed)if#ed>ad then ad=#ed end end while#Zc>0 and Zc[1]:gsub("%s+","")==""do table.remove(Zc,1)end while#Zc>0 and Zc[#Zc]:gsub("%s+","")==""do table.remove(Zc,#Zc)end if#Zc==0 then return end local bd=0 for ed,fd in ipairs(Zc)do if fd:find("#")then bd=bd+Vc+Wc else bd=bd+Xc end end bd=bd-Wc local cd=Tc.y or(u.screen.height-bd)/2 local dd=Tc.x or(u.screen.width-(ad*Uc))/2 for ed,fd in ipairs(Zc)do if fd:find("#")then for gd=1,#fd do local hd=fd:sub(gd,gd)if hd=="#"then rect(dd+(gd-1)*Uc,cd,Uc-1,Vc-1,Yc)end end cd=cd+Vc+Wc else cd=cd+Xc end end return{x=dd,y=Tc.y or(u.screen.height-bd)/2,width=ad*Uc,height=bd,bottom=(Tc.y or(u.screen.height-bd)/2)+bd}end local qb=1000 local rb=500 local sb=100 local tb=20 local ub=0.02 local vb=0.16 local wb=600 c.COLOR_ISM=u.colors.red c.COLOR_WPM=u.colors.blue c.COLOR_BM=u.colors.black c.COLOR_BG=u.colors.meter_bg function c.get_initial()return{ism=rb,wpm=rb,bm=rb,combo=0,combo_timer=0,hidden=false,}end function c.hide()if v and v.meters then v.meters.hidden=true end end function c.show()if v and v.meters then v.meters.hidden=false end end function c.get_max()return qb end function c.set_decay(Sc)tb=Sc end function c.get_decay_percentage()return math.floor(tb/qb*100)end function c.get_combo_multiplier()if not v or not v.meters then return 1 end local Sc=v.meters.combo if Sc==0 then return 1 end return 1+math.min(vb,ub*(2^(Sc-1)))end function c.update()if not v or not v.game_in_progress or not v.meters then return end local Sc=v.meters local Tc=string.find(a.get_current_id(),"^minigame_")~=nil if not Tc then if Sc.combo>0 then Sc.combo_timer=Sc.combo_timer+1 if Sc.combo_timer>=wb then Sc.combo=0 Sc.combo_timer=0 end end end end function c.add(Sc,Tc)if not v or not v.meters then return end local Uc=v.meters if Uc[Sc]~=nil then Uc[Sc]=math.min(qb,Uc[Sc]+Tc)end end function c.on_minigame_complete()local Sc=v.meters local Tc=math.floor(sb*c.get_combo_multiplier())c.add("wpm",Tc)c.add("ism",Tc)c.add("bm",Tc)Sc.combo=Sc.combo+1 Sc.combo_timer=0 end function c.draw()if not v or not v.game_in_progress or not v.meters then return end if v.meters.hidden then return end local Sc=v.meters local Tc=c.get_max()local Uc=44 local Vc=2 local Wc=182 local Xc=228 local Yc=5 local Zc=1 local ad=math.floor((Yc-Vc)/2)local bd={{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 dd,ed in ipairs(bd)do local fd=Zc+ed.row*Yc local gd=fd+ad local hd=math.max(0,math.floor((Sc[ed.key]/Tc)*Uc))rect(Wc,gd,Uc,Vc,c.COLOR_BG)if hd>0 then rect(Wc,gd,hd,Vc,ed.color)end print(ed.label,Xc,fd,ed.color,false,1,true)end local cd=Zc+3*Yc+1 t.draw(Wc,cd,{spacing=5})end local xb=5 local yb=false local zb=false local Ab=false local Bb=0 local Cb=0 local Db=0 local Eb=xb local Fb=nil local Gb=0 local Hb=0 local function Ib(Sc,Tc)local Uc=math.max(Sc,u.screen.width-Sc)local Vc=math.max(Tc,u.screen.height-Tc)return math.sqrt(Uc*Uc+Vc*Vc)end function n.start(Sc,Tc,Uc)Uc=Uc or{}yb=true zb=false Ab=false Bb=Sc Cb=Tc Db=Uc.initial_radius or 0 Eb=Uc.speed or xb Fb=Uc.on_complete end function n.close(Sc,Tc,Uc)Uc=Uc or{}yb=true zb=true Ab=false Bb=Sc Cb=Tc Db=Ib(Sc,Tc)Eb=Uc.speed or xb Fb=Uc.on_complete end function n.start_driven(Sc,Tc,Uc)Uc=Uc or{}yb=true zb=false Ab=true Bb=Sc Cb=Tc Gb=Uc.initial_radius or 0 Hb=Ib(Sc,Tc)Db=Gb Fb=nil end function n.set_percentage(Sc)if not Ab then return end Db=Gb+Sc*(Hb-Gb)end function n.is_active()return yb end function n.stop()yb=false zb=false Ab=false Db=0 Fb=nil end function n.update()if not yb then return end if Ab then return end if zb then Db=Db-Eb if Db<=0 then local Sc=Fb n.stop()if Sc then Sc()end end else Db=Db+Eb if Db>=Ib(Bb,Cb)then local Sc=Fb n.stop()if Sc then Sc()end end end end function n.draw()if not yb then return end local Sc=Bb local Tc=Cb local Uc=Db local Vc=u.screen.width local Wc=u.screen.height local Xc=u.colors.black if zb and Uc<=0 then rect(0,0,Vc,Wc,Xc)return end local Yc=math.max(0,math.floor(Tc-Uc))local Zc=math.min(Wc-1,math.ceil(Tc+Uc))if Yc>0 then rect(0,0,Vc,Yc,Xc)end if Zc0 then rect(0,ad,dd,1,Xc)end if ed=1 then Sc.progress=Sc.progress-1 end end end function p.draw()if not v or not v.game_in_progress or not v.meters or not v.timer then return end if v.meters.hidden and not v.stat_screen_active then return end local Sc=10 local Tc=8 local Uc=5 local Vc=3 local Wc=v.timer.progress local Xc if Wc<=0.25 then Xc=u.colors.dark_grey elseif Wc<=0.5 then Xc=u.colors.light_blue elseif Wc<=0.75 then Xc=u.colors.blue elseif Wc<=1 then Xc=u.colors.red end local Yc=u.colors.white local Zc=-math.pi*0.5 local ad=Wc*2*math.pi local bd=Uc*Uc local cd=Vc*Vc for gd=-Uc,Uc do for hd=-Uc,Uc do local id=hd*hd+gd*gd if id<=bd and id>cd then local jd=math.atan(gd,hd)local kd=jd-Zc if kd<0 then kd=kd+2*math.pi end if kd<=ad then pix(Sc+hd,Tc+gd,Xc)else pix(Sc+hd,Tc+gd,Yc)end end end end local dd=Zc+ad local ed=math.floor(Sc+math.cos(dd)*(Vc-1)+0.5)local fd=math.floor(Tc+math.sin(dd)*(Vc-1)+0.5)line(Sc,Tc,ed,fd,u.colors.white)end local Lb={}function q.register(Sc)if not Sc or not Sc.id then trace("Error: Invalid trigger registered (missing id)!")return end if not Sc.duration or Sc.duration<=0 then trace("Error: Invalid trigger registered (missing or invalid duration)!")return end if not Sc.on_start then Sc.on_start=function()end end if not Sc.on_stop then Sc.on_stop=function()end end if Sc.repeating==nil then Sc.repeating=false end if Lb[Sc.id]then trace("Warning: Overwriting trigger with id: "..Sc.id)end Lb[Sc.id]=Sc end function q.get_by_id(Sc)return Lb[Sc]end function q.get_all()return Lb end function q.is_active(Sc)if not v or not v.triggers then return false end return v.triggers[Sc]~=nil end function q.start(Sc)if not v or not v.triggers then return end local Tc=Lb[Sc]if not Tc then trace("Error: Cannot start unknown trigger: "..tostring(Sc))return end v.triggers[Sc]={elapsed=0}Tc.on_start()end function q.stop(Sc)if not v or not v.triggers then return end local Tc=Lb[Sc]if not Tc then trace("Error: Cannot stop unknown trigger: "..tostring(Sc))return end if not v.triggers[Sc]then return end v.triggers[Sc]=nil Tc.on_stop()end function q.reset(Sc)if not v or not v.triggers then return end if not Lb[Sc]then trace("Error: Cannot reset unknown trigger: "..tostring(Sc))return end if not v.triggers[Sc]then return end v.triggers[Sc].elapsed=0 end function q.update()if not v or not v.game_in_progress or not v.triggers then return end local Sc=string.find(a.get_current_id(),"^minigame_")~=nil if Sc then return end local Tc={}for Uc,Vc in pairs(v.triggers)do local Wc=Lb[Uc]if Wc then Vc.elapsed=Vc.elapsed+1 if Vc.elapsed>=Wc.duration then table.insert(Tc,Uc)end else table.insert(Tc,Uc)end end for Uc,Vc in ipairs(Tc)do local Wc=Lb[Vc]if Wc then Wc.on_stop()if Wc.repeating then v.triggers[Vc]={elapsed=0}else v.triggers[Vc]=nil end else v.triggers[Vc]=nil end end end function d.draw_win_overlay()local Sc="SUCCESS"local Tc=#Sc*6 local Uc=6 local Vc=4 local Wc=Tc+Vc*2 local Xc=Uc+Vc*2 local Yc=(u.screen.width-Wc)/2 local Zc=(u.screen.height-Xc)/2 rect(Yc,Zc,Wc,Xc,u.colors.dark_grey)rectb(Yc,Zc,Wc,Xc,u.colors.white)j.text_center(Sc,u.screen.width/2,Zc+Vc,u.colors.white)end A={}function A.show()if v and v.glitch then v.glitch.enabled=true end end function A.hide()if v and v.glitch then v.glitch.enabled=false end end function A.draw()if not v or not v.glitch or not v.glitch.enabled then return end v.glitch.timer=v.glitch.timer-1 if v.glitch.timer<=0 then if v.glitch.state=="active"then v.glitch.state="waiting"v.glitch.timer=math.random(20,60)else v.glitch.state="active"v.glitch.timer=math.random(40,100)end end if v.glitch.state=="active"then for Sc=1,15 do local Tc=math.random(0,u.screen.width-1)local Uc=math.random(0,u.screen.height-1)local Vc=pix(Tc,Uc)local Wc=math.random(2,40)for Xc=0,Wc-1 do local Yc=Uc+Xc if YcXc then Xc=ad end end Uc=(u.screen.width-Xc)/2 end for Xc,Yc in ipairs(Sc)do local Zc=Vc+(Xc-1)*10 if Xc==Tc then j.text(">",Uc-8,Zc,u.colors.light_blue)end j.text(Yc.label,Uc,Zc,u.colors.light_blue)end end function i.update_menu(Sc,Tc)if k.up()then m.sfx_beep()Tc=Tc-1 if Tc<1 then Tc=#Sc end elseif k.down()then m.sfx_beep()Tc=Tc+1 if Tc>#Sc then Tc=1 end end return Tc end function i.draw_textbox(Sc,Tc,Uc,Vc,Wc,Xc,Yc,Zc,ad,bd)Yc=Yc or u.colors.white Zc=Zc or u.colors.dark_grey ad=ad or u.colors.white bd=bd or false local cd=4 local dd=8 local ed=Tc+cd local fd=Uc+cd local gd=Tc+(Vc/2)local hd=Wc-cd*2 local id=i.word_wrap(Sc,30)local jd=#id*dd local kd=fd if bd and jd=fd and nd+dd<=fd+hd then if bd then j.text_center(md,gd,nd,Yc)else j.text(md,ed,nd,Yc)end end end rectb(Tc,Uc,Vc,Wc,ad)end function i.word_wrap(Sc,Tc)if Sc==nil then return{""}end local Uc={}local function Vc(Xc)return(Xc:gsub("^%s+",""):gsub("%s+$",""))end local function Wc(Xc,Yc)if Xc:sub(Yc,Yc):match("%s")then return Yc end for Zc=Yc-1,1,-1 do if Xc:sub(Zc,Zc):match("%s")then return Zc end end return nil end for Xc in(Sc.."\n"):gmatch("(.-)\n")do local Yc=Vc(Xc)if Yc==""then table.insert(Uc,"")else while#Yc>Tc do local Zc=Wc(Yc,Tc)local ad=Vc(Yc:sub(1,Zc))if not Zc or ad==""then ad=Yc:sub(1,Tc)Zc=Tc end table.insert(Uc,ad)Yc=Vc(Yc:sub(Zc+1))end table.insert(Uc,Yc)end end if#Uc==0 then return{""}end return Uc 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.music_play_activity_work()music(1)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 function m.sfx_alarm()sfx(61)end B={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 C(Sc,Tc,Uc)Uc=Uc or 60 local Vc=60/Tc local Wc=Vc*Uc return math.floor(Sc*Wc)end function D(Sc,Tc,Uc)Uc=Uc or 60 local Vc={}for Wc,Xc in ipairs(Sc)do local Yc=Xc[1]local Zc=Xc[2]table.insert(Vc,{frame=C(Yc,Tc,Uc),dir=Zc})end return Vc end local Nb={}local Ob={}local function Pb(Sc,Tc)local Uc=Tc.colorkey or Sc.colorkey or 0 local Vc=Tc.scale or Sc.scale or 1 local Wc=Tc.flip_x or Sc.flip_x or 0 local Xc=Tc.flip_y or Sc.flip_y or 0 local Yc=Tc.rot or Sc.rot or 0 if Sc.sprites then for Zc=1,#Sc.sprites do local ad=Sc.sprites[Zc]spr(ad.s,Tc.x+(ad.x_offset or 0),Tc.y+(ad.y_offset or 0),ad.colorkey or Uc,ad.scale or Vc,ad.flip_x or Wc,ad.flip_y or Xc,ad.rot or Yc)end else spr(Sc.s,Tc.x,Tc.y,Uc,Vc,Wc,Xc,Yc)end end function l.register(Sc)if not Sc or not Sc.id then trace("Error: Invalid sprite object registered (missing id)!")return end if Nb[Sc.id]then trace("Warning: Overwriting sprite with id: "..Sc.id)end Nb[Sc.id]=Sc end function l.generate_table(Sc,Tc,Uc,Vc,Wc,Xc,Yc)local Zc={}for ad=0,Tc-1 do for bd=0,Sc-1 do local cd=Uc+ad*16+bd local dd=Vc+bd*Xc local ed=Wc+ad*Yc table.insert(Zc,{s=cd,x_offset=dd,y_offset=ed})end end return Zc end function l.show(Sc,Tc,Uc,Vc,Wc,Xc,Yc,Zc)if not Nb[Sc]then trace("Error: Attempted to show non-registered sprite with id: "..Sc)return end Ob[Sc]={id=Sc,x=Tc,y=Uc,colorkey=Vc,scale=Wc,flip_x=Xc,flip_y=Yc,rot=Zc,}end function l.hide(Sc)Ob[Sc]=nil end function l.draw_at(Sc,Tc,Uc,Vc,Wc,Xc,Yc,Zc)local ad=Nb[Sc]if not ad then trace("Error: Attempted to draw non-registered sprite with id: "..Sc)return end Pb(ad,{x=Tc,y=Uc,colorkey=Vc,scale=Wc,flip_x=Xc,flip_y=Yc,rot=Zc,})end function l.draw()for Sc,Tc in pairs(Ob)do local Uc=Nb[Sc]if not Uc then trace("Error: Sprite id "..Sc.." in _active_sprites is not registered.")Ob[Sc]=nil end if Uc then Pb(Uc,Tc)end end end l.register({id="norman",sprites={{s=272,x_offset=-4,y_offset=-4},{s=273,x_offset=4,y_offset=-4},{s=288,x_offset=-4,y_offset=4},{s=289,x_offset=4,y_offset=4},{s=304,x_offset=-4,y_offset=12},{s=305,x_offset=4,y_offset=12}}})l.register({id="sleeping_norman",sprites={{s=272,x_offset=12,y_offset=-4,flip_y=1},{s=273,x_offset=12,y_offset=4,flip_y=1},{s=288,x_offset=4,y_offset=-4,flip_y=1},{s=289,x_offset=4,y_offset=4,flip_y=1},{s=304,x_offset=-4,y_offset=-4,flip_y=1},{s=305,x_offset=-4,y_offset=4,flip_y=1}}})l.register({id="sumphore",sprites=l.generate_table(2,4,258,-4,-4,8,8)})l.register({id="pizza_vendor",sprites=l.generate_table(2,2,334,-1,-8,8,8)})l.register({id="dev_boy",sprites=l.generate_table(2,3,278,-4,-4,8,8)})l.register({id="dev_buddy",sprites=l.generate_table(2,3,286,-4,-4,8,8)})l.register({id="dev_extrovert",sprites=l.generate_table(2,4,330,-4,-4,8,8)})l.register({id="dev_girl",sprites=l.generate_table(2,3,284,-4,-4,8,8)})l.register({id="dev_guard",sprites=l.generate_table(3,4,384,-4,-4,8,8)})l.register({id="dev_guru",sprites=l.generate_table(2,4,264,-4,-4,8,8)})l.register({id="dev_hr_girl",sprites=l.generate_table(2,4,260,-4,-4,8,8)})l.register({id="dev_introvert",sprites=l.generate_table(2,4,332,-4,-4,8,8)})l.register({id="dev_operator",sprites=l.generate_table(2,4,326,-4,-4,8,8)})l.register({id="dev_project_manager",sprites=l.generate_table(2,4,328,-4,-4,8,8)})l.register({id="matrix_architect",sprites=l.generate_table(2,4,324,-4,-4,8,8)})l.register({id="matrix_neo",sprites=l.generate_table(2,4,322,-4,-4,8,8)})l.register({id="matrix_oraculum",sprites=l.generate_table(2,3,282,-4,-4,8,8)})l.register({id="matrix_trinity",sprites=l.generate_table(2,4,320,-4,-4,8,8)})local Qb={}function f.register(Sc)if not Sc or not Sc.id then z.show({"Error: Invalid situation object registered (missing id)!"})return end if not Sc.handle then Sc.handle=function()end end if not Sc.update then Sc.update=function()end end if Qb[Sc.id]then trace("Warning: Overwriting situation with id: "..Sc.id)end Qb[Sc.id]=Sc end function f.get_by_id(Sc)return Qb[Sc]end function f.get_all(Sc)if Sc then local Tc={}for Uc,Vc in pairs(Qb)do if Vc.screen_id==Sc then table.insert(Tc,Vc)end end return Tc end return Qb end function f.apply(Sc,Tc)local Uc=f.get_by_id(Sc)local Vc=g.get_by_id(Tc)if not Uc then trace("Error: No situation found with id: "..Sc)return nil end if b.contains(Vc.situations,Sc)then Uc.handle()return Sc else trace("Info: Situation "..Sc.." cannot be applied to current screen (id: "..Tc..").")return nil end end f.register({id="drink_coffee",handle=function()m.sfx_select()l.show("norman",100,100)end,})local Rb={}function e.register(Sc)if not Sc or not Sc.id then trace("Error: Invalid decision object registered (missing id)!")return end if not Sc.label then trace("Error: Invalid decision object registered (missing label)!")return end if not Sc.condition then Sc.condition=function()return true end end if not Sc.handle then Sc.handle=function()end end if Rb[Sc.id]then trace("Warning: Overwriting decision with id: "..Sc.id)end Rb[Sc.id]=Sc end function e.get_label(Sc)if not Sc then return""end if type(Sc.label)=="function"then return Sc.label()or""end return Sc.label or""end function e.get_by_id(Sc)return Rb[Sc]end function e.get_all()return Rb end function e.get_for_screen(Sc)if not Sc or not Sc.decisions then return{}end local Tc={}for Uc,Vc in ipairs(Sc.decisions)do local Wc=e.get_by_id(Vc)if Wc then table.insert(Tc,Wc)end end return Tc end function e.filter_available(Sc)local Tc={}for Uc,Vc in ipairs(Sc)do if Vc and(not Vc.condition or Vc.condition())then table.insert(Tc,Vc)end end return Tc end function e.draw(Sc,Tc)local Uc=16 local Vc=u.screen.height-Uc rect(0,Vc,u.screen.width,Uc,u.colors.dark_grey)if#Sc>0 then local Wc=Sc[Tc]local Xc=e.get_label(Wc)local Yc=Vc+4 j.text("<",2,Yc,u.colors.light_blue)j.text_center(Xc,u.screen.width/2,Yc,u.colors.item)j.text(">",u.screen.width-6,Yc,u.colors.light_blue)end end function e.update(Sc,Tc)if k.left()then m.sfx_beep()Tc=b.safeindex(Sc,Tc-1)elseif k.right()then m.sfx_beep()Tc=b.safeindex(Sc,Tc+1)end return Tc end e.register({id="have_a_coffee",label="Have a Coffee",handle=function()local Sc=f.apply("drink_coffee",v.game.current_screen)v.game.current_situation=Sc 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_end",label="Break the cycle",condition=function()return t.is_complete()end,handle=function()a.set_current("end")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="go_to_sleep",label="Go to Sleep",handle=function()c.hide()o.increase()E.start("game",{focus_center_x=(u.screen.width/2)-22,focus_center_y=(u.screen.height/2)-18,focus_initial_radius=0,on_win=function()local Sc=t.consume_increase()x.start({skip_text=not Sc})end,})end,})e.register({id="do_work",label="Do Work",handle=function()c.hide()b.go_to_screen_by_id("work")F.start("game",nil,{on_win=function()c.show()b.go_to_screen_by_id("office")a.set_current("game")end,})end,})e.register({id="start_discussion",label=function()if v.have_met_sumphore then return"Talk to Sumphore"end return"Talk to the homeless guy"end,handle=function()if not v.have_met_sumphore then r.start("homeless_guy","game")elseif t.get_level()==0 then r.start("homeless_guy","game",4)else r.start("sumphore_day_3","game")end end,})r.register({id="sumphore_day_3",steps={{question="Are you still seeking the ox?",answers={{label="Huh? What ox?",next_step=2},{label="Are you drunk, old man?",next_step=nil},},},{question="Did you never think there would be more to this?",answers={{label="I'm not sure what you mean.",next_step=nil},},},},})r.register({id="homeless_guy",steps={{question="Sup bro, how are you?",answers={{label="I'm doing great, thanks!",next_step=2},{label="Not as good as you",next_step=nil},},},{question="What's your name?",answers={{label="Norman Reds, nice to meet you.",next_step=3},{label="Mom told me not to talk to strangers.",next_step=nil},},},{question="That name ... could it be? I know a guy with that name...",answers={{label="Never met you before.",next_step=4},{label="I'm not sure what you mean.",next_step=nil},},},{question="My name is Sumphore, nice to meet you.",answers={{label="Nice to meet you, Sumphore.",next_step=5,on_select=function()v.have_met_sumphore=true end},},},{question="You're a good guy, I can tell. You abide by the rules. Life would be so much easier if more people were like you ...",answers={{label="Thanks, I try my best.",next_step=nil},},},},})local Sb={}function h.get_maps_array()local Sc={}for Tc,Uc in pairs(Sb)do table.insert(Sc,Uc)end return Sc end function h.register(Sc)if Sb[Sc.id]then trace("Warning: Overwriting map with id: "..Sc.id)end Sb[Sc.id]=Sc end function h.get_by_id(Sc)return Sb[Sc]end function h.draw(Sc)local Tc=h.get_by_id(Sc)if not Tc then return end map(Tc.from_x,Tc.from_y,Tc.width,Tc.height,Tc.to_x,Tc.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 Tb={}function g.register(Sc)if Tb[Sc.id]then trace("Warning: Overwriting screen with id: "..Sc.id)end if not Sc.situations then Sc.situations={}end if not Sc.init then Sc.init=function()end end if not Sc.exit then Sc.exit=function()end end if not Sc.update then Sc.update=function()end end if not Sc.draw then Sc.draw=function()end end Tb[Sc.id]=Sc end function g.get_by_id(Sc)return Tb[Sc]end function g.get_all()return Tb end g.register({id="home",name="Home",decisions={"go_to_toilet","go_to_walking_to_office","go_to_sleep","go_to_end",},background="bedroom",draw=function()if v.home_norman_visible and a.get_current_id()=="game"then l.draw_at("norman",100,80)end end})g.register({id="toilet",name="Toilet",decisions={"go_to_home",},background="bedroom",init=function()v.stat_screen_active=true c.hide()local Sc=u.screen.width*0.75 local Tc=u.screen.height*0.75 n.start_driven(Sc,Tc)n.set_percentage(0.15)end,update=function()if not v.stat_screen_active then return end if k.select()or k.player_interact()then n.stop()v.stat_screen_active=false c.show()end end,draw=function()if not v.stat_screen_active then return end local Sc=u.screen.width local Tc=Sc/2 local Uc=math.floor(Sc*0.75)local Vc=math.floor(u.screen.height*0.75)local Wc=math.floor(Sc*0.75)local Xc=math.floor((Sc-Wc)/2)local Yc=4 l.draw_at("norman",Uc,Vc)j.text_center("day "..v.day_count,Tc,10,u.colors.white)local Zc="reflecting on my past and present\n...\nboth eventually flushed."local ad=i.word_wrap(Zc,38)local bd=24 for ld,md in ipairs(ad)do j.text_center(md,Tc,bd,u.colors.light_grey)bd=bd+8 end local cd=v.meters local dd=c.get_max()local ed=c.get_decay_percentage()local fd=string.format("-%d%%",ed)local gd=c.get_combo_multiplier()local hd=math.floor((gd-1)*100)local id=string.format("+%d%%",hd)local jd=bd+10 local kd={{key="wpm",label="Work Productivity Meter"},{key="ism",label="Impostor Syndrome Meter"},{key="bm",label="Burnout Meter"},}for ld,md in ipairs(kd)do local nd=jd+(ld-1)*20 j.text_center(md.label,Tc,nd,u.colors.white)local od=nd+8 local pd=math.max(0,math.floor((cd[md.key]/dd)*Wc))rect(Xc,od,Wc,Yc,c.COLOR_BG)if pd>0 then rect(Xc,od,pd,Yc,u.colors.blue)end local qd=print(fd,0,-6,0,false,1)j.text(fd,Xc-qd-4,od,u.colors.light_blue)j.text(id,Xc+Wc+4,od,u.colors.light_blue)end if t.get_level()>0 then local ld=jd+#kd*20 local md=ld+10 local nd=8 local od=t.get_level()*nd local pd=math.floor((Sc-od)/2)t.draw(pd,md,{spacing=nd})end end,})g.register({id="walking_to_office",name="Walking to office",decisions={"go_to_home","go_to_office","start_discussion",},background="street",draw=function()if a.get_current_id()=="game"then l.draw_at("norman",7*8,3*8)l.draw_at("sumphore",9*8,2*8)l.draw_at("pizza_vendor",19*8,1*8)l.draw_at("dev_guard",22*8,2*8)l.draw_at("matrix_trinity",5*8,11*8)l.draw_at("matrix_neo",7*8,11*8)l.draw_at("matrix_oraculum",9*8,12*8)l.draw_at("matrix_architect",11*8,11*8)end end})g.register({id="office",name="Office",decisions={"do_work","go_to_walking_to_home","have_a_coffee",},situations={"drink_coffee",},background="office",draw=function()if a.get_current_id()=="game"then l.draw_at("norman",13*8,9*8)l.draw_at("dev_buddy",15*8,9*8)l.draw_at("dev_project_manager",6*8,4*8)l.draw_at("dev_hr_girl",12*8,4*8)l.draw_at("dev_introvert",-4+5*8,9*8)l.draw_at("dev_extrovert",20*8,4*8)l.draw_at("dev_girl",23*8,5*8)l.draw_at("dev_boy",10*8,11*8+4)l.draw_at("dev_guru",22*8,10*8+4)l.draw_at("dev_operator",27*8,10*8+4)end end})g.register({id="walking_to_home",name="Walking to home",decisions={"go_to_home","go_to_office",},background="street",draw=function()if a.get_current_id()=="game"then l.draw_at("norman",7*8,3*8)l.draw_at("pizza_vendor",19*8,1*8)l.draw_at("dev_guard",22*8,2*8)end end})g.register({id="work",name="Work",decisions={},background_color=u.colors.blue,})function g.draw_the_mysterious_screen()local Sc={0,1,0,1,0,1,0,1,0,1,0,1,2,1,4,1,0,2,4,1,0,2,4,1,0,2,4,1,0,2,4,1,0,2,4,2,1,4,2,1,4,1,0,2,4,1,0,1,4,2,1,2,1,0,1,2,4,1,0,2,4,2,1,0,1,2,1,2,1,0,1,4,1,0,2,4,2,0,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,4,1,0,2,4,2,0,1,2,4,1,0,2,4,1,0,1,0,4,1,0,2,4,0,1,0,1,0,1,0,4,1,0,2,4,0,1,4,1,0,2,4,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,0,4,1,0,2,4,1,0,1,0,4,1,0,2,4,1,0,1,0,1,4,1,0,2,4,1,2,1,0,1,4,1,0,2,4,2,1,0,1,2,4,1,0,2,4,2,1,0,1,2,4,1,0,2,4,1,2,0,1,0,1,0,1,2,1,2,1,0,2,4,1,0,2,4,0,1,0,1,2,1,0,1,0,2,4,1,0,2,4,2,1,0,1,0,1,4,1,0,2,4,2,1,0,1,0,2,4,2,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,4,1,0,2,4,2,1,0,1,0,2,0,1,4,1,0,2,4,1,0,1,0,1,2,0,1,4,1,0,2,4,2,1,0,1,0,1,4,1,0,2,4,2,1,0,2,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,0,1,4,1,0,2,4,0,1,0,1,0,1,0,1,4,1,0,2,4,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,2,4,1,0,2,4,2,1,0,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,0,1,0,1,4,1,0,2,4,2,4,1,0,1,0,1,0,1,0,1,0,1,2,1,4,2,4,1,0,2,4,2,1,0,1,0,1,0,1,0,1,0,1,2,1,4,2,4,1,0,2,4,2,1,2,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,4,1,0,2,4,1,2,1,0,1,0,1,0,1,0,1,0,1,0,1,2,1,4,1,0,2,4,2,1,2,1,0,1,0,1,0,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,2,1,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,2,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,2,0,1,0,1,0,4,1,0,2,4,0,1,0,1,0,2,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,0,2,0,1,4,1,0,2,4,0,1,0,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,4,1,0,2,4,1,0,2,0,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,2,4,1,0,2,4,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,2,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,2,4,1,0,2,4,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,0,1,2,4,1,0,2,4,2,0,1,0,1,4,1,0,2,4,2,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,4,1,0,2,4,0,1,0,1,4,2,1,0,1,2,1,2,1,0,1,2,1,2,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,0,1,2,0,1,0,2,1,0,1,2,0,1,0,2,0,1,0,1,0,1,2,0,1,0,1,0,1,0,2,0,1,0,1,0,1,0,2,0,1,0,1,0,2,1,0,1,0,1,2,0,1,0,2,0,2,1,0,1,2,0,2,1,0,1,0,1,2,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,0,2,1,0,1,0,1,0,1,0,1,0,2,1,0,1,2,0,1,0,1,2,1,0,1,0,1,0,1,0,2,1,0,2,0,1,0,1,0,2,0,1,0,1,0,2,0,1,0,2,0,1,0,1,0,2,1,0,1,2,0,1,0,1,0,1,0,1,0,2,0,1,0,2,0,1,0,2,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0}local Tc={1480,1,151,1,87,1,1,150,1,1,86,1,2,148,1,2,87,2,148,2,88,2,148,2,88,2,148,2,88,2,148,2,88,2,70,1,2,9,1,2,63,2,88,2,69,1,2,3,5,1,1,1,1,1,1,1,61,2,88,2,68,1,1,3,1,2,1,3,2,3,2,61,2,88,2,68,1,6,1,4,1,5,1,1,60,2,88,2,67,1,1,17,2,60,2,88,2,67,1,19,1,1,59,2,88,2,67,1,19,1,1,59,2,88,2,67,4,1,11,1,1,1,3,59,2,88,2,67,21,1,59,2,88,2,67,21,1,59,2,88,2,66,1,21,2,58,2,88,2,66,1,21,1,1,58,2,88,2,66,4,17,2,1,58,2,88,2,65,2,5,1,15,2,58,2,88,2,63,1,1,2,22,4,55,2,88,2,57,2,2,34,2,2,49,2,88,2,55,1,2,39,3,1,47,2,88,2,55,5,1,3,2,2,1,25,1,1,1,1,1,1,1,47,2,88,2,57,1,2,1,29,1,4,1,1,1,1,49,2,88,2,59,1,2,8,15,9,2,52,2,88,2,62,2,1,1,1,24,1,1,1,54,2,88,2,66,1,22,1,58,2,88,2,66,1,21,1,59,2,88,2,66,2,20,1,59,2,88,2,65,3,20,2,58,2,88,2,63,2,2,1,20,1,1,2,56,2,88,2,61,2,4,1,20,1,2,2,55,2,88,2,59,1,1,6,1,19,1,4,2,54,2,88,2,58,2,7,2,17,1,1,6,2,52,3,87,2,56,1,2,9,1,26,2,51,3,87,2,55,1,1,40,1,50,2,88,2,54,2,41,1,50,2,88,2,53,2,42,2,49,2,88,2,52,2,44,2,48,2,88,2,51,2,46,2,47,2,88,2,50,2,16,1,31,1,47,2,88,2,50,3,1,14,1,29,1,1,2,46,2,88,2,50,18,1,29,1,2,1,46,2,88,2,50,4,14,1,33,1,45,2,88,2,53,1,3,11,2,15,1,13,1,2,46,2,88,2,56,1,1,11,1,15,1,10,2,1,49,2,88,2,55,2,3,10,2,12,2,8,8,46,2,88,2,50,1,1,4,4,1,9,2,11,2,8,2,4,2,1,2,1,1,42,2,88,2,48,2,3,8,1,9,2,9,3,7,2,8,1,1,2,1,1,40,2,88,2,45,3,2,1,1,1,1,8,1,7,1,1,3,6,4,6,1,8,1,1,1,1,4,2,38,2,88,2,45,1,2,2,22,4,4,4,6,1,10,1,1,2,1,2,1,2,37,2,88,2,42,1,1,1,4,1,2,19,1,1,4,1,5,21,1,2,6,35,2,88,2,42,2,1,1,1,1,15,2,8,3,4,3,6,1,17,1,1,2,1,1,1,34,2,88,2,41,3,1,1,15,2,9,3,5,2,8,1,21,1,1,34,2,88,2,41,1,1,1,16,2,11,2,5,2,9,2,18,2,1,34,2,88,2,41,1,2,1,14,2,13,1,5,1,12,1,17,1,2,34,2,88,2,41,1,16,1,17,1,2,1,14,2,17,1,1,33,2,88,2,41,1,2,1,12,1,17,1,3,2,15,1,14,1,1,1,1,33,2,88,2,41,15,1,22,1,17,1,1,11,1,3,1,33,2,88,2,41,1,14,2,40,1,15,1,33,2,88,2,41,1,15,2,35,1,3,1,10,1,4,1,33,2,88,2,41,1,3,1,12,2,36,2,11,1,4,1,33,2,88,2,40,1,1,18,1,35,1,12,1,4,1,1,32,2,88,2,40,2,4,1,14,1,33,1,12,1,6,1,32,2,88,2,40,1,6,1,14,1,31,1,13,1,6,1,32,2,88,2,39,2,22,2,28,1,21,1,1,31,2,88,2,39,2,24,1,26,1,22,1,1,31,2,88,2,39,2,25,1,24,1,23,1,1,31,2,88,2,39,1,27,1,22,2,23,1,1,31,2,88,2,39,1,49,2,24,3,30,2,88,2,39,1,48,1,27,1,1,30,2,88,2,39,1,47,2,27,1,1,30,2,88,2,37,1,1,47,2,28,1,1,30,2,88,2,37,1,1,46,1,30,2,1,29,2,88,2,37,1,47,1,30,2,30,2,88,2,37,1,1,2,43,1,33,30,3,87,2,37,1,45,1,31,1,1,2,29,3,87,2,37,45,1,35,1,29,1,1,88,2,1,35,1,1,80,2,1,26,1,3,86,1,1,2,1,21,1,4,4,2,1,3,80,30,1,2,125,2,80,2,156,2,79,2,1,156,2,1,77,4,156,1,3,76,3,1,140,1,15,1,2,2,74,2,1,1,1,5,3,129,1,18,1,82,1,7,1,129,1,18,1,82,1,9,1,123,3,20,1,1,80,2,11,1,1,119,1,22,1,1,1,2,76,4,1,154,2,2,63,1,14,3,1,126,1,27,2,65,1,17,1,17,2,132,4,66,1,17,4,113,39,66,2,16,31,191,1,1,1,15,1,153,2,15,3,48,2,16,2,152,1,16,1,1,1,48,2,16,2,152,1,1,2,2,1,10,1,1,1,48,1,13,6,153,1,3,13,1,1,48,1,15,2,1,1,153,3,64,1,16,2,154,1,1,83,1,154,1,17,1,66,1,154,1,17,1,66,1,155,1,82,1,156,1,82,1,156,1,1,80,1,1,157,2,78,2,158,2,78,2,158,1,80,1,158,1,79,2,158,1,79,1,159,1,79,1,160,1,77,2,160,1,77,1,162,1,74,1,1,1,162,1,75,1,239,1,165,1,72,1,166,1,240,1,69,1,412,1,63,1,175,1,63,2,238,1,175,1,63,1,239,1,807}local Uc=0 local Vc=0 for Wc=0,136-1 do for Xc=0,240-1 do if Vc==0 then Uc=Uc+1 Vc=Tc[Uc]end Vc=Vc-1 pix(Xc,Wc,Sc[Uc])end end end local Ub={}function a.register(Sc,Tc)Ub[Sc]=Tc end function a.get(Sc)return Ub[Sc]end function a.set_current(Sc)v.current_window=Sc end function a.get_current_id()return v.current_window end function a.get_current_handler()local Sc=a.get(v.current_window)if Sc and Sc.update and Sc.draw then return function()Sc.update()Sc.draw()end else return function()trace("Error: No handler for window: "..tostring(v.current_window))end end end G={}a.register("intro_title",G)H={}a.register("intro_ttg",H)I={}a.register("intro_brief",I)w={}a.register("menu",w)J={}a.register("game",J)z={}a.register("popup",z)K={}a.register("configuration",K)L={}a.register("audiotest",L)y={}a.register("minigame_button_mash",y)E={}a.register("minigame_rhythm",E)F={}a.register("minigame_ddr",F)x={}a.register("mysterious_man",x)M={}a.register("end",M)N={}a.register("discussion",N)O={}a.register("continued",O)function M.draw()cls(u.colors.black)if v._end.state=="choice"then local Sc={"This is not a workplace.","This is a cycle.","And if it is a cycle...","it can be broken."}local Tc=40 for Zc,ad in ipairs(Sc)do j.text_center(ad,u.screen.width/2,Tc,u.colors.white)Tc=Tc+10 end Tc=Tc+20 local Uc=v._end.selection==1 and u.colors.light_blue or u.colors.white local Vc=v._end.selection==2 and u.colors.light_blue or u.colors.white local Wc=(v._end.selection==1 and"> YES"or" YES")local Xc=(v._end.selection==2 and"> NO"or" NO")local Yc=u.screen.width/2 j.text(Wc,Yc-40,Tc,Uc)j.text(Xc,Yc+10,Tc,Vc)elseif v._end.state=="ending"then j.text_center("Game over -- good ending.",u.screen.width/2,50,u.colors.light_blue)j.text_center("Congratulations!",u.screen.width/2,70,u.colors.white)j.text_center("Press Z to return to menu",u.screen.width/2,110,u.colors.light_grey)end end function M.update()if v._end.state=="choice"then if k.left()or k.up()then if v._end.selection==2 then m.sfx_beep()v._end.selection=1 end elseif k.right()or k.down()then if v._end.selection==1 then m.sfx_beep()v._end.selection=2 end end if k.menu_confirm()then m.sfx_select()if v._end.selection==1 then v._end.state="ending"else o.increase()b.go_to_screen_by_id("home")a.set_current("game")local Sc=g.get_by_id("home")if Sc and Sc.init then Sc.init()end end end elseif v._end.state=="ending"then if k.menu_confirm()then a.set_current("menu")w.refresh_menu_items()end end end G.timer=180 G.text=[[ ## ### ### ### ### ### ### ### ## # # # # # # # # # # # # # # # # # # ### ### # # # # # ### # # # # # # # # # # # # # # # # ## ### # ### # # ### # ### ## # # # ### ### ## # # ## # # # # # # ## # # ## # # # #### # ## # # # # # # # # # # # ### # # # # # ### # # ### #### ### ### #### ### # ## ## # # # # # # # # # # # # # # ### # # ### # # # ### # # # # # # # # # # # # ### # # # #### ### # #### # # ]]function G.draw()s.draw(G.text,{})end function G.update()G.timer=G.timer-1 if G.timer<=0 or k.select()or k.menu_confirm()then a.set_current("intro_ttg")end end H.timer=180 H.glitch_started=false H.space_count=0 H.space_timer=0 H.text=[[ ###### ###### ###### ## ## # ## ## # #### ## ## # # ## ## ###### ]]function H.draw()local Sc=s.draw(H.text,{})if not Sc then return end j.text_center("Teletype Games",(u.screen.width/2+3),(Sc.bottom+4),u.colors.light_blue)end function H.update()if not H.glitch_started then A.show()H.glitch_started=true end if k.menu_back()then H.space_count=H.space_count+1 end H.timer=H.timer-1 if H.timer<=0 or k.menu_confirm()then if H.space_count==3 then v.test_mode=true w.refresh_menu_items()m.sfx_success()end A.hide()a.set_current("intro_brief")end end I.y=u.screen.height I.speed=0.5 I.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 I.draw()local Sc=(u.screen.width-132)/2 j.text(I.text,Sc,I.y,u.colors.light_blue)end function I.update()I.y=I.y-I.speed local Sc=1 for Tc in string.gmatch(I.text,"\n")do Sc=Sc+1 end if I.y<-Sc*8 or k.select()or k.menu_confirm()then a.set_current("menu")end end local Vb={}function w.draw()local Sc="Definitely not an Impostor"if v.test_mode then Sc=Sc.." (TEST MODE)"end i.draw_top_bar(Sc)local Tc=#Vb*10 local Uc=10+(u.screen.height-10-10-Tc)/2 i.draw_menu(Vb,v.current_menu_item,0,Uc,true)local Vc="TTG"local Wc=print(Vc,0,-10,0,false,1,false)j.text(Vc,u.screen.width-Wc-5,u.screen.height-10,u.colors.light_blue)end function w.update()v.current_menu_item=i.update_menu(Vb,v.current_menu_item)if k.menu_confirm()then local Sc=Vb[v.current_menu_item]if Sc and Sc.decision then m.sfx_select()Sc.decision()end end end function w.new_game()v.new_game()end function w.load_game()v.load_game()J.set_state("game")end function w.save_game()v.save_game()end function w.resume_game()J.set_state("game")end function w.exit()exit()end function w.configuration()K.init()J.set_state("configuration")end function w.audio_test()L.init()J.set_state("audiotest")end function w.continued()O.timer=300 J.set_state("continued")end function w.ddr_test()L.init()J.set_state("minigame_ddr")F.start("menu",nil)end function w.refresh_menu_items()Vb={}if v.game_in_progress then table.insert(Vb,{label="Resume Game",decision=w.resume_game})table.insert(Vb,{label="Save Game",decision=w.save_game})end table.insert(Vb,{label="New Game",decision=w.new_game})table.insert(Vb,{label="Load Game",decision=w.load_game})table.insert(Vb,{label="Configuration",decision=w.configuration})if v.test_mode then table.insert(Vb,{label="Audio Test",decision=w.audio_test})table.insert(Vb,{label="To Be Continued...",decision=w.continued})table.insert(Vb,{label="DDR Test",decision=w.ddr_test})end table.insert(Vb,{label="Exit",decision=w.exit})v.current_menu_item=1 end K.controls={}K.selected_control=1 function K.init()K.controls={{label="Save",action=function()u.save()end,type="action_item"},{label="Restore Defaults",action=function()u.reset()end,type="action_item"},}end function K.draw()i.draw_top_bar("Configuration")local Sc=10 local Tc=40 local Uc=u.screen.width-10 local Vc=4 for Wc,Xc in ipairs(K.controls)do local Yc=Tc+(Wc-1)*12 local Zc=u.colors.light_blue if Xc.type=="numeric_stepper"then local ad=Xc.get()local bd=Xc.label local cd=string.format(Xc.format,ad)local dd=Uc-(#cd*Vc)if Wc==K.selected_control then Zc=u.colors.item j.text("<",Sc-8,Yc,Zc)j.text(bd,Sc,Yc,Zc)j.text(cd,dd,Yc,Zc)j.text(">",Uc+4,Yc,Zc)else j.text(bd,Sc,Yc,Zc)j.text(cd,dd,Yc,Zc)end elseif Xc.type=="action_item"then local ad=Xc.label if Wc==K.selected_control then Zc=u.colors.item j.text("<",Sc-8,Yc,Zc)j.text(ad,Sc,Yc,Zc)j.text(">",Sc+8+(#ad*Vc)+4,Yc,Zc)else j.text(ad,Sc,Yc,Zc)end end end j.text("Press B to go back",Sc,120,u.colors.light_grey)end function K.update()if k.menu_back()then J.set_state("menu")return end if k.up()then K.selected_control=K.selected_control-1 if K.selected_control<1 then K.selected_control=#K.controls end elseif k.down()then K.selected_control=K.selected_control+1 if K.selected_control>#K.controls then K.selected_control=1 end end local Sc=K.controls[K.selected_control]if Sc then if Sc.type=="numeric_stepper"then local Tc=Sc.get()if k.left()then local Uc=math.max(Sc.min,Tc-Sc.step)Sc.set(Uc)elseif k.right()then local Uc=math.min(Sc.max,Tc+Sc.step)Sc.set(Uc)end elseif Sc.type=="action_item"then if k.menu_confirm()then Sc.action()end end end end L.index_menu=1 L.index_func=1 L.list_func={}L.menuitems={}L.last_pressed=false function L.generate_menuitems(Sc,Tc)return{{label="Play music/sound: "..(Sc[Tc]or"?"),decision=function()local Uc=m[Sc[Tc]]if Uc then Uc()else trace("Invalid Audio function: "..Sc[Tc])end end},{label="Stop playing music",decision=function()m.music_stop()end},{label="Back",decision=function()L.back()end},}end function L.generate_listfunc()local Sc={}for Tc,Uc in pairs(m)do if type(Uc)=="function"then Sc[#Sc+1]=Tc end end table.sort(Sc)return Sc end function L.back()m.sfx_deselect()J.set_state("menu")end function L.init()L.last_pressed=false L.index_menu=1 L.index_func=1 L.list_func=L.generate_listfunc()L.menuitems=L.generate_menuitems(L.list_func,L.index_func)end function L.draw()i.draw_top_bar("Audio test")i.draw_menu(L.menuitems,L.index_menu,20,50)end function L.update()if k.up()then L.index_menu=b.safeindex(L.menuitems,L.index_menu-1)elseif k.down()then L.index_menu=b.safeindex(L.menuitems,L.index_menu+1)elseif k.left()then L.index_func=b.safeindex(L.list_func,L.index_func-1)L.menuitems=L.generate_menuitems(L.list_func,L.index_func)elseif k.right()then L.index_func=b.safeindex(L.list_func,L.index_func+1)L.menuitems=L.generate_menuitems(L.list_func,L.index_func)elseif k.menu_confirm()then L.menuitems[L.index_menu].decision()elseif k.menu_back()then L.back()end end local Wb=40 local Xb=40 local Yb=160 local Zb=80 local ac=Wb+10 local bc=Xb+10 local cc=8 function z.show(Sc)v.popup.show=true v.popup.content=Sc or{}J.set_state("popup")end function z.hide()v.popup.show=false v.popup.content={}J.set_state("game")end function z.update()if v.popup.show then if k.menu_confirm()or k.menu_back()then z.hide()end end end function z.draw()if v.popup.show then rect(Wb,Xb,Yb,Zb,u.colors.black)rectb(Wb,Xb,Yb,Zb,u.colors.light_blue)local Sc=bc for Tc,Uc in ipairs(v.popup.content)do j.text(Uc,ac,Sc,u.colors.light_grey)Sc=Sc+cc end j.text("[A] Close",ac,Xb+Zb-cc-2,u.colors.light_blue)end end function y.init_context()return{bar_fill=0,target_points=100,fill_per_press=8,base_degradation=0.15,degradation_multiplier=0.006,button_pressed_timer=0,button_press_duration=8,instruction_text="MASH Z!",show_progress_text=true,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,on_win=nil}end function y.init(Sc)local Tc=y.init_context()if Sc then for Uc,Vc in pairs(Sc)do Tc[Uc]=Vc end if Sc.max_fill and not Sc.target_points then Tc.target_points=Sc.max_fill end end v.minigame_button_mash=Tc end function y.start(Sc,Tc)y.init(Tc)local Uc=v.minigame_button_mash Uc.return_window=Sc or"game"if Uc.focus_center_x then n.start_driven(Uc.focus_center_x,Uc.focus_center_y,{initial_radius=Uc.focus_initial_radius})end a.set_current("minigame_button_mash")end function y.update()local Sc=v.minigame_button_mash if Sc.win_timer>0 then Sc.win_timer=Sc.win_timer-1 if Sc.win_timer==0 then c.on_minigame_complete()if Sc.focus_center_x then n.stop()end if Sc.on_win then Sc.on_win()else c.show()a.set_current(Sc.return_window)end end return end if k.select()then Sc.bar_fill=Sc.bar_fill+Sc.fill_per_press Sc.button_pressed_timer=Sc.button_press_duration if Sc.bar_fill>Sc.target_points then Sc.bar_fill=Sc.target_points end end if Sc.bar_fill>=Sc.target_points then Sc.win_timer=u.timing.minigame_win_duration return end local Tc=Sc.base_degradation+(Sc.bar_fill*Sc.degradation_multiplier)Sc.bar_fill=Sc.bar_fill-Tc if Sc.bar_fill<0 then Sc.bar_fill=0 end if Sc.button_pressed_timer>0 then Sc.button_pressed_timer=Sc.button_pressed_timer-1 end if Sc.focus_center_x then n.set_percentage(Sc.bar_fill/Sc.target_points)end end function y.draw()local Sc=v.minigame_button_mash if Sc.return_window=="game"then J.draw_with_underlay(function()l.draw_at("sleeping_norman",(u.screen.width/2)-30,(u.screen.height/2)-22)end)end if not Sc.focus_center_x then rect(0,0,u.screen.width,u.screen.height,u.colors.black)end rect(Sc.bar_x-2,Sc.bar_y-2,Sc.bar_width+4,Sc.bar_height+4,u.colors.light_grey)rectb(Sc.bar_x-2,Sc.bar_y-2,Sc.bar_width+4,Sc.bar_height+4,u.colors.dark_grey)local Tc=(Sc.bar_fill/Sc.target_points)*Sc.bar_width if Tc>0 then local Vc=u.colors.light_blue if Sc.bar_fill>66 then Vc=u.colors.item elseif Sc.bar_fill>33 then Vc=u.colors.blue end rect(Sc.bar_x,Sc.bar_y,Tc,Sc.bar_height,Vc)end local Uc=u.colors.light_grey if Sc.button_pressed_timer>0 then Uc=u.colors.light_blue end circb(Sc.button_x,Sc.button_y,Sc.button_size,Uc)if Sc.button_pressed_timer>0 then circ(Sc.button_x,Sc.button_y,Sc.button_size-2,Uc)end j.text_center("Z",Sc.button_x,Sc.button_y-3,Uc)j.text_center(Sc.instruction_text,u.screen.width/2,Sc.bar_y+Sc.bar_height+10,u.colors.light_grey)if Sc.show_progress_text then local Vc=math.floor(Sc.bar_fill).."/"..Sc.target_points j.text_center(Vc,Sc.bar_x+Sc.bar_width/2,Sc.bar_y+2,u.colors.black)end if Sc.win_timer>0 then d.draw_win_overlay()end end function E.init_context()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,on_win=nil}end function E.init(Sc)local Tc=E.init_context()if Sc then for Uc,Vc in pairs(Sc)do Tc[Uc]=Vc end end v.minigame_rhythm=Tc end function E.start(Sc,Tc)E.init(Tc)local Uc=v.minigame_rhythm Uc.return_window=Sc or"game"if Uc.focus_center_x then n.start_driven(Uc.focus_center_x,Uc.focus_center_y,{initial_radius=Uc.focus_initial_radius})end a.set_current("minigame_rhythm")end function E.update()local Sc=v.minigame_rhythm if Sc.win_timer>0 then Sc.win_timer=Sc.win_timer-1 if Sc.win_timer==0 then c.on_minigame_complete()if Sc.focus_center_x then n.stop()end if Sc.on_win then Sc.on_win()else c.show()a.set_current(Sc.return_window)end end return end Sc.line_position=Sc.line_position+(Sc.line_speed*Sc.line_direction)if Sc.line_position>1 then Sc.line_position=1 Sc.line_direction=-1 elseif Sc.line_position<0 then Sc.line_position=0 Sc.line_direction=1 end if Sc.press_cooldown>0 then Sc.press_cooldown=Sc.press_cooldown-1 end if k.select()and Sc.press_cooldown==0 then Sc.button_pressed_timer=Sc.button_press_duration Sc.press_cooldown=Sc.press_cooldown_duration local Tc=Sc.target_center-(Sc.target_width/2)local Uc=Sc.target_center+(Sc.target_width/2)if Sc.line_position>=Tc and Sc.line_position<=Uc then Sc.score=Sc.score+1 else Sc.score=Sc.score-1 if Sc.score<0 then Sc.score=0 end end Sc.target_width=Sc.initial_target_width*(Sc.target_shrink_rate^Sc.score)if Sc.target_width=Sc.max_score then Sc.win_timer=u.timing.minigame_win_duration return end if Sc.button_pressed_timer>0 then Sc.button_pressed_timer=Sc.button_pressed_timer-1 end if Sc.focus_center_x then n.set_percentage(1-Sc.score/Sc.max_score)end end function E.draw()local Sc=v.minigame_rhythm if Sc.return_window=="game"then J.draw_with_underlay(function()l.draw_at("sleeping_norman",(u.screen.width/2)-30,(u.screen.height/2)-22)end)end if not Sc.focus_center_x then rect(0,0,u.screen.width,u.screen.height,u.colors.black)end rect(Sc.bar_x-2,Sc.bar_y-2,Sc.bar_width+4,Sc.bar_height+4,u.colors.light_grey)rectb(Sc.bar_x-2,Sc.bar_y-2,Sc.bar_width+4,Sc.bar_height+4,u.colors.dark_grey)rect(Sc.bar_x,Sc.bar_y,Sc.bar_width,Sc.bar_height,u.colors.dark_grey)local Tc=Sc.target_center-(Sc.target_width/2)local Uc=Sc.bar_x+(Tc*Sc.bar_width)local Vc=Sc.target_width*Sc.bar_width rect(Uc,Sc.bar_y,Vc,Sc.bar_height,u.colors.light_blue)local Wc=Sc.bar_x+(Sc.line_position*Sc.bar_width)rect(Wc-1,Sc.bar_y,2,Sc.bar_height,u.colors.item)j.text_center("Sleep Norman ... Sleep!",u.screen.width/2,Sc.bar_y+Sc.bar_height+14,u.colors.light_grey)local Xc=u.colors.light_grey if Sc.button_pressed_timer>0 then Xc=u.colors.light_blue end circb(Sc.button_x,Sc.button_y,Sc.button_size,Xc)if Sc.button_pressed_timer>0 then circ(Sc.button_x,Sc.button_y,Sc.button_size-2,Xc)end j.text_center("Z",Sc.button_x,Sc.button_y-3,Xc)if Sc.win_timer>0 then d.draw_win_overlay()end end function F.init_context()local Sc=12 local Tc=30 local Uc=(4*Sc)+(3*Tc)local Vc=(u.screen.width-Uc)/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=Sc,arrow_spawn_timer=0,arrow_spawn_interval=45,arrow_fall_speed=1.5,arrows={},target_y=115,target_arrows={{dir="left",x=Vc},{dir="down",x=Vc+Sc+Tc},{dir="up",x=Vc+(Sc+Tc)*2},{dir="right",x=Vc+(Sc+Tc)*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,on_win=nil}end function F.init(Sc)local Tc=F.init_context()if Sc then for Uc,Vc in pairs(Sc)do Tc[Uc]=Vc end end v.minigame_ddr=Tc end function F.start(Sc,Tc,Uc)F.init(Uc)v.minigame_ddr.return_window=Sc or"game"v.minigame_ddr.debug_song_key=Tc if Tc and B and B[Tc]then v.minigame_ddr.current_song=B[Tc]v.minigame_ddr.use_pattern=true v.minigame_ddr.pattern_index=1 v.minigame_ddr.debug_status="Pattern loaded: "..Tc else v.minigame_ddr.use_pattern=false if Tc then v.minigame_ddr.debug_status="Song not found: "..tostring(Tc)else v.minigame_ddr.debug_status="Random mode"end end a.set_current("minigame_ddr")end local function dc()local Sc=v.minigame_ddr local Tc=Sc.target_arrows[math.random(1,4)]table.insert(Sc.arrows,{dir=Tc.dir,x=Tc.x,y=Sc.bar_y+Sc.bar_height+10})end local function ec(Sc)local Tc=v.minigame_ddr for Uc,Vc in ipairs(Tc.target_arrows)do if Vc.dir==Sc then table.insert(Tc.arrows,{dir=Sc,x=Vc.x,y=Tc.bar_y+Tc.bar_height+10})break end end end local function fc(Sc)local Tc=v.minigame_ddr local Uc=math.abs(Sc.y-Tc.target_y)return Uc<=Tc.hit_threshold end local function gc(Sc)local Tc=v.minigame_ddr return Sc.y>Tc.target_y+Tc.hit_threshold end local function hc(Sc,Tc,Uc,Vc)local Wc=12 local Xc=Wc/2 if Uc=="left"then tri(Sc+Xc,Tc,Sc,Tc+Xc,Sc+Xc,Tc+Wc,Vc)rectb(Sc+Xc,Tc+Xc-2,Xc,4,Vc)elseif Uc=="right"then tri(Sc+Xc,Tc,Sc+Wc,Tc+Xc,Sc+Xc,Tc+Wc,Vc)rectb(Sc,Tc+Xc-2,Xc,4,Vc)elseif Uc=="up"then tri(Sc,Tc+Xc,Sc+Xc,Tc,Sc+Wc,Tc+Xc,Vc)rectb(Sc+Xc-2,Tc+Xc,4,Xc,Vc)elseif Uc=="down"then tri(Sc,Tc+Xc,Sc+Xc,Tc+Wc,Sc+Wc,Tc+Xc,Vc)rectb(Sc+Xc-2,Tc,4,Xc,Vc)end end function F.update()local Sc=v.minigame_ddr if Sc.win_timer>0 then Sc.win_timer=Sc.win_timer-1 if Sc.win_timer==0 then c.on_minigame_complete()if Sc.on_win then Sc.on_win()else c.show()a.set_current(Sc.return_window)end end return end if Sc.bar_fill>=Sc.max_fill then Sc.win_timer=u.timing.minigame_win_duration return end Sc.frame_counter=Sc.frame_counter+1 if Sc.use_pattern and Sc.current_song and Sc.current_song.end_frame then if Sc.frame_counter>Sc.current_song.end_frame and#Sc.arrows==0 then Sc.win_timer=u.timing.minigame_win_duration return end end if Sc.use_pattern and Sc.current_song and Sc.current_song.pattern then local Vc=Sc.current_song.pattern while Sc.pattern_index<=#Vc do local Wc=Vc[Sc.pattern_index]if Sc.frame_counter>=Wc.frame then ec(Wc.dir)Sc.pattern_index=Sc.pattern_index+1 else break end end else Sc.arrow_spawn_timer=Sc.arrow_spawn_timer+1 if Sc.arrow_spawn_timer>=Sc.arrow_spawn_interval then dc()Sc.arrow_spawn_timer=0 end end local Tc={}for Vc,Wc in ipairs(Sc.arrows)do Wc.y=Wc.y+Sc.arrow_fall_speed if gc(Wc)then table.insert(Tc,Vc)Sc.bar_fill=Sc.bar_fill-Sc.miss_penalty if Sc.bar_fill<0 then Sc.bar_fill=0 end end end for Vc=#Tc,1,-1 do table.remove(Sc.arrows,Tc[Vc])end for Vc,Wc in pairs(Sc.input_cooldowns)do if Sc.input_cooldowns[Vc]>0 then Sc.input_cooldowns[Vc]=Sc.input_cooldowns[Vc]-1 end end for Vc,Wc in pairs(Sc.button_pressed_timers)do if Sc.button_pressed_timers[Vc]>0 then Sc.button_pressed_timers[Vc]=Sc.button_pressed_timers[Vc]-1 end end local Uc={left=k.left(),down=k.down(),up=k.up(),right=k.right()}for Vc,Wc in pairs(Uc)do if Wc and Sc.input_cooldowns[Vc]==0 then Sc.input_cooldowns[Vc]=Sc.input_cooldown_duration Sc.button_pressed_timers[Vc]=Sc.button_press_duration local Xc=false for Yc,Zc in ipairs(Sc.arrows)do if Zc.dir==Vc and fc(Zc)then Sc.bar_fill=Sc.bar_fill+Sc.fill_per_hit if Sc.bar_fill>Sc.max_fill then Sc.bar_fill=Sc.max_fill end table.remove(Sc.arrows,Yc)Xc=true break end end if not Xc then Sc.bar_fill=Sc.bar_fill-2 if Sc.bar_fill<0 then Sc.bar_fill=0 end end end end end function F.draw()local Sc=v.minigame_ddr if not Sc 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 Sc.return_window=="game"then J.draw()end rect(0,0,u.screen.width,u.screen.height,u.colors.black)rect(Sc.bar_x-2,Sc.bar_y-2,Sc.bar_width+4,Sc.bar_height+4,u.colors.light_grey)rectb(Sc.bar_x-2,Sc.bar_y-2,Sc.bar_width+4,Sc.bar_height+4,u.colors.dark_grey)local Tc=(Sc.bar_fill/Sc.max_fill)*Sc.bar_width if Tc>0 then local Wc=u.colors.light_blue if Sc.bar_fill>66 then Wc=u.colors.item elseif Sc.bar_fill>33 then Wc=u.colors.blue end rect(Sc.bar_x,Sc.bar_y,Tc,Sc.bar_height,Wc)end local Uc=math.floor((Sc.bar_fill/Sc.max_fill)*100)j.text_center(Uc.."%",Sc.bar_x+Sc.bar_width/2,Sc.bar_y+2,u.colors.black)if Sc.target_arrows then for Wc,Xc in ipairs(Sc.target_arrows)do local Yc=Sc.button_pressed_timers[Xc.dir]and Sc.button_pressed_timers[Xc.dir]>0 local Zc=Yc and u.colors.light_blue or u.colors.light_grey hc(Xc.x,Sc.target_y,Xc.dir,Zc)end end if Sc.arrows then for Wc,Xc in ipairs(Sc.arrows)do hc(Xc.x,Xc.y,Xc.dir,u.colors.blue)end end j.text_center("Hit the arrows!",u.screen.width/2,Sc.bar_y+Sc.bar_height+10,u.colors.light_grey)local Vc=60 if Sc.debug_status then j.text_center(Sc.debug_status,u.screen.width/2,Vc,u.colors.item)Vc=Vc+10 end if Sc.use_pattern then j.text_center("PATTERN MODE - Frame:"..Sc.frame_counter,u.screen.width/2,Vc,u.colors.light_blue)if Sc.current_song and Sc.current_song.pattern then j.text_center("Pattern Len:"..#Sc.current_song.pattern.." Index:"..Sc.pattern_index,u.screen.width/2,Vc+10,u.colors.light_blue)end else j.text_center("RANDOM MODE",u.screen.width/2,Vc,u.colors.blue)end if Sc.win_timer>0 then d.draw_win_overlay()end end local ic="text"local jc="day"local kc="choice"local lc=[[ Misterious man appears during your sleep. He says nothing. He doesn't need to. He says nothing. ]]local mc=ic local nc=u.screen.height local oc=0.2 local pc=0 local qc=120 local rc=false local sc=0 local tc=120 local uc=1 local vc=lc local wc=nil local xc=nil local yc=true local zc=false local Ac={{label="Wake Up",},{label="Stay in Bed",},}function x.set_text(Sc)vc=Sc end function x.start(Sc)Sc=Sc or{}pc=0 rc=false sc=0 uc=1 vc=Sc.text or lc local Tc=1 for Vc in string.gmatch(vc,"\n")do Tc=Tc+1 end local Uc=Tc*8 nc=math.floor((u.screen.height-Uc)/2)wc=Sc.day_text xc=Sc.on_text_complete c.hide()zc=not Sc.skip_text if Sc.skip_text then yc=false mc=jc pc=qc else yc=true mc=ic end a.set_current("mysterious_man")end local function Bc()if xc then xc()xc=nil end if a.get_current_id()~="mysterious_man"then return end mc=jc pc=qc end local function Cc()v.home_norman_visible=false b.go_to_screen_by_id("home")y.start("game",{focus_center_x=(u.screen.width/2)-22,focus_center_y=(u.screen.height/2)-18,focus_initial_radius=0,target_points=100,instruction_text="Wake up Norman!",show_progress_text=false,on_win=function()m.music_play_wakingup()v.home_norman_visible=true c.show()if zc then zc=false t.start_flash()end a.set_current("game")end,})end local function Dc()o.increase()mc=jc pc=qc end function x.update()if mc==ic then if not rc then nc=nc-oc local Sc=1 for Tc in string.gmatch(vc,"\n")do Sc=Sc+1 end if nc<-Sc*8 then rc=true sc=tc end else sc=sc-1 if sc<=0 then Bc()end end elseif mc==jc then pc=pc-1 if pc<=0 or k.select()then if zc or t.get_level()<1 then Cc()else mc=kc uc=1 end end elseif mc==kc then uc=i.update_menu(Ac,uc)if k.select()then m.sfx_select()if uc==1 then Cc()else Dc()end end end end function x.draw()rect(0,0,u.screen.width,u.screen.height,u.colors.black)if yc then g.draw_the_mysterious_screen()end if mc==ic then local Sc=u.screen.width/2 local Tc=nc for Uc in(vc.."\n"):gmatch("(.-)\n")do j.text_center(Uc,Sc,Tc,u.colors.light_grey)Tc=Tc+8 end elseif mc==jc then local Sc=wc or("Day "..v.day_count)j.text_center(Sc,u.screen.width/2,u.screen.height/2-3,u.colors.white)elseif mc==kc then local Sc=(u.screen.width-60)/2 local Tc=(u.screen.height-20)/2 i.draw_menu(Ac,uc,Sc,Tc)end end local Ec=math.floor(u.screen.width*0.7)local Fc=math.floor(u.screen.height*0.3)local Gc=math.floor((u.screen.width-Ec)/2)local Hc=math.floor((u.screen.height-Fc)/2-8)local Ic=30 local Jc=8 local Kc=4 local Lc=12 local Mc=1 function N.draw()J.draw()local Sc=r.get_current_step()if not Sc then return end i.draw_textbox(Sc.question,Gc,Hc,Ec,Fc,v.discussion.scroll_y,u.colors.white,u.colors.dark_grey,u.colors.light_blue,true)local Tc=Sc.answers if#Tc>0 then local Uc=16 local Vc=u.screen.height-Uc rect(0,Vc,u.screen.width,Uc,u.colors.dark_grey)local Wc=Tc[v.discussion.selected_answer]local Xc=Wc.label local Yc=Vc+4 j.text("<",2,Yc,u.colors.light_blue)j.text_center(Xc,u.screen.width/2,Yc,u.colors.item)j.text(">",u.screen.width-6,Yc,u.colors.light_blue)end end function N.update()local Sc=r.get_current_step()if not Sc then return end local Tc=i.word_wrap(Sc.question,Ic)local Uc=#Tc*Jc local Vc=Fc-Kc*2 local Wc=Uc-Vc if Wc<0 then Wc=0 end if Wc>0 then if v.discussion.auto_scroll then v.discussion.scroll_timer=v.discussion.scroll_timer+1 if v.discussion.scroll_timer>=Lc then v.discussion.scroll_timer=0 v.discussion.scroll_y=v.discussion.scroll_y+Mc if v.discussion.scroll_y>Wc then v.discussion.scroll_y=Wc end end end else v.discussion.scroll_y=0 v.discussion.scroll_timer=0 end if k.up()then v.discussion.auto_scroll=false v.discussion.scroll_y=v.discussion.scroll_y-Jc if v.discussion.scroll_y<0 then v.discussion.scroll_y=0 end elseif k.down()then v.discussion.auto_scroll=false v.discussion.scroll_y=v.discussion.scroll_y+Jc if v.discussion.scroll_y>Wc then v.discussion.scroll_y=Wc end end local Xc=Sc.answers if#Xc>0 then if k.left()then m.sfx_beep()v.discussion.selected_answer=b.safeindex(Xc,v.discussion.selected_answer-1)elseif k.right()then m.sfx_beep()v.discussion.selected_answer=b.safeindex(Xc,v.discussion.selected_answer+1)end if k.select()then m.sfx_select()local Yc=Xc[v.discussion.selected_answer]if Yc.on_select then Yc.on_select()end r.go_to_step(Yc.next_step)end end end O.timer=300 O.text=[[ ### ### ### ### # # # # # # # # # ### ## # # # # # # # ### ### ### ### ### # # ### ### # # # # ### ## # # # ## # # # ## # # # # # # # # # # ## # # # ## # # ## # # # # # # # # # # # # # # # # ### ### # # # ### # # ### ### ## ]]function O.draw()cls(u.colors.black)s.draw(O.text,{})end function O.update()O.timer=O.timer-1 if O.timer<=0 or k.select()or k.menu_confirm()then a.set_current("menu")w.refresh_menu_items()end end local Nc={}local Oc=1 local function Pc(Sc)local Tc=g.get_by_id(v.game.current_screen)if not Tc then return end if Tc.background then h.draw(Tc.background)elseif Tc.background_color then rect(0,0,u.screen.width,u.screen.height,Tc.background_color)end if Sc then Sc()end if not v.stat_screen_active and#Nc>0 then e.draw(Nc,Oc)end l.draw()n.draw()Tc.draw()end function J.draw()Pc()end function J.draw_with_underlay(Sc)Pc(Sc)end function J.update()n.update()if k.menu_back()then a.set_current("menu")w.refresh_menu_items()return end local Sc=g.get_by_id(v.game.current_screen)if not Sc or not Sc.update then return end Sc.update()if v.game.current_situation then local Vc=f.get_by_id(v.game.current_situation)if Vc and type(Vc.update)=="function"then Vc.update()end end if v.stat_screen_active then return end local Tc=e.get_for_screen(Sc)Nc=e.filter_available(Tc)if#Nc==0 then return end if Oc>#Nc then Oc=1 end local Uc=e.update(Nc,Oc)if Uc~=Oc then Oc=Uc end if k.select()then local Vc=Nc[Oc]if Vc and Vc.handle then m.sfx_select()Vc.handle()end end end function J.set_state(Sc)a.set_current(Sc)end local Qc=false local function Rc()if Qc then return false end v.reset()a.set_current("intro_title")w.refresh_menu_items()Qc=true return true end function TIC()Rc()cls(u.colors.black)local Sc=a.get_current_handler()if Sc then Sc()end c.update()p.update()q.update()A.draw()t.update_fade()if v.game_in_progress then c.draw()p.draw()end t.draw_flash()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 -- 008:0000005a00005a55000055a50000a55a00005a5700005533000575f30000757f -- 009:55a50000a55a50005a55a00057555500fff7a5003f335a00fff3f500fffffa00 -- 016:0000000000000000000000000000003000000353000035350003535100353535 -- 017:0000000000000000000000003000000053300000151300005151300015151300 -- 018:004f99ff000fffff0000ff3300000fff00003666000355550035652503163555 -- 019:99f41000fff26000ff600000f600000063300000555330005555530055535530 -- 020:00356f6f003655f60365511f3653122f3531222f363221220532232203322322 -- 021:f6f530006f563000f1156300f2215300f2226300221233002232130022121300 -- 022:000000000000005100000155000055150000157f0000551300057f3f00017fff -- 023:00000000555000005155000015515000ff7f5100ff31f200fff3ff0033fff200 -- 024:0000057f00000005000000050000559900055911005599110055119900551199 -- 025:f3ff5000fff500005f5000004415100077995100449915007711955044119550 -- 026:00000000000001330001331300031333001333330031f7f7001133390031999f -- 027:0000000013310000131330003333130033333100f7f113003337310099975300 -- 028:000000000000000000000a77000057770005777700577777005775a50077a7ff -- 029:0000000000000000777a0000777750007777750077777750a5a57750fff7a770 -- 030:000000000000051500001151000555550001517f000557ff0001ff3f0007ff1f -- 031:00000000150000005110000055500000f7110000ff750000f3f10000f1f50000 -- 032:0033535100353533003351ff00351f3f0003ff3f0003ffff00003ff3000323ff -- 033:5555530033555300ff155300f3f15300f3ff3000ffff30003ff30000ff323000 -- 034:036135250316355503613525031633110333331103f333330333333300033333 -- 035:55565530555355305556553013335530133333303333ff303333333033330000 -- 036:00322322003223330033331a003ff31a003ff3a1003333a100003a1a00003a1a -- 037:223213003332130011133300111f300011133000111300001113000011130000 -- 038:000007ff0001117f0016171f0155175501561755155117555f7157555ff15755 -- 039:fffff700333f2000ffff7100555571105555716155557111555575ff555575ff -- 040:005599110055991100ff533300fff511007fff110007f5110000311300003113 -- 041:479915504499155047333f7014113ff011113f70111130003311300003113000 -- 042:0035777f0001776600005777000000550088885508bbb84508bbb8448bb8b844 -- 043:77775300677500007750000055880000558b8000548bb800228bbb80428b8b80 -- 044:005a7f3f0057ff3f07f7ffff07757fdf077a57fd0575357f005a66a70006aa6f -- 045:ff3f7a50ff3ff750fffff777ffdf7577ddf75a77ff75157577a66a50ff6aa600 -- 046:0005ffff00005ff3000005ff0017775500242777002121710024277100212171 -- 047:fff500003f500000f50000005771000077720000171200001772000017120000 -- 048:00323123003231430032314300313339000f3333000033300000333000033330 -- 049:324303003443030034430300933313003333f000033300000333000003333000 -- 050:0003333000033330000333300003333000053530003311300031113000333330 -- 051:3333000033330000333300003333000035350000311330003111300033333000 -- 052:000031a1000031a100003a1a00003a1a00003333000003f3000003f300000330 -- 053:111300001113000011130000111300003333000003f3000003f3000003300000 -- 054:5ff7646607f59999000991330003993000099130000133300001221000011100 -- 055:666646ff999993f7339913000039930000991300001333000012210000111000 -- 056:0000311300003113000031130000311300003113000033330000165100001111 -- 057:0311300003113000031130000311300003113000033330000165100001111000 -- 058:8888b8445f78b8445f58884405031330000331300003133000053550000577f0 -- 059:218b8880428b87f5218885f5031330500331300003133000053550000577f000 -- 060:0056aa66001f6aaa001fa666007f6aaa00006aaa0000a666000007d7000001d1 -- 061:666aa650aaaa6f106666af10aaaa6f70aaaa60006666a000007d7000001d1000 -- 062:0024277700ff611100fff333005f533300003333000033300000333000001110 -- 063:77720000116f0000335ff000333f000033300000333000003330000001110000 -- 064:00000000000000000000011100003311000111170003317f000117ff00553333 -- 065:0000000000000000110000001110000077110000ff710000ff77000013330000 -- 066:00000000000000330000033300003333000033f7000035ff000535ff0007f333 -- 067:0000000030000000333300003333000037f30000ffff0000ffff0000f333f000 -- 068:000000000000000000000000000000000000000000000122000012440001447f -- 069:00000000000000000000000000000000000000002210000044210000f7441000 -- 070:000000000000000000000333000038880003888800388881038388310338835f -- 071:00000000000000003330000088880000883380003355380016665300f7ff7300 -- 072:0000000000000000000000550000055500005577000057ff00007f55000fff33 -- 073:0000000000000000555550005555550077777550ffffff507f755f703f333fff -- 074:0000000000000011000001130000113100011313000131310013137c003131ff -- 075:000000001110000013110000313110001313100031313100ffff7100fffff100 -- 076:0000000000000055000005550000055500005577000057ff0007ff55000fff99 -- 077:0000000055550000555550005555500075775500fffff5005f555f703f993ff0 -- 078:0000000000000000000000000000000000001111000014440000144400001555 -- 079:0000000000000000000000000000000011100000441000004410000055100000 -- 080:0077533f000ff77f0005fff500005ff70000015f0005f315005ff3ff00ff3333 -- 081:f33f0000f77f00005ff000007f500000f500000053f00000f3f50000333f0000 -- 082:000fff330005ffff000057f50000007f000333350031313f0031313303113133 -- 083:ff33f000ffff100055f10000ff70000055330000ff3130003331300033311300 -- 084:000447ff000fffff0007f33f000ff11f000f7fff0000ff750000042400001142 -- 085:ff744000ffff1000f33f7000f11f5000fff7f00057ff00004240000044110000 -- 086:038383390338833b038383130338337f0383835f003838350003838300003333 -- 087:99539900bb33bb0099513900fffff530ff66f1007fff53001555310033333000 -- 088:000f7ff300005fff000007ff0000007f0000021f000024410002444400124244 -- 089:fff3ff7ff1ffff50fffff700111f7000ffff1000111142004244442042442410 -- 090:005f5733005f1f2300015fff0000077f00011117001244210144414201421444 -- 091:ff33f500ff23f500fffff00011ff500077710000112410004442410042441410 -- 092:00005fff000005ff0000001f0000000100000114000018140000181400018114 -- 093:fffff500111f5000fff500001110000042411000424180004241810042411100 -- 094:00001fff00001f3f0000cf3f0000cfff00000cf3000023cc000131ff001f1f11 -- 095:ff1000003f1000003ff00000fff00000fc000000c3200000f13100001f1f1000 -- 096:00ff33330033133305f333330ff31333033333330f5313330ff1311107f13333 -- 097:333f0000333f5000333f5000333ff000333330003335f500111ff5003337f000 -- 098:03113133031131330333313303113131033331320555313107ff313307ff3131 -- 099:333113003331130033333300213113004233330021317f0033317f5001317500 -- 100:0002441400244441024444240242442414424424144144241441442414414424 -- 101:4144210014444200424444204244422042444241424441414244414142444141 -- 102:000333330033a3530032a353003a332303a23333032a333303a23333032a3333 -- 103:3333300055353300553533002232323033333130333332303333313333333233 -- 104:001441440014424400144144001441240017f311001ff133001fff330007f333 -- 105:4244142042442410424414204244122012113f7031333ff033333ff030333f00 -- 106:01421444014414440142144431421444011111110fff1a5a0ff755a505755a51 -- 107:44441410424414104444141042441410111111105a5a55f5a5a5a5f5111a5170 -- 108:0001181400018114000118140001811300011333005fff33000f773300055333 -- 109:424181104241181042418110222318101113310033335ff03333f77033335500 -- 112:0553333300033330000333000033330000333300003333000011110000121200 -- 113:3330000033300000333000003330000033300000333000001111000012120000 -- 114:05f5313103003131033311310311113103111131003111300003333000012120 -- 115:0131130001311300013113000131130001311300003113000033330000121200 -- 116:0fff242407f72211005544200002442000024420000244200002222000024440 -- 117:424441f1112227f1024425500244200002442000024420000222200002444000 -- 118:0333333307ff333307f733330070333000003330000033300000111000001110 -- 119:33333575333331f1333335750033300000333000003330000011100000111100 -- 120:0000033300000333000003330000033300000333000003330000033300000111 -- 121:0033300000333000003330000033300000333000003330000033300010111100 -- 122:005015a100001a51000015a100001a51000015a1000022510000924900009999 -- 123:0315a150001a51000015a100001a51000015a100002251000092490000999900 -- 124:0000033300000333000003330000033300000333000003330000033300000111 -- 125:0333000003330000033300000333000003330000033300000333000000111000 -- 129:0000000000000000000000000000000000000000011515101151515151515151 -- 144:0000000500000015000000150000057f000005ff0000017f0000331700073331 -- 145:1ffffff7ff0fff0fff1fff1fffffffffff7555fffffffffffff111ff57fffff7 -- 146:1000000071000000f5000000ff000000ff500000ff5000007513100051333700 -- 160:0077333303331333333313333331333333313333355133335ff513335ff71111 -- 161:1111111133333333333337333333373333333733333337333333373311117711 -- 162:133337003733133077731330333331333333313333333155333337ff1111175f -- 176:0775333300031333000333130000333300001333000033330000033300000111 -- 177:3335773333333533333333331313131333333333300000033000000310000001 -- 178:3333357533331000331300001333000033310000333300003331000011110000 -- -- -- 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:00000000000000400040004000700070007000400040004000700070007000c000c000c000c000c000c000c000c000c000c000c000c000c000c000c0470000000000 -- 017:000000000000000000000000006000600060006000600060106020c030c050c060c080c0a0c0b0c0c0c0c0c0d0c0d0c0e0c0f0c0f0c0f0c0f0c0f0c0400000000000 -- 018:00c000c000c000c000c000c0006000600060006000600060200030005000600080009000a000b000c000d000d000e000e000e000f000f000f000f000500000000000 -- 019:0000000000000000000000d010d010d020d030d050d070d090d0b0d0c0d0e0d0f0d0f0d0f0d0f0d0f0d0f0d0f0d0f0d0f0d0f0d0f0d0f0d0f0d0f0d0500000000000 -- 020:090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900500000000000 -- 021:01000100010001000100f10001100110011001100110f11001200120012001200120f1201130113011302130213021302130313041308130a130d130580000000000 -- 032:010001100100011001000110010001100100010001000100010001000100010001000100010001000100010001000100010001000100010001000100400000000800 -- 033:000000010002000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d40000000004 -- 044:0600f6000620f6000600f6000610f600f600f6000600f600f600f600f6000600060006000600060006000600060006000600060006000600060006004600000f0f00 -- 045:0000f0000020f0000000f0000010f000f000f0000000f000f000f000f0000000000000000000000000000000000000000000000000000000000000004600000f0f00 -- 048:090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900400000000000 -- 056:4100510061406140717081709100b100c100d100e100e100e100f100f100f100f100f100f100f100f100f100f100f100f100f100f100f100f100f10058a000000600 -- 057:000000010002000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d40000000004 -- 058:41004110410041104100411041004110c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100500000080800 -- 059:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000 -- 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 -- 004:49998d000000e0088b000000b0088b000881e0088b00000040088d000000e0088b000881b0088b000000e0088b00000040088d000000e0088b000000b0088b000000e0088b00000040088d000000e0088b000000b0088b000000e0088b00000040088b000000e00889000000b00889000000e0088900000040088b000000e00889000000b00889000000e0088900000040088b000000e00889000000b00889000000e0088900000040088b000000e00889000000b00889000000e00889000000 -- 005:400881000000000881000000000881000000000000000000400883000000000000000000000000000000000000000000400881000000000000000000000000000000000000000000400883000000000000000000000000000000000000000000400881000000000000000000000000000000000000000000400883000000000000000000000000000000000000000000400881000000000000000000000000000000000000000000400883000000000000000000000000000000000000000000 -- -- -- 000:1000012000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff -- 001:581000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 --