User:Maunder/Suggestions
This is a page for me to write at length about my suggestions for improvement to the game.
Whistles and Shouts
The reasoning and discussion of this suggestion are on the forum and, in a somewhat older form, on the Suggestions page of the wiki. The content here is intended to lay out, in gory detail, exactly what the game implementation of my suggestion might look like, as some folks were a little unclear.
Note: All distances in this suggestion are calculated the cartesian way [ d = sqrt (dx^2 + dy^2) ] see below for graphical representation of ranges.
Part I : Whistle
For 1 AP, any human player over level 4 may Whistle. Whistles have base range 3.
label | descriptor | message text |
---|---|---|
W0 | self | You whistle. |
W1 | identified | (Maunder) whistles. |
W2 | distant | Someone whistles to the (northeast). |
Results:
- The whistler gets the message W0.
- Any player in the same location will get the identified message W1.
- Any player within base range (distance <= 3) will get the distant message W2.
- If the whistler is outside, then:
- all inhabitants of huts within distance 1 (base range -2) of the whistler will also get W2.
- If the whistler is inside a hut, then:
- all players outside within distance 1 (base range -2) of the hut will also get W2.
- Enraged animals within distance 6 (double base range) will move preferentially towards the whistler for a while(?).
Further options:
- option: whistles cannot be heard by spirits, unless they are in the same location as the whistler.
- option: base range is 6 for whistlers underground (inside tunnels).
Part II : Shout
For 2 AP, any human player over level 4 may Shout a short message (a few syllables). (See below.) Shouts have base range 5.
label | descriptor | L (language) | N (no language) |
---|---|---|---|
S0 | self | You shout, "(Leave me alone!)". | |
S1 | identified | (Maunder) shouts, "(Leave me alone!)". | (Maunder) shouts something. |
S2 | intelligible | To the (northeast), someone shouts "(Leave me alone!)". | To the (northeast), someone shouts something. |
S3 | distant | You hear someone shout to the (northeast). |
Results:
- The shouter gets the message S0.
- Any player in the same location will get one of the two identified messages, depending on whether they understand the language:
- If the listener is on the same side (Native/Outsider), or has the Expert Language skill, the listener gets message S1L.
- Otherwise, the listener gets S1N.
- Any player within distance 3 (base range -2) of the shouter will get an intelligible message, again, depending on whether they understand the language:
- If the listener is on the same side, or has the Expert Language skill, and the message has less than 5 syllables, the listener gets S2L.
- Otherwise, the listener gets S2N.
- Any player not within distance 3, but within base range (distance 5) of the shouter will get the distant message S3.
- If the shouter is outside, then:
- all inhabitants of huts within distance 1 (base range -4) of the shouter will get
- message S2N if the message has more than 4 syllables, or else
- the intelligible message S2L or S2N, depending on language comprehension.
- all inhabitants of huts greater than distance 1 but within distance 3 (base range -2) of the shouter will get the distant message S3.
- all inhabitants of huts within distance 1 (base range -4) of the shouter will get
- If the shouter is inside a hut, then:
- all players outside within distance 1 (base range -4) of the hut will get
- message S2N if the message has more than 4 syllables, or else
- the intelligible message S2L or S2N, depending on language comprehension.
- all players outside greater than distance 1 but within distance 3 (base range -2) of the hut will also get the distant message S3.
- all players outside within distance 1 (base range -4) of the hut will get
- Enraged animals within distance 10 (double base range) will move preferentially towards the shouter for a while(?).
Further options:
- option: shouts cannot be understood by spirits (treat as if they don't understand the language)
- option: base range is 10 for shouters underground (inside tunnels).
Implementation Notes
Below are some pseudocode algorithms for tricky parts of implementing the above suggestions.
implementation of direction:
# assuming not at same location (dx!=0 or dy!=0) # given listener coord xl,yl, and whistler coord xw,yw # result is direction string. dx = xw-xl dy = yw-yl ns = ew = if dx==0 or abs(dy/dx)>sqrt(2)-1 { ns = (dy>0)? 'north':'south' } if dy==0 or abs(dy/dx)<sqrt(2)+1 { ew = (dx>0)? 'east':'west' } result = ns.ew
The shouted message will be stripped of all digits. Unicode letters will be converted to non-unicode ascii equivalents. Then the number of syllables are rough-counted, and used to determine whether folks can understand the shout or not as described above. Here's some perl-ish pseudo-code (not yet heavily tested) to count syllables:
rough-counting syllables in a message:
{ # given distance d = sqrt (dx^2 + dy^2), and copy of message msg # result is rough count of number of syllables msg =~ s/es?\s+/ /g; # remove trailing e's (assume silent) # nonvowel or word boundary followed by ay, ey, oy, uy while (msg =~ s/(?:[^aeiou]|\b)[aeou]y//ig) { syll++ } # nonvowel followed by y while (msg =~ s/[^aeiou]y//ig) { syll++ } # all other y's are considered consonants # arbitrary string of repeating vowel considered a single sound msg =~ s/(a|e|i|o|u){3,}/$1/; # consonant or word boundary followed by one or two vowels while (msg =~ s/(?:[^aeiou]|/b)[aeiou]{1,2}//ig) { syll++ } return syll }