15 Commits

14 changed files with 574 additions and 408 deletions

View File

@ -2,20 +2,8 @@ language: cpp
compiler: compiler:
- gcc - gcc
- clang - clang
sudo: false dist: bionic
dist: trusty before_install: sudo apt-get install -y cmake libgd-dev libsqlite3-dev libleveldb-dev
addons:
apt:
sources:
- llvm-toolchain-trusty-5.0
- ubuntu-toolchain-r-test
packages:
- cmake
- libgd2-dev
- libsqlite3-dev
- libleveldb-dev
- g++-7
- clang-5.0
script: ./util/travis/script.sh script: ./util/travis/script.sh
notifications: notifications:
email: false email: false

View File

@ -19,7 +19,7 @@
static inline int color2int(Color c) static inline int color2int(Color c)
{ {
u8 a = 255 - c.a; u8 a = (255 - c.a) * gdAlphaMax / 255;
return (a << 24) | (c.r << 16) | (c.g << 8) | c.b; return (a << 24) | (c.r << 16) | (c.g << 8) | c.b;
} }
@ -31,7 +31,7 @@ static inline Color int2color(int c)
c2.g = (c >> 8) & 0xff; c2.g = (c >> 8) & 0xff;
c2.r = (c >> 16) & 0xff; c2.r = (c >> 16) & 0xff;
a = (c >> 24) & 0xff; a = (c >> 24) & 0xff;
c2.a = 255 - a; c2.a = 255 - (a*255 / gdAlphaMax);
return c2; return c2;
} }

View File

@ -77,9 +77,15 @@ draworigin:
drawalpha: drawalpha:
Allow nodes to be drawn with transparency (e.g. water), ``--drawalpha`` Allow nodes to be drawn with transparency (e.g. water), ``--drawalpha``
extent:
Don't output any imagery, just print the extent of the full map, ``--extent``
noshading: noshading:
Don't draw shading on nodes, ``--noshading`` Don't draw shading on nodes, ``--noshading``
noemptyimage:
Don't output anything when the image would be empty, ``--noemptyimage``
min-y: min-y:
Don't draw nodes below this y value, e.g. ``--min-y -25`` Don't draw nodes below this y value, e.g. ``--min-y -25``

View File

@ -79,6 +79,7 @@ TileGenerator::TileGenerator():
m_drawScale(false), m_drawScale(false),
m_drawAlpha(false), m_drawAlpha(false),
m_shading(true), m_shading(true),
m_dontWriteEmpty(false),
m_backend(""), m_backend(""),
m_xBorder(0), m_xBorder(0),
m_yBorder(0), m_yBorder(0),
@ -208,6 +209,31 @@ void TileGenerator::parseColorsFile(const std::string &fileName)
parseColorsStream(in); parseColorsStream(in);
} }
void TileGenerator::printGeometry(const std::string &input)
{
string input_path = input;
if (input_path[input.length() - 1] != PATH_SEPARATOR) {
input_path += PATH_SEPARATOR;
}
openDb(input_path);
loadBlocks();
std::cout << "Map extent: "
<< m_xMin*16 << ":" << m_zMin*16
<< "+" << (m_xMax - m_xMin+1)*16
<< "+" << (m_zMax - m_zMin+1)*16
<< std::endl;
closeDatabase();
}
void TileGenerator::setDontWriteEmpty(bool f)
{
m_dontWriteEmpty = f;
}
void TileGenerator::generate(const std::string &input, const std::string &output) void TileGenerator::generate(const std::string &input, const std::string &output)
{ {
string input_path = input; string input_path = input;
@ -217,6 +243,13 @@ void TileGenerator::generate(const std::string &input, const std::string &output
openDb(input_path); openDb(input_path);
loadBlocks(); loadBlocks();
if (m_dontWriteEmpty && ! m_positions.size())
{
closeDatabase();
return;
}
createImage(); createImage();
renderMap(); renderMap();
closeDatabase(); closeDatabase();
@ -248,7 +281,7 @@ void TileGenerator::parseColorsStream(std::istream &in)
if(strlen(line) == 0) if(strlen(line) == 0)
continue; continue;
char name[64]; char name[64 + 1];
unsigned int r, g, b, a, t; unsigned int r, g, b, a, t;
a = 255; a = 255;
t = 0; t = 0;
@ -331,8 +364,25 @@ void TileGenerator::createImage()
if(!m_drawScale) if(!m_drawScale)
m_scales = 0; m_scales = 0;
// If a geometry is explicitly set, set the bounding box to the requested geometry
// instead of cropping to the content. This way we will always output a full tile
// of the correct size.
if (m_geomX > -2048 && m_geomX2 < 2048)
{
m_xMin = m_geomX;
m_xMax = m_geomX2-1;
}
if (m_geomY > -2048 && m_geomY2 < 2048)
{
m_zMin = m_geomY;
m_zMax = m_geomY2-1;
}
m_mapWidth = (m_xMax - m_xMin + 1) * 16; m_mapWidth = (m_xMax - m_xMin + 1) * 16;
m_mapHeight = (m_zMax - m_zMin + 1) * 16; m_mapHeight = (m_zMax - m_zMin + 1) * 16;
m_xBorder = (m_scales & SCALE_LEFT) ? scale_d : 0; m_xBorder = (m_scales & SCALE_LEFT) ? scale_d : 0;
m_yBorder = (m_scales & SCALE_TOP) ? scale_d : 0; m_yBorder = (m_scales & SCALE_TOP) ? scale_d : 0;
m_blockPixelAttributes.setWidth(m_mapWidth); m_blockPixelAttributes.setWidth(m_mapWidth);
@ -515,7 +565,7 @@ void TileGenerator::renderScale()
if (m_scales & SCALE_TOP) { if (m_scales & SCALE_TOP) {
m_image->drawText(24, 0, "X", m_scaleColor); m_image->drawText(24, 0, "X", m_scaleColor);
for (int i = (m_xMin / 4) * 4; i <= m_xMax; i += 4) { for (int i = (m_xMin / 4) * 4; i <= m_xMax; i += 4) {
stringstream buf; std::ostringstream buf;
buf << i * 16; buf << i * 16;
int xPos = getImageX(i * 16, true); int xPos = getImageX(i * 16, true);
@ -529,7 +579,7 @@ void TileGenerator::renderScale()
if (m_scales & SCALE_LEFT) { if (m_scales & SCALE_LEFT) {
m_image->drawText(2, 24, "Z", m_scaleColor); m_image->drawText(2, 24, "Z", m_scaleColor);
for (int i = (m_zMax / 4) * 4; i >= m_zMin; i -= 4) { for (int i = (m_zMax / 4) * 4; i >= m_zMin; i -= 4) {
stringstream buf; std::ostringstream buf;
buf << i * 16; buf << i * 16;
int yPos = getImageY(i * 16 + 1, true); int yPos = getImageY(i * 16 + 1, true);
@ -545,7 +595,7 @@ void TileGenerator::renderScale()
yPos = m_yBorder + m_mapHeight*m_zoom + scale_d - 12; yPos = m_yBorder + m_mapHeight*m_zoom + scale_d - 12;
m_image->drawText(xPos, yPos, "X", m_scaleColor); m_image->drawText(xPos, yPos, "X", m_scaleColor);
for (int i = (m_xMin / 4) * 4; i <= m_xMax; i += 4) { for (int i = (m_xMin / 4) * 4; i <= m_xMax; i += 4) {
stringstream buf; std::ostringstream buf;
buf << i * 16; buf << i * 16;
xPos = getImageX(i * 16, true); xPos = getImageX(i * 16, true);
@ -562,7 +612,7 @@ void TileGenerator::renderScale()
yPos = m_yBorder + m_mapHeight*m_zoom - 24 - 12; yPos = m_yBorder + m_mapHeight*m_zoom - 24 - 12;
m_image->drawText(xPos, yPos, "Z", m_scaleColor); m_image->drawText(xPos, yPos, "Z", m_scaleColor);
for (int i = (m_zMax / 4) * 4; i >= m_zMin; i -= 4) { for (int i = (m_zMax / 4) * 4; i >= m_zMin; i -= 4) {
stringstream buf; std::ostringstream buf;
buf << i * 16; buf << i * 16;
xPos = m_xBorder + m_mapWidth*m_zoom; xPos = m_xBorder + m_mapWidth*m_zoom;

View File

@ -65,11 +65,9 @@ minetest.register_chatcommand("dumpnodes", {
==FILE== avgcolor.py ==FILE== avgcolor.py
#!/usr/bin/env python #!/usr/bin/env python
import sys import sys
from math import sqrt
from PIL import Image from PIL import Image
def tadd(a, b):
return tuple(sum(e) for e in zip(a, b))
if len(sys.argv) < 2: if len(sys.argv) < 2:
print("Prints average color (RGB) of input image") print("Prints average color (RGB) of input image")
print("Usage: %s <input>" % sys.argv[0]) print("Usage: %s <input>" % sys.argv[0])
@ -78,20 +76,20 @@ if len(sys.argv) < 2:
inp = Image.open(sys.argv[1]).convert('RGBA') inp = Image.open(sys.argv[1]).convert('RGBA')
ind = inp.load() ind = inp.load()
cl = (0, 0, 0) cl = ([], [], [])
counted = 0
for x in range(inp.size[0]): for x in range(inp.size[0]):
for y in range(inp.size[1]): for y in range(inp.size[1]):
px = ind[x, y] px = ind[x, y]
if px[3] < 128: continue # alpha if px[3] < 128: continue # alpha
cl = tadd(cl, px[:3]) cl[0].append(px[0]**2)
counted += 1 cl[1].append(px[1]**2)
cl[2].append(px[2]**2)
if counted == 0: if len(cl[0]) == 0:
sys.stderr.write("did not find avg color for %s\n" % sys.argv[1]) print("Didn't find average color for %s" % sys.argv[1], file=sys.stderr)
print("0 0 0") print("0 0 0")
else: else:
cl = tuple(int(n / counted) for n in cl) cl = tuple(sqrt(sum(x)/len(x)) for x in cl)
print("%d %d %d" % cl) print("%d %d %d" % cl)
==SCRIPT== ==SCRIPT==
#!/bin/bash -e #!/bin/bash -e
@ -125,6 +123,7 @@ sed -re 's/^xpanes:(.*(pane|bar)[^ ]*) ([0-9 ]+)$/xpanes:\1 \3 64 16/g' $COLORST
# Delete some usually hidden nodes: # Delete some usually hidden nodes:
sed '/^doors:hidden /d' $COLORSTXT_PATH -i sed '/^doors:hidden /d' $COLORSTXT_PATH -i
sed '/^fireflies:firefly /d' $COLORSTXT_PATH -i sed '/^fireflies:firefly /d' $COLORSTXT_PATH -i
sed '/^butterflies:butterfly_/d' $COLORSTXT_PATH -i
==INSTRUCTIONS== ==INSTRUCTIONS==
1) Make sure avgcolors.py works (outputs the usage instructions when run) 1) Make sure avgcolors.py works (outputs the usage instructions when run)
2) Add the dumpnodes mod to Minetest 2) Add the dumpnodes mod to Minetest

View File

@ -1,137 +1,159 @@
# beds # beds
beds:bed_bottom 130 3 3 beds:bed_bottom 130 3 3
beds:bed_top 178 116 116 beds:bed_top 185 162 163
beds:fancy_bed_bottom 135 23 14 beds:fancy_bed_bottom 136 49 28
beds:fancy_bed_top 172 112 103 beds:fancy_bed_top 179 153 148
# bones # bones
bones:bones 86 86 86 bones:bones 117 117 117
# butterflies
# carts # carts
carts:brakerail 129 110 81 carts:brakerail 138 121 102
carts:powerrail 154 136 81 carts:powerrail 160 145 102
carts:rail 143 123 90 carts:rail 146 128 108
# default # default
default:acacia_bush_leaves 90 124 55 default:acacia_bush_leaves 109 133 87
default:acacia_bush_sapling 85 118 58 default:acacia_bush_sapling 85 121 61
default:acacia_bush_stem 84 76 69 default:acacia_bush_stem 84 77 70
default:acacia_leaves 108 147 67 default:acacia_leaves 126 153 101
default:acacia_sapling 87 116 61 default:acacia_sapling 87 120 64
default:acacia_tree 188 109 90 default:acacia_tree 195 119 97
default:acacia_wood 146 60 37 default:acacia_wood 150 61 39
default:apple 145 20 9 default:apple 161 34 19
default:aspen_leaves 70 104 27 default:aspen_leaves 72 105 29
default:aspen_sapling 82 110 43 default:aspen_sapling 85 123 45
default:aspen_tree 218 197 166 default:aspen_tree 218 198 168
default:aspen_wood 209 198 169 default:aspen_wood 210 199 170
default:bookshelf 128 99 55 default:blueberry_bush_leaves 63 99 22
default:brick 117 71 69 default:blueberry_bush_leaves_with_berries 63 99 22
default:bronzeblock 185 110 15 default:blueberry_bush_sapling 81 112 33
default:bush_leaves 34 52 29 default:bookshelf 131 102 57
default:bush_sapling 65 60 40 default:brick 123 99 95
default:bush_stem 45 33 23 default:bronzeblock 186 111 15
default:cactus 52 116 15 default:bush_leaves 35 55 29
default:cave_ice 167 206 247 default:bush_sapling 66 64 40
default:chest 140 108 65 default:bush_stem 46 34 24
default:chest_locked 140 108 65 default:cactus 70 119 52
default:chest_locked_open 140 108 65 default:cave_ice 168 206 247
default:chest_open 140 108 65 default:chest 149 115 69
default:clay 182 182 182 default:chest_locked 149 115 69
default:chest_locked_open 149 115 69
default:chest_open 149 115 69
default:clay 183 183 183
default:cloud 255 255 255 default:cloud 255 255 255
default:coalblock 57 57 57 default:coalblock 58 58 58
default:cobble 88 84 82 default:cobble 89 86 84
default:copperblock 192 126 63 default:copperblock 193 126 65
default:coral_brown 139 104 72 default:coral_brown 146 113 77
default:coral_orange 191 62 12 default:coral_cyan 235 230 215
default:coral_skeleton 235 230 214 default:coral_green 235 230 215
default:desert_cobble 107 65 49 default:coral_orange 197 68 17
default:coral_pink 235 230 215
default:coral_skeleton 235 230 215
default:desert_cobble 110 67 50
default:desert_sand 206 165 98 default:desert_sand 206 165 98
default:desert_sandstone 195 152 92 default:desert_sandstone 195 152 92
default:desert_sandstone_block 192 151 94 default:desert_sandstone_block 193 152 94
default:desert_sandstone_brick 191 151 94 default:desert_sandstone_brick 191 151 95
default:desert_stone 129 79 60 default:desert_stone 130 79 61
default:desert_stone_block 130 79 60 default:desert_stone_block 131 80 61
default:desert_stonebrick 129 79 60 default:desert_stonebrick 131 80 61
default:diamondblock 135 217 223 default:diamondblock 140 218 223
default:dirt 95 64 39 default:dirt 97 67 43
default:dirt_with_coniferous_litter 107 88 68 default:dirt_with_coniferous_litter 109 90 71
default:dirt_with_dry_grass 187 148 77 default:dirt_with_dry_grass 187 148 78
default:dirt_with_grass 66 112 31 default:dirt_with_grass 64 111 26
default:dirt_with_grass_footsteps 66 112 31 default:dirt_with_grass_footsteps 64 111 26
default:dirt_with_rainforest_litter 74 38 8 default:dirt_with_rainforest_litter 76 39 10
default:dirt_with_snow 224 225 238 default:dirt_with_snow 225 225 238
default:dry_dirt 178 136 90
default:dry_dirt_with_dry_grass 187 148 78
default:dry_grass_1 208 172 87 default:dry_grass_1 208 172 87
default:dry_grass_2 210 174 87 default:dry_grass_2 210 174 87
default:dry_grass_3 210 174 87 default:dry_grass_3 210 174 87
default:dry_grass_4 211 175 88 default:dry_grass_4 211 175 88
default:dry_grass_5 213 178 92 default:dry_grass_5 214 178 92
default:dry_shrub 101 66 17 default:dry_shrub 103 67 18
default:emergent_jungle_sapling 48 39 15 default:emergent_jungle_sapling 51 40 16
default:fence_acacia_wood 147 60 38 default:fence_acacia_wood 151 62 39
default:fence_aspen_wood 210 199 170 default:fence_aspen_wood 210 199 170
default:fence_junglewood 54 37 11 default:fence_junglewood 57 39 14
default:fence_pine_wood 221 184 129 default:fence_pine_wood 221 185 131
default:fence_wood 129 100 55 default:fence_rail_acacia_wood 150 61 39
default:fern_1 81 114 48 default:fence_rail_aspen_wood 209 198 170
default:fern_2 86 118 50 default:fence_rail_junglewood 56 39 14
default:fern_3 88 121 52 default:fence_rail_pine_wood 221 184 130
default:furnace 100 96 94 default:fence_rail_wood 131 102 57
default:furnace_active 100 96 94 default:fence_wood 132 103 57
default:glass 194 194 227 64 16 default:fern_1 85 118 51
default:goldblock 230 201 29 default:fern_2 90 123 53
default:grass_1 97 138 53 default:fern_3 91 125 54
default:grass_2 95 136 54 default:furnace 101 98 96
default:grass_3 91 133 52 default:furnace_active 101 98 96
default:grass_4 86 130 45 default:glass 247 247 247 64 16
default:grass_5 83 124 47 default:goldblock 231 203 35
default:gravel 131 131 131 default:grass_1 100 140 54
default:ice 167 206 247 default:grass_2 98 139 55
default:junglegrass 63 105 25 default:grass_3 94 136 53
default:jungleleaves 20 28 15 default:grass_4 89 133 48
default:junglesapling 48 38 14 default:grass_5 86 126 48
default:jungletree 105 76 41 default:gravel 132 132 132
default:junglewood 54 37 11 default:ice 168 206 247
default:ladder_steel 126 126 126 default:junglegrass 67 110 28
default:ladder_wood 123 90 34 default:jungleleaves 22 31 16
default:junglesapling 51 39 15
default:jungletree 121 97 62
default:junglewood 56 39 14
default:ladder_steel 132 132 132
default:ladder_wood 125 93 43
default:large_cactus_seedling 67 107 52
default:lava_flowing 255 100 0 default:lava_flowing 255 100 0
default:lava_source 255 100 0 default:lava_source 255 100 0
default:leaves 34 52 29 default:leaves 36 55 29
default:marram_grass_1 96 133 89 default:marram_grass_1 113 139 96
default:marram_grass_2 87 126 83 default:marram_grass_2 102 131 90
default:marram_grass_3 85 125 82 default:marram_grass_3 99 130 88
default:mese 220 220 0 default:mese 222 222 0
default:mese_post_light 131 102 57 default:mese_post_light 134 105 59
default:meselamp 211 213 139 default:meselamp 213 215 143
default:mossycobble 86 90 68 default:mossycobble 88 91 73
default:obsidian 19 21 24 default:obsidian 21 24 29
default:obsidian_block 20 22 25 default:obsidian_block 23 25 30
default:obsidian_glass 19 21 23 64 16 default:obsidian_glass 20 23 27 64 16
default:obsidianbrick 20 22 24 default:obsidianbrick 23 25 29
default:papyrus 94 132 33 default:papyrus 97 134 38
default:pine_needles 11 48 18 default:permafrost 71 66 61
default:pine_sapling 27 48 25 default:permafrost_with_moss 108 150 51
default:pine_tree 182 155 124 default:permafrost_with_stones 71 66 61
default:pine_wood 221 184 128 default:pine_bush_needles 16 50 19
default:pine_bush_sapling 58 51 40
default:pine_bush_stem 73 62 53
default:pine_needles 16 50 19
default:pine_sapling 41 48 26
default:pine_tree 191 165 132
default:pine_wood 221 185 130
default:river_water_flowing 39 66 106 128 224 default:river_water_flowing 39 66 106 128 224
default:river_water_source 39 66 106 128 224 default:river_water_source 39 66 106 128 224
default:sand 214 207 158 default:sand 214 207 158
default:sand_with_kelp 214 207 158 default:sand_with_kelp 214 207 158
default:sandstone 197 193 143 default:sandstone 198 193 143
default:sandstone_block 195 190 141 default:sandstone_block 195 191 142
default:sandstonebrick 193 189 140 default:sandstonebrick 194 190 141
default:sapling 65 59 40 default:sapling 67 63 41
default:sign_wall_steel 144 144 144 default:sign_wall_steel 147 147 147
default:sign_wall_wood 145 101 64 default:sign_wall_wood 148 103 66
default:silver_sand 193 191 179 default:silver_sand 193 191 179
default:silver_sandstone 195 192 181 default:silver_sandstone 195 192 181
default:silver_sandstone_block 192 190 179 default:silver_sandstone_block 192 190 180
default:silver_sandstone_brick 190 188 178 default:silver_sandstone_brick 191 189 179
default:snow 224 225 238 default:snow 225 225 238
default:snowblock 224 225 238 default:snowblock 225 225 238
default:steelblock 194 194 194 default:steelblock 195 195 195
default:stone 97 94 93 default:stone 97 94 93
default:stone_block 99 96 95 default:stone_block 100 97 96
default:stone_with_coal 97 94 93 default:stone_with_coal 97 94 93
default:stone_with_copper 97 94 93 default:stone_with_copper 97 94 93
default:stone_with_diamond 97 94 93 default:stone_with_diamond 97 94 93
@ -139,266 +161,281 @@ default:stone_with_gold 97 94 93
default:stone_with_iron 97 94 93 default:stone_with_iron 97 94 93
default:stone_with_mese 97 94 93 default:stone_with_mese 97 94 93
default:stone_with_tin 97 94 93 default:stone_with_tin 97 94 93
default:stonebrick 99 96 95 default:stonebrick 102 99 98
default:tinblock 149 149 149 default:tinblock 150 150 150
default:torch 120 98 67 default:torch 141 123 93
default:torch_ceiling 120 98 67 default:torch_ceiling 141 123 93
default:torch_wall 120 98 67 default:torch_wall 141 123 93
default:tree 164 131 88 default:tree 179 145 99
default:water_flowing 39 66 106 128 224 default:water_flowing 39 66 106 128 224
default:water_source 39 66 106 128 224 default:water_source 39 66 106 128 224
default:wood 128 99 55 default:wood 131 102 57
# doors # doors
doors:door_glass_a 184 184 216 64 16 doors:door_glass_a 245 245 245 64 16
doors:door_glass_b 184 184 216 64 16 doors:door_glass_b 245 245 245 64 16
doors:door_obsidian_glass_a 27 28 29 64 16 doors:door_obsidian_glass_a 48 49 50 64 16
doors:door_obsidian_glass_b 27 28 29 64 16 doors:door_obsidian_glass_b 48 49 50 64 16
doors:door_steel_a 201 201 201 doors:door_steel_a 203 203 203
doors:door_steel_b 201 201 201 doors:door_steel_b 203 203 203
doors:door_wood_a 87 67 35 doors:door_wood_a 89 68 37
doors:door_wood_b 87 67 35 doors:door_wood_b 89 68 37
doors:gate_acacia_wood_closed 146 60 37 doors:gate_acacia_wood_closed 150 61 39
doors:gate_acacia_wood_open 146 60 37 doors:gate_acacia_wood_open 150 61 39
doors:gate_aspen_wood_closed 209 198 169 doors:gate_aspen_wood_closed 210 199 170
doors:gate_aspen_wood_open 209 198 169 doors:gate_aspen_wood_open 210 199 170
doors:gate_junglewood_closed 54 37 11 doors:gate_junglewood_closed 56 39 14
doors:gate_junglewood_open 54 37 11 doors:gate_junglewood_open 56 39 14
doors:gate_pine_wood_closed 221 184 128 doors:gate_pine_wood_closed 221 185 130
doors:gate_pine_wood_open 221 184 128 doors:gate_pine_wood_open 221 185 130
doors:gate_wood_closed 128 99 55 doors:gate_wood_closed 131 102 57
doors:gate_wood_open 128 99 55 doors:gate_wood_open 131 102 57
doors:trapdoor 128 99 50 doors:trapdoor 130 100 51
doors:trapdoor_open 136 106 59 doors:trapdoor_open 68 53 30
doors:trapdoor_steel 199 199 199 doors:trapdoor_steel 200 200 200
doors:trapdoor_steel_open 206 206 206 doors:trapdoor_steel_open 97 97 97
# farming # farming
farming:cotton_1 88 116 39 farming:cotton_1 89 117 39
farming:cotton_2 87 116 38 farming:cotton_2 89 116 38
farming:cotton_3 97 120 41 farming:cotton_3 99 121 41
farming:cotton_4 106 113 47 farming:cotton_4 108 114 47
farming:cotton_5 114 104 53 farming:cotton_5 116 105 53
farming:cotton_6 119 94 59 farming:cotton_6 121 95 59
farming:cotton_7 92 69 37 farming:cotton_7 94 70 37
farming:cotton_8 110 91 61 farming:cotton_8 122 108 93
farming:desert_sand_soil 159 131 70 farming:desert_sand_soil 161 132 72
farming:desert_sand_soil_wet 119 98 52 farming:desert_sand_soil_wet 120 99 53
farming:seed_cotton 90 85 57 farming:dry_soil 178 136 90
farming:seed_wheat 175 159 93 farming:dry_soil_wet 178 136 90
farming:soil 95 64 39 farming:seed_cotton 92 87 60
farming:soil_wet 95 64 39 farming:seed_wheat 177 161 96
farming:straw 211 182 67 farming:soil 97 67 43
farming:wheat_1 107 174 32 farming:soil_wet 97 67 43
farming:wheat_2 133 175 50 farming:straw 212 184 68
farming:wheat_3 162 182 82 farming:wheat_1 110 175 36
farming:wheat_4 169 187 93 farming:wheat_2 136 177 53
farming:wheat_5 169 178 94 farming:wheat_3 163 182 84
farming:wheat_6 172 176 85 farming:wheat_4 170 188 95
farming:wheat_7 192 181 81 farming:wheat_5 171 179 97
farming:wheat_8 186 161 35 farming:wheat_6 173 177 87
farming:wheat_7 193 181 83
farming:wheat_8 187 162 40
# fire # fire
fire:basic_flame 218 120 36 fire:basic_flame 223 136 44
fire:permanent_flame 218 120 36 fire:permanent_flame 223 136 44
# fireflies # fireflies
fireflies:firefly_bottle 190 191 198 fireflies:firefly_bottle 191 194 202
# flowers # flowers
flowers:chrysanthemum_green 101 140 39 flowers:chrysanthemum_green 118 152 44
flowers:dandelion_white 178 176 140 flowers:dandelion_white 199 191 176
flowers:dandelion_yellow 194 159 17 flowers:dandelion_yellow 212 167 31
flowers:geranium 72 87 155 flowers:geranium 77 91 168
flowers:mushroom_brown 106 79 72 flowers:mushroom_brown 109 84 78
flowers:mushroom_red 192 85 85 flowers:mushroom_red 195 102 102
flowers:rose 118 48 24 flowers:rose 130 68 33
flowers:tulip 130 99 36 flowers:tulip 156 101 44
flowers:tulip_black 72 103 63 flowers:tulip_black 78 120 72
flowers:viola 106 60 159 flowers:viola 115 69 184
flowers:waterlily 102 158 61 flowers:waterlily 107 160 68
flowers:waterlily_waving 107 160 68
# stairs # stairs
stairs:slab_acacia_wood 146 60 37 stairs:slab_acacia_wood 150 61 39
stairs:slab_aspen_wood 209 198 169 stairs:slab_aspen_wood 210 199 170
stairs:slab_brick 117 71 69 stairs:slab_brick 123 99 95
stairs:slab_bronzeblock 185 110 15 stairs:slab_bronzeblock 186 111 15
stairs:slab_cobble 88 84 82 stairs:slab_cobble 89 86 84
stairs:slab_copperblock 192 126 63 stairs:slab_copperblock 193 126 65
stairs:slab_desert_cobble 107 65 49 stairs:slab_desert_cobble 110 67 50
stairs:slab_desert_sandstone 195 152 92 stairs:slab_desert_sandstone 195 152 92
stairs:slab_desert_sandstone_block 192 151 94 stairs:slab_desert_sandstone_block 193 152 94
stairs:slab_desert_sandstone_brick 191 151 94 stairs:slab_desert_sandstone_brick 191 151 95
stairs:slab_desert_stone 129 79 60 stairs:slab_desert_stone 130 79 61
stairs:slab_desert_stone_block 130 79 60 stairs:slab_desert_stone_block 131 80 61
stairs:slab_desert_stonebrick 129 79 60 stairs:slab_desert_stonebrick 131 80 61
stairs:slab_goldblock 230 201 29 stairs:slab_glass 247 247 247
stairs:slab_ice 167 206 247 stairs:slab_goldblock 231 203 35
stairs:slab_junglewood 54 37 11 stairs:slab_ice 168 206 247
stairs:slab_mossycobble 86 90 68 stairs:slab_junglewood 56 39 14
stairs:slab_obsidian 19 21 24 stairs:slab_mossycobble 88 91 73
stairs:slab_obsidian_block 20 22 25 stairs:slab_obsidian 21 24 29
stairs:slab_obsidianbrick 20 22 24 stairs:slab_obsidian_block 23 25 30
stairs:slab_pine_wood 221 184 128 stairs:slab_obsidian_glass 20 23 27
stairs:slab_sandstone 197 193 143 stairs:slab_obsidianbrick 23 25 29
stairs:slab_sandstone_block 195 190 141 stairs:slab_pine_wood 221 185 130
stairs:slab_sandstonebrick 193 189 140 stairs:slab_sandstone 198 193 143
stairs:slab_sandstone_block 195 191 142
stairs:slab_sandstonebrick 194 190 141
stairs:slab_silver_sandstone 195 192 181 stairs:slab_silver_sandstone 195 192 181
stairs:slab_silver_sandstone_block 192 190 179 stairs:slab_silver_sandstone_block 192 190 180
stairs:slab_silver_sandstone_brick 190 188 178 stairs:slab_silver_sandstone_brick 191 189 179
stairs:slab_snowblock 224 225 238 stairs:slab_snowblock 225 225 238
stairs:slab_steelblock 194 194 194 stairs:slab_steelblock 195 195 195
stairs:slab_stone 97 94 93 stairs:slab_stone 97 94 93
stairs:slab_stone_block 99 96 95 stairs:slab_stone_block 100 97 96
stairs:slab_stonebrick 99 96 95 stairs:slab_stonebrick 102 99 98
stairs:slab_straw 211 182 67 stairs:slab_straw 212 184 68
stairs:slab_tinblock 149 149 149 stairs:slab_tinblock 150 150 150
stairs:slab_wood 128 99 55 stairs:slab_wood 131 102 57
stairs:stair_acacia_wood 146 60 37 stairs:stair_acacia_wood 150 61 39
stairs:stair_aspen_wood 209 198 169 stairs:stair_aspen_wood 210 199 170
stairs:stair_brick 117 71 69 stairs:stair_brick 123 99 95
stairs:stair_bronzeblock 185 110 15 stairs:stair_bronzeblock 186 111 15
stairs:stair_cobble 88 84 82 stairs:stair_cobble 89 86 84
stairs:stair_copperblock 192 126 63 stairs:stair_copperblock 193 126 65
stairs:stair_desert_cobble 107 65 49 stairs:stair_desert_cobble 110 67 50
stairs:stair_desert_sandstone 195 152 92 stairs:stair_desert_sandstone 195 152 92
stairs:stair_desert_sandstone_block 192 151 94 stairs:stair_desert_sandstone_block 193 152 94
stairs:stair_desert_sandstone_brick 191 151 94 stairs:stair_desert_sandstone_brick 191 151 95
stairs:stair_desert_stone 129 79 60 stairs:stair_desert_stone 130 79 61
stairs:stair_desert_stone_block 130 79 60 stairs:stair_desert_stone_block 131 80 61
stairs:stair_desert_stonebrick 129 79 60 stairs:stair_desert_stonebrick 131 80 61
stairs:stair_goldblock 230 201 29 stairs:stair_glass 249 249 249
stairs:stair_ice 167 206 247 stairs:stair_goldblock 231 203 35
stairs:stair_inner_acacia_wood 146 60 37 stairs:stair_ice 168 206 247
stairs:stair_inner_aspen_wood 209 198 169 stairs:stair_inner_acacia_wood 150 61 39
stairs:stair_inner_brick 117 71 69 stairs:stair_inner_aspen_wood 210 199 170
stairs:stair_inner_bronzeblock 185 110 15 stairs:stair_inner_brick 123 99 95
stairs:stair_inner_cobble 88 84 82 stairs:stair_inner_bronzeblock 186 111 15
stairs:stair_inner_copperblock 192 126 63 stairs:stair_inner_cobble 89 86 84
stairs:stair_inner_desert_cobble 107 65 49 stairs:stair_inner_copperblock 193 126 65
stairs:stair_inner_desert_cobble 110 67 50
stairs:stair_inner_desert_sandstone 195 152 92 stairs:stair_inner_desert_sandstone 195 152 92
stairs:stair_inner_desert_sandstone_block 192 151 94 stairs:stair_inner_desert_sandstone_block 193 152 94
stairs:stair_inner_desert_sandstone_brick 191 151 94 stairs:stair_inner_desert_sandstone_brick 191 151 95
stairs:stair_inner_desert_stone 129 79 60 stairs:stair_inner_desert_stone 130 79 61
stairs:stair_inner_desert_stone_block 130 79 60 stairs:stair_inner_desert_stone_block 131 80 61
stairs:stair_inner_desert_stonebrick 129 79 60 stairs:stair_inner_desert_stonebrick 131 80 61
stairs:stair_inner_goldblock 230 201 29 stairs:stair_inner_glass 250 250 250
stairs:stair_inner_ice 167 206 247 stairs:stair_inner_goldblock 231 203 35
stairs:stair_inner_junglewood 54 37 11 stairs:stair_inner_ice 168 206 247
stairs:stair_inner_mossycobble 86 90 68 stairs:stair_inner_junglewood 56 39 14
stairs:stair_inner_obsidian 19 21 24 stairs:stair_inner_mossycobble 88 91 73
stairs:stair_inner_obsidian_block 20 22 25 stairs:stair_inner_obsidian 21 24 29
stairs:stair_inner_obsidianbrick 20 22 24 stairs:stair_inner_obsidian_block 23 25 30
stairs:stair_inner_pine_wood 221 184 128 stairs:stair_inner_obsidian_glass 20 22 27
stairs:stair_inner_sandstone 197 193 143 stairs:stair_inner_obsidianbrick 23 25 29
stairs:stair_inner_sandstone_block 195 190 141 stairs:stair_inner_pine_wood 221 185 130
stairs:stair_inner_sandstonebrick 193 189 140 stairs:stair_inner_sandstone 198 193 143
stairs:stair_inner_sandstone_block 195 191 142
stairs:stair_inner_sandstonebrick 194 190 141
stairs:stair_inner_silver_sandstone 195 192 181 stairs:stair_inner_silver_sandstone 195 192 181
stairs:stair_inner_silver_sandstone_block 192 190 179 stairs:stair_inner_silver_sandstone_block 192 190 180
stairs:stair_inner_silver_sandstone_brick 190 188 178 stairs:stair_inner_silver_sandstone_brick 191 189 179
stairs:stair_inner_snowblock 224 225 238 stairs:stair_inner_snowblock 225 225 238
stairs:stair_inner_steelblock 194 194 194 stairs:stair_inner_steelblock 195 195 195
stairs:stair_inner_stone 97 94 93 stairs:stair_inner_stone 97 94 93
stairs:stair_inner_stone_block 99 96 95 stairs:stair_inner_stone_block 100 97 96
stairs:stair_inner_stonebrick 99 96 95 stairs:stair_inner_stonebrick 102 99 98
stairs:stair_inner_straw 211 182 67 stairs:stair_inner_straw 212 184 68
stairs:stair_inner_tinblock 149 149 149 stairs:stair_inner_tinblock 150 150 150
stairs:stair_inner_wood 128 99 55 stairs:stair_inner_wood 131 102 57
stairs:stair_junglewood 54 37 11 stairs:stair_junglewood 56 39 14
stairs:stair_mossycobble 86 90 68 stairs:stair_mossycobble 88 91 73
stairs:stair_obsidian 19 21 24 stairs:stair_obsidian 21 24 29
stairs:stair_obsidian_block 20 22 25 stairs:stair_obsidian_block 23 25 30
stairs:stair_obsidianbrick 20 22 24 stairs:stair_obsidian_glass 20 22 27
stairs:stair_outer_acacia_wood 146 60 37 stairs:stair_obsidianbrick 23 25 29
stairs:stair_outer_aspen_wood 209 198 169 stairs:stair_outer_acacia_wood 150 61 39
stairs:stair_outer_brick 117 71 69 stairs:stair_outer_aspen_wood 210 199 170
stairs:stair_outer_bronzeblock 185 110 15 stairs:stair_outer_brick 123 99 95
stairs:stair_outer_cobble 88 84 82 stairs:stair_outer_bronzeblock 186 111 15
stairs:stair_outer_copperblock 192 126 63 stairs:stair_outer_cobble 89 86 84
stairs:stair_outer_desert_cobble 107 65 49 stairs:stair_outer_copperblock 193 126 65
stairs:stair_outer_desert_cobble 110 67 50
stairs:stair_outer_desert_sandstone 195 152 92 stairs:stair_outer_desert_sandstone 195 152 92
stairs:stair_outer_desert_sandstone_block 192 151 94 stairs:stair_outer_desert_sandstone_block 193 152 94
stairs:stair_outer_desert_sandstone_brick 191 151 94 stairs:stair_outer_desert_sandstone_brick 191 151 95
stairs:stair_outer_desert_stone 129 79 60 stairs:stair_outer_desert_stone 130 79 61
stairs:stair_outer_desert_stone_block 130 79 60 stairs:stair_outer_desert_stone_block 131 80 61
stairs:stair_outer_desert_stonebrick 129 79 60 stairs:stair_outer_desert_stonebrick 131 80 61
stairs:stair_outer_goldblock 230 201 29 stairs:stair_outer_glass 250 250 250
stairs:stair_outer_ice 167 206 247 stairs:stair_outer_goldblock 231 203 35
stairs:stair_outer_junglewood 54 37 11 stairs:stair_outer_ice 168 206 247
stairs:stair_outer_mossycobble 86 90 68 stairs:stair_outer_junglewood 56 39 14
stairs:stair_outer_obsidian 19 21 24 stairs:stair_outer_mossycobble 88 91 73
stairs:stair_outer_obsidian_block 20 22 25 stairs:stair_outer_obsidian 21 24 29
stairs:stair_outer_obsidianbrick 20 22 24 stairs:stair_outer_obsidian_block 23 25 30
stairs:stair_outer_pine_wood 221 184 128 stairs:stair_outer_obsidian_glass 20 22 27
stairs:stair_outer_sandstone 197 193 143 stairs:stair_outer_obsidianbrick 23 25 29
stairs:stair_outer_sandstone_block 195 190 141 stairs:stair_outer_pine_wood 221 185 130
stairs:stair_outer_sandstonebrick 193 189 140 stairs:stair_outer_sandstone 198 193 143
stairs:stair_outer_sandstone_block 195 191 142
stairs:stair_outer_sandstonebrick 194 190 141
stairs:stair_outer_silver_sandstone 195 192 181 stairs:stair_outer_silver_sandstone 195 192 181
stairs:stair_outer_silver_sandstone_block 192 190 179 stairs:stair_outer_silver_sandstone_block 192 190 180
stairs:stair_outer_silver_sandstone_brick 190 188 178 stairs:stair_outer_silver_sandstone_brick 191 189 179
stairs:stair_outer_snowblock 224 225 238 stairs:stair_outer_snowblock 225 225 238
stairs:stair_outer_steelblock 194 194 194 stairs:stair_outer_steelblock 195 195 195
stairs:stair_outer_stone 97 94 93 stairs:stair_outer_stone 97 94 93
stairs:stair_outer_stone_block 99 96 95 stairs:stair_outer_stone_block 100 97 96
stairs:stair_outer_stonebrick 99 96 95 stairs:stair_outer_stonebrick 102 99 98
stairs:stair_outer_straw 211 182 67 stairs:stair_outer_straw 212 184 68
stairs:stair_outer_tinblock 149 149 149 stairs:stair_outer_tinblock 150 150 150
stairs:stair_outer_wood 128 99 55 stairs:stair_outer_wood 131 102 57
stairs:stair_pine_wood 221 184 128 stairs:stair_pine_wood 221 185 130
stairs:stair_sandstone 197 193 143 stairs:stair_sandstone 198 193 143
stairs:stair_sandstone_block 195 190 141 stairs:stair_sandstone_block 195 191 142
stairs:stair_sandstonebrick 193 189 140 stairs:stair_sandstonebrick 194 190 141
stairs:stair_silver_sandstone 195 192 181 stairs:stair_silver_sandstone 195 192 181
stairs:stair_silver_sandstone_block 192 190 179 stairs:stair_silver_sandstone_block 192 190 180
stairs:stair_silver_sandstone_brick 190 188 178 stairs:stair_silver_sandstone_brick 191 189 179
stairs:stair_snowblock 224 225 238 stairs:stair_snowblock 225 225 238
stairs:stair_steelblock 194 194 194 stairs:stair_steelblock 195 195 195
stairs:stair_stone 97 94 93 stairs:stair_stone 97 94 93
stairs:stair_stone_block 99 96 95 stairs:stair_stone_block 100 97 96
stairs:stair_stonebrick 99 96 95 stairs:stair_stonebrick 102 99 98
stairs:stair_straw 211 182 67 stairs:stair_straw 212 184 68
stairs:stair_tinblock 149 149 149 stairs:stair_tinblock 150 150 150
stairs:stair_wood 128 99 55 stairs:stair_wood 131 102 57
# tnt # tnt
tnt:gunpowder 6 6 6 tnt:gunpowder 12 12 12
tnt:gunpowder_burning 112 103 2 tnt:gunpowder_burning 156 143 7
tnt:tnt 181 0 0 tnt:tnt 196 0 0
tnt:tnt_burning 190 8 0 tnt:tnt_burning 201 41 0
# vessels # vessels
vessels:drinking_glass 206 214 228 vessels:drinking_glass 207 214 228
vessels:glass_bottle 188 190 201 vessels:glass_bottle 189 192 204
vessels:shelf 128 99 55 vessels:shelf 131 102 57
vessels:steel_bottle 193 192 191 vessels:steel_bottle 194 193 193
# walls # walls
walls:cobble 88 84 82 walls:cobble 89 86 84
walls:desertcobble 107 65 49 walls:desertcobble 110 67 50
walls:mossycobble 86 90 68 walls:mossycobble 88 91 73
# wool # wool
wool:black 29 29 29 wool:black 30 30 30
wool:blue 0 72 145 wool:blue 0 73 146
wool:brown 86 42 0 wool:brown 88 44 0
wool:cyan 0 130 139 wool:cyan 0 132 140
wool:dark_green 32 102 0 wool:dark_green 33 103 0
wool:dark_grey 59 59 59 wool:dark_grey 60 60 60
wool:green 92 216 28 wool:green 93 218 28
wool:grey 131 131 131 wool:grey 133 133 133
wool:magenta 200 3 109 wool:magenta 201 3 112
wool:orange 213 81 21 wool:orange 214 83 22
wool:pink 255 131 131 wool:pink 255 133 133
wool:red 168 17 17 wool:red 170 18 18
wool:violet 92 2 169 wool:violet 93 5 169
wool:white 220 220 220 wool:white 220 220 220
wool:yellow 254 225 15 wool:yellow 254 226 16
# xpanes # xpanes
xpanes:bar 114 114 114 64 16 xpanes:bar 114 114 114 64 16
xpanes:bar_flat 114 114 114 64 16 xpanes:bar_flat 114 114 114 64 16
xpanes:obsidian_pane 16 16 17 64 16 xpanes:door_steel_bar_a 133 133 133 64 16
xpanes:obsidian_pane_flat 16 16 17 64 16 xpanes:door_steel_bar_b 133 133 133 64 16
xpanes:pane 192 192 227 64 16 xpanes:obsidian_pane 16 17 18 64 16
xpanes:pane_flat 192 192 227 64 16 xpanes:obsidian_pane_flat 16 17 18 64 16
xpanes:pane 249 249 249 64 16
xpanes:pane_flat 249 249 249 64 16
xpanes:trapdoor_steel_bar 127 127 127 64 16
xpanes:trapdoor_steel_bar_open 77 77 77 64 16

View File

@ -14,7 +14,7 @@ DBPostgreSQL::DBPostgreSQL(const std::string &mapdir)
std::ifstream ifs((mapdir + "/world.mt").c_str()); std::ifstream ifs((mapdir + "/world.mt").c_str());
if(!ifs.good()) if(!ifs.good())
throw std::runtime_error("Failed to read world.mt"); throw std::runtime_error("Failed to read world.mt");
std::string const connect_string = get_setting("pgsql_connection", ifs); std::string connect_string = read_setting("pgsql_connection", ifs);
ifs.close(); ifs.close();
db = PQconnectdb(connect_string.c_str()); db = PQconnectdb(connect_string.c_str());

View File

@ -86,8 +86,10 @@ public:
void parseColorsFile(const std::string &fileName); void parseColorsFile(const std::string &fileName);
void setBackend(std::string backend); void setBackend(std::string backend);
void generate(const std::string &input, const std::string &output); void generate(const std::string &input, const std::string &output);
void printGeometry(const std::string &input);
void setZoom(int zoom); void setZoom(int zoom);
void setScales(uint flags); void setScales(uint flags);
void setDontWriteEmpty(bool f);
private: private:
void parseColorsStream(std::istream &in); void parseColorsStream(std::istream &in);
@ -119,6 +121,7 @@ private:
bool m_drawScale; bool m_drawScale;
bool m_drawAlpha; bool m_drawAlpha;
bool m_shading; bool m_shading;
bool m_dontWriteEmpty;
std::string m_backend; std::string m_backend;
int m_xBorder, m_yBorder; int m_xBorder, m_yBorder;

View File

@ -20,24 +20,18 @@ public:
BlockPos(int16_t x, int16_t y, int16_t z) : x(x), y(y), z(z) {} BlockPos(int16_t x, int16_t y, int16_t z) : x(x), y(y), z(z) {}
bool operator < (const BlockPos &p) const bool operator < (const BlockPos &p) const
{ {
if (z > p.z) { if (z > p.z)
return true; return true;
} if (z < p.z)
if (z < p.z) {
return false; return false;
} if (y > p.y)
if (y > p.y) {
return true; return true;
} if (y < p.y)
if (y < p.y) {
return false; return false;
} if (x > p.x)
if (x > p.x) {
return true; return true;
} if (x < p.x)
if (x < p.x) {
return false; return false;
}
return false; return false;
} }
}; };

View File

@ -10,7 +10,7 @@ inline std::string read_setting_default(const std::string &name, std::istream &i
{ {
try { try {
return read_setting(name, is); return read_setting(name, is);
} catch(std::runtime_error e) { } catch(std::runtime_error &e) {
return def; return def;
} }
} }

View File

@ -24,10 +24,12 @@ void usage()
" --draworigin\n" " --draworigin\n"
" --drawalpha\n" " --drawalpha\n"
" --noshading\n" " --noshading\n"
" --noemptyimage\n"
" --min-y <y>\n" " --min-y <y>\n"
" --max-y <y>\n" " --max-y <y>\n"
" --backend <backend>\n" " --backend <backend>\n"
" --geometry x:y+w+h\n" " --geometry x:y+w+h\n"
" --extent\n"
" --zoom <zoomlevel>\n" " --zoom <zoomlevel>\n"
" --colors <colors.txt>\n" " --colors <colors.txt>\n"
" --scales [t][b][l][r]\n" " --scales [t][b][l][r]\n"
@ -80,11 +82,13 @@ int main(int argc, char *argv[])
{"noshading", no_argument, 0, 'H'}, {"noshading", no_argument, 0, 'H'},
{"backend", required_argument, 0, 'd'}, {"backend", required_argument, 0, 'd'},
{"geometry", required_argument, 0, 'g'}, {"geometry", required_argument, 0, 'g'},
{"extent", no_argument, 0, 'E'},
{"min-y", required_argument, 0, 'a'}, {"min-y", required_argument, 0, 'a'},
{"max-y", required_argument, 0, 'c'}, {"max-y", required_argument, 0, 'c'},
{"zoom", required_argument, 0, 'z'}, {"zoom", required_argument, 0, 'z'},
{"colors", required_argument, 0, 'C'}, {"colors", required_argument, 0, 'C'},
{"scales", required_argument, 0, 'f'}, {"scales", required_argument, 0, 'f'},
{"noemptyimage", no_argument, 0, 'n'},
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
@ -93,17 +97,13 @@ int main(int argc, char *argv[])
std::string colors = ""; std::string colors = "";
TileGenerator generator; TileGenerator generator;
int option_index = 0; bool onlyPrintExtent = false;
int c = 0;
while (1) { while (1) {
c = getopt_long(argc, argv, "hi:o:", long_options, &option_index); int option_index;
if (c == -1) { int c = getopt_long(argc, argv, "hi:o:", long_options, &option_index);
if (input.empty() || output.empty()) { if (c == -1)
usage(); break; // done
return 0;
}
break;
}
switch (c) { switch (c) {
case 'h': case 'h':
usage(); usage();
@ -139,6 +139,9 @@ int main(int argc, char *argv[])
case 'e': case 'e':
generator.setDrawAlpha(true); generator.setDrawAlpha(true);
break; break;
case 'E':
onlyPrintExtent = true;
break;
case 'H': case 'H':
generator.setShading(false); generator.setShading(false);
break; break;
@ -146,24 +149,21 @@ int main(int argc, char *argv[])
generator.setBackend(optarg); generator.setBackend(optarg);
break; break;
case 'a': { case 'a': {
std::istringstream iss; std::istringstream iss(optarg);
iss.str(optarg);
int miny; int miny;
iss >> miny; iss >> miny;
generator.setMinY(miny); generator.setMinY(miny);
} }
break; break;
case 'c': { case 'c': {
std::istringstream iss; std::istringstream iss(optarg);
iss.str(optarg);
int maxy; int maxy;
iss >> maxy; iss >> maxy;
generator.setMaxY(maxy); generator.setMaxY(maxy);
} }
break; break;
case 'g': { case 'g': {
std::istringstream geometry; std::istringstream geometry(optarg);
geometry.str(optarg);
int x, y, w, h; int x, y, w, h;
char c; char c;
geometry >> x >> c >> y >> w >> h; geometry >> x >> c >> y >> w >> h;
@ -188,8 +188,7 @@ int main(int argc, char *argv[])
} }
break; break;
case 'z': { case 'z': {
std::istringstream iss; std::istringstream iss(optarg);
iss.str(optarg);
int zoom; int zoom;
iss >> zoom; iss >> zoom;
generator.setZoom(zoom); generator.setZoom(zoom);
@ -198,16 +197,32 @@ int main(int argc, char *argv[])
case 'C': case 'C':
colors = optarg; colors = optarg;
break; break;
case 'n':
generator.setDontWriteEmpty(true);
break;
default: default:
exit(1); exit(1);
} }
} }
if(colors == "")
colors = search_colors(input); if (input.empty() || (!onlyPrintExtent && output.empty())) {
usage();
return 0;
}
try { try {
if (onlyPrintExtent) {
generator.printGeometry(input);
return 0;
}
if(colors == "")
colors = search_colors(input);
generator.parseColorsFile(colors); generator.parseColorsFile(colors);
generator.generate(input, output); generator.generate(input, output);
} catch(std::runtime_error e) {
} catch(std::runtime_error &e) {
std::cerr << "Exception: " << e.what() << std::endl; std::cerr << "Exception: " << e.what() << std::endl;
return 1; return 1;
} }

View File

@ -11,7 +11,7 @@ See additional optional parameters below.
.B minetestmapper .B minetestmapper
generates an overview image of a minetest map. This is a port of generates an overview image of a minetest map. This is a port of
the original minetestmapper.py to C++, that is both faster and the original minetestmapper.py to C++, that is both faster and
provides more funtionality than the deprecated Python script. provides more functionality than the deprecated Python script.
.SH MANDATORY PARAMETERS .SH MANDATORY PARAMETERS
.TP .TP
.BR \-i " " \fIworld_path\fR .BR \-i " " \fIworld_path\fR
@ -56,6 +56,10 @@ Allow nodes to be drawn with transparency
.BR \-\-noshading .BR \-\-noshading
Don't draw shading on nodes Don't draw shading on nodes
.TP
.BR \-\-noemptyimage
Don't output anything when the image would be empty.
.TP .TP
.BR \-\-min-y " " \fInumber\fR .BR \-\-min-y " " \fInumber\fR
Don't draw nodes below this y value, e.g. "--min-y -25" Don't draw nodes below this y value, e.g. "--min-y -25"
@ -72,6 +76,10 @@ Use specific map backend; supported: *sqlite3*, *leveldb*, *redis*, *postgresql*
.BR \-\-geometry " " \fIgeometry\fR .BR \-\-geometry " " \fIgeometry\fR
Limit area to specific geometry (*x:y+w+h* where x and y specify the lower left corner), e.g. "--geometry -800:-800+1600+1600" Limit area to specific geometry (*x:y+w+h* where x and y specify the lower left corner), e.g. "--geometry -800:-800+1600+1600"
.TP
.BR \-\-extent " " \fIextent\fR
Dont render the image, just print the extent of the map that would be generated, in the same format as the geometry above.
.TP .TP
.BR \-\-zoom " " \fIfactor\fR .BR \-\-zoom " " \fIfactor\fR
Zoom the image by using more than one pixel per node, e.g. "--zoom 4" Zoom the image by using more than one pixel per node, e.g. "--zoom 4"

73
util/build_win.sh Executable file
View File

@ -0,0 +1,73 @@
#!/bin/bash -e
#######
# this expects an env similar to what minetest's buildbot uses
# extradll_path will typically contain libgcc, libstdc++ and libpng
toolchain_file=
toolchain_file64=
libgd_dir=
libgd_dir64=
zlib_dir=
zlib_dir64=
sqlite_dir=
sqlite_dir64=
leveldb_dir=
leveldb_dir64=
extradll_path=
extradll_path64=
#######
[ -f ./CMakeLists.txt ] || exit 1
if [ "$1" == "32" ]; then
:
elif [ "$1" == "64" ]; then
toolchain_file=$toolchain_file64
libgd_dir=$libgd_dir64
zlib_dir=$zlib_dir64
sqlite_dir=$sqlite_dir64
leveldb_dir=$leveldb_dir64
extradll_path=$extradll_path64
else
echo "Usage: $0 <32 / 64>"
exit 1
fi
cmake . \
-DCMAKE_INSTALL_PREFIX=/tmp \
-DCMAKE_TOOLCHAIN_FILE=$toolchain_file \
-DCMAKE_EXE_LINKER_FLAGS="-s" \
\
-DENABLE_LEVELDB=1 \
\
-DLIBGD_INCLUDE_DIR=$libgd_dir/include \
-DLIBGD_LIBRARY=$libgd_dir/lib/libgd.dll.a \
\
-DZLIB_INCLUDE_DIR=$zlib_dir/include \
-DZLIB_LIBRARY=$zlib_dir/lib/libz.dll.a \
\
-DSQLITE3_INCLUDE_DIR=$sqlite_dir/include \
-DSQLITE3_LIBRARY=$sqlite_dir/lib/libsqlite3.dll.a \
\
-DLEVELDB_INCLUDE_DIR=$leveldb_dir/include \
-DLEVELDB_LIBRARY=$leveldb_dir/lib/libleveldb.dll.a
make -j4
mkdir pack
cp -p \
AUTHORS colors.txt COPYING README.rst \
minetestmapper.exe \
$libgd_dir/bin/libgd-3.dll \
$zlib_dir/bin/zlib1.dll \
$sqlite_dir/bin/libsqlite3-0.dll \
$leveldb_dir/bin/libleveldb.dll \
$extradll_path/*.dll \
pack/
zipfile=minetestmapper-win$1.zip
(cd pack; zip -9r ../$zipfile *)
make clean
rm -r pack CMakeCache.txt
echo "Done."

View File

@ -1,15 +1,8 @@
#!/bin/bash -e #!/bin/bash -e
CXX=g++-7
[ $CC == "clang" ] && CXX=clang++-5.0
export CXX
mkdir -p travisbuild mkdir -p travisbuild
cd travisbuild cd travisbuild
cmake \ cmake .. \
-DENABLE_LEVELDB=1 \ -DENABLE_LEVELDB=1
..
make -j2 make -j2