Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Abadrausar

Pages: [1] 2 3 ... 11
1
First of all let me tell you that you are doing a very nice and much needed job with DFHACK QuickFort, for my part I have wished for years for something to appear capable of replacing the good old quickfort within the DFHACK environment, you are responsible for making this dream of mine and many other people in our community come true.

This was surely no easy feast, as the original quickfort is packed with functionality and beautifully designed as attests to the extraordinary longevity of Joel's utilities.

For all that you have already offered to this community, I thank you for the effort you have dedicated, selfishly and especially for the promise of what is yet to come, I would like you to find as much satisfaction developing and polishing DFHACK quickfort as users of this utility will feel using it in the years to come.

Thanks again! :)

... done with the interactive gui (the gui/blueprint script) and the commandline parsing changes to the blueprint plugin. I have some questions on details of the implementation...

Normally I prefer to play with nano-embarks of 1x1 with 48x48 tiles, that means usually very vertical fortress that use all the area disponible over 6-10 levels for the active or live part of the  fortresss.

In those limite conditions, Would DFHACK QuickFort be able to blueprint all the 48x48xDeep of the fortress?


2
Utilities and 3rd Party Applications / Re: DFHack 0.44.12-r3
« on: February 15, 2020, 07:42:19 pm »
Thanks! I'll put this up in a GitHub issue so it doesn't get lost.
Thank you!

3
Zwei said when too many things are playing at once, it would prioritize playing sounds with a lower PlaybackThreshold setting. He also said "weather" and "music" channels were set to only be able to play one thing at a time.

I believe that some play sound files libraries have the concept of mixer, where some channels to play things are able to accept and mix in real time many sound flows over one unique channel, SDL preinstalled with DF has a mixer as described but i do not know the extent of its capabilities. Some mixers are able to use coefficients to mix the different sound flows in an asymmetrical way.

For example: last flow in has normal volume, but the volume of the rest of the flows already in the mix channel is decreased at each new incorporation by some threshold...

That enables the most recent events to have more sound trace than the older events but the mix process assures that the idea of many things happening simultaneously is translated to the user, The true quirk is tinkering with the coefficients until the right desirable properties are attained. 

4
Mod Releases / Re: «Modest Mod» [v0.47.02-1] Slaves to Accelerated Module
« on: February 14, 2020, 04:16:35 pm »
Updated. No new modules, but I boosted acceleration with standarized instruments.
Enjoy!
Like standard musical instruments? I have searched for those some time to no avail. Only found some incomplete compilations.
Where are they in the download? I do not find them nor in raw/objects nor in accelerated.

5
DF General Discussion / Petition
« on: February 14, 2020, 03:51:15 pm »
I have liked this utility because it is multi-platform and very lightweight in memory usage, liberating a whole lot of system memory for being usable in Dwarf Fortress where it is badly needed.
Petition
ApplicationPlatform LanguageVersionDownload size in MBRuntime required in MB
LinuxOSXWindows
SoundSensejava runtimer2016-111165-80
SoundCensec# CLR1.4.45.275.275.27100
soundsense-rsRust native or WebAssembler1.3.22.811.912.70

I play DF under windows and linux and use sometimes packs for convenience.

Lately concerned by security (more surface attack for malware) issues I have uninstalled oracle java and microsoft Net from my machines (at least for general use), mono sadly is not much better ni feature complete.

I see in the 1st post that the Pack includes either SoundSense that requires the java runtime and SoundCense that requires the NET framework runtime; Both runtimes are really massive over the HD as over the memory system where they really could potentially out-compete or slow Dwarf Fortress process.

It is for those reasons that I have begun to use Sound-sense-RS in Windows and Linux because it does not need ANY run-time additional to do basically the same thing than the other two.

As SoundSense-RS download weights only 2.7 Mb, there is any possibility of including it into this pack?

This would enable that people that do not want to install a whole runtime just to listen the sounds of a game, to have a better integrated option than install the application themselves.

