SLOW OPENING DOORs, END OF THE WORLD literally
exit doors take a bit longer to open
it's nice to take a few seconds to relax between levels
please don't submit a bug report about this
plasma torch energy regen 6->10
perfect diamagnetism energy regen 6->5
a few more new images
tech: collider - after a mob dies smash power ups and change the flavor of one of them
powerUps.randomize(where)
if there is a tech,field,gun it will split into 4 small power ups
else if there are at least 4 small power ups they have a 1/4 chance to combine into a tech, field, gun
else a random small power up will change
BIN
img/collider.webp
Normal file
|
After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 25 KiB |
15
js/level.js
@@ -30,12 +30,12 @@ const level = {
|
|||||||
// m.setField("perfect diamagnetism") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass pilot wave plasma torch
|
// m.setField("perfect diamagnetism") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass pilot wave plasma torch
|
||||||
// simulation.molecularMode = 2
|
// simulation.molecularMode = 2
|
||||||
// m.damage(0.1);
|
// m.damage(0.1);
|
||||||
// b.giveGuns("shotgun") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
// b.giveGuns("laser") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
||||||
// b.giveGuns("wave") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
// b.giveGuns("wave") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
||||||
// b.guns[0].ammo = 10000
|
// b.guns[0].ammo = 10000
|
||||||
// tech.giveTech("vacuum bomb")
|
// tech.giveTech("vacuum bomb")
|
||||||
// tech.giveTech("time crystals")
|
// for (let i = 0; i < 3; ++i) tech.giveTech("collider")
|
||||||
// tech.giveTech("ice-shot")
|
// tech.giveTech("diffuse beam")
|
||||||
// for (let i = 0; i < 1; ++i) tech.giveTech("super ball")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("super ball")
|
||||||
// tech.isFoamBall = true
|
// tech.isFoamBall = true
|
||||||
// for (let i = 0; i < 3; ++i) tech.giveTech("repeater")
|
// for (let i = 0; i < 3; ++i) tech.giveTech("repeater")
|
||||||
@@ -421,7 +421,8 @@ const level = {
|
|||||||
player.position.y < level.exit.y - 0 &&
|
player.position.y < level.exit.y - 0 &&
|
||||||
player.velocity.y < 0.15
|
player.velocity.y < 0.15
|
||||||
) {
|
) {
|
||||||
level.exitCount += input.down ? 8 : 2
|
// level.exitCount += input.down ? 8 : 2
|
||||||
|
level.exitCount++
|
||||||
} else if (level.exitCount > 0) {
|
} else if (level.exitCount > 0) {
|
||||||
level.exitCount -= 2
|
level.exitCount -= 2
|
||||||
}
|
}
|
||||||
@@ -3289,20 +3290,16 @@ const level = {
|
|||||||
spawn.mapRect(-1950, -3300, 8200, 1800); //roof
|
spawn.mapRect(-1950, -3300, 8200, 1800); //roof
|
||||||
spawn.mapRect(-250, -200, 1000, 300); // shelf
|
spawn.mapRect(-250, -200, 1000, 300); // shelf
|
||||||
spawn.mapRect(-250, -1700, 1000, 1250); // shelf roof
|
spawn.mapRect(-250, -1700, 1000, 1250); // shelf roof
|
||||||
// spawn.blockDoor(710, -210);
|
|
||||||
spawn.mapRect(705, -210, 25, 50);
|
spawn.mapRect(705, -210, 25, 50);
|
||||||
spawn.mapRect(725, -220, 25, 50);
|
spawn.mapRect(725, -220, 25, 50);
|
||||||
spawn.bodyRect(750, -125, 125, 125);
|
spawn.bodyRect(750, -125, 125, 125);
|
||||||
spawn.bodyRect(875, -50, 50, 50);
|
spawn.bodyRect(875, -50, 50, 50);
|
||||||
|
|
||||||
|
|
||||||
spawn.mapRect(5400, -1700, 400, 1150); //right wall
|
spawn.mapRect(5400, -1700, 400, 1150); //right wall
|
||||||
spawn.mapRect(5400, -300, 400, 400); //right wall
|
spawn.mapRect(5400, -300, 400, 400); //right wall
|
||||||
spawn.mapRect(5700, -3300, 1800, 5100); //right wall
|
spawn.mapRect(5700, -3300, 1800, 5100); //right wall
|
||||||
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 100); //exit bump
|
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 100); //exit bump
|
||||||
spawn.mapRect(5403, -650, 400, 450); //blocking exit
|
spawn.mapRect(5403, -650, 400, 450); //blocking exit
|
||||||
// spawn.secondaryBossChance(4800, -500) //no bonus bosses on final level
|
|
||||||
|
|
||||||
if (mobs.mobDeaths < level.levelsCleared && !simulation.isCheating) { //pacifist run
|
if (mobs.mobDeaths < level.levelsCleared && !simulation.isCheating) { //pacifist run
|
||||||
for (let i = 0; i < 250; i++) spawn.starter(1000 + 4000 * Math.random(), -1500 * Math.random())
|
for (let i = 0; i < 250; i++) spawn.starter(1000 + 4000 * Math.random(), -1500 * Math.random())
|
||||||
} else {
|
} else {
|
||||||
@@ -14703,7 +14700,7 @@ const level = {
|
|||||||
spawn.mapRect(133875, -1475, 475, 1775);
|
spawn.mapRect(133875, -1475, 475, 1775);
|
||||||
spawn.mapRect(132025, -1925, 2325, 475);
|
spawn.mapRect(132025, -1925, 2325, 475);
|
||||||
|
|
||||||
simulation.enableConstructMode() //also remove when done
|
// simulation.enableConstructMode() //also remove when done
|
||||||
coin(50165.9, -1090)
|
coin(50165.9, -1090)
|
||||||
coin(78725.4, -600)
|
coin(78725.4, -600)
|
||||||
coin(103830.0, -1473)
|
coin(103830.0, -1473)
|
||||||
|
|||||||
@@ -1187,6 +1187,7 @@ const mobs = {
|
|||||||
leaveBody: true,
|
leaveBody: true,
|
||||||
isDropPowerUp: true,
|
isDropPowerUp: true,
|
||||||
death() {
|
death() {
|
||||||
|
if (tech.collidePowerUps && Math.random() < tech.collidePowerUps && this.isDropPowerUp) powerUps.randomize(this.position) //needs to run before onDeath spawns power ups
|
||||||
this.onDeath(this); //custom death effects
|
this.onDeath(this); //custom death effects
|
||||||
this.removeConsBB();
|
this.removeConsBB();
|
||||||
this.alive = false; //triggers mob removal in mob[i].replace(i)
|
this.alive = false; //triggers mob removal in mob[i].replace(i)
|
||||||
@@ -1207,9 +1208,6 @@ const mobs = {
|
|||||||
}
|
}
|
||||||
requestAnimationFrame(cycle);
|
requestAnimationFrame(cycle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (tech.iceIXOnDeath && this.isSlowed) {
|
if (tech.iceIXOnDeath && this.isSlowed) {
|
||||||
for (let i = 0, len = 2 * Math.sqrt(Math.min(this.mass, 25)) * tech.iceIXOnDeath; i < len; i++) b.iceIX(3, Math.random() * 2 * Math.PI, this.position)
|
for (let i = 0, len = 2 * Math.sqrt(Math.min(this.mass, 25)) * tech.iceIXOnDeath; i < len; i++) b.iceIX(3, Math.random() * 2 * Math.PI, this.position)
|
||||||
}
|
}
|
||||||
|
|||||||
14
js/player.js
@@ -558,7 +558,7 @@ const m = {
|
|||||||
if (tech.isHarmReduceNoKill && m.lastKillCycle + 300 < m.cycle) dmg *= 0.33
|
if (tech.isHarmReduceNoKill && m.lastKillCycle + 300 < m.cycle) dmg *= 0.33
|
||||||
if (tech.squirrelFx !== 1) dmg *= 1 + (tech.squirrelFx - 1) / 5 //cause more damage
|
if (tech.squirrelFx !== 1) dmg *= 1 + (tech.squirrelFx - 1) / 5 //cause more damage
|
||||||
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 && player.speed > 0.1) dmg *= 1 - Math.min(player.speed * 0.0165, 0.66)
|
||||||
if (tech.isHarmReduce && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.25
|
if (tech.isHarmReduce && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.25
|
||||||
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.94 ** b.totalBots()
|
if (tech.isBotArmor) dmg *= 0.94 ** b.totalBots()
|
||||||
@@ -1076,9 +1076,13 @@ const m = {
|
|||||||
},
|
},
|
||||||
setFieldRegen() {
|
setFieldRegen() {
|
||||||
if (m.fieldMode === 6) {
|
if (m.fieldMode === 6) {
|
||||||
m.fieldRegen = 0.0025 //15 energy per second
|
m.fieldRegen = 0.002333 //14 energy per second
|
||||||
|
} else if (m.fieldMode === 2) {
|
||||||
|
m.fieldRegen = 0.000833 //5 energy per second
|
||||||
} else if (m.fieldMode === 4) {
|
} else if (m.fieldMode === 4) {
|
||||||
m.fieldRegen = 0.002 //12 energy per second
|
m.fieldRegen = 0.002 //12 energy per second
|
||||||
|
} else if (m.fieldMode === 5) {
|
||||||
|
m.fieldRegen = 0.001667 //10 energy per second
|
||||||
} else {
|
} else {
|
||||||
m.fieldRegen = 0.001 //6 energy per second
|
m.fieldRegen = 0.001 //6 energy per second
|
||||||
}
|
}
|
||||||
@@ -1828,7 +1832,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "perfect diamagnetism",
|
name: "perfect diamagnetism",
|
||||||
description: "<strong>deflecting</strong> does not drain <strong class='color-f'>energy</strong><br>maintains <strong>functionality</strong> while <strong>inactive</strong><br>generate <strong>6</strong> <strong class='color-f'>energy</strong> per second",
|
description: "<strong>deflecting</strong> does not drain <strong class='color-f'>energy</strong><br>maintains <strong>functionality</strong> while <strong>inactive</strong><br>generate <strong>5</strong> <strong class='color-f'>energy</strong> per second",
|
||||||
// <br><strong>attract</strong> power ups from <strong>far away</strong>
|
// <br><strong>attract</strong> power ups from <strong>far away</strong>
|
||||||
// description: "<strong>attract</strong> power ups from <strong>far away</strong><br><strong>deflecting</strong> doesn't drain <strong class='color-f'>energy</strong><br>thrown <strong class='color-block'>blocks</strong> have",
|
// description: "<strong>attract</strong> power ups from <strong>far away</strong><br><strong>deflecting</strong> doesn't drain <strong class='color-f'>energy</strong><br>thrown <strong class='color-block'>blocks</strong> have",
|
||||||
// description: "gain <strong class='color-f'>energy</strong> when <strong>blocking</strong><br>no <strong>recoil</strong> when <strong>blocking</strong>",
|
// description: "gain <strong class='color-f'>energy</strong> when <strong>blocking</strong><br>no <strong>recoil</strong> when <strong>blocking</strong>",
|
||||||
@@ -2396,7 +2400,7 @@ const m = {
|
|||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "plasma torch",
|
name: "plasma torch",
|
||||||
description: "use <strong class='color-f'>energy</strong> to emit short range <strong class='color-plasma'>plasma</strong><br><strong class='color-d'>damages</strong> and <strong>pushes</strong> mobs away<br>generate <strong>6</strong> <strong class='color-f'>energy</strong> per second",
|
description: "use <strong class='color-f'>energy</strong> to emit short range <strong class='color-plasma'>plasma</strong><br><strong class='color-d'>damages</strong> and <strong>pushes</strong> mobs away<br>generate <strong>10</strong> <strong class='color-f'>energy</strong> per second",
|
||||||
set() {
|
set() {
|
||||||
b.isExtruderOn = false
|
b.isExtruderOn = false
|
||||||
// m.fieldCDcycleAlternate = 0
|
// m.fieldCDcycleAlternate = 0
|
||||||
@@ -2785,7 +2789,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "time dilation",
|
name: "time dilation",
|
||||||
description: "use <strong class='color-f'>energy</strong> to <strong style='letter-spacing: 2px;'>stop time</strong><br><strong>+25%</strong> movement and <strong><em>fire rate</em></strong><br>generate <strong>15</strong> <strong class='color-f'>energy</strong> per second",
|
description: "use <strong class='color-f'>energy</strong> to <strong style='letter-spacing: 2px;'>stop time</strong><br><strong>+25%</strong> movement and <strong><em>fire rate</em></strong><br>generate <strong>14</strong> <strong class='color-f'>energy</strong> per second",
|
||||||
set() {
|
set() {
|
||||||
// m.fieldMeterColor = "#0fc"
|
// m.fieldMeterColor = "#0fc"
|
||||||
// m.fieldMeterColor = "#ff0"
|
// m.fieldMeterColor = "#ff0"
|
||||||
|
|||||||
@@ -1385,6 +1385,58 @@ const powerUps = {
|
|||||||
// }
|
// }
|
||||||
// return 0
|
// return 0
|
||||||
// },
|
// },
|
||||||
|
randomize(where) { //makes a random power up convert into a random different power up
|
||||||
|
//put 10 power ups close together
|
||||||
|
const len = Math.min(10, powerUp.length)
|
||||||
|
for (let i = 0; i < len; i++) { //collide the first 10 power ups
|
||||||
|
const unit = Vector.rotate({ x: 1, y: 0 }, 6.28 * Math.random())
|
||||||
|
Matter.Body.setPosition(powerUp[i], Vector.add(where, Vector.mult(unit, 20 + 25 * Math.random())));
|
||||||
|
Matter.Body.setVelocity(powerUp[i], Vector.mult(unit, 20));
|
||||||
|
}
|
||||||
|
|
||||||
|
//count big power ups and small power ups
|
||||||
|
let options = ["heal", "research", "ammo"]
|
||||||
|
if (m.coupling) options.push("coupling")
|
||||||
|
if (tech.isBoostPowerUps) options.push("boost")
|
||||||
|
let bigIndexes = []
|
||||||
|
let smallIndexes = []
|
||||||
|
for (let i = 0; i < powerUp.length; i++) {
|
||||||
|
if (powerUp[i].name === "tech" || powerUp[i].name === "gun" || powerUp[i].name === "field") {
|
||||||
|
bigIndexes.push(i)
|
||||||
|
} else {
|
||||||
|
smallIndexes.push(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bigIndexes.length > 0) {
|
||||||
|
// console.log("at least 1 big will always spilt")
|
||||||
|
const index = bigIndexes[Math.floor(Math.random() * bigIndexes.length)]
|
||||||
|
for (let i = 0; i < 4; i++) powerUps.directSpawn(where.x, where.y, options[Math.floor(Math.random() * options.length)], false)
|
||||||
|
|
||||||
|
Matter.Composite.remove(engine.world, powerUp[index]);
|
||||||
|
powerUp.splice(index, 1);
|
||||||
|
} else if (smallIndexes.length > 3 && Math.random() < 0.25) {
|
||||||
|
// console.log("no big, at least 4 small can combine")
|
||||||
|
for (let j = 0; j < 4; j++) {
|
||||||
|
for (let i = 0; i < powerUp.length; i++) {
|
||||||
|
if (powerUp[i].name === "heal" || powerUp[i].name === "research" || powerUp[i].name === "ammo" || powerUp[i].name === "coupling" || powerUp[i].name === "boost") {
|
||||||
|
Matter.Composite.remove(engine.world, powerUp[i]);
|
||||||
|
powerUp.splice(i, 1);
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
options = ["tech", "gun", "field"]
|
||||||
|
powerUps.directSpawn(where.x, where.y, options[Math.floor(Math.random() * options.length)], false)
|
||||||
|
} else if (smallIndexes.length > 0) {
|
||||||
|
// console.log("no big, at least 1 small will swap flavors")
|
||||||
|
const index = Math.floor(Math.random() * powerUp.length)
|
||||||
|
options = options.filter(e => e !== powerUp[index].name); //don't repeat the current power up type
|
||||||
|
powerUps.directSpawn(where.x, where.y, options[Math.floor(Math.random() * options.length)], false)
|
||||||
|
Matter.Composite.remove(engine.world, powerUp[index]);
|
||||||
|
powerUp.splice(index, 1);
|
||||||
|
}
|
||||||
|
},
|
||||||
directSpawn(x, y, target, moving = true, mode = null, size = powerUps[target].size()) {
|
directSpawn(x, y, target, moving = true, mode = null, size = powerUps[target].size()) {
|
||||||
let index = powerUp.length;
|
let index = powerUp.length;
|
||||||
target = powerUps[target];
|
target = powerUps[target];
|
||||||
|
|||||||
41
js/tech.js
@@ -966,7 +966,7 @@ const tech = {
|
|||||||
name: "zoospore vector",
|
name: "zoospore vector",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Disease_vector' class="link">zoospore vector</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Disease_vector' class="link">zoospore vector</a>`,
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `after mobs <strong>die</strong><br>they have a <strong>+10%</strong> chance to grow ${b.guns[6].nameString('s')}`
|
return `after mobs <strong>die</strong> there is a <strong>+10%</strong> chance<br>they grow ${b.guns[6].nameString('s')}`
|
||||||
},
|
},
|
||||||
// description: "after mobs <strong>die</strong><br>they have a <strong>+10%</strong> chance to grow <strong class='color-p' style='letter-spacing: 2px;'>spores</strong>",
|
// description: "after mobs <strong>die</strong><br>they have a <strong>+10%</strong> chance to grow <strong class='color-p' style='letter-spacing: 2px;'>spores</strong>",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
@@ -1005,6 +1005,24 @@ const tech = {
|
|||||||
tech.deathSkipTime = 0
|
tech.deathSkipTime = 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "collider",
|
||||||
|
descriptionFunction() {
|
||||||
|
return `after mobs <strong>die</strong> there is a <strong>+33%</strong> chance <br>to change a <strong>power up</strong> into a different <strong>flavor</strong>`
|
||||||
|
},
|
||||||
|
maxCount: 3,
|
||||||
|
count: 0,
|
||||||
|
frequency: 1,
|
||||||
|
frequencyDefault: 1,
|
||||||
|
allowed: () => true,
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
tech.collidePowerUps += 0.33333
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.collidePowerUps = 0
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "bubble fusion",
|
name: "bubble fusion",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
@@ -3335,9 +3353,9 @@ const tech = {
|
|||||||
isNonRefundable: true,
|
isNonRefundable: true,
|
||||||
// isJunk: true,
|
// isJunk: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isDeterminism
|
return !tech.isDeterminism && !tech.isBrainstorm
|
||||||
},
|
},
|
||||||
requires: "not determinism",
|
requires: "not determinism, brainstorm",
|
||||||
effect() {
|
effect() {
|
||||||
tech.tooManyTechChoices = 1
|
tech.tooManyTechChoices = 1
|
||||||
// for (let i = 0; i < this.bonusResearch; 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 < this.bonusResearch; i++) powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
|
||||||
@@ -8574,6 +8592,22 @@ const tech = {
|
|||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// name: "synchrotron",
|
||||||
|
// descriptionFunction() {
|
||||||
|
// return `<strong>power ups</strong> change into a different <strong>flavor</strong> after a boss dies`
|
||||||
|
// },
|
||||||
|
// maxCount: 3,
|
||||||
|
// count: 0,
|
||||||
|
// frequency: 1,
|
||||||
|
// frequencyDefault: 1,
|
||||||
|
// allowed: () => true,
|
||||||
|
// requires: "",
|
||||||
|
// effect() {
|
||||||
|
// },
|
||||||
|
// remove() {
|
||||||
|
// }
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
name: "return",
|
name: "return",
|
||||||
description: "return to the introduction level<br>reduce combat <strong>difficulty</strong> by <strong>2 levels</strong>",
|
description: "return to the introduction level<br>reduce combat <strong>difficulty</strong> by <strong>2 levels</strong>",
|
||||||
@@ -11387,4 +11421,5 @@ const tech = {
|
|||||||
isZombieMobs: null,
|
isZombieMobs: null,
|
||||||
isSuperMine: null,
|
isSuperMine: null,
|
||||||
sentryAmmo: null,
|
sentryAmmo: null,
|
||||||
|
collidePowerUps: null,
|
||||||
}
|
}
|
||||||
33
todo.txt
@@ -1,20 +1,38 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
level: lock
|
exit doors take longer to open
|
||||||
there is a way to escape the slime on the right side now
|
it's nice to take a few seconds to relax between levels
|
||||||
|
please don't submit a bug report about this
|
||||||
|
|
||||||
new community level!
|
plasma torch energy regen 6->10
|
||||||
stereoMadness by Richard0820
|
perfect diamagnetism energy regen 6->5
|
||||||
|
|
||||||
|
a few more new images
|
||||||
|
|
||||||
|
tech: collider - after a mob dies smash power ups and change the flavor of one of them
|
||||||
|
powerUps.randomize(where)
|
||||||
|
if there is a tech,field,gun it will split into 4 small power ups
|
||||||
|
else if there are at least 4 small power ups they have a 1/4 chance to combine into a tech, field, gun
|
||||||
|
else a random small power up will change
|
||||||
|
|
||||||
*********************************************************** TODO *****************************************************
|
*********************************************************** TODO *****************************************************
|
||||||
|
|
||||||
|
diagetic UI Elements
|
||||||
|
ammo number?
|
||||||
|
doesn't text look choppy when camera moves?
|
||||||
|
health bar could be rendered similarly to energy bar
|
||||||
|
what about 2 bezier curves on left and right of player head that looks like 1/3 circleRadiusScale
|
||||||
|
what about 2 bezier both above player
|
||||||
|
as the total energy and health increases the curses could asymptotically approach a maximum length as max energy/health goes to infinity
|
||||||
|
|
||||||
|
|
||||||
level: lock
|
level: lock
|
||||||
replace vanish elements with doors to fit theme better
|
|
||||||
can you do a sideways door?
|
|
||||||
should there be something in the top part of the map?
|
should there be something in the top part of the map?
|
||||||
add alt versions of left and right sides
|
add alt versions of left and right sides
|
||||||
make flipped L/R version (after everything else is done)
|
make flipped L/R version (after everything else is done)
|
||||||
|
|
||||||
|
Tech: Drones always follow you mouse, never going to attack enemies or pick up power ups unless they are close to your mouse
|
||||||
|
|
||||||
tech: add an selection option to all tech, gun, fields to do something
|
tech: add an selection option to all tech, gun, fields to do something
|
||||||
set all mobs to 30% health, and stun all mobs
|
set all mobs to 30% health, and stun all mobs
|
||||||
50% chance to convert all power ups into research
|
50% chance to convert all power ups into research
|
||||||
@@ -1149,9 +1167,8 @@ if pause is pressed while selecting power ups, display pause menu on top of sele
|
|||||||
subtractive sculpture
|
subtractive sculpture
|
||||||
kinetic sculpture
|
kinetic sculpture
|
||||||
quantum stuff -- Hypertorus, Glowing Opal Pearlescent, Physics, Hydro-Dipping Hydrodipped, Vija Celmins, Matt Molloy (photo of golden waves in the sky)
|
quantum stuff -- Hypertorus, Glowing Opal Pearlescent, Physics, Hydro-Dipping Hydrodipped, Vija Celmins, Matt Molloy (photo of golden waves in the sky)
|
||||||
***major themes missing***
|
|
||||||
***maybe redo***
|
***maybe redo***
|
||||||
heuristics
|
laser
|
||||||
supercritical fission
|
supercritical fission
|
||||||
***past style themes***
|
***past style themes***
|
||||||
field emitter - isometric, clean white robot spherical gun turret on bird legs, blender 3d, style of artstation and behance, Disney Pixar, cute
|
field emitter - isometric, clean white robot spherical gun turret on bird legs, blender 3d, style of artstation and behance, Disney Pixar, cute
|
||||||
|
|||||||