Difference between revisions of "User:Maunder/Suggestions"

From The Shartak Wiki
Jump to navigationJump to search
Line 10: Line 10:
 
* The option to restrict spirits hearing is intended to add variety (to differentiate from spirit noisemaking), but keep some consistency.
 
* The option to restrict spirits hearing is intended to add variety (to differentiate from spirit noisemaking), but keep some consistency.
 
* The counting of syllables in shouting is a suggested (and logical) way to tightly limit the amount of information that can be relayed by shouting (that will hopefully be difficult to circumvent).  Another method could be used, as long as it accomplishes the same goals: tight limits and difficult circumvention.
 
* The counting of syllables in shouting is a suggested (and logical) way to tightly limit the amount of information that can be relayed by shouting (that will hopefully be difficult to circumvent).  Another method could be used, as long as it accomplishes the same goals: tight limits and difficult circumvention.
 +
 +
''The details of my suggestion have been broken into separate parts below, which could be implemented as separate units (as phases of the whole, or units which might be omitted).''
  
 
=== Distances (Ranges) ===
 
=== Distances (Ranges) ===
  
Note: All distances in this suggestion are calculated the cartesian way [ d = sqrt (dx^2 + dy^2) ] see below for graphical representation of ranges. <br />
+
All distances in this suggestion are calculated the cartesian way [ d = sqrt (dx^2 + dy^2) ].
 +
For a range of 5, I mean to include any square that has a cartesian distance <= 5.0.
 +
Here is a graphical representation of ranges I am suggesting. <br />
 
[[Image:Shoutrange.PNG]]
 
[[Image:Shoutrange.PNG]]
  

Revision as of 08:03, 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.

Brief Comments:

  • The intention of these two suggestions is to allow a (highly restricted) form of mass communication over a small area, saving AP for highly organized groups working together, thereby encouraging group cooperation. These options also enhance role-playing.
  • The restriction of these skills to level 4+ is intended to prevent spam abuse.
  • The option to restrict spirits hearing is intended to add variety (to differentiate from spirit noisemaking), but keep some consistency.
  • The counting of syllables in shouting is a suggested (and logical) way to tightly limit the amount of information that can be relayed by shouting (that will hopefully be difficult to circumvent). Another method could be used, as long as it accomplishes the same goals: tight limits and difficult circumvention.

The details of my suggestion have been broken into separate parts below, which could be implemented as separate units (as phases of the whole, or units which might be omitted).

Distances (Ranges)

All distances in this suggestion are calculated the cartesian way [ d = sqrt (dx^2 + dy^2) ]. For a range of 5, I mean to include any square that has a cartesian distance <= 5.0. Here is a graphical representation of ranges I am suggesting.
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).

Part IIb: Add Gender

A minor addition which enhances the shouting role-playing experience.

  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.)

Part IIc: Add Shout Recognition

Listeners who know the shouter well have a good chance of recognizing the shouter's voice when hearing the shout.

distance chance of recognition
0 100%
1 85%
.. ..
d (100-15*d)%
.. ..
5 25%
  1. If the listener is from the same town as the shouter, or has the shouter on their contacts list, then:
    1. given the distance between the shouter and listener (and adding 2 for traversing a hut's walls), calculate a probability that the listener will recognize the shouter's voice (see table at right).
    2. if the listener succeeds in recognizing the shouter's voice, modify the S2 and S3 messages, replacing the word "someone" (or the gender phrase "a (female) voice" if Part IIb has been implemented), with the shouter's name. Note: the language check still applies, and S2N is still possible. It is possible to recognize a friend's voice even if s/he is speaking a language one does not understand!

Comment:

  • With the above implementation, the contacts list represents "knowing well enough to recognize a voice". This isn't very realistic in terms of actual game play, as you can add contacts for people you've never heard speak, or even never met! The "unrealistic" use of this mechanic, though, making it possible to listen for shouts from specific enemies, adds a lot to strategic game play!

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

A 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
}