Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  

Author Topic: Soliciting ideas for how to intervene in the fishing industry  (Read 1963 times)

GavJ

  • Bay Watcher
    • View Profile

I am trying to force additional processing steps for fishing, the last piece of my food mod puzzle. And looking like maybe the trickiest piece.

From what I can tell, a single tag [VERMIN_FISH] makes things fishable and makes them appear as raw fish items, with material of the creature that's hard to do anything with.
Then they get cleaned to normal fish also with creature material, and are immediately edible =(

I can't turn off the fish cleaning job but leave the fishing job on, because of a bug that allows you to just turn it right back on again in game. And there don't seem to be any sort of raw tags for diverting the item or material to something else (unlike EBO or BUTCHER_SPECIAL for other meats). Nor is there any other way to simulate fishing, since it's pretty unique. Nor can I use any temperature trickery to make fish melt at room temperature into globs to change their item type, because I don't think I have any way of changing the melting point of an abstract "salmon:male" material (or do I?) I could just turn off fishing ("dwarves are allergic to fish") but that's lame if I don't have to. I could also reduce populations so it's only helpful very early in the fort, but that's also less ideal than making it well balanced long term.

Any other ideas?
Logged
Cauliflower Labs – Geologically realistic world generator devblog

Dwarf fortress in 50 words: You start with seven alcoholic, manic-depressive dwarves. You build a fortress in the wilderness where EVERYTHING tries to kill you, including your own dwarves. Usually, your chief imports are immigrants, beer, and optimism. Your chief exports are misery, limestone violins, forest fires, elf tallow soap, and carved kitten bone.

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #1 on: June 25, 2014, 07:02:32 am »

Reducing skill learn rate for dwarves and fishing. this slows it down.

You can also make all fish use different material templates, for example an inedible meat, so that you need to cook it first to turn it edible. But I dont think that fish refining is the problem. DF already has that down. Its "catch fish", "carry fish to fish cleaner", "gut fish". Thats pretty much how its done in real life. And more processing than you have at the butcher in DF.

The problem with fishing is that fishers catch unlimited fish from a single pond, at a rapid rate, feeding the entire fort. OR the fish die out. Its one of the two, but no reasonably slow rate of fishing that can bolster, but not sustain a fort.
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

GavJ

  • Bay Watcher
    • View Profile
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #2 on: June 25, 2014, 08:03:06 am »

Yes, that's right, namely, the step(s) i want to add are "cook and/or preserve fish"
...as opposed to leaving freshly gutted fish on a cave floor for 4 years then eating them (still raw) and everything turning out just fine.

However, I don't think doing anything to the fish meat will have any effect, because fish items aren't made out of "creature_mat:salmon:muscle" or whatever. They're made out of "salmon:female" material, whatever that is / not actually a real material with properties I can mod AFAIK. Similar to corpses.

Edit: the reason I wanted to intervene in the middle of fish PREP, was not to stop fish prep, but just because I hoped it was a place I could intervene. And then simply proceed to add my own fish prep step, but one that's under control and yields proper, inedible products. Etc. etc.
« Last Edit: June 25, 2014, 08:10:22 am by GavJ »
Logged
Cauliflower Labs – Geologically realistic world generator devblog

Dwarf fortress in 50 words: You start with seven alcoholic, manic-depressive dwarves. You build a fortress in the wilderness where EVERYTHING tries to kill you, including your own dwarves. Usually, your chief imports are immigrants, beer, and optimism. Your chief exports are misery, limestone violins, forest fires, elf tallow soap, and carved kitten bone.

Urist Da Vinci

  • Bay Watcher
  • [NATURAL_SKILL: ENGINEER:4]
    • View Profile
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #3 on: June 25, 2014, 08:47:18 am »

...
However, I don't think doing anything to the fish meat will have any effect, because fish items aren't made out of "creature_mat:salmon:muscle" or whatever. They're made out of "salmon:female" material, whatever that is / not actually a real material with properties I can mod AFAIK. Similar to corpses.
...

Slow down there. Corpses are often made from the creature's bone material for the purposes of external effects.

GavJ

  • Bay Watcher
    • View Profile
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #4 on: June 25, 2014, 09:42:25 am »

...
However, I don't think doing anything to the fish meat will have any effect, because fish items aren't made out of "creature_mat:salmon:muscle" or whatever. They're made out of "salmon:female" material, whatever that is / not actually a real material with properties I can mod AFAIK. Similar to corpses.
...

Slow down there. Corpses are often made from the creature's bone material for the purposes of external effects.

"Often" or "Always" ?

If "often" what is it the rest of the time and how do you predict?
If "always" I might be able to work with that somehow, but I'm still not even sure how. Because bones don't have [EDIBLE_RAW] in them, so if the fish are indeed made of the species' bones, then it must be the fact that they are a fish item that is making them edible, not their material, so I still wouldn't be able to mod them to be inedible. I might be able to add in some kind of syndrome, but I don't really want to poison my dwarves or whatever else as a result of eating it. I just want them not to eat it in the first place. But I dunno, it would be a start.

edit: wait, actually, if they are made of, say, bone, then it might work to do what I said in the OP and make fish have special bones that melt at room temperature but also have tons of [INSULATION] on that layer while they're alive so that they don't melt at that point... bwuahaha. Extremely inelegant, but maybe successful. I shall test.
« Last Edit: June 25, 2014, 09:45:14 am by GavJ »
Logged
Cauliflower Labs – Geologically realistic world generator devblog

Dwarf fortress in 50 words: You start with seven alcoholic, manic-depressive dwarves. You build a fortress in the wilderness where EVERYTHING tries to kill you, including your own dwarves. Usually, your chief imports are immigrants, beer, and optimism. Your chief exports are misery, limestone violins, forest fires, elf tallow soap, and carved kitten bone.

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #5 on: June 25, 2014, 09:57:37 am »

In the case of vanilla DF fish, its "always".

Corpses take the reagent from the largest material component of the body, which is bones, if not for some super special cavern monsters.

Thats what Toady One sent my a while ago:
For example [REAGENT:Corpse:CORPSE:NONE:NONE:NONE][USE_BODY_COMPONENT][REACTION_CLASS:GOBLIN], which would only accept goblin corpses. We tried with many different syntax, adding reaction_classes to the materials and tissues that make the creatures, working with different bodies... nothing. Its always either accepting all corpses, or none.

Hmm, so I haven't set anything up to test it, but what it looks like is that putting in "USE_BODY_COMPONENT" actually restricts the reaction from using butcherable corpses/pieces, because otherwise the regular reactions that use skins/etc. would trigger on corpses.  So start by getting rid of that.  Then it looks like it does check corpses for reaction classes, but it uses the "forced material", which for a corpse is the "largest tissue"...  I'm not sure what that is for a goblin...  muscle, bone?  Might have to try it out.  But theoretically there is hope.  Keep the CORPSE item type, and then try reaction classes on the larger mats in the body, without USE_BODY_COMPONENT.  If that doesn't work, then it's a bug.
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

GavJ

  • Bay Watcher
    • View Profile
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #6 on: June 25, 2014, 10:09:19 am »

Ah yes, but is that the way it acts while just sitting on the ground too? Or only in reactions?

I'll post what I find. Also, the "tag that basically targets everything except butcherable stuff" is good to know about!

Thanks
Logged
Cauliflower Labs – Geologically realistic world generator devblog

Dwarf fortress in 50 words: You start with seven alcoholic, manic-depressive dwarves. You build a fortress in the wilderness where EVERYTHING tries to kill you, including your own dwarves. Usually, your chief imports are immigrants, beer, and optimism. Your chief exports are misery, limestone violins, forest fires, elf tallow soap, and carved kitten bone.

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #7 on: June 25, 2014, 10:22:00 am »

Btw, I never managed to find a solution to the bug mentioned. I was trying to make a reaction that only targets race-specific corpses, for example only goblin-corpse or only kobold-corpse.
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

GavJ

  • Bay Watcher
    • View Profile
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #8 on: June 25, 2014, 10:53:39 am »

Btw, I never managed to find a solution to the bug mentioned. I was trying to make a reaction that only targets race-specific corpses, for example only goblin-corpse or only kobold-corpse.
Well presumably you'd just have to give kobolds special bones made out of almonds or whatever, and goblins bones made out of rainbow dust.
Then add unique reaction classes to rainbow dust and almonds, and do [CORPSE:NONE:NONE:NONE][REACTION_CLASS:ALMONDS] yes?

Does that not work?
Logged
Cauliflower Labs – Geologically realistic world generator devblog

Dwarf fortress in 50 words: You start with seven alcoholic, manic-depressive dwarves. You build a fortress in the wilderness where EVERYTHING tries to kill you, including your own dwarves. Usually, your chief imports are immigrants, beer, and optimism. Your chief exports are misery, limestone violins, forest fires, elf tallow soap, and carved kitten bone.

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #9 on: June 25, 2014, 11:54:22 am »

I tried, spawned 10 goblins, slayraced them, the first corpse is accepted for the reaction, then the reaction turns red, the other corpses are not. Something seems to happen to them after a few ingame ticks. I honestly dont know, and even Toady had to guess... so theres that.
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

GavJ

  • Bay Watcher
    • View Profile
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #10 on: June 25, 2014, 04:32:31 pm »

Maybe as part of the beginning of the rotting algorithm, their tissues change relative proportions? Or order of importance or something. Like maybe, for example, in some list somewhere in the code, it starts counting down for miasma, and the fact that it does so places some soft tissue at the top of the heap instead, and that becomes the material of the corpse. If so, it could be anything, even like eyeballs or who knows.

You could try doing reactions that accept any corpse, and make just a bar, and then give the bar GET_MATERIAL_FROM_REAGENT, to get an idea what they are turning into after those few ticks? It might just give you [name of goblin] bar, but it might tell you the actual material if the hints from the wiki are to be believed.

If you actually get anything useful, then you can use that to more efficiently attempt to try again with the reaction class.
« Last Edit: June 25, 2014, 04:34:44 pm by GavJ »
Logged
Cauliflower Labs – Geologically realistic world generator devblog

Dwarf fortress in 50 words: You start with seven alcoholic, manic-depressive dwarves. You build a fortress in the wilderness where EVERYTHING tries to kill you, including your own dwarves. Usually, your chief imports are immigrants, beer, and optimism. Your chief exports are misery, limestone violins, forest fires, elf tallow soap, and carved kitten bone.

Urist Da Vinci

  • Bay Watcher
  • [NATURAL_SKILL: ENGINEER:4]
    • View Profile
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #11 on: June 25, 2014, 08:33:46 pm »

Maybe as part of the beginning of the rotting algorithm, their tissues change relative proportions? Or order of importance or something. Like maybe, for example, in some list somewhere in the code, it starts counting down for miasma, and the fact that it does so places some soft tissue at the top of the heap instead, and that becomes the material of the corpse. If so, it could be anything, even like eyeballs or who knows.

You could try doing reactions that accept any corpse, and make just a bar, and then give the bar GET_MATERIAL_FROM_REAGENT, to get an idea what they are turning into after those few ticks? It might just give you [name of goblin] bar, but it might tell you the actual material if the hints from the wiki are to be believed.

If you actually get anything useful, then you can use that to more efficiently attempt to try again with the reaction class.

Using DFHack to obtain the material of the vermin fish items finds that they are made from the fish's BONE. Furthermore, rotten fish items are the same as the unrotten items, except that the "rotten" item flag has been enabled after the rot_timer value gets high enough. It is still BONE.

GavJ

  • Bay Watcher
    • View Profile
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #12 on: June 25, 2014, 08:51:31 pm »

How do you check that in dfhack btw? Also, can you check item temperatures? I've been trying to figure out how to do both of those things forever...
Logged
Cauliflower Labs – Geologically realistic world generator devblog

Dwarf fortress in 50 words: You start with seven alcoholic, manic-depressive dwarves. You build a fortress in the wilderness where EVERYTHING tries to kill you, including your own dwarves. Usually, your chief imports are immigrants, beer, and optimism. Your chief exports are misery, limestone violins, forest fires, elf tallow soap, and carved kitten bone.

Urist Da Vinci

  • Bay Watcher
  • [NATURAL_SKILL: ENGINEER:4]
    • View Profile
Re: Soliciting ideas for how to intervene in the fishing industry
« Reply #13 on: June 25, 2014, 09:43:24 pm »

How do you check that in dfhack btw? Also, can you check item temperatures? I've been trying to figure out how to do both of those things forever...

Lua scripting:

Code: (itemtest.lua) [Select]
item=dfhack.gui.getSelectedItem()
if item==nil then
print ("No item under cursor!  Aborting!")
return
end

printall(item)
material=dfhack.matinfo.decode(item).material
print("---")
printall(material)
print("---")
printall(item.temperature)