# User:LordOOTFD

please excuse my terrible formatting, I'm still figuring it out as my copious edit count will show.

## Animal Logic

Animal logic works as a function of the path finding algorithm in dwarf fortress, as all animals seek to find the lowest cost path to their desired objects (activity zone, parents, dwarfs, valuable objects, etc) this can be used to create very very complex logic gates. Animal logic has three principle advantages, speed, compactness, and simplified functions; however, animal logic is slower than mechanical logic, less reliable than either, and logic is often inverted.

Throughout this document I will be using a number of terms which may not be immediately obvious so I'll list them here:

Ground: for simplicity the thing the animal is pathing to is refereed to as ground as that is the ground state which it wishes to reach. Ground is always the left unless otherwise noted.

Purge: Path to ground with no inputs

Path cost: The number of steps the animal must make to reach ground

Fusion Gate: Simply one or more logic gates built into the same system (this is more than simply stringing gates)

Compund Gate: Gate which uses two or more gates set to different path costs.

And Gate: And takes x inputs and output TRUE if ALL are TRUE.

NAnd Gate: NAnd takes x inputs and returns TRUE if ALL are FALSE.

AndOr Gate: AndOr takes x inputs and returns TRUE if X-Y are TRUE. (this gate is exclusive to animal logic, and is a single step fusion of And, and Or)

Or Gate: Or takes x input and output TRUE if ANY are true.

Not Gate: Not takes a single input and inverts it to the oposite state TRUE if FALSE.

XOr Gate: XOr takes 2 or more inputs and output TRUE if ONLY ONE is TRUE but NOT ALL are TRUE.

NOr Gate: NOr takes x input and returns TRUE if ALL inputs are FALSE.

XNOr Gate: XNOr takes 2 or more inputs and returns TRUE if ALL are TRUE, OR FALSE.

For a better explanation of gates see:http://en.wikipedia.org/wiki/Logic_gate

Notation: #:always wall ^:pressure plate X:floodgate,grate,bars,bridge,etc(explained per entry) D:door,open, but kept tightly shut(pet impassable) d:door, input value not specified Letters:doors/floodgates,grates,bar,etc Specified inputs(these are generally interchangeable, if not this will be noted in the entry) g:Ground, some entries need it for clarity. C: Either an input in diagrams, or the state Carry is refereed to as a state within an adder.

Gates will always be capitalized in the way they are within the entry, I.E. And, Or, AndOr, XNOr, etc

There are three principle logic gates in any logic system, And, Or, and Not. Animal logic can easily create all logic gates and is able to handle multi input-output, and fusion gates. The principle reason for this is pathfinding always prefers the shortest path to ground, by controlling this path you can control the animal within the gate. The advantage of animal pathing is that the gate can have multiple states, more than a single on or off signal. For simplicity and streamlining the systems I have designed only use binary outputs, but theoretically they could be made to compute in decimal or some other system; however, this is maddening and all attempts have resulted in abominations which I do not wish to remember.

## SIMPLE GATES

there are two primary ways to make a gate, single path and dual path, the single path gate only allows the animal a single exit and this forces it into a non pathing state until there is input, at which point it will "wake up" and move; however, this kind of gate is slow and unreliable. Dual path gates always have an open path keeping the animal constantly pathing out of it's enclosure this allows the gate to respond faster and retain higher reliability; however, the constant pathing may cause noticeable frame rate drops with large logic sets. I will only be discussing the dual path gates, as I find them to be better in general use.

And

This simple gate is made by confining the animal into a straight coridor; the ground path will have two or more doors which are connected to the input, while the second longer path remains clear. the gate can be configured as an NAnd gate by simply moving the pressure plate. if the plate is by the ground path it functions as an And gate returning TRUE if the ground path is open, and if the plate is by the purge path it will return FALSE when the inputs are TRUE

```#########
ABCD^ D
#########
```

Multi And

```############
ANYNUMD^ D
############
```

NAnd

Reconfigured And gate, see And.

```#########
ABCD ^D
#########
```

Or

Basic gate

```#####
B####
#####
```

Multi Or

