Kill Records

From LSWiki

Revision as of 12:24, 21 November 2021; Fungor (Talk | contribs)
(diff) ←Older revision | Current revision | Newer revision→ (diff)
Jump to: navigation, search

Every being in Lost Souls has a hidden kill log. This primarily affects Incarnoi, their Familiars, and Followers.

If murder is your principal form of acquiring Experience, and you have an interest in acquiring some quantity of experience, it is important to understand this:

  • Kill Logs keep track of things you kill.
  • Subsequent kills of the same type of being will result in diminishing experience rewards to the point where they stop awarding experience altogether.
  • Killing beings not present in your kill log will have them replace a random one that is.

This makes it impossible to guarantee that you will receive 100% of the experience award for any particular kill. But on average you will receive much more if you seek a broad variety of prey.

Currently, the only known way to view a Kill Record is via the Discern Secrets.

Some Details

  • The kill log is a hash with a length of 30.
  • Keys in the hash are the defined "name" (not visible to players) of beings killed, and values are integers representing the number of times beings with that name have been killed.
  • Whenever murder occurs, the kill logs of all victors are checked before experience is awarded with two possible outcomes.
    • If the being in question is already present on the kill log then it's value will be incremented by 1.
    • If the being in question is not already present, then it will be added to the kill log, replacing a random entry, and then it's value will be set to 1.
  • The formula for how quickly experience falls off has not been divulged.
  • Followers check their owners kill log.


More Detail

  • The above is inaccurate, code dump follows.
[OOC Starhound] "varargs float query_experience_factor(object att, status kill) {"
[OOC Starhound] "    while(sizeof(enemies) > min(query_level(), 30)) {"
[OOC Starhound] "        foreach(string item : enemies) {"
[OOC Starhound] "            if(!random(3)) {"
[OOC Starhound] "                map_delete(enemies, item);"
[OOC Starhound] "                break;"
[OOC Starhound] "            }"
[OOC Starhound] "        }"
[OOC Starhound] "    }"
[OOC Starhound] "    string obj_name = object_name(att);"
[OOC Starhound] "    int hash_ix = member(obj_name, '#');"
[OOC Starhound] "    string code = (hash_ix == Null) ? obj_name : obj_name[..hash_ix - 1];"
[OOC Starhound] "    int count = kill ? enemies[code]++ : enemies[code];"
[OOC Starhound] "    if(hash_ix == Null)"
[OOC Starhound] "        count *= 3;"
[OOC Starhound] "    return max(1.0 - diminishing_returns(count, 1.0) / 10.0, 0.01);"
[OOC Starhound] "}"
[OOC Starhound] "the if random 3 is what i love"
[OOC Starhound] "everything else is pretty tame"
Personal tools