#lang scribble/doc
@(require scribble/manual
          (for-label "../common.ss"
                     "../das-schwarze-auge.ss"))

@title[#:tag "das-schwarze-auge" #:style '(toc)]{"Das Schwarze Auge"}

@local-table-of-contents[]

@defmodule[(planet "das-schwarze-auge.ss" ("murphy" "rpg-utils.plt" 1 0))]{

  Specific procedures for the role playing game system "Das Schwarze
  Auge".

}

@defproc[(d20 [generator pseudo-random-generator? (current-pseudo-random-generator)])
         exact-positive-integer?]{

  Simulates a D20 dice roll and returns a random natural number.
  
  A PRNG to use may optionally be specified via the @scheme[generator]
  argument.

}

@defproc[(simulate-test/attribute [attribute exact-integer?]
                                  [generator pseudo-random-generator? (current-pseudo-random-generator)])
         test-result?]{

  Simulates a plain attribute test. To adjust the difficulty of the
  test, the given @scheme[attribute] value should be modified by
  adding or subtracting some small integer.
  
  You may optionally specify a PRNG to use via the @scheme[generator]
  argument.
  
  This procedure returns a @scheme[test-result] structure with the
  result of the single simulated D20 roll as its @scheme[value].

}

@defproc[(analyze-test/attribute [attribute exact-integer?])
         test-statistics?]{

  Determines the statistical properties of a plain attribute test.
  To adjust the difficulty of the test, the given @scheme[attribute]
  value should be modified by adding or subtracting a small integer.
  
  This procedure returns a @scheme[test-statistics] structure with
  the expected result of a single D20 roll as its
  @scheme[expectation].

}

@defproc[(simulate-test/talent [attribute-0 exact-integer?]
                               [attribute-1 exact-integer?]
                               [attribute-2 exact-integer?]
                               [talent exact-integer?]
                               [generator pseudo-random-generator? (current-pseudo-random-generator)])
         test-result?]{

  Simulates a talent test involving tests of the three given base
  attributes @scheme[attribute-0], @scheme[attribute-1] and
  @scheme[attribute-2]. To adjust the difficulty of the test, the
  given @scheme[talent] value should be modified by adding or
  subtracting some small integer.
  
  You may optionally specify a PRNG to use via the @scheme[generator]
  argument.
  
  This procedure returns a @scheme[test-result] structure with the
  remaining talent points not used in the test as its @scheme[value].

}

@defproc[(analyze-test/talent [attribute-0 exact-integer?]
                              [attribute-1 exact-integer?]
                              [attribute-2 exact-integer?]
                              [talent exact-integer?])
         test-statistics?]{

  Determines the statistical properties of a talent test involving
  tests of the three given base attributes @scheme[attribute-0],
  @scheme[attribute-1] and @scheme[attribute-2]. To adjust the
  difficulty of the test, the given @scheme[talent] value should be
  modified by adding or subtracting some small integer.
  
  This procedure returns a @scheme[test-statistics] structure with the
  expected remaining talent points not used in the test as its
  @scheme[expectation].

}
