User:Maunder/Suggestions
From The Shartak Wiki
Jump to navigationJump to searchThis 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
For 1 AP, any human player over level 4 may Whistle. Whistles have base range 3.
label | message text |
---|---|
W0 | You whistle. |
W1 | (Maunder) whistles. |
W2 | 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 See below for implementation.
- 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
- 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, 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 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.
- If the shouter is inside a hut, then:
- all players outside within distance 1 (base range -4) of the hut will also 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.
- 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)
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...