I did one of the new Daturazi; I’m fairly happy about how he came out, but I had some issues going back and forth on how much shading he needed to give good muscular definition.

Due to some paint bottles drying out, I had to make some substitutions from my normal color selection.

Morat skin

- base: Vallejo Carmine Red
- highlight: P3 Khador Red Highlight
- shadow: P3 Sangine Base

Armor

- base: Vallejo Charcoal Grey
- highlight: Vallejo Medium Grey
- shadow: Vallejo Black

Pants

- Vallejo Game Color Shadow Grey
- highlight/shadow: none! I’m open to suggestions that would be a good tonal match. All my shading attempts have looked bad.

Accessories

- base: Vallejo Red Violet
- highlight: Vallejo Carmine Red
- shadow: Vallejo Black

Glowy stuff

- Everything is painted starkly black/white, and then repeatedly glazed with a mix of 1:1:1 P3 blue ink / matte medium / water

I’ve got a number of Tohaa models painted, but these are the first I’ve posted online. I finished an old, half-painted Sakiel from last year’s escalation league and then did a Chaksa Auxiliar with HFT from scratch. I continue not particularly liking the Chaksa sculpts.

My Tohaa scheme was intended to be very speed-paint friendly. Everything is just a solid base coat + wash. I gave them a very naturalistic color scheme due to the large amount of horns, spears and so forth that they have. They come off as a very primitive aesthetic to me, with lots of horned skull helmets and degenerate beast-man companions in the Chaksa.

Tohaa skin (not included on these models)

- P3 Jack Bone
- Citadel Seraphim Sepia

Armor

- P3 Menoth White Highlight
- Citadel Seraphim Sepia

Underlayer Clothing

- P3 Thornwood Green
- Citadel Seraphim Sepia

Cloaks, fabric, etc.

- P3 Ordic Olive
- Citadel Seraphim Sepia

Straps, stripes, buckles

- P3 Bootstrap Leather
- Citadel Seraphim Sepia

Horns and hafts

- P3 Menoth White Highlight
- Citadel Agrax Earthshade

Symbiont Armor

- P3 Skorne Red
- Citadel Agrax Earthshade

Weapons and other technological things

- P3 Cryx Bane Base
- Citadel Nuln Oil

Chaksa Skin

- P3 Battlefield Brown
- Citadel Nuln Oil

Base (rocks + sand)

- Citadel Death World Forest + Citadel Mephiston Red mix
- Citadel Nuln Oil

Base

- Transition between P3 Bootstrap Leather and P3 Cryx Bane Base

I made a batch, based on the recipe we saw on Manngchi’s Youtube channel. I had to make a few substitutions.

- The store I went to didn’t have perilla leaves or seed powder, so I used Maangchi’s own advice and substituted basil leaves and sesame seed powder.
- They didn’t have asian chives, so I doubled the number of green onions.
- They also had run out of bean sprouts, so I just left them out entirely.
- Two tablespoons of spicy pepper flakes seemed insane, so I reduced it to one tablespoon.

The soup turned out really well, although it was still much spicier than any gamjatang I’ve ever had in a restaurant. I found some of the cooking instructions interestingly different than what I’m used to; for example, it had me stewing the meat at a full boil for two hours without it turning tough and chewy.

Sarah and I are looking forward to trying out a number of new Korean recipes over the next few weeks/months.

]]>
Here’s the unpainted version, showing the modeling work (completed last August):

And here’s the painted version (completed today):

From Infinity |

From Infinity |

From Infinity |

From Infinity |

I painted basically everything with very simple solid color + contrasting wash techniques. I even allowed myself a number of mistakes and did not go back and fix things up every time I got a dab of paint in the wrong place. Even so, I paint pretty slowly and this still took me several multi-hour sessions.

Basic color recipes are included as a hedge against me losing my notes.

PanO:

- Armor – P3 Frostbite / P3 Exile Blue wash
- Pants – P3 Hammerfall Khaki / P3 Bootstrap Leather wash
- Mechanical – Vallejo Neutral Grey / Citadel Nuln Oil wash
- Accessories – P3 Thornwood Green / Citadel Nuln Oil wash

Nomads:

- Primary – P3 Khador Red Highlight / P3 Sanguine Highlight wash
- Secondary – P3 Greatcoat Grey / Citadel Nuln Oil wash
- Mechanical – P3 Bastion Grey / Citadel Nuln Oil wash

From Infinity |

The Charontid’s base is definitely too bright, and I will be glazing another layer or two of blue ink on there to get it back in line with the rest of them.

Next up is some Icestorm!

]]>I’ve started a new painting thread on the Infinity forums to that effect, but I may not strictly limit myself to Infinity models, so this site will be the master repository of all painting progress.

As a kick-off, I painted a new base for the Charontid, as the new Infinity edition increased its size from 25mm to 40mm.

From Infinity |

From Infinity |

From Infinity |

Let’s take a very simple case of two basic infantry troops shooting each other. The active model is he Fusilier Angus, firing his Combi Rifle with Ballistic Skill (BS) of 12. This weapon lets him roll 3 20-sided dice, which will succeed on a roll of his BS of 12 or less on each die. His opponent is the Zhanshi Wen Liu, firing his Combi Rifle with BS 11. As he is reacting, he only gets a single die, and his BS is lower, so he is looking to roll an 11 or less. They both roll their dice at the same time, and then compare results. First, any dice that missed (rolled above the firer’s BS) are discarded. Then, any successes that rolled lower than the opponent’s highest die are discarded. This leaves at most one player with any successful hits, which are then applied to the target. There are a few more complexities, but this outlines the basic flow. To make it concrete – Angus rolls a 15, 10, and 7, and Wen Liu rolls a 9. Angus’s 15 is discarded as a miss (since he rolled greater than 12), and his 7 is discarded since it is lower than Wen Liu’s 9. Meanwhile, Wen Liu’s 9 is discarded since Angus rolled a 10. The only die left is Angus’s 10, meaning he scored one hit on Wen Liu.

