Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  
Pages: [1] 2 3

Author Topic: Gorlak Dancer, Please Join Us  (Read 6551 times)

oldmansutton

  • Bay Watcher
    • View Profile
Gorlak Dancer, Please Join Us
« on: August 11, 2017, 07:21:36 am »

So as I've posted elsewhere, I have a visitor to my current fortress, who is a gorlak dancer.  He's been hanging out for a bit over a year now, and the longer he's here, the more fond of him I've grown.  I really want him to stay, but have yet to see a petition from him.  His graceful dancing heals the souls of all who witness his gyrations and nuanced movements.  Or something.

I'm wondering if there's a way, probably through dfhack, to force him to petition or just outright claim him as a member of our civilization.  I tried "tweak makeown" based on the dfhack plugin documentation, but that doesn't really seem to have the effect described.  Does anybody know of a way to make this happen?
Logged
I suggest using kilokittens. As cats are 10X the volume of kittens. That way, 50 cats would be .5 kilokittens.

100 cats would be 1 kilokitten.

PatrikLundell

  • Bay Watcher
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #1 on: August 11, 2017, 08:28:09 am »

I don't know, but it ought to be possible. However, I haven't found any info on where the visit goal is stored. For a petitioner, you can unblock meetings by removing ALL the meeting references, and DF will rebuild the info to set up the meeting with the right noble, but the underlying info driving that is unknown to me.

Anyway, it would be nice to hear if it's successful (in particular through the petitioning path).

As far as I know, petitioners will reveal their intention to petition the first time they speak with a member of your fortress (and non petitioners will reveal their intentions at the corresponding time as well). This can take quite some time if they go directly to the tavern and yak away with other visitors only...
The only time I've had petitioners take a huge amount of time to petition is when I had dedicated temples, at which time most visitors spent half a year or more catching up a lifetime's worth of absent praying before going on to do what they actually came to the fortress to do (research, relax, petition, etc.).
Logged

oldmansutton

  • Bay Watcher
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #2 on: August 11, 2017, 09:26:49 am »

While I AM a programmer, I've never actually dived in to working behind the scenes with dfhack, so am unfamiliar with how to do anything not already built in, nor with the data structures of dwarf fortress itself.  Kind of hoping somebody can answer it.  It doesn't have to be via petition, just making this one unit a member of the civ itself would be fine too.
Logged
I suggest using kilokittens. As cats are 10X the volume of kittens. That way, 50 cats would be .5 kilokittens.

100 cats would be 1 kilokitten.

Fleeting Frames

  • Bay Watcher
  • Spooky cart at distance
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #3 on: August 11, 2017, 09:39:02 am »

While doable, problem is that if it is not done via petition they won't generate preferences. Visitors have no preferences until then.

Otherwise, one had to set their civ_id and population_id (via viewing them and calling gui/gm-editor) to same as one found on your dwarves', flags2.visitor to false and...I think something else as well that I'm forgetting to reassign labours, though obviously this does not matter for a dancer.

oldmansutton

  • Bay Watcher
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #4 on: August 11, 2017, 09:44:25 am »

I'll have to dive into this more after work.  I'll have all weekend to explore this.  Thanks, guys, I'll keep you updated on what I find, and if anybody else finds out anything, post here! 
Logged
I suggest using kilokittens. As cats are 10X the volume of kittens. That way, 50 cats would be .5 kilokittens.

100 cats would be 1 kilokitten.

Staalo

  • Bay Watcher
  • It's all for the betterment of Dwarfkind - honest!
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #5 on: August 11, 2017, 09:52:28 am »

Are you getting any petitions at all? If not, you might be affected by a bug where petition processing queue gets stuck, probably when your mayor or other noble was changed when one petitioner was waiting for an audience.

