v50 Steam/Premium information for editors
  • v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
  • Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.

Editing User:Vasiln/Build order

Jump to navigation Jump to search

Warning: You are not logged in.
Your IP address will be recorded in this page's edit history.


The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
I once did some careful examination of a creature triggering a pressure plate linked to various buildings built either before or after the pressure plate.  I added those findings to the [[pressure plate]] page.  However, some of the things I found felt inconsistent with [[User:Hussell|Hussell's]] findings regarding build order.  In particular, he found that build order of [[gear assembly|gear assemblies]] affected the period of his [[repeater]]s, whereas I found that gear assemblies were always triggered on the same tick, regardless of whether they were built before or after the triggering pressure plate.  Also, I found that the delay of pressure plates was 99 ticks, rather than the traditionally accepted 100.
+
I once did some careful examination of a creature triggering a pressure plate linked to various buildings built either before or after the pressure plate.  I added those findings to the [[pressure plate]] page.  However, some of the things I found felt inconsistent with [[User:Hussell|Hussell's]] findings regarding build order.  In particular, he found that build order of [[gear assembly|gear assemblies]] affected the period of his [[repeater]]s, whereas I found that gear assemblies were always triggered on the same tick, regardless of whether they were built before or after the triggering pressure plate.
  
These findings have always kind of bothered me, but I think I have a hypothesis that explains it.
+
That's always kind of bothered me, but I think I have a hypothesis that explains it.
  
 
==The Grand Unified Hypothesis of Build Order==
 
==The Grand Unified Hypothesis of Build Order==
Line 8: Line 8:
  
 
*1) Every creature checks its [[speed]] to determine whether it can move to the next tile in its path.  If it can, it moves.  If its next tile is occupied or inaccessible, it recomputes path.
 
*1) Every creature checks its [[speed]] to determine whether it can move to the next tile in its path.  If it can, it moves.  If its next tile is occupied or inaccessible, it recomputes path.
*2) Every tile of fluid is evaluated to determine whether it should flow or teleport, and if it should, it does.
+
*2) Power needs are computed for power generators.  If power needs are greater than power output, power generators are considered unpowered.  (This one requires a lot of research).
 
*3) Every variable-state building is evaluated (more on this later).
 
*3) Every variable-state building is evaluated (more on this later).
*<s>4) Every tile of [[water]] is evaluated to determine whether it should flow (or maybe teleport), and it does so, if it should.</s>
+
*4) Every tile of [[water]] is evaluated to determine whether it should flow (or maybe teleport), and it does so, if it should.
  
The important part of this is step 3.  In particular, buildings are evaluated in the reverse order to which they were built.  If you build a pressure plate, then a [[door]], the game will first run the door's ''think'' function, then run the plate's ''think'' function.
+
The important part of this is step 2.  In particular, buildings are evaluated in the reverse order to which they were built.  If you build a pressure plate, then a [[door]], the game will first run the door's ''think'' function, then run the plate's ''think'' function.
  
 
Here are the ''think'' functions for various variable state buildings, as far as I can tell:
 
Here are the ''think'' functions for various variable state buildings, as far as I can tell:
  
 
====Door====
 