```#######
A #####
N #####
Y D^ D
N #####
M #####
#######
```

NOr

Basically a reconfigured Or gate

```#####
B####
#####
```

Not

The simplest gate, It only takes a single imput.

```#######
#######
```

## Compound Gates

Basically two or more gates arranged with different path costs to ground. These gates can be configured in a number of different ways, these being the simplest. It may be possible to make these gates as single gates but that would require inverting some of the input. Simple compound gates use two simple gates and handle two inputs, complex compund gates have more then two simple gates and need more than two inputs. a Complex compound gate might be used to convert decimal numbers into binary using And gates

XOr

Compound of And and Or, when ONLY ONE is TRUE returns TRUE If A and B are false the animal moves to the FALSE position by Purge, if A or B is true, the animal moves to the TRUE position at the Or gate, if both A and B are true the animal moves to the FALSE position by the And gate.

```#g########
# ABD  D #
# ####^# #
# ####D# #
# ###BA# #
#        #
##########
```

And path cost: 4 Or path cost: 10 Purge path cost: 14

XNor

Inverse of XOr: Return TRUE if BOTH are TRUE OR FALSE If A and B are false the animal move to the TRUE position by Purge, if A or B is true, the animal moves to the FALSE position at the Or gate, if both A and B are true the animal moves to the TRUE postion by the And gate.

```#g#########
#         #
##B###### #
###A## DA #
####D^##B #
#####D### #
######    #
###########
```

And path cost: 4 Or path cost: 10 Purge path cost: 15

Complex Compound gate, Octal display ALU

Inputs are 1,2,4 these correspond to the binary values of the inputs, outputs are A,B,C,D,E,F,G,H being 0,1,2,3,4,5,6,7 respectively in the output display. I used octal for sanity, but this could be easily scaled to work for decimal (up to 10, beyond that you need a converter not an if switch) or hexadecimal(hex will be easy to handle, and probably easier to convert down to decimal)

```#################
#
# # # # # # #1# #
# # #1# #1#2#2# #
#1#2#2#4#4#4#4# #
#D#D#D#D#D#D#D#D#
#               #
#################
```
```# ######
# 1  D #
# #### #
# 2  D #
# #### #
# 12 D #
# #### #
# 4  D #
# #### #
# 14 D #
# #### #
# 24 D #
# #### #
# 124D #
# #### #
#    D #
########
```

## Fusion gates

These are gates which are constructed by physically combining the two gates to get a specific output.

AndOr

This gate will evaluate if either of x And statements are TRUE. This gate is built as a straight line similar to the And gate

```######
#C####
ABD^ D
C#####
######
```

NAndOr

Reconfigured AndOr gate, see AndOr

```######
#C####
ABD ^D
C#####
######
```

OrandOr

This gate returns true if either A or B and either C or D is true.

```######
AC####
BED^ D
######
```

OrandAnd

This gate returns true if either A or B is true, and E and C are true.

```#######
A######
BCED^ D
#######
```

## Complex Gates

A Full adder can be made as a Compound Fusion gate, by combining, And, AndOr, and Or gates

The first binary adder I attempted was structured like an electronic adder using an array of simple gates. It contained five animals and used grates to control the logic, based off of bidok's logic gates. This adder functioned correctly but it was very inefficient with space, and highly unreliable often taking ten plus minutes to properly align. I refined this design by lining the gates up into a linear arrangement, but this failed to solve the efficiency problems.

I then realized that simply limiting my Adder to using Electronic gates was silly realizing the key point of animal logic I designed a single stage gate, which had four output states: 0,1,C,1&C. this allowed me to compress the Adder into a single circuit. Modifying the design further the use of doors allows the new design to function at approximately 4-6 times the speed of the prototype adder.

The Binary Adder function by adding three values, A,B, and Carry. Carry is only involved if the previous adder had a result of 2, or 3. the adder works by detecting if (A Or B Or C = True)Sum=1, Or (A And B, Or, A And C, Or B And C = True)Sum=2, Or (A And B And C = True)Sum=3, Or (A And B And C = False)Sum=0. With this basic logic one simply needs to configure the output for 1 if the answer is 1, C if the answer is 2, and 1 and C if the answer is 3. the gates must also be arranged so the Highest Sum has the shortest path to ground as otherwise the gate would return nonsense.

