Files
openttd-cmclient/grf/alpine/corner-groud-composition.txt
2023-03-01 23:26:03 +03:00

154 lines
7.7 KiB
Plaintext

# Failed experiment of compossing ground sprites from 4 parts, turned out too fiddly and impractical as seemingly same parts may have different inclanation visually and so different graphics.
spriteset (meadow_groundsprites, "gfx/meadow_grid_temperate.png") { tmpl_groundsprites(1, 1) }
template tmpl_corner_ground(x, y, h, dy) {
[ x + 64 * 0, y, 32, h, -31, dy]
[ x + 64 * 1, y, 32, h, -31, dy]
[ x + 64 * 2, y, 32, h, -31, dy]
[ x + 64 * 3, y, 32, h, -31, dy]
[ x + 64 * 4, y, 32, h, -31, dy]
[ x + 64 * 5, y, 32, h, -31, dy]
[ x + 64 * 6, y, 32, h, -31, dy]
[ x + 64 * 7, y, 32, h, -31, dy]
[ x + 64 * 0 + 32, y , 32, h, 1, dy]
[ x + 64 * 1 + 32, y , 32, h, 1, dy]
[ x + 64 * 2 + 32, y , 32, h, 1, dy]
[ x + 64 * 3 + 32, y , 32, h, 1, dy]
[ x + 64 * 4 + 32, y , 32, h, 1, dy]
[ x + 64 * 5 + 32, y , 32, h, 1, dy]
[ x + 64 * 6 + 32, y , 32, h, 1, dy]
[ x + 64 * 7 + 32, y , 32, h, 1, dy]
[ x + 64 * 0, y + h, 32, h + 1, -31, h + dy]
[ x + 64 * 1, y + h, 32, h + 1, -31, h + dy]
[ x + 64 * 2, y + h, 32, h + 1, -31, h + dy]
[ x + 64 * 3, y + h, 32, h + 1, -31, h + dy]
[ x + 64 * 4, y + h, 32, h + 1, -31, h + dy]
[ x + 64 * 5, y + h, 32, h + 1, -31, h + dy]
[ x + 64 * 6, y + h, 32, h + 1, -31, h + dy]
[ x + 64 * 7, y + h, 32, h + 1, -31, h + dy]
[ x + 64 * 0 + 32, y + h , 32, h + 1, 1, h + dy]
[ x + 64 * 1 + 32, y + h , 32, h + 1, 1, h + dy]
[ x + 64 * 2 + 32, y + h , 32, h + 1, 1, h + dy]
[ x + 64 * 3 + 32, y + h , 32, h + 1, 1, h + dy]
[ x + 64 * 4 + 32, y + h , 32, h + 1, 1, h + dy]
[ x + 64 * 5 + 32, y + h , 32, h + 1, 1, h + dy]
[ x + 64 * 6 + 32, y + h , 32, h + 1, 1, h + dy]
[ x + 64 * 7 + 32, y + h , 32, h + 1, 1, h + dy]
}
spriteset (meadow_transitions, "gfx/meadow_transitions.png") {
tmpl_corner_ground(0, 0, 15, -16)
tmpl_corner_ground(0, 64, 23, -16)
tmpl_corner_ground(0, 128, 7, 0)
}
spritelayout meadow_groundsprites_default {
ground {
sprite: GROUNDSPRITE_NORMAL + slope_to_sprite_offset(tile_slope);
}
childsprite {
sprite: meadow_transitions(0
// + ((tile_slope & bitmask(CORNER_N)) && !(tile_slope & bitmask(CORNER_W)) || (tile_slope & bitmask(IS_STEEP_SLOPE)) ? 32 : 0)
// + ((tile_slope & bitmask(CORNER_N)) && !(tile_slope & bitmask(CORNER_W)) || (tile_slope & bitmask(IS_STEEP_SLOPE)) ? 32 : 0)
+ ((tile_slope & bitmask(CORNER_W)) && !(tile_slope & bitmask(CORNER_N)) ? 64 : 0)
// + (nearby_tile_object_type(1, -1) != test_tree || nearby_tile_object_type(1, 0) != test_tree || nearby_tile_object_type(0, -1) != test_tree)
// + (nearby_tile_object_type(0, -1) != test_tree) * 2
// + (nearby_tile_object_type(-1, -1) != test_tree || nearby_tile_object_type(-1, 0) != test_tree || nearby_tile_object_type(0, -1) != test_tree) * 4
);
//yoffset: (tile_slope & bitmask(CORNER_N) ? 0 : 8) + (tile_slope == SLOPE_STEEP_N ? 0 : 8);
yoffset: 0;
}
childsprite {
sprite: meadow_transitions(8
+ ((tile_slope & bitmask(CORNER_N)) && !(tile_slope & bitmask(CORNER_E)) || (tile_slope & bitmask(IS_STEEP_SLOPE)) ? 32 : 0)
+ ((tile_slope & bitmask(CORNER_E)) && !(tile_slope & bitmask(CORNER_N)) ? 64 : 0)
// + (nearby_tile_object_type(-1, 1) != test_tree || nearby_tile_object_type(0, 1) != test_tree || nearby_tile_object_type(-1, 0) != test_tree)
// + (nearby_tile_object_type(-1, 0) != test_tree) * 2
// + (nearby_tile_object_type(-1, -1) != test_tree || nearby_tile_object_type(0, -1) != test_tree || nearby_tile_object_type(-1, 0) != test_tree) * 4
);
yoffset: (tile_slope & bitmask(CORNER_N) ? 0 : 8) + (tile_slope == SLOPE_STEEP_N ? 0 : 8);
// yoffset: 8 * (tile_slope & bitmask(CORNER_N) ? 1 : 0);
// yoffset: -8 * ((tile_slope & bitmask(CORNER_N) ? 1 : 0) + (tile_slope == SLOPE_STEEP_N ? 1 : 0));
}
childsprite {
sprite: meadow_transitions(16
// + (nearby_tile_object_type(1, -1) != test_tree || nearby_tile_object_type(0, -1) != test_tree || nearby_tile_object_type(1, 0) != test_tree)
// + (nearby_tile_object_type(1, 0) != test_tree) * 2
// + (nearby_tile_object_type(1, 1) != test_tree || nearby_tile_object_type(0, 1) != test_tree || nearby_tile_object_type(1, 0) != test_tree) * 4
);
yoffset: 16;
}
childsprite {
sprite: meadow_transitions(24
// + (nearby_tile_object_type(-1, 1) != test_tree || nearby_tile_object_type(-1, 0) != test_tree || nearby_tile_object_type(0, 1) != test_tree)
// + (nearby_tile_object_type(0, 1) != test_tree) * 2
// + (nearby_tile_object_type(1, 1) != test_tree || nearby_tile_object_type(1, 0) != test_tree || nearby_tile_object_type(0, 1) != test_tree) * 4
);
yoffset: 16;
}
}
spritelayout meadow_groundsprites_purchase {
ground {
sprite: meadow_groundsprites;
}
}
switch (FEAT_OBJECTS, SELF, switch_meadow_groundsprites_default, [
STORE_TEMP(slope_to_sprite_offset(tile_slope), 0)
]) {
meadow_groundsprites_default;
}
item (FEAT_OBJECTS, test_tree) {
property {
class: "FLMA";
classname: string(STR_FLMA);
name: string(STR_TEST_OBJECT);
climates_available: ALL_CLIMATES;
end_of_life_date: 0xFFFFFFFF;
object_flags:bitmask(OBJ_FLAG_ALLOW_BRIDGE, OBJ_FLAG_ANYTHING_REMOVE, OBJ_FLAG_NO_FOUNDATIONS);
size: [1,1];
}
graphics {
default: meadow_groundsprites_default;
purchase: meadow_groundsprites_purchase;
tile_check: CB_RESULT_LOCATION_ALLOW;
}
}
# Generate meadow transition tiles
im = Image.open(os.path.join(SOURCE_DIR, "grass_grid_temperate.gimp.png"))
din = np.array(im)
# dout = np.zeros((64 * 8, 31 + 47 + 15), dtype=np.uint8)
# dout = np.zeros((31 + 47 + 15, 64 * 8), dtype=np.uint8)
dout = np.zeros((64 * 3, 64 * 8), dtype=np.uint8)
for j, (h, ox) in enumerate(((31, 1), (47, 1197), (15, 1277))):
hh = (h - 1) / 2.
for i in range (8):
ut, uc, ub = i & 1, (i & 2) / 2, (i & 4) / 4
for y in range(0, h):
for x in range(0, 64):
c = din[y + 1, x + ox]
if not c: continue
dx, dy = abs(31.5 - x) / 31.5, abs(hh - y) / hh
a = abs(4 * math.atan2(dy, dx) / math.pi - 1.)
f = (uc * (1. - a) + a * (ut if dy < dx else ub)) * (dx + dy)
f = min(1, 1 - f)
bc = spectra.rgb(f, 1, 0)
c = colors[c][1].blend(bc, ratio=0.2 + 0.5 * f)
# bc = spectra.rgb(0.7 + 0.3 * f, 1, 0)
# c = colors[c][1].blend(bc, ratio=0.2 + 0.1 * f)
dout[y + 64 * j, x + 64 * i] = find_best_color(c)
im2 = Image.fromarray(dout)
im2.putpalette(im.getpalette())
im2.save(os.path.join(DEST_DIR, "meadow_transitions.png"))