Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Millie Squilly

410
Posts
18
Topics
113
Followers
57
Following
A member registered Jun 13, 2015 · View creator page →

Creator of

Recent community posts

As a heads up since I've seen a few people ask about it, if you're getting a  continuous clicking noise from Decker, that seems to be a bug in certain versions of SDL2. https://itch.io/t/5229926/decker-makes-constant-clicking-sound-on-one-of-my-comp...

Fixing it is likely up to your Linux distro in terms of updating to a newer version of SDL2 that fixes the bug, but in the meantime starting Decker from the command line with 'decker --no-audio' should disable audio and stop it bothering you at least.

This probably isn't the best place to ask me this, since that guide does have its own comments section, but it looks like it's due to this issue. https://itch.io/t/5229926/decker-makes-constant-clicking-sound-on-one-of-my-comp...

Short version: it is a bug in certain versions of SDL2. Fixing it may be up to your distro upgrading to a version that fixes the bug.

It looks like the freezing issue is fixed with the latest Decker version - so finally I can check this out! The demo songs sound really cool!!! This is great!

Decker community · Posted in font

So, Decker doesn't use standard Windows format fonts, it uses its own font format. So if you're hoping to add like times new roman into Decker for example, you may be out of luck. But there are extra fonts you can add into your deck, or you can make your own if you want!

In the examples folder in Decker, there's a deck called fonts.deck that has a lot of explanation about how fonts work, as well as having a bunch of extra fonts you can add. In order to add the included fonts to your own deck, you can drag the fonts.deck onto Decker while you have your own deck open, and it'll pop open the Font/DA Mover that lets you copy fonts from the deck into your own. If you open fonts.deck itself, you'll also find a Font Editor button, which you can use to create your own custom fonts.

If you're looking for more premade fonts than are included with fonts.deck and aren't keen on making your own, then you might want to check out Coral Nulla's port of the Not Jam Font Pack into Decker.

There's also a few extra fonts in the decker-fonts github as well as a while back IJ ported a bunch of old Windows 95 fonts into Decker.

Hopefully this makes sense.

It's not too hard to set up. If you drag the "brushes.deck" onto an open Decker window, it'll pop the Font/Deck Accessory Mover up. If you then add the "screenPrints" module to your deck, then that'll add some extra brushes to the toolbar that paint like half-tone patterns that you can use for dithering.

So this might help a bit, but basically there's two ways of setting the colour/pattern of text in a field. It sounds like what you're doing is using the "select a bunch of text and change it with the text menu" option, which yeah does seem to not affect newly added text. But you can also select the field in widget mode, go into the properties (double-click or widget -> properties) and then there's a "pattern" button. If you set the pattern or colour there, that becomes the default for that field, so when you're writing into it in interact mode it'll come up as the colour you want. Hopefully this helps / makes sense.

So for what it's worth it looks like the new version 1.58 adds some features to the custom brushes, and includes some extra brushes in the "brushes.deck" file that basically do this but make it work - so you can use a brush that paints a halftone pattern.

Worth noting this is pretty much obsoleted now since the new version supports coloured text fields natively. Although I guess the drop shadow one could still come in handy

(or you could just put one field behind the other offset up and to the left, and make the top field transparent)

waaaah thank you for the shoutout :3

I mean you could do that but you might have a better time compiling from source to get a native version. I've even made a helpful guide! https://micpp.itch.io/how-to-install-decker-on-linux

I whipped up a guide, if that helps. https://micpp.itch.io/how-to-install-decker-on-linux

I've seen this question come up every so often, so I thought I'd make a deck explaining how to install Decker from source on Linux. https://micpp.itch.io/how-to-install-decker-on-linux

I've had a thought about whether this could be achieved with custom brushes - like a brush that just draws a halftone pattern. I tried making a brush that just has a halftone pattern, and while you can kinda use it to stamp areas of dither, dragging with it makes the effect fall apart, and lining it up can be tricky. So it's not exactly a solution but let's call it an experiment.

You can try it yourself, by putting 

brush["ditherBrush" image["%%IMG0AAoACqqAVUCqgFVAqoBVQKqAVUCqgFVA"]]

into the listener.

Other thoughts I've had are whether an extra fill function would work - i.e. instead of filling every single pixel in the area it just fills half of them in the halftone pattern. This could probably be written as a function in a module maybe (i.e. pass it in an image and coordinates) but that's not as convenient as having it in the UI. But this might be easier to implement than reworking the way the patterns function? (Since the 1-bit nature of them may be difficult to change)

Hi! This is really impressive! I've dabbled a bit with audio myself but this feels a level above in terms of complexity.

Although for me it's crashing to desktop after a few seconds of playback - so it would be good to find out why that is, because if that's fixed it's potentially really useful.

Ahh I'm shy about my voice though haha but thank you!!!

