# code/__DEFINES/maths.dm

DIGITS | Returns the number of digits in a number. Only works on whole numbers. This is marginally faster than string interpolation -> length |
---|---|

TOBITSHIFT | Gets shift x that would be required the bitflag (1<<x) We need the round because log has floating-point inaccuracy, and if we undershoot at all on list indexing we'll get the wrong index. |

MANHATTAN_DISTANCE | Taxicab distance--gets you the actual time it takes to get from one turf to another due to how we calculate diagonal movement |

LOGISTIC_FUNCTION | A function that exponentially approaches a maximum value of L k is the rate at which is approaches L, x_0 is the point where the function = 0 |

FORCE_BOOLEAN | Make sure something is a boolean TRUE/FALSE 1/0 value, since things like bitfield & bitflag doesn't always give 1s and 0s. |

TILES_TO_PIXELS | Gives the number of pixels in an orthogonal line of tiles. |

/proc/get_angle_raw | Angle between two arbitrary points and horizontal line same as /proc/get_angle |

SPT_PROB_RATE | Converts a probability/second chance to probability/seconds_per_tick chance
For example, if you want an event to happen with a 10% per second chance, but your proc only runs every 5 seconds, do `if(prob(100*SPT_PROB_RATE(0.1, 5)))` |

SPT_PROB | Like SPT_PROB_RATE but easier to use, simply put `if(SPT_PROB(10, 5))` |

DT_PROB_RATE | Converts a probability/second chance to probability/delta_time chance
For example, if you want an event to happen with a 10% per second chance, but your proc only runs every 5 seconds, do `if(prob(100*DT_PROB_RATE(0.1, 5)))` |

DT_PROB | Like DT_PROB_RATE but easier to use, simply put `if(DT_PROB(10, 5))` |

## Define Details

### DIGITS

Returns the number of digits in a number. Only works on whole numbers. This is marginally faster than string interpolation -> length

### DT_PROB

Like DT_PROB_RATE but easier to use, simply put `if(DT_PROB(10, 5))`

### DT_PROB_RATE

Converts a probability/second chance to probability/delta_time chance
For example, if you want an event to happen with a 10% per second chance, but your proc only runs every 5 seconds, do `if(prob(100*DT_PROB_RATE(0.1, 5)))`

### FORCE_BOOLEAN

Make sure something is a boolean TRUE/FALSE 1/0 value, since things like bitfield & bitflag doesn't always give 1s and 0s.

### LOGISTIC_FUNCTION

A function that exponentially approaches a maximum value of L k is the rate at which is approaches L, x_0 is the point where the function = 0

### MANHATTAN_DISTANCE

Taxicab distance--gets you the **actual** time it takes to get from one turf to another due to how we calculate diagonal movement

### SPT_PROB

Like SPT_PROB_RATE but easier to use, simply put `if(SPT_PROB(10, 5))`

### SPT_PROB_RATE

Converts a probability/second chance to probability/seconds_per_tick chance
For example, if you want an event to happen with a 10% per second chance, but your proc only runs every 5 seconds, do `if(prob(100*SPT_PROB_RATE(0.1, 5)))`

### TILES_TO_PIXELS

Gives the number of pixels in an orthogonal line of tiles.

### TOBITSHIFT

Gets shift x that would be required the bitflag (1<<x) We need the round because log has floating-point inaccuracy, and if we undershoot at all on list indexing we'll get the wrong index.