Just to signal that I have not  renounced to the exclusive benefits of those runtimes like advanced crypto, digital signing and identities; I jail then when necessary in protected and isolated environments.  8)

Other pack maintainers have already begun the integration.
Hey, prixt. I just wanted to let you know I'm including SoundSense-RS in the Lazy Mac Pack.

6
DF General Discussion / Petition
« on: February 14, 2020, 03:01:19 pm »
I have liked this utility because it is multi-platform and very lightweight in memory usage, liberating a whole lot of system memory for being usable in Dwarf Fortress where it is badly needed.

ApplicationPlatform LanguageVersionDownload size in MBRuntime required in MB
LinuxOSXWindows
SoundSensejava runtimer2016-111165-80
SoundCensec# CLR1.4.45.275.275.27100
soundsense-rsRust native or WebAssembler1.3.22.811.912.70

I play DF under windows and linux and use sometimes packs for convenience.

Lately concerned by security (more surface attack for malware) issues I have uninstalled oracle java and microsoft Net from my machines (at least for general use), mono sadly is not much better ni feature complete.

I see in the 1st post that the Pack includes either SoundSense that requires the java runtime and SoundCense that requires the NET framework runtime; Both runtimes are really massive over the HD as over the memory system where they really could potentially out-compete or slow Dwarf Fortress process.

It is for those reasons that I have begun to use Sound-sense-RS in Windows and Linux because it does not need ANY run-time additional to do basically the same thing than the other two.

As SoundSense-RS download weights only 2.7 Mb, there is any possibility of including it into this pack?

This would enable that people that do not want to install a whole runtime just to listen the sounds of a game, to have a better integrated option than install the application themselves.

Just to signal that I have not  renounced to the exclusive benefits of those runtimes like advanced crypto, digital signing and identities; I jail then when necessary in protected and isolated environments.  8)

Other pack maintainers have already begun the integration.
Hey, prixt. I just wanted to let you know I'm including SoundSense-RS in the Lazy Mac Pack.

7
01/29/2020 Released Dwarf Fortress 0.47.01
... automated builds available at https://buildmaster.lubar.me/applications/3/overview for anyone who would like to test those ...

Only 10 days later we have a workable DFHACK for testing. This community work is simply awesome!  :o
During the debugging of the new version of digfort I have tested that some other DFHACK parts works like intended (reveal, unreveal, liquids plugin, ls, mouse control, ...)

