https://mybadstudios.itch.io/mbs-core
MBSCore is the foundation on which I build absolutely all of my projects and normally I promote it based on that fact but I have had instances of people telling me they would have been happy enough to pay me literally 10 times what I am asking for MBSCore just for one of the components inside it: CML. It is for that reason that for a change,here on itch.io, I am focusing my attention on bringing CML to your attention... and then I just throw in a whole pile of extra goodies on top of it as added bonuses :D
The TLDR version:
Because the non-LTDR version exists (and you will see just how long a short version is when you look at the product page) I had to try and come up with a real TLDR summary for CML and that goes like this: XML on steroids only simpler, faster and easier with far more features.
The slightly longer "almost TLDR" version:
I already list all the stuff that makes CML so truly unmissable in my daily workflow, in great detail, on the product page so I won't bore you with repeating all those details here. Instead, I'll just tell you a quick origin and first use case story...
About 4 or 5 years ago I had a thought along the lines of "So what makes this thing so great?" and I answered myself "Well, if I understand it correctly, nothing, really. I bet I could do something like... actually let me shut up and just do it and see what happens". A day or two later I had the first version of CML up and running. Sure it was just a Read-Only version but hey, it worked... So the time had come to give it a spin and I decided to do so by upgrading my first and most successful asset to date, my dialogue system...
Now you have to understand that I made the dialogue system before there even WAS an Asset Store so the only place where people could find out about it was on the forum and then buy it from me via PayPal directly followed by me manually sending them the asset via email. Feedback on the forum led to more sales and that was how people learned about it. It was my first asset and was so successful that I made a net total of over $11,000 in my first year and this was without the asset store... Just doing it via email as I explained it above.
So I re-rewrote the system to use CML as the back end and when it was all over I could not believe what I had done.
It only took me about an hour to make the changes but the end results were:
1. My insanely rigid syntax rules where a comma or a tab in the wrong one's place would break the entire dialogue file was now replaced by a super forgiving syntax ...and not only one, but two flavours thereof... which you could mix and match into one file however you saw fit !!!
2. I made the kit infinitely more user friendly by now calling any function they choose rather than forcing them to create a specific function with a name I hard coded and then force them to funnel all their code through that one function's (sometimes) complex nested switch statements.
3. On top of that, where I used to force them to send exactly 3 parameters for every function they wanted to call, now I gave them the freedom to send anywhere from 0 to infinite parameters for each of the 0 to infinite number of functions they could call per turn. In addition to that I gave them the option of naming their scripted variables because, yeah, my dialogue engine now supported returning strong typed variables at runtime.
4. But most importantly of all... after making the dialogue files so much more user friendly and the syntax so much more forgiving... and after simplifying the means by which they could call custom functions with literally a near-infinite level of customise-able choices... the thing that stood out the most was that this new system was now 70% less code than the original version! And it now included multiple read and write options to boot!
Since that day I've not been able to work on a project without using CML
Absolutely everything I make runs on MBS Core and 98% of that functionality comes from the super easy to use mbsStateMachine system and CML. Once you've experienced CML you will understand what I mean when I say it will change the way you code forever.
Just imagine for a moment what I said earlier... It can generate typed variables at runtime. Considering the fact that CML is basically a virtual, in-memory database, it means that you have immediate access to any data you store therein (minus the SQL ) ... now factor in the last part of this ... You can save that entire database and every single last bit of data you are using in your game to disk with only a single line of code! When starting the game again you can load back every single last bit of your game's data and have it exactly as it was the second you closed the game the last time... all of that in 1 line of code. Now how is THAT for a changing the way you work?
From now on, just create or load a single CML file during your starting scene using this skeleton code as a starting point:
public class Inventory.cs : MonoBehaviour { static public CML Data; void Awake(){ Data = new CML(); Data.Load("data"); if (Data.Count == 0) { //insert first play settings here... } } void OnDestroy() => Data.Save("data"); }
...and that is that. You can now store all your game's data into Inventory.Data from anywhere in the game and have all your game's data automatically save itself and restore itself upon startup. CML has made life THIS easy while affording me bucket loads of options.
It has undergone years of updates and improvements since and, as recently as the start of this very month, it got upgraded yet again.
We are now on version 4.0
In closing
CML has changed my life and here on itch.io is literally the first time ever where I explain in this much detail why some people say CML alone is worth 10 times the price of the asset it comes bundled inside of. With 22 years of coding experience behind my name I have spent the last 4 or 5 years unable to do any work without including CML in it... Take a moment and let that fact really sink in.
So to all of you I say, go read the product page, make sure you have coffee before you do so... then be prepared to get excited about what I am placing before you!
Enjoy! :D