In this basic case, the probabilities are relatively easy to calculate. For each of the active player’s dice, it is easy to calculate the chance that they rolled less than or equal to their target, minus the chance that their opponent rolled higher without going over their own target value. And in fact, there has long been an online tool called Infinity Math to help calculate probabilities where the reactive player is limited to one die.

The calculations get much more complicated when the reactive model is allowed to roll multiple dice. I attempted for some time to come up with a reasonably simple numerical way of calculating these chances, but kept on coming up short. Eventually, I remembered that my personal strengths are not in numerical analysis, but rather in computational and algorithmic optimization. Therefore, I decided to make a program which implements a really simple and straightforward means of calculating these probabilities, and then optimize it until it was acceptably efficient.

The basic design of my dice rolling engine is to enumerate every possible permutation of dice that could be rolled, evaluate the results, and then calculate how likely each possible result is. Since the number of dice required can change for every scenario, my program implements this step using recursion. This allowed me to produce accurate results, but very slowly. Even a moderately complex calculation could easily take several minutes to complete. As such, looked for ways to optimize the algorithm to reduce the time taken.

The first and biggest optimization that I implemented that decreased my running time by several orders of magnitude was to take advantage of symmetries in the matrix of all dice rolls I was generating. In other words, I made sure I never calculated results that varied only by the order of the numbers rolled.

Take this matrix showing all possible combinations of two four-sided dice as a simplified example:

```
(1,1) (1,2) (1,3) (1,4)
(2,1) (2,2) (2,3) (2,4)
(3,1) (3,2) (3,3) (3,4)
(4,1) (4,2) (4,3) (4,4)
```

Because a player doesn’t care what order they rolled their dice in (since all dice are rolled simultaneously), we can cut the number of dice rolled approximately in half, by including only those rolls where the second number is greater than or equal to the first.

```
(1,1) (1,2)*2 (1,3)*2 (1,4)*2
(2,2) (2,3)*2 (2,4)*2
(3,3) (3,4)*2
(4,4)
```

As you can see, the second matrix doesn’t have any duplicate entries, but does mark the ones that need to be double-counted. As the number of dimensions increases, the multiplicative factor can become much larger than 2, based on the number of repeated values.

As the number of dice increases, so do the number of dimensions of the matrix. In these higher-dimension matrices, the savings from matrix symmetries increase exponentially.

Dice | Permutations | After Optimization | Percentage |
---|---|---|---|

1 | 20 | 20 | 100% |

2 | 400 | 210 | 52.5% |

3 | 8000 | 1540 | 19.25% |

4 | 160000 | 8855 | 5.35% |

And so forth.

The great thing about that optimization is that it always works, no matter what the scenario. The next one I did, however, helps in most common cases, but will occasionally offer little to no benefit.

Since all dice that roll higher than the target number are discarded without being used, it is unnecessary to roll all of them. I let the first failing die through in order to count it in the statistics for failures and misses, and I simply multiply the number of results by how many other failure states I rolled up. From the initial example of Fusilier Angus trying to roll a 12 or less, this:

```
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
```

Becomes this:

```
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 * 8
```

Obviously, the lower the target numbers involved, the greater the value of this optimization. Due to the way that this optimization stacks with the prior one, it frequently reduces the number of rolls calculated by well more than half.

The final optimization I implemented was to make the tabulating of dice rolls multi-threaded. I start one thread for each of the 20 possible values of the first die, and then tabulate the results when all threads have completed. My hosting company gives me access to 2 CPU cores, so the calculation takes approximately half as long to complete. Due to the various optimizations in the prior sections, different threads will take different amounts of time to complete, but how the operating system balances them between the cores evens everything out.

With that done, I had the time consuming part of the calculations taken care of. The next step was to create a web frontend that allows you to select what sort of scenario you would like to run, and then hands the data off to the back end utility. This has been another significant challenge, but has overall been pretty straightforward. My tool is available here, for you to play around with if such things interest you. I periodically update it with new features and to keep it up-to-date with the latest releases for the game.

After I had already mostly completed work on this part of my tool, one of my fellow Infinity players from Maryland took the time to find a solution to this that is as close to closed-form as possible, using Mathematica and my tool to check his results. His description of his method is available in HTML or PDF, if you are interested.

]]>From Infinity |

From Infinity |

I’m still missing a proper backdrop, but this is a lot better than the blue one I used for Bloody Barnabas.

]]>- Bloody Barnabas
- Blackhide Wrastler
- Ironback Spitter

I’ve already painted up my Wrastler and Spitter, but I had never picked up Barnabas. That has been remedied, and he is now painted:

From Gatormen |

From Gatormen |

From Gatormen |

Please excuse the terrible choice of background for those pictures. I seem to have misplaced the good backdrop sheets in the move. In retrospect, highly textured pale blue was definitively *not* the correct choice.

I’m planning on trying out Rask, the Bog Trog Warlock, once we reach the week where Caster swapping is allowed. To that end, I’ve acquired a unit of Bog Trog Ambushers and done some minor conversions so that no two are alike.

From Gatormen |

I think the best arm swap is the one on the left side of the middle group, pointing his spear downwards. It was a pretty simple operation, but comes off as a very aggressive stance.

]]>