From d4c28ee1d654f2fc3f3788605cfe2f16a8d5b416 Mon Sep 17 00:00:00 2001 From: monsterkodi Date: Tue, 23 Aug 2016 18:35:44 +0200 Subject: [PATCH] levels --- coffee/bomb.coffee | 17 +- coffee/bot.coffee | 4 +- coffee/gate.coffee | 18 +- coffee/levels.coffee | 1 - coffee/levels/blocks.coffee | 3 +- coffee/levels/bombs.coffee | 3 +- coffee/levels/borg.coffee | 3 +- coffee/levels/bridge.coffee | 31 +- coffee/levels/bronze.coffee | 3 +- coffee/levels/captured.coffee | 3 +- coffee/levels/chain.coffee | 3 +- coffee/levels/cheese.coffee | 3 +- coffee/levels/church.coffee | 3 +- coffee/levels/circuit.coffee | 3 +- coffee/levels/columns.coffee | 3 +- coffee/levels/conductor.coffee | 3 +- coffee/levels/core.coffee | 2 +- coffee/levels/cube.coffee | 3 +- coffee/levels/edge.coffee | 3 +- coffee/levels/electro.coffee | 3 +- coffee/levels/elevate.coffee | 3 +- coffee/levels/energy.coffee | 3 +- coffee/levels/entropy.coffee | 3 +- coffee/levels/escape.coffee | 3 +- coffee/levels/evil.coffee | 3 +- coffee/levels/fallen.coffee | 3 +- coffee/levels/flower.coffee | 3 +- coffee/levels/gamma.coffee | 3 +- coffee/levels/gears.coffee | 3 +- coffee/levels/gold.coffee | 3 +- coffee/levels/grasp.coffee | 3 +- coffee/levels/green.coffee | 3 +- coffee/levels/grid.coffee | 3 +- coffee/levels/hidden.coffee | 3 +- coffee/levels/invisimaze.coffee | 3 +- coffee/levels/jump.coffee | 3 +- coffee/levels/love.coffee | 3 +- coffee/levels/machine.coffee | 3 +- coffee/levels/maze.coffee | 3 +- coffee/levels/mesh.coffee | 3 +- coffee/levels/mini.coffee | 3 +- coffee/levels/move.coffee | 3 +- coffee/levels/mutants.coffee | 3 +- coffee/levels/neutron.coffee | 2 +- coffee/levels/nice.coffee | 2 +- coffee/levels/plate.coffee | 3 +- coffee/levels/pool.coffee | 3 +- coffee/levels/random.coffee | 3 +- coffee/levels/regal.coffee | 3 +- coffee/levels/rings.coffee | 3 +- coffee/levels/sandbox.coffee | 3 +- coffee/levels/slick.coffee | 3 +- coffee/levels/spiral.coffee | 3 +- coffee/levels/start.coffee | 3 +- coffee/levels/steps.coffee | 3 +- coffee/levels/stones.coffee | 3 +- coffee/levels/strange.coffee | 2 +- coffee/levels/switch.coffee | 3 +- coffee/levels/throw.coffee | 3 +- coffee/levels/towers.coffee | 3 +- coffee/levels/walls.coffee | 3 +- coffee/light.coffee | 13 +- coffee/material.coffee | 49 ++- coffee/player.coffee | 11 +- coffee/scheme.coffee | 570 ++++++++++++++++++++++++++++++++ coffee/sound.coffee | 9 +- coffee/switch.coffee | 10 +- coffee/wire.coffee | 2 +- coffee/world.coffee | 22 +- sound/bot_climb.wav | Bin 0 -> 45092 bytes sound/bot_move.wav | Bin 18232 -> 14132 bytes sound/bot_turn.wav | Bin 0 -> 18232 bytes 72 files changed, 730 insertions(+), 191 deletions(-) create mode 100644 coffee/scheme.coffee create mode 100644 sound/bot_climb.wav create mode 100644 sound/bot_turn.wav diff --git a/coffee/bomb.coffee b/coffee/bomb.coffee index 70f7a4b..c7f8b4f 100644 --- a/coffee/bomb.coffee +++ b/coffee/bomb.coffee @@ -4,11 +4,10 @@ # 000 000 000 000 000 0 000 000 000 # 0000000 0000000 000 000 0000000 -log = require '/Users/kodi/s/ko/js/tools/log' - Pushable = require './pushable' Action = require './action' Vector = require './lib/vector' +Material = require './material' class Bomb extends Pushable @@ -24,16 +23,8 @@ class Bomb extends Pushable geom2 = new THREE.DodecahedronGeometry 1 geom2.rotateX Vector.DEG2RAD 90 geom.merge geom2 - - @mat = new THREE.MeshPhongMaterial - color: 0xff0000 - side: THREE.FrontSide - shading: THREE.FlatShading - transparent: true - opacity: 0.7 - shininess: 20 - - @mesh = new THREE.Mesh geom, @mat + + @mesh = new THREE.Mesh geom, Material.bomb @updateMesh() super @@ -68,7 +59,7 @@ class Bomb extends Pushable if splitter Splitter = require './splitter' - world.addObjectAtPos new Splitter(dir), pos + world.addObjectAtPos new Splitter(dir), pos bulletImpact: -> if not @splitted diff --git a/coffee/bot.coffee b/coffee/bot.coffee index 539f984..2db4e4f 100644 --- a/coffee/bot.coffee +++ b/coffee/bot.coffee @@ -78,11 +78,11 @@ class Bot extends Pushable Mutant = require './mutant' mutant = @ instanceof Mutant - @mesh = new THREE.Mesh geom, mutant and Material.mutant.clone() or Material.bot + @mesh = new THREE.Mesh geom, mutant and Material.mutant.clone() or Material.player geom = new THREE.TorusGeometry 0.5-tireRadius, tireRadius, 16, 32 geom.scale 1,1,2.5 - tireMat = mutant and Material.mutant_tire.clone() or Material.tire + tireMat = mutant and Material.mutantTire.clone() or Material.tire @leftTire = new THREE.Mesh geom, tireMat @leftTire.position.set 0.35,0,0 @leftTire.rotation.set 0, Vector.DEG2RAD(90), 0 diff --git a/coffee/gate.coffee b/coffee/gate.coffee index 0633313..fdf5efb 100644 --- a/coffee/gate.coffee +++ b/coffee/gate.coffee @@ -4,10 +4,11 @@ # 000 000 000 000 000 000 # 0000000 000 000 000 00000000 -Vector = require './lib/vector' -Switch = require './switch' -Light = require './light' -Action = require './action' +Vector = require './lib/vector' +Switch = require './switch' +Light = require './light' +Action = require './action' +Material = require './material' class Gate extends Switch @@ -30,13 +31,8 @@ class Gate extends Switch createMesh: () -> torusRadius = 0.05 t1 = new THREE.TorusBufferGeometry 0.5-torusRadius, torusRadius, 16, 32 - @mat = new THREE.MeshPhongMaterial - color: 0xff0000 - side: THREE.FrontSide - shading: THREE.SmoothShading - shininess: 5 - @mesh = new THREE.Mesh t1, @mat + @mesh = new THREE.Mesh t1, Material.gate @mesh.castShadow = true @mesh.receiveShadow = true @@ -45,7 +41,7 @@ class Gate extends Switch t2.rotateY Vector.DEG2RAD 90 t3.rotateX Vector.DEG2RAD 90 t2.merge t3 - @tors = new THREE.Mesh t2, @mat + @tors = new THREE.Mesh t2, Material.gate @tors.castShadow = true @tors.receiveShadow = true @mesh.add @tors diff --git a/coffee/levels.coffee b/coffee/levels.coffee index c23e398..5b4e05d 100644 --- a/coffee/levels.coffee +++ b/coffee/levels.coffee @@ -10,7 +10,6 @@ class Levels @dict = {} @list = [ # "test", - "mini", # --- introduction "steps", "start", diff --git a/coffee/levels/blocks.coffee b/coffee/levels/blocks.coffee index 2bb9017..33b6f25 100644 --- a/coffee/levels/blocks.coffee +++ b/coffee/levels/blocks.coffee @@ -2,9 +2,8 @@ module.exports = name: "blocks" design: 'Michael Abel' - scheme: "default_scheme" + scheme: "default" size: [18,12,5] - intro: "blocks" help: """ you can grab most stones by pressing forward diff --git a/coffee/levels/bombs.coffee b/coffee/levels/bombs.coffee index f974b7f..e5894bb 100644 --- a/coffee/levels/bombs.coffee +++ b/coffee/levels/bombs.coffee @@ -7,9 +7,8 @@ module.exports = name: 'bombs' - scheme: "red_scheme" + scheme: "red" size: [9,9,9] - intro: "bombs" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/borg.coffee b/coffee/levels/borg.coffee index 1d0356a..1c74d4c 100644 --- a/coffee/levels/borg.coffee +++ b/coffee/levels/borg.coffee @@ -8,9 +8,8 @@ module.exports = name: 'borg' disgn: 'Michael Abel' - scheme: "default_scheme" + scheme: "default" size: [9,9,9] - intro: "borg" help: """ Believe me, they are diff --git a/coffee/levels/bridge.coffee b/coffee/levels/bridge.coffee index a78ffea..2174bc2 100644 --- a/coffee/levels/bridge.coffee +++ b/coffee/levels/bridge.coffee @@ -6,22 +6,21 @@ # 0000000 000 000 000 0000000 0000000 00000000 module.exports = - name: 'bridge' - scheme: "red_scheme" - size: [9,9,5] - intro: "bridge" - help: """ - $scale(1.5)mission: - activate the exit! - to activate the exit, - feed it with electricity: - - connect the generator - with the motor - - place a wire stone - next to the exit - """ + name: 'bridge' + scheme: "red" + size: [9,9,5] + help: """ + $scale(1.5)mission: + activate the exit! + to activate the exit, + feed it with electricity: + + connect the generator + with the motor + + place a wire stone + next to the exit + """ player: position: [0,-3,1] exits: [ diff --git a/coffee/levels/bronze.coffee b/coffee/levels/bronze.coffee index b7e9ed4..73a6bb7 100644 --- a/coffee/levels/bronze.coffee +++ b/coffee/levels/bronze.coffee @@ -7,9 +7,8 @@ module.exports = name: 'bronze' - scheme: "bronze_scheme" + scheme: "bronze" size: [9,6,9] - intro: "bronze" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/captured.coffee b/coffee/levels/captured.coffee index 01d1759..f4bc02f 100644 --- a/coffee/levels/captured.coffee +++ b/coffee/levels/captured.coffee @@ -9,9 +9,8 @@ module.exports = name: "captured" design: 'Niko Boehm' - scheme: "default_scheme" + scheme: "default" size: [9,9,9] - intro: "captured" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/chain.coffee b/coffee/levels/chain.coffee index 37019a5..990586b 100644 --- a/coffee/levels/chain.coffee +++ b/coffee/levels/chain.coffee @@ -7,9 +7,8 @@ module.exports = name: "chain" - scheme: "candy_scheme" + scheme: "candy" size: [9,9,5] - intro: "chain" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/cheese.coffee b/coffee/levels/cheese.coffee index 1480aec..1368790 100644 --- a/coffee/levels/cheese.coffee +++ b/coffee/levels/cheese.coffee @@ -8,9 +8,8 @@ module.exports = name: "cheese" design: "Owen Hay" - scheme: "yellow_scheme" + scheme: "yellow" size: [11,12,7] - intro: "cheese" help: """ $scale(1.5)mission: activate the exit. diff --git a/coffee/levels/church.coffee b/coffee/levels/church.coffee index 2b58271..4a84889 100644 --- a/coffee/levels/church.coffee +++ b/coffee/levels/church.coffee @@ -7,9 +7,8 @@ module.exports = name: "church" - scheme: "yellow_scheme" + scheme: "yellow" size: [5,7,5] - intro: "church" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/circuit.coffee b/coffee/levels/circuit.coffee index 00f132d..b59e911 100644 --- a/coffee/levels/circuit.coffee +++ b/coffee/levels/circuit.coffee @@ -9,9 +9,8 @@ module.exports = name: "circuit" design: 'Michael Abel' - scheme: "tron_scheme" + scheme: "tron" size: [9,9,9] - intro: "circuit" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/columns.coffee b/coffee/levels/columns.coffee index 315ca19..d60a2e9 100644 --- a/coffee/levels/columns.coffee +++ b/coffee/levels/columns.coffee @@ -7,9 +7,8 @@ module.exports = name: "columns" - scheme: "green_scheme" + scheme: "green" size: [7,9,7] - intro: "columns" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/conductor.coffee b/coffee/levels/conductor.coffee index f6891de..9135251 100644 --- a/coffee/levels/conductor.coffee +++ b/coffee/levels/conductor.coffee @@ -8,9 +8,8 @@ module.exports = name: "conductor" deisgn: "Michael Abel" - scheme: "default_scheme" + scheme: "default" size: [11,9,11] - intro: "conductor" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/core.coffee b/coffee/levels/core.coffee index 83196e2..0260095 100644 --- a/coffee/levels/core.coffee +++ b/coffee/levels/core.coffee @@ -8,7 +8,7 @@ module.exports = name: "core" design: "Michael Abel" - scheme: "yellow_scheme" + scheme: "yellow" size: [9,9,9] help: """ reach the exit. diff --git a/coffee/levels/cube.coffee b/coffee/levels/cube.coffee index 7ca910d..e95ce49 100644 --- a/coffee/levels/cube.coffee +++ b/coffee/levels/cube.coffee @@ -8,9 +8,8 @@ module.exports = name: "cube" deisgn: 'Michael Abel' - scheme: "default_scheme" + scheme: "default" size: [5,5,5] - intro: "cube" help: "reach the exit!" player: coordinates: [2,0,0] diff --git a/coffee/levels/edge.coffee b/coffee/levels/edge.coffee index 85a5425..89cc3f6 100644 --- a/coffee/levels/edge.coffee +++ b/coffee/levels/edge.coffee @@ -2,9 +2,8 @@ module.exports = name: "edge" - scheme: "candy_scheme" + scheme: "candy" size: [7,7,7] - intro: "edge" help: "$scale(1.5)mission:\nget to the exit!" player: coordinates: [3,0,0] diff --git a/coffee/levels/electro.coffee b/coffee/levels/electro.coffee index d90ebeb..d64d3bd 100644 --- a/coffee/levels/electro.coffee +++ b/coffee/levels/electro.coffee @@ -7,9 +7,8 @@ module.exports = name: "electro" - scheme: "metal_scheme" + scheme: "metal" size: [9,7,9] - intro: "electro" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/elevate.coffee b/coffee/levels/elevate.coffee index ffc8632..73ee076 100644 --- a/coffee/levels/elevate.coffee +++ b/coffee/levels/elevate.coffee @@ -7,9 +7,8 @@ module.exports = name: "elevate" - scheme: "bronze_scheme" + scheme: "bronze" size: [9,5,7] - intro: "elevate" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/energy.coffee b/coffee/levels/energy.coffee index f1cd5d2..b7b598b 100644 --- a/coffee/levels/energy.coffee +++ b/coffee/levels/energy.coffee @@ -1,8 +1,7 @@ module.exports = name: "energy" - scheme: "default_scheme" + scheme: "default" size: [9,17,9] - intro: "energy" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/entropy.coffee b/coffee/levels/entropy.coffee index dfb8620..c4ef071 100644 --- a/coffee/levels/entropy.coffee +++ b/coffee/levels/entropy.coffee @@ -9,9 +9,8 @@ module.exports = name: "entropy" design: 'Michael Abel' - scheme: "green_scheme" + scheme: "green" size: [9,9,9] - intro: "entropy" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/escape.coffee b/coffee/levels/escape.coffee index 720a9b0..73ac7eb 100644 --- a/coffee/levels/escape.coffee +++ b/coffee/levels/escape.coffee @@ -7,9 +7,8 @@ module.exports = name: "escape" - scheme: "metal_scheme" + scheme: "metal" size: [7,9,7] - intro: "escape" help: """ $scale(1.5)mission: try to escape! diff --git a/coffee/levels/evil.coffee b/coffee/levels/evil.coffee index 8fa9c11..19f5d79 100644 --- a/coffee/levels/evil.coffee +++ b/coffee/levels/evil.coffee @@ -7,9 +7,8 @@ module.exports = name: "evil" - scheme: "red_scheme" + scheme: "red" size: [13,5,13] - intro: "evil" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/fallen.coffee b/coffee/levels/fallen.coffee index 84e5add..f86dff1 100644 --- a/coffee/levels/fallen.coffee +++ b/coffee/levels/fallen.coffee @@ -8,9 +8,8 @@ module.exports = name: "fallen" deisgn: 'Owen Hay' - scheme: "blue_scheme" + scheme: "blue" size: [13,15,13] - intro: "fallen" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/flower.coffee b/coffee/levels/flower.coffee index 39d024f..e118c02 100644 --- a/coffee/levels/flower.coffee +++ b/coffee/levels/flower.coffee @@ -3,9 +3,8 @@ module.exports = name: "flower" - scheme: "metal_scheme" + scheme: "metal" size: [7,7,11] - intro: "flower" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/gamma.coffee b/coffee/levels/gamma.coffee index 59bcc9c..6db8402 100644 --- a/coffee/levels/gamma.coffee +++ b/coffee/levels/gamma.coffee @@ -11,9 +11,8 @@ module.exports = name: "gamma" design: 'Michael Abel' - scheme: "tron_scheme" + scheme: "tron" size: [10,10,10] - intro: "gamma" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/gears.coffee b/coffee/levels/gears.coffee index 5533521..f0ac9d8 100644 --- a/coffee/levels/gears.coffee +++ b/coffee/levels/gears.coffee @@ -1,8 +1,7 @@ module.exports = name: "gears" - scheme: "blue_scheme" + scheme: "blue" size: [9,9,9] - intro: "gears" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/gold.coffee b/coffee/levels/gold.coffee index 4b2c895..74028e5 100644 --- a/coffee/levels/gold.coffee +++ b/coffee/levels/gold.coffee @@ -7,9 +7,8 @@ module.exports = name: "gold" - scheme: "yellow_scheme" + scheme: "yellow" size: [3,11,3] - intro: "gold" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/grasp.coffee b/coffee/levels/grasp.coffee index bf45611..8052e4a 100644 --- a/coffee/levels/grasp.coffee +++ b/coffee/levels/grasp.coffee @@ -8,8 +8,7 @@ module.exports = name: "grasp" design: "Owen Hay" - scheme: "blue_scheme" - intro: "grasp" + scheme: "blue" size: [11,11,11] help: """ $scale(1.5)mission:activate the exit! diff --git a/coffee/levels/green.coffee b/coffee/levels/green.coffee index 8fe9898..707c706 100644 --- a/coffee/levels/green.coffee +++ b/coffee/levels/green.coffee @@ -1,8 +1,7 @@ module.exports = name: "green" - scheme: "green_scheme" + scheme: "green" size: [13,5,13] - intro: "green" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/grid.coffee b/coffee/levels/grid.coffee index 01ecbdc..ca73aae 100644 --- a/coffee/levels/grid.coffee +++ b/coffee/levels/grid.coffee @@ -1,8 +1,7 @@ module.exports = name: "grid" - scheme: "candy_scheme" + scheme: "candy" size: [9,9,9] - intro: "grid" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/hidden.coffee b/coffee/levels/hidden.coffee index d9ad93c..1155258 100644 --- a/coffee/levels/hidden.coffee +++ b/coffee/levels/hidden.coffee @@ -7,9 +7,8 @@ module.exports = name: "hidden" - scheme: "metal_scheme" + scheme: "metal" size: [9,9,9] - intro: "hidden" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/invisimaze.coffee b/coffee/levels/invisimaze.coffee index e1f356e..0570026 100644 --- a/coffee/levels/invisimaze.coffee +++ b/coffee/levels/invisimaze.coffee @@ -8,9 +8,8 @@ module.exports = name: "invisimaze" design: 'Owen Hay' - scheme: "yellow_scheme" + scheme: "yellow" size: [9,5,5] - intro: "invisimaze" help: """ blindly fumbling through the maze diff --git a/coffee/levels/jump.coffee b/coffee/levels/jump.coffee index 15963ee..458d973 100644 --- a/coffee/levels/jump.coffee +++ b/coffee/levels/jump.coffee @@ -7,9 +7,8 @@ module.exports = name: "jump" - scheme: "red_scheme" + scheme: "red" size: [7,7,13] - intro: "jump" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/love.coffee b/coffee/levels/love.coffee index 77001d2..60334d9 100644 --- a/coffee/levels/love.coffee +++ b/coffee/levels/love.coffee @@ -1,8 +1,7 @@ module.exports = name: "love" - scheme: "red_scheme" + scheme: "red" size: [13,13,13] - intro: "love" help: "$scale(1.5)mission:\nget to the exit!" player: position: [0,1,-4] diff --git a/coffee/levels/machine.coffee b/coffee/levels/machine.coffee index 4ae12b1..d02d87d 100644 --- a/coffee/levels/machine.coffee +++ b/coffee/levels/machine.coffee @@ -8,9 +8,8 @@ module.exports = name: "machine" deisgn: 'Michael Abel' - scheme: "tron_scheme" + scheme: "tron" size: [5,5,9] - intro: "machine" help: "$scale(1.5)mission:\nactivate the exit!" player: position: [0,0,0] diff --git a/coffee/levels/maze.coffee b/coffee/levels/maze.coffee index 25407ae..46991c9 100644 --- a/coffee/levels/maze.coffee +++ b/coffee/levels/maze.coffee @@ -9,9 +9,8 @@ module.exports = name: "maze" deisgn: 'Michael Abel' - scheme: "default_scheme" + scheme: "default" size: [4,4,4] - intro: "maze" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/mesh.coffee b/coffee/levels/mesh.coffee index c0f6c24..3873b1b 100644 --- a/coffee/levels/mesh.coffee +++ b/coffee/levels/mesh.coffee @@ -8,9 +8,8 @@ module.exports = name: "mesh" design: 'Michael Abel' - scheme: "default_scheme" + scheme: "default" size: [11,11,11] - intro: "mesh" help: "$scale(1.5)mission:\nget to the exit!" player: coordinates: [0,0,5] diff --git a/coffee/levels/mini.coffee b/coffee/levels/mini.coffee index dd2dd36..bcf82ee 100644 --- a/coffee/levels/mini.coffee +++ b/coffee/levels/mini.coffee @@ -8,9 +8,8 @@ module.exports = name: "mini" design: 'Michael Abel' - scheme: "tron_scheme" + scheme: "tron" size: [5,5,7] - intro: "mini" help: "$scale(1.5)mission:\nget to the exit!" player: coordinates: [2,4,4] diff --git a/coffee/levels/move.coffee b/coffee/levels/move.coffee index 00ccab7..f342420 100644 --- a/coffee/levels/move.coffee +++ b/coffee/levels/move.coffee @@ -7,8 +7,7 @@ module.exports = name: "move" - scheme: "red_scheme" - intro: "move" + scheme: "red" size: [7,7,7] help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/mutants.coffee b/coffee/levels/mutants.coffee index af2f197..6ad9a63 100644 --- a/coffee/levels/mutants.coffee +++ b/coffee/levels/mutants.coffee @@ -1,8 +1,7 @@ module.exports = name: "mutants" - scheme: "blue_scheme" + scheme: "blue" size: [9,9,9] - intro: "mutants" help: """ $scale(1.5)mission: deactivate the mutants! diff --git a/coffee/levels/neutron.coffee b/coffee/levels/neutron.coffee index dc6ee59..e4b6085 100644 --- a/coffee/levels/neutron.coffee +++ b/coffee/levels/neutron.coffee @@ -8,7 +8,7 @@ module.exports = name: "neutron" design: 'Michael Abel' - scheme: "neutron_scheme" + scheme: "neutron" size: [11,11,11] help: """ $scale(1.5)mission: diff --git a/coffee/levels/nice.coffee b/coffee/levels/nice.coffee index 3469f3a..a987d46 100644 --- a/coffee/levels/nice.coffee +++ b/coffee/levels/nice.coffee @@ -9,7 +9,7 @@ module.exports = name: "nice" design: 'Michael Abel' - scheme: "tron_scheme" + scheme: "tron" size: [11,11,11] help: "$scale(1.5)mission:\nget to the exit!" player: position: [2,-1,0] diff --git a/coffee/levels/plate.coffee b/coffee/levels/plate.coffee index b687f8f..ebfec94 100644 --- a/coffee/levels/plate.coffee +++ b/coffee/levels/plate.coffee @@ -5,9 +5,8 @@ Vector = require '../lib/vector' module.exports = name: "plate" - scheme: "blue_scheme" + scheme: "blue" size: [7,7,9] - intro: "plate" help: """ $scale(1.5)mission:\nget to the exit! diff --git a/coffee/levels/pool.coffee b/coffee/levels/pool.coffee index 27be14b..7c01081 100644 --- a/coffee/levels/pool.coffee +++ b/coffee/levels/pool.coffee @@ -8,9 +8,8 @@ module.exports = name: "pool" design: 'Michael Abel' - scheme: "green_scheme" + scheme: "green" size: [11,11,11] - intro: "pool" help: "$scale(1.5)mission:\nget to the exit!" player: coordinates: [5,10,5] diff --git a/coffee/levels/random.coffee b/coffee/levels/random.coffee index c98eff4..9dd40d1 100644 --- a/coffee/levels/random.coffee +++ b/coffee/levels/random.coffee @@ -8,9 +8,8 @@ module.exports = name: "random" design: 'Michael Abel' - scheme: "default_scheme" + scheme: "default" size: [21,21,21] - intro: "random" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/regal.coffee b/coffee/levels/regal.coffee index 3723225..c1de20d 100644 --- a/coffee/levels/regal.coffee +++ b/coffee/levels/regal.coffee @@ -1,8 +1,7 @@ module.exports = name: "regal" - scheme: "bronze_scheme" + scheme: "bronze" size: [7,3,9] - intro: "regal" help: "$scale(1.5)mission:\nactivate the exit!" player: position: [0,0,0] exits: [ diff --git a/coffee/levels/rings.coffee b/coffee/levels/rings.coffee index 71b037b..a3f1f76 100644 --- a/coffee/levels/rings.coffee +++ b/coffee/levels/rings.coffee @@ -7,9 +7,8 @@ module.exports = name: "rings" - scheme: "default_scheme" + scheme: "default" size: [9,7,9] - intro: "rings" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/sandbox.coffee b/coffee/levels/sandbox.coffee index 68ab619..7ef822b 100644 --- a/coffee/levels/sandbox.coffee +++ b/coffee/levels/sandbox.coffee @@ -8,9 +8,8 @@ module.exports = name: "sandbox" design: 'Michael Abel' - scheme: "bronze_scheme" + scheme: "bronze" size: [9,9,6] - intro: "sandbox" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/slick.coffee b/coffee/levels/slick.coffee index b50916c..7a2b23a 100644 --- a/coffee/levels/slick.coffee +++ b/coffee/levels/slick.coffee @@ -9,9 +9,8 @@ module.exports = name: "slick" design: 'Michael Abel' - scheme: "tron_scheme" + scheme: "tron" size: [9,11,15] - intro: "slick" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/spiral.coffee b/coffee/levels/spiral.coffee index 4ce02f4..f0290d7 100644 --- a/coffee/levels/spiral.coffee +++ b/coffee/levels/spiral.coffee @@ -8,8 +8,7 @@ module.exports = name: "spiral" design: "Owen Hay" - scheme: "zen_scheme" - intro: "spiral" + scheme: "zen" size: [5,25,5] help: "Down the Rabbit Hole" player: diff --git a/coffee/levels/start.coffee b/coffee/levels/start.coffee index 85c3571..f41c036 100644 --- a/coffee/levels/start.coffee +++ b/coffee/levels/start.coffee @@ -7,9 +7,8 @@ module.exports = name: "start" - scheme: "default_scheme" + scheme: "default" size: [7,7,11] - intro: "start" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/steps.coffee b/coffee/levels/steps.coffee index e84d245..a6701e6 100644 --- a/coffee/levels/steps.coffee +++ b/coffee/levels/steps.coffee @@ -7,9 +7,8 @@ module.exports = name: "steps" - scheme: "blue_scheme" + # scheme: "blue" size: [7,7,13] - intro: "steps" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/stones.coffee b/coffee/levels/stones.coffee index bc65193..6967091 100644 --- a/coffee/levels/stones.coffee +++ b/coffee/levels/stones.coffee @@ -1,8 +1,7 @@ module.exports = name: "stones" - scheme: "blue_scheme" + scheme: "blue" size: [11,11,12] - intro: "stones" help: """ $scale(1.5)mission: get to the exit! diff --git a/coffee/levels/strange.coffee b/coffee/levels/strange.coffee index 50ed0e1..feab99a 100644 --- a/coffee/levels/strange.coffee +++ b/coffee/levels/strange.coffee @@ -8,7 +8,7 @@ module.exports = name: "strange" deisgn: 'Michael Abel' - scheme: "default_scheme" + scheme: "default" size: [9,9,9] help: """ $scale(1.5)mission: diff --git a/coffee/levels/switch.coffee b/coffee/levels/switch.coffee index b8f6bbe..d3099aa 100644 --- a/coffee/levels/switch.coffee +++ b/coffee/levels/switch.coffee @@ -7,9 +7,8 @@ module.exports = name: "switch" - scheme: "yellow_scheme" + scheme: "yellow" size: [7,7,7] - intro: "switch" help: """ $scale(1.5)mission: activate the exit! diff --git a/coffee/levels/throw.coffee b/coffee/levels/throw.coffee index 6ac1d5d..5f11d29 100644 --- a/coffee/levels/throw.coffee +++ b/coffee/levels/throw.coffee @@ -9,9 +9,8 @@ module.exports = name: "throw" design: 'Michael Abel' - scheme: "tron_scheme" + scheme: "tron" size: [5,7,7] - intro: "throw" help: """ "$scale(1.5)mission: get to the exit! diff --git a/coffee/levels/towers.coffee b/coffee/levels/towers.coffee index 51283b9..2becd39 100644 --- a/coffee/levels/towers.coffee +++ b/coffee/levels/towers.coffee @@ -2,9 +2,8 @@ module.exports = name: "towers" - scheme: "metal_scheme" + scheme: "metal" size: [9,9,15] - intro: "towers" help: "$scale(1.5)mission:\nget to the exit!\n\nto get to the exit,\nmove the stones" player: coordinates: [4,5,0] diff --git a/coffee/levels/walls.coffee b/coffee/levels/walls.coffee index 1ca63b6..c956125 100644 --- a/coffee/levels/walls.coffee +++ b/coffee/levels/walls.coffee @@ -8,9 +8,8 @@ module.exports = name: "walls" design: 'Michael Abel' - scheme: "default_scheme" + scheme: "default" size: [7,5,5] - intro: "walls" help: """ $scale(1.5)mission: diff --git a/coffee/light.coffee b/coffee/light.coffee index fe001a6..9f64ccc 100644 --- a/coffee/light.coffee +++ b/coffee/light.coffee @@ -4,7 +4,8 @@ # 000 000 000 000 000 000 000 # 0000000 000 0000000 000 000 000 -Item = require './item' +Item = require './item' +Material = require './material' class Light extends Item @@ -21,21 +22,13 @@ class Light extends Item @point.shadow.mapSize = new THREE.Vector2 2048, 2048 @point.shadow.bias = 0.01 geom = new THREE.SphereGeometry 0.3, 16, 16 - mat = new THREE.MeshLambertMaterial - color: 0xffffff - side: THREE.FrontSide - shading: THREE.SmoothShading - transparent: true - opacity: 0.7 - emissive: 0xffff00 - emissiveIntensity: 0.9 # world.scene.add new THREE.CameraHelper @point.shadow.camera if @shadow @point.shadow.camera.near = 0.1 @point.shadow.camera.far = @radius*2 - @mesh = new THREE.Mesh geom, mat + @mesh = new THREE.Mesh geom, Material.bulb world.scene.add @point world.addLight @ @setPosition opt.pos if opt?.pos? diff --git a/coffee/material.coffee b/coffee/material.coffee index fbc8411..2a8ba06 100644 --- a/coffee/material.coffee +++ b/coffee/material.coffee @@ -7,7 +7,12 @@ module.exports = - bot: new THREE.MeshPhongMaterial + glow: new THREE.SpriteMaterial + map: new THREE.TextureLoader().load "#{__dirname}/../img/glow.png" + color: 0xffff00 + id: 999 + + player: new THREE.MeshPhongMaterial color: 0x2222ff side: THREE.FrontSide shading: THREE.SmoothShading @@ -17,7 +22,7 @@ module.exports = tire: new THREE.MeshPhongMaterial color: 0x000066 - specular: 0x222255 + # specular: 0x222255 side: THREE.FrontSide shading: THREE.FlatShading transparent: true @@ -32,7 +37,7 @@ module.exports = opacity: 1 shininess: 5 - mutant_tire: new THREE.MeshPhongMaterial + mutantTire: new THREE.MeshPhongMaterial color: 0x555555 specular: 0x222222 side: THREE.FrontSide @@ -48,11 +53,6 @@ module.exports = opacity: 0.8 shininess: 5 depthWrite: false - - glow: new THREE.SpriteMaterial - map: new THREE.TextureLoader().load "#{__dirname}/../img/glow.png" - color: 0xffff00 - id: 999 gear: new THREE.MeshPhongMaterial color: 0xff0000 @@ -66,12 +66,41 @@ module.exports = shading: THREE.SmoothShading shininess: 40 - wire_plate: new THREE.MeshPhongMaterial + wirePlate: new THREE.MeshPhongMaterial color: 0x880000 side: THREE.DoubleSide shading: THREE.SmoothShading shininess: 10 - + + bulb: new THREE.MeshLambertMaterial + color: 0xffffff + side: THREE.FrontSide + shading: THREE.SmoothShading + transparent: true + opacity: 0.7 + emissive: 0xffff00 + emissiveIntensity: 0.9 + + bomb: new THREE.MeshPhongMaterial + color: 0xff0000 + side: THREE.FrontSide + shading: THREE.FlatShading + transparent: true + opacity: 0.7 + shininess: 20 + + switch: new THREE.MeshPhongMaterial + color: 0x0000ff + side: THREE.FrontSide + shading: THREE.SmoothShading + shininess: 5 + + gate: new THREE.MeshPhongMaterial + color: 0xff0000 + side: THREE.FrontSide + shading: THREE.SmoothShading + shininess: 5 + raster: new THREE.MeshPhongMaterial color: 0x880000 side: THREE.FrontSide diff --git a/coffee/player.coffee b/coffee/player.coffee index 7323ca5..3fc397c 100644 --- a/coffee/player.coffee +++ b/coffee/player.coffee @@ -228,11 +228,16 @@ class Player extends Bot initAction: (action) -> # log "initAction #{action.id} #{action.name}" switch action.id - # when Action.CLIMB_DOWN, Action.FORWARD then @addMoves 1 - when Action.TURN_LEFT, Action.TURN_RIGHT + when Action.CLIMB_DOWN + # @addMoves 1 + world.playSound 'BOT_CLIMB' + when Action.FORWARD + # @addMoves 1 world.playSound 'BOT_MOVE' + when Action.TURN_LEFT, Action.TURN_RIGHT + world.playSound 'BOT_TURN' when Action.JUMP - # @status.addMoves actionId == Action.JUMP and 1 or 2 + # @addMoves actionId == Action.JUMP and 1 or 2 world.playSound 'BOT_JUMP' super action diff --git a/coffee/scheme.coffee b/coffee/scheme.coffee new file mode 100644 index 0000000..7969730 --- /dev/null +++ b/coffee/scheme.coffee @@ -0,0 +1,570 @@ + +# 0000000 0000000 000 000 00000000 00 00 00000000 +# 000 000 000 000 000 000 000 000 +# 0000000 000 000000000 0000000 000000000 0000000 +# 000 000 000 000 000 000 0 000 000 +# 0000000 0000000 000 000 00000000 000 000 00000000 + +module.exports = + + # 0000000 00000000 00000000 0000000 000 000 000 000000000 + # 000 000 000 000 000 000 000 000 000 000 + # 000 000 0000000 000000 000000000 000 000 000 000 + # 000 000 000 000 000 000 000 000 000 000 + # 0000000 00000000 000 000 000 0000000 0000000 000 + + default: + raster: + color: [0.5, 0, 0] + plate: + color: [0.5, 0, 0] + wall: + color: [0.4, 0, 0] + bulb: + color: [1, 1, 0] + bomb: + color: [0.5, 0, 0] + stone: + color: [0.5, 0.5, 0.5] + switch: + color: [0, 0, 0.5] + gate: + color: [1, 0.5, 0] + player: + color: [0.8, 0.4, 0] + tire: + color: [0.4, 0, 0] + mutant: + color: [0.5, 0, 0] + mutantTire: + color: [0, 0, 0.2] + text: + color: [0.8, 0.8, 0] + bright: [1, 1, 0] + dark: [0.6, 0.4, 0] + gear: + color: [0.1, 0.1, 0.9] + valve: + color: [0, 0, 0.5] + wire: + color: [0.1, 0.1, 0.9] + glow: + color: [1, 1, 0] + + # 000000000 00000000 0000000 000 000 + # 000 000 000 000 000 0000 000 + # 000 0000000 000 000 000 0 000 + # 000 000 000 000 000 000 0000 + # 000 000 000 0000000 000 000 + + tron: + raster: + color: [0, 0, 0.3] + plate: + color: [0.05, 0.05] + opacity: 0.2 + bulb: + color: [0, 0, 1] + bomb: + color: [0.5, 0, 0] + stone: + color: [0, 0, 1] + switch: + color: [0, 0, 0.5] + gate: + color: [1, 1, 0] + player: + color: [0.5, 0.5, 0.5] + tire: + color: [0, 0, 0.5] + mutant: + color: [0.5, 0, 0] + mutantTire: + color: [0, 0, 0.2] + text: + color: [0.8, 0.8, 0] + bright: [1, 1, 0] + dark: [0.6, 0.4, 0] + gear: + color: [0.1, 0.1, 0.9] + valve: + color: [0, 0, 0.5] + wire: + color: [0.1, 0.1, 0.9] + glow: + color: [1, 1, 0] + + # 000 000 00000000 000 000 000000000 00000000 0000000 000 000 + # 0000 000 000 000 000 000 000 000 000 000 0000 000 + # 000 0 000 0000000 000 000 000 0000000 000 000 000 0 000 + # 000 0000 000 000 000 000 000 000 000 000 000 0000 + # 000 000 00000000 0000000 000 000 000 0000000 000 000 + + neutron: + raster: + color: [0.13, 0.13, 0.13] + plate: + color: [0.5, 0.5, 0.5] + bulb: + color: [0, 0, 0] + bomb: + color: [0.5, 0, 0] + stone: + color: [0.5, 0.5, 0.5] + opacity: 0.5 + switch: + color: [0, 0, 0.5] + gate: + color: [1, 1, 0] + player: + color: [1, 0.5, 0] + tire: + color: [0.5, 0, 0] + mutant: + color: [0.5, 0, 0] + mutantTire: + color: [0, 0, 0.2] + text: + color: [0.8, 0.8, 0] + bright: [1, 1, 0] + dark: [0.6, 0.4, 0] + gear: + color: [1, 0, 0] + valve: + color: [0.7, 0, 0] + wire: + color: [0.1, 0.1, 0.9] + glow: + color: [1, 1, 0] + + # 000000000 00000000 0000000 000000000 + # 000 000 000 000 + # 000 0000000 0000000 000 + # 000 000 000 000 + # 000 00000000 0000000 000 + + test: + raster: + color: [1, 1, 1] + plate: + color: [0.08, 0.08, 0.08] + bulb: + color: [0, 0, 0] + bomb: + color: [0.5, 0, 0] + stone: + color: [0.5, 0.5, 0.5] + opacity: 0.5 + switch: + color: [0, 0, 0.5, 0.8] + gate: + color: [1, 1, 0, 0.8] + player: + color: [1, 0.5, 0] + tire: + color: [0.5, 0, 0] + mutant: + color: [1, 0.5, 0] + mutantTire: + color: [0.5, 0, 0] + text: + color: [0.8, 0.8, 0] + bright: [1, 1, 0] + dark: [0.6, 0.4, 0] + gear: + color: [0.1, 0.1, 0.9] + valve: + color: [0, 0, 0.5] + wire: + color: [0.1, 0.1, 0.9] + glow: + color: [1, 1, 0] + + # 0000000 0000000 000 000 0000000 000 000 + # 000 000 000 0000 000 000 000 000 000 + # 000 000000000 000 0 000 000 000 00000 + # 000 000 000 000 0000 000 000 000 + # 0000000 000 000 000 000 0000000 000 + + candy: + raster: + color: [0.35, 0, 0.35] + plate: + color: [0.8, 0, 0.9] + bulb: + color: [0, 0, 0] + text: + color: [0.7, 0, 0.7] + bright: [1, 0, 1] + dark: [0.4, 0, 0.4] + bomb: + color: [0.73, 0, 0.75] + stone: + color: [0.85, 0, 0.95] + opacity: 0.6 + switch: + color: [0.3, 0, 0.3] + gate: + color: [1, 0, 1, 0.8] + player: + color: [0.7, 0, 0.7] + tire: + color: [0.3, 0, 0.3] + mutant: + color: [0.3, 0, 0.3] + mutantTire: + color: [0.7, 0, 0.7] + valve: + color: [0.5, 0, 0.5] + gear: + color: [0.7, 0, 0.7] + wire: + color: [1, 0, 1] + glow: + color: [1, 1, 0] + + # 0000000 00000000 0000000 000 000 0000000 00000000 + # 000 000 000 000 000 000 0000 000 000 000 + # 0000000 0000000 000 000 000 0 000 000 0000000 + # 000 000 000 000 000 000 000 0000 000 000 + # 0000000 000 000 0000000 000 000 0000000 00000000 + + bronze: + raster: + color: [0.25, 0.15, 0.05] + plate: + color: [0.8, 0.6, 0.2] + bulb: + color: [0.1, 0.1, 0] + stone: + color: [1, 0.8, 0.4] + opacity: 0.8 + switch: + color: [0.9, 0.7, 0.1] + gate: + color: [0.9, 0.7, 0.1] + player: + color: [0.8, 0.6, 0.3] + tire: + color: [0.5, 0.2, 0.1] + mutant: + color: [0.5, 0.2, 0.1] + mutantTire: + color: [0.3, 0.1, 0] + gear: + color: [0.7, 0.4, 0.1] + valve: + color: [0.5, 0.2, 0.1] + wire: + color: [0.7, 0.5, 0.3] + glow: + color: [1, 1, 0] + bomb: + color: [0.9, 0.7, 0.1] + text: + color: [0.7, 0.5, 0.1] + bright: [0.9, 0.7, 0.15] + dark: [0.6, 0.4, 0] + + # 00000000 00000000 0000000 + # 000 000 000 000 000 + # 0000000 0000000 000 000 + # 000 000 000 000 000 + # 000 000 00000000 0000000 + + red: + raster: + color: [0.2, 0, 0] + plate: + color: [0.3, 0, 0] + bulb: + color: [0.1, 0.1, 0.1] + bomb: + color: [0.5, 0, 0] + stone: + color: [0.5, 0, 0] + opacity: 0.6 + switch: + color: [0.8, 0, 0] + gate: + color: [1, 0.2, 0] + player: + color: [0.7, 0, 0] + tire: + color: [0.3, 0, 0] + mutant: + color: [0.3, 0, 0] + mutantTire: + color: [0.7, 0, 0] + valve: + color: [0.5, 0.2, 0] + gear: + color: [1, 0.5, 0] + wire: + color: [0.5, 0, 0] + text: + color: [1, 0.5, 0] + bright: [1, 0.8, 0] + dark: [0.4, 0.2, 0] + + # 0000000 000 000 000 00000000 + # 000 000 000 000 000 000 + # 0000000 000 000 000 0000000 + # 000 000 000 000 000 000 + # 0000000 0000000 0000000 00000000 + + blue: + raster: + color: [0, 0, 0.2] + plate: + color: [0.1, 0.1, 0.6] + bulb: + color: [0.1, 0.1, 0.1] + stone: + color: [0, 0, 0.5] + opacity: 0.6 + switch: + color: [0, 0, 0.6, 0.8] + bomb: + color: [0.2, 0.2, 0.9] + opacity: 0.8 + gate: + color: [0, 0.2, 1] + player: + color: [0, 0, 0.7] + tire: + color: [0, 0, 0.3] + mutant: + color: [0, 0, 0.3] + mutantTire: + color: [0, 0, 0.7] + text: + color: [0.2, 0.4, 0.8] + bright: [0.7, 0.8, 1] + dark: [0, 0, 0.6] + gear: + color: [0.1, 0.1, 0.9] + valve: + color: [0, 0, 0.5] + wire: + color: [0.1, 0.1, 0.9] + glow: + color: [1, 0.5, 0] + + # 000 000 00000000 000 000 0000000 000 000 + # 000 000 000 000 000 000 000 000 0 000 + # 00000 0000000 000 000 000 000 000000000 + # 000 000 000 000 000 000 000 000 + # 000 00000000 0000000 0000000 0000000 00 00 + + yellow: + raster: + color: [0.34, 0.34, 0] + plate: + color: [0.9, 0.9, 0] + bulb: + color: [0, 0, 0] + bomb: + color: [0.75, 0.75, 0] + stone: + color: [0.8, 0.85, 0] + opacity: 0.6 + switch: + color: [0.8, 0.8, 0] + gate: + color: [1, 1, 0, 0.8] + player: + color: [0.7, 0.7, 0] + tire: + color: [0.3, 0.3, 0] + mutant: + color: [0.3, 0.3, 0] + mutantTire: + color: [0.7, 0.7, 0] + valve: + color: [0.5, 0.5, 0] + gear: + color: [0.7, 0.5, 0] + wire: + color: [1, 1, 0] + glow: + color: [0, 0, 1] + text: + color: [0.7, 0.7, 0] + bright: [1, 1, 0] + dark: [0.4, 0.4, 0] + + # 0000000 00000000 00000000 00000000 000 000 + # 000 000 000 000 000 0000 000 + # 000 0000 0000000 0000000 0000000 000 0 000 + # 000 000 000 000 000 000 000 0000 + # 0000000 000 000 00000000 00000000 000 000 + + green: + raster: + color: [0, 0.2, 0] + plate: + color: [0.1, 0.6, 0.1] + bulb: + color: [0, 0, 0] + stone: + color: [0, 0.5, 0] + switch: + color: [0, 0.6, 0] + bomb: + color: [0, 0.2, 0] + gate: + color: [0, 0.5, 0] + player: + color: [0, 0.7, 0] + tire: + color: [0, 0.3, 0] + mutant: + color: [0, 0.3, 0] + mutantTire: + color: [0, 0.7, 0] + text: + color: [0, 0.4, 0] + bright: [0, 0.6, 0] + dark: [0, 0.2, 0] + gear: + color: [0, 0.2, 0] + valve: + color: [0, 0.5, 0] + wire: + color: [0.1, 0.9, 0] + glow: + color: [1, 1, 1] + + # 00 00 00000000 000000000 0000000 000 + # 000 000 000 000 000 000 000 + # 000000000 0000000 000 000000000 000 + # 000 0 000 000 000 000 000 000 + # 000 000 00000000 000 000 000 0000000 + + metal: + raster: + color: [0.2, 0.2, 0.2] + plate: + color: [1, 1, 1] + bulb: + color: [0, 0, 0] + stone: + color: [1, 1, 1, 0.6] + switch: + color: [0.9, 1, 0.9] + gate: + color: [1, 1, 1, 0.8] + player: + color: [0.6, 0.6, 0.6] + tire: + color: [0.3, 0.3, 0.3] + mutant: + color: [0.8, 0.8, 0.8] + mutantTire: + color: [0.7, 0.7, 0.7] + bomb: + color: [0.4, 0.4, 0.5] + opacity: 0.9 + gear: + color: [0.2, 0.4, 0.5] + valve: + color: [0.4, 0.4, 0.5] + wire: + color: [1, 1, 1, 0.9] + glow: + color: [0, 0, 1] + text: + color: [0.2, 0.4, 0.5] + bright: [0.3, 0.9, 1] + dark: [0.1, 0.3, 0.4] + + # 0000000 00000000 0000000 0000000 000 000 + # 000 000 000 000 000 000 000 000 + # 000 0000000 000000000 000 00000 + # 000 000 000 000 000 000 000 + # 0000000 000 000 000 000 0000000 000 + + crazy: + raster: + color: [0.84, 0.22, 0.20] + plate: + color: [0, 0.51, 0.82] + bulb: + color: [0, 0, 0] + stone: + color: [1, 1, 1] + stone: 0.2 + switch: + color: [0.9, 1, 0.9] + gate: + color: [1, 1, 1, 0.8] + player: + color: [0.6, 0.6, 0.6] + tire: + color: [0.3, 0.3, 0.3] + mutant: + color: [0.8, 0.8, 0.8] + mutantTire: + color: [0.7, 0.7, 0.7] + bomb: + color: [0.4, 0.4, 0.5] + opacity: 0.2 + gear: + color: [0.2, 0.4, 0.5] + valve: + color: [0.4, 0.4, 0.5] + wire: + color: [1, 1, 1] + glow: + color: [0, 0, 1] + text: + color: [0.2, 0.4, 0.5] + bright: [0.3, 0.9, 1] + dark: [0.1, 0.3, 0.4] + + # 0000000 00000000 000 000 + # 000 000 0000 000 + # 000 0000000 000 0 000 + # 000 000 000 0000 + # 0000000 00000000 000 000 + + zen: + raster: + color: [0.75, 0.95, 0.64] + plate: + color: [0.36, 0.45, 0.30] + bulb: + color: [0, 0, 0] + stone: + color: [0.36, 0.45, 0.30] + opacity: 0.7 + switch: + color: [0.9, 1, 0.9, 0.8] + gate: + color: [1, 1, 1, 0.8] + player: + color: [0.6, 0.6, 0.6] + tire: + color: [0.3, 0.3, 0.3] + mutant: + color: [0.8, 0.8, 0.8] + mutantTire: + color: [0.7, 0.7, 0.7] + bomb: + color: [0.4, 0.4, 0.5] + opacity: 0.9 + gear: + color: [0.2, 0.4, 0.5] + valve: + color: [0.4, 0.4, 0.5] + wire: + color: [1, 1, 1, 0.9] + glow: + color: [0, 0, 1] + text: + color: [0.2, 0.4, 0.5] + bright: [0.3, 0.9, 1] + dark: [0.1, 0.3, 0.4] + + \ No newline at end of file diff --git a/coffee/sound.coffee b/coffee/sound.coffee index c5acbe3..0827f63 100644 --- a/coffee/sound.coffee +++ b/coffee/sound.coffee @@ -12,13 +12,12 @@ class Sound @sounds = Object.create null @files = - BOT_MOVE: file: "bot_move.wav", volume: 0.2 + BOT_MOVE: file: "bot_move.wav", volume: 0.1 + BOT_TURN: file: "bot_turn.wav", volume: 0.2 + BOT_CLIMB: file: "bot_climb.wav", volume: 0.2 BOT_JUMP: file: "bot_jump.wav", volume: 0.7 - BOT_LAND: file: "bot_land.wav", volume: 0.7 - BOT_SPIKED: file: "bot_move.wav", volume: 1.0 - BOT_HEALTH_ALERT: file: "bot_health_alert.wav", volume: 1.0 + BOT_LAND: file: "bot_land.wav", volume: 0.5 BOT_DEATH: file: "bot_death.wav", volume: 1.0 - BOT_NO_ENERGY: file: "bot_no_energy.wav", volume: 1.0 BULLET_SHOT: file: "bullet_shot.wav", volume: 1.0 BULLET_HIT_WALL: file: "bullet_hit_wall.wav", volume: 1.0 BULLET_HIT_OBJECT: file: "bullet_hit_object.wav", volume: 1.0 diff --git a/coffee/switch.coffee b/coffee/switch.coffee index 1171000..02e5c9d 100644 --- a/coffee/switch.coffee +++ b/coffee/switch.coffee @@ -10,6 +10,7 @@ Vector = require './lib/vector' Action = require './action' Light = require './light' Item = require './item' +Material = require './material' class Switch extends Item @@ -41,12 +42,7 @@ class Switch extends Item createMesh: () -> torusRadius = 0.05 t1 = new THREE.TorusBufferGeometry 0.5-torusRadius, torusRadius, 16, 32 - @mat = new THREE.MeshPhongMaterial - color: 0x0000ff - side: THREE.FrontSide - shading: THREE.SmoothShading - shininess: 5 - @mesh = new THREE.Mesh t1, @mat + @mesh = new THREE.Mesh t1, Material.switch @mesh.castShadow = true @mesh.receiveShadow = true @@ -55,7 +51,7 @@ class Switch extends Item t2.rotateY Vector.DEG2RAD 90 # t3.rotateX Vector.DEG2RAD 90 # t2.merge t3 - @tors = new THREE.Mesh t2, @mat + @tors = new THREE.Mesh t2, Material.switch @tors.castShadow = true @tors.receiveShadow = true @mesh.add @tors diff --git a/coffee/wire.coffee b/coffee/wire.coffee index 34388d3..7b4b1ab 100644 --- a/coffee/wire.coffee +++ b/coffee/wire.coffee @@ -58,7 +58,7 @@ class Wire extends Item geom.merge plane @wire = new THREE.Mesh geom, Material.wire - @mesh = new THREE.Mesh Geom.wire(), Material.wire_plate + @mesh = new THREE.Mesh Geom.wire(), Material.wirePlate @mesh.add @wire @mesh.receiveShadow = true @mesh.position.copy Face.normal(@face).mul -(0.5+o) diff --git a/coffee/world.coffee b/coffee/world.coffee index f447527..cb119a9 100644 --- a/coffee/world.coffee +++ b/coffee/world.coffee @@ -27,6 +27,7 @@ Action = require './action' TmpObject = require './tmpobject' Pushable = require './pushable' Material = require './material' +Scheme = require './scheme' Quaternion = require './lib/quaternion' Vector = require './lib/vector' Pos = require './lib/pos' @@ -183,10 +184,7 @@ class World extends Actor # log "world size set", @size - # if "scheme" in @dict - # @applyColorScheme eval(@dict["scheme"]) - # else - # @applyColorScheme default_scheme + @applyScheme @dict.scheme ? 'default' # ............................................................ intro text # if "intro" in @dict @@ -259,6 +257,22 @@ class World extends Actor # saves the current level status in highscore file # highscore.levelFinished world.level_name, Controller.player.getStatus().getMoves() + + # 0000000 0000000 000 000 00000000 00 00 00000000 + # 000 000 000 000 000 000 000 000 + # 0000000 000 000000000 0000000 000000000 0000000 + # 000 000 000 000 000 000 0 000 000 + # 0000000 0000000 000 000 00000000 000 000 00000000 + + applyScheme: (scheme) -> + return if not Scheme[scheme] + log "Scheme[#{scheme}]", Scheme[scheme] + for k,v of Scheme[scheme] + if Material[k]? + if v.color + c = v.color + Material[k].color = new THREE.Color c[0], c[1], c[2] + # 000 000 0000000 000 000 000000000 # 000 000 000 000 000 000 # 000 000 000 0000 000000000 000 diff --git a/sound/bot_climb.wav b/sound/bot_climb.wav new file mode 100644 index 0000000000000000000000000000000000000000..74294a85f956f72d4bbdfb6aaf46f678dac95b63 GIT binary patch literal 45092 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 a!)x`jHL==XiZZlB6K`ra4?J4Gneq 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 literal 0 HcmV?d00001 diff --git a/sound/bot_move.wav b/sound/bot_move.wav index ceab4864973260493978b67aa940e143e72d9dc3..2398dde2118732510a801f626717e8cc776e736d 100644 GIT binary patch literal 14132 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 Br+EMX literal 18232 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