Skip to main content

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

Millie Squilly

191
Posts
13
Topics
61
Followers
30
Following
A member registered Jun 13, 2015 · View creator page →

Creator of

Recent community posts

Thank you! I have improved it!

(1 edit)

I have come up with a... sort of solution for drawing all the colour text at deck launch so that I don't have the "pop in after transition" issue

Essentially I've just put this function in my deck-level scripts to just cycle through all the cards and make them all draw on launch. Then I just call it from the "on view" of my starting card.

(removed, see below for better version)

This is kinda hacky (I didn't see an obvious way to check that the contraptions belong to the right prototype so I'm running it on any contraption) so if you have other contraptions with a redraw[] method that does something else this may not be good but it is working for my purposes!

(Apologies if there IS an obvious way to check which prototype a contraption belongs to and I'm just too eepy to figure it out right now)


Edit: better version, thanks IJ for the tip on picking the prototype name

on refreshcolourtext do
 each c in deck.cards
  each w in c.widgets
   if w.def.name="colourtext"
    w.redraw[]
   end
  end
 end
end

eggbug spotted!

This looks absolutely great! (thank you for the link haha)

Your art looks so cool, I hope you do more Decker things! :3

Colour image importing without needing to dive into the Listener is a handy one! Nice!

Hopefully the limitations aren't too much of an issue for you!

I think it does both, like it can be a card name or a URL!

Yes! If you select some text in a text field you can make it a link using the Text->Link menu option. For it to be clickable you'll have to set the field to "locked" in the widgets menu, so that it's not editible in interact mode.

Another tip is if you save out your deck using File->Properties and then "Export" it'll save in a "locked" version so readers can't see all the built-in menus and such.

Let me know if that helps!

(1 edit)

So I whipped up a version that uses volatiles, but it does indeed have the problem of, if you're transitioning between cards on a freshly opened deck, it doesn't draw the text in until the end of the transition, so it kind of "pops in". I've uploaded a quick example to show what I mean https://zine.milliesquilly.com/surprises/colourtextpopindemo.html

If there's something I'm missing here please let me know

Here's the new version of the contraption - I'm hestitant to replace the original since it's not a strict improvement, but if you're not using transitions or if you don't mind manually calling "view" on the contraption before the transition it does save on deck size

Edit: slightly updated version, did some experimenting and wasn't able to get manually calling "view" to work so I've exposed the redraw[] function itself. So if you want to use this version and need to refresh the contents before a transition (or whatever other fun things you're doing) you can call redraw[] on the widget to refresh it before your transition.

%%WGT0{"w":[{"name":"colourtext1","type":"contraption","size":[134,65],"pos":[145,125],"show":"transparent","def":"colourtext","widgets":{"canvas1":{"size":[134,65],"pattern":35},"field1":{"pos":[-186,154],"value":{"text":["Look at all this text, it comes in ","different fonts"," and it's red and transparent"],"font":["","menu",""],"arg":["","",""]}},"slider1":{"size":[116,25],"pos":[-52,149],"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.2,"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]},"slider1":{"type":"slider","size":[100,25],"pos":[-52,184],"interval":[0,47],"value":1,"style":"compact"}}}}}

Thanks, I have yet to get my head around "volatile" but I will experiment. I was hesitant to try because I wasn't sure whether it would play nice with transition functions, e.g. would it only call the "view" at the end of the transition?

I will experiment and see if I can get it working, since not having images saved in the deck files is probably nicer

(3 edits)

Ever wanted to be able to have text fields that are colours other than black or white, or indeed have white text on a transparent background?

ColourText can do that!


It's a pretty simple contraption, there's a field for rich text and a field for the desired colour (by decker palette index). It'll flow/wrap the text fine, but if you're resizing in widgets mode it won't update until you switch back to interact mode. It can't do the "editing in interact mode" thing like real text fields can nor does it have support for adding borders or being able to scroll. If you need those I'll say it's a challenge for the reader at the moment.

Give it a try though! Let me know if there's any obvious bugs or fixes I ought to do.

Edit: you may want to grab the updated version from the comments - it sets the internal canvas as "volatile" so that when you save your deck it doesn't include the image of text, thus saving on space. But it has the drawback of playing a bit funny with transition effects in a way that is workaround-able but requires some coding, so I'm leaving the original version here in case that's easier for you

%%WGT0{"w":[{"name":"colourtext1","type":"contraption","size":[134,65],"pos":[142,122],"show":"transparent","def":"colourtext","widgets":{"canvas1":{"size":[134,65],"image":"%%IMG2AIYAQQD/AJUjAQAOIwEADCMBAAkjAgABIwIABCMBAAIjAQAFIwEACSMBAA4jAQAIIwEAAiMBACgjAQAOIwEADCMBAAojAQACIwEABCMBAAIjAQAPIwEADiMBAAsjAQAoIwEABSMCAAMjAgACIwEAAiMBAAQjAgACIwMABCMCAAMjAQACIwEAAyMDAAEjAwACIwIAAiMDAAMjAwACIwIAAiMBAAMjAQABIwMABiMCAAEjAwAEIwIAAyMCAAIjAwABIwIAAyMCAAMjAwAJIwEABCMBAAIjAQABIwEAAiMBAAEjAQABIwEAByMBAAIjAQAHIwEAAiMBAAIjAQAEIwEAAiMBAAIjAQACIwEAASMBAAcjAQACIwEAAiMBAAIjAQABIwEAAyMBAAgjAQACIwEABCMBAAIjAQABIwEAAiMBAAEjAQACIwEAAiMBAAEjAQACIwEAASMBAAwjAQAEIwEAAiMBAAEjAQACIwEAASMCAAYjAwACIwEABSMDAAIjAQACIwEABCMBAAIjAQACIwEAAiMBAAIjAgAFIwEAAiMEAAMjAQAEIwEACCMBAAIjAQAEIwEABCMBAAIjAQABIwEAAiMBAAIjAQABIwQAAiMCAAojAQAEIwEAAiMBAAEjAQACIwEAASMBAAEjAQAEIwEAAiMBAAIjAQAEIwEAAiMBAAIjAQACIwEABCMBAAIjAQACIwEAAiMBAAQjAQAEIwEAAiMBAAUjAQABIwEAAyMBAAgjAQACIwEABCMBAAIjAQABIwEAAiMBAAEjAQACIwEAAiMBAAEjAQAHIwEACSMEAAIjAgADIwIAAiMBAAIjAQAEIwMAAyMBAAQjAwACIwEAAiMBAAUjAQABIwEAAiMBAAIjAQABIwMABiMBAAIjAgACIwEAAyMBAAMjAQACIwEABCMBAAMjAQAEIwIAAyMCAAIjAQACIwEAAiMBAAIjAgACIwMAXyMBAIQjAQDFIwIAASMCAAMjAwADIwMAHSMCAAcjAwAQIwIALSMBAAwjAgAFIwIABCMCAB8jAgAGIwIAEiMCABcjAQAfIwUAASMCAAEjBAACIwQAAyMEAAIjAgABIwIAAiMEAAIjBQACIwQABCMEAAMjBAACIwUAAiMEAAIjAwARIwEAFCMCAAEjAwAEIwIAAiMCAAEjAgACIwIABCMCAAMjAgACIwIAASMDAAMjAgACIwIAASMCAAIjAgACIwIABiMCAAMjAgACIwIAASMCAAIjAgACIwIAAiMCAAIjAQAEIwIAAiMDAAMjAwAVIwEAASMBAAIjAQADIwIAAiMCAAEjAgACIwIABCMCAAMjAgACIwIAASMCAAQjAgACIwIAASMCAAIjAgACIwIABiMCAAMjAgACIwIAASMCAAIjAgACIwIAAiMDAAgjAQABIwEAAiMBAAEjAQACIwEAFSMBAAEjAQACIwEAAyMCAAIjAgABIwIAAiMCAAQjAgADIwYAASMCAAQjBgABIwIAAiMCAAIjAgAGIwIAAyMCAAIjAgABIwIAAiMCAAIjAgADIwMABSMDAAEjAQACIwEAASMBAAIjAQAVIwEAASMBAAIjAQADIwIAAiMCAAEjAgACIwIABCMCAAMjAgAFIwIABCMCAAUjAgACIwIAAiMCAAYjAgADIwIAAiMCAAEjAgACIwIAAiMCAAQjAwADIwEAAiMBAAEjAQACIwEAASMBAAIjAQAVIwEAASMBAAIjAQADIwIAAiMCAAEjAgACIwIABCMCAAMjAgADIwEAASMCAAQjAgADIwEAASMCAAIjAgACIwIABiMCAAMjAgACIwIAASMCAAIjAgACIwIAAiMBAAIjAgAEIwMAASMBAAIjAQACIwMAHyMFAAEjAgACIwIABCMCAAQjBAACIwIABSMEAAIjAgACIwIAAyMCAAUjAgAEIwQAAiMCAAIjAgADIwIAAiMDAP8A/wBBIwEAAiMBAAIjAQAVIwEAECMBAAQjAQAwIwEAJSMBAAIjAQAVIwEAECMBAAQjAQAwIwEAISMCAAEjAwAEIwMAAyMBAAEjAgACIwIAAyMDAAQjAgACIwMAAyMDAAMjAwABIwEAASMCAAIjAgACIwMAAyMDAAEjAwADIwIAAiMBAAEjAgACIwIAAiMDAAIjAwAhIwEAAiMBAAQjAQAGIwIAAyMBAAIjAQABIwEAAiMBAAYjAQABIwEAAiMBAAEjAQACIwEABCMBAAIjAgAGIwEAASMBAAIjAQABIwEABCMBAAIjAQAEIwEAASMCAAMjAQACIwEAASMBAAIjAQACIwEAIiMBAAIjAQAFIwIABCMBAAQjBAABIwEAAiMBAAQjAwABIwEAAiMBAAEjAQACIwEABCMBAAIjAQAFIwMAASMBAAIjAQACIwIAAiMBAAIjAQACIwMAASMBAAQjBAABIwEAAiMBAAIjAQAiIwEAAiMBAAcjAQADIwEABCMBAAQjAQACIwEAAyMBAAIjAQABIwEAAiMBAAEjAQACIwEABCMBAAIjAQAEIwEAAiMBAAEjAQACIwEABCMBAAEjAQACIwEAASMBAAIjAQABIwEABCMBAAQjAQACIwEAAiMBACIjAQADIwEAAyMDAAQjAQAFIwIAAyMDAAQjAwABIwEAAiMBAAIjAwAFIwEAASMBAAUjAwABIwEAAiMBAAEjAwACIwMAAyMDAAEjAQAFIwIAAiMBAAIjAQADIwEAaiMBAIUjAQD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD8","pattern":35},"field1":{"pos":[-186,154],"value":{"text":["Look at all this text, it comes in ","different fonts"," and it's red and transparent"],"font":["","menu",""],"arg":["","",""]}}}}],"d":{"colourtext":{"name":"colourtext","size":[100,100],"resizable":1,"margin":[0,0,0,0],"description":"Like a text box, but with colour!","version":1,"script":"on get_colour do\n canvas1.pattern\nend\n\non set_colour x do\n canvas1.pattern: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 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","attributes":{"name":["value","colour"],"label":["Text","Colour (palette index)"],"type":["rich","number"]},"widgets":{"canvas1":{"type":"canvas","size":[100,100],"pos":[0,0],"locked":1,"show":"transparent","border":0,"scale":1},"field1":{"type":"field","size":[100,20],"pos":[-186,189]}}}}}

Oh dang! Happy Deckermas!

I was thrown off by having to use "take", since I'm more used to writing "get" for taking objects in these games. In general implementing the common synonyms may be handy (examine as well as look etc) as well as there's some common single letter abbreviations (like the directions IJ mentioned above but also like x for examine). I also noticed the mention of the door disappeared from the room description once I'd started doing things like using the hammer to break the window or the mirror - guessing this is an oversight?

Otherwise I'd second the feedback Internet Janitor mentioned. I'm guessing also there'll be some sort of "I don't know that word" messages for unknown commands in future?

Your "all about colour" deck was handy too, in particular the image importing code (and associated palette exporting functions and helpful links to dithering methods) was a useful reference!

Issue 23 is out! https://zine.milliesquilly.com/issue23.html

I ended up packing way too much stuff into it, but one thing that may interest people here is an attempt at writing a "how to make decker adventure games" tutorial.

This is great. And also horrifying!

This is super cute and I love the art style! Nice work!

I remember when I was writing the crossfade function in palettefade I was kind of trial-and-erroring it a bit in terms of seeing if white and black would come out as 0 and 1 or 32 and 47, since I was having to do pixel by pixel stuff when comparing the two images - worked fine in the end though. Good to know the internal logic!

I think this is a good tutorial. I appreciate the shoutout to palettefade. I may do some poking around later to make sure the col module routines play nice with how palettefade does things, I think they SHOULD but I can't check at the moment. The col module definitely looks handy!

I also think the explanation of the palette and how it's laid out is handy, since I have seen people get confused about how the patterns and colours relate. One thing that's been unclear to me is the difference between pattern 1 and pattern 47, since they're both solid black. The explanation of the difference between pattern 0 and 32 was handy, but I'm guessing it works a bit different since there's no "one is transparent and one isn't" difference with the blacks.

Another thing I found was handy was the explanation about how animated patterns work. I am wondering though, is it possible to use two colours in an animation sequence? The example just sets it to a solid colour, but you could do some simple colour animations if you could have it cycle.

So, there's not really any built-in vector graphics stuff as such, Decker is pretty bitmap based. But if you look at the doco for the canvas widget it's got built in functions for drawing a polygon, a line, etc. I'd think if you write code to use these to dynamically draw whatever shape you want scaled to whatever size is necessary you could essentially do some vector-type graphics this way. If you come up with a particularly clever or general-purpose way of doing it then you could even make it a contraption or module and release it for others to use! This would take some coding though

I do not (or at least not one that is up to date) but I have a blog where I use them (and also the page for my decker zine that sits on the same hosting account) so like I guess it's conceptually similar except different hosting and custom domains and such

aaaa thank you!!!

Finally got the chance to play through this properly. I like it, both in concept and execution!

I have a whole bunch.

zine of Millie already has its own thread but I've made like 22 issues haha. I'll go over the ones on my itch page below

JankyTunes:

For a jam last year I made a whole bunch of musical tools/toys

Janky Drum Machine was my first attempt, a pretty simple drum machine

Janky Synthesizer is a keyboard that generates the noises in real time with a bunch of things you can adjust with the waveform

Janky Sequencer takes the same synthesis engine and uses it in a sequencer, so you can program in tunes and such

JankyTunes: The Contraption is a version of Janky Sequencer that can be embedded inside other decks so you can use it for background music

and I Bring You Notes is a collection of tracks I wrote in Janky Sequencer packaged together as like an EP

Fun game things:

you tried to date me and it went poorly is a semiautobiographical visual novel

Deck(er) The Halls is a digital christmas card

Day, us-ex is a silly gag game referencing a popular immersive sim series

Get Out And Run Some Errands is a point and click game about having to leave the house

and Asteroid Run is an action game about flying a spaceship through an asteroid field

Helpful Decker Modules:

Typetext lets you have text appear in a field one character at a time, optionally with sound effects

PaletteFade is a series of functions for manipulating Decker palettes to create various effects, including fading to black and crossfading

Since in some corners of the internet 88x31 buttons are making a bit of a comeback I whipped up a couple for Decker, inspired by a classic. If you want to link to Decker on your retro web page, feel free to grab one of these.


I wonder if a persistent pinned post in these forums would help, as sort of a master list of previous jams as well as when the next one is scheduled. Once a jam is over it can be a bit hard to track down the link, I've found (unless I am missing something, which is entirely possible), so this could help newcomers be aware that there's jams on a regular schedule and also showcase the previous jams a bit.

I extremely love the visual styling going on here and I am intrigued by the characters, they are really good!

The Institute makes no specific claims as to the veracity or lack thereof of any views held by any given Fellow but advises caution regarding unconditional trust

Thanks so much! Next issue I think is gonna have to be less high-concept but I still have some Ideas, haha!

I've just put out issue 22! https://zine.milliesquilly.com/issue22.html

I used the path module and the follower to make an RPG town style menu!

I did just recently update the code in the deck, so it's possible that the previous version had some glitch in it? Or maybe it was the saved code? Anyway, glad it is working now! I am looking forward to seeing what you're using it for, and as I've said elsewhere please get in touch if you need help with like having JankyTunes autoplay or anything like that!

And another update to version 4, that adds a few new features

I just gave this a try and I wasn't able to reproduce it. I added deckstamp, stamped an image, deleted the deckstamp contraption, and then added a jankytunes contraption and it seems to be working as it should. Can you explain in detail what you mean by "when I open the JankyTunes contraption"?

Cats are capricious creatures! I managed to please the cat on my second attempt

I will probably update this thread with issue 22 and future issues if that is OK

I have one hint and it's "rpg town"

I don't think I've ever posted a thread about it here, but I've been making zine of millie for a while now, and I'm working on issue 22! Here is a link where you can find it all: https://zine.milliesquilly.com/

There is an example of overriding the navigation events to capture arrow keys and use them for movement with the sokoban example deck http://beyondloom.com/decker/goofs/sokoban.html

Oh cool, it was based on my experiment then, I hope it made sense!

This is really cool, thank you for the kind words in the acknowledgements!