[ 1/6/24 ]
[h3]Old Journal Conversion:[/h3]
[b]They automatically convert when hovered over in your inventory.[/b]
Tweak: Old journals will be covered in blood to better identify them.
[i]Warning: Transcribe once after the journal is converted, just to be safe. More explanation on this later.[/i]
Patch: I've implemented a protection for 'oldXP' which will avoid boosting the old XP.
[i][b]Suggestion:[/b][/i] Read/transcribe into your journal, craft a new one, rinse/repeat.

[h3]Sandbox Options Change: The sandbox option for "Recover Profession And Traits Bonus XP" has been removed.[/h3]
- To clarify: BonusXP in this case refers to the additional XP earned from starting with more than 1 point in a skill. NOT the starting levels, the bonus XP earned.
- The default for this setting for this option was false anyway, and as such that XP was not recorded. All XP that was recorded was that of an unemployed/traitless character.
Going forward this XP will not be recorded, period. This resolves a lot of issues with the math involved, and keeps the XP even across the board.

[h3]XP Change: The XP in the journal going forward will be "raw" values.[/h3]
- With the term 'BonusXP' from above considered, starting level of 0 nets 25% of the raw value. (0=25%, 1=100%, 2=1.33%, 3=1.66%).
- Going forward reading will actually multiply the XP against the player's current XPBoostMap.
- This means the XP shown in your journal's tooltips will be different depending on the starting skills of who is reading it - but the raw-total will never fluctuate.

Fix: Modded skills now can be recorded again. :)
Fix: Issues with mods that change timed action speed should be fixed for good.
Added: A Gained XP counter in the skills menu - this shows the value of XP earned after character creation and what should be transcribed.
Added: Tooltip warning on journals for 'Use up XP' sandbox option.
[ ------ ]

[ 1/6/24 hotfix1 ]
Hotfix: Reading sandbox options properly.
Added: additional warning in tooltip to explain that XP is dependent on the person reading.
[ ------ ]

[ 1/6/24 hotfix2 ]
Hotfix: UltimateXPTweaker compatibility patch.
[ ------ ]

[ 1/6/24 hotfix3 ]
Hotfix: Fix issues with sandbox options not working, hide skills/recipes if sandbox doesn't allow them.
[ ------ ]

[ 1/9/24 hotfix4 ]
Fix: Edge case on the skills page.
Fix: Cannot read skills if the sandbox option is toggled off.
[ ------ ]

[ 1/19/24 ]
Fix: Recipes are now impacted by transcribe/read sandbox multipliers.
[ ------ ]

[ 5/18/24 ]
New: Tracks zombie and survivor kills, toggle via sandbox options. (0 to 100 %, default 0%)
Tweak: The sandbox options per skill category have been converted from true/false to (-1) to 100 %. -1 defaults the % to the general option.
Add: Logging for 'stop' reading events.
Fix: Allowing for modded skills to be disabled if the mod is removed.
[ ------ ]

