Implemented a system for weighted randoming; basically certain options will be more rare than others. I’m going to have this affect Race rolling at a ratio of 1:2:3:4 for Alicorns, Unicorns, Pegasus and Earthies, respectively. I’m likely going to use this for skin color rolls when it comes to places like shelters or “the discount aisle” of Fluffmart. This should also make certain things like generating NPC Fluffies in Feral paths a lot easier.
I’ve used CSS colors as the base for Fluffy colors at the moment, and in the future I’m going to pare this list down, or at least add a lot of editing, so that springgreen gets renamed to “Mint Green” or something. I think a lot of the CSS codes in that list correspond to the BBCode that this site uses, which is cool. There’s currently a lot of white/offwhites in that list, which don’t make for interesting Fluffies.
I think this might be the final capped “technical implementation” that I do for now, as I’m realizing that I get a lot of satisfaction from coding, and it’s keeping me from writing. Now that I can generate Fluffies, make their qualities referenceable, and have their pronouns easier to keep consistent, it’s time to actually get the story going more.
That being said, I’ve finished a test branch in the forest where the player confirms their Fluffy; I’ve also added custom naming.
Update 2:
Added a City Route (little bits, similar to the forest)
Prototyped a very basic vending machine interface. Need to add safeties for if the player doesn’t have any money, or to keep them from buying all the Sketty before they get a Fluffy.
Removed all “timed”/delayed reveal stuff for now until I can find a way to enable/disable them dynamically with a variable. It’s annoying to have to wait every time to test things; I’ll add them back in a polish pass.
Refactored all the colornames in CSS so that they have “friendly names”; “dodgerblue” is now “Dodger Blue”, but I still need to sort through the names which aren’t very contrast-friendly for text, like Medium Blue. Fixed with some CSS to work with contrasting backgrounds, I think. Adding filter: contrast(9999) greyscale(); to the span seems to have worked, but I need to remove some white-ish colors which seem boring.
Organized more widgets into proper folders so it’s more readable by people who aren’t understanding where stuff is laid out.
Developed macros for doing skill checks, and added a basic stat system to each Fluffy generated; four stats, Obedience, Impulsiveness, Caution, and Ignorance are paired together (Ob and Im, Ca and Ig); of each pair, the sum of them can be a maximum of 10. This way, if I do a skill check where Ob is the “primary stat”, it will roll a d20, and generate a bonus from the primary stat minus its partner. If I do an Ob check, it will be "(d20 result) + (Ob - Im). If a Fluffy has 7 Ob and 3 Im, the result of the bonus check will be +4 (because 7-3=4) and the final roll formula would be “d20 result + 4”. If I was doing an Im check with the same stats, the “bonus” would be -4, as (3-7=4). The formula would then be “d20 result + -4”. Rolling a 20 or 1 will be “critical successes” and fails, respectively, regardless of bonus; I think I might commit to making a natural 1 a Fluffy’s death, no matter what the roll is.
I’m going to force this to be the last technical system I develop. Right now I have:
Macros to generate Fluffies on the fly (mane/skin color, race, gender, sample name)
The ability to rename your Fluffy
Macros to dynamically replace words based on their pronouns, stats, and qualities (ie, mane color), instead of having to remember them
Macros to automatically recolor Mane and Skin colors
Macros to influence the weight of the colors/race options; the idea behind this is being able to change which colors/races are more likely to show up in rolls (colors mostly in situations where you’re more likely to see “bad colors”, races for things like Alicorns).
An inventory system (with items/item descriptions) with shops and a budget.
Being able to check for an item being purchased in order to unlock events (having a litterbox means getting a different option in a relevant event, or adding an event at all)
An “event pool” where I can write events, add them to specific days or conditions, and have them be rolled for.
A stat check/roll system with bonuses, depending on the Fluffy. Choice-based bonuses can also be added (“if you previous disciplined your pony, you get a +1 bonus to a roll needing obedience”)
Basically I’m not going to add anything else until the Human route is completed, at least. As much as I’d like to Smarty Scenario to be an Oregon Trail-esque simulator, building anything toward that right now is going to be a distraction.
I have a story structure, and now it’s mostly just time to fill it out. My next major milestone is finishing every “Human gets a Fluffy” scenario (City, Forest, FluffMart, Shelter). Once the player has their Fluffy, the loop of “small actions on days 1-6 of a week, big event on day 7” begins, and that’s relatively straightforward.
It then becomes a matter of writing events and seeing how complicated it’ll be to write conditions based on whether you’ve seen/participated in other events. For instance, “Bad Poopies 1” event being seen would unlock “Bad Poopies 2”, but otherwise “Bad Poopies 2” wouldn’t be in the event pool.
The nice thing is that event writing is relatively straightforward when all I have to do is reference the systems I’ve already built, instead of trying to build them from scratch.
I’d like to also say, for any coder reading this: using DeepSeek and ChatGPT’s free models have been pretty instrumental in getting a basic idea of how JavaScript and Tweego, Sugarcube and Twine work. However, you still need to think critically in order to be able to test and get an idea of what’s going wrong. “Vibes coding” (mindlessly copying-pasting) isn’t going to get you anywhere if you don’t know when to change your questions or direction.
If I paid for an AI where I could add reference documentation for Twine/Sugarcube/Tweego, it’d probably be different, but in a lot of cases the AI is referencing wrong information, or making up its own interpretations of how Twine handles JavaScript.
Knowing from DnD experience, that is a terrible idea, especially if there’s rolls for stuff not closely related to death (such as determining if a fluffy obeys a direct order or not). What we do in DnD usually is have a critical confirm; a second d20 roll, which if it results in another 1, that’s a true critical failure, making 1 chance of of 400 instead of 1 out of 20. You can broaden the results of the critical confirm roll (including a result of 2, 3, etc.) if you want to lessen the 400 to more chances.
Both excellent AIs, I’m not questioning your choice. However, Grok 3 just came out last week, and I’ve been messing around with it; it’s a stellar AI. It’s not completely free, you’re limited to around 25 queries every two hours without paying (depending on server loads), but I’ve rarely hit that limit, and when I do hit it it resets in 5 to 15 minutes.
I’m mostly just trying to have good(ish) OpSec, and DeepSeek/GPT allow me to have anonymous or redirected emails as a username. Tying Fluffy stuff to my main Twitter or something I link a credit card to is a no-go for me.
I can understand what you’re getting at, but Twine both has a save system and a “back” button, which would undo the damage. This would mostly just be a joke, similar to how the Trails in the Sky games have unique “this chest is empty, you already checked it” dialog for every chest in the game. There wouldn’t be any kind of penalty for dying, unless I come up with some kind of hardcore/“one save” system in the future.
Sorry if I wasn’t clear! You don’t have to enter any information to use Grok. There is a login system (you can use a completely separate account, you don’t even have to use a X account) but you can also use Grok without logging in. The only difference if you don’t log in is that you won’t have the history of previous chats.
Even as a joke, and with saves/backing up solutions, 1 chance out of 20 of death on every roll still sounds way too much to me. It would be funny at first but it would get old very fast.
Makes sense; I’ll consider making 1 rolls some kind of rare occasion, in that case. Or well, tweak what I have for it. Maybe no “critical fails” for now.
Also, as a small update: I created a “Roll Test” page, which is accessible from Page 1 of the game. This is to make testing my Fluffy generation and Skill Check system a bit easier, but I figure I’d let players access it, too.
Horns and wings have been added to the Fluffy model, as well as some shadows on the head and snout. Also added a border of skincolor to the horn to keep it from disappearing in lighter manes.
[Later Edit]: Started the city scene/branch; need to figure out a way of making this branch a bit more unique than the Forest.
Didn’t have much time to work today, but added a Fluffy fertility stat; going to be weighing it appropriately depending on the situation (ie, you won’t find neutered Fluffies in the wild, but you might find naturally sterile ones). Added it to the roll test, and added a custom nametag to the tank art.
Also, hey, I forgot to make an update that I made some Fluffy art and animations for the Fluffy in a tank. The animation above being jerky is because of the GIF capture, not the animation itself. CSS is nutty.
The tank also auto-populates the name/race/fertility, and I’ll add gender, too.
Fixed CSS for things to “do it properly” this time.
I’m mostly realizing that I need to learn how to be more efficient by loading different sections that are reusable, rather than rewriting/reproducing a section 5 times. Variation text is kind of killer; for instance, meeting a Fluffy in a forest gives you 2 or 3 chances to meet a Fluffy, but all are identical right now in terms of how it happens. You’re just “re-rolling” color at that point, and I need to write a progression of events instead.
But yeah, we’re chugging. Getting closer to finishing Forest and Fluffmart - in order to finish Fluffmart, do the Shelter path and finish city/forest, I’m going to need to figure out how to dynamically add/remove possibilities from arrays, weigh them differently, or just reference different arrays entirely depending on locale. The idea is to have different colors of Fluffies be more rare in places like the Shelter, Forest, City, so it isn’t just a matter of “fuck that, let’s never go to Fluffmart and pay money ever.”
Spent a bit of time refining the Forest today. I also introduced five “flavors” of Fluffies, which will interface with their statistics: basically, I wanted a personality that wasn’t influenced by their Obedience, Caution, Impulsiveness or Ignorance stats. I figure this will make things a bit more varied, but potentially (well, for sure) will create more work and quintuple the writing, in some cases.
But oh well. I think it’ll be worth it, and if I think it’s not worth the trouble, it’s easy to take out. Now, to write more.
Thanks, that means a lot! There’s some messiness as I try to figure out what works and what doesn’t, but I’m looking to buckle down on the Human branch now. This “expansion” of the stats probably is not helping things and maybe won’t last, but I’m gonna see how it works out.
Added a new bit in the Forest for initial conversations with the Fluffy. I also realized that I couldn’t have a constant variable for the Fluffy’s name, if they weren’t going to pronounce Fluffspeak.
Basically the previous variable used to be $fluffyName = "Granite" and now it’s $fluffyName {"human": "Granite", "fluffy": "Gwanite"}; when I reference $fluffyName now, I reference $fluffyName.fluffy in Fluffy dialog passages, and $fluffyName.human in Human dialog sections.
My array for random Fluffy names now has the human and Fluffy pronunciations:
However, I’m still going to have to make a dynamic change for custom Fluffy names, where the initial variable set by the textbox is $fluffyName.human and then it’s dynamically modified (probably just the simple “W” and “L” replacement) for $fluffyName.fluffy. Either that, or I give the player two text boxes, and say “this will be how you pronounce it, and this is how your Fluffy will pronounce it.”