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 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:
Line 20: Line 20:
 
*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 <s>99</s> 100 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 31:
 
*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>
+
*Note that gear assemblies do not evaluate signals!
<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.  <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.
Line 171: Line 170:
 
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 189: Line 188:
  
 
====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 261: Line 260:
 
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====
+
*1) Build the machine demonstrated in the above gear assembly test.  Use build order 1.
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 wayWhat if I do a pressure plate activated gear, built before the plate that activates it, but after the pump it powers?  Something like,
+
*2) Build a lever and a bridgeLink the lever both to the bridge, and to both gear assemblies.  Build order shouldn't matter, but we'll build the lever first.
  *
+
*3) Build a bridge. Link the plate to the bridge.
  # %% #
 
# %%^#
 
# ####
 
###
 
  
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.
+
Predicted: The plate activated bridge will open 1 tick before the lever activated bridge.
 
 
=====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====
 
====Water flow====
 
This is a simple one, and I'm going to use Hack to test it.
 
This is a simple one, and I'm going to use Hack to test it.
  
# ## 7/7 water
+
# ## 7/7 water
# ^# 7/7 water, 0/7 water and plate that triggers on 2+
+
# ^# 7/7 water, plate triggers on 2+
####
+
####
  
 
Predicted: Plate does not trigger on first tick, but triggers on second tick.
 
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.
 
*Lever signals are sent during the turn of the dwarf who pulls the lever.
 
*Hatches (and presumably doors as well) open '''immediately''' upon an ''open'' signal, rather than waiting for the hatch to evaluate that signal.
 
 
Very interesting.
 

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: