비밀5: 최후/plugin

리버티게임, 모두가 만들어가는 자유로운 게임
var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = window.location.search.substring(1),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
        }
    }
};

if(getUrlParameter('offset') == 127){
	var cvs = document.getElementById("cvs");
	cvs.innerHTML = ('<canvas id="canvas" width="512" height="512"></canvas>');
	var canvas = document.getElementById('canvas');
	var ctx = canvas.getContext('2d');
	
	var x = 256;
	var speed = 0;
	var attack = 20;
	var enemySpeed = 1;
	
	var okdLeft = 0;
	var okdRight = 0;
	
	var turn = 0
	var timer = null;
	
	var donotrun = 0;
	
	var obstacleList = new Array();
	
	var scr = new Array("Error", "<strong><i>(지잉-)</i></strong><br><br>무언가 장전되는 소리가 들렸다. 그리고 다시는 듣고 싶지 않았던 그 소리가 들리기 시작했다.<br><br><strong><i>(투콰콰콰콰-)</i></strong><br><br><strong><i>(깡!) (팅-)</i></strong><br><br>저걸 어떻게 개조한 건진 모르겠지만, 기관총이 계속 나를 향해 공격하고 있었다.<br>저것에 한 대라도 맞는다면... 상상하기도 싫다.", "<i>(틱- 틱-)</i><br><br>기관총이 총알을 전부 쓴 것 같다. 민수는 이정도는 예상했다는 듯이 코웃음을 치며 총알을 장전하고 있었다.<br><br><strong>민수</strong> : 그래, 이래야지... 이래야 죽이는 맛이 좀 나지!<br><br>그리고서는 이전보다 더 빠른 속도로 기관총 총알을 갈기기 시작했다.", "숨이 조금씩 차기 시작한다. 민수도 이 정도까지는 예상하지 못한 것 같다. 당황한 티가 역력했기 때문이다.<br><br><strong>민수</strong> : 뭐 이런 놈이 다 있어... 망할, 최고 속력이다. 이제 죽어라!");
	
	document.onkeydown = function(event) {
	    if(event.keyCode == 37) {
	    		if(okdLeft) return;
	        speed -= 10;
	        okdLeft = 1;
	    }
	    else if(event.keyCode == 39) {
	    		if(okdRight) return;
	        speed += 10;
	        okdRight = 1;
	    }
	};
	
	document.onkeyup = function(event) {
			console.log(1);
	    if(event.keyCode == 37) {
	        speed += 10;
	        okdLeft = 0;
	    }
	    else if(event.keyCode == 39) {
	        speed -= 10;
	        okdRight = 0;
	    }
	};
	
	var nextTurn = function(){
	  donotrun = 1;
	  if(timer !== null) clearInterval(timer);
	  
	  ctx.fillStyle = "black";
	  ctx.fillRect(0, 0, 512, 512);
	  
	  ctx.strokeStyle = "white";
	  ctx.strokeRect(40, 432, 432, 40);
	  
	  x += speed;
	  if(x < 60) x = 60;
	  if(x > 452) x = 452;
	  
	  ctx.fillStyle = "white";
	  ctx.beginPath();
	  ctx.arc(x, 452, 17, 0, 2*Math.PI);
	  ctx.fill();
	  
	  turn++;
	  if(turn <= 3){
	    document.getElementById('scr').innerHTML = scr[turn];
	    
	    setTimeout(function(){
	      donotrun = 0;
				timer = setInterval(drawField, 30);
	    	enemySpeed = 1 - turn * 0.1;
	    
	    	generateObstacles();
	    }, 7000);
	  }
	  else{
	  	window.location = "https://game.uncyclopedia.kr/w/index.php?title=%EB%B9%84%EB%B0%805:_%EC%B5%9C%ED%9B%84/%EC%83%81%ED%99%A916/3%EC%B8%B5/%EB%AF%BC%EC%88%98&offset=128";
	  }
	}
	
	var drawField = function(){
	  ctx.fillStyle = "black";
	  ctx.fillRect(0, 0, 512, 512);
	  
	  ctx.strokeStyle = "white";
	  ctx.strokeRect(40, 432, 432, 40);
	  
	  x += speed;
	  if(x < 60) x = 60;
	  if(x > 452) x = 452;
	  
	  ctx.fillStyle = "white";
	  ctx.beginPath();
	  ctx.arc(x, 452, 17, 0, 2*Math.PI);
	  ctx.fill();
	  
	  ctx.fillStyle = "red";
	  
	  for(var i=0; i<obstacleList.length; i++){
	    obstacleList[i].y += 4 * Math.sqrt(1 / enemySpeed);
	    ctx.fillRect(obstacleList[i].x - 10, obstacleList[i].y - 10, 20, 20);
	    if(425 < obstacleList[i].y && obstacleList[i].y < 479 &&
	       x-27 < obstacleList[i].x && obstacleList[i].x < x+27){
	       gameOver();
	       return;
	    }
	  }
	};
	
	var generateObstacles = function(){
	  if(donotrun) return;
		console.log(enemySpeed);
	  var tmp = {
	    y : 15,
	    x : Math.random() * 480 + 16
	  }
	  obstacleList.push(tmp);
	  enemySpeed *= 0.98;
	  if(enemySpeed < 0.4 - turn * 0.05){
	  	setTimeout(nextTurn, 4000);
	    return;
	  }
	  setTimeout(generateObstacles, 400 * enemySpeed);
	}
	
	var gameOver = function(){
	  clearInterval(timer);
	  
	  ctx.fillStyle = "black";
	  ctx.fillRect(0, 0, 512, 512);
	  
	  ctx.strokeStyle = "white";
	  ctx.strokeRect(40, 432, 432, 40);
	  
	  x += speed;
	  if(x < 60) x = 60;
	  if(x > 452) x = 452;
	  
	  ctx.fillStyle = "white";
	  ctx.beginPath();
	  ctx.arc(x, 452, 17, 0, 2*Math.PI);
	  ctx.fill();
	  
	  ctx.fillStyle = "red";
	  ctx.font = "60px Arial";
	  ctx.textAlign = "center";
	  ctx.fillText("GAME OVER", 256, 256);
	  
	  setTimeout(function(){
	  	window.location = "https://game.uncyclopedia.kr/w/index.php?title=%EB%B9%84%EB%B0%805:_%EC%B5%9C%ED%9B%84/%EC%83%81%ED%99%A915/%EC%95%84%EC%A7%80%ED%8A%B8&offset=2";
		}, 1000);
	}
	
	nextTurn();
}
else if(getUrlParameter('offset') == 146){
  var password = {
      // private property
      _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

      // public method for encoding
      encode : function (input) {
          var output = "";
          var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
          var i = 0;

          input = password._utf8_encode(input);

          while (i < input.length) {

              chr1 = input.charCodeAt(i++);
              chr2 = input.charCodeAt(i++);
              chr3 = input.charCodeAt(i++);

              enc1 = chr1 >> 2;
              enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
              enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
              enc4 = chr3 & 63;

              if (isNaN(chr2)) {
                  enc3 = enc4 = 64;
              } else if (isNaN(chr3)) {
                  enc4 = 64;
              }

              output = output +
              this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
              this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

          }

          return output;
      },

      // public method for decoding
      decode : function (input) {
          var output = "";
          var chr1, chr2, chr3;
          var enc1, enc2, enc3, enc4;
          var i = 0;

          input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

          while (i < input.length) {

              enc1 = this._keyStr.indexOf(input.charAt(i++));
              enc2 = this._keyStr.indexOf(input.charAt(i++));
              enc3 = this._keyStr.indexOf(input.charAt(i++));
              enc4 = this._keyStr.indexOf(input.charAt(i++));

              chr1 = (enc1 << 2) | (enc2 >> 4);
              chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
              chr3 = ((enc3 & 3) << 6) | enc4;

              output = output + String.fromCharCode(chr1);

              if (enc3 != 64) {
                  output = output + String.fromCharCode(chr2);
              }
              if (enc4 != 64) {
                  output = output + String.fromCharCode(chr3);
              }

          }

          output = password._utf8_decode(output);

          return output;

      },

      // private method for UTF-8 encoding
      _utf8_encode : function (string) {
          string = string.replace(/\r\n/g,"\n");
          var utftext = "";

          for (var n = 0; n < string.length; n++) {

              var c = string.charCodeAt(n);

              if (c < 128) {
                  utftext += String.fromCharCode(c);
              }
              else if((c > 127) && (c < 2048)) {
                  utftext += String.fromCharCode((c >> 6) | 192);
                  utftext += String.fromCharCode((c & 63) | 128);
              }
              else {
                  utftext += String.fromCharCode((c >> 12) | 224);
                  utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                  utftext += String.fromCharCode((c & 63) | 128);
              }

          }

          return utftext;
      },

      // private method for UTF-8 decoding
      _utf8_decode : function (utftext) {
          var string = "";
          var i = 0;
          var c = c1 = c2 = 0;

          while ( i < utftext.length ) {

              c = utftext.charCodeAt(i);

              if (c < 128) {
                  string += String.fromCharCode(c);
                  i++;
              }
              else if((c > 191) && (c < 224)) {
                  c2 = utftext.charCodeAt(i+1);
                  string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                  i += 2;
              }
              else {
                  c2 = utftext.charCodeAt(i+1);
                  c3 = utftext.charCodeAt(i+2);
                  string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                  i += 3;
              }

          }

          return string;
      }
  }


  // 출처: 스프링연구소(spring-lab)

  document.getElementById(atob('cHQtbXl0YWxr')).innerHTML = atob('PGEgaHJlZj0iaHR0cHM6Ly9nYW1lLnVuY3ljbG9wZWRpYS5rci93L2luZGV4LnBocD90aXRsZT0lRUIlQjklODQlRUIlQjAlODA1Ol8lRUMlQjUlOUMlRUQlOUIlODQvJUVDJTgzJTgxJUVEJTk5JUE5MTYvMyVFQyVCOCVCNS8lRUIlQUYlQkMlRUMlODglOTgmb2Zmc2V0PTE0Ni4xIj4=') + password.decode('7Yag66Gg') + '</a>';
}