====Door====
*If a ''close'' signal has been generated for this door, close the door.
+
*If a ''close'' signal has been generated for this door, close the door. (Note that the door doesn't itself evaluate ''open'' signals.)
*Note that the door doesn't itself evaluate ''open'' signals!
 
 
====Pressure plate====
 
====Pressure plate====
*If triggering criteria are met, and the device most recently sent a ''close'' signal, send an ''open'' signal.  Additionally, open any doors or [[hatch cover|hatches]] linked to this pressure plate, and toggle <s>any linked gear assemblies</s> the '''appearance''' of any gear assemblies, making them show up as engaged or disengaged.
+
*If triggering criteria are met, and the device most recently sent a ''close'' signal, send an ''open'' signal.  Additionally, open any doors or [[hatch cover|hatches]] linked to this pressure plate, and toggle any linked gear assemblies.
 
*If triggering criteria are met and the device most recently sent an ''open'' signal, don't do anything, except remember this tick.
 
*If triggering criteria are met and the device most recently sent an ''open'' signal, don't do anything, except remember this tick.
*If triggering criteria are not met, and it has been exactly 100 ticks since triggering criteria were last met, send a ''close'' signal.  Additionally, toggle <s>any linked gear assemblies</s> the '''appearance''' of any linked gear assemblies.
+
*If triggering criteria are not met, and it has been exactly 99 ticks since triggering criteria were met, send a ''close'' signal.  Additionally, toggle any linked gear assemblies.
*If triggering criteria are not met, and it has been greater than or less than 100 ticks since triggering criteria were met, don't do anything.
+
*If triggering criteria are not met, and it has been greater than or less than 99 ticks since triggering criteria were met, don't do anything.
 
====Bridge====
 
====Bridge====
*If no open or close is scheduled for this device, check for a signal.  If ''open'', schedule an open in 100 ticks.  If ''close'', schedule a close in <s>99</s> 100 ticks.
+
*If no open or close scheduled for this device, check for a signal.  If ''open'', schedule an open in 100 ticks.  If ''close'', schedule a close in 99 ticks.
 
*if no signal, or an open or close is already scheduled, don't do anything.
 
*if no signal, or an open or close is already scheduled, don't do anything.
 
====Screw Pump====
 
====Screw Pump====
Line 31: Line 30:
 
*Otherwise, don't do anything.
 
*Otherwise, don't do anything.
 
====Gear Assembly====
 
====Gear Assembly====
*If an ''open'' or ''close'' has been generated by a device linked to this assembly, toggle the actual state of this assembly (not the apparent state, which is managed by the pressure plate).
+
*If gear assembly is adjacent to a device with power and is engaged, consider this tile powered.
<s>*If gear assembly is adjacent to a device with power and is engaged, consider this tile powered.</s>
+
*If gear assembly is not adjacent to a device with power or is not engaged, do not consider this tile powered.
<s>*If gear assembly is not adjacent to a device with power or is not engaged, do not consider this tile powered.</s>
 
<s>*Note that gear assemblies do not evaluate signals!</s>
 
 
====Other Furniture====
 
====Other Furniture====
I believe that the think functions described earlier apply to all other forms of furniture.  Hatches use the same think function as doors.  Grates, bars, and floodgates use the same think function as bridges.  <s>[[Lever]]s require a special note: I believe they function the same way as a pressure plate.  However, there's a chance that the dwarf pulling them actually sends the signals, in which case you would expect to see levers functioning as if they were always built before the furniture they trigger.</s>  Levers do not function like other furniture!  It is the dwarf that sends open and close signals, rather than the furniture, which means that signals from levers are always evaluated before any other buildings.  Levers automatically open doors and toggle gear assemblies, since those are not functions of the furniture themselves.
+
I believe that the think functions described earlier apply to all other forms of furniture.  Hatches use the same think function as doors.  Grates, bars, and floodgates use the same think function as bridges.  [[Lever]]s require a special note: I believe they function the same way as a pressure plate.  However, there's a chance that the dwarf pulling them actually sends the signals, in which case you would expect to see levers functioning as if they were always built before the furniture they trigger.
  
 
===How this reconciles Hussell's clock and my goblin repeater===
 
===How this reconciles Hussell's clock and my goblin repeater===
Line 171: Line 168:
 
Just to clarify, pressure plates trigger on 2+/7 water, and are linked to the gear assembly of the same color.  Device is built in the following order: first the upper pump, then the lower pump, then the gear assemblies, then the pressure plates.  Beginning state has 7/7 water in the left-hand reservoir, both gears disengaged.  At t=0, we engage the green gear via lever.  Let's examine, ''in order'', the events happening during important ticks.
 
Just to clarify, pressure plates trigger on 2+/7 water, and are linked to the gear assembly of the same color.  Device is built in the following order: first the upper pump, then the lower pump, then the gear assemblies, then the pressure plates.  Beginning state has 7/7 water in the left-hand reservoir, both gears disengaged.  At t=0, we engage the green gear via lever.  Let's examine, ''in order'', the events happening during important ticks.
  
In a previous version of this page, I got everything wrong about this sequenceRather than strike-out a bunch of stuff, I've just replaced it-- you can always look at the revision history if you want to see my embarrassing mistakes.
+
T=0: Red plate already activated, no action.  Green gear becomes powered.  Lower pump moves water to right.
 +
  T=1: Red plate schedules a close to occur at T=99.  Green plate toggles green gear.  Green gear becomes unpowered.  Lower pump stops pumping.
 +
T=99: Red plate sends a close to red gear.  Red gear becomes powered. Upper pump moves water to the left.
 +
T=100: Green plate schedules a close to occur at T=199.
 +
T~=125: Water lands on red plate.  Red plate sends an open to red gear.  Red gear becomes unpowered.
 +
T=199: Green plate toggles green gear.  Green gear becomes powered.  Lower pump moves water to the right.
 +
T=200: Red plate schedules a close for T=299.  Green plate toggles green gear.  Green gear becomes unpowered.
 +
T=299: Red plate toggles red gear.  Red gear becomes powered.  Upper pump moves water to the left.
  
  T =  0: Lever sends ''open''.  Red plate has water on it, but did last tick as well: no signal.  Green plate has no water, no signal.  Green gear assembly engages in response to ''open''.  Lower pump pumps left-to-right.
+
Do you see? Hussell's clock '''would not work''' unless pressure plates sent signals 99 ticks after becoming disengaged!
T=  1: Red plate deactivated, schedules close for T=100.  Green plate has water, sends ''open''.  Green gear assembly disengages.  Lower pump unpowered (but will continue to pump through T=49).  Upper pump unpowered.
 
T =100: Red plate sends ''close''.  Green plate has water, but previously activated.  Red gear assembly engages.  Lower pump unpowered.  Upper pump powered, moves water right-to-left.
 
T =101: Red plate dry (water needs to fall onto it).  Green plate dry, schedules ''close'' for T = 200.  Lower pump unpowered, upper pump powered.
 
T~=120: Water falls onto red plate.  Red plate sends open.  Green plate dry.  Lower pump unpowered.  Upper pump unpowered, but will continue to pump through T~=168.
 
T =200: Red plate previously activated.  Green plate sends ''close''.  Green gear assembly engages.  Lower pump powered, moves water left-to-right.  Upper pump unpowered.  '''Same as T=0.'''
 
 
 
In the previous version, I underestimated the time it took pressure plates to reset.  I'm embarrassed about that, and it led me to a quixotic search for a 100 tick repeater that wasted a lot of my energy.
 
  
 
====Pressure plate trigger data====
 
====Pressure plate trigger data====
Line 186: Line 183:
 
Here, I'm just going to link you to http://mkv25.net/dfma/movie-2363-timingdetails.
 
Here, I'm just going to link you to http://mkv25.net/dfma/movie-2363-timingdetails.
  
<s>Actually, on reviewing that, it doesn't necessarily demonstrate what I want it to.  This could be due to imperfect frame-by-frame capture for movies, or it could be because I screwed up.  I will have to confirm.</s>  Yes, it does demonstrate the effects, you just have to slow it down to a rate below 1 to see all of the frames.
+
Actually, on reviewing that, it doesn't necessarily demonstrate what I want it to.  This could be due to imperfect frame-by-frame capture for movies, or it could be because I screwed up.  I will have to confirm.
  
 
====Dropping a dwarf takes 7 ticks====
 
====Dropping a dwarf takes 7 ticks====
Creatures fall at a constant rate of 6 ticks.  However, when you drop a dwarf, it takes 7 ticks for the dwarf to fall the first z-level.  This, according to my hypothesis, is because the dwarf doesn't know the ground isn't there during the tick the floor disappears, because the ground doesn't disappear during the dwarf's ''think'', it disappears later, during the hatch's ''think''.   '''But see the caveat below!'''
+
Creatures fall at a constant rate of 6 ticks.  However, when you drop a dwarf, it takes 7 ticks for the dwarf to fall the first z-level.  This, according to my hypothesis, is because the dwarf doesn't know the ground isn't there during the tick the floor disappears, because the ground doesn't disappear during the dwarf's ''think'', it disappears later, during the hatch's ''think''.
  
 
===Testable Predictions===
 
===Testable Predictions===
Line 236: Line 233:
 
*At tick=100, bridges open or close.
 
*At tick=100, bridges open or close.
  
There are two interesting parts to this finding.  First, lever signals are being evaluated before all other signals-- I believe it's happening in the dwarf phase, with completion of the lever pull task.  <s>Second, open and close signals are being acknowledged by bridges at the same time-- 100 ticks after receipt of signal.  Is there some way to rectify this with the behavior of bridges linked to pressure plates?</s>  Of course there is-- it is the 99 tick delay associated with pressure plates that is responsible for the 199 tick closing of bridges, not the bridges themselves.
+
There are two interesting parts to this finding.  First, lever signals are being evaluated before all other signals-- I believe it's happening in the dwarf phase, with completion of the lever pull task.  Second, open and close signals are being acknowledged by bridges at the same time-- 100 ticks after receipt of signal.  Is there some way to rectify this with the behavior of bridges linked to pressure plates?
  
 
====Gear assemblies====
 
====Gear assemblies====
Line 261: Line 258:
 
I'm not going to test 1.1, 1.2, 2.1, or 2.2.  I will test the others.  Particularly notable is the behavior of 3.
 
I'm not going to test 1.1, 1.2, 2.1, or 2.2.  I will test the others.  Particularly notable is the behavior of 3.
  
=====Findings=====
+
====Lever vs pressure plate activated bridges====
Initial findings were flawed.  1, 2, and 4 behaved as predicted, but 3 didn't-- in fact, it never activated the plate at all.  Tearing down and rebuilding, even rebuilding gears earlier in the power supply, didn't change anything.  In fact, the strange behavior of 3 makes me distrust what I saw with 4-- maybe I didn't look carefully enough?
+
To verify my lever findings, and compare to my pressure plate findings, I'm going to make two bridges, such that they are both activated at the same time, but one via lever, while the other via bridge.
 
 
====Gear assemblies revised====
 
What does this mean? Could it be because I turned power on with a lever?  That would suggest that gears do manage their own signals in a way.  What if I do a pressure plate activated gear, built before the plate that activates it, but after the pump it powers?  Something like,
 
  *
 
# %% #
 
# %%^#
 
# ####
 
###
 
 
 
Okay, build return pump, feed pump (independently powered), plate, gear.  1) Gear starts out inactive.  Plate doesn't trigger.  Feed moves water.  Return doesn't function.  2) Gear is inactive.  Plate triggers.  Feed has nothing to pump.  What does the return pump do?  Pump, or not?  If it does not, then the plate was unable to activate it this tick.  I know that the gear appears active at the end of the turn, but that doesn't mean it functions.
 
 
 
=====Findings=====
 
What actually happens: Tick 1: feed works.  Tick 2: Return doesn't pump.  Tick 3: Return pumps.
 
 
 
So the trick is that gear assemblies '''look''' like they toggle without regard to build order, but build order still affects whether they actually transmit power or not.
 
 
 
====Water flow====
 
This is a simple one, and I'm going to use Hack to test it.
 
 
 
# ## 7/7 water
 
# ^# 7/7 water, 0/7 water and plate that triggers on 2+
 
####
 
 
 
Predicted: Plate does not trigger on first tick, but triggers on second tick.
 
 
 
=====Findings=====
 
Water doesn't teleport on the first tick-- it takes a few frames.  When the water lands on the plate, the plate triggers immediately, rather than at the next tick.  This suggests that water moves before buildings are evaluated.
 
 
 
====Mutual Lever Drop====
 
So I started thinking about when exactly hatches open, since build order doesn't affect them, and think I came up with a good way to see if they open in the triggering device's turn.  We design a simple drop system, where a lever controlled hatch drops a dwarf a z-level.  The thing is, we get two dwarves, and we let them drop each other using this method.  If levers are evaluated in the dwarf phase, and hatches open when triggered (not later in the tick), then one dwarf, later in the dwarf queue, will take 6 ticks to fall, and one dwarf, earlier in the dwarf queue, will take 7 ticks to fall.  It's totally important to only let two dwarves into the system-- '''who''' pulls the lever might be a determining factor for how long it takes the dwarf to fall!
 
 
 
=====Findings=====
 
Yup, sure enough, it takes a different amount of time, depending on who pulls the lever.  When a dwarf that has arrived more recently pulls the lever dropping a dwarf that has arrived earlier, it takes 6 ticks.  When the earlier dwarf drops the later dwarf, it takes 7 ticks. This suggests:
 
  
*Dwarves are evaluated in a last in, first out method, similarly to furniture.
+
*1) Build the machine demonstrated in the above gear assembly test.  Use build order 1.
*Lever signals are sent during the turn of the dwarf who pulls the lever.
+
*2) Build a lever and a bridge.  Link the lever both to the bridge, and to both gear assemblies.  Build order shouldn't matter, but we'll build the lever first.
*Hatches (and presumably doors as well) open '''immediately''' upon an ''open'' signal, rather than waiting for the hatch to evaluate that signal.
+
*3) Build a bridge.  Link the plate to the bridge.
  
Very interesting.
+
Predicted: The plate activated bridge will open 1 tick before the lever activated bridge.

Please note that all contributions to Dwarf Fortress Wiki are considered to be released under the GFDL & MIT (see Dwarf Fortress Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Cancel Editing help (opens in new window)

Template used on this page: