Bonk kitten

Adds an cat which wanders around your screen and sometimes tries to make you die

  1. // ==UserScript==
  2. // @name Bonk kitten
  3. // @namespace https://bonk.io/
  4. // @version 0.4
  5. // @description Adds an cat which wanders around your screen and sometimes tries to make you die
  6. // @author You
  7. // @match https://bonk.io/*
  8. // @run-at document-start
  9. // @grant none
  10. // @noframes
  11. // @icon https://www.google.com/s2/favicons?sz=64&domain=bonk.io
  12. // ==/UserScript==
  13.  
  14. function keyEvent (keyCode, type, modifiers) {
  15. let gdocument = document.getElementById("maingameframe").contentDocument;
  16. var evtName = (typeof(type) === "string") ? "key" + type : "keydown";
  17. var modifier = (typeof(modifiers) === "object") ? modifier : {};
  18.  
  19. var event = document.createEvent("HTMLEvents");
  20. event.initEvent(evtName, true, false);
  21. event.keyCode = keyCode;
  22.  
  23. for (var i in modifiers) {
  24. event[i] = modifiers[i];
  25. }
  26.  
  27. gdocument.dispatchEvent(event);
  28. }
  29.  
  30. //let SKIN = new Image();
  31. //let CAT = new Image();
  32. //SKIN.src = 'https://bonkclans.itsdawildshadow.repl.co/file/keyboard.png';
  33. //CAT.src = 'https://bonkclans.itsdawildshadow.repl.co/file/cat.png';
  34. //console.log(SKIN);
  35. // TEMPORARY SOLUTION!
  36. let mouse = {
  37. x: 0,
  38. y: 0,
  39. lx: 0,
  40. ly: 0,
  41. vx: 0,
  42. vy: 0,
  43. drag: false
  44. }
  45. let canvas = document.createElement("canvas");
  46.  
  47. canvas.style.width = window.innerWidth+"px";
  48. canvas.style.position = 'fixed';
  49. canvas.style.height = window.innerHeight+"px";
  50. canvas.style.left = "0px";
  51. canvas.style.top = "0px";
  52. canvas.width = window.innerWidth;
  53. canvas.height = window.innerHeight;
  54. canvas.style.zIndex = 10;
  55. canvas.style.pointerEvents = "none";
  56. setTimeout(() => {
  57. document.body.appendChild(canvas);
  58. },4000);
  59. let cvt = canvas.getContext("2d");
  60.  
  61. let assistent = {
  62. x: 0,
  63. y: 0,
  64. vy: 0,
  65. vx: 0,
  66. mode: "idle",
  67. right: false,
  68. left: false,
  69. jump: false
  70. }
  71.  
  72. let lastCall = Date.now();
  73. let decision = 1;
  74. let randomInput = 0;
  75. let lastInput = [0,0,0,0];
  76. let lasterInput = [0,0,0,0];
  77. let wander = 1;
  78.  
  79. let lastScroll = 0;
  80.  
  81. window.onscroll = function (e)
  82. {
  83. assistent.y += lastScroll-(document.documentElement.scrollTop || document.body.scrollTop);
  84. if (assistent.y > canvas.height-50){
  85. assistent.vy = ((document.documentElement.scrollTop || document.body.scrollTop)-lastScroll)*3;
  86. assistent.y = canvas.height-50;
  87. }
  88. if (assistent.y < 50){
  89. assistent.vy = (lastScroll-(document.documentElement.scrollTop || document.body.scrollTop))*3;
  90. assistent.y = 50;
  91. }
  92. lastScroll = document.documentElement.scrollTop || document.body.scrollTop
  93. }
  94.  
  95. window.addEventListener("resize", (event) => {
  96. canvas.style.width = window.innerWidth+"px";
  97. canvas.style.position = 'fixed';
  98. canvas.style.height = window.innerHeight+"px";
  99. canvas.style.left = "0px";
  100. canvas.style.top = "0px";
  101. canvas.width = window.innerWidth;
  102. canvas.height = window.innerHeight;
  103. });
  104.  
  105. setInterval(() => {
  106. let dt = (Date.now()-lastCall)/1000;
  107. mouse.vx = (mouse.x-mouse.lx)/dt;
  108. mouse.vy = (mouse.y-mouse.ly)/dt;
  109. if (mouse.drag){
  110. assistent.x = mouse.x;
  111. assistent.y = mouse.y;
  112. assistent.vx = mouse.vx/3;
  113. assistent.vy = mouse.vy/3;
  114. }
  115. lastCall = Date.now();
  116. decision -= dt;
  117. if (decision <= 0){
  118. decision = Math.random()*6;
  119. let mode = Math.floor(Math.random()*5);
  120. if (mode <= 3){
  121. assistent.mode = 'type';
  122. }
  123. if (mode == 4){
  124. assistent.mode = 'wander';
  125. }
  126. if (mode == 5){
  127. assistent.mode = 'idle';
  128. }
  129. }
  130. if (assistent.mode == "wander"){
  131. decision += dt/2;
  132. wander -= dt;
  133. if (wander <= 0){
  134. wander = (Math.random()*3);
  135. if (Math.random()*3 <= 1){
  136. assistent.left = true;
  137. assistent.right = false;
  138. }else if (Math.random()*3 <= 1){
  139. assistent.right = true;
  140. assistent.left = false;
  141. }else{
  142. assistent.right = false;
  143. assistent.left = false;
  144. }
  145. }
  146. }
  147. cvt.clearRect(0,0,canvas.width,canvas.height);
  148. cvt.fillStyle = 'white';
  149. cvt.beginPath();
  150. cvt.arc(assistent.x,assistent.y,25,0,Math.PI*2);
  151. cvt.fill();
  152. cvt.closePath();
  153. //if (CAT.complete){
  154. //cvt.drawImage(CAT,assistent.x-25,assistent.y-25,50,50);
  155. //}
  156. if (assistent.mode == 'type'){
  157. decision -= dt*1.5
  158. //cvt.drawImage(SKIN,assistent.x-60,assistent.y-20,120,60)
  159. if (randomInput <= 0){
  160. randomInput = Math.random()*2;
  161. lastInput = [Math.floor(Math.random()*3)-1,Math.floor(Math.random()*3)-1,Math.floor(Math.random()*3)-1,Math.floor(Math.random()*3)-1]
  162. }
  163. randomInput -= dt;
  164. if (lasterInput !== lastInput){
  165. if (lastInput[1] > 0){
  166. keyEvent(68);
  167. keyEvent(65,'up');
  168. }else if (lastInput[1] < 0){
  169. keyEvent(68,'up');
  170. keyEvent(65);
  171. }else{
  172. keyEvent(68,'up');
  173. keyEvent(65,'up');
  174. }
  175. if (lastInput[1] > 0){
  176. keyEvent(87);
  177. keyEvent(83,'up');
  178. }else if (lastInput[1] < 0){
  179. keyEvent(87,'up');
  180. keyEvent(83);
  181. }else{
  182. keyEvent(83,'up');
  183. keyEvent(87,'up');
  184. }
  185. if (lastInput[2] > 0){
  186. keyEvent(32);
  187. }else{
  188. keyEvent(32,'up');
  189. }
  190. if (lastInput[3] > 0){
  191. keyEvent(90);
  192. }else{
  193. keyEvent(90,'up');
  194. }
  195. lasterInput = lastInput;
  196. }
  197. }
  198.  
  199. assistent.vy += 200*dt;
  200. assistent.y += assistent.vy*dt;
  201. if (assistent.right){
  202. assistent.vx += 30*dt;
  203. }else if (assistent.left){
  204. assistent.vx -= 30*dt;
  205. }else{
  206. assistent.vx *= 0.99;
  207. }
  208. assistent.x += assistent.vx*dt;
  209. if (assistent.x < 25){
  210. assistent.x = 25;
  211. assistent.vx *= -0.9;
  212. }
  213. if (assistent.x > canvas.width-25){
  214. assistent.x = canvas.width-25;
  215. assistent.vx *= -0.9;
  216. }
  217. if (assistent.y > canvas.height-30){
  218. assistent.y = canvas.height-30;
  219. assistent.vy *= -0.6
  220. }
  221. if (assistent.y < 50){
  222. assistent.y = 50;
  223. assistent.vy *= -0.6
  224. }
  225. },0);