User:Maunder/Suggestions

From The Shartak Wiki
Jump to navigationJump to search

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.

Part I : Whistle

Whistles have base range 3.

for 1 AP, any human player over level 4 may Whistle. Results:

  1. Any player in the same location will get the identified message: (Maunder) whistled.
  2. Any player within base range (distance 3) will get a message: Someone whistled to the (northeast). See below for implementation of direction.
  3. If the whistler is outside, then: all inhabitants of huts within distance 1 (base range -2) of the whistler will also get the second message.
  4. If the whistler is inside a hut, then: all players outside within distance 1 (base range -2) of the hut will also get the second message.
  5. 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

For 2 AP, any human player over level 4 may Shout a short message (a few syllables). (A suggested implementation of message filtering is below.) Results:

  • Any player in the same location will get one of the following 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: (Maunder) shouted, "Leave me alone!"
    • Otherwise, the listener gets: (Maunder) shouted.

Further options:

  1. option: shouts cannot be understood by spirits


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:
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
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++ }