JSON and CSV Loader Nightly
This is the Nightly version of JSONLoader, this is effectively a preview of whats to come to JSONLoader (and CSVLoader).CHANGELOG
JSONLoader 3.0.0 Changelog
3.0.0-Nightly-0.0.5
- Fixed IceCube not loading correctly on boot (it used to check for the wrong depth.)
- Fixes
allJLDRCardsPublicfor automatic updating as cards are loaded. - Add Non-Debug logging for successful addition of cards.
- Fix potential loading issue due to versioning.
3.0.0-Nightly-0.0.4
- Fixed the Image Related Regexes provided under JSONLoaderV1's Card Object.
- Added Ability for Image Paths to be just the FileName, in this case we try to recursively search the Plugin Folder for the image.
- Added Compatibility Option for ensuring older JSONLoader Mods continue to work.
- Defaulted Verbose to False like it was meant to be.
- Updated README.
- Updated Default Routes for finding JSON's.
3.0.0-Nightly-0.0.3
- Implemented a JSON Schema Loader.
- Added another Level of Toggleable Logging.
- Adjusted some Level's colors and looks.
- MADE A FULL FLEDGED JSON LINTER.
- This takes our Schema created by WriteSchema, and the JSON passed in by whatever Utils a JSONLoader Version utilizes. Than with that cross references them and validates the JSON, including Syntax, and value validation.
- The Linter gives relatively in-depth feedback on how the error can be fixed, even more depth with "AdditionalInformation", "Summary", and "Debug" logging enabled.
- Keep in mind this Linter is NOT feature complete yet. But it's up to standards with what was needed for
JLDRor JSONLoaderV1.
- Implemented Utilities for ImageScanning in the class
ScanImages, with it we support Base64 images, and file images (With relative path support.) - Updated
FindFilesandLoadFilesto pass thePluginthrough the system to the relevant loaders. - Fixed Tooltip Disector to account for
|appearing within a Regex or Variable. - Implemented relatively full-fledged working
JLDRsupport, it may be rough around the edges, so if you find any bugs please report them in the Inscryption Modding discord. - Implemented a CardObject that handles passing
JLDRcards into the API viaCardManager.New(). - This Version marks the beginning of Nightly Releases for JSONLoader, updates will vary based on Maintainer Availability, but ideally faster than the main API that way you can test features in advance.
- Added Exclusion for
_examplein file loading for.jldr,.jldr2,.jldr3, and.csv. - Can now Log to the File as well, we have to do this specially because we Log with
Console.WriteLine()internally. - Officially Licensed the Code for JSONLoader Nightly.
3.0.0-Nightly-0.0.2
- Implemented Configuration for:
- JSON Loading Origination Path:
- "These paths are case insensitive, and determine where JSON Scripts may be sourced from in order to load. If your a mod maker shipping mods, make a 'plugins' folder in your mods folder, and put a folder in there called 'scripts', this is where your JSON scripts should reside. If you need another path, you can override this value with your mod, we'll provide a system for you to do so."
- CSV Loading Origination Path
- "These paths are case insensitive, and determine where CSV Sheets may be sourced from in order to load. If your a mod maker shipping mods, make a 'plugins' folder in your mods folder, and put a folder in there called 'sheets', this is where your CSV Sheets should reside. If you need another path, you can override this value with your mod, we'll provide a system for you to do so."
- Schema Save Path
- "This determines where JSON Schemas will be saved to as we create them, this path will be localized to the DLL's folder. You can use '../' to mean go up a folder."
- Show Verbose Logging
- "While this value is set to true, this API will show what is happening when its happening."
- Show Additional Information
- "While this value is set to true, this API will show a more in depth lense as to what went wrong, and try to help explain why its wrong with links to references."
- JSON Loading Origination Path:
- Implemented a File Finder based on the
JSON Loading Origination PathandCSV Loading Origination Path. - Implemented a Bare-Bones File Loader, this basically takes the Files which were found and passes them to the relevant sections of JSONLoader.
- Implemented a Full-Fledged JSON Schema Writer which can be expanded upon. Related Components:
- XML Parser; ReadDocumentationFile
- JSON_Schema; WriteSchema
- Tooltip_Parser; TooltipDisector
- Note with this one, the Tooltip Attributes attached to JSON Objects have their own Programming Language in a sense, I'll add the documentation to this versions README under
JSONLoader Maintainer Documentation.
- Note with this one, the Tooltip Attributes attached to JSON Objects have their own Programming Language in a sense, I'll add the documentation to this versions README under
- Added some Empty Classes which will be apart of the JSON Loading Process including a class setup for the purposes of Linting JSONs and another for Parsing JSONs.
- Added JSONLoaderV1 Support for the Card Object and the start of the handler for actually adding the Cards into the game.
- Revamped the ENTIRE README.md
- Possibly some other stuff I'm forgetting about.
3.0.0-Nightly-0.0.1
- Removed API Dlls from the Repository, migrate to TS-Nuget.
- Created the Basic Configuration for the JSON AND CSV Loader API.
- Created Colored Logging for the API using Cecil.ANSI_Utils. (yes while this does add 2 more dependencies, it's useful for color coding our mods logging, as well as formatting it.)
- Began the process of refactoring the system in which JSONLoader will operate with.
- JSONLoaderOld will be entirely rewritten by the time we're done with it.
JSONLoader 2.0.0 Changelog
2.7.0
- Integrate a new TS-Build.bat system to automate package creation for Thunderstore (Supporting runtimes for Windows, Linux, and Mac)
- Refactor Repository to be much nicer for someone wanting to work on it.
- Fix the usings in
Interpreter.csunder Configils to be all above the namespace. - Rework the Repositories Dependency System for purposes of Building and making sure we can depend without it going to the Thunderstore Package.
- Add a runner associated with the bat which automatically runs with the correct terminal system. (If your a MAC/LINUX user feel free to make a version of TS-Build.bat and I can hook it in!)
- Move Examples, Schemas, and anything package related to
Thunderstore-Package-Elements. - Rename class
Program.cstoPlugin.cs. - Upgraded BepInEx related Dependencies, and adopted
BepInEx.AssemblyPublicizer.MSBuild 0.4.3for publicizing dependency dlls. - Added a Authors section to the
.csprojlisting all contributors to the JSONLoader GitHub. - Fixed the
NoWarnXML Property, and made it universal. - Prevent NuGet packages from being outputted on Publish/Build, and prevent all dlls except from jsonloader from coming into the Publish Folder (Our TS-Build automatically handles dlls that need to be copied over).
- Change Frameworks to 4.7.2, adopt a proper RootNamespace.
- If
Privateis set to True on a dll it will copy into the build folder when doing a regular net build. - Believe that covers everything, apologies if anything got missed!
Overall this commit pretty much acts as a refactor of the base repository for a future refactor of the codebase (I'll toss a new branch up for it, plan to rebuild from semi-scratch)
For Thunderstore Packages for this game I'd advise using netframework4.7.2-win-x64-Release.zip or netframework4.7.2-win-x64-Debug.zip when Uploading.
Debug is basically a Prerelease and Release is a Release. With the setup if ReleaseMode is set to anything asides from Release it will be treated as Prerelease/Debug
When doing GitHub releases I'd advising taking all zips of the Prerelease or Release Net folder into the downloads section ^^
If you have any questions contact @thincreator3483 on discord.
Also this was tested fully locally to ensure everything worked, the only thing that doesn't is @JamesVeug's Export Utilities I'm not sure why its broken.
2.6.0
- Added JLDR2 support for regions
- Added JLDR2 support for power stats
- Added JLDR2 support for traits
- Added JLDR2 support for items
- Added JLDR2 support for bottled cards
- Moved exported JLDR2 content to Example folder
- Fixed exporting cards not exporting all details (including localization)
- Fixed localization not working on cards/sigils... etc
- Added more json support
- Can now embed textures in json using
base64:prefix - float, color, vector2, all Array types, private serialized fields and public properties
- Incorrectly named fields will now log to console and suggest the correct name
- Errors resulting from loading a .jldr2 file will show which file caused it now
- Fixed JSONLoader not loading anything else if 1 configil errors
- Can now embed textures in json using
- Configils
- Now supports localization (Abilities, Special Abilities and Stat Icons)
- Fixed a bug where configils will break if abilityBehaviour is not specified
- Fixed OnLoad and OnHealthLevel not working
- Fixed Behaviours not running when a card is attacked and killed
- Fixed Change Appearance not working
- New features added to the API
- Mods can now add custom variables to configils
- Mods can now add custom actions to configils
- Mods can now add file name extension exceptions (for example a mod can make jsonloader not load any files ending with "_theme.jldr2")
2.5.4
- made it so JSONLoader now loads files that end in "_example.jldr2"
- made it so JSONLoader now ignores the "Examples" folder instead of the whole JSONLoader folder
2.5.3
- fixed abilityLearnedDialogue
- rewrote buffCards (again) to make it cleaner and work faster
- added the changeAppearance field which has this format:
"changeAppearance": [{ "changePortrait": "portrait.png", "changeName": "Elder ([BaseCard.Info.displayedName])", "addDecals": [ "decal1.png", "decal2.png" ], "removeDecals": [ "decal3.png", "decal4.png" ] }] - added the OnDamageDirectly trigger which triggers when a card deals direct damage to the opponent, it has two variables [HitSlot] and [DamageAmount]
- added the [DeathSlot] variable to the OnPreKill and OnPreDeath triggers
- added a field called isPermanent to buffCards
- made buffCards and transformCards point the camera at the hand instead of the board if the card that they're modifying is in the hand
- added a function called SetVar which has this format: SetVar('function_name', 5) (currently gets resets after all actions caused by the current trigger have happened, but i will try to fix that later though)
- added support for comments in any jldr2 file, comments are to be used in this format:
//This changes the appearance of a card "changeAppearance": [{ "changePortrait": "portrait.png", //This changes the portrait of the card "changeName": "Elder ([BaseCard.Info.displayedName])", //This is just like evolve! "addDecals": [ "decal.png" ] //And last but not least i add a decal to the card here }] - fixed generated variables causing an error if one of their variables were null
- updated NCalcExtensions to the latest version
- made it so all fields in configils can be empty or only whitespace without it causing an error
- cleaned up some code
- rewrote the readme and some file names for better consistency
- updated the card names file, changelog and the configils documentation
Changes made by James in this Release <3
- fields in JSONLoader are no longer case sensitive and can be upper or lower case to avoid errors.
- Tribe file extensions now support tribe.jldr2 and tribes.jldr2 to avoid errors.
- Fixed reload and export hotkeys inverted.
- Fixed JSONLoader not loading cards with non-english characters.
2.5.2
- Fixed Emissions not working
- Fixed mods with a custom tribe failing to load
- Fixed cards overriden with JSON missing fields that aren't specified
- Fixed Configils breaking due to parameters not being parsed correctly
- Exposed hotkeys as configs to fit individual needs. (See config for more info)
- _example cards are ignored yet again (This wasn't meant to be removed)
2.5.1
- Fixed Encounters throwing errors when importing cards form mods
- Incorrectly named cards will now throw an error and suggest names of similarly named cards.
- Errors in .jldr2 files now log more information when they occur.
2.5.0
- Bumped API requirement to 2.18.2
- Added custom mask support (With example .jldr2 and .schema!)
- Added custom language support (With example .jldr2 and .schema!)
- Added translation support for cards using displayName and description.
- Added support for overriding existing encounters
- Added hotkey to export all compatible content to .jldr2 (Left Control + Right Control + X)
- Added config to enable verbose logging to help debugging
- Added Tribe .jldr2 example
- Reduced the amount of times JSONLoader looks for files when starting the game
- Moved Change notes from Readme to ChangeLog.md
- Updated 8 Fucking bears card example. Includes custom tribe example
2.4.5 (configil patchnotes)
- rewrote and cleaned up a ton of code
- added the triggers: OnPlayerStartOfTurn, OnOpponentStartOfTurn, OnPlayerEndOfTurn and OnOpponentEndOfTurn
- fixed retainMods removing the evolve sigil from the card because of some left over code from evolve
- added targetCard to the card object
- fixed a bug where the game would softlock when infused was not set in addAbilities
- fixed targetCard only working with singular variables and not with things like functions, this does mean that targetCard will now require variables to be encased in parentheses to enable NCalc
- fixed a bug where if you set one sigil to be infused in addAbilities that it would make all infused
- changed removeAbilities to now be a list in this format:
"removeAbilities": [{ "list": "", "name": "", "all": "" }] - added a new field to removeAbilities called "all", when this field is set to true all instances of a sigil will be removed from a card instead of just one (this also means that the default for removing sigils isn't removing all instances of that sigil anymore, but now just one)
- added a new field called "list" to both addAbilities and removeAbilities, this field can be set to any list and will add/remove any sigils from that list from the targeted card
- added a "damageSource" field to damageCards which functions like targetCard but changes what card the game will think the damage came from, this field can be set to "null" to have there be no damage source
- changed gemCost in activationCost to be gemsCost instead to be in line with the card jldr2's
- added a function called ListContains() which can be used to see if a list contains a certain object
- added a couple of general use functions to check if a card has a certain "modifier" called: HasAbility(card, ability), HasTribe(card, tribe), HasTrait(card, trait) and HasSpecialAbility(card, specialAbility)
- added a couple of functions to get the object of a specific type from it's name: Ability('GuidPlusName'), Tribe('GuidPlusName'), Trait('GuidPlusName') and SpecialAbility('GuidPlusName'). Here's an example of how you could use the Ability() function: (HasAbility([BaseCard], Ability('Submerge')))
(an object is basically just a container with information about something, so for example the object of a sigil contains things like: the name, the guid, the description, the metacategories etc.)
2.4.3
- Actually added the file now
2.4.2
- Readded an important file that i deleted because i thought it wasn't important :P
2.4.1
- Fixed the patchnotes
2.4.0 (configil patchnotes)
- Added a maxEnergy field to gainCurrency (coded by UwUMacaroniTime)
- Made configils run much faster and have better performance (coded by kelly betty)
- Fixed any errors relating to a sigil trying to access the card that it is on after it has died or has been removed from the board
- Fixed the passive trigger spamming the console and cards dying when their attack was set to 0 when using the passive trigger
- Fixed gainCurrency foils only being visual and not actually increasing the foil amount
- Added a [DamageAmount] variable to both OnStruck and OnDamage
- Fixed runOnCondition not working for sendMessage
- Added two new variables [card.TemporaryMods] and [card.AllAbilities]
2.3.0
- Added talking card support!
2.3.0
- Added talking card support!
2.2.4
- Added gramophone support
2.2.3
- Added encounter support
- Removed the [PlayerSlot()] and [OpponentSlot()] variable and replaced it with the GetSlot() function with this format: GetSlot(index, isOpponentSlot, fields) (fields is everything that you would have after the first dot of the original variable in single quotation marks)
- Fixed a ton more configil bugs
2.2.2
- Added tribe support
2.2.1
- Added card and sigil reloading and fixed a ton of bugs with configils
2.2.0
- Added API for adding cards
2.1.1
- Added configils (made by Lily#7394)
2.1.0
- Added starter deck support with help from Lily
2.0.1
- Fixed a defect with converting JLDR to JLDR2 as it relates to editing base game cards
- Base game cards are now edited directly instead of using the event. This fixes issues where copies of those cards still existed in other places but wouldn't get properly edited (example: Pack Rat).
2.0.0
- Rewritten to be compatible with API 2.0
JSONLoader 1.0.0 Changelog
1.7.2
- Added check for "_example" on the end of file name to remove example files from loading
1.7.1
- Fixed discrepancies in ancillary files
1.7.0
- Fixed error when assigning temple on custom cards
- Removed TestDeck to be released as an individual mods
- Support for customSpecialAbilities in API v1.12
- Support for mod manager with custom .jldr extension on card files
- cost changed to bloodCost in accordance with API
- Refactored JLUtils into clearer classes
- Removed redundant variables (evolve_evolutionName, etc.)
- Alphabetized Card Names.txt
- Made Enums.md more infomrative
v1.6.1
- Fixed error if abilities array is present but empty
v1.6.0
- Added support for adding custom abilities implemented by other mods
v1.5.3
- Changed default "metaCategories" to be an empty list
- Added ChangeLog.md
v1.5.0
- Compatability patch for InscryptionAPI v1.11
- Refactored Code:
- Error checking no longer uses exception handling to funciton
- Game will load default deck if the names in the config for testdeck don't exist
- baseHealth and metaCategories are handled before the call to NewCard.Add to avoid bloat in the function call
- Removed Evolve/Tail/IceCubeParams handling to utilise API's handling of those aspects instead
- Added ErrorUtil to better help with error logging
- Made use of new json parser to read in Evolve/Tail/IceCubeData from json objects
v1.4.0
- Changed json parser from Unity's JSONUtility to TinyJson
v1.3.11
- Fixed error with png check
v1.3.10
- Added check for textures being png files
v1.3.9
- Fixed bug where textures were being assigned wrong
v1.3.8
- Fixed bug where "altTexture", "pixelTexture" and "titleGraphic" were being set to "texture"
v1.3.6
- Fixed linking error from update v1.3.5
Refactored Code:
- Seperated EvolveData, TailData, and IceCubeData into their own files and gave them functions to handle their own generation and conversion to Param varients
- Added class CDUtils to seperate the data from card adding/editing funcitons
- seperated ExtensionUtils into it's own file
v1.3.5
- Compatablity patch for InscryptionAPI v1.10
- Refactored code:
- CardData has it's own file
- Dicts has it's own file
- EvolveData, TailData, and IceCubeData are now in their own file together
- JLUtils was created to host utility functions like assignment helpers and validity checks
v1.3.3
- updated error logging for user
v1.3.2
- Added ability to edit existing cards with the use of "fieldsToEdit" with example card OP-ossum.json
- Added better error logging for user
v1.2.1
- Compatablity patch for InscryptionAPI v1.8
v1.2.0
- Added validity check for TestDeck cards
- Added functionality for:
- EvolveParams via "evolve_evolutionName" & "evolve_turnsToEvolve"
- TailParams via "tail_cardName" & "tail_tailLostPortrait"
- IceCubeParams via "iceCube_creatureWithin"
- Patched LoadScreenManager.LoadGameData and ChapterSelectMenu_OnChapterConfirmed to facilitate above implementation
- Minor refactor of NewCard call
v1.1.1
- Added ability to use strings for the enum values on a card
- Added ability to add cards to starting deck using config file in order to test functionality
v1.0.1
- Fixed issue with hard coded file paths
v1.0.0
- Handles cards that don't use:
- EvolveParams
- TailParams
- IceCubeParams
