Forked from: ctkjapan's ゆっくりしていってね! vol.14 View Diff (10) forked: ゆっくりしていってね! vol.14 ctkjapan Follow 2013-07-25 16:45:26 License: MIT License Fork0 Fav0 View1296 Play Stop Reload Fullscreen Smart Phone Readme JavaScript 1141 lines HTML 86 lines CSS 258 lines スマホ対応(予定) forked: ゆっくりしていってね! vol.14 (lib) cube.input_0003 (sub) yukkuri_0014 (lib) cube.color_0003 (lib) cube.3d_0006 (data) img_0002 (lib) cube.core_0005 (lib) cube.math_0002 (lib) cube.screen_0003 (lib) cube.image_0003 (data) img_0001 stats.js (lib) (lib) cube.fps_0003 // forked from ctkjapan's "ゆっくりしていってね! vol.14" http://jsdo.it/ctkjapan/yukkuri_0014 // forked from ctkjapan's "ゆっくりしていってね! vol.13" http://jsdo.it/ctkjapan/yukkuri_0013 // Setting var flg_Showfps = 1; var flg_ShowHelp = 0; var flg_bg_colors = 0; var flg_shadow = 1; var flg_MotionBlur = 1; var flg_CameraBlur = 1; var flg_DepthBlur = 1; var flg_Weather = 2; var flg_Yukkuries = 1; var flg_Bg = 0; var flg_Players = 1; var flg_Floor = 3; var flg_Filter = 0; var flg_Rolling = 0; var flg_Interlace = 0; var flg_ScreenEffect = 0; var flg_Collision = 1; var flg_2DMode = 0; var flg_CollisionLine = 0; var flg_InfiniteAdjust = 1; var flg_Fluffy = 1; var flg_Vibration = 0; var flg_stats_lib = 0; var default_Speed_Val_def = 2.0; var default_Speed_Val_low = 0.05; var ZMax = 4096; var Scroll_Volume = ZMax * 0.1; var range_alpha_front = ZMax * 0.05; var range_alpha_back = ZMax * 0.1; var range_blur_start = ZMax * 0.25; var range_blur_end = ZMax - range_alpha_back; var blur_size = 0.002; var blur_alpha = 0.4; var shadow_alpha = 0.3; var fog_alpha = 0.4; var CollisionWaitS = 0.05; var Scene_No = 0; // Parameter var ImgChar_max; var Base_Speed_Val = default_Speed_Val_def; var Speed_Val; var bg_rgb = new cube_Color(0xff, 0xff, 0xff, 1.0); var bg_h = 0; var snow_rgb = new cube_Color(0xff, 0xff, 0xff, 1.0); var colorful_rgb = new cube_Color(0xff, 0xff, 0xff, 1.0); var Base_Alpha = 1.0; var info_text = ""; var y_counter_box_text = ""; var collision_box_text = ""; var Odd = 0; var Stereogram_position = 0; var Stereogram_time = 0; var Stereogram_timing = 0; var flg_AddYukkuri = 0; var flg_DelYukkuri = 0; var BgImgNo = 0; var CollisionWait = 0; var STATS; // yukkuries var yukkuries = []; var yukkuries_max = 4096; var yukkuries_show_max = 50; var yukkuries_Draw; var yukkuries_Draw_max; var yukkuries_FourDraw_max; var yukkuries_max_x = ZMax * 0.5; var yukkuries_max_y = -ZMax * 0.5; var yukkuries_max_z = ZMax; // bgs var bgs = []; var bgs_max = 2; var bgs_Draw_max; var bgs_max_x = ZMax * 0.5; var bgs_max_y = -ZMax * 0.5; var bgs_max_z = ZMax; // snows var snows = []; var snows_max = 128; var snows_Draw_max; var snows_max_x = ZMax * 0.5; var snows_max_y = -ZMax * 0.5; var snows_max_z = ZMax; // players var players = []; var players_max = 8; var players_scale_max; var players_width_max; // keydown_setting var keydown_setting = [ { key: "1", program: "CUBE.FPS.Setting( CUBE.FPS.Base - 1 );" }, { key: "2", program: "CUBE.FPS.Setting( CUBE.FPS.Base + 1 );" }, { key: "3", program: "CUBE.CS[0].C3D.set_Stereogram_volume( CUBE.CS[0].C3D.Stereogram_volume - 1 );" }, { key: "4", program: "CUBE.CS[0].C3D.set_Stereogram_volume( CUBE.CS[0].C3D.Stereogram_volume + 1 );" }, { key: "5", program: "Stereogram_timing++; if (Stereogram_timing > 60) Stereogram_timing = 60;" }, { key: "6", program: "Stereogram_timing--; if (Stereogram_timing < 0) Stereogram_timing = 0;" }, { key: "7", program: "flg_DelYukkuri = 1;" }, { key: "8", program: "flg_AddYukkuri = 1;" } ]; // keyup_setting var keyup_setting = [ { key: "E", program: "flg_ScreenEffect = (flg_ScreenEffect + 1)%7;" }, { key: "N", program: "flg_Floor = (flg_Floor + 1)%4" }, { key: "Q", program: "cube_captureImage( CUBE.canvas[0] );" }, { key: "I", program: "flg_Interlace = (flg_Interlace + 1)%5;" }, { key: "R", program: "flg_Rolling = 1 - flg_Rolling;" }, { key: "Y", program: "flg_Yukkuries = 1 - flg_Yukkuries;" }, { key: "B", program: "flg_Bg = 1 - flg_Bg;" }, { key: "U", program: "flg_Players = 1 - flg_Players;" }, { key: "G", program: "flg_Filter = (flg_Filter + 1)%3;" }, { key: "M", program: "flg_MotionBlur = (flg_MotionBlur + 1)%4;" }, { key: "C", program: "flg_bg_colors = (flg_bg_colors + 1)%6;" }, { key: "S", program: "flg_shadow = (flg_shadow + 1)%3;" }, { key: "D", program: "flg_DepthBlur = (flg_DepthBlur + 1)%3;" }, { key: "F", program: "flg_Showfps = (flg_Showfps + 1)%3;" }, { key: "W", program: "flg_Weather = (flg_Weather + 1)%6;" }, { key: "H", program: "flg_ShowHelp = 1 - flg_ShowHelp;" }, { key: "X", program: "CUBE.CS[0].setWindowMode( CUBE.CS[0].mode_Window + 1 );" }, { key: "Z", program: "CUBE.CS[0].setWindowMode( CUBE.CS[0].mode_Window - 1 );" }, { key: "P", program: "CUBE.setPause( CUBE.flg_Pouse + 1 );" }, { key: "V", program: "flg_Collision = (flg_Collision + 1)%4;" }, { key: "O", program: "if ( CUBE.CS[0].C3D.Angle === 75 ) { CUBE.CS[0].C3D.setAngle(90); } else { CUBE.CS[0].C3D.setAngle(75); }" }, { key: "K", program: "flg_InfiniteAdjust = 1 - flg_InfiniteAdjust; if ( flg_InfiniteAdjust === 0 ) { CUBE.CS[0].C3D.CAMERA[0].oZ = 0 }" }, { key: "J", program: "flg_Fluffy = 1 - flg_Fluffy;" }, { key: "H", program: "flg_Vibration = 1 - flg_Vibration;" }, { key: "L", program: "flg_2DMode = 1 - flg_2DMode;" } ]; // --------------------------------------------------- // onload // --------------------------------------------------- onload = function() { var C = CUBE; C.MATH = new cube_Math(); C.INPUT = new cube_Input(); C.FPS = new cube_Fps( 60 ); if ( !C.createCanvas( "world", "2d" ) ) { return false; } C.MATH.createRandom ( 20110127 ); C.createCanvas3D( "world", 90 ); var CS = C.CS[0]; var C3D = C.CS[0].C3D; C3D.createCamera(); C3D.ZMax = ZMax; C3D.CAMERA[0].oZ = -C3D.ZMax; C.INPUT.mouseX = C.browserWidth >> 1; C.INPUT.mouseY = C.browserHeight >> 1; ImgChar_max = UrlImg_Char.length; var i = 0; for (; i < ImgChar_max; i++ ) { C.LoadImage( UrlImg_Char[i] ); } C.LoadImage( UrlImg_Filter ); C.LoadImage( UrlImg_DsFilter ); var i = 0, loop = yukkuries_max; for (; i < loop; ++i ) { yukkuries[i] = new Yukkuri( 0, i%ImgChar_max ); } var i = yukkuries_show_max; while ( i-- ) { yukkuries[i].hidden = 0; } var i = 0, loop = snows_max; for (; i < loop; ++i ) { snows[i] = new Snow( 0 ); } bgs[0] = new Bg( 0, 0 ); var SPRITE = C3D.SPRITE; var RAND = C.MATH.RAND[0]; var i = SPRITE.length; while ( --i ) { SPRITE[i].rZ = RAND.nextInt(360); } var i = players_max; while ( i-- ) { players[i] = new Player( CS.WidthCenter, CS.HeightCenter, 1.0 / (players_max-1) * (i-1) ); } // click C.D.addEventListener( "click", function( EV ) { }, false ); // mousedown C.D.addEventListener( "mousedown", function( EV ) { if ( EV.which === 1 ) { Base_Speed_Val = default_Speed_Val_low; } if ( EV.which === 2 ) { cube_captureImage( CUBE.canvas[0] ); cube_kill_Event( EV ); } }, false ); // mouseup C.D.addEventListener( "mouseup", function( EV ) { if ( EV.which === 1 ) { Base_Speed_Val = default_Speed_Val_def; } }, false ); // keydown C.D.addEventListener( "keydown", function( EV ) { var key = String.fromCharCode(EV.keyCode); var i = keydown_setting.length; while ( i-- ) { if ( key === keydown_setting[i].key ) { eval( keydown_setting[i].program ); break; } } }, true ); // keyup C.D.addEventListener( "keyup", function( EV ) { var key = String.fromCharCode(EV.keyCode); var i = keyup_setting.length; while ( i-- ) { if ( key === keyup_setting[i].key ) { eval( keyup_setting[i].program ); break; } } }, true ); // contextmenu C.D.addEventListener("contextmenu", function( EV ){ flg_ShowHelp = 1 - flg_ShowHelp; }, true ); // dblclick C.D.addEventListener( "dblclick", function( EV ) { // if ( EV.which === 1 ) { C.setPause( C.flg_Pouse + 1 ); } }, true ); CS.setWindowMode( 4 ); C3D.set_Stereogram_volume( 8 ); if ( flg_stats_lib !== 0 ) { STATS = new Stats(); STATS.domElement.id = 'stats_box'; C.D.body.appendChild( STATS.domElement ); } delete C; delete CS; delete C3D; delete SPRITE; delete RAND; MainLoop(); }; // --------------------------------------------------- // MainLoop // --------------------------------------------------- function MainLoop() { var C = CUBE; var CS = C.CS[0]; var CTX = C.CTX[0]; C.FPS.LoopStart(); CS.setCanvasSize(); yukkuries_Draw = 0; yukkuries_Draw_max = 0; yukkuries_FourDraw_max = 0; snows_Draw_max = 0; Odd = 1 - Odd; if ( Stereogram_timing > 0 ) { Stereogram_time++; if ( Stereogram_time >= Stereogram_timing ) { Stereogram_position = 1 - Stereogram_position; Stereogram_time = 0; } } Speed_Val = Base_Speed_Val / C.FPS.Fps; CollisionWait = CollisionWaitS * C.FPS.Fps; changeColor(); if ( flg_MotionBlur === 0 ) { Base_Alpha = 1.0; } else if ( flg_MotionBlur === 1 ) { Base_Alpha = 0.9; } else if ( flg_MotionBlur === 2 ) { Base_Alpha = 0.1; } else if ( flg_MotionBlur === 3 ) { Base_Alpha = 0.01; } if ( Scene_No === 1 ) { Scene_0001(); if ( Odd === 1 ) drawDebug(); } else if ( C.IMG_count <= C.IMG_loaded_count ) { Scene_No = 1; } C.FPS.LoopEnd(); if ( flg_stats_lib !== 0 ) STATS.update(); C.W.setTimeout( function() { MainLoop(); }, C.FPS.RealTimeout ); delete C; delete CS; delete CTX; } // --------------------------------------------------- // Scene_0001 // --------------------------------------------------- function Scene_0001() { var C = CUBE; var CS = C.CS[0]; var CTX = C.CTX[0]; var C3D = CS.C3D; var SPRITE = C3D.SPRITE; var CAMERA = C3D.CAMERA[0]; var RAND = C.MATH.RAND[0]; var CAMERA_oX_new = ( players[0].cX - (CS.WidthCenter) ) / (CS.WidthCenter) * ( yukkuries_max_x >> 1); var CAMERA_oY_new = ( players[0].cY - (CS.Height) ) / (CS.HeightCenter) * (-yukkuries_max_y>>2); var CAMERA_oZ_new = CAMERA.oZ; if ( C.INPUT.mouseWheel !== 0 ) { CAMERA_oZ_new += C.INPUT.mouseWheel * Scroll_Volume; C.INPUT.mouseWheel = 0; } if ( flg_Vibration === 1 ) { if ( RAND.nextInt(4) === 0 ) { CAMERA.oX_vibration = RAND.nextInt(yukkuries_max_x>>4) - (yukkuries_max_x>>3); CAMERA.oY_vibration = RAND.nextInt(yukkuries_max_y>>4) - (yukkuries_max_y>>3); } CAMERA_oX_new += CAMERA.oX_vibration; CAMERA_oY_new += CAMERA.oY_vibration; } CAMERA.oX = ( (CAMERA_oX_new << 1) + CAMERA.oX ) / 3; CAMERA.oY = ( (CAMERA_oY_new << 1) + CAMERA.oY ) / 3; CAMERA.oZ = ( (CAMERA_oZ_new << 1) + CAMERA.oZ ) / 3; if ( CAMERA.oY > -1 ) CAMERA.oY = -1; players[0].updata_core( 0 ); players_scale_max = CS.SizeCenter >> 3; players_width_max = players_scale_max >> 3; if ( flg_Collision !== 0 ) { var Collisions = []; var Collisions_count = 0; var hit_count = 0; var loop_max = 1; var hit_max = 2; var precision = 2; if ( flg_Collision === 2 ) loop_max = 2; hit_max = 4; precision = 4; if ( flg_Collision === 3 ) loop_max = 4; hit_max = 8; precision = 8; var i = SPRITE.length; while ( --i ) { if ( SPRITE[i].OBJ.hidden === 0 && SPRITE[i].Tag === "Yukkuri" ) { Collisions[Collisions_count] = i; Collisions[Collisions_count].oY = SPRITE[i].oY; Collisions_count++; } } var k = loop_max + 1; while ( --k ) { sortY( Collisions ); var i = Collisions.length; if ( i > 0 ) { while ( --i ) { hit_count = 0; var j = i; while ( --j ) { var lD = ( SPRITE[Collisions[i]].Size + SPRITE[Collisions[j]].Size ) * 0.5; lD = lD * lD; var result = hitSPRITE( Collisions[i], Collisions[j], lD, precision ); if ( result.hit > 0 ) { hit_count++; } if ( hit_count >= hit_max ) { break; } } } } } delete Collisions; } var i = SPRITE.length % 8, j = SPRITE.length - i; while ( --i ) { SPRITE[j + i].OBJ.updata( 0, 0, 0, j + i ); } i = (SPRITE.length >> 3) + 1; if ( i > 1 ) { while ( --i ) { SPRITE[(i << 3)].OBJ.updata( 0, 0, 0, (i << 3) ); SPRITE[(i << 3) - 1].OBJ.updata( 0, 0, 0, (i << 3) - 1 ); SPRITE[(i << 3) - 2].OBJ.updata( 0, 0, 0, (i << 3) - 2 ); SPRITE[(i << 3) - 3].OBJ.updata( 0, 0, 0, (i << 3) - 3 ); SPRITE[(i << 3) - 4].OBJ.updata( 0, 0, 0, (i << 3) - 4 ); SPRITE[(i << 3) - 5].OBJ.updata( 0, 0, 0, (i << 3) - 5 ); SPRITE[(i << 3) - 6].OBJ.updata( 0, 0, 0, (i << 3) - 6 ); SPRITE[(i << 3) - 7].OBJ.updata( 0, 0, 0, (i << 3) - 7 ); } } sortZ( SPRITE ); var i = players.length; while ( --i ) { players[i].updata( 0 ); } // draw if ( Base_Alpha >= 1 ) CTX.clearRect(0, 0, CS.Width, CS.Height); CTX.save(); CTX.beginPath(); CTX.globalAlpha = Base_Alpha; CTX.fillStyle = bg_rgb.RGB(); CTX.fillRect(0, 0, CS.Width, CS.Height); CTX.restore(); if ( flg_Floor === 3 ) { var temp_globalAlpha = 0.4; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, 0, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x1 = result.x, y1 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, 0, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x2 = result.x, y2 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, 0, CAMERA.oZ - CS.C3D.ZMax ); var x3 = result.x, y3 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, 0, CAMERA.oZ - CS.C3D.ZMax ); var x4 = result.x, y4 = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = temp_globalAlpha * Base_Alpha; CTX.strokeStyle = "rgb(64,64,64)"; CTX.fillStyle = "rgb(255,255,255)"; CTX.moveTo(x1,y1); CTX.lineTo(x2,y2); CTX.lineTo(x3,y3); CTX.lineTo(x4,y4); CTX.closePath(); CTX.stroke(); CTX.fill(); CTX.restore(); var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, yukkuries_max_y, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x1 = result.x, y1 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, yukkuries_max_y, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x2 = result.x, y2 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, yukkuries_max_y, CAMERA.oZ - CS.C3D.ZMax ); var x3 = result.x, y3 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, yukkuries_max_y, CAMERA.oZ - CS.C3D.ZMax ); var x4 = result.x, y4 = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = temp_globalAlpha * Base_Alpha; CTX.strokeStyle = "rgb(64,64,64)"; CTX.fillStyle = "rgb(255,255,255)"; CTX.moveTo(x1,y1); CTX.lineTo(x2,y2); CTX.lineTo(x3,y3); CTX.lineTo(x4,y4); CTX.closePath(); CTX.stroke(); CTX.fill(); CTX.restore(); var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, 0, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x1 = result.x, y1 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, yukkuries_max_y, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x2 = result.x, y2 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, yukkuries_max_y, CAMERA.oZ - CS.C3D.ZMax ); var x3 = result.x, y3 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, 0, CAMERA.oZ - CS.C3D.ZMax ); var x4 = result.x, y4 = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = temp_globalAlpha * Base_Alpha; CTX.strokeStyle = "rgb(64,64,64)"; CTX.fillStyle = "rgb(255,255,255)"; CTX.moveTo(x1,y1); CTX.lineTo(x2,y2); CTX.lineTo(x3,y3); CTX.lineTo(x4,y4); CTX.closePath(); CTX.stroke(); CTX.fill(); CTX.restore(); var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, 0, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x1 = result.x, y1 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, yukkuries_max_y, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x2 = result.x, y2 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, yukkuries_max_y, CAMERA.oZ - CS.C3D.ZMax ); var x3 = result.x, y3 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, 0, CAMERA.oZ - CS.C3D.ZMax ); var x4 = result.x, y4 = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = temp_globalAlpha * Base_Alpha; CTX.strokeStyle = "rgb(64,64,64)"; CTX.fillStyle = "rgb(255,255,255)"; CTX.moveTo(x1,y1); CTX.lineTo(x2,y2); CTX.lineTo(x3,y3); CTX.lineTo(x4,y4); CTX.closePath(); CTX.stroke(); CTX.fill(); CTX.restore(); } else if ( flg_Floor !== 0 ) { var result = CS.C3D.OtoC( CAMERA, 0, 0, CAMERA.oZ + CS.C3D.ZMax ); var ZMaxY = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = 0.4 * Base_Alpha; if ( flg_Floor === 1 ) { CTX.fillStyle = "rgb(255,255,255)"; CTX.shadowColor = "rgba(230,230,230," + CTX.globalAlpha + ")"; } else { CTX.fillStyle = colorful_rgb.RGB(); CTX.shadowColor = "rgba(" + colorful_rgb.R + "," + colorful_rgb.G + "," + colorful_rgb.B + "," + CTX.globalAlpha + ")"; } CTX.shadowBlur = CS.HeightCenter>>3; CTX.shadowOffsetX = 0; CTX.shadowOffsetY = 0; CTX.fillRect(0, C.MATH.round(ZMaxY), CS.Width, CS.Height); CTX.restore(); } var position = "L"; if ( Stereogram_position === 1 ) position = "R"; if ( Stereogram_timing === 0 ) position = ""; var i = SPRITE.length % 8, j = SPRITE.length - i; while ( --i ) { SPRITE[j + i].OBJ.draw( 0, 0, 0, j + i, position ); } i = (SPRITE.length >> 3) + 1; if ( i > 1 ) { while ( --i ) { SPRITE[(i << 3)].OBJ.draw( 0, 0, 0, (i << 3), position ); SPRITE[(i << 3) - 1].OBJ.draw( 0, 0, 0, (i << 3) - 1, position ); SPRITE[(i << 3) - 2].OBJ.draw( 0, 0, 0, (i << 3) - 2, position ); SPRITE[(i << 3) - 3].OBJ.draw( 0, 0, 0, (i << 3) - 3, position ); SPRITE[(i << 3) - 4].OBJ.draw( 0, 0, 0, (i << 3) - 4, position ); SPRITE[(i << 3) - 5].OBJ.draw( 0, 0, 0, (i << 3) - 5, position ); SPRITE[(i << 3) - 6].OBJ.draw( 0, 0, 0, (i << 3) - 6, position ); SPRITE[(i << 3) - 7].OBJ.draw( 0, 0, 0, (i << 3) - 7, position ); } } if ( flg_Players !== 0 ) { var i = players.length; while ( --i ) { players[i].draw( 0, 0, 0, "" ); } } if ( flg_ScreenEffect !== 0 ) { var w = CS.Width; var h = CS.Height; var GetImage = CTX.getImageData(0, 0, w, h); var GetImageData = GetImage.data; var pixelImageData = CS.Bitmap.data; var y = h; while ( y-- ) { var x = w; var ptr_base = y * w; while ( x-- ) { var ptr = ( ptr_base + x ) << 2; var R = GetImageData[ptr + 0]; var G = GetImageData[ptr + 1]; var B = GetImageData[ptr + 2]; var A = GetImageData[ptr + 3]; if ( flg_ScreenEffect === 1 ) { var monochrome = C.MATH.round(0.298912 * R + 0.586611 * G + 0.114478 * B); pixelImageData[ptr + 0] = monochrome; pixelImageData[ptr + 1] = monochrome; pixelImageData[ptr + 2] = monochrome; } else if ( flg_ScreenEffect === 2 ) { var monochrome = C.MATH.round(0.298912 * R + 0.586611 * G + 0.114478 * B); pixelImageData[ptr + 0] = ( monochrome >= 128 )? R : 0x00; pixelImageData[ptr + 1] = ( monochrome >= 128 )? G : 0x00; pixelImageData[ptr + 2] = ( monochrome >= 128 )? B : 0x00; } else if ( flg_ScreenEffect === 3 ) { pixelImageData[ptr + 0] = ( R >= 128 )? 0xff : 0x00; pixelImageData[ptr + 1] = ( G >= 128 )? 0xff : 0x00; pixelImageData[ptr + 2] = ( B >= 128 )? 0xff : 0x00; } else if ( flg_ScreenEffect === 4 ) { var monochrome = C.MATH.round(0.298912 * R + 0.586611 * G + 0.114478 * B); pixelImageData[ptr + 0] = ( monochrome >= 128 )? 0xff : 0x00; pixelImageData[ptr + 1] = ( monochrome >= 128 )? 0xff : 0x00; pixelImageData[ptr + 2] = ( monochrome >= 128 )? 0xff : 0x00; } else if ( flg_ScreenEffect === 5 ) { var monochrome = C.MATH.round(0.298912 * R + 0.586611 * G + 0.114478 * B); if ( monochrome >= 192 ) { monochrome = 0xff; } else if ( monochrome >= 128 ) { monochrome = 0x80; } else if ( monochrome >= 64 ) { monochrome = 0x40; } else { monochrome = 0x00; } pixelImageData[ptr + 0] = monochrome-32; pixelImageData[ptr + 1] = monochrome; pixelImageData[ptr + 2] = monochrome-128; } else if ( flg_ScreenEffect === 6 ) { pixelImageData[ptr + 0] = C.MATH.abs(255 - R); pixelImageData[ptr + 1] = C.MATH.abs(255 - G); pixelImageData[ptr + 2] = C.MATH.abs(255 - B); } pixelImageData[ptr + 3] = A; } } CTX.putImageData(CS.Bitmap, 0, 0); delete pixelImageData; delete GetImageData; delete GetImage; } if ( flg_Filter !== 0 ) { CTX.save(); CTX.beginPath(); CTX.globalAlpha = fog_alpha * Base_Alpha; if ( flg_Filter === 1 ) CTX.drawImage(C.IMG[ImgChar_max].OBJ, 0, 0, CS.Width, CS.Height); if ( flg_Filter === 2 ) CTX.drawImage(C.IMG[ImgChar_max+1].OBJ, 0, 0, CS.Width, CS.Height); CTX.restore(); } Interlace( 0, 1, Base_Alpha ); AddYukkuri(); DelYukkuri(); delete C; delete CS; delete CTX; delete C3D; delete SPRITE; delete CAMERA; delete RAND; } // --------------------------------------------------- // hitSPRITE // --------------------------------------------------- function hitSPRITE( A, B, lD, precision ) { var C = CUBE; var SPRITE_A = C.CS[0].C3D.SPRITE[A]; var SPRITE_B = C.CS[0].C3D.SPRITE[B]; var SPRITE_A_OBJ = SPRITE_A.OBJ; var SPRITE_B_OBJ = SPRITE_B.OBJ; var temp_a = 0.5; var temp_b = 0.15; var hit_count = 0; if ( precision < 1 ) precision = 1; precision++; while( --precision ) { var lX = C.MATH.abs( SPRITE_B.oX - SPRITE_A.oX ); var lY = C.MATH.abs( SPRITE_B.oY - SPRITE_A.oY ); var lZ = C.MATH.abs( SPRITE_B.oZ - SPRITE_A.oZ ); var length = lX * lX + lY * lY + lZ * lZ; if ( length > lD ) break; hit_count++; var A_speedX = SPRITE_A_OBJ.speedX; var B_speedX = SPRITE_B_OBJ.speedX; var A_speedY = SPRITE_A_OBJ.speedY; var B_speedY = SPRITE_B_OBJ.speedY; var A_speedZ = SPRITE_A_OBJ.speedZ; var B_speedZ = SPRITE_B_OBJ.speedZ; if ( SPRITE_A.hit === 0 ) { SPRITE_A.hit = 1; if ( SPRITE_A.wait <= 0 ) { if ( A_speedX < B_speedX ) { SPRITE_A_OBJ.speedX = B_speedX; } else { SPRITE_A_OBJ.speedX *= temp_a; } if ( A_speedY < B_speedY ) { SPRITE_A_OBJ.speedY = B_speedY; } else { SPRITE_A_OBJ.speedY *= temp_a; } if ( A_speedZ < B_speedZ ) { SPRITE_A_OBJ.speedZ = B_speedZ; } else { SPRITE_A_OBJ.speedZ *= temp_a; } SPRITE_A.wait = CollisionWait; if ( A_speedX < B_speedX ) { SPRITE_A_OBJ.wayX = -SPRITE_A_OBJ.wayX; } if ( A_speedY < B_speedY ) { SPRITE_A_OBJ.wayY = -SPRITE_A_OBJ.wayY; } if ( A_speedZ < B_speedZ ) { SPRITE_A_OBJ.wayZ = -SPRITE_A_OBJ.wayZ; } } } if ( SPRITE_B.hit === 0 ) { SPRITE_B.hit = 1; if ( SPRITE_B.wait <= 0 ) { if ( A_speedX < B_speedX ) { SPRITE_B_OBJ.speedX *= temp_a; } else { SPRITE_B_OBJ.speedX = A_speedX; } if ( A_speedY < B_speedY ) { SPRITE_B_OBJ.speedY *= temp_a; } else { SPRITE_B_OBJ.speedY = A_speedY; } if ( A_speedZ < B_speedZ ) { SPRITE_B_OBJ.speedZ *= temp_a; } else { SPRITE_B_OBJ.speedZ = A_speedZ; } SPRITE_B.wait = CollisionWait; if ( A_speedX >= B_speedX ) { SPRITE_B_OBJ.wayX = -SPRITE_B_OBJ.wayX; } if ( A_speedY >= B_speedY ) { SPRITE_B_OBJ.wayY = -SPRITE_B_OBJ.wayY; } if ( A_speedZ >= B_speedZ ) { SPRITE_B_OBJ.wayZ = -SPRITE_B_OBJ.wayZ; } } } var A_B = ( SPRITE_A.oX - SPRITE_B.oX ) * temp_b; if ( A_B === 0 ) A_B = 0.1; SPRITE_A.oX += A_B; SPRITE_B.oX -= A_B; var temp_X = yukkuries_max_x - SPRITE_A.oX - (SPRITE_A.size>>1); if ( temp_X < 0 ) { SPRITE_A.oX = yukkuries_max_x - (SPRITE_A.size>>1); SPRITE_B.oX += temp_X; } else { var temp_X = yukkuries_max_x + SPRITE_A.oX - (SPRITE_A.size>>1); if ( temp_X < 0 ) { SPRITE_A.oX = -yukkuries_max_x + (SPRITE_A.size>>1); SPRITE_B.oX -= temp_X; } } var temp_X = yukkuries_max_x - SPRITE_B.oX - (SPRITE_B.size>>1); if ( temp_X < 0 ) { SPRITE_B.oX = yukkuries_max_x - (SPRITE_B.size>>1); SPRITE_A.oX += temp_X; } else { var temp_X = yukkuries_max_x + SPRITE_B.oX - (SPRITE_B.size>>1); if ( temp_X < 0 ) { SPRITE_B.oX = -yukkuries_max_x + (SPRITE_B.size>>1); SPRITE_A.oX -= temp_X; } } /* if (SPRITE_A.oX + (SPRITE_A.size>>1) > yukkuries_max_x) { SPRITE_A.oX = yukkuries_max_x - (SPRITE_A.size>>1); } else if (SPRITE_A.oX - (SPRITE_A.size>>1) < -yukkuries_max_x) { SPRITE_A.oX = -yukkuries_max_x + (SPRITE_A.size>>1); } if (SPRITE_B.oX + (SPRITE_B.size>>1) > yukkuries_max_x) { SPRITE_B.oX = yukkuries_max_x - (SPRITE_B.size>>1); } else if (SPRITE_B.oX - (SPRITE_B.size>>1) < -yukkuries_max_x) { SPRITE_B.oX = -yukkuries_max_x + (SPRITE_B.size>>1); } */ var A_B = ( SPRITE_A.oY - SPRITE_B.oY ) * temp_b; if ( A_B === 0 ) A_B = 0.1; SPRITE_A.oY += A_B; SPRITE_B.oY -= A_B; var temp_Y = SPRITE_A.oY + (SPRITE_A.size>>1); if ( temp_Y > 0 ) { SPRITE_A.oY = -(SPRITE_A.size>>1); SPRITE_B.oY -= temp_Y; } /* var temp_Y = -yukkuries_max_y + SPRITE_A.oY + (SPRITE_A.size>>1); if ( temp_Y < 0 ) { SPRITE_A.oY = yukkuries_max_y + (SPRITE_A.size>>1); SPRITE_B.oY -= temp_Y; } */ var temp_Y = SPRITE_B.oY - (SPRITE_B.size>>1); if ( temp_Y > 0 ) { SPRITE_B.oY = -(SPRITE_B.size>>1); SPRITE_A.oY -= temp_Y; } /* var temp_Y = -yukkuries_max_y + SPRITE_B.oY + (SPRITE_B.size>>1); if ( temp_Y < 0 ) { SPRITE_B.oY = yukkuries_max_y + (SPRITE_B.size>>1); SPRITE_A.oY -= temp_Y; } */ /* if (SPRITE_A.oY - (SPRITE_A.size>>1) < yukkuries_max_y) { SPRITE_A.oY = yukkuries_max_y + (SPRITE_A.size>>1); } else if (SPRITE_A.oY + (SPRITE_A.size>>1) > 0) { SPRITE_A.oY = -(SPRITE_A.size>>1); } if (SPRITE_B.oY - (SPRITE_B.size>>1) < yukkuries_max_y) { SPRITE_B.oY = yukkuries_max_y + (SPRITE_B.size>>1); } else if (SPRITE_B.oY + (SPRITE_B.size>>1) > 0) { SPRITE_B.oY = -(SPRITE_B.size>>1); } */ if ( flg_2DMode === 0 ) { A_B = ( SPRITE_A.oZ - SPRITE_B.oZ ) * temp_b; if ( A_B === 0 ) A_B = 0.1; SPRITE_A.oZ += A_B; SPRITE_B.oZ -= A_B; } } SPRITE_A.hit = 0; delete C; delete SPRITE_A; delete SPRITE_B; delete SPRITE_A_OBJ; delete SPRITE_B_OBJ; return {flg: true, hit: hit_count}; } // --------------------------------------------------- // AddYukkuri // --------------------------------------------------- function AddYukkuri() { if ( flg_AddYukkuri === 0 ) return; if ( yukkuries_show_max >= yukkuries_max ) { flg_AddYukkuri = 0; return; } flg_AddYukkuri = 0; yukkuries[yukkuries_show_max].hidden = 0; yukkuries_show_max++; var C = CUBE; var C3D = C.CS[0].C3D; BgImgNo = C.MATH.floor(yukkuries_show_max%ImgChar_max); C3D.SPRITE[C3D.SPRITE_count-1].IMG_no = BgImgNo; delete C; delete C3D; } // --------------------------------------------------- // DelYukkuri // --------------------------------------------------- function DelYukkuri() { if ( flg_DelYukkuri === 0 ) return; if ( yukkuries_show_max <= 0 ) { flg_DelYukkuri = 0; return; } yukkuries_show_max--; yukkuries[yukkuries_show_max].hidden = 1; flg_DelYukkuri = 0; var C = CUBE; var C3D = C.CS[0].C3D; BgImgNo = C.MATH.floor(yukkuries_show_max%ImgChar_max); C3D.SPRITE[C3D.SPRITE_count-1].IMG_no = BgImgNo; delete C; delete C3D; } // --------------------------------------------------- // changeColor // --------------------------------------------------- function changeColor() { var C = CUBE; bg_h += 40 / C.FPS.Fps; bg_h = bg_h % 360; var result = cube_HSVtoRGB( 360-bg_h, 0.8, 1.0 ); colorful_rgb.R = result.r; colorful_rgb.G = result.g; colorful_rgb.B = result.b; if ( flg_bg_colors === 0 ) { var result = cube_HSVtoRGB( bg_h, 0.3, 1.0 ); bg_rgb.R = result.r; bg_rgb.G = result.g; bg_rgb.B = result.b; } else if ( flg_bg_colors === 1 ) { bg_rgb.R = 0xff; bg_rgb.G = 0xff; bg_rgb.B = 0xff; } else if ( flg_bg_colors === 2 ) { bg_rgb.R = 0x00; bg_rgb.G = 0x00; bg_rgb.B = 0x00; } else if ( flg_bg_colors === 3 ) { bg_rgb.R = 160; bg_rgb.G = 180; bg_rgb.B = 240; } else if ( flg_bg_colors === 4 ) { bg_rgb.R = 10; bg_rgb.G = 30; bg_rgb.B = 80; } else { var result = cube_HSVtoRGB( bg_h, 0.6, 1.0 ); bg_rgb.R = result.r; bg_rgb.G = result.g; bg_rgb.B = result.b; } delete C; } // --------------------------------------------------- // sortY // --------------------------------------------------- function sortY( array ) { array.sort( compare ); function compare( a, b ) { return ( b.oY - a.oY ); } } // --------------------------------------------------- // sortZ // --------------------------------------------------- function sortZ( array ) { array.sort( compare ); function compare( a, b ) { return ( a.oZ - b.oZ ); } } // --------------------------------------------------- // drawImageFour // --------------------------------------------------- function drawImageFour( CTX, IMG, X, Y, W, H, blur_size ) { var C = CUBE; var Xp = C.MATH.round( X + blur_size ); var Xm = C.MATH.round( X - blur_size ); var Yp = C.MATH.round( Y + blur_size ); var Ym = C.MATH.round( Y - blur_size ); W = C.MATH.round( W ); H = C.MATH.round( H ); if ( flg_DepthBlur === 1 ) { CTX.drawImage( IMG, Xp, Yp, W, H ); CTX.drawImage( IMG, Xm, Ym, W, H ); } else { CTX.drawImage( IMG, Xp, Yp, W, H ); CTX.drawImage( IMG, Xp, Ym, W, H ); CTX.drawImage( IMG, Xm, Yp, W, H ); CTX.drawImage( IMG, Xm, Ym, W, H ); } delete C; } // --------------------------------------------------- // drawDebug // --------------------------------------------------- function drawDebug() { var C = CUBE; var BOX = C.D.getElementById("fps_box"); if( BOX ) { if ( flg_Showfps >= 1 ) { info_text += C.MATH.round(C.FPS.Fps*10)/10; info_text += "/"; info_text += C.FPS.Base; info_text += " fps\n"; } if ( flg_Showfps === 2 ) { info_text += "min_"; info_text += C.MATH.round(C.FPS.Min*10)/10; info_text += " max_"; info_text += C.MATH.round(C.FPS.Max*10)/10; info_text += " ave_"; info_text += C.MATH.round(C.FPS.Average*10)/10; info_text += "\n"; info_text += "in_"; info_text += C.FPS.loopInTime; info_text += " out_"; info_text += C.FPS.loopOutTime; info_text += " loop_"; info_text += C.FPS.loopTime; info_text += " base_"; info_text += C.MATH.round(C.FPS.BaseTimeout*10)/10; info_text += " wait_"; info_text += C.MATH.round(C.FPS.RealTimeout*10)/10; info_text += "\n"; info_text += "Y "; info_text += yukkuries_FourDraw_max; info_text += "/"; info_text += yukkuries_Draw_max; info_text += "/"; info_text += yukkuries_show_max; info_text += "/"; info_text += yukkuries_max; info_text += "\n"; info_text += "W "; info_text += snows_Draw_max; info_text += "/"; info_text += snows_max; info_text += "\nBgImgNo "; info_text += BgImgNo; info_text += "\n2DMode "; info_text += flg_2DMode; info_text += "\nInfiniteAdjust "; info_text += flg_InfiniteAdjust; info_text += "\nFluffy "; info_text += flg_Fluffy; info_text += "\n"; } if ( C.flg_Pouse !== 0 ) info_text += "PAUSE\n"; if ( info_text === "" ) { BOX.textContent = " "; if ( BOX.style.display !== "none" ) BOX.style.display = "none"; } else { BOX.textContent = info_text; if ( BOX.style.display !== "block" ) BOX.style.display = "block"; info_text = ""; } } var BOX = C.D.getElementById("help_box"); if( BOX ) { if ( flg_ShowHelp === 1 ) { if ( BOX.style.display !== "block" ) BOX.style.display = "block"; } else { if ( BOX.style.display !== "none" ) BOX.style.display = "none"; } } var temp_text = "只今のゆっくり:" + yukkuries_show_max; if ( y_counter_box_text !== temp_text ) { y_counter_box_text = temp_text; var BOX = C.D.getElementById("y_counter_box"); if( BOX ) { BOX.textContent = temp_text; } } var temp_text = "只今の当たり判定:ON"; if ( flg_Collision === 0 ) temp_text = "只今の当たり判定:OFF"; if ( flg_Collision === 2 ) temp_text = "只今の当たり判定:x2"; if ( flg_Collision === 3 ) temp_text = "只今の当たり判定:x4"; if ( flg_2DMode === 1 ) temp_text += "(2D mode)"; if ( collision_box_text !== temp_text ) { collision_box_text = temp_text; var BOX = C.D.getElementById("collision_box"); if( BOX ) { BOX.textContent = temp_text; } } delete C; delete BOX; } // --------------------------------------------------- // InfiniteAdjust // --------------------------------------------------- function InfiniteAdjust( a, b, max ) { var d = a - b; if ( d <= 0 ) { return InfiniteAdjust( a + max, b, max ); } else if ( d >= max ) { return InfiniteAdjust( a - max, b, max ); } return a; } // --------------------------------------------------- // Interlace // --------------------------------------------------- function Interlace( CS_no, lineWidth, Base_Alpha ) { var C = CUBE; if ( flg_Interlace === 0 ) return; var CS = C.CS[CS_no]; var CTX = C.CTX[CS_no]; var LineType = 0; if ( flg_Interlace === 2 || flg_Interlace === 4 ) LineType = Odd* lineWidth; CTX.save(); CTX.globalAlpha = 0.4 * Base_Alpha; CTX.lineWidth = lineWidth; var i = C.MATH.round( CS.HeightCenter / lineWidth + 1 ); while ( --i ) { CTX.beginPath(); CTX.moveTo( 0, ( ( i<<1 ) - 1 ) * lineWidth + LineType - 0.5 ); CTX.lineTo( CS.Width, ( ( i<<1 ) - 1 ) * lineWidth + LineType - 0.5 ); CTX.stroke(); } if ( flg_Interlace >= 3 ) { var i = C.MATH.round( CS.WidthCenter / lineWidth + 1 ); while ( --i ) { CTX.beginPath(); CTX.moveTo( ( ( i<<1 ) - 1 ) * lineWidth + LineType - 0.5, 0 ); CTX.lineTo( ( ( i<<1 ) - 1 ) * lineWidth + LineType - 0.5, CS.Height ); CTX.stroke(); } } CTX.restore(); delete C; } // --------------------------------------------------- // setHelp // --------------------------------------------------- function setHelp( No ) { var C = CUBE; var i = 6; while ( --i ) { var BOX = C.D.getElementById("help_" + i); if( BOX ) { if ( i === No ) { if ( BOX.style.display !== "block" ) BOX.style.display = "block"; } else { if ( BOX.style.display !== "none" ) BOX.style.display = "none"; } } } delete C; delete BOX; } <div id="ds_back_box"><img src="http://ctkjapan.net/yukkuri/images/3ds_4.png" /></div> <div><pre id="fps_box"> </pre></div> <div id="help_box"> <span class="title">Help - Make yourself at home !</span> <span class="body"> <div id="help_1"> <span class="sub_title">»Basic <span class="link">1/5 <a href="#" onclick="setHelp(1); return false;">↑</a><a href="#" onclick="setHelp(2); return false;">↓</a></span></span> MoveCamera: MouseMove<br/> Slow: LeftClick<br/> Zoom: WheelUp / Down<br/> Help (on/off): RightClick / H<br/> Pause (<a href="#" onclick="CUBE.setPause( 1 ); return false;">on</a>/<a href="#" onclick="CUBE.setPause( 0 ); return false;">off</a>): P<br/> <br/> WindowSize: X / Z<br/> (<a href="#" onclick="CUBE.CS[0].setWindowMode(0); return false;">normal</a>/<a href="#" onclick="CUBE.CS[0].setWindowMode(1); return false;">Zoom</a>/<a href="#" onclick="CUBE.CS[0].setWindowMode(2); return false;">ZoomHQ</a>/<a href="#" onclick="CUBE.CS[0].setWindowMode(3); return false;">Full</a>/<a href="#" onclick="CUBE.CS[0].setWindowMode(4); return false;">FullHQ</a>)<br/> <br/> <a href="#" onclick="cube_captureImage( CUBE.canvas[0] ); return false;">PrintScreen</a>: CenterClick / Q<br/> </div> <div id="help_2"> <span class="sub_title">»Object <span class="link">2/5 <a href="#" onclick="setHelp(1); return false;">↑</a><a href="#" onclick="setHelp(3); return false;">↓</a></span></span> Yukkuri (<a href="#" onclick="flg_Yukkuries=1; return false;">show</a>/<a href="#" onclick="flg_Yukkuries=0; return false;">hide</a>): Y<br/> Yukkuri --: 7<br/> Yukkuri ++: 8<br/> <br/> BgObject (<a href="#" onclick="flg_Bg=1; return false;">show</a>/<a href="#" onclick="flg_Bg=0; return false;">hide</a>): B<br/> Weather (<a href="#" onclick="flg_Weather=1; return false;">1</a>/<a href="#" onclick="flg_Weather=2; return false;">2</a>/<a href="#" onclick="flg_Weather=3; return false;">3</a>/<a href="#" onclick="flg_Weather=4; return false;">4</a>/<a href="#" onclick="flg_Weather=5; return false;">5</a>/<a href="#" onclick="flg_Weather=0; return false;">hide</a>): W<br/> Floor (<a href="#" onclick="flg_Floor=1; return false;">1</a>/<a href="#" onclick="flg_Floor=2; return false;">2</a>/<a href="#" onclick="flg_Floor=3; return false;">3</a>/<a href="#"onclick="flg_Floor=0; return false;">hide</a>): N<br/> MousePointer (<a href="#" onclick="flg_Players=1; return false;">show</a>/<a href="#" onclick="flg_Players=0; return false;">hide</a>): U<br/> <br/> Rolling (<a href="#" onclick="flg_Rolling=1; return false;">on</a>/<a href="#" onclick="flg_Rolling=0; return false;">off</a>): R<br/> Shadow (<a href="#" onclick="flg_shadow=1; return false;">shadow</a>/<a href="#"onclick="flg_shadow=2; return false;">mirror</a>/<a href="#" onclick="flg_shadow=0; return false;">off</a>): S<br/> </div> <div id="help_3"> <span class="sub_title">»Effect <span class="link">3/5 <a href="#" onclick="setHelp(2); return false;">↑</a><a href="#" onclick="setHelp(4); return false;">↓</a></span></span> BgColor (<a href="#" onclick="flg_bg_colors=0; return false;">1</a>/<a href="#" onclick="flg_bg_colors=1; return false;">2</a>/<a href="#" onclick="flg_bg_colors=2; return false;">3</a>/<a href="#" onclick="flg_bg_colors=3; return false;">4</a>/<a href="#" onclick="flg_bg_colors=4; return false;">5</a>/<a href="#" onclick="flg_bg_colors=5; return false;">6</a>): C<br/> Filter (<a href="#" onclick="flg_Filter=1; return false;">1</a>/<a href="#" onclick="flg_Filter=2; return false;">2</a>/<a href="#" onclick="flg_Filter=0; return false;">off</a>): G<br/> MotionBlur (<a href="#" onclick="flg_MotionBlur=1; return false;">soft</a>/<a href="#" onclick="flg_MotionBlur=2; return false;">hard</a>/<a href="#" onclick="flg_MotionBlur=3; return false;">max</a>/<a href="#" onclick="flg_MotionBlur=0; return false;">off</a>): M<br/> DepthBlur (<a href="#" onclick="flg_DepthBlur=1; return false;">x2</a>/<a href="#" onclick="flg_DepthBlur=2; return false;">x4</a>/<a href="#" onclick="flg_DepthBlur=0; return false;">off</a>): D<br/> Interlace (<a href="#" onclick="flg_Interlace=1; return false;">1</a>/<a href="#" onclick="flg_Interlace=2; return false;">2</a>/<a href="#" onclick="flg_Interlace=3; return false;">3</a>/<a href="#" onclick="flg_Interlace=4; return false;">4</a>/<a href="#" onclick="flg_Interlace=0; return false;">off</a>): I<br/> ScreenEffect (<a href="#" onclick="flg_ScreenEffect=1; return false;">1</a>/<a href="#" onclick="flg_ScreenEffect=2; return false;">2</a>/<a href="#" onclick="flg_ScreenEffect=3; return false;">3</a>/<a href="#" onclick="flg_ScreenEffect=4; return false;">4</a>/<a href="#" onclick="flg_ScreenEffect=5; return false;">5</a>/<a href="#" onclick="flg_ScreenEffect=6; return false;">6</a>/<a href="#" onclick="flg_ScreenEffect=0; return false;">off</a>): E<br/> Vibration (<a href="#" onclick="flg_Vibration=1; return false;">on</a>/<a href="#" onclick="flg_Vibration=0; return false;">off</a>): H<br/> </div> <div id="help_4"> <span class="sub_title">»Debug <span class="link">4/5 <a href="#" onclick="setHelp(3); return false;">↑</a><a href="#" onclick="setHelp(5); return false;">↓</a></span></span> ShowFps (<a href="#" onclick="flg_Showfps=1; return false;">1</a>/<a href="#" onclick="flg_Showfps=2; return false;">2</a>/<a href="#" onclick="flg_Showfps=0; return false;">off</a>): F<br/> Fps --: 1<br/> Fps ++: 2<br/> <br/> FOV (<a href="#" onclick="CUBE.CS[0].C3D.setAngle(75); return false;">75</a>/<a href="#" onclick="CUBE.CS[0].C3D.setAngle(90); return false;">90</a>): O<br/> Collision (<a href="#" onclick="flg_Collision=1; return false;">x1</a>/<a href="#" onclick="flg_Collision=2; return false;">x2</a>/<a href="#" onclick="flg_Collision=3; return false;">x4</a>/<a href="#" onclick="flg_Collision=0; return false;">off</a>): V<br/> 2DMode (<a href="#" onclick="flg_2DMode=1; return false;">on</a>/<a href="#" onclick="flg_2DMode=0; return false;">off</a>): 0<br/> </div> <div id="help_5"> <span class="sub_title">»Stereopsis <span class="link">5/5 <a href="#" onclick="setHelp(4); return false;">↑</a><a href="#" onclick="setHelp(5); return false;">↓</a></span></span> Stereopsis (<a href="#" onclick="Stereogram_timing=10; return false;">on</a>/<a href="#" onclick="Stereogram_timing=0; return false;">off</a>)<br/> Volume --: 3<br/> Volume ++: 4<br/> Speed --: 5<br/> Speed ++: 6<br/> </div> </span> </div> <div id="window-capture"> <a target="_blank" id="capture_link0"><img src="http://ctkjapan.net/images/none.png" alt="capture0" id="capture0" class="capture_img" /></a><a target="_blank" id="capture_link1"><img src="http://ctkjapan.net/images/none.png" alt="capture1" id="capture1" class="capture_img" /></a><a target="_blank" id="capture_link2"><img src="http://ctkjapan.net/images/none.png" alt="capture2" id="capture2" class="capture_img" /></a><br/> <a target="_blank" id="capture_link3"><img src="http://ctkjapan.net/images/none.png" alt="capture3" id="capture3" class="capture_img" /></a><a target="_blank" id="capture_link4"><img src="http://ctkjapan.net/images/none.png" alt="capture4" id="capture4" class="capture_img" /></a><a target="_blank" id="capture_link5"><img src="http://ctkjapan.net/images/none.png" alt="capture5" id="capture5" class="capture_img" /></a><br/> <a target="_blank" id="capture_link6"><img src="http://ctkjapan.net/images/none.png" alt="capture6" id="capture6" class="capture_img" /></a><a target="_blank" id="capture_link7"><img src="http://ctkjapan.net/images/none.png" alt="capture7" id="capture7" class="capture_img" /></a><a target="_blank" id="capture_link8"><img src="http://ctkjapan.net/images/none.png" alt="capture8" id="capture8" class="capture_img" /></a><br/> </div> <div id="canvas_mask"></div> <div id="canvas_box"> <canvas id="world" width="258" height="154">Canvasに対応したブラウザで閲覧してください。</canvas> </div> <div><pre id="y_counter_box">只今準備中…</pre></div> <div><pre id="collision_box">ゆっくりしていってね!</div> forked: ゆっくりしていってね! vol.14 body,ol,li,p,pre,blockquote,dl,dt,dd,canvas { margin: 0; padding: 0; } body { overflow: hidden; background-color: #fff; text-align:center; /* font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; */ font-family: "Hiragino Kaku Gothic ProN", "ヒラギノ角ゴ ProN W3", "Meiryo","メイリオ", Verdana,Helvetica, sans-serif; font-size: 10px; color:#fff; } a{color:#C00;text-decoration:none;padding:2px;} a:link{} a:visited {} a:active{} a:hover {} #canvas_box { position:absolute; height:154px; width:258px; top:0; left:50%; margin-top:49px; margin-left:-129px; } #world { margin: 0; padding: 0; background-color: #000; align:center; valign:middle; overflow: hidden; z-index: 9980; cursor:url('http://ctkjapan.net/yukkuri/images/transparent.cur'), pointer; } #canvas_mask { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: none; background-color: #000; z-index: 9998; opacity: .70; -moz-opacity: .70; -khtml-opacity: .70; -ms-filter: "alpha(opacity=70)"; filter: alpha(opacity=70); } #fps_box { position: absolute; top: 0; left: 0; margin: 2px; padding: 4px; text-align:left; color: #fff; border:solid 0px #fff; font-size: 14px; font-weight: bold; z-index: 10000; cursor:default; text-shadow : 0 0 2px #000, 0 0 4px #fff; opacity: .90; -moz-opacity: .90; -khtml-opacity: .90; -ms-filter: "alpha(opacity=90)"; filter: alpha(opacity=90); } #help_box { position: absolute; top: 0; right: 0; margin: 4px; padding: 4px; text-align:left; display: none; color: #333; background-color: #fff; border:solid 1px #ccc; font-size: 11px; z-index: 10000; cursor:default; -webkit-border-radius: 8px; -moz-border-radius: 8px; -webkit-box-shadow: 3px 3px 4px rgba(0, 0, 0, 0.5); -moz-box-shadow: 3px 3px 4px rgba(0, 0, 0, 0.5); opacity: .80; -moz-opacity: .80; -khtml-opacity: .80; -ms-filter: "alpha(opacity=80)"; filter: alpha(opacity=80); } #help_box .title { display: block; margin-bottom: 4px; padding: 4px; color: #fff; background-color: #333; font-weight: bold; -webkit-border-radius: 4px; -moz-border-radius: 4px; } #help_box .sub_title { display: block; margin-bottom: 4px; padding: 4px; color: #333; background-color: #eee; border: solid 1px #666; font-weight: bold; -webkit-border-radius: 2px; -moz-border-radius: 2px; } #help_box .sub_title .link { float:right; text-align:right; font-weight: bold; } #help_box .body { display: block; margin-bottom: 4px; padding: 2px; } #help_box .body a:hover { background-color:#C00; color:#fff; -webkit-border-radius: 4px; -moz-border-radius: 4px; } #help_box .body .anchor{ display: inline; margin-bottom: 0px; padding: 0px; } #stats_box { position: absolute; top: 0; right: 0; z-index: 9999; } #help_2 { display: none; } #help_3 { display: none; } #help_4 { display: none; } #help_5 { display: none; } #window-capture { position:absolute; top:282px; width:210px; height:155px; left:50%; margin-left:-105px; text-align:center; overflow: hidden; z-index: 9991; opacity: .80; -moz-opacity: .80; -khtml-opacity: .80; -ms-filter: "alpha(opacity=80)"; filter: alpha(opacity=80); } #window-capture a { padding:2px; } .capture_img { background-color:#333; border: solid 2px #fff; width: 50px; height: 30px; } #ds_back_box { position: absolute; height:460px; width:460px; top:0; left:50%; margin-left:-230px; } #y_counter_box { position:absolute; top:391px; width:180px; left:50%; margin-left:-94px; text-align:center; overflow: hidden; padding:2px; color: #fff; border:solid 2px #eee; font-size: 14px; font-weight: bold; cursor:default; z-index: 9991; -webkit-border-radius: 4px; -moz-border-radius: 4px; -webkit-box-shadow: 3px 3px 4px rgba(255, 255, 255, 0.2); -moz-box-shadow: 3px 3px 4px rgba(255, 255, 255, 0.2); text-shadow : 1 1 2px #000, 1 1 4px #fff; background: #65a9d7; background: -webkit-gradient(linear, left top, left bottom, from(#3e779d), to(#65a9d7)); background: -moz-linear-gradient(top, #3e779d, #65a9d7); opacity: .80; -moz-opacity: .80; -khtml-opacity: .80; -ms-filter: "alpha(opacity=80)"; filter: alpha(opacity=80); } #collision_box { position:absolute; top:264px; width:160px; left:50%; margin-left:-84px; text-align:center; overflow: hidden; padding:2px; color: #fff; border:solid 0px #fff; font-size: 9px; font-weight: bold; cursor:default; z-index: 9991; -webkit-border-radius: 2px; -moz-border-radius: 2px; background: #c00; opacity: .80; -moz-opacity: .80; -khtml-opacity: .80; -ms-filter: "alpha(opacity=80)"; filter: alpha(opacity=80); } スマホ対応(予定) // forked from ctkjapan's "ゆっくりしていってね! vol.14" http://jsdo.it/ctkjapan/yukkuri_0014 // forked from ctkjapan's "ゆっくりしていってね! vol.13" http://jsdo.it/ctkjapan/yukkuri_0013 // Setting var flg_Showfps = 1; var flg_ShowHelp = 0; var flg_bg_colors = 0; var flg_shadow = 1; var flg_MotionBlur = 1; var flg_CameraBlur = 1; var flg_DepthBlur = 1; var flg_Weather = 2; var flg_Yukkuries = 1; var flg_Bg = 0; var flg_Players = 1; var flg_Floor = 3; var flg_Filter = 0; var flg_Rolling = 0; var flg_Interlace = 0; var flg_ScreenEffect = 0; var flg_Collision = 1; var flg_2DMode = 0; var flg_CollisionLine = 0; var flg_InfiniteAdjust = 1; var flg_Fluffy = 1; var flg_Vibration = 0; var flg_stats_lib = 0; var default_Speed_Val_def = 2.0; var default_Speed_Val_low = 0.05; var ZMax = 4096; var Scroll_Volume = ZMax * 0.1; var range_alpha_front = ZMax * 0.05; var range_alpha_back = ZMax * 0.1; var range_blur_start = ZMax * 0.25; var range_blur_end = ZMax - range_alpha_back; var blur_size = 0.002; var blur_alpha = 0.4; var shadow_alpha = 0.3; var fog_alpha = 0.4; var CollisionWaitS = 0.05; var Scene_No = 0; // Parameter var ImgChar_max; var Base_Speed_Val = default_Speed_Val_def; var Speed_Val; var bg_rgb = new cube_Color(0xff, 0xff, 0xff, 1.0); var bg_h = 0; var snow_rgb = new cube_Color(0xff, 0xff, 0xff, 1.0); var colorful_rgb = new cube_Color(0xff, 0xff, 0xff, 1.0); var Base_Alpha = 1.0; var info_text = ""; var y_counter_box_text = ""; var collision_box_text = ""; var Odd = 0; var Stereogram_position = 0; var Stereogram_time = 0; var Stereogram_timing = 0; var flg_AddYukkuri = 0; var flg_DelYukkuri = 0; var BgImgNo = 0; var CollisionWait = 0; var STATS; // yukkuries var yukkuries = []; var yukkuries_max = 4096; var yukkuries_show_max = 50; var yukkuries_Draw; var yukkuries_Draw_max; var yukkuries_FourDraw_max; var yukkuries_max_x = ZMax * 0.5; var yukkuries_max_y = -ZMax * 0.5; var yukkuries_max_z = ZMax; // bgs var bgs = []; var bgs_max = 2; var bgs_Draw_max; var bgs_max_x = ZMax * 0.5; var bgs_max_y = -ZMax * 0.5; var bgs_max_z = ZMax; // snows var snows = []; var snows_max = 128; var snows_Draw_max; var snows_max_x = ZMax * 0.5; var snows_max_y = -ZMax * 0.5; var snows_max_z = ZMax; // players var players = []; var players_max = 8; var players_scale_max; var players_width_max; // keydown_setting var keydown_setting = [ { key: "1", program: "CUBE.FPS.Setting( CUBE.FPS.Base - 1 );" }, { key: "2", program: "CUBE.FPS.Setting( CUBE.FPS.Base + 1 );" }, { key: "3", program: "CUBE.CS[0].C3D.set_Stereogram_volume( CUBE.CS[0].C3D.Stereogram_volume - 1 );" }, { key: "4", program: "CUBE.CS[0].C3D.set_Stereogram_volume( CUBE.CS[0].C3D.Stereogram_volume + 1 );" }, { key: "5", program: "Stereogram_timing++; if (Stereogram_timing > 60) Stereogram_timing = 60;" }, { key: "6", program: "Stereogram_timing--; if (Stereogram_timing < 0) Stereogram_timing = 0;" }, { key: "7", program: "flg_DelYukkuri = 1;" }, { key: "8", program: "flg_AddYukkuri = 1;" } ]; // keyup_setting var keyup_setting = [ { key: "E", program: "flg_ScreenEffect = (flg_ScreenEffect + 1)%7;" }, { key: "N", program: "flg_Floor = (flg_Floor + 1)%4" }, { key: "Q", program: "cube_captureImage( CUBE.canvas[0] );" }, { key: "I", program: "flg_Interlace = (flg_Interlace + 1)%5;" }, { key: "R", program: "flg_Rolling = 1 - flg_Rolling;" }, { key: "Y", program: "flg_Yukkuries = 1 - flg_Yukkuries;" }, { key: "B", program: "flg_Bg = 1 - flg_Bg;" }, { key: "U", program: "flg_Players = 1 - flg_Players;" }, { key: "G", program: "flg_Filter = (flg_Filter + 1)%3;" }, { key: "M", program: "flg_MotionBlur = (flg_MotionBlur + 1)%4;" }, { key: "C", program: "flg_bg_colors = (flg_bg_colors + 1)%6;" }, { key: "S", program: "flg_shadow = (flg_shadow + 1)%3;" }, { key: "D", program: "flg_DepthBlur = (flg_DepthBlur + 1)%3;" }, { key: "F", program: "flg_Showfps = (flg_Showfps + 1)%3;" }, { key: "W", program: "flg_Weather = (flg_Weather + 1)%6;" }, { key: "H", program: "flg_ShowHelp = 1 - flg_ShowHelp;" }, { key: "X", program: "CUBE.CS[0].setWindowMode( CUBE.CS[0].mode_Window + 1 );" }, { key: "Z", program: "CUBE.CS[0].setWindowMode( CUBE.CS[0].mode_Window - 1 );" }, { key: "P", program: "CUBE.setPause( CUBE.flg_Pouse + 1 );" }, { key: "V", program: "flg_Collision = (flg_Collision + 1)%4;" }, { key: "O", program: "if ( CUBE.CS[0].C3D.Angle === 75 ) { CUBE.CS[0].C3D.setAngle(90); } else { CUBE.CS[0].C3D.setAngle(75); }" }, { key: "K", program: "flg_InfiniteAdjust = 1 - flg_InfiniteAdjust; if ( flg_InfiniteAdjust === 0 ) { CUBE.CS[0].C3D.CAMERA[0].oZ = 0 }" }, { key: "J", program: "flg_Fluffy = 1 - flg_Fluffy;" }, { key: "H", program: "flg_Vibration = 1 - flg_Vibration;" }, { key: "L", program: "flg_2DMode = 1 - flg_2DMode;" } ]; // --------------------------------------------------- // onload // --------------------------------------------------- onload = function() { var C = CUBE; C.MATH = new cube_Math(); C.INPUT = new cube_Input(); C.FPS = new cube_Fps( 60 ); if ( !C.createCanvas( "world", "2d" ) ) { return false; } C.MATH.createRandom ( 20110127 ); C.createCanvas3D( "world", 90 ); var CS = C.CS[0]; var C3D = C.CS[0].C3D; C3D.createCamera(); C3D.ZMax = ZMax; C3D.CAMERA[0].oZ = -C3D.ZMax; C.INPUT.mouseX = C.browserWidth >> 1; C.INPUT.mouseY = C.browserHeight >> 1; ImgChar_max = UrlImg_Char.length; var i = 0; for (; i < ImgChar_max; i++ ) { C.LoadImage( UrlImg_Char[i] ); } C.LoadImage( UrlImg_Filter ); C.LoadImage( UrlImg_DsFilter ); var i = 0, loop = yukkuries_max; for (; i < loop; ++i ) { yukkuries[i] = new Yukkuri( 0, i%ImgChar_max ); } var i = yukkuries_show_max; while ( i-- ) { yukkuries[i].hidden = 0; } var i = 0, loop = snows_max; for (; i < loop; ++i ) { snows[i] = new Snow( 0 ); } bgs[0] = new Bg( 0, 0 ); var SPRITE = C3D.SPRITE; var RAND = C.MATH.RAND[0]; var i = SPRITE.length; while ( --i ) { SPRITE[i].rZ = RAND.nextInt(360); } var i = players_max; while ( i-- ) { players[i] = new Player( CS.WidthCenter, CS.HeightCenter, 1.0 / (players_max-1) * (i-1) ); } // click C.D.addEventListener( "click", function( EV ) { }, false ); // mousedown C.D.addEventListener( "mousedown", function( EV ) { if ( EV.which === 1 ) { Base_Speed_Val = default_Speed_Val_low; } if ( EV.which === 2 ) { cube_captureImage( CUBE.canvas[0] ); cube_kill_Event( EV ); } }, false ); // mouseup C.D.addEventListener( "mouseup", function( EV ) { if ( EV.which === 1 ) { Base_Speed_Val = default_Speed_Val_def; } }, false ); // keydown C.D.addEventListener( "keydown", function( EV ) { var key = String.fromCharCode(EV.keyCode); var i = keydown_setting.length; while ( i-- ) { if ( key === keydown_setting[i].key ) { eval( keydown_setting[i].program ); break; } } }, true ); // keyup C.D.addEventListener( "keyup", function( EV ) { var key = String.fromCharCode(EV.keyCode); var i = keyup_setting.length; while ( i-- ) { if ( key === keyup_setting[i].key ) { eval( keyup_setting[i].program ); break; } } }, true ); // contextmenu C.D.addEventListener("contextmenu", function( EV ){ flg_ShowHelp = 1 - flg_ShowHelp; }, true ); // dblclick C.D.addEventListener( "dblclick", function( EV ) { // if ( EV.which === 1 ) { C.setPause( C.flg_Pouse + 1 ); } }, true ); CS.setWindowMode( 4 ); C3D.set_Stereogram_volume( 8 ); if ( flg_stats_lib !== 0 ) { STATS = new Stats(); STATS.domElement.id = 'stats_box'; C.D.body.appendChild( STATS.domElement ); } delete C; delete CS; delete C3D; delete SPRITE; delete RAND; MainLoop(); }; // --------------------------------------------------- // MainLoop // --------------------------------------------------- function MainLoop() { var C = CUBE; var CS = C.CS[0]; var CTX = C.CTX[0]; C.FPS.LoopStart(); CS.setCanvasSize(); yukkuries_Draw = 0; yukkuries_Draw_max = 0; yukkuries_FourDraw_max = 0; snows_Draw_max = 0; Odd = 1 - Odd; if ( Stereogram_timing > 0 ) { Stereogram_time++; if ( Stereogram_time >= Stereogram_timing ) { Stereogram_position = 1 - Stereogram_position; Stereogram_time = 0; } } Speed_Val = Base_Speed_Val / C.FPS.Fps; CollisionWait = CollisionWaitS * C.FPS.Fps; changeColor(); if ( flg_MotionBlur === 0 ) { Base_Alpha = 1.0; } else if ( flg_MotionBlur === 1 ) { Base_Alpha = 0.9; } else if ( flg_MotionBlur === 2 ) { Base_Alpha = 0.1; } else if ( flg_MotionBlur === 3 ) { Base_Alpha = 0.01; } if ( Scene_No === 1 ) { Scene_0001(); if ( Odd === 1 ) drawDebug(); } else if ( C.IMG_count <= C.IMG_loaded_count ) { Scene_No = 1; } C.FPS.LoopEnd(); if ( flg_stats_lib !== 0 ) STATS.update(); C.W.setTimeout( function() { MainLoop(); }, C.FPS.RealTimeout ); delete C; delete CS; delete CTX; } // --------------------------------------------------- // Scene_0001 // --------------------------------------------------- function Scene_0001() { var C = CUBE; var CS = C.CS[0]; var CTX = C.CTX[0]; var C3D = CS.C3D; var SPRITE = C3D.SPRITE; var CAMERA = C3D.CAMERA[0]; var RAND = C.MATH.RAND[0]; var CAMERA_oX_new = ( players[0].cX - (CS.WidthCenter) ) / (CS.WidthCenter) * ( yukkuries_max_x >> 1); var CAMERA_oY_new = ( players[0].cY - (CS.Height) ) / (CS.HeightCenter) * (-yukkuries_max_y>>2); var CAMERA_oZ_new = CAMERA.oZ; if ( C.INPUT.mouseWheel !== 0 ) { CAMERA_oZ_new += C.INPUT.mouseWheel * Scroll_Volume; C.INPUT.mouseWheel = 0; } if ( flg_Vibration === 1 ) { if ( RAND.nextInt(4) === 0 ) { CAMERA.oX_vibration = RAND.nextInt(yukkuries_max_x>>4) - (yukkuries_max_x>>3); CAMERA.oY_vibration = RAND.nextInt(yukkuries_max_y>>4) - (yukkuries_max_y>>3); } CAMERA_oX_new += CAMERA.oX_vibration; CAMERA_oY_new += CAMERA.oY_vibration; } CAMERA.oX = ( (CAMERA_oX_new << 1) + CAMERA.oX ) / 3; CAMERA.oY = ( (CAMERA_oY_new << 1) + CAMERA.oY ) / 3; CAMERA.oZ = ( (CAMERA_oZ_new << 1) + CAMERA.oZ ) / 3; if ( CAMERA.oY > -1 ) CAMERA.oY = -1; players[0].updata_core( 0 ); players_scale_max = CS.SizeCenter >> 3; players_width_max = players_scale_max >> 3; if ( flg_Collision !== 0 ) { var Collisions = []; var Collisions_count = 0; var hit_count = 0; var loop_max = 1; var hit_max = 2; var precision = 2; if ( flg_Collision === 2 ) loop_max = 2; hit_max = 4; precision = 4; if ( flg_Collision === 3 ) loop_max = 4; hit_max = 8; precision = 8; var i = SPRITE.length; while ( --i ) { if ( SPRITE[i].OBJ.hidden === 0 && SPRITE[i].Tag === "Yukkuri" ) { Collisions[Collisions_count] = i; Collisions[Collisions_count].oY = SPRITE[i].oY; Collisions_count++; } } var k = loop_max + 1; while ( --k ) { sortY( Collisions ); var i = Collisions.length; if ( i > 0 ) { while ( --i ) { hit_count = 0; var j = i; while ( --j ) { var lD = ( SPRITE[Collisions[i]].Size + SPRITE[Collisions[j]].Size ) * 0.5; lD = lD * lD; var result = hitSPRITE( Collisions[i], Collisions[j], lD, precision ); if ( result.hit > 0 ) { hit_count++; } if ( hit_count >= hit_max ) { break; } } } } } delete Collisions; } var i = SPRITE.length % 8, j = SPRITE.length - i; while ( --i ) { SPRITE[j + i].OBJ.updata( 0, 0, 0, j + i ); } i = (SPRITE.length >> 3) + 1; if ( i > 1 ) { while ( --i ) { SPRITE[(i << 3)].OBJ.updata( 0, 0, 0, (i << 3) ); SPRITE[(i << 3) - 1].OBJ.updata( 0, 0, 0, (i << 3) - 1 ); SPRITE[(i << 3) - 2].OBJ.updata( 0, 0, 0, (i << 3) - 2 ); SPRITE[(i << 3) - 3].OBJ.updata( 0, 0, 0, (i << 3) - 3 ); SPRITE[(i << 3) - 4].OBJ.updata( 0, 0, 0, (i << 3) - 4 ); SPRITE[(i << 3) - 5].OBJ.updata( 0, 0, 0, (i << 3) - 5 ); SPRITE[(i << 3) - 6].OBJ.updata( 0, 0, 0, (i << 3) - 6 ); SPRITE[(i << 3) - 7].OBJ.updata( 0, 0, 0, (i << 3) - 7 ); } } sortZ( SPRITE ); var i = players.length; while ( --i ) { players[i].updata( 0 ); } // draw if ( Base_Alpha >= 1 ) CTX.clearRect(0, 0, CS.Width, CS.Height); CTX.save(); CTX.beginPath(); CTX.globalAlpha = Base_Alpha; CTX.fillStyle = bg_rgb.RGB(); CTX.fillRect(0, 0, CS.Width, CS.Height); CTX.restore(); if ( flg_Floor === 3 ) { var temp_globalAlpha = 0.4; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, 0, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x1 = result.x, y1 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, 0, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x2 = result.x, y2 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, 0, CAMERA.oZ - CS.C3D.ZMax ); var x3 = result.x, y3 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, 0, CAMERA.oZ - CS.C3D.ZMax ); var x4 = result.x, y4 = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = temp_globalAlpha * Base_Alpha; CTX.strokeStyle = "rgb(64,64,64)"; CTX.fillStyle = "rgb(255,255,255)"; CTX.moveTo(x1,y1); CTX.lineTo(x2,y2); CTX.lineTo(x3,y3); CTX.lineTo(x4,y4); CTX.closePath(); CTX.stroke(); CTX.fill(); CTX.restore(); var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, yukkuries_max_y, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x1 = result.x, y1 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, yukkuries_max_y, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x2 = result.x, y2 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, yukkuries_max_y, CAMERA.oZ - CS.C3D.ZMax ); var x3 = result.x, y3 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, yukkuries_max_y, CAMERA.oZ - CS.C3D.ZMax ); var x4 = result.x, y4 = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = temp_globalAlpha * Base_Alpha; CTX.strokeStyle = "rgb(64,64,64)"; CTX.fillStyle = "rgb(255,255,255)"; CTX.moveTo(x1,y1); CTX.lineTo(x2,y2); CTX.lineTo(x3,y3); CTX.lineTo(x4,y4); CTX.closePath(); CTX.stroke(); CTX.fill(); CTX.restore(); var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, 0, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x1 = result.x, y1 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, yukkuries_max_y, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x2 = result.x, y2 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, yukkuries_max_y, CAMERA.oZ - CS.C3D.ZMax ); var x3 = result.x, y3 = result.y; var result = CS.C3D.OtoC( CAMERA, -yukkuries_max_x, 0, CAMERA.oZ - CS.C3D.ZMax ); var x4 = result.x, y4 = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = temp_globalAlpha * Base_Alpha; CTX.strokeStyle = "rgb(64,64,64)"; CTX.fillStyle = "rgb(255,255,255)"; CTX.moveTo(x1,y1); CTX.lineTo(x2,y2); CTX.lineTo(x3,y3); CTX.lineTo(x4,y4); CTX.closePath(); CTX.stroke(); CTX.fill(); CTX.restore(); var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, 0, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x1 = result.x, y1 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, yukkuries_max_y, CAMERA.oZ + (CS.C3D.ZMax<<1) ); var x2 = result.x, y2 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, yukkuries_max_y, CAMERA.oZ - CS.C3D.ZMax ); var x3 = result.x, y3 = result.y; var result = CS.C3D.OtoC( CAMERA, yukkuries_max_x, 0, CAMERA.oZ - CS.C3D.ZMax ); var x4 = result.x, y4 = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = temp_globalAlpha * Base_Alpha; CTX.strokeStyle = "rgb(64,64,64)"; CTX.fillStyle = "rgb(255,255,255)"; CTX.moveTo(x1,y1); CTX.lineTo(x2,y2); CTX.lineTo(x3,y3); CTX.lineTo(x4,y4); CTX.closePath(); CTX.stroke(); CTX.fill(); CTX.restore(); } else if ( flg_Floor !== 0 ) { var result = CS.C3D.OtoC( CAMERA, 0, 0, CAMERA.oZ + CS.C3D.ZMax ); var ZMaxY = result.y; CTX.save(); CTX.beginPath(); CTX.globalAlpha = 0.4 * Base_Alpha; if ( flg_Floor === 1 ) { CTX.fillStyle = "rgb(255,255,255)"; CTX.shadowColor = "rgba(230,230,230," + CTX.globalAlpha + ")"; } else { CTX.fillStyle = colorful_rgb.RGB(); CTX.shadowColor = "rgba(" + colorful_rgb.R + "," + colorful_rgb.G + "," + colorful_rgb.B + "," + CTX.globalAlpha + ")"; } CTX.shadowBlur = CS.HeightCenter>>3; CTX.shadowOffsetX = 0; CTX.shadowOffsetY = 0; CTX.fillRect(0, C.MATH.round(ZMaxY), CS.Width, CS.Height); CTX.restore(); } var position = "L"; if ( Stereogram_position === 1 ) position = "R"; if ( Stereogram_timing === 0 ) position = ""; var i = SPRITE.length % 8, j = SPRITE.length - i; while ( --i ) { SPRITE[j + i].OBJ.draw( 0, 0, 0, j + i, position ); } i = (SPRITE.length >> 3) + 1; if ( i > 1 ) { while ( --i ) { SPRITE[(i << 3)].OBJ.draw( 0, 0, 0, (i << 3), position ); SPRITE[(i << 3) - 1].OBJ.draw( 0, 0, 0, (i << 3) - 1, position ); SPRITE[(i << 3) - 2].OBJ.draw( 0, 0, 0, (i << 3) - 2, position ); SPRITE[(i << 3) - 3].OBJ.draw( 0, 0, 0, (i << 3) - 3, position ); SPRITE[(i << 3) - 4].OBJ.draw( 0, 0, 0, (i << 3) - 4, position ); SPRITE[(i << 3) - 5].OBJ.draw( 0, 0, 0, (i << 3) - 5, position ); SPRITE[(i << 3) - 6].OBJ.draw( 0, 0, 0, (i << 3) - 6, position ); SPRITE[(i << 3) - 7].OBJ.draw( 0, 0, 0, (i << 3) - 7, position ); } } if ( flg_Players !== 0 ) { var i = players.length; while ( --i ) { players[i].draw( 0, 0, 0, "" ); } } if ( flg_ScreenEffect !== 0 ) { var w = CS.Width; var h = CS.Height; var GetImage = CTX.getImageData(0, 0, w, h); var GetImageData = GetImage.data; var pixelImageData = CS.Bitmap.data; var y = h; while ( y-- ) { var x = w; var ptr_base = y * w; while ( x-- ) { var ptr = ( ptr_base + x ) << 2; var R = GetImageData[ptr + 0]; var G = GetImageData[ptr + 1]; var B = GetImageData[ptr + 2]; var A = GetImageData[ptr + 3]; if ( flg_ScreenEffect === 1 ) { var monochrome = C.MATH.round(0.298912 * R + 0.586611 * G + 0.114478 * B); pixelImageData[ptr + 0] = monochrome; pixelImageData[ptr + 1] = monochrome; pixelImageData[ptr + 2] = monochrome; } else if ( flg_ScreenEffect === 2 ) { var monochrome = C.MATH.round(0.298912 * R + 0.586611 * G + 0.114478 * B); pixelImageData[ptr + 0] = ( monochrome >= 128 )? R : 0x00; pixelImageData[ptr + 1] = ( monochrome >= 128 )? G : 0x00; pixelImageData[ptr + 2] = ( monochrome >= 128 )? B : 0x00; } else if ( flg_ScreenEffect === 3 ) { pixelImageData[ptr + 0] = ( R >= 128 )? 0xff : 0x00; pixelImageData[ptr + 1] = ( G >= 128 )? 0xff : 0x00; pixelImageData[ptr + 2] = ( B >= 128 )? 0xff : 0x00; } else if ( flg_ScreenEffect === 4 ) { var monochrome = C.MATH.round(0.298912 * R + 0.586611 * G + 0.114478 * B); pixelImageData[ptr + 0] = ( monochrome >= 128 )? 0xff : 0x00; pixelImageData[ptr + 1] = ( monochrome >= 128 )? 0xff : 0x00; pixelImageData[ptr + 2] = ( monochrome >= 128 )? 0xff : 0x00; } else if ( flg_ScreenEffect === 5 ) { var monochrome = C.MATH.round(0.298912 * R + 0.586611 * G + 0.114478 * B); if ( monochrome >= 192 ) { monochrome = 0xff; } else if ( monochrome >= 128 ) { monochrome = 0x80; } else if ( monochrome >= 64 ) { monochrome = 0x40; } else { monochrome = 0x00; } pixelImageData[ptr + 0] = monochrome-32; pixelImageData[ptr + 1] = monochrome; pixelImageData[ptr + 2] = monochrome-128; } else if ( flg_ScreenEffect === 6 ) { pixelImageData[ptr + 0] = C.MATH.abs(255 - R); pixelImageData[ptr + 1] = C.MATH.abs(255 - G); pixelImageData[ptr + 2] = C.MATH.abs(255 - B); } pixelImageData[ptr + 3] = A; } } CTX.putImageData(CS.Bitmap, 0, 0); delete pixelImageData; delete GetImageData; delete GetImage; } if ( flg_Filter !== 0 ) { CTX.save(); CTX.beginPath(); CTX.globalAlpha = fog_alpha * Base_Alpha; if ( flg_Filter === 1 ) CTX.drawImage(C.IMG[ImgChar_max].OBJ, 0, 0, CS.Width, CS.Height); if ( flg_Filter === 2 ) CTX.drawImage(C.IMG[ImgChar_max+1].OBJ, 0, 0, CS.Width, CS.Height); CTX.restore(); } Interlace( 0, 1, Base_Alpha ); AddYukkuri(); DelYukkuri(); delete C; delete CS; delete CTX; delete C3D; delete SPRITE; delete CAMERA; delete RAND; } // --------------------------------------------------- // hitSPRITE // --------------------------------------------------- function hitSPRITE( A, B, lD, precision ) { var C = CUBE; var SPRITE_A = C.CS[0].C3D.SPRITE[A]; var SPRITE_B = C.CS[0].C3D.SPRITE[B]; var SPRITE_A_OBJ = SPRITE_A.OBJ; var SPRITE_B_OBJ = SPRITE_B.OBJ; var temp_a = 0.5; var temp_b = 0.15; var hit_count = 0; if ( precision < 1 ) precision = 1; precision++; while( --precision ) { var lX = C.MATH.abs( SPRITE_B.oX - SPRITE_A.oX ); var lY = C.MATH.abs( SPRITE_B.oY - SPRITE_A.oY ); var lZ = C.MATH.abs( SPRITE_B.oZ - SPRITE_A.oZ ); var length = lX * lX + lY * lY + lZ * lZ; if ( length > lD ) break; hit_count++; var A_speedX = SPRITE_A_OBJ.speedX; var B_speedX = SPRITE_B_OBJ.speedX; var A_speedY = SPRITE_A_OBJ.speedY; var B_speedY = SPRITE_B_OBJ.speedY; var A_speedZ = SPRITE_A_OBJ.speedZ; var B_speedZ = SPRITE_B_OBJ.speedZ; if ( SPRITE_A.hit === 0 ) { SPRITE_A.hit = 1; if ( SPRITE_A.wait <= 0 ) { if ( A_speedX < B_speedX ) { SPRITE_A_OBJ.speedX = B_speedX; } else { SPRITE_A_OBJ.speedX *= temp_a; } if ( A_speedY < B_speedY ) { SPRITE_A_OBJ.speedY = B_speedY; } else { SPRITE_A_OBJ.speedY *= temp_a; } if ( A_speedZ < B_speedZ ) { SPRITE_A_OBJ.speedZ = B_speedZ; } else { SPRITE_A_OBJ.speedZ *= temp_a; } SPRITE_A.wait = CollisionWait; if ( A_speedX < B_speedX ) { SPRITE_A_OBJ.wayX = -SPRITE_A_OBJ.wayX; } if ( A_speedY < B_speedY ) { SPRITE_A_OBJ.wayY = -SPRITE_A_OBJ.wayY; } if ( A_speedZ < B_speedZ ) { SPRITE_A_OBJ.wayZ = -SPRITE_A_OBJ.wayZ; } } } if ( SPRITE_B.hit === 0 ) { SPRITE_B.hit = 1; if ( SPRITE_B.wait <= 0 ) { if ( A_speedX < B_speedX ) { SPRITE_B_OBJ.speedX *= temp_a; } else { SPRITE_B_OBJ.speedX = A_speedX; } if ( A_speedY < B_speedY ) { SPRITE_B_OBJ.speedY *= temp_a; } else { SPRITE_B_OBJ.speedY = A_speedY; } if ( A_speedZ < B_speedZ ) { SPRITE_B_OBJ.speedZ *= temp_a; } else { SPRITE_B_OBJ.speedZ = A_speedZ; } SPRITE_B.wait = CollisionWait; if ( A_speedX >= B_speedX ) { SPRITE_B_OBJ.wayX = -SPRITE_B_OBJ.wayX; } if ( A_speedY >= B_speedY ) { SPRITE_B_OBJ.wayY = -SPRITE_B_OBJ.wayY; } if ( A_speedZ >= B_speedZ ) { SPRITE_B_OBJ.wayZ = -SPRITE_B_OBJ.wayZ; } } } var A_B = ( SPRITE_A.oX - SPRITE_B.oX ) * temp_b; if ( A_B === 0 ) A_B = 0.1; SPRITE_A.oX += A_B; SPRITE_B.oX -= A_B; var temp_X = yukkuries_max_x - SPRITE_A.oX - (SPRITE_A.size>>1); if ( temp_X < 0 ) { SPRITE_A.oX = yukkuries_max_x - (SPRITE_A.size>>1); SPRITE_B.oX += temp_X; } else { var temp_X = yukkuries_max_x + SPRITE_A.oX - (SPRITE_A.size>>1); if ( temp_X < 0 ) { SPRITE_A.oX = -yukkuries_max_x + (SPRITE_A.size>>1); SPRITE_B.oX -= temp_X; } } var temp_X = yukkuries_max_x - SPRITE_B.oX - (SPRITE_B.size>>1); if ( temp_X < 0 ) { SPRITE_B.oX = yukkuries_max_x - (SPRITE_B.size>>1); SPRITE_A.oX += temp_X; } else { var temp_X = yukkuries_max_x + SPRITE_B.oX - (SPRITE_B.size>>1); if ( temp_X < 0 ) { SPRITE_B.oX = -yukkuries_max_x + (SPRITE_B.size>>1); SPRITE_A.oX -= temp_X; } } /* if (SPRITE_A.oX + (SPRITE_A.size>>1) > yukkuries_max_x) { SPRITE_A.oX = yukkuries_max_x - (SPRITE_A.size>>1); } else if (SPRITE_A.oX - (SPRITE_A.size>>1) < -yukkuries_max_x) { SPRITE_A.oX = -yukkuries_max_x + (SPRITE_A.size>>1); } if (SPRITE_B.oX + (SPRITE_B.size>>1) > yukkuries_max_x) { SPRITE_B.oX = yukkuries_max_x - (SPRITE_B.size>>1); } else if (SPRITE_B.oX - (SPRITE_B.size>>1) < -yukkuries_max_x) { SPRITE_B.oX = -yukkuries_max_x + (SPRITE_B.size>>1); } */ var A_B = ( SPRITE_A.oY - SPRITE_B.oY ) * temp_b; if ( A_B === 0 ) A_B = 0.1; SPRITE_A.oY += A_B; SPRITE_B.oY -= A_B; var temp_Y = SPRITE_A.oY + (SPRITE_A.size>>1); if ( temp_Y > 0 ) { SPRITE_A.oY = -(SPRITE_A.size>>1); SPRITE_B.oY -= temp_Y; } /* var temp_Y = -yukkuries_max_y + SPRITE_A.oY + (SPRITE_A.size>>1); if ( temp_Y < 0 ) { SPRITE_A.oY = yukkuries_max_y + (SPRITE_A.size>>1); SPRITE_B.oY -= temp_Y; } */ var temp_Y = SPRITE_B.oY - (SPRITE_B.size>>1); if ( temp_Y > 0 ) { SPRITE_B.oY = -(SPRITE_B.size>>1); SPRITE_A.oY -= temp_Y; } /* var temp_Y = -yukkuries_max_y + SPRITE_B.oY + (SPRITE_B.size>>1); if ( temp_Y < 0 ) { SPRITE_B.oY = yukkuries_max_y + (SPRITE_B.size>>1); SPRITE_A.oY -= temp_Y; } */ /* if (SPRITE_A.oY - (SPRITE_A.size>>1) < yukkuries_max_y) { SPRITE_A.oY = yukkuries_max_y + (SPRITE_A.size>>1); } else if (SPRITE_A.oY + (SPRITE_A.size>>1) > 0) { SPRITE_A.oY = -(SPRITE_A.size>>1); } if (SPRITE_B.oY - (SPRITE_B.size>>1) < yukkuries_max_y) { SPRITE_B.oY = yukkuries_max_y + (SPRITE_B.size>>1); } else if (SPRITE_B.oY + (SPRITE_B.size>>1) > 0) { SPRITE_B.oY = -(SPRITE_B.size>>1); } */ if ( flg_2DMode === 0 ) { A_B = ( SPRITE_A.oZ - SPRITE_B.oZ ) * temp_b; if ( A_B === 0 ) A_B = 0.1; SPRITE_A.oZ += A_B; SPRITE_B.oZ -= A_B; } } SPRITE_A.hit = 0; delete C; delete SPRITE_A; delete SPRITE_B; delete SPRITE_A_OBJ; delete SPRITE_B_OBJ; return {flg: true, hit: hit_count}; } // --------------------------------------------------- // AddYukkuri // --------------------------------------------------- function AddYukkuri() { if ( flg_AddYukkuri === 0 ) return; if ( yukkuries_show_max >= yukkuries_max ) { flg_AddYukkuri = 0; return; } flg_AddYukkuri = 0; yukkuries[yukkuries_show_max].hidden = 0; yukkuries_show_max++; var C = CUBE; var C3D = C.CS[0].C3D; BgImgNo = C.MATH.floor(yukkuries_show_max%ImgChar_max); C3D.SPRITE[C3D.SPRITE_count-1].IMG_no = BgImgNo; delete C; delete C3D; } // --------------------------------------------------- // DelYukkuri // --------------------------------------------------- function DelYukkuri() { if ( flg_DelYukkuri === 0 ) return; if ( yukkuries_show_max <= 0 ) { flg_DelYukkuri = 0; return; } yukkuries_show_max--; yukkuries[yukkuries_show_max].hidden = 1; flg_DelYukkuri = 0; var C = CUBE; var C3D = C.CS[0].C3D; BgImgNo = C.MATH.floor(yukkuries_show_max%ImgChar_max); C3D.SPRITE[C3D.SPRITE_count-1].IMG_no = BgImgNo; delete C; delete C3D; } // --------------------------------------------------- // changeColor // --------------------------------------------------- function changeColor() { var C = CUBE; bg_h += 40 / C.FPS.Fps; bg_h = bg_h % 360; var result = cube_HSVtoRGB( 360-bg_h, 0.8, 1.0 ); colorful_rgb.R = result.r; colorful_rgb.G = result.g; colorful_rgb.B = result.b; if ( flg_bg_colors === 0 ) { var result = cube_HSVtoRGB( bg_h, 0.3, 1.0 ); bg_rgb.R = result.r; bg_rgb.G = result.g; bg_rgb.B = result.b; } else if ( flg_bg_colors === 1 ) { bg_rgb.R = 0xff; bg_rgb.G = 0xff; bg_rgb.B = 0xff; } else if ( flg_bg_colors === 2 ) { bg_rgb.R = 0x00; bg_rgb.G = 0x00; bg_rgb.B = 0x00; } else if ( flg_bg_colors === 3 ) { bg_rgb.R = 160; bg_rgb.G = 180; bg_rgb.B = 240; } else if ( flg_bg_colors === 4 ) { bg_rgb.R = 10; bg_rgb.G = 30; bg_rgb.B = 80; } else { var result = cube_HSVtoRGB( bg_h, 0.6, 1.0 ); bg_rgb.R = result.r; bg_rgb.G = result.g; bg_rgb.B = result.b; } delete C; } // --------------------------------------------------- // sortY // --------------------------------------------------- function sortY( array ) { array.sort( compare ); function compare( a, b ) { return ( b.oY - a.oY ); } } // --------------------------------------------------- // sortZ // --------------------------------------------------- function sortZ( array ) { array.sort( compare ); function compare( a, b ) { return ( a.oZ - b.oZ ); } } // --------------------------------------------------- // drawImageFour // --------------------------------------------------- function drawImageFour( CTX, IMG, X, Y, W, H, blur_size ) { var C = CUBE; var Xp = C.MATH.round( X + blur_size ); var Xm = C.MATH.round( X - blur_size ); var Yp = C.MATH.round( Y + blur_size ); var Ym = C.MATH.round( Y - blur_size ); W = C.MATH.round( W ); H = C.MATH.round( H ); if ( flg_DepthBlur === 1 ) { CTX.drawImage( IMG, Xp, Yp, W, H ); CTX.drawImage( IMG, Xm, Ym, W, H ); } else { CTX.drawImage( IMG, Xp, Yp, W, H ); CTX.drawImage( IMG, Xp, Ym, W, H ); CTX.drawImage( IMG, Xm, Yp, W, H ); CTX.drawImage( IMG, Xm, Ym, W, H ); } delete C; } // --------------------------------------------------- // drawDebug // --------------------------------------------------- function drawDebug() { var C = CUBE; var BOX = C.D.getElementById("fps_box"); if( BOX ) { if ( flg_Showfps >= 1 ) { info_text += C.MATH.round(C.FPS.Fps*10)/10; info_text += "/"; info_text += C.FPS.Base; info_text += " fps\n"; } if ( flg_Showfps === 2 ) { info_text += "min_"; info_text += C.MATH.round(C.FPS.Min*10)/10; info_text += " max_"; info_text += C.MATH.round(C.FPS.Max*10)/10; info_text += " ave_"; info_text += C.MATH.round(C.FPS.Average*10)/10; info_text += "\n"; info_text += "in_"; info_text += C.FPS.loopInTime; info_text += " out_"; info_text += C.FPS.loopOutTime; info_text += " loop_"; info_text += C.FPS.loopTime; info_text += " base_"; info_text += C.MATH.round(C.FPS.BaseTimeout*10)/10; info_text += " wait_"; info_text += C.MATH.round(C.FPS.RealTimeout*10)/10; info_text += "\n"; info_text += "Y "; info_text += yukkuries_FourDraw_max; info_text += "/"; info_text += yukkuries_Draw_max; info_text += "/"; info_text += yukkuries_show_max; info_text += "/"; info_text += yukkuries_max; info_text += "\n"; info_text += "W "; info_text += snows_Draw_max; info_text += "/"; info_text += snows_max; info_text += "\nBgImgNo "; info_text += BgImgNo; info_text += "\n2DMode "; info_text += flg_2DMode; info_text += "\nInfiniteAdjust "; info_text += flg_InfiniteAdjust; info_text += "\nFluffy "; info_text += flg_Fluffy; info_text += "\n"; } if ( C.flg_Pouse !== 0 ) info_text += "PAUSE\n"; if ( info_text === "" ) { BOX.textContent = " "; if ( BOX.style.display !== "none" ) BOX.style.display = "none"; } else { BOX.textContent = info_text; if ( BOX.style.display !== "block" ) BOX.style.display = "block"; info_text = ""; } } var BOX = C.D.getElementById("help_box"); if( BOX ) { if ( flg_ShowHelp === 1 ) { if ( BOX.style.display !== "block" ) BOX.style.display = "block"; } else { if ( BOX.style.display !== "none" ) BOX.style.display = "none"; } } var temp_text = "只今のゆっくり:" + yukkuries_show_max; if ( y_counter_box_text !== temp_text ) { y_counter_box_text = temp_text; var BOX = C.D.getElementById("y_counter_box"); if( BOX ) { BOX.textContent = temp_text; } } var temp_text = "只今の当たり判定:ON"; if ( flg_Collision === 0 ) temp_text = "只今の当たり判定:OFF"; if ( flg_Collision === 2 ) temp_text = "只今の当たり判定:x2"; if ( flg_Collision === 3 ) temp_text = "只今の当たり判定:x4"; if ( flg_2DMode === 1 ) temp_text += "(2D mode)"; if ( collision_box_text !== temp_text ) { collision_box_text = temp_text; var BOX = C.D.getElementById("collision_box"); if( BOX ) { BOX.textContent = temp_text; } } delete C; delete BOX; } // --------------------------------------------------- // InfiniteAdjust // --------------------------------------------------- function InfiniteAdjust( a, b, max ) { var d = a - b; if ( d <= 0 ) { return InfiniteAdjust( a + max, b, max ); } else if ( d >= max ) { return InfiniteAdjust( a - max, b, max ); } return a; } // --------------------------------------------------- // Interlace // --------------------------------------------------- function Interlace( CS_no, lineWidth, Base_Alpha ) { var C = CUBE; if ( flg_Interlace === 0 ) return; var CS = C.CS[CS_no]; var CTX = C.CTX[CS_no]; var LineType = 0; if ( flg_Interlace === 2 || flg_Interlace === 4 ) LineType = Odd* lineWidth; CTX.save(); CTX.globalAlpha = 0.4 * Base_Alpha; CTX.lineWidth = lineWidth; var i = C.MATH.round( CS.HeightCenter / lineWidth + 1 ); while ( --i ) { CTX.beginPath(); CTX.moveTo( 0, ( ( i<<1 ) - 1 ) * lineWidth + LineType - 0.5 ); CTX.lineTo( CS.Width, ( ( i<<1 ) - 1 ) * lineWidth + LineType - 0.5 ); CTX.stroke(); } if ( flg_Interlace >= 3 ) { var i = C.MATH.round( CS.WidthCenter / lineWidth + 1 ); while ( --i ) { CTX.beginPath(); CTX.moveTo( ( ( i<<1 ) - 1 ) * lineWidth + LineType - 0.5, 0 ); CTX.lineTo( ( ( i<<1 ) - 1 ) * lineWidth + LineType - 0.5, CS.Height ); CTX.stroke(); } } CTX.restore(); delete C; } // --------------------------------------------------- // setHelp // --------------------------------------------------- function setHelp( No ) { var C = CUBE; var i = 6; while ( --i ) { var BOX = C.D.getElementById("help_" + i); if( BOX ) { if ( i === No ) { if ( BOX.style.display !== "block" ) BOX.style.display = "block"; } else { if ( BOX.style.display !== "none" ) BOX.style.display = "none"; } } } delete C; delete BOX; } <div id="ds_back_box"><img src="http://ctkjapan.net/yukkuri/images/3ds_4.png" /></div> <div><pre id="fps_box"> </pre></div> <div id="help_box"> <span class="title">Help - Make yourself at home !</span> <span class="body"> <div id="help_1"> <span class="sub_title">»Basic <span class="link">1/5 <a href="#" onclick="setHelp(1); return false;">↑</a><a href="#" onclick="setHelp(2); return false;">↓</a></span></span> MoveCamera: MouseMove<br/> Slow: LeftClick<br/> Zoom: WheelUp / Down<br/> Help (on/off): RightClick / H<br/> Pause (<a href="#" onclick="CUBE.setPause( 1 ); return false;">on</a>/<a href="#" onclick="CUBE.setPause( 0 ); return false;">off</a>): P<br/> <br/> WindowSize: X / Z<br/> (<a href="#" onclick="CUBE.CS[0].setWindowMode(0); return false;">normal</a>/<a href="#" onclick="CUBE.CS[0].setWindowMode(1); return false;">Zoom</a>/<a href="#" onclick="CUBE.CS[0].setWindowMode(2); return false;">ZoomHQ</a>/<a href="#" onclick="CUBE.CS[0].setWindowMode(3); return false;">Full</a>/<a href="#" onclick="CUBE.CS[0].setWindowMode(4); return false;">FullHQ</a>)<br/> <br/> <a href="#" onclick="cube_captureImage( CUBE.canvas[0] ); return false;">PrintScreen</a>: CenterClick / Q<br/> </div> <div id="help_2"> <span class="sub_title">»Object <span class="link">2/5 <a href="#" onclick="setHelp(1); return false;">↑</a><a href="#" onclick="setHelp(3); return false;">↓</a></span></span> Yukkuri (<a href="#" onclick="flg_Yukkuries=1; return false;">show</a>/<a href="#" onclick="flg_Yukkuries=0; return false;">hide</a>): Y<br/> Yukkuri --: 7<br/> Yukkuri ++: 8<br/> <br/> BgObject (<a href="#" onclick="flg_Bg=1; return false;">show</a>/<a href="#" onclick="flg_Bg=0; return false;">hide</a>): B<br/> Weather (<a href="#" onclick="flg_Weather=1; return false;">1</a>/<a href="#" onclick="flg_Weather=2; return false;">2</a>/<a href="#" onclick="flg_Weather=3; return false;">3</a>/<a href="#" onclick="flg_Weather=4; return false;">4</a>/<a href="#" onclick="flg_Weather=5; return false;">5</a>/<a href="#" onclick="flg_Weather=0; return false;">hide</a>): W<br/> Floor (<a href="#" onclick="flg_Floor=1; return false;">1</a>/<a href="#" onclick="flg_Floor=2; return false;">2</a>/<a href="#" onclick="flg_Floor=3; return false;">3</a>/<a href="#"onclick="flg_Floor=0; return false;">hide</a>): N<br/> MousePointer (<a href="#" onclick="flg_Players=1; return false;">show</a>/<a href="#" onclick="flg_Players=0; return false;">hide</a>): U<br/> <br/> Rolling (<a href="#" onclick="flg_Rolling=1; return false;">on</a>/<a href="#" onclick="flg_Rolling=0; return false;">off</a>): R<br/> Shadow (<a href="#" onclick="flg_shadow=1; return false;">shadow</a>/<a href="#"onclick="flg_shadow=2; return false;">mirror</a>/<a href="#" onclick="flg_shadow=0; return false;">off</a>): S<br/> </div> <div id="help_3"> <span class="sub_title">»Effect <span class="link">3/5 <a href="#" onclick="setHelp(2); return false;">↑</a><a href="#" onclick="setHelp(4); return false;">↓</a></span></span> BgColor (<a href="#" onclick="flg_bg_colors=0; return false;">1</a>/<a href="#" onclick="flg_bg_colors=1; return false;">2</a>/<a href="#" onclick="flg_bg_colors=2; return false;">3</a>/<a href="#" onclick="flg_bg_colors=3; return false;">4</a>/<a href="#" onclick="flg_bg_colors=4; return false;">5</a>/<a href="#" onclick="flg_bg_colors=5; return false;">6</a>): C<br/> Filter (<a href="#" onclick="flg_Filter=1; return false;">1</a>/<a href="#" onclick="flg_Filter=2; return false;">2</a>/<a href="#" onclick="flg_Filter=0; return false;">off</a>): G<br/> MotionBlur (<a href="#" onclick="flg_MotionBlur=1; return false;">soft</a>/<a href="#" onclick="flg_MotionBlur=2; return false;">hard</a>/<a href="#" onclick="flg_MotionBlur=3; return false;">max</a>/<a href="#" onclick="flg_MotionBlur=0; return false;">off</a>): M<br/> DepthBlur (<a href="#" onclick="flg_DepthBlur=1; return false;">x2</a>/<a href="#" onclick="flg_DepthBlur=2; return false;">x4</a>/<a href="#" onclick="flg_DepthBlur=0; return false;">off</a>): D<br/> Interlace (<a href="#" onclick="flg_Interlace=1; return false;">1</a>/<a href="#" onclick="flg_Interlace=2; return false;">2</a>/<a href="#" onclick="flg_Interlace=3; return false;">3</a>/<a href="#" onclick="flg_Interlace=4; return false;">4</a>/<a href="#" onclick="flg_Interlace=0; return false;">off</a>): I<br/> ScreenEffect (<a href="#" onclick="flg_ScreenEffect=1; return false;">1</a>/<a href="#" onclick="flg_ScreenEffect=2; return false;">2</a>/<a href="#" onclick="flg_ScreenEffect=3; return false;">3</a>/<a href="#" onclick="flg_ScreenEffect=4; return false;">4</a>/<a href="#" onclick="flg_ScreenEffect=5; return false;">5</a>/<a href="#" onclick="flg_ScreenEffect=6; return false;">6</a>/<a href="#" onclick="flg_ScreenEffect=0; return false;">off</a>): E<br/> Vibration (<a href="#" onclick="flg_Vibration=1; return false;">on</a>/<a href="#" onclick="flg_Vibration=0; return false;">off</a>): H<br/> </div> <div id="help_4"> <span class="sub_title">»Debug <span class="link">4/5 <a href="#" onclick="setHelp(3); return false;">↑</a><a href="#" onclick="setHelp(5); return false;">↓</a></span></span> ShowFps (<a href="#" onclick="flg_Showfps=1; return false;">1</a>/<a href="#" onclick="flg_Showfps=2; return false;">2</a>/<a href="#" onclick="flg_Showfps=0; return false;">off</a>): F<br/> Fps --: 1<br/> Fps ++: 2<br/> <br/> FOV (<a href="#" onclick="CUBE.CS[0].C3D.setAngle(75); return false;">75</a>/<a href="#" onclick="CUBE.CS[0].C3D.setAngle(90); return false;">90</a>): O<br/> Collision (<a href="#" onclick="flg_Collision=1; return false;">x1</a>/<a href="#" onclick="flg_Collision=2; return false;">x2</a>/<a href="#" onclick="flg_Collision=3; return false;">x4</a>/<a href="#" onclick="flg_Collision=0; return false;">off</a>): V<br/> 2DMode (<a href="#" onclick="flg_2DMode=1; return false;">on</a>/<a href="#" onclick="flg_2DMode=0; return false;">off</a>): 0<br/> </div> <div id="help_5"> <span class="sub_title">»Stereopsis <span class="link">5/5 <a href="#" onclick="setHelp(4); return false;">↑</a><a href="#" onclick="setHelp(5); return false;">↓</a></span></span> Stereopsis (<a href="#" onclick="Stereogram_timing=10; return false;">on</a>/<a href="#" onclick="Stereogram_timing=0; return false;">off</a>)<br/> Volume --: 3<br/> Volume ++: 4<br/> Speed --: 5<br/> Speed ++: 6<br/> </div> </span> </div> <div id="window-capture"> <a target="_blank" id="capture_link0"><img src="http://ctkjapan.net/images/none.png" alt="capture0" id="capture0" class="capture_img" /></a><a target="_blank" id="capture_link1"><img src="http://ctkjapan.net/images/none.png" alt="capture1" id="capture1" class="capture_img" /></a><a target="_blank" id="capture_link2"><img src="http://ctkjapan.net/images/none.png" alt="capture2" id="capture2" class="capture_img" /></a><br/> <a target="_blank" id="capture_link3"><img src="http://ctkjapan.net/images/none.png" alt="capture3" id="capture3" class="capture_img" /></a><a target="_blank" id="capture_link4"><img src="http://ctkjapan.net/images/none.png" alt="capture4" id="capture4" class="capture_img" /></a><a target="_blank" id="capture_link5"><img src="http://ctkjapan.net/images/none.png" alt="capture5" id="capture5" class="capture_img" /></a><br/> <a target="_blank" id="capture_link6"><img src="http://ctkjapan.net/images/none.png" alt="capture6" id="capture6" class="capture_img" /></a><a target="_blank" id="capture_link7"><img src="http://ctkjapan.net/images/none.png" alt="capture7" id="capture7" class="capture_img" /></a><a target="_blank" id="capture_link8"><img src="http://ctkjapan.net/images/none.png" alt="capture8" id="capture8" class="capture_img" /></a><br/> </div> <div id="canvas_mask"></div> <div id="canvas_box"> <canvas id="world" width="258" height="154">Canvasに対応したブラウザで閲覧してください。</canvas> </div> <div><pre id="y_counter_box">只今準備中…</pre></div> <div><pre id="collision_box">ゆっくりしていってね!</div> body,ol,li,p,pre,blockquote,dl,dt,dd,canvas { margin: 0; padding: 0; } body { overflow: hidden; background-color: #fff; text-align:center; /* font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; */ font-family: "Hiragino Kaku Gothic ProN", "ヒラギノ角ゴ ProN W3", "Meiryo","メイリオ", Verdana,Helvetica, sans-serif; font-size: 10px; color:#fff; } a{color:#C00;text-decoration:none;padding:2px;} a:link{} a:visited {} a:active{} a:hover {} #canvas_box { position:absolute; height:154px; width:258px; top:0; left:50%; margin-top:49px; margin-left:-129px; } #world { margin: 0; padding: 0; background-color: #000; align:center; valign:middle; overflow: hidden; z-index: 9980; cursor:url('http://ctkjapan.net/yukkuri/images/transparent.cur'), pointer; } #canvas_mask { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: none; background-color: #000; z-index: 9998; opacity: .70; -moz-opacity: .70; -khtml-opacity: .70; -ms-filter: "alpha(opacity=70)"; filter: alpha(opacity=70); } #fps_box { position: absolute; top: 0; left: 0; margin: 2px; padding: 4px; text-align:left; color: #fff; border:solid 0px #fff; font-size: 14px; font-weight: bold; z-index: 10000; cursor:default; text-shadow : 0 0 2px #000, 0 0 4px #fff; opacity: .90; -moz-opacity: .90; -khtml-opacity: .90; -ms-filter: "alpha(opacity=90)"; filter: alpha(opacity=90); } #help_box { position: absolute; top: 0; right: 0; margin: 4px; padding: 4px; text-align:left; display: none; color: #333; background-color: #fff; border:solid 1px #ccc; font-size: 11px; z-index: 10000; cursor:default; -webkit-border-radius: 8px; -moz-border-radius: 8px; -webkit-box-shadow: 3px 3px 4px rgba(0, 0, 0, 0.5); -moz-box-shadow: 3px 3px 4px rgba(0, 0, 0, 0.5); opacity: .80; -moz-opacity: .80; -khtml-opacity: .80; -ms-filter: "alpha(opacity=80)"; filter: alpha(opacity=80); } #help_box .title { display: block; margin-bottom: 4px; padding: 4px; color: #fff; background-color: #333; font-weight: bold; -webkit-border-radius: 4px; -moz-border-radius: 4px; } #help_box .sub_title { display: block; margin-bottom: 4px; padding: 4px; color: #333; background-color: #eee; border: solid 1px #666; font-weight: bold; -webkit-border-radius: 2px; -moz-border-radius: 2px; } #help_box .sub_title .link { float:right; text-align:right; font-weight: bold; } #help_box .body { display: block; margin-bottom: 4px; padding: 2px; } #help_box .body a:hover { background-color:#C00; color:#fff; -webkit-border-radius: 4px; -moz-border-radius: 4px; } #help_box .body .anchor{ display: inline; margin-bottom: 0px; padding: 0px; } #stats_box { position: absolute; top: 0; right: 0; z-index: 9999; } #help_2 { display: none; } #help_3 { display: none; } #help_4 { display: none; } #help_5 { display: none; } #window-capture { position:absolute; top:282px; width:210px; height:155px; left:50%; margin-left:-105px; text-align:center; overflow: hidden; z-index: 9991; opacity: .80; -moz-opacity: .80; -khtml-opacity: .80; -ms-filter: "alpha(opacity=80)"; filter: alpha(opacity=80); } #window-capture a { padding:2px; } .capture_img { background-color:#333; border: solid 2px #fff; width: 50px; height: 30px; } #ds_back_box { position: absolute; height:460px; width:460px; top:0; left:50%; margin-left:-230px; } #y_counter_box { position:absolute; top:391px; width:180px; left:50%; margin-left:-94px; text-align:center; overflow: hidden; padding:2px; color: #fff; border:solid 2px #eee; font-size: 14px; font-weight: bold; cursor:default; z-index: 9991; -webkit-border-radius: 4px; -moz-border-radius: 4px; -webkit-box-shadow: 3px 3px 4px rgba(255, 255, 255, 0.2); -moz-box-shadow: 3px 3px 4px rgba(255, 255, 255, 0.2); text-shadow : 1 1 2px #000, 1 1 4px #fff; background: #65a9d7; background: -webkit-gradient(linear, left top, left bottom, from(#3e779d), to(#65a9d7)); background: -moz-linear-gradient(top, #3e779d, #65a9d7); opacity: .80; -moz-opacity: .80; -khtml-opacity: .80; -ms-filter: "alpha(opacity=80)"; filter: alpha(opacity=80); } #collision_box { position:absolute; top:264px; width:160px; left:50%; margin-left:-84px; text-align:center; overflow: hidden; padding:2px; color: #fff; border:solid 0px #fff; font-size: 9px; font-weight: bold; cursor:default; z-index: 9991; -webkit-border-radius: 2px; -moz-border-radius: 2px; background: #c00; opacity: .80; -moz-opacity: .80; -khtml-opacity: .80; -ms-filter: "alpha(opacity=80)"; filter: alpha(opacity=80); } use an iframe compat browser, deer Play on jsdo.it games Author Share ブログに埋め込む QR Tag Download Complete! Description What kind of game? スマホ対応(予定) Control Device Smartphone Controllerjsdo.it WebSocket Controller» Mouse Keyboard Touch Device Fullscreen Activated Inactivated jsdo.it games から削除する Submit Author ctkjapan なにこれかわいい Tweet Default Panel Auto play Screenshot Readme JavaScript HTML CSS Size Width: px Height: px code <script type="text/javascript" src="http://jsdo.it/blogparts/mV8u/js"></script> animation canvas cube5.js effect particles PrintScreen 疑似3D Discussion Questions on this code? Tags PrintScreen animation canvas cube5.js effect particles 疑似3D