As a workaround, you could try the following: find the oldest visitor in your fortress... and kill him. He (or she) should be the last person with Visitor status on your (u)nit/Other list, the nearest to the bottom of the list. That one's most likely the one whose petition got stuck in the fortress bureaucracy and is just waiting for his audience indefinitely. Just sic your militia at him and with any luck petition processing should resume as if nothing had happened.
« Last Edit: August 11, 2017, 09:54:50 am by Staalo »
Logged
Kasmko Taldequihu, Human Criminal corrupted zombie is visiting.
Mong Todsporro, Human Criminal death zombie is visiting.

Uhhh... welcome?

Fleeting Frames

  • Bay Watcher
  • Spooky cart at distance
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #6 on: August 11, 2017, 10:06:19 am »

Or try PatrikLundell's DFHack script: unblockmeetings, if that's too bloody. Still, not everyone petitions.

(Also, the above advice may result in loyalty cascade due friendships.)

oldmansutton

  • Bay Watcher
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #7 on: August 11, 2017, 10:33:16 am »

I'm getting petitions, I'm just hoping for one from this one unit, as I really want a Gorlak dancer fulltime.
Logged
I suggest using kilokittens. As cats are 10X the volume of kittens. That way, 50 cats would be .5 kilokittens.

100 cats would be 1 kilokitten.

Staalo

  • Bay Watcher
  • It's all for the betterment of Dwarfkind - honest!
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #8 on: August 11, 2017, 10:54:19 am »

Or try PatrikLundell's DFHack script: unblockmeetings, if that's too bloody. Still, not everyone petitions.

(Also, the above advice may result in loyalty cascade due friendships.)

Ah, looks like I've been doing it the hard way all along. Although I've never had a cascade from intentionally roughing up visitors; instead I get them from completely unexplainable situations like caravan guards suddenly deciding to murder everyone near the depot.
Logged
Kasmko Taldequihu, Human Criminal corrupted zombie is visiting.
Mong Todsporro, Human Criminal death zombie is visiting.

Uhhh... welcome?

oldmansutton

  • Bay Watcher
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #9 on: August 11, 2017, 12:42:34 pm »

I've spent a ridiculous amount of time today reading source code for both dfhack, and various scripts that target areas I think are likely to have the information I'm looking for.  I just wish this work day would end so that I can actually start looking into forcing a petition.  Not that I'm doing much work (I'm already halfway done with next weeks work), but maaaan.

The reference to Patrick's meeting script was helpful, as are a lot of whoever Putnam3145 on github is.

Further bulletins as events warrant.
Logged
I suggest using kilokittens. As cats are 10X the volume of kittens. That way, 50 cats would be .5 kilokittens.

100 cats would be 1 kilokitten.

PatrikLundell

  • Bay Watcher
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #10 on: August 11, 2017, 12:47:14 pm »

As I said above, I don't think the unblockmeetings script is helpful when it comes to generating "fresh" petitions, as that's caused by some state deeper down, possibly or probably unmapped by DFHack. I wouldn't mind being proven wrong, though.
Logged

oldmansutton

  • Bay Watcher
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #11 on: August 11, 2017, 01:26:39 pm »

As I said above, I don't think the unblockmeetings script is helpful when it comes to generating "fresh" petitions, as that's caused by some state deeper down, possibly or probably unmapped by DFHack. I wouldn't mind being proven wrong, though.

No, but it gives me something to hopefully look for when a petition is made, or at least a general neighborhood of where the information gets set.  I really will know more in about 3 hours.... although having a current memory map, of both what IS and ISN'T mapped so far would be beyond helpful.

Edit:  Which I've found (at least in terms of units)
« Last Edit: August 11, 2017, 01:50:52 pm by oldmansutton »
Logged
I suggest using kilokittens. As cats are 10X the volume of kittens. That way, 50 cats would be .5 kilokittens.

100 cats would be 1 kilokitten.

Nolimit

  • Bay Watcher
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #12 on: August 11, 2017, 02:19:08 pm »