(1 edit)

Hi,

So I think the issue is having the pf commands in the root of the script instead of inside an event. I think what's happening is that when palettefade runs, it likely refreshes all the stuff in the root level script, which then gets itself into a loop where it's calling itself over and over. I'm not fully sure myself of the logic of when these are called, generally except for like setting constants (like palettes and such) I put all my logic inside events.

If you put the commands inside the "timepass" event, so that they're only called when this event is called, does that help?


Edit: so I did an experiment with the unlocked version of your deck and this seems to fix things. Remove the setpalette and palettefade commands from the root of the script and put them inside "timepass" like this

on timepass do
 t.value:t.value+1
 if t.value=1           
  pf.setpalette[deck morningpalette]
 elseif t.value=2
  pf.palettefade[deck morningpalette noonpalette 60]
 elseif t.value=3
  pf.palettefade[deck noonpalette sunsetpalette 60]
 else
  pf.palettefade[deck sunsetpalette nightpalette 60]
 end
end

Yeah by all means, I'll look forward to your post!

I did actually record the voiceover as one continuous monologue in Audacity. I then cut it up into separate lines for importing into Decker. So if it sounded like a single monologue, it's because it was haha!

I'm a big fan of the revival of personal websites. It does have a "shouting into the void" vibe though, since adding like comments or chats or whatnot is kind of not quite a "by default" feature I guess.

Thanks so much for listening to my thoughts :3

This belief will serve you well

Issue 29 is out! One more issue before the season 3 finale! https://zine.milliesquilly.com/issue29.html

So basically you'd want to have counters for each result tracking each time they're picked - so like starting them all at 0 and then adding 1 each time the answer is picked. I like to use sliders for storing numeric values with a constrained range - since you know the maximum value possible is 5 as there's only 5 questions in the hypothetical you'd just need a range from 0 to 5.  You can put the sliders on a hidden card that the player won't ever see. Then let's say you have a button for each answer on a card and and you can put something like this in the "on click"

cardwithsliders.widgets.slider1.value: cardwithsliders.widgets.slider1.value + 1
go["question2"]

And then at the end you'd just need to check which slider has the highest value and go to an appropriate ending page. There may be a smarter way to do this but it's early here so I'd just go with like a bunch of if statements.

if (cardwithsliders.widgets.slider1.value > cardwithsliders.widgets.slider2.value) & 
   (cardwithsliders.widgets.slider1.value > cardwithsliders.widgets.slider3.value) &
   (cardwithsliders.widgets.slider1.value > cardwithsliders.widgets.slider4.value)
 go["ending1"]
elseif #all the other ways around
end

(apologies if any of my code is wonky, I'm just writing this off the top of my head haha)

You may not have much of a programming background but dabbling in stuff like this is a great way to learn! If you can work out the logic in a "do this then do that" and "if this then we do this, otherwise we do that" then it's just a matter of translating it into the syntax you need

Yeah I think as it is now you'd just have to replace the setPalette statements with paletteFade statements. I'm happy to help get it working if you have issues :)

You should try out the fade effect next time!

Oh this is so pretty and lovely! And you used palettefade, haha!

Hi! Just a heads up that I'd noticed a bug in my coloured text contraptions where the widgets that store the colour values are inadvertently clickable, which can change the colours around when you probably don't want that. It looks like it's making the cursor do funny things around the "Black Market Dealer" text on the "who" page, and probably other places. I've put updated versions in the contraptions bazaar if you want to fix it (or if it's easier you can just open the contraptions up and lock the fields)

This is a super cool looking project by the way and I intend to try it out in more detail - just wanted to let you know about the fix, and sorry for not noticing the issue in my contraptions sooner!

Hey, I realised while playing around with these for my next zine that since I'd left the hidden widgets that store the colour unlocked, it's possibly to inadvertently click them and change the colour. I've made updated versions of both contraptions that fix this (sorry I haven't included the anchor changes - but if you want to fix this in your own version you literally just need to open the contraption and lock the widgets)

Colour text:

