diff --git a/scripts/magmasource.rb b/scripts/magmasource.rb new file mode 100644 index 000000000..14f517fd1 --- /dev/null +++ b/scripts/magmasource.rb @@ -0,0 +1,65 @@ +# create an infinite magma source at the cursor + +$magma_sources ||= [] +$magma_onupdate ||= nil + +case $script_args[0] +when 'here' + $magma_onupdate ||= df.onupdate_register(12) { + if $magma_sources.empty? + df.onupdate_unregister($magma_onupdate) + $magma_onupdate = nil + end + + $magma_sources.each { |x, y, z| + if tile = df.map_tile_at(x, y, z) and DFHack::TiletypeShape::PassableFlow[tile.shape] + des = tile.designation + des.flow_size += 1 if des.flow_size < 7 + des.liquid_type = 1 + des.flow_forbid = true + + mf = tile.mapblock.flags + mf.update_liquid = true + mf.update_liquid_twice = true + + zf = df.world.map.z_level_flags[z] + zf.update = true + zf.update_twice = true + end + } + } + + if df.cursor.x != -30000 + if tile = df.map_tile_at(df.cursor) + if DFHack::TiletypeShape::PassableFlow[tile.shape] + $magma_sources << [df.cursor.x, df.cursor.y, df.cursor.z] + else + puts "Impassable tile: I'm afraid I can't do that, Dave" + end + else + puts "Unallocated map block - build something here first" + end + else + puts "Please put the game cursor where you want a magma source" + end + +when 'delete-here' + $magma_sources.delete [df.cursor.x, df.cursor.y, df.cursor.z] + +when 'stop' + $magma_sources.clear + +else + puts <