diff --git a/README.md b/README.md index 2b61522..5cbd5c7 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,14 @@ npm run build ``` For detailed explanation on how things work, consult the [docs for vue-loader](http://vuejs.github.io/vue-loader). + +## Credits + +Textures all from [OpenGameArt](https://opengameart.org/). More specifically: + +* https://opengameart.org/content/nature-tileset +* https://opengameart.org/content/platform-tileset-nature +* https://opengameart.org/sites/default/files/tileset2.png +* https://opengameart.org/content/cave-tileset-2 + +and partially adapted to my needs. diff --git a/src/Field.vue b/src/Field.vue index 85fa318..6ec781d 100644 --- a/src/Field.vue +++ b/src/Field.vue @@ -95,26 +95,48 @@ export default { } .block { flex: 0 0 auto; - width: 30px; - height: 30px; - background-color: #6DA956; - border: 1px solid transparent; -} -.block.air { background-color: #56F; } -.block.grass { background-color: #56F; height: 28px; border-bottom: 2px solid #0A0; } -.block.leaves { background-color: #383; } -.block.wood { background-color: #876; } -.block.soil { background-color: #543; } -.block.gravel { background-color: #665; } -.block.stone { background-color: #555; } -.block.bedrock { background-color: #333; } -.block.cave { background-color: #000; } -.block.player { - background-image: url(./assets/dwarf.png); + width: 32px; + height: 32px; + background-color: #56F; + background-size: cover; background-position: center; background-repeat: no-repeat; } -.block:hover { - border-color: rgba(255,255,255,0.2); -} +.block.air { background-color: #56F; } +.block.grass { background-image: url(./assets/grass01.png); } + +.block.tree_top_left { background-image: url(./assets/tree_top_left.png); } +.block.tree_top_middle { background-image: url(./assets/tree_top_middle.png); } +.block.tree_top_right { background-image: url(./assets/tree_top_right.png); } + +.block.tree_crown_left { background-image: url(./assets/tree_crown_left.png); } +.block.tree_crown_middle { background-image: url(./assets/tree_crown_middle.png); } +.block.tree_crown_right { background-image: url(./assets/tree_crown_right.png); } + +.block.tree_trunk_left { background-image: url(./assets/tree_trunk_left.png); } +.block.tree_trunk_middle { background-image: url(./assets/tree_trunk_middle.png); } +.block.tree_trunk_right { background-image: url(./assets/tree_trunk_right.png); } + +.block.tree_root_left { background-image: url(./assets/tree_root_left.png); } +.block.tree_root_middle { background-image: url(./assets/tree_root_middle.png); } +.block.tree_root_right { background-image: url(./assets/tree_root_right.png); } + +.block.tree_top_left_mixed { background-image: url(./assets/tree_top_left_mixed.png); } +.block.tree_crown_left_mixed { background-image: url(./assets/tree_crown_left_mixed.png); } +.block.tree_trunk_left_mixed { background-image: url(./assets/tree_trunk_left_mixed.png); } +.block.tree_root_left_mixed { background-image: url(./assets/tree_root_left_mixed.png); } + +.block.tree_top_right_mixed { background-image: url(./assets/tree_top_right_mixed.png); } +.block.tree_crown_right_mixed { background-image: url(./assets/tree_crown_right_mixed.png); } +.block.tree_trunk_right_mixed { background-image: url(./assets/tree_trunk_right_mixed.png); } +.block.tree_root_right_mixed { background-image: url(./assets/tree_root_right_mixed.png); } + +.block.soil { background-image: url(./assets/soil01.png); } +.block.soil_gravel { background-image: url(./assets/soil_gravel01.png); } +.block.stone_gravel { background-color: #444; /* background-image: url(./assets/soil_gravel01.png) */; } +.block.stone { background-image: url(./assets/rock.png); } +.block.bedrock { background-image: url(./assets/bedrock.png); } +.block.cave { background-color: #000; } +.block.player { background-image: url(./assets/dwarf.png); } +.block:hover { filter: brightness(1.4); } diff --git a/src/assets/bedrock.png b/src/assets/bedrock.png new file mode 100644 index 0000000..5fccb1a Binary files /dev/null and b/src/assets/bedrock.png differ diff --git a/src/assets/grass01.png b/src/assets/grass01.png new file mode 100644 index 0000000..f2ddc80 Binary files /dev/null and b/src/assets/grass01.png differ diff --git a/src/assets/grass02.png b/src/assets/grass02.png new file mode 100644 index 0000000..30821e3 Binary files /dev/null and b/src/assets/grass02.png differ diff --git a/src/assets/rock.png b/src/assets/rock.png new file mode 100644 index 0000000..ba2d64a Binary files /dev/null and b/src/assets/rock.png differ diff --git a/src/assets/soil01.png b/src/assets/soil01.png new file mode 100644 index 0000000..3675f46 Binary files /dev/null and b/src/assets/soil01.png differ diff --git a/src/assets/soil_gravel01.png b/src/assets/soil_gravel01.png new file mode 100644 index 0000000..5a7b218 Binary files /dev/null and b/src/assets/soil_gravel01.png differ diff --git a/src/assets/tree_crown_left.png b/src/assets/tree_crown_left.png new file mode 100644 index 0000000..7adfe68 Binary files /dev/null and b/src/assets/tree_crown_left.png differ diff --git a/src/assets/tree_crown_left_mixed.png b/src/assets/tree_crown_left_mixed.png new file mode 100644 index 0000000..132d2c0 Binary files /dev/null and b/src/assets/tree_crown_left_mixed.png differ diff --git a/src/assets/tree_crown_middle.png b/src/assets/tree_crown_middle.png new file mode 100644 index 0000000..7f6ffe1 Binary files /dev/null and b/src/assets/tree_crown_middle.png differ diff --git a/src/assets/tree_crown_right.png b/src/assets/tree_crown_right.png new file mode 100644 index 0000000..2378b56 Binary files /dev/null and b/src/assets/tree_crown_right.png differ diff --git a/src/assets/tree_crown_right_mixed.png b/src/assets/tree_crown_right_mixed.png new file mode 100644 index 0000000..bcd1c39 Binary files /dev/null and b/src/assets/tree_crown_right_mixed.png differ diff --git a/src/assets/tree_root_left.png b/src/assets/tree_root_left.png new file mode 100644 index 0000000..f119dde Binary files /dev/null and b/src/assets/tree_root_left.png differ diff --git a/src/assets/tree_root_left_mixed.png b/src/assets/tree_root_left_mixed.png new file mode 100644 index 0000000..c3f16bf Binary files /dev/null and b/src/assets/tree_root_left_mixed.png differ diff --git a/src/assets/tree_root_middle.png b/src/assets/tree_root_middle.png new file mode 100644 index 0000000..5b729b9 Binary files /dev/null and b/src/assets/tree_root_middle.png differ diff --git a/src/assets/tree_root_right.png b/src/assets/tree_root_right.png new file mode 100644 index 0000000..cf85c01 Binary files /dev/null and b/src/assets/tree_root_right.png differ diff --git a/src/assets/tree_root_right_mixed.png b/src/assets/tree_root_right_mixed.png new file mode 100644 index 0000000..8684150 Binary files /dev/null and b/src/assets/tree_root_right_mixed.png differ diff --git a/src/assets/tree_top_left.png b/src/assets/tree_top_left.png new file mode 100644 index 0000000..921beab Binary files /dev/null and b/src/assets/tree_top_left.png differ diff --git a/src/assets/tree_top_left_mixed.png b/src/assets/tree_top_left_mixed.png new file mode 100644 index 0000000..0f17f06 Binary files /dev/null and b/src/assets/tree_top_left_mixed.png differ diff --git a/src/assets/tree_top_middle.png b/src/assets/tree_top_middle.png new file mode 100644 index 0000000..613bffc Binary files /dev/null and b/src/assets/tree_top_middle.png differ diff --git a/src/assets/tree_top_right.png b/src/assets/tree_top_right.png new file mode 100644 index 0000000..3ed3e43 Binary files /dev/null and b/src/assets/tree_top_right.png differ diff --git a/src/assets/tree_top_right_mixed.png b/src/assets/tree_top_right_mixed.png new file mode 100644 index 0000000..52eaea5 Binary files /dev/null and b/src/assets/tree_top_right_mixed.png differ diff --git a/src/assets/tree_trunk_left.png b/src/assets/tree_trunk_left.png new file mode 100644 index 0000000..1ff0bcb Binary files /dev/null and b/src/assets/tree_trunk_left.png differ diff --git a/src/assets/tree_trunk_left_mixed.png b/src/assets/tree_trunk_left_mixed.png new file mode 100644 index 0000000..86f4906 Binary files /dev/null and b/src/assets/tree_trunk_left_mixed.png differ diff --git a/src/assets/tree_trunk_middle.png b/src/assets/tree_trunk_middle.png new file mode 100644 index 0000000..fd4c83a Binary files /dev/null and b/src/assets/tree_trunk_middle.png differ diff --git a/src/assets/tree_trunk_right.png b/src/assets/tree_trunk_right.png new file mode 100644 index 0000000..17eac14 Binary files /dev/null and b/src/assets/tree_trunk_right.png differ diff --git a/src/assets/tree_trunk_right_mixed.png b/src/assets/tree_trunk_right_mixed.png new file mode 100644 index 0000000..26e2ac2 Binary files /dev/null and b/src/assets/tree_trunk_right_mixed.png differ diff --git a/src/level/def.js b/src/level/def.js index f620b28..10c457c 100644 --- a/src/level/def.js +++ b/src/level/def.js @@ -1,10 +1,36 @@ export const type = { air: {type: 'air', hp: 0, walkable: true}, - grass: {type: 'grass', hp: 1, walkable: true}, - leaves: {type: 'leaves', hp: 1, walkable: true}, - wood: {type: 'wood', hp: 5, walkable: true}, + grass: {type: 'grass', hp: 1, walkable: false}, + + tree_top_left: {type: 'tree_top_left', hp: 5, walkable: true}, + tree_top_middle: {type: 'tree_top_middle', hp: 5, walkable: true}, + tree_top_right: {type: 'tree_top_right', hp: 5, walkable: true}, + + tree_crown_left: {type: 'tree_crown_left', hp: 5, walkable: true}, + tree_crown_middle: {type: 'tree_crown_middle', hp: 5, walkable: true}, + tree_crown_right: {type: 'tree_crown_right', hp: 5, walkable: true}, + + tree_trunk_left: {type: 'tree_trunk_left', hp: 5, walkable: true}, + tree_trunk_middle: {type: 'tree_trunk_middle', hp: 5, walkable: true}, + tree_trunk_right: {type: 'tree_trunk_right', hp: 5, walkable: true}, + + tree_root_left: {type: 'tree_root_left', hp: 5, walkable: true}, + tree_root_middle: {type: 'tree_root_middle', hp: 5, walkable: true}, + tree_root_right: {type: 'tree_root_right', hp: 5, walkable: true}, + + tree_top_left_mixed: {type: 'tree_top_left_mixed', hp: 5, walkable: true}, + tree_crown_left_mixed: {type: 'tree_crown_left_mixed', hp: 5, walkable: true}, + tree_trunk_left_mixed: {type: 'tree_trunk_left_mixed', hp: 5, walkable: true}, + tree_root_left_mixed: {type: 'tree_root_left_mixed', hp: 5, walkable: true}, + + tree_top_right_mixed: {type: 'tree_top_right_mixed', hp: 5, walkable: true}, + tree_crown_right_mixed: {type: 'tree_crown_right_mixed', hp: 5, walkable: true}, + tree_trunk_right_mixed: {type: 'tree_trunk_right_mixed', hp: 5, walkable: true}, + tree_root_right_mixed: {type: 'tree_root_right_mixed', hp: 5, walkable: true}, + soil: {type: 'soil', hp: 2, walkable: false}, - gravel: {type: 'gravel', hp: 5, walkable: false}, + soil_gravel: {type: 'soil_gravel', hp: 5, walkable: false}, + stone_gravel: {type: 'stone_gravel', hp: 5, walkable: false}, stone: {type: 'stone', hp: 10, walkable: false}, bedrock: {type: 'bedrock', hp: 25, walkable: false}, cave: {type: 'cave', hp: 0, walkable: true}, @@ -12,7 +38,7 @@ export const type = { } export const level = { - peak: 24, + treeTop: 24, ground: 28, rock: 32, underground: 48, @@ -20,10 +46,10 @@ export const level = { } export const probability = { - tree: 0.1, + tree: 0.2, soil_hole: 0.3, soil_gravel: 0.2, - rock_gravel: 0.1, + stone_gravel: 0.1, cave: 0.5, fray: 0.4 } diff --git a/src/level/first-iteration.js b/src/level/first-iteration.js index 0dd1454..c95ec84 100644 --- a/src/level/first-iteration.js +++ b/src/level/first-iteration.js @@ -17,7 +17,10 @@ export default class BlockGen { if (level < L.peak) return this.air() const r = this.rand(level, column) - if (level < L.ground) return this.treeTop(r) + if (level < L.ground) { + if (level === L.treeTop) return this.treeTop(r) + return this.air() + } if (level < L.rock) return this.ground(r) if (level < L.underground) return this.rock(r) return this.underground(r, above, before, level - L.underground) @@ -30,19 +33,19 @@ export default class BlockGen { // returns mostly air, but sometimes starts a tree treeTop (r) { - if (r < P.tree) return T.wood + if (r < P.tree) return T.tree_top_middle return T.air } // returns mostly soil and grass, sometimes gravel and sometimes air ground (r) { - if (r < P.soil_gravel) return T.gravel + if (r < P.soil_gravel) return T.soil_gravel return T.soil } // returns mostly stones, sometimes gravel rock (r) { - return r < P.rock_gravel ? T.gravel : T.stone + return r < P.stone_gravel ? T.stone_gravel : T.stone } // return mostly bedrock, sometimes caves, depending on the level diff --git a/src/level/second-iteration.js b/src/level/second-iteration.js index e05a4ee..79d81f6 100644 --- a/src/level/second-iteration.js +++ b/src/level/second-iteration.js @@ -17,22 +17,46 @@ export default class BlockExt { } trees (r, i, row, previousRow, level) { - if (row[i] === T.wood && previousRow[i] === T.air) { - if (row[i - 1] === T.air) row[i - 1] = T.leaves - if (row[i + 1] === T.air) row[i + 1] = T.leaves - previousRow[i] = T.leaves - } else if (previousRow[i] === T.wood) { - row[i] = T.wood - if (row[i - 1] === T.wood) row[i - 1] = T.air + const max = row.length - 1 + + if (row[i] === T.tree_top_middle) { + if (i) { + if (row[i - 1] === T.tree_top_right) row[i - 1] = T.tree_top_left_mixed + else row[i - 1] = T.tree_top_left + } + if (i < max) row[i + 1] = T.tree_top_right + + } else if (previousRow[i] === T.tree_top_middle) { + row[i] = T.tree_crown_middle + if (i) { + if (row[i - 1] === T.tree_crown_right) row[i - 1] = T.tree_crown_left_mixed + else row[i - 1] = T.tree_crown_left + } + if (i < max) row[i + 1] = T.tree_crown_right + } else if (previousRow[i] === T.tree_crown_middle) { + row[i] = T.tree_trunk_middle + if (i) { + if (row[i - 1] === T.tree_trunk_right) row[i - 1] = T.tree_trunk_left_mixed + else row[i - 1] = T.tree_trunk_left + } + if (i < max) row[i + 1] = T.tree_trunk_right + } else if (previousRow[i] === T.tree_trunk_middle) { + row[i] = T.tree_root_middle + if (i) { + if (row[i - 1] === T.tree_root_right) row[i - 1] = T.tree_root_left_mixed + else row[i - 1] = T.tree_root_left + } + if (i < max) row[i + 1] = T.tree_root_right } } ground (r, i, row, previousRow) { + const tree_parts = [T.tree_root_left, T.tree_root_middle, T.tree_root_right] if (previousRow[i] === T.air) { if (r < P.soil_hole) row[i] = T.air if (row[i] === T.soil) row[i] = T.grass - } else if (previousRow[i] === T.wood && row[i - 1] === T.grass) { - row[i] = T.wood + } else if (tree_parts.indexOf(previousRow[i]) >= 0) { + if (row[i] === T.soil) row[i] = T.grass } }