diff --git a/SQ_Word_Hint-Image/c2runtime.js b/SQ_Word_Hint-Image/c2runtime.js index 2afbfb8..48fd68d 100644 --- a/SQ_Word_Hint-Image/c2runtime.js +++ b/SQ_Word_Hint-Image/c2runtime.js @@ -26022,8 +26022,8 @@ cr.getObjectRefTable = function () { return [ cr.plugins_.Function, cr.plugins_.SenaPlugin, cr.plugins_.Sprite, - cr.plugins_.Text, cr.plugins_.Touch, + cr.plugins_.Text, cr.behaviors.Rex_MoveTo, cr.behaviors.Fade, cr.behaviors.DragnDrop, @@ -26103,6 +26103,7 @@ cr.getObjectRefTable = function () { return [ cr.system_object.prototype.exps.len, cr.plugins_.SenaPlugin.prototype.acts.Finish, cr.plugins_.SenaPlugin.prototype.cnds.OnCorrect, + cr.plugins_.Sprite.prototype.acts.SetScale, cr.plugins_.Audio.prototype.acts.SetPaused, cr.plugins_.SenaPlugin.prototype.cnds.OnWrong, cr.system_object.prototype.cnds.EveryTick, @@ -26110,11 +26111,12 @@ cr.getObjectRefTable = function () { return [ cr.plugins_.SenaPlugin.prototype.exps.getElapsedTime, cr.system_object.prototype.exps["int"], cr.system_object.prototype.cnds.TriggerOnce, + cr.behaviors.Sin.prototype.acts.SetActive, + cr.behaviors.Fade.prototype.acts.SetFadeOutTime, + cr.behaviors.Fade.prototype.acts.RestartFade, cr.plugins_.Audio.prototype.acts.SetMuted, cr.system_object.prototype.acts.SetLayerVisible, cr.plugins_.Text.prototype.acts.SetVisible, cr.plugins_.SenaPlugin.prototype.acts.ResumeGame, - cr.system_object.prototype.cnds.LayerVisible, - cr.behaviors.Fade.prototype.acts.RestartFade, - cr.behaviors.Sin.prototype.acts.SetActive + cr.system_object.prototype.cnds.LayerVisible ];}; diff --git a/SQ_Word_Hint-Image/data.js b/SQ_Word_Hint-Image/data.js index 25dafc1..49de641 100644 --- a/SQ_Word_Hint-Image/data.js +++ b/SQ_Word_Hint-Image/data.js @@ -1 +1 @@ -{"project": [null,"Game",[[0,true,false,false,false,false,false,false,false,false],[1,true,false,false,false,false,false,false,false,false],[2,true,false,false,false,false,false,false,false,false],[3,true,false,false,false,false,false,false,false,false],[4,false,true,true,true,true,true,true,true,false],[5,false,true,true,true,true,true,true,true,false],[6,true,false,false,false,false,false,false,false,false]],[["t0",4,false,[864916470115508,671424700857603,742273295511675,915051182566084,438595278712365,792103718967953,139230516987381],5,0,null,[["Default",0,false,1,0,false,766361138730018,[["images/answers-sheet0.png",12383,0,0,199,85,1,0.5025125741958618,0.5058823823928833,[],[-0.3065325617790222,-0.2588233947753906,0.3015074133872986,-0.2588233947753906,0.3015074133872986,0.1411756277084351,-0.3065325617790222,0.1411766409873962],0]]]],[["MoveTo",7,604855247345446],["Fade",8,172183085978858],["DragDrop",9,421888048208530],["EaseTween",10,428975865074928],["EaseTween2",10,153601376400345]],false,false,521274050538780,[],null],["t1",6,false,[],0,0,null,null,[],false,false,786570836240034,[],null,[1]],["t2",2,false,[],0,0,null,null,[],false,false,293329078829759,[],null,[]],["t3",1,false,[],0,0,null,null,[],false,false,309246988327533,[],null,[]],["t4",4,false,[808559794937329,997079567163161,567648729382427,954939568499611,936471805758704],1,0,null,[["Default",0,false,1,0,false,163248314795401,[["images/answers-sheet0.png",12383,0,0,199,85,1,0.5025125741958618,0.5058823823928833,[],[-0.3366825580596924,-0.2941173911094666,0.3165824413299561,-0.3058823943138123,0.3165824413299561,0.1294116377830505,-0.346733570098877,0.1294116377830505],0],["images/slot-sheet0.png",11183,0,0,199,82,1,0.5025125741958618,0.5,[],[-0.3216085731983185,-0.2317070066928864,0.3015064001083374,-0.2439019978046417,0.2964824438095093,0.2195119857788086,-0.3216085731983185,0.2195119857788086],0]]]],[["Fade",8,900753873870093]],false,false,519636697009154,[],null],["t5",4,false,[],3,0,null,[["Default",0,false,1,0,false,157803278794484,[["images/submit-sheet0.png",146996,0,0,489,325,1,0.5010225176811218,0.5015384554862976,[],[],0]]]],[["Flash",11,745974027953346],["Sine",12,122174234324725],["Fade",8,470725043295066]],false,false,588453873694452,[],null],["t6",0,false,[],0,0,null,null,[],false,false,975221106550751,[],null,[0,0,0,1,1,600,600,10000,1]],["t7",4,false,[],0,0,null,[["Default",5,false,1,0,false,430849449557794,[["images/sprite-sheet0.png",168,0,0,250,250,1,0.5,0.5,[],[],0]]]],[],false,false,787263586433186,[],null],["t8",5,false,[],2,0,null,null,[["Pin",13,668111541658451],["Fade",8,143982287745535]],false,false,865512087815474,[],null],["t9",5,false,[],2,0,null,null,[["Pin",13,983629863781910],["Fade",8,863647630809957]],false,false,452023984157524,[],null],["t10",4,false,[],2,0,null,[["Default",5,false,1,0,false,325577231432987,[["images/wrong-sheet0.png",27271,0,0,140,140,1,0.5,0.5,[],[-0.08866998553276062,0.05115598440170288,0,-0.05821299552917481,0.08374398946762085,0.05821299552917481,0.07635402679443359,-0.001763999462127686,0.1009849905967712,-0.03351700305938721,0,0.1005499958992004,-0.105910986661911,-0.02645999193191528,-0.08374398946762085,-0.001763999462127686],0]]]],[["Fade",8,938090566638553],["Pin",13,922984705911085]],false,false,786659809200098,[],null],["t11",4,false,[],2,0,null,[["Default",5,false,1,0,false,199500828138837,[["images/correct-sheet0.png",31182,0,0,140,140,1,0.5,0.5071428418159485,[],[-0.03694498538970947,-0.01037183403968811,0,-0.05661284923553467,0.4187189936637878,-0.4319769442081451,0.08374398946762085,-0.004931867122650147,0,0.133790135383606,-0.280788004398346,0.2725121378898621,-0.03940901160240173,-0.004931867122650147],0]]]],[["Fade",8,351180598525433],["Pin",13,692899677986212]],false,false,185378619927884,[],null],["t12",4,false,[808308867875603],3,0,null,[["Default",5,false,1,0,false,761372550491219,[["images/setting-sheet0.png",48936,0,0,240,186,1,0.5166666507720947,0.4892473220825195,[],[-0.3041666448116303,-0.2150533199310303,-0.01666665077209473,-0.4838709831237793,0.3166663646697998,-0.2741933166980743,0.4666663408279419,0.01075267791748047,0.3666663765907288,0.3602146506309509,-0.01666665077209473,0.4193546772003174,-0.3624996542930603,0.3118276596069336,-0.4416666626930237,0.01075267791748047],0]]]],[["Anchor",14,827810656785535],["Fade",8,373179721574636],["Sine",12,657466709679600]],false,false,852469545845224,[],null],["t13",4,false,[],1,0,null,[["Default",5,false,1,0,false,200801003478463,[["images/khung_timer-sheet0.png",100737,0,0,589,178,1,0.5008488893508911,0.5,[],[-0.4601019024848938,-0.3651689887046814,-0.001697897911071777,-0.4943820238113403,0.4244481325149536,-0.2528089880943298,0.4940581321716309,0,0.4567061066627502,0.3595510125160217,-0.001697897911071777,0.4269660115242004,-0.4533106982707977,0.342697024345398,-0.4787775874137878,0],0]]]],[["Anchor",14,394428299090024]],false,false,684620172079747,[],null],["t14",5,false,[],2,0,null,null,[["Pin",13,456906837996025],["Fade",8,218728013988059]],false,false,438300487857361,[],null],["t15",4,false,[726951437591404],3,0,null,[["Default",0,false,1,0,false,954324372044250,[["images/pause-sheet0.png",32506,0,0,161,157,1,0.5031055808067322,0.5031847357749939,[],[-0.397515594959259,-0.3949047327041626,-0.006211578845977783,-0.4777070283889771,0.3913044333457947,-0.3949047327041626,0.4720494151115418,-0.006369739770889282,0.3913044333457947,0.3885352611541748,-0.006211578845977783,0.4649682641029358,-0.4037266969680786,0.3949042558670044,-0.47826087474823,-0.006369739770889282],0],["images/pause-sheet1.png",33467,0,0,161,157,1,0.5031055808067322,0.5031847357749939,[],[],0]]]],[["Fade",8,785646788309555],["Flash",11,834009854852752],["Anchor",14,236404692541993]],false,false,319934659610612,[],null],["t16",4,false,[],2,0,null,[["Default",5,false,1,0,false,157939326111053,[["images/boardsetting-sheet0.png",26164,0,0,252,779,1,0.5,0.5006418228149414,[],[-0.3055559992790222,-0.4377406239509583,0,-0.4813863337039948,0.2857139706611633,-0.4313222169876099,0.4523810148239136,-0.001283824443817139,0.3769840002059937,0.4595631957054138,0,0.4903721809387207,-0.3849210143089294,0.4621312022209168,-0.4722222089767456,-0.001283824443817139],0]]]],[["Fade",8,530783555522929],["Anchor",14,554124059792985]],false,false,991386743308625,[],null],["t17",4,false,[434240310643651],3,0,null,[["Default",0,false,1,0,false,502912810850035,[["images/bgm-sheet0.png",35024,0,0,161,157,1,0.5031055808067322,0.5031847357749939,[],[-0.397515594959259,-0.3949047327041626,-0.006211578845977783,-0.4777070283889771,0.3913044333457947,-0.3949047327041626,0.4720494151115418,-0.006369739770889282,0.3913044333457947,0.3885352611541748,-0.006211578845977783,0.4649682641029358,-0.397515594959259,0.3885352611541748,-0.4720496833324432,-0.006369739770889282],0],["images/bgm-sheet1.png",34782,0,0,161,157,1,0.5031055808067322,0.5031847357749939,[],[],0]]]],[["Flash",11,437429795024815],["Fade",8,914766587437933],["Anchor",14,735854623212753]],false,false,655092202092160,[],null],["t18",4,false,[],0,0,null,[["Default",5,false,1,0,false,178868238875737,[["images/pauseicon-sheet0.png",98983,0,0,1200,1200,1,0.5,0.5,[],[-0.3108330070972443,-0.3108330070972443,0,-0.4399999976158142,0.3108329772949219,-0.3108330070972443,0.4399999976158142,0,0.3108329772949219,0.3108329772949219,0,0.4399999976158142,-0.3108330070972443,0.3108329772949219,-0.4399999976158142,0],0]]]],[],false,false,826283508189587,[],null],["t19",4,false,[147049293532184],0,0,null,[["Default",5,false,1,0,false,805374628770208,[["images/black-sheet0.png",75440,0,0,1200,1200,1,0.5,0.5,[],[],1]]]],[],false,false,142600631683249,[],null],["t20",3,false,[],0,0,null,null,[],false,false,222049282078427,[],null,["G2510S1T30"]],["t21",4,false,[326267281121004],0,0,null,[["Default",0,false,1,0,false,607627309615016,[["images/hint-sheet0.png",194,0,0,300,300,1,0.5,0.5,[],[],3]]]],[],false,false,428987806910841,[],null],["t22",4,false,[],0,0,null,[["Default",5,false,1,0,false,742348772710335,[["images/imageframe-sheet0.png",480519,0,0,1183,1101,1,0.5004226565361023,0.5004541277885437,[],[-0.4175824522972107,-0.4114441275596619,-0.0008456707000732422,-0.4977293312549591,0.4530853629112244,-0.4504995346069336,0.4699913263320923,0.4677568674087524,-0.0008456707000732422,0.4822888970375061,-0.4725274443626404,0.4695728421211243],0]]]],[],false,false,989306383067724,[],null]],[],[["Game",1200,1200,false,"Game",288730111597454,[["Layer 0",0,763235347287340,true,[255,255,255],true,0,0,1,false,false,0,0,0,[[[580,532,0,2858.676025390625,2678.729248046875,0,0,0.1000000014901161,0.5,0.5,0,0,[]],19,25,[[0]],[],[0,"Default",0,1]],[[616.50048828125,356.50048828125,0,516.9990234375,516.9990234375,0,0,1,0.5,0.5,0,0,[]],21,31,[[""]],[],[0,"Default",0,1]],[[1119.002563476563,1027.569946289063,0,105,242,0,0,1,0.5,0.5006418228149414,0,0,[]],16,19,[],[[1,0.5,0,0,1],[1,1,1,1,1]],[1,"Default",0,1]],[[-1784,-72,0,241.2059936523438,128,0,0,1,0.5025125741958618,0.5058823823928833,0,0,[]],0,3,[[0],[0],[-1],[""],[0],[0],[0]],[[1,3000,1500,1500],[1,1,0,0,0],[0,1],[0,7,17,"current","100, 100",0.3,"0,0",0,0,0,0,""],[0,7,5,"current","100, 100",0.3,"0,0",0,0,0,0,""]],[0,"Default",0,1]],[[-3213,680,0,241.2059936523438,128,0,0,1,0.5025125741958618,0.5,0,0,[]],4,9,[[-1],[0],[""],[0],[0]],[[1,1,0,0,0]],[0,"Default",1,1]],[[-3356,1133,0,260.8450012207031,114.8960037231445,0,0,1,0.5,0.5,0,0,[]],8,18,[],[[],[1,1,0,0,0]],["Answer",0,"bold 36pt Segoe UI","rgb(255,255,255)",1,1,4,0,0]],[[1122.528442382813,1143.801879882813,0,147.1492614746094,114.0406723022461,0,0,1,0.5166666507720947,0.4892473220825195,0,0,[]],12,2,[[0]],[[1,1,1,1,1],[1,1,0,0,0],[0,2,0,0.5,0,0,0,10,0]],[0,"Default",0,1]],[[1058.62646484375,49.94869232177734,0,259.5465087890625,78.43680572509766,0,0,1,0.5008488893508911,0.5,0,0,[]],13,12,[],[[1,0,1,0,1]],[0,"Default",0,1]],[[1070.251831054688,47.12616729736328,0,141,43.34921264648438,0,0,1,0.5,0.5,0,0,[]],9,8,[],[[],[1,1,0,0,0]],["",0,"bold 23pt Comic Sans MS","rgb(255,255,255)",1,1,4,0,0]],[[-3089,1143,0,260.8450012207031,114.8960037231445,0,0,1,0.5,0.5,0,0,[]],14,1,[],[[],[1,1,0,0,0]],["Slot",0,"bold 36pt Segoe UI","rgb(255,255,255)",1,1,4,0,0]],[[1120,1052.932983398438,0,70,70,0,0,1,0.5031055808067322,0.5031847357749939,0,0,[]],15,11,[[0]],[[1,0.5,0,0,0],[],[1,1,1,1,1]],[1,"Default",0,1]],[[630,1098,0,212.5639190673828,141.2751617431641,0,0,1,0.5010225176811218,0.5015384554862976,0,0,[]],5,17,[],[[],[1,2,0,3,0,0,0,15,0],[1,1,0,0,0]],[1,"Default",0,1]],[[-3211,245,0,157.4040069580078,165.6880035400391,0,0,1,0.5,0.5,0,0,[]],10,23,[],[[1,0.5,0.5,0.5,1],[]],[0,"Default",0,1]],[[-2882,230,0,157.4039306640625,165.6883544921875,0,0,1,0.5,0.5071428418159485,0,0,[]],11,39,[],[[1,0.5,0.5,0.5,1],[]],[0,"Default",0,1]],[[1120,980.676025390625,0,70,70,0,0,1,0.5031055808067322,0.5031847357749939,0,0,[]],17,6,[[0]],[[],[1,0.5,0,0,1],[1,1,1,1,1]],[1,"Default",0,1]],[[600,360,0,629.3758544921875,629.3758544921875,0,0,1,0.5004226565361023,0.5004541277885437,0,0,[]],22,20,[],[],[0,"Default",0,1]]],[]],["Layer 2",1,317623978877020,false,[255,255,255],true,0,0,1,false,false,1,0,0,[[[628,605,0,2858.676025390625,2678.729248046875,0,0,0.699999988079071,0.5,0.5,0,0,[]],19,32,[[2]],[],[0,"Default",0,1]],[[642,568,0,640.9500732421875,640.9500732421875,0,0,1,0.5,0.5,0,0,[]],18,22,[],[],[0,"Default",0,1]]],[]]],[],[]]],[["Game",[[1,"gameState",1,"loading",false,false,539503153258101,false],[1,"OptionIndex",0,0,false,false,701702298089281,false],[1,"CurrentTime",0,10,false,false,706573264547386,false],[1,"FinalAnswer",1,"",false,false,342353772129151,false],[1,"FilledCount",0,0,false,false,377137633613480,false],[1,"tempScale",0,1,false,false,529411214032395,false],[0,null,false,null,549205817072564,[[-1,15,null,1,false,false,false,597870668036321,false]],[[6,16,null,287858449598328,false,[[2,["fm-freemusic-give-me-a-smile(chosic.com)",false]],[3,1],[0,[0,-20]],[1,[2,"bgm"]]]],[3,17,null,484332265761879,false,[[1,[2,"var script = document.createElement('script'); \nscript.src = 'tdv_sdk.js'; \nscript.onload = function() { tdv_sdk.load(); }; \ndocument.head.appendChild(script);"]]]],[9,18,null,151341647124838,false,[[0,[4,[20,9,19,false,null],[0,5]]]]],[9,20,"Pin",728791452299543,false,[[4,13],[3,0]]],[-1,21,null,530641639162875,false,[[0,[1,0.2]]]],[20,22,null,202557125263620,false]]],[0,null,false,null,768327268818740,[[20,23,null,1,false,false,false,157854561629165,false]],[[3,24,null,422861079647713,false,[[3,0],[7,[2,"Load dữ liệu xong"]]]],[3,24,null,445625785202613,false,[[3,0],[7,[20,20,25,true,null]]]]],[[0,null,false,null,939160499379423,[],[[20,26,null,112633710369332,false],[2,27,null,215312930941469,false,[[1,[2,"SetupUI"]],[13]]],[-1,21,null,253371712570850,false,[[0,[1,0.2]]]],[-1,28,null,486133403026538,false,[[11,"gameState"],[7,[2,"playing"]]]],[0,29,"DragDrop",702939057496858,false,[[3,1]]],[3,24,null,810649571245244,false,[[3,0],[7,[10,[2,"SenaAI Loaded & Started! Options count: "],[20,20,30,false,null]]]]],[21,31,null,310599052911762,false,[[1,[20,20,32,true,null]],[3,1],[3,0]]],[3,24,null,821665902069313,false,[[3,0],[7,[2,"✅ Load ảnh thành công!"]]]]]]]],[0,null,false,null,469683343531114,[[2,33,null,2,false,false,false,635946395803157,false,[[1,[2,"SetupUI"]]]]],[[-1,28,null,584838430715545,false,[[11,"tempScale"],[7,[19,34,[[1,0.6],[5,[1,0.85],[6,[5,[20,20,35,false,null],[0,5]],[1,0.02]]]]]]]],[-1,28,null,703212432169515,false,[[11,"OptionIndex"],[7,[0,0]]]],[8,36,null,365590215852144,false],[14,36,null,486127358962458,false],[4,37,null,633440992906642,false],[0,37,null,413353137320859,false],[20,38,null,721103392706320,false,[[0,[20,20,35,false,null]],[0,[6,[0,170],[23,"tempScale"]]],[0,[6,[0,80],[23,"tempScale"]]],[0,[19,39]],[0,[0,5]],[0,[0,110]],[1,[2,""]],[0,[0,0]]]],[-1,21,null,294999106583991,false,[[0,[1,0.1]]]]],[[0,null,false,null,818772103770432,[[-1,40,null,0,true,false,false,555929416085788,false,[[0,[20,20,35,false,null]]]]],[],[[0,null,false,null,547242560835316,[[-1,41,null,0,false,false,false,877854197778405,false,[[7,[20,20,42,false,null,[[19,43]]]],[8,0],[7,[2,"_"]]]]],[[-1,44,null,529231940398402,false,[[4,4],[5,[0,0]],[0,[0,0]],[0,[0,0]]]],[4,45,null,967054670316694,false,[[0,[20,20,46,false,null,[[19,43]]]]]],[4,47,null,209456412894052,false,[[0,[4,[0,740],[20,20,48,false,null,[[19,43]]]]]]],[4,49,null,330242308364274,false,[[0,[0,1]]]],[4,50,null,279735605037743,false,[[10,4],[7,[0,0]]]],[4,50,null,366398683821733,false,[[10,0],[7,[19,43]]]],[4,51,null,237476653512591,false,[[0,[6,[0,240],[23,"tempScale"]]]]],[4,52,null,194195365471827,false,[[0,[6,[0,128],[23,"tempScale"]]]]],[-1,44,null,218183575300166,false,[[4,14],[5,[0,0]],[0,[20,4,53,false,null]],[0,[20,4,54,false,null]]]],[14,55,null,719798625156369,false,[[7,[21,4,true,null,2]]]],[14,56,null,381190661272932,false,[[0,[6,[0,36],[23,"tempScale"]]]]],[14,20,"Pin",144161831841828,false,[[4,4],[3,0]]],[-1,44,null,158804323397018,false,[[4,0],[5,[0,0]],[0,[0,0]],[0,[0,0]]]],[0,45,null,297232278697438,false,[[0,[20,20,46,false,null,[[19,43]]]]]],[0,51,null,639732653866588,false,[[0,[6,[0,240],[23,"tempScale"]]]]],[0,52,null,895140568876541,false,[[0,[6,[0,128],[23,"tempScale"]]]]],[0,47,null,587783740511114,false,[[0,[4,[0,980],[20,20,48,false,null,[[19,43]]]]]]],[0,50,null,477751173409160,false,[[10,0],[7,[20,0,53,false,null]]]],[0,50,null,624620079132936,false,[[10,1],[7,[20,0,54,false,null]]]],[0,50,null,467295429465343,false,[[10,5],[7,[20,0,57,false,null]]]],[0,50,null,570907618326780,false,[[10,4],[7,[20,0,58,false,null]]]],[0,50,null,305816140066103,false,[[10,3],[7,[20,20,59,true,null,[[23,"OptionIndex"]]]]]],[0,50,null,208275951093237,false,[[10,6],[7,[23,"OptionIndex"]]]],[-1,44,null,700391576578773,false,[[4,8],[5,[0,0]],[0,[20,0,53,false,null]],[0,[20,0,54,false,null]]]],[8,55,null,887582977485405,false,[[7,[21,0,true,null,3]]]],[8,56,null,510242040434741,false,[[0,[6,[0,60],[23,"tempScale"]]]]],[8,20,"Pin",536232156900253,false,[[4,0],[3,0]]],[-1,60,null,980517036151889,false,[[11,"OptionIndex"],[7,[0,1]]]],[3,24,null,291934968882690,false,[[3,0],[7,[10,[10,[10,[10,[10,[2,"Loop: "],[19,43]],[2," | Hint: "]],[20,20,42,false,null,[[19,43]]]],[2," | PosX: "]],[20,20,46,false,null,[[19,43]]]]]]]]],[0,null,false,null,851574752132902,[[-1,61,null,0,false,false,false,420650084225255,false]],[[-1,44,null,841906877163449,false,[[4,4],[5,[0,0]],[0,[0,0]],[0,[0,0]]]],[4,45,null,954639983072654,false,[[0,[20,20,46,false,null,[[19,43]]]]]],[4,47,null,959613845047857,false,[[0,[4,[0,740],[20,20,48,false,null,[[19,43]]]]]]],[4,49,null,931727243563350,false,[[0,[0,0]]]],[4,50,null,156362694834211,false,[[10,4],[7,[0,1]]]],[4,50,null,169994928317654,false,[[10,0],[7,[19,43]]]],[4,51,null,837822934719717,false,[[0,[6,[0,240],[23,"tempScale"]]]]],[4,52,null,276919506051685,false,[[0,[6,[0,128],[23,"tempScale"]]]]],[-1,44,null,236430930253943,false,[[4,14],[5,[0,0]],[0,[20,4,53,false,null]],[0,[20,4,54,false,null]]]],[14,62,null,646874567585831,false],[14,55,null,306273385789856,false,[[7,[20,20,42,false,null,[[19,43]]]]]],[14,56,null,544208413938390,false,[[0,[6,[0,60],[23,"tempScale"]]]]],[14,20,"Pin",285484337748885,false,[[4,4],[3,0]]]]]]]]],[0,null,false,null,885232395664091,[[0,63,"DragDrop",1,false,false,false,462077248880784,false],[0,64,"DragDrop",0,false,false,false,881833931574563,false]],[[6,16,null,765474901635440,false,[[2,["card_drag",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[0,65,null,397403794429243,false],[0,66,"EaseTween",798607807460393,false,[[1,[10,[10,[6,[21,0,false,null,5],[1,1.25]],[2,","]],[6,[21,0,false,null,4],[1,1.25]]]]]],[0,67,"EaseTween",333043575480598,false]],[[0,null,false,null,715788682150145,[[-1,68,null,0,false,false,false,686462805859677,false,[[4,4],[7,[21,4,false,null,0]],[8,0],[7,[21,0,false,null,2]]]],[0,69,null,0,false,false,false,975555513158536,false,[[10,2],[8,1],[7,[0,-1]]]]],[[0,50,null,363961653226411,false,[[10,2],[7,[0,-1]]]],[4,50,null,745135912100760,false,[[10,4],[7,[0,0]]]],[2,27,null,741791155071768,false,[[1,[2,"CheckSubmitState"]],[13]]]]],[0,null,false,null,193892616913206,[[0,70,null,0,false,false,false,297897281213159,false,[[4,8]]]],[[8,62,null,812019026325329,false]]]]],[0,null,false,null,876456068332522,[[0,71,"DragDrop",1,false,false,false,792974910922911,false]],[[0,66,"EaseTween2",312326656063231,false,[[1,[10,[10,[21,0,false,null,5],[2,","]],[21,0,false,null,4]]]]],[0,67,"EaseTween2",997643361117365,false]],[[0,null,false,null,962248118287846,[[0,70,null,0,false,false,false,124677826324657,false,[[4,4]]],[4,69,null,0,false,false,false,852890087723952,false,[[10,4],[8,0],[7,[0,0]]]],[4,72,null,0,false,false,true,329422920654075,false,[[3,0],[0,[20,0,53,false,null]],[0,[20,0,54,false,null]]]]],[[6,16,null,400234397175915,false,[[2,["pop-reverb-423718",false]],[3,0],[0,[0,-5]],[1,[2,""]]]],[0,73,null,464777312492432,false,[[0,[20,4,53,false,null]],[0,[20,4,54,false,null]]]],[4,50,null,413746821094201,false,[[10,4],[7,[0,1]]]],[0,50,null,290353637263798,false,[[10,2],[7,[21,4,false,null,0]]]],[0,51,null,262746395317933,false,[[0,[20,4,57,false,null]]]],[4,52,null,930580622453040,false,[[0,[20,4,58,false,null]]]],[2,27,null,648297693202608,false,[[1,[2,"CheckSubmitState"]],[13]]]]],[0,null,false,null,544622279635595,[[-1,61,null,0,false,false,false,108034191530448,false]],[[6,16,null,457959652468953,false,[[2,["card_swipe",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[0,73,null,722026847214927,false,[[0,[21,0,false,null,0]],[0,[21,0,false,null,1]]]],[2,27,null,174110906329546,false,[[1,[2,"CheckSubmitState"]],[13]]]]]]],[0,null,false,null,903256601857551,[[2,33,null,2,false,false,false,553171385010499,false,[[1,[2,"CheckSubmitState"]]]]],[[-1,28,null,151584341392847,false,[[11,"FilledCount"],[7,[0,0]]]]],[[0,null,false,null,326454811928491,[[-1,74,null,0,true,false,false,900563057628926,false,[[4,0]]]],[],[[0,null,false,null,512468327333204,[[0,69,null,0,false,false,false,273625493381606,false,[[10,2],[8,1],[7,[0,-1]]]]],[[-1,60,null,427897992150255,false,[[11,"FilledCount"],[7,[0,1]]]]]]]],[0,null,false,null,197957600391126,[[-1,75,null,0,false,false,false,676094959731453,false,[[11,"FilledCount"],[8,0],[7,[20,0,76,false,null]]]]],[[5,77,null,871171250612987,false,[[3,1]]]]],[0,null,false,null,830039838453468,[[-1,61,null,0,false,false,false,540974332855602,false]],[[5,77,null,801779902196330,false,[[3,0]]]]]]],[0,null,false,null,956282998966849,[[1,78,null,1,false,false,false,460379891558451,false,[[4,5]]],[5,79,null,0,false,false,false,271469166922398,false]],[[20,80,null,658653282719226,false],[-1,28,null,529456506010094,false,[[11,"FinalAnswer"],[7,[2,""]]]],[6,16,null,813632462410441,false,[[2,["button-124476",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[5,81,"Flash",388147726390308,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,725241333542329,false,[[0,[1,0.5]]]]],[[0,null,false,null,667347878010134,[[-1,40,null,0,true,false,false,389186915205398,false,[[0,[20,20,35,false,null]]]]],[],[[0,null,false,null,631589558920999,[[-1,41,null,0,false,false,false,253358370212568,false,[[7,[20,20,42,false,null,[[19,43]]]],[8,0],[7,[2,"_"]]]]],[],[[0,null,false,null,403636493907996,[[0,69,null,0,false,false,false,526836686186341,false,[[10,2],[8,0],[7,[19,43]]]]],[[-1,28,null,245728951174934,false,[[11,"FinalAnswer"],[7,[10,[10,[23,"FinalAnswer"],[21,0,true,null,3]],[2,"|"]]]]]]]]],[0,null,false,null,998053537243308,[[-1,61,null,0,false,false,false,403067100774907,false]],[[-1,28,null,357495810182952,false,[[11,"FinalAnswer"],[7,[10,[10,[23,"FinalAnswer"],[20,20,42,false,null,[[19,43]]]],[2,"|"]]]]]]]]],[0,null,false,null,903901720494647,[[-1,75,null,0,false,false,false,745073279826626,false,[[11,"FinalAnswer"],[8,1],[7,[2,""]]]]],[[-1,28,null,814546508270084,false,[[11,"FinalAnswer"],[7,[19,82,[[23,"FinalAnswer"],[5,[19,83,[[23,"FinalAnswer"]]],[0,1]]]]]]],[20,84,null,171040983658447,false,[[7,[23,"FinalAnswer"]]]],[5,77,null,498358887136483,false,[[3,0]]]]]]],[0,null,false,null,961823775126713,[[20,85,null,1,false,false,false,119018979468992,false]],[[0,29,"DragDrop",205409471313749,false,[[3,0]]],[-1,28,null,586954232758008,false,[[11,"gameState"],[7,[2,"End"]]]],[6,16,null,634975830871135,false,[[2,["alert-234711",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[5,77,null,486294929517038,false,[[3,0]]],[-1,21,null,166118146748558,false,[[0,[1,0.1]]]],[-1,44,null,786114696442570,false,[[4,11],[5,[0,0]],[0,[20,5,53,false,null]],[0,[20,5,54,false,null]]]],[-1,21,null,609402064923823,false,[[0,[0,2]]]],[20,80,null,518261006133178,false],[6,86,null,237082226128838,false,[[1,[2,"bgm"]],[3,0]]]]],[0,null,false,null,433043078641250,[[20,87,null,1,false,false,false,889460128806113,false]],[[0,29,"DragDrop",146493902040842,false,[[3,0]]],[-1,28,null,425380409098219,false,[[11,"gameState"],[7,[2,"End"]]]],[6,16,null,221256152272583,false,[[2,["error-010-206498",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[5,77,null,523842542618557,false,[[3,0]]],[-1,21,null,773344591454861,false,[[0,[1,0.1]]]],[-1,44,null,165468245100549,false,[[4,10],[5,[0,0]],[0,[20,5,53,false,null]],[0,[20,5,54,false,null]]]],[-1,21,null,585683943374630,false,[[0,[0,2]]]],[20,80,null,192197113002945,false],[6,86,null,781814464998406,false,[[1,[2,"bgm"]],[3,0]]]]],[0,null,false,null,305413044561801,[[-1,88,null,0,false,false,false,337036644147098,false],[-1,75,null,0,false,false,false,635967494112949,false,[[11,"gameState"],[8,0],[7,[2,"playing"]]]]],[[-1,28,null,978291331980230,false,[[11,"CurrentTime"],[7,[19,34,[[0,0],[5,[20,20,89,false,null],[20,20,90,false,null]]]]]]],[9,55,null,899951685623283,false,[[7,[19,91,[[23,"CurrentTime"]]]]]]],[[0,null,false,null,160552091445616,[[-1,75,null,0,false,false,false,812605816898326,false,[[11,"CurrentTime"],[8,0],[7,[0,0]]]],[-1,75,null,0,false,false,false,792184163830960,false,[[11,"gameState"],[8,0],[7,[2,"playing"]]]]],[],[[0,null,false,null,197153245673402,[[-1,92,null,0,false,false,false,676651290174087,false]],[[-1,28,null,617362064114178,false,[[11,"FinalAnswer"],[7,[2,""]]]],[20,80,null,155532853895121,false],[0,29,"DragDrop",256788591439037,false,[[3,0]]],[20,84,null,624217562823456,false,[[7,[23,"FinalAnswer"]]]]]]]]]],[0,null,false,null,312687717900328,[[1,78,null,1,false,false,false,444391347231568,false,[[4,17]]],[17,69,null,0,false,false,false,165882449365670,false,[[10,0],[8,0],[7,[0,0]]]],[17,79,null,0,false,false,false,218006519748153,false],[-1,75,null,0,false,false,false,652255324849389,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[17,49,null,744920239729365,false,[[0,[0,1]]]],[6,16,null,814990443653107,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[17,81,"Flash",288546904750114,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,225438922954531,false,[[0,[1,0.5]]]],[6,93,null,554558762518759,false,[[1,[2,"bgm"]],[3,0]]],[17,50,null,117506203877028,false,[[10,0],[7,[0,1]]]]]],[0,null,false,null,983825517389982,[[1,78,null,1,false,false,false,177138363351836,false,[[4,17]]],[17,69,null,0,false,false,false,772247454962354,false,[[10,0],[8,0],[7,[0,1]]]],[17,79,null,0,false,false,false,420178685359629,false],[-1,75,null,0,false,false,false,393533749442901,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[17,49,null,552019651456125,false,[[0,[0,0]]]],[6,16,null,197222371360236,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[17,81,"Flash",270092195858284,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,326299332281639,false,[[0,[1,0.5]]]],[6,93,null,964958154773645,false,[[1,[2,"bgm"]],[3,1]]],[17,50,null,506698549832256,false,[[10,0],[7,[0,0]]]]]],[0,null,false,null,294769773047529,[[1,78,null,1,false,false,false,352106017539969,false,[[4,15]]],[15,69,null,0,false,false,false,358413375274332,false,[[10,0],[8,0],[7,[0,0]]]],[15,79,null,0,false,false,false,721902056257835,false],[-1,75,null,0,false,false,false,452955490819604,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[20,80,null,431466008645395,false],[15,49,null,981623485925509,false,[[0,[0,1]]]],[6,16,null,547261484638917,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[15,81,"Flash",221991481168028,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,851078194326314,false,[[0,[1,0.5]]]],[-1,94,null,402526527434402,false,[[5,[0,2]],[3,1]]],[0,77,null,855238512615337,false,[[3,0]]],[4,77,null,207839358302464,false,[[3,0]]],[8,95,null,222466351625496,false,[[3,0]]],[14,95,null,251839098840947,false,[[3,0]]],[21,77,null,153839374117437,false,[[3,0]]],[22,77,null,665223389941520,false,[[3,0]]],[0,29,"DragDrop",759856544888894,false,[[3,0]]],[6,93,null,706457060725101,false,[[1,[2,"bgm"]],[3,0]]],[15,50,null,399990244603092,false,[[10,0],[7,[0,1]]]]]],[0,null,false,null,532748443231555,[[1,78,null,1,false,false,false,419213596136778,false,[[4,15]]],[15,69,null,0,false,false,false,926326957937606,false,[[10,0],[8,0],[7,[0,1]]]],[15,79,null,0,false,false,false,804823921411396,false],[-1,75,null,0,false,false,false,711255171830416,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[20,96,null,977450185168128,false],[15,49,null,670063708965675,false,[[0,[0,0]]]],[6,16,null,372275331971085,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[15,81,"Flash",113742305896573,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,900385124097116,false,[[0,[1,0.5]]]],[-1,94,null,695331528906453,false,[[5,[0,2]],[3,0]]],[0,77,null,338279072626337,false,[[3,1]]],[4,77,null,371330338747864,false,[[3,1]]],[8,95,null,358503142678550,false,[[3,1]]],[14,95,null,192887026023526,false,[[3,1]]],[21,77,null,584652547292123,false,[[3,1]]],[22,77,null,409790138347585,false,[[3,1]]],[0,29,"DragDrop",886574462493362,false,[[3,1]]],[6,93,null,693317578489009,false,[[1,[2,"bgm"]],[3,1]]],[15,50,null,468211770946126,false,[[10,0],[7,[0,0]]]]]],[0,null,false,null,297063884609973,[[1,78,null,1,false,false,false,386622849542303,false,[[4,18]]],[-1,97,null,0,false,false,false,363257598466262,false,[[5,[0,2]]]],[-1,75,null,0,false,false,false,975353017499120,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[20,96,null,815752088305315,false],[15,49,null,209418858141601,false,[[0,[0,0]]]],[6,16,null,892125720911145,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[15,81,"Flash",926038900680013,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,821647409423555,false,[[0,[1,0.5]]]],[-1,94,null,480813966183110,false,[[5,[0,2]],[3,0]]],[0,77,null,876609529855384,false,[[3,1]]],[4,77,null,136625999145606,false,[[3,1]]],[8,95,null,927964586528148,false,[[3,1]]],[14,95,null,155360850450853,false,[[3,1]]],[21,77,null,825641412491834,false,[[3,1]]],[22,77,null,539962716879397,false,[[3,1]]],[0,29,"DragDrop",695861965483617,false,[[3,1]]],[6,93,null,652969105932762,false,[[1,[2,"bgm"]],[3,1]]],[15,50,null,943722776633160,false,[[10,0],[7,[0,0]]]]]],[0,null,false,null,792955897157891,[[2,33,null,2,false,false,false,979301415560581,false,[[1,[2,"Fade"]]]]],[[16,98,"Fade",820129408251933,false],[15,98,"Fade",948221853487772,false],[17,98,"Fade",225126965271644,false]]],[0,null,false,null,955859035444991,[[1,78,null,1,false,false,false,518910668901033,false,[[4,12]]],[12,69,null,0,false,false,false,290396959315441,false,[[10,0],[8,0],[7,[0,0]]]],[-1,75,null,0,false,false,false,373560664487770,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[2,27,null,275245060006677,false,[[1,[2,"SettingOnTop"]],[13]]],[6,16,null,444001414569356,false,[[2,["button-124476",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[12,99,"Sine",818098073409429,false,[[3,1]]],[-1,21,null,441096782479652,false,[[0,[1,0.5]]]],[16,77,null,794558327843409,false,[[3,1]]],[15,77,null,679301757369962,false,[[3,1]]],[17,77,null,767519360841597,false,[[3,1]]],[2,27,null,793350220956891,false,[[1,[2,"Fade"]],[13]]],[12,50,null,261563617571114,false,[[10,0],[7,[0,1]]]],[12,99,"Sine",245771226696928,false,[[3,0]]]]],[0,null,false,null,467571648016628,[[1,78,null,1,false,false,false,432350690749805,false,[[4,12]]],[12,69,null,0,false,false,false,815726735468093,false,[[10,0],[8,0],[7,[0,1]]]],[-1,75,null,0,false,false,false,597573303419198,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[2,27,null,780503669536830,false,[[1,[2,"SettingOnTop"]],[13]]],[6,16,null,747877391706105,false,[[2,["button-124476",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[12,99,"Sine",128949433029818,false,[[3,1]]],[-1,21,null,827176291493130,false,[[0,[1,0.5]]]],[16,77,null,591127776141805,false,[[3,0]]],[15,77,null,854152891397620,false,[[3,0]]],[17,77,null,646200193534642,false,[[3,0]]],[-1,21,null,891033434354753,false,[[0,[1,0.1]]]],[12,50,null,461824223198453,false,[[10,0],[7,[0,0]]]],[12,99,"Sine",784451994863195,false,[[3,0]]]]],[0,null,false,null,567365687078455,[[2,33,null,2,false,false,false,765233055415434,false,[[1,[2,"SettingOnTop"]]]]],[[16,65,null,194954903368303,false],[15,65,null,287268448052854,false],[17,65,null,706962380651923,false],[12,65,null,603985316719836,false]]]]]],[["alert-234711.ogg",23907],["bubble-pop-389501.ogg",18257],["button-124476.ogg",13157],["collect-5930.ogg",10731],["error-010-206498.ogg",11425],["error-08-206492.ogg",15621],["pop-reverb-423718.ogg",23653],["fm-freemusic-give-me-a-smile(chosic.com).ogg",2747008],["card_drag.ogg",7213],["card_flips.ogg",8015],["card_swipe.ogg",9018]],"media/",false,1200,1200,3,true,true,true,"1.0.0.0",true,false,3,0,40,false,true,1,true,"SQ_Word_Hint-Image",0,[]]} \ No newline at end of file +{"project": [null,"Game",[[0,true,false,false,false,false,false,false,false,false],[1,true,false,false,false,false,false,false,false,false],[2,true,false,false,false,false,false,false,false,false],[3,true,false,false,false,false,false,false,false,false],[4,false,true,true,true,true,true,true,true,false],[5,true,false,false,false,false,false,false,false,false],[6,false,true,true,true,true,true,true,true,false]],[["t0",4,false,[864916470115508,671424700857603,742273295511675,915051182566084,438595278712365,792103718967953,139230516987381],5,0,null,[["Default",0,false,1,0,false,766361138730018,[["images/answers-sheet0.png",12383,0,0,199,85,1,0.5025125741958618,0.5058823823928833,[],[-0.5025125741958618,-0.5058823823928833,0.4824119806289673,-0.5058823823928833,0.4974874258041382,0.4941176176071167,-0.5025125741958618,0.4941176176071167],0]]]],[["MoveTo",7,604855247345446],["Fade",8,172183085978858],["DragDrop",9,421888048208530],["EaseTween",10,428975865074928],["EaseTween2",10,153601376400345]],false,false,521274050538780,[],null],["t1",5,false,[],0,0,null,null,[],false,false,786570836240034,[],null,[1]],["t2",2,false,[],0,0,null,null,[],false,false,293329078829759,[],null,[]],["t3",1,false,[],0,0,null,null,[],false,false,309246988327533,[],null,[]],["t4",4,false,[808559794937329,997079567163161,567648729382427,954939568499611,936471805758704],1,0,null,[["Default",0,false,1,0,false,163248314795401,[["images/answers-sheet0.png",12383,0,0,199,85,1,0.5025125741958618,0.5058823823928833,[],[-0.3366825580596924,-0.2941173911094666,0.3165824413299561,-0.3058823943138123,0.3165824413299561,0.1294116377830505,-0.346733570098877,0.1294116377830505],0],["images/slot-sheet0.png",11183,0,0,199,82,1,0.5025125741958618,0.5,[],[-0.3216085731983185,-0.2317070066928864,0.3015064001083374,-0.2439019978046417,0.2964824438095093,0.2195119857788086,-0.3216085731983185,0.2195119857788086],0]]]],[["Fade",8,900753873870093]],false,false,519636697009154,[],null],["t5",4,false,[],3,0,null,[["Default",0,false,1,0,false,157803278794484,[["images/submit-sheet0.png",146996,0,0,489,325,1,0.5010225176811218,0.5015384554862976,[],[],0]]]],[["Flash",11,745974027953346],["Sine",12,122174234324725],["Fade",8,470725043295066]],false,false,588453873694452,[],null],["t6",0,false,[],0,0,null,null,[],false,false,975221106550751,[],null,[0,0,0,1,1,600,600,10000,1]],["t7",4,false,[],0,0,null,[["Default",5,false,1,0,false,430849449557794,[["images/sprite-sheet0.png",168,0,0,250,250,1,0.5,0.5,[],[],0]]]],[],false,false,787263586433186,[],null],["t8",6,false,[],2,0,null,null,[["Pin",13,668111541658451],["Fade",8,143982287745535]],false,false,865512087815474,[],null],["t9",6,false,[],2,0,null,null,[["Pin",13,983629863781910],["Fade",8,863647630809957]],false,false,452023984157524,[],null],["t10",4,false,[],2,0,null,[["Default",5,false,1,0,false,325577231432987,[["images/wrong-sheet0.png",48153,0,0,300,300,1,0.5,0.5,[],[],0]]]],[["Fade",8,938090566638553],["Pin",13,922984705911085]],false,false,786659809200098,[],null],["t11",4,false,[],2,0,null,[["Default",5,false,1,0,false,199500828138837,[["images/correct-sheet0.png",36773,0,0,300,300,1,0.5,0.5,[],[],0]]]],[["Fade",8,351180598525433],["Pin",13,692899677986212]],false,false,185378619927884,[],null],["t12",4,false,[808308867875603],3,0,null,[["Default",5,false,1,0,false,761372550491219,[["images/setting-sheet0.png",48936,0,0,240,186,1,0.5166666507720947,0.4892473220825195,[],[-0.3041666448116303,-0.2150533199310303,-0.01666665077209473,-0.4838709831237793,0.3166663646697998,-0.2741933166980743,0.4666663408279419,0.01075267791748047,0.3666663765907288,0.3602146506309509,-0.01666665077209473,0.4193546772003174,-0.3624996542930603,0.3118276596069336,-0.4416666626930237,0.01075267791748047],0]]]],[["Anchor",14,827810656785535],["Fade",8,373179721574636],["Sine",12,657466709679600]],false,false,852469545845224,[],null],["t13",4,false,[],1,0,null,[["Default",5,false,1,0,false,200801003478463,[["images/khung_timer-sheet0.png",27543,0,0,400,200,1,0.5,0.5,[],[],0]]]],[["Anchor",14,394428299090024]],false,false,684620172079747,[],null],["t14",6,false,[],2,0,null,null,[["Pin",13,456906837996025],["Fade",8,218728013988059]],false,false,438300487857361,[],null],["t15",4,false,[726951437591404],3,0,null,[["Default",0,false,1,0,false,954324372044250,[["images/pause-sheet0.png",32506,0,0,161,157,1,0.5031055808067322,0.5031847357749939,[],[-0.397515594959259,-0.3949047327041626,-0.006211578845977783,-0.4777070283889771,0.3913044333457947,-0.3949047327041626,0.4720494151115418,-0.006369739770889282,0.3913044333457947,0.3885352611541748,-0.006211578845977783,0.4649682641029358,-0.4037266969680786,0.3949042558670044,-0.47826087474823,-0.006369739770889282],0],["images/pause-sheet1.png",33467,0,0,161,157,1,0.5031055808067322,0.5031847357749939,[],[],0]]]],[["Fade",8,785646788309555],["Flash",11,834009854852752],["Anchor",14,236404692541993]],false,false,319934659610612,[],null],["t16",4,false,[],2,0,null,[["Default",5,false,1,0,false,157939326111053,[["images/boardsetting-sheet0.png",26164,0,0,252,779,1,0.5,0.5006418228149414,[],[-0.3055559992790222,-0.4377406239509583,0,-0.4813863337039948,0.2857139706611633,-0.4313222169876099,0.4523810148239136,-0.001283824443817139,0.3769840002059937,0.4595631957054138,0,0.4903721809387207,-0.3849210143089294,0.4621312022209168,-0.4722222089767456,-0.001283824443817139],0]]]],[["Fade",8,530783555522929],["Anchor",14,554124059792985]],false,false,991386743308625,[],null],["t17",4,false,[434240310643651],3,0,null,[["Default",0,false,1,0,false,502912810850035,[["images/bgm-sheet0.png",35024,0,0,161,157,1,0.5031055808067322,0.5031847357749939,[],[-0.397515594959259,-0.3949047327041626,-0.006211578845977783,-0.4777070283889771,0.3913044333457947,-0.3949047327041626,0.4720494151115418,-0.006369739770889282,0.3913044333457947,0.3885352611541748,-0.006211578845977783,0.4649682641029358,-0.397515594959259,0.3885352611541748,-0.4720496833324432,-0.006369739770889282],0],["images/bgm-sheet1.png",34782,0,0,161,157,1,0.5031055808067322,0.5031847357749939,[],[],0]]]],[["Flash",11,437429795024815],["Fade",8,914766587437933],["Anchor",14,735854623212753]],false,false,655092202092160,[],null],["t18",4,false,[],1,0,null,[["Default",5,false,1,0,false,178868238875737,[["images/pauseicon-sheet0.png",61774,0,0,300,300,1,0.5,0.5,[],[],0]]]],[["Sine",12,903218504057510]],false,false,826283508189587,[],null],["t19",4,false,[147049293532184],0,0,null,[["Default",5,false,1,0,false,805374628770208,[["images/black-sheet0.png",75440,0,0,1200,1200,1,0.5,0.5,[],[],1]]]],[],false,false,142600631683249,[],null],["t20",3,false,[],0,0,null,null,[],false,false,222049282078427,[],null,["G2610S1T15"]],["t21",4,false,[326267281121004],0,0,null,[["Default",0,false,1,0,false,607627309615016,[["images/hint-sheet0.png",194,0,0,300,300,1,0.5,0.5,[],[],3]]]],[],false,false,428987806910841,[],null],["t22",4,false,[],0,0,null,[["Default",5,false,1,0,false,742348772710335,[["images/imageframe-sheet0.png",480519,0,0,1183,1101,1,0.5004226565361023,0.5004541277885437,[],[-0.4175824522972107,-0.4114441275596619,-0.0008456707000732422,-0.4977293312549591,0.4530853629112244,-0.4504995346069336,0.4699913263320923,0.4677568674087524,-0.0008456707000732422,0.4822888970375061,-0.4725274443626404,0.4695728421211243],0]]]],[],false,false,989306383067724,[],null],["t23",4,false,[],3,0,null,[["Default",5,false,1,0,false,526433650557355,[["images/timeup-sheet0.png",18236,0,0,600,200,1,0.5,0.5,[],[-0.3683333396911621,-0.1049999892711639,0,-0.4050000011920929,0.3666666746139526,-0.09999999403953552,0.3666666746139526,0.1000000238418579,0,0.3999999761581421,-0.3666666746139526,0.1000000238418579],0]]]],[["EaseTween",10,760125664012815],["Fade",8,866146229123006],["Sine",12,472805430845285]],false,false,188024606698948,[],null]],[],[["Game",1200,1200,false,"Game",288730111597454,[["Layer 0",0,763235347287340,true,[255,255,255],true,0,0,1,false,false,0,0,0,[[[578.7386474609375,528.845703125,0,2858.676025390625,2678.729248046875,0,0,0.1000000014901161,0.5,0.5,0,0,[]],19,25,[[0]],[],[0,"Default",0,1]],[[616.50048828125,356.50048828125,0,516.9990234375,516.9990234375,0,0,1,0.5,0.5,0,0,[]],21,31,[[""]],[],[0,"Default",0,1]],[[1096.041625976563,952.75634765625,0,134.9133605957031,334.9425048828125,0,0,1,0.5,0.5006418228149414,0,0,[]],16,19,[],[[1,0.5,0,0,1],[1,1,1,1,1]],[1,"Default",0,1]],[[-2515,-92,0,241.2059936523438,128,0,0,1,0.5025125741958618,0.5058823823928833,0,0,[]],0,3,[[0],[0],[-1],[""],[0],[0],[0]],[[1,3000,1500,1500],[1,1,0,0,0],[0,1],[0,7,17,"current","100, 100",0.3,"0,0",0,0,0,0,""],[0,7,5,"current","100, 100",0.3,"0,0",0,0,0,0,""]],[0,"Default",0,1]],[[-3213,680,0,241.2059936523438,128,0,0,1,0.5025125741958618,0.5,0,0,[]],4,9,[[-1],[0],[""],[0],[0]],[[1,1,0,0,0]],[0,"Default",1,1]],[[-3356,1133,0,260.8450012207031,114.8960037231445,0,0,1,0.5,0.5,0,0,[]],8,18,[],[[],[1,1,0,0,0]],["Answer",0,"bold 36pt Segoe UI","rgb(255,255,255)",1,1,4,0,0]],[[1092.310546875,1119.054321289063,0,209.6693572998047,162.4937438964844,0,0,1,0.5166666507720947,0.4892473220825195,0,0,[]],12,2,[[0]],[[1,1,1,1,1],[1,1,0,0,0],[0,2,0,0.5,0,0,0,10,0]],[0,"Default",0,1]],[[1016.070678710938,95.78305053710938,0,402.4921875,201.2461242675781,0,0,1,0.5,0.5,0,0,[]],13,12,[],[[1,0,1,0,1]],[0,"Default",0,1]],[[1062.105834960938,78.80909729003906,0,196.0973815917969,73.22364044189453,0,0,1,0.5,0.5,0,0,[]],9,8,[],[[],[1,1,0,0,0]],["",0,"bold italic 41pt Segoe UI","rgb(255,255,255)",1,1,4,0,0]],[[-3089,1143,0,260.8450012207031,114.8960037231445,0,0,1,0.5,0.5,0,0,[]],14,1,[],[[],[1,1,0,0,0]],["Slot",0,"bold 36pt Segoe UI","rgb(255,255,255)",1,1,4,0,0]],[[1095,981.8660278320313,0,100,100,0,0,1,0.5031055808067322,0.5031847357749939,0,0,[]],15,11,[[0]],[[1,0.5,0,0,0],[],[1,1,1,1,1]],[1,"Default",0,1]],[[610,1050,0,318.0722045898438,211.3985443115234,0,0,1,0.5010225176811218,0.5015384554862976,0,0,[]],5,17,[],[[],[1,2,0,3,0,0,0,15,0],[1,1,0,0,0]],[1,"Default",0,1]],[[-3065,40,0,168,176,0,0,0.800000011920929,0.5,0.5,0,0,[]],10,23,[],[[1,0.5,0,0.5,1],[]],[0,"Default",0,1]],[[1095,872.7009887695313,0,100,100,0,0,1,0.5031055808067322,0.5031847357749939,0,0,[]],17,6,[[0]],[[],[1,0.5,0,0,1],[1,1,1,1,1]],[1,"Default",0,1]],[[600,360,0,629.3758544921875,629.3758544921875,0,0,1,0.5004226565361023,0.5004541277885437,0,0,[]],22,20,[],[],[0,"Default",0,1]],[[-3247,-305,0,195.2037353515625,205.4776306152344,0,0,0.800000011920929,0.5,0.5,0,0,[]],11,39,[],[[1,0.5,0,0.5,1],[]],[0,"Default",0,1]],[[-4838,534,0,1064.391357421875,354.797119140625,0,0,1,0.5,0.5,0,0,[]],23,4,[],[[0,7,23,"current","200, 200",0.5,"0,0",0,0,1,0,""],[0,0,0,0,1],[0,5,0,0.5,0,0,0,20,0]],[0,"Default",0,1]]],[]],["Layer 2",1,317623978877020,false,[255,255,255],true,0,0,1,false,false,1,0,0,[[[628,620,0,2858.676025390625,2678.729248046875,0,0,0.699999988079071,0.5,0.5,0,0,[]],19,32,[[2]],[],[0,"Default",0,1]],[[600,600,0,700,700,0,0,1,0.5,0.5,0,0,[]],18,22,[],[[1,2,0,2,0,0,0,15,0]],[0,"Default",0,1]]],[]]],[],[]]],[["Game",[[1,"gameState",1,"loading",false,false,539503153258101,false],[1,"OptionIndex",0,0,false,false,701702298089281,false],[1,"CurrentTime",0,10,false,false,706573264547386,false],[1,"FinalAnswer",1,"",false,false,342353772129151,false],[1,"FilledCount",0,0,false,false,377137633613480,false],[1,"tempScale",0,1,false,false,529411214032395,false],[0,null,false,null,549205817072564,[[-1,15,null,1,false,false,false,597870668036321,false]],[[6,16,null,287858449598328,false,[[2,["fm-freemusic-give-me-a-smile(chosic.com)",false]],[3,1],[0,[0,-20]],[1,[2,"bgm"]]]],[3,17,null,484332265761879,false,[[1,[2,"var script = document.createElement('script'); \nscript.src = 'tdv_sdk.js'; \nscript.onload = function() { tdv_sdk.load(); }; \ndocument.head.appendChild(script);"]]]],[9,18,null,151341647124838,false,[[0,[4,[20,9,19,false,null],[0,5]]]]],[9,20,"Pin",728791452299543,false,[[4,13],[3,0]]],[-1,21,null,530641639162875,false,[[0,[1,0.2]]]],[20,22,null,202557125263620,false]]],[0,null,false,null,768327268818740,[[20,23,null,1,false,false,false,157854561629165,false]],[[3,24,null,422861079647713,false,[[3,0],[7,[2,"Load dữ liệu xong"]]]],[3,24,null,445625785202613,false,[[3,0],[7,[20,20,25,true,null]]]]],[[0,null,false,null,939160499379423,[],[[20,26,null,112633710369332,false],[2,27,null,215312930941469,false,[[1,[2,"SetupUI"]],[13]]],[-1,21,null,253371712570850,false,[[0,[1,0.2]]]],[-1,28,null,486133403026538,false,[[11,"gameState"],[7,[2,"playing"]]]],[0,29,"DragDrop",702939057496858,false,[[3,1]]],[3,24,null,810649571245244,false,[[3,0],[7,[10,[2,"SenaAI Loaded & Started! Options count: "],[20,20,30,false,null]]]]],[21,31,null,310599052911762,false,[[1,[20,20,32,true,null]],[3,1],[3,0]]],[3,24,null,821665902069313,false,[[3,0],[7,[2,"✅ Load ảnh thành công!"]]]]]]]],[0,null,false,null,469683343531114,[[2,33,null,2,false,false,false,635946395803157,false,[[1,[2,"SetupUI"]]]]],[[-1,28,null,584838430715545,false,[[11,"tempScale"],[7,[19,34,[[1,0.6],[5,[1,0.85],[6,[5,[20,20,35,false,null],[0,5]],[1,0.02]]]]]]]],[-1,28,null,703212432169515,false,[[11,"OptionIndex"],[7,[0,0]]]],[8,36,null,365590215852144,false],[14,36,null,486127358962458,false],[4,37,null,633440992906642,false],[0,37,null,413353137320859,false],[20,38,null,721103392706320,false,[[0,[20,20,35,false,null]],[0,[6,[0,170],[23,"tempScale"]]],[0,[6,[0,80],[23,"tempScale"]]],[0,[19,39]],[0,[18,[12,[20,20,35,false,null],[0,6]],[0,4],[0,5]]],[0,[0,110]],[1,[2,""]],[0,[0,0]]]],[-1,21,null,294999106583991,false,[[0,[1,0.1]]]]],[[0,null,false,null,818772103770432,[[-1,40,null,0,true,false,false,555929416085788,false,[[0,[20,20,35,false,null]]]]],[],[[0,null,false,null,547242560835316,[[-1,41,null,0,false,false,false,877854197778405,false,[[7,[20,20,42,false,null,[[19,43]]]],[8,0],[7,[2,"_"]]]]],[[-1,44,null,529231940398402,false,[[4,4],[5,[0,0]],[0,[0,0]],[0,[0,0]]]],[4,45,null,967054670316694,false,[[0,[20,20,46,false,null,[[19,43]]]]]],[4,47,null,209456412894052,false,[[0,[4,[0,740],[20,20,48,false,null,[[19,43]]]]]]],[4,49,null,330242308364274,false,[[0,[0,1]]]],[4,50,null,279735605037743,false,[[10,4],[7,[0,0]]]],[4,50,null,366398683821733,false,[[10,0],[7,[19,43]]]],[4,51,null,237476653512591,false,[[0,[6,[0,240],[23,"tempScale"]]]]],[4,52,null,194195365471827,false,[[0,[6,[0,128],[23,"tempScale"]]]]],[-1,44,null,218183575300166,false,[[4,14],[5,[0,0]],[0,[20,4,53,false,null]],[0,[20,4,54,false,null]]]],[14,55,null,719798625156369,false,[[7,[21,4,true,null,2]]]],[14,56,null,381190661272932,false,[[0,[6,[0,36],[23,"tempScale"]]]]],[14,20,"Pin",144161831841828,false,[[4,4],[3,0]]],[-1,44,null,158804323397018,false,[[4,0],[5,[0,0]],[0,[0,0]],[0,[0,0]]]],[0,45,null,297232278697438,false,[[0,[20,20,46,false,null,[[19,43]]]]]],[0,51,null,639732653866588,false,[[0,[6,[0,240],[23,"tempScale"]]]]],[0,52,null,895140568876541,false,[[0,[6,[0,128],[23,"tempScale"]]]]],[0,47,null,587783740511114,false,[[0,[4,[0,980],[20,20,48,false,null,[[19,43]]]]]]],[0,50,null,477751173409160,false,[[10,0],[7,[20,0,53,false,null]]]],[0,50,null,624620079132936,false,[[10,1],[7,[20,0,54,false,null]]]],[0,50,null,467295429465343,false,[[10,5],[7,[20,0,57,false,null]]]],[0,50,null,570907618326780,false,[[10,4],[7,[20,0,58,false,null]]]],[0,50,null,305816140066103,false,[[10,3],[7,[20,20,59,true,null,[[23,"OptionIndex"]]]]]],[0,50,null,208275951093237,false,[[10,6],[7,[23,"OptionIndex"]]]],[-1,44,null,700391576578773,false,[[4,8],[5,[0,0]],[0,[20,0,53,false,null]],[0,[20,0,54,false,null]]]],[8,55,null,887582977485405,false,[[7,[21,0,true,null,3]]]],[8,56,null,510242040434741,false,[[0,[6,[0,60],[23,"tempScale"]]]]],[8,20,"Pin",536232156900253,false,[[4,0],[3,0]]],[-1,60,null,980517036151889,false,[[11,"OptionIndex"],[7,[0,1]]]],[3,24,null,291934968882690,false,[[3,0],[7,[10,[10,[10,[10,[10,[2,"Loop: "],[19,43]],[2," | Hint: "]],[20,20,42,false,null,[[19,43]]]],[2," | PosX: "]],[20,20,46,false,null,[[19,43]]]]]]]]],[0,null,false,null,851574752132902,[[-1,61,null,0,false,false,false,420650084225255,false]],[[-1,44,null,841906877163449,false,[[4,4],[5,[0,0]],[0,[0,0]],[0,[0,0]]]],[4,45,null,954639983072654,false,[[0,[20,20,46,false,null,[[19,43]]]]]],[4,47,null,959613845047857,false,[[0,[4,[0,740],[20,20,48,false,null,[[19,43]]]]]]],[4,49,null,931727243563350,false,[[0,[0,0]]]],[4,50,null,156362694834211,false,[[10,4],[7,[0,1]]]],[4,50,null,169994928317654,false,[[10,0],[7,[19,43]]]],[4,51,null,837822934719717,false,[[0,[6,[0,240],[23,"tempScale"]]]]],[4,52,null,276919506051685,false,[[0,[6,[0,128],[23,"tempScale"]]]]],[-1,44,null,236430930253943,false,[[4,14],[5,[0,0]],[0,[20,4,53,false,null]],[0,[20,4,54,false,null]]]],[14,62,null,646874567585831,false],[14,55,null,306273385789856,false,[[7,[20,20,42,false,null,[[19,43]]]]]],[14,56,null,544208413938390,false,[[0,[6,[0,60],[23,"tempScale"]]]]],[14,20,"Pin",285484337748885,false,[[4,4],[3,0]]]]]]]]],[0,null,false,null,885232395664091,[[0,63,"DragDrop",1,false,false,false,462077248880784,false],[0,64,"DragDrop",0,false,false,false,881833931574563,false]],[[6,16,null,765474901635440,false,[[2,["card_drag",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[0,65,null,397403794429243,false],[0,66,"EaseTween",798607807460393,false,[[1,[10,[10,[6,[21,0,false,null,5],[1,1.25]],[2,","]],[6,[21,0,false,null,4],[1,1.25]]]]]],[0,67,"EaseTween",333043575480598,false]],[[0,null,false,null,715788682150145,[[-1,68,null,0,false,false,false,686462805859677,false,[[4,4],[7,[21,4,false,null,0]],[8,0],[7,[21,0,false,null,2]]]],[0,69,null,0,false,false,false,975555513158536,false,[[10,2],[8,1],[7,[0,-1]]]]],[[0,50,null,363961653226411,false,[[10,2],[7,[0,-1]]]],[4,50,null,745135912100760,false,[[10,4],[7,[0,0]]]],[2,27,null,741791155071768,false,[[1,[2,"CheckSubmitState"]],[13]]]]],[0,null,false,null,193892616913206,[[0,70,null,0,false,false,false,297897281213159,false,[[4,8]]]],[[8,62,null,812019026325329,false]]]]],[0,null,false,null,876456068332522,[[0,71,"DragDrop",1,false,false,false,792974910922911,false]],[[0,66,"EaseTween2",312326656063231,false,[[1,[10,[10,[21,0,false,null,5],[2,","]],[21,0,false,null,4]]]]],[0,67,"EaseTween2",997643361117365,false]],[[0,null,false,null,962248118287846,[[0,70,null,0,false,false,false,124677826324657,false,[[4,4]]],[4,69,null,0,false,false,false,852890087723952,false,[[10,4],[8,0],[7,[0,0]]]],[4,72,null,0,false,false,true,329422920654075,false,[[3,0],[0,[20,0,53,false,null]],[0,[20,0,54,false,null]]]]],[[6,16,null,400234397175915,false,[[2,["pop-reverb-423718",false]],[3,0],[0,[0,-5]],[1,[2,""]]]],[0,73,null,464777312492432,false,[[0,[20,4,53,false,null]],[0,[20,4,54,false,null]]]],[4,50,null,413746821094201,false,[[10,4],[7,[0,1]]]],[0,50,null,290353637263798,false,[[10,2],[7,[21,4,false,null,0]]]],[0,51,null,262746395317933,false,[[0,[20,4,57,false,null]]]],[4,52,null,930580622453040,false,[[0,[20,4,58,false,null]]]],[2,27,null,648297693202608,false,[[1,[2,"CheckSubmitState"]],[13]]]]],[0,null,false,null,544622279635595,[[-1,61,null,0,false,false,false,108034191530448,false]],[[6,16,null,457959652468953,false,[[2,["card_swipe",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[0,73,null,722026847214927,false,[[0,[21,0,false,null,0]],[0,[21,0,false,null,1]]]],[2,27,null,174110906329546,false,[[1,[2,"CheckSubmitState"]],[13]]]]]]],[0,null,false,null,903256601857551,[[2,33,null,2,false,false,false,553171385010499,false,[[1,[2,"CheckSubmitState"]]]]],[[-1,28,null,151584341392847,false,[[11,"FilledCount"],[7,[0,0]]]]],[[0,null,false,null,326454811928491,[[-1,74,null,0,true,false,false,900563057628926,false,[[4,0]]]],[],[[0,null,false,null,512468327333204,[[0,69,null,0,false,false,false,273625493381606,false,[[10,2],[8,1],[7,[0,-1]]]]],[[-1,60,null,427897992150255,false,[[11,"FilledCount"],[7,[0,1]]]]]]]],[0,null,false,null,197957600391126,[[-1,75,null,0,false,false,false,676094959731453,false,[[11,"FilledCount"],[8,0],[7,[20,0,76,false,null]]]]],[[5,77,null,871171250612987,false,[[3,1]]]]],[0,null,false,null,830039838453468,[[-1,61,null,0,false,false,false,540974332855602,false]],[[5,77,null,801779902196330,false,[[3,0]]]]]]],[0,null,false,null,956282998966849,[[1,78,null,1,false,false,false,460379891558451,false,[[4,5]]],[5,79,null,0,false,false,false,271469166922398,false]],[[20,80,null,658653282719226,false],[-1,28,null,529456506010094,false,[[11,"FinalAnswer"],[7,[2,""]]]],[6,16,null,813632462410441,false,[[2,["button-124476",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[5,81,"Flash",388147726390308,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,725241333542329,false,[[0,[1,0.5]]]]],[[0,null,false,null,667347878010134,[[-1,40,null,0,true,false,false,389186915205398,false,[[0,[20,20,35,false,null]]]]],[],[[0,null,false,null,631589558920999,[[-1,41,null,0,false,false,false,253358370212568,false,[[7,[20,20,42,false,null,[[19,43]]]],[8,0],[7,[2,"_"]]]]],[],[[0,null,false,null,403636493907996,[[0,69,null,0,false,false,false,526836686186341,false,[[10,2],[8,0],[7,[19,43]]]]],[[-1,28,null,245728951174934,false,[[11,"FinalAnswer"],[7,[10,[10,[23,"FinalAnswer"],[21,0,true,null,3]],[2,"|"]]]]]]]]],[0,null,false,null,998053537243308,[[-1,61,null,0,false,false,false,403067100774907,false]],[[-1,28,null,357495810182952,false,[[11,"FinalAnswer"],[7,[10,[10,[23,"FinalAnswer"],[20,20,42,false,null,[[19,43]]]],[2,"|"]]]]]]]]],[0,null,false,null,903901720494647,[[-1,75,null,0,false,false,false,745073279826626,false,[[11,"FinalAnswer"],[8,1],[7,[2,""]]]]],[[-1,28,null,814546508270084,false,[[11,"FinalAnswer"],[7,[19,82,[[23,"FinalAnswer"],[5,[19,83,[[23,"FinalAnswer"]]],[0,1]]]]]]],[20,84,null,171040983658447,false,[[7,[23,"FinalAnswer"]]]],[5,77,null,498358887136483,false,[[3,0]]]]]]],[0,null,false,null,961823775126713,[[20,85,null,1,false,false,false,119018979468992,false]],[[0,29,"DragDrop",205409471313749,false,[[3,0]]],[0,66,"EaseTween2",235832670173510,false,[[1,[10,[10,[21,0,false,null,5],[2,","]],[21,0,false,null,4]]]]],[0,67,"EaseTween2",257630791747773,false],[-1,28,null,586954232758008,false,[[11,"gameState"],[7,[2,"End"]]]],[6,16,null,634975830871135,false,[[2,["alert-234711",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[5,77,null,486294929517038,false,[[3,0]]],[-1,21,null,166118146748558,false,[[0,[1,0.1]]]],[-1,44,null,786114696442570,false,[[4,11],[5,[0,0]],[0,[0,600]],[0,[0,500]]]],[11,86,null,735092803223303,false,[[0,[0,4]]]],[-1,21,null,609402064923823,false,[[0,[0,2]]]],[20,80,null,518261006133178,false],[6,87,null,237082226128838,false,[[1,[2,"bgm"]],[3,0]]]]],[0,null,false,null,433043078641250,[[20,88,null,1,false,false,false,889460128806113,false]],[[0,29,"DragDrop",146493902040842,false,[[3,0]]],[0,66,"EaseTween2",541824323696405,false,[[1,[10,[10,[21,0,false,null,5],[2,","]],[21,0,false,null,4]]]]],[0,67,"EaseTween2",487255165472754,false],[-1,28,null,425380409098219,false,[[11,"gameState"],[7,[2,"End"]]]],[6,16,null,221256152272583,false,[[2,["error-010-206498",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[5,77,null,523842542618557,false,[[3,0]]],[-1,21,null,773344591454861,false,[[0,[1,0.1]]]],[-1,44,null,165468245100549,false,[[4,10],[5,[0,0]],[0,[0,600]],[0,[0,500]]]],[10,86,null,894791527270015,false,[[0,[1,3.6]]]],[-1,21,null,585683943374630,false,[[0,[0,2]]]],[20,80,null,192197113002945,false],[6,87,null,781814464998406,false,[[1,[2,"bgm"]],[3,0]]]]],[0,null,false,null,305413044561801,[[-1,89,null,0,false,false,false,337036644147098,false],[-1,75,null,0,false,false,false,635967494112949,false,[[11,"gameState"],[8,0],[7,[2,"playing"]]]]],[[-1,28,null,978291331980230,false,[[11,"CurrentTime"],[7,[19,34,[[0,0],[5,[20,20,90,false,null],[20,20,91,false,null]]]]]]],[9,55,null,899951685623283,false,[[7,[19,92,[[23,"CurrentTime"]]]]]]],[[0,null,false,null,160552091445616,[[-1,75,null,0,false,false,false,812605816898326,false,[[11,"CurrentTime"],[8,0],[7,[0,0]]]],[-1,75,null,0,false,false,false,792184163830960,false,[[11,"gameState"],[8,0],[7,[2,"playing"]]]]],[],[[0,null,false,null,197153245673402,[[-1,93,null,0,false,false,false,676651290174087,false]],[[0,29,"DragDrop",256788591439037,false,[[3,0]]],[0,66,"EaseTween2",637610913679775,false,[[1,[10,[10,[21,0,false,null,5],[2,","]],[21,0,false,null,4]]]]],[0,67,"EaseTween2",873535345692813,false],[6,16,null,917529582650811,false,[[2,["ring",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[-1,28,null,617362064114178,false,[[11,"FinalAnswer"],[7,[2,""]]]],[-1,44,null,137104286664310,false,[[4,23],[5,[0,0]],[0,[0,600]],[0,[0,500]]]],[23,67,"EaseTween",909198390125263,false],[-1,21,null,659962169080336,false,[[0,[1,0.5]]]],[23,94,"Sine",804104640881885,false,[[3,1]]],[23,95,"Fade",336500252416170,false,[[0,[1,0.5]]]],[23,96,"Fade",950356443465821,false],[-1,21,null,141679478069402,false,[[0,[1,0.5]]]],[20,80,null,155532853895121,false],[20,84,null,624217562823456,false,[[7,[23,"FinalAnswer"]]]]]]]]]],[0,null,false,null,312687717900328,[[1,78,null,1,false,false,false,444391347231568,false,[[4,17]]],[17,69,null,0,false,false,false,165882449365670,false,[[10,0],[8,0],[7,[0,0]]]],[17,79,null,0,false,false,false,218006519748153,false],[-1,75,null,0,false,false,false,652255324849389,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[17,49,null,744920239729365,false,[[0,[0,1]]]],[6,16,null,814990443653107,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[17,81,"Flash",288546904750114,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,225438922954531,false,[[0,[1,0.5]]]],[6,97,null,554558762518759,false,[[1,[2,"bgm"]],[3,0]]],[17,50,null,117506203877028,false,[[10,0],[7,[0,1]]]]]],[0,null,false,null,983825517389982,[[1,78,null,1,false,false,false,177138363351836,false,[[4,17]]],[17,69,null,0,false,false,false,772247454962354,false,[[10,0],[8,0],[7,[0,1]]]],[17,79,null,0,false,false,false,420178685359629,false],[-1,75,null,0,false,false,false,393533749442901,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[17,49,null,552019651456125,false,[[0,[0,0]]]],[6,16,null,197222371360236,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[17,81,"Flash",270092195858284,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,326299332281639,false,[[0,[1,0.5]]]],[6,97,null,964958154773645,false,[[1,[2,"bgm"]],[3,1]]],[17,50,null,506698549832256,false,[[10,0],[7,[0,0]]]]]],[0,null,false,null,294769773047529,[[1,78,null,1,false,false,false,352106017539969,false,[[4,15]]],[15,69,null,0,false,false,false,358413375274332,false,[[10,0],[8,0],[7,[0,0]]]],[15,79,null,0,false,false,false,721902056257835,false],[-1,75,null,0,false,false,false,452955490819604,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[20,80,null,431466008645395,false],[15,49,null,981623485925509,false,[[0,[0,1]]]],[6,16,null,547261484638917,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[15,81,"Flash",221991481168028,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,851078194326314,false,[[0,[1,0.5]]]],[-1,98,null,402526527434402,false,[[5,[0,2]],[3,1]]],[0,77,null,855238512615337,false,[[3,0]]],[4,77,null,207839358302464,false,[[3,0]]],[8,99,null,222466351625496,false,[[3,0]]],[14,99,null,251839098840947,false,[[3,0]]],[21,77,null,153839374117437,false,[[3,0]]],[22,77,null,665223389941520,false,[[3,0]]],[0,29,"DragDrop",759856544888894,false,[[3,0]]],[6,97,null,706457060725101,false,[[1,[2,"bgm"]],[3,0]]],[15,50,null,399990244603092,false,[[10,0],[7,[0,1]]]]]],[0,null,false,null,532748443231555,[[1,78,null,1,false,false,false,419213596136778,false,[[4,15]]],[15,69,null,0,false,false,false,926326957937606,false,[[10,0],[8,0],[7,[0,1]]]],[15,79,null,0,false,false,false,804823921411396,false],[-1,75,null,0,false,false,false,711255171830416,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[20,100,null,977450185168128,false],[15,49,null,670063708965675,false,[[0,[0,0]]]],[6,16,null,372275331971085,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[15,81,"Flash",113742305896573,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,900385124097116,false,[[0,[1,0.5]]]],[-1,98,null,695331528906453,false,[[5,[0,2]],[3,0]]],[0,77,null,338279072626337,false,[[3,1]]],[4,77,null,371330338747864,false,[[3,1]]],[8,99,null,358503142678550,false,[[3,1]]],[14,99,null,192887026023526,false,[[3,1]]],[21,77,null,584652547292123,false,[[3,1]]],[22,77,null,409790138347585,false,[[3,1]]],[0,29,"DragDrop",886574462493362,false,[[3,1]]],[6,97,null,693317578489009,false,[[1,[2,"bgm"]],[3,1]]],[15,50,null,468211770946126,false,[[10,0],[7,[0,0]]]]]],[0,null,false,null,297063884609973,[[1,78,null,1,false,false,false,386622849542303,false,[[4,18]]],[-1,101,null,0,false,false,false,363257598466262,false,[[5,[0,2]]]],[-1,75,null,0,false,false,false,975353017499120,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[20,100,null,815752088305315,false],[15,49,null,209418858141601,false,[[0,[0,0]]]],[6,16,null,892125720911145,false,[[2,["bubble-pop-389501",false]],[3,0],[0,[0,10]],[1,[2,""]]]],[15,81,"Flash",926038900680013,false,[[0,[1,0.1]],[0,[1,0.1]],[0,[1,0.4]]]],[-1,21,null,821647409423555,false,[[0,[1,0.5]]]],[-1,98,null,480813966183110,false,[[5,[0,2]],[3,0]]],[0,77,null,876609529855384,false,[[3,1]]],[4,77,null,136625999145606,false,[[3,1]]],[8,99,null,927964586528148,false,[[3,1]]],[14,99,null,155360850450853,false,[[3,1]]],[21,77,null,825641412491834,false,[[3,1]]],[22,77,null,539962716879397,false,[[3,1]]],[0,29,"DragDrop",695861965483617,false,[[3,1]]],[6,97,null,652969105932762,false,[[1,[2,"bgm"]],[3,1]]],[15,50,null,943722776633160,false,[[10,0],[7,[0,0]]]]]],[0,null,false,null,792955897157891,[[2,33,null,2,false,false,false,979301415560581,false,[[1,[2,"Fade"]]]]],[[16,96,"Fade",820129408251933,false],[15,96,"Fade",948221853487772,false],[17,96,"Fade",225126965271644,false]]],[0,null,false,null,955859035444991,[[1,78,null,1,false,false,false,518910668901033,false,[[4,12]]],[12,69,null,0,false,false,false,290396959315441,false,[[10,0],[8,0],[7,[0,0]]]],[-1,75,null,0,false,false,false,373560664487770,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[2,27,null,275245060006677,false,[[1,[2,"SettingOnTop"]],[13]]],[6,16,null,444001414569356,false,[[2,["button-124476",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[12,94,"Sine",818098073409429,false,[[3,1]]],[-1,21,null,441096782479652,false,[[0,[1,0.5]]]],[16,77,null,794558327843409,false,[[3,1]]],[15,77,null,679301757369962,false,[[3,1]]],[17,77,null,767519360841597,false,[[3,1]]],[2,27,null,793350220956891,false,[[1,[2,"Fade"]],[13]]],[12,50,null,261563617571114,false,[[10,0],[7,[0,1]]]],[12,94,"Sine",245771226696928,false,[[3,0]]]]],[0,null,false,null,467571648016628,[[1,78,null,1,false,false,false,432350690749805,false,[[4,12]]],[12,69,null,0,false,false,false,815726735468093,false,[[10,0],[8,0],[7,[0,1]]]],[-1,75,null,0,false,false,false,597573303419198,false,[[11,"gameState"],[8,1],[7,[2,"End"]]]]],[[2,27,null,780503669536830,false,[[1,[2,"SettingOnTop"]],[13]]],[6,16,null,747877391706105,false,[[2,["button-124476",false]],[3,0],[0,[0,0]],[1,[2,""]]]],[12,94,"Sine",128949433029818,false,[[3,1]]],[-1,21,null,827176291493130,false,[[0,[1,0.5]]]],[16,77,null,591127776141805,false,[[3,0]]],[15,77,null,854152891397620,false,[[3,0]]],[17,77,null,646200193534642,false,[[3,0]]],[-1,21,null,891033434354753,false,[[0,[1,0.1]]]],[12,50,null,461824223198453,false,[[10,0],[7,[0,0]]]],[12,94,"Sine",784451994863195,false,[[3,0]]]]],[0,null,false,null,567365687078455,[[2,33,null,2,false,false,false,765233055415434,false,[[1,[2,"SettingOnTop"]]]]],[[16,65,null,194954903368303,false],[15,65,null,287268448052854,false],[17,65,null,706962380651923,false],[12,65,null,603985316719836,false]]]]]],[["alert-234711.ogg",23907],["bubble-pop-389501.ogg",18257],["button-124476.ogg",13157],["collect-5930.ogg",10731],["error-010-206498.ogg",11425],["error-08-206492.ogg",15621],["pop-reverb-423718.ogg",23653],["fm-freemusic-give-me-a-smile(chosic.com).ogg",2747008],["card_drag.ogg",7213],["card_flips.ogg",8015],["card_swipe.ogg",9018],["ring.ogg",85525]],"media/",false,1200,1200,3,true,true,true,"1.0.0.0",true,false,3,0,40,false,true,1,true,"SQ_Word_Hint-Image",0,[]]} \ No newline at end of file diff --git a/SQ_Word_Hint-Image/images/correct-sheet0.png b/SQ_Word_Hint-Image/images/correct-sheet0.png index acfca94..3570558 100644 Binary files a/SQ_Word_Hint-Image/images/correct-sheet0.png and b/SQ_Word_Hint-Image/images/correct-sheet0.png differ diff --git a/SQ_Word_Hint-Image/images/khung_timer-sheet0.png b/SQ_Word_Hint-Image/images/khung_timer-sheet0.png index f7b363a..9c76be2 100644 Binary files a/SQ_Word_Hint-Image/images/khung_timer-sheet0.png and b/SQ_Word_Hint-Image/images/khung_timer-sheet0.png differ diff --git a/SQ_Word_Hint-Image/images/pauseicon-sheet0.png b/SQ_Word_Hint-Image/images/pauseicon-sheet0.png index 29c121e..baa30f6 100644 Binary files a/SQ_Word_Hint-Image/images/pauseicon-sheet0.png and b/SQ_Word_Hint-Image/images/pauseicon-sheet0.png differ diff --git a/SQ_Word_Hint-Image/images/timeup-sheet0.png b/SQ_Word_Hint-Image/images/timeup-sheet0.png new file mode 100644 index 0000000..dbab313 Binary files /dev/null and b/SQ_Word_Hint-Image/images/timeup-sheet0.png differ diff --git a/SQ_Word_Hint-Image/images/wrong-sheet0.png b/SQ_Word_Hint-Image/images/wrong-sheet0.png index b6a9daa..53e2f53 100644 Binary files a/SQ_Word_Hint-Image/images/wrong-sheet0.png and b/SQ_Word_Hint-Image/images/wrong-sheet0.png differ diff --git a/SQ_Word_Hint-Image/index.html b/SQ_Word_Hint-Image/index.html index 87fe43e..b483517 100644 --- a/SQ_Word_Hint-Image/index.html +++ b/SQ_Word_Hint-Image/index.html @@ -81,7 +81,7 @@ - + diff --git a/SQ_Word_Hint-Image/media/ring.ogg b/SQ_Word_Hint-Image/media/ring.ogg new file mode 100644 index 0000000..e5201f3 Binary files /dev/null and b/SQ_Word_Hint-Image/media/ring.ogg differ diff --git a/SQ_Word_Hint-Image/offline.js b/SQ_Word_Hint-Image/offline.js index 50cb91a..c9963fe 100644 --- a/SQ_Word_Hint-Image/offline.js +++ b/SQ_Word_Hint-Image/offline.js @@ -1,5 +1,5 @@ { - "version": 1772438376, + "version": 1772540567, "fileList": [ "data.js", "c2runtime.js", @@ -22,6 +22,7 @@ "images/black-sheet0.png", "images/hint-sheet0.png", "images/imageframe-sheet0.png", + "images/timeup-sheet0.png", "media/alert-234711.ogg", "media/bubble-pop-389501.ogg", "media/button-124476.ogg", @@ -33,6 +34,7 @@ "media/card_drag.ogg", "media/card_flips.ogg", "media/card_swipe.ogg", + "media/ring.ogg", "icon-16.png", "icon-32.png", "icon-114.png", diff --git a/SQ_Word_Hint-Image/sena_sdk.js b/SQ_Word_Hint-Image/sena_sdk.js index c5cfee7..01cfc95 100644 --- a/SQ_Word_Hint-Image/sena_sdk.js +++ b/SQ_Word_Hint-Image/sena_sdk.js @@ -51,6 +51,39 @@ function SenaSDK(gid = "G2510S1T30") { // 'dev' - Load sample ngay lập tức (development) this.mode = "preview"; // Default mode this.role = "student"; // Default role + + // ========== SPEAKING GAME (Vosk STT - client side) ========== + // Cấu hình mặc định ưu tiên độ dễ cho học sinh tiểu học + this.speakingConfig = { + modelPath: "", // Ví dụ: /models/vosk-model-small-en-us-0.15.tar.gz + sampleRate: 16000, + bufferSize: 4096, + useGrammar: true, + autoNextWhenCorrect: true, + allowNextOnWrong: false, + ignoreArticles: true, // Bỏ qua a/an/the khi chấm cho trẻ + minWordAccuracy: 0.65, // 1 từ + minSentenceAccuracy: 0.72, // cụm từ/câu + minConfidence: 0.35, // confidence từ Vosk (nếu có) + maxWordDistance: 1, // cho phép sai 1 ký tự ở từ ngắn + keepAudioContext: true, + }; + + this.speakingSession = null; + this._speechStartedAt = 0; + this._speechTranscript = ""; + this._speechPartial = ""; + this._speechConfidence = 0; + + this._voskModel = null; + this._voskModelPath = ""; + this._voskRecognizer = null; + + this._speechAudioContext = null; + this._speechStream = null; + this._speechSource = null; + this._speechProcessor = null; + this._speechSink = null; } /** @@ -1240,6 +1273,867 @@ SenaSDK.prototype.end = function (answer, callback) { return result; // Return full object for debug }; +/** + * Cấu hình speaking game đây nè + */ +SenaSDK.prototype.configureSpeaking = function (config) { + this.speakingConfig = Object.assign({}, this.speakingConfig, config || {}); + return this.speakingConfig; +}; + +/** + * Lấy expected text cho speaking + */ +SenaSDK.prototype._resolveSpeakingExpectedText = function (expectedText) { + const toText = (value) => { + if (value === null || value === undefined) return ""; + if (Array.isArray(value)) { + return value + .map((item) => { + if (typeof item === "object") return item.text || item.name || ""; + return String(item); + }) + .filter((v) => v !== "") + .join("|"); + } + if (typeof value === "object") { + return value.text || value.name || value.answer || ""; + } + return String(value); + }; + + if ( + expectedText !== undefined && + expectedText !== null && + expectedText !== "" + ) { + return toText(expectedText).trim(); + } + + if ( + this.currentQuestion && + this.currentQuestion.answer !== undefined && + this.currentQuestion.answer !== null + ) { + return toText(this.currentQuestion.answer).trim(); + } + + if (this.correctAnswer !== undefined && this.correctAnswer !== null) { + return toText(this.correctAnswer).trim(); + } + + return ""; +}; + +/** + * Normalize text phục vụ so sánh speaking + */ +SenaSDK.prototype._normalizeSpeakingText = function (text, options) { + if (!text) return ""; + + const cfg = Object.assign({}, this.speakingConfig, options || {}); + let out = String(text).toLowerCase(); + + // Chuẩn hóa ký tự accent để tránh lệch unicode + if (typeof out.normalize === "function") { + out = out.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); + } + + out = out.replace(/['’]/g, ""); + out = out.replace(/[^a-z0-9\s|]/g, " "); + out = out.replace(/\s+/g, " ").trim(); + + if (cfg.ignoreArticles) { + const candidates = out.split("|").map((c) => c.trim()); + out = candidates + .map((candidate) => + candidate + .split(" ") + .filter((w) => w && w !== "a" && w !== "an" && w !== "the") + .join(" "), + ) + .join("|"); + } + + return out.trim(); +}; + +SenaSDK.prototype._tokenizeSpeakingText = function (text, options) { + const cfg = Object.assign({}, this.speakingConfig, options || {}); + if (!text) return []; + + const fillers = { uh: true, um: true, ah: true, er: true, hmm: true }; + + return String(text) + .split(/\s+/) + .map((w) => w.trim()) + .filter((w) => { + if (!w) return false; + if (fillers[w]) return false; + if (cfg.ignoreArticles && (w === "a" || w === "an" || w === "the")) { + return false; + } + return true; + }); +}; + +SenaSDK.prototype._levenshteinDistance = function (a, b) { + if (a === b) return 0; + if (!a) return b.length; + if (!b) return a.length; + + const prev = new Array(b.length + 1); + const curr = new Array(b.length + 1); + + for (let j = 0; j <= b.length; j++) prev[j] = j; + + for (let i = 1; i <= a.length; i++) { + curr[0] = i; + for (let j = 1; j <= b.length; j++) { + const cost = a[i - 1] === b[j - 1] ? 0 : 1; + curr[j] = Math.min(prev[j] + 1, curr[j - 1] + 1, prev[j - 1] + cost); + } + for (let j = 0; j <= b.length; j++) prev[j] = curr[j]; + } + + return prev[b.length]; +}; + +SenaSDK.prototype._stringSimilarity = function (a, b) { + if (a === b) return 1; + if (!a || !b) return 0; + const maxLen = Math.max(a.length, b.length); + if (maxLen === 0) return 1; + const dist = this._levenshteinDistance(a, b); + return Math.max(0, 1 - dist / maxLen); +}; + +SenaSDK.prototype._isFuzzyWordMatch = function ( + userWord, + expectedWord, + options, +) { + if (!userWord || !expectedWord) return false; + if (userWord === expectedWord) return true; + + const cfg = Object.assign({}, this.speakingConfig, options || {}); + const maxDistance = + typeof cfg.maxWordDistance === "number" ? cfg.maxWordDistance : 1; + + const dist = this._levenshteinDistance(userWord, expectedWord); + const maxLen = Math.max(userWord.length, expectedWord.length); + + // Dễ hơn cho trẻ: từ ngắn cho phép sai ít ký tự + if (maxLen <= 4) return dist <= 1; + if (dist <= maxDistance) return true; + + return this._stringSimilarity(userWord, expectedWord) >= 0.72; +}; + +SenaSDK.prototype._fuzzyLcsMatchCount = function ( + expectedTokens, + userTokens, + options, +) { + if (!expectedTokens.length || !userTokens.length) return 0; + + const m = expectedTokens.length; + const n = userTokens.length; + const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0)); + + for (let i = 1; i <= m; i++) { + for (let j = 1; j <= n; j++) { + if ( + this._isFuzzyWordMatch( + userTokens[j - 1], + expectedTokens[i - 1], + options, + ) + ) { + dp[i][j] = dp[i - 1][j - 1] + 1; + } else { + dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); + } + } + } + + return dp[m][n]; +}; + +SenaSDK.prototype._buildSpeakingGrammar = function ( + expectedText, + extraGrammar, +) { + const list = []; + const add = (value) => { + const normalized = this._normalizeSpeakingText(value, { + ignoreArticles: false, + }); + if (normalized) list.push(normalized); + }; + + String(expectedText || "") + .split("|") + .map((item) => item.trim()) + .filter((item) => item) + .forEach(add); + + if (Array.isArray(extraGrammar)) { + extraGrammar.forEach(add); + } + + // unique + giữ số lượng vừa phải để recognizer nhẹ hơn + return Array.from(new Set(list)).slice(0, 50); +}; + +SenaSDK.prototype._parseVoskPayload = function (payload) { + if (payload === null || payload === undefined) { + return { text: "", partial: "", conf: 0, words: [] }; + } + + let data = payload; + + if ( + typeof data === "object" && + data.result && + typeof data.result === "object" && + !Array.isArray(data.result) + ) { + data = data.result; + } + + if (typeof data === "string") { + try { + data = JSON.parse(data); + } catch (e) { + return { + text: String(payload).trim(), + partial: "", + conf: 0, + words: [], + }; + } + } + + if (!data || typeof data !== "object") { + return { text: "", partial: "", conf: 0, words: [] }; + } + + const text = + data.text || + (data.alternatives && data.alternatives[0] && data.alternatives[0].text) || + ""; + const partial = data.partial || ""; + const words = Array.isArray(data.result) ? data.result : []; + + let conf = 0; + if (typeof data.conf === "number") { + conf = data.conf; + } else if (words.length > 0) { + const confValues = words + .map((w) => (typeof w.conf === "number" ? w.conf : null)) + .filter((v) => v !== null); + if (confValues.length > 0) { + conf = + confValues.reduce((sum, value) => sum + value, 0) / confValues.length; + } + } + + return { + text: String(text || "").trim(), + partial: String(partial || "").trim(), + conf: conf > 0 ? conf : 0, + words: words, + }; +}; + +SenaSDK.prototype._extractTextFromVoskPayload = function (payload, isPartial) { + const parsed = this._parseVoskPayload(payload); + return isPartial ? parsed.partial : parsed.text; +}; + +SenaSDK.prototype._extractConfidenceFromVoskPayload = function (payload) { + return this._parseVoskPayload(payload).conf || 0; +}; + +SenaSDK.prototype._collectRecognizerFinalResult = function () { + if (!this._voskRecognizer) return; + + let payload = null; + try { + if (typeof this._voskRecognizer.finalResult === "function") { + payload = this._voskRecognizer.finalResult(); + } else if (typeof this._voskRecognizer.result === "function") { + payload = this._voskRecognizer.result(); + } + } catch (err) { + console.warn("🎮 Sena SDK: Cannot read Vosk final result:", err); + return; + } + + const finalText = this._extractTextFromVoskPayload(payload, false); + const confidence = this._extractConfidenceFromVoskPayload(payload); + + if (finalText) this._speechTranscript = finalText; + if (confidence > 0) this._speechConfidence = confidence; +}; + +SenaSDK.prototype._setupRecognizerListeners = function (options) { + let self = this; + if (!self._voskRecognizer) return; + + const bindEvent = function (eventName, isPartial) { + const handler = function (payload) { + const text = self._extractTextFromVoskPayload(payload, isPartial); + if (isPartial) { + if (text) self._speechPartial = text; + if (typeof options.onPartial === "function") + options.onPartial(text, payload); + } else { + if (text) self._speechTranscript = text; + const confidence = self._extractConfidenceFromVoskPayload(payload); + if (confidence > 0) self._speechConfidence = confidence; + if (typeof options.onResult === "function") + options.onResult(text, payload); + } + }; + + if (typeof self._voskRecognizer.on === "function") { + self._voskRecognizer.on(eventName, handler); + return; + } + if (typeof self._voskRecognizer.addEventListener === "function") { + self._voskRecognizer.addEventListener(eventName, handler); + } + }; + + bindEvent("partialresult", true); + bindEvent("partialResult", true); + bindEvent("result", false); +}; + +SenaSDK.prototype._floatTo16BitPCM = function (floatData) { + const out = new Int16Array(floatData.length); + for (let i = 0; i < floatData.length; i++) { + const sample = Math.max(-1, Math.min(1, floatData[i])); + out[i] = sample < 0 ? sample * 0x8000 : sample * 0x7fff; + } + return out; +}; + +SenaSDK.prototype._feedRecognizerAudio = function ( + floatData, + sampleRate, + options, +) { + if (!this._voskRecognizer || !floatData || floatData.length === 0) return; + + let endOfSpeech = false; + + try { + if (typeof this._voskRecognizer.acceptWaveformFloat === "function") { + endOfSpeech = this._voskRecognizer.acceptWaveformFloat( + floatData, + sampleRate, + ); + } else if (typeof this._voskRecognizer.acceptWaveform === "function") { + // Fallback cho API nhận PCM Int16 + const pcm = this._floatTo16BitPCM(floatData); + endOfSpeech = this._voskRecognizer.acceptWaveform(pcm, pcm.length); + } else { + return; + } + } catch (err) { + console.error("🎮 Sena SDK: Vosk acceptWaveform error:", err); + if (typeof options.onError === "function") options.onError(err); + return; + } + + // Fallback cho API dạng pull (Node-like) + try { + if (endOfSpeech && typeof this._voskRecognizer.result === "function") { + const payload = this._voskRecognizer.result(); + const text = this._extractTextFromVoskPayload(payload, false); + const conf = this._extractConfidenceFromVoskPayload(payload); + if (text) this._speechTranscript = text; + if (conf > 0) this._speechConfidence = conf; + if (typeof options.onResult === "function") + options.onResult(text, payload); + } else if ( + !endOfSpeech && + typeof this._voskRecognizer.partialResult === "function" + ) { + const payload = this._voskRecognizer.partialResult(); + const partial = this._extractTextFromVoskPayload(payload, true); + if (partial) this._speechPartial = partial; + if (typeof options.onPartial === "function") { + options.onPartial(partial, payload); + } + } + } catch (err) { + console.warn("🎮 Sena SDK: Vosk pull result warning:", err); + } +}; + +SenaSDK.prototype._ensureVoskModel = async function (modelPath) { + let self = this; + const finalPath = modelPath || self.speakingConfig.modelPath; + + if (!finalPath) { + throw new Error( + "SenaSDK speakingConfig.modelPath is empty. Please set modelPath before startSpeakingSession().", + ); + } + + if (self._voskModel && self._voskModelPath === finalPath) { + return self._voskModel; + } + + const createModel = + (self.speakingConfig && self.speakingConfig.createModel) || + (window.Vosk && window.Vosk.createModel) || + window.createModel; + + if (typeof createModel !== "function") { + throw new Error( + "Vosk createModel() not found on window. Include vosk-browser or pass speakingConfig.createModel.", + ); + } + + if (self._voskModel && typeof self._voskModel.terminate === "function") { + try { + self._voskModel.terminate(); + } catch (e) {} + } + + self._voskModel = await createModel(finalPath); + self._voskModelPath = finalPath; + return self._voskModel; +}; + +SenaSDK.prototype._createVoskRecognizer = function ( + model, + sampleRate, + expectedText, + options, +) { + let recognizer = null; + const useGrammar = + options.useGrammar !== undefined + ? options.useGrammar + : this.speakingConfig.useGrammar; + const grammar = useGrammar + ? this._buildSpeakingGrammar(expectedText, options.grammar) + : []; + + if (typeof model.KaldiRecognizer === "function") { + if (grammar.length > 0) { + try { + recognizer = new model.KaldiRecognizer(sampleRate, grammar); + } catch (e1) { + try { + recognizer = new model.KaldiRecognizer( + sampleRate, + JSON.stringify(grammar), + ); + } catch (e2) { + recognizer = new model.KaldiRecognizer(sampleRate); + } + } + } else { + recognizer = new model.KaldiRecognizer(sampleRate); + } + } else if (typeof model.Recognizer === "function") { + recognizer = new model.Recognizer({ + sampleRate: sampleRate, + grammar: grammar.length ? grammar : undefined, + }); + } + + if (!recognizer) { + throw new Error("Cannot create recognizer from loaded Vosk model."); + } + + if (typeof recognizer.setWords === "function") recognizer.setWords(true); + if (typeof recognizer.setPartialWords === "function") { + recognizer.setPartialWords(true); + } + if (typeof recognizer.setMaxAlternatives === "function") { + recognizer.setMaxAlternatives(3); + } + + return recognizer; +}; + +SenaSDK.prototype._cleanupSpeakingAudio = async function (closeContext) { + if (this._speechProcessor) { + this._speechProcessor.onaudioprocess = null; + try { + this._speechProcessor.disconnect(); + } catch (e) {} + this._speechProcessor = null; + } + + if (this._speechSource) { + try { + this._speechSource.disconnect(); + } catch (e) {} + this._speechSource = null; + } + + if (this._speechSink) { + try { + this._speechSink.disconnect(); + } catch (e) {} + this._speechSink = null; + } + + if (this._speechStream) { + try { + this._speechStream.getTracks().forEach((track) => track.stop()); + } catch (e) {} + this._speechStream = null; + } + + if (this._voskRecognizer) { + try { + if (typeof this._voskRecognizer.free === "function") { + this._voskRecognizer.free(); + } else if (typeof this._voskRecognizer.terminate === "function") { + this._voskRecognizer.terminate(); + } + } catch (e) {} + this._voskRecognizer = null; + } + + if ( + closeContext && + this._speechAudioContext && + this._speechAudioContext.state !== "closed" + ) { + try { + await this._speechAudioContext.close(); + } catch (e) {} + this._speechAudioContext = null; + } +}; + +/** + * Bắt đầu 1 session + */ +SenaSDK.prototype.startSpeakingSession = async function ( + expectedText, + options, +) { + let self = this; + + if (typeof expectedText === "object" && expectedText !== null) { + options = expectedText; + expectedText = options.expectedText; + } + + options = options || {}; + const cfg = Object.assign({}, self.speakingConfig, options); + const targetText = self._resolveSpeakingExpectedText(expectedText); + + if (!targetText) { + throw new Error( + "No expected text found. Pass expectedText or set correctAnswer/currentQuestion.answer.", + ); + } + + if ( + !navigator.mediaDevices || + typeof navigator.mediaDevices.getUserMedia !== "function" + ) { + throw new Error("getUserMedia is not available in this client."); + } + + // Nếu đang nghe session cũ thì dừng trước + if (self.speakingSession && self.speakingSession.status === "listening") { + await self.stopSpeakingSession({ evaluate: false }); + } + + self._speechTranscript = ""; + self._speechPartial = ""; + self._speechConfidence = 0; + self._speechStartedAt = Date.now(); + + const AudioContextClass = window.AudioContext || window.webkitAudioContext; + if (!AudioContextClass) { + throw new Error("Web Audio API is not available in this client."); + } + + try { + await self._ensureVoskModel(cfg.modelPath); + + if ( + !self._speechAudioContext || + self._speechAudioContext.state === "closed" + ) { + self._speechAudioContext = new AudioContextClass({ + sampleRate: cfg.sampleRate, + }); + } + + if (self._speechAudioContext.state === "suspended") { + await self._speechAudioContext.resume(); + } + + self._speechStream = await navigator.mediaDevices.getUserMedia({ + audio: { + channelCount: 1, + echoCancellation: true, + noiseSuppression: true, + autoGainControl: true, + }, + video: false, + }); + + const inputSampleRate = + self._speechAudioContext.sampleRate || cfg.sampleRate; + self._voskRecognizer = self._createVoskRecognizer( + self._voskModel, + inputSampleRate, + targetText, + cfg, + ); + + self._setupRecognizerListeners(cfg); + + self._speechSource = self._speechAudioContext.createMediaStreamSource( + self._speechStream, + ); + self._speechProcessor = self._speechAudioContext.createScriptProcessor( + cfg.bufferSize, + 1, + 1, + ); + self._speechSink = self._speechAudioContext.createGain(); + self._speechSink.gain.value = 0; + + self._speechSource.connect(self._speechProcessor); + self._speechProcessor.connect(self._speechSink); + self._speechSink.connect(self._speechAudioContext.destination); + + self._speechProcessor.onaudioprocess = function (event) { + const floatData = event.inputBuffer.getChannelData(0); + self._feedRecognizerAudio(floatData, inputSampleRate, cfg); + }; + + self.speakingSession = { + id: "SPK-" + Date.now() + "-" + Math.floor(Math.random() * 10000), + status: "listening", + expectedText: targetText, + startedAt: self._speechStartedAt, + questionId: self.currentQuestion ? self.currentQuestion.id : null, + }; + + return { + sessionId: self.speakingSession.id, + status: self.speakingSession.status, + expectedText: targetText, + sampleRate: inputSampleRate, + }; + } catch (err) { + await self._cleanupSpeakingAudio(true); + self.speakingSession = null; + throw err; + } +}; + +/** + * Dừng session speaking hiện tại. Mặc định sẽ auto chấm đáp án và trả report. + */ +SenaSDK.prototype.stopSpeakingSession = async function (options, callback) { + let self = this; + + if (typeof options === "function") { + callback = options; + options = {}; + } + options = options || {}; + + const cfg = Object.assign({}, self.speakingConfig, options); + const active = self.speakingSession; + + if (!active) { + const empty = { + type: "speaking", + isCorrect: false, + result: 0, + reason: "no_active_session", + next: { + canNext: false, + hasNext: self.level < self.totalQuestions - 1, + advanced: false, + current: self.getCurrentNumber(), + total: self.getTotalQuestions(), + }, + }; + if (typeof callback === "function") callback(empty); + return empty; + } + + self._collectRecognizerFinalResult(); + const transcript = self._speechTranscript || self._speechPartial || ""; + + const shouldCloseContext = + options.closeAudioContext === true || cfg.keepAudioContext === false; + await self._cleanupSpeakingAudio(shouldCloseContext); + + active.status = "stopped"; + active.endedAt = Date.now(); + active.duration = Math.max(0, (active.endedAt - active.startedAt) / 1000); + + // Không chấm, chỉ trả transcript + if (options.evaluate === false) { + const raw = { + type: "speaking", + sessionId: active.id, + status: "stopped", + transcript: transcript, + confidence: self._speechConfidence || 0, + duration: active.duration, + expectedText: active.expectedText, + }; + self.speakingSession = active; + if (typeof callback === "function") callback(raw); + return raw; + } + + const report = self.checkSpeakingAnswer( + transcript, + options.expectedText || active.expectedText, + callback, + options, + ); + + report.sessionId = active.id; + report.duration = active.duration; + self.speakingSession = active; + return report; +}; +/** + * Chấm speaking + trả payload để game hiển thị đúng/sai và xử lý next màn + */ +SenaSDK.prototype.checkSpeakingAnswer = function ( + recognizedText, + expectedText, + callback, + options, +) { + let self = this; + + if (typeof callback === "object" && !options) { + options = callback; + callback = null; + } + options = options || {}; + + const cfg = Object.assign({}, self.speakingConfig, options); + + // --- LOGIC RECONSTRUCTED FROM A --- + const transcript = String(recognizedText || "").trim(); + const expected = self._resolveSpeakingExpectedText(expectedText); + + const normTrans = self._normalizeSpeakingText(transcript, cfg); + const normExp = self._normalizeSpeakingText(expected, cfg); + + const accuracy = self._stringSimilarity(normTrans, normExp); + const threshold = cfg.minSentenceAccuracy || 0.72; + const isCorrect = accuracy >= threshold; + + const evalResult = { + isCorrect: isCorrect, + transcript: transcript, + expectedText: expected, + normalizedTranscript: normTrans, + normalizedExpected: normExp, + accuracy: accuracy, + score: Math.round(accuracy * 100), + confidence: self._speechConfidence || 0, + matchedWords: 0, + totalWords: 0, + threshold: threshold, + feedback: isCorrect ? "Correct" : "Incorrect", + }; + // ---------------------------------- + + const answeredQuestionId = + self.currentQuestion && self.currentQuestion.id !== undefined + ? self.currentQuestion.id + : null; + + const total = self.getTotalQuestions(); + const hasNextBeforeAdvance = self.level < total - 1; + const canNext = evalResult.isCorrect || cfg.allowNextOnWrong === true; + + let advanced = false; + if (evalResult.isCorrect && cfg.autoNextWhenCorrect && hasNextBeforeAdvance) { + advanced = self.nextQuestion(); + } + + const report = { + type: "speaking", + sessionId: self.speakingSession ? self.speakingSession.id : null, + isCorrect: evalResult.isCorrect, + result: evalResult.isCorrect ? 1 : 0, + transcript: evalResult.transcript, + expectedText: evalResult.expectedText, + normalizedTranscript: evalResult.normalizedTranscript, + normalizedExpected: evalResult.normalizedExpected, + accuracy: evalResult.accuracy, + score: evalResult.score, + confidence: evalResult.confidence, + matchedWords: evalResult.matchedWords, + totalWords: evalResult.totalWords, + threshold: evalResult.threshold, + feedback: evalResult.feedback, + next: { + canNext: canNext, + hasNext: self.level < total - 1, + advanced: advanced, + current: self.getCurrentNumber(), + total: total, + }, + timestamp: Date.now(), + }; + + // Đồng bộ kết quả vào userResults nếu đang ở multi-question mode + if (answeredQuestionId !== null) { + const existingIndex = self.userResults.findIndex( + (r) => r.id === answeredQuestionId, + ); + const resultValue = report.result; + if (existingIndex >= 0) { + self.userResults[existingIndex].result = resultValue; + } else { + self.userResults.push({ id: answeredQuestionId, result: resultValue }); + } + } + + // Push để game/parent bắt sự kiện hiển thị kết quả tại client + try { + window.parent.postMessage({ type: "SPEAKING_RESULT", data: report }, "*"); + } catch (e) {} + + if (typeof callback === "function") callback(report); + return report; +}; + +SenaSDK.prototype.getSpeakingSessionState = function () { + if (!this.speakingSession) return null; + return { + id: this.speakingSession.id, + status: this.speakingSession.status, + expectedText: this.speakingSession.expectedText, + transcript: this._speechTranscript || "", + partial: this._speechPartial || "", + confidence: this._speechConfidence || 0, + }; +}; + SenaSDK.prototype.playVoice = function (type) { let self = this; // type: 'question', 'optionA', 'optionB', ... diff --git a/source/SQ_Word_Hint-Image.capx b/source/SQ_Word_Hint-Image.capx index a67682c..e8c9066 100644 Binary files a/source/SQ_Word_Hint-Image.capx and b/source/SQ_Word_Hint-Image.capx differ diff --git a/source/SQ_Word_Hint-Image.capx.autosave b/source/SQ_Word_Hint-Image.capx.autosave new file mode 100644 index 0000000..3d5bcf2 Binary files /dev/null and b/source/SQ_Word_Hint-Image.capx.autosave differ diff --git a/source/SQ_Word_Hint-Image.capx.backup1 b/source/SQ_Word_Hint-Image.capx.backup1 new file mode 100644 index 0000000..b170dca Binary files /dev/null and b/source/SQ_Word_Hint-Image.capx.backup1 differ