reactor reactions
automonous navigation -> path integration
sends spores and worms and drones to the next level with you
MIRV gives 10->12% smaller radius and damage
laser tech slow light has 33% less spacing
tech exciton gives 70%->88% damage
discrete optimization: 40%->35% damage and fire delay
degenerate matter 60->66% harm reduction while field is active
virtual particles 15% duplication is now allowed for time dilation
railgun no longer uses extra ammo when firing multiple bullets with smelting
smelting now costs more ammo with railgun
plasma torch, ball, extruder all use 33% less energy, do 15% more damage
bremsstrahlung does 15% more damage
standing wave field gives 50 energy
it's cooldown for blocking shields in now 0.5->0.33 s
reactor
fight now starts when you press a button, so you can prep
spawns more ammo 4->7, heals 0->2
will no longer show up on levels 2,3,4
fewer bosses spawn at high difficulty levels
has a small chance to spawn all 3 boss types
sprayBoss is 25% slower, but it goes immune while spraying instead of shielding
community maps have a short message onload giving credit to the author
new level element balance - it's basically spinners and rotors combined
I'm replacing all rotors to fix potential BUGS
sewers, house, perplex, vats
requirement text bug fixes
This commit is contained in:
235
index.html
235
index.html
@@ -11,14 +11,12 @@
|
|||||||
<meta property="og:title" content="n-gon">
|
<meta property="og:title" content="n-gon">
|
||||||
<meta name="twitter:title" content="n-gon">
|
<meta name="twitter:title" content="n-gon">
|
||||||
<meta name="twitter:description" content="Browser-based side scrolling video game with the matter.js physics engine.">
|
<meta name="twitter:description" content="Browser-based side scrolling video game with the matter.js physics engine.">
|
||||||
|
|
||||||
<title>n-gon</title>
|
<title>n-gon</title>
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="style.css">
|
||||||
<link rel='shortcut icon' href='favicon.ico' type='image/x-icon' />
|
<link rel='shortcut icon' href='favicon.ico' type='image/x-icon' />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<!-- <body oncontextmenu="return false"> -->
|
|
||||||
<div id='guns'></div>
|
<div id='guns'></div>
|
||||||
<div id='field'></div>
|
<div id='field'></div>
|
||||||
<div id='tech'></div>
|
<div id='tech'></div>
|
||||||
@@ -29,45 +27,7 @@
|
|||||||
<div id="dmg"></div>
|
<div id="dmg"></div>
|
||||||
<div id="choose-background"></div>
|
<div id="choose-background"></div>
|
||||||
<div id='construct'></div>
|
<div id='construct'></div>
|
||||||
<!-- <input type="text" id="console" spellcheck="false" /> -->
|
|
||||||
<!-- contenteditable="true" -->
|
|
||||||
|
|
||||||
<!-- guns -->
|
|
||||||
<!-- <audio id="snare2" src="sounds\guns\snare2.ogg" preload="auto"></audio>
|
|
||||||
<audio id="airgun" src="sounds\guns\airgun.ogg" preload="auto"></audio>
|
|
||||||
<audio id="basssnaredrum" src="sounds\guns\basssnaredrum.ogg" preload="auto"></audio>
|
|
||||||
<audio id="sniper" src="sounds\guns\sniper.ogg" preload="auto"></audio>
|
|
||||||
<audio id="glock" src="sounds\guns\glock.ogg" preload="auto"></audio>
|
|
||||||
<audio id="launcher" src="sounds\guns\launcher2.ogg" preload="auto"></audio> -->
|
|
||||||
|
|
||||||
<!-- player walk -->
|
|
||||||
<!-- <audio id="walk1" src="sounds\m\walk1.ogg" preload="auto"></audio>
|
|
||||||
<audio id="walk2" src="sounds\m\walk2.ogg" preload="auto"></audio>
|
|
||||||
<audio id="walk3" src="sounds\m\walk3.ogg" preload="auto"></audio>
|
|
||||||
<audio id="walk4" src="sounds\m\walk4.ogg" preload="auto"></audio>
|
|
||||||
<audio id="walk5" src="sounds\m\walk5.ogg" preload="auto"></audio>
|
|
||||||
<audio id="walk6" src="sounds\m\walk6.ogg" preload="auto"></audio>
|
|
||||||
<audio id="walk7" src="sounds\m\walk7.ogg" preload="auto"></audio>
|
|
||||||
<audio id="walk8" src="sounds\m\walk8.ogg" preload="auto"></audio>
|
|
||||||
<audio id="walk9" src="sounds\m\walk9.ogg" preload="auto"></audio>
|
|
||||||
<audio id="walk10" src="sounds\m\walk10.ogg" preload="auto"></audio> -->
|
|
||||||
|
|
||||||
<!-- player dmg -->
|
|
||||||
<!-- <audio id="dmg0" src="sounds\dmg\dmg0.ogg" preload="auto"></audio>
|
|
||||||
<audio id="dmg1" src="sounds\dmg\dmg1.ogg" preload="auto"></audio>
|
|
||||||
<audio id="dmg2" src="sounds\dmg\dmg2.ogg" preload="auto"></audio>
|
|
||||||
<audio id="dmg3" src="sounds\dmg\dmg3.ogg" preload="auto"></audio> -->
|
|
||||||
|
|
||||||
<!-- other -->
|
|
||||||
<!-- <audio id="boom" src="sounds\boom.ogg" preload="auto"></audio>
|
|
||||||
<audio id="powerup" src="sounds\powerup4.ogg" preload="auto"></audio>
|
|
||||||
<audio id="no" src="sounds\no.ogg" preload="auto"></audio>
|
|
||||||
<audio id="click" src="sounds\click.ogg" preload="auto"></audio>
|
|
||||||
<audio id="ammo" src="sounds\ammo.ogg" preload="auto"></audio> -->
|
|
||||||
|
|
||||||
<canvas id="canvas"></canvas>
|
<canvas id="canvas"></canvas>
|
||||||
<!-- ********** intro page ***********************************************
|
|
||||||
******************************************************************************* -->
|
|
||||||
<div id="choose-grid"></div>
|
<div id="choose-grid"></div>
|
||||||
<div id="experiment-grid"></div>
|
<div id="experiment-grid"></div>
|
||||||
<div style="position: absolute; top:0;left:0;">
|
<div style="position: absolute; top:0;left:0;">
|
||||||
@@ -82,7 +42,6 @@
|
|||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
<svg class="SVG-button" id="training-button" width="120" height="45" style="border: 2px #333 solid;" stroke='none' fill='#333' font-size="30px" font-family="Arial, sans-serif" onclick="simulation.startGame(false, true)">
|
<svg class="SVG-button" id="training-button" width="120" height="45" style="border: 2px #333 solid;" stroke='none' fill='#333' font-size="30px" font-family="Arial, sans-serif" onclick="simulation.startGame(false, true)">
|
||||||
<!-- <animate attributeName="fill" values="#f55;#cc5;#5c5;#5dd;#66f;#5dd;#5c5;#cc5;#f55" dur="4s" repeatCount="indefinite" /> -->
|
|
||||||
<text x="10" y="33">training</text>
|
<text x="10" y="33">training</text>
|
||||||
</svg>
|
</svg>
|
||||||
<div id='info'>
|
<div id='info'>
|
||||||
@@ -140,7 +99,8 @@
|
|||||||
<details id="control-details">
|
<details id="control-details">
|
||||||
<summary>controls</summary>
|
<summary>controls</summary>
|
||||||
<div class="details-div">
|
<div class="details-div">
|
||||||
To change controls click a box<br>
|
To change controls click a box
|
||||||
|
<br>
|
||||||
and press an unused key.
|
and press an unused key.
|
||||||
<br><br>
|
<br><br>
|
||||||
<table id="control-table">
|
<table id="control-table">
|
||||||
@@ -203,17 +163,13 @@
|
|||||||
<div>
|
<div>
|
||||||
<details id="updates">
|
<details id="updates">
|
||||||
<summary>updates</summary>
|
<summary>updates</summary>
|
||||||
<div id="updates-div" class="details-div" style="font-size: 70%;height: 400px;overflow: scroll;max-width: 450px;"></div>
|
<div id="updates-div" class="details-div" style="font-size: 65%;height: 400px;overflow: scroll;max-width: 450px;"></div>
|
||||||
</details>
|
</details>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<details>
|
<details>
|
||||||
<summary>about</summary>
|
<summary>about</summary>
|
||||||
<div class="details-div">
|
<div class="details-div" style="max-width: 450px;">
|
||||||
<!-- <p>
|
|
||||||
n-gon is a 2-D physics platformer / shooter
|
|
||||||
<br>it has
|
|
||||||
</p> -->
|
|
||||||
<a href="https://discord.gg/2eC9pgJ">
|
<a href="https://discord.gg/2eC9pgJ">
|
||||||
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1400 235">
|
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1400 235">
|
||||||
<style>
|
<style>
|
||||||
@@ -225,11 +181,8 @@
|
|||||||
<path class="st0" d="M191.4 36.9h-134c-11.3 0-20.5 9.2-20.5 20.5v134c0 11.3 9.2 20.5 20.5 20.5h113.4l-5.3-18.3 12.8 11.8 12.1 11.1 21.6 18.7V57.4c-.1-11.3-9.3-20.5-20.6-20.5zm-38.6 129.5s-3.6-4.3-6.6-8c13.1-3.7 18.1-11.8 18.1-11.8-4.1 2.7-8 4.6-11.5 5.9-5 2.1-9.8 3.4-14.5 4.3-9.6 1.8-18.4 1.3-25.9-.1-5.7-1.1-10.6-2.6-14.7-4.3-2.3-.9-4.8-2-7.3-3.4-.3-.2-.6-.3-.9-.5-.2-.1-.3-.2-.4-.2-1.8-1-2.8-1.7-2.8-1.7s4.8 7.9 17.5 11.7c-3 3.8-6.7 8.2-6.7 8.2-22.1-.7-30.5-15.1-30.5-15.1 0-31.9 14.4-57.8 14.4-57.8 14.4-10.7 28-10.4 28-10.4l1 1.2c-18 5.1-26.2 13-26.2 13s2.2-1.2 5.9-2.8c10.7-4.7 19.2-5.9 22.7-6.3.6-.1 1.1-.2 1.7-.2 6.1-.8 13-1 20.2-.2 9.5 1.1 19.7 3.9 30.1 9.5 0 0-7.9-7.5-24.9-12.6l1.4-1.6s13.7-.3 28 10.4c0 0 14.4 25.9 14.4 57.8 0-.1-8.4 14.3-30.5 15zM303.8 79.7h-33.2V117l22.1 19.9v-36.2h11.8c7.5 0 11.2 3.6 11.2 9.4v27.7c0 5.8-3.5 9.7-11.2 9.7h-34v21.1h33.2c17.8.1 34.5-8.8 34.5-29.2v-29.8c.1-20.8-16.6-29.9-34.4-29.9zm174 59.7v-30.6c0-11 19.8-13.5 25.8-2.5l18.3-7.4c-7.2-15.8-20.3-20.4-31.2-20.4-17.8 0-35.4 10.3-35.4 30.3v30.6c0 20.2 17.6 30.3 35 30.3 11.2 0 24.6-5.5 32-19.9l-19.6-9c-4.8 12.3-24.9 9.3-24.9-1.4zM417.3 113c-6.9-1.5-11.5-4-11.8-8.3.4-10.3 16.3-10.7 25.6-.8l14.7-11.3c-9.2-11.2-19.6-14.2-30.3-14.2-16.3 0-32.1 9.2-32.1 26.6 0 16.9 13 26 27.3 28.2 7.3 1 15.4 3.9 15.2 8.9-.6 9.5-20.2 9-29.1-1.8l-14.2 13.3c8.3 10.7 19.6 16.1 30.2 16.1 16.3 0 34.4-9.4 35.1-26.6 1-21.7-14.8-27.2-30.6-30.1zm-67 55.5h22.4V79.7h-22.4v88.8zM728 79.7h-33.2V117l22.1 19.9v-36.2h11.8c7.5 0 11.2 3.6 11.2 9.4v27.7c0 5.8-3.5 9.7-11.2 9.7h-34v21.1H728c17.8.1 34.5-8.8 34.5-29.2v-29.8c0-20.8-16.7-29.9-34.5-29.9zm-162.9-1.2c-18.4 0-36.7 10-36.7 30.5v30.3c0 20.3 18.4 30.5 36.9 30.5 18.4 0 36.7-10.2 36.7-30.5V109c0-20.4-18.5-30.5-36.9-30.5zm14.4 60.8c0 6.4-7.2 9.7-14.3 9.7-7.2 0-14.4-3.1-14.4-9.7V109c0-6.5 7-10 14-10 7.3 0 14.7 3.1 14.7 10v30.3zM682.4 109c-.5-20.8-14.7-29.2-33-29.2h-35.5v88.8h22.7v-28.2h4l20.6 28.2h28L665 138.1c10.7-3.4 17.4-12.7 17.4-29.1zm-32.6 12h-13.2v-20.3h13.2c14.1 0 14.1 20.3 0 20.3z" />
|
<path class="st0" d="M191.4 36.9h-134c-11.3 0-20.5 9.2-20.5 20.5v134c0 11.3 9.2 20.5 20.5 20.5h113.4l-5.3-18.3 12.8 11.8 12.1 11.1 21.6 18.7V57.4c-.1-11.3-9.3-20.5-20.6-20.5zm-38.6 129.5s-3.6-4.3-6.6-8c13.1-3.7 18.1-11.8 18.1-11.8-4.1 2.7-8 4.6-11.5 5.9-5 2.1-9.8 3.4-14.5 4.3-9.6 1.8-18.4 1.3-25.9-.1-5.7-1.1-10.6-2.6-14.7-4.3-2.3-.9-4.8-2-7.3-3.4-.3-.2-.6-.3-.9-.5-.2-.1-.3-.2-.4-.2-1.8-1-2.8-1.7-2.8-1.7s4.8 7.9 17.5 11.7c-3 3.8-6.7 8.2-6.7 8.2-22.1-.7-30.5-15.1-30.5-15.1 0-31.9 14.4-57.8 14.4-57.8 14.4-10.7 28-10.4 28-10.4l1 1.2c-18 5.1-26.2 13-26.2 13s2.2-1.2 5.9-2.8c10.7-4.7 19.2-5.9 22.7-6.3.6-.1 1.1-.2 1.7-.2 6.1-.8 13-1 20.2-.2 9.5 1.1 19.7 3.9 30.1 9.5 0 0-7.9-7.5-24.9-12.6l1.4-1.6s13.7-.3 28 10.4c0 0 14.4 25.9 14.4 57.8 0-.1-8.4 14.3-30.5 15zM303.8 79.7h-33.2V117l22.1 19.9v-36.2h11.8c7.5 0 11.2 3.6 11.2 9.4v27.7c0 5.8-3.5 9.7-11.2 9.7h-34v21.1h33.2c17.8.1 34.5-8.8 34.5-29.2v-29.8c.1-20.8-16.6-29.9-34.4-29.9zm174 59.7v-30.6c0-11 19.8-13.5 25.8-2.5l18.3-7.4c-7.2-15.8-20.3-20.4-31.2-20.4-17.8 0-35.4 10.3-35.4 30.3v30.6c0 20.2 17.6 30.3 35 30.3 11.2 0 24.6-5.5 32-19.9l-19.6-9c-4.8 12.3-24.9 9.3-24.9-1.4zM417.3 113c-6.9-1.5-11.5-4-11.8-8.3.4-10.3 16.3-10.7 25.6-.8l14.7-11.3c-9.2-11.2-19.6-14.2-30.3-14.2-16.3 0-32.1 9.2-32.1 26.6 0 16.9 13 26 27.3 28.2 7.3 1 15.4 3.9 15.2 8.9-.6 9.5-20.2 9-29.1-1.8l-14.2 13.3c8.3 10.7 19.6 16.1 30.2 16.1 16.3 0 34.4-9.4 35.1-26.6 1-21.7-14.8-27.2-30.6-30.1zm-67 55.5h22.4V79.7h-22.4v88.8zM728 79.7h-33.2V117l22.1 19.9v-36.2h11.8c7.5 0 11.2 3.6 11.2 9.4v27.7c0 5.8-3.5 9.7-11.2 9.7h-34v21.1H728c17.8.1 34.5-8.8 34.5-29.2v-29.8c0-20.8-16.7-29.9-34.5-29.9zm-162.9-1.2c-18.4 0-36.7 10-36.7 30.5v30.3c0 20.3 18.4 30.5 36.9 30.5 18.4 0 36.7-10.2 36.7-30.5V109c0-20.4-18.5-30.5-36.9-30.5zm14.4 60.8c0 6.4-7.2 9.7-14.3 9.7-7.2 0-14.4-3.1-14.4-9.7V109c0-6.5 7-10 14-10 7.3 0 14.7 3.1 14.7 10v30.3zM682.4 109c-.5-20.8-14.7-29.2-33-29.2h-35.5v88.8h22.7v-28.2h4l20.6 28.2h28L665 138.1c10.7-3.4 17.4-12.7 17.4-29.1zm-32.6 12h-13.2v-20.3h13.2c14.1 0 14.1 20.3 0 20.3z" />
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
Chat about n-gon in the <a href="https://discord.gg/2eC9pgJ">discord</a>.<br> Let me know about ideas,
|
Chat about n-gon in the <a href="https://discord.gg/2eC9pgJ">discord</a>.<br> Let me know about ideas, or bugs.
|
||||||
or bugs.
|
<br><br><br>
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/landgreen/n-gon">
|
<a href="https://github.com/landgreen/n-gon">
|
||||||
<svg viewBox="0 0 100 16" xmlns="http://www.w3.org/2000/svg" fill="#1B1F23">
|
<svg viewBox="0 0 100 16" xmlns="http://www.w3.org/2000/svg" fill="#1B1F23">
|
||||||
<path d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z" />
|
<path d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z" />
|
||||||
@@ -238,13 +191,7 @@
|
|||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/landgreen/n-gon">Github</a> hosts the source code for n-gon.<br> It's
|
<a href="https://github.com/landgreen/n-gon">Github</a> hosts the source code for n-gon.<br> It's written in JavaScript, CSS, and HTML using the matter.js 2-D physics library.
|
||||||
written in JavaScript, CSS, and HTML.
|
|
||||||
<!-- <br>
|
|
||||||
<br>
|
|
||||||
n-gon is also hosted at <a href="https://lilgreenland.itch.io/n-gon">itch.io</a>.
|
|
||||||
<br>
|
|
||||||
<br> -->
|
|
||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
</div>
|
</div>
|
||||||
@@ -335,17 +282,6 @@
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<svg id='splash' class="intro ui" viewBox="0 0 800 800" onclick="simulation.startGame()">
|
<svg id='splash' class="intro ui" viewBox="0 0 800 800" onclick="simulation.startGame()">
|
||||||
<!-- title -->
|
|
||||||
<!-- <g class="fade-in" transform="translate(100,210) scale(34)" fill='#bbb' stroke='none'>
|
|
||||||
<path d="M0 0 h1 v0.2 h1.7 l0.3 0.3 v2.6 h-1 v-1.7 h-1 v1.7 h-1 z" fill="rgb(50,200,255)" />
|
|
||||||
<rect x="4" y="1.25" width="1" height="0.5" rx='0.03' />
|
|
||||||
<path transform="translate(6.9,0) scale(1.25)" d="M0 0 h1 l 0.7 0.7 v2.3 l-0.2 0.2 h-1.8 v-0.5 h1.4 L 1.1 2.4 h-1.1 l -0.7 -0.7 v-1 l 0.7 -0.7 Z"
|
|
||||||
fill='rgb(255,70,140)' />
|
|
||||||
<path transform="translate(10.9,0) scale(1.25)" d="M0 0 h1 l 0.7 0.7 v1 l -0.7 0.7 h-1 l -0.7 -0.7 v-1 l 0.7 -0.7 Z"
|
|
||||||
fill="none" />
|
|
||||||
<path transform="translate(14,0)" d="M0 0 h1 v0.2 h1.7 l0.3 0.3 v2.6 h-1 v-1.7 h-1 v1.7 h-1 z" fill='rgb(10,220,190)'
|
|
||||||
/>
|
|
||||||
</g> -->
|
|
||||||
<g class="fade-in" transform="translate(100,210) scale(34)" fill='#bbb' stroke='none'>
|
<g class="fade-in" transform="translate(100,210) scale(34)" fill='#bbb' stroke='none'>
|
||||||
<path d="M0 0 h1 v0.2 h1.7 l0.3 0.3 v2.6 h-1 v-1.7 h-1 v1.7 h-1 z" />
|
<path d="M0 0 h1 v0.2 h1.7 l0.3 0.3 v2.6 h-1 v-1.7 h-1 v1.7 h-1 z" />
|
||||||
<rect x="4" y="1.25" width="1" height="0.5" rx='0.03' />
|
<rect x="4" y="1.25" width="1" height="0.5" rx='0.03' />
|
||||||
@@ -360,19 +296,10 @@
|
|||||||
<path class="draw-lines-o" transform="translate(10.9,0) scale(1.25)" d="M0 0 h1 l 0.7 0.7 v1 l -0.7 0.7 h-1 l -0.7 -0.7 v-1 l 0.7 -0.7 Z" stroke-width='0.07' />
|
<path class="draw-lines-o" transform="translate(10.9,0) scale(1.25)" d="M0 0 h1 l 0.7 0.7 v1 l -0.7 0.7 h-1 l -0.7 -0.7 v-1 l 0.7 -0.7 Z" stroke-width='0.07' />
|
||||||
<path class="draw-lines" transform="translate(14,0)" d="M0 0 h1 v0.2 h1.7 l0.3 0.3 v2.6 h-1 v-1.7 h-1 v1.7 h-1 z" stroke-width='0.0875' />
|
<path class="draw-lines" transform="translate(14,0)" d="M0 0 h1 v0.2 h1.7 l0.3 0.3 v2.6 h-1 v-1.7 h-1 v1.7 h-1 z" stroke-width='0.0875' />
|
||||||
</g>
|
</g>
|
||||||
<!-- <g class="draw-lines" transform="translate(100,210) scale(34)" fill='none' stroke='#222' stroke-linejoin="round" stroke-linecap="round">
|
|
||||||
<path d="M0 0 v3.1 h1 v-1.7 h1 v1.7 h1 v-2.6 l-0.3-0.3 h-1.7 v-0.2 h-1" stroke-width='0.0875' />
|
|
||||||
<rect x="4" y="1.25" width="1" height="0.5" stroke-width='0.0875' rx='0.03' />
|
|
||||||
<path transform="translate(6.9,0) scale(1.25)" d="M0 0 h1 l 0.7 0.7 v2.3 l-0.2 0.2 h-1.8 v-0.5 h1.4 L 1.1 2.4 h-1.1 l -0.7 -0.7 v-1 l 0.7 -0.7 Z" stroke-width='0.07' />
|
|
||||||
<path transform="translate(10.9,0) scale(1.25)" d="M0 0 l-0.7 0.7 v1 l0.7 0.7 h1 l0.7 -0.7 v-1 l-0.7 -0.7 h-1 Z" stroke-width='0.07' />
|
|
||||||
<path transform="translate(14,0)" d="M0 0 h1 v0.2 h1.7 l0.3 0.3 v2.6 h-1 v-1.7 h-1 v1.7 h-1 z" stroke-width='0.0875' />
|
|
||||||
</g> -->
|
|
||||||
<!-- mouse -->
|
<!-- mouse -->
|
||||||
<g class="draw-lines3" transform="translate(290,430) scale(0.28)" stroke-linecap="round" stroke-linejoin="round" stroke-width="10px" stroke="#333" fill="none">
|
<g class="draw-lines3" transform="translate(290,430) scale(0.28)" stroke-linecap="round" stroke-linejoin="round" stroke-width="10px" stroke="#333" fill="none">
|
||||||
<path class="fade-in" stroke="none" fill="#fff" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" />
|
<path class="fade-in" stroke="none" fill="#fff" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" />
|
||||||
<path class="fade-in" d="M832.41,106.64 V322 H651.57 V255 c0-82,67.5-148,150-148 Z" fill="rgb(0, 200, 255)" stroke="none" />
|
<path class="fade-in" d="M832.41,106.64 V322 H651.57 V255 c0-82,67.5-148,150-148 Z" fill="rgb(0, 200, 255)" stroke="none" />
|
||||||
<!-- <path class="fade-in" d="M832.41,106.64 V323.55 H651.57 V256.64 c0-82.5,67.5-150,150-150 Z" fill="#789" stroke="none" />
|
|
||||||
<path class="fade-in" d="M827,112 h30 a140,140,0,0,1,140,140 v68 h-167 z" fill="#7ce" stroke="none" /> -->
|
|
||||||
<path d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" />
|
<path d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" />
|
||||||
<path d="M657 317 h340 h-170 v-25 m0 -140 v-42 s 21 -59, -5 -59 S 807 7, 807 7" />
|
<path d="M657 317 h340 h-170 v-25 m0 -140 v-42 s 21 -59, -5 -59 S 807 7, 807 7" />
|
||||||
<ellipse fill="none" cx="827.57" cy="218.64" rx="29" ry="68" />
|
<ellipse fill="none" cx="827.57" cy="218.64" rx="29" ry="68" />
|
||||||
@@ -398,26 +325,16 @@
|
|||||||
<path d="M70 70 h60 v60 h-60 v-60" class="draw-lines-box-2" />
|
<path d="M70 70 h60 v60 h-60 v-60" class="draw-lines-box-2" />
|
||||||
<path d="M140 70 h60 v60 h-60 v-60" class="draw-lines-box-3" />
|
<path d="M140 70 h60 v60 h-60 v-60" class="draw-lines-box-3" />
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
<g class="draw-lines4" text-anchor="middle" stroke='#000' fill='none' stroke-width="2" font-size="38px" font-family="Arial Black, sans-serif">
|
<g class="draw-lines4" text-anchor="middle" stroke='#000' fill='none' stroke-width="2" font-size="38px" font-family="Arial Black, sans-serif">
|
||||||
<!-- <text class="fade-in" fill='#aaa' stroke="none" x="30" y="45">Q</text>
|
|
||||||
<text class="fade-in" fill='#aaa' stroke="none" x="170" y="45">E</text> -->
|
|
||||||
<text x="30" y="45" id="splash-previous-gun" stroke-width="2">Q</text>
|
<text x="30" y="45" id="splash-previous-gun" stroke-width="2">Q</text>
|
||||||
<text x="100" y="45" id="splash-up">W</text>
|
<text x="100" y="45" id="splash-up">W</text>
|
||||||
<text x="170" y="45" id="splash-next-gun" stroke-width="2">E</text>
|
<text x="170" y="45" id="splash-next-gun" stroke-width="2">E</text>
|
||||||
|
|
||||||
<text x="30" y="113" id="splash-left">A</text>
|
<text x="30" y="113" id="splash-left">A</text>
|
||||||
<text x="100" y="113" id="splash-down">S</text>
|
<text x="100" y="113" id="splash-down">S</text>
|
||||||
<text x="170" y="113" id="splash-right">D</text>
|
<text x="170" y="113" id="splash-right">D</text>
|
||||||
<!-- <text class="fade-in" fill='#999' x="100" y="45">W</text>
|
|
||||||
<text class="fade-in" fill='#999' x="100" y="113">S</text>
|
|
||||||
<text class="fade-in" fill='#999' x="170" y="113">D</text>
|
|
||||||
<text class="fade-in" fill='#999' x="30" y="113">A</text> -->
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
<g class="fade-in" fill="none" stroke="#aaa" stroke-width="1">
|
<g class="fade-in" fill="none" stroke="#aaa" stroke-width="1">
|
||||||
<!-- simple lines that point to words -->
|
|
||||||
<path d="M 254 433.5 h-35.5 v40" />
|
<path d="M 254 433.5 h-35.5 v40" />
|
||||||
<path d="M 295 433.5 h36.5 v40" />
|
<path d="M 295 433.5 h36.5 v40" />
|
||||||
<path d="M 274 625 v-35" />
|
<path d="M 274 625 v-35" />
|
||||||
@@ -431,140 +348,7 @@
|
|||||||
<text x="420" y="438">fire</text>
|
<text x="420" y="438">fire</text>
|
||||||
<text x="599" y="438">field</text>
|
<text x="599" y="438">field</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- <g id="gamepad" transform="translate(700,700) scale(0.2)" style="display: none;" stroke="#333" stroke-width="0.5" fill="#444">
|
|
||||||
<path style="fill:#FB7686;" d="M122.578,86.897H68.276c-6.184,0-11.196,5.013-11.196,11.196v12.126h76.692V98.091
|
|
||||||
C133.772,91.908,128.76,86.897,122.578,86.897z" />
|
|
||||||
<rect x="57.08" y="100.766" style="opacity:0.4;fill:#FF4E64;enable-background:new ;" width="76.69" height="9.453" />
|
|
||||||
<path style="fill:#FB7686;" d="M389.422,86.897h54.303c6.182,0,11.194,5.013,11.194,11.196v12.126h-76.693V98.091
|
|
||||||
C378.228,91.908,383.241,86.897,389.422,86.897z" />
|
|
||||||
<rect x="378.229" y="100.766" style="opacity:0.4;fill:#FF4E64;enable-background:new ;" width="76.69" height="9.453" />
|
|
||||||
<rect x="101.947" y="130.449" style="fill:#89BBE4;" width="308.094" height="144.099" />
|
|
||||||
<path style="opacity:0.1;fill:#145587;enable-background:new ;" d="M336.726,130.443l-6.391,28.154
|
|
||||||
c-6.438,28.363-7.324,57.602-2.745,86.134H184.41c4.577-28.531,3.692-57.77-2.746-86.134l-6.39-28.154h-73.323v144.103h308.097
|
|
||||||
V130.443H336.726z" />
|
|
||||||
<g>
|
|
||||||
<path style="fill:#89BBE4;" d="M168.235,158.598l-6.39-28.154c-4.031-12.081-15.338-20.226-28.073-20.226H57.08
|
|
||||||
c-4.862,0-9.582,1.835-13.034,5.259c-9.65,9.571-15.848,22.071-17.629,35.539L0.612,346.264
|
|
||||||
c-5.519,41.762,26.979,78.838,69.103,78.838c31.406,0,58.935-21.004,67.23-51.296l27.18-99.262l0,0
|
|
||||||
C175.524,236.906,176.94,196.95,168.235,158.598z" />
|
|
||||||
<path style="fill:#89BBE4;" d="M511.387,346.264l-25.806-195.25c-1.78-13.468-7.978-25.967-17.629-35.539
|
|
||||||
c-3.452-3.424-8.172-5.259-13.034-5.259h-76.693c-12.734,0-24.041,8.146-28.072,20.226l-6.39,28.154
|
|
||||||
c-8.706,38.353-7.288,78.308,4.109,115.948l0,0l27.18,99.262c8.296,30.292,35.823,51.296,67.23,51.296
|
|
||||||
C484.408,425.102,516.908,388.026,511.387,346.264z" />
|
|
||||||
</g>
|
|
||||||
<circle style="fill:#ACDFEA;" cx="189.252" cy="285.582" r="52.611" />
|
|
||||||
<circle style="opacity:0.3;fill:#145587;enable-background:new ;" cx="183.371" cy="293.273" r="25.611" />
|
|
||||||
<circle style="fill:#ACDFEA;" cx="322.747" cy="285.582" r="52.611" />
|
|
||||||
<circle style="opacity:0.3;fill:#145587;enable-background:new ;" cx="316.866" cy="293.273" r="25.611" />
|
|
||||||
<circle style="fill:#384148;" cx="322.747" cy="285.582" r="25.611" />
|
|
||||||
<g>
|
|
||||||
<path style="fill:#1F84CE;" d="M108.027,142.799H86.073c-4.334,0-7.848,3.514-7.848,7.849v9.17c0,2.082,0.826,4.077,2.298,5.549
|
|
||||||
l11.3,11.3c3.064,3.065,8.034,3.065,11.1,0l10.653-10.652c1.471-1.472,2.298-3.469,2.298-5.549v-9.818
|
|
||||||
C115.875,146.314,112.361,142.799,108.027,142.799z" />
|
|
||||||
<path style="fill:#1F84CE;" d="M76.951,190.893l-10.653-10.652c-1.472-1.472-3.468-2.3-5.549-2.3h-9.818
|
|
||||||
c-4.334,0-7.849,3.514-7.849,7.849v21.953c0,4.335,3.514,7.849,7.849,7.849h9.17c2.082,0,4.077-0.828,5.549-2.3l11.302-11.3
|
|
||||||
C80.016,198.929,80.016,193.96,76.951,190.893z" />
|
|
||||||
<path style="fill:#1F84CE;" d="M113.576,228.168l-11.3-11.3c-3.065-3.065-8.034-3.065-11.1,0l-10.653,10.652
|
|
||||||
c-1.472,1.472-2.298,3.468-2.298,5.55v9.817c0,4.334,3.514,7.848,7.849,7.848h21.953c4.334,0,7.849-3.513,7.849-7.848v-9.171
|
|
||||||
C115.875,231.636,115.048,229.64,113.576,228.168z" />
|
|
||||||
<path style="fill:#1F84CE;" d="M143.169,177.943h-9.171c-2.081,0-4.077,0.826-5.549,2.298l-11.3,11.3
|
|
||||||
c-3.064,3.064-3.064,8.034,0,11.1l10.653,10.653c1.472,1.471,3.468,2.298,5.55,2.298h9.818c4.334,0,7.848-3.513,7.848-7.848
|
|
||||||
v-21.953C151.018,181.457,147.504,177.943,143.169,177.943z" />
|
|
||||||
<circle style="fill:#1F84CE;" cx="414.952" cy="155.839" r="18.825" />
|
|
||||||
</g>
|
|
||||||
<circle style="fill:#F9C526;" cx="374.025" cy="196.766" r="18.825" />
|
|
||||||
<circle style="fill:#54B8AC;" cx="414.952" cy="237.693" r="18.825" />
|
|
||||||
<circle style="fill:#FFFFFF;" cx="455.879" cy="196.766" r="18.825" />
|
|
||||||
<circle style="fill:#384148;" cx="189.252" cy="285.582" r="25.611" />
|
|
||||||
<g>
|
|
||||||
<path style="fill:#FFFFFF;" d="M226.267,190.234h-23.773c-4.57,0-8.276-3.705-8.276-8.276s3.705-8.276,8.276-8.276h23.773
|
|
||||||
c4.57,0,8.276,3.705,8.276,8.276S230.838,190.234,226.267,190.234z" />
|
|
||||||
<path style="fill:#FFFFFF;" d="M309.506,190.234h-23.773c-4.572,0-8.276-3.705-8.276-8.276s3.704-8.276,8.276-8.276h23.773
|
|
||||||
c4.572,0,8.276,3.705,8.276,8.276S314.077,190.234,309.506,190.234z" />
|
|
||||||
</g>
|
|
||||||
</g> -->
|
|
||||||
<!-- <g id="gamepad" transform="translate(640,640) scale(0.3)" style="display: none;" stroke="#333" stroke-width="0.5" fill="#444">
|
|
||||||
<path d="M115.824,187.891c-2.95,2.95-4.576,6.872-4.576,11.045c0,4.172,1.625,8.095,4.575,11.045l10.322,10.322
|
|
||||||
c2.95,2.949,6.872,4.573,11.042,4.573h9.511c8.612,0,15.619-7.007,15.619-15.619v-21.268c0-8.612-7.007-15.619-15.619-15.619
|
|
||||||
h-8.884c-4.171,0-8.093,1.625-11.044,4.575L115.824,187.891z M137.986,188.403h8.298v20.438h-8.926l-9.905-9.906L137.986,188.403
|
|
||||||
z" />
|
|
||||||
<path d="M91.29,184.819c2.95,2.951,6.873,4.576,11.046,4.576c4.172,0,8.095-1.625,11.044-4.575l10.32-10.318
|
|
||||||
c2.95-2.95,4.575-6.873,4.575-11.044v-9.511c0-8.613-7.007-15.62-15.62-15.62H91.388c-8.612,0-15.619,7.007-15.619,15.62v8.883
|
|
||||||
c0,4.172,1.625,8.095,4.575,11.045L91.29,184.819z M91.802,154.358h0.001h20.438v8.926l-9.906,9.905l-10.533-10.533V154.358z" />
|
|
||||||
<path d="M88.221,209.352c6.089-6.09,6.089-15.999,0-22.089c0-0.001,0-0.001-0.001-0.001L77.9,176.944
|
|
||||||
c-2.95-2.951-6.873-4.576-11.045-4.576h-9.51c-8.613,0-15.62,7.008-15.62,15.62v21.266c0,8.613,7.007,15.62,15.62,15.62h8.883
|
|
||||||
c4.172,0,8.094-1.625,11.045-4.575L88.221,209.352z M66.055,208.841h-8.297v-20.439h8.926l9.906,9.906L66.055,208.841z" />
|
|
||||||
<path d="M112.753,212.424c-2.95-2.95-6.872-4.576-11.045-4.576c-4.172,0-8.095,1.625-11.044,4.575l-10.32,10.318
|
|
||||||
c-2.95,2.95-4.575,6.873-4.575,11.045v9.51c0,8.612,7.007,15.619,15.62,15.619h21.266c8.614,0,15.62-7.007,15.62-15.619v-8.884
|
|
||||||
c0-4.172-1.625-8.094-4.575-11.045L112.753,212.424z M112.241,242.884H91.802v-8.926l9.906-9.905l10.533,10.533V242.884z" />
|
|
||||||
<path d="M449.624,172.369c-14.477,0-26.254,11.778-26.254,26.253c0,14.477,11.778,26.254,26.254,26.254
|
|
||||||
c14.476,0,26.253-11.778,26.253-26.254C475.877,184.145,464.099,172.369,449.624,172.369z M449.624,208.841
|
|
||||||
c-5.635,0-10.22-4.585-10.22-10.22s4.585-10.219,10.22-10.219c5.634,0,10.219,4.585,10.219,10.219
|
|
||||||
S455.259,208.841,449.624,208.841z" />
|
|
||||||
<path d="M409.979,212.012c-14.477,0-26.253,11.778-26.253,26.253c0,14.477,11.778,26.254,26.253,26.254
|
|
||||||
s26.253-11.778,26.253-26.254C436.232,223.79,424.455,212.012,409.979,212.012z M409.979,248.485
|
|
||||||
c-5.634,0-10.219-4.585-10.219-10.22s4.585-10.219,10.219-10.219c5.635,0,10.219,4.585,10.219,10.219
|
|
||||||
S415.615,248.485,409.979,248.485z" />
|
|
||||||
<path d="M511.349,342.391l-24.999-189.143c-1.947-14.73-8.829-28.605-19.38-39.069c-2.853-2.831-6.397-4.93-10.254-6.16v-4.988
|
|
||||||
c0-10.401-8.462-18.862-18.862-18.862h-52.604c-10.401,0-18.862,8.461-18.862,18.862v4.631
|
|
||||||
c-10.461,2.335-19.426,9.143-24.443,18.692H170.057c-5.018-9.55-13.983-16.358-24.443-18.692v-4.631
|
|
||||||
c0-10.401-8.462-18.862-18.862-18.862H74.147c-10.401,0-18.862,8.461-18.862,18.862v4.988c-3.858,1.231-7.401,3.33-10.254,6.16
|
|
||||||
c-10.55,10.464-17.433,24.339-19.38,39.069L0.652,342.391c-2.851,21.572,3.74,43.329,18.083,59.692
|
|
||||||
c14.343,16.363,35.049,25.747,56.809,25.747c33.935,0,63.897-22.86,72.86-55.591l10.502-38.356
|
|
||||||
c9.314,6.157,20.461,9.754,32.437,9.754c32.523,0,58.983-26.459,58.983-58.984c0-0.896-0.028-1.786-0.067-2.672h11.487
|
|
||||||
c-0.04,0.886-0.067,1.777-0.067,2.672c0,32.523,26.46,58.984,58.984,58.984c11.976,0,23.123-3.598,32.437-9.755l10.502,38.356
|
|
||||||
c8.963,32.731,38.923,55.591,72.859,55.591c21.76,0,42.466-9.385,56.809-25.747C507.608,385.721,514.199,363.964,511.349,342.391
|
|
||||||
z M385.25,100.203h52.604c1.56,0,2.828,1.269,2.828,2.828v3.73h-58.26v-3.73h-0.001
|
|
||||||
C382.422,101.471,383.69,100.203,385.25,100.203z M71.319,103.031c0-1.56,1.269-2.828,2.828-2.828h52.603
|
|
||||||
c1.558,0,2.828,1.269,2.828,2.828v3.73h-58.26V103.031z M132.937,368.005c-7.06,25.784-30.661,43.792-57.394,43.792
|
|
||||||
c-17.141,0-33.451-7.393-44.75-20.283c-11.299-12.89-16.49-30.029-14.245-47.021l25-189.144
|
|
||||||
c1.484-11.23,6.731-21.808,14.775-29.786c1.773-1.759,4.317-2.769,6.979-2.769h74.293c8.778,0,16.557,5.518,19.472,13.769
|
|
||||||
l6.095,26.855c5.027,22.148,6.454,44.778,4.258,67.342c-20.634,9.195-35.061,29.885-35.061,53.895
|
|
||||||
c0,14.078,4.964,27.014,13.225,37.166L132.937,368.005z M191.342,327.606c-23.682,0-42.95-19.266-42.95-42.95
|
|
||||||
s19.266-42.95,42.95-42.95c23.682,0,42.949,19.266,42.949,42.95S215.023,327.606,191.342,327.606z M247.267,265.95
|
|
||||||
c-7.841-23.379-29.94-40.278-55.925-40.278c-2.527,0-5.012,0.177-7.457,0.489c1.561-22.23-0.135-44.477-5.086-66.29
|
|
||||||
l-3.968-17.481h162.339l-3.967,17.481c-4.952,21.813-6.648,44.06-5.086,66.29c-2.445-0.31-4.93-0.489-7.457-0.489
|
|
||||||
c-25.985,0-48.084,16.898-55.926,40.278H247.267z M320.66,327.606c-23.682,0-42.95-19.266-42.95-42.95s19.266-42.95,42.95-42.95
|
|
||||||
c23.681,0,42.949,19.266,42.949,42.95S344.341,327.606,320.66,327.606z M481.209,391.514
|
|
||||||
c-11.299,12.89-27.61,20.283-44.751,20.283c-26.732,0-50.334-18.008-57.394-43.791l-12.646-46.183
|
|
||||||
c8.261-10.152,13.225-23.088,13.225-37.166c0-24.009-14.427-44.7-35.061-53.895c-2.197-22.564-0.769-45.195,4.258-67.342
|
|
||||||
l6.095-26.855c2.914-8.251,10.693-13.769,19.471-13.769h74.294c2.662,0,5.206,1.009,6.98,2.769
|
|
||||||
c8.043,7.977,13.29,18.556,14.774,29.786l24.999,189.142C497.699,361.486,492.506,378.625,481.209,391.514z" />
|
|
||||||
<path d="M191.342,251.823c-18.105,0-32.832,14.729-32.832,32.833s14.729,32.833,32.832,32.833
|
|
||||||
c18.105,0,32.832-14.729,32.832-32.833C224.175,266.551,209.446,251.823,191.342,251.823z M191.342,301.455
|
|
||||||
c-9.263,0-16.798-7.536-16.798-16.799s7.536-16.799,16.798-16.799c9.263,0,16.798,7.536,16.798,16.799
|
|
||||||
S200.605,301.455,191.342,301.455z" />
|
|
||||||
<path d="M396.588,198.622c0-14.476-11.778-26.253-26.253-26.253c-14.477,0-26.253,11.778-26.253,26.253
|
|
||||||
c0,14.477,11.778,26.254,26.253,26.254C384.81,224.875,396.588,213.098,396.588,198.622z M370.334,208.841
|
|
||||||
c-5.634,0-10.219-4.585-10.219-10.22s4.585-10.219,10.219-10.219c5.635,0,10.219,4.585,10.219,10.219
|
|
||||||
S375.97,208.841,370.334,208.841z" />
|
|
||||||
<path d="M227.198,176.258h-23.028c-4.427,0-8.017,3.589-8.017,8.017c0,4.427,3.589,8.017,8.017,8.017h23.028
|
|
||||||
c4.427,0,8.017-3.59,8.017-8.017C235.215,179.848,231.625,176.258,227.198,176.258z" />
|
|
||||||
<path d="M284.804,192.293h23.029c4.427,0,8.017-3.59,8.017-8.017c0-4.428-3.59-8.017-8.017-8.017h-23.029
|
|
||||||
c-4.429,0-8.017,3.589-8.017,8.017C276.787,188.703,280.375,192.293,284.804,192.293z" />
|
|
||||||
<path d="M320.66,251.823c-18.105,0-32.833,14.729-32.833,32.833s14.729,32.833,32.833,32.833
|
|
||||||
c18.104,0,32.832-14.729,32.832-32.833C353.492,266.551,338.763,251.823,320.66,251.823z M320.66,301.455
|
|
||||||
c-9.263,0-16.799-7.536-16.799-16.799s7.536-16.799,16.799-16.799c9.262,0,16.798,7.536,16.798,16.799
|
|
||||||
S329.922,301.455,320.66,301.455z" />
|
|
||||||
<path d="M409.979,185.23c14.476,0,26.253-11.778,26.253-26.254c0-14.476-11.778-26.253-26.253-26.253
|
|
||||||
c-14.477,0-26.253,11.778-26.253,26.253C383.726,173.454,395.503,185.23,409.979,185.23z M409.979,148.758
|
|
||||||
c5.635,0,10.219,4.585,10.219,10.219s-4.584,10.22-10.219,10.22c-5.634,0-10.219-4.585-10.219-10.22
|
|
||||||
C399.76,153.343,404.345,148.758,409.979,148.758z" />
|
|
||||||
</g> -->
|
|
||||||
|
|
||||||
<!-- <g id="gamepad" transform="translate(640,640) scale(2)" style="display: none;">
|
|
||||||
<path d="M44.3,49.8v-3.7c0-0.3-0.1-0.5-0.3-0.7s-0.4-0.3-0.7-0.3h-5.5v-5.5c0-0.3-0.1-0.5-0.3-0.7
|
|
||||||
s-0.4-0.3-0.7-0.3h-3.7c-0.3,0-0.5,0.1-0.7,0.3s-0.3,0.4-0.3,0.7v5.5h-5.5c-0.3,0-0.5,0.1-0.7,0.3S26,45.9,26,46.2v3.7
|
|
||||||
c0,0.3,0.1,0.5,0.3,0.7s0.4,0.3,0.7,0.3h5.5v5.5c0,0.3,0.1,0.5,0.3,0.7s0.4,0.3,0.7,0.3H37c0.3,0,0.5-0.1,0.7-0.3s0.3-0.4,0.3-0.7
|
|
||||||
v-5.5h5.5c0.3,0,0.5-0.1,0.7-0.3S44.3,50.1,44.3,49.8z M60.8,51.7c0-1-0.4-1.9-1.1-2.6C59,48.4,58.2,48,57.2,48s-1.9,0.4-2.6,1.1
|
|
||||||
s-1.1,1.6-1.1,2.6s0.4,1.9,1.1,2.6c0.7,0.7,1.6,1.1,2.6,1.1s1.9-0.4,2.6-1.1C60.5,53.5,60.8,52.7,60.8,51.7z M68.2,44.3
|
|
||||||
c0-1-0.4-1.9-1.1-2.6c-0.7-0.7-1.6-1.1-2.6-1.1s-1.9,0.4-2.6,1.1c-0.7,0.7-1.1,1.6-1.1,2.6s0.4,1.9,1.1,2.6
|
|
||||||
c0.7,0.7,1.6,1.1,2.6,1.1s1.9-0.4,2.6-1.1C67.8,46.2,68.2,45.3,68.2,44.3z M75.5,48c0,4-1.4,7.5-4.3,10.4
|
|
||||||
c-2.9,2.9-6.3,4.3-10.4,4.3c-3.7,0-6.9-1.2-9.7-3.7h-6.3c-2.8,2.4-6,3.7-9.7,3.7c-4,0-7.5-1.4-10.4-4.3c-2.9-2.9-4.3-6.3-4.3-10.4
|
|
||||||
s1.4-7.5,4.3-10.4c2.9-2.9,6.3-4.3,10.4-4.3h25.7c4,0,7.5,1.4,10.4,4.3C74.1,40.5,75.5,44,75.5,48z" fill="#888" stroke="#222" />
|
|
||||||
</g> -->
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
<script src='lib/matter.min.js'></script>
|
<script src='lib/matter.min.js'></script>
|
||||||
<script src='lib/decomp.min.js'></script>
|
<script src='lib/decomp.min.js'></script>
|
||||||
<script src='lib/randomColor.min.js'></script>
|
<script src='lib/randomColor.min.js'></script>
|
||||||
@@ -576,14 +360,9 @@
|
|||||||
<script src="js/mob.js"></script>
|
<script src="js/mob.js"></script>
|
||||||
<script src="js/spawn.js"></script>
|
<script src="js/spawn.js"></script>
|
||||||
<script src="js/level.js"></script>
|
<script src="js/level.js"></script>
|
||||||
<!-- <script src="js/visibility.js"></script> -->
|
|
||||||
<script src="js/lore.js"></script>
|
<script src="js/lore.js"></script>
|
||||||
<script src="js/engine.js"></script>
|
<script src="js/engine.js"></script>
|
||||||
<script src="js/index.js"></script>
|
<script src="js/index.js"></script>
|
||||||
|
|
||||||
<!-- code for different game: planetesimals -->
|
|
||||||
<!-- <div id='hud'></div>
|
|
||||||
<script src="js/planetesimals.js"></script> -->
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
52
js/bullet.js
52
js/bullet.js
@@ -196,9 +196,9 @@ const b = {
|
|||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
removeGun(gun, isRemoveSelection = false) {
|
removeGun(gunName) {
|
||||||
for (let i = 0; i < b.guns.length; i++) {
|
for (let i = 0; i < b.guns.length; i++) {
|
||||||
if (b.guns[i].name === gun) {
|
if (b.guns[i].name === gunName && b.guns[i].have) {
|
||||||
b.guns[i].have = false
|
b.guns[i].have = false
|
||||||
for (let j = 0; j < b.inventory.length; j++) {
|
for (let j = 0; j < b.inventory.length; j++) {
|
||||||
if (b.inventory[j] === i) {
|
if (b.inventory[j] === i) {
|
||||||
@@ -206,13 +206,12 @@ const b = {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (b.inventory.length) {
|
if (b.inventory.length > 0) {
|
||||||
b.activeGun = b.inventory[0];
|
b.activeGun = b.inventory[0];
|
||||||
} else {
|
} else {
|
||||||
b.activeGun = null;
|
b.activeGun = null;
|
||||||
}
|
}
|
||||||
simulation.makeGunHUD();
|
simulation.makeGunHUD();
|
||||||
if (isRemoveSelection) b.guns.splice(i, 1) //also remove gun from gun pool array
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -973,7 +972,7 @@ const b = {
|
|||||||
grenadeNeutron = function(where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }, angle = m.angle, size = 1) {
|
grenadeNeutron = function(where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }, angle = m.angle, size = 1) {
|
||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
bullet[me] = Bodies.polygon(where.x, where.y, 10, 4, b.fireAttributes(angle, false));
|
bullet[me] = Bodies.polygon(where.x, where.y, 10, 4, b.fireAttributes(angle, false));
|
||||||
b.fireProps((input.down ? 45 : 25) / Math.pow(0.93, tech.missileCount), input.down ? 35 : 20, angle, me); //cd , speed
|
b.fireProps((input.down ? 45 : 25) / Math.pow(0.92, tech.missileCount), input.down ? 35 : 20, angle, me); //cd , speed
|
||||||
Matter.Body.setDensity(bullet[me], 0.000001);
|
Matter.Body.setDensity(bullet[me], 0.000001);
|
||||||
bullet[me].endCycle = Infinity;
|
bullet[me].endCycle = Infinity;
|
||||||
bullet[me].frictionAir = 0;
|
bullet[me].frictionAir = 0;
|
||||||
@@ -1901,7 +1900,7 @@ const b = {
|
|||||||
frictionAir: 0.045,
|
frictionAir: 0.045,
|
||||||
dmg: 0, //damage done in addition to the damage from momentum
|
dmg: 0, //damage done in addition to the damage from momentum
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
endCycle: simulation.cycle + Math.floor((230 + 40 * Math.random()) * tech.isBulletsLastLonger),
|
endCycle: simulation.cycle + Math.floor((230 + 40 * Math.random()) * tech.isBulletsLastLonger + 120 * tech.isMissileBiggest + 60 * tech.isMissileBig),
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
category: cat.bullet,
|
category: cat.bullet,
|
||||||
mask: cat.map | cat.body | cat.mob | cat.mobBullet | cat.mobShield
|
mask: cat.map | cat.body | cat.mob | cat.mobBullet | cat.mobShield
|
||||||
@@ -1992,7 +1991,7 @@ const b = {
|
|||||||
didExtruderDrain: false,
|
didExtruderDrain: false,
|
||||||
canExtruderFire: true,
|
canExtruderFire: true,
|
||||||
extruder() {
|
extruder() {
|
||||||
const DRAIN = 0.0018
|
const DRAIN = 0.0012
|
||||||
if (m.energy > DRAIN && b.canExtruderFire) {
|
if (m.energy > DRAIN && b.canExtruderFire) {
|
||||||
m.energy -= DRAIN
|
m.energy -= DRAIN
|
||||||
if (m.energy < 0) {
|
if (m.energy < 0) {
|
||||||
@@ -2011,7 +2010,7 @@ const b = {
|
|||||||
frictionAir: 0,
|
frictionAir: 0,
|
||||||
isInHole: true, //this keeps the bullet from entering wormholes
|
isInHole: true, //this keeps the bullet from entering wormholes
|
||||||
minDmgSpeed: 0,
|
minDmgSpeed: 0,
|
||||||
dmg: m.dmgScale * 2.5, //damage also changes when you divide by mob.mass on in .do()
|
dmg: m.dmgScale * 2.7, //damage also changes when you divide by mob.mass on in .do()
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
isBranch: false,
|
isBranch: false,
|
||||||
restitution: 0,
|
restitution: 0,
|
||||||
@@ -2070,7 +2069,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
plasma() {
|
plasma() {
|
||||||
const DRAIN = 0.0011
|
const DRAIN = 0.00075
|
||||||
if (m.energy > DRAIN) {
|
if (m.energy > DRAIN) {
|
||||||
m.energy -= DRAIN;
|
m.energy -= DRAIN;
|
||||||
if (m.energy < 0) {
|
if (m.energy < 0) {
|
||||||
@@ -2150,7 +2149,7 @@ const b = {
|
|||||||
y: best.y
|
y: best.y
|
||||||
};
|
};
|
||||||
if (best.who.alive) {
|
if (best.who.alive) {
|
||||||
const dmg = 0.8 * m.dmgScale; //********** SCALE DAMAGE HERE *********************
|
const dmg = 0.9 * m.dmgScale; //********** SCALE DAMAGE HERE *********************
|
||||||
best.who.damage(dmg);
|
best.who.damage(dmg);
|
||||||
best.who.locatePlayer();
|
best.who.locatePlayer();
|
||||||
|
|
||||||
@@ -2726,6 +2725,7 @@ const b = {
|
|||||||
dmg: tech.isMutualism ? 16.8 : 7, //bonus damage from tech.isMutualism
|
dmg: tech.isMutualism ? 16.8 : 7, //bonus damage from tech.isMutualism
|
||||||
lookFrequency: 100 + Math.floor(117 * Math.random()),
|
lookFrequency: 100 + Math.floor(117 * Math.random()),
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
|
isSpore: true,
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
category: cat.bullet,
|
category: cat.bullet,
|
||||||
mask: cat.map | cat.mob | cat.mobBullet | cat.mobShield //no collide with body
|
mask: cat.map | cat.mob | cat.mobBullet | cat.mobShield //no collide with body
|
||||||
@@ -4235,7 +4235,7 @@ const b = {
|
|||||||
this.force = Vector.mult(Vector.normalise(Vector.sub(this.position, mob[i].position)), this.mass * 0.02)
|
this.force = Vector.mult(Vector.normalise(Vector.sub(this.position, mob[i].position)), this.mass * 0.02)
|
||||||
|
|
||||||
if (tech.missileCount > 1) {
|
if (tech.missileCount > 1) {
|
||||||
const countReduction = Math.pow(0.93, tech.missileCount)
|
const countReduction = Math.pow(0.85, tech.missileCount)
|
||||||
const size = 0.9 * Math.sqrt(countReduction)
|
const size = 0.9 * Math.sqrt(countReduction)
|
||||||
const direction = {
|
const direction = {
|
||||||
x: Math.cos(angle),
|
x: Math.cos(angle),
|
||||||
@@ -5765,7 +5765,7 @@ const b = {
|
|||||||
fireCycle: 0,
|
fireCycle: 0,
|
||||||
do() {},
|
do() {},
|
||||||
fire() {
|
fire() {
|
||||||
const countReduction = Math.pow(0.9, tech.missileCount)
|
const countReduction = Math.pow(0.86, tech.missileCount)
|
||||||
// if (input.down) {
|
// if (input.down) {
|
||||||
// m.fireCDcycle = m.cycle + tech.missileFireCD * b.fireCDscale / countReduction; // cool down
|
// m.fireCDcycle = m.cycle + tech.missileFireCD * b.fireCDscale / countReduction; // cool down
|
||||||
// // for (let i = 0; i < tech.missileCount; i++) {
|
// // for (let i = 0; i < tech.missileCount; i++) {
|
||||||
@@ -6246,13 +6246,13 @@ const b = {
|
|||||||
const dist = Vector.magnitude(Vector.sub(where, mob[i].position))
|
const dist = Vector.magnitude(Vector.sub(where, mob[i].position))
|
||||||
// console.log(dot, 0.95 - Math.min(dist * 0.00015, 0.3))
|
// console.log(dot, 0.95 - Math.min(dist * 0.00015, 0.3))
|
||||||
if (dot > 0.95 - Math.min(dist * 0.00015, 0.3)) { //lower dot product threshold for targeting then if you only have one harpoon //target closest mob that player is looking at and isn't too close to target
|
if (dot > 0.95 - Math.min(dist * 0.00015, 0.3)) { //lower dot product threshold for targeting then if you only have one harpoon //target closest mob that player is looking at and isn't too close to target
|
||||||
if (this.ammo > -1) {
|
// if (this.ammo > -1) {
|
||||||
this.ammo--
|
// this.ammo--
|
||||||
b.harpoon(where, input.down ? mob[i] : null, angle, harpoonSize, false) //Vector.angle(Vector.sub(where, mob[i].position), { x: 0, y: 0 })
|
b.harpoon(where, input.down ? mob[i] : null, angle, harpoonSize, false) //Vector.angle(Vector.sub(where, mob[i].position), { x: 0, y: 0 })
|
||||||
angle += SPREAD
|
angle += SPREAD
|
||||||
targetCount++
|
targetCount++
|
||||||
if (targetCount > tech.extraHarpoons) break
|
if (targetCount > tech.extraHarpoons) break
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6260,14 +6260,14 @@ const b = {
|
|||||||
if (targetCount < tech.extraHarpoons + 1) {
|
if (targetCount < tech.extraHarpoons + 1) {
|
||||||
const num = tech.extraHarpoons + 1 - targetCount
|
const num = tech.extraHarpoons + 1 - targetCount
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
if (this.ammo > -1) {
|
// if (this.ammo > -1) {
|
||||||
this.ammo--
|
// this.ammo--
|
||||||
b.harpoon(where, null, angle, harpoonSize, false)
|
b.harpoon(where, null, angle, harpoonSize, false)
|
||||||
angle += SPREAD
|
angle += SPREAD
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.ammo++ //make up for the ammo used up in fire()
|
// this.ammo++ //make up for the ammo used up in fire()
|
||||||
simulation.updateGunHUD();
|
simulation.updateGunHUD();
|
||||||
} else {
|
} else {
|
||||||
//look for closest mob in player's LoS
|
//look for closest mob in player's LoS
|
||||||
@@ -7298,7 +7298,7 @@ const b = {
|
|||||||
m.fireCDcycle = m.cycle
|
m.fireCDcycle = m.cycle
|
||||||
m.energy -= m.fieldRegen + tech.laserFieldDrain * tech.isLaserDiode
|
m.energy -= m.fieldRegen + tech.laserFieldDrain * tech.isLaserDiode
|
||||||
const dmg = 0.4 * tech.laserDamage // 3.5 * 0.55 = 200% more damage
|
const dmg = 0.4 * tech.laserDamage // 3.5 * 0.55 = 200% more damage
|
||||||
const spacing = Math.ceil(5.2 - 0.4 * tech.historyLaser)
|
const spacing = Math.ceil(4 - 0.3 * tech.historyLaser)
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
b.laser({
|
b.laser({
|
||||||
x: m.pos.x + 20 * Math.cos(m.angle),
|
x: m.pos.x + 20 * Math.cos(m.angle),
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ const build = {
|
|||||||
<br>
|
<br>
|
||||||
${botText}
|
${botText}
|
||||||
<br><strong class='color-h'>health</strong>: (${(m.health*100).toFixed(0)} / ${(m.maxHealth*100).toFixed(0)}) <strong class='color-f'>energy</strong>: (${(m.energy*100).toFixed(0)} / ${(m.maxEnergy*100).toFixed(0)})
|
<br><strong class='color-h'>health</strong>: (${(m.health*100).toFixed(0)} / ${(m.maxHealth*100).toFixed(0)}) <strong class='color-f'>energy</strong>: (${(m.energy*100).toFixed(0)} / ${(m.maxEnergy*100).toFixed(0)})
|
||||||
<br><strong class='color-g'>gun</strong>: ${b.activeGun !== null ? b.guns[b.activeGun].name: "null"} <strong class='color-g'>ammo</strong>: ${b.activeGun !== null ? b.guns[b.activeGun].ammo: "0"}
|
<br><strong class='color-g'>gun</strong>: ${b.activeGun === null || b.activeGun === undefined ? "undefined":b.guns[b.activeGun].name} <strong class='color-g'>ammo</strong>: ${b.activeGun === null || b.activeGun === undefined ? "0":b.guns[b.activeGun].ammo}
|
||||||
<br><strong><em>fire delay</em></strong> decrease: ${((1-b.fireCDscale)*100).toFixed(b.fireCDscale < 0.1 ? 2 : 0)}%
|
<br><strong><em>fire delay</em></strong> decrease: ${((1-b.fireCDscale)*100).toFixed(b.fireCDscale < 0.1 ? 2 : 0)}%
|
||||||
<br><strong class='color-dup'>duplication</strong> chance: ${(tech.duplicationChance()*100).toFixed(0)}%
|
<br><strong class='color-dup'>duplication</strong> chance: ${(tech.duplicationChance()*100).toFixed(0)}%
|
||||||
<br><strong class='color-m'>tech</strong>: ${tech.totalCount} <strong class='color-r'>research</strong>: ${powerUps.research.count}
|
<br><strong class='color-m'>tech</strong>: ${tech.totalCount} <strong class='color-r'>research</strong>: ${powerUps.research.count}
|
||||||
|
|||||||
1041
js/level.js
1041
js/level.js
File diff suppressed because it is too large
Load Diff
38
js/player.js
38
js/player.js
@@ -522,7 +522,7 @@ const m = {
|
|||||||
if (tech.isAddBlockMass && m.isHolding) dmg *= 0.15
|
if (tech.isAddBlockMass && m.isHolding) dmg *= 0.15
|
||||||
if (tech.isSpeedHarm) dmg *= 1 - Math.min(player.speed * 0.0165, 0.66)
|
if (tech.isSpeedHarm) dmg *= 1 - Math.min(player.speed * 0.0165, 0.66)
|
||||||
if (tech.isSlowFPS) dmg *= 0.8
|
if (tech.isSlowFPS) dmg *= 0.8
|
||||||
if (tech.isHarmReduce && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.4
|
if (tech.isHarmReduce && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.34
|
||||||
if (tech.isNeutronium && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.1
|
if (tech.isNeutronium && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.1
|
||||||
if (tech.isBotArmor) dmg *= 0.93 ** b.totalBots()
|
if (tech.isBotArmor) dmg *= 0.93 ** b.totalBots()
|
||||||
if (tech.isHarmArmor && m.lastHarmCycle + 600 > m.cycle) dmg *= 0.33;
|
if (tech.isHarmArmor && m.lastHarmCycle + 600 > m.cycle) dmg *= 0.33;
|
||||||
@@ -956,7 +956,7 @@ const m = {
|
|||||||
m.calculateFieldThreshold(); //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob)
|
m.calculateFieldThreshold(); //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob)
|
||||||
m.isBodiesAsleep = true;
|
m.isBodiesAsleep = true;
|
||||||
m.wakeCheck();
|
m.wakeCheck();
|
||||||
// m.setMaxEnergy();
|
m.setMaxEnergy();
|
||||||
m.hole = {
|
m.hole = {
|
||||||
isOn: false,
|
isOn: false,
|
||||||
isReady: false,
|
isReady: false,
|
||||||
@@ -971,7 +971,7 @@ const m = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
setMaxEnergy() {
|
setMaxEnergy() {
|
||||||
m.maxEnergy = (tech.isMaxEnergyTech ? 0.5 : 1) + tech.bonusEnergy + tech.healMaxEnergyBonus + tech.harmonicEnergy + 2 * tech.isGroundState + 3 * tech.isRelay * tech.isFlipFlopOn * tech.isRelayEnergy
|
m.maxEnergy = (tech.isMaxEnergyTech ? 0.5 : 1) + tech.bonusEnergy + tech.healMaxEnergyBonus + tech.harmonicEnergy + 2 * tech.isGroundState + 3 * tech.isRelay * tech.isFlipFlopOn * tech.isRelayEnergy + 0.5 * (m.fieldUpgrades[m.fieldMode].name === "standing wave")
|
||||||
simulation.makeTextLog(`<span class='color-var'>m</span>.<span class='color-f'>maxEnergy</span> <span class='color-symbol'>=</span> ${(m.maxEnergy.toFixed(2))}`)
|
simulation.makeTextLog(`<span class='color-var'>m</span>.<span class='color-f'>maxEnergy</span> <span class='color-symbol'>=</span> ${(m.maxEnergy.toFixed(2))}`)
|
||||||
},
|
},
|
||||||
fieldMeterColor: "#0cf",
|
fieldMeterColor: "#0cf",
|
||||||
@@ -1336,7 +1336,7 @@ const m = {
|
|||||||
//draw electricity
|
//draw electricity
|
||||||
const step = 40
|
const step = 40
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
for (let i = 0, len = 1.5 * tech.blockDmg; i < len; i++) {
|
for (let i = 0, len = 1.3 * tech.blockDmg; i < len; i++) {
|
||||||
let x = m.pos.x - 20 * unit.x;
|
let x = m.pos.x - 20 * unit.x;
|
||||||
let y = m.pos.y - 20 * unit.y;
|
let y = m.pos.y - 20 * unit.y;
|
||||||
ctx.moveTo(x, y);
|
ctx.moveTo(x, y);
|
||||||
@@ -1527,7 +1527,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "standing wave",
|
name: "standing wave",
|
||||||
description: "<strong>3</strong> oscillating <strong>shields</strong> are permanently active<br><strong>deflecting</strong> protects you in every <strong>direction</strong><br><strong>deflecting</strong> has <strong>50%</strong> less <strong>recoil</strong>", //drains <strong class='color-f'>energy</strong>
|
description: "<strong>3</strong> oscillating <strong>shields</strong> are permanently active<br><strong>deflecting</strong> protects you in every <strong>direction</strong><br>increase your <strong>max</strong> <strong class='color-f'>energy</strong> by <strong>50</strong>", //drains <strong class='color-f'>energy</strong> //<strong>deflecting</strong> has <strong>50%</strong> less <strong>recoil</strong>
|
||||||
drainCD: 0,
|
drainCD: 0,
|
||||||
effect: () => {
|
effect: () => {
|
||||||
m.fieldBlockCD = 0;
|
m.fieldBlockCD = 0;
|
||||||
@@ -1560,7 +1560,7 @@ const m = {
|
|||||||
m.pushMass(mob[i]);
|
m.pushMass(mob[i]);
|
||||||
this.drainCD = m.cycle + 10
|
this.drainCD = m.cycle + 10
|
||||||
}
|
}
|
||||||
if (mob[i].isShielded || mob[i].shield) m.fieldCDcycle = m.cycle + 30
|
if (mob[i].isShielded || mob[i].shield) m.fieldCDcycle = m.cycle + 20
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1589,7 +1589,7 @@ const m = {
|
|||||||
m.pushMass(mob[i]);
|
m.pushMass(mob[i]);
|
||||||
this.drainCD = m.cycle + 10
|
this.drainCD = m.cycle + 10
|
||||||
}
|
}
|
||||||
if (mob[i].isShielded || mob[i].shield) m.fieldCDcycle = m.cycle + 30
|
if (mob[i].isShielded || mob[i].shield) m.fieldCDcycle = m.cycle + 20
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1660,7 +1660,7 @@ const m = {
|
|||||||
mob[i].damage(tech.blockDmg * m.dmgScale)
|
mob[i].damage(tech.blockDmg * m.dmgScale)
|
||||||
const step = 40
|
const step = 40
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
for (let i = 0, len = 1.5 * tech.blockDmg; i < len; i++) {
|
for (let i = 0, len = 1.3 * tech.blockDmg; i < len; i++) {
|
||||||
let x = m.fieldPosition.x - 20 * unit.x;
|
let x = m.fieldPosition.x - 20 * unit.x;
|
||||||
let y = m.fieldPosition.y - 20 * unit.y;
|
let y = m.fieldPosition.y - 20 * unit.y;
|
||||||
ctx.moveTo(x, y);
|
ctx.moveTo(x, y);
|
||||||
@@ -1967,6 +1967,11 @@ const m = {
|
|||||||
// m.eyeFillColor = m.fieldMeterColor
|
// m.eyeFillColor = m.fieldMeterColor
|
||||||
m.hold = function() {
|
m.hold = function() {
|
||||||
if (m.energy > m.maxEnergy - 0.02 && m.fieldCDcycle < m.cycle && !input.field && bullet.length < 300 && (m.cycle % 2)) {
|
if (m.energy > m.maxEnergy - 0.02 && m.fieldCDcycle < m.cycle && !input.field && bullet.length < 300 && (m.cycle % 2)) {
|
||||||
|
// if (tech.isBotField) {
|
||||||
|
// b.randomBot(this.position, false)
|
||||||
|
// bullet[bullet.length - 1].endCycle = simulation.cycle + 840 //14 seconds
|
||||||
|
// m.energy -= 0.35
|
||||||
|
// } else
|
||||||
if (tech.isSporeField) {
|
if (tech.isSporeField) {
|
||||||
if (tech.isSporeWorm) {
|
if (tech.isSporeWorm) {
|
||||||
const drain = 0.16 + (Math.max(bullet.length, 130) - 130) * 0.02
|
const drain = 0.16 + (Math.max(bullet.length, 130) - 130) * 0.02
|
||||||
@@ -2111,9 +2116,9 @@ const m = {
|
|||||||
isPopping: false,
|
isPopping: false,
|
||||||
isAttached: false,
|
isAttached: false,
|
||||||
isOn: false,
|
isOn: false,
|
||||||
drain: 0.0015,
|
drain: 0.0011,
|
||||||
radiusLimit: 10,
|
radiusLimit: 10,
|
||||||
damage: 0.7,
|
damage: 0.8,
|
||||||
setPositionToNose() {
|
setPositionToNose() {
|
||||||
const nose = { x: m.pos.x + 10 * Math.cos(m.angle), y: m.pos.y + 10 * Math.sin(m.angle) }
|
const nose = { x: m.pos.x + 10 * Math.cos(m.angle), y: m.pos.y + 10 * Math.sin(m.angle) }
|
||||||
Matter.Body.setPosition(this, Vector.add(nose, Vector.mult(Vector.normalise(Vector.sub(nose, m.pos)), this.circleRadius)));
|
Matter.Body.setPosition(this, Vector.add(nose, Vector.mult(Vector.normalise(Vector.sub(nose, m.pos)), this.circleRadius)));
|
||||||
@@ -2355,7 +2360,6 @@ const m = {
|
|||||||
}
|
}
|
||||||
m.plasmaBall.setPositionToNose()
|
m.plasmaBall.setPositionToNose()
|
||||||
|
|
||||||
|
|
||||||
//add friction for player when holding ball, more friction in vertical
|
//add friction for player when holding ball, more friction in vertical
|
||||||
// const floatScale = Math.sqrt(m.plasmaBall.circleRadius)
|
// const floatScale = Math.sqrt(m.plasmaBall.circleRadius)
|
||||||
// const friction = 0.0002 * floatScale
|
// const friction = 0.0002 * floatScale
|
||||||
@@ -2380,10 +2384,6 @@ const m = {
|
|||||||
} else {
|
} else {
|
||||||
player.force.y -= 0.5 * player.mass * simulation.g;
|
player.force.y -= 0.5 * player.mass * simulation.g;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
m.fieldCDcycle = m.cycle + 90;
|
m.fieldCDcycle = m.cycle + 90;
|
||||||
m.plasmaBall.fire()
|
m.plasmaBall.fire()
|
||||||
@@ -2402,12 +2402,8 @@ const m = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.drawFieldMeter("rgba(0, 0, 0, 0.2)")
|
m.drawFieldMeter("rgba(0, 0, 0, 0.2)")
|
||||||
|
|
||||||
m.plasmaBall.do()
|
m.plasmaBall.do()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else if (tech.isExtruder) {
|
} else if (tech.isExtruder) {
|
||||||
m.hold = function() {
|
m.hold = function() {
|
||||||
b.isExtruderOn = false
|
b.isExtruderOn = false
|
||||||
@@ -2651,7 +2647,7 @@ const m = {
|
|||||||
} else {
|
} else {
|
||||||
m.fieldFire = true;
|
m.fieldFire = true;
|
||||||
m.isBodiesAsleep = false;
|
m.isBodiesAsleep = false;
|
||||||
m.drain = 0.0005
|
m.drain = 0.0003
|
||||||
m.hold = function() {
|
m.hold = function() {
|
||||||
if (m.isHolding) {
|
if (m.isHolding) {
|
||||||
m.wakeCheck();
|
m.wakeCheck();
|
||||||
@@ -2662,7 +2658,7 @@ const m = {
|
|||||||
m.grabPowerUp();
|
m.grabPowerUp();
|
||||||
m.lookForPickUp();
|
m.lookForPickUp();
|
||||||
|
|
||||||
m.drain += 0.0000025 //also increases inside tech.isTimeSkip
|
m.drain += 0.000002 //also increases inside tech.isTimeSkip
|
||||||
if (m.energy > m.drain) {
|
if (m.energy > m.drain) {
|
||||||
m.energy -= m.drain;
|
m.energy -= m.drain;
|
||||||
if (m.energy < m.drain) {
|
if (m.energy < m.drain) {
|
||||||
|
|||||||
@@ -736,7 +736,7 @@ const powerUps = {
|
|||||||
|
|
||||||
function cycle() {
|
function cycle() {
|
||||||
count++
|
count++
|
||||||
if (count < 600 && simulation.isChoosing) {
|
if (count < tech.brainStormDelay * 5 && simulation.isChoosing) {
|
||||||
if (!(count % tech.brainStormDelay)) {
|
if (!(count % tech.brainStormDelay)) {
|
||||||
powerUps.tech.effect();
|
powerUps.tech.effect();
|
||||||
document.getElementById("choose-grid").style.pointerEvents = "auto"; //turn off the normal 500ms delay
|
document.getElementById("choose-grid").style.pointerEvents = "auto"; //turn off the normal 500ms delay
|
||||||
|
|||||||
@@ -823,24 +823,29 @@ const simulation = {
|
|||||||
simulation.drawList = [];
|
simulation.drawList = [];
|
||||||
|
|
||||||
if (tech.isDronesTravel && m.alive) {
|
if (tech.isDronesTravel && m.alive) {
|
||||||
console.log('hi')
|
|
||||||
//count drones
|
//count drones
|
||||||
let count = 0
|
let count = 0
|
||||||
|
let sporeCount = 0
|
||||||
|
let wormCount = 0
|
||||||
let deliveryCount = 0
|
let deliveryCount = 0
|
||||||
for (let i = 0; i < bullet.length; ++i) {
|
for (let i = 0; i < bullet.length; ++i) {
|
||||||
if (bullet[i].isDrone) {
|
if (bullet[i].isDrone) {
|
||||||
count++
|
count++
|
||||||
if (bullet[i].isImproved) deliveryCount++
|
if (bullet[i].isImproved) deliveryCount++
|
||||||
|
} else if (bullet[i].isSpore) {
|
||||||
|
sporeCount++
|
||||||
|
} else if (bullet[i].wormSize) {
|
||||||
|
wormCount++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// count *= 2
|
|
||||||
//respawn drones in animation frame
|
//respawn drones in animation frame
|
||||||
let respawnDrones = () => {
|
let respawnDrones = () => {
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
requestAnimationFrame(respawnDrones);
|
requestAnimationFrame(respawnDrones);
|
||||||
if (!simulation.paused && !simulation.isChoosing) {
|
if (!simulation.paused && !simulation.isChoosing) {
|
||||||
count--
|
|
||||||
const where = { x: level.enter.x + 50, y: level.enter.y - 60 }
|
const where = { x: level.enter.x + 50, y: level.enter.y - 60 }
|
||||||
|
count--
|
||||||
if (tech.isDroneRadioactive) {
|
if (tech.isDroneRadioactive) {
|
||||||
b.droneRadioactive({ x: where.x + 100 * (Math.random() - 0.5), y: where.y + 100 * (Math.random() - 0.5) }, 0)
|
b.droneRadioactive({ x: where.x + 100 * (Math.random() - 0.5), y: where.y + 100 * (Math.random() - 0.5) }, 0)
|
||||||
} else {
|
} else {
|
||||||
@@ -859,6 +864,32 @@ const simulation = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
requestAnimationFrame(respawnDrones);
|
requestAnimationFrame(respawnDrones);
|
||||||
|
|
||||||
|
//respawn spores in animation frame
|
||||||
|
let respawnSpores = () => {
|
||||||
|
if (sporeCount > 0) {
|
||||||
|
requestAnimationFrame(respawnSpores);
|
||||||
|
if (!simulation.paused && !simulation.isChoosing) {
|
||||||
|
sporeCount--
|
||||||
|
const where = { x: level.enter.x + 50, y: level.enter.y - 60 }
|
||||||
|
b.spore({ x: where.x + 100 * (Math.random() - 0.5), y: where.y + 120 * (Math.random() - 0.5) })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
requestAnimationFrame(respawnSpores);
|
||||||
|
|
||||||
|
//respawn worms in animation frame
|
||||||
|
let respawnWorms = () => {
|
||||||
|
if (wormCount > 0) {
|
||||||
|
requestAnimationFrame(respawnWorms);
|
||||||
|
if (!simulation.paused && !simulation.isChoosing) {
|
||||||
|
wormCount--
|
||||||
|
const where = { x: level.enter.x + 50, y: level.enter.y - 60 }
|
||||||
|
b.worm({ x: where.x + 100 * (Math.random() - 0.5), y: where.y + 120 * (Math.random() - 0.5) })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
requestAnimationFrame(respawnWorms);
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeAll(array) {
|
function removeAll(array) {
|
||||||
|
|||||||
25
js/spawn.js
25
js/spawn.js
@@ -2988,6 +2988,7 @@ const spawn = {
|
|||||||
}, Vector.normalise(Vector.sub(this.fireTarget, this.position)));
|
}, Vector.normalise(Vector.sub(this.fireTarget, this.position)));
|
||||||
//distance between the target and the player's location
|
//distance between the target and the player's location
|
||||||
if (
|
if (
|
||||||
|
m.isCloak ||
|
||||||
dot > 0.03 || // not looking at target
|
dot > 0.03 || // not looking at target
|
||||||
Matter.Query.ray(map, this.fireTarget, this.position).length || Matter.Query.ray(body, this.fireTarget, this.position).length || //something blocking line of sight
|
Matter.Query.ray(map, this.fireTarget, this.position).length || Matter.Query.ray(body, this.fireTarget, this.position).length || //something blocking line of sight
|
||||||
Vector.magnitude(Vector.sub(m.pos, this.fireTarget)) > 1000 // distance from player to target is very far, (this is because dot product can't tell if facing 180 degrees away)
|
Vector.magnitude(Vector.sub(m.pos, this.fireTarget)) > 1000 // distance from player to target is very far, (this is because dot product can't tell if facing 180 degrees away)
|
||||||
@@ -3542,6 +3543,10 @@ const spawn = {
|
|||||||
spawn.spawnOrbitals(me, radius + 50 + 200 * Math.random(), 1)
|
spawn.spawnOrbitals(me, radius + 50 + 200 * Math.random(), 1)
|
||||||
Matter.Body.setDensity(me, 0.0022 + 0.0002 * Math.sqrt(simulation.difficulty)); //extra dense //normal is 0.001 //makes effective life much larger
|
Matter.Body.setDensity(me, 0.0022 + 0.0002 * Math.sqrt(simulation.difficulty)); //extra dense //normal is 0.001 //makes effective life much larger
|
||||||
me.damageReduction = 0.09 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1)
|
me.damageReduction = 0.09 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1)
|
||||||
|
|
||||||
|
me.startingDamageReduction = me.damageReduction
|
||||||
|
me.isInvulnerable = false
|
||||||
|
|
||||||
me.onDeath = function() {
|
me.onDeath = function() {
|
||||||
if (isSpawnBossPowerUp) powerUps.spawnBossPowerUp(this.position.x, this.position.y)
|
if (isSpawnBossPowerUp) powerUps.spawnBossPowerUp(this.position.x, this.position.y)
|
||||||
};
|
};
|
||||||
@@ -3571,8 +3576,8 @@ const spawn = {
|
|||||||
if (this.speed < 0.01) {
|
if (this.speed < 0.01) {
|
||||||
Matter.Body.setVelocity(this, Vector.mult(Vector.normalise(Vector.sub(player.position, this.position)), 0.1));
|
Matter.Body.setVelocity(this, Vector.mult(Vector.normalise(Vector.sub(player.position, this.position)), 0.1));
|
||||||
} else {
|
} else {
|
||||||
if (Math.abs(this.velocity.y) < 15) Matter.Body.setVelocity(this, { x: this.velocity.x, y: this.velocity.y * 1.07 });
|
if (Math.abs(this.velocity.y) < 13) Matter.Body.setVelocity(this, { x: this.velocity.x, y: this.velocity.y * 1.07 });
|
||||||
if (Math.abs(this.velocity.x) < 11) Matter.Body.setVelocity(this, { x: this.velocity.x * 1.07, y: this.velocity.y });
|
if (Math.abs(this.velocity.x) < 10) Matter.Body.setVelocity(this, { x: this.velocity.x * 1.07, y: this.velocity.y });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
me.noFire = function() {
|
me.noFire = function() {
|
||||||
@@ -3582,18 +3587,32 @@ const spawn = {
|
|||||||
this.phaseCycle = -2
|
this.phaseCycle = -2
|
||||||
this.do = this.burstFire
|
this.do = this.burstFire
|
||||||
this.frictionAir = 1
|
this.frictionAir = 1
|
||||||
if (!this.isShielded) spawn.shield(this, this.position.x, this.position.y, 1);
|
this.isInvulnerable = true
|
||||||
|
this.damageReduction = 0
|
||||||
|
// if (!this.isShielded) spawn.shield(this, this.position.x, this.position.y, 1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
me.burstFire = function() {
|
me.burstFire = function() {
|
||||||
this.normalDoStuff();
|
this.normalDoStuff();
|
||||||
this.radialLines()
|
this.radialLines()
|
||||||
|
//draw invulnerable
|
||||||
|
ctx.beginPath();
|
||||||
|
let vertices = this.vertices;
|
||||||
|
ctx.moveTo(vertices[0].x, vertices[0].y);
|
||||||
|
for (let j = 1; j < vertices.length; j++) ctx.lineTo(vertices[j].x, vertices[j].y);
|
||||||
|
ctx.lineTo(vertices[0].x, vertices[0].y);
|
||||||
|
ctx.lineWidth = 13 + 5 * Math.random();
|
||||||
|
ctx.strokeStyle = `rgba(255,255,255,${0.5+0.2*Math.random()})`;
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
if (!(simulation.cycle % this.burstFireFreq)) {
|
if (!(simulation.cycle % this.burstFireFreq)) {
|
||||||
this.phaseCycle++
|
this.phaseCycle++
|
||||||
if (this.phaseCycle > this.burstTotalPhases) { //start spiral fire mode
|
if (this.phaseCycle > this.burstTotalPhases) { //start spiral fire mode
|
||||||
this.phaseCycle = -7
|
this.phaseCycle = -7
|
||||||
this.do = this.noFire
|
this.do = this.noFire
|
||||||
this.frictionAir = 0;
|
this.frictionAir = 0;
|
||||||
|
this.isInvulnerable = false
|
||||||
|
this.damageReduction = this.startingDamageReduction
|
||||||
Matter.Body.setVelocity(this, Vector.rotate({ x: 20, y: 0 }, 2 * Math.PI * Math.random()));
|
Matter.Body.setVelocity(this, Vector.rotate({ x: 20, y: 0 }, 2 * Math.PI * Math.random()));
|
||||||
if (this.isShielded) { //remove shield
|
if (this.isShielded) { //remove shield
|
||||||
for (let i = 0; i < mob.length; i++) {
|
for (let i = 0; i < mob.length; i++) {
|
||||||
|
|||||||
192
js/tech.js
192
js/tech.js
@@ -232,7 +232,7 @@ const tech = {
|
|||||||
if (tech.isDupDamage) dmg *= 1 + Math.min(1, tech.duplicationChance())
|
if (tech.isDupDamage) dmg *= 1 + Math.min(1, tech.duplicationChance())
|
||||||
if (tech.isLowEnergyDamage) dmg *= 1 + 0.7 * Math.max(0, 1 - m.energy)
|
if (tech.isLowEnergyDamage) dmg *= 1 + 0.7 * Math.max(0, 1 - m.energy)
|
||||||
if (tech.isMaxEnergyTech) dmg *= 1.5
|
if (tech.isMaxEnergyTech) dmg *= 1.5
|
||||||
if (tech.isEnergyNoAmmo) dmg *= 1.70
|
if (tech.isEnergyNoAmmo) dmg *= 1.88
|
||||||
if (tech.isDamageForGuns) dmg *= 1 + 0.12 * b.inventory.length
|
if (tech.isDamageForGuns) dmg *= 1 + 0.12 * b.inventory.length
|
||||||
if (tech.isLowHealthDmg) dmg *= 1 + Math.max(0, 1 - m.health) * 0.5
|
if (tech.isLowHealthDmg) dmg *= 1 + Math.max(0, 1 - m.health) * 0.5
|
||||||
if (tech.isHarmDamage && m.lastHarmCycle + 600 > m.cycle) dmg *= 3;
|
if (tech.isHarmDamage && m.lastHarmCycle + 600 > m.cycle) dmg *= 3;
|
||||||
@@ -250,7 +250,7 @@ const tech = {
|
|||||||
return dmg * tech.slowFire * tech.aimDamage
|
return dmg * tech.slowFire * tech.aimDamage
|
||||||
},
|
},
|
||||||
duplicationChance() {
|
duplicationChance() {
|
||||||
return Math.max(0, (tech.isPowerUpsVanish ? 0.12 : 0) + (tech.isStimulatedEmission ? 0.15 : 0) + tech.cancelCount * 0.043 + tech.duplicateChance + m.duplicateChance + tech.wormDuplicate + tech.cloakDuplication + (tech.isAnthropicTech && tech.isDeathAvoidedThisLevel ? 0.5 : 0))
|
return Math.max(0, (tech.isPowerUpsVanish ? 0.12 : 0) + (tech.isStimulatedEmission ? 0.15 : 0) + tech.cancelCount * 0.043 + tech.duplicateChance + m.duplicateChance + tech.fieldDuplicate + tech.cloakDuplication + (tech.isAnthropicTech && tech.isDeathAvoidedThisLevel ? 0.5 : 0))
|
||||||
},
|
},
|
||||||
isScaleMobsWithDuplication: false,
|
isScaleMobsWithDuplication: false,
|
||||||
maxDuplicationEvent() {
|
maxDuplicationEvent() {
|
||||||
@@ -312,7 +312,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isSuperDeterminism
|
return !tech.isSuperDeterminism
|
||||||
},
|
},
|
||||||
requires: "NOT EXPERIMENT MODE, not superdeterminism",
|
requires: "not superdeterminism",
|
||||||
effect() {
|
effect() {
|
||||||
powerUps.spawn(m.pos.x, m.pos.y, "gun");
|
powerUps.spawn(m.pos.x, m.pos.y, "gun");
|
||||||
// this.count--
|
// this.count--
|
||||||
@@ -592,7 +592,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "exciton",
|
name: "exciton",
|
||||||
description: `increase <strong class='color-d'>damage</strong> by <strong>70%</strong>, but<br>${powerUps.orb.ammo()} will no longer <strong>spawn</strong>`,
|
description: `increase <strong class='color-d'>damage</strong> by <strong>88%</strong>, but<br>${powerUps.orb.ammo()} will no longer <strong>spawn</strong>`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -671,7 +671,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return !m.isShipMode && !tech.isAlwaysFire, !tech.isGrapple
|
return !m.isShipMode && !tech.isAlwaysFire, !tech.isGrapple
|
||||||
},
|
},
|
||||||
requires: "not ship mode, not automatic, grappling hook",
|
requires: "not ship mode, automatic, grappling hook",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
tech.isFireMoveLock = true;
|
tech.isFireMoveLock = true;
|
||||||
b.setFireCD();
|
b.setFireCD();
|
||||||
@@ -2114,7 +2114,7 @@ const tech = {
|
|||||||
allowed() { //&& (m.fieldUpgrades[m.fieldMode].name !== "molecular assembler" || m.maxEnergy > 1)
|
allowed() { //&& (m.fieldUpgrades[m.fieldMode].name !== "molecular assembler" || m.maxEnergy > 1)
|
||||||
return m.maxEnergy > 0.99 && m.fieldUpgrades[m.fieldMode].name !== "standing wave" && !tech.isEnergyHealth && !tech.isRewindField //&& !tech.isRewindGun
|
return m.maxEnergy > 0.99 && m.fieldUpgrades[m.fieldMode].name !== "standing wave" && !tech.isEnergyHealth && !tech.isRewindField //&& !tech.isRewindGun
|
||||||
},
|
},
|
||||||
requires: "not standing wave, mass-energy, max energy reduction",
|
requires: "not standing wave, mass-energy, max energy reduction, retrocausality",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isRewindAvoidDeath = true;
|
tech.isRewindAvoidDeath = true;
|
||||||
},
|
},
|
||||||
@@ -2910,7 +2910,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return (powerUps.research.count > 3 || build.isExperimentSelection) && !tech.isSuperDeterminism
|
return (powerUps.research.count > 3 || build.isExperimentSelection) && !tech.isSuperDeterminism
|
||||||
},
|
},
|
||||||
requires: "at least 4 research and not superdeterminism",
|
requires: "at least 4 research, not superdeterminism",
|
||||||
effect() {
|
effect() {
|
||||||
tech.renormalization = true;
|
tech.renormalization = true;
|
||||||
},
|
},
|
||||||
@@ -3008,7 +3008,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
tech.isBrainstorm = true
|
tech.isBrainstorm = true
|
||||||
tech.isBrainstormActive = false
|
tech.isBrainstormActive = false
|
||||||
tech.brainStormDelay = 120
|
tech.brainStormDelay = 145 - simulation.difficultyMode * 10
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isBrainstorm = false
|
tech.isBrainstorm = false
|
||||||
@@ -3134,7 +3134,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
requires: "not superdeterminism",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isPauseSwitchField = true;
|
tech.isPauseSwitchField = true;
|
||||||
for (let i = 0; i < 6; i++) powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
|
for (let i = 0; i < 6; i++) powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
|
||||||
@@ -3148,7 +3148,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "paradigm shift",
|
name: "paradigm shift",
|
||||||
description: `<strong>clicking</strong> <strong class='color-m'>tech</strong> while paused <strong>ejects</strong> them<br><strong>10%</strong> chance to convert that tech into ${powerUps.orb.research(1)}`,
|
description: `<strong>clicking</strong> <strong class='color-m'>tech</strong> while paused <strong>ejects</strong> them<br><strong>10%</strong> chance to convert that <strong class='color-m'>tech</strong> into ${powerUps.orb.research(1)}`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -3193,7 +3193,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return (build.isExperimentSelection || powerUps.research.count > 3) && !tech.isDuplicateBoss
|
return (build.isExperimentSelection || powerUps.research.count > 3) && !tech.isDuplicateBoss
|
||||||
},
|
},
|
||||||
requires: "at least 4 research and not parthenogenesis",
|
requires: "at least 4 research, not parthenogenesis",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isResearchBoss = true; //abiogenesis
|
tech.isResearchBoss = true; //abiogenesis
|
||||||
},
|
},
|
||||||
@@ -3253,7 +3253,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return level.onLevel > 1 && !tech.isEnergyHealth
|
return level.onLevel > 1 && !tech.isEnergyHealth
|
||||||
},
|
},
|
||||||
requires: "past levels 1, not mass-energy",
|
requires: "past level 1, not mass-energy",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isNoHeals = true;
|
tech.isNoHeals = true;
|
||||||
level.difficultyDecrease(simulation.difficultyMode * 2)
|
level.difficultyDecrease(simulation.difficultyMode * 2)
|
||||||
@@ -3605,7 +3605,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isSuperDeterminism
|
return !tech.isSuperDeterminism
|
||||||
},
|
},
|
||||||
requires: "NOT EXPERIMENT MODE, not superdeterminism",
|
requires: "not superdeterminism",
|
||||||
effect() {
|
effect() {
|
||||||
powerUps.spawn(m.pos.x, m.pos.y, "field");
|
powerUps.spawn(m.pos.x, m.pos.y, "field");
|
||||||
for (let i = 0; i < 7; i++) powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
|
for (let i = 0; i < 7; i++) powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
|
||||||
@@ -3767,7 +3767,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return ((tech.haveGunCheck("nail gun") && tech.isNeedles) || (tech.isNeedles && tech.haveGunCheck("shotgun"))) && !tech.isNeedleIce
|
return ((tech.haveGunCheck("nail gun") && tech.isNeedles) || (tech.isNeedles && tech.haveGunCheck("shotgun"))) && !tech.isNeedleIce
|
||||||
},
|
},
|
||||||
requires: "needle gun, not needle ice",
|
requires: "nail gun, needle gun, not needle ice",
|
||||||
effect() {
|
effect() {
|
||||||
tech.needleTunnel = true
|
tech.needleTunnel = true
|
||||||
},
|
},
|
||||||
@@ -3825,7 +3825,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return ((tech.haveGunCheck("nail gun") && !tech.nailInstantFireRate) || (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isFoamShot && !tech.isSporeWorm)) && !tech.isNeedles && !tech.isIceCrystals && !tech.isIceShot
|
return ((tech.haveGunCheck("nail gun") && !tech.nailInstantFireRate) || (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isFoamShot && !tech.isSporeWorm)) && !tech.isNeedles && !tech.isIceCrystals && !tech.isIceShot
|
||||||
},
|
},
|
||||||
requires: "nail gun shot gun, not ice crystal, needles, or pneumatic actuator",
|
requires: "nail gun, shot gun, not ice crystal, needles, or pneumatic actuator",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isRivets = true
|
tech.isRivets = true
|
||||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||||
@@ -4040,7 +4040,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return (tech.isNailShot || tech.isNeedles || tech.nailBotCount > 1 || tech.haveGunCheck("nail gun") || tech.isRivets) && !tech.isIncendiary
|
return (tech.isNailShot || tech.isNeedles || tech.nailBotCount > 1 || tech.haveGunCheck("nail gun") || tech.isRivets) && !tech.isIncendiary
|
||||||
},
|
},
|
||||||
requires: "needles, nails, rivets, not incendiary",
|
requires: "nail gun, needles, nails, rivets, not incendiary",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isNailCrit = true
|
tech.isNailCrit = true
|
||||||
},
|
},
|
||||||
@@ -4060,7 +4060,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.isMineDrop + tech.nailBotCount + tech.fragments + tech.nailsDeathMob / 2 + ((tech.haveGunCheck("mine") && !tech.isLaserMine) + (tech.haveGunCheck("nail gun") && !tech.isShieldPierce) + tech.isNeedles + tech.isNailShot) * 2 > 1
|
return tech.isMineDrop + tech.nailBotCount + tech.fragments + tech.nailsDeathMob / 2 + ((tech.haveGunCheck("mine") && !tech.isLaserMine) + (tech.haveGunCheck("nail gun") && !tech.isShieldPierce) + tech.isNeedles + tech.isNailShot) * 2 > 1
|
||||||
},
|
},
|
||||||
requires: "nail gun, nails, rivets, not ceramic needles",
|
requires: "nail gun, nails, rivets, mine, not ceramic needles",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isNailRadiation = true;
|
tech.isNailRadiation = true;
|
||||||
},
|
},
|
||||||
@@ -4080,7 +4080,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.isNailRadiation && !tech.isFastRadiation
|
return tech.isNailRadiation && !tech.isFastRadiation
|
||||||
},
|
},
|
||||||
requires: "irradiated nails, not 1s half-life",
|
requires: "nail gun, mine, irradiated nails, not 1s half-life",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isSlowRadiation = true;
|
tech.isSlowRadiation = true;
|
||||||
},
|
},
|
||||||
@@ -4100,7 +4100,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.isNailRadiation && !tech.isSlowRadiation
|
return tech.isNailRadiation && !tech.isSlowRadiation
|
||||||
},
|
},
|
||||||
requires: "irradiated nails, not 6s half-life",
|
requires: "nail gun, mine, irradiated nails, not 6s half-life",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isFastRadiation = true;
|
tech.isFastRadiation = true;
|
||||||
},
|
},
|
||||||
@@ -4249,16 +4249,16 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "incendiary ammunition",
|
name: "incendiary ammunition",
|
||||||
description: "<strong>rivets</strong>, <strong>super balls</strong>, and <strong>drones</strong><br>are loaded with <strong class='color-e'>explosives</strong>",
|
description: "<strong>shotgun</strong>, <strong>rivets</strong>, <strong>super balls</strong>, and <strong>drones</strong><br>are loaded with <strong class='color-e'>explosives</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
frequencyDefault: 1,
|
frequencyDefault: 1,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("super balls") || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isDroneTeleport || tech.isDroneRadioactive || tech.isSporeField || tech.isMissileField || tech.isIceField)) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport)
|
return tech.haveGunCheck("shotgun") || tech.haveGunCheck("super balls") || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isDroneTeleport || tech.isDroneRadioactive || tech.isSporeField || tech.isMissileField || tech.isIceField)) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport)
|
||||||
},
|
},
|
||||||
requires: "super balls, rivets, drones, not irradiated drones or burst drones",
|
requires: "shotgun, super balls, rivets, drones, not irradiated drones or burst drones",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isIncendiary = true
|
tech.isIncendiary = true
|
||||||
},
|
},
|
||||||
@@ -4581,7 +4581,7 @@ const tech = {
|
|||||||
isBot: true,
|
isBot: true,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("missiles", false)
|
return tech.haveGunCheck("missiles", false) && tech.missileFireCD === 45
|
||||||
},
|
},
|
||||||
requires: "missiles",
|
requires: "missiles",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -4778,7 +4778,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "MIRV",
|
name: "MIRV",
|
||||||
description: "fire <strong>+1</strong> <strong>missile</strong> and <strong>grenade</strong> per shot<br>decrease <strong class='color-e'>explosion</strong> <strong>radius</strong> up to <strong>10%</strong>",
|
description: "fire <strong>+1</strong> <strong>missile</strong> and <strong>grenade</strong> per shot<br>decrease <strong class='color-e'>explosion</strong> <strong>radius</strong> up to <strong>12%</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -5012,7 +5012,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("spores")
|
return tech.haveGunCheck("spores")
|
||||||
},
|
},
|
||||||
requires: "spore gun",
|
requires: "spores",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isSporeGrowth = true
|
tech.isSporeGrowth = true
|
||||||
},
|
},
|
||||||
@@ -5032,7 +5032,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField
|
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField
|
||||||
},
|
},
|
||||||
requires: "spore gun, spores",
|
requires: "spores",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isFastSpores = true
|
tech.isFastSpores = true
|
||||||
},
|
},
|
||||||
@@ -5052,7 +5052,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || tech.isSporeWorm
|
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || tech.isSporeWorm
|
||||||
},
|
},
|
||||||
requires: "spore gun, spores or worms",
|
requires: "spores",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isSporeFreeze = true
|
tech.isSporeFreeze = true
|
||||||
},
|
},
|
||||||
@@ -5071,7 +5071,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || tech.isSporeWorm
|
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || tech.isSporeWorm
|
||||||
},
|
},
|
||||||
requires: "spore gun, spores or worms",
|
requires: "spores",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isSporeFollow = true
|
tech.isSporeFollow = true
|
||||||
},
|
},
|
||||||
@@ -5090,7 +5090,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField) && !tech.isEnergyHealth || tech.isSporeWorm
|
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField) && !tech.isEnergyHealth || tech.isSporeWorm
|
||||||
},
|
},
|
||||||
requires: "spore gun, spores, worms, not mass-energy",
|
requires: "spores, not mass-energy",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isMutualism = true
|
tech.isMutualism = true
|
||||||
},
|
},
|
||||||
@@ -5129,7 +5129,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || (tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isNeedles && !tech.isNailShot)
|
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || (tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isNeedles && !tech.isNailShot)
|
||||||
},
|
},
|
||||||
requires: "spore gun, spores",
|
requires: "spores",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isSporeWorm = true
|
tech.isSporeWorm = true
|
||||||
},
|
},
|
||||||
@@ -5148,7 +5148,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.isSporeWorm
|
return tech.isSporeWorm
|
||||||
},
|
},
|
||||||
requires: "spore gun, shotgun, worms",
|
requires: "spores, shotgun, worms",
|
||||||
effect() {
|
effect() {
|
||||||
tech.wormSize++
|
tech.wormSize++
|
||||||
},
|
},
|
||||||
@@ -5156,6 +5156,25 @@ const tech = {
|
|||||||
tech.wormSize = 0
|
tech.wormSize = 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "path integration",
|
||||||
|
description: "<strong>drones</strong>, <strong class='color-p' style='letter-spacing: 2px;'>spores</strong>, and <strong class='color-p' style='letter-spacing: 2px;'>worms</strong><br>travel with you through <strong>levels</strong>",
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 2,
|
||||||
|
frequencyDefault: 2,
|
||||||
|
allowed() {
|
||||||
|
return (tech.haveGunCheck("spores") && tech.isSporeFollow) || tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isMissileField || tech.isIceField))
|
||||||
|
},
|
||||||
|
requires: "spores, diplochory, drones",
|
||||||
|
effect() {
|
||||||
|
tech.isDronesTravel = true
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isDronesTravel = false
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "anti-shear topology",
|
name: "anti-shear topology",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Topology' class="link">anti-shear topology</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Topology' class="link">anti-shear topology</a>`,
|
||||||
@@ -5218,7 +5237,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isExtraMaxEnergy && (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isMissileField || tech.isIceField)))
|
return !tech.isExtraMaxEnergy && (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isMissileField || tech.isIceField)))
|
||||||
},
|
},
|
||||||
requires: "drones, not permittivity",
|
requires: "drones, not weak interaction",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isDroneGrab = true
|
tech.isDroneGrab = true
|
||||||
},
|
},
|
||||||
@@ -5247,25 +5266,6 @@ const tech = {
|
|||||||
tech.isDroneRespawn = false
|
tech.isDroneRespawn = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "autonomous navigation",
|
|
||||||
description: "<strong>drones</strong> travel with you through <strong>levels</strong><br>and reset their <strong>durability</strong>",
|
|
||||||
isGunTech: true,
|
|
||||||
maxCount: 1,
|
|
||||||
count: 0,
|
|
||||||
frequency: 2,
|
|
||||||
frequencyDefault: 2,
|
|
||||||
allowed() {
|
|
||||||
return tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isMissileField || tech.isIceField))
|
|
||||||
},
|
|
||||||
requires: "drones",
|
|
||||||
effect() {
|
|
||||||
tech.isDronesTravel = true
|
|
||||||
},
|
|
||||||
remove() {
|
|
||||||
tech.isDronesTravel = false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "brushless motor",
|
name: "brushless motor",
|
||||||
description: "<strong>drones</strong> rapidly <strong>rush</strong> towards their target<br>increase <strong>drone</strong> collision <strong class='color-d'>damage</strong> by <strong>33%</strong>",
|
description: "<strong>drones</strong> rapidly <strong>rush</strong> towards their target<br>increase <strong>drone</strong> collision <strong class='color-d'>damage</strong> by <strong>33%</strong>",
|
||||||
@@ -5351,7 +5351,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.isDroneRadioactive
|
return tech.isDroneRadioactive
|
||||||
},
|
},
|
||||||
requires: "drones irradiated drones",
|
requires: "drones, irradiated drones",
|
||||||
effect() {
|
effect() {
|
||||||
tech.droneRadioDamage = 2
|
tech.droneRadioDamage = 2
|
||||||
},
|
},
|
||||||
@@ -5606,7 +5606,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("harpoon") && !tech.isFilament && !tech.isHarpoonPowerUp && !tech.isGrapple
|
return tech.haveGunCheck("harpoon") && !tech.isFilament && !tech.isHarpoonPowerUp && !tech.isGrapple
|
||||||
},
|
},
|
||||||
requires: "harpoon, not filament, toggling harpoon, grappling hook",
|
requires: "harpoon, not UHMWPE, induction furnace, grappling hook",
|
||||||
ammoBonus: 8,
|
ammoBonus: 8,
|
||||||
effect() {
|
effect() {
|
||||||
tech.isRailGun = true;
|
tech.isRailGun = true;
|
||||||
@@ -5730,7 +5730,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("harpoon") && !tech.isImmuneGrapple
|
return tech.haveGunCheck("harpoon") && !tech.isImmuneGrapple
|
||||||
},
|
},
|
||||||
requires: "railgun, not Bose–Einstein statistics",
|
requires: "harpoon, not bulk modulus",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isRailEnergyGain = true;
|
tech.isRailEnergyGain = true;
|
||||||
},
|
},
|
||||||
@@ -5749,7 +5749,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return (!tech.isLargeHarpoon && tech.haveGunCheck("harpoon")) || tech.isNeedles
|
return (!tech.isLargeHarpoon && tech.haveGunCheck("harpoon")) || tech.isNeedles
|
||||||
},
|
},
|
||||||
requires: "nail gun, needle gun, needle, harpoon, not Bessemer process",
|
requires: "needle gun, harpoon, not Bessemer process",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isShieldPierce = true
|
tech.isShieldPierce = true
|
||||||
},
|
},
|
||||||
@@ -5768,7 +5768,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("harpoon") && !tech.isShieldPierce
|
return tech.haveGunCheck("harpoon") && !tech.isShieldPierce
|
||||||
},
|
},
|
||||||
requires: "harpoon not ceramics",
|
requires: "harpoon, not ceramics",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isLargeHarpoon = true;
|
tech.isLargeHarpoon = true;
|
||||||
},
|
},
|
||||||
@@ -5778,8 +5778,9 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "smelting",
|
name: "smelting",
|
||||||
|
// description: `forge <strong>3</strong> <strong class='color-ammo'>ammo</strong> into a new harpoon<br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot`,
|
||||||
|
descriptionFunction() { return `forge <strong>${(tech.isRailGun ?5:3)*(2+this.count)}</strong> <strong class='color-ammo'>ammo</strong> into a new harpoon<br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot` },
|
||||||
// description: `spend ${powerUps.orb.ammo(2)}to upgrade the <strong>harpoon</strong><br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot`,
|
// description: `spend ${powerUps.orb.ammo(2)}to upgrade the <strong>harpoon</strong><br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot`,
|
||||||
description: `forge <strong>3</strong> <strong class='color-ammo'>ammo</strong> into a new harpoon<br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot`,
|
|
||||||
// descriptionFunction() { return `forge <strong>${tech.isRailGun? 10: 2}</strong> <strong class='color-ammo'>ammo</strong> into a new harpoon<br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot` },
|
// descriptionFunction() { return `forge <strong>${tech.isRailGun? 10: 2}</strong> <strong class='color-ammo'>ammo</strong> into a new harpoon<br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot` },
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
@@ -5787,28 +5788,28 @@ const tech = {
|
|||||||
frequency: 1,
|
frequency: 1,
|
||||||
frequencyDefault: 1,
|
frequencyDefault: 1,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("harpoon") && b.returnGunAmmo('harpoon') > 2 + this.count * 3
|
return tech.haveGunCheck("harpoon") && b.returnGunAmmo('harpoon') >= (tech.isRailGun ? 5 : 3) * (1 + this.count)
|
||||||
},
|
},
|
||||||
requires: "harpoon",
|
requires: "harpoon",
|
||||||
effect() {
|
effect() {
|
||||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||||
if (b.guns[i].name === "harpoon") {
|
if (b.guns[i].name === "harpoon") {
|
||||||
b.guns[i].ammo -= 3 + this.count * 3
|
b.guns[i].ammo -= (tech.isRailGun ? 5 : 3) * (1 + this.count)
|
||||||
console.log(3 + this.count * 3)
|
// console.log(3 + this.count * 3)
|
||||||
if (b.guns[i].ammo < 0) b.guns[i].ammo = 0
|
if (b.guns[i].ammo < 0) b.guns[i].ammo = 0
|
||||||
simulation.updateGunHUD();
|
simulation.updateGunHUD();
|
||||||
tech.extraHarpoons++;
|
tech.extraHarpoons++;
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.description = `forge <strong>${3+(this.count+1)*3}</strong> <strong class='color-ammo'>ammo</strong> into a new harpoon<br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot`
|
// this.description = `forge <strong>${3+(this.count+1)*3}</strong> <strong class='color-ammo'>ammo</strong> into a new harpoon<br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot`
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
if (tech.extraHarpoons) {
|
if (tech.extraHarpoons) {
|
||||||
this.description = `forge <strong>${2}</strong> <strong class='color-ammo'>ammo</strong> into a new harpoon<br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot`
|
// this.description = `forge <strong>${2}</strong> <strong class='color-ammo'>ammo</strong> into a new harpoon<br>fire <strong>+1</strong> <strong>harpoon</strong> with each shot`
|
||||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||||
if (b.guns[i].name === "harpoon") {
|
if (b.guns[i].name === "harpoon") {
|
||||||
b.guns[i].ammo += 2
|
b.guns[i].ammo += (tech.isRailGun ? 5 : 3)
|
||||||
simulation.updateGunHUD();
|
simulation.updateGunHUD();
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -6081,8 +6082,8 @@ const tech = {
|
|||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 1,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 1,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("laser") && tech.laserReflections < 3 && !tech.beamSplitter && !tech.isWideLaser
|
return tech.haveGunCheck("laser") && tech.laserReflections < 3 && !tech.beamSplitter && !tech.isWideLaser
|
||||||
},
|
},
|
||||||
@@ -6239,7 +6240,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "standing wave, perfect diamagnetism",
|
requires: "standing wave, perfect diamagnetism",
|
||||||
effect() {
|
effect() {
|
||||||
tech.blockDmg += 1.75 //if you change this value also update the for loop in the electricity graphics in m.pushMass
|
tech.blockDmg += 2 //if you change this value also update the for loop in the electricity graphics in m.pushMass
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.blockDmg = 0;
|
tech.blockDmg = 0;
|
||||||
@@ -6354,7 +6355,7 @@ const tech = {
|
|||||||
frequency: 1,
|
frequency: 1,
|
||||||
frequencyDefault: 1,
|
frequencyDefault: 1,
|
||||||
allowed() {
|
allowed() {
|
||||||
return (m.fieldUpgrades[m.fieldMode].name === "pilot wave" || m.fieldUpgrades[m.fieldMode].name === "negative mass") && (build.isExperimentSelection || powerUps.research.count > 3)
|
return m.fieldUpgrades[m.fieldMode].name === "pilot wave" || m.fieldUpgrades[m.fieldMode].name === "negative mass"
|
||||||
},
|
},
|
||||||
requires: "negative mass, pilot wave",
|
requires: "negative mass, pilot wave",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -6460,7 +6461,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return m.fieldUpgrades[m.fieldMode].name === "molecular assembler" || m.fieldUpgrades[m.fieldMode].name === "standing wave" || m.fieldUpgrades[m.fieldMode].name === "pilot wave"
|
return m.fieldUpgrades[m.fieldMode].name === "molecular assembler" || m.fieldUpgrades[m.fieldMode].name === "standing wave" || m.fieldUpgrades[m.fieldMode].name === "pilot wave"
|
||||||
},
|
},
|
||||||
requires: "molecular assembler or pilot wave",
|
requires: "molecular assembler, pilot wave, standing wave",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
tech.isMassEnergy = true // used in m.grabPowerUp
|
tech.isMassEnergy = true // used in m.grabPowerUp
|
||||||
m.energy += 2
|
m.energy += 2
|
||||||
@@ -6653,6 +6654,32 @@ const tech = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
|
// name: "scrap-bot manufacturing",
|
||||||
|
// link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Manufacturing' class="link">manufacturing</a>`,
|
||||||
|
// description: `use ${powerUps.orb.research(1)}to repurpose <strong>molecular assembler</strong><br>excess <strong class='color-f'>energy</strong> used to condense <strong class='color-bot'>scrap bot</strong> `,
|
||||||
|
// isFieldTech: true,
|
||||||
|
// maxCount: 1,
|
||||||
|
// count: 0,
|
||||||
|
// frequency: 3,
|
||||||
|
// frequencyDefault: 3,
|
||||||
|
// allowed() {
|
||||||
|
// return (build.isExperimentSelection || powerUps.research.count > 0) && m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isIceField || tech.isSporeField || tech.isMissileField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive || tech.isDroneTeleport || tech.isDronesTravel)
|
||||||
|
// },
|
||||||
|
// requires: "molecular assembler, no other manufacturing, no drone tech",
|
||||||
|
// effect() {
|
||||||
|
// if (!build.isExperimentSelection) {
|
||||||
|
// for (let i = 0; i < 1; i++) {
|
||||||
|
// if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// tech.isBotField = true;
|
||||||
|
// },
|
||||||
|
// remove() {
|
||||||
|
// tech.isBotField = false;
|
||||||
|
// if (this.count > 0) powerUps.research.changeRerolls(1)
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
// name: "thermal reservoir",
|
// name: "thermal reservoir",
|
||||||
// description: "increase your <strong class='color-plasma'>plasma</strong> <strong class='color-d'>damage</strong> by <strong>100%</strong><br><strong class='color-plasma'>plasma</strong> temporarily lowers health not <strong class='color-f'>energy</strong>",
|
// description: "increase your <strong class='color-plasma'>plasma</strong> <strong class='color-d'>damage</strong> by <strong>100%</strong><br><strong class='color-plasma'>plasma</strong> temporarily lowers health not <strong class='color-f'>energy</strong>",
|
||||||
// isFieldTech: true,
|
// isFieldTech: true,
|
||||||
@@ -6672,7 +6699,7 @@ const tech = {
|
|||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "degenerate matter",
|
name: "degenerate matter",
|
||||||
description: "reduce <strong class='color-harm'>harm</strong> by <strong>60%</strong> while your <strong class='color-f'>field</strong> is active",
|
description: "reduce <strong class='color-harm'>harm</strong> by <strong>66%</strong> while your <strong class='color-f'>field</strong> is active",
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -6681,7 +6708,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return (m.fieldUpgrades[m.fieldMode].name === "plasma torch" || m.fieldUpgrades[m.fieldMode].name === "perfect diamagnetism" || m.fieldUpgrades[m.fieldMode].name === "pilot wave") && !tech.isEnergyHealth
|
return (m.fieldUpgrades[m.fieldMode].name === "plasma torch" || m.fieldUpgrades[m.fieldMode].name === "perfect diamagnetism" || m.fieldUpgrades[m.fieldMode].name === "pilot wave") && !tech.isEnergyHealth
|
||||||
},
|
},
|
||||||
requires: "perfect diamagnetism, pilot wave, plasma, not mass-energy",
|
requires: "plasma torch, perfect diamagnetism, pilot wave, not mass-energy",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isHarmReduce = true
|
tech.isHarmReduce = true
|
||||||
},
|
},
|
||||||
@@ -6722,7 +6749,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && (build.isExperimentSelection || powerUps.research.count > 0) && !tech.isPlasmaBall && !tech.isExtruder
|
return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && (build.isExperimentSelection || powerUps.research.count > 0) && !tech.isPlasmaBall && !tech.isExtruder
|
||||||
},
|
},
|
||||||
requires: "plasma torch",
|
requires: "plasma torch, not extruder, plasma ball",
|
||||||
effect() {
|
effect() {
|
||||||
tech.plasmaBotCount++;
|
tech.plasmaBotCount++;
|
||||||
b.plasmaBot();
|
b.plasmaBot();
|
||||||
@@ -6861,9 +6888,9 @@ const tech = {
|
|||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return m.fieldUpgrades[m.fieldMode].name === "time dilation" && !m.isShipMode && !tech.isRewindAvoidDeath && !tech.isEnergyHealth && !tech.isTimeSkip && !tech.isFreezeMobs
|
return m.fieldUpgrades[m.fieldMode].name === "time dilation" && !m.isShipMode && !tech.isRewindAvoidDeath && !tech.isEnergyHealth && !tech.isTimeSkip
|
||||||
},
|
},
|
||||||
requires: "time dilation, not CPT symmetry, mass-energy, timelike, Bose Einstein condensate",
|
requires: "time dilation, not CPT symmetry, mass-energy, timelike",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isRewindField = true;
|
tech.isRewindField = true;
|
||||||
m.fieldUpgrades[m.fieldMode].set()
|
m.fieldUpgrades[m.fieldMode].set()
|
||||||
@@ -7113,7 +7140,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "discrete optimization",
|
name: "discrete optimization",
|
||||||
description: "increase <strong class='color-d'>damage</strong> by <strong>40%</strong><br><strong>40%</strong> increased <strong><em>delay</em></strong> after firing",
|
description: "increase <strong class='color-d'>damage</strong> by <strong>35%</strong><br><strong>35%</strong> increased <strong><em>delay</em></strong> after firing",
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -7124,7 +7151,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "metamaterial cloaking, molecular assembler, plasma torch or pilot wave",
|
requires: "metamaterial cloaking, molecular assembler, plasma torch or pilot wave",
|
||||||
effect() {
|
effect() {
|
||||||
tech.aimDamage = 1.40
|
tech.aimDamage = 1.35
|
||||||
b.setFireCD();
|
b.setFireCD();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
@@ -7174,18 +7201,18 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "virtual particles",
|
name: "virtual particles",
|
||||||
description: `use ${powerUps.orb.research(4)}to exploit your <strong class='color-worm'>wormhole</strong> for a<br><strong>12%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong>`,
|
description: `use ${powerUps.orb.research(4)}to exploit your <strong class='color-f'>field</strong> for a<br><strong>12%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong>`,
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 3,
|
frequency: 3,
|
||||||
frequencyDefault: 3,
|
frequencyDefault: 3,
|
||||||
allowed() {
|
allowed() {
|
||||||
return m.fieldUpgrades[m.fieldMode].name === "wormhole" && (build.isExperimentSelection || powerUps.research.count > 3)
|
return (m.fieldUpgrades[m.fieldMode].name === "time dilation" || m.fieldUpgrades[m.fieldMode].name === "wormhole") && (build.isExperimentSelection || powerUps.research.count > 3)
|
||||||
},
|
},
|
||||||
requires: "wormhole",
|
requires: "wormhole, time dilation",
|
||||||
effect() {
|
effect() {
|
||||||
tech.wormDuplicate = 0.12
|
tech.fieldDuplicate = 0.12
|
||||||
powerUps.setDupChance(); //needed after adjusting duplication chance
|
powerUps.setDupChance(); //needed after adjusting duplication chance
|
||||||
if (!build.isExperimentSelection && !simulation.isTextLogOpen) simulation.circleFlare(0.13);
|
if (!build.isExperimentSelection && !simulation.isTextLogOpen) simulation.circleFlare(0.13);
|
||||||
for (let i = 0; i < 4; i++) {
|
for (let i = 0; i < 4; i++) {
|
||||||
@@ -7193,7 +7220,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.wormDuplicate = 0
|
tech.fieldDuplicate = 0
|
||||||
powerUps.setDupChance(); //needed after adjusting duplication chance
|
powerUps.setDupChance(); //needed after adjusting duplication chance
|
||||||
if (this.count > 0) powerUps.research.changeRerolls(4)
|
if (this.count > 0) powerUps.research.changeRerolls(4)
|
||||||
}
|
}
|
||||||
@@ -9748,7 +9775,7 @@ const tech = {
|
|||||||
isLongitudinal: null,
|
isLongitudinal: null,
|
||||||
is360Longitudinal: null,
|
is360Longitudinal: null,
|
||||||
isShotgunReversed: null,
|
isShotgunReversed: null,
|
||||||
wormDuplicate: null,
|
fieldDuplicate: null,
|
||||||
isCloakingDamage: null,
|
isCloakingDamage: null,
|
||||||
harmonicEnergy: null,
|
harmonicEnergy: null,
|
||||||
isFieldHarmReduction: null,
|
isFieldHarmReduction: null,
|
||||||
@@ -9807,5 +9834,6 @@ const tech = {
|
|||||||
isFlipFlopHealth: null,
|
isFlipFlopHealth: null,
|
||||||
isRelayEnergy: null,
|
isRelayEnergy: null,
|
||||||
coyoteTime: null,
|
coyoteTime: null,
|
||||||
missileFireCD: null
|
missileFireCD: null,
|
||||||
|
isBotField: null
|
||||||
}
|
}
|
||||||
66
todo.txt
66
todo.txt
@@ -1,30 +1,58 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
nematodes now wiggle their tail. it's horrible
|
automonous navigation -> path integration
|
||||||
tech: transdimensional spores renamed transdimensional worms
|
sends spores and worms and drones to the next level with you
|
||||||
spawns spores -> worms
|
MIRV gives 10->12% smaller radius and damage
|
||||||
|
laser tech slow light has 33% less spacing
|
||||||
|
tech exciton gives 70%->88% damage
|
||||||
|
discrete optimization: 40%->35% damage and fire delay
|
||||||
|
degenerate matter 60->66% harm reduction while field is active
|
||||||
|
virtual particles 15% duplication is now allowed for time dilation
|
||||||
|
railgun no longer uses extra ammo when firing multiple bullets with smelting
|
||||||
|
smelting now costs more ammo with railgun
|
||||||
|
plasma torch, ball, extruder all use 33% less energy, do 15% more damage
|
||||||
|
bremsstrahlung does 15% more damage
|
||||||
|
standing wave field gives 50 energy
|
||||||
|
it's cooldown for blocking shields in now 0.5->0.33 s
|
||||||
|
|
||||||
missiles:
|
reactor
|
||||||
20% more ammo
|
fight now starts when you press a button, so you can prep
|
||||||
no longer fire rapidly on crouch
|
spawns more ammo 4->7, heals 0->2
|
||||||
instead crouch gives missile initial forward velocity
|
will no longer show up on levels 2,3,4
|
||||||
no crouch makes the missiles recoil back before they accelerate forward
|
fewer bosses spawn at high difficulty levels
|
||||||
tech: launch system - fire missiles 500% more rapidly, gives 25% ammo
|
has a small chance to spawn all 3 boss types
|
||||||
doesn't work with cruse missile
|
sprayBoss is 25% slower, but it goes immune while spraying instead of shielding
|
||||||
tech: ICBM - cruse missile is even bigger and slower
|
|
||||||
|
|
||||||
pavilion has been added back to the map rotation
|
community maps have a short message onload giving credit to the author
|
||||||
this will make the game end at 13 again, and feel harder
|
new level element balance - it's basically spinners and rotors combined
|
||||||
let me know if it's absence resulted in less NaN game crashes
|
I'm replacing all rotors to fix potential BUGS
|
||||||
|
sewers, house, perplex, vats
|
||||||
|
|
||||||
reactor sprayBoss is now harder to kill
|
requirement text bug fixes
|
||||||
|
|
||||||
bug fixes
|
|
||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
bugs: requirement text man discord messages
|
make player collisions with mobs do no harm while standing wave is active
|
||||||
make sure guns are listed to work with gun tech randomization
|
|
||||||
|
Mobs bypass the [shrinking thing] on pavilion
|
||||||
|
either make this for all mobs or remove it
|
||||||
|
mobs only ignore it before it has been touched and returned
|
||||||
|
|
||||||
|
fix issues with rotor
|
||||||
|
maybe fixes NaN
|
||||||
|
vats, sewers
|
||||||
|
replace with code powered spinner
|
||||||
|
|
||||||
|
portal:
|
||||||
|
convert graphics to bitmaps
|
||||||
|
this seems to clip the edges
|
||||||
|
issues with
|
||||||
|
the end
|
||||||
|
platformer
|
||||||
|
player doesn't fling fast enough, unless arrows are held
|
||||||
|
player can't stand on blocks
|
||||||
|
but they can jump on blocks
|
||||||
|
|
||||||
|
|
||||||
bring back:
|
bring back:
|
||||||
the old phase decoherence field
|
the old phase decoherence field
|
||||||
|
|||||||
Reference in New Issue
Block a user