This was certainly helpful to me at least! I will have to keep this in mind for future projects, thank you!
Millie Squilly
Creator of
Recent community posts
(Edit: looks like ahmwma beat me to it with a reply, so hopefully the extra explanation is also helpful)
Hi!
So there's a few things you've got wrong here. I'll go through them in a way that hopefully explains it all.
The first is that Decker doesn't really have global variables in this way - i.e. a variable doesn't persist between scripts. But what does persist is values in widgets - so we can do it that way and make the widgets invisible with the "show none" option. Depending what you need to store, you'll use a different widget, in this case since it's just a true or false it's best to use a checkbox (i.e. a button with the style set to "checkbox"). Just put that somewhere on your card, name it accordingly, and make it invisible. Then you can refer to its value by using haveIceFish.value, or if you're in another script that's setting the value you can use like haveIceFish.value:1 or haveIceFish.value:0 (the colon is how we assign values in decker). If you want to access the tickbox from another card (e.g. I find it helpful to just have one card where I keep everything I'm using to store information like this) then you can go like cardname.widgets.haveIceFish.value to get the value from any card but for now we'll assume it's on the same card as the button for simplicity.
Next is the syntax around the "if" statements. The == sign isn't how we check for equality in Decker, generally we use = or ~ (which in most cases are the same but behave differently with regards to lists, for cases like this it's best to use ~ but there's details in the lil doco if you're curious) but in this case since it's a true/false we don't need to check equality at all, we can just do an if/else with the value. Also, an "if" statement has to have a matching "end" at the end so that we know which parts of the code fall under the if and which come after.
Finally, wait isn't a built-in function in decker. I'm guessing what you want is the sleep[] function, which needs a parameter. You can do like sleep[60] to have it wait 60 frames (i.e. 1 second) for example, or if you do sleep["play"] it'll wait until any sounds are finishing playing.
So overall, if you've set up a checkbox to store the "haveIceFish" value, then your code would look something like this. Hopefully this makes sense to you!
on click do play["sound2"] sleep["play"] if haveIceFish.value go["card3"] else go["card2"] end end
If you really do want to access external resources in Decker, then it is sort of possible, and you could look at The Forbidden Library for some examples, but with what you're doing there's also the problem of whatever you're accessing would need to be rendered in Decker - so like if it's a full blown interactive website you're trying to get to it's really only going to work as a separate link.
Decker doesn't have the ability to access any external resources, like websites. It also can't parse or render HTML. So it's somewhat more limited than Twine in that regard.
In general, all you can do is have a link to a website, using like go["https://itch.io/"], which just prompts the user and then opens the website separately in the browser. You can probably do more stuff if you use the "Danger Zone" features, which can allow for doing stuff like running arbitrary javascript that can pull in whatever, but that's probably not a good option if you're not an experienced coder (and I'd tend to argue it goes against the spirit of doing things 'in Decker').
So I guess the short answer is that what you are trying to do isn't really possible. What are you trying to achieve by embedding a website in Decker?
Wow, it's been a while but I have Issue 25 out now! https://zine.milliesquilly.com/issue25.html
This one's got an article about all the projects in the recent jam!
So the way you've done things is you've basically got two "link" handlers that both overwrite the same default handler and don't actually check what the link span is, so it's defaulting to the second alert since that's the most recent one that got put in. That's why it's not working, you instead want to check which span is clicked.
What you want is something like this:
on link x do if x~"link1" alert["ah!"] end if x~"link2" alert["ee!"] end end
So like, the logic is you have one link handler and then within that you check which one was clicked and do whatever accordingly.
I've put this in just the script for the field, that way you can have different ones in other fields.
Probably the best way to share it is to save out the deck as html and upload it somewhere - neocities is a good option for simple web hosting if you don't otherwise have something available.
In the meantime, if anyone wants to see this in action, just paste the code into the card script and make a canvas on screen named "canvas".
It's a cool effect that I can see people getting some use of - it could be a fun challenge to turn it into a module so it can be more easily reused, as described in the modules section of the doco. Or maybe as a contraption?
There is much going on here that I do not fully understand but it looks wild! And you have probably used JankyTunes more than anyone else (except me probably, lol).
If you want to have it so the jankytunes don't stop while the dialgoizer bits are running, there is a bit of code you can use to make that happen - here's a post I made about that https://micpp.itch.io/jankytunes-the-contraption/devlog/798364/version-4-new-fea...
Up to you whether that's a thing that's useful to you though, given the style it's totally legit if you prefer it as is! I am happy to help though if you want.
The aesthetic is wild I would be fascinated to learn what your process is for the art, since I'm guessing this isn't drawn in Decker, lol! The characters are so mean though, haha!
I did have some trouble with inadvertent double-clicking, I think because some of the clicking on people was triggered by a mouse-down event, whereas advancing text and such was triggered by a mouse-up event. So I'd click someone, immediately they'd go into a dialogue sequence, but if I released the button too slowly it would register as a click in dialogizer and I'd miss the first line of dialogue.
I think this is because the "click" event for a canvas runs on mouse-down, whereas for buttons and such it happens on a mouse-up. One way around this (which is how I've done it in my own stuff) would be instead of having the clicks handled by the canvas itself, to have a button of the same size as the canvas that handles the input. Then you also get the benefit of the mouse cursor changing to show that it's clickable - which may or may not be a desired feature, haha. There is also a "release" event on a canvas that might work too?
But yeah this is so wild and there's a cool range of puzzles going on here. Nice work!
This is a cute little choose your own adventure! Nice work and I hope you do more Decker things in future!
As a Decker tip, if you set the field widgets to "locked" in the widget menu, that'll mean people can't type in them when they're playing - it can give things a more polished feel if that's what you want. Also, if you use the File->Properties menu option you can save the deck out in a "locked" format where the menu bar doesn't show, which gives it more of a stand-alone game feeling.
Stop!! Hibari-Kun!! is a series I've heard of a fair bit but haven't checked out myself yet - I probably should give it a try, huh?
Aha, a game of spicy hot takes! I think I just lost this game in real life since I recently built a new gaming PC and then proceeded to put Windows on it :o
But then what is Decker for, if not disseminating spicy hot takes? Excellent! Although, since we're on itch.io I'm surprised it didn't get a mention as part of the steam/gog mix at the end haha ;)
It sounds like you understand moving fonts from one deck to another, but you're looking to bring a font in from outside Decker? As in like a regular Windows TTF or whatever font?
Fonts in Decker are kind of their own format, that's not really transferable/convertible from other formats. So unfortunately you can't really just import in from an existing font, you'd have to write some sort of conversion tool. And I think a lot of modern fonts are vector-based which doesn't quite work with Decker's pixel thing.
I know Internet Janitor did do some stuff with converting over some old Windows 3.1 era fonts into Decker, and they're at https://beyondloom.com/decker/goofs/msfonts.html
If you don't mind pixelling in a font manually though then there's the fontedit.deck in the examples folder.
Let me know if I'm totally off-base, if you're just looking to move fonts from another deck let me know and I'll see if I can find some doco on that.