%%WGT0{"w":[{"name":"colourtext1","type":"contraption","size":[100,100],"pos":[242,180],"show":"transparent","def":"colourtext","widgets":{"canvas1":{"pattern":35},"field1":{"value":"colour text"},"slider1":{"value":35}}}],"d":{"colourtext":{"name":"colourtext","size":[100,100],"resizable":1,"margin":[0,0,0,0],"description":"Like a text box, but with colour! With volatiles now. Exposes a redraw[] function if you need to refresh it manually for whatever reason.","version":1.3,"script":"on get_colour do\n slider1.value\nend\n\non set_colour x do\n slider1.value:x\n redraw[]\nend\n\non get_value do\n field1.value\nend\n\non set_value x do\n field1.value:x\n redraw[]\nend\n\non redraw do\n canvas1.clear[]\n canvas1.pattern:slider1.value\n size:canvas1.textsize[field1.value canvas1.size[0]-4]\n canvas1.text[field1.value 2,2,size]\nend\n\non view do\n redraw[]\nend\n\non get_redraw do\n redraw\nend","attributes":{"name":["value","colour"],"label":["Text","Colour (palette index)"],"type":["rich","number"]},"widgets":{"canvas1":{"type":"canvas","size":[100,100],"pos":[0,0],"locked":1,"volatile":1,"show":"transparent","border":0,"scale":1},"field1":{"type":"field","size":[100,20],"pos":[-186,189],"locked":1},"slider1":{"type":"slider","size":[100,25],"pos":[-52,184],"locked":1,"interval":[0,47],"value":1,"style":"compact"}}}}}

Shadow text

%%WGT0{"w":[{"name":"shadowtext1","type":"contraption","size":[100,100],"pos":[240,181],"show":"transparent","def":"shadowtext","widgets":{"canvas1":{"pattern":35},"field1":{"value":"Shadow text"},"slider1":{"value":35},"slider2":{"value":36}}}],"d":{"shadowtext":{"name":"shadowtext","size":[100,100],"resizable":1,"margin":[0,0,0,0],"description":"Colour text, with a drop shadow! Exposes a redraw[] function if you need to refresh it manually for whatever reason.","version":1.1,"script":"on get_colour do\n slider1.value\nend\n\non set_colour x do\n slider1.value:x\n redraw[]\nend\n\non get_shadow do\n slider2.value\nend\n\non set_shadow x do\n slider2.value:x\n redraw[]\nend\n\non get_value do\n field1.value\nend\n\non set_value x do\n field1.value:x\n redraw[]\nend\n\non redraw do\n canvas1.clear[]\n \n size:canvas1.textsize[field1.value canvas1.size[0]-4]\n canvas1.pattern:slider2.value\n canvas1.text[field1.value 3,3,size]\n canvas1.pattern:slider1.value\n canvas1.text[field1.value 2,2,size]\nend\n\non view do\n redraw[]\nend\n\non get_redraw do\n redraw\nend","attributes":{"name":["value","colour","shadow"],"label":["Text","Colour (palette index)","Shadow (palette index)"],"type":["rich","number","number"]},"widgets":{"canvas1":{"type":"canvas","size":[100,100],"pos":[0,0],"locked":1,"volatile":1,"show":"transparent","border":0,"scale":1},"field1":{"type":"field","size":[100,20],"pos":[-186,189],"locked":1},"slider1":{"type":"slider","size":[100,25],"pos":[-52,184],"locked":1,"interval":[0,47],"value":1,"style":"compact"},"slider2":{"type":"slider","size":[100,25],"pos":[65,184],"locked":1,"interval":[0,47],"value":1,"style":"compact"}}}}}

There's a few ways to make sure your bounding box is identical when drawing different variations of characters for VN sprites. When you make a selection you can use the "Tight Selection" option before copying, this constrains the borders to only be the actual image. If the only differences are e.g. in facial expression then this can work well. Another method is using the "snap to grid" option, when this is enabled your selection box will be snapped to the grid, which means it's easier to make it the same size every time. I've used both these methods when working on my own VNs, so I hope this makes sense.

Aha, thank you!

So I know that & and | work like a boolean AND and OR but is there anything that works like an XOR?

aww :3 hi thank you!

I figured out the trick it's just I can't bring myself to not be pro-worker

I think I got terminated due to being a unionization risk :v but seriously this is great!

this is so A Good Physical Vibe and I love it!

So the way Dialogizer works is it calls an "animate" event in the card once a frame when it's active. You've probably already got one set up to make puppeteer work properly. I think you'd just be able to add the zazz flipbook command to the "on animate" function and then it'll run while dialogizer is active.

Ooh, Palettefade mention! I hope you are going OK with it!

One thought: you've used buttons overlaid over text to make parts of the text clickable, but a neater way to do that might be to use hyperlinks.

By default a link just generates a "go" event to navigate to a card or external URL, but you can override the "link" handler in the field if you need them to do something more complex (e.g. going to a card with a transition or setting a variable)

Well, my idea is in progress. I think I've worked out how to do it after some false starts. Still will see how it turns out but I think it'll work. Mostly just need to find the time and energy to finish it.

One thing I will have is a chicken reference. 

Educational!

No worries, I'm happy to help!

This is great, I love the style and the vibe.

A few Decker technical notes: right now, the text is editable by the user (i.e. they can type different stuff in the text boxes), if you change the text fields to "locked" then that'll disable that and make things feel a bit more polished.

Also, if you tick a box in the "edit project" window in itch you can add a "fullscreen" button to the page, which can make things a bit easier for those of us with high screen resolutions.