commit
3bc17dafab
@ -1,70 +1,65 @@
|
|||||||
# designate an area for digging according to a plan in csv format
|
# designate an area for digging according to a plan in csv format
|
||||||
|
|
||||||
raise "usage: digfort <plan filename>" if not $script_args[0]
|
fname = $script_args[0].to_s
|
||||||
planfile = File.read($script_args[0])
|
|
||||||
|
|
||||||
if df.cursor.x == -30000
|
if not $script_args[0] then
|
||||||
puts "place the game cursor to the top-left corner of the design"
|
puts " Usage: digfort <plan filename>"
|
||||||
throw :script_finished
|
throw :script_finished
|
||||||
|
end
|
||||||
|
if not fname[-4..-1] == ".csv" then
|
||||||
|
puts " The plan file must be in .csv format."
|
||||||
|
throw :script_finished
|
||||||
|
end
|
||||||
|
if not File.file?(fname) then
|
||||||
|
puts " The specified file does not exist."
|
||||||
|
throw :script_finished
|
||||||
end
|
end
|
||||||
|
|
||||||
# a sample CSV file
|
planfile = File.read(fname)
|
||||||
# empty lines are ignored
|
|
||||||
# a special comment with start(dx, dy) means the actual patterns starts at cursor.x-dx, cursor.y-dy
|
if df.cursor.x == -30000
|
||||||
# the CSV file should be saved in the main DF directory, alongside of Dwarf Fortress.exe
|
puts "place the game cursor to the top-left corner of the design and retry"
|
||||||
sample_csv = <<EOS
|
throw :script_finished
|
||||||
# start(3, 4)
|
end
|
||||||
,d,d,d,d,d,d
|
|
||||||
d, , , , , , ,d
|
|
||||||
d, , , , , , ,d
|
|
||||||
d, ,d, , ,d, ,d
|
|
||||||
h, , , , , , ,h
|
|
||||||
h,h,h,h,h,h,h,h
|
|
||||||
h,h, ,d,d, ,h,h
|
|
||||||
h,h,h,h,h,h,h,h
|
|
||||||
,h,h,h,h,h,h
|
|
||||||
, , ,h,h,h
|
|
||||||
, , , ,h,h
|
|
||||||
EOS
|
|
||||||
|
|
||||||
offset = [0, 0]
|
offset = [0, 0]
|
||||||
tiles = []
|
tiles = []
|
||||||
planfile.each_line { |l|
|
planfile.each_line { |l|
|
||||||
if l =~ /#.*start\s*\(\s*(-?\d+)\s*[,;]\s*(-?\d+)/
|
if l =~ /#.*start\s*\(\s*(-?\d+)\s*[,;]\s*(-?\d+)/
|
||||||
raise "Error: multiple start() comments" if offset != [0, 0]
|
raise "Error: multiple start() comments" if offset != [0, 0]
|
||||||
offset = [$1.to_i, $2.to_i]
|
offset = [$1.to_i, $2.to_i]
|
||||||
end
|
end
|
||||||
|
|
||||||
l = l.chomp.sub(/#.*/, '')
|
l = l.chomp.sub(/#.*/, '')
|
||||||
next if l == ''
|
next if l == ''
|
||||||
tiles << l.split(/[;,]/).map { |t|
|
tiles << l.split(/[;,]/).map { |t|
|
||||||
t = t.strip
|
t = t.strip
|
||||||
(t[0] == ?") ? t[1..-2] : t
|
(t[0] == ?") ? t[1..-2] : t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
x = x0 = df.cursor.x - offset[0]
|
x = df.cursor.x - offset[0]
|
||||||
y = df.cursor.y - offset[1]
|
y = df.cursor.y - offset[1]
|
||||||
z = df.cursor.z
|
z = df.cursor.z
|
||||||
|
|
||||||
tiles.each { |line|
|
tiles.each { |line|
|
||||||
next if line.empty? or line == ['']
|
next if line.empty? or line == ['']
|
||||||
line.each { |tile|
|
line.each { |tile|
|
||||||
t = df.map_tile_at(x, y, z)
|
t = df.map_tile_at(x, y, z)
|
||||||
s = t.shape_basic
|
s = t.shape_basic
|
||||||
case tile
|
case tile
|
||||||
when 'd'; t.dig(:Default) if s == :Wall
|
when 'd'; t.dig(:Default) if s == :Wall
|
||||||
when 'u'; t.dig(:UpStair) if s == :Wall
|
when 'u'; t.dig(:UpStair) if s == :Wall
|
||||||
when 'j'; t.dig(:DownStair) if s == :Wall or s == :Floor
|
when 'j'; t.dig(:DownStair) if s == :Wall or s == :Floor
|
||||||
when 'i'; t.dig(:UpDownStair) if s == :Wall
|
when 'i'; t.dig(:UpDownStair) if s == :Wall
|
||||||
when 'h'; t.dig(:Channel) if s == :Wall or s == :Floor
|
when 'h'; t.dig(:Channel) if s == :Wall or s == :Floor
|
||||||
when 'r'; t.dig(:Ramp) if s == :Wall
|
when 'r'; t.dig(:Ramp) if s == :Wall
|
||||||
when 'x'; t.dig(:No)
|
when 'x'; t.dig(:No)
|
||||||
end
|
end
|
||||||
x += 1
|
x += 1
|
||||||
}
|
}
|
||||||
x = x0
|
x = df.cursor.x - offset[0]
|
||||||
y += 1
|
y += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
puts 'done'
|
puts ' done'
|
||||||
|
Loading…
Reference in New Issue