... Does your fixed script work properly for you? (I wasn't sure if you meant your version didn't work at all, or if you weren't sure that it always worked.)

Well at the time you asked, it do not even existed. So the modified script that works (for me at least) with DF 47.02 plus the most recent dfhack automatic build.
Code: (digfort.rb) [Select]
# designate an area based on a '.csv' plan
=begin

digfort
=======
A script to designate an area for digging according to a plan in csv format.

This script, inspired from quickfort, can designate an area for digging.
Your plan should be stored in a .csv file like this::

    # this is a comment
    d;d;u;d;d;skip this tile;d
    d;d;d;i

Available tile shapes are named after the 'dig' menu shortcuts:
``d`` for dig, ``u`` for upstairs, ``j`` downstairs, ``i`` updown,
``h`` channel, ``r`` upward ramp, ``x`` remove designation.
Unrecognized characters are ignored (eg the 'skip this tile' in the sample).

Empty lines and data after a ``#`` are ignored as comments.
To skip a row in your design, use a single ``;``.

One comment in the file may contain the phrase ``start(3,5)``. It is interpreted
as an offset for the pattern: instead of starting at the cursor, it will start
3 tiles left and 5 tiles up from the cursor.

additionally a comment can have a < for a rise in z level and a > for drop in z.

The script takes the plan filename, starting from the root df folder (where
``Dwarf Fortress.exe`` is found).

=end

fname = $script_args[0].to_s
map = df.world.map
Xsentinel = map.x_count - 1
Ysentinel = map.y_count - 1
Xstamp = false
Ystamp = false
if not $script_args[0] then
    puts "  Usage: digfort <plan filename>"
    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

planfile = File.read(fname)

if df.cursor.x == -30000
    puts "place the game cursor to the top-left corner of the design and retry"
    throw :script_finished
end

offset = [0, 0]
tiles = []
max_x = 0
max_y = 0
y = 0
planfile.each_line { |l|
    if l =~ /#.*start\s*\(\s*(-?\d+)\s*[,;]\s*(-?\d+)/
        raise "Error: multiple start() comments" if offset != [0, 0]
        offset = [$1.to_i, $2.to_i]
    end
    if l.chomp == '#<'
        l = '<'
        y = 0
    end

    if l.chomp == '#>'
        l = '>'
        y = 0
    end

    l = l.chomp.sub(/#.*/, '')
    next if l == ''
    x = 0
    tiles << l.split(/[;,]/).map { |t|
        t = t.strip
        if x < Xsentinel then x += 1 else x = Xsentinel ; Xstamp = true end
        max_x = x if x > max_x and not t.empty?
        (t[0] == '"') ? t[1..-2] : t
    }
    if y < Ysentinel then y += 1 else y = Ysentinel ; Xstamp = true end

}
 
x = df.cursor.x - offset[0]
y = df.cursor.y - offset[1]
z = df.cursor.z
starty = y - 1

if x < 0 or y < 0 or x+max_x >= map.x_count or y+max_y >= map.y_count
    max_x = max_x + x + 1
    max_y = max_y + y + 1
    raise "Position would designate outside map limits. Selected limits are from (#{x+1}, #{y+1}) to (#{max_x},#{max_y})"
end

tiles.each { |line|
    next if line.empty? or line == ['']
    line.each { |tile|
        if tile.empty?
            if x < Xsentinel then x += 1 else x = Xsentinel ; Xstamp = true end
            next
        end
        t = df.map_tile_at(x, y, z)
        s = t.shape_basic
        case tile
        when 'd'; t.dig(:Default) if s == :Wall
        when 'u'; t.dig(:UpStair) if s == :Wall
        when 'j'; t.dig(:DownStair) if s == :Wall or s == :Floor
        when 'i'; t.dig(:UpDownStair) if s == :Wall
        when 'h'; t.dig(:Channel) if s == :Wall or s == :Floor
        when 'r'; t.dig(:Ramp) if s == :Wall
        when 'x'; t.dig(:No)
        when '<'; y=starty; z += 1
        when '>'; y=starty; z -= 1
        end
        if x < Xsentinel then x += 1 else x = Xsentinel ; Xstamp = true end
    }
    x = df.cursor.x - offset[0]
    if y < Ysentinel then y += 1 else y = Ysentinel ; Ystamp = true end
}

if Xstamp or Ystamp then
  puts 'Warning: ' + (Xstamp ? 'the columns': '') + (Xstamp and Ystamp ? ' and ': '') + (Ystamp ? 'the rows' : '') + ' of the blueprint that overflow the designable area of the Dwarf Fortress embark have been ignored'
  puts '         if your blueprint X or Y dimension is close to that of the embark map, this warning is probably a false positive due to faulty logic in this script'
end

puts '  done'

Seeing that the available workforce is working frenetically; I had tasked myself to accomplish my own desired feature set:
... maybe a better implementation than raising an exception before any work is done would be to stamp the part of the blueprint that effectively can be fit into the map and print a warning about the number of rows and/or lines not stamped to inform the user. More work done before trapping, more debug aware and in the worst case, the user can always delete the designations if they were not what he intended...
The modified script as of now just work eagerly before trapping and has some new nice features:
- it stamps the safe part of blueprints that are same size than the embark. (with some more tinkering and 4 additional params partial stamping should be in the reachable zone)
- it warns when some lines and/or rows of the blueprint could had been ignored because the dimensions of the blueprint are bigger than the design-able zone of the embark.
- well formed multilevel nanoforts of 48x48 or 47x47 tiles faultily rejected by the previous script over an 1x1 embark are now possible.

I am ashamed to admit that I am almost unable to play without blueprints, at least if taking joy in it is an objective.

I am concerned with the fact that before tinkering with this script by harsh need, I did not know anything about Ruby, but were instead able to read and modify lua and C snippets.
I have only been able of correcting the bad effects of the flaw in the design, but not his source, that rest hidden for me in the part of Ruby that I do not understand :(

So it can be said that the new script recover more gracefully from his inherent flaw and does more work for the end user, without attacking the root problem sadly, for a 1x1 embark with 48x48 tiles the anterior script only worked when the blueprint has been taken of the area really design-able of at most 46x46 tiles.

I believe that the flaw comes because it counts the TOP and BOTTOM lines that represents areas non design-able of the blueprint in the current embark.

To resume the actual state of things, the bug has been conveniently hammered until it was almost unrecognizable but it has not been memorialized so that his ghost could potentially haunt us in the future. :D
Urist McAbadrausar, dabbler Ruby tinkerer, is ecstatic to have been able to tackle in a truly dwarvenly  :P manner a long standing problem, for the nanofort forgotten designers. (Linux and OSX do not have complete support for QuickFort)


8
Creative Projects / Re: Mayana the Flame of Torment (Fanwork)
« on: February 08, 2020, 01:10:35 pm »
Nice, with some luck, 48 goblins and 7 trolls to dove into, Epic!

9
Creative Projects / Test of locking thread
« on: February 08, 2020, 12:49:37 pm »
Can it be unlocked if it is created already locked?

10
I have liked this utility because it is multi-platform and very lightweight in memory usage, liberating a whole lot of system memory for being usable in Dwarf Fortress where it is badly needed.

ApplicationPlatform LanguageVersionDownload size in MBRuntime required in MB
LinuxOSXWindows
SoundSensejava runtimer2016-111165-80
SoundCensec# CLR1.4.45.275.275.27100
SoundSense-RSRust native or WebAssembler1.3.22.811.912.70

Any possibility of converting this into a WebAssembly application which is supported by the Rust build system apparently.

Milo Christiansen did that with his Rubble modding system for DF, as a way to streamline the deployment and the debugging of the UI of his application over the many OS supported by DFHACK (Windows, Linux, OSX).

Then; only one application wasm package would be usable in all the 3 OS.





11
Utilities and 3rd Party Applications / Re: DFHack 0.44.12-r3
« on: February 06, 2020, 04:21:35 pm »
Possible bug in dfhack r3 in digfort exporting a multilevel nanofort
Code: [Select]
blueprint 47 47 30 nfort
digfort nfort-dig.csv
Faults to
Spoiler (click to show/hide)
however the csv file seems well formed (however Quickfort takes it without problem)
Spoiler (click to show/hide)
So maybe the sentinel over the y axis or dimension is incorrect
Code: [Select]
blueprint 48 48 30 nfort
digfort nfort-dig.csv

faults instead to
Spoiler (click to show/hide)
Looking at the ruby code it seems there are three problems (in my very misinformed opinion):
1-) it counts each occurrence of the semantic empty lines (in relation to designations)
Code: (nfort-dig.csv) [Select]
#dig
 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
from the csv into the variable max_y when clearly it should not. (see point 3 final part)
2-) The line
Code: [Select]
if x < 0 or y < 0 or x+max_x >= map.x_count or y+max_y >= map.y_countshould be instead
Code: [Select]
if x < 0 or y < 0 or x+max_x > map.x_count or y+max_y > map.y_countbecause we could only have an problem if the dimensions of the blueprint are bigger than those of the map, never if they are the same. Even when the blueprint dimensions are bigger than those of the map; maybe a better implementation than raising an exception before any work is done would be to stamp the part of the blueprint that effectively can be fit into the map and print a warning about the number of rows and/or lines not stamped to inform the user. More work done before trapping, more debug aware and in the worst case, the user can always delete the designations if they were not what he intended.
3-) The line
Code: [Select]
        max_x = x if x > max_x and not t.empty?test correctly for semantic empty cells but
