Difference between revisions of "User:Maunder/Suggestions"

From The Shartak Wiki
Jump to navigationJump to search
Line 67: Line 67:
 
Results:
 
Results:
 
# The shouter gets the message '''S0'''.
 
# 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:   
+
# 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'''.
 
#* 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'''.   
 
#* 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:
+
# 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, the listener gets '''S2L'''.
 
#* If the listener is on the same side, or has the ''Expert Language'' skill, the listener gets '''S2L'''.
 
#* Otherwise, the listener gets '''S2N'''.
 
#* 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'''.
+
# 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:  
 
# If the shouter is outside, then:  
## all inhabitants of huts within distance 1 ('''base range''' -4) of the shouter will get the '''intelligible''' message listed above, either '''S2L''' or '''S2N''', depending again on language.
+
## all inhabitants of huts within distance 1 ('''base range''' -4) of the shouter will get the intelligible message listed above, either '''S2L''' or '''S2N''', depending again on language.
## 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 greater than distance 1 but within distance 3 ('''base range''' -2) of the shouter will get the distant message '''S3'''.
 
# If the shouter is inside a hut, then:  
 
# If the shouter is inside a hut, then:  
## all players outside within distance 1 ('''base range''' -4) of the hut will get the '''intelligible''' message '''S2L''' or '''S2N''', depending on language.
+
## all players outside within distance 1 ('''base range''' -4) of the hut will get the intelligible message '''S2L''' or '''S2N''', depending on language.
## 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 greater than distance 1 but within distance 3 ('''base range''' -2) of the hut will also get the distant message '''S3'''.
 
# Enraged animals within distance 10 (double '''base range''') will move preferentially towards the shouter for a while(?).  
 
# Enraged animals within distance 10 (double '''base range''') will move preferentially towards the shouter for a while(?).  
  
 
Further options:
 
Further options:
 
* option: shouts cannot be understood by spirits (treat as if they don't understand the language)
 
* 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 ===
 
=== Implementation Notes ===

Revision as of 05:30, 10 January 2010

This is a page for me to write at length about my suggestions for improvement to the game.

Whistles and Shouts

Note: all distances in this suggestion are calculated the cartesian way [ d = sqrt (dx^2 + dy^2) ] see the attached picture 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 See below for implementation.
  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
  • 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, 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 the intelligible message listed above, either S2L or S2N, depending again on language.
    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 the intelligible message S2L or S2N, depending on language.
    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 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

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/e\s+/ /g;  # remove trailing e's (silent)
while (msg =~ s/[b-df-hj-np-tv-z]//) { syll++ }
while (msg =~ s/([aeiou]{1,2}|y)//i) { syll++ }
...wip...