Difference between revisions of "User:Maunder/Suggestions"

From The Shartak Wiki
Jump to navigationJump to search
(→‎Part II : Shout: added gender)
Line 89: Line 89:
  
 
Further options:
 
Further options:
* option: shouts cannot be understood by spirits (treat as if they don't understand the language)
+
* option: shouts cannot be heard at all by spirits unless they are in the ''same location'' as the shouter
 
* option: base range is 10 for shouters underground (inside tunnels).
 
* option: base range is 10 for shouters underground (inside tunnels).
 +
 +
==== Add Gender ====
 +
 +
# Create a gender option in player's profiles, with three possible values: Male, Female, and Not Set (androgynous?).
 +
# If the shouter has a gender set, then modify the S2 and S3 messages listed above: replace the word "someone" with "a (female) voice", depending on the gender of the shouter.  (If the shouter has not set a gender, continue to use the unmodified "someone" text in the S2 and S3 messages.)
  
 
=== Implementation Notes ===
 
=== Implementation Notes ===

Revision as of 06:55, 20 January 2010

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.
Shoutrange.PNG

Part I : Whistle

For 1 AP, any human player over level 4 may Whistle. Whistles have base range 3.

possible Whistle messages
label descriptor message text
W0 self You whistle.
W1 identified (Maunder) whistles.
W2 distant Someone whistles to the (northeast).

Results:

  1. The whistler gets the message W0.
  2. Any player in the same location will get the identified message W1.
  3. Any player within base range (distance <= 3) will get the distant message W2.
  4. If the whistler is outside, then:
    • all inhabitants of huts within distance 1 (base range -2) of the whistler will also get W2.
  5. If the whistler is inside a hut, then:
    • all players outside within distance 1 (base range -2) of the hut will also get W2.
  6. 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.

possible Shout messages
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:

  1. The shouter gets the message S0.
  2. 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.
  3. 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.
  4. Any player not within distance 3, but within base range (distance 5) of the shouter will get the distant message S3.
  5. If the shouter is outside, then:
    1. 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.
    2. all inhabitants of huts greater than distance 1 but within distance 3 (base range -2) of the shouter will get the distant message S3.
  6. If the shouter is inside a hut, then:
    1. 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.
    2. all players outside greater than distance 1 but within distance 3 (base range -2) of the hut will also get the distant message S3.
  7. Enraged animals within distance 10 (double base range) will move preferentially towards the shouter for a while(?).

Further options:

  • option: shouts cannot be heard at all by spirits unless they are in the same location as the shouter
  • option: base range is 10 for shouters underground (inside tunnels).

Add Gender

  1. Create a gender option in player's profiles, with three possible values: Male, Female, and Not Set (androgynous?).
  2. If the shouter has a gender set, then modify the S2 and S3 messages listed above: replace the word "someone" with "a (female) voice", depending on the gender of the shouter. (If the shouter has not set a gender, continue to use the unmodified "someone" text in the S2 and S3 messages.)

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
}