Code: [Select]
    max_y = y if y > max_y does not take into account the semantic empty lines that we have identified that exist (example: #dig, ...), we must remember the fact that any border of the map (in X or Y) is by definition undesignable hence semantically empty in any case with respect to designations, that is, in any map the TOP and BOTTOM lines of the map are undesignable... Hope this helps to identify the issue.

I have tried to find a solution but I dont know Ruby any more than to have a general idea of what is happening, so any kind soul with the required Ruby expertise to catch the problem will be most welcome ;)
Code: (digfort.rb) [Select]
# designate an area based on a '.csv' plan
=begin

digfort
=======
A script to designate an area for digging according to a plan in csv format.

This script, inspired from quickfort, can designate an area for digging.
Your plan should be stored in a .csv file like this::

    # this is a comment
    d;d;u;d;d;skip this tile;d
    d;d;d;i

Available tile shapes are named after the 'dig' menu shortcuts:
``d`` for dig, ``u`` for upstairs, ``j`` downstairs, ``i`` updown,
``h`` channel, ``r`` upward ramp, ``x`` remove designation.
Unrecognized characters are ignored (eg the 'skip this tile' in the sample).

Empty lines and data after a ``#`` are ignored as comments.
To skip a row in your design, use a single ``;``.

One comment in the file may contain the phrase ``start(3,5)``. It is interpreted
as an offset for the pattern: instead of starting at the cursor, it will start
3 tiles left and 5 tiles up from the cursor.

