- v0.80 - Softlaunch, solicitation of feedback
- v0.81 - Allow for unsolved pets in source CSV
- Any non-numeric will mark the trait as UNSOLVED during comparisons
- Other known values for that pet should still help you refine your unknown
- v0.82 - Fix incorrect casting of Nimbleness, still need test for partial-knowns
- v0.83 - Add GUI selector to pick character / pet before pasting in comparison
- v0.90 - Refactor everything using Windows Presentation Framework (WPF)
- v0.91 - Cleanup broken stuff from Google Sheets integration tests
If you're already familiar with github, you don't need directions! If you are not, try this.
Pet-Relations.ps1 is just a starter and isn't really deeply tested.
Canine-Comparator-GUI.ps1 should be working if you have good data to start from
- From the repository main page: https://github.com/IAmAnthem/CanineCalculations
- Look for the Code button and click the down-carat
- Select the Download ZIP option
- Extract the zipfile contents to wherever
- Navigate to that folder in Windows Explorer
- Open KNOWNS.csv and copy the formatting out to a new file like MyPets.csv or something is a good idea
- Partially known pets should now be working (i.e. if a trait is "10-20" or "10 to 20" I mark it unsolved and skip during comparison)
- Right click on
Canine-Comparator-GUI.ps1
and select Run with PowerShell- If you get a warning that the script is unsigned and you can't run it, you need to change the ExecutionPolicy
- Right Click the Windows Start button
- Click Windows PowerShell
- Type
'Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
- Try running the script again
- Click Load Database
- Select a CSV file to use as your data source (KNOWNS.csv included to show you format, suggest you use your own file like MyPets.csv)
- PROTIP: You can actually programmatically retrieve a CSV from Google Docs
- I might add this with some sort of saved-configuration file so you can set up your source and pull it fresh each time
- Note for me:
curl 'https://docs.google.com/spreadsheets/d/<yourkey>/export?exportFormat=csv',
- Select the radio button indicating the direction you will be operating in
- Example: Dasher is an NPC and changes every time it spawns
- if you did "compare my pet to dasher", the direction would be "Known to Unknown"
- if you did "compare dasher to my pet", the diection would be "Unknown to Known"
- Example: Dasher is an NPC and changes every time it spawns
- Select the KNOWN pet in your comparison by picking from the dropdown list
- To the right is a big text-entry window
- Paste in the entire comparison block
- Click Process Comparison for math and display operations
- All comparison text must be certain
- From the player's perspective, you should see You are certain that...
- If you are listening to someone compare out loud, make sure THEY saw the certain message
- Bug Paldin about getting 'out loud' to include "Playername says: I am certain that target is:"
- All comparison text must be certain
compare fox 2 to petname
You look hard at a very large merle grey trained fox comparing to a very
large light grey trained fox ...
You are certain that fox 2 is:
Alertness seems slightly inferior.
Appetite seems slightly inferior.
Brutality seems barely better.
Development seems slightly inferior.
Eluding seems marginally better.
Energy seems barely better.
Evasion seems slightly better.
Ferocity seems marginally inferior.
Fortitude seems marginally inferior.
Insight seems barely inferior.
Might seems slightly better.
Nimbleness seems marginally better.
Patience seems marginally inferior.
Procreation seems slightly inferior.
Sufficiency seems barely inferior.
Targeting seems marginally better.
Toughness seems marginally better.
Overall he seems to be inferior.
They seem to be unrelated.
- A debugging / status window exists below the Process Comparison button
- Various messages will report progress, status, and if you did something wrong
--- --- STATUS: Solved n of 17 --- ---
will report if any traits were solved- Continue refining by selecting additional comparators from the dropdown and pasting in the comparison
- Change the placeholder "Name" value from "dummy" to whatever you want
- Above the Set Name (Unique) button is text input box. Type whatever you want here.
- Use truely unique Name fields, or the dropdown won't work properly if you add this data to your CSV
- Above the Set Name (Unique) button is text input box. Type whatever you want here.
- Share your results with someone by copying the hashtable at the far right
- copy / paste should work fine with Ancient Anguish (converse mode)
- Appearance is also reasonable in Facebook Messenger
- Export buttons are currently unavailable
- What do you want this to do, if anything?
Included in this repository are three text files, you can use to obtain a verified result.
-
Validation files
- Validation-KnownToUnknown.txt
- Validation-UnknownToKnown.txt
- Validation-RESULTS.txt
-
Open the
Validation-UnknownToKnown.txt
file -
Launch the script
-
Pick
KNOWNS.csv
as your source -
Select
UNKNOWN canine to a KNOWN canine
-
Select the known pet as
Ballad Fireball 730/55
-
Select the first comparison block in the Validation file (Ballad)
-
Paste the entire block into the input window
-
Click
Process Comparison
button, calculations are performed- Note the
--- --- STATUS: Solved 5 of 17 --- ---
- Note the
-
Review the Column-based output to the right
- Any
solved
traits will be a single number - Any
ranges
will appear aslowNumber to highNumber
- TOTAL is a ranged subtotal of what we've calculated
- Overall is only reporting the comparison we found in the string
Overall she seems to be ?????
- This can be useful, look at the results so far
TOTAL = 700 - 728 Overall = 721 - 725
- Even though we don't have it solved, we know for sure it must be in the range of $Overall
- This can be useful, look at the results so far
- Any
Name dummy
Alertness 28 - 30
Appetite 43 - 45
Brutality 32
Development 43 - 45
Eluding 53 - 55
Energy 27 - 29
Evasion 55 - 57
Ferocity 49 - 51
Fortitude 45 - 47
Insight 30 - 34
Might 38 - 42
Nimbleness 48
Patience 33 - 35
Procreation 51 - 53
Sufficiency 36
Targeting 40
Toughness 49
TOTAL 700 - 728
Overall 721 - 725
- Continue to refine calculations, select 1 to add another comparison
- Select known pet # 2 - Cover Rocker
- Paste in the comparison block for COVER in the Validation-UnknownToKnown.txt file
- Click Process Comparison for calculations to be performed
- Notice we've solved more numbers!
--- --- STATUS: Solved 13 of 17 --- ---
- Notice we've solved more numbers!
- Review the output again
Name dummy
Alertness 29
Appetite 45
Brutality 32
Development 43 - 44
Eluding 53
Energy 29
Evasion 55 - 56
Ferocity 51
Fortitude 46
Insight 34
Might 40
Nimbleness 48 - 44
Patience 35
Procreation 51 - 53
Sufficiency 36
Targeting 40
Toughness 49
TOTAL 716 - 716
Overall 721 - 723
- Continue adding comparisons until you see you've solved 17 of 17!
- Your output result should match the result found in
Validation-RESULTS.txt
Ancient Anguish is a MUD that has been around a long time.
A feature was introduced that allows characters1 in the Ranger class to breed pets, and for those pets to raise their traits through breeding.
Everyone started at 0, and the traits were all unknown.
- How many of them are there? (17)
- What is the trait value range? (-100 to 100, yes a trait can have a negative value)
- What are they?
- Alertness, Appetite, Brutality, Development, Eluding, Energy
- Evasion, Ferocity, Fortitude, Insight, Might, Nimbleness
- Patience, Procreation, Sufficiency, Targeting, Toughness
- What do they do? Hah, who knows. We can make some guesses by the descriptive word, but no clear definition exists.
- Guesses as to function are conjecture, and we really have very little way to know
- If your baking trait was 100, would that mean you bake cakes faster? Cakes are more delicious? Cakes are prettier?
Days were spent just figuring out the basics of getting two pets to procreate reliably. Months were spent trying to get all traits to have a non-zero value. More months trying to get all traits to a positive value.
Once the basics were discovered, some progress was being made, then another wrench was thrown in the works. RELATIONSHIPS?! Yes, breeding between related canines produces resulting puppies between suboptimal and completely awful.
My initial efforts are to develop the logic for automating the cacluation of trait values and checking to ensure pets are unrelated for breeding.
My estimate is something over 12,000 canines have been tamed. The highest traited pets are a bit under halfway to the maximum value. It took YEARS.
Characters develop more certainty in their 'compare' ability the more puppies they have. Once the comparison is certain (instead of think or feel) you can definately use the Stat script. If you are still in think or feel your results are shifted by some unknown amount, which may vary per-reboot. More research is required.
The players can only see a description of the difference between canines, not the actual values.
- "totally inferior"
- "very inferior"
- "inferior"
- "slightly inferior"
- "marginally inferior"
- "barely inferior"
- "similar"
- "barely better"
- "marginally better"
- "slightly better"
- "better"
- "much better"
- "outstandingly better"
The script will turn those descriptions into values, if you have enough known pets to compare against.
Once a character has had MANY litters, the compare ability also reports the relationship level between two canines. Any player can get the lineage tree for their canine at the bottom of the character's Player Info Page
- Canine-Comparator-GUI.ps1
- Everything that Stat-Canine did, but in a single pane of glass, windows UI
I'm starting with some assumptions and haven't really tested the workflow in the wild with someone not heavily invested in canine breeding.
There are probably things I don't know.
I don't do any data validation, you can probably break the script by injecting bad data into the CSV.
- Poisoning: in an online world where people are anonymous, spiteful, and selfish an open website is invitation to destruction. You know who you are.
- Privacy: The only data you see by example here has been OK'd by the data owner.
Some players may choose to not reveal their pet lineage or stats for whatever reason. - Skills: I'm a systems engineer by trade and at heart, I learn enough code to do what I need to do.
Currently that's PowerShell, not something sexy like a Serverless Web Application. Or some PHP/MySQL web app? But maybe someday?
- Need new characters (maybe 10? 12?) with traited canines of known stat (or at least very close to known).
- Figure out more alt names, because OCD
- Cycle alts against a known that's reasonably solvable for them (don't try solving a 700+ with a collection of 300s)
- Drop output into think/feel buckets, include a datestamp and note time to reboot
- randomizer has a good chance of changing per-boot, so be prepared for it to change
- Run data through statting script in think/feel groups and compare outputs in kvp format
- Does the group of 'think' statters reach a consensus stat?
- Does the group of 'feel' statters reach a consensus stat?
- If so how do they compare to true values?
if $knowledge -ne certain, abort
Well we can't do that because "listeners" can't see relationships, pinged Paldin- Future development: Determine the variations in think/feel
- Is this predictable?
- redshift/blueshift the results based on (whatever)
- Currently spitting out a lot of noise (Write-Verbose) messages in the console
- Disable this when I reach v1.0
This project is licensed under the terms of the MIT license.
Repository image credit: Image by Sarah Richter from Pixabay
Footnotes
-
Players are the human beings. Characters are the in-game persona running around. A player may have many characters. If you get into breeding, plan on at least 4 characters. ↩