[ 6/8/24 ]
Fix: Passive Skills setting default set back to 0 (Shouldn't have been -1).
[ ------ ]

[ 7/10/24 ]
Fix: Issue with transcribing Zombie/Survivor Kills across different journals.
Fix: Check for transcribing Survivor Kills in general.
[ ------ ]

[ 8/26/24 ]
Fix: Fitness/Weight conflict. The game will prevent gaining fitness XP if you're severely underweight - this caused issues where you could not recover your fitness back. Now you will need to regain some weight before continuing to read your journal.
Fix: Removed the 'All' option in transcribe.
Tweak/Fix: Changed how the recovery on kills is processed.
[ ------ ]

[ 8/26/24 HOTFIX 1 ]
Hotfix: Edge case with context overrides.
[ ------ ]

[ 12/23/24 ]
- Added % progress to reading/writing (MassCraxx)
- Changed `JournalCraft` sandbox option to `JournalCraftRecipe`
    - Takes a string and creates a recipe for crafting.
    - Leaving blank means journals can not be crafted.
- Added new option for mod-data support. Warning, this feature operates with a full overwrite.
- German Translation (credit to EagleFire).

B42:
 - Error Magnifier and Mod Update and Alert System are now hard required.
 - Sandbox options have been adjusted to match new categories of skills.
 - Writing is no longer a recipe.
[ ------ ]

[ 12/23/24 hotfix #1]
 - Fix issues with B41
[ ------ ]

[ 12/27/24 ]
B41: Fixed viewing the crafting recipe with mods that "fix" the crafting menu.
[ ------ ]

[ 12/27/24 #2 ]
B41: Fixed viewing the crafting recipe with mods that "fix" the crafting menu.
B42: Fixed Tags on Workshop page.
[ ------ ]

[ 1/12/25 ]
B42: Removed old conversion code from old journal type.
[ ------ ]

[ ALERT_CONFIG ]
link1 = Chuck's Kofi = https://steamcommunity.com/linkfilter/?u=https://ko-fi.com/chuckleberryfinn,
link2 = MassCraxx's Kofi = https://steamcommunity.com/linkfilter/?u=https://ko-fi.com/masscraxx,
link3 = Workshop = https://steamcommunity.com/id/Chuckleberry_Finn/myworkshopfiles/?appid=108600,
link4 = REPORT BUGS = https://chuckleberry-finn.github.io/issues/?repo=Skill-Recovery-Journal,
[ ------ ]

[ 1/24/25 ]
Fix tooltip render issue with fluid transferring.
Updated/fixed encodings for several languages.
[ ------ ]

[ 2/13/25 ]
Fixed Halotext bug caused by changes in B42.3.3
[ ------ ]

[ 2/16/25 ]
Added additional debug messages for recipe generation.
[ ------ ]

[ 6/27/25 ]
- Added checks for username to prevent/discourage sharing your Steam/Player accounts in order to cheat(???).
    (This affords prevention support to non-steam servers. This does not support local co-op.)
- Removed the decayed/conversion journal system.
    (This was for the transition period between how the journals recorded XP, see update from: 1/6/24)
[ ------ ]

[ 6/29/25 ]
- Added sandbox option to configure security-protections on journal use.
    1 = "Prevent Username/SteamID Mismatch"
    2 = "Only Prevent SteamID Mismatch"
    3 = "Don't Prevent Mismatches"
[ ------ ]


[ 8/15/25 ]
- Fixed B42 recipe learning issues.
Credit: anonpony1/pcgames3112.
[ ------ ]

[ 8/21/15 ]
- Fix issue allowing people to share kills/modData.
[ ------ ]

[ 8/25/25 ]
- Under the hood: Changed the update-check to a count-down (from a count-up).
   This should help avoid issues with timed-actions/craft-time changes being so fast it breaks the process.
[ ------ ]

[ 12/14/25 ]
- Add changes for 42.13 (by MassCraxx)
    - renaming lots of definitions, type in item def is now ItemType Tags, Traits and Professions are now constants and are used a bit differently
    - methods on character infos have moved like xpBoost info, some also got more convenient to use
    - free recipes from trait and profession now checked individually
    - fix getFreeLevelsFromTraitsAndProfession, now there can be 3 or more levels for 125% boost
    - fix recovery sandbox options, some category names have changed
    - fix lag on tooltips due to redundant overcalculation
    - re-add RecoverPassiveSkills as distinction from other PhysicalCategorySkills
    - use vanilla writing animation
[ ------ ]

[ 12/15/25 ]
- Add changes for 42.13 multiplayer (by MassCraxx)
    - move shared classes to shared space
    - send moddata changes made on write/read to server
    - (add light check for read/write)
    - sync with server on renaming journal, disable rename when not in inventory
[ ------ ]

[ 12/20/25 ]
- Restructure modData (by MassCraxx)
    - move all SRJ modData to unified table
    - sync only that table with server
    - general cleanup modData, remove legacy oldXp and background fix
[ ------ ]

[ 01/25/26 ]
- Changes for 42.13.2
- This update moves all manipulative actions to the server side.
    - transcription / read duration is now proportional to length of day set in sandbox vars.
    - read duration is now calculated the same way as transcription time, resulting in lower reading times compared to before
    - (passive) starting level for characters that existed before the mod was added will not be assumed to be 5, but is instead the current level of the character
    - tooltip on skill list now shows stored starting level
    - kills are now restored / recorded in chunks, just as xp
    - halo text percentage is now based on number of updates instead of processed xp, making it more linear and accurate
    - reading recipes may be a little slower
[ ------ ]

[ 01/27/26 ]
- fix localization in MP
- fix reading up to lvl 10
- improve kill recovery processing
- add twine to default recipe ingredients
- read and write are now handled by the same action
[ ------ ]

[ 01/28/26 ]
- fix derivation error for unix systems
- remove security check in single player
[ ------ ]

[ 02/10/26 ]
- Added custom mod-report for error magnifier.
   Includes useful info dump of mods, variables, sandbox-options, data.
- Fixed deduction and loose-XP info in skills window (SP only)
- Added some safety checks to the recipe sandbox option.
[ ------ ]

[ 03/09/26 ]
- Made it so the default functionality of the recipe is entirely a recipe-script.
   Script manipulation only occurs if the sandbox option for the recipe is not blank.
   This should avoid strange behaviors if you're not using a custom recipe.
- Tweaked the recipe to utilize items with the tags of "thread", "twine", "heavythread".
- Added B42.15 translations.
- Fixed errorMagnifier lookup for B42.15.

HotFix: B42.14 functionality restored.

WARNING: There's been alot of strange issues with Journals from before B42.12.
         We share the official recommendation of starting a new save with each new version of the game.
         If you wish to try your luck, at the very least craft a new journal and destroy the old one.
[ ------ ]

[ 3/25/26 ]
- B42.15 Json Translation.
[ ------ ]

[ 3/27/26 ]
- B42.15 Json Translation [hotfix]
  Fixed recipe name and item name use.
- Ran PZ-Translator v3.
[ ------ ]

[ 5/19/26 ]
Due to lack of reproducibility some extra measures were added to address the bugs reported:
- Transcribe-then-read XP exploit: server now syncs readXP state back to client after write completes.
  This should not be needed but there may be desync or delay between normal syncing.
- ReadXP table uses a local variable instead of itself, changes are applied after.
- Recipe chunk size now floors to a minimum of 1 - this should prevent infinite action loops in rare cases.
- Halotext progress percentage now capped at 100% visually.
- ModData copy moved to first action tick instead of initialization.
- Flat XP (addXpNoMultiplier) is now tracked separately and excluded from boost/unboost math during transcription.
   This should handle edge cases caused by other mods that add XP flatly, namely SOTO/More Traits.
- Custom recipe sandbox option has more safety checks to avoid invalid values.

Minor:
- Empty modData no longer marks a journal action tick as having changes.
- Kill restoration skips ticks after all kills are fully transferred (with other information still pending).
- SteamID is now assigned directly in identification checks.
- Illiterate feedback message used incorrect translation key.
[ ------ ]

[ 6/20/26 - HotFix 3 ]
- Fix: Strength/Fitness math issue introduced with the previous patch.
- More aggressive regex/sanity checks on the recipe option.
- Added incompatible mods to the mod.info

IT IS RECOMMENDED TO MAKE A NEW JOURNAL

HOTFIX 1: Fixed a typo in the recipe syntax check.
HOTFIX 2: Reworked the initialization for skills- slight revert to the old system, so data should be lost.
HOTFIX 3: Included a JSON paser used in Shops and Traders.
[ ------ ]

[ 7/7/26 ]
- Added a character-age check to the ledger system which was locking people out from their journals.
[ ------ ]