Stand alone Adders (they don't carry into another adder) require 22 mechanisms, and 14 doors. Start Adders (They feed into the next Adder and include a carry) require 32 mechanisms, and 14 doors. Chain Adders (The receive Carry, and pass a Carry bit up) require 32 mechanisms, and 14 doors While Materials intensive the gates only take up 13x9 urists, ideal for chaining along mining tunnels.

Reference pictures

By chaining these gates you can perform most binary math, the easiest of which is addition. In my old fort I built and tested my initial 9 Bit Addition computer. the design failed in two circumstances, the AndOr gate of bit 32 had a lower path cost than the And gate when the animal was at Sum 2, and the Or gate in bit 4 had a lower path cost than ground if the lower door was open.

The gates in the Super Snail adder can be reset to the correct positions by forbidding the doors which fault. I'm working on a more reliable compact adder.

While it can be done, It's massively more complex than simply making a set of decimal converters working with numbers over 10,

The hex adder makes use of 32 sum gates per side of a single adder, making it geometrically more complex than the binary adder, however it does make animal management more streamlined. more information to come.

Status Sum gates 0-31 done layout pending working prototype pending finished dorfputer pending

Subtractors

inverse adder, simple but not yet tested.

## Animals

Choosing the animal which works as the logic core for an animal logic systems is somewhat important, depending on your needs and the available animals. however pretty much anything will do as long as you can remember which animal fits into which gate (to avoid designating the same animal for more than one pit).

Kittens

Put those worthless cats to work, load them into your fortress's logic core and make them work for their keep. while kittens are the most reliable cores for logic gates with their 3 pathing goals they're also problematic as they grow into cats which only have two, and may cause catsplosions inside your logical cores. Ideally kittens should be replaced yearly or biyearly as their growth defines. Kittens path to the activity zone, their parents, and vermin.

Puppies

Why should your fortresses working animals only work once they grow up? throw the puppies into the logic core and have them work from the day of their birth. Puppies are quite reliable with their two pathing goals, but retain the problem of maturation. Puppies path to the activity zone, and their parents.

Animal Children

Using the non matured animals for something useful before butchering may be quite effective, however they still must be flushed when they mature. Animal children path to the activity zone, and their parents.

Cats

Aggravating animals, throw them into the computer and get some worth out of them. Otherwise useless cats become useful when used for logic, with two pathing goals they're responsive, and multiply quickly. watch out for catsplosions while using these critters Cats path to the activity zone, and Vermin.

Dogs

The workhorse of your fortress, because horses can't do anything useful. I'd recommend not using dogs as they're put to better use as wardogs to protect your dorfs. Dogs path to the activity zone.

Cattle

Large lumbering bovines, the advantage of Cattle is you can tell the sexes apart, they also make the pressure plates continue to work if you forget to reassign the trigger weight. Cattle path to the activity zone.

Other animals

Any animals work, but the above are probably your best choice, excluding any modded animals. however if you have a GCS handy a GCS powered computer would be awesome, so take this as you will. Other animals have different pathing goals, but most only path to the activity zone.

Goblins

I'm working on an incremental goblin powered system, results pending.

## Putting it all together

When it comes time to automate your systems the first thing you need to know is what needs to automated and what should remain manual. an obsidian farm with completely autonomous control of the casting process is all well and good, until it drowns all your legendary miners when it prematurely triggers. all systems should have manual controls and failsafes to help avoid FUN! (but because we all love FUN sometimes you forget to fully connect that emergency drain, or that failsafe system you built somehow failed.)

once you know the steps you need in your system it comes time to select the parts you need to automate, whether it be basic logic gates or more sophisticated multiple trigger systems.

This is mainly pure logic and I can't really help with that, but post a requirement in the talk page and if I see it I'll work on it. Consult the computing page on this wiki, and look up digital logic on Wikipedia. past that it's pretty fundamental and I don't really think I can adequately describe it.