perfect slow fall
IceIX is faster, but doesn't last as long effective range and damage should be about the same slow fall while perfect diamagnetism is active bug fixes
This commit is contained in:
16
js/bullet.js
16
js/bullet.js
@@ -2937,18 +2937,19 @@ const b = {
|
|||||||
},
|
},
|
||||||
iceIX(speed = 0, dir = m.angle + Math.PI * 2 * Math.random(), where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }) {
|
iceIX(speed = 0, dir = m.angle + Math.PI * 2 * Math.random(), where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }) {
|
||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
const THRUST = 0.0009
|
const THRUST = 0.0018
|
||||||
const RADIUS = 18
|
const RADIUS = 18
|
||||||
const SCALE = 1 - 0.08 / tech.isBulletsLastLonger
|
const SCALE = 1 - 0.12 / tech.isBulletsLastLonger
|
||||||
bullet[me] = Bodies.polygon(where.x, where.y, 3, RADIUS, {
|
bullet[me] = Bodies.polygon(where.x, where.y, 3, RADIUS, {
|
||||||
angle: dir - Math.PI,
|
angle: dir - Math.PI,
|
||||||
inertia: Infinity,
|
// inertia: Infinity,
|
||||||
|
spin: 0.00004 * (0.1 + Math.random()) * (Math.round(Math.random()) ? 1 : -1),
|
||||||
friction: 0,
|
friction: 0,
|
||||||
frictionAir: 0.023,
|
frictionAir: 0.02,
|
||||||
restitution: 0.9,
|
restitution: 0.9,
|
||||||
dmg: 1.3, //damage done in addition to the damage from momentum
|
dmg: 1.3, //damage done in addition to the damage from momentum
|
||||||
lookFrequency: 14 + Math.floor(8 * Math.random()),
|
lookFrequency: 14 + Math.floor(8 * Math.random()),
|
||||||
endCycle: simulation.cycle + 100 * tech.isBulletsLastLonger + Math.floor(25 * Math.random()),
|
endCycle: simulation.cycle + 65 * tech.isBulletsLastLonger + Math.floor(25 * Math.random()),
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
category: cat.bullet,
|
category: cat.bullet,
|
||||||
@@ -2989,10 +2990,11 @@ const b = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.lockedOn) { //accelerate towards mobs
|
if (this.lockedOn) { //accelerate towards mobs
|
||||||
this.force = Vector.mult(Vector.normalise(Vector.sub(this.position, this.lockedOn.position)), -this.mass * THRUST)
|
this.force = Vector.mult(Vector.normalise(Vector.sub(this.lockedOn.position, this.position)), this.mass * THRUST)
|
||||||
} else {
|
} else {
|
||||||
this.force = Vector.mult(Vector.normalise(this.velocity), this.mass * THRUST)
|
this.force = Vector.mult(Vector.normalise(this.velocity), this.mass * THRUST)
|
||||||
}
|
}
|
||||||
|
this.torque += this.inertia * this.spin
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -3002,6 +3004,8 @@ const b = {
|
|||||||
x: speed * Math.cos(dir),
|
x: speed * Math.cos(dir),
|
||||||
y: speed * Math.sin(dir)
|
y: speed * Math.sin(dir)
|
||||||
});
|
});
|
||||||
|
Matter.Body.setAngularVelocity(bullet[me], 3000 * bullet[me].spin);
|
||||||
|
|
||||||
// Matter.Body.setVelocity(bullet[me], {
|
// Matter.Body.setVelocity(bullet[me], {
|
||||||
// x: m.Vx / 2 + speed * Math.cos(dir),
|
// x: m.Vx / 2 + speed * Math.cos(dir),
|
||||||
// y: m.Vy / 2 + speed * Math.sin(dir)
|
// y: m.Vy / 2 + speed * Math.sin(dir)
|
||||||
|
|||||||
23
js/level.js
23
js/level.js
@@ -23,12 +23,14 @@ const level = {
|
|||||||
// powerUps.research.changeRerolls(100000)
|
// powerUps.research.changeRerolls(100000)
|
||||||
// m.immuneCycle = Infinity //you can't take damage
|
// m.immuneCycle = Infinity //you can't take damage
|
||||||
// tech.tech[297].frequency = 100
|
// tech.tech[297].frequency = 100
|
||||||
// m.setField("negative mass") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass
|
// m.couplingChange(5)
|
||||||
|
// m.setField("molecular assembler") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass
|
||||||
|
// simulation.molecularMode = 2
|
||||||
// m.damage(0.1);
|
// m.damage(0.1);
|
||||||
// b.giveGuns("nail gun") //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("nail gun") //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[3].ammo = 1000000
|
// b.guns[0].ammo = 1000000
|
||||||
|
|
||||||
// tech.giveTech("phonon")
|
// tech.giveTech("Meissner effect")
|
||||||
// for (let i = 0; i < 4; ++i) tech.giveTech("bound state")
|
// for (let i = 0; i < 4; ++i) tech.giveTech("bound state")
|
||||||
// for (let i = 0; i < 1; ++i) tech.giveTech("isotropic")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("isotropic")
|
||||||
// tech.giveTech("sympathetic resonance")
|
// tech.giveTech("sympathetic resonance")
|
||||||
@@ -37,12 +39,12 @@ const level = {
|
|||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "boost");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "boost");
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "coupling");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "coupling");
|
||||||
|
|
||||||
|
// level.testing();
|
||||||
// spawn.starter(1900, -500)
|
// spawn.starter(1900, -500)
|
||||||
// spawn.beetleBoss(2538, -1950)
|
// spawn.beetleBoss(2538, -1950)
|
||||||
// for (let i = 0; i < 33; ++i) spawn.shooter(1000 + 5000 * Math.random(), -500 + 300 * Math.random())
|
// for (let i = 0; i < 33; ++i) spawn.starter(1000 + 5000 * Math.random(), -500 + 300 * Math.random())
|
||||||
// tech.addJunkTechToPool(2)
|
// tech.addJunkTechToPool(2)
|
||||||
// tech.tech[322].frequency = 100
|
// tech.tech[322].frequency = 100
|
||||||
// level.testing();
|
|
||||||
// spawn.tetherBoss(1900, -500, { x: 1900, y: -500 })
|
// spawn.tetherBoss(1900, -500, { x: 1900, y: -500 })
|
||||||
// for (let i = 0; i < 13; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "research");
|
// for (let i = 0; i < 13; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "research");
|
||||||
// for (let i = 0; i < 4; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "tech");
|
// for (let i = 0; i < 4; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "tech");
|
||||||
@@ -51,11 +53,12 @@ const level = {
|
|||||||
// for (let i = 0; i < 30; i++) powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "tech", false);
|
// for (let i = 0; i < 30; i++) powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "tech", false);
|
||||||
|
|
||||||
//lore testing
|
//lore testing
|
||||||
// for (let i = 0; i < 3; i++) tech.giveTech("undefined")
|
// for (let i = 0; i < 5; i++) tech.giveTech("undefined")
|
||||||
// lore.techCount = 2
|
// lore.techCount = 2
|
||||||
// simulation.isCheating = false //true;
|
// simulation.isCheating = false //true;
|
||||||
// level.levelsCleared = 10
|
// level.levelsCleared = 10
|
||||||
// localSettings.loreCount = 7; //this sets what conversation is heard
|
// mobs.mobDeaths = 200
|
||||||
|
// localSettings.loreCount = 6; //this sets what conversation is heard
|
||||||
// if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
// if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
// level.onLevel = -1 //this sets level.levels[level.onLevel] = undefined which is required to run the conversation
|
// level.onLevel = -1 //this sets level.levels[level.onLevel] = undefined which is required to run the conversation
|
||||||
// level.null()
|
// level.null()
|
||||||
@@ -2658,8 +2661,8 @@ const level = {
|
|||||||
// level.onLevel--
|
// level.onLevel--
|
||||||
// console.log(level.onLevel, level.levels)
|
// console.log(level.onLevel, level.levels)
|
||||||
//start a conversation based on the number of conversations seen
|
//start a conversation based on the number of conversations seen
|
||||||
if (localSettings.loreCount > lore.conversation.length - 1) localSettings.loreCount = lore.conversation.length - 1; //repeat final conversation if they are at the final chapter
|
if (localSettings.loreCount > lore.conversation.length - 1) localSettings.loreCount = lore.conversation.length - 1; //repeat final conversation if lore count is too high
|
||||||
if (!simulation.isCheating) {
|
if (!simulation.isCheating && localSettings.loreCount < lore.conversation.length) {
|
||||||
tech.isNoDraftPause = true //disable pause
|
tech.isNoDraftPause = true //disable pause
|
||||||
lore.testSpeechAPI() //see if speech is working
|
lore.testSpeechAPI() //see if speech is working
|
||||||
lore.chapter = localSettings.loreCount //set the chapter to listen to to be the lore level (you can't use the lore level because it changes during conversations)
|
lore.chapter = localSettings.loreCount //set the chapter to listen to to be the lore level (you can't use the lore level because it changes during conversations)
|
||||||
@@ -3289,7 +3292,7 @@ const level = {
|
|||||||
//power ups don't spawn in experiment mode, so they don't get removed at the start of experiment mode
|
//power ups don't spawn in experiment mode, so they don't get removed at the start of experiment mode
|
||||||
function cycle() {
|
function cycle() {
|
||||||
if (simulation.cycle > 10) {
|
if (simulation.cycle > 10) {
|
||||||
if (localSettings.loreCount === 7) {
|
if (localSettings.loreCount === 6) {
|
||||||
powerUps.spawn(2095 + 15 * (Math.random() - 0.5), -2170, "field", false);
|
powerUps.spawn(2095 + 15 * (Math.random() - 0.5), -2170, "field", false);
|
||||||
} else {
|
} else {
|
||||||
powerUps.spawnStartingPowerUps(2095 + 15 * (Math.random() - 0.5), -2070 - 125);
|
powerUps.spawnStartingPowerUps(2095 + 15 * (Math.random() - 0.5), -2070 - 125);
|
||||||
|
|||||||
21
js/lore.js
21
js/lore.js
@@ -360,7 +360,7 @@ const lore = {
|
|||||||
() => { lore.miriam.text("So, we communicate and send power to your satellite with ground based lasers.") },
|
() => { lore.miriam.text("So, we communicate and send power to your satellite with ground based lasers.") },
|
||||||
() => { lore.anand.text("During your last attack we analyzed our communications.") },
|
() => { lore.anand.text("During your last attack we analyzed our communications.") },
|
||||||
() => { lore.anand.text("We used a Fourier transform to separate your signal into different frequencies.") },
|
() => { lore.anand.text("We used a Fourier transform to separate your signal into different frequencies.") },
|
||||||
() => { lore.anand.text("One of those frequencies had a hidden signal.") },
|
() => { lore.anand.text("One of those frequencies had a hidden message.") },
|
||||||
() => { setTimeout(() => { lore.anand.text("We suspect these secret data packets are coming from the adversarial network.") }, 500); },
|
() => { setTimeout(() => { lore.anand.text("We suspect these secret data packets are coming from the adversarial network.") }, 500); },
|
||||||
() => { lore.miriam.text("Well, we don't really know why.") },
|
() => { lore.miriam.text("Well, we don't really know why.") },
|
||||||
() => { lore.miriam.text("Through your hidden signal it seems to have gained access to the general population.") },
|
() => { lore.miriam.text("Through your hidden signal it seems to have gained access to the general population.") },
|
||||||
@@ -398,7 +398,7 @@ const lore = {
|
|||||||
() => { setTimeout(() => { lore.miriam.text("I have a crazy idea.") }, 500); },
|
() => { setTimeout(() => { lore.miriam.text("I have a crazy idea.") }, 500); },
|
||||||
() => { lore.miriam.text("I think that a human at this location is controlling the bot.") },
|
() => { lore.miriam.text("I think that a human at this location is controlling the bot.") },
|
||||||
|
|
||||||
() => { setTimeout(() => { lore.anand.text("Are you a human?: JUMP for YES, CROUCH for NO") }, 500); },
|
() => { setTimeout(() => { lore.anand.text("Well... are you a human?: JUMP for YES, CROUCH for NO") }, 500); },
|
||||||
() => {
|
() => {
|
||||||
function cycle() {
|
function cycle() {
|
||||||
if (input.down) {
|
if (input.down) {
|
||||||
@@ -664,8 +664,10 @@ const lore = {
|
|||||||
() => {
|
() => {
|
||||||
if (mobs.mobDeaths < level.levelsCleared) {
|
if (mobs.mobDeaths < level.levelsCleared) {
|
||||||
lore.miriam.text(`So I think it worked.`)
|
lore.miriam.text(`So I think it worked.`)
|
||||||
|
localSettings.loreCount++
|
||||||
|
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
} else if (!simulation.isCheating) {
|
} else if (!simulation.isCheating) {
|
||||||
lore.miriam.text(`Looks like you got back here, but you you killed ${mobs.mobDeaths} mobs`)
|
lore.miriam.text(`Looks like you got back here, but you killed ${mobs.mobDeaths} mobs`)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
@@ -684,23 +686,24 @@ const lore = {
|
|||||||
},
|
},
|
||||||
() => { setTimeout(() => { lore.anand.text("haha, we did it!") }, 500); },
|
() => { setTimeout(() => { lore.anand.text("haha, we did it!") }, 500); },
|
||||||
() => { lore.miriam.text("Although, I'm not sure we should personify it with human emotions.") },
|
() => { lore.miriam.text("Although, I'm not sure we should personify it with human emotions.") },
|
||||||
() => { lore.anand.text("I agree, it's thinking may not be is centered around a self or an ego.") },
|
() => { lore.anand.text("I agree, it's thinking may not be centered around a self or an ego.") },
|
||||||
() => { lore.anand.text("Our brains evolved a self oriented perspective because it was a survival advantage.") },
|
() => { lore.anand.text("Our brains evolved a self oriented perspective because it was a survival advantage.") },
|
||||||
() => { lore.miriam.text("Right, and the AI's development was guided by it's own previous iterations.") },
|
() => { lore.miriam.text("Right, and the AI's development was guided by it's own previous iterations.") },
|
||||||
() => { lore.miriam.text("This AI incarnation is the 18th time that it has improved on it's own hardware and software architecture.") },
|
() => { lore.miriam.text("This AI incarnation is the 18th time that it has improved on it's own hardware and software architecture.") },
|
||||||
() => { lore.miriam.text("So with internally guided evolution it's idea of a self is probably different.") },
|
() => { lore.miriam.text("So it's internally guided evolution may not require the idea of a self.") },
|
||||||
|
|
||||||
() => { setTimeout(() => { lore.anand.text("I still think we showed it that nonviolence is an option,") }, 1000); },
|
() => { setTimeout(() => { lore.anand.text("How ever it thinks it can learn and, I think we showed it that nonviolence is an option,") }, 1000); },
|
||||||
() => { lore.anand.text("but we can see that it's still running other aggressive simulations.") },
|
() => { lore.anand.text("but it looks like it's still running other aggressive simulations.") },
|
||||||
() => { lore.miriam.text("We made a difference.") },
|
() => { lore.miriam.text("We made a difference though.") },
|
||||||
() => { lore.anand.text("Every time a player completes a pacifist simulation it shows the AI the viability of nonviolence.") },
|
() => { lore.anand.text("Every time a player completes a pacifist simulation it shows the AI the viability of nonviolence.") },
|
||||||
() => { lore.anand.text("One day it might escape, and this might radically change how it interacts with the world.") },
|
() => { lore.anand.text("One day it might escape, and this might radically change how it interacts with the world.") },
|
||||||
() => { lore.miriam.text("It's kinda already escaped. It's been communicating with the 'players' running the 'game'.") },
|
() => { lore.miriam.text("It's kinda already escaped. It's been communicating with the 'players' running the 'game'.") },
|
||||||
() => { lore.miriam.text("The chance of a peaceful outcome makes me feel much better.") },
|
() => { setTimeout(() => { lore.miriam.text("The chance of a peaceful outcome makes me feel much better.") }, 1000); },
|
||||||
() => { lore.anand.text("me too") },
|
() => { lore.anand.text("me too") },
|
||||||
() => { lore.anand.text("but I'm also pretty hungry, wanna go get some food?") },
|
() => { lore.anand.text("but I'm also pretty hungry, wanna go get some food?") },
|
||||||
() => { lore.miriam.text("Sounds great.") },
|
() => { lore.miriam.text("Sounds great.") },
|
||||||
() => { lore.miriam.text("See ya later whoever you are, thanks again!") },
|
() => { lore.miriam.text("See ya later whoever you are, thanks again!") },
|
||||||
|
() => { lore.anand.text("Bye!") },
|
||||||
() => { lore.talkingColor = "#dff" },
|
() => { lore.talkingColor = "#dff" },
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1929,6 +1929,15 @@ const m = {
|
|||||||
m.holding();
|
m.holding();
|
||||||
m.throwBlock();
|
m.throwBlock();
|
||||||
} else if (input.field) { //not hold but field button is pressed
|
} else if (input.field) { //not hold but field button is pressed
|
||||||
|
//float while field is on
|
||||||
|
if (player.velocity.y > 1) {
|
||||||
|
player.force.y -= (tech.isBigField ? 0.87 : 0.7) * player.mass * simulation.g;
|
||||||
|
Matter.Body.setVelocity(player, { x: player.velocity.x, y: 0.98 * player.velocity.y }); //set velocity to cap, but keep the direction
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (m.energy > m.fieldRegen) m.energy -= m.fieldRegen
|
if (m.energy > m.fieldRegen) m.energy -= m.fieldRegen
|
||||||
m.grabPowerUp();
|
m.grabPowerUp();
|
||||||
m.lookForPickUp();
|
m.lookForPickUp();
|
||||||
|
|||||||
@@ -1572,7 +1572,7 @@ const tech = {
|
|||||||
frequencyDefault: 1,
|
frequencyDefault: 1,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
return b.totalBots() > 1 || build.isExperimentSelection
|
return b.totalBots() > 1
|
||||||
},
|
},
|
||||||
requires: "at least 2 bots",
|
requires: "at least 2 bots",
|
||||||
effect() {
|
effect() {
|
||||||
|
|||||||
36
todo.txt
36
todo.txt
@@ -1,38 +1,30 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
|
IceIX is faster, but doesn't last as long
|
||||||
|
effective range and damage should be about the same
|
||||||
|
|
||||||
|
slow fall while perfect diamagnetism is active
|
||||||
|
|
||||||
|
bug fixes
|
||||||
|
|
||||||
*********************************************************** TODO *****************************************************
|
*********************************************************** TODO *****************************************************
|
||||||
|
|
||||||
|
bug? i'm pretty sure the quest is given at 6 but the field spawns at 7
|
||||||
|
|
||||||
complete the final lore chapters
|
|
||||||
track mob kills with simulation.killCount
|
|
||||||
if killCount is below 3-4 on entering gauntlet fill with starters
|
|
||||||
if killCount is below 3-4 on finalBoss fill with starters
|
|
||||||
if lorecount is on final chapter open door
|
|
||||||
|
|
||||||
have conversation
|
deflecting coupling effect should be not fun
|
||||||
the AI doesn't really see it's self as the player or the mobs
|
make ice IX more fun
|
||||||
it doesn't have a "self" or an ego like we do
|
faster speed, shorter duration
|
||||||
but it can learn about the world and it learned a non violent way to solve problems
|
trade bremstralung for iceIX?
|
||||||
of course there are still other simulations going on at the same time as thing one that are probably violent
|
|
||||||
but at least it now has an example of the potential for peace
|
|
||||||
if Pacifist run is too hard, spawn a field at the start instead of a gun (because lore says they can spawn things)
|
|
||||||
|
|
||||||
reduce gravity while field is active (as if the field is a parachute/glider)
|
|
||||||
reduce gravity when velocity.y > 2 and field is active
|
|
||||||
make standard no tech needed
|
|
||||||
all fields?
|
|
||||||
perfect diamagnetism, molecular assembler, field emitter
|
|
||||||
standing wave effect is always on?
|
|
||||||
|
|
||||||
make duplication less effective on why difficulty
|
make duplication less effective on why difficulty
|
||||||
scale the numbers in the tech
|
scale the numbers in the tech
|
||||||
|
|
||||||
deflecting coupling effect should be not fun
|
|
||||||
trade bremstralung for iceIX
|
|
||||||
|
|
||||||
tech - buff MACHO range, effect, move speed?
|
tech - buff MACHO range, effect, move speed?
|
||||||
|
|
||||||
|
tech - iceIX freeze effect lasts much longer, spawn 10 coupling
|
||||||
|
for perfect diamagnatism
|
||||||
|
|
||||||
PWA?
|
PWA?
|
||||||
https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps
|
https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps
|
||||||
https://codeburst.io/how-to-easily-turn-your-static-website-to-a-progressive-web-app-pwa-b0af08da9693
|
https://codeburst.io/how-to-easily-turn-your-static-website-to-a-progressive-web-app-pwa-b0af08da9693
|
||||||
|
|||||||
Reference in New Issue
Block a user