1 |
#!/opt/bin/perl |
2 |
|
3 |
# deliantra faceinfo filter, needs to be run in the arch directory |
4 |
# works a bit like a lint and creates a new default.faceinfo in the current directory |
5 |
# works only after cfutil --install-arch --cache |
6 |
|
7 |
{ |
8 |
no utf8; # == values are utf-8 encoded |
9 |
|
10 |
our @WALL_SUFFIX = ("⬤⬤", "╹ ", " ╺", "┗━", "╻ ", "┃ ", "┏━", "┣━", "━╸", "┛ ", "━━", "┻━", "┓ ", "┫ ", "┳━", "╋━"); |
11 |
|
12 |
# used to create crude text glyphs for text-based clients |
13 |
sub autoglyph { |
14 |
my ($stem, $face) = @_; |
15 |
|
16 |
if ($stem =~ /^wall\/|Nimwall/) { |
17 |
return $WALL_SUFFIX[hex $1] |
18 |
if $stem =~ /(_[0-9A-F]).x11/; |
19 |
|
20 |
"██" |
21 |
|
22 |
} elsif ($stem =~ /^traps\//) { |
23 |
"☠ " |
24 |
|
25 |
} elsif ($stem =~ /^armour\/shield/) { |
26 |
"Ø " |
27 |
|
28 |
} elsif ($stem =~ /^armour\//) { |
29 |
"A " |
30 |
|
31 |
} elsif ($stem =~ /^weapon\//) { |
32 |
"† " |
33 |
|
34 |
} elsif ($stem =~ /^readable\//) { |
35 |
"✉ " |
36 |
|
37 |
} elsif ($stem =~ /^river\//) { |
38 |
"~ " |
39 |
|
40 |
} elsif ($stem =~ /^^ground\/|Nimfloor/) { |
41 |
"· " |
42 |
|
43 |
} elsif ($stem =~ /^floor\//) { |
44 |
"░░" |
45 |
|
46 |
} elsif ($stem =~ /^spells\//) { |
47 |
"! " |
48 |
|
49 |
} elsif ($stem =~ /^exit\//) { |
50 |
"⎆⎆" |
51 |
|
52 |
} elsif ($stem =~ /^construct\//) { |
53 |
"⌂⌂" |
54 |
|
55 |
} elsif ($stem =~ /^player\//) { |
56 |
"\@" |
57 |
|
58 |
} elsif ($stem =~ /^misc.*\/(.)/) { |
59 |
" $1" |
60 |
|
61 |
} elsif ($stem =~ /^(?:monster|misc|class|connect|gods|indoor|inorganic|mining|music|skills).*\/(.)/) { |
62 |
(substr $stem, 0, 1) . uc $1 |
63 |
|
64 |
} else { |
65 |
substr $stem, 0, 1 |
66 |
} |
67 |
} |
68 |
} |
69 |
|
70 |
our %PNG; |
71 |
|
72 |
open my $fiin, "<:raw", "default.faceinfo" |
73 |
or die "default.faceinfo: $!\n"; |
74 |
|
75 |
# make an inventory of all faces |
76 |
{ |
77 |
open my $ts, "-|:raw", "treescan -f */ | sort" |
78 |
or die "treescan: $!"; |
79 |
|
80 |
while (<$ts>) { |
81 |
chomp; |
82 |
if (/^(.*)\/([^\/]+\....).64x64.png~?$/) { # normal |
83 |
$PNG{$2} = "$1/$2"; |
84 |
} elsif (/^(.*)\/([^\/]+\....).64x64.png~?(\+\d+\+\d+)~$/) { # split |
85 |
$PNG{"$2$3"} = "$1/$2"; |
86 |
# delete $PNG{$2}; used for +0+0 |
87 |
} |
88 |
} |
89 |
} |
90 |
|
91 |
open my $fiout, "|-:raw", "sort | unexpand -a >default.faceinfo~" |
92 |
or die "default.faceinfo~: $!"; |
93 |
|
94 |
while (<$fiin>) { |
95 |
my ($face, $visibility, $fg, $bg, $glyph) = split /\s+/; |
96 |
(my $xf = $face) =~ s/\+\d+\+\d+$//; |
97 |
|
98 |
$fg =~ y/A-Z_\-/a-z/d; |
99 |
$bg =~ y/A-Z_\-/a-z/d; |
100 |
|
101 |
my $stem = delete $PNG{$face}; |
102 |
|
103 |
$glyph = "?" . autoglyph $stem, $v |
104 |
if $glyph =~ /^\?./; |
105 |
|
106 |
printf $fiout |
107 |
"%-39s %3d\t%-15s %-15s %s\n", |
108 |
$face, |
109 |
$visibility || 0, |
110 |
$fg // "none", |
111 |
$bg // "none", |
112 |
$glyph; |
113 |
} |
114 |
|