I just recently had similar problem, and I found a solution! I tried to add wild caveswallow man as my citizen. At first I tried ‘tweak makeown’ command and it kinda worked, but not really. Caveswallow man became some sort of long-term resident, which means that I couldn't turn on any labors for him. Oh, man, how long I was looking for a solution, and it end up being rather simple one. I used gui/gm-editor on unit in question (press 'v' to select unit, then type gui/gm-editor in dfhack). First, his civ_id should match you fortress civilization id (you could look it up from one of your citizens).
Spoiler (click to show/hide)
Also, you should uncheck some flags: flags2.visitor, flags3.unk31 definitely should be false (unk31 is scolar, some other unks are probably responsible for other types of visitors. To be sure, check one of your dwarfs and set all flags the same way), for invaders other flags should be unchecked, but it still didn't work (while invader became fully controllable, they remained hostile)
Spoiler (click to show/hide)
Spoiler (click to show/hide)
Your soon to be a citizen also should be a historical figure, it's not a problem for visitors, they always are, but for wild animal people you have to make them historical figures (being involved in combat, killing someone etc.). For next step find hist_figure_id or hist_figure_id2. To open hist_figure entry highlight it and press 'i' and in a list choose 'historical_figure' (would be first in a list).
Spoiler (click to show/hide)
There go to entity_links, you will see links to all of the entities.
Spoiler (click to show/hide)
To add another link press alt-i then write histfig_entity_link_memberst and enter.
Spoiler (click to show/hide)
New entry will appear at the bottom, go into it, there would be two values. For id write your civ_id, for strength - 100.
Spoiler (click to show/hide)
Now go back to entity_links and add another histfig_entity_link_memberst. For this one you have to look up the id of your local government. To do this just find it in entity_links of your citizen. Use this id for new citizen and strength to 100.
Spoiler (click to show/hide)
This way you should get fully controllable citizen
Spoiler (click to show/hide)
The most important thing in all of this is him being a member of you local government entity as well as having civ_id set to you civ id. (some flags may also mess up him being controllable)
You could also add id of your historical figure to both historical_entity's in histfig_ids and hist_figures but last time I tried, I skipped this and it worked fine.
Somebody with lua knowledge could probably make script for all of this. (I could do it myself, but it will require me learning lua, and I'm not a programmer at all).
Preferences were not a big deal for me, and that's probably the simpliest method of making someone controllabe.

Ps. Sorry for my English, haven’t properly checked for mistakes.


Edit: I have to confess, I haven't read whole thread when I posted. From what I'm understanding now, you want him to undergo whole process of petitioning, not just make him controllable. Would love to see your results.
« Last Edit: August 11, 2017, 03:09:56 pm by Nolimit »
Logged

oldmansutton

  • Bay Watcher
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #13 on: August 11, 2017, 03:16:13 pm »

Edit: I have to confess, I haven't read whole thread when I posted. From what I'm understanding now, you want him to undergo whole process of petitioning, not just make him controllable. Would love to see your results.

Yeah, but failing being able to do that, what you just posted is the next best thing.  So no matter what, I'll have a gorlak dancer before the night is over.  Still going to try some detective work in unmapped memory areas to see if I can find a flag/timer for petitions.
Logged
I suggest using kilokittens. As cats are 10X the volume of kittens. That way, 50 cats would be .5 kilokittens.

100 cats would be 1 kilokitten.

Fleeting Frames

  • Bay Watcher
  • Spooky cart at distance
    • View Profile
Re: Gorlak Dancer, Please Join Us
« Reply #14 on: August 11, 2017, 03:38:44 pm »

@Nolimit. Nice work! Yeah, wouldn't be hard to make that a lua script, but petition would be better.

On that note, unk_29 is not visitor flag, but "Marked for gelding". Used it yesterday to geld visitors (had to make them my civ first), then send them off to figure out what flags histfigs use to mark for gelding (I'd tentatively say hfunit.info.wounds.anon3 being 1 (0 seems dead, I guess). hfunit.unk_v4019_1 also gets a number (seems to be smaller nearer to start of embark), buuut I had at least one unit have that set with wounds being nil.)
« Last Edit: August 11, 2017, 03:50:15 pm by Fleeting Frames »
Logged
Pages: [1] 2 3