additionally a comment can have a < for a rise in z level and a > for drop in z.

The script takes the plan filename, starting from the root df folder (where
``Dwarf Fortress.exe`` is found).

=end

fname = $script_args[0].to_s

if not $script_args[0] then
    puts "  Usage: digfort <plan filename>"
    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

planfile = File.read(fname)

if df.cursor.x == -30000
    puts "place the game cursor to the top-left corner of the design and retry"
    throw :script_finished
end

offset = [0, 0]
tiles = []
max_x = 0
max_y = 0
y = 0
planfile.each_line { |l|
    if l =~ /#.*start\s*\(\s*(-?\d+)\s*[,;]\s*(-?\d+)/
        raise "Error: multiple start() comments" if offset != [0, 0]
        offset = [$1.to_i, $2.to_i]
    end
    if l.chomp == '#<'
        l = '<'
        y = 0
    end

    if l.chomp == '#>'
        l = '>'
        y = 0
    end

    l = l.chomp.sub(/#.*/, '')
    next if l == ''
    x = 0
    tiles << l.split(/[;,]/).map { |t|
        t = t.strip
        x = x + 1
        max_x = x if x > max_x and not t.empty?
        (t[0] == '"') ? t[1..-2] : t
    }
    y = y + 1
    max_y = y if y > max_y
}

x = df.cursor.x - offset[0]
y = df.cursor.y - offset[1]
z = df.cursor.z
starty = y - 1

map = df.world.map

if x < 0 or y < 0 or x+max_x >= map.x_count or y+max_y >= map.y_count
    max_x = max_x + x + 1
    max_y = max_y + y + 1
    raise "Position would designate outside map limits. Selected limits are from (#{x+1}, #{y+1}) to (#{max_x},#{max_y})"
end

tiles.each { |line|
    next if line.empty? or line == ['']
    line.each { |tile|
        if tile.empty?
            x += 1
            next
        end
        t = df.map_tile_at(x, y, z)
        s = t.shape_basic
        case tile
        when 'd'; t.dig(:Default) if s == :Wall
        when 'u'; t.dig(:UpStair) if s == :Wall
        when 'j'; t.dig(:DownStair) if s == :Wall or s == :Floor
        when 'i'; t.dig(:UpDownStair) if s == :Wall
        when 'h'; t.dig(:Channel) if s == :Wall or s == :Floor
        when 'r'; t.dig(:Ramp) if s == :Wall
        when 'x'; t.dig(:No)
        when '<'; y=starty; z += 1
        when '>'; y=starty; z -= 1
        end
        x += 1
    }
    x = df.cursor.x - offset[0]
    y += 1
}

puts '  done'





PD: I have loved the new version with all those additional content especially the possibility of embarking in the caverns or even in the circus. Hope the team keeps all these good work :-*

12
Yeah, I've decided to start work on this since 0.47.01 is out...
PTW

13
Utilities and 3rd Party Applications / Re: quick fort not working
« on: July 28, 2018, 02:35:27 am »
If I remember well Quickfort needs the directory data/init/macros to exist in the running Dwarf Fortress process to work correctly (it creates there his temporary *.mak macros) if this directory does not exist then the macro injection process fails...

14
Mod Releases / Re: Spellcrafts Mod - Basic Magic in Dwarf Fortress
« on: April 25, 2018, 03:27:12 pm »
So 7 fearsome dwarves have embarked in a tower with 17 metal summoners 129 ritual corpses and four named corses, then they have proposed an aliance accepted by the metal summoners.
Spoiler (click to show/hide)

The metal summoners have even become full blown members of the fortrees when their citizenship petitions have been accepted. The 131 metal golems remained neutral, even FPS wise...

The fort is dedied to the study of magic and knowledge.

Years later, an adamantine minecart associated to the trackStop of the main Quantum Stockpile has been animated and possesed by an old evil power before the time.

Until now it has slain 7 legendary champions full clad in decorated masterwork adamantine whose only sin were being in need of something inside the quantum stockpile.

The last champion was gored to death in a 3 pages report where not a single scratch was inflicted to the evil minecar.

The 9 passersby slain children had less luck! They were gored by the invulnerable minecar in less than ten lines of combat report.

As adamantine is impervious to magma they cant  even melt the minecar.

Even if it is encased in obsidian, never his tile could be mined because he would then be liberated from the trackStop to gore every one to the last stand of our civ.

Our Fortress is the last one, beside our King stand only 6 more braves against the oblivion protecting 46 mostly orfaned children and 19 artifacts (11 original books and one tower-slab) that could  preserve the future of the dwarven race.

Now all the wealth of our civ is guarded by something that is even worse than a dragon, you can kill a dragon, but you cant kill the animated adamantine minecart, his corrupted soul...

Now every member of the fort have nightmares where the magic that restrain the Evil minecart to his trackStop weakens and once liberated the Satanic minecart begin the bloody rampage that would crumble the fort to his end.

Desperate dwarves Pray for Divine Help in Holy Altars but their hope is dissipating.

Is this the bloody revenge of Armok for violating his Stockpiling Laws? or a simple challenge to harden his kind, until now no one knows, but everywhere in the fortress resonates the vibration of the hateful minecart fighting his invisible bond with his trackStop, the time of Dwarves is comming to an end, but not before a last brave stand >:(




15
Utilities and 3rd Party Applications / Re: DFHack 0.44.09-r1
« on: April 25, 2018, 12:04:31 pm »
The question is that glazing and pottery produce quality levels in the decoration and in the core quality clay items respectively.

So... even if really DF does never produce mooded ceramic artifacts, it is probably unintended or forgotten by Toady.

Maybe a helper plugin as strangemood should permit clay-ceramic moods if it is feasible.

Dwarves dreams of either mastering a skill or creating a great work of art, moreover as a race or civilization they belong to the sphere of earth & stone, in this sense few things are more dwarfy than clay ceramics, except maybe cheese...

The only other skill that generates quality levels and is not in the wiki list of the moodable skills is cooking, but as it produces quality stacks of perishable food, it is easier to justify its absence.

Who would want to eat an artifact food or wine bottle two hundred years old?  ;)




Pages: [1] 2 3 ... 11